Commit graph

193 commits

Author SHA1 Message Date
Tyler Wilding ef81529855
decomp: almost finish rigid-body stuck on symbol param from an event! 2021-08-07 17:31:29 -04:00
water111 12446037bd
[decompiler] Make addition nicer (#733)
* temp

* update refs

* update reference

* fix tests
2021-08-01 18:24:58 -04:00
Tyler Wilding 75f7609baa
decomp: ocean-transition (#616)
* some work on `ocean-transition`

* decomp: finished non-blocked `ocean-transition` functions

* decompiler: Support <0 unsigned comparison

* decompiler/goalc: Support half-word and byte parallel extend ops

* attempt to add support for byte stack spills, assertion errors

`Assertion failed: idx < n_src, file ..\..\..\decompiler\Disasm\Instruction.cpp, line 353`

* decomp: fix byte stack spills, only 1 issue remains in `draw-ocean-transition`

* almost there...

* closer, but unknowns about `dma-buffer` blocking

* dealing with dma-buffer issues

* some more fixes, only an obscure xmm issue remains

* add two problematic functions to blacklists, avoid goal_src additions for now

* fix building/compilation but TypeConsistency hits an assertion error

the `ocean-mid-masks`'s `data` field is none of the types

* decomp: finalize `ocean-transition`

* address feedback - 1 issue remains

* decomp: finalize `ocean-transition`
2021-08-01 17:42:40 -04:00
ManDude 26c3fb65e9
make some macros for DMA stuff (#725)
* [compiler] allow infinite args for `logior`

* make some dma macros and use them on `display`

* [goos] add `string->symbol`

* make a sketchy macro

* fix tests

* `with-dma-bucket` and `dma-buffer-add-vector4w-2`

* cleanup `debug`

* cleanup `menu`

* go thru `texture` pt 1

* finish `texture`

* `sprite` pt 1

* `sprite` pt 2

* `generic`

* `gs` and `main`
2021-08-01 17:11:32 -04:00
Tyler Wilding d317497c64
decomp: main-collide and support a bunch of new inline-asm operations (#673)
* decomp/goal-lib: Implement all fixed point macros

* decompiler/goalc: Support half-word and byte parallel extend ops

* decompiler/goalc: Support all parallel compare instructions

* decompiler/goalc: Wire up PPACH and parallel bitwise operations

* goalc: Add emitter tests

* decomp: finalize `main-collide`

* codacy lint
2021-07-27 19:57:14 -04:00
water111 eee8390ec0
support inline arrays on stack (#726) 2021-07-26 21:39:05 -04:00
water111 bd9f550d82
add ref test for sprite and support nested bitfields in static data (#723) 2021-07-26 20:02:16 -04:00
water111 92a5d84a5b
fix sc when the block after the delay slot is optimized out (#721) 2021-07-25 16:42:37 -04:00
water111 2b6684aa5c
[decompiler] Working toward bsp (#717)
* clean up

* before int to float stuff

* before trying to eliminate the separate read and write maps

* partial fix for register issues

* add missing include
2021-07-25 15:30:37 -04:00
water111 95366d21df
Get started on collide-func and clean up log forms in decompiler (#713)
* wip

* temp

* temp2

* first part of log macros

* more log macros

* logtest

* clean up

* dont initialize game info because we are missing stuff
2021-07-23 20:51:26 -04:00
water111 c76b51d805
clean up to gsound! (#709) 2021-07-19 20:49:33 -04:00
water111 b70fcb2f7a
support non-virtual gos in decompiler (#707) 2021-07-17 18:07:21 -04:00
water111 4989470828
recognize +! and set-vector (#706)
"
2021-07-17 15:00:10 -04:00
water111 2754a8f2c4
get res decompiling (#705) 2021-07-17 13:41:05 -04:00
water111 f6d5952498
[decompiler] handle nested conditionals and gotos better (#693)
* diff check

* try that again

* more small fixes
2021-07-11 21:59:27 -04:00
water111 0a9cc68a27
[decompiler] Use meters, degrees, and seconds (#689)
* use meters degrees and seconds

* update changelog
2021-07-11 18:19:41 -04:00
water111 656489e942
[decomp] Clean up - part 2 (#687)
* temp

* temp2

* basic case support

* working for or without else

* support more cases

* clean up to drawable headers

* ocean

* format json
2021-07-11 16:35:25 -04:00
water111 1898c7c52a
[decomp] texture (#684)
* temp

* more cleanup

* fix merge issue

* handle no texture correctly
2021-07-09 22:20:37 -04:00
water111 551a9c4955
[decompiler] ASM Branching Support (#677)
* basic example working in geometry

* before updating offline'

* clean up

* temp

* progress
2021-07-05 16:07:07 -04:00
water111 e251f8b2d9
Support Behaviors (#678)
* temp

* working, but type pass got really slow

* clean up

* changelog and flip order

* clean up and add tests

* fix zero size array

* handle lambdas correctly

* another windows fix
2021-07-04 16:54:07 -04:00
water111 784cd5debb
[decomp] get started on game info (#674)
* temp

* menu text

* wip

* recognize handle to process

* more
2021-07-03 16:18:41 -04:00
water111 4bea175140
[decompiler/compiler] Fixes for task-control (#668)
* fix decompiler for task control

* support in compiler

* changelog

* typo
2021-07-01 21:38:19 -04:00
water111 322a4ed9b2
Fix compiler crashes and improve return statements. (#652)
* fix a few small bugs

* fi

* fix merge conflict
2021-06-30 00:11:46 -04:00
water111 a6d5c4eda3
[decompiler] clean up vector detection and add vector float product detection (#638)
* change

* recognize vector float product and update tests
2021-06-27 17:24:35 -04:00
water111 bfb1fbe1fc
[decompiler] recognize more inlined vector functions (#637)
* detect vector+

* recognize reset
2021-06-27 12:11:30 -04:00
water111 b19a2c82f0
[decomp] detect vector-! inlined. (#633)
* fix flipped order

* format

* parser hack

* actually flip

* detect
2021-06-26 22:52:52 -04:00
water111 10b00e57ae
[decomp] Fix flipped byte addressing add and support some VU ops in the parser (#631)
* fix flipped order

* format

* parser hack

* actually flip
2021-06-26 20:02:21 -04:00
water111 69e24ae577
recognize vector, matrix, quaternion constructors in a better way (#630)
* recognize vector, matrix, quaternion constructors in a better way

* fix bad bug
2021-06-26 18:30:35 -04:00
water111 ae2666a7c5
fix use def issues (#629) 2021-06-26 16:31:38 -04:00
water111 490633d434
add countdown (#627) 2021-06-25 20:51:25 -04:00
water111 409be41596
[decompiler] fix bad cast and crash on bad and/or recognition (#626)
* fix small bugs

* fix missing inlining of derefs
2021-06-25 20:13:22 -04:00
water111 9e6dec9829
[decomp] make bg decompile (#624)
* make bg decopmile

* fix parent method call
2021-06-24 20:06:12 -04:00
water111 83c5852465
allow terrible method hack to decompiler (#623) 2021-06-23 22:42:02 -04:00
water111 44f8ff6d25
[decompiler] bug fixes related to infinite loop CFGs, argument registers (#622)
* temp

* clean up

* more clean
2021-06-23 22:09:02 -04:00
Tyler Wilding 87961bdb3b
decomp: generic (#611)
* decomp: Fix casting issue with uint64's from static data

* decomp: `generic`

* add forward declaration

Co-authored-by: water111 <48171810+water111@users.noreply.github.com>
2021-06-20 16:02:15 -04:00
ManDude 46b83bda2a
[decomp] debug (#607)
* [decomp] `debug`

* shut up
2021-06-19 14:24:55 -04:00
water111 bc87c4426f
[decompiler] Fix deref bug and add some more new type pass stuff (#606)
* add copy on write and clean up some register stuff

* fix bug in multiple field lookup

* format
2021-06-18 21:10:00 -04:00
water111 af49ac60cd
fix shl by 16 constant being mistaken for a dynamic bitfield construction (#600) 2021-06-16 22:15:22 -04:00
water111 d26de26d21
[decompiler] Small bitfield fixes (#599)
* fix a bunch of small bitfield related things

* fix up test

* format
2021-06-16 21:11:21 -04:00
water111 0aa474f12b
[decomp] finish actor-link-h and a few more (#592)
* finish actor-link-h

* decompile files

* fix pp issue
2021-06-14 20:46:54 -04:00
water111 13b5695b63
[decompiler] Workaround for GOAL fpr -> gpr spill bug and fix >16-bit signed FP loads (#587)
* fix up broken stuff for collectables

* exception for stack spill float in gpr bug
2021-06-13 13:55:55 -04:00
water111 8faded6400
[decompiler] bitfield support for sound-name (#582)
* fix 64-bit fields in 128-bit bitfields

* support sound-name

* fix merge

* support some more sound stuff in overlord
2021-06-12 12:55:38 -04:00
water111 92afd62e2c
[decompiler] fix missing casts issue (#573)
* fix casts issue

* fix bug

* one last small fix
2021-06-09 21:35:13 -04:00
water111 12d72c7897
detect small integer not equal (#572) 2021-06-08 23:39:01 -04:00
water111 5b24e43143
Change syntax for boxed array to support different length and allocated-length (#568)
* change syntax for boxed array

* fix test and make the flava thing kind of work
2021-06-07 20:22:06 -04:00
water111 f516737cf7
[decompile] bsp-h (#562)
* decompile bsp-h

* a few more

* some more

* fix merge conflicts
2021-06-07 18:30:16 -04:00
water111 fef7fad65a
[decompiler] process-drawable-h (#561)
* decomile process-drawable-h

* one more
2021-06-05 23:55:36 -04:00
water111 54f72e9b10
[decomp] joint-mod-h (#560)
* decompile joint-mod-h

* format'

* missing include

* fix test
2021-06-05 20:22:03 -04:00
water111 a572587a0e
add types (#559) 2021-06-05 16:58:32 -04:00
water111 2851cae13b
[decompile] fact-h (#556)
* decompile fact-h

* fix unused var

* codacy again
2021-06-05 11:15:34 -04:00
water111 542edfb164
[compiler/decompiler] Take the address of a variable (#554)
* support taking the address of variables

* partially working stack variables

* implement type cast stuff

* remove final
2021-06-04 13:43:19 -04:00
ManDude 784119188c
[decomp] even more res (#529)
* [decomp] even more `res`

* [decompiler] make `logand` with pointers and constants return pointer

* [decomp] more work

* update offline tests

* fix tests(?)

* `*res-static-buf*`

* fixes

* fix reference

* [opengoal] make `logand` work directly with pointers

* [decomp] `inspect res-lump`

* use the inline methods

* don't use a math mode for pointers

* [compiler] allow optionally setting disassembly output file

* [x86 disasm] Keep casing consistent between instructions and offsets
2021-06-01 16:07:45 -04:00
water111 3d8013633a
[decompiler] Fix rlet in top level and detect matrix and stack inline construction (#547)
* top level in rlet

* detect matrix and vector inline 0

* pretty print the symbol map
2021-05-31 18:14:18 -04:00
water111 c4f44e265f
[decompiler] Better support for non-virtual methods (#543)
* fix up nonvirtual method calls and stack new method calls

* look at final in compiler too
2021-05-30 22:52:40 -04:00
water111 b1a76b2291
[decomp] Small fixes (#541)
* fix a few bugs

* fix local vars missing in top level

* more small fixes

* support missing inline array access case

* one more fix
2021-05-30 19:57:11 -04:00
water111 d719bf5677
[decompiler] support break (#516)
* support break

* finish implementation of break, decomp method 19 of res
2021-05-23 20:16:34 -04:00
water111 3fbdd662dc
[decompiler] Support accessing 128-bit bitfields (#514)
* support some 128-bit bitfield stuff

* fix bug

* support type stuff correctly
2021-05-21 20:36:04 -04:00
Tyler Wilding b75a64fc29
(init-vf0-vector) to make vector code a bit more readable (#494)
* decomp: Use a macro for loading VF0 (maybe should be in goal-lib.gc?)

* update references

* lint: format

* delete now unused file
2021-05-16 13:49:24 -04:00
water111 79d10979da
[decomp] math-camera (#491)
* decompile math camera

* missing line
2021-05-15 20:08:08 -04:00
water111 d73501cf19
[decompiler] Get rid of FormStack peek and fix virtual method calls (#488)
* fix, but it was too easy

* try again
2021-05-15 13:11:20 -04:00
water111 613efbd768
[decomp] transformq-h, clean up trig, and offline test for trig (#485)
* clean up

* fix store vf fallback errors
2021-05-15 10:38:14 -04:00
water111 c95e501cec
handle zero case in enum comparison (#484) 2021-05-14 20:12:59 -04:00
water111 d9f9d36f37
[OpenGOAL] make multiplication/divsion like GOAL and support in decompiler (#483)
* support in compiler

* multiplication in the decompiler

* update divisions
2021-05-14 18:43:12 -04:00
water111 b3eb05e37f
[decompiler] fix (gpr->fpr when an integer arg is converted to float (#482)
* fix gpr fpr bug

* remove unused variable
2021-05-14 14:33:08 -04:00
water111 129ab54fd4
[decompiler] clean up if/when/cond and recognize define-perm (#472)
* clean up if and when and cond decisions

* recognize define perm
2021-05-12 19:46:17 -04:00
water111 223adeeb0c
Automatically get float label type in most cases (#463)
* automatically get float type in most cases

* try harder to print json errors

* fix test
2021-05-11 21:57:05 -04:00
water111 433993074a
Clean up some errors/crashes in decompiler (#452)
* fix offline tests, clean up some warnings

* clean up warnings during decomp

* fix remaining crash issues
2021-05-11 16:43:13 -04:00
ManDude fef9b139d7
Force-enable assert on release mode Windows build (#440) 2021-05-10 23:03:56 -04:00
Tyler Wilding 233d887790
decomp: Avoid ' in error output (#421) 2021-05-06 18:47:32 -04:00
water111 21fefa0aaa
[decompiler] small fixes for methods and more reference tests (#419)
* clean up method stuff, fix a few small bugs, and add references for easy -h files

* more small fixes and reference tests
2021-05-06 00:42:49 -04:00
water111 0a6602e320
[Decompile] connect, text-h, settings-h, capture, memory-usage-h (#410)
* decompile stuff

* temp

* temp2

* fix

* temp

* preparing for merge

* working

* fix stupid format

* fix codacy
2021-05-05 17:38:16 -04:00
water111 7018827a50
decompile display (#408) 2021-05-01 15:51:53 -04:00
water111 70d93354eb
[Decompile] file-io, loader-h, texture-h, level-h, math-camera-h (#397)
* file-io and loader-h

* add test for level-h

* math camera-h
2021-04-28 20:51:17 -04:00
water111 14028b90bc
[Decompile] vector.gc (finally) (#394)
* support psubw

* do half of vector

* rest of vector

* add test

* format
2021-04-28 17:14:54 -04:00
water111 3d2ca71fe3
[Decompile] pad and gs (#389)
* update stuff

* gs reference added

* update config
2021-04-26 21:40:08 -04:00
water111 2002db359a
[Decompiler] WIP: Stack Spills (#382)
* 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
2021-04-25 14:48:54 -04:00
water111 fa122356ec
[Decompiler] Fixes for dma-disasm (#377)
* small tweaks

* fix up some more dma stuff
2021-04-23 20:29:15 -04:00
water111 060b125324
[Compiler/Decompiler] Better support for Bitfield and Enum types (#374)
* compiler fixes, a decent amount of decompiler stuff is working too

* more support in decompiler, fix some casts

* decompile static data too
2021-04-22 19:08:58 -04:00
water111 c09e18f3a7
Fix stack new and add size-of to compiler (#370)
* make decompiler output stack-no-clear

* add size-of
2021-04-18 19:51:15 -04:00
water111 7737817ac7
[Decomp] Fix bitfields in dma-bucket (#367)
* fix bitfields in dma-bucket

* fix dma-bucket
2021-04-18 12:08:08 -04:00
water111 9867155e7c
[Decompiler] More support for bitfields (#363)
* temp

* initial support for dynamic bitfields

* some more progress on display

* dma-buffer good

* small fixes
2021-04-17 18:35:50 -04:00
ManDude 9fbbe1a79c
prepare for decompiling display (#359)
* 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)
2021-04-16 18:36:19 -04:00
water111 e5f0fecf17
[Decompiler] bitfield support and clean up of DMA (#350)
* get to vif

* support basic bitfield access

* make bitfields in dma work

* clean up dma

* fix merge conflict
2021-04-11 16:07:01 -04:00
water111 9969445cf7
[Decomp] Math library: transform and quaternion (#344)
* decompile transform

* types for quaternion

* part of quaternion

* finish quaternion

* fix offline test reference

* wip fix to let issue

* fix
2021-04-02 11:35:14 -04:00
water111 0a76e6e157
[Decompiler] Make matrix decompile (#341)
* small fixes

* update

* add instructions

* finish matrix

* add matrix test cases
2021-03-28 20:26:30 -04:00
water111 64c35ca453
[Decompiler] Stack Variables (#338)
* clean up type analysis

* get everything set up

* basic stack variables working

* partial load fix

* most of matrix

* add offline tests
2021-03-27 15:18:59 -04:00
water111 7fac11ddf5
Support 128-bit variables (#336)
* wip 128 bit support

* add a few more files to offline test
2021-03-25 16:02:48 -04:00
water111 99683c0dac
[decompiler] Add tests and fixes for vector-h and math (#333)
* before messing with ssa stuff

* fix ash

* bounding box
2021-03-24 19:16:31 -04:00
water111 9ffc6014e1
fix printing and add gstate (#330) 2021-03-22 20:04:00 -04:00
water111 4262145c99
fix set! missing typecast (#324) 2021-03-17 19:26:35 -04:00
water111 d60d9b639a
support anonymous functions (#323) 2021-03-14 19:06:51 -04:00
water111 e93d97dd07
[decompiler] gkernel offline test (#321)
* working on pointer math

* bug fixes

* gkernel passing with no anon functions

* update tests
2021-03-14 16:11:42 -04:00
water111 814480f9e5
[Decompiler] Replace type hint system and improve variable types. (#320)
* 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
2021-03-13 16:10:39 -05:00
water111 9074a35b9b
[Decompiler] Fix printing of lets (#314)
* fix let prints and windows warnings

* missing include for windows

* windows again
2021-03-07 12:01:59 -05:00
water111 d8a82eeca1
[Decompiler] Fix up pretty printing and other small changes (#311)
* fix up pretty printing

* wip

* fix pointer cast signed vs unsigned issue
2021-03-06 20:16:48 -05:00
Tyler Wilding f123bf368a
decomp - vector.gc - Decompile vector.gc (#289)
* 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
2021-03-06 10:46:26 -05:00
water111 b352dcefa9
recognize dotimes (#310) 2021-03-05 21:46:39 -05:00
water111 65ffe83468
[Decompiler] Decompile let (#309)
* test

* fix bug

* fix tests for let

* missing formatting fix
2021-03-05 18:48:01 -05:00
water111 d9aa535dd0
[Decompiler] Fix issues in gcommon (#305)
* fix several issues

* small fixes
2021-03-03 20:52:25 -05:00
water111 413c1f5c74
[Decompiler] Add offline tests (#303)
* add offline test for gcommon as an example.

* fix test

* unused var
2021-03-03 15:42:55 -05:00