mirror of
https://github.com/open-goal/jak-project
synced 2026-05-30 00:47:20 -04:00
[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
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
#include "gtest/gtest.h"
|
||||
#include "FormRegressionTest.h"
|
||||
|
||||
using namespace decompiler;
|
||||
|
||||
TEST_F(FormRegressionTest, MatrixPMult) {
|
||||
std::string func =
|
||||
"sll r0, r0, 0\n"
|
||||
" daddiu sp, sp, -112\n"
|
||||
" sd ra, 0(sp)\n"
|
||||
" sq s5, 80(sp)\n"
|
||||
" sq gp, 96(sp)\n"
|
||||
|
||||
" or gp, a0, r0\n"
|
||||
" daddiu s5, sp, 16\n"
|
||||
" sq r0, 0(s5)\n"
|
||||
" sq r0, 16(s5)\n"
|
||||
" sq r0, 32(s5)\n"
|
||||
" sq r0, 48(s5)\n"
|
||||
" lw t9, matrix*!(s7)\n"
|
||||
" or a0, s5, r0\n"
|
||||
" jalr ra, t9\n"
|
||||
" sll v0, ra, 0\n"
|
||||
|
||||
" lq v1, 0(s5)\n"
|
||||
" sq v1, 0(gp)\n"
|
||||
" lq v1, 16(s5)\n"
|
||||
" sq v1, 16(gp)\n"
|
||||
" lq v1, 32(s5)\n"
|
||||
" sq v1, 32(gp)\n"
|
||||
" lq v1, 48(s5)\n"
|
||||
" sq v1, 48(gp)\n"
|
||||
" or v0, gp, r0\n"
|
||||
" ld ra, 0(sp)\n"
|
||||
" lq gp, 96(sp)\n"
|
||||
" lq s5, 80(sp)\n"
|
||||
" jr ra\n"
|
||||
" daddiu sp, sp, 112";
|
||||
std::string type = "(function matrix matrix matrix matrix)";
|
||||
std::string expected =
|
||||
"(begin\n"
|
||||
" (let ((s5-0 (new (quote stack) (quote matrix))))\n"
|
||||
" (set! (-> s5-0 vector 0 quad) (the-as uint128 0))\n"
|
||||
" (set! (-> s5-0 vector 1 quad) (the-as uint128 0))\n"
|
||||
" (set! (-> s5-0 vector 2 quad) (the-as uint128 0))\n"
|
||||
" (set! (-> s5-0 vector 3 quad) (the-as uint128 0))\n"
|
||||
" (matrix*! s5-0 arg1 arg2)\n"
|
||||
" (set! (-> arg0 vector 0 quad) (-> s5-0 vector 0 quad))\n"
|
||||
" (set! (-> arg0 vector 1 quad) (-> s5-0 vector 1 quad))\n"
|
||||
" (set! (-> arg0 vector 2 quad) (-> s5-0 vector 2 quad))\n"
|
||||
" (set! (-> arg0 vector 3 quad) (-> s5-0 vector 3 quad))\n"
|
||||
" )\n"
|
||||
" arg0\n"
|
||||
" )";
|
||||
test_with_stack_vars(func, type, expected,
|
||||
"[\n"
|
||||
" [16, \"matrix\"]\n"
|
||||
" ]");
|
||||
}
|
||||
Reference in New Issue
Block a user