.file "callgate.s" .text .p2align 4,,15 .globl _fnCallGate .def _fnCallGate; .scl 2; .type 32; .endef _fnCallGate: call *(_getCurrentAddressFn) /* retrieve a primitive method oop */ movl %eax, _savedAddress popl _returnAddress /* save return address */ popl %eax call *%eax /* call the function */ pushl _returnAddress pushl %eax /* save return value */ pushl %edx call *(_getCurrentAddressFn) /* retrieve a primitive method oop */ subl _savedAddress, %eax addl %eax, 8(%esp) /* current - old + returnAddress */ popl %edx popl %eax ret .comm _returnAddress, 16 # 4 .comm _savedAddress, 16 # 4