Skip to content

Commit bc2d49f

Browse files
committed
Added support for Delphi 12.3
1 parent 6fefaa3 commit bc2d49f

23 files changed

+1825
-4508
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
Thumbs.db
55
#ignore Delphi build directories
66
Android/
7+
Android64/
78
iOSDevice/
89
iOSDevice32/
910
iOSDevice64/

FastMath/Arm/Arm32/approx_32.S

+33-11
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,28 @@
1010
.text
1111
.align 4
1212
.include "../Arm32/macros_32.S"
13+
#if ANDROID
14+
.type _fast_sincos_scalar, %function
15+
.type _fast_sincos_vector2, %function
16+
.type _fast_sincos_vector3, %function
17+
.type _fast_sincos_vector4, %function
18+
.type _fast_exp_scalar, %function
19+
.type _fast_exp_vector2, %function
20+
.type _fast_exp_vector3, %function
21+
.type _fast_exp_vector4, %function
22+
.type _fast_ln_scalar, %function
23+
.type _fast_ln_vector2, %function
24+
.type _fast_ln_vector3, %function
25+
.type _fast_ln_vector4, %function
26+
.type _fast_log2_scalar, %function
27+
.type _fast_log2_vector2, %function
28+
.type _fast_log2_vector3, %function
29+
.type _fast_log2_vector4, %function
30+
.type _fast_exp2_scalar, %function
31+
.type _fast_exp2_vector2, %function
32+
.type _fast_exp2_vector3, %function
33+
.type _fast_exp2_vector4, %function
34+
#endif
1335
.globl _fast_sincos_scalar, _fast_sincos_vector2, _fast_sincos_vector3, _fast_sincos_vector4
1436
.globl _fast_exp_scalar, _fast_exp_vector2, _fast_exp_vector3, _fast_exp_vector4
1537
.globl _fast_ln_scalar, _fast_ln_vector2, _fast_ln_vector3, _fast_ln_vector4
@@ -124,7 +146,7 @@ _fast_sincos_vector2: // (const A: TVector2; out Sin, Cos: TVector2);
124146

125147
_fast_sincos_vector3: // (const A: TVector3; out Sin, Cos: TVector3);
126148
adr r3, SINCOS_FACTORS_Q
127-
fldmias r0, {s0-s2}
149+
vldmia.f32 r0, {s0-s2}
128150
vld1.32 {q8-q9}, [r3]! // (q8) FOPI
129151
// (q9) 1 (int)
130152
vld1.32 {q10-q11}, [r3]! // (q10) not 1 (int)
@@ -171,9 +193,9 @@ _fast_sincos_vector3: // (const A: TVector3; out Sin, Cos: TVector3);
171193
vneg.f32 q2, q8 // (q2) -YC
172194
vbsl.f32 q1, q0, q15 // if (SignMaskSin < 0) then Sin := -YS else Sin := YS
173195
vbsl.f32 q14, q8, q2 // if (SignMaskCos < 0) then Cos := -YC else Cos := YC
174-
fstmias r1, {s4-s6} // q1
196+
vstmia.f32 r1, {s4-s6} // q1
175197
vmov q0, q14
176-
fstmias r2, {s0-s2}
198+
vstmia.f32 r2, {s0-s2}
177199
bx lr
178200

179201
_fast_sincos_vector4: // (const A: TVector4; out Sin, Cos: TVector4);
@@ -312,7 +334,7 @@ _fast_exp_vector2: // (const A: TVector2; out Result: TVector2);
312334
_fast_exp_vector3: // (const A: TVector3; out Result: TVector3);
313335
vpush {q4-q6}
314336
adr r2, EXP_FACTORS_Q
315-
fldmias r0, {s0-s2}
337+
vldmia.f32 r0, {s0-s2}
316338
vld1.32 {q8-q9}, [r2]!
317339
vld1.32 {q10-q11}, [r2]!
318340
vld1.32 {q12-q13}, [r2]!
@@ -334,7 +356,7 @@ _fast_exp_vector3: // (const A: TVector3; out Result: TVector3);
334356
vmla.f32 q9, q2, q10 // F2+B*(F3+B*(F4+B*F5))
335357
vmla.f32 q8, q2, q9 // F1+B*(F2+B*(F3+B*(F4+B*F5)))
336358
vmul.f32 q0, q1, q8 // XU.S*(F1+B*(F2+B*(F3+B*(F4+B*F5))))
337-
fstmias r1, {s0-s2}
359+
vstmia.f32 r1, {s0-s2}
338360
vpop {q4-q6}
339361
bx lr
340362

