* set up types
* cleaned up type analysis and got things working through atomic ops
* expression working, need types
* improved types and names
* getting close
* finish up dma-disasm
* fix
* Allow enum names to serve as types (using the enum's type)
* Formatting
* add doc to `get_enum_type_name`
* Ban enum forward-declaring, and remove unneeded checks
* prepare for decompiling display
Needs some work on the decompiler (mostly bitfield stuff) before a more proper decomp can be done
* make `(profile-bar draw)`, `set-display-gs-state-offset` and `set-display-env` decompile
decompiler should now support unsigned divide
* fill in some dma-h types
* Fill in a few VIF bitfields + other minor fixes
* Update all-types.gc
* Fix stupid mistake in `vif-mask`
* update dma-h reference
* this uint32 is actually a `vif-tag` (oops)
* get gkernel and gkernel-h at least somewhat working in the offline tests
* strip comments from json
* switch hints to casts. online tests passing, offline passing up to gkernel
* variable retyping is added
* fix up casts in lets
* update
* temp: commit what i have so far
decomp: Fix nonempty_intersection impl for MSVC Debugging use-case
docs: Add info on getting ASan builds running on Visual Studio w/o exceptions
* decomp: initial rlet implementation
* decomp: cleanup pass of vector-rewrite stage
* decomp: Commit in-progress vector.gc, shortcomings are TODO commented
* decomp: More cleanup, rename from being `vector` instr specific
Fundamentally, this process can be used for re-writing ANY inline-asm instruction
* decomp: Support 4th arg ACC instructions
* decomp: Final pass of vector.gc before implementing last instructions
* decomp: Better warnings when hitting unimplemented instructs
* compiler: Implement inverse-sqrt and mov.vf
* decomp: Final manual pass over vector.gc, documented gaps
* decomp: Finish decompiling what currently is possible in vector.gc
* decomp: Fix Variable -> RegisterAccess conflict
* decomp: codacy lint
* Address review feedback
* Address feedback part 2
* Resolve build failures
* use new fake-asm macro
* [timer] update some docs and code for clarity
* Fix typos
* uncomment "sync" instructions
* some decimal to hex
* move fake-asm's to gcommon
* [timer] document timer-mode more.
* Fix errors
* i dont like this
* ObjectFileDB: Fix crash if obj list text has no objects
* rename "decomp.bat" to "decomp-jak1.bat"
* config: enable expression analysis
* decompile timer-h
* Tab to space.
* add a note to deftype profile-name for the future
* timer-mode: use register name instead of full name
looking at the other types, it looks like NDI seemed to have preferred it this way
* [timer-h] set -> timer-bank mode type to timer-mode
* [timer-h] use register-friendly return value for method
* [timer-h] comment out unsupported feature
* [main-h] remove redundant quote
* Update .gitignore
* Update main-h.gc
* specify a label_types_file variable in jak1 config
* fix parent issue
* fix compiler issue
* update
* add error messages
* fix error
* fix array access, temporary
* more clean
* fix
* rename arg variables better
* fix method name
* fix no return value in decompiler
* many small fixes
* cheat types so it works
* name map
* fix old test'
* [timer decomp] preliminary decomp
* [goal-lib] add inplace macros for logior, logxor, lognor and logand
* [timer decomp] Finish decomp for now
* [timer decomp] OCD whitespace
* [all-types] fix type consistency
Sorry mr. decompiler but you will have to take the hit
* [timer decomp] Fix more type consistency
* [timer decomp] ACTUALLY fix it + script so I don't forget
* [timer] automatically choose gpr for rlet's
* ObjectFileDB: Fix crash if obj list text has no objects
* rename "decomp.bat" to "decomp-jak1.bat"
* config: enable expression analysis
* decompile timer-h
* Tab to space.
* add a note to deftype profile-name for the future
* timer-mode: use register name instead of full name
looking at the other types, it looks like NDI seemed to have preferred it this way
* [timer-h] set -> timer-bank mode type to timer-mode
* [timer-h] use register-friendly return value for method
* [timer-h] comment out unsupported feature
* add rough jak 2 config so the decompiler can atleast unpack dgos
* third-party: commit lzokay
* Switch to lzokay for DGO decompression
* third-party: Remove minilzo library
* third-party: Add lzokay as a SHARED lib
* new method of inline-array-class
* up to new array
* wip side effect stuff
* prepare for pop barrier stuff
* add pop barrier
* add local vars hack to compiler
* fix bug, make sort work
* add test for array
* bug fixes
* another bug fix
* refactoring env variable print for casts
* more tweaks
* updates
* final cleanup
* codacy fixes
* up to ash
* add more expressions
* fix some return variable usage nonsense
* bfloat print working
* basic-type working
* type working, fix decompiler on all files
* clang format
* Add a Release build configuration.
* Batch file alternatives for decomp/gc/gk
For the shell-less, or people with a different Windows configuration.
* all-types.gc: Fix typo.
* gcommon.gc: Typo.
* debugger: use enum class for InstructionInfo::Kind
* decompilerIR: use enum class for IR_Store::Kind
* Update all-types.gc
* decompiler: tab to spaces
* root batch files: update directories
* Use a gitignore inside "log" folder to fix windows crashes
* Revert "Update all-types.gc"
This reverts commit 5ef179bb4e.
* wip decompiler ir
* add AtomicOp stuff
* fix windows build and warnings
* add instruction parser
* include
* make minilzo shared
* odr fix
* a
* fix merge conflicts
* move decompiler into namespace
* update the code coverage to include the decompiler
* add demo test
* add register use test to example test
* begin work on vf support
* split reg kind into reg hw kind and class, use class for ireg
* try test
* clang format
* add some more ops and some example functions
* better lvf on statics
* add documentation
* begin framework for expressions
* more
* clean up warnings
* small fixes
* update
* wip type prop improvements
* see if nasm works
* fix format strings
* work in progress streaming rpc, simple test is working
* actually add the test
* debug windows failure
* windows fix maybe
* windows 2
* use str-load-status
* update types
* begin support for v2
* export game text
* generate text files
* working text load
* fix windows
* add test and clean up game tests a bit
* load the right file
* add separate program to launch the data compiler
* add offline test script
- Recognize new type definitions/parents/type flags in the decompiler
- Analyze autogenerated inspect methods and dump guesses at fields to a file
- Utility functions for accessing static data by label
- Better ordering in the decompiler to go through functions in the order they appeared in the source
- Added a decent number of types to `all-types.gc` based on the new field analyzer
- Correct a few `int`/`integer` mistakes in `gcommon.gc` (this should really be a warning)
- Correct a few type issues in `gcommon` and `gkernel-h`
- Option in the decompiler to be strict about `define-extern` redefining a type of a symbol
- Add a test to check consistency in types between `all-types.gc` (used by decompiler) and `goal_src` (used by the compiler)
* implement basic framework for decompiler type analysis
* before type system changes
* add some decompiler stuff to the type system
* try algorithm on a few functions
* Begin spdlog integration for decompiler
* Replace old prints with spdlog equivalents
* clang-format
* Fixes
* Log output to /logs/decompiler.log.
The console now prints that the disassembly has begun and it may take a few minutes to complete. This will reduce the amount of verbose logging output directly to a console stream.
* Update .gitignore
Ignore decompiler output for now
* Resolve more issues
Fixed percentage printing and various other issues
* Fixed stuff I broke (sorry)
* Fix more broke stuff
* w/early-return-and-break
* more edge cases
* all instructions in non asm functions now convert to ir
* cleanup
* implement rarely used control flow in IR
* clang format
* add some more cfg ir stuff
* add cond with else
* add type of recognition
* add cond to compare conversion
* finally all conds are passing
* started sc recognize, but ash min and max should be recognized first
* fix ash showing up as sc
* add abs
* fix merge issues
* try building goos with optimizations on
* sc mostly working, still need to fix right aligned nesting
* ands and ors are converting correctly now
* clean up
* add pretty printing to goos form
* temp
* fix format
* fix format
* fix windows build
* again
* windows
* Revert "windows"
This reverts commit b7d448e733.
* windows again
* give up and just add a getter function
* framework for basic op
* started IR framework
* check in type info file
* add some basic operations to the first pass ir conversion
* use a single condition system
* add more basic op decoding
* more ir
Mostly revolved around the new MSVC check for functions that don't cover all paths (ie. a switch statement without a default case). It appears to not see an assert as a valid default case.
I switched assert(false) to exceptions in these cases. I believe this should also abort the program, but will also provide a hopefully useful message? Hopefully this is an improvement.
Resolves#32
* move things to the common library and remove next_dir
* fix for windows
* one last windows fix
* last fix for real this time
* debug listener test
* fix listener threading bug