6
6
7
7
#define MACHINE x0
8
8
9
- #define TEMP1 x8
10
- #define TEMP1w w8
11
- #define TEMP2 x9
12
- #define TEMP2w w9
13
- #define TEMP3 x10
14
- #define TEMP3w w10
15
- #define TEMP4 x11
16
- #define TEMP4w w11
17
- #define TEMP5 x12
18
- #define TEMP5w w12
19
- #define TRACE x13
20
- #define INST_PC x14
21
- #define INST_ARGS x15
9
+ #define TEMP1 x9
10
+ #define TEMP1w w9
11
+ #define TEMP2 x10
12
+ #define TEMP2w w10
13
+ #define TEMP3 x11
14
+ #define TEMP3w w11
15
+ #define TEMP4 x12
16
+ #define TEMP4w w12
17
+ #define TEMP5 x13
18
+ #define TEMP5w w13
19
+ #define TRACE x19
20
+ #define INST_PC x20
21
+ #define INST_ARGS x21
22
22
23
- #define RD x16
24
- #define RS1 x17
25
- #define RS1w w17
26
- #define RS2 x18
27
- #define RS2w w18
28
- #define RS3 x19
29
- #define RS3w w19
30
- #define IMMEDIATE x20
31
- #define IMMEDIATEw w20
32
- #define FLAG x21
23
+ #define RD x22
24
+ #define RS1 x23
25
+ #define RS1w w23
26
+ #define RS2 x24
27
+ #define RS2w w24
28
+ #define RS3 x25
29
+ #define RS3w w25
30
+ #define IMMEDIATE x26
31
+ #define IMMEDIATEw w26
32
+ #define FLAG x27
33
33
34
- #define REGISTER_BASE x22
34
+ #define REGISTER_BASE x28
35
35
#define ZERO_VALUE xzr
36
36
37
37
#ifdef __APPLE__
41
41
#endif
42
42
43
43
#define PREPCALL \
44
- stp x0 , x8 , [ sp , - 96 ] ! SEP \
45
- stp x9 , x10 , [ sp , 16 ] SEP \
46
- stp x11 , x12 , [ sp , 32 ] SEP \
47
- stp x13 , x14 , [ sp , 48 ] SEP \
48
- stp x15 , x16 , [ sp , 64 ] SEP \
49
- stp x17 , x18 , [ sp , 80 ]
44
+ stp x0 , x9 , [ sp , - 48 ] ! SEP \
45
+ stp x10 , x11 , [ sp , 16 ] SEP \
46
+ stp x12 , x13 , [ sp , 32 ]
50
47
51
48
#define POSTCALL \
52
- ldp x17 , x18 , [ sp , 80 ] SEP \
53
- ldp x15 , x16 , [ sp , 64 ] SEP \
54
- ldp x13 , x14 , [ sp , 48 ] SEP \
55
- ldp x11 , x12 , [ sp , 32 ] SEP \
56
- ldp x9 , x10 , [ sp , 16 ] SEP \
57
- ldp x0 , x8 , [ sp ], 96
49
+ ldp x12 , x13 , [ sp , 32 ] SEP \
50
+ ldp x10 , x11 , [ sp , 16 ] SEP \
51
+ ldp x0 , x9 , [ sp ], 48
58
52
59
53
#define REGISTER_ADDRESS(r) [ REGISTER_BASE , r , lsl 3 ]
60
54
#define ZERO_ADDRESS [ REGISTER_BASE ]
63
57
#define PC_ADDRESS [ MACHINE , CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_PC ]
64
58
#define VERSION_ADDRESS [ MACHINE , CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_VERSION ]
65
59
66
- #define LOAD_VERSION(r) \
60
+ #define LOAD_VERSION(r , rw ) \
67
61
add r , MACHINE , CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_VERSION SEP \
68
- ldr r , [ r ]
62
+ ldr rw , [ r ]
69
63
70
64
#define WRITE_RD(v) \
71
65
str v , REGISTER_ADDRESS(RD) SEP \
90
84
asr TEMP1 , TEMP1 , 24 SEP \
91
85
ubfx FLAG , TEMP1 , 0 , 8 SEP \
92
86
asr TEMP1 , TEMP1 , 8 SEP \
93
- ldr x9 , [ INST_PC ] SEP \
87
+ ldr TEMP2 , [ INST_PC ] SEP \
94
88
add INST_PC , INST_PC , 8 SEP \
95
- br x9
89
+ br TEMP2
96
90
97
91
#define DECODE_R \
98
92
ubfx RS1 , TEMP1 , 0 , 8 SEP \
@@ -242,9 +236,12 @@ _ckb_vm_x64_execute:
242
236
.globl ckb_vm_x64_execute
243
237
ckb_vm_x64_execute:
244
238
#endif
245
- stp x19 , x20 , [ sp , - 48 ] !
239
+ stp x19 , x20 , [ sp , - 96 ] !
246
240
stp x21 , x22 , [ sp , 16 ]
247
- stp x23 , x30 , [ sp , 32 ]
241
+ stp x23 , x24 , [ sp , 32 ]
242
+ stp x25 , x26 , [ sp , 48 ]
243
+ stp x27 , x28 , [ sp , 64 ]
244
+ stp x29 , x30 , [ sp , 80 ]
248
245
add REGISTER_BASE , MACHINE , CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_REGISTERS
249
246
250
247
.CKB_VM_ASM_LABEL_OP_CUSTOM_TRACE_END:
@@ -494,8 +491,8 @@ ckb_vm_x64_execute:
494
491
str RS1 , PC_ADDRESS
495
492
b .prepare_trace
496
493
.CKB_VM_ASM_LABEL_OP_JALR:
497
- LOAD_VERSION(TEMP5)
498
- cmp TEMP5 , 1
494
+ LOAD_VERSION(TEMP5 , TEMP5w )
495
+ cmp TEMP5w , 1
499
496
bge .CKB_VM_ASM_LABEL_OP_JALR_VERSION1
500
497
b .CKB_VM_ASM_LABEL_OP_JALR_VERSION0
501
498
.CKB_VM_ASM_LABEL_OP_JALR_VERSION0:
@@ -517,8 +514,8 @@ ckb_vm_x64_execute:
517
514
str TEMP2 , PC_ADDRESS
518
515
b .prepare_trace
519
516
.CKB_VM_ASM_LABEL_OP_LB:
520
- LOAD_VERSION(TEMP5)
521
- cmp TEMP5 , 1
517
+ LOAD_VERSION(TEMP5 , TEMP5w )
518
+ cmp TEMP5w , 1
522
519
bge .CKB_VM_ASM_LABEL_OP_LB_VERSION1
523
520
b .CKB_VM_ASM_LABEL_OP_LB_VERSION0
524
521
.CKB_VM_ASM_LABEL_OP_LB_VERSION0:
@@ -538,8 +535,8 @@ ckb_vm_x64_execute:
538
535
WRITE_RD(RS1)
539
536
NEXT_INST
540
537
.CKB_VM_ASM_LABEL_OP_LBU:
541
- LOAD_VERSION(TEMP5)
542
- cmp TEMP5 , 1
538
+ LOAD_VERSION(TEMP5 , TEMP5w )
539
+ cmp TEMP5w , 1
543
540
bge .CKB_VM_ASM_LABEL_OP_LBU_VERSION1
544
541
b .CKB_VM_ASM_LABEL_OP_LBU_VERSION0
545
542
.CKB_VM_ASM_LABEL_OP_LBU_VERSION0:
@@ -559,8 +556,8 @@ ckb_vm_x64_execute:
559
556
WRITE_RD(RS1)
560
557
NEXT_INST
561
558
.CKB_VM_ASM_LABEL_OP_LD:
562
- LOAD_VERSION(TEMP5)
563
- cmp TEMP5 , 1
559
+ LOAD_VERSION(TEMP5 , TEMP5w )
560
+ cmp TEMP5w , 1
564
561
bge .CKB_VM_ASM_LABEL_OP_LD_VERSION1
565
562
b .CKB_VM_ASM_LABEL_OP_LD_VERSION0
566
563
.CKB_VM_ASM_LABEL_OP_LD_VERSION0:
@@ -580,8 +577,8 @@ ckb_vm_x64_execute:
580
577
WRITE_RD(RS1)
581
578
NEXT_INST
582
579
.CKB_VM_ASM_LABEL_OP_LH:
583
- LOAD_VERSION(TEMP5)
584
- cmp TEMP5 , 1
580
+ LOAD_VERSION(TEMP5 , TEMP5w )
581
+ cmp TEMP5w , 1
585
582
bge .CKB_VM_ASM_LABEL_OP_LH_VERSION1
586
583
b .CKB_VM_ASM_LABEL_OP_LH_VERSION0
587
584
.CKB_VM_ASM_LABEL_OP_LH_VERSION0:
@@ -601,8 +598,8 @@ ckb_vm_x64_execute:
601
598
WRITE_RD(RS1)
602
599
NEXT_INST
603
600
.CKB_VM_ASM_LABEL_OP_LHU:
604
- LOAD_VERSION(TEMP5)
605
- cmp TEMP5 , 1
601
+ LOAD_VERSION(TEMP5 , TEMP5w )
602
+ cmp TEMP5w , 1
606
603
bge .CKB_VM_ASM_LABEL_OP_LHU_VERSION1
607
604
b .CKB_VM_ASM_LABEL_OP_LHU_VERSION0
608
605
.CKB_VM_ASM_LABEL_OP_LHU_VERSION0:
@@ -632,8 +629,8 @@ ckb_vm_x64_execute:
632
629
WRITE_RD(IMMEDIATE)
633
630
NEXT_INST
634
631
.CKB_VM_ASM_LABEL_OP_LW:
635
- LOAD_VERSION(TEMP5)
636
- cmp TEMP5 , 1
632
+ LOAD_VERSION(TEMP5 , TEMP5w )
633
+ cmp TEMP5w , 1
637
634
bge .CKB_VM_ASM_LABEL_OP_LW_VERSION1
638
635
b .CKB_VM_ASM_LABEL_OP_LW_VERSION0
639
636
.CKB_VM_ASM_LABEL_OP_LW_VERSION0:
@@ -653,8 +650,8 @@ ckb_vm_x64_execute:
653
650
WRITE_RD(RS1)
654
651
NEXT_INST
655
652
.CKB_VM_ASM_LABEL_OP_LWU:
656
- LOAD_VERSION(TEMP5)
657
- cmp TEMP5 , 1
653
+ LOAD_VERSION(TEMP5 , TEMP5w )
654
+ cmp TEMP5w , 1
658
655
bge .CKB_VM_ASM_LABEL_OP_LWU_VERSION1
659
656
b .CKB_VM_ASM_LABEL_OP_LWU_VERSION0
660
657
.CKB_VM_ASM_LABEL_OP_LWU_VERSION0:
@@ -1612,7 +1609,10 @@ ckb_vm_x64_execute:
1612
1609
mov x0 , CKB_VM_ASM_RET_SLOWPATH
1613
1610
b .exit
1614
1611
.exit:
1615
- ldp x23 , x30 , [ sp , 32 ]
1612
+ ldp x29 , x30 , [ sp , 80 ]
1613
+ ldp x27 , x28 , [ sp , 64 ]
1614
+ ldp x25 , x26 , [ sp , 48 ]
1615
+ ldp x23 , x24 , [ sp , 32 ]
1616
1616
ldp x21 , x22 , [ sp , 16 ]
1617
- ldp x19 , x20 , [ sp ], 48
1617
+ ldp x19 , x20 , [ sp ], 96
1618
1618
ret
0 commit comments