From 28ebb495632d34bd668388cbf55ff51d5573be2e Mon Sep 17 00:00:00 2001 From: angie Date: Sat, 20 Apr 2024 10:09:21 -0400 Subject: [PATCH] Implement "constant" operand for `vcst` --- asdf.txt | 642 +----------------- .../generated/OperandType_enum_class.hpp | 1 + .../generated/Registers_enum_classes.hpp | 34 + .../InstrDescriptor_Descriptors_array.h | 8 +- include/generated/OperandType_enum.h | 1 + .../OperandType_function_declarations.h | 1 + .../RegisterDescriptor_Descriptors_arrays.h | 34 + include/generated/Registers_Names_arrays.h | 34 + include/generated/Registers_enums.h | 34 + .../generated/instrOpercandCallbacks_array.h | 1 + .../RabbitizerInstructionR4000Allegrex.h | 2 + include/instructions/RabbitizerRegister.h | 4 + .../RabbitizerRegisterDescriptor.h | 1 + rabbitizer/OperandType.pyi | 1 + rust/src/operand_type_enum.rs | 1 + rust/src/registers_enum.rs | 38 ++ rust/src/registers_methods.rs | 26 + src/instructions/RabbitizerInstrDescriptor.c | 19 +- .../RabbitizerInstruction.c | 5 +- .../RabbitizerInstruction_Examination.c | 5 +- ...izerInstructionR4000Allegrex_OperandType.c | 117 ++-- src/instructions/RabbitizerRegister.c | 24 +- .../r4000allegrex_vfpu4_fmt0_fmt3.inc | 8 +- .../RabbitizerOperandType_r4000allegrex.inc | 2 + ...bitizerRegister_R4000AllegrexVConstant.inc | 35 + ...scriptor_Descriptors_arrays.table.template | 4 + .../c/Registers_Names_arrays.table.template | 4 + .../c/Registers_enums.table.template | 4 + .../Registers_enum_classes.table.template | 4 + .../rust/registers_enum.tablers.template | 8 + .../r4000allegrex_vfpu_disasm.c | 256 +++---- 31 files changed, 526 insertions(+), 832 deletions(-) create mode 100644 tables/tables/registers/RabbitizerRegister_R4000AllegrexVConstant.inc diff --git a/asdf.txt b/asdf.txt index 3302bfde..d4ce3dee 100644 --- a/asdf.txt +++ b/asdf.txt @@ -4,646 +4,6 @@ tests/c/instruction_checks/r3000gte_disasm.c: 0 errors out of 65 entries. 100.00 tests/c/instruction_checks/r4000allegrex_disasm.c: 0 errors out of 73 entries. 100.00% correct. -Error on word '0xD0601001'. Expected 'vcst.s S010, Undefined', got '.word 0xD0601001 # vcst.s S010 # 00001000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0601081'. Expected 'vcst.p C010, Undefined', got '.word 0xD0601081 # vcst.p C010 # 00001000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0609001'. Expected 'vcst.t C010, Undefined', got '.word 0xD0609001 # vcst.t C010 # 00001000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0609081'. Expected 'vcst.q C010, Undefined', got '.word 0xD0609081 # vcst.q C010 # 00001000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0611001'. Expected 'vcst.s S010, VFPU_HUGE', got '.word 0xD0611001 # vcst.s S010 # 00011000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0611081'. Expected 'vcst.p C010, VFPU_HUGE', got '.word 0xD0611081 # vcst.p C010 # 00011000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0619001'. Expected 'vcst.t C010, VFPU_HUGE', got '.word 0xD0619001 # vcst.t C010 # 00011000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0619081'. Expected 'vcst.q C010, VFPU_HUGE', got '.word 0xD0619081 # vcst.q C010 # 00011000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0621001'. Expected 'vcst.s S010, VFPU_SQRT2', got '.word 0xD0621001 # vcst.s S010 # 00021000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0621081'. Expected 'vcst.p C010, VFPU_SQRT2', got '.word 0xD0621081 # vcst.p C010 # 00021000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0629001'. Expected 'vcst.t C010, VFPU_SQRT2', got '.word 0xD0629001 # vcst.t C010 # 00021000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0629081'. Expected 'vcst.q C010, VFPU_SQRT2', got '.word 0xD0629081 # vcst.q C010 # 00021000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0631001'. Expected 'vcst.s S010, VFPU_SQRT1_2', got '.word 0xD0631001 # vcst.s S010 # 00031000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0631081'. Expected 'vcst.p C010, VFPU_SQRT1_2', got '.word 0xD0631081 # vcst.p C010 # 00031000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0639001'. Expected 'vcst.t C010, VFPU_SQRT1_2', got '.word 0xD0639001 # vcst.t C010 # 00031000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0639081'. Expected 'vcst.q C010, VFPU_SQRT1_2', got '.word 0xD0639081 # vcst.q C010 # 00031000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0641001'. Expected 'vcst.s S010, VFPU_2_SQRTPI', got '.word 0xD0641001 # vcst.s S010 # 00041000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0641081'. Expected 'vcst.p C010, VFPU_2_SQRTPI', got '.word 0xD0641081 # vcst.p C010 # 00041000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0649001'. Expected 'vcst.t C010, VFPU_2_SQRTPI', got '.word 0xD0649001 # vcst.t C010 # 00041000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0649081'. Expected 'vcst.q C010, VFPU_2_SQRTPI', got '.word 0xD0649081 # vcst.q C010 # 00041000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0651001'. Expected 'vcst.s S010, VFPU_2_PI', got '.word 0xD0651001 # vcst.s S010 # 00051000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0651081'. Expected 'vcst.p C010, VFPU_2_PI', got '.word 0xD0651081 # vcst.p C010 # 00051000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0659001'. Expected 'vcst.t C010, VFPU_2_PI', got '.word 0xD0659001 # vcst.t C010 # 00051000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0659081'. Expected 'vcst.q C010, VFPU_2_PI', got '.word 0xD0659081 # vcst.q C010 # 00051000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0661001'. Expected 'vcst.s S010, VFPU_1_PI', got '.word 0xD0661001 # vcst.s S010 # 00061000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0661081'. Expected 'vcst.p C010, VFPU_1_PI', got '.word 0xD0661081 # vcst.p C010 # 00061000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0669001'. Expected 'vcst.t C010, VFPU_1_PI', got '.word 0xD0669001 # vcst.t C010 # 00061000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0669081'. Expected 'vcst.q C010, VFPU_1_PI', got '.word 0xD0669081 # vcst.q C010 # 00061000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0671001'. Expected 'vcst.s S010, VFPU_PI_4', got '.word 0xD0671001 # vcst.s S010 # 00071000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0671081'. Expected 'vcst.p C010, VFPU_PI_4', got '.word 0xD0671081 # vcst.p C010 # 00071000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0679001'. Expected 'vcst.t C010, VFPU_PI_4', got '.word 0xD0679001 # vcst.t C010 # 00071000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0679081'. Expected 'vcst.q C010, VFPU_PI_4', got '.word 0xD0679081 # vcst.q C010 # 00071000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0681001'. Expected 'vcst.s S010, VFPU_PI_2', got '.word 0xD0681001 # vcst.s S010 # 00081000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0681081'. Expected 'vcst.p C010, VFPU_PI_2', got '.word 0xD0681081 # vcst.p C010 # 00081000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0689001'. Expected 'vcst.t C010, VFPU_PI_2', got '.word 0xD0689001 # vcst.t C010 # 00081000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0689081'. Expected 'vcst.q C010, VFPU_PI_2', got '.word 0xD0689081 # vcst.q C010 # 00081000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0691001'. Expected 'vcst.s S010, VFPU_PI', got '.word 0xD0691001 # vcst.s S010 # 00091000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0691081'. Expected 'vcst.p C010, VFPU_PI', got '.word 0xD0691081 # vcst.p C010 # 00091000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0699001'. Expected 'vcst.t C010, VFPU_PI', got '.word 0xD0699001 # vcst.t C010 # 00091000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0699081'. Expected 'vcst.q C010, VFPU_PI', got '.word 0xD0699081 # vcst.q C010 # 00091000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06A1001'. Expected 'vcst.s S010, VFPU_E', got '.word 0xD06A1001 # vcst.s S010 # 000A1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06A1081'. Expected 'vcst.p C010, VFPU_E', got '.word 0xD06A1081 # vcst.p C010 # 000A1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06A9001'. Expected 'vcst.t C010, VFPU_E', got '.word 0xD06A9001 # vcst.t C010 # 000A1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06A9081'. Expected 'vcst.q C010, VFPU_E', got '.word 0xD06A9081 # vcst.q C010 # 000A1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06B1001'. Expected 'vcst.s S010, VFPU_LOG2E', got '.word 0xD06B1001 # vcst.s S010 # 000B1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06B1081'. Expected 'vcst.p C010, VFPU_LOG2E', got '.word 0xD06B1081 # vcst.p C010 # 000B1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06B9001'. Expected 'vcst.t C010, VFPU_LOG2E', got '.word 0xD06B9001 # vcst.t C010 # 000B1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06B9081'. Expected 'vcst.q C010, VFPU_LOG2E', got '.word 0xD06B9081 # vcst.q C010 # 000B1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06C1001'. Expected 'vcst.s S010, VFPU_LOG10E', got '.word 0xD06C1001 # vcst.s S010 # 000C1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06C1081'. Expected 'vcst.p C010, VFPU_LOG10E', got '.word 0xD06C1081 # vcst.p C010 # 000C1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06C9001'. Expected 'vcst.t C010, VFPU_LOG10E', got '.word 0xD06C9001 # vcst.t C010 # 000C1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06C9081'. Expected 'vcst.q C010, VFPU_LOG10E', got '.word 0xD06C9081 # vcst.q C010 # 000C1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06D1001'. Expected 'vcst.s S010, VFPU_LN2', got '.word 0xD06D1001 # vcst.s S010 # 000D1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06D1081'. Expected 'vcst.p C010, VFPU_LN2', got '.word 0xD06D1081 # vcst.p C010 # 000D1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06D9001'. Expected 'vcst.t C010, VFPU_LN2', got '.word 0xD06D9001 # vcst.t C010 # 000D1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06D9081'. Expected 'vcst.q C010, VFPU_LN2', got '.word 0xD06D9081 # vcst.q C010 # 000D1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06E1001'. Expected 'vcst.s S010, VFPU_LN10', got '.word 0xD06E1001 # vcst.s S010 # 000E1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06E1081'. Expected 'vcst.p C010, VFPU_LN10', got '.word 0xD06E1081 # vcst.p C010 # 000E1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06E9001'. Expected 'vcst.t C010, VFPU_LN10', got '.word 0xD06E9001 # vcst.t C010 # 000E1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06E9081'. Expected 'vcst.q C010, VFPU_LN10', got '.word 0xD06E9081 # vcst.q C010 # 000E1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06F1001'. Expected 'vcst.s S010, VFPU_2PI', got '.word 0xD06F1001 # vcst.s S010 # 000F1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06F1081'. Expected 'vcst.p C010, VFPU_2PI', got '.word 0xD06F1081 # vcst.p C010 # 000F1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06F9001'. Expected 'vcst.t C010, VFPU_2PI', got '.word 0xD06F9001 # vcst.t C010 # 000F1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD06F9081'. Expected 'vcst.q C010, VFPU_2PI', got '.word 0xD06F9081 # vcst.q C010 # 000F1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0701001'. Expected 'vcst.s S010, VFPU_PI_6', got '.word 0xD0701001 # vcst.s S010 # 00101000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0701081'. Expected 'vcst.p C010, VFPU_PI_6', got '.word 0xD0701081 # vcst.p C010 # 00101000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0709001'. Expected 'vcst.t C010, VFPU_PI_6', got '.word 0xD0709001 # vcst.t C010 # 00101000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0709081'. Expected 'vcst.q C010, VFPU_PI_6', got '.word 0xD0709081 # vcst.q C010 # 00101000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0711001'. Expected 'vcst.s S010, VFPU_LOG10TWO', got '.word 0xD0711001 # vcst.s S010 # 00111000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0711081'. Expected 'vcst.p C010, VFPU_LOG10TWO', got '.word 0xD0711081 # vcst.p C010 # 00111000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0719001'. Expected 'vcst.t C010, VFPU_LOG10TWO', got '.word 0xD0719001 # vcst.t C010 # 00111000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0719081'. Expected 'vcst.q C010, VFPU_LOG10TWO', got '.word 0xD0719081 # vcst.q C010 # 00111000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0721001'. Expected 'vcst.s S010, VFPU_LOG2TEN', got '.word 0xD0721001 # vcst.s S010 # 00121000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0721081'. Expected 'vcst.p C010, VFPU_LOG2TEN', got '.word 0xD0721081 # vcst.p C010 # 00121000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0729001'. Expected 'vcst.t C010, VFPU_LOG2TEN', got '.word 0xD0729001 # vcst.t C010 # 00121000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0729081'. Expected 'vcst.q C010, VFPU_LOG2TEN', got '.word 0xD0729081 # vcst.q C010 # 00121000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0731001'. Expected 'vcst.s S010, VFPU_SQRT3_2', got '.word 0xD0731001 # vcst.s S010 # 00131000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0731081'. Expected 'vcst.p C010, VFPU_SQRT3_2', got '.word 0xD0731081 # vcst.p C010 # 00131000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0739001'. Expected 'vcst.t C010, VFPU_SQRT3_2', got '.word 0xD0739001 # vcst.t C010 # 00131000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0739081'. Expected 'vcst.q C010, VFPU_SQRT3_2', got '.word 0xD0739081 # vcst.q C010 # 00131000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0741001'. Expected 'vcst.s S010, Undefined', got '.word 0xD0741001 # vcst.s S010 # 00141000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0741081'. Expected 'vcst.p C010, Undefined', got '.word 0xD0741081 # vcst.p C010 # 00141000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0749001'. Expected 'vcst.t C010, Undefined', got '.word 0xD0749001 # vcst.t C010 # 00141000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0749081'. Expected 'vcst.q C010, Undefined', got '.word 0xD0749081 # vcst.q C010 # 00141000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0751001'. Expected 'vcst.s S010, Undefined', got '.word 0xD0751001 # vcst.s S010 # 00151000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0751081'. Expected 'vcst.p C010, Undefined', got '.word 0xD0751081 # vcst.p C010 # 00151000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0759001'. Expected 'vcst.t C010, Undefined', got '.word 0xD0759001 # vcst.t C010 # 00151000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0759081'. Expected 'vcst.q C010, Undefined', got '.word 0xD0759081 # vcst.q C010 # 00151000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0761001'. Expected 'vcst.s S010, Undefined', got '.word 0xD0761001 # vcst.s S010 # 00161000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0761081'. Expected 'vcst.p C010, Undefined', got '.word 0xD0761081 # vcst.p C010 # 00161000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0769001'. Expected 'vcst.t C010, Undefined', got '.word 0xD0769001 # vcst.t C010 # 00161000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0769081'. Expected 'vcst.q C010, Undefined', got '.word 0xD0769081 # vcst.q C010 # 00161000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0771001'. Expected 'vcst.s S010, Undefined', got '.word 0xD0771001 # vcst.s S010 # 00171000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0771081'. Expected 'vcst.p C010, Undefined', got '.word 0xD0771081 # vcst.p C010 # 00171000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0779001'. Expected 'vcst.t C010, Undefined', got '.word 0xD0779001 # vcst.t C010 # 00171000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0779081'. Expected 'vcst.q C010, Undefined', got '.word 0xD0779081 # vcst.q C010 # 00171000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0781001'. Expected 'vcst.s S010, Undefined', got '.word 0xD0781001 # vcst.s S010 # 00181000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0781081'. Expected 'vcst.p C010, Undefined', got '.word 0xD0781081 # vcst.p C010 # 00181000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0789001'. Expected 'vcst.t C010, Undefined', got '.word 0xD0789001 # vcst.t C010 # 00181000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0789081'. Expected 'vcst.q C010, Undefined', got '.word 0xD0789081 # vcst.q C010 # 00181000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0791001'. Expected 'vcst.s S010, Undefined', got '.word 0xD0791001 # vcst.s S010 # 00191000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0791081'. Expected 'vcst.p C010, Undefined', got '.word 0xD0791081 # vcst.p C010 # 00191000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0799001'. Expected 'vcst.t C010, Undefined', got '.word 0xD0799001 # vcst.t C010 # 00191000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD0799081'. Expected 'vcst.q C010, Undefined', got '.word 0xD0799081 # vcst.q C010 # 00191000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07A1001'. Expected 'vcst.s S010, Undefined', got '.word 0xD07A1001 # vcst.s S010 # 001A1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07A1081'. Expected 'vcst.p C010, Undefined', got '.word 0xD07A1081 # vcst.p C010 # 001A1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07A9001'. Expected 'vcst.t C010, Undefined', got '.word 0xD07A9001 # vcst.t C010 # 001A1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07A9081'. Expected 'vcst.q C010, Undefined', got '.word 0xD07A9081 # vcst.q C010 # 001A1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07B1001'. Expected 'vcst.s S010, Undefined', got '.word 0xD07B1001 # vcst.s S010 # 001B1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07B1081'. Expected 'vcst.p C010, Undefined', got '.word 0xD07B1081 # vcst.p C010 # 001B1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07B9001'. Expected 'vcst.t C010, Undefined', got '.word 0xD07B9001 # vcst.t C010 # 001B1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07B9081'. Expected 'vcst.q C010, Undefined', got '.word 0xD07B9081 # vcst.q C010 # 001B1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07C1001'. Expected 'vcst.s S010, Undefined', got '.word 0xD07C1001 # vcst.s S010 # 001C1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07C1081'. Expected 'vcst.p C010, Undefined', got '.word 0xD07C1081 # vcst.p C010 # 001C1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07C9001'. Expected 'vcst.t C010, Undefined', got '.word 0xD07C9001 # vcst.t C010 # 001C1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07C9081'. Expected 'vcst.q C010, Undefined', got '.word 0xD07C9081 # vcst.q C010 # 001C1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07D1001'. Expected 'vcst.s S010, Undefined', got '.word 0xD07D1001 # vcst.s S010 # 001D1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07D1081'. Expected 'vcst.p C010, Undefined', got '.word 0xD07D1081 # vcst.p C010 # 001D1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07D9001'. Expected 'vcst.t C010, Undefined', got '.word 0xD07D9001 # vcst.t C010 # 001D1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07D9081'. Expected 'vcst.q C010, Undefined', got '.word 0xD07D9081 # vcst.q C010 # 001D1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07E1001'. Expected 'vcst.s S010, Undefined', got '.word 0xD07E1001 # vcst.s S010 # 001E1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07E1081'. Expected 'vcst.p C010, Undefined', got '.word 0xD07E1081 # vcst.p C010 # 001E1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07E9001'. Expected 'vcst.t C010, Undefined', got '.word 0xD07E9001 # vcst.t C010 # 001E1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07E9081'. Expected 'vcst.q C010, Undefined', got '.word 0xD07E9081 # vcst.q C010 # 001E1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07F1001'. Expected 'vcst.s S010, Undefined', got '.word 0xD07F1001 # vcst.s S010 # 001F1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07F1081'. Expected 'vcst.p C010, Undefined', got '.word 0xD07F1081 # vcst.p C010 # 001F1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07F9001'. Expected 'vcst.t C010, Undefined', got '.word 0xD07F9001 # vcst.t C010 # 001F1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - -Error on word '0xD07F9081'. Expected 'vcst.q C010, Undefined', got '.word 0xD07F9081 # vcst.q C010 # 001F1000 ' - File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c - InstrIdType: 'R4000ALLEGREX_VFPU4_FMT0_FMT3' - gnuMode 'true' - Error on word '0xD2001001'. Expected 'vf2in.s S010, S400, 0', got 'vf2in.s S010, S400' File: tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c InstrIdType: 'R4000ALLEGREX_VFPU4_FMT2_FMT0' @@ -5914,5 +5274,5 @@ Error on word '0xF3A090C0'. Expected 'vrot.q C002, S400, [C,S,S,S]', got 'v InstrIdType: 'R4000ALLEGREX_VFPU6_FMT7' gnuMode 'true' -tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c: 1182 errors out of 4811 entries. 75.43% correct. +tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c: 1054 errors out of 4811 entries. 78.09% correct. diff --git a/cplusplus/include/generated/OperandType_enum_class.hpp b/cplusplus/include/generated/OperandType_enum_class.hpp index da4064b4..7b9c23ae 100644 --- a/cplusplus/include/generated/OperandType_enum_class.hpp +++ b/cplusplus/include/generated/OperandType_enum_class.hpp @@ -89,6 +89,7 @@ enum class OperandType { r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt, r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt, r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt, + r4000allegrex_vconstant, r5900_I, r5900_Q, r5900_R, diff --git a/cplusplus/include/generated/Registers_enum_classes.hpp b/cplusplus/include/generated/Registers_enum_classes.hpp index 2a2968f7..dfb95277 100644 --- a/cplusplus/include/generated/Registers_enum_classes.hpp +++ b/cplusplus/include/generated/Registers_enum_classes.hpp @@ -1477,6 +1477,40 @@ R4000ALLEGREX_VFPUCONTROL_254, R4000ALLEGREX_VFPUCONTROL_255, }; + enum class VConstant { + R4000ALLEGREX_VCONSTANT_INVALID_0, + R4000ALLEGREX_VCONSTANT_VFPU_HUGE, + R4000ALLEGREX_VCONSTANT_VFPU_SQRT2, + R4000ALLEGREX_VCONSTANT_VFPU_SQRT1_2, + R4000ALLEGREX_VCONSTANT_VFPU_2_SQRTPI, + R4000ALLEGREX_VCONSTANT_VFPU_2_PI, + R4000ALLEGREX_VCONSTANT_VFPU_1_PI, + R4000ALLEGREX_VCONSTANT_VFPU_PI_4, + R4000ALLEGREX_VCONSTANT_VFPU_PI_2, + R4000ALLEGREX_VCONSTANT_VFPU_PI, + R4000ALLEGREX_VCONSTANT_VFPU_E, + R4000ALLEGREX_VCONSTANT_VFPU_LOG2E, + R4000ALLEGREX_VCONSTANT_VFPU_LOG10E, + R4000ALLEGREX_VCONSTANT_VFPU_LN2, + R4000ALLEGREX_VCONSTANT_VFPU_LN10, + R4000ALLEGREX_VCONSTANT_VFPU_2PI, + R4000ALLEGREX_VCONSTANT_VFPU_PI_6, + R4000ALLEGREX_VCONSTANT_VFPU_LOG10TWO, + R4000ALLEGREX_VCONSTANT_VFPU_LOG2TEN, + R4000ALLEGREX_VCONSTANT_VFPU_SQRT3_2, + R4000ALLEGREX_VCONSTANT_INVALID_20, + R4000ALLEGREX_VCONSTANT_INVALID_21, + R4000ALLEGREX_VCONSTANT_INVALID_22, + R4000ALLEGREX_VCONSTANT_INVALID_23, + R4000ALLEGREX_VCONSTANT_INVALID_24, + R4000ALLEGREX_VCONSTANT_INVALID_25, + R4000ALLEGREX_VCONSTANT_INVALID_26, + R4000ALLEGREX_VCONSTANT_INVALID_27, + R4000ALLEGREX_VCONSTANT_INVALID_28, + R4000ALLEGREX_VCONSTANT_INVALID_29, + R4000ALLEGREX_VCONSTANT_INVALID_30, + R4000ALLEGREX_VCONSTANT_INVALID_31, + }; }; namespace R5900 { enum class VF { diff --git a/include/generated/InstrDescriptor_Descriptors_array.h b/include/generated/InstrDescriptor_Descriptors_array.h index a00c5f2c..af67681f 100644 --- a/include/generated/InstrDescriptor_Descriptors_array.h +++ b/include/generated/InstrDescriptor_Descriptors_array.h @@ -681,10 +681,10 @@ const RabbitizerInstrDescriptor RabbitizerInstrDescriptor_Descriptors[] = { [RABBITIZER_INSTR_ID_r4000allegrex_vt4444_q] = { .operands={RAB_OPERAND_r4000allegrex_p_vd, RAB_OPERAND_r4000allegrex_q_vs}, .instrType=RABBITIZER_INSTR_TYPE_R }, [RABBITIZER_INSTR_ID_r4000allegrex_vt5551_q] = { .operands={RAB_OPERAND_r4000allegrex_p_vd, RAB_OPERAND_r4000allegrex_q_vs}, .instrType=RABBITIZER_INSTR_TYPE_R }, [RABBITIZER_INSTR_ID_r4000allegrex_vt5650_q] = { .operands={RAB_OPERAND_r4000allegrex_p_vd, RAB_OPERAND_r4000allegrex_q_vs}, .instrType=RABBITIZER_INSTR_TYPE_R }, - [RABBITIZER_INSTR_ID_r4000allegrex_vcst_s] = { .operands={RAB_OPERAND_r4000allegrex_s_vd}, .instrType=RABBITIZER_INSTR_TYPE_R }, - [RABBITIZER_INSTR_ID_r4000allegrex_vcst_p] = { .operands={RAB_OPERAND_r4000allegrex_p_vd}, .instrType=RABBITIZER_INSTR_TYPE_R }, - [RABBITIZER_INSTR_ID_r4000allegrex_vcst_t] = { .operands={RAB_OPERAND_r4000allegrex_t_vd}, .instrType=RABBITIZER_INSTR_TYPE_R }, - [RABBITIZER_INSTR_ID_r4000allegrex_vcst_q] = { .operands={RAB_OPERAND_r4000allegrex_q_vd}, .instrType=RABBITIZER_INSTR_TYPE_R }, + [RABBITIZER_INSTR_ID_r4000allegrex_vcst_s] = { .operands={RAB_OPERAND_r4000allegrex_s_vd, RAB_OPERAND_r4000allegrex_vconstant}, .instrType=RABBITIZER_INSTR_TYPE_R }, + [RABBITIZER_INSTR_ID_r4000allegrex_vcst_p] = { .operands={RAB_OPERAND_r4000allegrex_p_vd, RAB_OPERAND_r4000allegrex_vconstant}, .instrType=RABBITIZER_INSTR_TYPE_R }, + [RABBITIZER_INSTR_ID_r4000allegrex_vcst_t] = { .operands={RAB_OPERAND_r4000allegrex_t_vd, RAB_OPERAND_r4000allegrex_vconstant}, .instrType=RABBITIZER_INSTR_TYPE_R }, + [RABBITIZER_INSTR_ID_r4000allegrex_vcst_q] = { .operands={RAB_OPERAND_r4000allegrex_q_vd, RAB_OPERAND_r4000allegrex_vconstant}, .instrType=RABBITIZER_INSTR_TYPE_R }, [RABBITIZER_INSTR_ID_r4000allegrex_vf2in_s] = { .operands={RAB_OPERAND_r4000allegrex_s_vd, RAB_OPERAND_r4000allegrex_s_vs}, .instrType=RABBITIZER_INSTR_TYPE_R }, [RABBITIZER_INSTR_ID_r4000allegrex_vf2in_p] = { .operands={RAB_OPERAND_r4000allegrex_p_vd, RAB_OPERAND_r4000allegrex_p_vs}, .instrType=RABBITIZER_INSTR_TYPE_R }, [RABBITIZER_INSTR_ID_r4000allegrex_vf2in_t] = { .operands={RAB_OPERAND_r4000allegrex_t_vd, RAB_OPERAND_r4000allegrex_t_vs}, .instrType=RABBITIZER_INSTR_TYPE_R }, diff --git a/include/generated/OperandType_enum.h b/include/generated/OperandType_enum.h index 5603222c..be8a17d4 100644 --- a/include/generated/OperandType_enum.h +++ b/include/generated/OperandType_enum.h @@ -89,6 +89,7 @@ typedef enum RabbitizerOperandType { RAB_OPERAND_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt, RAB_OPERAND_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt, RAB_OPERAND_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt, + RAB_OPERAND_r4000allegrex_vconstant, RAB_OPERAND_r5900_I, RAB_OPERAND_r5900_Q, RAB_OPERAND_r5900_R, diff --git a/include/generated/OperandType_function_declarations.h b/include/generated/OperandType_function_declarations.h index 2d85c683..8e37fa72 100644 --- a/include/generated/OperandType_function_declarations.h +++ b/include/generated/OperandType_function_declarations.h @@ -87,6 +87,7 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt (const struct RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength); size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt (const struct RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength); size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt (const struct RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength); + size_t RabbitizerOperandType_process_r4000allegrex_vconstant (const struct RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength); size_t RabbitizerOperandType_process_r5900_I (const struct RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength); size_t RabbitizerOperandType_process_r5900_Q (const struct RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength); size_t RabbitizerOperandType_process_r5900_R (const struct RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength); diff --git a/include/generated/RegisterDescriptor_Descriptors_arrays.h b/include/generated/RegisterDescriptor_Descriptors_arrays.h index 809b0665..740757c7 100644 --- a/include/generated/RegisterDescriptor_Descriptors_arrays.h +++ b/include/generated/RegisterDescriptor_Descriptors_arrays.h @@ -1472,6 +1472,40 @@ const RabbitizerRegisterDescriptor RabbitizerRegister_R4000AllegrexVfpuControl_D [RABBITIZER_REG_R4000ALLEGREX_VFPUCONTROL_254] = { 0 }, [RABBITIZER_REG_R4000ALLEGREX_VFPUCONTROL_255] = { 0 }, }; +const RabbitizerRegisterDescriptor RabbitizerRegister_R4000AllegrexVConstant_Descriptors[] = { + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_0] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_HUGE] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_SQRT2] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_SQRT1_2] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_2_SQRTPI] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_2_PI] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_1_PI] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_PI_4] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_PI_2] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_PI] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_E] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LOG2E] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LOG10E] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LN2] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LN10] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_2PI] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_PI_6] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LOG10TWO] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LOG2TEN] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_SQRT3_2] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_20] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_21] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_22] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_23] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_24] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_25] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_26] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_27] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_28] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_29] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_30] = { 0 }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_31] = { 0 }, +}; const RabbitizerRegisterDescriptor RabbitizerRegister_R5900VF_Descriptors[] = { [RABBITIZER_REG_R5900_VF_vf0] = { 0 }, [RABBITIZER_REG_R5900_VF_vf1] = { 0 }, diff --git a/include/generated/Registers_Names_arrays.h b/include/generated/Registers_Names_arrays.h index 603384d4..98dcc6bf 100644 --- a/include/generated/Registers_Names_arrays.h +++ b/include/generated/Registers_Names_arrays.h @@ -1472,6 +1472,40 @@ const char *RabbitizerRegister_R4000AllegrexVfpuControl_Names[][2] = { [RABBITIZER_REG_R4000ALLEGREX_VFPUCONTROL_254] = { "$" "254", "$" "254" }, [RABBITIZER_REG_R4000ALLEGREX_VFPUCONTROL_255] = { "$" "255", "$" "255" }, }; +const char *RabbitizerRegister_R4000AllegrexVConstant_Names[][2] = { + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_0] = { "$" "0", "INVALID_0" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_HUGE] = { "$" "1", "VFPU_HUGE" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_SQRT2] = { "$" "2", "VFPU_SQRT2" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_SQRT1_2] = { "$" "3", "VFPU_SQRT1_2" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_2_SQRTPI] = { "$" "4", "VFPU_2_SQRTPI" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_2_PI] = { "$" "5", "VFPU_2_PI" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_1_PI] = { "$" "6", "VFPU_1_PI" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_PI_4] = { "$" "7", "VFPU_PI_4" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_PI_2] = { "$" "8", "VFPU_PI_2" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_PI] = { "$" "9", "VFPU_PI" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_E] = { "$" "10", "VFPU_E" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LOG2E] = { "$" "11", "VFPU_LOG2E" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LOG10E] = { "$" "12", "VFPU_LOG10E" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LN2] = { "$" "13", "VFPU_LN2" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LN10] = { "$" "14", "VFPU_LN10" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_2PI] = { "$" "15", "VFPU_2PI" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_PI_6] = { "$" "16", "VFPU_PI_6" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LOG10TWO] = { "$" "17", "VFPU_LOG10TWO" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LOG2TEN] = { "$" "18", "VFPU_LOG2TEN" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_SQRT3_2] = { "$" "19", "VFPU_SQRT3_2" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_20] = { "$" "20", "INVALID_20" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_21] = { "$" "21", "INVALID_21" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_22] = { "$" "22", "INVALID_22" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_23] = { "$" "23", "INVALID_23" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_24] = { "$" "24", "INVALID_24" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_25] = { "$" "25", "INVALID_25" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_26] = { "$" "26", "INVALID_26" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_27] = { "$" "27", "INVALID_27" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_28] = { "$" "28", "INVALID_28" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_29] = { "$" "29", "INVALID_29" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_30] = { "$" "30", "INVALID_30" }, + [RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_31] = { "$" "31", "INVALID_31" }, +}; const char *RabbitizerRegister_R5900VF_Names[][2] = { [RABBITIZER_REG_R5900_VF_vf0] = { "$" "vf0", "$" "vf0" }, [RABBITIZER_REG_R5900_VF_vf1] = { "$" "vf1", "$" "vf1" }, diff --git a/include/generated/Registers_enums.h b/include/generated/Registers_enums.h index 13b1ed39..44661e51 100644 --- a/include/generated/Registers_enums.h +++ b/include/generated/Registers_enums.h @@ -1472,6 +1472,40 @@ typedef enum RabbitizerRegister_R4000AllegrexVfpuControl { RABBITIZER_REG_R4000ALLEGREX_VFPUCONTROL_254, RABBITIZER_REG_R4000ALLEGREX_VFPUCONTROL_255, } RabbitizerRegister_R4000AllegrexVfpuControl; +typedef enum RabbitizerRegister_R4000AllegrexVConstant { + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_0, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_HUGE, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_SQRT2, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_SQRT1_2, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_2_SQRTPI, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_2_PI, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_1_PI, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_PI_4, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_PI_2, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_PI, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_E, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LOG2E, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LOG10E, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LN2, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LN10, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_2PI, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_PI_6, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LOG10TWO, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_LOG2TEN, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_VFPU_SQRT3_2, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_20, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_21, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_22, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_23, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_24, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_25, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_26, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_27, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_28, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_29, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_30, + RABBITIZER_REG_R4000ALLEGREX_VCONSTANT_INVALID_31, +} RabbitizerRegister_R4000AllegrexVConstant; typedef enum RabbitizerRegister_R5900VF { RABBITIZER_REG_R5900_VF_vf0, RABBITIZER_REG_R5900_VF_vf1, diff --git a/include/generated/instrOpercandCallbacks_array.h b/include/generated/instrOpercandCallbacks_array.h index a8be1fda..4a54cc6f 100644 --- a/include/generated/instrOpercandCallbacks_array.h +++ b/include/generated/instrOpercandCallbacks_array.h @@ -88,6 +88,7 @@ const OperandCallback instrOpercandCallbacks[] = { [RAB_OPERAND_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt] = RabbitizerOperandType_process_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt, [RAB_OPERAND_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt] = RabbitizerOperandType_process_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt, [RAB_OPERAND_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt] = RabbitizerOperandType_process_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt, + [RAB_OPERAND_r4000allegrex_vconstant] = RabbitizerOperandType_process_r4000allegrex_vconstant, [RAB_OPERAND_r5900_I] = RabbitizerOperandType_process_r5900_I, [RAB_OPERAND_r5900_Q] = RabbitizerOperandType_process_r5900_Q, [RAB_OPERAND_r5900_R] = RabbitizerOperandType_process_r5900_R, diff --git a/include/instructions/RabbitizerInstructionR4000Allegrex.h b/include/instructions/RabbitizerInstructionR4000Allegrex.h index f7160938..c6a7a1a4 100644 --- a/include/instructions/RabbitizerInstructionR4000Allegrex.h +++ b/include/instructions/RabbitizerInstructionR4000Allegrex.h @@ -52,6 +52,7 @@ extern "C" { #define RAB_INSTR_R4000ALLEGREX_GET_vfpu7_fmt(self) (SHIFTR((self)->word, 0, 26)) #define RAB_INSTR_R4000ALLEGREX_GET_vcmp_cond(self) (SHIFTR((self)->word, 0, 4)) +#define RAB_INSTR_R4000ALLEGREX_GET_vconstant(self) (SHIFTR((self)->word, 16, 5)) #define RAB_INSTR_R4000ALLEGREX_PACK_vt(word, value) (BITREPACK((word), (value), 16, 7)) @@ -94,6 +95,7 @@ extern "C" { #define RAB_INSTR_R4000ALLEGREX_PACK_vfpu7_fmt(word, value) (BITREPACK((word), (value), 0, 26)) #define RAB_INSTR_R4000ALLEGREX_PACK_vcmp_cond(word, value) (BITREPACK((word), (value), 0, 4)) +#define RAB_INSTR_R4000ALLEGREX_PACK_vconstant(word, value) (BITREPACK((word), (value), 16, 5)) NON_NULL(1) diff --git a/include/instructions/RabbitizerRegister.h b/include/instructions/RabbitizerRegister.h index 36b3ef68..5b99f713 100644 --- a/include/instructions/RabbitizerRegister.h +++ b/include/instructions/RabbitizerRegister.h @@ -74,6 +74,8 @@ NODISCARD PURE RETURNS_NON_NULL const char *RabbitizerRegister_getNameR4000AllegrexM4x4(uint8_t regValue); NODISCARD PURE RETURNS_NON_NULL const char *RabbitizerRegister_getNameR4000AllegrexVfpuControl(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameR4000AllegrexVConstant(uint8_t regValue); NODISCARD PURE RETURNS_NON_NULL const char *RabbitizerRegister_getNameR5900VF(uint8_t regValue); @@ -120,6 +122,8 @@ NODISCARD PURE RETURNS_NON_NULL const RabbitizerRegisterDescriptor *RabbitizerRegister_getDescriptor_R4000AllegrexM4x4(uint8_t regValue); NODISCARD PURE RETURNS_NON_NULL const RabbitizerRegisterDescriptor *RabbitizerRegister_getDescriptor_R4000AllegrexVfpuControl(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const RabbitizerRegisterDescriptor *RabbitizerRegister_getDescriptor_R4000AllegrexVConstant(uint8_t regValue); NODISCARD PURE RETURNS_NON_NULL const RabbitizerRegisterDescriptor *RabbitizerRegister_getDescriptor_R5900VF(uint8_t regValue); diff --git a/include/instructions/RabbitizerRegisterDescriptor.h b/include/instructions/RabbitizerRegisterDescriptor.h index fec429f3..1a431cfc 100644 --- a/include/instructions/RabbitizerRegisterDescriptor.h +++ b/include/instructions/RabbitizerRegisterDescriptor.h @@ -61,6 +61,7 @@ extern const RabbitizerRegisterDescriptor RabbitizerRegister_R4000AllegrexM2x2_D extern const RabbitizerRegisterDescriptor RabbitizerRegister_R4000AllegrexM3x3_Descriptors[]; extern const RabbitizerRegisterDescriptor RabbitizerRegister_R4000AllegrexM4x4_Descriptors[]; extern const RabbitizerRegisterDescriptor RabbitizerRegister_R4000AllegrexVfpuControl_Descriptors[]; +extern const RabbitizerRegisterDescriptor RabbitizerRegister_R4000AllegrexVConstant_Descriptors[]; /* R4000ALLEGREX */ diff --git a/rabbitizer/OperandType.pyi b/rabbitizer/OperandType.pyi index eeca9ab8..3b93b0e0 100644 --- a/rabbitizer/OperandType.pyi +++ b/rabbitizer/OperandType.pyi @@ -90,6 +90,7 @@ class OperandType: r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt: Enum r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt: Enum r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt: Enum + r4000allegrex_vconstant: Enum r5900_I: Enum r5900_Q: Enum r5900_R: Enum diff --git a/rust/src/operand_type_enum.rs b/rust/src/operand_type_enum.rs index 8354fa11..d6264d49 100644 --- a/rust/src/operand_type_enum.rs +++ b/rust/src/operand_type_enum.rs @@ -89,6 +89,7 @@ pub enum OperandType { r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt, r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt, r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt, + r4000allegrex_vconstant, r5900_I, r5900_Q, r5900_R, diff --git a/rust/src/registers_enum.rs b/rust/src/registers_enum.rs index 03b8bd53..148b1669 100644 --- a/rust/src/registers_enum.rs +++ b/rust/src/registers_enum.rs @@ -1558,6 +1558,44 @@ pub mod registers { #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] #[allow(non_camel_case_types)] #[derive(num_enum::TryFromPrimitive, num_enum::IntoPrimitive)] + pub enum R4000AllegrexVConstant { + INVALID_0, + VFPU_HUGE, + VFPU_SQRT2, + VFPU_SQRT1_2, + VFPU_2_SQRTPI, + VFPU_2_PI, + VFPU_1_PI, + VFPU_PI_4, + VFPU_PI_2, + VFPU_PI, + VFPU_E, + VFPU_LOG2E, + VFPU_LOG10E, + VFPU_LN2, + VFPU_LN10, + VFPU_2PI, + VFPU_PI_6, + VFPU_LOG10TWO, + VFPU_LOG2TEN, + VFPU_SQRT3_2, + INVALID_20, + INVALID_21, + INVALID_22, + INVALID_23, + INVALID_24, + INVALID_25, + INVALID_26, + INVALID_27, + INVALID_28, + INVALID_29, + INVALID_30, + INVALID_31, + } + #[repr(u32)] + #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] + #[allow(non_camel_case_types)] + #[derive(num_enum::TryFromPrimitive, num_enum::IntoPrimitive)] pub enum R5900VF { vf0, vf1, diff --git a/rust/src/registers_methods.rs b/rust/src/registers_methods.rs index 50a2c365..8617e00a 100644 --- a/rust/src/registers_methods.rs +++ b/rust/src/registers_methods.rs @@ -35,6 +35,8 @@ extern "C" { [[*const core::ffi::c_char; 2usize]; 0usize]; pub static mut RabbitizerRegister_R4000AllegrexVfpuControl_Names: [[*const core::ffi::c_char; 2usize]; 0usize]; + pub static mut RabbitizerRegister_R4000AllegrexVConstant_Names: + [[*const core::ffi::c_char; 2usize]; 0usize]; pub static mut RabbitizerRegister_R5900VF_Names: [[*const core::ffi::c_char; 2usize]; 0usize]; pub static mut RabbitizerRegister_R5900VI_Names: [[*const core::ffi::c_char; 2usize]; 0usize]; @@ -83,6 +85,8 @@ extern "C" { pub static mut RabbitizerRegister_R4000AllegrexM4x4_Descriptors: [RegisterDescriptor; 0usize]; pub static mut RabbitizerRegister_R4000AllegrexVfpuControl_Descriptors: [RegisterDescriptor; 0usize]; + pub static mut RabbitizerRegister_R4000AllegrexVConstant_Descriptors: + [RegisterDescriptor; 0usize]; /* R5900 */ @@ -493,6 +497,28 @@ impl registers_enum::registers::R4000AllegrexVfpuControl { } } +impl registers_enum::registers::R4000AllegrexVConstant { + pub fn name(self) -> &'static str { + let reg_value: u32 = self.into(); + + unsafe { + std::ffi::CStr::from_ptr( + RabbitizerRegister_R4000AllegrexVConstant_Names[reg_value as usize][1], + ) + .to_str() + .unwrap() + } + } + + pub fn descriptor(&self) -> &RegisterDescriptor { + let reg_value: u32 = (*self).into(); + + unsafe { + RabbitizerRegister_R4000AllegrexVConstant_Descriptors.get_unchecked(reg_value as usize) + } + } +} + impl registers_enum::registers::R5900VF { pub fn name(self) -> &'static str { let reg_value: u32 = self.into(); diff --git a/src/instructions/RabbitizerInstrDescriptor.c b/src/instructions/RabbitizerInstrDescriptor.c index 20a95cd6..b1c855de 100644 --- a/src/instructions/RabbitizerInstrDescriptor.c +++ b/src/instructions/RabbitizerInstrDescriptor.c @@ -324,16 +324,20 @@ bool RabbitizerInstrDescriptor_hasOperandAlias(const RabbitizerInstrDescriptor * break; case RAB_OPERAND_r4000allegrex_vcmp_cond: - if (RabbitizerInstrDescriptor_hasSpecificOperand(self, RAB_OPERAND_r4000allegrex_vcmp_cond_s_maybe_vs_maybe_vt)) { + if (RabbitizerInstrDescriptor_hasSpecificOperand(self, + RAB_OPERAND_r4000allegrex_vcmp_cond_s_maybe_vs_maybe_vt)) { return true; } - if (RabbitizerInstrDescriptor_hasSpecificOperand(self, RAB_OPERAND_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt)) { + if (RabbitizerInstrDescriptor_hasSpecificOperand(self, + RAB_OPERAND_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt)) { return true; } - if (RabbitizerInstrDescriptor_hasSpecificOperand(self, RAB_OPERAND_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt)) { + if (RabbitizerInstrDescriptor_hasSpecificOperand(self, + RAB_OPERAND_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt)) { return true; } - if (RabbitizerInstrDescriptor_hasSpecificOperand(self, RAB_OPERAND_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt)) { + if (RabbitizerInstrDescriptor_hasSpecificOperand(self, + RAB_OPERAND_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt)) { return true; } break; @@ -362,7 +366,7 @@ bool RabbitizerInstrDescriptor_hasOperandAlias(const RabbitizerInstrDescriptor * } break; - case RAB_OPERAND_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt: + case RAB_OPERAND_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt: if (RabbitizerInstrDescriptor_hasSpecificOperand(self, RAB_OPERAND_r4000allegrex_vcmp_cond)) { return true; } @@ -374,7 +378,7 @@ bool RabbitizerInstrDescriptor_hasOperandAlias(const RabbitizerInstrDescriptor * } break; - case RAB_OPERAND_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt: + case RAB_OPERAND_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt: if (RabbitizerInstrDescriptor_hasSpecificOperand(self, RAB_OPERAND_r4000allegrex_vcmp_cond)) { return true; } @@ -385,6 +389,9 @@ bool RabbitizerInstrDescriptor_hasOperandAlias(const RabbitizerInstrDescriptor * return true; } break; + + case RAB_OPERAND_r4000allegrex_vconstant: + break; /* r4000allegrex */ /* r5900 */ diff --git a/src/instructions/RabbitizerInstruction/RabbitizerInstruction.c b/src/instructions/RabbitizerInstruction/RabbitizerInstruction.c index c95d2e38..4ce23cea 100644 --- a/src/instructions/RabbitizerInstruction/RabbitizerInstruction.c +++ b/src/instructions/RabbitizerInstruction/RabbitizerInstruction.c @@ -433,8 +433,8 @@ void RabbitizerInstruction_blankOut(RabbitizerInstruction *self) { case RAB_OPERAND_r4000allegrex_vcmp_cond_s_maybe_vs_maybe_vt: case RAB_OPERAND_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt: - case RAB_OPERAND_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt: case RAB_OPERAND_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt: + case RAB_OPERAND_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt: self->word = RAB_INSTR_R4000ALLEGREX_PACK_vs(self->word, 0); self->word = RAB_INSTR_R4000ALLEGREX_PACK_vt(self->word, 0); FALLTHROUGH; @@ -442,6 +442,9 @@ void RabbitizerInstruction_blankOut(RabbitizerInstruction *self) { self->word = RAB_INSTR_R4000ALLEGREX_PACK_vcmp_cond(self->word, 0); break; + case RAB_OPERAND_r4000allegrex_vconstant: + self->word = RAB_INSTR_R4000ALLEGREX_PACK_vconstant(self->word, 0); + break; /* r4000allegrex */ /* r5900 */ diff --git a/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Examination.c b/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Examination.c index 162066c7..48bb9bdd 100644 --- a/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Examination.c +++ b/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Examination.c @@ -479,8 +479,8 @@ uint32_t RabbitizerInstruction_getValidBits(const RabbitizerInstruction *self) { case RAB_OPERAND_r4000allegrex_vcmp_cond_s_maybe_vs_maybe_vt: case RAB_OPERAND_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt: - case RAB_OPERAND_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt: case RAB_OPERAND_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt: + case RAB_OPERAND_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt: validbits = RAB_INSTR_R4000ALLEGREX_PACK_vs(validbits, ~0); validbits = RAB_INSTR_R4000ALLEGREX_PACK_vt(validbits, ~0); FALLTHROUGH; @@ -488,6 +488,9 @@ uint32_t RabbitizerInstruction_getValidBits(const RabbitizerInstruction *self) { validbits = RAB_INSTR_R4000ALLEGREX_PACK_vcmp_cond(validbits, ~0); break; + case RAB_OPERAND_r4000allegrex_vconstant: + validbits = RAB_INSTR_R4000ALLEGREX_PACK_vconstant(validbits, ~0); + break; /* r4000allegrex */ /* r5900 */ diff --git a/src/instructions/RabbitizerInstructionR4000Allegrex/RabbitizerInstructionR4000Allegrex_OperandType.c b/src/instructions/RabbitizerInstructionR4000Allegrex/RabbitizerInstructionR4000Allegrex_OperandType.c index 7f23fdb7..7ce54c56 100644 --- a/src/instructions/RabbitizerInstructionR4000Allegrex/RabbitizerInstructionR4000Allegrex_OperandType.c +++ b/src/instructions/RabbitizerInstructionR4000Allegrex/RabbitizerInstructionR4000Allegrex_OperandType.c @@ -276,8 +276,8 @@ size_t RabbitizerOperandType_process_r4000allegrex_mq_vd(const RabbitizerInstruc } size_t RabbitizerOperandType_process_r4000allegrex_cop2cs(const RabbitizerInstruction *self, char *dst, - UNUSED const char *immOverride, - UNUSED size_t immOverrideLength) { + UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameR4000AllegrexVfpuControl(RAB_INSTR_R4000ALLEGREX_GET_cop2cs(self)); @@ -287,8 +287,8 @@ size_t RabbitizerOperandType_process_r4000allegrex_cop2cs(const RabbitizerInstru } size_t RabbitizerOperandType_process_r4000allegrex_cop2cd(const RabbitizerInstruction *self, char *dst, - UNUSED const char *immOverride, - UNUSED size_t immOverrideLength) { + UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { size_t totalSize = 0; const char *reg = RabbitizerRegister_getNameR4000AllegrexVfpuControl(RAB_INSTR_R4000ALLEGREX_GET_cop2cd(self)); @@ -445,19 +445,19 @@ size_t RabbitizerOperandType_process_r4000allegrex_offset14_base_maybe_wb(const } size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond(const RabbitizerInstruction *self, char *dst, - UNUSED const char *immOverride, - UNUSED size_t immOverrideLength) { - static const char * const condition_mnemonics[16] = { - [0] = "fl", // Always false - [1] = "eq", // Equal - [2] = "lt", // Less than - [3] = "le", // Less than or equal - [4] = "tr", // Always true - [5] = "ne", // Not equal - [6] = "ge", // Greater than or equal - [7] = "gt", // Greater than - [8] = "ez", // Equal to zero - [9] = "en", // Equal to NaN + UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + static const char *const condition_mnemonics[16] = { + [0] = "fl", // Always false + [1] = "eq", // Equal + [2] = "lt", // Less than + [3] = "le", // Less than or equal + [4] = "tr", // Always true + [5] = "ne", // Not equal + [6] = "ge", // Greater than or equal + [7] = "gt", // Greater than + [8] = "ez", // Equal to zero + [9] = "en", // Equal to NaN [10] = "ei", // Absolute value equal to infinity [11] = "es", // Equal to infinity or NaN [12] = "nz", // Not equal to zero @@ -473,13 +473,17 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond(const RabbitizerIns return totalSize; } -size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_s_maybe_vs_maybe_vt(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { +size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_s_maybe_vs_maybe_vt(const RabbitizerInstruction *self, + char *dst, const char *immOverride, + size_t immOverrideLength) { size_t totalSize = 0; uint8_t cond = RAB_INSTR_R4000ALLEGREX_GET_vcmp_cond(self); uint8_t vs = RAB_INSTR_R4000ALLEGREX_GET_vs(self); uint8_t vt = RAB_INSTR_R4000ALLEGREX_GET_vt(self); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r4000allegrex_vcmp_cond(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE( + dst, totalSize, + RabbitizerOperandType_process_r4000allegrex_vcmp_cond(self, dst, immOverride, immOverrideLength)); switch (cond) { case 0: // fl @@ -493,7 +497,8 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_s_maybe_vs_maybe_vt } RABUTILS_BUFFER_CPY(dst, totalSize, ", "); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r4000allegrex_s_vs(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE( + dst, totalSize, RabbitizerOperandType_process_r4000allegrex_s_vs(self, dst, immOverride, immOverrideLength)); switch (cond) { case 0: // fl @@ -508,8 +513,8 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_s_maybe_vs_maybe_vt case 7: // gt break; - case 8: // ez - case 9: // en + case 8: // ez + case 9: // en case 10: // ei case 11: // es case 12: // nz @@ -525,18 +530,23 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_s_maybe_vs_maybe_vt } RABUTILS_BUFFER_CPY(dst, totalSize, ", "); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r4000allegrex_s_vt(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE( + dst, totalSize, RabbitizerOperandType_process_r4000allegrex_s_vt(self, dst, immOverride, immOverrideLength)); return totalSize; } -size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { +size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt(const RabbitizerInstruction *self, + char *dst, const char *immOverride, + size_t immOverrideLength) { size_t totalSize = 0; uint8_t cond = RAB_INSTR_R4000ALLEGREX_GET_vcmp_cond(self); uint8_t vs = RAB_INSTR_R4000ALLEGREX_GET_vs(self); uint8_t vt = RAB_INSTR_R4000ALLEGREX_GET_vt(self); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r4000allegrex_vcmp_cond(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE( + dst, totalSize, + RabbitizerOperandType_process_r4000allegrex_vcmp_cond(self, dst, immOverride, immOverrideLength)); switch (cond) { case 0: // fl @@ -550,7 +560,8 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt } RABUTILS_BUFFER_CPY(dst, totalSize, ", "); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r4000allegrex_p_vs(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE( + dst, totalSize, RabbitizerOperandType_process_r4000allegrex_p_vs(self, dst, immOverride, immOverrideLength)); switch (cond) { case 0: // fl @@ -565,8 +576,8 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt case 7: // gt break; - case 8: // ez - case 9: // en + case 8: // ez + case 9: // en case 10: // ei case 11: // es case 12: // nz @@ -582,18 +593,23 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_p_maybe_vs_maybe_vt } RABUTILS_BUFFER_CPY(dst, totalSize, ", "); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r4000allegrex_p_vt(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE( + dst, totalSize, RabbitizerOperandType_process_r4000allegrex_p_vt(self, dst, immOverride, immOverrideLength)); return totalSize; } -size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { +size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt(const RabbitizerInstruction *self, + char *dst, const char *immOverride, + size_t immOverrideLength) { size_t totalSize = 0; uint8_t cond = RAB_INSTR_R4000ALLEGREX_GET_vcmp_cond(self); uint8_t vs = RAB_INSTR_R4000ALLEGREX_GET_vs(self); uint8_t vt = RAB_INSTR_R4000ALLEGREX_GET_vt(self); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r4000allegrex_vcmp_cond(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE( + dst, totalSize, + RabbitizerOperandType_process_r4000allegrex_vcmp_cond(self, dst, immOverride, immOverrideLength)); switch (cond) { case 0: // fl @@ -607,7 +623,8 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt } RABUTILS_BUFFER_CPY(dst, totalSize, ", "); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r4000allegrex_t_vs(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE( + dst, totalSize, RabbitizerOperandType_process_r4000allegrex_t_vs(self, dst, immOverride, immOverrideLength)); switch (cond) { case 0: // fl @@ -622,8 +639,8 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt case 7: // gt break; - case 8: // ez - case 9: // en + case 8: // ez + case 9: // en case 10: // ei case 11: // es case 12: // nz @@ -639,18 +656,23 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_t_maybe_vs_maybe_vt } RABUTILS_BUFFER_CPY(dst, totalSize, ", "); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r4000allegrex_t_vt(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE( + dst, totalSize, RabbitizerOperandType_process_r4000allegrex_t_vt(self, dst, immOverride, immOverrideLength)); return totalSize; } -size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { +size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt(const RabbitizerInstruction *self, + char *dst, const char *immOverride, + size_t immOverrideLength) { size_t totalSize = 0; uint8_t cond = RAB_INSTR_R4000ALLEGREX_GET_vcmp_cond(self); uint8_t vs = RAB_INSTR_R4000ALLEGREX_GET_vs(self); uint8_t vt = RAB_INSTR_R4000ALLEGREX_GET_vt(self); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r4000allegrex_vcmp_cond(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE( + dst, totalSize, + RabbitizerOperandType_process_r4000allegrex_vcmp_cond(self, dst, immOverride, immOverrideLength)); switch (cond) { case 0: // fl @@ -664,7 +686,8 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt } RABUTILS_BUFFER_CPY(dst, totalSize, ", "); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r4000allegrex_q_vs(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE( + dst, totalSize, RabbitizerOperandType_process_r4000allegrex_q_vs(self, dst, immOverride, immOverrideLength)); switch (cond) { case 0: // fl @@ -679,8 +702,8 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt case 7: // gt break; - case 8: // ez - case 9: // en + case 8: // ez + case 9: // en case 10: // ei case 11: // es case 12: // nz @@ -696,7 +719,19 @@ size_t RabbitizerOperandType_process_r4000allegrex_vcmp_cond_q_maybe_vs_maybe_vt } RABUTILS_BUFFER_CPY(dst, totalSize, ", "); - RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r4000allegrex_q_vt(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_ADVANCE( + dst, totalSize, RabbitizerOperandType_process_r4000allegrex_q_vt(self, dst, immOverride, immOverrideLength)); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r4000allegrex_vconstant(const RabbitizerInstruction *self, char *dst, + UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR4000AllegrexVConstant(RAB_INSTR_R4000ALLEGREX_GET_vconstant(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); return totalSize; } diff --git a/src/instructions/RabbitizerRegister.c b/src/instructions/RabbitizerRegister.c index d8de7201..afb915fa 100644 --- a/src/instructions/RabbitizerRegister.c +++ b/src/instructions/RabbitizerRegister.c @@ -146,12 +146,18 @@ const char *RabbitizerRegister_getNameR4000AllegrexM4x4(uint8_t regValue) { const char *RabbitizerRegister_getNameR4000AllegrexVfpuControl(uint8_t regValue) { assert(regValue < ARRAY_COUNT(RabbitizerRegister_R4000AllegrexVfpuControl_Names)); - return RabbitizerRegister_R4000AllegrexVfpuControl_Names[regValue] - [RabbitizerConfig_Cfg.regNames.namedRegisters && - RabbitizerConfig_Cfg.regNames - .r4000AllegrexVfpuControlNamedRegisters - ? 1 - : 0]; + return RabbitizerRegister_R4000AllegrexVfpuControl_Names + [regValue][RabbitizerConfig_Cfg.regNames.namedRegisters && + RabbitizerConfig_Cfg.regNames.r4000AllegrexVfpuControlNamedRegisters + ? 1 + : 0]; +} + +const char *RabbitizerRegister_getNameR4000AllegrexVConstant(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_R4000AllegrexVConstant_Names)); + + return RabbitizerRegister_R4000AllegrexVConstant_Names[regValue] + [RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; } const char *RabbitizerRegister_getNameR5900VF(uint8_t regValue) { @@ -287,6 +293,12 @@ const RabbitizerRegisterDescriptor *RabbitizerRegister_getDescriptor_R4000Allegr return &RabbitizerRegister_R4000AllegrexVfpuControl_Descriptors[regValue]; } +const RabbitizerRegisterDescriptor *RabbitizerRegister_getDescriptor_R4000AllegrexVConstant(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_R4000AllegrexVConstant_Names)); + + return &RabbitizerRegister_R4000AllegrexVConstant_Descriptors[regValue]; +} + const RabbitizerRegisterDescriptor *RabbitizerRegister_getDescriptor_R5900VF(uint8_t regValue) { assert(regValue < ARRAY_COUNT(RabbitizerRegister_R5900VF_Names)); diff --git a/tables/tables/instr_id/r4000allegrex/r4000allegrex_vfpu4_fmt0_fmt3.inc b/tables/tables/instr_id/r4000allegrex/r4000allegrex_vfpu4_fmt0_fmt3.inc index 972e001d..1cca831e 100644 --- a/tables/tables/instr_id/r4000allegrex/r4000allegrex_vfpu4_fmt0_fmt3.inc +++ b/tables/tables/instr_id/r4000allegrex/r4000allegrex_vfpu4_fmt0_fmt3.inc @@ -23,7 +23,7 @@ vcst.s // TODO: vd, imm5 RABBITIZER_DEF_INSTR_ID_ALTNAME( r4000allegrex, 0x0, vcst_s, vcst.s, - .operands={RAB_OPERAND_r4000allegrex_s_vd}, + .operands={RAB_OPERAND_r4000allegrex_s_vd, RAB_OPERAND_r4000allegrex_vconstant}, .instrType=RABBITIZER_INSTR_TYPE_R ) // Set ConsTant Single word @@ -37,7 +37,7 @@ vcst.p // TODO: vd, imm5 RABBITIZER_DEF_INSTR_ID_ALTNAME( r4000allegrex, 0x1, vcst_p, vcst.p, - .operands={RAB_OPERAND_r4000allegrex_p_vd}, + .operands={RAB_OPERAND_r4000allegrex_p_vd, RAB_OPERAND_r4000allegrex_vconstant}, .instrType=RABBITIZER_INSTR_TYPE_R ) // Set ConsTant Pair word @@ -51,7 +51,7 @@ vcst.t // TODO: vd, imm5 RABBITIZER_DEF_INSTR_ID_ALTNAME( r4000allegrex, 0x2, vcst_t, vcst.t, - .operands={RAB_OPERAND_r4000allegrex_t_vd}, + .operands={RAB_OPERAND_r4000allegrex_t_vd, RAB_OPERAND_r4000allegrex_vconstant}, .instrType=RABBITIZER_INSTR_TYPE_R ) // Set ConsTant Triple word @@ -65,6 +65,6 @@ vcst.q // TODO: vd, imm5 RABBITIZER_DEF_INSTR_ID_ALTNAME( r4000allegrex, 0x3, vcst_q, vcst.q, - .operands={RAB_OPERAND_r4000allegrex_q_vd}, + .operands={RAB_OPERAND_r4000allegrex_q_vd, RAB_OPERAND_r4000allegrex_vconstant}, .instrType=RABBITIZER_INSTR_TYPE_R ) // Set ConsTant Quad word diff --git a/tables/tables/operands/RabbitizerOperandType_r4000allegrex.inc b/tables/tables/operands/RabbitizerOperandType_r4000allegrex.inc index f5f84847..b4e02f6e 100644 --- a/tables/tables/operands/RabbitizerOperandType_r4000allegrex.inc +++ b/tables/tables/operands/RabbitizerOperandType_r4000allegrex.inc @@ -57,3 +57,5 @@ RAB_DEF_OPERAND(r4000allegrex, vcmp_cond_p_maybe_vs_maybe_vt) RAB_DEF_OPERAND(r4000allegrex, vcmp_cond_t_maybe_vs_maybe_vt) RAB_DEF_OPERAND(r4000allegrex, vcmp_cond_q_maybe_vs_maybe_vt) + + RAB_DEF_OPERAND(r4000allegrex, vconstant) diff --git a/tables/tables/registers/RabbitizerRegister_R4000AllegrexVConstant.inc b/tables/tables/registers/RabbitizerRegister_R4000AllegrexVConstant.inc new file mode 100644 index 00000000..51b1b0e1 --- /dev/null +++ b/tables/tables/registers/RabbitizerRegister_R4000AllegrexVConstant.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2024 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_0, 0, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_HUGE, 1, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_SQRT2, 2, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_SQRT1_2, 3, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_2_SQRTPI, 4, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_2_PI, 5, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_1_PI, 6, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_PI_4, 7, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_PI_2, 8, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_PI, 9, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_E, 10, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_LOG2E, 11, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_LOG10E, 12, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_LN2, 13, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_LN10, 14, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_2PI, 15, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_PI_6, 16, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_LOG10TWO, 17, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_LOG2TEN, 18, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, VFPU_SQRT3_2, 19, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_20, 20, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_21, 21, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_22, 22, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_23, 23, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_24, 24, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_25, 25, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_26, 26, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_27, 27, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_28, 28, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_29, 29, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_30, 30, 0) + RABBITIZER_DEF_REG_NODOLLAR(R4000ALLEGREX_VCONSTANT, INVALID_31, 31, 0) diff --git a/tables/templates/c/RegisterDescriptor_Descriptors_arrays.table.template b/tables/templates/c/RegisterDescriptor_Descriptors_arrays.table.template index e6d6d0d8..59ee9f26 100644 --- a/tables/templates/c/RegisterDescriptor_Descriptors_arrays.table.template +++ b/tables/templates/c/RegisterDescriptor_Descriptors_arrays.table.template @@ -100,6 +100,10 @@ const RabbitizerRegisterDescriptor RabbitizerRegister_R4000AllegrexVfpuControl_D #include "registers/RabbitizerRegister_R4000AllegrexVfpuControl.inc" }; +const RabbitizerRegisterDescriptor RabbitizerRegister_R4000AllegrexVConstant_Descriptors[] = { +#include "registers/RabbitizerRegister_R4000AllegrexVConstant.inc" +}; + /* R4000ALLEGREX */ /* R5900 */ diff --git a/tables/templates/c/Registers_Names_arrays.table.template b/tables/templates/c/Registers_Names_arrays.table.template index 858c1191..99ddb60e 100644 --- a/tables/templates/c/Registers_Names_arrays.table.template +++ b/tables/templates/c/Registers_Names_arrays.table.template @@ -102,6 +102,10 @@ const char *RabbitizerRegister_R4000AllegrexVfpuControl_Names[][2] = { #include "registers/RabbitizerRegister_R4000AllegrexVfpuControl.inc" }; +const char *RabbitizerRegister_R4000AllegrexVConstant_Names[][2] = { +#include "registers/RabbitizerRegister_R4000AllegrexVConstant.inc" +}; + /* R4000ALLEGREX */ /* R5900 */ diff --git a/tables/templates/c/Registers_enums.table.template b/tables/templates/c/Registers_enums.table.template index 821b3321..6a1f3ac6 100644 --- a/tables/templates/c/Registers_enums.table.template +++ b/tables/templates/c/Registers_enums.table.template @@ -103,6 +103,10 @@ typedef enum RabbitizerRegister_R4000AllegrexVfpuControl { #include "registers/RabbitizerRegister_R4000AllegrexVfpuControl.inc" } RabbitizerRegister_R4000AllegrexVfpuControl; +typedef enum RabbitizerRegister_R4000AllegrexVConstant { + #include "registers/RabbitizerRegister_R4000AllegrexVConstant.inc" +} RabbitizerRegister_R4000AllegrexVConstant; + /* R4000ALLEGREX */ /* R5900 */ diff --git a/tables/templates/cplusplus/Registers_enum_classes.table.template b/tables/templates/cplusplus/Registers_enum_classes.table.template index 9508e1ed..4adf6aa7 100644 --- a/tables/templates/cplusplus/Registers_enum_classes.table.template +++ b/tables/templates/cplusplus/Registers_enum_classes.table.template @@ -101,6 +101,10 @@ enum class VfpuControl { #include "registers/RabbitizerRegister_R4000AllegrexVfpuControl.inc" }; + + enum class VConstant { + #include "registers/RabbitizerRegister_R4000AllegrexVConstant.inc" + }; }; namespace R5900 { diff --git a/tables/templates/rust/registers_enum.tablers.template b/tables/templates/rust/registers_enum.tablers.template index 077d5fd9..1294a0f3 100644 --- a/tables/templates/rust/registers_enum.tablers.template +++ b/tables/templates/rust/registers_enum.tablers.template @@ -221,6 +221,14 @@ pub mod registers { #define RABBITIZER_DEF_REG(prefix, name, numeric, ...) \ name, + SPECIAL_RS_TAG(repr(u32)) + SPECIAL_RS_TAG(derive(Debug, Copy, Clone, Hash, PartialEq, Eq)) + SPECIAL_RS_TAG(allow(non_camel_case_types)) + SPECIAL_RS_TAG(derive(num_enum::TryFromPrimitive, num_enum::IntoPrimitive)) + pub enum R4000AllegrexVConstant { + #include "registers/RabbitizerRegister_R4000AllegrexVConstant.inc" + } + /* R4000ALLEGREX */ /* R5900 */ diff --git a/tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c b/tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c index 74dd1879..6c4c1b26 100644 --- a/tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c +++ b/tests/c/instruction_checks/r4000allegrex_vfpu_disasm.c @@ -2916,134 +2916,134 @@ const TestEntry test_entries[] = { TEST_ENTRY_C(0xD05F1081, NULL, ".word 0xD05F1081 # INVALID $v0, $ra, 0x1081 # 00000000 "), TEST_ENTRY_C(0xD05F9001, NULL, ".word 0xD05F9001 # INVALID $v0, $ra, -0x6FFF # 00000000 "), TEST_ENTRY_C(0xD05F9081, NULL, ".word 0xD05F9081 # INVALID $v0, $ra, -0x6F7F # 00000000 "), - TEST_ENTRY_C(0xD0601001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD0601081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD0609001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD0609081, NULL, "vcst.q C010, Undefined"), - TEST_ENTRY_C(0xD0611001, NULL, "vcst.s S010, VFPU_HUGE"), - TEST_ENTRY_C(0xD0611081, NULL, "vcst.p C010, VFPU_HUGE"), - TEST_ENTRY_C(0xD0619001, NULL, "vcst.t C010, VFPU_HUGE"), - TEST_ENTRY_C(0xD0619081, NULL, "vcst.q C010, VFPU_HUGE"), - TEST_ENTRY_C(0xD0621001, NULL, "vcst.s S010, VFPU_SQRT2"), - TEST_ENTRY_C(0xD0621081, NULL, "vcst.p C010, VFPU_SQRT2"), - TEST_ENTRY_C(0xD0629001, NULL, "vcst.t C010, VFPU_SQRT2"), - TEST_ENTRY_C(0xD0629081, NULL, "vcst.q C010, VFPU_SQRT2"), - TEST_ENTRY_C(0xD0631001, NULL, "vcst.s S010, VFPU_SQRT1_2"), - TEST_ENTRY_C(0xD0631081, NULL, "vcst.p C010, VFPU_SQRT1_2"), - TEST_ENTRY_C(0xD0639001, NULL, "vcst.t C010, VFPU_SQRT1_2"), - TEST_ENTRY_C(0xD0639081, NULL, "vcst.q C010, VFPU_SQRT1_2"), - TEST_ENTRY_C(0xD0641001, NULL, "vcst.s S010, VFPU_2_SQRTPI"), - TEST_ENTRY_C(0xD0641081, NULL, "vcst.p C010, VFPU_2_SQRTPI"), - TEST_ENTRY_C(0xD0649001, NULL, "vcst.t C010, VFPU_2_SQRTPI"), - TEST_ENTRY_C(0xD0649081, NULL, "vcst.q C010, VFPU_2_SQRTPI"), - TEST_ENTRY_C(0xD0651001, NULL, "vcst.s S010, VFPU_2_PI"), - TEST_ENTRY_C(0xD0651081, NULL, "vcst.p C010, VFPU_2_PI"), - TEST_ENTRY_C(0xD0659001, NULL, "vcst.t C010, VFPU_2_PI"), - TEST_ENTRY_C(0xD0659081, NULL, "vcst.q C010, VFPU_2_PI"), - TEST_ENTRY_C(0xD0661001, NULL, "vcst.s S010, VFPU_1_PI"), - TEST_ENTRY_C(0xD0661081, NULL, "vcst.p C010, VFPU_1_PI"), - TEST_ENTRY_C(0xD0669001, NULL, "vcst.t C010, VFPU_1_PI"), - TEST_ENTRY_C(0xD0669081, NULL, "vcst.q C010, VFPU_1_PI"), - TEST_ENTRY_C(0xD0671001, NULL, "vcst.s S010, VFPU_PI_4"), - TEST_ENTRY_C(0xD0671081, NULL, "vcst.p C010, VFPU_PI_4"), - TEST_ENTRY_C(0xD0679001, NULL, "vcst.t C010, VFPU_PI_4"), - TEST_ENTRY_C(0xD0679081, NULL, "vcst.q C010, VFPU_PI_4"), - TEST_ENTRY_C(0xD0681001, NULL, "vcst.s S010, VFPU_PI_2"), - TEST_ENTRY_C(0xD0681081, NULL, "vcst.p C010, VFPU_PI_2"), - TEST_ENTRY_C(0xD0689001, NULL, "vcst.t C010, VFPU_PI_2"), - TEST_ENTRY_C(0xD0689081, NULL, "vcst.q C010, VFPU_PI_2"), - TEST_ENTRY_C(0xD0691001, NULL, "vcst.s S010, VFPU_PI"), - TEST_ENTRY_C(0xD0691081, NULL, "vcst.p C010, VFPU_PI"), - TEST_ENTRY_C(0xD0699001, NULL, "vcst.t C010, VFPU_PI"), - TEST_ENTRY_C(0xD0699081, NULL, "vcst.q C010, VFPU_PI"), - TEST_ENTRY_C(0xD06A1001, NULL, "vcst.s S010, VFPU_E"), - TEST_ENTRY_C(0xD06A1081, NULL, "vcst.p C010, VFPU_E"), - TEST_ENTRY_C(0xD06A9001, NULL, "vcst.t C010, VFPU_E"), - TEST_ENTRY_C(0xD06A9081, NULL, "vcst.q C010, VFPU_E"), - TEST_ENTRY_C(0xD06B1001, NULL, "vcst.s S010, VFPU_LOG2E"), - TEST_ENTRY_C(0xD06B1081, NULL, "vcst.p C010, VFPU_LOG2E"), - TEST_ENTRY_C(0xD06B9001, NULL, "vcst.t C010, VFPU_LOG2E"), - TEST_ENTRY_C(0xD06B9081, NULL, "vcst.q C010, VFPU_LOG2E"), - TEST_ENTRY_C(0xD06C1001, NULL, "vcst.s S010, VFPU_LOG10E"), - TEST_ENTRY_C(0xD06C1081, NULL, "vcst.p C010, VFPU_LOG10E"), - TEST_ENTRY_C(0xD06C9001, NULL, "vcst.t C010, VFPU_LOG10E"), - TEST_ENTRY_C(0xD06C9081, NULL, "vcst.q C010, VFPU_LOG10E"), - TEST_ENTRY_C(0xD06D1001, NULL, "vcst.s S010, VFPU_LN2"), - TEST_ENTRY_C(0xD06D1081, NULL, "vcst.p C010, VFPU_LN2"), - TEST_ENTRY_C(0xD06D9001, NULL, "vcst.t C010, VFPU_LN2"), - TEST_ENTRY_C(0xD06D9081, NULL, "vcst.q C010, VFPU_LN2"), - TEST_ENTRY_C(0xD06E1001, NULL, "vcst.s S010, VFPU_LN10"), - TEST_ENTRY_C(0xD06E1081, NULL, "vcst.p C010, VFPU_LN10"), - TEST_ENTRY_C(0xD06E9001, NULL, "vcst.t C010, VFPU_LN10"), - TEST_ENTRY_C(0xD06E9081, NULL, "vcst.q C010, VFPU_LN10"), - TEST_ENTRY_C(0xD06F1001, NULL, "vcst.s S010, VFPU_2PI"), - TEST_ENTRY_C(0xD06F1081, NULL, "vcst.p C010, VFPU_2PI"), - TEST_ENTRY_C(0xD06F9001, NULL, "vcst.t C010, VFPU_2PI"), - TEST_ENTRY_C(0xD06F9081, NULL, "vcst.q C010, VFPU_2PI"), - TEST_ENTRY_C(0xD0701001, NULL, "vcst.s S010, VFPU_PI_6"), - TEST_ENTRY_C(0xD0701081, NULL, "vcst.p C010, VFPU_PI_6"), - TEST_ENTRY_C(0xD0709001, NULL, "vcst.t C010, VFPU_PI_6"), - TEST_ENTRY_C(0xD0709081, NULL, "vcst.q C010, VFPU_PI_6"), - TEST_ENTRY_C(0xD0711001, NULL, "vcst.s S010, VFPU_LOG10TWO"), - TEST_ENTRY_C(0xD0711081, NULL, "vcst.p C010, VFPU_LOG10TWO"), - TEST_ENTRY_C(0xD0719001, NULL, "vcst.t C010, VFPU_LOG10TWO"), - TEST_ENTRY_C(0xD0719081, NULL, "vcst.q C010, VFPU_LOG10TWO"), - TEST_ENTRY_C(0xD0721001, NULL, "vcst.s S010, VFPU_LOG2TEN"), - TEST_ENTRY_C(0xD0721081, NULL, "vcst.p C010, VFPU_LOG2TEN"), - TEST_ENTRY_C(0xD0729001, NULL, "vcst.t C010, VFPU_LOG2TEN"), - TEST_ENTRY_C(0xD0729081, NULL, "vcst.q C010, VFPU_LOG2TEN"), - TEST_ENTRY_C(0xD0731001, NULL, "vcst.s S010, VFPU_SQRT3_2"), - TEST_ENTRY_C(0xD0731081, NULL, "vcst.p C010, VFPU_SQRT3_2"), - TEST_ENTRY_C(0xD0739001, NULL, "vcst.t C010, VFPU_SQRT3_2"), - TEST_ENTRY_C(0xD0739081, NULL, "vcst.q C010, VFPU_SQRT3_2"), - TEST_ENTRY_C(0xD0741001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD0741081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD0749001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD0749081, NULL, "vcst.q C010, Undefined"), - TEST_ENTRY_C(0xD0751001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD0751081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD0759001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD0759081, NULL, "vcst.q C010, Undefined"), - TEST_ENTRY_C(0xD0761001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD0761081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD0769001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD0769081, NULL, "vcst.q C010, Undefined"), - TEST_ENTRY_C(0xD0771001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD0771081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD0779001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD0779081, NULL, "vcst.q C010, Undefined"), - TEST_ENTRY_C(0xD0781001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD0781081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD0789001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD0789081, NULL, "vcst.q C010, Undefined"), - TEST_ENTRY_C(0xD0791001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD0791081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD0799001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD0799081, NULL, "vcst.q C010, Undefined"), - TEST_ENTRY_C(0xD07A1001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD07A1081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD07A9001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD07A9081, NULL, "vcst.q C010, Undefined"), - TEST_ENTRY_C(0xD07B1001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD07B1081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD07B9001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD07B9081, NULL, "vcst.q C010, Undefined"), - TEST_ENTRY_C(0xD07C1001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD07C1081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD07C9001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD07C9081, NULL, "vcst.q C010, Undefined"), - TEST_ENTRY_C(0xD07D1001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD07D1081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD07D9001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD07D9081, NULL, "vcst.q C010, Undefined"), - TEST_ENTRY_C(0xD07E1001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD07E1081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD07E9001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD07E9081, NULL, "vcst.q C010, Undefined"), - TEST_ENTRY_C(0xD07F1001, NULL, "vcst.s S010, Undefined"), - TEST_ENTRY_C(0xD07F1081, NULL, "vcst.p C010, Undefined"), - TEST_ENTRY_C(0xD07F9001, NULL, "vcst.t C010, Undefined"), - TEST_ENTRY_C(0xD07F9081, NULL, "vcst.q C010, Undefined"), + TEST_ENTRY_C(0xD0600001, NULL, "vcst.s S010, INVALID_0"), + TEST_ENTRY_C(0xD0600081, NULL, "vcst.p C010, INVALID_0"), + TEST_ENTRY_C(0xD0608001, NULL, "vcst.t C010, INVALID_0"), + TEST_ENTRY_C(0xD0608081, NULL, "vcst.q C010, INVALID_0"), + TEST_ENTRY_C(0xD0610001, NULL, "vcst.s S010, VFPU_HUGE"), + TEST_ENTRY_C(0xD0610081, NULL, "vcst.p C010, VFPU_HUGE"), + TEST_ENTRY_C(0xD0618001, NULL, "vcst.t C010, VFPU_HUGE"), + TEST_ENTRY_C(0xD0618081, NULL, "vcst.q C010, VFPU_HUGE"), + TEST_ENTRY_C(0xD0620001, NULL, "vcst.s S010, VFPU_SQRT2"), + TEST_ENTRY_C(0xD0620081, NULL, "vcst.p C010, VFPU_SQRT2"), + TEST_ENTRY_C(0xD0628001, NULL, "vcst.t C010, VFPU_SQRT2"), + TEST_ENTRY_C(0xD0628081, NULL, "vcst.q C010, VFPU_SQRT2"), + TEST_ENTRY_C(0xD0630001, NULL, "vcst.s S010, VFPU_SQRT1_2"), + TEST_ENTRY_C(0xD0630081, NULL, "vcst.p C010, VFPU_SQRT1_2"), + TEST_ENTRY_C(0xD0638001, NULL, "vcst.t C010, VFPU_SQRT1_2"), + TEST_ENTRY_C(0xD0638081, NULL, "vcst.q C010, VFPU_SQRT1_2"), + TEST_ENTRY_C(0xD0640001, NULL, "vcst.s S010, VFPU_2_SQRTPI"), + TEST_ENTRY_C(0xD0640081, NULL, "vcst.p C010, VFPU_2_SQRTPI"), + TEST_ENTRY_C(0xD0648001, NULL, "vcst.t C010, VFPU_2_SQRTPI"), + TEST_ENTRY_C(0xD0648081, NULL, "vcst.q C010, VFPU_2_SQRTPI"), + TEST_ENTRY_C(0xD0650001, NULL, "vcst.s S010, VFPU_2_PI"), + TEST_ENTRY_C(0xD0650081, NULL, "vcst.p C010, VFPU_2_PI"), + TEST_ENTRY_C(0xD0658001, NULL, "vcst.t C010, VFPU_2_PI"), + TEST_ENTRY_C(0xD0658081, NULL, "vcst.q C010, VFPU_2_PI"), + TEST_ENTRY_C(0xD0660001, NULL, "vcst.s S010, VFPU_1_PI"), + TEST_ENTRY_C(0xD0660081, NULL, "vcst.p C010, VFPU_1_PI"), + TEST_ENTRY_C(0xD0668001, NULL, "vcst.t C010, VFPU_1_PI"), + TEST_ENTRY_C(0xD0668081, NULL, "vcst.q C010, VFPU_1_PI"), + TEST_ENTRY_C(0xD0670001, NULL, "vcst.s S010, VFPU_PI_4"), + TEST_ENTRY_C(0xD0670081, NULL, "vcst.p C010, VFPU_PI_4"), + TEST_ENTRY_C(0xD0678001, NULL, "vcst.t C010, VFPU_PI_4"), + TEST_ENTRY_C(0xD0678081, NULL, "vcst.q C010, VFPU_PI_4"), + TEST_ENTRY_C(0xD0680001, NULL, "vcst.s S010, VFPU_PI_2"), + TEST_ENTRY_C(0xD0680081, NULL, "vcst.p C010, VFPU_PI_2"), + TEST_ENTRY_C(0xD0688001, NULL, "vcst.t C010, VFPU_PI_2"), + TEST_ENTRY_C(0xD0688081, NULL, "vcst.q C010, VFPU_PI_2"), + TEST_ENTRY_C(0xD0690001, NULL, "vcst.s S010, VFPU_PI"), + TEST_ENTRY_C(0xD0690081, NULL, "vcst.p C010, VFPU_PI"), + TEST_ENTRY_C(0xD0698001, NULL, "vcst.t C010, VFPU_PI"), + TEST_ENTRY_C(0xD0698081, NULL, "vcst.q C010, VFPU_PI"), + TEST_ENTRY_C(0xD06A0001, NULL, "vcst.s S010, VFPU_E"), + TEST_ENTRY_C(0xD06A0081, NULL, "vcst.p C010, VFPU_E"), + TEST_ENTRY_C(0xD06A8001, NULL, "vcst.t C010, VFPU_E"), + TEST_ENTRY_C(0xD06A8081, NULL, "vcst.q C010, VFPU_E"), + TEST_ENTRY_C(0xD06B0001, NULL, "vcst.s S010, VFPU_LOG2E"), + TEST_ENTRY_C(0xD06B0081, NULL, "vcst.p C010, VFPU_LOG2E"), + TEST_ENTRY_C(0xD06B8001, NULL, "vcst.t C010, VFPU_LOG2E"), + TEST_ENTRY_C(0xD06B8081, NULL, "vcst.q C010, VFPU_LOG2E"), + TEST_ENTRY_C(0xD06C0001, NULL, "vcst.s S010, VFPU_LOG10E"), + TEST_ENTRY_C(0xD06C0081, NULL, "vcst.p C010, VFPU_LOG10E"), + TEST_ENTRY_C(0xD06C8001, NULL, "vcst.t C010, VFPU_LOG10E"), + TEST_ENTRY_C(0xD06C8081, NULL, "vcst.q C010, VFPU_LOG10E"), + TEST_ENTRY_C(0xD06D0001, NULL, "vcst.s S010, VFPU_LN2"), + TEST_ENTRY_C(0xD06D0081, NULL, "vcst.p C010, VFPU_LN2"), + TEST_ENTRY_C(0xD06D8001, NULL, "vcst.t C010, VFPU_LN2"), + TEST_ENTRY_C(0xD06D8081, NULL, "vcst.q C010, VFPU_LN2"), + TEST_ENTRY_C(0xD06E0001, NULL, "vcst.s S010, VFPU_LN10"), + TEST_ENTRY_C(0xD06E0081, NULL, "vcst.p C010, VFPU_LN10"), + TEST_ENTRY_C(0xD06E8001, NULL, "vcst.t C010, VFPU_LN10"), + TEST_ENTRY_C(0xD06E8081, NULL, "vcst.q C010, VFPU_LN10"), + TEST_ENTRY_C(0xD06F0001, NULL, "vcst.s S010, VFPU_2PI"), + TEST_ENTRY_C(0xD06F0081, NULL, "vcst.p C010, VFPU_2PI"), + TEST_ENTRY_C(0xD06F8001, NULL, "vcst.t C010, VFPU_2PI"), + TEST_ENTRY_C(0xD06F8081, NULL, "vcst.q C010, VFPU_2PI"), + TEST_ENTRY_C(0xD0700001, NULL, "vcst.s S010, VFPU_PI_6"), + TEST_ENTRY_C(0xD0700081, NULL, "vcst.p C010, VFPU_PI_6"), + TEST_ENTRY_C(0xD0708001, NULL, "vcst.t C010, VFPU_PI_6"), + TEST_ENTRY_C(0xD0708081, NULL, "vcst.q C010, VFPU_PI_6"), + TEST_ENTRY_C(0xD0710001, NULL, "vcst.s S010, VFPU_LOG10TWO"), + TEST_ENTRY_C(0xD0710081, NULL, "vcst.p C010, VFPU_LOG10TWO"), + TEST_ENTRY_C(0xD0718001, NULL, "vcst.t C010, VFPU_LOG10TWO"), + TEST_ENTRY_C(0xD0718081, NULL, "vcst.q C010, VFPU_LOG10TWO"), + TEST_ENTRY_C(0xD0720001, NULL, "vcst.s S010, VFPU_LOG2TEN"), + TEST_ENTRY_C(0xD0720081, NULL, "vcst.p C010, VFPU_LOG2TEN"), + TEST_ENTRY_C(0xD0728001, NULL, "vcst.t C010, VFPU_LOG2TEN"), + TEST_ENTRY_C(0xD0728081, NULL, "vcst.q C010, VFPU_LOG2TEN"), + TEST_ENTRY_C(0xD0730001, NULL, "vcst.s S010, VFPU_SQRT3_2"), + TEST_ENTRY_C(0xD0730081, NULL, "vcst.p C010, VFPU_SQRT3_2"), + TEST_ENTRY_C(0xD0738001, NULL, "vcst.t C010, VFPU_SQRT3_2"), + TEST_ENTRY_C(0xD0738081, NULL, "vcst.q C010, VFPU_SQRT3_2"), + TEST_ENTRY_C(0xD0740001, NULL, "vcst.s S010, INVALID_20"), + TEST_ENTRY_C(0xD0740081, NULL, "vcst.p C010, INVALID_20"), + TEST_ENTRY_C(0xD0748001, NULL, "vcst.t C010, INVALID_20"), + TEST_ENTRY_C(0xD0748081, NULL, "vcst.q C010, INVALID_20"), + TEST_ENTRY_C(0xD0750001, NULL, "vcst.s S010, INVALID_21"), + TEST_ENTRY_C(0xD0750081, NULL, "vcst.p C010, INVALID_21"), + TEST_ENTRY_C(0xD0758001, NULL, "vcst.t C010, INVALID_21"), + TEST_ENTRY_C(0xD0758081, NULL, "vcst.q C010, INVALID_21"), + TEST_ENTRY_C(0xD0760001, NULL, "vcst.s S010, INVALID_22"), + TEST_ENTRY_C(0xD0760081, NULL, "vcst.p C010, INVALID_22"), + TEST_ENTRY_C(0xD0768001, NULL, "vcst.t C010, INVALID_22"), + TEST_ENTRY_C(0xD0768081, NULL, "vcst.q C010, INVALID_22"), + TEST_ENTRY_C(0xD0770001, NULL, "vcst.s S010, INVALID_23"), + TEST_ENTRY_C(0xD0770081, NULL, "vcst.p C010, INVALID_23"), + TEST_ENTRY_C(0xD0778001, NULL, "vcst.t C010, INVALID_23"), + TEST_ENTRY_C(0xD0778081, NULL, "vcst.q C010, INVALID_23"), + TEST_ENTRY_C(0xD0780001, NULL, "vcst.s S010, INVALID_24"), + TEST_ENTRY_C(0xD0780081, NULL, "vcst.p C010, INVALID_24"), + TEST_ENTRY_C(0xD0788001, NULL, "vcst.t C010, INVALID_24"), + TEST_ENTRY_C(0xD0788081, NULL, "vcst.q C010, INVALID_24"), + TEST_ENTRY_C(0xD0790001, NULL, "vcst.s S010, INVALID_25"), + TEST_ENTRY_C(0xD0790081, NULL, "vcst.p C010, INVALID_25"), + TEST_ENTRY_C(0xD0798001, NULL, "vcst.t C010, INVALID_25"), + TEST_ENTRY_C(0xD0798081, NULL, "vcst.q C010, INVALID_25"), + TEST_ENTRY_C(0xD07A0001, NULL, "vcst.s S010, INVALID_26"), + TEST_ENTRY_C(0xD07A0081, NULL, "vcst.p C010, INVALID_26"), + TEST_ENTRY_C(0xD07A8001, NULL, "vcst.t C010, INVALID_26"), + TEST_ENTRY_C(0xD07A8081, NULL, "vcst.q C010, INVALID_26"), + TEST_ENTRY_C(0xD07B0001, NULL, "vcst.s S010, INVALID_27"), + TEST_ENTRY_C(0xD07B0081, NULL, "vcst.p C010, INVALID_27"), + TEST_ENTRY_C(0xD07B8001, NULL, "vcst.t C010, INVALID_27"), + TEST_ENTRY_C(0xD07B8081, NULL, "vcst.q C010, INVALID_27"), + TEST_ENTRY_C(0xD07C0001, NULL, "vcst.s S010, INVALID_28"), + TEST_ENTRY_C(0xD07C0081, NULL, "vcst.p C010, INVALID_28"), + TEST_ENTRY_C(0xD07C8001, NULL, "vcst.t C010, INVALID_28"), + TEST_ENTRY_C(0xD07C8081, NULL, "vcst.q C010, INVALID_28"), + TEST_ENTRY_C(0xD07D0001, NULL, "vcst.s S010, INVALID_29"), + TEST_ENTRY_C(0xD07D0081, NULL, "vcst.p C010, INVALID_29"), + TEST_ENTRY_C(0xD07D8001, NULL, "vcst.t C010, INVALID_29"), + TEST_ENTRY_C(0xD07D8081, NULL, "vcst.q C010, INVALID_29"), + TEST_ENTRY_C(0xD07E0001, NULL, "vcst.s S010, INVALID_30"), + TEST_ENTRY_C(0xD07E0081, NULL, "vcst.p C010, INVALID_30"), + TEST_ENTRY_C(0xD07E8001, NULL, "vcst.t C010, INVALID_30"), + TEST_ENTRY_C(0xD07E8081, NULL, "vcst.q C010, INVALID_30"), + TEST_ENTRY_C(0xD07F0001, NULL, "vcst.s S010, INVALID_31"), + TEST_ENTRY_C(0xD07F0081, NULL, "vcst.p C010, INVALID_31"), + TEST_ENTRY_C(0xD07F8001, NULL, "vcst.t C010, INVALID_31"), + TEST_ENTRY_C(0xD07F8081, NULL, "vcst.q C010, INVALID_31"), TEST_ENTRY_C(0xD0801001, NULL, ".word 0xD0801001 # INVALID $a0, $zero, 0x1001 # 00000000 "), TEST_ENTRY_C(0xD0801081, NULL, ".word 0xD0801081 # INVALID $a0, $zero, 0x1081 # 00000000 "), TEST_ENTRY_C(0xD0809001, NULL, ".word 0xD0809001 # INVALID $a0, $zero, -0x6FFF # 00000000 "),