Skip to content

Commit a9aa02b

Browse files
committed
aarch64: Add more new GAS style defines
``` .global _start push: str x0,[sp,-8]! str x13,[sp,-8]! str x29,[sp,-8]! str lr,[sp,-8]! pop: ldr x0,[sp],8 ldr x1,[sp],8 ldr x13,[sp],8 ldr x29,[sp],8 ldr lr,[sp],8 cset: cset w0,lt cset w0,le cset w0,eq cset w0,ne cset w0,gt cset w0,ge load_literals: ldrsw x1,8 ldrsw x13,8 ldrsw x16,8 load_store_deref: ldr x0,[x13] str x0,[x13] ldr x0,[sp,16] ldr x0,[sp,32] ldr x0,[sp,40] ldr x0,[sp,40] ldr x1,[sp,16] ldr x1,[sp,24] ldr x1,[sp,32] ldr x2,[sp,16] ldr x2,[sp,24] ldr x3,[sp,16] ldr x3,[sp,16] ldr x8,[sp,16] ldr x8,[sp,24] ldr x8,[sp,32] ldr x8,[sp,40] ldr x8,[sp,48] moves: mov x0,x1 mov x0,x18 mov x0,sp mov x17,sp mov x29,sp mov sp,x17 mov sp,x29 add_immediates: add x13,x13,8 add x13,x29,-24 add x13,x29,-16 add x13,x29,-8 add x13,x29,16 add x13,x29,24 add x13,x29,32 add x13,x29,32 add sp,sp,8 add sp,sp,16 add sp,sp,24 add sp,sp,32 add sp,sp,40 arithmetic: sub x1,x1,x0 and x0,x0,x1 orr x0,x0,x1 cmp x0,x1 neg x0,x0 ``` aarch64-linux-gnu-as main.s -o main.o && aarch64-linux-gnu-ld main.o -o main && aarch64-linux-gnu-objdump -d --no-addresses -j .text main ``` main: file format elf64-littleaarch64 Disassembly of section .text: <push>: f81f8fe0 str x0, [sp, #-8]! f81f8fed str x13, [sp, #-8]! f81f8ffd str x29, [sp, #-8]! f81f8ffe str x30, [sp, #-8]! <pop>: f84087e0 ldr x0, [sp], oriansj#8 f84087e1 ldr x1, [sp], oriansj#8 f84087ed ldr x13, [sp], oriansj#8 f84087fd ldr x29, [sp], oriansj#8 f84087fe ldr x30, [sp], oriansj#8 <cset>: 1a9fa7e0 cset w0, lt // lt = tstop 1a9fc7e0 cset w0, le 1a9f17e0 cset w0, eq // eq = none 1a9f07e0 cset w0, ne // ne = any 1a9fd7e0 cset w0, gt 1a9fb7e0 cset w0, ge // ge = tcont <load_literals>: 98000041 ldrsw x1, <load_literals+0x8> 9800004d ldrsw x13, <load_store_deref> 98000050 ldrsw x16, <load_store_deref+0x4> <load_store_deref>: f94001a0 ldr x0, [x13] f90001a0 str x0, [x13] f9400be0 ldr x0, [sp, oriansj#16] f94013e0 ldr x0, [sp, oriansj#32] f94017e0 ldr x0, [sp, oriansj#40] f94017e0 ldr x0, [sp, oriansj#40] f9400be1 ldr x1, [sp, oriansj#16] f9400fe1 ldr x1, [sp, oriansj#24] f94013e1 ldr x1, [sp, oriansj#32] f9400be2 ldr x2, [sp, oriansj#16] f9400fe2 ldr x2, [sp, oriansj#24] f9400be3 ldr x3, [sp, oriansj#16] f9400be3 ldr x3, [sp, oriansj#16] f9400be8 ldr x8, [sp, oriansj#16] f9400fe8 ldr x8, [sp, oriansj#24] f94013e8 ldr x8, [sp, oriansj#32] f94017e8 ldr x8, [sp, oriansj#40] f9401be8 ldr x8, [sp, oriansj#48] <moves>: aa0103e0 mov x0, x1 aa1203e0 mov x0, x18 910003e0 mov x0, sp 910003f1 mov x17, sp 910003fd mov x29, sp 9100023f mov sp, x17 910003bf mov sp, x29 <add_immediates>: 910021ad add x13, x13, #0x8 d10063ad sub x13, x29, #0x18 d10043ad sub x13, x29, #0x10 d10023ad sub x13, x29, #0x8 910043ad add x13, x29, #0x10 910063ad add x13, x29, #0x18 910083ad add x13, x29, #0x20 910083ad add x13, x29, #0x20 910023ff add sp, sp, #0x8 910043ff add sp, sp, #0x10 910063ff add sp, sp, #0x18 910083ff add sp, sp, #0x20 9100a3ff add sp, sp, #0x28 <arithmetic>: cb000021 sub x1, x1, x0 8a010000 and x0, x0, x1 aa010000 orr x0, x0, x1 eb01001f cmp x0, x1 cb0003e0 neg x0, x0 ```
1 parent fdb3805 commit a9aa02b

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

