diff --git a/.markdownlint.jsonc b/.markdownlint.jsonc new file mode 100644 index 0000000..ef8db42 --- /dev/null +++ b/.markdownlint.jsonc @@ -0,0 +1,14 @@ +{ + // https://github.com/DavidAnson/markdownlint/blob/main/doc/md024.md + // MD024 - Multiple headings with the same content + "MD024": { + "siblings_only": true + }, + + // https://github.com/DavidAnson/markdownlint/blob/main/doc/md013.md + // MD013 - Line length + "MD013": { + "code_block_line_length": 120, + "headings": false + } +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 29598a9..c08ebcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# 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). + ## [Unreleased] ## [1.7.9] - 2023-09-18 @@ -5,17 +12,18 @@ ### Uncategorized - Don't attempt disassembling R5900's `vclipw` / `vsqrt` in gnu mode (#44) - - Thanks @ethteck + - Thanks @ethteck ## [1.7.8] - 2023-09-13 ### Uncategorized - Consider `syscall` as an instruction that isn't emitted by compilers -- Fix size calculation required for the buffer of the disassembled instruction for a few edge cases +- Fix size calculation required for the buffer of the disassembled instruction + for a few edge cases - Properly implement r5900's `vcallms` operands - Add `$` to special PS2 regs (#41) - - Thanks @ethteck + - Thanks @ethteck - The `treatJAsUnconditionalBranch` option is no longer deprecated ## [1.7.7] - 2023-08-27 @@ -35,8 +43,11 @@ ### Uncategorized -- 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. -- Catch more errors and raise Python exceptions on them in the instruction disassembly binding +- 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. +- Catch more errors and raise Python exceptions on them in the instruction + disassembly binding ## [1.7.4] - 2023-06-13 @@ -45,7 +56,9 @@ - Fix R5900 vf registers not using the `$vf` prefix in numeric register mode. Misc: -- Provide macros to allow using gte instructions in both assembly and C. Those are provided under the `docs` folder of the repository + +- Provide macros to allow using gte instructions in both assembly and C. Those + are provided under the `docs` folder of the repository ## [1.7.3] - 2023-06-10 @@ -74,9 +87,10 @@ General cleanups in the codebase. Not actual features or fixes were made ### Uncategorized - Support for R3000 GTE instructions (a.k.a. the PS1 specific instructions) - - PR #31 + - PR #31 Meta: + - Add CI for checking the repo is always formatted - Add CI for checking the tables have been regenerated - Only run the CI that builds the python bindings for every machine on new releases. @@ -87,30 +101,37 @@ Meta: ### Uncategorized -- Fix `getInstrIndexAsVram` taking the upper 8 bits instead of 4 bits for the vram calculation +- Fix `getInstrIndexAsVram` taking the upper 8 bits instead of 4 bits for the + vram calculation ## [1.6.1] - 2023-04-18 ### Uncategorized -- Fix `Instruction`'s `vram` parameter not initialized if it was not passed to the constructor on the Python binding. +- Fix `Instruction`'s `vram` parameter not initialized if it was not passed to + the constructor on the Python binding. - Expose `fs`, `ft` and `fd` registers to Python bindings. -- Add enums for `RegCop1O32`, `RegCop1N32` and `RegCop1N64` registers for Python bindings +- Add enums for `RegCop1O32`, `RegCop1N32` and `RegCop1N64` registers for + Python bindings ## [1.6.0] - 2023-04-17 ### Uncategorized - Adds `gnuMode` to the configuration. - - Toggles various tweaks to allow building and matching with GNU `as`, which original compiler will not like. + - 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 -- Removed special treatment for R5900's `trunc.w.s`. + - Turning this mode off makes the `div $0,` pseudo instruction to not be used +- Removed special treatment for R5900's `trunc.w.s`. - `cvt.w.s` and `trunc.w.s` will be decoded as-is when `gnuMode` is turned off. - - 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 + - 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 Repo-meta changes + - All autogenerated files are added the `linguist-generated` attribute. ## [1.5.11] - 2023-04-02 @@ -143,7 +164,6 @@ Repo-meta changes - New `modifiesF*` and `readsF*`properties in the InstructionDescriptor - Column limit for C files has been changed to 120 - ## [1.5.7] - 2022-12-20 ### Uncategorized @@ -156,7 +176,8 @@ Repo-meta changes - Introduce `RegisterDescriptor` - Fix some typos in Rust bindings -- `jalr_rd` has been removed. Its old conditional behavior is now handled with the new `cpu_maybe_rd_rs` operand +- `jalr_rd` has been removed. Its old conditional behavior is now handled with + the new `cpu_maybe_rd_rs` operand - `outputsToGprZero` method ## [1.5.5] - 2022-12-19 @@ -198,19 +219,24 @@ Attempt to fix Rust crate publishing ### Uncategorized - 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 +- 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 ### Uncategorized -- 3 non-existent RSP instructions where removed (`rsp_cache`, `rsp_lwc1` and `rsp_swc1`) -- New methods to know if an instruction reads the value of a GPR: `.readsRs`, `.readsRd` and `.readsRt` +- 3 non-existent RSP instructions where removed (`rsp_cache`, `rsp_lwc1` and + `rsp_swc1`) +- New methods to know if an instruction reads the value of a GPR: `.readsRs`, + `.readsRd` and `.readsRt` - Many descriptor information where corrected - Deprecate `isJrRa()`, prefer new `isReturn()` method - Deprecate `isJrNotRa()`, prefer new `isJumptableJump()` method Meta: + - Remove `setup.cfg` and move all the info to `pyproject.toml` - Descriptor logic errors are now checked in CI @@ -225,7 +251,7 @@ Meta: ### Uncategorized -- Fixed RSP using CPU cop0 .inc file instead of RSP cop0 and cop2 files #13 +- Fixed RSP using CPU cop0 .inc file instead of RSP cop0 and cop2 files #13 - Thanks to @Mr-Wiseguy - Check for `_INVALID` unique ids in `isValid` @@ -244,15 +270,19 @@ Removes signedness from `AccessType` - Fix buffer size calculation for disassembly - Deprecated functions/methods: - `Instruction#getImmediate()`: Use `Instruction#getProcessedImmediate()` instead - - `Instruction#getGenericBranchOffset()`: Use `Instruction#getBranchOffsetGeneric()` 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#isIType()`: Use + `Instruction#hasOperandAlias(OperandType.cpu_immediate)` instead - `Instruction#isRType()` - `Instruction#isRegimmType()` - New functions/methods: - - `Instruction#getBranchOffsetGeneric()`: Like `Instruction#getGenericBranchOffset()`, but does not require the `currentVram` parameter + - `Instruction#getBranchOffsetGeneric()`: Like + `Instruction#getGenericBranchOffset()`, but does not require the + `currentVram` parameter - `Instruction#getBranchVramGeneric()` - `Instruction#getDestinationGpr()` - `Instruction#hasOperandAlias()` @@ -264,7 +294,7 @@ Removes signedness from `AccessType` - `Instruction#getAccessType()` - `InstrCategory#fromStr()` - New enums: - - `OperandType` + - `OperandType` - `AccessType` ## [1.2.2] - 2022-10-09 @@ -274,7 +304,8 @@ Removes signedness from `AccessType` ### Uncategorized - Add `bal` support -- Use special notation for branches which should produce matching instructions even when no `immOverride` was passed +- Use special notation for branches which should produce matching instructions + even when no `immOverride` was passed - Escape `\` -> `\\` - Add `extern "C"` in every header @@ -296,9 +327,10 @@ Removes signedness from `AccessType` ### Uncategorized - New methods in `RegistersTracker` to support tracking `%got` accesses - - `processGpLoad`, which works similar to `processLui` + - `processGpLoad`, which works similar to `processLui` - `preprocessLoAndGetInfo`, which replaces the now deprecated `getLuiOffsetForLo` -- Move operand types to the table format. Operands were also renamed to a more concise name. +- Move operand types to the table format. Operands were also renamed to a more + concise name. - Fix the wrong returned value on `Utils.From2Complement` when `bits` equals 32. ## [1.1.0] - 2022-08-27 @@ -324,18 +356,24 @@ Removes signedness from `AccessType` ### Uncategorized - New classes: - - `RegistersTracker`: Intended to facilitate tracking the state of the general purpose registers. + - `RegistersTracker`: Intended to facilitate tracking the state of the general + purpose registers. - New enums: - - `RegGprO32` and ``RegGprN32`` + - `RegGprO32` and `RegGprN32` - New configurations: - - `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`. + - `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`. - `Instruction` changes: - Constructor can accept `vram` and `category` parameters. - `isHiPair` renamed to `canBeHi`. - `isLoPair` renamed to `canBeLo`. - - 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. + - 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. - New methods: `getOpcodeName`, `getProcessedImmediate`, `hasDelaySlot` and `isValid`. - Added `__reduce__` method to allow pickling the object. - Many code cleanups @@ -344,8 +382,6 @@ Removes signedness from `AccessType` ### Uncategorized - - [unreleased]: https://github.com/Decompollaborate/rabbitizer/compare/master...develop [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