tor-browser

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

extension-riscv-f.cc (5487B)


      1 // Copyright 2022 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 #include "jit/riscv64/extension/extension-riscv-f.h"
      5 #include "jit/riscv64/Assembler-riscv64.h"
      6 #include "jit/riscv64/constant/Constant-riscv64.h"
      7 #include "jit/riscv64/Architecture-riscv64.h"
      8 namespace js {
      9 namespace jit {
     10 
     11 // RV32F Standard Extension
     12 
     13 void AssemblerRISCVF::flw(FPURegister rd, Register rs1, int16_t imm12) {
     14  GenInstrLoadFP_ri(0b010, rd, rs1, imm12);
     15 }
     16 
     17 void AssemblerRISCVF::fsw(FPURegister source, Register base, int16_t imm12) {
     18  GenInstrStoreFP_rri(0b010, base, source, imm12);
     19 }
     20 
     21 void AssemblerRISCVF::fmadd_s(FPURegister rd, FPURegister rs1, FPURegister rs2,
     22                              FPURegister rs3, FPURoundingMode frm) {
     23  GenInstrR4(0b00, MADD, rd, rs1, rs2, rs3, frm);
     24 }
     25 
     26 void AssemblerRISCVF::fmsub_s(FPURegister rd, FPURegister rs1, FPURegister rs2,
     27                              FPURegister rs3, FPURoundingMode frm) {
     28  GenInstrR4(0b00, MSUB, rd, rs1, rs2, rs3, frm);
     29 }
     30 
     31 void AssemblerRISCVF::fnmsub_s(FPURegister rd, FPURegister rs1, FPURegister rs2,
     32                               FPURegister rs3, FPURoundingMode frm) {
     33  GenInstrR4(0b00, NMSUB, rd, rs1, rs2, rs3, frm);
     34 }
     35 
     36 void AssemblerRISCVF::fnmadd_s(FPURegister rd, FPURegister rs1, FPURegister rs2,
     37                               FPURegister rs3, FPURoundingMode frm) {
     38  GenInstrR4(0b00, NMADD, rd, rs1, rs2, rs3, frm);
     39 }
     40 
     41 void AssemblerRISCVF::fadd_s(FPURegister rd, FPURegister rs1, FPURegister rs2,
     42                             FPURoundingMode frm) {
     43  GenInstrALUFP_rr(0b0000000, frm, rd, rs1, rs2);
     44 }
     45 
     46 void AssemblerRISCVF::fsub_s(FPURegister rd, FPURegister rs1, FPURegister rs2,
     47                             FPURoundingMode frm) {
     48  GenInstrALUFP_rr(0b0000100, frm, rd, rs1, rs2);
     49 }
     50 
     51 void AssemblerRISCVF::fmul_s(FPURegister rd, FPURegister rs1, FPURegister rs2,
     52                             FPURoundingMode frm) {
     53  GenInstrALUFP_rr(0b0001000, frm, rd, rs1, rs2);
     54 }
     55 
     56 void AssemblerRISCVF::fdiv_s(FPURegister rd, FPURegister rs1, FPURegister rs2,
     57                             FPURoundingMode frm) {
     58  GenInstrALUFP_rr(0b0001100, frm, rd, rs1, rs2);
     59 }
     60 
     61 void AssemblerRISCVF::fsqrt_s(FPURegister rd, FPURegister rs1,
     62                              FPURoundingMode frm) {
     63  GenInstrALUFP_rr(0b0101100, frm, rd, rs1, zero_reg);
     64 }
     65 
     66 void AssemblerRISCVF::fsgnj_s(FPURegister rd, FPURegister rs1,
     67                              FPURegister rs2) {
     68  GenInstrALUFP_rr(0b0010000, 0b000, rd, rs1, rs2);
     69 }
     70 
     71 void AssemblerRISCVF::fsgnjn_s(FPURegister rd, FPURegister rs1,
     72                               FPURegister rs2) {
     73  GenInstrALUFP_rr(0b0010000, 0b001, rd, rs1, rs2);
     74 }
     75 
     76 void AssemblerRISCVF::fsgnjx_s(FPURegister rd, FPURegister rs1,
     77                               FPURegister rs2) {
     78  GenInstrALUFP_rr(0b0010000, 0b010, rd, rs1, rs2);
     79 }
     80 
     81 void AssemblerRISCVF::fmin_s(FPURegister rd, FPURegister rs1, FPURegister rs2) {
     82  GenInstrALUFP_rr(0b0010100, 0b000, rd, rs1, rs2);
     83 }
     84 
     85 void AssemblerRISCVF::fmax_s(FPURegister rd, FPURegister rs1, FPURegister rs2) {
     86  GenInstrALUFP_rr(0b0010100, 0b001, rd, rs1, rs2);
     87 }
     88 
     89 void AssemblerRISCVF::fcvt_w_s(Register rd, FPURegister rs1,
     90                               FPURoundingMode frm) {
     91  GenInstrALUFP_rr(0b1100000, frm, rd, rs1, zero_reg);
     92 }
     93 
     94 void AssemblerRISCVF::fcvt_wu_s(Register rd, FPURegister rs1,
     95                                FPURoundingMode frm) {
     96  GenInstrALUFP_rr(0b1100000, frm, rd, rs1, ToRegister(1));
     97 }
     98 
     99 void AssemblerRISCVF::fmv_x_w(Register rd, FPURegister rs1) {
    100  GenInstrALUFP_rr(0b1110000, 0b000, rd, rs1, zero_reg);
    101 }
    102 
    103 void AssemblerRISCVF::feq_s(Register rd, FPURegister rs1, FPURegister rs2) {
    104  GenInstrALUFP_rr(0b1010000, 0b010, rd, rs1, rs2);
    105 }
    106 
    107 void AssemblerRISCVF::flt_s(Register rd, FPURegister rs1, FPURegister rs2) {
    108  GenInstrALUFP_rr(0b1010000, 0b001, rd, rs1, rs2);
    109 }
    110 
    111 void AssemblerRISCVF::fle_s(Register rd, FPURegister rs1, FPURegister rs2) {
    112  GenInstrALUFP_rr(0b1010000, 0b000, rd, rs1, rs2);
    113 }
    114 
    115 void AssemblerRISCVF::fclass_s(Register rd, FPURegister rs1) {
    116  GenInstrALUFP_rr(0b1110000, 0b001, rd, rs1, zero_reg);
    117 }
    118 
    119 void AssemblerRISCVF::fcvt_s_w(FPURegister rd, Register rs1,
    120                               FPURoundingMode frm) {
    121  GenInstrALUFP_rr(0b1101000, frm, rd, rs1, zero_reg);
    122 }
    123 
    124 void AssemblerRISCVF::fcvt_s_wu(FPURegister rd, Register rs1,
    125                                FPURoundingMode frm) {
    126  GenInstrALUFP_rr(0b1101000, frm, rd, rs1, ToRegister(1));
    127 }
    128 
    129 void AssemblerRISCVF::fmv_w_x(FPURegister rd, Register rs1) {
    130  GenInstrALUFP_rr(0b1111000, 0b000, rd, rs1, zero_reg);
    131 }
    132 
    133 #ifdef JS_CODEGEN_RISCV64
    134 // RV64F Standard Extension (in addition to RV32F)
    135 
    136 void AssemblerRISCVF::fcvt_l_s(Register rd, FPURegister rs1,
    137                               FPURoundingMode frm) {
    138  GenInstrALUFP_rr(0b1100000, frm, rd, rs1, ToRegister(2));
    139 }
    140 
    141 void AssemblerRISCVF::fcvt_lu_s(Register rd, FPURegister rs1,
    142                                FPURoundingMode frm) {
    143  GenInstrALUFP_rr(0b1100000, frm, rd, rs1, ToRegister(3));
    144 }
    145 
    146 void AssemblerRISCVF::fcvt_s_l(FPURegister rd, Register rs1,
    147                               FPURoundingMode frm) {
    148  GenInstrALUFP_rr(0b1101000, frm, rd, rs1, ToRegister(2));
    149 }
    150 
    151 void AssemblerRISCVF::fcvt_s_lu(FPURegister rd, Register rs1,
    152                                FPURoundingMode frm) {
    153  GenInstrALUFP_rr(0b1101000, frm, rd, rs1, ToRegister(3));
    154 }
    155 #endif
    156 
    157 }  // namespace jit
    158 }  // namespace js