xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips64.S

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 #include <sys/regdef.h>
     6 #include <sys/asm.h>
     8 LOCALSZ=16
     9 FRAMESZ=(((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
    11 A1OFF=FRAMESZ-(9*SZREG)
    12 A2OFF=FRAMESZ-(8*SZREG)
    13 A3OFF=FRAMESZ-(7*SZREG)
    14 A4OFF=FRAMESZ-(6*SZREG)
    15 A5OFF=FRAMESZ-(5*SZREG)
    16 A6OFF=FRAMESZ-(4*SZREG)
    17 A7OFF=FRAMESZ-(3*SZREG)
    18 GPOFF=FRAMESZ-(2*SZREG)
    19 RAOFF=FRAMESZ-(1*SZREG)
    21 F13OFF=FRAMESZ-(16*SZREG)
    22 F14OFF=FRAMESZ-(15*SZREG)
    23 F15OFF=FRAMESZ-(14*SZREG)
    24 F16OFF=FRAMESZ-(13*SZREG)
    25 F17OFF=FRAMESZ-(12*SZREG)
    26 F18OFF=FRAMESZ-(11*SZREG)
    27 F19OFF=FRAMESZ-(10*SZREG)
    29 #define SENTINEL_ENTRY(n)         /* defined in cpp file, not here */
    31 #define STUB_ENTRY(x)                                   \
    32     .if x < 10;                                         \
    33     MAKE_STUB(x, _ZN14nsXPTCStubBase5Stub ##x ##Ev);    \
    34     .elseif x < 100;                                    \
    35     MAKE_STUB(x, _ZN14nsXPTCStubBase6Stub ##x ##Ev);    \
    36     .elseif x < 1000;                                   \
    37     MAKE_STUB(x, _ZN14nsXPTCStubBase7Stub ##x ##Ev);    \
    38     .else;                                              \
    39     .err;                                               \
    40     .endif
    42 #define MAKE_STUB(x, name)                              \
    43     .globl   name;                                      \
    44     .type    name,@function;                            \
    45     .aent    name,0;                                    \
    46 name:;                                                  \
    47     PTR_SUBU sp,FRAMESZ;                                \
    48     SETUP_GP64(GPOFF, name);                            \
    49     li       t0,x;                                      \
    50     b        sharedstub;                                \
    52 #
    53 # open a dummy frame for the function entries
    54 #
    55     .text
    56     .align   2
    57     .type    dummy,@function
    58     .ent     dummy, 0
    59 dummy:
    60     .frame   sp, FRAMESZ, ra
    61     .mask    0x90000FF0, RAOFF-FRAMESZ
    62     .fmask   0x000FF000, F19OFF-FRAMESZ
    64 #include "xptcstubsdef.inc"
    66 sharedstub:
    68     REG_S    a1, A1OFF(sp)
    69     REG_S    a2, A2OFF(sp)
    70     REG_S    a3, A3OFF(sp)
    71     REG_S    a4, A4OFF(sp)
    72     REG_S    a5, A5OFF(sp)
    73     REG_S    a6, A6OFF(sp)
    74     REG_S    a7, A7OFF(sp)
    75     REG_S    ra, RAOFF(sp)
    77     s.d      $f13, F13OFF(sp)
    78     s.d      $f14, F14OFF(sp)
    79     s.d      $f15, F15OFF(sp)
    80     s.d      $f16, F16OFF(sp)
    81     s.d      $f17, F17OFF(sp)
    82     s.d      $f18, F18OFF(sp)
    83     s.d      $f19, F19OFF(sp)
    85     # t0 is methodIndex
    86     move     a1, t0
    88     # a2 is stack address where extra function params
    89     # are stored that do not fit in registers
    90     move     a2, sp
    91     addi     a2, FRAMESZ
    93     # a3 is stack address of a1..a7
    94     move     a3, sp
    95     addi     a3, A1OFF
    97     # a4 is stack address of f13..f19
    98     move     a4, sp
    99     addi     a4, F13OFF
   101     # PrepareAndDispatch(that, methodIndex, args, gprArgs, fpArgs)
   102     #                     a0       a1        a2     a3       a4
   103     #
   104     jal      PrepareAndDispatch
   106     REG_L    ra, RAOFF(sp)
   107     RESTORE_GP64
   109     PTR_ADDU sp, FRAMESZ
   110     j        ra
   111     END(dummy)

mercurial