aarch64/aarch64_defs.M1

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ DEFINE NULL 0000000000000000
2020
# Stack (x18 as SP, 64 bits per element)
2121
DEFINE PUSH_X0 408e1ff8
2222
DEFINE str_x0,[x18,-8]! 408e1ff8
23+
DEFINE str_x0,[sp,-8]! e08f1ff8
2324
DEFINE PUSH_X1 418e1ff8
2425
DEFINE str_x1,[x18,-8]! 418e1ff8
2526
DEFINE PUSH_X13 4d8e1ff8 # str x13, [x18,-8]!
2627
DEFINE str_x13,[x18,-8]! 4d8e1ff8
28+
DEFINE str_x13,[sp,-8]! ed8f1ff8
2729
DEFINE PUSH_X14 4e8e1ff8 # str x14, [x18,-8]!
2830
DEFINE str_x14,[x18,-8]! 4e8e1ff8
2931
DEFINE PUSH_X15 4f8e1ff8 # str x15, [x18,-8]!
@@ -32,15 +34,20 @@ DEFINE PUSH_X16 508e1ff8
3234
DEFINE str_x16,[x18,-8]! 508e1ff8
3335
DEFINE PUSH_BP 518e1ff8
3436
DEFINE str_x17,[x18,-8]! 518e1ff8
37+
DEFINE str_x29,[sp,-8]! fd8f1ff8
3538
DEFINE PUSH_LR 5e8e1ff8
3639
DEFINE str_lr,[x18,-8]! 5e8e1ff8
40+
DEFINE str_lr,[sp,-8]! fe8f1ff8
3741

3842
DEFINE POP_X0 408640f8
3943
DEFINE ldr_x0,[x18],8 408640f8
44+
DEFINE ldr_x0,[sp],8 e08740f8
4045
DEFINE POP_X1 418640f8
4146
DEFINE ldr_x1,[x18],8 418640f8
47+
DEFINE ldr_x1,[sp],8 e18740f8
4248
DEFINE POP_X13 4d8640f8 # ldr x13, [x18],8
4349
DEFINE ldr_x13,[x18],8 4d8640f8
50+
DEFINE ldr_x13,[sp],8 ed8740f8
4451
DEFINE POP_X14 4e8640f8 # ldr x14, [x18],8
4552
DEFINE ldr_x14,[x18],8 4e8640f8
4653
DEFINE POP_X15 4f8640f8 # ldr x15, [x18],8
@@ -49,8 +56,10 @@ DEFINE POP_X16 508640f8
4956
DEFINE ldr_x16,[x18],8 508640f8
5057
DEFINE POP_BP 518640f8
5158
DEFINE ldr_x17,[x18],8 518640f8
59+
DEFINE ldr_x29,[sp],8 fd8740f8
5260
DEFINE POP_LR 5e8640f8
5361
DEFINE ldr_lr,[x18],8 5e8640f8
62+
DEFINE ldr_lr,[sp],8 fe8740f8
5463

