Skip to content

Commit a830923

Browse files
authored
Merge pull request #36 from vorner/new-asm
Update ASM routines from boost
2 parents bf92a18 + 708197d commit a830923

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+3259
-1424
lines changed

src/asm/jump_arm64_aapcs_elf_gas.S

+46-21
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright Edward Nevill + Oliver Kowalke 2015
2+
Copyright Edward Nevill + Oliver Kowalke 2015
33
Distributed under the Boost Software License, Version 1.0.
44
(See accompanying file LICENSE_1_0.txt or copy at
55
http://www.boost.org/LICENSE_1_0.txt)
@@ -11,76 +11,101 @@
1111
* ------------------------------------------------- *
1212
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
1313
* ------------------------------------------------- *
14-
* | x19 | x20 | x21 | x22 | *
14+
* | d8 | d9 | d10 | d11 | *
1515
* ------------------------------------------------- *
1616
* ------------------------------------------------- *
1717
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
1818
* ------------------------------------------------- *
1919
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
2020
* ------------------------------------------------- *
21-
* | x23 | x24 | x25 | x26 | *
21+
* | d12 | d13 | d14 | d15 | *
2222
* ------------------------------------------------- *
2323
* ------------------------------------------------- *
2424
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
2525
* ------------------------------------------------- *
2626
* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
2727
* ------------------------------------------------- *
28-
* | x27 | x28 | FP | LR | *
28+
* | x19 | x20 | x21 | x22 | *
2929
* ------------------------------------------------- *
3030
* ------------------------------------------------- *
3131
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
3232
* ------------------------------------------------- *
3333
* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
3434
* ------------------------------------------------- *
35+
* | x23 | x24 | x25 | x26 | *
36+
* ------------------------------------------------- *
37+
* ------------------------------------------------- *
38+
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
39+
* ------------------------------------------------- *
40+
* | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
41+
* ------------------------------------------------- *
42+
* | x27 | x28 | FP | LR | *
43+
* ------------------------------------------------- *
44+
* ------------------------------------------------- *
45+
* | 40 | 41 | 42 | 43 | | | *
46+
* ------------------------------------------------- *
47+
* | 0xa0| 0xa4| 0xa8| 0xac| | | *
48+
* ------------------------------------------------- *
3549
* | PC | align | | | *
3650
* ------------------------------------------------- *
3751
* *
3852
*******************************************************/
3953

40-
.cpu generic+fp+simd
4154
.text
4255
.align 2
4356
.global jump_fcontext
4457
.type jump_fcontext, %function
4558
jump_fcontext:
4659
# prepare stack for GP + FPU
47-
sub sp, sp, #0x70
60+
sub sp, sp, #0xb0
61+
62+
# save d8 - d15
63+
stp d8, d9, [sp, #0x00]
64+
stp d10, d11, [sp, #0x10]
65+
stp d12, d13, [sp, #0x20]
66+
stp d14, d15, [sp, #0x30]
4867

4968
# save x19-x30
50-
stp x19, x20, [sp, #0x00]
51-
stp x21, x22, [sp, #0x10]
52-
stp x23, x24, [sp, #0x20]
53-
stp x25, x26, [sp, #0x30]
54-
stp x27, x28, [sp, #0x40]
55-
stp x29, x30, [sp, #0x50]
69+
stp x19, x20, [sp, #0x40]
70+
stp x21, x22, [sp, #0x50]
71+
stp x23, x24, [sp, #0x60]
72+
stp x25, x26, [sp, #0x70]
73+
stp x27, x28, [sp, #0x80]
74+
stp x29, x30, [sp, #0x90]
5675

5776
# save LR as PC
58-
str x30, [sp, #0x60]
77+
str x30, [sp, #0xa0]
5978

6079
# store RSP (pointing to context-data) in X0
6180
mov x4, sp
6281

6382
# restore RSP (pointing to context-data) from X1
6483
mov sp, x0
6584

85+
# load d8 - d15
86+
ldp d8, d9, [sp, #0x00]
87+
ldp d10, d11, [sp, #0x10]
88+
ldp d12, d13, [sp, #0x20]
89+
ldp d14, d15, [sp, #0x30]
90+
6691
# load x19-x30
67-
ldp x19, x20, [sp, #0x00]
68-
ldp x21, x22, [sp, #0x10]
69-
ldp x23, x24, [sp, #0x20]
70-
ldp x25, x26, [sp, #0x30]
71-
ldp x27, x28, [sp, #0x40]
72-
ldp x29, x30, [sp, #0x50]
92+
ldp x19, x20, [sp, #0x40]
93+
ldp x21, x22, [sp, #0x50]
94+
ldp x23, x24, [sp, #0x60]
95+
ldp x25, x26, [sp, #0x70]
96+
ldp x27, x28, [sp, #0x80]
97+
ldp x29, x30, [sp, #0x90]
7398

7499
# return transfer_t from jump
75100
# pass transfer_t as first arg in context function
76101
# X0 == FCTX, X1 == DATA
77102
mov x0, x4
78103

79104
# load pc
80-
ldr x4, [sp, #0x60]
105+
ldr x4, [sp, #0xa0]
81106

82107
# restore stack from GP + FPU
83-
add sp, sp, #0x70
108+
add sp, sp, #0xb0
84109

85110
ret x4
86111
.size jump_fcontext,.-jump_fcontext

src/asm/jump_arm64_aapcs_macho_gas.S

+51-19
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,51 @@
1+
/*
2+
Copyright Edward Nevill + Oliver Kowalke 2015
3+
Distributed under the Boost Software License, Version 1.0.
4+
(See accompanying file LICENSE_1_0.txt or copy at
5+
http://www.boost.org/LICENSE_1_0.txt)
6+
*/
17
/*******************************************************
28
* *
39
* ------------------------------------------------- *
410
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
511
* ------------------------------------------------- *
612
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
713
* ------------------------------------------------- *
8-
* | x19 | x20 | x21 | x22 | *
14+
* | d8 | d9 | d10 | d11 | *
915
* ------------------------------------------------- *
1016
* ------------------------------------------------- *
1117
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
1218
* ------------------------------------------------- *
1319
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
1420
* ------------------------------------------------- *
15-
* | x23 | x24 | x25 | x26 | *
21+
* | d12 | d13 | d14 | d15 | *
1622
* ------------------------------------------------- *
1723
* ------------------------------------------------- *
1824
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
1925
* ------------------------------------------------- *
2026
* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
2127
* ------------------------------------------------- *
22-
* | x27 | x28 | FP | LR | *
28+
* | x19 | x20 | x21 | x22 | *
2329
* ------------------------------------------------- *
2430
* ------------------------------------------------- *
2531
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
2632
* ------------------------------------------------- *
2733
* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
2834
* ------------------------------------------------- *
35+
* | x23 | x24 | x25 | x26 | *
36+
* ------------------------------------------------- *
37+
* ------------------------------------------------- *
38+
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
39+
* ------------------------------------------------- *
40+
* | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
41+
* ------------------------------------------------- *
42+
* | x27 | x28 | FP | LR | *
43+
* ------------------------------------------------- *
44+
* ------------------------------------------------- *
45+
* | 40 | 41 | 42 | 43 | | | *
46+
* ------------------------------------------------- *
47+
* | 0xa0| 0xa4| 0xa8| 0xac| | | *
48+
* ------------------------------------------------- *
2949
* | PC | align | | | *
3050
* ------------------------------------------------- *
3151
* *
@@ -36,42 +56,54 @@
3656
.balign 16
3757
_jump_fcontext:
3858
; prepare stack for GP + FPU
39-
sub sp, sp, #0x70
59+
sub sp, sp, #0xb0
60+
61+
; save d8 - d15
62+
stp d8, d9, [sp, #0x00]
63+
stp d10, d11, [sp, #0x10]
64+
stp d12, d13, [sp, #0x20]
65+
stp d14, d15, [sp, #0x30]
4066

4167
; save x19-x30
42-
stp x19, x20, [sp, #0x00]
43-
stp x21, x22, [sp, #0x10]
44-
stp x23, x24, [sp, #0x20]
45-
stp x25, x26, [sp, #0x30]
46-
stp x27, x28, [sp, #0x40]
47-
stp fp, lr, [sp, #0x50]
68+
stp x19, x20, [sp, #0x40]
69+
stp x21, x22, [sp, #0x50]
70+
stp x23, x24, [sp, #0x60]
71+
stp x25, x26, [sp, #0x70]
72+
stp x27, x28, [sp, #0x80]
73+
stp fp, lr, [sp, #0x90]
4874

4975
; save LR as PC
50-
str lr, [sp, #0x60]
76+
str lr, [sp, #0xa0]
5177

5278
; store RSP (pointing to context-data) in X0
5379
mov x4, sp
5480

5581
; restore RSP (pointing to context-data) from X1
5682
mov sp, x0
5783

84+
; load d8 - d15
85+
ldp d8, d9, [sp, #0x00]
86+
ldp d10, d11, [sp, #0x10]
87+
ldp d12, d13, [sp, #0x20]
88+
ldp d14, d15, [sp, #0x30]
89+
5890
; load x19-x30
59-
ldp x19, x20, [sp, #0x00]
60-
ldp x21, x22, [sp, #0x10]
61-
ldp x23, x24, [sp, #0x20]
62-
ldp x25, x26, [sp, #0x30]
63-
ldp x27, x28, [sp, #0x40]
64-
ldp fp, lr, [sp, #0x50]
91+
ldp x19, x20, [sp, #0x40]
92+
ldp x21, x22, [sp, #0x50]
93+
ldp x23, x24, [sp, #0x60]
94+
ldp x25, x26, [sp, #0x70]
95+
ldp x27, x28, [sp, #0x80]
96+
ldp fp, lr, [sp, #0x90]
6597

6698
; return transfer_t from jump
6799
; pass transfer_t as first arg in context function
68100
; X0 == FCTX, X1 == DATA
69101
mov x0, x4
70102

71103
; load pc
72-
ldr x4, [sp, #0x60]
104+
ldr x4, [sp, #0xa0]
73105

74106
; restore stack from GP + FPU
75-
add sp, sp, #0x70
107+
add sp, sp, #0xb0
76108

77109
ret x4

src/asm/jump_arm_aapcs_elf_gas.S

+29-1
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,27 @@
1212
* ------------------------------------------------- *
1313
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
1414
* ------------------------------------------------- *
15-
* |hiddn| v1 | v2 | v3 | v4 | v5 | v6 | v7 | *
15+
* | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
1616
* ------------------------------------------------- *
1717
* ------------------------------------------------- *
1818
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
1919
* ------------------------------------------------- *
2020
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
2121
* ------------------------------------------------- *
22+
* | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
23+
* ------------------------------------------------- *
24+
* ------------------------------------------------- *
25+
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
26+
* ------------------------------------------------- *
27+
* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
28+
* ------------------------------------------------- *
29+
* |hiddn| v1 | v2 | v3 | v4 | v5 | v6 | v7 | *
30+
* ------------------------------------------------- *
31+
* ------------------------------------------------- *
32+
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
33+
* ------------------------------------------------- *
34+
* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
35+
* ------------------------------------------------- *
2236
* | v8 | lr | pc | FCTX| DATA| | *
2337
* ------------------------------------------------- *
2438
* *
@@ -34,12 +48,26 @@ jump_fcontext:
3448
@ save hidden,V1-V8,LR
3549
push {a1,v1-v8,lr}
3650

51+
@ prepare stack for FPU
52+
sub sp, sp, #64
53+
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
54+
@ save S16-S31
55+
vstmia sp, {d8-d15}
56+
#endif
57+
3758
@ store RSP (pointing to context-data) in A1
3859
mov a1, sp
3960

4061
@ restore RSP (pointing to context-data) from A2
4162
mov sp, a2
4263

64+
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
65+
@ restore S16-S31
66+
vldmia sp, {d8-d15}
67+
#endif
68+
@ prepare stack for FPU
69+
add sp, sp, #64
70+
4371
@ restore hidden,V1-V8,LR
4472
pop {a4,v1-v8,lr}
4573

src/asm/jump_arm_aapcs_macho_gas.S

+29-1
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,27 @@
1212
* ------------------------------------------------- *
1313
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
1414
* ------------------------------------------------- *
15-
* | sjlj|hiddn| v1 | v2 | v3 | v4 | v5 | v6 | *
15+
* | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
1616
* ------------------------------------------------- *
1717
* ------------------------------------------------- *
1818
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
1919
* ------------------------------------------------- *
2020
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
2121
* ------------------------------------------------- *
22+
* | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
23+
* ------------------------------------------------- *
24+
* ------------------------------------------------- *
25+
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
26+
* ------------------------------------------------- *
27+
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
28+
* ------------------------------------------------- *
29+
* | sjlj|hiddn| v1 | v2 | v3 | v4 | v5 | v6 | *
30+
* ------------------------------------------------- *
31+
* ------------------------------------------------- *
32+
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
33+
* ------------------------------------------------- *
34+
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
35+
* ------------------------------------------------- *
2236
* | v7 | v8 | lr | pc | FCTX| DATA| | *
2337
* ------------------------------------------------- *
2438
* *
@@ -42,12 +56,26 @@ _jump_fcontext:
4256
@ save SjLj handler
4357
push {v1}
4458

59+
@ prepare stack for FPU
60+
sub sp, sp, #64
61+
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
62+
@ save S16-S31
63+
vstmia sp, {d8-d15}
64+
#endif
65+
4566
@ store RSP (pointing to context-data) in A1
4667
mov a1, sp
4768

4869
@ restore RSP (pointing to context-data) from A2
4970
mov sp, a2
5071

72+
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
73+
@ restore S16-S31
74+
vldmia sp, {d8-d15}
75+
#endif
76+
@ prepare stack for FPU
77+
add sp, sp, #64
78+
5179
@ r#estore SjLj handler
5280
pop {v1}
5381
@ store SjLj handler in TLS

0 commit comments

Comments
 (0)