diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index 4f43d06777..2d454e5faa 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -689,6 +689,54 @@ void SimpleExpressionElement::update_from_stack_si_1(const Env& env, make_cast_if_needed(arg, in_type, TypeSpec("int"), pool, env))); } +namespace { +std::vector get_addition_elements(Form* in) { + auto gen_elt = in->try_as_element(); + if (gen_elt && gen_elt->op().is_fixed(FixedOperatorKind::ADDITION)) { + return gen_elt->elts(); + } else { + return {in}; + } +} + +FormElement* make_and_compact_addition(Form* arg0, + Form* arg1, + const std::optional& arg0_cast, + const std::optional& arg1_cast, + FormPool& pool, + const Env& env) { + if (!arg1_cast) { + auto arg0_elts = get_addition_elements(arg0); + assert(!arg0_elts.empty()); + if (arg0_cast) { + arg0_elts.front() = cast_form(arg0_elts.front(), *arg0_cast, pool, env); + } + + // it's fine to only cast the first thing here - the rest are already cast properly. + auto arg1_elts = get_addition_elements(arg1); + assert(!arg1_elts.empty()); + if (arg1_cast) { + arg1_elts.front() = cast_form(arg1_elts.front(), *arg1_cast, pool, env); + } + + // add all together + arg0_elts.insert(arg0_elts.end(), arg1_elts.begin(), arg1_elts.end()); + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::ADDITION), arg0_elts); + } else { + if (arg0_cast) { + arg0 = cast_form(arg0, *arg0_cast, pool, env); + } + + if (arg1_cast) { + arg1 = cast_form(arg1, *arg1_cast, pool, env); + } + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::ADDITION), arg0, arg1); + } +} +} // namespace + void SimpleExpressionElement::update_from_stack_add_i(const Env& env, FormPool& pool, FormStack& stack, @@ -953,7 +1001,7 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env, } } - if ((arg0_i && arg1_i) || (arg0_u && arg1_u)) { + if (false && ((arg0_i && arg1_i) || (arg0_u && arg1_u))) { auto new_form = pool.alloc_element( GenericOperator::make_fixed(FixedOperatorKind::ADDITION), args.at(0), args.at(1)); result->push_back(new_form); @@ -968,21 +1016,19 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env, GenericOperator::make_fixed(FixedOperatorKind::ADDITION_PTR), args.at(1), args.at(0)); result->push_back(new_form); } else { - auto casted0 = args.at(0); + std::optional arg0_cast, arg1_cast; if (!arg0_i && !arg0_u && arg0_type.typespec() != TypeSpec("binteger") && !env.dts->ts.tc(TypeSpec("integer"), arg0_type.typespec())) { - casted0 = pool.alloc_single_element_form( - nullptr, TypeSpec(arg0_i ? "int" : "uint"), args.at(0)); + arg0_cast = TypeSpec(arg0_i ? "int" : "uint"); } - auto casted1 = pool.alloc_single_element_form( - nullptr, TypeSpec(arg0_i ? "int" : "uint"), args.at(1)); + if (!arg1_i && !arg1_u) { + arg1_cast = TypeSpec(arg0_i ? "int" : "uint"); + } - FormElement* new_form = pool.alloc_element( - GenericOperator::make_fixed(FixedOperatorKind::ADDITION), casted0, casted1); - - result->push_back(new_form); + result->push_back( + make_and_compact_addition(args.at(0), args.at(1), arg0_cast, arg1_cast, pool, env)); } } @@ -3388,24 +3434,16 @@ FormElement* ConditionElement::make_zero_check_generic(const Env& env, const std::vector& source_types) { // (zero? (+ thing small-integer)) -> (= thing (- small-integer)) assert(source_forms.size() == 1); - auto mr = match(Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), - {Matcher::any(0), Matcher::any_integer(1)}), - source_forms.at(0)); - if (mr.matched) { - s64 value = -mr.maps.ints.at(1); - auto value_form = pool.alloc_single_element_form( - nullptr, SimpleAtom::make_int_constant(value)); - return pool.alloc_element(GenericOperator::make_fixed(FixedOperatorKind::EQ), - std::vector{mr.maps.forms.at(0), value_form}); - } auto enum_type_info = env.dts->ts.try_enum_lookup(source_types.at(0)); if (enum_type_info && !enum_type_info->is_bitfield()) { // (zero? (+ (the-as uint arg0) (the-as uint -2))) check enum value - mr = match(Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), - {make_int_uint_cast_matcher(Matcher::any(0)), - make_int_uint_cast_matcher(Matcher::any_integer(1))}), - source_forms.at(0)); + auto mr = match( + Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), + {make_int_uint_cast_matcher(Matcher::any(0)), + Matcher::match_or({Matcher::any_integer(1), + make_int_uint_cast_matcher(Matcher::any_integer(1))})}), + source_forms.at(0)); if (mr.matched) { s64 value = mr.maps.ints.at(1); value = -value; @@ -3416,6 +3454,20 @@ FormElement* ConditionElement::make_zero_check_generic(const Env& env, } } + { + auto mr = match(Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), + {Matcher::any(0), Matcher::any_integer(1)}), + source_forms.at(0)); + if (mr.matched) { + s64 value = -mr.maps.ints.at(1); + auto value_form = pool.alloc_single_element_form( + nullptr, SimpleAtom::make_int_constant(value)); + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::EQ), + std::vector{mr.maps.forms.at(0), value_form}); + } + } + auto nice_constant = try_make_constant_from_int_for_compare(0, source_types.at(0), pool, env); if (nice_constant) { return pool.alloc_element( diff --git a/test/decompiler/reference/engine/ambient/mood_REF.gc b/test/decompiler/reference/engine/ambient/mood_REF.gc index fcebd834c2..5f2eb44349 100644 --- a/test/decompiler/reference/engine/ambient/mood_REF.gc +++ b/test/decompiler/reference/engine/ambient/mood_REF.gc @@ -339,10 +339,7 @@ (-> (the-as (pointer uint128) - (+ - (the-as uint (-> arg0 mood-sun-table data 0 env-color)) - (the-as uint (* s5-0 32)) - ) + (+ (the-as uint (-> arg0 mood-sun-table data 0 env-color)) (* s5-0 32)) ) ) ) @@ -362,17 +359,11 @@ (-> arg0 current-sun env-color) (the-as vector - (+ - (the-as uint (-> arg0 mood-sun-table data 0 env-color)) - (the-as uint (* s5-0 32)) - ) + (+ (the-as uint (-> arg0 mood-sun-table data 0 env-color)) (* s5-0 32)) ) (the-as vector - (+ - (the-as uint (-> arg0 mood-sun-table data 0 env-color)) - (the-as uint (* s4-0 32)) - ) + (+ (the-as uint (-> arg0 mood-sun-table data 0 env-color)) (* s4-0 32)) ) f30-0 ) @@ -434,10 +425,7 @@ (-> (the-as (pointer uint128) - (+ - (the-as uint (-> arg0 mood-fog-table data 0 fog-dists)) - (the-as uint (* 48 arg1)) - ) + (+ (the-as uint (-> arg0 mood-fog-table data 0 fog-dists)) (* 48 arg1)) ) ) ) @@ -446,10 +434,7 @@ (-> (the-as (pointer uint128) - (+ - (the-as uint (-> arg0 mood-fog-table data 0 erase-color)) - (the-as uint (* 48 arg1)) - ) + (+ (the-as uint (-> arg0 mood-fog-table data 0 erase-color)) (* 48 arg1)) ) ) ) @@ -458,10 +443,7 @@ (-> (the-as (pointer uint128) - (+ - (the-as uint (-> arg0 mood-lights-table data 0 prt-color)) - (the-as uint (* 80 arg3)) - ) + (+ (the-as uint (-> arg0 mood-lights-table data 0 prt-color)) (* 80 arg3)) ) ) ) @@ -474,10 +456,7 @@ (-> (the-as (pointer uint128) - (+ - (the-as uint (-> arg0 mood-sun-table data 0 env-color)) - (the-as uint (* arg2 32)) - ) + (+ (the-as uint (-> arg0 mood-sun-table data 0 env-color)) (* arg2 32)) ) ) ) @@ -486,10 +465,7 @@ (-> (the-as (pointer uint128) - (+ - (the-as uint (-> arg0 mood-lights-table data 0 shadow)) - (the-as uint (* 80 arg3)) - ) + (+ (the-as uint (-> arg0 mood-lights-table data 0 shadow)) (* 80 arg3)) ) ) ) @@ -719,7 +695,7 @@ (arg6 float) ) (let* ((s5-0 (&-> arg0 state arg3)) - (s4-0 (+ (-> s5-0 0) (the-as uint arg1))) + (s4-0 (+ (-> s5-0 0) arg1)) (a0-1 (-> s5-0 1)) (v1-2 (-> s5-0 2)) (s0-0 (-> s5-0 3)) @@ -1073,12 +1049,7 @@ (arg7 int) ) (let* ((gp-0 (&-> arg0 state arg2)) - (f0-1 - (the - float - (* (logand (+ (-> arg0 state arg3) (the-as uint arg7)) 255) 512) - ) - ) + (f0-1 (the float (* (logand (+ (-> arg0 state arg3) arg7) 255) 512))) (f0-4 (+ arg4 (* (cos f0-1) arg5))) (f30-1 (* 0.003921569 (the float (-> gp-0 0)))) ) @@ -1157,9 +1128,9 @@ (f0-1 (* 0.125 (the float (logand a2-1 7)))) ) (let ((a2-4 (logand (+ v1-2 -1) 3))) - (set! (-> arg0 times (+ arg1 (the-as int a2-4)) w) (- 1.0 f0-1)) + (set! (-> arg0 times (+ arg1 a2-4) w) (- 1.0 f0-1)) ) - (set! (-> arg0 times (+ arg1 (the-as int v1-2)) w) f0-1) + (set! (-> arg0 times (+ arg1 v1-2) w) f0-1) f0-1 ) ) @@ -2238,10 +2209,7 @@ (let ((f0-19 (vector-vector-distance - (the-as - vector - (+ (the-as uint *rolling-spheres-light2*) (the-as uint (* s4-4 16))) - ) + (the-as vector (+ (the-as uint *rolling-spheres-light2*) (* s4-4 16))) s5-3 ) ) @@ -3809,7 +3777,3 @@ (update-mood-itimes arg0) (none) ) - - - - diff --git a/test/decompiler/reference/engine/camera/cam-debug-h_REF.gc b/test/decompiler/reference/engine/camera/cam-debug-h_REF.gc index c6e08b280f..af39f224f7 100644 --- a/test/decompiler/reference/engine/camera/cam-debug-h_REF.gc +++ b/test/decompiler/reference/engine/camera/cam-debug-h_REF.gc @@ -23,7 +23,7 @@ ;; definition for function float-lookup-redline (defun float-lookup-redline ((arg0 float)) - (let ((a0-3 (mod (+ (+ (the int arg0) -1) *redline-index*) 400))) + (let ((a0-3 (mod (+ (the int arg0) -1 *redline-index*) 400))) (-> *redline-table* a0-3) ) ) @@ -48,7 +48,7 @@ ;; definition for function float-lookup-blueline (defun float-lookup-blueline ((arg0 float)) - (let ((a0-3 (mod (+ (+ (the int arg0) -1) *blueline-index*) 400))) + (let ((a0-3 (mod (+ (the int arg0) -1 *blueline-index*) 400))) (-> *blueline-table* a0-3) ) ) @@ -73,7 +73,7 @@ ;; definition for function float-lookup-greenline (defun float-lookup-greenline ((arg0 float)) - (let ((a0-3 (mod (+ (+ (the int arg0) -1) *greenline-index*) 400))) + (let ((a0-3 (mod (+ (the int arg0) -1 *greenline-index*) 400))) (-> *greenline-table* a0-3) ) ) @@ -98,7 +98,7 @@ ;; definition for function float-lookup-yellowline (defun float-lookup-yellowline ((arg0 float)) - (let ((a0-3 (mod (+ (+ (the int arg0) -1) *yellowline-index*) 400))) + (let ((a0-3 (mod (+ (the int arg0) -1 *yellowline-index*) 400))) (-> *yellowline-table* a0-3) ) ) @@ -123,7 +123,7 @@ ;; definition for function float-lookup-timeplot (defun float-lookup-timeplot ((arg0 float)) - (let ((a0-3 (mod (+ (+ (the int arg0) -1) *timeplot-index*) 400))) + (let ((a0-3 (mod (+ (the int arg0) -1 *timeplot-index*) 400))) (-> *timeplot-table* a0-3) ) ) diff --git a/test/decompiler/reference/engine/camera/camera_REF.gc b/test/decompiler/reference/engine/camera/camera_REF.gc index 24a23e8088..975c279550 100644 --- a/test/decompiler/reference/engine/camera/camera_REF.gc +++ b/test/decompiler/reference/engine/camera/camera_REF.gc @@ -645,10 +645,7 @@ (- (-> obj summed-len) (-> obj point arg0 tp-length)) ) (vector-! - (the-as - vector - (+ (the-as uint (-> obj point 0 direction)) (the-as uint (* 48 arg0))) - ) + (the-as vector (+ (the-as uint (-> obj point 0 direction)) (* 48 arg0))) (the-as vector (-> obj point v1-11)) (the-as vector (-> obj point arg0)) ) @@ -656,10 +653,7 @@ (set! (-> obj point arg0 tp-length) (vector-normalize-ret-len! - (the-as - vector - (+ (the-as uint (-> obj point 0 direction)) (the-as uint (* 48 arg0))) - ) + (the-as vector (+ (the-as uint (-> obj point 0 direction)) (* 48 arg0))) 1.0 ) ) @@ -754,16 +748,13 @@ (vector-dot (the-as vector - (+ - (the-as uint (-> obj point 0 direction)) - (the-as uint (* 48 v1-15)) - ) + (+ (the-as uint (-> obj point 0 direction)) (* 48 v1-15)) ) (the-as vector (+ (the-as uint (the-as vector (-> obj point 0 direction))) - (the-as uint (* 48 a0-14)) + (* 48 a0-14) ) ) ) @@ -818,16 +809,13 @@ (vector-dot (the-as vector - (+ - (the-as uint (-> obj point 0 direction)) - (the-as uint (* 48 s4-1)) - ) + (+ (the-as uint (-> obj point 0 direction)) (* 48 s4-1)) ) (the-as vector (+ (the-as uint (the-as vector (-> obj point 0 direction))) - (the-as uint (* 48 v1-11)) + (* 48 v1-11) ) ) ) @@ -858,20 +846,14 @@ (s2-0 (-> obj end-point)) ) (vector-! - (the-as - vector - (+ (the-as uint (-> obj point 0 direction)) (the-as uint (* 48 s2-0))) - ) + (the-as vector (+ (the-as uint (-> obj point 0 direction)) (* 48 s2-0))) arg0 (the-as vector (-> obj point s2-0)) ) (set! (-> obj point s2-0 tp-length) (vector-normalize-ret-len! - (the-as - vector - (+ (the-as uint (-> obj point 0 direction)) (the-as uint (* 48 s2-0))) - ) + (the-as vector (+ (the-as uint (-> obj point 0 direction)) (* 48 s2-0))) 1.0 ) ) @@ -1031,14 +1013,8 @@ (let ((s1-0 (-> obj point v1-8 next))) (vector-! s2-0 - (the-as - vector - (+ (the-as uint (-> obj point 0 direction)) (the-as uint (* 48 s1-0))) - ) - (the-as - vector - (+ (the-as uint (-> obj point 0 direction)) (the-as uint (* 48 v1-8))) - ) + (the-as vector (+ (the-as uint (-> obj point 0 direction)) (* 48 s1-0))) + (the-as vector (+ (the-as uint (-> obj point 0 direction)) (* 48 v1-8))) ) (let* ((f0-4 (vector-normalize-ret-len! s2-0 1.0)) (f0-5 (* 0.5 f0-4)) @@ -2418,7 +2394,3 @@ ) arg0 ) - - - - diff --git a/test/decompiler/reference/engine/collide/collide-frag_REF.gc b/test/decompiler/reference/engine/collide/collide-frag_REF.gc index 3fbc0057d9..b2be7bf9e3 100644 --- a/test/decompiler/reference/engine/collide/collide-frag_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-frag_REF.gc @@ -85,16 +85,16 @@ (+! (-> arg0 data s5-0 total) (logand -16 (+ v1-11 15))) ) (set! (-> arg0 data (+ s5-0 1) name) "collision-poly") - (+! (-> arg0 data (+ s5-0 1) count) (the-as int (-> s4-0 poly-count))) + (+! (-> arg0 data (+ s5-0 1) count) (-> s4-0 poly-count)) (let ((v1-22 (+ (-> s4-0 strip-data-len) (-> s4-0 poly-count)))) - (+! (-> arg0 data (+ s5-0 1) used) (the-as int v1-22)) - (+! (-> arg0 data (+ s5-0 1) total) (the-as int v1-22)) + (+! (-> arg0 data (+ s5-0 1) used) v1-22) + (+! (-> arg0 data (+ s5-0 1) total) v1-22) ) (set! (-> arg0 data (+ s5-0 2) name) "collision-vertex") - (+! (-> arg0 data (+ s5-0 2) count) (the-as int (-> s4-0 vertex-count))) + (+! (-> arg0 data (+ s5-0 2) count) (-> s4-0 vertex-count)) (let ((v1-31 (* (-> s4-0 vertex-data-qwc) 16))) - (+! (-> arg0 data (+ s5-0 2) used) (the-as int v1-31)) - (let ((v0-2 (+ (-> arg0 data (+ s5-0 2) total) (the-as int v1-31)))) + (+! (-> arg0 data (+ s5-0 2) used) v1-31) + (let ((v0-2 (+ (-> arg0 data (+ s5-0 2) total) v1-31))) (set! (-> arg0 data (+ s5-0 2) total) v0-2) (the-as collide-fragment v0-2) ) diff --git a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc index 751300e5f3..8375ee8933 100644 --- a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc @@ -699,10 +699,7 @@ ;; definition for method 5 of type collide-shape-prim-group ;; INFO: Return type mismatch uint vs int. (defmethod asize-of collide-shape-prim-group ((obj collide-shape-prim-group)) - (the-as - int - (+ (-> obj type size) (the-as uint (* (+ (-> obj allocated-prims) -1) 4))) - ) + (the-as int (+ (-> obj type size) (* (+ (-> obj allocated-prims) -1) 4))) ) ;; definition for method 0 of type collide-shape @@ -802,7 +799,7 @@ (object-new allocation type-to-make - (the-as int (+ (-> type-to-make size) (the-as uint (* (+ arg0 -1) 32)))) + (the-as int (+ (-> type-to-make size) (* (+ arg0 -1) 32))) ) ) ) @@ -820,10 +817,7 @@ ;; definition for method 5 of type collide-sticky-rider-group ;; INFO: Return type mismatch uint vs int. (defmethod asize-of collide-sticky-rider-group ((obj collide-sticky-rider-group)) - (the-as - int - (+ (-> obj type size) (the-as uint (* (+ (-> obj allocated-riders) -1) 32))) - ) + (the-as int (+ (-> obj type size) (* (+ (-> obj allocated-riders) -1) 32))) ) ;; definition for symbol *collide-shape-prim-backgnd*, type collide-shape-prim-mesh diff --git a/test/decompiler/reference/engine/data/art-h_REF.gc b/test/decompiler/reference/engine/data/art-h_REF.gc index 4a9a0ce1b4..93dcf58407 100644 --- a/test/decompiler/reference/engine/data/art-h_REF.gc +++ b/test/decompiler/reference/engine/data/art-h_REF.gc @@ -109,7 +109,7 @@ (new-dynamic-structure allocation type-to-make - (the-as int (+ (-> type-to-make size) (the-as uint (* 48 v1-1)))) + (the-as int (+ (-> type-to-make size) (* 48 v1-1))) ) ) ) diff --git a/test/decompiler/reference/engine/data/res_REF.gc b/test/decompiler/reference/engine/data/res_REF.gc index d3db036fbd..d0e7002c41 100644 --- a/test/decompiler/reference/engine/data/res_REF.gc +++ b/test/decompiler/reference/engine/data/res_REF.gc @@ -55,13 +55,7 @@ (object-new allocation type-to-make - (the-as - int - (+ - (+ (-> type-to-make size) (the-as uint (* (+ data-count -1) 16))) - (the-as uint data-size) - ) - ) + (the-as int (+ (-> type-to-make size) (* (+ data-count -1) 16) data-size)) ) ) ) @@ -84,10 +78,7 @@ (defmethod asize-of res-lump ((obj res-lump)) (the-as int - (+ - (+ (-> obj type psize) (the-as uint (* (-> obj allocated-length) 16))) - (the-as uint (-> obj data-size)) - ) + (+ (-> obj type psize) (* (-> obj allocated-length) 16) (-> obj data-size)) ) ) diff --git a/test/decompiler/reference/engine/debug/menu_REF.gc b/test/decompiler/reference/engine/debug/menu_REF.gc index 01faf0a058..b6ceaa5a53 100644 --- a/test/decompiler/reference/engine/debug/menu_REF.gc +++ b/test/decompiler/reference/engine/debug/menu_REF.gc @@ -1426,7 +1426,7 @@ (+ (- -1 s5-0) (-> arg0 sel-length)) ) ) - (set! s4-0 (+ (+ s4-0 3) (-> s3-0 pix-width))) + (set! s4-0 (+ s4-0 3 (-> s3-0 pix-width))) ) ) ) diff --git a/test/decompiler/reference/engine/debug/stats-h_REF.gc b/test/decompiler/reference/engine/debug/stats-h_REF.gc index 1b02a011db..69674b773a 100644 --- a/test/decompiler/reference/engine/debug/stats-h_REF.gc +++ b/test/decompiler/reference/engine/debug/stats-h_REF.gc @@ -161,9 +161,9 @@ (.sync.l) (.sync.p) (.mfpc v1-1 pcr0) - (+! (-> obj accum0) (the-as uint v1-1)) + (+! (-> obj accum0) v1-1) (.mfpc v1-3 pcr1) - (+! (-> obj accum1) (the-as uint v1-3)) + (+! (-> obj accum1) v1-3) (label cfg-2) 0 (none) @@ -190,7 +190,3 @@ (set! (-> perf-stat method-table 12) nothing) (set! (-> perf-stat method-table 13) nothing) ) - - - - diff --git a/test/decompiler/reference/engine/dma/dma-bucket_REF.gc b/test/decompiler/reference/engine/dma/dma-bucket_REF.gc index fa8b13f8ba..bcc9d81a56 100644 --- a/test/decompiler/reference/engine/dma/dma-bucket_REF.gc +++ b/test/decompiler/reference/engine/dma/dma-bucket_REF.gc @@ -44,9 +44,7 @@ (tag-start pointer) (tag-end (pointer dma-tag)) ) - (let - ((bucket (the-as dma-bucket (+ (the-as uint base) (the-as uint (* idx 16))))) - ) + (let ((bucket (the-as dma-bucket (+ (the-as uint base) (* idx 16))))) (set! (-> (the-as dma-bucket (-> bucket last)) next) (the-as uint tag-start)) (set! (-> bucket last) tag-end) ) diff --git a/test/decompiler/reference/engine/dma/dma-buffer_REF.gc b/test/decompiler/reference/engine/dma/dma-buffer_REF.gc index 7f1712e07e..b41133dd2c 100644 --- a/test/decompiler/reference/engine/dma/dma-buffer_REF.gc +++ b/test/decompiler/reference/engine/dma/dma-buffer_REF.gc @@ -94,11 +94,7 @@ (defmethod new dma-buffer ((allocation symbol) (type-to-make type) (arg0 int)) (let ((v0-0 - (object-new - allocation - type-to-make - (+ (+ arg0 -4) (the-as int (-> type-to-make size))) - ) + (object-new allocation type-to-make (+ arg0 -4 (-> type-to-make size))) ) ) (set! (-> v0-0 base) (-> v0-0 data)) @@ -121,7 +117,7 @@ ;; definition for method 5 of type dma-buffer (defmethod asize-of dma-buffer ((obj dma-buffer)) - (+ (+ (-> obj allocated-length) -4) (the-as int (-> dma-buffer size))) + (+ (-> obj allocated-length) -4 (-> dma-buffer size)) ) ;; definition for function dma-buffer-length diff --git a/test/decompiler/reference/engine/dma/dma-disasm_REF.gc b/test/decompiler/reference/engine/dma/dma-disasm_REF.gc index 05b44dabb0..a51977aa23 100644 --- a/test/decompiler/reference/engine/dma/dma-disasm_REF.gc +++ b/test/decompiler/reference/engine/dma/dma-disasm_REF.gc @@ -715,7 +715,7 @@ ) ) (disasm-vif-tag - (the-as (pointer vif-tag) (+ addr (the-as uint v0-10))) + (the-as (pointer vif-tag) (+ addr v0-10)) (the-as int (- (* qwc 4) (the-as uint (/ v0-10 4)))) stream-2 (= mode-2 'details) @@ -743,10 +743,7 @@ ) (set! data-2 - (the-as - dma-packet - (+ (the-as uint data-2) (the-as uint (* (+ qwc 1) 16))) - ) + (the-as dma-packet (+ (the-as uint data-2) (* (+ qwc 1) 16))) ) data-2 ) diff --git a/test/decompiler/reference/engine/dma/dma_REF.gc b/test/decompiler/reference/engine/dma/dma_REF.gc index bfd16578fc..2cb7091414 100644 --- a/test/decompiler/reference/engine/dma/dma_REF.gc +++ b/test/decompiler/reference/engine/dma/dma_REF.gc @@ -291,7 +291,7 @@ (defun dump-vu1-range ((start uint) (total-count uint)) (let ((s4-0 (the-as (pointer uint32) #x1100c000))) (dotimes (s3-0 (the-as int total-count)) - (let ((s2-0 (+ s3-0 (the-as int start)))) + (let ((s2-0 (+ s3-0 start))) (format 0 "~4,'0X: ~8x ~8x ~8x ~8x" diff --git a/test/decompiler/reference/engine/draw/process-drawable-h_REF.gc b/test/decompiler/reference/engine/draw/process-drawable-h_REF.gc index bc72f1cf57..6a615b58aa 100644 --- a/test/decompiler/reference/engine/draw/process-drawable-h_REF.gc +++ b/test/decompiler/reference/engine/draw/process-drawable-h_REF.gc @@ -138,7 +138,7 @@ joint-control-channel (+ (the-as uint arg0) - (the-as uint (* 48 (- (the int arg1) (-> arg0 group-sub-index)))) + (* 48 (- (the int arg1) (-> arg0 group-sub-index))) ) ) frame-num diff --git a/test/decompiler/reference/engine/engine/connect_REF.gc b/test/decompiler/reference/engine/engine/connect_REF.gc index 3693568ff6..72b03acde6 100644 --- a/test/decompiler/reference/engine/engine/connect_REF.gc +++ b/test/decompiler/reference/engine/engine/connect_REF.gc @@ -169,10 +169,7 @@ (object-new allocation type-to-make - (the-as - int - (+ (-> type-to-make size) (the-as uint (* (+ length -1) 32))) - ) + (the-as int (+ (-> type-to-make size) (* (+ length -1) 32))) ) ) ) @@ -258,25 +255,25 @@ (format #t "~Tlength: ~D~%" (-> obj length)) (format #t "~Talive-list:~%") (let ((s5-0 *print-column*)) - (set! *print-column* (+ *print-column* (the-as uint 64))) + (set! *print-column* (+ *print-column* 64)) (inspect (-> obj alive-list)) (set! *print-column* s5-0) ) (format #t "~Talive-list-end:~%") (let ((s5-1 *print-column*)) - (set! *print-column* (+ *print-column* (the-as uint 64))) + (set! *print-column* (+ *print-column* 64)) (inspect (-> obj alive-list-end)) (set! *print-column* s5-1) ) (format #t "~Tdead-list:~%") (let ((s5-2 *print-column*)) - (set! *print-column* (+ *print-column* (the-as uint 64))) + (set! *print-column* (+ *print-column* 64)) (inspect (-> obj dead-list)) (set! *print-column* s5-2) ) (format #t "~Tdead-list-end:~%") (let ((s5-3 *print-column*)) - (set! *print-column* (+ *print-column* (the-as uint 64))) + (set! *print-column* (+ *print-column* 64)) (inspect (-> obj dead-list-end)) (set! *print-column* s5-3) ) @@ -292,10 +289,7 @@ ;; definition for method 5 of type engine ;; INFO: Return type mismatch uint vs int. (defmethod asize-of engine ((obj engine)) - (the-as - int - (+ (-> engine size) (the-as uint (* (+ (-> obj allocated-length) -1) 32))) - ) + (the-as int (+ (-> engine size) (* (+ (-> obj allocated-length) -1) 32))) ) ;; definition for method 10 of type engine diff --git a/test/decompiler/reference/engine/gfx/hw/display_REF.gc b/test/decompiler/reference/engine/gfx/hw/display_REF.gc index 5d2aac8b6b..1fe1455375 100644 --- a/test/decompiler/reference/engine/gfx/hw/display_REF.gc +++ b/test/decompiler/reference/engine/gfx/hw/display_REF.gc @@ -417,12 +417,9 @@ (* (+ *profile-x* - (the-as - int - (/ - (* (-> block time-stamp) (the-as uint *profile-w*)) - (the-as uint *ticks-per-frame*) - ) + (/ + (* (-> block time-stamp) (the-as uint *profile-w*)) + (the-as uint *ticks-per-frame*) ) ) 16 @@ -436,7 +433,7 @@ (-> (the-as (pointer gs-xyzf) t2-8) 0) (new 'static 'gs-xyzf :z #x3fffff - :y (* (+ (+ *profile-y* screen-y) *profile-h*) 16) + :y (* (+ *profile-y* screen-y *profile-h*) 16) :x left ) ) diff --git a/test/decompiler/reference/engine/gfx/hw/gs_REF.gc b/test/decompiler/reference/engine/gfx/hw/gs_REF.gc index b4704fbd73..e584686ac6 100644 --- a/test/decompiler/reference/engine/gfx/hw/gs_REF.gc +++ b/test/decompiler/reference/engine/gfx/hw/gs_REF.gc @@ -951,7 +951,7 @@ (object-new allocation type-to-make - (the-as int (+ (-> type-to-make size) (the-as uint (* (+ arg0 -1) 8)))) + (the-as int (+ (-> type-to-make size) (* (+ arg0 -1) 8))) ) ) diff --git a/test/decompiler/reference/engine/gfx/merc/merc-h_REF.gc b/test/decompiler/reference/engine/gfx/merc/merc-h_REF.gc index 910e50e21a..28a2980c42 100644 --- a/test/decompiler/reference/engine/gfx/merc/merc-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/merc/merc-h_REF.gc @@ -164,10 +164,7 @@ (defun merc-fragment-fp-data ((arg0 merc-fragment)) (the-as pointer - (+ - (the-as uint arg0) - (the-as uint (* (-> arg0 header mm-quadword-fp-off) 16)) - ) + (+ (the-as uint arg0) (* (-> arg0 header mm-quadword-fp-off) 16)) ) ) diff --git a/test/decompiler/reference/engine/gfx/ocean/ocean-transition_REF.gc b/test/decompiler/reference/engine/gfx/ocean/ocean-transition_REF.gc index 043ef0f79b..39997751e5 100644 --- a/test/decompiler/reference/engine/gfx/ocean/ocean-transition_REF.gc +++ b/test/decompiler/reference/engine/gfx/ocean/ocean-transition_REF.gc @@ -259,7 +259,7 @@ (a3-9 (the-as uint128 - (-> *ocean-map* ocean-colors colors (+ (+ a1-11 1) (* 52 a0-16))) + (-> *ocean-map* ocean-colors colors (+ a1-11 1 (* 52 a0-16))) ) ) (t0-10 @@ -271,12 +271,7 @@ (a0-22 (the-as uint128 - (-> - *ocean-map* - ocean-colors - colors - (+ (+ a1-11 1) (* 52 (+ a0-16 1))) - ) + (-> *ocean-map* ocean-colors colors (+ a1-11 1 (* 52 (+ a0-16 1)))) ) ) ) @@ -457,23 +452,13 @@ ((a0-22 (the-as uint128 - (-> - *ocean-map* - ocean-colors - colors - (+ (* 52 (the-as int arg1)) (the-as int arg2)) - ) + (-> *ocean-map* ocean-colors colors (+ (* 52 (the-as int arg1)) arg2)) ) ) (a1-13 (the-as uint128 - (-> - *ocean-map* - ocean-colors - colors - (+ (+ arg2 1) (the-as uint (* 52 (the-as int arg1)))) - ) + (-> *ocean-map* ocean-colors colors (+ arg2 1 (* 52 (the-as int arg1)))) ) ) (a2-14 @@ -483,7 +468,7 @@ *ocean-map* ocean-colors colors - (+ (* 52 (the-as int (+ arg1 1))) (the-as int arg2)) + (+ (* 52 (the-as int (+ arg1 1))) arg2) ) ) ) @@ -494,7 +479,7 @@ *ocean-map* ocean-colors colors - (+ (+ arg2 1) (the-as uint (* 52 (the-as int (+ arg1 1))))) + (+ arg2 1 (* 52 (the-as int (+ arg1 1)))) ) ) ) @@ -1136,7 +1121,7 @@ (dotimes (t3-10 4) (let ((t4-5 (-> sv-40 mask t3-10))) (when (nonzero? t4-5) - (let ((t5-2 (+ (* a3-1 4) (the-as uint t3-10)))) + (let ((t5-2 (+ (* a3-1 4) t3-10))) (if (< t5-2 (the-as uint a0-11)) (set! a0-11 (the-as int t5-2)) ) @@ -1146,7 +1131,7 @@ ) (dotimes (t5-3 4) (when (logtest? t4-5 (ash 1 t5-3)) - (let ((t6-9 (+ (* t1-0 4) (the-as uint t5-3)))) + (let ((t6-9 (+ (* t1-0 4) t5-3))) (if (< t6-9 (the-as uint a2-2)) (set! a2-2 (the-as int t6-9)) ) @@ -1193,7 +1178,7 @@ *ocean-map* ocean-trans-indices data - (+ (* (the-as uint 48) s5-1) (the-as int s3-1)) + (+ (* (the-as uint 48) s5-1) s3-1) ) ) ) @@ -1240,7 +1225,3 @@ 0 (none) ) - - - - diff --git a/test/decompiler/reference/engine/gfx/ripple_REF.gc b/test/decompiler/reference/engine/gfx/ripple_REF.gc index 99e4b2e3d2..52eb3e8350 100644 --- a/test/decompiler/reference/engine/gfx/ripple_REF.gc +++ b/test/decompiler/reference/engine/gfx/ripple_REF.gc @@ -196,7 +196,7 @@ (s4-0 (the-as mei-ripple - (+ (the-as uint a1-6) (the-as uint (* (-> a1-6 ripple-offset) 16))) + (+ (the-as uint a1-6) (* (-> a1-6 ripple-offset) 16)) ) ) (gp-0 (-> v1-1 ripple)) diff --git a/test/decompiler/reference/engine/gfx/shrub/shrubbery-h_REF.gc b/test/decompiler/reference/engine/gfx/shrub/shrubbery-h_REF.gc index 9d2364d996..a8fcdb8299 100644 --- a/test/decompiler/reference/engine/gfx/shrub/shrubbery-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/shrub/shrubbery-h_REF.gc @@ -224,15 +224,10 @@ (dst (the-as qword - (+ - (the-as uint (-> obj header)) - (the-as uint (* (+ (-> obj header data 1) 1) 16)) - ) + (+ (the-as uint (-> obj header)) (* (+ (-> obj header data 1) 1) 16)) ) ) - (tex-dst - (the-as qword (+ (the-as int dst) (the-as int (* shader-count 64)))) - ) + (tex-dst (the-as qword (+ (the-as int dst) (* shader-count 64)))) (src (the-as qword (-> obj textures))) ) (dotimes (a0-1 (the-as int shader-count)) diff --git a/test/decompiler/reference/engine/gfx/sprite/sprite_REF.gc b/test/decompiler/reference/engine/gfx/sprite/sprite_REF.gc index 1fc0abc77b..3997c82951 100644 --- a/test/decompiler/reference/engine/gfx/sprite/sprite_REF.gc +++ b/test/decompiler/reference/engine/gfx/sprite/sprite_REF.gc @@ -106,7 +106,7 @@ (object-new allocation type-to-make - (the-as int (+ (-> type-to-make size) (the-as uint (* (+ size -1) 4)))) + (the-as int (+ (-> type-to-make size) (* (+ size -1) 4))) ) ) ) @@ -460,7 +460,7 @@ int (+ (-> type-to-make size) - (the-as uint (* (+ (+ adgif-data-size -1) vec-data-size) 16)) + (* (+ adgif-data-size -1 vec-data-size) 16) ) ) ) @@ -496,7 +496,7 @@ int (+ (-> type-to-make size) - (the-as uint (* (+ (+ adgif-data-size -1) vec-data-size) 16)) + (* (+ adgif-data-size -1 vec-data-size) 16) ) ) ) @@ -739,7 +739,7 @@ (-> pkt2 dma) (new 'static 'dma-tag :id (dma-tag-id ref) - :addr (+ (-> sprites vec-data) (the-as uint (* 48 start-sprite-idx))) + :addr (+ (-> sprites vec-data) (* 48 start-sprite-idx)) :qwc qwc-pkt2 ) ) @@ -758,7 +758,7 @@ (-> pkt3 dma) (new 'static 'dma-tag :id (dma-tag-id ref) - :addr (+ (-> sprites adgif-data) (the-as uint (* 80 start-sprite-idx))) + :addr (+ (-> sprites adgif-data) (* 80 start-sprite-idx)) :qwc qwc-pkt3 ) ) @@ -854,7 +854,7 @@ (-> pkt2 dma) (new 'static 'dma-tag :id (dma-tag-id ref) - :addr (+ (-> sprites vec-data) (the-as uint (* 48 start-sprite-idx))) + :addr (+ (-> sprites vec-data) (* 48 start-sprite-idx)) :qwc qwc-pkt2 ) ) @@ -873,7 +873,7 @@ (-> pkt3 dma) (new 'static 'dma-tag :id (dma-tag-id ref) - :addr (+ (-> sprites adgif-data) (the-as uint (* 80 start-sprite-idx))) + :addr (+ (-> sprites adgif-data) (* 80 start-sprite-idx)) :qwc qwc-pkt3 ) ) diff --git a/test/decompiler/reference/engine/gfx/texture_REF.gc b/test/decompiler/reference/engine/gfx/texture_REF.gc index b69a082cc0..62b63d4367 100644 --- a/test/decompiler/reference/engine/gfx/texture_REF.gc +++ b/test/decompiler/reference/engine/gfx/texture_REF.gc @@ -23,7 +23,7 @@ ;; definition for method 5 of type texture-page ;; INFO: Return type mismatch uint vs int. (defmethod asize-of texture-page ((obj texture-page)) - (the-as int (+ (-> obj type size) (the-as uint (* (-> obj length) 4)))) + (the-as int (+ (-> obj type size) (* (-> obj length) 4))) ) ;; definition for method 8 of type texture-page @@ -638,10 +638,10 @@ (let* ((block-width (gs-block-width tex-format)) (block-height (gs-block-height tex-format)) (real-width - (* (/ (+ (+ block-width -1) tex-width) block-width) block-width) + (* (/ (+ block-width -1 tex-width) block-width) block-width) ) (real-height - (* (/ (+ (+ block-height -1) tex-height) block-height) block-height) + (* (/ (+ block-height -1 tex-height) block-height) block-height) ) (width-blocks (/ real-width block-width)) (height-blocks (/ real-height block-height)) @@ -660,11 +660,9 @@ (defun gs-blocks-used ((tex-width int) (tex-height int) (tex-format gs-psm)) (let* ((page-width (gs-page-width tex-format)) (page-height (gs-page-height tex-format)) - (real-width - (* (/ (+ (+ page-width -1) tex-width) page-width) page-width) - ) + (real-width (* (/ (+ page-width -1 tex-width) page-width) page-width)) (real-height - (* (/ (+ (+ page-height -1) tex-height) page-height) page-height) + (* (/ (+ page-height -1 tex-height) page-height) page-height) ) (width-blocks (/ real-width page-width)) (height-blocks (/ real-height page-height)) @@ -673,7 +671,8 @@ ) (if (or (< a0-9 page-width) (< a1-7 page-height)) (+ - (+ (gs-largest-block a0-9 a1-7 tex-format) 1) + (gs-largest-block a0-9 a1-7 tex-format) + 1 (* (+ (* width-blocks height-blocks) -1) 32) ) (* (* height-blocks width-blocks) 32) @@ -792,7 +791,7 @@ ((obj texture-page) (segment-count int) (additional-size int)) (let ((v1-0 additional-size)) (dotimes (a2-1 segment-count) - (+! v1-0 (the-as int (-> obj segment a2-1 size))) + (+! v1-0 (-> obj segment a2-1 size)) ) (logand (/ v1-0 64) 63) ) @@ -1009,11 +1008,7 @@ ) ) (dotimes (upload-chunk-idx chunk-count) - (let - ((current-dest-chunk - (+ tex-dest-base-chunk (the-as uint upload-chunk-idx)) - ) - ) + (let ((current-dest-chunk (+ tex-dest-base-chunk upload-chunk-idx))) (cond ((zero? chunks-to-upload-count) (when (!= (-> pool ids current-dest-chunk) tex-id) @@ -1025,10 +1020,7 @@ ((= (-> pool ids current-dest-chunk) tex-id) (upload-vram-data dma-buf - (the-as - int - (* (+ tex-dest-base-chunk (the-as uint first-chunk-idx-to-upload)) 64) - ) + (the-as int (* (+ tex-dest-base-chunk first-chunk-idx-to-upload) 64)) (&+ tex-data (shl first-chunk-idx-to-upload 14)) (* chunks-to-upload-count 32) ) @@ -1046,10 +1038,7 @@ (when (nonzero? chunks-to-upload-count) (upload-vram-data dma-buf - (the-as - int - (* (+ tex-dest-base-chunk (the-as uint first-chunk-idx-to-upload)) 64) - ) + (the-as int (* (+ tex-dest-base-chunk first-chunk-idx-to-upload) 64)) (&+ tex-data (shl first-chunk-idx-to-upload 14)) (* chunks-to-upload-count 32) ) @@ -1161,7 +1150,7 @@ ) ) (dotimes (chunk-idx upload-chunks) - (let ((vram-chunk (+ dest-block (the-as uint chunk-idx)))) + (let ((vram-chunk (+ dest-block chunk-idx))) (cond ((zero? modified-chunk-count) (when (!= (-> pool ids vram-chunk) page-id) @@ -1223,10 +1212,7 @@ ) ) (dotimes (upload-chunk-idx chunk-count) - (set! - current-dest-chunk - (+ tex-dest-base-chunk (the-as uint upload-chunk-idx)) - ) + (set! current-dest-chunk (+ tex-dest-base-chunk upload-chunk-idx)) (set! need-tex (nonzero? (logand allow-cache-mask (ash 1 upload-chunk-idx))) @@ -1242,10 +1228,7 @@ ((or (= (-> pool ids current-dest-chunk) page-id) (not need-tex)) (upload-vram-data dma-buf - (the-as - int - (* (+ tex-dest-base-chunk (the-as uint first-chunk-idx-to-upload)) 64) - ) + (the-as int (* (+ tex-dest-base-chunk first-chunk-idx-to-upload) 64)) (&+ tex-data (shl first-chunk-idx-to-upload 14)) (* chunks-to-upload-count 32) ) @@ -1262,10 +1245,7 @@ (when (nonzero? chunks-to-upload-count) (upload-vram-data dma-buf - (the-as - int - (* (+ tex-dest-base-chunk (the-as uint first-chunk-idx-to-upload)) 64) - ) + (the-as int (* (+ tex-dest-base-chunk first-chunk-idx-to-upload) 64)) (&+ tex-data (shl first-chunk-idx-to-upload 14)) (* chunks-to-upload-count 32) ) @@ -1353,11 +1333,8 @@ ((< (the-as uint #x24000) page-seg-2-size) (let ((after-seg-2-data (&+ (-> page segment 2 block-data) #x90000))) (let ((seg-2-data (-> page segment 2 block-data))) - (set! (-> page segment 2 size) (+ -147456 (the-as int page-seg-2-size))) - (set! - (-> page segment 2 dest) - (+ #x24000 (the-as int (-> pool segment-near dest))) - ) + (set! (-> page segment 2 size) (+ -147456 page-seg-2-size)) + (set! (-> page segment 2 dest) (+ #x24000 (-> pool segment-near dest))) (set! (-> heap current) (&+ (-> page segment 2 block-data) (* (-> page segment 2 size) 4)) @@ -1402,7 +1379,7 @@ (update-vram-pages pool (-> pool segment-near) page 2) (cond ((< (the-as uint #x24000) seg2-size) - (set! (-> page segment 2 size) (+ -147456 (the-as int seg2-size))) + (set! (-> page segment 2 size) (+ -147456 seg2-size)) (set! (-> heap current) (&+ (-> page segment 2 block-data) (* (-> page segment 2 size) 4)) @@ -2793,10 +2770,7 @@ (and main-font-tx (-> main-font-tx page) - (= - (-> obj cur) - (+ heap-before-font-tex (the-as int (-> main-font-tx page size))) - ) + (= (-> obj cur) (+ heap-before-font-tex (-> main-font-tx page size))) ) (set! (-> obj cur) heap-before-font-tex) (format 0 "ERROR: could not resize heap to remove gamefont.~%") @@ -2810,10 +2784,7 @@ ;; definition for method 5 of type texture-page-dir ;; INFO: Return type mismatch uint vs int. (defmethod asize-of texture-page-dir ((obj texture-page-dir)) - (the-as - int - (+ (-> texture-page-dir size) (the-as uint (* 12 (+ (-> obj length) -1)))) - ) + (the-as int (+ (-> texture-page-dir size) (* 12 (+ (-> obj length) -1)))) ) ;; definition for method 4 of type texture-page-dir @@ -2847,23 +2818,20 @@ (num-mips (-> tex num-mips)) ) (if (zero? seg-id) - (set! - (-> tex clutdest) - (+ (- (-> tex clutdest) dst-block) (the-as uint v1-0)) - ) + (set! (-> tex clutdest) (+ (- (-> tex clutdest) dst-block) v1-0)) ) (dotimes (mip-id (the-as int num-mips)) (let ((t4-0 mip-id) (t5-0 num-mips) ) (if (= seg-id (if (>= (the-as uint 2) t5-0) - (+ (- -1 t4-0) (the-as int t5-0)) + (+ (- -1 t4-0) t5-0) (max 0 (- 2 t4-0)) ) ) (set! (-> tex dest mip-id) - (+ (- (-> tex dest mip-id) dst-block) (the-as uint v1-0)) + (+ (- (-> tex dest mip-id) dst-block) v1-0) ) ) ) @@ -3181,13 +3149,13 @@ ((1) (set! (-> arg0 tex1 k) - (+ (+ (logand (ash s5-0 (- 5 (log2 s5-0))) 31) -350) (* (log2 s5-0) 32)) + (+ (logand (ash s5-0 (- 5 (log2 s5-0))) 31) -350 (* (log2 s5-0) 32)) ) ) (else (set! (-> arg0 tex1 k) - (+ (+ (logand (ash s5-0 (- 4 (log2 s5-0))) 15) -175) (* (log2 s5-0) 16)) + (+ (logand (ash s5-0 (- 4 (log2 s5-0))) 15) -175 (* (log2 s5-0) 16)) ) ) ) diff --git a/test/decompiler/reference/engine/gfx/tfrag/subdivide_REF.gc b/test/decompiler/reference/engine/gfx/tfrag/subdivide_REF.gc index 06b7a90e16..36689ee293 100644 --- a/test/decompiler/reference/engine/gfx/tfrag/subdivide_REF.gc +++ b/test/decompiler/reference/engine/gfx/tfrag/subdivide_REF.gc @@ -32,10 +32,10 @@ (when (nonzero? (+ - (+ - (+ (+ (-> stat groups) (-> stat fragments)) (-> stat tris)) - (-> stat dverts) - ) + (-> stat groups) + (-> stat fragments) + (-> stat tris) + (-> stat dverts) (-> stat instances) ) ) @@ -341,7 +341,7 @@ (when GSH_ENABLE (let ((bucket GSH_BUCKET)) (let ((which-stat GSH_WHICH_STAT)) - (set! gp-0 (+ (* bucket 2) (the-as uint which-stat))) + (set! gp-0 (+ (* bucket 2) which-stat)) ) (when GSH_MAX_DISPLAY (let @@ -432,10 +432,10 @@ ) (cond ((zero? a1-63) - (set! a0-64 (+ #x60020 (the-as int a0-64))) + (set! a0-64 (+ #x60020 a0-64)) ) ((= a1-63 1) - (set! a0-64 (+ #x300c0 (the-as int a0-64))) + (set! a0-64 (+ #x300c0 a0-64)) ) ) (set! (-> *perf-stats* data v1-27 select) a1-63) @@ -489,9 +489,9 @@ (.sync.l) (.sync.p) (.mfpc a0-1 pcr0) - (+! (-> v1-1 0 accum0) (the-as uint a0-1)) + (+! (-> v1-1 0 accum0) a0-1) (.mfpc a0-3 pcr1) - (+! (-> v1-1 0 accum1) (the-as uint a0-3)) + (+! (-> v1-1 0 accum1) a0-3) ) (label cfg-2) 0 @@ -534,7 +534,3 @@ 0 (none) ) - - - - diff --git a/test/decompiler/reference/engine/gfx/vis/bsp-h_REF.gc b/test/decompiler/reference/engine/gfx/vis/bsp-h_REF.gc index 03943fb843..63b5dd5c0c 100644 --- a/test/decompiler/reference/engine/gfx/vis/bsp-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/vis/bsp-h_REF.gc @@ -143,7 +143,7 @@ (format #t "_#x~X________________~%" arg1) (inspect arg1) (let ((s4-0 *print-column*)) - (set! *print-column* (+ *print-column* (the-as uint 64))) + (set! *print-column* (+ *print-column* 64)) (if (> (-> arg1 front) 0) (inspect-bsp-tree arg0 (the-as bsp-node (-> arg1 front))) (format #t "_#x~X________________~%" arg1) diff --git a/test/decompiler/reference/engine/gfx/wind-h_REF.gc b/test/decompiler/reference/engine/gfx/wind-h_REF.gc index 3be469c87a..fe51665394 100644 --- a/test/decompiler/reference/engine/gfx/wind-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/wind-h_REF.gc @@ -90,10 +90,7 @@ ;; definition for function wind-get-hashed-index (defun wind-get-hashed-index ((arg0 vector)) (logand - (+ - (+ (the int (-> arg0 x)) (the int (-> arg0 z))) - (the-as int (-> *wind-work* wind-time)) - ) + (+ (the int (-> arg0 x)) (the int (-> arg0 z)) (-> *wind-work* wind-time)) 63 ) ) diff --git a/test/decompiler/reference/engine/load/loader_REF.gc b/test/decompiler/reference/engine/load/loader_REF.gc index acf22c7bea..7d52b956c5 100644 --- a/test/decompiler/reference/engine/load/loader_REF.gc +++ b/test/decompiler/reference/engine/load/loader_REF.gc @@ -1317,12 +1317,9 @@ sv-56 (+ sv-56 - (the-as - int - (- - (-> *display* base-frame-counter) - (-> *display* old-base-frame-counter) - ) + (- + (-> *display* base-frame-counter) + (-> *display* old-base-frame-counter) ) ) ) diff --git a/test/decompiler/reference/engine/math/vector-h_REF.gc b/test/decompiler/reference/engine/math/vector-h_REF.gc index 90babba6ac..37aa746421 100644 --- a/test/decompiler/reference/engine/math/vector-h_REF.gc +++ b/test/decompiler/reference/engine/math/vector-h_REF.gc @@ -35,10 +35,7 @@ (object-new allocation type-to-make - (+ - (+ (/ (logand -8 (+ length 7)) 8) -1) - (the-as int (-> type-to-make size)) - ) + (+ (/ (logand -8 (+ length 7)) 8) -1 (-> type-to-make size)) ) ) ) @@ -58,10 +55,7 @@ (defmethod asize-of bit-array ((obj bit-array)) (the-as int - (+ - (-> obj type size) - (the-as uint (/ (logand -8 (+ (-> obj allocated-length) 7)) 8)) - ) + (+ (-> obj type size) (/ (logand -8 (+ (-> obj allocated-length) 7)) 8)) ) ) diff --git a/test/decompiler/reference/engine/nav/navigate-h_REF.gc b/test/decompiler/reference/engine/nav/navigate-h_REF.gc index 2bb027f290..e298ccdbcf 100644 --- a/test/decompiler/reference/engine/nav/navigate-h_REF.gc +++ b/test/decompiler/reference/engine/nav/navigate-h_REF.gc @@ -546,7 +546,7 @@ (object-new allocation type-to-make - (the-as int (+ (-> type-to-make size) (the-as uint (* sphere-count 16)))) + (the-as int (+ (-> type-to-make size) (* sphere-count 16))) ) ) ) diff --git a/test/decompiler/reference/engine/ps2/pad_REF.gc b/test/decompiler/reference/engine/ps2/pad_REF.gc index 5516706274..7f98946d1f 100644 --- a/test/decompiler/reference/engine/ps2/pad_REF.gc +++ b/test/decompiler/reference/engine/ps2/pad_REF.gc @@ -216,16 +216,13 @@ (-> pad buzz-time buzz-idx) (max (the-as int (-> pad buzz-time buzz-idx)) - (the-as int (+ (get-current-time) (the-as uint duration))) + (the-as int (+ (get-current-time) duration)) ) ) ) ((< (-> pad buzz-val buzz-idx) (the-as uint buzz-amount)) (set! (-> pad buzz-val buzz-idx) (the-as uint buzz-amount)) - (set! - (-> pad buzz-time buzz-idx) - (+ (get-current-time) (the-as uint duration)) - ) + (set! (-> pad buzz-time buzz-idx) (+ (get-current-time) duration)) ) ) 0 diff --git a/test/decompiler/reference/engine/ps2/rpc-h_REF.gc b/test/decompiler/reference/engine/ps2/rpc-h_REF.gc index 08d17e558d..cee95791f5 100644 --- a/test/decompiler/reference/engine/ps2/rpc-h_REF.gc +++ b/test/decompiler/reference/engine/ps2/rpc-h_REF.gc @@ -36,12 +36,7 @@ rpc-buffer ((allocation symbol) (type-to-make type) (arg0 uint) (arg1 uint)) (let* - ((a2-2 - (+ - (+ (-> type-to-make size) 63) - (the-as uint (* (the-as int arg0) (the-as int arg1))) - ) - ) + ((a2-2 (+ (-> type-to-make size) 63 (* (the-as int arg0) (the-as int arg1)))) (v0-0 (object-new allocation type-to-make (the-as int a2-2))) ) (set! (-> v0-0 elt-size) arg0) diff --git a/test/decompiler/reference/engine/ps2/timer_REF.gc b/test/decompiler/reference/engine/ps2/timer_REF.gc index 3fc1a64742..542c9f4019 100644 --- a/test/decompiler/reference/engine/ps2/timer_REF.gc +++ b/test/decompiler/reference/engine/ps2/timer_REF.gc @@ -100,10 +100,7 @@ (set! (-> arg0 begin-level) 0) 0 (.mfc0 a1-0 Count) - (+! - (-> arg0 prev-time-elapsed) - (the-as uint (- a1-0 (the-as int (-> arg0 start-time)))) - ) + (+! (-> arg0 prev-time-elapsed) (- a1-0 (the-as int (-> arg0 start-time)))) ) (the-as uint 0) ) @@ -130,10 +127,7 @@ (when (zero? (-> arg0 begin-level)) 0 (.mfc0 a1-0 Count) - (+! - (-> arg0 prev-time-elapsed) - (the-as uint (- a1-0 (the-as int (-> arg0 start-time)))) - ) + (+! (-> arg0 prev-time-elapsed) (- a1-0 (the-as int (-> arg0 start-time)))) ) (the-as uint 0) ) @@ -146,7 +140,7 @@ (when (> (-> arg0 begin-level) 0) 0 (.mfc0 v1-3 Count) - (+! v0-0 (the-as uint (- v1-3 (the-as int (-> arg0 start-time))))) + (+! v0-0 (- v1-3 (the-as int (-> arg0 start-time)))) ) v0-0 ) diff --git a/test/decompiler/reference/engine/sound/gsound_REF.gc b/test/decompiler/reference/engine/sound/gsound_REF.gc index 5d21c79aa9..6c006b9821 100644 --- a/test/decompiler/reference/engine/sound/gsound_REF.gc +++ b/test/decompiler/reference/engine/sound/gsound_REF.gc @@ -91,7 +91,7 @@ ;; definition for function new-sound-id (defun new-sound-id () - (set! *current-sound-id* (+ *current-sound-id* (the-as uint 1))) + (set! *current-sound-id* (+ *current-sound-id* 1)) (if (< (the-as int *current-sound-id*) #x10000) (set! *current-sound-id* (the-as sound-id #x10000)) ) @@ -840,8 +840,9 @@ (set! (-> obj play-time) (+ - (+ (-> *display* base-frame-counter) (-> obj time-base)) - (the-as uint (rand-vu-int-count (the-as int (-> obj time-random)))) + (-> *display* base-frame-counter) + (-> obj time-base) + (rand-vu-int-count (the-as int (-> obj time-random))) ) ) (set! (-> obj playing-id) (new-sound-id)) @@ -929,8 +930,9 @@ (set! (-> obj play-time) (+ - (+ (-> *display* base-frame-counter) (-> obj time-base)) - (the-as uint (rand-vu-int-count (the-as int (-> obj time-random)))) + (-> *display* base-frame-counter) + (-> obj time-base) + (rand-vu-int-count (the-as int (-> obj time-random))) ) ) ) diff --git a/test/decompiler/reference/engine/ui/credits_REF.gc b/test/decompiler/reference/engine/ui/credits_REF.gc index af1256340f..62b7490664 100644 --- a/test/decompiler/reference/engine/ui/credits_REF.gc +++ b/test/decompiler/reference/engine/ui/credits_REF.gc @@ -120,7 +120,7 @@ (set! (-> gp-0 origin x) -44.0) (set! (-> gp-0 origin y) 90.0) (dotimes (s4-1 3) - (let* ((s2-0 (+ (+ s4-1 3840) s5-1)) + (let* ((s2-0 (+ s4-1 3840 s5-1)) (s3-0 (lookup-text! *common-text* (the-as game-text-id s2-0) #t)) ) (when (= s2-0 3841) diff --git a/test/decompiler/reference/kernel/gcommon_REF.gc b/test/decompiler/reference/kernel/gcommon_REF.gc index b71b8ef378..c77f74d905 100644 --- a/test/decompiler/reference/kernel/gcommon_REF.gc +++ b/test/decompiler/reference/kernel/gcommon_REF.gc @@ -516,10 +516,7 @@ int (+ (-> obj type size) - (the-as - uint - (* (-> obj allocated-length) (the-as int (-> obj type heap-base))) - ) + (* (-> obj allocated-length) (the-as int (-> obj type heap-base))) ) ) ) @@ -536,14 +533,11 @@ type-to-make (the-as int - (+ - (-> type-to-make size) - (the-as uint (* len (if (type-type? content-type number) - (the-as int (-> content-type size)) - 4 - ) - ) - ) + (+ (-> type-to-make size) (* len (if (type-type? content-type number) + (the-as int (-> content-type size)) + 4 + ) + ) ) ) ) @@ -775,13 +769,10 @@ int (+ (-> array size) - (the-as - uint - (* (-> obj allocated-length) (if (type-type? (-> obj content-type) number) - (the-as int (-> obj content-type size)) - 4 - ) - ) + (* (-> obj allocated-length) (if (type-type? (-> obj content-type) number) + (the-as int (-> obj content-type size)) + 4 + ) ) ) ) diff --git a/test/decompiler/reference/kernel/gkernel_REF.gc b/test/decompiler/reference/kernel/gkernel_REF.gc index 2c62a30acc..5efeae6b9c 100644 --- a/test/decompiler/reference/kernel/gkernel_REF.gc +++ b/test/decompiler/reference/kernel/gkernel_REF.gc @@ -116,17 +116,11 @@ ) ((= (-> a2-0 heap-cur) - (+ - (+ (+ (-> obj stack-size) -4) (the-as int (-> obj type size))) - (the-as int obj) - ) + (+ (+ (-> obj stack-size) -4 (-> obj type size)) (the-as int obj)) ) (set! (-> a2-0 heap-cur) - (the-as - pointer - (+ (+ (+ arg0 -4) (the-as int (-> obj type size))) (the-as int obj)) - ) + (the-as pointer (+ (+ arg0 -4 (-> obj type size)) (the-as int obj))) ) (set! (-> obj stack-size) arg0) ) @@ -193,7 +187,7 @@ ;; definition for method 5 of type cpu-thread ;; INFO: Return type mismatch uint vs int. (defmethod asize-of cpu-thread ((obj cpu-thread)) - (the-as int (+ (-> obj type size) (the-as uint (-> obj stack-size)))) + (the-as int (+ (-> obj type size) (-> obj stack-size))) ) ;; definition for function remove-exit @@ -364,7 +358,7 @@ (object-new allocation type-to-make - (the-as int (+ (-> process size) (the-as uint arg1))) + (the-as int (+ (-> process size) arg1)) ) (+ (the-as int allocation) 4) ) @@ -473,7 +467,7 @@ (format #t "~Theap-top: #x~X~%" (-> obj heap-top)) (format #t "~Theap-cur: #x~X~%" (-> obj heap-cur)) (let ((s5-0 *print-column*)) - (set! *print-column* (+ *print-column* (the-as uint 64))) + (set! *print-column* (+ *print-column* 64)) (format #t "----~%") (inspect-process-heap obj) (format #t "----~%") @@ -487,7 +481,7 @@ ;; definition for method 5 of type process ;; INFO: Return type mismatch uint vs int. (defmethod asize-of process ((obj process)) - (the-as int (+ (-> process size) (the-as uint (-> obj allocated-length)))) + (the-as int (+ (-> process size) (-> obj allocated-length))) ) ;; definition for method 2 of type process @@ -641,10 +635,7 @@ type-to-make (the-as int - (+ - (+ (-> type-to-make size) (the-as uint (logand -16 (+ (* 12 arg1) 15)))) - (the-as uint arg2) - ) + (+ (-> type-to-make size) (logand -16 (+ (* 12 arg1) 15)) arg2) ) ) ) @@ -676,7 +667,7 @@ (set! (-> obj first-shrink) #f) (set! (-> obj heap base) - (the-as pointer (logand -16 (+ (+ (the-as int obj) 115) (* 12 arg1)))) + (the-as pointer (logand -16 (+ (the-as int obj) 115 (* 12 arg1)))) ) (set! (-> obj heap current) (-> obj heap base)) (set! (-> obj heap top) (&+ (-> obj heap base) arg2)) @@ -693,10 +684,7 @@ ((obj dead-pool-heap) (arg0 dead-pool-heap-rec)) (the-as pointer (if (-> arg0 process) (+ - (+ - (+ (-> arg0 process allocated-length) -4) - (the-as int (-> process size)) - ) + (+ (-> arg0 process allocated-length) -4 (-> process size)) (the-as int (-> arg0 process)) ) (-> obj heap base) @@ -861,14 +849,7 @@ (let ((s4-0 (-> obj dead-list next)) (s3-0 (the-as process #f)) ) - (let - ((s1-0 - (find-gap-by-size - obj - (the-as int (+ (-> process size) (the-as uint arg1))) - ) - ) - ) + (let ((s1-0 (find-gap-by-size obj (the-as int (+ (-> process size) arg1))))) (cond ((and s4-0 s1-0) (set! (-> obj dead-list next) (-> s4-0 next)) diff --git a/test/decompiler/reference/kernel/gstring_REF.gc b/test/decompiler/reference/kernel/gstring_REF.gc index 166efc62e0..471ec01584 100644 --- a/test/decompiler/reference/kernel/gstring_REF.gc +++ b/test/decompiler/reference/kernel/gstring_REF.gc @@ -16,7 +16,7 @@ ;; definition for method 5 of type string (defmethod asize-of string ((obj string)) - (+ (+ (-> obj allocated-length) 1) (the-as int (-> string size))) + (+ (-> obj allocated-length) 1 (-> string size)) ) ;; definition for function copy-string<-string @@ -46,7 +46,7 @@ (object-new allocation type-to-make - (+ (+ s2-1 1) (the-as int (-> type-to-make size))) + (+ s2-1 1 (-> type-to-make size)) ) ) ) @@ -57,11 +57,7 @@ (else (let ((v0-2 - (object-new - allocation - type-to-make - (+ (+ arg0 1) (the-as int (-> type-to-make size))) - ) + (object-new allocation type-to-make (+ arg0 1 (-> type-to-make size))) ) ) (set! (-> v0-2 allocated-length) arg0) @@ -532,34 +528,16 @@ (>= (-> next-char-2 0) (the-as uint 65)) (>= (the-as uint 70) (-> next-char-2 0)) ) - (set! - result - (the-as - int - (+ (+ (-> next-char-2 0) -55) (the-as uint (* result 16))) - ) - ) + (set! result (the-as int (+ (-> next-char-2 0) -55 (* result 16)))) ) ((and (>= (-> next-char-2 0) (the-as uint 97)) (>= (the-as uint 102) (-> next-char-2 0)) ) - (set! - result - (the-as - int - (+ (+ (-> next-char-2 0) -87) (the-as uint (* result 16))) - ) - ) + (set! result (the-as int (+ (-> next-char-2 0) -87 (* result 16)))) ) (else - (set! - result - (the-as - int - (+ (+ (-> next-char-2 0) -48) (the-as uint (* result 16))) - ) - ) + (set! result (the-as int (+ (-> next-char-2 0) -48 (* result 16)))) ) ) (set! next-char-2 (&-> next-char-2 1)) @@ -573,10 +551,7 @@ (>= (-> a0-4 0) (the-as uint 48)) (>= (the-as uint 49) (-> a0-4 0)) ) - (set! - result - (the-as int (+ (+ (-> a0-4 0) -48) (the-as uint (* result 2)))) - ) + (set! result (the-as int (+ (-> a0-4 0) -48 (* result 2)))) (set! a0-4 (&-> a0-4 1)) ) ) @@ -594,10 +569,7 @@ (>= (-> str-ptr 0) (the-as uint 48)) (>= (the-as uint 57) (-> str-ptr 0)) ) - (set! - result - (the-as int (+ (+ (-> str-ptr 0) -48) (the-as uint (* 10 result)))) - ) + (set! result (the-as int (+ (-> str-ptr 0) -48 (* 10 result)))) (set! str-ptr (&-> str-ptr 1)) ) ) diff --git a/test/decompiler/test_FormExpressionBuild.cpp b/test/decompiler/test_FormExpressionBuild.cpp index dd4b1872ce..ee4faf3c7a 100644 --- a/test/decompiler/test_FormExpressionBuild.cpp +++ b/test/decompiler/test_FormExpressionBuild.cpp @@ -62,7 +62,7 @@ TEST_F(FormRegressionTest, ExprAdditionMixed1) { " jr ra\n" " daddu sp, sp, r0"; std::string type = "(function int uint int)"; - std::string expected = "(+ arg0 (the-as int arg1))"; + std::string expected = "(+ arg0 arg1)"; test_with_expr(func, type, expected); } @@ -73,7 +73,7 @@ TEST_F(FormRegressionTest, ExprAdditionMixed2) { " jr ra\n" " daddu sp, sp, r0"; std::string type = "(function uint int uint)"; - std::string expected = "(+ arg0 (the-as uint arg1))"; + std::string expected = "(+ arg0 arg1)"; test_with_expr(func, type, expected); } @@ -106,7 +106,7 @@ TEST_F(FormRegressionTest, ExprAdditionMixed1WrongReturn) { " jr ra\n" " daddu sp, sp, r0"; std::string type = "(function int uint uint)"; - std::string expected = "(the-as uint (+ arg0 (the-as int arg1)))"; + std::string expected = "(the-as uint (+ arg0 arg1))"; test_with_expr(func, type, expected); } @@ -117,7 +117,7 @@ TEST_F(FormRegressionTest, ExprAdditionMixed2WrongReturn) { " jr ra\n" " daddu sp, sp, r0"; std::string type = "(function uint int int)"; - std::string expected = "(the-as int (+ arg0 (the-as uint arg1)))"; + std::string expected = "(the-as int (+ arg0 arg1))"; test_with_expr(func, type, expected); } @@ -1660,12 +1660,11 @@ TEST_F(FormRegressionTest, ExprInlineArrayMethod5) { std::string type = "(function inline-array-class int)"; std::string expected = - "(the-as int\n" - " (+ (-> arg0 type size)\n" - " (the-as uint\n" - " (* (-> arg0 allocated-length)" - " (the-as int (-> arg0 type heap-base)))\n" - " )\n" + "(the-as\n" + " int\n" + " (+\n" + " (-> arg0 type size)\n" + " (* (-> arg0 allocated-length) (the-as int (-> arg0 type heap-base)))\n" " )\n" " )"; test_with_expr(func, type, expected, true, "inline-array-class"); @@ -1735,12 +1734,12 @@ TEST_F(FormRegressionTest, ExprArrayMethod0) { " (object-new\n" " arg0\n" " arg1\n" - " (the-as\n" - " int\n" - " (+\n" - " (-> arg1 size)\n" - " (the-as uint (* arg3 (if (type-type? arg2 number) (the-as int (-> arg2 size)) 4)))\n" - " )\n" + " (the-as int (+ (-> arg1 size) (* arg3 (if (type-type? arg2 number)\n" + " (the-as int (-> arg2 size))\n" + " 4\n" + " )\n" + " )\n" + " )\n" " )\n" " )\n" " )\n" @@ -1807,22 +1806,16 @@ TEST_F(FormRegressionTest, ExprArrayMethod5) { std::string type = "(function array int)"; std::string expected = - " (the-as\n" - " int\n" - " (+\n" - " (-> array size)\n" - " (the-as\n" - " uint\n" - " (*\n" - " (-> arg0 allocated-length)\n" - " (if\n" - " (type-type? (-> arg0 content-type) number)\n" - " (the-as int (-> arg0 content-type size))\n" - " 4\n" - " )\n" - " )\n" - " )\n" + "(the-as\n" + " int\n" + " (+\n" + " (-> array size)\n" + " (* (-> arg0 allocated-length) (if (type-type? (-> arg0 content-type) number)\n" + " (the-as int (-> arg0 content-type size))\n" + " 4\n" + " )\n" " )\n" + " )\n" " )"; test_with_expr(func, type, expected, true, "array"); } diff --git a/test/decompiler/test_FormExpressionBuild2.cpp b/test/decompiler/test_FormExpressionBuild2.cpp index a2257e18c5..4b8433c069 100644 --- a/test/decompiler/test_FormExpressionBuild2.cpp +++ b/test/decompiler/test_FormExpressionBuild2.cpp @@ -990,8 +990,7 @@ TEST_F(FormRegressionTest, DmaBucketInsertTag) { std::string type = "(function dma-bucket int pointer (pointer dma-tag) pointer)"; std::string expected = "(begin\n" - " (let\n" - " ((v1-1 (the-as dma-bucket (+ (the-as uint arg0) (the-as uint (* arg1 16))))))\n" + " (let ((v1-1 (the-as dma-bucket (+ (the-as uint arg0) (* arg1 16)))))\n" " (set! (-> (the-as dma-bucket (-> v1-1 last)) next) (the-as uint arg2))\n" " (set! (-> v1-1 last) arg3)\n" " )\n" diff --git a/test/decompiler/test_FormExpressionBuildLong.cpp b/test/decompiler/test_FormExpressionBuildLong.cpp index 8735a08334..a5f2afb118 100644 --- a/test/decompiler/test_FormExpressionBuildLong.cpp +++ b/test/decompiler/test_FormExpressionBuildLong.cpp @@ -2342,25 +2342,16 @@ TEST_F(FormRegressionTest, ExprStringToInt) { " (>= (-> a0-3 0) (the-as uint 65))\n" " (>= (the-as uint 70) (-> a0-3 0))\n" " )\n" - " (set!\n" - " v0-0\n" - " (the-as int (+ (+ (-> a0-3 0) -55) (the-as uint (* v0-0 16))))\n" - " )\n" + " (set! v0-0 (the-as int (+ (-> a0-3 0) -55 (* v0-0 16))))\n" " )\n" " ((and\n" " (>= (-> a0-3 0) (the-as uint 97))\n" " (>= (the-as uint 102) (-> a0-3 0))\n" " )\n" - " (set!\n" - " v0-0\n" - " (the-as int (+ (+ (-> a0-3 0) -87) (the-as uint (* v0-0 16))))\n" - " )\n" + " (set! v0-0 (the-as int (+ (-> a0-3 0) -87 (* v0-0 16))))\n" " )\n" " (else\n" - " (set!\n" - " v0-0\n" - " (the-as int (+ (+ (-> a0-3 0) -48) (the-as uint (* v0-0 16))))\n" - " )\n" + " (set! v0-0 (the-as int (+ (-> a0-3 0) -48 (* v0-0 16))))\n" " )\n" " )\n" " (set! a0-3 (&-> a0-3 1))\n" @@ -2374,10 +2365,7 @@ TEST_F(FormRegressionTest, ExprStringToInt) { " (>= (-> a0-4 0) (the-as uint 48))\n" " (>= (the-as uint 49) (-> a0-4 0))\n" " )\n" - " (set!\n" - " v0-0\n" - " (the-as int (+ (+ (-> a0-4 0) -48) (the-as uint (* v0-0 2))))\n" - " )\n" + " (set! v0-0 (the-as int (+ (-> a0-4 0) -48 (* v0-0 2))))\n" " (set! a0-4 (&-> a0-4 1))\n" " )\n" " )\n" @@ -2392,7 +2380,7 @@ TEST_F(FormRegressionTest, ExprStringToInt) { " )\n" " (while\n" " (and (>= (-> a0-1 0) (the-as uint 48)) (>= (the-as uint 57) (-> a0-1 0)))\n" - " (set! v0-0 (the-as int (+ (+ (-> a0-1 0) -48) (the-as uint (* 10 v0-0)))))\n" + " (set! v0-0 (the-as int (+ (-> a0-1 0) -48 (* 10 v0-0))))\n" " (set! a0-1 (&-> a0-1 1))\n" " )\n" " )\n" diff --git a/test/decompiler/test_gkernel_decomp.cpp b/test/decompiler/test_gkernel_decomp.cpp index 797fa56ed9..de224bd341 100644 --- a/test/decompiler/test_gkernel_decomp.cpp +++ b/test/decompiler/test_gkernel_decomp.cpp @@ -270,17 +270,11 @@ TEST_F(FormRegressionTest, ExprMethod9Thread) { " )\n" " ((=\n" " (-> a2-0 heap-cur)\n" - " (+\n" - " (+ (+ (-> arg0 stack-size) -4) (the-as int (-> arg0 type size)))\n" - " (the-as int arg0)\n" - " )\n" + " (+ (+ (-> arg0 stack-size) -4 (-> arg0 type size)) (the-as int arg0))\n" " )\n" " (set!\n" " (-> a2-0 heap-cur)\n" - " (the-as\n" - " pointer\n" - " (+ (+ (+ arg1 -4) (the-as int (-> arg0 type size))) (the-as int arg0))\n" - " )\n" + " (the-as pointer (+ (+ arg1 -4 (-> arg0 type size)) (the-as int arg0)))\n" " )\n" " (set! (-> arg0 stack-size) arg1)\n" " )\n" @@ -383,7 +377,7 @@ TEST_F(FormRegressionTest, ExprMethod5CpuThread) { " jr ra\n" " daddu sp, sp, r0"; std::string type = "(function cpu-thread int)"; - std::string expected = "(the-as int (+ (-> arg0 type size) (the-as uint (-> arg0 stack-size))))"; + std::string expected = "(the-as int (+ (-> arg0 type size) (-> arg0 stack-size)))"; test_with_expr(func, type, expected, false); } @@ -638,11 +632,7 @@ TEST_F(FormRegressionTest, ExprMethod0Process) { std::string type = "(function symbol type basic int process)"; std::string expected = "(let ((v0-0 (if (= (-> arg0 type) symbol)\n" - " (object-new\n" - " arg0\n" - " arg1\n" - " (the-as int (+ (-> process size) (the-as uint arg3)))\n" - " )\n" + " (object-new arg0 arg1 (the-as int (+ (-> process size) arg3)))\n" " (+ (the-as int arg0) 4)\n" " )\n" " )\n" @@ -766,8 +756,7 @@ TEST_F(FormRegressionTest, ExprMethod5Process) { " jr ra\n" " daddu sp, sp, r0"; std::string type = "(function process int)"; - std::string expected = - "(the-as int (+ (-> process size) (the-as uint (-> arg0 allocated-length))))"; + std::string expected = "(the-as int (+ (-> process size) (-> arg0 allocated-length)))"; test_with_expr(func, type, expected); } @@ -1250,13 +1239,7 @@ TEST_F(FormRegressionTest, ExprMethod0DeadPoolHeap) { " (object-new\n" " arg0\n" " arg1\n" - " (the-as\n" - " int\n" - " (+\n" - " (+ (-> arg1 size) (the-as uint (logand -16 (+ (* 12 arg3) 15))))\n" - " (the-as uint arg4)\n" - " )\n" - " )\n" + " (the-as int (+ (-> arg1 size) (logand -16 (+ (* 12 arg3) 15)) arg4))\n" " )\n" " )\n" " )\n" @@ -1287,7 +1270,7 @@ TEST_F(FormRegressionTest, ExprMethod0DeadPoolHeap) { " (set! (-> obj first-shrink) #f)\n" " (set!\n" " (-> obj heap base)\n" - " (the-as pointer (logand -16 (+ (+ (the-as int obj) 115) (* 12 arg3))))\n" + " (the-as pointer (logand -16 (+ (the-as int obj) 115 (* 12 arg3))))\n" " )\n" " (set! (-> obj heap current) (-> obj heap base))\n" " (set! (-> obj heap top) (&+ (-> obj heap base) arg4))\n" @@ -1328,10 +1311,7 @@ TEST_F(FormRegressionTest, ExprMethod22DeadPoolHeap) { std::string expected = "(the-as pointer (if (-> arg1 process)\n" " (+\n" - " (+\n" - " (+ (-> arg1 process allocated-length) -4)\n" - " (the-as int (-> process size))\n" - " )\n" + " (+ (-> arg1 process allocated-length) -4 (-> process size))\n" " (the-as int (-> arg1 process))\n" " )\n" " (-> arg0 heap base)\n" @@ -2004,40 +1984,33 @@ TEST_F(FormRegressionTest, ExprMethod14DeadPoolHeap) { " daddiu sp, sp, 112"; std::string type = "(function dead-pool-heap type int process)"; std::string expected = - "(let\n" - " ((s4-0 (-> arg0 dead-list next)) (s3-0 (the-as process #f)))\n" - " (let\n" - " ((s1-0 (find-gap-by-size arg0 (the-as int (+ (-> process size) (the-as uint arg2))))))\n" + "(let ((s4-0 (-> arg0 dead-list next))\n" + " (s3-0 (the-as process #f))\n" + " )\n" + " (let ((s1-0 (find-gap-by-size arg0 (the-as int (+ (-> process size) arg2)))))\n" " (cond\n" " ((and s4-0 s1-0)\n" " (set! (-> arg0 dead-list next) (-> s4-0 next))\n" - " (let\n" - " ((v1-5 (-> s1-0 next)))\n" + " (let ((v1-5 (-> s1-0 next)))\n" " (set! (-> s1-0 next) s4-0)\n" " (set! (-> s4-0 next) v1-5)\n" - " (if v1-5 (set! (-> v1-5 prev) s4-0))\n" + " (if v1-5\n" + " (set! (-> v1-5 prev) s4-0)\n" + " )\n" " )\n" " (set! (-> s4-0 prev) s1-0)\n" - " (if\n" - " (= s1-0 (-> arg0 alive-list prev))\n" + " (if (= s1-0 (-> arg0 alive-list prev))\n" " (set! (-> arg0 alive-list prev) s4-0)\n" " )\n" - " (let\n" - " ((a0-4 (gap-location arg0 s1-0)))\n" + " (let ((a0-4 (gap-location arg0 s1-0)))\n" " (set!\n" " s3-0\n" - " ((method-of-type process new)\n" - " (the-as symbol a0-4)\n" - " process\n" - " (quote process)\n" - " arg2\n" - " )\n" + " ((method-of-type process new) (the-as symbol a0-4) process 'process arg2)\n" " )\n" " )\n" " (set! (-> s4-0 process) s3-0)\n" " (set! (-> s3-0 ppointer) (&-> s4-0 process))\n" - " (if\n" - " (= (-> arg0 first-gap) s1-0)\n" + " (if (= (-> arg0 first-gap) s1-0)\n" " (set! (-> arg0 first-gap) (find-gap arg0 s4-0))\n" " )\n" " (if\n" @@ -2052,11 +2025,9 @@ TEST_F(FormRegressionTest, ExprMethod14DeadPoolHeap) { " (set! (-> arg0 child) (&-> s4-0 process))\n" " )\n" " (else\n" - " (when\n" - " (and *debug-segment* (!= arg0 *debug-dead-pool*))\n" + " (when (and *debug-segment* (!= arg0 *debug-dead-pool*))\n" " (set! s3-0 (get-process *debug-dead-pool* arg1 arg2))\n" - " (if\n" - " (and s3-0 *vis-boot*)\n" + " (if (and s3-0 *vis-boot*)\n" " (format\n" " 0\n" " \"WARNING: ~A ~A had to be allocated from the debug pool, because ~A was " @@ -2070,8 +2041,7 @@ TEST_F(FormRegressionTest, ExprMethod14DeadPoolHeap) { " )\n" " )\n" " )\n" - " (if\n" - " s3-0\n" + " (if s3-0\n" " (set! (-> s3-0 type) arg1)\n" " (format\n" " 0\n"