GP-6655: Create ldefs for 16e mode, so it appears in Dynamic Listing - Disassemble As

This commit is contained in:
Dan
2026-05-07 17:16:49 +00:00
parent 75337bc24d
commit 67e0516f62
4 changed files with 239 additions and 1 deletions
@@ -11,6 +11,7 @@ data/languages/mips32Instructions.sinc||GHIDRA||||END|
data/languages/mips32R6.pspec||GHIDRA||||END|
data/languages/mips32R6be.slaspec||GHIDRA||||END|
data/languages/mips32R6le.slaspec||GHIDRA||||END|
data/languages/mips32_16e.pspec||GHIDRA||||END|
data/languages/mips32_eabi.cspec||GHIDRA||||END|
data/languages/mips32_fp64.cspec||GHIDRA||||END|
data/languages/mips32be.cspec||GHIDRA||||END|
@@ -21,6 +22,7 @@ data/languages/mips32micro.pspec||GHIDRA||||END|
data/languages/mips64.pspec||GHIDRA||||END|
data/languages/mips64Instructions.sinc||GHIDRA||||END|
data/languages/mips64R6.pspec||GHIDRA||||END|
data/languages/mips64_16e.pspec||GHIDRA||||END|
data/languages/mips64_32_n32.cspec||GHIDRA||||END|
data/languages/mips64_32_o32.cspec||GHIDRA||||END|
data/languages/mips64_32_o64.cspec||GHIDRA||||END|
@@ -20,6 +20,26 @@
<external_name tool="qemu" name="qemu-mips"/>
<external_name tool="qemu_system" name="qemu-system-mips"/>
</language>
<language processor="MIPS"
endian="big"
size="32"
variant="16e"
version="1.9"
slafile="mips32be.sla"
processorspec="mips32_16e.pspec"
manualindexfile="../manuals/mipsM16.idx"
id="MIPS:BE:32:16e">
<description>MIPS32 32-bit addresses, big endian, in mips16e mode</description>
<compiler name="default" spec="mips32be.cspec" id="default"/>
<compiler name="Visual Studio" spec="mips32be.cspec" id="windows"/>
<compiler name="eabi" spec="mips32_eabi.cspec" id="eabi"/>
<external_name tool="gnu" name="mips:3000"/>
<external_name tool="gnu" name="mips:4000"/>
<external_name tool="IDA-PRO" name="mipsb"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mips"/>
<external_name tool="qemu_system" name="qemu-system-mips"/>
</language>
<language processor="MIPS"
endian="little"
size="32"
@@ -39,6 +59,25 @@
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mipsel"/>
<external_name tool="qemu_system" name="qemu-system-mipsel"/>
</language><language processor="MIPS"
endian="little"
size="32"
variant="16e"
version="1.9"
slafile="mips32le.sla"
processorspec="mips32_16e.pspec"
manualindexfile="../manuals/mipsM16.idx"
id="MIPS:LE:32:16e">
<description>MIPS32 32-bit addresses, little endian, in mips16e mode</description>
<compiler name="default" spec="mips32le.cspec" id="default"/>
<compiler name="Visual Studio" spec="mips32le.cspec" id="windows"/>
<compiler name="eabi" spec="mips32_eabi.cspec" id="eabi"/>
<external_name tool="gnu" name="mips:3000"/>
<external_name tool="gnu" name="mips:4000"/>
<external_name tool="IDA-PRO" name="mipsl"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mipsel"/>
<external_name tool="qemu_system" name="qemu-system-mipsel"/>
</language>
<language processor="MIPS"
endian="big"
@@ -90,6 +129,24 @@
<external_name tool="qemu" name="qemu-mips64"/>
<external_name tool="qemu_system" name="qemu-system-mips64"/>
</language>
<language processor="MIPS"
endian="big"
size="64"
variant="default"
version="1.9"
slafile="mips64be.sla"
processorspec="mips64_16e.pspec"
manualindexfile="../manuals/mipsM16.idx"
id="MIPS:BE:64:16e">
<description>MIPS64 64-bit addresses, big endian, in mips16e mode</description>
<compiler name="default" spec="mips64be.cspec" id="default"/>
<external_name tool="gnu" name="mips:5000"/>
<external_name tool="IDA-PRO" name="mipsb"/>
<external_name tool="IDA-PRO" name="r5900r"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mips64"/>
<external_name tool="qemu_system" name="qemu-system-mips64"/>
</language>
<language processor="MIPS"
endian="little"
size="64"
@@ -99,7 +156,26 @@
processorspec="mips64.pspec"
manualindexfile="../manuals/mipsM16.idx"
id="MIPS:LE:64:default">
<description>MIPS64 64-bit addreses, little endian, with mips16e</description>
<description>MIPS64 64-bit addresses, little endian, with mips16e</description>
<compiler name="default" spec="mips64le.cspec" id="default"/>
<compiler name="Visual Studio" spec="mips64le.cspec" id="windows"/>
<external_name tool="gnu" name="mips:5000"/>
<external_name tool="IDA-PRO" name="mipsl"/>
<external_name tool="IDA-PRO" name="r5900l"/>
<external_name tool="DWARF.register.mapping.file" name="mips.dwarf"/>
<external_name tool="qemu" name="qemu-mips64el"/>
<external_name tool="qemu_system" name="qemu-system-mips64el"/>
</language>
<language processor="MIPS"
endian="little"
size="64"
variant="default"
version="1.9"
slafile="mips64le.sla"
processorspec="mips64_16e.pspec"
manualindexfile="../manuals/mipsM16.idx"
id="MIPS:LE:64:16e">
<description>MIPS64 64-bit addresses, little endian, in mips16e mode</description>
<compiler name="default" spec="mips64le.cspec" id="default"/>
<compiler name="Visual Studio" spec="mips64le.cspec" id="windows"/>
<external_name tool="gnu" name="mips:5000"/>
@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<processor_spec>
<properties>
<property key="addressesDoNotAppearDirectlyInCode" value="true"/>
<property key="emulateInstructionStateModifierClass" value="ghidra.program.emulation.MIPSEmulateInstructionStateModifier"/>
<property key="useropLibs" value="mips"/>
</properties>
<programcounter register="pc"/>
<context_data>
<context_set space="ram">
<set name="PAIR_INSTRUCTION_FLAG" val="0" description="1 if LWL/LWR instruction is a pair"/>
<set name="RELP" val="1" description="1 if mips16e, 0 if micromips"/>
<set name="ISA_MODE" val="1" description="mips16e"/>
</context_set>
</context_data>
<register_data>
<register name="contextreg" hidden="true"/>
<register name="ext_isjal" hidden="true"/>
<register name="ext_value" hidden="true"/>
<register name="ext_value_select" hidden="true"/>
<register name="ext_value_1005" hidden="true"/>
<register name="ext_value_1004" hidden="true"/>
<register name="ext_value_sa40" hidden="true"/>
<register name="ext_value_xreg" hidden="true"/>
<register name="ext_value_frame" hidden="true"/>
<register name="ext_value_areg" hidden="true"/>
<register name="ext_value_b0" hidden="true"/>
<register name="ext_value_b1" hidden="true"/>
<register name="ext_value_b2" hidden="true"/>
<register name="ext_value_b3" hidden="true"/>
<register name="ext_value_saz" hidden="true"/>
<register name="ext_value_1511" hidden="true"/>
<register name="ext_value_1511s" hidden="true"/>
<register name="ext_value_1411" hidden="true"/>
<register name="ext_value_1411s" hidden="true"/>
<register name="ext_tgt_2521" hidden="true"/>
<register name="ext_tgt_2016" hidden="true"/>
<register name="ext_is_ext" hidden="true"/>
<register name="ext_m16r32" hidden="true"/>
<register name="ext_m16r32a" hidden="true"/>
<register name="ext_reg_high" hidden="true"/>
<register name="ext_reg_low" hidden="true"/>
<register name="ext_svrs_xs" hidden="true"/>
<register name="ext_svrs_s1" hidden="true"/>
<register name="ext_svrs_s0" hidden="true"/>
<register name="ext_tgt_x" hidden="true"/>
<register name="ext_done" hidden="true"/>
<register name="ext_delay" hidden="true"/>
<register name="REL6" hidden="true"/>
<register name="RELP" hidden="true"/>
<register name="ext_t4" hidden="true"/>
<register name="ext_tra" hidden="true"/>
<register name="ext_32_code" hidden="true"/>
<register name="ext_32_codes" hidden="true"/>
<register name="ext_32_addim" hidden="true"/>
<register name="ext_32_addims" hidden="true"/>
<register name="ext_32_imm2" hidden="true"/>
<register name="ext_32_imm2s" hidden="true"/>
<register name="ext_32_imm3" hidden="true"/>
<register name="ext_32_imm3s" hidden="true"/>
<register name="ext_32_imm5" hidden="true"/>
<register name="ext_32_imm5s" hidden="true"/>
<register name="ext_32_imm6" hidden="true"/>
<register name="ext_32_rlist" hidden="true"/>
<register name="ext_32_base" hidden="true"/>
<register name="ext_32_basea" hidden="true"/>
<register name="ext_32_rd" hidden="true"/>
<register name="ext_32_rdset" hidden="true"/>
<register name="ext_32_rs1" hidden="true"/>
<register name="ext_32_rs1lo" hidden="true"/>
<register name="ext_32_rs1set" hidden="true"/>
<register name="ext_16_rs" hidden="true"/>
<register name="ext_16_rslo" hidden="true"/>
<register name="ext_16_rshi" hidden="true"/>
<register name="ext_off16_s" hidden="true"/>
<register name="ext_off16_u" hidden="true"/>
</register_data>
</processor_spec>
@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<processor_spec>
<properties>
<property key="addressesDoNotAppearDirectlyInCode" value="true"/>
<property key="emulateInstructionStateModifierClass" value="ghidra.program.emulation.MIPSEmulateInstructionStateModifier"/>
<property key="useropLibs" value="mips"/>
<property key="assemblyRating:MIPS:BE:64:64-32addr" value="PLATINUM"/>
<property key="assemblyRating:MIPS:BE:64:default" value="PLATINUM"/>
</properties>
<programcounter register="pc"/>
<context_data>
<context_set space="ram">
<set name="PAIR_INSTRUCTION_FLAG" val="0" description="1 if LDL/LDR instruction is a pair"/>
<set name="RELP" val="1" description="1 if mips16e, 0 if micromips"/>
<set name="ISA_MODE" val="1" description="mips16e"/>
</context_set>
</context_data>
<register_data>
<register name="contextreg" hidden="true"/>
<register name="ext_isjal" hidden="true"/>
<register name="ext_value" hidden="true"/>
<register name="ext_value_select" hidden="true"/>
<register name="ext_value_1005" hidden="true"/>
<register name="ext_value_1004" hidden="true"/>
<register name="ext_value_sa40" hidden="true"/>
<register name="ext_value_xreg" hidden="true"/>
<register name="ext_value_frame" hidden="true"/>
<register name="ext_value_areg" hidden="true"/>
<register name="ext_value_b0" hidden="true"/>
<register name="ext_value_b1" hidden="true"/>
<register name="ext_value_b2" hidden="true"/>
<register name="ext_value_b3" hidden="true"/>
<register name="ext_value_saz" hidden="true"/>
<register name="ext_value_1511" hidden="true"/>
<register name="ext_value_1511s" hidden="true"/>
<register name="ext_value_1411" hidden="true"/>
<register name="ext_value_1411s" hidden="true"/>
<register name="ext_tgt_2521" hidden="true"/>
<register name="ext_tgt_2016" hidden="true"/>
<register name="ext_is_ext" hidden="true"/>
<register name="ext_m16r32" hidden="true"/>
<register name="ext_m16r32a" hidden="true"/>
<register name="ext_reg_high" hidden="true"/>
<register name="ext_reg_low" hidden="true"/>
<register name="ext_svrs_xs" hidden="true"/>
<register name="ext_svrs_s1" hidden="true"/>
<register name="ext_svrs_s0" hidden="true"/>
<register name="ext_tgt_x" hidden="true"/>
<register name="ext_done" hidden="true"/>
<register name="ext_delay" hidden="true"/>
<register name="REL6" hidden="true"/>
<register name="RELP" hidden="true"/>
<register name="ext_t4" hidden="true"/>
<register name="ext_tra" hidden="true"/>
<register name="ext_32_code" hidden="true"/>
<register name="ext_32_codes" hidden="true"/>
<register name="ext_32_addim" hidden="true"/>
<register name="ext_32_addims" hidden="true"/>
<register name="ext_32_imm2" hidden="true"/>
<register name="ext_32_imm2s" hidden="true"/>
<register name="ext_32_imm3" hidden="true"/>
<register name="ext_32_imm3s" hidden="true"/>
<register name="ext_32_imm5" hidden="true"/>
<register name="ext_32_imm5s" hidden="true"/>
<register name="ext_32_imm6" hidden="true"/>
<register name="ext_32_rlist" hidden="true"/>
<register name="ext_32_base" hidden="true"/>
<register name="ext_32_basea" hidden="true"/>
<register name="ext_32_rd" hidden="true"/>
<register name="ext_32_rdset" hidden="true"/>
<register name="ext_32_rs1" hidden="true"/>
<register name="ext_32_rs1lo" hidden="true"/>
<register name="ext_32_rs1set" hidden="true"/>
<register name="ext_16_rs" hidden="true"/>
<register name="ext_16_rslo" hidden="true"/>
<register name="ext_16_rshi" hidden="true"/>
<register name="ext_off16_s" hidden="true"/>
<register name="ext_off16_u" hidden="true"/>
</register_data>
</processor_spec>