summaryrefslogtreecommitdiff
path: root/macho64
diff options
context:
space:
mode:
authorJohn van Groningen2015-09-24 11:40:01 +0000
committerJohn van Groningen2015-09-24 11:40:01 +0000
commit7d661e20f72e1746ab20a60ec9eb1b0ad4540150 (patch)
treecb6638f2f8ab528ee1241f0686cd4dca1e81909c /macho64
parentremove accidentally committed \ (diff)
Hack to avoid bugs in the Mach-O assembler and llvm assembler
Diffstat (limited to 'macho64')
-rw-r--r--macho64/aap.s110
1 files changed, 82 insertions, 28 deletions
diff --git a/macho64/aap.s b/macho64/aap.s
index 80183aa..482ae60 100644
--- a/macho64/aap.s
+++ b/macho64/aap.s
@@ -1,6 +1,10 @@
.intel_syntax noprefix
+ .macro jmp_short_opcode
+ .byte 0xeb
+ .endmacro
+
/* d0 = rax */
/* d1 = rbx */
/* d2 = r10 */
@@ -1430,12 +1434,26 @@ yet_args_needed_0_gc:
att_jmp yet_args_needed_0_gc_r
- .align 2
- sub r15,3
- jae L2
- jmp L1
+ .p2align 3
nop
- .align 2
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ jmp yet_args_needed_1_gc
+ .p2align 3
+ nop
+ nop
+ nop
+ nop
+ sub r15,3
+ jae build_node_2_gc_r
+ jmp_short_opcode
+ .byte -24
+ .p2align 3
.if PROFILE
nop
nop
@@ -1452,7 +1470,8 @@ yet_args_needed_0_gc:
.endif
yet_args_needed_1:
sub r15,3
- jb yet_args_needed_1_gc
+ jb yet_args_needed_1_gc_
+/* yet_args_needed_1_gc_ to avoid a bug in the Mach-O assembler */
yet_args_needed_1_gc_r:
mov qword ptr 16[rdi],rcx
mov rax,qword ptr [rdx]
@@ -1464,12 +1483,11 @@ yet_args_needed_1_gc_r:
add rdi,24
ret
-L1:
yet_args_needed_1_gc:
+yet_args_needed_1_gc_:
att_call collect_2
att_jmp yet_args_needed_1_gc_r
-L2:
build_node_2_gc_r:
mov qword ptr [rdi],rbx
mov qword ptr 8[rdi],rdx
@@ -1483,12 +1501,26 @@ build_node_2_gc:
att_jmp build_node_2_gc_r
- .align 2
- sub r15,5
- jae short L3
- jmp short L4
+ .p2align 3
nop
- .align 2
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ jmp build_node_3_gc
+ .p2align 3
+ nop
+ nop
+ nop
+ nop
+ sub r15,5
+ att_jae build_node_3_gc_r
+ jmp_short_opcode
+ .byte -24
+ .p2align 3
.if PROFILE
nop
nop
@@ -1523,7 +1555,6 @@ gc_r_22:
gc_22: att_call collect_2
att_jmp gc_r_22
-L3:
build_node_3_gc_r:
mov qword ptr [rdi],rbx
lea rbp,24[rdi]
@@ -1535,18 +1566,30 @@ build_node_3_gc_r:
add rdi,40
ret
-L4:
build_node_3_gc:
att_call collect_2
att_jmp build_node_3_gc_r
-
- .align 2
- sub r15,6
- jae L5
- jmp L6
+ .p2align 3
nop
- .align 2
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ jmp build_node_4_gc
+ .p2align 3
+ nop
+ nop
+ nop
+ nop
+ sub r15,6
+ jae build_node_4_gc_r
+ jmp_short_opcode
+ .byte -24
+ .p2align 3
.if PROFILE
nop
nop
@@ -1584,7 +1627,6 @@ gc_r_23:
gc_23: att_call collect_2
att_jmp gc_r_23
-L5:
build_node_4_gc_r:
mov qword ptr [rdi],rbx
lea rbp,24[rdi]
@@ -1599,18 +1641,31 @@ build_node_4_gc_r:
add rdi,48
ret
-L6:
build_node_4_gc:
att_call collect_2
att_jmp build_node_4_gc_r
- .align 2
- sub r15,7
- jae short L7
+ .p2align 3
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
jmp build_node_5_gc
+ .p2align 3
nop
- .align 2
+ nop
+ nop
+ nop
+ sub r15,7
+ jae build_node_5_gc_r
+ jmp_short_opcode
+ .byte -24
+ .p2align 3
.if PROFILE
nop
nop
@@ -1650,7 +1705,6 @@ gc_r_24:
gc_24: att_call collect_2
att_jmp gc_r_24
-L7:
build_node_5_gc_r:
mov qword ptr [rdi],rbx
lea rbp,24[rdi]