parent
79b0533df2
commit
a4b359672c
|
@ -12,13 +12,14 @@
|
||||||
#define PREFIX ""
|
#define PREFIX ""
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
|
||||||
#if defined(__x86_64__)
|
#if defined(__x86_64__)
|
||||||
|
|
||||||
asm("\t.global " PREFIX "fastjmp_set\n"
|
asm("\t.global " PREFIX "fastjmp_set\n"
|
||||||
"\t.global " PREFIX "fastjmp_jmp\n"
|
"\t.global " PREFIX "fastjmp_jmp\n"
|
||||||
"\t.text\n"
|
"\t.text\n"
|
||||||
"\t" PREFIX "fastjmp_set:"
|
"\t" PREFIX "fastjmp_set:" R"(
|
||||||
R"(
|
|
||||||
movq 0(%rsp), %rax
|
movq 0(%rsp), %rax
|
||||||
movq %rsp, %rdx # fixup stack pointer, so it doesn't include the call to fastjmp_set
|
movq %rsp, %rdx # fixup stack pointer, so it doesn't include the call to fastjmp_set
|
||||||
addq $8, %rdx
|
addq $8, %rdx
|
||||||
|
@ -33,8 +34,7 @@ asm("\t.global " PREFIX "fastjmp_set\n"
|
||||||
xorl %eax, %eax
|
xorl %eax, %eax
|
||||||
ret
|
ret
|
||||||
)"
|
)"
|
||||||
"\t" PREFIX "fastjmp_jmp:"
|
"\t" PREFIX "fastjmp_jmp:" R"(
|
||||||
R"(
|
|
||||||
movl %esi, %eax
|
movl %esi, %eax
|
||||||
movq 0(%rdi), %rdx # actually rip
|
movq 0(%rdi), %rdx # actually rip
|
||||||
movq 8(%rdi), %rbx
|
movq 8(%rdi), %rbx
|
||||||
|
@ -95,20 +95,20 @@ asm(
|
||||||
"\t.global " PREFIX "fastjmp_jmp\n"
|
"\t.global " PREFIX "fastjmp_jmp\n"
|
||||||
"\t.text\n"
|
"\t.text\n"
|
||||||
"\t" PREFIX "fastjmp_set:" R"(
|
"\t" PREFIX "fastjmp_set:" R"(
|
||||||
vstmia r0!, {d8-d15}
|
vstmia r0!, {d8-d15}
|
||||||
stmia r0!, {r4-r14}
|
stmia r0!, {r4-r14}
|
||||||
fmrx r1, fpscr
|
fmrx r1, fpscr
|
||||||
str r1, [r0]
|
str r1, [r0]
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
bx lr
|
bx lr
|
||||||
)"
|
)"
|
||||||
|
|
||||||
"\t" PREFIX "fastjmp_jmp:" R"(
|
"\t" PREFIX "fastjmp_jmp:" R"(
|
||||||
vldmia r0!, {d8-d15}
|
vldmia r0!, {d8-d15}
|
||||||
ldmia r0!, {r4-r14}
|
ldmia r0!, {r4-r14}
|
||||||
ldr r0, [r0]
|
ldr r0, [r0]
|
||||||
fmxr fpscr, r0
|
fmxr fpscr, r0
|
||||||
mov r0, r1
|
mov r0, r1
|
||||||
bx lr
|
bx lr
|
||||||
)");
|
)");
|
||||||
|
|
||||||
|
@ -121,65 +121,65 @@ asm(
|
||||||
"\t.text\n"
|
"\t.text\n"
|
||||||
"\t.align 16\n"
|
"\t.align 16\n"
|
||||||
"\t" PREFIX "fastjmp_set:" R"(
|
"\t" PREFIX "fastjmp_set:" R"(
|
||||||
sd sp, 0(a0)
|
sd sp, 0(a0)
|
||||||
sd s0, 8(a0)
|
sd s0, 8(a0)
|
||||||
sd s1, 16(a0)
|
sd s1, 16(a0)
|
||||||
sd s2, 24(a0)
|
sd s2, 24(a0)
|
||||||
sd s3, 32(a0)
|
sd s3, 32(a0)
|
||||||
sd s4, 40(a0)
|
sd s4, 40(a0)
|
||||||
sd s5, 48(a0)
|
sd s5, 48(a0)
|
||||||
sd s6, 56(a0)
|
sd s6, 56(a0)
|
||||||
sd s7, 64(a0)
|
sd s7, 64(a0)
|
||||||
sd s8, 72(a0)
|
sd s8, 72(a0)
|
||||||
sd s9, 80(a0)
|
sd s9, 80(a0)
|
||||||
sd s10, 88(a0)
|
sd s10, 88(a0)
|
||||||
sd s11, 96(a0)
|
sd s11, 96(a0)
|
||||||
fsd fs0, 104(a0)
|
fsd fs0, 104(a0)
|
||||||
fsd fs1, 112(a0)
|
fsd fs1, 112(a0)
|
||||||
fsd fs2, 120(a0)
|
fsd fs2, 120(a0)
|
||||||
fsd fs3, 128(a0)
|
fsd fs3, 128(a0)
|
||||||
fsd fs4, 136(a0)
|
fsd fs4, 136(a0)
|
||||||
fsd fs5, 144(a0)
|
fsd fs5, 144(a0)
|
||||||
fsd fs6, 152(a0)
|
fsd fs6, 152(a0)
|
||||||
fsd fs7, 160(a0)
|
fsd fs7, 160(a0)
|
||||||
fsd fs8, 168(a0)
|
fsd fs8, 168(a0)
|
||||||
fsd fs9, 176(a0)
|
fsd fs9, 176(a0)
|
||||||
fsd fs10, 184(a0)
|
fsd fs10, 184(a0)
|
||||||
fsd fs11, 192(a0)
|
fsd fs11, 192(a0)
|
||||||
sd ra, 208(a0)
|
sd ra, 208(a0)
|
||||||
li a0, 0
|
li a0, 0
|
||||||
jr ra
|
jr ra
|
||||||
)"
|
)"
|
||||||
".align 16\n"
|
".align 16\n"
|
||||||
"\t" PREFIX "fastjmp_jmp:" R"(
|
"\t" PREFIX "fastjmp_jmp:" R"(
|
||||||
ld ra, 208(a0)
|
ld ra, 208(a0)
|
||||||
fld fs11, 192(a0)
|
fld fs11, 192(a0)
|
||||||
fld fs10, 184(a0)
|
fld fs10, 184(a0)
|
||||||
fld fs9, 176(a0)
|
fld fs9, 176(a0)
|
||||||
fld fs8, 168(a0)
|
fld fs8, 168(a0)
|
||||||
fld fs7, 160(a0)
|
fld fs7, 160(a0)
|
||||||
fld fs6, 152(a0)
|
fld fs6, 152(a0)
|
||||||
fld fs5, 144(a0)
|
fld fs5, 144(a0)
|
||||||
fld fs4, 136(a0)
|
fld fs4, 136(a0)
|
||||||
fld fs3, 128(a0)
|
fld fs3, 128(a0)
|
||||||
fld fs2, 120(a0)
|
fld fs2, 120(a0)
|
||||||
fld fs1, 112(a0)
|
fld fs1, 112(a0)
|
||||||
fld fs0, 104(a0)
|
fld fs0, 104(a0)
|
||||||
ld s11, 96(a0)
|
ld s11, 96(a0)
|
||||||
ld s10, 88(a0)
|
ld s10, 88(a0)
|
||||||
ld s9, 80(a0)
|
ld s9, 80(a0)
|
||||||
ld s8, 72(a0)
|
ld s8, 72(a0)
|
||||||
ld s7, 64(a0)
|
ld s7, 64(a0)
|
||||||
ld s6, 56(a0)
|
ld s6, 56(a0)
|
||||||
ld s5, 48(a0)
|
ld s5, 48(a0)
|
||||||
ld s4, 40(a0)
|
ld s4, 40(a0)
|
||||||
ld s3, 32(a0)
|
ld s3, 32(a0)
|
||||||
ld s2, 24(a0)
|
ld s2, 24(a0)
|
||||||
ld s1, 16(a0)
|
ld s1, 16(a0)
|
||||||
ld s0, 8(a0)
|
ld s0, 8(a0)
|
||||||
ld sp, 0(a0)
|
ld sp, 0(a0)
|
||||||
mv a0, a1
|
mv a0, a1
|
||||||
jr ra
|
jr ra
|
||||||
)");
|
)");
|
||||||
|
|
||||||
|
|
||||||
|
@ -189,4 +189,6 @@ asm(
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
#endif // __WIN32
|
#endif // __WIN32
|
||||||
|
|
Loading…
Reference in New Issue