@@ -452,7 +474,7 @@ _fast_ln_vector2: // (const A: TVector2; out Result: TVector2);
452474
_fast_ln_vector3: // (const A: TVector3; out Result: TVector3);
453475
vpush {q4-q5}
454476
adr r2, LN_FACTORS_Q
455-
fldmias r0, {s0-s2}
477+
vldmia.f32 r0, {s0-s2}
456478
vld1.32 {q8, q9}, [r2]!
457479
vld1.32 {q10, q11}, [r2]!
458480
vld1.32 {q12, q13}, [r2]!
@@ -477,7 +499,7 @@ _fast_ln_vector3: // (const A: TVector3; out Result: TVector3);
477499
vmla.f32 q4, q2, q3 // (F1*X+AddCst)+X2*((X-F2)+X2*(F4+F3*X))
478500
vmla.f32 q4, q12, q1 // (F1*X+AddCst)+X2*((X-F2)+X2*(F4+F3*X))+(F5*Exp)
479501

480-
fstmias r1, {s16-s18}
502+
vstmia.f32 r1, {s16-s18}
481503
vpop {q4-q5}
482504
bx lr
483505

@@ -574,7 +596,7 @@ _fast_log2_vector2: // (const A: TVector2; out Result: TVector2);
574596

575597
_fast_log2_vector3: // (const A: TVector3; out Result: TVector3);
576598
adr r2, LOG2_FACTORS_Q
577-
fldmias r0, {s0-s2}
599+
vldmia.f32 r0, {s0-s2}
578600
vld1.32 {q8-q9}, [r2]!
579601
vld1.32 {q10-q11}, [r2]!
580602
vld1.32 {q12-q13}, [r2]!
@@ -590,7 +612,7 @@ _fast_log2_vector3: // (const A: TVector3; out Result: TVector3);
590612
RECIPQ_LOW q3, q2 // 1/(F4+MX.S)
591613
vmls.f32 q8, q10, q3 // F1+(VX.I*F5)-(F2*MX.S)-(F3/(F4+MX.S))
592614
vmov q0, q8
593-
fstmias r1, {s0-s2}
615+
vstmia.f32 r1, {s0-s2}
594616
bx lr
595617

596618
_fast_log2_vector4: // (const A: TVector4; out Result: TVector4);
@@ -683,7 +705,7 @@ _fast_exp2_vector2: // (const A: TVector2; out Result: TVector2);
683705

684706
_fast_exp2_vector3: // (const A: TVector3; out Result: TVector3);
685707
adr r2, EXP2_FACTORS_Q
686-
fldmias r0, {s0-s2}
708+
vldmia.f32 r0, {s0-s2}
687709
vld1.32 {q8-q9}, [r2]!
688710
vld1.32 {q10-q11}, [r2]!
689711
vld1.32 {q12-q13}, [r2]
@@ -704,7 +726,7 @@ _fast_exp2_vector3: // (const A: TVector3; out Result: TVector3);
704726
vmul.f32 q0, q0, q13 // (1 shl 23) * (A+F1+F2/(F3-Z)-F4*Z)
705727
vcvt.s32.f32 q0, q0 // Trunc((1 shl 23) * (A+F1+F2/(F3-Z)-F4*Z))
706728

707-
fstmias r1, {s0-s2}
729+
vstmia.f32 r1, {s0-s2}
708730
bx lr
709731

710732
_fast_exp2_vector4: // (const A: TVector4; out Result: TVector4);

0 commit comments

Comments
 (0)