github.com/notti/nocgo@v0.0.0-20190619201224-fc443047424c/internal/fakecgo/trampoline_386.s (about)

     1  /*
     2      See trampoline_amd64.s for explanations.
     3  
     4      => we can use SI, DI, BX instead of the stack
     5  
     6      C Calling convention cdecl used here (we only need integer args):
     7      Pass values on the stack in right to left order
     8      return value will be in AX
     9  
    10      If there are no return values calling conventions are the same -> NOFRAME + JMP
    11  */
    12  #include "textflag.h"
    13  
    14  TEXT x_cgo_init_trampoline(SB),NOSPLIT|NOFRAME,$0
    15      JMP ·x_cgo_init(SB)
    16      RET
    17  
    18  TEXT x_cgo_thread_start_trampoline(SB),NOSPLIT|NOFRAME,$0
    19      JMP ·x_cgo_thread_start(SB)
    20      RET
    21  
    22  TEXT ·threadentry_trampoline(SB),NOSPLIT,$8
    23      MOVL arg0+0(FP), AX
    24      MOVL AX, 0(SP)
    25      CALL ·threadentry(SB)
    26      MOVL 4(SP), AX
    27      RET
    28  
    29  // func setg_trampoline(setg uintptr, g uintptr)
    30  TEXT ·setg_trampoline(SB),NOSPLIT,$4-8
    31      MOVL g+4(FP), AX
    32      MOVL AX, 0(SP)
    33      MOVL setg+0(FP), AX
    34      CALL AX
    35      RET
    36  
    37  TEXT x_cgo_notify_runtime_init_done_trampoline(SB),NOSPLIT|NOFRAME,$0
    38      JMP ·x_cgo_notify_runtime_init_done(SB)
    39      RET
    40  
    41  TEXT x_cgo_setenv_trampoline(SB),NOSPLIT|NOFRAME,$0
    42      JMP ·x_cgo_setenv(SB)
    43      RET
    44  
    45  TEXT x_cgo_unsetenv_trampoline(SB),NOSPLIT|NOFRAME,$0
    46      JMP ·x_cgo_unsetenv(SB)
    47      RET
    48  
    49  // func asmlibccall6(fn, n, args uintptr) uintptr
    50  TEXT ·asmlibccall6(SB),NOSPLIT,$0-16
    51      MOVL SP, DI
    52      MOVL n+4(FP), AX
    53      MOVL args+8(FP), BX
    54      MOVL fn+0(FP), DX
    55  
    56      TESTL AX, AX
    57      JZ finished
    58  
    59  next:
    60      DECL AX
    61      MOVL (BX)(AX*4), CX
    62      SUBL $4, SP
    63      MOVL CX, 0(SP)
    64  
    65      TESTL AX, AX
    66      JZ finished
    67      JMP next
    68  
    69  finished:
    70      CALL DX
    71  
    72      MOVL DI, SP
    73  
    74      MOVL AX, ret+12(FP)
    75  
    76      RET