rabbitizer/CHANGELOG.md

695 lines
20 KiB
Markdown
Raw Normal View History

2023-09-22 15:01:26 -03:00
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
2023-09-22 14:34:38 -03:00
## [Unreleased]
2024-07-13 17:30:13 -04:00
### Added
- Implement the `rfe` ("Restore From Exception") instruction.
### Fixed
2024-07-15 20:28:41 -04:00
- Fix `pmfhl`, `pmthl`, `vilwr` and `viswr` missing the `.fmt` specifier.
2024-07-12 11:45:48 -04:00
## [1.11.1] - 2024-07-12
### Added
- `Instruction.isFunctionCall`: Checks if the given instruciton is a function
call.
- If `config.toolchainTweaks_treatJAsUnconditionalBranch` is turned off then
`j` instructions will be considered as function calls too. Useful for tail
call optimizations.
### Fixed
- Fix registers not being cleared after a `j` tail call, which was messing with
the pointer pairing logic.
2024-05-22 12:49:08 -04:00
## [1.11.0] - 2024-05-22
2024-04-23 11:09:58 -04:00
### Added
- New global configuration:
- `misc_expandJalr`: If `True` then `jalr` instructions will be always emitted
with two operands. Otherwise the `rd` register will be omitted if it is
`$ra` and will be used explicitly if it isn't `$ra`. Defaults to `False`.
### Fixed
- Fix crash in Rust bindings for to Rust 1.78.
- This happens because `slice.get_unchecked` now performs OoB checks in debug
builds, which is is triggered when trying to dereference unsized C arrays.
- Fix heap corruption in Rust bindings (#62)
- The C API was returning string sizes without accounting for the null
terminator, which produced issues on the Rust size which was not manually
including it.
2024-04-22 13:21:03 -04:00
## [1.10.0] - 2024-04-22
ALLEGREX support (#60) * setup ALLEGREX * more setup * clo * fix * Implement SPECIAL_RS and SPECIAL_SA instructions * more table placeholders * Implement bshfl instructions * Rename to R4000Allegrex * Implement SPECIAL instructions * Add tests * Remove some duplicated tests * Implement SPECIAL3 instructions * fix bug in test * update * Implement COPz * Implement SPECIAL2 instructions * Implement COP1 * Yeet cop3 * som tests * bvf, bvfl, bvt, bvtl * fix bshfl prefix * need to implement the vfpu registers * implement vt_7? * R4000AllegrexVF -> R4000AllegrexVScalar * Add test suite to compare with the sn toolchain decoding * more vfpu test cases * forgor this * I can't decide how to name these registers * Prepare tables for all register types * Fix typo * Implement vector scalar register operands * Implement quad registers * Fix tests? * svl.q, svr.q * Implement a bunch of vfpu0 instructions * implement registers for `.t` and `.p` instructions * Implement VFPU1 instructions * bleh * VFPU1, VFPU3 and `vcmp.` * Fix wrong register type on some instructions * start vfpu3 * Implement VFPU3 instructions * start categorizing VFPU4 * Categorize VFPU5 * VFPU6 identification * Identify VFPU7 * COP2 is weird * organize COP2 a bit * Add test cases for VFPU4 FMT * VFPU4 FMT2 stuff * VFPU4 FMT3 stuff * VFPU5 stuff * VFPU6 stuff * VFPU7 stuff * Implement COP2 instructions * Implement vmov, vabs and vneg * VPFU4 FMT0 FMT0 FMT0 implemented * VFPU FMT0 FMT0 FMT2 * vnrcp, vnsin, vrexp2 * vrnds, vrndi, vrndf1, vrndf2 * Change tests a bit * vf2h, vh2f, vsbz, vlgb * vuc2ifs, vc2i, vus2i, vs2i, vi2uc, vi2c, vi2us, vi2s * vsrt1, vsrt2, vbfy1, vbfy2, vocp, vsocp, vfad, vavg * vsrt3, vsrt4, vsgn * vmfvc and vmtvc placeholders * vt4444, vt5551, vt5650 * vcst placeholder * vf2in * vf2iz * vf2iu, vf2id, vi2f * vcmovt, vcmovf * vwbn.s, viim.s, vfim.s * vpfxs, vpfxt, vpfxd, vnop, vsync, vflush * vmmov, vmidt, vmzero, vmone * vrot * vmmul, vhtfm2, vtfm2, vhtfm3, vtfm3, vhtfm4, vtfm4, vmscl, vcrsp, vqmul * Implement matrix operands * fix matrix operands * Fix `illegal` tests * hack out a way to check the test cases are assemblable * test-fixing: branches * fix more test cases * fix vmfvc and vmtvc * more test fixing * vdiv and fix operand R323 * more test fixing * Fix matrix operands * implement vcmp comparisons * fix vsync2 * vsqrt and vrndf1 fixes * Implement "constant" operand for `vcst` * Add missing operand of vf2in, vf2iz, vf2iu, vf2id, vi2f * Add missing vcmovt and vcmovf operands * Add missing vwbn operand * Tests cases for vmmul * Fix vtfm2 * Implement "transpose matrix register" * Add placeholders for the remaining missing operands * Implement viim operand * Implement vrot code operand * placeholders for rp and wp operands * test cases for vpfxs, vpfxt and vpfxd * Properly implement rpx, rpy, rpz and rpw * Properly implement wpx, wpy, wpz and wpw operands * Implement vfim * changelog * readme * some cleanup * Restructure some tables * more table restructure * fix tests * more table yeeting * more cleanup * more cleanup * reanming * moar * fmt
2024-04-22 13:15:58 -04:00
### Added
- Add PSP's ALLEGREX instruction set support.
- The global `regNames.r4000AllegrexVfpuControlNamedRegisters` option controls
if named registers should be used for the VFPU control registers of the R4000
ALLEGREX.
- `Utils.floatRepr_32From16` function.
- 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.
2024-04-11 11:24:49 -04:00
### Changed
- Cleanups in tests code.
2024-04-13 15:04:04 -04:00
### Fixed
- Fix typo on C++ bindings.
- The registers getters of the R5900 instruction class was checking for the
wrong operands.
2024-04-03 13:12:41 -03:00
## [1.9.5] - 2024-04-03
### Changed
- Consider r5900's `paddub` as a possible move instruction.
- Internal rework to avoid allocating memory when calculating required buffer
size for disassembly.
- This is part of the `RabbitizerInstruction_getSizeForBuffer` function.
- This change may help recent Windows specific issues.
2024-03-18 16:39:16 -03:00
## [1.9.4] - 2024-03-18
### Changed
- Always use named registers for R5900's VU instructions.
2024-03-17 11:18:13 -03:00
## [1.9.3] - 2024-03-17
2024-03-10 16:56:29 -03:00
### Fixed
2024-03-11 09:17:29 -03:00
- Fix the disassembly of `pref`.
- Fix typo on `c.seq.d`.
- Was typed as `c.deq.d`.
2024-03-10 16:56:29 -03:00
2024-03-10 11:06:53 -03:00
## [1.9.2] - 2024-03-10
### Fixed
- Fix possible stack overflow if `immOverride` is larger than 255 bytes.
2024-02-18 16:50:30 -03:00
## [1.9.1] - 2024-02-18
### Fixed
- Fix PyPI releases being broken due to a GHA update.
2024-02-18 13:13:05 -03:00
## [1.9.0] - 2024-02-18
2024-02-18 11:34:07 -03:00
### Added
- Implement `neg` pseudo.
### Changed
- `Instruction.getProcessedImmediate` now raises an exception if the
instruction does not contain an immediate field.
- `Instruction.getInstrIndexAsVram` now raises an exception if the
instruction does not contain an jump label field.
- `Instruction.getBranchOffset` now raises an exception if the
instruction does not contain an branch label field.
- Extend Python's `Instruction` documentation.
- Thanks to @Dragorn421 (PR #53)
2024-02-11 13:17:10 -03:00
### Deprecated
- `Instruction.isImplemented`: Use `Instruction.isValid` instead.
2024-01-28 13:52:35 -03:00
## [1.8.3] - 2024-01-28
### Fixed
- Fix Windows issue where jumptables where not properly identified.
- Caused because of an issue on `RegistersTracker.getJrInfo` not using the
correct type width for the return value on the Python binding.
2024-01-28 12:24:33 -03:00
## [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.
2023-12-25 15:07:58 -03:00
## [1.8.1] - 2023-12-25
### Changed
- Minor cleanups on Rust code.
2023-12-25 15:02:15 -03:00
- Enabled `-Werror=type-limits` in the Makefile.
### Fixed
- `getBranchVramGeneric` returns an unsigned type instead of a signed one.
2023-11-12 12:26:37 -03:00
## [1.8.0] - 2023-11-12
2023-11-11 13:19:56 -03:00
### Added
- Add `flag_r5900DisasmAsData` member to the `Instruction` class.
- This flag allows to fine-tune R5900 instruction set that are affected by
the global `gnuMode` option.
- Currently these instructions are: `trunc.w.s`, `cvt.w.s`, `vclipw` and
`vsqrt`.
2023-11-11 13:19:56 -03:00
- `TrinaryValue.TRUE` forces the instruction to be disassembled as data.
2023-11-11 13:55:06 -03:00
- `TrinaryValue.FALSE` bypasses the global checks for disassembling a word
2023-11-11 13:19:56 -03:00
as data. A word will still be disassembled as data if it can't be decoded.
2023-11-11 13:55:06 -03:00
- `TrinaryValue.NONE` leaves this decision to the global settings.
- Add `flag_r5900UseDollar` member to the `Instruction` class.
- `TrinaryValue.TRUE` forces the use of dollar signs ($) on R5900's VU
instructions.
- `TrinaryValue.FALSE` forces disassembling to not use of dollar signs ($) on
R5900's VU instructions.
- `TrinaryValue.NONE` leaves this decision to the global settings.
2023-11-11 13:19:56 -03:00
2023-09-24 10:37:43 -03:00
## [1.7.10] - 2023-09-24
2023-09-24 10:35:58 -03:00
2023-09-22 15:54:19 -03:00
### Added
- Add Python binding for `rabbitizer.__version_info__`
- Add Python binding for `rabbitizer.__version__`
- Add Python binding for `rabbitizer.__author__`
2023-09-24 10:35:58 -03:00
- Add `CHANGELOG.md`
- Add markdown linter to CI
2023-09-22 15:49:43 -03:00
### Fixed
- Fix passing `None` to third argument of `RegistersTracker.processLui` on the
Python bindings
- Fix passing `None` to first argument of `RegistersTracker` on the Python bindings
2023-09-22 14:34:38 -03:00
## [1.7.9] - 2023-09-18
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 14:34:38 -03:00
- Don't attempt disassembling R5900's `vclipw` / `vsqrt` in gnu mode (#44)
2023-09-22 15:01:26 -03:00
- Thanks @ethteck
2023-09-22 14:34:38 -03:00
## [1.7.8] - 2023-09-13
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 14:34:38 -03:00
2023-09-22 15:49:43 -03:00
- Consider `syscall` as an instruction that isn't emited by compilers
2023-09-22 14:34:38 -03:00
- Add `$` to special PS2 regs (#41)
2023-09-22 15:01:26 -03:00
- Thanks @ethteck
2023-09-22 14:34:38 -03:00
- The `treatJAsUnconditionalBranch` option is no longer deprecated
2023-09-22 15:49:43 -03:00
### Fixed
- Fix size calculation required for the buffer of the disassembled instruction
for a few edge cases
- Properly implement r5900's `vcallms` operands
2023-09-22 14:34:38 -03:00
## [1.7.7] - 2023-08-27
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 14:34:38 -03:00
- Reimplement hash function for Enum type.
2023-09-22 15:49:43 -03:00
### Fixed
- Fix type hints for Enum type missing the hash function.
2023-09-22 14:34:38 -03:00
## [1.7.6] - 2023-08-22
2023-09-22 15:49:43 -03:00
### Fixed
2023-09-22 14:34:38 -03:00
- Fix syscall having two arguments instead of just one
## [1.7.5] - 2023-08-08
2023-09-22 15:49:43 -03:00
### Changed
- Catch more errors and raise Python exceptions on them in the instruction
disassembly binding
### Fixed
2023-09-22 14:34:38 -03:00
2023-09-22 15:01:26 -03:00
- Fix bug where the buffer size for a decoded instruction would be computed
wrongly if the passed `extraLJust` parameter plus the global `opcodeLJust`
option resulted in a negative value.
2023-09-22 14:34:38 -03:00
## [1.7.4] - 2023-06-13
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
2023-09-22 15:49:43 -03:00
- Provide macros to allow using gte instructions in both assembly and C. Those
are provided under the [`docs/r3000gte`](./docs/r3000gte/) folder of the repository
2023-09-22 14:34:38 -03:00
2023-09-22 15:49:43 -03:00
### Fixed
2023-09-22 15:01:26 -03:00
2023-09-22 15:49:43 -03:00
- Fix R5900 vf registers not using the `$vf` prefix in numeric register mode.
2023-09-22 14:34:38 -03:00
## [1.7.3] - 2023-06-10
2023-09-22 15:49:43 -03:00
### Fixed
2023-09-22 14:34:38 -03:00
2023-09-22 15:49:43 -03:00
- Fix Rust release
2023-09-22 14:34:38 -03:00
## [1.7.2] - 2023-05-04
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- Add `InstrIdType`
2023-09-22 15:49:43 -03:00
- Add `clippy` rust linter and fix the new warnings
### Changed
- Move all the tables and templates into the `tables/` folder
- Format and cleanup rust code
2023-09-22 14:34:38 -03:00
## [1.7.1] - 2023-05-02
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 14:34:38 -03:00
2023-09-22 15:49:43 -03:00
- General cleanups in the codebase. Not actual features or fixes were made
2023-09-22 14:34:38 -03:00
## [1.7.0] - 2023-04-30
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- Support for R3000 GTE instructions (a.k.a. the PS1 specific instructions)
2023-09-22 15:01:26 -03:00
- PR #31
2023-09-22 14:34:38 -03:00
- Add CI for checking the repo is always formatted
- Add CI for checking the tables have been regenerated
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 14:34:38 -03:00
- 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
2023-09-22 15:49:43 -03:00
- Other Github Actions cleanups
2023-09-22 14:34:38 -03:00
## [1.6.2] - 2023-04-27
2023-09-22 15:49:43 -03:00
### Fixed
2023-09-22 14:34:38 -03:00
2023-09-22 15:01:26 -03:00
- Fix `getInstrIndexAsVram` taking the upper 8 bits instead of 4 bits for the
vram calculation
2023-09-22 14:34:38 -03:00
## [1.6.1] - 2023-04-18
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- Expose `fs`, `ft` and `fd` registers to Python bindings.
2023-09-22 15:01:26 -03:00
- Add enums for `RegCop1O32`, `RegCop1N32` and `RegCop1N64` registers for
Python bindings
2023-09-22 14:34:38 -03:00
2023-09-22 15:49:43 -03:00
### Fixed
- Fix `Instruction`'s `vram` parameter not initialized if it was not passed to
the constructor on the Python binding.
2023-09-22 14:34:38 -03:00
## [1.6.0] - 2023-04-17
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- Adds `gnuMode` to the configuration.
2023-09-22 15:01:26 -03:00
- Toggles various tweaks to allow building and matching with GNU `as`, which
original compiler will not like.
2023-09-22 14:34:38 -03:00
- Enabled by default.
2023-09-22 15:01:26 -03:00
- Turning this mode off makes the `div $0,` pseudo instruction to not be used
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 15:01:26 -03:00
- Removed special treatment for R5900's `trunc.w.s`.
2023-09-22 14:34:38 -03:00
- `cvt.w.s` and `trunc.w.s` will be decoded as-is when `gnuMode` is turned off.
2023-09-22 15:01:26 -03:00
- If `gnuMode` is turned on this instruction those two instructions are
decoded as `.word`s
- R5900's special operands `I`, `Q`, `R` and `ACC` will not longer be decoded
with a `$` prefix
2023-09-22 14:34:38 -03:00
- All autogenerated files are added the `linguist-generated` attribute.
## [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
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- Add a unit test to ensure every bindings use the same version number
2023-09-22 15:49:43 -03:00
- This is enforced in CI
2023-09-22 14:34:38 -03:00
## [1.5.9] - 2023-02-23
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- Implement `mfc2`, `mtc2`, `cfc2` and `ctc2`
- Document C api usage
2023-09-22 15:49:43 -03:00
### Changed
- Expand list of instructions not emitted by C compilers
### Fixed
- Fix "emitted" typo
2023-09-22 14:34:38 -03:00
## [1.5.8] - 2022-12-20
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- New `modifiesF*` and `readsF*`properties in the InstructionDescriptor
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 14:34:38 -03:00
- Column limit for C files has been changed to 120
2023-09-22 15:49:43 -03:00
### Fixed
- Fix source distribution of Python package
2023-09-22 14:34:38 -03:00
## [1.5.7] - 2022-12-20
2023-09-22 15:49:43 -03:00
### Fixed
2023-09-22 14:34:38 -03:00
- Fix a Rust binding not taking `&`
## [1.5.6] - 2022-12-19
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- Introduce `RegisterDescriptor`
2023-09-22 15:49:43 -03:00
- `outputsToGprZero` method
### Removed
2023-09-22 15:01:26 -03:00
- `jalr_rd` has been removed. Its old conditional behavior is now handled with
the new `cpu_maybe_rd_rs` operand
2023-09-22 15:49:43 -03:00
### Fixed
- Fix some typos in Rust bindings
2023-09-22 14:34:38 -03:00
## [1.5.5] - 2022-12-19
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 14:34:38 -03:00
2023-09-22 15:49:43 -03:00
- Change the global option `treatJAsUnconditionalBranch`'s default to `true`
2023-09-22 14:34:38 -03:00
- Cleanup Rust bindings to reduce useless indirections
2023-09-22 15:49:43 -03:00
### Fixed
- Actually package the C files in the Rust crate
2023-09-22 14:34:38 -03:00
## [1.5.4] - 2022-12-18
2023-09-22 15:49:43 -03:00
### Fixed
2023-09-22 14:34:38 -03:00
2023-09-22 15:49:43 -03:00
- Why Are We Still Here? Just To Suffer[?](https://knowyourmeme.com/memes/why-are-we-still-here-just-to-suffer)
- Try to fix Rust bindings packaging
2023-09-22 14:34:38 -03:00
## [1.5.3] - 2022-12-18
2023-09-22 15:49:43 -03:00
### Fixed
2023-09-22 14:34:38 -03:00
2023-09-22 15:49:43 -03:00
- Trying to fix crate publishing, again again
2023-09-22 14:34:38 -03:00
## [1.5.2] - 2022-12-18
2023-09-22 15:49:43 -03:00
### Fixed
2023-09-22 14:34:38 -03:00
2023-09-22 15:49:43 -03:00
- Try to fix automatic Rust crate publishing again
2023-09-22 14:34:38 -03:00
## [1.5.1] - 2022-12-18
2023-09-22 15:49:43 -03:00
### Fixed
2023-09-22 14:34:38 -03:00
2023-09-22 15:49:43 -03:00
- Attempt to fix Rust crate publishing
2023-09-22 14:34:38 -03:00
## [1.5.0] - 2022-12-18
1.5.0: Rust bindings
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- Adds Rust bindings
2023-09-22 15:01:26 -03:00
- 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
2023-09-22 14:34:38 -03:00
## [1.4.0] - 2022-12-16
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
2023-09-22 15:01:26 -03:00
- New methods to know if an instruction reads the value of a GPR: `.readsRs`,
`.readsRd` and `.readsRt`
2023-09-22 15:49:43 -03:00
- Descriptor logic errors are now checked in CI
### Changed
- A lot of descriptor information where corrected
### Deprecated
2023-09-22 14:34:38 -03:00
- Deprecate `isJrRa()`, prefer new `isReturn()` method
- Deprecate `isJrNotRa()`, prefer new `isJumptableJump()` method
2023-09-22 15:49:43 -03:00
### Removed
2023-09-22 15:01:26 -03:00
2023-09-22 15:49:43 -03:00
- 3 non-existent RSP instructions where removed (`rsp_cache`, `rsp_lwc1` and
`rsp_swc1`)
2023-09-22 14:34:38 -03:00
- Remove `setup.cfg` and move all the info to `pyproject.toml`
## [1.3.3] - 2022-11-30
2023-09-22 15:49:43 -03:00
### Fixed
2023-09-22 14:34:38 -03:00
- Fix RSP's jalr being marked as invalid
- Thanks to @Mr-Wiseguy for noticing
## [1.3.2] - 2022-11-30
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 14:34:38 -03:00
- Check for `_INVALID` unique ids in `isValid`
2023-09-22 15:49:43 -03:00
### Fixed
- Fixed RSP using CPU cop0 .inc file instead of RSP cop0 and cop2 files (#13)
- Thanks to @Mr-Wiseguy
2023-09-22 14:34:38 -03:00
## [1.3.1] - 2022-10-16
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 14:34:38 -03:00
2023-09-22 15:49:43 -03:00
- Removes signedness from `AccessType`
2023-09-22 14:34:38 -03:00
## [1.3.0] - 2022-10-15
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- Adds C++ bindings
- New functions/methods:
2023-09-22 15:01:26 -03:00
- `Instruction#getBranchOffsetGeneric()`: Like
`Instruction#getGenericBranchOffset()`, but does not require the
`currentVram` parameter
2023-09-22 14:34:38 -03:00
- `Instruction#getBranchVramGeneric()`
- `Instruction#getDestinationGpr()`
- `Instruction#hasOperandAlias()`
- `Instruction#isJumpWithAddress()`
- `Instruction#readsHI()`
- `Instruction#readsLO()`
- `Instruction#modifiesHI()`
- `Instruction#modifiesLO()`
- `Instruction#getAccessType()`
- `InstrCategory#fromStr()`
- New enums:
2023-09-22 15:01:26 -03:00
- `OperandType`
2023-09-22 14:34:38 -03:00
- `AccessType`
2023-09-22 15:49:43 -03:00
### Deprecated
- Deprecated functions/methods:
- `Instruction#getImmediate()`: Use `Instruction#getProcessedImmediate()` instead
- `Instruction#getGenericBranchOffset()`: Use
`Instruction#getBranchOffsetGeneric()` instead
- `Instruction#mapInstrToType()`: Use `Instruction#getAccessType()` instead
- `Instruction#isUnknownType()`
- `Instruction#isJType()`: Use `Instruction#isJumpWithAddress()` instead
- `Instruction#isIType()`: Use
`Instruction#hasOperandAlias(OperandType.cpu_immediate)` instead
- `Instruction#isRType()`
- `Instruction#isRegimmType()`
### Fixed
- Fix missing operands on some trap instructions
- Fix buffer size calculation for disassembly
2023-09-22 14:34:38 -03:00
## [1.2.2] - 2022-10-09
1.2.2: `bal` and proper `\\` escape
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- Add `bal` support
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 15:01:26 -03:00
- Use special notation for branches which should produce matching instructions
even when no `immOverride` was passed
2023-09-22 15:49:43 -03:00
- Escape `\` -> `\\` on `RabbitizerUtils_escapeString`
2023-09-22 14:34:38 -03:00
- Add `extern "C"` in every header
## [1.2.1] - 2022-09-26
1.2.1: Static library building in the Makefile
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- Makefile now creates a `librabbitizer.a` file by default.
- Makefile can also build a `librabbitizer.so` with `make dynamic`
- New `include/rabbitizer.h` header which includes every other header
- Added a version header
## [1.2.0] - 2022-09-17
1.2.0: `%got` compatibility
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- New methods in `RegistersTracker` to support tracking `%got` accesses
2023-09-22 15:01:26 -03:00
- `processGpLoad`, which works similar to `processLui`
2023-09-22 14:34:38 -03:00
- `preprocessLoAndGetInfo`, which replaces the now deprecated `getLuiOffsetForLo`
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 15:01:26 -03:00
- Move operand types to the table format. Operands were also renamed to a more
concise name.
2023-09-22 15:49:43 -03:00
### Fixed
2023-09-22 14:34:38 -03:00
- Fix the wrong returned value on `Utils.From2Complement` when `bits` equals 32.
### Deprecated
- `RegistersTracker.getLuiOffsetForLo`. Use
`RegistersTracker.preprocessLoAndGetInfo` instead.
2023-09-22 14:34:38 -03:00
## [1.1.0] - 2022-08-27
1.1.0: RSP and R5900 support
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- Add proper instruction decoding for N64's RSP
- Add support for decoding the R5900 processor (PS2's Emotion Engine processor)
2023-09-22 15:49:43 -03:00
### Changed
2023-09-22 14:34:38 -03:00
- Cleanup internal instruction tables format
## [1.0.1] - 2022-07-12
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- New function `Utils.escapeString`: Escapes escape characters.
2023-09-22 15:49:43 -03:00
### Changed
- Allow taking `None` in `Abi.fromStr`: returns `o32` in that case.
2023-09-22 14:34:38 -03:00
- Many cleanups and formats
## [1.0.0] - 2022-07-07
2023-09-22 15:49:43 -03:00
### Added
2023-09-22 14:34:38 -03:00
- New classes:
2023-09-22 15:01:26 -03:00
- `RegistersTracker`: Intended to facilitate tracking the state of the general
purpose registers.
2023-09-22 14:34:38 -03:00
- New enums:
2023-09-22 15:01:26 -03:00
- `RegGprO32` and `RegGprN32`
2023-09-22 14:34:38 -03:00
- New configurations:
2023-09-22 15:01:26 -03:00
- `misc_omit0XOnSmallImm`: If `True` then the leading `0x` of immediates in
the [-9, 9] range is omitted. Defaults to `False`.
- `misc_upperCaseImm`: If `True` then immediates are outputted in uppercase.
Defaults to `True`.
2023-09-22 15:49:43 -03:00
- Many code cleanups
### Changed
2023-09-22 14:34:38 -03:00
- `Instruction` changes:
- Constructor can accept `vram` and `category` parameters.
- `isHiPair` renamed to `canBeHi`.
- `isLoPair` renamed to `canBeLo`.
2023-09-22 15:01:26 -03:00
- Added `doesLoad`, `doesStore`, `maybeIsMove`, `isPseudo` and
`architectureVersion` to `InstrDescriptor`.
- Python API: `Instruction#rs`, `Instruction#rt` and ``Instruction#rd` now
return an enum gpr type and will raise an exception if the instruction does
not reference the corresponding register.
2023-09-22 14:34:38 -03:00
- New methods: `getOpcodeName`, `getProcessedImmediate`, `hasDelaySlot` and `isValid`.
- Added `__reduce__` method to allow pickling the object.
## [0.1.0] - 2022-06-10
2023-09-22 15:49:43 -03:00
- First version
2023-09-22 14:34:38 -03:00
[unreleased]: https://github.com/Decompollaborate/rabbitizer/compare/master...develop
2024-07-12 11:45:48 -04:00
[1.11.1]: https://github.com/Decompollaborate/rabbitizer/compare/1.11.0...1.11.1
2024-05-22 12:49:08 -04:00
[1.11.0]: https://github.com/Decompollaborate/rabbitizer/compare/1.10.0...1.11.0
2024-04-22 13:21:03 -04:00
[1.10.0]: https://github.com/Decompollaborate/rabbitizer/compare/1.9.5...1.10.0
2024-04-03 13:12:41 -03:00
[1.9.5]: https://github.com/Decompollaborate/rabbitizer/compare/1.9.4...1.9.5
2024-03-18 16:39:16 -03:00
[1.9.4]: https://github.com/Decompollaborate/rabbitizer/compare/1.9.3...1.9.4
2024-03-17 11:18:13 -03:00
[1.9.3]: https://github.com/Decompollaborate/rabbitizer/compare/1.9.2...1.9.3
2024-03-10 11:06:53 -03:00
[1.9.2]: https://github.com/Decompollaborate/rabbitizer/compare/1.9.1...1.9.2
2024-02-18 16:50:30 -03:00
[1.9.1]: https://github.com/Decompollaborate/rabbitizer/compare/1.9.0...1.9.1
2024-02-18 13:13:05 -03:00
[1.9.0]: https://github.com/Decompollaborate/rabbitizer/compare/1.8.3...1.9.0
[1.8.3]: https://github.com/Decompollaborate/rabbitizer/compare/1.8.2...1.8.3
2024-01-28 12:24:33 -03:00
[1.8.2]: https://github.com/Decompollaborate/rabbitizer/compare/1.8.1...1.8.2
2023-12-25 15:07:58 -03:00
[1.8.1]: https://github.com/Decompollaborate/rabbitizer/compare/1.8.0...1.8.1
2023-11-12 12:28:01 -03:00
[1.8.0]: https://github.com/Decompollaborate/rabbitizer/compare/1.7.10...1.8.0
2023-09-24 10:41:42 -03:00
[1.7.10]: https://github.com/Decompollaborate/rabbitizer/compare/1.7.9...1.7.10
2023-09-22 14:34:38 -03:00
[1.7.9]: https://github.com/Decompollaborate/rabbitizer/compare/1.7.8...1.7.9
[1.7.8]: https://github.com/Decompollaborate/rabbitizer/compare/1.7.7...1.7.8
[1.7.7]: https://github.com/Decompollaborate/rabbitizer/compare/1.7.6...1.7.7
[1.7.6]: https://github.com/Decompollaborate/rabbitizer/compare/1.7.5...1.7.6
[1.7.5]: https://github.com/Decompollaborate/rabbitizer/compare/1.7.4...1.7.5
[1.7.4]: https://github.com/Decompollaborate/rabbitizer/compare/1.7.3...1.7.4
[1.7.3]: https://github.com/Decompollaborate/rabbitizer/compare/1.7.2...1.7.3
[1.7.2]: https://github.com/Decompollaborate/rabbitizer/compare/1.7.1...1.7.2
[1.7.1]: https://github.com/Decompollaborate/rabbitizer/compare/1.7.0...1.7.1
[1.7.0]: https://github.com/Decompollaborate/rabbitizer/compare/1.6.2...1.7.0
[1.6.2]: https://github.com/Decompollaborate/rabbitizer/compare/1.6.1...1.6.2
[1.6.1]: https://github.com/Decompollaborate/rabbitizer/compare/1.6.0...1.6.1
[1.6.0]: https://github.com/Decompollaborate/rabbitizer/compare/1.5.11...1.6.0
[1.5.11]: https://github.com/Decompollaborate/rabbitizer/compare/1.5.10...1.5.11
[1.5.10]: https://github.com/Decompollaborate/rabbitizer/compare/1.5.9...1.5.10
[1.5.9]: https://github.com/Decompollaborate/rabbitizer/compare/1.5.8...1.5.9
[1.5.8]: https://github.com/Decompollaborate/rabbitizer/compare/1.5.7...1.5.8
[1.5.7]: https://github.com/Decompollaborate/rabbitizer/compare/1.5.6...1.5.7
[1.5.6]: https://github.com/Decompollaborate/rabbitizer/compare/1.5.5...1.5.6
[1.5.5]: https://github.com/Decompollaborate/rabbitizer/compare/1.5.4...1.5.5
[1.5.4]: https://github.com/Decompollaborate/rabbitizer/compare/1.5.3...1.5.4
[1.5.3]: https://github.com/Decompollaborate/rabbitizer/compare/1.5.2...1.5.3
[1.5.2]: https://github.com/Decompollaborate/rabbitizer/compare/1.5.1...1.5.2
[1.5.1]: https://github.com/Decompollaborate/rabbitizer/compare/1.5.0...1.5.1
[1.5.0]: https://github.com/Decompollaborate/rabbitizer/compare/1.4.0...1.5.0
[1.4.0]: https://github.com/Decompollaborate/rabbitizer/compare/1.3.3...1.4.0
[1.3.3]: https://github.com/Decompollaborate/rabbitizer/compare/1.3.2...1.3.3
[1.3.2]: https://github.com/Decompollaborate/rabbitizer/compare/1.3.1...1.3.2
[1.3.1]: https://github.com/Decompollaborate/rabbitizer/compare/1.3.0...1.3.1
[1.3.0]: https://github.com/Decompollaborate/rabbitizer/compare/1.2.2...1.3.0
[1.2.2]: https://github.com/Decompollaborate/rabbitizer/compare/1.2.1...1.2.2
[1.2.1]: https://github.com/Decompollaborate/rabbitizer/compare/1.2.0...1.2.1
[1.2.0]: https://github.com/Decompollaborate/rabbitizer/compare/1.1.0...1.2.0
[1.1.0]: https://github.com/Decompollaborate/rabbitizer/compare/1.0.1...1.1.0
[1.0.1]: https://github.com/Decompollaborate/rabbitizer/compare/1.0.0...1.0.1
[1.0.0]: https://github.com/Decompollaborate/rabbitizer/compare/0.1.0...1.0.0
[0.1.0]: https://github.com/Decompollaborate/rabbitizer/releases/tag/0.1.0