5564
DEFINE INIT_SP f2030091 # mov x18, sp
5665
DEFINE mov_x18,x17 f2030091
@@ -94,25 +103,36 @@ DEFINE b.hi_8 48000054
94103
DEFINE SKIP_32_DATA 02000014
95104
DEFINE b_8 02000014
96105

106+
# Cset
107+
DEFINE cset_w0,lt e0a79f1a
108+
DEFINE cset_w0,le e0c79f1a
109+
DEFINE cset_w0,eq e0179f1a
110+
DEFINE cset_w0,ne e0079f1a
111+
DEFINE cset_w0,gt e0d79f1a
112+
DEFINE cset_w0,ge e0b79f1a
97113

98114
# Load literals (PC-relative)
99115
DEFINE LOAD_W0_AHEAD 40000098
100116
DEFINE ldrsw_x0,8 40000098
101117
DEFINE LOAD_W1_AHEAD 41000018
102118
DEFINE ldr_w1,8 41000018
119+
DEFINE ldrsw_x1,8 41000098
103120
DEFINE LOAD_W2_AHEAD 42000018
104121
DEFINE ldr_w2,8 42000018
105122
DEFINE LOAD_W13_AHEAD 4d000018 ; ldr w13, 8
106123
DEFINE ldr_w13,8 4d000018
124+
DEFINE ldrsw_x13,8 4d000098
107125
DEFINE LOAD_W14_AHEAD 4e000018 ; ldr w14, 8
108126
DEFINE ldr_w14,8 4e000018
109127
DEFINE LOAD_W15_AHEAD 4f000018 ; ldr w15, 8
110128
DEFINE ldr_w15,8 4f000018
111129
DEFINE LOAD_W16_AHEAD 50000018
112130
DEFINE ldr_w16,8 50000018
131+
DEFINE ldrsw_x16,8 50000098
113132

114133

115134
# Load/store/dereference
135+
DEFINE ldr_x0,[x13] a00140f9
116136
DEFINE LDR_X0_[SP] 400240f9
117137
DEFINE ldr_x0,[x18] 400240f9
118138
DEFINE STR_X0_[X1] 200000f9
@@ -140,6 +160,23 @@ DEFINE ldrb_w0,[x0] 00004039
140160
DEFINE DEREF_X1_BYTE 21004039
141161
DEFINE ldrb_w1,[x1] 21004039
142162

163+
DEFINE str_x0,[x13] a00100f9
164+
DEFINE ldr_x13,[x13] ad0140f9
165+
DEFINE ldr_x0,[sp,16] e00b40f9
166+
DEFINE ldr_x0,[sp,32] e01340f9
167+
DEFINE ldr_x0,[sp,40] e01740f9
168+
DEFINE ldr_x1,[sp,16] e10b40f9
169+
DEFINE ldr_x1,[sp,24] e10f40f9
170+
DEFINE ldr_x1,[sp,32] e11340f9
171+
DEFINE ldr_x2,[sp,16] e20b40f9
172+
DEFINE ldr_x2,[sp,24] e20f40f9
173+
DEFINE ldr_x3,[sp,16] e30b40f9
174+
DEFINE ldr_x8,[sp,16] e80b40f9
175+
DEFINE ldr_x8,[sp,24] e80f40f9
176+
DEFINE ldr_x8,[sp,32] e81340f9
177+
DEFINE ldr_x8,[sp,40] e81740f9
178+
DEFINE ldr_x8,[sp,48] e81b40f9
179+
143180

