# HG changeset patch # User cslag # Date 1437693490 -7200 # Node ID 03c516772c6585bb8cebe9825ba58434c204236f # Parent 450c4f06cb14c98111851a0132663ceb07c5f49a - consistency in filenames that have cpp logic .s -> .S - cosmetics diff -r 450c4f06cb14 -r 03c516772c65 dyncallback/dyncall_callback_arch.S --- a/dyncallback/dyncall_callback_arch.S Thu Jul 23 01:30:23 2015 +0200 +++ b/dyncallback/dyncall_callback_arch.S Fri Jul 24 01:18:10 2015 +0200 @@ -45,13 +45,13 @@ # elif defined(DC__Arch_ARM_ARM) # include "dyncall_callback_arm32_arm_apple.s" # elif defined(DC__Arch_ARM_THUMB) -# include "dyncall_callback_arm32_thumb_apple.s" +# include "dyncall_callback_arm32_thumb_apple.S" # elif defined(DC__Arch_AMD64) # include "dyncall_callback_x64.S" # elif defined(DC__Arch_Intel_x86) # include "dyncall_callback_x86.S" # elif defined(DC__Arch_ARM64) -# include "dyncall_callback_arm64.s" +# include "dyncall_callback_arm64.S" # else // e.g. PowerPC G5, which is PPC64, etc. # error Unsupported Architecture on Darwin/OS X. # endif @@ -67,13 +67,13 @@ # elif defined(DC__Arch_ARM_ARM) # include "dyncall_callback_arm32_arm_gas.s" # elif defined(DC__Arch_ARM_THUMB) -# include "dyncall_callback_arm32_thumb_gas.s" +# include "dyncall_callback_arm32_thumb_gas.S" # elif defined(DC__Arch_Sparc) # include "dyncall_callback_sparc32.s" # elif defined(DC__Arch_Sparcv9) # include "dyncall_callback_sparc64.s" # elif defined(DC__Arch_ARM64) -# include "dyncall_callback_arm64.s" +# include "dyncall_callback_arm64.S" # endif #endif diff -r 450c4f06cb14 -r 03c516772c65 dyncallback/dyncall_callback_arm32_thumb_apple.S --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dyncallback/dyncall_callback_arm32_thumb_apple.S Fri Jul 24 01:18:10 2015 +0200 @@ -0,0 +1,32 @@ +/* + + Package: dyncall + Library: dyncallback + File: dyncallback/dyncall_callback_arm32_thumb_apple.S + Description: Callback Thunk - Implementation for ARM32 (THUMB mode) + License: + + Copyright (c) 2007-2011 Daniel Adler , + Tassilo Philipp + + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +*/ + + +/* We can use the ARM mode callback code here, because the thunk switches */ +/* into ARM mode, the parameters passed use the same registers/stack spase */ +/* as the ARM mode, and the bx instruction switches back to THUMB mode, if */ +/* the function to be called has a "THUMB function address" (=address+1). */ +#include "dyncall_callback_arm32_arm_apple.s" + diff -r 450c4f06cb14 -r 03c516772c65 dyncallback/dyncall_callback_arm32_thumb_apple.s --- a/dyncallback/dyncall_callback_arm32_thumb_apple.s Thu Jul 23 01:30:23 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* - - Package: dyncall - Library: dyncallback - File: dyncallback/dyncall_callback_arm32_thumb_gas.s - Description: Callback Thunk - Implementation for ARM32 (THUMB mode) - License: - - Copyright (c) 2007-2011 Daniel Adler , - Tassilo Philipp - - Permission to use, copy, modify, and distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -*/ - - -/* We can use the ARM mode callback code here, because the thunk switches */ -/* into ARM mode, the parameters passed use the same registers/stack spase */ -/* as the ARM mode, and the bx instruction switches back to THUMB mode, if */ -/* the function to be called has a "THUMB function address" (=address+1). */ -#include "dyncall_callback_arm32_arm_apple.s" - diff -r 450c4f06cb14 -r 03c516772c65 dyncallback/dyncall_callback_arm32_thumb_gas.S --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dyncallback/dyncall_callback_arm32_thumb_gas.S Fri Jul 24 01:18:10 2015 +0200 @@ -0,0 +1,32 @@ +/* + + Package: dyncall + Library: dyncallback + File: dyncallback/dyncall_callback_arm32_thumb_gas.S + Description: Callback Thunk - Implementation for ARM32 (THUMB mode) + License: + + Copyright (c) 2007-2013 Daniel Adler , + Tassilo Philipp + + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +*/ + + +/* We can use the ARM mode callback code here, because the thunk switches */ +/* into ARM mode, the parameters passed use the same registers/stack space */ +/* as the ARM mode, and the bx instruction switches back to THUMB mode, if */ +/* the function to be called has a "THUMB function address" (=address+1). */ +#include "dyncall_callback_arm32_arm_gas.s" + diff -r 450c4f06cb14 -r 03c516772c65 dyncallback/dyncall_callback_arm32_thumb_gas.s --- a/dyncallback/dyncall_callback_arm32_thumb_gas.s Thu Jul 23 01:30:23 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* - - Package: dyncall - Library: dyncallback - File: dyncallback/dyncall_callback_arm32_thumb_gas.s - Description: Callback Thunk - Implementation for ARM32 (THUMB mode) - License: - - Copyright (c) 2007-2013 Daniel Adler , - Tassilo Philipp - - Permission to use, copy, modify, and distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -*/ - - -/* We can use the ARM mode callback code here, because the thunk switches */ -/* into ARM mode, the parameters passed use the same registers/stack space */ -/* as the ARM mode, and the bx instruction switches back to THUMB mode, if */ -/* the function to be called has a "THUMB function address" (=address+1). */ -#include "dyncall_callback_arm32_arm_gas.s" - diff -r 450c4f06cb14 -r 03c516772c65 dyncallback/dyncall_callback_arm64.S --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dyncallback/dyncall_callback_arm64.S Fri Jul 24 01:18:10 2015 +0200 @@ -0,0 +1,111 @@ +/* + + Package: dyncall + Library: dyncallback + File: dyncallback/dyncall_callback_arm64.S + Description: Callback Thunk - Implementation for ARM64 / ARMv8 / AAPCS64 + License: + + Copyright (c) 2015 Daniel Adler , + Tassilo Philipp + + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +*/ +// struct DCCallback +// type off size +// ---------|------|------ +// DCThunk | 0 | 32 +// handler | 32 | 8 +// userdata | 40 | 8 + +#include "../portasm/portasm-arm.S" + +.align 4 +GLOBAL_C(dcCallbackThunkEntry) +ENTRY_C(dcCallbackThunkEntry) + +// input: +// x9: DCCallback* pcb +// x0..x7 ?? GP regs +// d0..d7 ?? FP/SIMD regs +// sp... ?? arguments on stack +// +// locals: +// type off size +// ---------|------|------ +// Frame 0 16 +// DCArgs 16 168 +// DCValue 184 16 +// +// size 200 +// aligned 208 +// + +// locals: +// x10: sp +// x11: DCArgs* args + + mov x10, sp + stp x29, x30, [sp, #-208 ]! + mov x29, sp + + add x11, x29 , #16 + +// save integer registers + + stp x0, x1, [x11, #0 ] + stp x2, x3, [x11, #16] + stp x4, x5, [x11, #32] + stp x6, x7, [x11, #48] + + stp d0, d1, [x11, #64] + stp d2, d3, [x11, #80] + stp d4, d5, [x11, #96] + stp d6, d7, [x11, #112] + + eor x12, x12, x12 + stp x10,x12,[x11, #128] // sp=sp, i=0, f=0 + + str x12, [x11, #144] // s=0, reserved=0 + + +// call handler: +// args: +// x0: DCCallback* pcb +// x1: DCArgs* args +// x2: DCValue* result +// x3: void* userdata + + mov x0 , x9 + add x1 , x29 , #16 + add x2 , x29 , #184 + ldr x3 , [x9 , #40] + + ldr x11, [x9 , #32] + blr x11 + + and w0, w0, #255 + cmp w0, 'f' + b.eq .retf + cmp w0, 'd' + b.eq .retf + +.reti: + ldr x0, [x29, #184] + b .ret +.retf: + ldr d0, [x29, #184] +.ret: + ldp x29, x30, [sp], #208 + ret diff -r 450c4f06cb14 -r 03c516772c65 dyncallback/dyncall_callback_arm64.s --- a/dyncallback/dyncall_callback_arm64.s Thu Jul 23 01:30:23 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/* - - Package: dyncall - Library: dyncallback - File: dyncallback/dyncall_callback_arm64.s - Description: Callback Thunk - Implementation for ARM64 / ARMv8 / AAPCS64 - License: - - Copyright (c) 2015 Daniel Adler , - Tassilo Philipp - - Permission to use, copy, modify, and distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -*/ -// struct DCCallback -// type off size -// ---------|------|------ -// DCThunk | 0 | 32 -// handler | 32 | 8 -// userdata | 40 | 8 - -#include "../portasm/portasm-arm.S" - -.align 4 -GLOBAL_C(dcCallbackThunkEntry) -ENTRY_C(dcCallbackThunkEntry) - -// input: -// x9: DCCallback* pcb -// x0..x7 ?? GP regs -// d0..d7 ?? FP/SIMD regs -// sp... ?? arguments on stack -// -// locals: -// type off size -// ---------|------|------ -// Frame 0 16 -// DCArgs 16 168 -// DCValue 184 16 -// -// size 200 -// aligned 208 -// - -// locals: -// x10: sp -// x11: DCArgs* args - - mov x10, sp - stp x29, x30, [sp, #-208 ]! - mov x29, sp - - add x11, x29 , #16 - -// save integer registers - - stp x0, x1, [x11, #0 ] - stp x2, x3, [x11, #16] - stp x4, x5, [x11, #32] - stp x6, x7, [x11, #48] - - stp d0, d1, [x11, #64] - stp d2, d3, [x11, #80] - stp d4, d5, [x11, #96] - stp d6, d7, [x11, #112] - - eor x12, x12, x12 - stp x10,x12,[x11, #128] // sp=sp, i=0, f=0 - - str x12, [x11, #144] // s=0, reserved=0 - - -// call handler: -// args: -// x0: DCCallback* pcb -// x1: DCArgs* args -// x2: DCValue* result -// x3: void* userdata - - mov x0 , x9 - add x1 , x29 , #16 - add x2 , x29 , #184 - ldr x3 , [x9 , #40] - - ldr x11, [x9 , #32] - blr x11 - - and w0, w0, #255 - cmp w0, 'f' - b.eq .retf - cmp w0, 'd' - b.eq .retf - -.reti: - ldr x0, [x29, #184] - b .ret -.retf: - ldr d0, [x29, #184] -.ret: - ldp x29, x30, [sp], #208 - ret diff -r 450c4f06cb14 -r 03c516772c65 dyncallback/dyncall_callback_sparc32.s --- a/dyncallback/dyncall_callback_sparc32.s Thu Jul 23 01:30:23 2015 +0200 +++ b/dyncallback/dyncall_callback_sparc32.s Fri Jul 24 01:18:10 2015 +0200 @@ -23,7 +23,7 @@ */ - .globl dcCallbackThunkEntry +.globl dcCallbackThunkEntry dcCallbackThunkEntry: jmpl %i7 + 8, %g0 /* Return from proc. */ nop diff -r 450c4f06cb14 -r 03c516772c65 dyncallback/dyncall_callback_sparc64.s --- a/dyncallback/dyncall_callback_sparc64.s Thu Jul 23 01:30:23 2015 +0200 +++ b/dyncallback/dyncall_callback_sparc64.s Fri Jul 24 01:18:10 2015 +0200 @@ -23,7 +23,7 @@ */ - .globl dcCallbackThunkEntry +.globl dcCallbackThunkEntry dcCallbackThunkEntry: jmpl %i7 + 8, %g0 /* Return from proc. */ nop