diff --git a/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp b/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp --- a/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp +++ b/llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp @@ -367,6 +367,18 @@ return MCDisassembler::Fail; } Insn = support::endian::read32le(Bytes.data()); + + if (STI.getFeatureBits()[RISCV::FeatureExtZfinx]) { + LLVM_DEBUG(dbgs() << "Trying RVZfinx table (Float in Integer):\n"); + // Calling the auto-generated decoder function. + Result = decodeInstruction(DecoderTableRVZfinx32, MI, Insn, Address, this, + STI); + if (Result != MCDisassembler::Fail) { + Size = 4; + return Result; + } + } + LLVM_DEBUG(dbgs() << "Trying RISCV32 table :\n"); Result = decodeInstruction(DecoderTable32, MI, Insn, Address, this, STI); Size = 4; diff --git a/llvm/lib/Target/RISCV/RISCV.td b/llvm/lib/Target/RISCV/RISCV.td --- a/llvm/lib/Target/RISCV/RISCV.td +++ b/llvm/lib/Target/RISCV/RISCV.td @@ -49,6 +49,13 @@ AssemblerPredicate<(all_of FeatureExtZfh), "'Zfh' (Half-Precision Floating-Point)">; +def FeatureExtZfinx + : SubtargetFeature<"experimental-zfinx", "HasStdExtZfinx", "true", + "'Zfinx' (Float in Integer)">; +def HasStdExtZfinx : Predicate<"Subtarget->hasStdExtZfinx()">, + AssemblerPredicate<(all_of FeatureExtZfinx), + "'Zfinx' (Float in Integer)">; + def FeatureStdExtC : SubtargetFeature<"c", "HasStdExtC", "true", "'C' (Compressed Instructions)">; diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.td b/llvm/lib/Target/RISCV/RISCVInstrInfo.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.td @@ -1224,3 +1224,4 @@ include "RISCVInstrInfoB.td" include "RISCVInstrInfoV.td" include "RISCVInstrInfoZfh.td" +include "RISCVInstrInfoZfinx.td" diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZfinx.td b/llvm/lib/Target/RISCV/RISCVInstrInfoZfinx.td new file mode 100644 --- /dev/null +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZfinx.td @@ -0,0 +1,225 @@ +//=== RISCVInstrInfoZfinx.td - RISC-V 'Zfinx' instructions -*- tablegen -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file describes the RISC-V instructions from the standard 'Zfinx' +// float in integer. +// This version is still experimental as the 'Zfinx' extension hasn't been +// ratified yet. +// +//===----------------------------------------------------------------------===// + +//===----------------------------------------------------------------------===// +// Instruction class templates +//===----------------------------------------------------------------------===// + +let Predicates = [HasStdExtZfinx] in { +let DecoderNamespace = "RVZfinx", + hasSideEffects = 0, mayLoad = 0, mayStore = 0 in { + +// Common +class Zfinx_FPUnaryOp_r funct7, bits<3> funct3, string opcodestr> + : RVInstR; + +class Zfinx_FPUnaryOp_r_frm funct7, string opcodestr> + : RVInstRFrm; + +// Zfh Part +class Zfinx_FPFMAH_rrr_frm + : RVInstR4<0b10, opcode, (outs GPR:$rd), + (ins GPR:$rs1, GPR:$rs2, GPR:$rs3, frmarg:$funct3), + opcodestr, "$rd, $rs1, $rs2, $rs3, $funct3">; + +class Zfinx_FPALUH_rr_frm funct7, string opcodestr> + : RVInstRFrm; + +class Zfinx_FPALUH_rr funct7, bits<3> funct3, string opcodestr> + : RVInstR; + +class Zfinx_FPCmpH_rr funct3, string opcodestr> + : RVInstR<0b1010010, funct3, OPC_OP_FP, (outs GPR:$rd), + (ins GPR:$rs1, GPR:$rs2), opcodestr, "$rd, $rs1, $rs2">, + Sched<[]>; + +// F Part +class Zfinx_FPFMAS_rrr_frm + : RVInstR4<0b00, opcode, (outs GPR:$rd), + (ins GPR:$rs1, GPR:$rs2, GPR:$rs3, frmarg:$funct3), + opcodestr, "$rd, $rs1, $rs2, $rs3, $funct3">; + +class Zfinx_FPALUS_rr_frm funct7, string opcodestr> + : RVInstRFrm; + +class Zfinx_FPALUS_rr funct7, bits<3> funct3, string opcodestr> + : RVInstR; + +class Zfinx_FPCmpS_rr funct3, string opcodestr> + : RVInstR<0b1010000, funct3, OPC_OP_FP, (outs GPR:$rd), + (ins GPR:$rs1, GPR:$rs2), opcodestr, "$rd, $rs1, $rs2">, + Sched<[WriteFCmp32, ReadFCmp32, ReadFCmp32]>; + +// D Part +class Zfinx_FPFMAD_rrr_frm + : RVInstR4<0b01, opcode, (outs GPR:$rd), + (ins GPR:$rs1, GPR:$rs2, GPR:$rs3, frmarg:$funct3), + opcodestr, "$rd, $rs1, $rs2, $rs3, $funct3">; + +class Zfinx_FPALUD_rr_frm funct7, string opcodestr> + : RVInstRFrm; + +class Zfinx_FPALUD_rr funct7, bits<3> funct3, string opcodestr> + : RVInstR; + +class Zfinx_FPCmpD_rr funct3, string opcodestr> + : RVInstR<0b1010001, funct3, OPC_OP_FP, (outs GPR:$rd), + (ins GPR:$rs1, GPR:$rs2), opcodestr, "$rd, $rs1, $rs2">, + Sched<[WriteFCmp64, ReadFCmp64, ReadFCmp64]>; +} // DecoderNamespace = "RVZfinx", hasSideEffects = 0, mayLoad = 0, mayStore = 0 + +//===----------------------------------------------------------------------===// +// Instruction class templates alias +//===----------------------------------------------------------------------===// + +// Zfh Part +class Zfinx_FPFMAHDynFrmAlias + : InstAlias; + +class Zfinx_FPALUHDynFrmAlias + : InstAlias; + +// F Part +class Zfinx_FPFMASDynFrmAlias + : InstAlias; + +class Zfinx_FPALUSDynFrmAlias + : InstAlias; +class Zfinx_FPUnaryOpDynFrmAlias + : InstAlias; + +// D Part +class Zfinx_FPFMADDynFrmAlias + : InstAlias; + +class Zfinx_FPALUDDynFrmAlias + : InstAlias; + +//===----------------------------------------------------------------------===// +// Instructions +//===----------------------------------------------------------------------===// + +multiclass Zfinx_FPFMAH{ + def _H : Zfinx_FPFMAH_rrr_frm, Sched<[]>; + def _S : Zfinx_FPFMAS_rrr_frm, Sched<[]>; + def _D : Zfinx_FPFMAD_rrr_frm, Sched<[]>; +} + +defm Zfinx_FMADD : Zfinx_FPFMAH; +def : Zfinx_FPFMAHDynFrmAlias; +def : Zfinx_FPFMASDynFrmAlias; +def : Zfinx_FPFMADDynFrmAlias; +defm Zfinx_FMSUB : Zfinx_FPFMAH; +def : Zfinx_FPFMAHDynFrmAlias; +def : Zfinx_FPFMASDynFrmAlias; +def : Zfinx_FPFMADDynFrmAlias; +defm Zfinx_FNMSUB : Zfinx_FPFMAH; +def : Zfinx_FPFMAHDynFrmAlias; +def : Zfinx_FPFMASDynFrmAlias; +def : Zfinx_FPFMADDynFrmAlias; +defm Zfinx_FNMADD : Zfinx_FPFMAH; +def : Zfinx_FPFMAHDynFrmAlias; +def : Zfinx_FPFMASDynFrmAlias; +def : Zfinx_FPFMADDynFrmAlias; + +multiclass Zfinx_FPALU_frm funct7, string opcodestr> { + def _H : Zfinx_FPALUH_rr_frm, Sched<[]>; + def _S : Zfinx_FPALUS_rr_frm, Sched<[]>; + def _D : Zfinx_FPALUD_rr_frm, Sched<[]>; +} +defm Zfinx_FADD : Zfinx_FPALU_frm<0b0000000, "fadd">; +def : Zfinx_FPALUHDynFrmAlias; +def : Zfinx_FPALUSDynFrmAlias; +def : Zfinx_FPALUDDynFrmAlias; +defm Zfinx_FSUB : Zfinx_FPALU_frm<0b0000100, "fsub">; +def : Zfinx_FPALUHDynFrmAlias; +def : Zfinx_FPALUSDynFrmAlias; +def : Zfinx_FPALUDDynFrmAlias; +defm Zfinx_FMUL : Zfinx_FPALU_frm<0b0001000, "fmul">; +def : Zfinx_FPALUHDynFrmAlias; +def : Zfinx_FPALUSDynFrmAlias; +def : Zfinx_FPALUDDynFrmAlias; +defm Zfinx_FDIV : Zfinx_FPALU_frm<0b0001100, "fdiv">; +def : Zfinx_FPALUHDynFrmAlias; +def : Zfinx_FPALUSDynFrmAlias; +def : Zfinx_FPALUDDynFrmAlias; + +multiclass Zfinx_FPUnaryOp_frm { + let rs2 = 0b00000 in { + def _H : Zfinx_FPUnaryOp_r_frm<0b0101110, opcodestr#".h">, Sched<[]>; + def _S : Zfinx_FPUnaryOp_r_frm<0b0101100, opcodestr#".s">, Sched<[]>; + def _D : Zfinx_FPUnaryOp_r_frm<0b0101101, opcodestr#".d">, Sched<[]>; + } +} +defm Zfinx_FSQRT : Zfinx_FPUnaryOp_frm<"fsqrt">; +def : Zfinx_FPUnaryOpDynFrmAlias; +def : Zfinx_FPUnaryOpDynFrmAlias; +def : Zfinx_FPUnaryOpDynFrmAlias; + +multiclass Zfinx_FPALU funct7, bits<3> funct3, string opcodestr> { + def _H : Zfinx_FPALUH_rr, + Sched<[]>; + def _S : Zfinx_FPALUS_rr, + Sched<[]>; + def _D : Zfinx_FPALUD_rr, + Sched<[]>; +} +defm Zfinx_FSGNJ : Zfinx_FPALU<0b0010000, 0b000, "fsgnj">; +defm Zfinx_FSGNJN : Zfinx_FPALU<0b0010000, 0b001, "fsgnjn">; +defm Zfinx_FSGNJX : Zfinx_FPALU<0b0010000, 0b010, "fsgnjx">; +defm Zfinx_FMIN : Zfinx_FPALU<0b0010100, 0b000, "fmin">; +defm Zfinx_FMAX : Zfinx_FPALU<0b0010100, 0b001, "fmax">; + +multiclass Zfinx_FPCmp funct3, string opcodestr>{ + def _H : Zfinx_FPCmpH_rr; + def _S : Zfinx_FPCmpS_rr; + def _D : Zfinx_FPCmpD_rr; +} +defm Zfinx_FEQ : Zfinx_FPCmp<0b010, "feq">; +defm Zfinx_FLT : Zfinx_FPCmp<0b001, "flt">; +defm Zfinx_FLE : Zfinx_FPCmp<0b000, "fle">; + +multiclass Zfinx_FPUnOp funct7, string opcodestr>{ + let rs2 = 0b00000 in { + def _H : Zfinx_FPUnaryOp_r, + Sched<[]>; + def _S : Zfinx_FPUnaryOp_r, + Sched<[]>; + def _D : Zfinx_FPUnaryOp_r, + Sched<[]>; + } +} +defm Zfinx_FCLASS : Zfinx_FPUnOp<0b1110000, "fclass">; + +} // Predicates = [HasStdExtZfinx] diff --git a/llvm/lib/Target/RISCV/RISCVSubtarget.h b/llvm/lib/Target/RISCV/RISCVSubtarget.h --- a/llvm/lib/Target/RISCV/RISCVSubtarget.h +++ b/llvm/lib/Target/RISCV/RISCVSubtarget.h @@ -54,6 +54,7 @@ bool HasStdExtZvlsseg = false; bool HasStdExtZvamo = false; bool HasStdExtZfh = false; + bool HasStdExtZfinx = false; bool HasRV64 = false; bool IsRV32E = false; bool EnableLinkerRelax = false; @@ -120,6 +121,7 @@ bool hasStdExtZvlsseg() const { return HasStdExtZvlsseg; } bool hasStdExtZvamo() const { return HasStdExtZvamo; } bool hasStdExtZfh() const { return HasStdExtZfh; } + bool hasStdExtZfinx() const { return HasStdExtZfinx; } bool is64Bit() const { return HasRV64; } bool isRV32E() const { return IsRV32E; } bool enableLinkerRelax() const { return EnableLinkerRelax; } diff --git a/llvm/test/MC/RISCV/rv32d-invalid.s b/llvm/test/MC/RISCV/rv32d-invalid.s --- a/llvm/test/MC/RISCV/rv32d-invalid.s +++ b/llvm/test/MC/RISCV/rv32d-invalid.s @@ -15,7 +15,7 @@ fsgnjn.d fa100, fa2, fa3 # CHECK: :[[@LINE]]:10: error: invalid operand for instruction # Integer registers where FP regs are expected -fadd.d a2, a1, a0 # CHECK: :[[@LINE]]:8: error: invalid operand for instruction +fadd.d a2, a1, a0 # CHECK: :[[@LINE]]:1: error: instruction requires the following: 'Zfinx' (Float in Integer) # FP registers where integer regs are expected fcvt.wu.d ft2, a1 # CHECK: :[[@LINE]]:11: error: invalid operand for instruction diff --git a/llvm/test/MC/RISCV/rv32zfh-invalid.s b/llvm/test/MC/RISCV/rv32zfh-invalid.s --- a/llvm/test/MC/RISCV/rv32zfh-invalid.s +++ b/llvm/test/MC/RISCV/rv32zfh-invalid.s @@ -30,7 +30,7 @@ fnmsub.h f18, f19, f20, f21, 0b111 # CHECK: :[[@LINE]]:30: error: operand must be a valid floating point rounding mode mnemonic # Integer registers where FP regs are expected -fadd.h a2, a1, a0 # CHECK: :[[@LINE]]:8: error: invalid operand for instruction +fadd.h a2, a1, a0 # CHECK: :[[@LINE]]:1: error: instruction requires the following: 'Zfinx' (Float in Integer) # FP registers where integer regs are expected fcvt.wu.h ft2, a1 # CHECK: :[[@LINE]]:11: error: invalid operand for instruction diff --git a/llvm/test/MC/RISCV/rvzfinx-valid.s b/llvm/test/MC/RISCV/rvzfinx-valid.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/RISCV/rvzfinx-valid.s @@ -0,0 +1,333 @@ +# RUN: llvm-mc -triple=riscv64 -show-encoding --mattr=+experimental-zfinx %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: not llvm-mc -triple=riscv64 -show-encoding %s 2>&1 \ +# RUN: | FileCheck %s --check-prefix=CHECK-ERROR +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+experimental-zfinx %s \ +# RUN: | llvm-objdump -d --mattr=+experimental-zfinx - \ +# RUN: | FileCheck %s --check-prefix=CHECK-INST +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+experimental-zfinx %s \ +# RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN + +fmadd.h a0, a1, a2, a3 +# CHECK-INST: fmadd.h a0, a1, a2, a3 +# CHECK-ENCODING: [0x43,0xf5,0xc5,0x6c] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 43 f5 c5 6c + +fmsub.h a0, a1, a2, a3 +# CHECK-INST: fmsub.h a0, a1, a2, a3 +# CHECK-ENCODING: [0x47,0xf5,0xc5,0x6c] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 47 f5 c5 6c + +fnmsub.h a0, a1, a2, a3 +# CHECK-INST: fnmsub.h a0, a1, a2, a3 +# CHECK-ENCODING: [0x4b,0xf5,0xc5,0x6c] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 4b f5 c5 6c + +fnmadd.h a0, a1, a2, a3 +# CHECK-INST: fnmadd.h a0, a1, a2, a3 +# CHECK-ENCODING: [0x4f,0xf5,0xc5,0x6c] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 4f f5 c5 6c + +fadd.h a0, a1, a2 +# CHECK-INST: fadd.h a0, a1, a2 +# CHECK-ENCODING: [0x53,0xf5,0xc5,0x04] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 c5 04 + +fsub.h a0, a1, a2 +# CHECK-INST: fsub.h a0, a1, a2 +# CHECK-ENCODING: [0x53,0xf5,0xc5,0x0c] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 c5 0c + +fmul.h a0, a1, a2 +# CHECK-INST: fmul.h a0, a1, a2 +# CHECK-ENCODING: [0x53,0xf5,0xc5,0x14] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 c5 14 + +fdiv.h a0, a1, a2 +# CHECK-INST: fdiv.h a0, a1, a2 +# CHECK-ENCODING: [0x53,0xf5,0xc5,0x1c] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 c5 1c + +fsqrt.h a0, a1 +# CHECK-INST: fsqrt.h a0, a1 +# CHECK-ENCODING: [0x53,0xf5,0x05,0x5c] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 05 5c + +fsgnj.h a0, a1, a2 +# CHECK-INST: fsgnj.h a0, a1, a2 +# CHECK-ENCODING: [0x53,0x85,0xc5,0x24] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 85 c5 24 + +fsgnjn.h a0, a1, a2 +# CHECK-INST: fsgnjn.h a0, a1, a2 +# CHECK-ENCODING: [0x53,0x95,0xc5,0x24] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 95 c5 24 + +fsgnjx.h a0, a1, a2 +# CHECK-INST: fsgnjx.h a0, a1, a2 +# CHECK-ENCODING: [0x53,0xa5,0xc5,0x24] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 a5 c5 24 + +fmin.h a0, a1, a2 +# CHECK-INST: fmin.h a0, a1, a2 +# CHECK-ENCODING: [0x53,0x85,0xc5,0x2c] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 85 c5 2c + +fmax.h a0, a1, a2 +# CHECK-INST: fmax.h a0, a1, a2 +# CHECK-ENCODING: [0x53,0x95,0xc5,0x2c] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 95 c5 2c + +feq.h a0, a1, a2 +# CHECK-INST: feq.h a0, a1, a2 +# CHECK-ENCODING: [0x53,0xa5,0xc5,0xa4] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 a5 c5 a4 + +flt.h a0, a1, a2 +# CHECK-INST: flt.h a0, a1, a2 +# CHECK-ENCODING: [0x53,0x95,0xc5,0xa4] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 95 c5 a4 + +fle.h a0, a1, a2 +# CHECK-INST: fle.h a0, a1, a2 +# CHECK-ENCODING: [0x53,0x85,0xc5,0xa4] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 85 c5 a4 + +fclass.h a0, a1 +# CHECK-INST: fclass.h a0, a1 +# CHECK-ENCODING: [0x53,0x95,0x05,0xe4] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 95 05 e4 + +fmadd.s a0, a1, a2, a3 +# CHECK-INST: fmadd.s a0, a1, a2, a3 +# CHECK-ENCODING: [0x43,0xf5,0xc5,0x68] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 43 f5 c5 68 + +fmsub.s a0, a1, a2, a3 +# CHECK-INST: fmsub.s a0, a1, a2, a3 +# CHECK-ENCODING: [0x47,0xf5,0xc5,0x68] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 47 f5 c5 68 + +fnmsub.s a0, a1, a2, a3 +# CHECK-INST: fnmsub.s a0, a1, a2, a3 +# CHECK-ENCODING: [0x4b,0xf5,0xc5,0x68] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 4b f5 c5 68 + +fnmadd.s a0, a1, a2, a3 +# CHECK-INST: fnmadd.s a0, a1, a2, a3 +# CHECK-ENCODING: [0x4f,0xf5,0xc5,0x68] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 4f f5 c5 68 + +fadd.s a0, a1, a2 +# CHECK-INST: fadd.s a0, a1, a2 +# CHECK-ENCODING: [0x53,0xf5,0xc5,0x00] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 c5 00 + +fsub.s a0, a1, a2 +# CHECK-INST: fsub.s a0, a1, a2 +# CHECK-ENCODING: [0x53,0xf5,0xc5,0x08] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 c5 08 + +fmul.s a0, a1, a2 +# CHECK-INST: fmul.s a0, a1, a2 +# CHECK-ENCODING: [0x53,0xf5,0xc5,0x10] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 c5 10 + +fdiv.s a0, a1, a2 +# CHECK-INST: fdiv.s a0, a1, a2 +# CHECK-ENCODING: [0x53,0xf5,0xc5,0x18] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 c5 18 + +fsqrt.s a0, a1 +# CHECK-INST: fsqrt.s a0, a1 +# CHECK-ENCODING: [0x53,0xf5,0x05,0x58] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 05 58 + +fsgnj.s a0, a1, a2 +# CHECK-INST: fsgnj.s a0, a1, a2 +# CHECK-ENCODING: [0x53,0x85,0xc5,0x20] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 85 c5 20 + +fsgnjn.s a0, a1, a2 +# CHECK-INST: fsgnjn.s a0, a1, a2 +# CHECK-ENCODING: [0x53,0x95,0xc5,0x20] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 95 c5 20 + +fsgnjx.s a0, a1, a2 +# CHECK-INST: fsgnjx.s a0, a1, a2 +# CHECK-ENCODING: [0x53,0xa5,0xc5,0x20] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 a5 c5 20 + +fmin.s a0, a1, a2 +# CHECK-INST: fmin.s a0, a1, a2 +# CHECK-ENCODING: [0x53,0x85,0xc5,0x28] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 85 c5 28 + +fmax.s a0, a1, a2 +# CHECK-INST: fmax.s a0, a1, a2 +# CHECK-ENCODING: [0x53,0x95,0xc5,0x28] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 95 c5 28 + +feq.s a0, a1, a2 +# CHECK-INST: feq.s a0, a1, a2 +# CHECK-ENCODING: [0x53,0xa5,0xc5,0xa0] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 a5 c5 a0 + +flt.s a0, a1, a2 +# CHECK-INST: flt.s a0, a1, a2 +# CHECK-ENCODING: [0x53,0x95,0xc5,0xa0] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 95 c5 a0 + +fle.s a0, a1, a2 +# CHECK-INST: fle.s a0, a1, a2 +# CHECK-ENCODING: [0x53,0x85,0xc5,0xa0] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 85 c5 a0 + +fclass.s a0, a1 +# CHECK-INST: fclass.s a0, a1 +# CHECK-ENCODING: [0x53,0x95,0x05,0xe0] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 95 05 e0 + +fmadd.d a0, a1, a2, a3 +# CHECK-INST: fmadd.d a0, a1, a2, a3 +# CHECK-ENCODING: [0x43,0xf5,0xc5,0x6a] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 43 f5 c5 6a + +fmsub.d a0, a1, a2, a3 +# CHECK-INST: fmsub.d a0, a1, a2, a3 +# CHECK-ENCODING: [0x47,0xf5,0xc5,0x6a] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 47 f5 c5 6a + +fnmsub.d a0, a1, a2, a3 +# CHECK-INST: fnmsub.d a0, a1, a2, a3 +# CHECK-ENCODING: [0x4b,0xf5,0xc5,0x6a] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 4b f5 c5 6a + +fnmadd.d a0, a1, a2, a3 +# CHECK-INST: fnmadd.d a0, a1, a2, a3 +# CHECK-ENCODING: [0x4f,0xf5,0xc5,0x6a] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 4f f5 c5 6a + +fadd.d a0, a1, a2 +# CHECK-INST: fadd.d a0, a1, a2 +# CHECK-ENCODING: [0x53,0xf5,0xc5,0x02] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 c5 02 + +fsub.d a0, a1, a2 +# CHECK-INST: fsub.d a0, a1, a2 +# CHECK-ENCODING: [0x53,0xf5,0xc5,0x0a] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 c5 0a + +fmul.d a0, a1, a2 +# CHECK-INST: fmul.d a0, a1, a2 +# CHECK-ENCODING: [0x53,0xf5,0xc5,0x12] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 c5 12 + +fdiv.d a0, a1, a2 +# CHECK-INST: fdiv.d a0, a1, a2 +# CHECK-ENCODING: [0x53,0xf5,0xc5,0x1a] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 c5 1a + +fsqrt.d a0, a1 +# CHECK-INST: fsqrt.d a0, a1 +# CHECK-ENCODING: [0x53,0xf5,0x05,0x5a] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 f5 05 5a + +fsgnj.d a0, a1, a2 +# CHECK-INST: fsgnj.d a0, a1, a2 +# CHECK-ENCODING: [0x53,0x85,0xc5,0x22] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 85 c5 22 + +fsgnjn.d a0, a1, a2 +# CHECK-INST: fsgnjn.d a0, a1, a2 +# CHECK-ENCODING: [0x53,0x95,0xc5,0x22] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 95 c5 22 + +fsgnjx.d a0, a1, a2 +# CHECK-INST: fsgnjx.d a0, a1, a2 +# CHECK-ENCODING: [0x53,0xa5,0xc5,0x22] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 a5 c5 22 + +fmin.d a0, a1, a2 +# CHECK-INST: fmin.d a0, a1, a2 +# CHECK-ENCODING: [0x53,0x85,0xc5,0x2a] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 85 c5 2a + +fmax.d a0, a1, a2 +# CHECK-INST: fmax.d a0, a1, a2 +# CHECK-ENCODING: [0x53,0x95,0xc5,0x2a] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 95 c5 2a + +feq.d a0, a1, a2 +# CHECK-INST: feq.d a0, a1, a2 +# CHECK-ENCODING: [0x53,0xa5,0xc5,0xa2] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 a5 c5 a2 + +flt.d a0, a1, a2 +# CHECK-INST: flt.d a0, a1, a2 +# CHECK-ENCODING: [0x53,0x95,0xc5,0xa2] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 95 c5 a2 + +fle.d a0, a1, a2 +# CHECK-INST: fle.d a0, a1, a2 +# CHECK-ENCODING: [0x53,0x85,0xc5,0xa2] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 85 c5 a2 + +fclass.d a0, a1 +# CHECK-INST: fclass.d a0, a1 +# CHECK-ENCODING: [0x53,0x95,0x05,0xe2] +# CHECK-ERROR: 'Zfinx' (Float in Integer) +# CHECK-UNKNOWN: 53 95 05 e2