144181
# Move data between registers
145182
DEFINE SET_X0_FROM_BP e00311aa
@@ -151,7 +188,10 @@ DEFINE mov_x0,x14 e0030eaa
151188
DEFINE SET_X0_FROM_X15 e0030faa # mov x0, x15
152189
DEFINE mov_x0,x15 e0030faa
153190
DEFINE SET_X0_FROM_X16 e00310aa # mov x0, x16
191+
DEFINE mov_x0,x1 e00301aa
154192
DEFINE mov_x0,x16 e00310aa
193+
DEFINE mov_x0,x18 e00312aa
194+
DEFINE mov_x0,sp e0030091
155195
DEFINE SET_X1_FROM_X0 e10300aa
156196
DEFINE mov_x1,x0 e10300aa
157197
DEFINE SET_X1_FROM_X13 e1030daa # mov x1, x13
@@ -194,10 +234,14 @@ DEFINE SET_BP_FROM_X16 f10310aa
194234
DEFINE mov_x17,x16 f10310aa
195235
DEFINE SET_BP_FROM_SP f10312aa
196236
DEFINE mov_x17,x18 f10312aa
237+
DEFINE mov_x17,sp f1030091
238+
DEFINE mov_x29,sp fd030091
197239
DEFINE SET_SP_FROM_X13 f2030daa # mov x18, x13
198240
DEFINE mov_x18,x13 f2030daa
199241
DEFINE SET_SP_FROM_BP f20311aa # mov x18, x17
200242
DEFINE mov_x18,x17 f20311aa
243+
DEFINE mov_sp,x17 3f020091
244+
DEFINE mov_sp,x29 bf030091
201245

202246

203247
# Move constant to register
@@ -269,6 +313,7 @@ DEFINE SUB_X0_X0_X16 000010cb ; sub x0, x0, x16
269313
DEFINE sub_x0,x0,x16 000010cb
270314
DEFINE SUB_X0_X0_X1 000001cb
271315
DEFINE sub_x0,x0,x1 000001cb
316+
DEFINE sub_x1,x1,x0 210000cb
272317
DEFINE SUB_X1_X1_X14 21000ecb ; sub x1, x1, x14
273318
DEFINE sub_x1,x1,x14 21000ecb
274319
DEFINE SUB_X1_X1_X15 21000fcb ; sub x1, x1, x15
@@ -338,14 +383,18 @@ DEFINE MVN_X0 e00320aa
338383
DEFINE mvn_x0,x0 e00320aa
339384
DEFINE AND_X0_X1_X0 2000008a
340385
DEFINE and_x0,x1,x0 2000008a
386+
DEFINE and_x0,x0,x1 0000018a
341387
DEFINE OR_X0_X1_X0 200000aa
342388
DEFINE orr_x0,x1,x0 200000aa
389+
DEFINE orr_x0,x0,x1 000001aa
343390
DEFINE XOR_X0_X1_X0 000001ca
344391
DEFINE eor_x0,x0,x1 000001ca
345392

346393
DEFINE CMP_X1_X0 3f0000eb
347394
DEFINE cmp_x1,x0 3f0000eb
395+
DEFINE cmp_x0,x1 1f0001eb
348396

397+
DEFINE neg_x0,x0 e00300cb
349398

350399
# Syscall
351400
DEFINE SET_X8_TO_SYS_BRK c81a80d2
@@ -407,3 +456,17 @@ DEFINE mov_x8,40 080580d2
407456

408457
DEFINE SYSCALL 010000d4
409458
DEFINE svc_0 010000d4
459+
460+
# Add immediates
461+
DEFINE add_x13,x13,8 ad210091
462+
DEFINE add_x13,x29,-24 ad6300d1
463+
DEFINE add_x13,x29,-16 ad4300d1
464+
DEFINE add_x13,x29,-8 ad2300d1
465+
DEFINE add_x13,x29,16 ad430091
466+
DEFINE add_x13,x29,24 ad630091
467+
DEFINE add_x13,x29,32 ad830091
468+
DEFINE add_sp,sp,8 ff230091
469+
DEFINE add_sp,sp,16 ff430091
470+
DEFINE add_sp,sp,24 ff630091
471+
DEFINE add_sp,sp,32 ff830091
472+
DEFINE add_sp,sp,40 ffa30091

0 commit comments

Comments
 (0)