tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Register-riscv64.h (9205B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
      2 * vim: set ts=8 sts=2 et sw=2 tw=80:
      3 * This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef jit_riscv64_Register_riscv64_h
      8 #define jit_riscv64_Register_riscv64_h
      9 
     10 #include <stdint.h>
     11 
     12 #include "jit/Registers.h"
     13 #include "jit/RegisterSets.h"
     14 
     15 namespace js {
     16 namespace jit {
     17 
     18 static constexpr Register zero{Registers::zero};
     19 static constexpr Register ra{Registers::ra};
     20 static constexpr Register tp{Registers::tp};
     21 static constexpr Register sp{Registers::sp};
     22 static constexpr Register gp{Registers::gp};
     23 static constexpr Register a0{Registers::a0};
     24 static constexpr Register a1{Registers::a1};
     25 static constexpr Register a2{Registers::a2};
     26 static constexpr Register a3{Registers::a3};
     27 static constexpr Register a4{Registers::a4};
     28 static constexpr Register a5{Registers::a5};
     29 static constexpr Register a6{Registers::a6};
     30 static constexpr Register a7{Registers::a7};
     31 static constexpr Register t0{Registers::t0};
     32 static constexpr Register t1{Registers::t1};
     33 static constexpr Register t2{Registers::t2};
     34 static constexpr Register t3{Registers::t3};
     35 static constexpr Register t4{Registers::t4};
     36 static constexpr Register t5{Registers::t5};
     37 static constexpr Register t6{Registers::t6};
     38 static constexpr Register fp{Registers::fp};
     39 static constexpr Register s1{Registers::s1};
     40 static constexpr Register s2{Registers::s2};
     41 static constexpr Register s3{Registers::s3};
     42 static constexpr Register s4{Registers::s4};
     43 static constexpr Register s5{Registers::s5};
     44 static constexpr Register s6{Registers::s6};
     45 static constexpr Register s7{Registers::s7};
     46 static constexpr Register s8{Registers::s8};
     47 static constexpr Register s9{Registers::s9};
     48 static constexpr Register s10{Registers::s10};
     49 static constexpr Register s11{Registers::s11};
     50 
     51 static constexpr FloatRegister ft0{FloatRegisters::f0};
     52 static constexpr FloatRegister ft1{FloatRegisters::f1};
     53 static constexpr FloatRegister ft2{FloatRegisters::f2};
     54 static constexpr FloatRegister ft3{FloatRegisters::f3};
     55 static constexpr FloatRegister ft4{FloatRegisters::f4};
     56 static constexpr FloatRegister ft5{FloatRegisters::f5};
     57 static constexpr FloatRegister ft6{FloatRegisters::f6};
     58 static constexpr FloatRegister ft7{FloatRegisters::f7};
     59 static constexpr FloatRegister fs0{FloatRegisters::f8};
     60 static constexpr FloatRegister fs1{FloatRegisters::f9};
     61 static constexpr FloatRegister fa0{FloatRegisters::f10};
     62 static constexpr FloatRegister fa1{FloatRegisters::f11};
     63 static constexpr FloatRegister fa2{FloatRegisters::f12};
     64 static constexpr FloatRegister fa3{FloatRegisters::f13};
     65 static constexpr FloatRegister fa4{FloatRegisters::f14};
     66 static constexpr FloatRegister fa5{FloatRegisters::f15};
     67 static constexpr FloatRegister fa6{FloatRegisters::f16};
     68 static constexpr FloatRegister fa7{FloatRegisters::f17};
     69 static constexpr FloatRegister fs2{FloatRegisters::f18};
     70 static constexpr FloatRegister fs3{FloatRegisters::f19};
     71 static constexpr FloatRegister fs4{FloatRegisters::f20};
     72 static constexpr FloatRegister fs5{FloatRegisters::f21};
     73 static constexpr FloatRegister fs6{FloatRegisters::f22};
     74 static constexpr FloatRegister fs7{FloatRegisters::f23};
     75 static constexpr FloatRegister fs8{FloatRegisters::f24};
     76 static constexpr FloatRegister fs9{FloatRegisters::f25};
     77 static constexpr FloatRegister fs10{FloatRegisters::f26};
     78 static constexpr FloatRegister fs11{FloatRegisters::f27};
     79 static constexpr FloatRegister ft8{FloatRegisters::f28};
     80 static constexpr FloatRegister ft9{FloatRegisters::f29};
     81 static constexpr FloatRegister ft10{FloatRegisters::f30};
     82 static constexpr FloatRegister ft11{FloatRegisters::f31};
     83 
     84 static constexpr Register StackPointer{Registers::sp};
     85 static constexpr Register FramePointer{Registers::fp};
     86 static constexpr Register ReturnReg{Registers::a0};
     87 // Scratch register used for runtime call patching.
     88 // See MacroAssembler::patchNopToCall and MacroAssembler::PatchWrite_NearCall.
     89 static constexpr Register SavedScratchRegister{Registers::s11};
     90 static constexpr Register64 ReturnReg64(ReturnReg);
     91 
     92 static constexpr FloatRegister ReturnFloat32Reg{FloatRegisters::fa0,
     93                                                FloatRegisters::Single};
     94 static constexpr FloatRegister ReturnDoubleReg{FloatRegisters::fa0};
     95 #ifdef ENABLE_WASM_SIMD
     96 static constexpr FloatRegister ReturnSimd128Reg{FloatRegisters::invalid_reg};
     97 static constexpr FloatRegister ScratchSimd128Reg{FloatRegisters::invalid_reg};
     98 #endif
     99 static constexpr FloatRegister InvalidFloatReg{};
    100 
    101 static constexpr FloatRegister ScratchFloat32Reg{FloatRegisters::ft10,
    102                                                 FloatRegisters::Single};
    103 static constexpr FloatRegister ScratchDoubleReg{FloatRegisters::ft10};
    104 
    105 static constexpr FloatRegister ScratchFloat32Reg2{FloatRegisters::fs11,
    106                                                  FloatRegisters::Single};
    107 static constexpr FloatRegister ScratchDoubleReg2{FloatRegisters::fs11};
    108 
    109 static constexpr Register OsrFrameReg{Registers::a3};
    110 static constexpr Register PreBarrierReg{Registers::a1};
    111 static constexpr Register InterpreterPCReg{Registers::t0};
    112 static constexpr Register CallTempReg0{Registers::t0};
    113 static constexpr Register CallTempReg1{Registers::t1};
    114 static constexpr Register CallTempReg2{Registers::t2};
    115 static constexpr Register CallTempReg3{Registers::t3};
    116 static constexpr Register CallTempReg4{Registers::a6};
    117 static constexpr Register CallTempReg5{Registers::a7};
    118 static constexpr Register InvalidReg{Registers::invalid_reg};
    119 static constexpr Register CallTempNonArgRegs[] = {t0, t1, t2, t3};
    120 static const uint32_t NumCallTempNonArgRegs = std::size(CallTempNonArgRegs);
    121 
    122 static constexpr Register IntArgReg0{Registers::a0};
    123 static constexpr Register IntArgReg1{Registers::a1};
    124 static constexpr Register IntArgReg2{Registers::a2};
    125 static constexpr Register IntArgReg3{Registers::a3};
    126 static constexpr Register IntArgReg4{Registers::a4};
    127 static constexpr Register IntArgReg5{Registers::a5};
    128 static constexpr Register IntArgReg6{Registers::a6};
    129 static constexpr Register IntArgReg7{Registers::a7};
    130 
    131 // Registers used by RegExpMatcher and RegExpExecMatch stubs (do not use
    132 // JSReturnOperand).
    133 static constexpr Register RegExpMatcherRegExpReg = CallTempReg0;
    134 static constexpr Register RegExpMatcherStringReg = CallTempReg1;
    135 static constexpr Register RegExpMatcherLastIndexReg = CallTempReg2;
    136 
    137 // Registers used by RegExpExecTest stub (do not use ReturnReg).
    138 static constexpr Register RegExpExecTestRegExpReg = CallTempReg0;
    139 static constexpr Register RegExpExecTestStringReg = CallTempReg1;
    140 
    141 // Registers used by RegExpSearcher stub (do not use ReturnReg).
    142 static constexpr Register RegExpSearcherRegExpReg = CallTempReg0;
    143 static constexpr Register RegExpSearcherStringReg = CallTempReg1;
    144 static constexpr Register RegExpSearcherLastIndexReg = CallTempReg2;
    145 
    146 static constexpr Register JSReturnReg_Type{Registers::a3};
    147 static constexpr Register JSReturnReg_Data{Registers::s2};
    148 static constexpr Register JSReturnReg{Registers::a2};
    149 static constexpr ValueOperand JSReturnOperand = ValueOperand(JSReturnReg);
    150 
    151 // See "ABI special registers" in Assembler-shared.h for more information.
    152 static constexpr Register ABINonArgReg0{Registers::t0};
    153 static constexpr Register ABINonArgReg1{Registers::t1};
    154 static constexpr Register ABINonArgReg2{Registers::t2};
    155 static constexpr Register ABINonArgReg3{Registers::t3};
    156 
    157 // See "ABI special registers" in Assembler-shared.h for more information.
    158 static constexpr Register ABINonArgReturnReg0{Registers::t0};
    159 static constexpr Register ABINonArgReturnReg1{Registers::t1};
    160 static constexpr Register ABINonVolatileReg{Registers::s1};
    161 
    162 // See "ABI special registers" in Assembler-shared.h for more information.
    163 static constexpr Register ABINonArgReturnVolatileReg{Registers::t0};
    164 
    165 // See "ABI special registers" in Assembler-shared.h for more information.
    166 // Avoid ft11 which is the scratch register.
    167 static constexpr FloatRegister ABINonArgDoubleReg{FloatRegisters::ft11};
    168 
    169 static constexpr Register WasmTableCallScratchReg0{ABINonArgReg0};
    170 static constexpr Register WasmTableCallScratchReg1{ABINonArgReg1};
    171 static constexpr Register WasmTableCallSigReg{ABINonArgReg2};
    172 static constexpr Register WasmTableCallIndexReg{ABINonArgReg3};
    173 
    174 // See "ABI special registers" in Assembler-shared.h, and "The WASM ABIs" in
    175 // WasmFrame.h for more information.
    176 static constexpr Register InstanceReg{Registers::s4};
    177 static constexpr Register HeapReg{Registers::s7};
    178 
    179 static constexpr Register WasmJitEntryReturnScratch{Registers::t1};
    180 
    181 static constexpr Register WasmCallRefCallScratchReg0{ABINonArgReg0};
    182 static constexpr Register WasmCallRefCallScratchReg1{ABINonArgReg1};
    183 static constexpr Register WasmCallRefCallScratchReg2{ABINonArgReg2};
    184 static constexpr Register WasmCallRefReg{ABINonArgReg3};
    185 
    186 static constexpr Register WasmTailCallInstanceScratchReg{ABINonArgReg1};
    187 static constexpr Register WasmTailCallRAScratchReg{ra};
    188 static constexpr Register WasmTailCallFPScratchReg{ABINonArgReg3};
    189 
    190 }  // namespace jit
    191 }  // namespace js
    192 
    193 #endif  // jit_riscv64_Register_riscv64_h