You've already forked rabbitizer
mirror of
https://github.com/encounter/rabbitizer.git
synced 2026-03-30 11:35:30 -07:00
18 KiB
18 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
Added
- New global configuration:
misc_expandJalr: IfTruethenjalrinstructions will be always emitted with two operands. Otherwise therdregister will be omitted if it is$raand will be used explicitly if it isn't$ra. Defaults toFalse.
1.10.0 - 2024-04-22
Added
- Add PSP's ALLEGREX instruction set support.
- The global
regNames.r4000AllegrexVfpuControlNamedRegistersoption controls if named registers should be used for the VFPU control registers of the R4000 ALLEGREX. Utils.floatRepr_32From16function.- Converts a half float to a single precision float.
- Both the argument and the return value correspond to their hex representation instead of an actual float.
Changed
- Cleanups in tests code.
Fixed
- Fix typo on C++ bindings.
- The registers getters of the R5900 instruction class was checking for the wrong operands.
1.9.5 - 2024-04-03
Changed
- Consider r5900's
paddubas a possible move instruction. - Internal rework to avoid allocating memory when calculating required buffer
size for disassembly.
- This is part of the
RabbitizerInstruction_getSizeForBufferfunction. - This change may help recent Windows specific issues.
- This is part of the
1.9.4 - 2024-03-18
Changed
- Always use named registers for R5900's VU instructions.
1.9.3 - 2024-03-17
Fixed
- Fix the disassembly of
pref. - Fix typo on
c.seq.d.- Was typed as
c.deq.d.
- Was typed as
1.9.2 - 2024-03-10
Fixed
- Fix possible stack overflow if
immOverrideis larger than 255 bytes.
1.9.1 - 2024-02-18
Fixed
- Fix PyPI releases being broken due to a GHA update.
1.9.0 - 2024-02-18
Added
- Implement
negpseudo.
Changed
Instruction.getProcessedImmediatenow raises an exception if the instruction does not contain an immediate field.Instruction.getInstrIndexAsVramnow raises an exception if the instruction does not contain an jump label field.Instruction.getBranchOffsetnow raises an exception if the instruction does not contain an branch label field.- Extend Python's
Instructiondocumentation.- Thanks to @Dragorn421 (PR #53)
Deprecated
Instruction.isImplemented: UseInstruction.isValidinstead.
1.8.3 - 2024-01-28
Fixed
- Fix Windows issue where jumptables where not properly identified.
- Caused because of an issue on
RegistersTracker.getJrInfonot using the correct type width for the return value on the Python binding.
- Caused because of an issue on
1.8.2 - 2024-01-28
Fixed
- Fix Windows issue on which symbols were not properly being paired.
- This was caused because of a misuse of the type widths on the Python binding.
1.8.1 - 2023-12-25
Changed
- Minor cleanups on Rust code.
- Enabled
-Werror=type-limitsin the Makefile.
Fixed
getBranchVramGenericreturns an unsigned type instead of a signed one.
1.8.0 - 2023-11-12
Added
- Add
flag_r5900DisasmAsDatamember to theInstructionclass.- This flag allows to fine-tune R5900 instruction set that are affected by
the global
gnuModeoption.- Currently these instructions are:
trunc.w.s,cvt.w.s,vclipwandvsqrt.
- Currently these instructions are:
TrinaryValue.TRUEforces the instruction to be disassembled as data.TrinaryValue.FALSEbypasses the global checks for disassembling a word as data. A word will still be disassembled as data if it can't be decoded.TrinaryValue.NONEleaves this decision to the global settings.
- This flag allows to fine-tune R5900 instruction set that are affected by
the global
- Add
flag_r5900UseDollarmember to theInstructionclass.TrinaryValue.TRUEforces the use of dollar signs ($) on R5900's VU instructions.TrinaryValue.FALSEforces disassembling to not use of dollar signs ($) on R5900's VU instructions.TrinaryValue.NONEleaves this decision to the global settings.
1.7.10 - 2023-09-24
Added
- Add Python binding for
rabbitizer.__version_info__ - Add Python binding for
rabbitizer.__version__ - Add Python binding for
rabbitizer.__author__ - Add
CHANGELOG.md - Add markdown linter to CI
Fixed
- Fix passing
Noneto third argument ofRegistersTracker.processLuion the Python bindings - Fix passing
Noneto first argument ofRegistersTrackeron the Python bindings
1.7.9 - 2023-09-18
Changed
- Don't attempt disassembling R5900's
vclipw/vsqrtin gnu mode (#44)- Thanks @ethteck
1.7.8 - 2023-09-13
Changed
- Consider
syscallas an instruction that isn't emited by compilers - Add
$to special PS2 regs (#41)- Thanks @ethteck
- The
treatJAsUnconditionalBranchoption is no longer deprecated
Fixed
- Fix size calculation required for the buffer of the disassembled instruction for a few edge cases
- Properly implement r5900's
vcallmsoperands
1.7.7 - 2023-08-27
Changed
- Reimplement hash function for Enum type.
Fixed
- Fix type hints for Enum type missing the hash function.
1.7.6 - 2023-08-22
Fixed
- Fix syscall having two arguments instead of just one
1.7.5 - 2023-08-08
Changed
- Catch more errors and raise Python exceptions on them in the instruction disassembly binding
Fixed
- Fix bug where the buffer size for a decoded instruction would be computed
wrongly if the passed
extraLJustparameter plus the globalopcodeLJustoption resulted in a negative value.
1.7.4 - 2023-06-13
Added
- Provide macros to allow using gte instructions in both assembly and C. Those
are provided under the
docs/r3000gtefolder of the repository
Fixed
- Fix R5900 vf registers not using the
$vfprefix in numeric register mode.
1.7.3 - 2023-06-10
Fixed
- Fix Rust release
1.7.2 - 2023-05-04
Added
- Add
InstrIdType - Add
clippyrust linter and fix the new warnings
Changed
- Move all the tables and templates into the
tables/folder - Format and cleanup rust code
1.7.1 - 2023-05-02
Changed
- General cleanups in the codebase. Not actual features or fixes were made
1.7.0 - 2023-04-30
Added
- Support for R3000 GTE instructions (a.k.a. the PS1 specific instructions)
- PR #31
- Add CI for checking the repo is always formatted
- Add CI for checking the tables have been regenerated
Changed
- Only run the CI that builds the python bindings for every machine on new releases.
- This action was by far the slowest, so this should speed up PRs
- Other Github Actions cleanups
1.6.2 - 2023-04-27
Fixed
- Fix
getInstrIndexAsVramtaking the upper 8 bits instead of 4 bits for the vram calculation
1.6.1 - 2023-04-18
Added
- Expose
fs,ftandfdregisters to Python bindings. - Add enums for
RegCop1O32,RegCop1N32andRegCop1N64registers for Python bindings
Fixed
- Fix
Instruction'svramparameter not initialized if it was not passed to the constructor on the Python binding.
1.6.0 - 2023-04-17
Added
- Adds
gnuModeto the configuration.- Toggles various tweaks to allow building and matching with GNU
as, which original compiler will not like. - Enabled by default.
- Turning this mode off makes the
div $0,pseudo instruction to not be used
- Toggles various tweaks to allow building and matching with GNU
Changed
- Removed special treatment for R5900's
trunc.w.s.cvt.w.sandtrunc.w.swill be decoded as-is whengnuModeis turned off.- If
gnuModeis turned on this instruction those two instructions are decoded as.words
- R5900's special operands
I,Q,RandACCwill not longer be decoded with a$prefix - All autogenerated files are added the
linguist-generatedattribute.
1.5.11 - 2023-04-02
- Fake version bump to convince CI to build binaries for Python 3.11
- Updates some Github Actions to newer versions
1.5.10 - 2023-02-23
Added
- Add a unit test to ensure every bindings use the same version number
- This is enforced in CI
1.5.9 - 2023-02-23
Added
- Implement
mfc2,mtc2,cfc2andctc2 - Document C api usage
Changed
- Expand list of instructions not emitted by C compilers
Fixed
- Fix "emitted" typo
1.5.8 - 2022-12-20
Added
- New
modifiesF*andreadsF*properties in the InstructionDescriptor
Changed
- Column limit for C files has been changed to 120
Fixed
- Fix source distribution of Python package
1.5.7 - 2022-12-20
Fixed
- Fix a Rust binding not taking
&
1.5.6 - 2022-12-19
Added
- Introduce
RegisterDescriptor outputsToGprZeromethod
Removed
jalr_rdhas been removed. Its old conditional behavior is now handled with the newcpu_maybe_rd_rsoperand
Fixed
- Fix some typos in Rust bindings
1.5.5 - 2022-12-19
Changed
- Change the global option
treatJAsUnconditionalBranch's default totrue - Cleanup Rust bindings to reduce useless indirections
Fixed
- Actually package the C files in the Rust crate
1.5.4 - 2022-12-18
Fixed
- Why Are We Still Here? Just To Suffer?
- Try to fix Rust bindings packaging
1.5.3 - 2022-12-18
Fixed
- Trying to fix crate publishing, again again
1.5.2 - 2022-12-18
Fixed
- Try to fix automatic Rust crate publishing again
1.5.1 - 2022-12-18
Fixed
- Attempt to fix Rust crate publishing
1.5.0 - 2022-12-18
1.5.0: Rust bindings
Added
- Adds Rust bindings
- The table-macro-hell has been changed a little to include pre-processed versions of all the tables in the repository. This change should be more friendly to IDEs
1.4.0 - 2022-12-16
Added
- New methods to know if an instruction reads the value of a GPR:
.readsRs,.readsRdand.readsRt - Descriptor logic errors are now checked in CI
Changed
- A lot of descriptor information where corrected
Deprecated
- Deprecate
isJrRa(), prefer newisReturn()method - Deprecate
isJrNotRa(), prefer newisJumptableJump()method
Removed
- 3 non-existent RSP instructions where removed (
rsp_cache,rsp_lwc1andrsp_swc1) - Remove
setup.cfgand move all the info topyproject.toml
1.3.3 - 2022-11-30
Fixed
- Fix RSP's jalr being marked as invalid
- Thanks to @Mr-Wiseguy for noticing
1.3.2 - 2022-11-30
Changed
- Check for
_INVALIDunique ids inisValid
Fixed
- Fixed RSP using CPU cop0 .inc file instead of RSP cop0 and cop2 files (#13)
- Thanks to @Mr-Wiseguy
1.3.1 - 2022-10-16
Changed
- Removes signedness from
AccessType
1.3.0 - 2022-10-15
Added
- Adds C++ bindings
- New functions/methods:
Instruction#getBranchOffsetGeneric(): LikeInstruction#getGenericBranchOffset(), but does not require thecurrentVramparameterInstruction#getBranchVramGeneric()Instruction#getDestinationGpr()Instruction#hasOperandAlias()Instruction#isJumpWithAddress()Instruction#readsHI()Instruction#readsLO()Instruction#modifiesHI()Instruction#modifiesLO()Instruction#getAccessType()InstrCategory#fromStr()
- New enums:
OperandTypeAccessType
Deprecated
- Deprecated functions/methods:
Instruction#getImmediate(): UseInstruction#getProcessedImmediate()insteadInstruction#getGenericBranchOffset(): UseInstruction#getBranchOffsetGeneric()insteadInstruction#mapInstrToType(): UseInstruction#getAccessType()insteadInstruction#isUnknownType()Instruction#isJType(): UseInstruction#isJumpWithAddress()insteadInstruction#isIType(): UseInstruction#hasOperandAlias(OperandType.cpu_immediate)insteadInstruction#isRType()Instruction#isRegimmType()
Fixed
- Fix missing operands on some trap instructions
- Fix buffer size calculation for disassembly
1.2.2 - 2022-10-09
1.2.2: bal and proper \\ escape
Added
- Add
balsupport
Changed
- Use special notation for branches which should produce matching instructions
even when no
immOverridewas passed - Escape
\->\\onRabbitizerUtils_escapeString - Add
extern "C"in every header
1.2.1 - 2022-09-26
1.2.1: Static library building in the Makefile
Added
- Makefile now creates a
librabbitizer.afile by default. - Makefile can also build a
librabbitizer.sowithmake dynamic - New
include/rabbitizer.hheader which includes every other header - Added a version header
1.2.0 - 2022-09-17
1.2.0: %got compatibility
Added
- New methods in
RegistersTrackerto support tracking%gotaccessesprocessGpLoad, which works similar toprocessLuipreprocessLoAndGetInfo, which replaces the now deprecatedgetLuiOffsetForLo
Changed
- Move operand types to the table format. Operands were also renamed to a more concise name.
Fixed
- Fix the wrong returned value on
Utils.From2Complementwhenbitsequals 32.
Deprecated
RegistersTracker.getLuiOffsetForLo. UseRegistersTracker.preprocessLoAndGetInfoinstead.
1.1.0 - 2022-08-27
1.1.0: RSP and R5900 support
Added
- Add proper instruction decoding for N64's RSP
- Add support for decoding the R5900 processor (PS2's Emotion Engine processor)
Changed
- Cleanup internal instruction tables format
1.0.1 - 2022-07-12
Added
- New function
Utils.escapeString: Escapes escape characters.
Changed
- Allow taking
NoneinAbi.fromStr: returnso32in that case. - Many cleanups and formats
1.0.0 - 2022-07-07
Added
- New classes:
RegistersTracker: Intended to facilitate tracking the state of the general purpose registers.
- New enums:
RegGprO32andRegGprN32
- New configurations:
misc_omit0XOnSmallImm: IfTruethen the leading0xof immediates in the [-9, 9] range is omitted. Defaults toFalse.misc_upperCaseImm: IfTruethen immediates are outputted in uppercase. Defaults toTrue.
- Many code cleanups
Changed
Instructionchanges:- Constructor can accept
vramandcategoryparameters. isHiPairrenamed tocanBeHi.isLoPairrenamed tocanBeLo.- Added
doesLoad,doesStore,maybeIsMove,isPseudoandarchitectureVersiontoInstrDescriptor. - Python API:
Instruction#rs,Instruction#rtand ``Instruction#rd` now return an enum gpr type and will raise an exception if the instruction does not reference the corresponding register. - New methods:
getOpcodeName,getProcessedImmediate,hasDelaySlotandisValid. - Added
__reduce__method to allow pickling the object.
- Constructor can accept
0.1.0 - 2022-06-10
- First version