tor-browser

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

Assembler-none.h (8267B)


      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_none_Assembler_none_h
      8 #define jit_none_Assembler_none_h
      9 
     10 #include "mozilla/Assertions.h"
     11 
     12 #include <stdint.h>
     13 
     14 #include "jit/none/Architecture-none.h"
     15 #include "jit/Registers.h"
     16 #include "jit/RegisterSets.h"
     17 #include "jit/shared/Assembler-shared.h"
     18 
     19 namespace js {
     20 namespace jit {
     21 
     22 class MacroAssembler;
     23 
     24 static constexpr Register StackPointer{Registers::invalid_reg};
     25 static constexpr Register FramePointer{Registers::invalid_reg};
     26 static constexpr Register ReturnReg{Registers::invalid_reg2};
     27 static constexpr FloatRegister ReturnFloat32Reg = {FloatRegisters::invalid_reg};
     28 static constexpr FloatRegister ReturnDoubleReg = {FloatRegisters::invalid_reg};
     29 static constexpr FloatRegister ReturnSimd128Reg = {FloatRegisters::invalid_reg};
     30 static constexpr FloatRegister ScratchSimd128Reg = {
     31    FloatRegisters::invalid_reg};
     32 static constexpr FloatRegister InvalidFloatReg = {FloatRegisters::invalid_reg};
     33 
     34 struct ScratchFloat32Scope : FloatRegister {
     35  explicit ScratchFloat32Scope(MacroAssembler& masm) {}
     36 };
     37 
     38 struct ScratchDoubleScope : FloatRegister {
     39  explicit ScratchDoubleScope(MacroAssembler& masm) {}
     40 };
     41 
     42 static constexpr Register OsrFrameReg{Registers::invalid_reg};
     43 static constexpr Register PreBarrierReg{Registers::invalid_reg};
     44 static constexpr Register InterpreterPCReg{Registers::invalid_reg};
     45 static constexpr Register CallTempReg0{Registers::invalid_reg};
     46 static constexpr Register CallTempReg1{Registers::invalid_reg};
     47 static constexpr Register CallTempReg2{Registers::invalid_reg};
     48 static constexpr Register CallTempReg3{Registers::invalid_reg};
     49 static constexpr Register CallTempReg4{Registers::invalid_reg};
     50 static constexpr Register CallTempReg5{Registers::invalid_reg};
     51 static constexpr Register InvalidReg{Registers::invalid_reg};
     52 static constexpr Register CallTempNonArgRegs[] = {InvalidReg, InvalidReg};
     53 static const uint32_t NumCallTempNonArgRegs = std::size(CallTempNonArgRegs);
     54 
     55 static constexpr Register IntArgReg0{Registers::invalid_reg};
     56 static constexpr Register IntArgReg1{Registers::invalid_reg};
     57 static constexpr Register IntArgReg2{Registers::invalid_reg};
     58 static constexpr Register IntArgReg3{Registers::invalid_reg};
     59 static constexpr Register HeapReg{Registers::invalid_reg};
     60 
     61 static constexpr Register RegExpMatcherRegExpReg{Registers::invalid_reg};
     62 static constexpr Register RegExpMatcherStringReg{Registers::invalid_reg};
     63 static constexpr Register RegExpMatcherLastIndexReg{Registers::invalid_reg};
     64 
     65 static constexpr Register RegExpExecTestRegExpReg{Registers::invalid_reg};
     66 static constexpr Register RegExpExecTestStringReg{Registers::invalid_reg};
     67 
     68 static constexpr Register RegExpSearcherRegExpReg{Registers::invalid_reg};
     69 static constexpr Register RegExpSearcherStringReg{Registers::invalid_reg};
     70 static constexpr Register RegExpSearcherLastIndexReg{Registers::invalid_reg};
     71 
     72 // Uses |invalid_reg2| to avoid static_assert failures.
     73 static constexpr Register JSReturnReg_Type{Registers::invalid_reg2};
     74 static constexpr Register JSReturnReg_Data{Registers::invalid_reg2};
     75 static constexpr Register JSReturnReg{Registers::invalid_reg2};
     76 
     77 #if defined(JS_NUNBOX32)
     78 static constexpr ValueOperand JSReturnOperand(InvalidReg, InvalidReg);
     79 static constexpr Register64 ReturnReg64(InvalidReg, InvalidReg);
     80 #elif defined(JS_PUNBOX64)
     81 static constexpr ValueOperand JSReturnOperand(InvalidReg);
     82 static constexpr Register64 ReturnReg64(InvalidReg);
     83 #else
     84 #  error "Bad architecture"
     85 #endif
     86 
     87 static constexpr Register ABINonArgReg0{Registers::invalid_reg};
     88 static constexpr Register ABINonArgReg1{Registers::invalid_reg};
     89 static constexpr Register ABINonArgReg2{Registers::invalid_reg};
     90 static constexpr Register ABINonArgReg3{Registers::invalid_reg};
     91 static constexpr Register ABINonArgReturnReg0{Registers::invalid_reg};
     92 static constexpr Register ABINonArgReturnReg1{Registers::invalid_reg};
     93 static constexpr Register ABINonVolatileReg{Registers::invalid_reg};
     94 static constexpr Register ABINonArgReturnVolatileReg{Registers::invalid_reg};
     95 
     96 static constexpr FloatRegister ABINonArgDoubleReg = {
     97    FloatRegisters::invalid_reg};
     98 
     99 static constexpr Register WasmTableCallScratchReg0{Registers::invalid_reg};
    100 static constexpr Register WasmTableCallScratchReg1{Registers::invalid_reg};
    101 static constexpr Register WasmTableCallSigReg{Registers::invalid_reg};
    102 static constexpr Register WasmTableCallIndexReg{Registers::invalid_reg};
    103 static constexpr Register InstanceReg{Registers::invalid_reg};
    104 static constexpr Register WasmJitEntryReturnScratch{Registers::invalid_reg};
    105 static constexpr Register WasmCallRefCallScratchReg0{Registers::invalid_reg};
    106 static constexpr Register WasmCallRefCallScratchReg1{Registers::invalid_reg};
    107 static constexpr Register WasmCallRefCallScratchReg2{Registers::invalid_reg};
    108 static constexpr Register WasmCallRefReg{Registers::invalid_reg};
    109 static constexpr Register WasmTailCallInstanceScratchReg{
    110    Registers::invalid_reg};
    111 static constexpr Register WasmTailCallRAScratchReg{Registers::invalid_reg};
    112 static constexpr Register WasmTailCallFPScratchReg{Registers::invalid_reg};
    113 
    114 static constexpr uint32_t ABIStackAlignment = 4;
    115 static constexpr uint32_t CodeAlignment = 16;
    116 #ifdef ENABLE_PORTABLE_BASELINE_INTERP
    117 static constexpr uint32_t JitStackAlignment = sizeof(void*);
    118 static constexpr uint32_t JitStackValueAlignment = 1;
    119 #else
    120 static constexpr uint32_t JitStackAlignment = 8;
    121 static constexpr uint32_t JitStackValueAlignment =
    122    JitStackAlignment / sizeof(Value);
    123 #endif
    124 
    125 static const Scale ScalePointer = TimesOne;
    126 
    127 class Assembler : public AssemblerShared {
    128 public:
    129  enum Condition {
    130    Equal,
    131    NotEqual,
    132    Above,
    133    AboveOrEqual,
    134    Below,
    135    BelowOrEqual,
    136    GreaterThan,
    137    GreaterThanOrEqual,
    138    LessThan,
    139    LessThanOrEqual,
    140    Overflow,
    141    CarrySet,
    142    CarryClear,
    143    Signed,
    144    NotSigned,
    145    Zero,
    146    NonZero,
    147    Always,
    148  };
    149 
    150  enum DoubleCondition {
    151    DoubleOrdered,
    152    DoubleEqual,
    153    DoubleNotEqual,
    154    DoubleGreaterThan,
    155    DoubleGreaterThanOrEqual,
    156    DoubleLessThan,
    157    DoubleLessThanOrEqual,
    158    DoubleUnordered,
    159    DoubleEqualOrUnordered,
    160    DoubleNotEqualOrUnordered,
    161    DoubleGreaterThanOrUnordered,
    162    DoubleGreaterThanOrEqualOrUnordered,
    163    DoubleLessThanOrUnordered,
    164    DoubleLessThanOrEqualOrUnordered
    165  };
    166 
    167  static Condition InvertCondition(Condition) { MOZ_CRASH(); }
    168 
    169  static DoubleCondition InvertCondition(DoubleCondition) { MOZ_CRASH(); }
    170 
    171  template <typename T, typename S>
    172  static void PatchDataWithValueCheck(CodeLocationLabel, T, S) {
    173    MOZ_CRASH();
    174  }
    175  static void PatchWrite_Imm32(CodeLocationLabel, Imm32) { MOZ_CRASH(); }
    176 
    177  static void PatchWrite_NearCall(CodeLocationLabel, CodeLocationLabel) {
    178    MOZ_CRASH();
    179  }
    180  static uint32_t PatchWrite_NearCallSize() { MOZ_CRASH(); }
    181 
    182  static void ToggleToJmp(CodeLocationLabel) { MOZ_CRASH(); }
    183  static void ToggleToCmp(CodeLocationLabel) { MOZ_CRASH(); }
    184  static void ToggleCall(CodeLocationLabel, bool) { MOZ_CRASH(); }
    185 
    186  static void Bind(uint8_t*, const CodeLabel&) { MOZ_CRASH(); }
    187 
    188  static uintptr_t GetPointer(uint8_t*) { MOZ_CRASH(); }
    189 
    190  static bool HasRoundInstruction(RoundingMode) { return false; }
    191 
    192  void verifyHeapAccessDisassembly(uint32_t begin, uint32_t end,
    193                                   const Disassembler::HeapAccess& heapAccess) {
    194    MOZ_CRASH();
    195  }
    196 
    197  void setUnlimitedBuffer() { MOZ_CRASH(); }
    198 };
    199 
    200 class Operand {
    201 public:
    202  explicit Operand(const Address&) { MOZ_CRASH(); }
    203  explicit Operand(const Register) { MOZ_CRASH(); }
    204  explicit Operand(const FloatRegister) { MOZ_CRASH(); }
    205  explicit Operand(Register, Imm32) { MOZ_CRASH(); }
    206  explicit Operand(Register, int32_t) { MOZ_CRASH(); }
    207 };
    208 
    209 class ABIArgGenerator {
    210 public:
    211  explicit ABIArgGenerator(ABIKind) { MOZ_CRASH(); }
    212  ABIArg next(MIRType) { MOZ_CRASH(); }
    213  ABIArg& current() { MOZ_CRASH(); }
    214  uint32_t stackBytesConsumedSoFar() const { MOZ_CRASH(); }
    215 };
    216 
    217 }  // namespace jit
    218 }  // namespace js
    219 
    220 #endif /* jit_none_Assembler_none_h */