From 3fbebd43092a1a9cae2ad120ca1303d56341f0ff Mon Sep 17 00:00:00 2001 From: Daniil Sedov Date: Sun, 21 Jul 2024 09:26:36 +0300 Subject: [PATCH] fix: div instruction parsing and add test with mathlib (#16) --- reference/opcodes.yaml | 2 +- src/codepage/opcodes.gen.ts | 2 +- src/codepage/opcodes.ts | 4 +- .../__snapshots__/decompileAll.spec.ts.snap | 1619 +++++++++++++++++ src/decompiler/__testdata__/mathlib.boc | Bin 0 -> 2918 bytes src/decompiler/__testdata__/mathlib.fif | 1295 +++++++++++++ src/decompiler/decompileAll.spec.ts | 6 + 7 files changed, 2925 insertions(+), 3 deletions(-) create mode 100644 src/decompiler/__testdata__/mathlib.boc create mode 100644 src/decompiler/__testdata__/mathlib.fif diff --git a/reference/opcodes.yaml b/reference/opcodes.yaml index d57b92f..49b9ff1 100644 --- a/reference/opcodes.yaml +++ b/reference/opcodes.yaml @@ -109,7 +109,7 @@ opcodes: MUL: # A.5.2. Division. - DIV: ["bool", "int", "bool", "int", "int"] + DIV: ["bool", "int", "bool", "int", "int", "int"] # A.5.3. Shifts, logical operations. LSHIFT: ["int"] diff --git a/src/codepage/opcodes.gen.ts b/src/codepage/opcodes.gen.ts index a5207a0..d196e3b 100644 --- a/src/codepage/opcodes.gen.ts +++ b/src/codepage/opcodes.gen.ts @@ -42,7 +42,7 @@ export type OpCodeWithArgs = | { code: 'PUSHCONT', args: [Cell, number, number, number, number] } | { code: 'ADDCONST', args: [number] } | { code: 'MULCONST', args: [number] } - | { code: 'DIV', args: [boolean, number, boolean, number, number] } + | { code: 'DIV', args: [boolean, number, boolean, number, number, number] } | { code: 'LSHIFT', args: [number] } | { code: 'RSHIFT', args: [number] } | { code: 'FITS', args: [number] } diff --git a/src/codepage/opcodes.ts b/src/codepage/opcodes.ts index a172bbf..b91bf57 100644 --- a/src/codepage/opcodes.ts +++ b/src/codepage/opcodes.ts @@ -329,13 +329,15 @@ CP0Auto.insertHex('a7', 8, (slice) => { return { code: 'MULCONST', args: [x] }; }); CP0Auto.insertHex('a8', 8, { code: 'MUL' }); + +// #A9 m:uint1 s:uint2 cdft:(Either [ d:uint2 f:uint2 ] [ d:uint2 f:uint2 tt:uint8 ]) CP0Auto.insertHex('A9', 8, (slice) => { let m = slice.loadBit(); let s = slice.loadUint(2); let c = slice.loadBit(); let d = slice.loadUint(2); let f = slice.loadUint(2); - return { code: 'DIV', args: [m, s, c, d, f] }; + return { code: 'DIV', args: [m, s, c, d, f, c ? slice.loadUint(8) : 0] }; }); // 11079680 (DUMMY) // 11132928 (DUMMY) diff --git a/src/decompiler/__snapshots__/decompileAll.spec.ts.snap b/src/decompiler/__snapshots__/decompileAll.spec.ts.snap index b094988..840c4fb 100644 --- a/src/decompiler/__snapshots__/decompileAll.spec.ts.snap +++ b/src/decompiler/__snapshots__/decompileAll.spec.ts.snap @@ -652,6 +652,1625 @@ DECLPROC seqno; }END>c" `; +exports[`decompileAll should decompile mathlib.fc 1`] = ` +"PROGRAM{ + DECLPROC recv_internal; + DECLPROC ?fun_ref_0318d2f33529c0c6; + DECLPROC ?fun_ref_0e3f3b547d0a4314; + DECLPROC ?fun_ref_0f0ebbb66387fc57; + DECLPROC ?fun_ref_14c8cb933d84cae0; + DECLPROC ?fun_ref_1b1ae470b4614553; + DECLPROC ?fun_ref_2051d9d821c3f770; + DECLPROC ?fun_ref_2367f6e37b0e6a76; + DECLPROC ?fun_ref_239e84369564e330; + DECLPROC ?fun_ref_318ac84049047cbe; + DECLPROC ?fun_ref_3449c496cc175763; + DECLPROC ?fun_ref_41d3f2ea6d56e172; + DECLPROC ?fun_ref_48cab849e3521372; + DECLPROC ?fun_ref_494e543f112ad30c; + DECLPROC ?fun_ref_5a712c8e35fef248; + DECLPROC ?fun_ref_5ba78fa4ab4ec6dc; + DECLPROC ?fun_ref_5c788425937a7d28; + DECLPROC ?fun_ref_5d3a4c29b0035181; + DECLPROC ?fun_ref_6405ea4d1c38698c; + DECLPROC ?fun_ref_6c2cc5b04a23eeb2; + DECLPROC ?fun_ref_7134bd42618a8d1e; + DECLPROC ?fun_ref_73739320b258991c; + DECLPROC ?fun_ref_7753d4b96608d450; + DECLPROC ?fun_ref_811ebbe381228c78; + DECLPROC ?fun_ref_87780ff3a5ebd2bc; + DECLPROC ?fun_ref_88faf969245bcd15; + DECLPROC ?fun_ref_8a8385f8d78f60b7; + DECLPROC ?fun_ref_8bf58ecefe2e19cb; + DECLPROC ?fun_ref_aa50613cca252c08; + DECLPROC ?fun_ref_afe5ab170f89ef23; + DECLPROC ?fun_ref_b03a280997c9cc26; + DECLPROC ?fun_ref_b2fd74bee4445ab9; + DECLPROC ?fun_ref_cdb28b381a5130bf; + DECLPROC ?fun_ref_d78034247225d612; + DECLPROC ?fun_ref_da70c8217d8f9a46; + DECLPROC ?fun_ref_e11f9343f87d5b4b; + DECLPROC ?fun_ref_e9b023c94244cb2e; + DECLPROC ?fun_ref_eabdf5efadfce810; + DECLPROC ?fun_ref_ec287b9511e936b8; + DECLPROC ?fun_ref_f8345f3d64016266; + DECLPROC ?fun_ref_fbd4cc263c208ffd; + recv_internal PROC:<{ + ?fun_ref_d78034247225d612 INLINECALLDICT + 1 PUSHINT + ?fun_ref_d78034247225d612 INLINECALLDICT + 248 PUSHPOW2 + ?fun_ref_d78034247225d612 INLINECALLDICT + 255 PUSHPOW2 + ?fun_ref_d78034247225d612 INLINECALLDICT + s0 PUSH + true 1 true 1 1 247 DIV + s0 PUSH + true 1 true 1 1 254 DIV + ?fun_ref_2051d9d821c3f770 INLINECALLDICT + ?fun_ref_aa50613cca252c08 INLINECALLDICT + ?fun_ref_e9b023c94244cb2e INLINECALLDICT + ?fun_ref_0e3f3b547d0a4314 INLINECALLDICT + ?fun_ref_6405ea4d1c38698c INLINECALLDICT + ?fun_ref_2051d9d821c3f770 INLINECALLDICT + s0 POP + ?fun_ref_2051d9d821c3f770 INLINECALLDICT + s0 POP + false 1 true 1 1 7 DIV + ?fun_ref_aa50613cca252c08 INLINECALLDICT + s0 POP + ?fun_ref_aa50613cca252c08 INLINECALLDICT + s0 POP + false 1 true 1 1 5 DIV + ?fun_ref_7753d4b96608d450 INLINECALLDICT + ?fun_ref_88faf969245bcd15 INLINECALLDICT + ?fun_ref_eabdf5efadfce810 INLINECALLDICT + ?fun_ref_14c8cb933d84cae0 INLINECALLDICT + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + 251 PUSHPOW2 + 33 PUSHINT + 250 LSHIFT + s0 PUSH + 14 PUSHINT + <{ + s1 s2 XCPU + SUB + s0 s5 s5 PU2XC + true 2 true 1 1 235 DIV + SUB + }> PUSHCONT + REPEAT + 2 1 BLKDROP2 + 3 PUSHINT + 254 LSHIFT + s2 s3 PUXC + true 2 true 1 1 239 DIV + SUB + s2 PUSH + 1 RSHIFT + s2 PUSH + false 1 true 1 1 9 DIV + s1 s2 XCHG + SUB + s1 s2 XCHG + true 0 false 1 1 0 DIV + false 1 true 1 1 8 DIV + ADD + ?fun_ref_41d3f2ea6d56e172 INLINECALLDICT + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + 251 PUSHPOW2 + 41 PUSHINT + 250 LSHIFT + s0 PUSH + 18 PUSHINT + <{ + s1 s2 XCPU + SUB + s0 s5 s5 PU2XC + true 2 true 1 1 239 DIV + SUB + }> PUSHCONT + REPEAT + 2 1 BLKDROP2 + 3 PUSHINT + 254 LSHIFT + s2 s3 PUXC + true 2 true 1 1 243 DIV + SUB + s2 PUSH + 1 RSHIFT + s2 PUSH + false 1 true 1 1 5 DIV + s1 s2 XCHG + SUB + s1 s2 XCHG + true 0 false 1 1 0 DIV + false 1 true 1 1 4 DIV + ADD + ?fun_ref_3449c496cc175763 INLINECALLDICT + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + 251 PUSHPOW2 + 33 PUSHINT + 250 LSHIFT + s0 PUSH + 14 PUSHINT + <{ + s1 s2 XCPU + SUB + s0 s5 s5 PU2XC + true 2 true 1 1 235 DIV + SUB + }> PUSHCONT + REPEAT + 2 1 BLKDROP2 + 3 PUSHINT + 254 LSHIFT + s2 s3 PUXC + true 2 true 1 1 239 DIV + SUB + s2 PUSH + 1 RSHIFT + s2 PUSH + false 1 true 1 1 9 DIV + s1 s2 XCHG + SUB + s1 s2 XCHG + true 0 false 1 1 0 DIV + false 1 true 1 1 8 DIV + ADD + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + s0 PUSH + false 1 true 1 1 8 DIV + 255 PUSHPOW2 + ADD + s2 PUSH + 1 RSHIFT + s2 s1 PUSH2 + true 0 false 1 1 0 DIV + false 1 true 1 1 7 DIV + s1 s3 XCHG + SUB + s1 PUSH + 1 RSHIFT + s0 s2 s5 XCPUXC + true 0 false 1 1 0 DIV + false 1 true 1 1 7 DIV + SUB + ?fun_ref_318ac84049047cbe INLINECALLDICT + ?fun_ref_239e84369564e330 INLINECALLDICT + ?fun_ref_2367f6e37b0e6a76 INLINECALLDICT + ?fun_ref_b03a280997c9cc26 INLINECALLDICT + ?fun_ref_0f0ebbb66387fc57 INLINECALLDICT + ?fun_ref_0f0ebbb66387fc57 INLINECALLDICT + s0 POP + ?fun_ref_0f0ebbb66387fc57 INLINECALLDICT + s1 POP + ?fun_ref_e11f9343f87d5b4b INLINECALLDICT + ?fun_ref_8bf58ecefe2e19cb INLINECALLDICT + ?fun_ref_fbd4cc263c208ffd INLINECALLDICT + s1 s1 PUSH2 + true 1 true 1 1 255 DIV + 254 PUSHPOW2 + s0 s2 PUSH2 + false 0 false 1 1 0 DIV + 255 PUSHPOW2 + ADD + s3 PUSH + -1 ADD + <{ + s2 s1 PUXC + true 2 true 1 1 241 DIV + s1 s1 PUXC + SUB + s3 PUSH + -1 ADD + s4 s4 XCPU + true 0 false 1 1 0 DIV + s1 PUSH + ADD + }> PUSHCONT + REPEAT + s1 POP + s2 POP + s0 PUSH + false 1 true 1 1 11 DIV + s1 s2 XCHG + SUB + s2 PUSH + ROTREV + true 0 false 1 1 0 DIV + false 1 true 1 1 11 DIV + ADD + ?fun_ref_afe5ab170f89ef23 INLINECALLDICT + ?fun_ref_0318d2f33529c0c6 INLINECALLDICT + 1 PUSHINT + s0 s1 XCHG + <{ + 33 MULCONST + }> PUSHCONT + REPEAT + 5 PUSHINT + false 0 false 3 0 0 DIV + 1 PUSHINT + s0 s1 XCHG + <{ + 33 MULCONST + }> PUSHCONT + REPEAT + s0 s1 XCHG + <{ + 39135393 PUSHINT + MUL + }> PUSHCONT + REPEAT + ?fun_ref_1b1ae470b4614553 INLINECALLDICT + ?fun_ref_ec287b9511e936b8 INLINECALLDICT + ?fun_ref_48cab849e3521372 INLINECALLDICT + ?fun_ref_87780ff3a5ebd2bc INLINECALLDICT + ?fun_ref_48cab849e3521372 INLINECALLDICT + 248 PUSHINT + SUB + 248 LSHIFT + s0 s1 XCHG + false 1 true 1 1 7 DIV + ADD + ?fun_ref_811ebbe381228c78 INLINECALLDICT + ?fun_ref_73739320b258991c INLINECALLDICT + s1 s1 PUSH2 + true 1 true 1 1 255 DIV + 254 PUSHPOW2 + s0 s2 PUSH2 + false 0 false 1 1 0 DIV + 255 PUSHPOW2 + ADD + s3 PUSH + -1 ADD + <{ + s2 s1 PUXC + true 2 true 1 1 241 DIV + s1 s1 PUXC + ADD + s3 PUSH + -1 ADD + s4 s4 XCPU + true 0 false 1 1 0 DIV + s1 PUSH + ADD + }> PUSHCONT + REPEAT + s1 POP + s2 POP + s0 PUSH + false 1 true 1 1 11 DIV + s1 s2 XCHG + ADD + s2 PUSH + ROTREV + true 0 false 1 1 0 DIV + false 1 true 1 1 11 DIV + SUB + ?fun_ref_5d3a4c29b0035181 INLINECALLDICT + ?fun_ref_8a8385f8d78f60b7 INLINECALLDICT + ?fun_ref_b2fd74bee4445ab9 INLINECALLDICT + ?fun_ref_6c2cc5b04a23eeb2 INLINECALLDICT + ?fun_ref_7134bd42618a8d1e INLINECALLDICT + ?fun_ref_5c788425937a7d28 INLINECALLDICT + ?fun_ref_494e543f112ad30c INLINECALLDICT + ?fun_ref_5ba78fa4ab4ec6dc INLINECALLDICT + 7 LSHIFT + ?fun_ref_494e543f112ad30c INLINECALLDICT + false 1 true 1 1 6 DIV + 7 LSHIFT + ?fun_ref_5ba78fa4ab4ec6dc INLINECALLDICT + false 1 true 1 1 5 DIV + ?fun_ref_cdb28b381a5130bf INLINECALLDICT + ?fun_ref_da70c8217d8f9a46 INLINECALLDICT + ?fun_ref_5a712c8e35fef248 INLINECALLDICT + ?fun_ref_f8345f3d64016266 INLINECALLDICT + RANDU256 + 8 RSHIFT + ?fun_ref_5a712c8e35fef248 INLINECALLDICT + false 1 true 1 1 3 DIV + ?fun_ref_f8345f3d64016266 INLINECALLDICT + false 1 true 1 1 3 DIV + }> + ?fun_ref_0318d2f33529c0c6 PROCREF:<{ + s0 PUSH + UBITSIZE + 8 PUSHPOW2 + s1 PUSH + SUB + s1 s2 XCHG + LSHIFTX + 256 PUSHNEGPOW2 + s1 PUSH + 249 RSHIFT + 91 LESSINT + <{ + 1 RSHIFT + s0 s2 XCHG + -1 ADD + s0 s2 XCHG + }> PUSHCONT + IF + TUCK + ADD + s0 PUSH + 1 LSHIFT + s0 s1 XCHG + 1 RSHIFT + ROT + SUB + true 2 true 1 1 255 DIV + 36 PUSHINT + ?fun_ref_fbd4cc263c208ffd INLINECALLDICT + s0 s1 XCHG + }> + ?fun_ref_0e3f3b547d0a4314 PROCREF:<{ + 115194597005316551477397594802136977648153890007566736408151129975021336532841 PUSHINT + }> + ?fun_ref_0f0ebbb66387fc57 PROCREF:<{ + ?fun_ref_aa50613cca252c08 INLINECALLDICT + ROTREV + true 2 true 3 1 6 DIV + 1 LSHIFT + s1 s4 PUXC + true 1 true 1 1 126 DIV + s1 s2 XCHG + SUB + ?fun_ref_2367f6e37b0e6a76 INLINECALLDICT + 248 PUSHPOW2 + s0 s1 XCHG + false 1 true 1 1 8 DIV + SUB + s0 s1 XCHG + false 1 true 1 1 7 DIV + s0 s2 XCHG + 3 PUSHINT + AND + <{ + s0 s1 XCHG + -1 MULCONST + }> PUSHCONT + REPEAT + }> + ?fun_ref_14c8cb933d84cae0 PROCREF:<{ + false 1 true 3 1 247 DIV + ?fun_ref_2051d9d821c3f770 INLINECALLDICT + s0 POP + true 1 true 1 1 246 DIV + ?fun_ref_88faf969245bcd15 INLINECALLDICT + 9 PUSHINT + s2 PUSH + SUB + false 1 false 1 1 0 DIV + 248 PUSHINT + ROT + ADD + -1 PUSHINT + s0 s1 XCHG + LSHIFTX + SUB + }> + ?fun_ref_1b1ae470b4614553 PROCREF:<{ + s0 PUSH + UBITSIZE + -1 ADD + 8 PUSHPOW2DEC + s1 PUSH + SUB + s1 s2 XCHG + LSHIFTX + 2873 PUSHINT + 244 LSHIFT + DUP2 + SUB + 1 RSHIFT + s0 PUSH + 65 PUSHINT + s0 s3 XCHG + ADD + s1 s2 XCHG + true 0 false 1 1 0 DIV + 11 ADD + s0 PUSH + 5 PUSHINT + false 0 false 3 0 0 DIV + 1 PUSHINT + s0 s1 XCHG + <{ + 33 MULCONST + }> PUSHCONT + REPEAT + s0 s1 XCHG + <{ + 39135393 PUSHINT + MUL + }> PUSHCONT + REPEAT + 51 PUSHINT + s2 PUSH + SUB + 5 MULCONST + LSHIFTX + s2 s2 XCPU + SUB + s0 PUSH + 4 LSHIFT + s0 s1 XCHG + 1 RSHIFT + s0 s3 XCHG2 + ADD + s1 s2 XCHG + true 2 true 1 1 255 DIV + 18 PUSHINT + ?fun_ref_afe5ab170f89ef23 INLINECALLDICT + }> + ?fun_ref_2051d9d821c3f770 PROCREF:<{ + 80260960185991308862233904206310070533990667611589946606122867505419956976172 PUSHINT + -32272921378999278490133606779486332143 PUSHINT + }> + ?fun_ref_2367f6e37b0e6a76 PROCREF:<{ + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + 251 PUSHPOW2 + 33 PUSHINT + 250 LSHIFT + s0 PUSH + 14 PUSHINT + <{ + s1 s2 XCPU + SUB + s0 s5 s5 PU2XC + true 2 true 1 1 235 DIV + SUB + }> PUSHCONT + REPEAT + 2 1 BLKDROP2 + 3 PUSHINT + 254 LSHIFT + s2 s3 PUXC + true 2 true 1 1 239 DIV + SUB + s2 PUSH + 1 RSHIFT + s2 PUSH + false 1 true 1 1 9 DIV + s1 s2 XCHG + SUB + s1 s2 XCHG + true 0 false 1 1 0 DIV + false 1 true 1 1 8 DIV + ADD + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + s0 PUSH + false 1 true 1 1 8 DIV + 255 PUSHPOW2 + ADD + s2 PUSH + 1 RSHIFT + s2 s1 PUSH2 + true 0 false 1 1 0 DIV + false 1 true 1 1 7 DIV + s1 s3 XCHG + SUB + s1 PUSH + 1 RSHIFT + s0 s2 s5 XCPUXC + true 0 false 1 1 0 DIV + false 1 true 1 1 7 DIV + SUB + 7 PUSHINT + 3 PUSHINT + <{ + s2 s2 PUSH2 + true 1 true 1 1 255 DIV + s3 s4 PUXC + true 1 true 1 1 255 DIV + s1 PUSH + false 1 false 1 1 0 DIV + s1 s3 XCHG + SUB + s0 s2 XCHG + -2 ADD + }> PUSHCONT + REPEAT + s0 POP + }> + ?fun_ref_239e84369564e330 PROCREF:<{ + s1 PUSH + ABS + ?fun_ref_0e3f3b547d0a4314 INLINECALLDICT + true 2 true 3 1 1 DIV + 1 LSHIFT + ROT + ADD + ?fun_ref_318ac84049047cbe INLINECALLDICT + -1 PUSHINT + 0 PUSHINT + 1 PUSHINT + s0 s5 XCHG + <{ + s1 PUSH + 63 MULCONST + s1 PUSH + 4 LSHIFT + SUB + s0 s2 XCHG + 4 LSHIFT + s0 s1 XCHG + 63 MULCONST + ADD + s0 s4 XCHG + 65 MULCONST + s0 s4 XCHG + }> PUSHCONT + REPEAT + s4 PUSH + true 2 true 3 1 255 DIV + s5 PUSH + true 2 true 1 1 6 DIV + s2 s5 XCPU + true 2 true 3 1 255 DIV + s0 s6 XCHG2 + true 2 true 1 1 6 DIV + s0 s6 XCHG + SGN + s1 s3 PUSH2 + true 1 true 1 1 255 DIV + s0 s3 XCHG2 + SUB + false 1 true 1 1 3 DIV + s5 s4 PUSH2 + true 1 true 1 1 255 DIV + SUB + false 1 true 1 1 2 DIV + s1 PUSH + SUB + s1 s2 XCHG + MUL + s4 s4 PUXC + true 1 true 1 1 255 DIV + s0 s5 XCHG2 + SUB + false 1 true 1 1 3 DIV + s4 s2 XCHG2 + true 1 true 1 1 255 DIV + ADD + false 1 true 1 1 2 DIV + SUB + }> + ?fun_ref_318ac84049047cbe PROCREF:<{ + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + 251 PUSHPOW2 + 33 PUSHINT + 250 LSHIFT + s0 PUSH + 14 PUSHINT + <{ + s1 s2 XCPU + SUB + s0 s5 s5 PU2XC + true 2 true 1 1 235 DIV + SUB + }> PUSHCONT + REPEAT + 2 1 BLKDROP2 + 3 PUSHINT + 254 LSHIFT + s2 s3 PUXC + true 2 true 1 1 239 DIV + SUB + s2 PUSH + 1 RSHIFT + s2 PUSH + false 1 true 1 1 9 DIV + s1 s2 XCHG + SUB + s1 s2 XCHG + true 0 false 1 1 0 DIV + false 1 true 1 1 8 DIV + ADD + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + s0 PUSH + false 1 true 1 1 8 DIV + 255 PUSHPOW2 + ADD + s2 PUSH + 1 RSHIFT + s2 s1 PUSH2 + true 0 false 1 1 0 DIV + false 1 true 1 1 7 DIV + s1 s3 XCHG + SUB + s1 PUSH + 1 RSHIFT + s0 s2 s5 XCPUXC + true 0 false 1 1 0 DIV + false 1 true 1 1 7 DIV + SUB + }> + ?fun_ref_3449c496cc175763 PROCREF:<{ + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + 251 PUSHPOW2 + 41 PUSHINT + 250 LSHIFT + s0 PUSH + 18 PUSHINT + <{ + s1 s2 XCPU + SUB + s0 s5 s5 PU2XC + true 2 true 1 1 239 DIV + SUB + }> PUSHCONT + REPEAT + 2 1 BLKDROP2 + 3 PUSHINT + 254 LSHIFT + s2 s3 PUXC + true 2 true 1 1 243 DIV + SUB + s2 PUSH + 1 RSHIFT + s2 PUSH + false 1 true 1 1 5 DIV + s1 s2 XCHG + SUB + s1 s2 XCHG + true 0 false 1 1 0 DIV + false 1 true 1 1 4 DIV + ADD + }> + ?fun_ref_41d3f2ea6d56e172 PROCREF:<{ + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + 251 PUSHPOW2 + 33 PUSHINT + 250 LSHIFT + s0 PUSH + 14 PUSHINT + <{ + s1 s2 XCPU + SUB + s0 s5 s5 PU2XC + true 2 true 1 1 235 DIV + SUB + }> PUSHCONT + REPEAT + 2 1 BLKDROP2 + 3 PUSHINT + 254 LSHIFT + s2 s3 PUXC + true 2 true 1 1 239 DIV + SUB + s2 PUSH + 1 RSHIFT + s2 PUSH + false 1 true 1 1 9 DIV + s1 s2 XCHG + SUB + s1 s2 XCHG + true 0 false 1 1 0 DIV + false 1 true 1 1 8 DIV + ADD + }> + ?fun_ref_48cab849e3521372 PROCREF:<{ + ?fun_ref_1b1ae470b4614553 INLINECALLDICT + ?fun_ref_2051d9d821c3f770 INLINECALLDICT + s0 POP + true 2 true 1 1 255 DIV + false 1 true 1 1 3 DIV + s0 s1 XCHG + 5140487830366106860412008603913034462883915832139695448455767612111363481357 PUSHINT + MUL + ADD + s0 s1 XCHG + }> + ?fun_ref_494e543f112ad30c PROCREF:<{ + 255 PUSHPOW2 + s1 PUSH + s0 PUSH + true 1 true 1 1 254 DIV + SUB + s0 PUSH + <{ + s0 POP + SGN + ?fun_ref_aa50613cca252c08 INLINECALLDICT + s0 POP + MUL + }> PUSHCONT + IFNOTJMP + 255 PUSHPOW2 + ?fun_ref_d78034247225d612 INLINECALLDICT + 255 PUSHNEGPOW2 + s0 s1 XCHG + SUB + true 2 true 1 1 255 DIV + -1 MULCONST + ?fun_ref_5c788425937a7d28 INLINECALLDICT + }> + ?fun_ref_5a712c8e35fef248 PROCREF:<{ + 256 PUSHPOW2 + 29483 PUSHINT + 236 LSHIFT + -3167 PUSHINT + 239 LSHIFT + 12845 PUSHINT + 16693 PUSHINT + 9043 PUSHINT + <{ + RANDU256 + 4 RSHIFT + INC + RANDU256 + 255 PUSHPOW2 + SUB + 7027 PUSHINT + true 1 true 1 1 15 DIV + s0 PUSH + ABS + s2 s7 PUSH2 + SUB + s1 s7 PUSH2 + SUB + s1 s1 PUSH2 + true 1 true 1 1 251 DIV + s1 s8 PUSH2 + true 1 true 1 1 15 DIV + s3 s8 XCPU + true 1 true 1 1 15 DIV + s1 s3 XCHG + SUB + true 1 true 1 1 251 DIV + ADD + 237 RSHIFT + s4 PUSH + SUB + s0 PUSH + 82 LESSINT + s2 s4 XCPU + false 0 false 1 0 0 DIV + 16 LESSINT + s1 s2 XCHG + AND + <{ + s8 POP + s1 PUSH + true 2 true 1 1 251 DIV + s0 s7 XCHG + -1 GTINT + <{ + s6 s6 PUSH2 + true 1 true 1 1 255 DIV + false 1 true 1 1 1 DIV + -1 MULCONST + ?fun_ref_eabdf5efadfce810 INLINECALLDICT + 4 LSHIFT + GREATER + <{ + s5 POP + 256 PUSHPOW2 + s0 s5 XCHG + }> PUSHCONT + IF + }> PUSHCONT + <{ + s0 POP + }> PUSHCONT + IFELSE + }> PUSHCONT + <{ + 3 BLKDROP + }> PUSHCONT + IFELSE + s5 PUSH + ISNAN + NOT + }> PUSHREFCONT + UNTIL + 5 BLKDROP + }> + ?fun_ref_5ba78fa4ab4ec6dc PROCREF:<{ + ?fun_ref_aa50613cca252c08 INLINECALLDICT + s0 POP + s1 PUSH + 255 PUSHNEGPOW2 + EQUAL + <{ + s1 POP + }> PUSHCONT + IFJMP + 1 RSHIFT + 255 PUSHPOW2 + s2 PUSH + s0 PUSH + true 1 true 1 1 254 DIV + SUB + 255 PUSHPOW2 + ?fun_ref_d78034247225d612 INLINECALLDICT + 255 PUSHNEGPOW2 + s0 s1 XCHG + SUB + s1 s2 XCHG + true 2 true 1 1 255 DIV + ?fun_ref_5c788425937a7d28 INLINECALLDICT + false 1 true 1 1 0 DIV + ADD + }> + ?fun_ref_5c788425937a7d28 PROCREF:<{ + ?fun_ref_b2fd74bee4445ab9 INLINECALLDICT + ?fun_ref_6405ea4d1c38698c INLINECALLDICT + s1 s2 XCHG + true 1 true 3 1 4 DIV + s1 s2 XCHG + ADD + false 1 true 1 1 4 DIV + ADD + }> + ?fun_ref_5d3a4c29b0035181 PROCREF:<{ + s1 s1 PUSH2 + true 1 true 1 1 255 DIV + 254 PUSHPOW2 + s0 s2 PUSH2 + false 0 false 1 1 0 DIV + 255 PUSHPOW2 + ADD + s3 PUSH + -1 ADD + <{ + s2 s1 PUXC + true 2 true 1 1 241 DIV + s1 s1 PUXC + ADD + s3 PUSH + -1 ADD + s4 s4 XCPU + true 0 false 1 1 0 DIV + s1 PUSH + ADD + }> PUSHCONT + REPEAT + s1 POP + s2 POP + s0 PUSH + false 1 true 1 1 11 DIV + s1 s2 XCHG + ADD + s2 PUSH + ROTREV + true 0 false 1 1 0 DIV + false 1 true 1 1 11 DIV + SUB + }> + ?fun_ref_6405ea4d1c38698c PROCREF:<{ + 115754418570128574501879331591757054405465733718902755858991306434399246026247 PUSHINT + }> + ?fun_ref_6c2cc5b04a23eeb2 PROCREF:<{ + s0 PUSH + false 1 true 1 1 231 DIV + ?fun_ref_8a8385f8d78f60b7 INLINECALLDICT + s1 s3 PUSH2 + true 1 true 3 1 255 DIV + 1 RSHIFT + s1 s2 XCPU + SUB + s2 s5 XCHG2 + true 1 true 3 1 255 DIV + 1 RSHIFT + s0 s3 XCHG + ADD + s4 s4 XCPU + true 2 true 3 1 254 DIV + s1 s2 XCHG + ADD + s4 PUSH + true 2 true 1 1 254 DIV + s2 s2 s6 XCPUXC + true 0 false 1 1 0 DIV + s1 s3 XCHG + SUB + false 1 true 1 1 248 DIV + s0 s2 XCHG + 6 LSHIFT + s1 s2 XCHG + ADD + 18 PUSHINT + s1 s1 PUSH2 + true 1 true 1 1 255 DIV + 254 PUSHPOW2 + s0 s2 PUSH2 + false 0 false 1 1 0 DIV + 255 PUSHPOW2 + ADD + s3 PUSH + -1 ADD + <{ + s2 s1 PUXC + true 2 true 1 1 241 DIV + s1 s1 PUXC + ADD + s3 PUSH + -1 ADD + s4 s4 XCPU + true 0 false 1 1 0 DIV + s1 PUSH + ADD + }> PUSHCONT + REPEAT + s1 POP + s2 POP + s0 PUSH + false 1 true 1 1 11 DIV + s1 s2 XCHG + ADD + s2 PUSH + ROTREV + true 0 false 1 1 0 DIV + false 1 true 1 1 11 DIV + SUB + }> + ?fun_ref_7134bd42618a8d1e PROCREF:<{ + s0 PUSH + false 1 true 1 1 255 DIV + s0 PUSH + <{ + 255 PUSHNEGPOW2 + ROT + true 2 true 1 1 255 DIV + }> PUSHCONT + <{ + s0 s1 XCHG + 1 LSHIFT + }> PUSHCONT + IFELSE + ?fun_ref_b2fd74bee4445ab9 INLINECALLDICT + ?fun_ref_aa50613cca252c08 INLINECALLDICT + ?fun_ref_6405ea4d1c38698c INLINECALLDICT + s1 s4 XCHG + true 1 true 3 1 5 DIV + s5 s4 PUXC + MUL + ADD + ROTREV + ADD + SWAP2 + true 1 true 1 1 121 DIV + ADD + false 1 true 1 1 5 DIV + ADD + }> + ?fun_ref_73739320b258991c PROCREF:<{ + s1 s1 PUSH2 + true 1 true 1 1 255 DIV + 254 PUSHPOW2 + s0 s2 PUSH2 + false 0 false 1 1 0 DIV + 255 PUSHPOW2 + ADD + s3 PUSH + -1 ADD + <{ + s2 s1 PUXC + true 2 true 1 1 245 DIV + s1 s1 PUXC + ADD + s3 PUSH + -1 ADD + s4 s4 XCPU + true 0 false 1 1 0 DIV + s1 PUSH + ADD + }> PUSHCONT + REPEAT + s1 POP + s2 POP + s0 PUSH + false 1 true 1 1 7 DIV + s1 s2 XCHG + ADD + s2 PUSH + ROTREV + true 0 false 1 1 0 DIV + false 1 true 1 1 7 DIV + SUB + }> + ?fun_ref_7753d4b96608d450 PROCREF:<{ + s1 s1 PUSH2 + true 1 true 1 1 254 DIV + s1 PUSH + 1 LSHIFT + 5 ADD + 250 LSHIFT + s0 PUSH + 251 PUSHPOW2 + s0 s4 XCHG + <{ + s1 s3 XCPU + SUB + s0 s4 s5 PU2XC + true 2 true 1 1 238 DIV + ADD + }> PUSHCONT + REPEAT + s1 POP + s2 POP + 3 PUSHINT + 254 LSHIFT + s1 s4 PUXC + true 2 true 1 1 242 DIV + s1 s2 XCHG + ADD + s1 PUSH + false 1 true 1 1 6 DIV + ADD + s2 PUSH + ROTREV + true 0 false 1 1 0 DIV + false 1 true 1 1 6 DIV + SUB + }> + ?fun_ref_811ebbe381228c78 PROCREF:<{ + s0 PUSH + <{ + DROP2 + 248 PUSHPOW2 + }> PUSHCONT + IFNOTJMP + s1 PUSH + 1 LESSINT + <{ + OR + 0 LESSINT + 0 PUSHINT + s0 s1 XCHG + RSHIFTX + }> PUSHCONT + IFJMP + s0 s1 XCHG + ?fun_ref_48cab849e3521372 INLINECALLDICT + 248 PUSHINT + SUB + s2 PUSH + true 1 true 3 1 247 DIV + s2 s3 XCHG2 + true 1 true 3 0 255 DIV + 247 RSHIFT + s0 s1 XCHG + false 1 true 3 1 247 DIV + s1 s4 XCHG + ADD + false 1 true 3 1 247 DIV + 9 LSHIFT + ROT + ADD + s2 s3 XCHG2 + ADD + ADD + s0 PUSH + 248 PUSHINT + ADD + s0 PUSH + 1 LESSINT + <{ + 2 1 BLKDROP2 + 0 EQINT + -1 MULCONST + }> PUSHCONT + IFJMP + ?fun_ref_2051d9d821c3f770 INLINECALLDICT + s0 POP + s1 s3 XCHG + true 1 true 1 1 255 DIV + ?fun_ref_88faf969245bcd15 INLINECALLDICT + 9 PUSHINT + ROT + SUB + false 1 false 1 1 0 DIV + s0 s1 XCHG + -1 PUSHINT + s0 s1 XCHG + LSHIFTX + SUB + }> + ?fun_ref_87780ff3a5ebd2bc PROCREF:<{ + ?fun_ref_ec287b9511e936b8 INLINECALLDICT + 248 PUSHINT + SUB + ?fun_ref_2051d9d821c3f770 INLINECALLDICT + s0 POP + true 1 true 1 1 7 DIV + s0 s1 XCHG + false 1 true 1 1 7 DIV + ADD + }> + ?fun_ref_88faf969245bcd15 PROCREF:<{ + s0 s0 PUSH2 + true 1 true 1 1 254 DIV + 251 PUSHPOW2 + 39 PUSHINT + 250 LSHIFT + s0 PUSH + 17 PUSHINT + <{ + s1 s2 XCPU + SUB + s0 s5 s5 PU2XC + true 2 true 1 1 238 DIV + ADD + }> PUSHCONT + REPEAT + 2 1 BLKDROP2 + 3 PUSHINT + 254 LSHIFT + s2 s3 PUXC + true 2 true 1 1 242 DIV + ADD + s2 PUSH + false 1 true 1 1 3 DIV + s1 PUSH + SUB + s0 PUSH + 1 RSHIFT + s4 s3 PUXC + true 1 true 1 1 255 DIV + false 1 true 1 1 1 DIV + s1 s2 XCHG + ADD + true 0 false 1 1 0 DIV + false 1 true 1 1 1 DIV + SUB + }> + ?fun_ref_8a8385f8d78f60b7 PROCREF:<{ + s0 PUSH + ABS + 7214596 PUSHINT + DUP2 + SUB + ROTREV + MUL + 48 PUSHPOW2 + ADD + true 2 true 1 1 87 DIV + s0 PUSH + 3073 PUSHINT + MUL + s1 s0 XCPU + MUL + 3 PUSHINT + 128 LSHIFT + ADD + true 2 true 1 1 58 DIV + 13 ADD + 33226912 PUSHINT + 5232641 PUSHINT + s2 PUSH + 5 PUSHINT + false 0 false 3 0 0 DIV + 51 PUSHINT + s5 PUSH + SUB + 5 MULCONST + POW2 + 0 PUSHINT + s0 s2 XCHG + <{ + DUP2 + 5 LSHIFT + SUBR + s0 s2 XCHG + 5 LSHIFT + ADD + s0 s1 XCHG + }> PUSHCONT + REPEAT + s0 s2 XCHG + <{ + s1 s3 PUSH2 + MUL + s1 s3 PUSH2 + MUL + SUB + s2 s3 XCPU + MUL + s1 s4 XCPU + MUL + ADD + }> PUSHCONT + REPEAT + 2 2 BLKDROP2 + s0 s3 XCHG + SGN + s0 s4 PUXC + MUL + s2 s3 XCHG2 + MUL + }> + ?fun_ref_8bf58ecefe2e19cb PROCREF:<{ + ?fun_ref_aa50613cca252c08 INLINECALLDICT + ROTREV + true 2 true 3 1 6 DIV + 1 LSHIFT + s1 s4 PUXC + true 1 true 1 1 126 DIV + s1 s2 XCHG + SUB + ?fun_ref_b03a280997c9cc26 INLINECALLDICT + s0 s2 XCHG + 1 PUSHINT + AND + <{ + s0 s1 XCHG + -1 MULCONST + }> PUSHCONT + IF + true 2 true 1 1 247 DIV + }> + ?fun_ref_aa50613cca252c08 PROCREF:<{ + 90942894222941581070058735694432465663348344332098107489693037779484723616546 PUSHINT + 108051869516004014909778934258921521947 PUSHINT + }> + ?fun_ref_afe5ab170f89ef23 PROCREF:<{ + s1 s1 PUSH2 + true 1 true 1 1 255 DIV + 254 PUSHPOW2 + s0 s2 PUSH2 + false 0 false 1 1 0 DIV + 255 PUSHPOW2 + ADD + s3 PUSH + -1 ADD + <{ + s2 s1 PUXC + true 2 true 1 1 241 DIV + s1 s1 PUXC + SUB + s3 PUSH + -1 ADD + s4 s4 XCPU + true 0 false 1 1 0 DIV + s1 PUSH + ADD + }> PUSHCONT + REPEAT + s1 POP + s2 POP + s0 PUSH + false 1 true 1 1 11 DIV + s1 s2 XCHG + SUB + s2 PUSH + ROTREV + true 0 false 1 1 0 DIV + false 1 true 1 1 11 DIV + ADD + }> + ?fun_ref_b03a280997c9cc26 PROCREF:<{ + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + 251 PUSHPOW2 + 41 PUSHINT + 250 LSHIFT + s0 PUSH + 18 PUSHINT + <{ + s1 s2 XCPU + SUB + s0 s5 s5 PU2XC + true 2 true 1 1 239 DIV + SUB + }> PUSHCONT + REPEAT + 2 1 BLKDROP2 + 3 PUSHINT + 254 LSHIFT + s2 s3 PUXC + true 2 true 1 1 243 DIV + SUB + s2 PUSH + 1 RSHIFT + s2 PUSH + false 1 true 1 1 5 DIV + s1 s2 XCHG + SUB + s1 s2 XCHG + true 0 false 1 1 0 DIV + false 1 true 1 1 4 DIV + ADD + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + s0 PUSH + false 1 true 1 1 3 DIV + 256 PUSHNEGPOW2 + ADD + s2 PUSH + ROTREV + true 0 false 1 1 0 DIV + false 1 true 1 1 3 DIV + s0 s1 XCHG + SUB + s0 s0 PUSH2 + true 1 true 1 1 255 DIV + false 1 true 1 1 1 DIV + 256 PUSHNEGPOW2 + ADD + }> + ?fun_ref_b2fd74bee4445ab9 PROCREF:<{ + s0 PUSH + false 1 true 1 1 231 DIV + ?fun_ref_8a8385f8d78f60b7 INLINECALLDICT + s1 s3 PUSH2 + true 1 true 3 1 255 DIV + false 1 true 1 1 249 DIV + s1 s2 XCPU + SUB + 6 LSHIFT + ADD + s0 s4 XCHG + true 1 true 1 1 255 DIV + ADD + s1 s2 XCHG + true 2 true 1 1 254 DIV + 18 PUSHINT + s1 s1 PUSH2 + true 1 true 1 1 255 DIV + 254 PUSHPOW2 + s0 s2 PUSH2 + false 0 false 1 1 0 DIV + 255 PUSHPOW2 + ADD + s3 PUSH + -1 ADD + <{ + s2 s1 PUXC + true 2 true 1 1 241 DIV + s1 s1 PUXC + ADD + s3 PUSH + -1 ADD + s4 s4 XCPU + true 0 false 1 1 0 DIV + s1 PUSH + ADD + }> PUSHCONT + REPEAT + s1 POP + s2 POP + s0 PUSH + false 1 true 1 1 11 DIV + s1 s2 XCHG + ADD + s2 PUSH + ROTREV + true 0 false 1 1 0 DIV + false 1 true 1 1 11 DIV + SUB + }> + ?fun_ref_cdb28b381a5130bf PROCREF:<{ + s0 PUSH + false 1 true 1 1 248 DIV + s0 PUSH + <{ + SGN + 248 PUSHNEGPOW2 + ROT + true 2 true 1 1 255 DIV + }> PUSHCONT + <{ + s0 s1 XCHG + 8 LSHIFT + }> PUSHCONT + IFELSE + ?fun_ref_b2fd74bee4445ab9 INLINECALLDICT + false 1 true 1 1 5 DIV + ?fun_ref_aa50613cca252c08 INLINECALLDICT + s0 POP + s1 s3 XCHG + MUL + s1 s2 XCHG + ADD + ?fun_ref_6405ea4d1c38698c INLINECALLDICT + s1 s2 XCHG + true 1 true 1 1 5 DIV + ADD + false 1 true 1 1 6 DIV + }> + ?fun_ref_d78034247225d612 PROCREF:<{ + DUP2 + MIN + <{ + DROP2 + 0 PUSHINT + }> PUSHCONT + IFNOTJMP + s1 PUSH + UBITSIZE + s1 PUSH + UBITSIZE + DUP2 + EQUAL + <{ + DROP2 + DUP2 + SUB + 1 RSHIFT + s1 PUSH + ADD + }> PUSHCONT + <{ + ADD + 1 RSHIFT + POW2 + }> PUSHCONT + IFELSE + <{ + s2 s1 s0 PUSH3 + true 0 false 1 2 0 DIV + s1 PUSH + SUB + 1 RSHIFT + TUCK + ADD + s0 s1 XCHG + 0 EQINT + }> PUSHCONT + UNTIL + 2 1 BLKDROP2 + }> + ?fun_ref_da70c8217d8f9a46 PROCREF:<{ + s0 PUSH + false 1 true 1 1 248 DIV + <{ + 248 PUSHNEGPOW2 + s0 s1 XCHG + true 2 true 1 1 255 DIV + 0 PUSHINT + }> PUSHCONT + <{ + 8 LSHIFT + s0 PUSH + SGN + }> PUSHCONT + IFELSE + s0 s1 XCHG + ?fun_ref_b2fd74bee4445ab9 INLINECALLDICT + ?fun_ref_aa50613cca252c08 INLINECALLDICT + s0 POP + s1 s3 XCHG + MUL + s0 s2 XCHG + false 1 true 1 1 5 DIV + s1 s2 XCHG + SUB + ?fun_ref_6405ea4d1c38698c INLINECALLDICT + s1 s2 XCHG + true 1 true 1 1 5 DIV + SUB + false 1 true 1 1 6 DIV + }> + ?fun_ref_e11f9343f87d5b4b PROCREF:<{ + ?fun_ref_aa50613cca252c08 INLINECALLDICT + ROTREV + true 2 true 3 1 6 DIV + 1 LSHIFT + s1 s4 PUXC + true 1 true 1 1 126 DIV + s1 s2 XCHG + SUB + ?fun_ref_b03a280997c9cc26 INLINECALLDICT + s0 s2 XCHG + 1 PUSHINT + AND + <{ + -1 MULCONST + s0 s1 XCHG + }> PUSHCONT + IF + s0 s1 XCHG + true 2 true 1 1 247 DIV + }> + ?fun_ref_e9b023c94244cb2e PROCREF:<{ + 115641670674223639132965820642403718536242645001775371762318060545014644837101 PUSHINT + }> + ?fun_ref_eabdf5efadfce810 PROCREF:<{ + ?fun_ref_2051d9d821c3f770 INLINECALLDICT + ROTREV + 8 PUSHINT + true 2 false 3 1 0 DIV + 1 LSHIFT + s1 s4 PUXC + true 1 true 1 1 126 DIV + s1 s2 XCHG + SUB + ?fun_ref_88faf969245bcd15 INLINECALLDICT + 9 PUSHINT + s2 PUSH + SUB + false 1 false 1 1 0 DIV + 248 PUSHINT + ROT + ADD + -1 PUSHINT + s0 s1 XCHG + LSHIFTX + SUB + }> + ?fun_ref_ec287b9511e936b8 PROCREF:<{ + ?fun_ref_1b1ae470b4614553 INLINECALLDICT + false 1 true 3 1 3 DIV + 9 LSHIFT + s2 PUSH + -3769 PUSHINT + MUL + ADD + false 1 true 1 1 12 DIV + ADD + s0 s1 XCHG + 3563114646320977386603103333812068872452913448227778071188132859183498739150 PUSHINT + MUL + ADD + s0 s1 XCHG + }> + ?fun_ref_f8345f3d64016266 PROCREF:<{ + -3 PUSHINT + 253 LSHIFT + 12 PUSHINT + <{ + RANDU256 + 4 RSHIFT + ADD + }> PUSHCONT + REPEAT + }> + ?fun_ref_fbd4cc263c208ffd PROCREF:<{ + s1 s1 PUSH2 + true 1 true 1 1 255 DIV + 254 PUSHPOW2 + s0 s2 PUSH2 + false 0 false 1 1 0 DIV + 255 PUSHPOW2 + ADD + s3 PUSH + -1 ADD + <{ + s2 s1 PUXC + true 2 true 1 1 247 DIV + s1 s1 PUXC + SUB + s3 PUSH + -1 ADD + s4 s4 XCPU + true 0 false 1 1 0 DIV + s1 PUSH + ADD + }> PUSHCONT + REPEAT + s1 POP + s2 POP + s0 PUSH + 1 RSHIFT + s0 s1 XCHG + false 1 true 1 1 5 DIV + s1 s2 XCHG + SUB + s2 PUSH + ROTREV + true 0 false 1 1 0 DIV + false 1 true 1 1 4 DIV + ADD + }> +}END>c" +`; + exports[`decompileAll should decompile wallet 1`] = ` "PROGRAM{ DECLPROC recv_internal; diff --git a/src/decompiler/__testdata__/mathlib.boc b/src/decompiler/__testdata__/mathlib.boc new file mode 100644 index 0000000000000000000000000000000000000000..63a8f66b0c8600dbb5ee8546d95d935c52ac9b28 GIT binary patch literal 2918 zcmcIm4RBP|6@K@X`{2P&BSXr+p;{ z#>Cw&GpYEAjYiMocu{eq_O;tgqr(zbs9lfMDjI}05eL`-9*#y*fibTFmfq>RT@o0s zpwV+AUZ*fal}3k%8s=1LpC%EBnP%WCW^xhA{IVDc#1HgZ3khs|4b<)^F4`NlNEZMH2|G38-@^7CV=T@qF5!veKyD zWrc}T4>Ns_#|*)73WVAPPX$b2!Yf1yxmU1t9b0!Uhbe}2GQ%__ty^=YnM_*AgC9qq z_~nM;cXqYyTk=9vVtd)DPafU+L+T*rc`O<5)@f!~}x1-aDMiaJNu_3Kk5PK@{ zwTGuV2%F_VlgTa9=tZ}QSPr=Eqd|pf9)fC=$b{65K>MsbYYsQ~e}lWJu}Si%;FsG5 zgF>xl!gnO&h5W+nB0}w_Cjf!AHlpTECH^$coS2}U{#zcolZ4_7>TUVAe~;6qyuKmb zrHz0EA()!Xcma|0BDEt}LvFcS2pB+3UBQ$R9__1c4Ribf{&X#tH4cTjNpfGx8v-{sD3{J+E& z;{2bnodjisQ+^;TD%t=!wph?IRNuu1LXZ!c82K+420Gr{o7rn#vQ)e{r0zR(Xza{G z{UfVS{;lrm-<(~$_=6Be`9hbxqdJf{qx7MjNBX#WbZ`Jo_@~kn38#e~PlYcbC|cPV z1}&o!J1rQ?007H#2BMnXB-3352_Tv`u4W0^KmL&BWwT_#{C`5i|2T77zLD(Td9xl|%U6$^7t zwiOg3#T?e}!0_!!iar9leh!t~Oi!f39Na`sYkDSN2z`H2!ud3stWd2qXeQJ?%4<3a zd!_4B{GDvsr|7zK!MwRb1$;Io?+hj@!TlXjrUxg~o=s2a+@27w!mDXyGe}B@i)|&M z9CK)T5Sv{;@zTwoH~%i--at}ew>*)Xo-gbH`a@^f@}wf{96x1^@|&m~KN7)JKU%bg)?u z2-Ad&?g~PpM^p7JnnCUvgp5dU<I+tK&SSLCI8tiK=ZUwOp3eADkXt^f4bYs}vDd`oZag;@`vEr0mo z6M6&JD|Z|H85?GaHKZyOxEs^xD%qEbLM~INQQHcC%R93C)5baM&-l?_kqX)1wOK*_ zhwAy?)@b4@ye484=l6QdA$W+(5^`mSaJ)_xdfYh)`xU!rlF(JoVeR3}%k3ewqnEqNVGJ#$pb$CCxmgbb Qeu7+~|3YN7 + OVER + UBITSIZE + OVER + UBITSIZE + 2DUP + EQUAL + IF:<{ + 2DROP + 2DUP + SUB + 1 RSHIFT# + OVER + ADD + }>ELSE<{ + ADD + 1 RSHIFT# + POW2 + }> + UNTIL:<{ + s2 s1 s0 PUSH3 + MULDIVC + OVER + SUB + 1 RSHIFT# + TUCK + ADD + SWAP + 0 EQINT + }> + 2 1 BLKDROP2 + }> + sqrt PROCINLINE:<{ + 1 PUSHINT + geom_mean INLINECALLDICT + }> + fixed248::sqrt PROCINLINE:<{ + 248 PUSHPOW2 + geom_mean INLINECALLDICT + }> + fixed255::sqrt PROCINLINE:<{ + 255 PUSHPOW2 + geom_mean INLINECALLDICT + }> + fixed248::sqr PROCINLINE:<{ + DUP + 248 MULRSHIFTR# + }> + fixed255::sqr PROCINLINE:<{ + DUP + 255 MULRSHIFTR# + }> + log2_xconst_f256 PROCREF:<{ + 80260960185991308862233904206310070533990667611589946606122867505419956976172 PUSHINT + -32272921378999278490133606779486332143 PUSHINT + }> + Pi_xconst_f254 PROCREF:<{ + 90942894222941581070058735694432465663348344332098107489693037779484723616546 PUSHINT + 108051869516004014909778934258921521947 PUSHINT + }> + Atan1_16_f260 PROCREF:<{ + 115641670674223639132965820642403718536242645001775371762318060545014644837101 PUSHINT + }> + Atan1_8_f259 PROCREF:<{ + 115194597005316551477397594802136977648153890007566736408151129975021336532841 PUSHINT + }> + Atan1_32_f261 PROCREF:<{ + 115754418570128574501879331591757054405465733718902755858991306434399246026247 PUSHINT + }> + log2_const_f256 PROCINLINE:<{ + log2_xconst_f256 INLINECALLDICT + DROP + }> + fixed248::log2_const PROCINLINE:<{ + log2_const_f256 INLINECALLDICT + 8 RSHIFTR# + }> + Pi_const_f254 PROCINLINE:<{ + Pi_xconst_f254 INLINECALLDICT + DROP + }> + fixed248::Pi_const PROCINLINE:<{ + Pi_const_f254 INLINECALLDICT + 6 RSHIFTR# + }> + tanh_f258 PROCREF:<{ + s1 s1 PUSH2 + 255 MULRSHIFTR# + OVER + 1 LSHIFT# + 5 ADDCONST + 250 LSHIFT# + DUP + 251 PUSHPOW2 + s0 s4 XCHG + REPEAT:<{ + s1 s3 XCPU + SUB + s0 s2 s1 PU2XC + 239 LSHIFT#DIVR + ADD + }> + NIP + s2 POP + 3 PUSHINT + 254 LSHIFT# + s1 s2 PUXC + 243 LSHIFT#DIVR + s1 s2 XCHG + ADD + OVER + 7 RSHIFTR# + ADD + s2 PUSH + -ROT + MULDIVR + 7 RSHIFTR# + SUB + }> + expm1_f257 PROCREF:<{ + s0 s0 PUSH2 + 255 MULRSHIFTR# + 251 PUSHPOW2 + 39 PUSHINT + 250 LSHIFT# + DUP + 17 PUSHINT + REPEAT:<{ + s1 s2 XCPU + SUB + s0 s3 s1 PU2XC + 239 LSHIFT#DIVR + ADD + }> + 2 1 BLKDROP2 + 3 PUSHINT + 254 LSHIFT# + s2 s1 PUXC + 243 LSHIFT#DIVR + ADD + s2 PUSH + 4 RSHIFTR# + OVER + SUB + DUP + 1 RSHIFT# + s4 s1 PUXC + 256 MULRSHIFTR# + 2 RSHIFTR# + s1 s2 XCHG + ADD + MULDIVR + 2 RSHIFTR# + SUB + }> + fixed248::exp PROCREF:<{ + log2_xconst_f256 INLINECALLDICT + -ROT + 8 PUSHINT + LSHIFTDIVMODR + 1 LSHIFT# + s1 s2 PUXC + 127 MULRSHIFTR# + s1 s2 XCHG + SUB + expm1_f257 INLINECALLDICT + 9 PUSHINT + s2 PUSH + SUB + RSHIFTR + 248 PUSHINT + ROT + ADD + -1 PUSHINT SWAP LSHIFT + SUB + }> + fixed248::exp2 PROCREF:<{ + 248 RSHIFTR#MOD + log2_const_f256 INLINECALLDICT + 247 MULRSHIFTR# + expm1_f257 INLINECALLDICT + 9 PUSHINT + s2 PUSH + SUB + RSHIFTR + 248 PUSHINT + ROT + ADD + -1 PUSHINT SWAP LSHIFT + SUB + }> + tan_f260_inlined PROCINLINE:<{ + s0 s0 PUSH2 + 256 MULRSHIFTR# + 251 PUSHPOW2 + 33 PUSHINT + 250 LSHIFT# + DUP + 14 PUSHINT + REPEAT:<{ + s1 s2 XCPU + SUB + s0 s3 s1 PU2XC + 236 LSHIFT#DIVR + SUB + }> + 2 1 BLKDROP2 + 3 PUSHINT + 254 LSHIFT# + s2 s1 PUXC + 240 LSHIFT#DIVR + SUB + s2 PUSH + 1 RSHIFT# + s2 PUSH + 10 RSHIFTR# + s1 s2 XCHG + SUB + s1 s2 XCHG + MULDIVR + 9 RSHIFTR# + ADD + }> + tan_f260 PROCREF:<{ + tan_f260_inlined INLINECALLDICT + }> + tan_f258_inlined PROCINLINE:<{ + s0 s0 PUSH2 + 256 MULRSHIFTR# + 251 PUSHPOW2 + 41 PUSHINT + 250 LSHIFT# + DUP + 18 PUSHINT + REPEAT:<{ + s1 s2 XCPU + SUB + s0 s3 s1 PU2XC + 240 LSHIFT#DIVR + SUB + }> + 2 1 BLKDROP2 + 3 PUSHINT + 254 LSHIFT# + s2 s1 PUXC + 244 LSHIFT#DIVR + SUB + s2 PUSH + 1 RSHIFT# + s2 PUSH + 6 RSHIFTR# + s1 s2 XCHG + SUB + s1 s2 XCHG + MULDIVR + 5 RSHIFTR# + ADD + }> + tan_f258 PROCREF:<{ + tan_f258_inlined INLINECALLDICT + }> + sincosm1_f259_inlined PROCINLINE:<{ + tan_f260_inlined INLINECALLDICT + s0 s0 PUSH2 + 256 MULRSHIFTR# + DUP + 9 RSHIFTR# + 255 PUSHPOW2 + ADD + s2 PUSH + 1 RSHIFT# + s2 s1 PUSH2 + MULDIVR + 8 RSHIFTR# + s1 s3 XCHG + SUB + OVER + 1 RSHIFT# + s0 s2 s3 XCPUXC + MULDIVR + 8 RSHIFTR# + SUB + }> + sincosm1_f259 PROCREF:<{ + sincosm1_f259_inlined INLINECALLDICT + }> + sincosn_f256 PROCREF:<{ + OVER + ABS + Atan1_8_f259 INLINECALLDICT + 2 LSHIFT#DIVMODR + 1 LSHIFT# + ROT + ADD + sincosm1_f259 INLINECALLDICT + -1 PUSHINT + 0 PUSHINT + 1 PUSHINT + s0 s5 XCHG + REPEAT:<{ + OVER + 63 MULCONST + OVER + 4 LSHIFT# + SUB + s0 s2 XCHG + 4 LSHIFT# + SWAP + 63 MULCONST + ADD + s0 s4 XCHG + 65 MULCONST + s0 s4 XCHG + }> + s4 PUSH + 256 LSHIFT#DIVMODR + s5 PUSH + 7 LSHIFT#DIVR + s2 s5 XCPU + 256 LSHIFT#DIVMODR + s0 s6 XCHG2 + 7 LSHIFT#DIVR + s0 s6 XCHG + SGN + s1 s3 PUSH2 + 256 MULRSHIFTR# + s0 s3 XCHG2 + SUB + 4 RSHIFTR# + s5 s4 PUSH2 + 256 MULRSHIFTR# + SUB + 3 RSHIFTR# + OVER + SUB + s1 s2 XCHG + MUL + s4 s2 PUXC + 256 MULRSHIFTR# + s0 s5 XCHG2 + SUB + 4 RSHIFTR# + s4 s2 XCHG2 + 256 MULRSHIFTR# + ADD + 3 RSHIFTR# + SUB + }> + sincosm1_f256 PROCREF:<{ + sincosm1_f259_inlined INLINECALLDICT + 7 PUSHINT + 3 PUSHINT + REPEAT:<{ + s2 s2 PUSH2 + 256 MULRSHIFTR# + s3 s2 PUXC + 256 MULRSHIFTR# + OVER + RSHIFTR + s1 s3 XCHG + SUB + s0 s2 XCHG + -2 ADDCONST + }> + DROP + }> + tan_aux_f256 PROCREF:<{ + tan_f258_inlined INLINECALLDICT + s0 s0 PUSH2 + 256 MULRSHIFTR# + DUP + 4 RSHIFTR# + 256 PUSHNEGPOW2 + ADD + s2 PUSH + -ROT + MULDIVR + 4 RSHIFTR# + SWAP + SUB + s0 s0 PUSH2 + 256 MULRSHIFTR# + 2 RSHIFTR# + 256 PUSHNEGPOW2 + ADD + }> + fixed248::sincos PROCREF:<{ + Pi_xconst_f254 INLINECALLDICT + -ROT + 7 LSHIFT#DIVMODR + 1 LSHIFT# + s1 s2 PUXC + 127 MULRSHIFTR# + s1 s2 XCHG + SUB + sincosm1_f256 INLINECALLDICT + 248 PUSHPOW2 + SWAP + 9 RSHIFTR# + SUB + SWAP + 8 RSHIFTR# + s0 s2 XCHG + 3 PUSHINT + AND + REPEAT:<{ + SWAP + NEGATE + }> + }> + fixed248::sin PROCINLINE:<{ + fixed248::sincos INLINECALLDICT + DROP + }> + fixed248::cos PROCINLINE:<{ + fixed248::sincos INLINECALLDICT + NIP + }> + fixed248::tan PROCREF:<{ + Pi_xconst_f254 INLINECALLDICT + -ROT + 7 LSHIFT#DIVMODR + 1 LSHIFT# + s1 s2 PUXC + 127 MULRSHIFTR# + s1 s2 XCHG + SUB + tan_aux_f256 INLINECALLDICT + s0 s2 XCHG + 1 PUSHINT + AND + IF:<{ + NEGATE + SWAP + }> + SWAP + 248 LSHIFT#DIVR + }> + fixed248::cot PROCREF:<{ + Pi_xconst_f254 INLINECALLDICT + -ROT + 7 LSHIFT#DIVMODR + 1 LSHIFT# + s1 s2 PUXC + 127 MULRSHIFTR# + s1 s2 XCHG + SUB + tan_aux_f256 INLINECALLDICT + s0 s2 XCHG + 1 PUSHINT + AND + IF:<{ + SWAP + NEGATE + }> + 248 LSHIFT#DIVR + }> + atanh_f258 PROCREF:<{ + s1 s1 PUSH2 + 256 MULRSHIFTR# + 254 PUSHPOW2 + s0 s2 PUSH2 + DIVR + 255 PUSHPOW2 + ADD + s3 PUSH + DEC + REPEAT:<{ + s2 s(-1) PUXC + 248 LSHIFT#DIVR + s1 s(-1) PUXC + SUB + s3 PUSH + DEC + s4 s4 XCPU + MULDIVR + OVER + ADD + }> + NIP + s2 POP + DUP + 1 RSHIFT# + SWAP + 6 RSHIFTR# + s1 s2 XCHG + SUB + s2 PUSH + -ROT + MULDIVR + 5 RSHIFTR# + ADD + }> + atanh_f261_inlined PROCINLINE:<{ + s1 s1 PUSH2 + 256 MULRSHIFTR# + 254 PUSHPOW2 + s0 s2 PUSH2 + DIVR + 255 PUSHPOW2 + ADD + s3 PUSH + DEC + REPEAT:<{ + s2 s(-1) PUXC + 242 LSHIFT#DIVR + s1 s(-1) PUXC + SUB + s3 PUSH + DEC + s4 s4 XCPU + MULDIVR + OVER + ADD + }> + NIP + s2 POP + DUP + 12 RSHIFTR# + s1 s2 XCHG + SUB + s2 PUSH + -ROT + MULDIVR + 12 RSHIFTR# + ADD + }> + atanh_f261 PROCREF:<{ + atanh_f261_inlined INLINECALLDICT + }> + log_aux_f257 PROCREF:<{ + DUP + UBITSIZE + 8 PUSHPOW2 + OVER + SUB + s1 s2 XCHG + LSHIFT + 256 PUSHNEGPOW2 + OVER + 249 RSHIFT# + 91 LESSINT + IF:<{ + 1 RSHIFT# + s0 s2 XCHG + DEC + s0 s2 XCHG + }> + TUCK + ADD + DUP + 1 LSHIFT# + SWAP + 1 RSHIFT# + ROT + SUB + 256 LSHIFT#DIVR + 36 PUSHINT + atanh_f258 INLINECALLDICT + SWAP + }> + pow33 PROCINLINE:<{ + 1 PUSHINT + SWAP + REPEAT:<{ + 33 MULCONST + }> + }> + pow33b PROCINLINE:<{ + 5 PUSHINT + DIVMOD + 1 PUSHINT + SWAP + REPEAT:<{ + 33 MULCONST + }> + SWAP + REPEAT:<{ + 39135393 PUSHINT + MUL + }> + }> + log_auxx_f260 PROCREF:<{ + DUP + UBITSIZE + DEC + 8 PUSHPOW2DEC + OVER + SUB + s1 s2 XCHG + LSHIFT + 2873 PUSHINT + 244 LSHIFT# + 2DUP + SUB + 1 RSHIFT# + DUP + 65 PUSHINT + s0 s3 XCHG + ADD + s1 s2 XCHG + MULDIVR + 11 ADDCONST + DUP + pow33b INLINECALLDICT + 51 PUSHINT + s2 PUSH + SUB + 5 MULCONST + LSHIFT + s2 s2 XCPU + SUB + DUP + 4 LSHIFT# + SWAP + 1 RSHIFT# + s0 s3 XCHG2 + ADD + s1 s2 XCHG + 256 LSHIFT#DIVR + 18 PUSHINT + atanh_f261 INLINECALLDICT + }> + log_aux_f256 PROCREF:<{ + log_auxx_f260 INLINECALLDICT + 4 RSHIFTR#MOD + 9 LSHIFT# + s2 PUSH + -3769 PUSHINT + MUL + ADD + 13 RSHIFTR# + ADD + SWAP + 3563114646320977386603103333812068872452913448227778071188132859183498739150 PUSHINT + MUL + ADD + SWAP + }> + log2_aux_f256 PROCREF:<{ + log_auxx_f260 INLINECALLDICT + log2_const_f256 INLINECALLDICT + 256 LSHIFT#DIVR + 4 RSHIFTR# + SWAP + 5140487830366106860412008603913034462883915832139695448455767612111363481357 PUSHINT + MUL + ADD + SWAP + }> + fixed248::log PROCREF:<{ + log_aux_f256 INLINECALLDICT + 248 PUSHINT + SUB + log2_const_f256 INLINECALLDICT + 8 MULRSHIFTR# + SWAP + 8 RSHIFTR# + ADD + }> + fixed248::log2 PROCINLINE:<{ + log2_aux_f256 INLINECALLDICT + 248 PUSHINT + SUB + 248 LSHIFT# + SWAP + 8 RSHIFTR# + ADD + }> + fixed248::pow PROCREF:<{ + DUP + IFNOTJMP:<{ + 2DROP + 248 PUSHPOW2 + }> + OVER + 1 LESSINT + IFJMP:<{ + OR + 0 LESSINT + 0 PUSHINT + SWAP + RSHIFT + }> + SWAP + log2_aux_f256 INLINECALLDICT + 248 PUSHINT + SUB + s2 PUSH + 248 MULRSHIFTR#MOD + s2 s3 XCHG2 + 256 MULRSHIFT#MOD + 247 RSHIFT# + SWAP + 248 RSHIFTR#MOD + s1 s4 XCHG + ADD + 248 RSHIFTR#MOD + 9 LSHIFT# + ROT + ADD + s2 s3 XCHG2 + ADD + ADD + DUP + 248 PUSHINT + ADD + DUP + 1 LESSINT + IFJMP:<{ + 2 1 BLKDROP2 + 0 EQINT + NEGATE + }> + log2_const_f256 INLINECALLDICT + s1 s3 XCHG + 256 MULRSHIFTR# + expm1_f257 INLINECALLDICT + 9 PUSHINT + ROT + SUB + RSHIFTR + SWAP + -1 PUSHINT SWAP LSHIFT + SUB + }> + atan_f259 PROCREF:<{ + s1 s1 PUSH2 + 256 MULRSHIFTR# + 254 PUSHPOW2 + s0 s2 PUSH2 + DIVR + 255 PUSHPOW2 + ADD + s3 PUSH + DEC + REPEAT:<{ + s2 s(-1) PUXC + 246 LSHIFT#DIVR + s1 s(-1) PUXC + ADD + s3 PUSH + DEC + s4 s4 XCPU + MULDIVR + OVER + ADD + }> + NIP + s2 POP + DUP + 8 RSHIFTR# + s1 s2 XCHG + ADD + s2 PUSH + -ROT + MULDIVR + 8 RSHIFTR# + SUB + }> + atan_f261_inlined PROCINLINE:<{ + s1 s1 PUSH2 + 256 MULRSHIFTR# + 254 PUSHPOW2 + s0 s2 PUSH2 + DIVR + 255 PUSHPOW2 + ADD + s3 PUSH + DEC + REPEAT:<{ + s2 s(-1) PUXC + 242 LSHIFT#DIVR + s1 s(-1) PUXC + ADD + s3 PUSH + DEC + s4 s4 XCPU + MULDIVR + OVER + ADD + }> + NIP + s2 POP + DUP + 12 RSHIFTR# + s1 s2 XCHG + ADD + s2 PUSH + -ROT + MULDIVR + 12 RSHIFTR# + SUB + }> + atan_f261 PROCREF:<{ + atan_f261_inlined INLINECALLDICT + }> + atan_aux_prereduce PROCREF:<{ + DUP + ABS + 7214596 PUSHINT + 2DUP + SUB + -ROT + MUL + 48 PUSHPOW2 + ADD + 88 LSHIFT#DIVR + DUP + 3073 PUSHINT + MUL + s1 s0 XCPU + MUL + 3 PUSHINT + 128 LSHIFT# + ADD + 59 LSHIFT#DIVR + 13 ADDCONST + 33226912 PUSHINT + 5232641 PUSHINT + s2 PUSH + 5 PUSHINT + DIVMOD + 51 PUSHINT + s5 PUSH + SUB + 5 MULCONST + POW2 + 0 PUSHINT + s0 s2 XCHG + REPEAT:<{ + 2DUP + 5 LSHIFT# + SUBR + s0 s2 XCHG + 5 LSHIFT# + ADD + SWAP + }> + s0 s2 XCHG + REPEAT:<{ + s1 s3 PUSH2 + MUL + s1 s3 PUSH2 + MUL + SUB + s2 s3 XCPU + MUL + s1 s4 XCPU + MUL + ADD + }> + 2 2 BLKDROP2 + s0 s3 XCHG + SGN + s0 s2 PUXC + MUL + s2 s3 XCHG2 + MUL + }> + atan_aux_f256 PROCREF:<{ + DUP + 232 RSHIFTR# + atan_aux_prereduce INLINECALLDICT + s1 s3 PUSH2 + 256 MULRSHIFTR#MOD + 250 RSHIFTR# + s1 s2 XCPU + SUB + 6 LSHIFT# + ADD + s0 s4 XCHG + 256 MULRSHIFTR# + ADD + s1 s2 XCHG + 255 LSHIFT#DIVR + 18 PUSHINT + atan_f261_inlined INLINECALLDICT + }> + atan_auxx_f256 PROCREF:<{ + DUP + 232 RSHIFTR# + atan_aux_prereduce INLINECALLDICT + s1 s3 PUSH2 + 256 MULRSHIFTR#MOD + 1 RSHIFT# + s1 s2 XCPU + SUB + s2 s5 XCHG2 + 256 MULRSHIFTR#MOD + 1 RSHIFT# + s0 s3 XCHG + ADD + s4 s4 XCPU + 255 LSHIFT#DIVMODR + s1 s2 XCHG + ADD + s4 PUSH + 255 LSHIFT#DIVR + s2 s2 s4 XCPUXC + MULDIVR + s1 s3 XCHG + SUB + 249 RSHIFTR# + s0 s2 XCHG + 6 LSHIFT# + s1 s2 XCHG + ADD + 18 PUSHINT + atan_f261_inlined INLINECALLDICT + }> + atan_f255 PROCREF:<{ + DUP + 256 RSHIFTR# + DUP + IF:<{ + 255 PUSHNEGPOW2 + ROT + 256 LSHIFT#DIVR + }>ELSE<{ + SWAP + 1 LSHIFT# + }> + atan_aux_f256 INLINECALLDICT + Pi_xconst_f254 INLINECALLDICT + Atan1_32_f261 INLINECALLDICT + s1 s4 XCHG + 6 MULRSHIFTR#MOD + s5 s2 PUXC + MUL + ADD + -ROT + ADD + 2SWAP + 122 MULRSHIFTR# + ADD + 6 RSHIFTR# + ADD + }> + atan_f256_small PROCREF:<{ + atan_aux_f256 INLINECALLDICT + Atan1_32_f261 INLINECALLDICT + s1 s2 XCHG + 5 MULRSHIFTR#MOD + s1 s2 XCHG + ADD + 5 RSHIFTR# + ADD + }> + asin_f255 PROCREF:<{ + 255 PUSHPOW2 + OVER + fixed255::sqr INLINECALLDICT + SUB + DUP + IFNOTJMP:<{ + DROP + SGN + Pi_const_f254 INLINECALLDICT + MUL + }> + fixed255::sqrt INLINECALLDICT + 255 PUSHNEGPOW2 + SWAP + SUB + 256 LSHIFT#DIVR + NEGATE + atan_f256_small INLINECALLDICT + }> + acos_f255 PROCREF:<{ + Pi_const_f254 INLINECALLDICT + OVER + 255 PUSHNEGPOW2 + EQUAL + IFJMP:<{ + NIP + }> + 1 RSHIFT# + 255 PUSHPOW2 + s2 PUSH + fixed255::sqr INLINECALLDICT + SUB + fixed255::sqrt INLINECALLDICT + 255 PUSHNEGPOW2 + SWAP + SUB + s1 s2 XCHG + 256 LSHIFT#DIVR + atan_f256_small INLINECALLDICT + 1 RSHIFTR# + ADD + }> + fixed248::asin PROCINLINE:<{ + 7 LSHIFT# + asin_f255 INLINECALLDICT + 7 RSHIFTR# + }> + fixed248::acos PROCINLINE:<{ + 7 LSHIFT# + acos_f255 INLINECALLDICT + 6 RSHIFTR# + }> + fixed248::atan PROCREF:<{ + DUP + 249 RSHIFTR# + DUP + IF:<{ + SGN + 248 PUSHNEGPOW2 + ROT + 256 LSHIFT#DIVR + }>ELSE<{ + SWAP + 8 LSHIFT# + }> + atan_aux_f256 INLINECALLDICT + 6 RSHIFTR# + Pi_const_f254 INLINECALLDICT + s1 s3 XCHG + MUL + s1 s2 XCHG + ADD + Atan1_32_f261 INLINECALLDICT + s1 s2 XCHG + 6 MULRSHIFTR# + ADD + 7 RSHIFTR# + }> + fixed248::acot PROCREF:<{ + DUP + 249 RSHIFTR# + IF:<{ + 248 PUSHNEGPOW2 + SWAP + 256 LSHIFT#DIVR + 0 PUSHINT + }>ELSE<{ + 8 LSHIFT# + DUP + SGN + }> + SWAP + atan_aux_f256 INLINECALLDICT + Pi_const_f254 INLINECALLDICT + s1 s3 XCHG + MUL + s0 s2 XCHG + 6 RSHIFTR# + s1 s2 XCHG + SUB + Atan1_32_f261 INLINECALLDICT + s1 s2 XCHG + 6 MULRSHIFTR# + SUB + 7 RSHIFTR# + }> + nrand_f252 PROCREF:<{ + PUSHNAN + 29483 PUSHINT + 236 LSHIFT# + -3167 PUSHINT + 239 LSHIFT# + 12845 PUSHINT + 16693 PUSHINT + 9043 PUSHINT + UNTIL:<{ + RANDU256 + 4 RSHIFT# + INC + RANDU256 + 255 PUSHPOW2 + SUB + 7027 PUSHINT + 16 MULRSHIFTR# + DUP + ABS + s2 s7 PUSH2 + SUB + s1 s7 PUSH2 + SUB + s1 s1 PUSH2 + 252 MULRSHIFTR# + s1 s8 PUSH2 + 16 MULRSHIFTR# + s3 s8 XCPU + 16 MULRSHIFTR# + s1 s3 XCHG + SUB + 252 MULRSHIFTR# + ADD + 237 RSHIFT# + s4 PUSH + SUB + DUP + 82 LESSINT + s2 s4 XCPU + DIV + 16 LESSINT + s1 s2 XCHG + AND + IF:<{ + s8 POP + OVER + 252 LSHIFT#DIVR + s0 s7 XCHG + -1 GTINT + IF:<{ + s6 s6 PUSH2 + 256 MULRSHIFTR# + 2 RSHIFTR# + NEGATE + fixed248::exp INLINECALLDICT + 4 LSHIFT# + GREATER + IF:<{ + s5 POP + PUSHNAN + s0 s5 XCHG + }> + }>ELSE<{ + DROP + }> + }>ELSE<{ + 3 BLKDROP + }> + s5 PUSH + ISNAN + NOT + }> + 5 BLKDROP + }> + nrand_fast_f252 PROCREF:<{ + -3 PUSHINT + 253 LSHIFT# + 12 PUSHINT + REPEAT:<{ + RANDU256 + 4 RSHIFT# + ADD + }> + }> + fixed248::random PROCINLINE:<{ + RANDU256 + 8 RSHIFT# + }> + fixed248::nrand PROCINLINE:<{ + nrand_f252 INLINECALLDICT + 4 RSHIFTR# + }> + fixed248::nrand_fast PROCINLINE:<{ + nrand_fast_f252 INLINECALLDICT + 4 RSHIFTR# + }> + main PROC:<{ + geom_mean INLINECALLDICT + sqrt INLINECALLDICT + fixed248::sqrt INLINECALLDICT + fixed255::sqrt INLINECALLDICT + fixed248::sqr INLINECALLDICT + fixed255::sqr INLINECALLDICT + log2_xconst_f256 INLINECALLDICT + Pi_xconst_f254 INLINECALLDICT + Atan1_16_f260 INLINECALLDICT + Atan1_8_f259 INLINECALLDICT + Atan1_32_f261 INLINECALLDICT + log2_const_f256 INLINECALLDICT + fixed248::log2_const INLINECALLDICT + Pi_const_f254 INLINECALLDICT + fixed248::Pi_const INLINECALLDICT + tanh_f258 INLINECALLDICT + expm1_f257 INLINECALLDICT + fixed248::exp INLINECALLDICT + fixed248::exp2 INLINECALLDICT + tan_f260_inlined INLINECALLDICT + tan_f260 INLINECALLDICT + tan_f258_inlined INLINECALLDICT + tan_f258 INLINECALLDICT + sincosm1_f259_inlined INLINECALLDICT + sincosm1_f259 INLINECALLDICT + sincosn_f256 INLINECALLDICT + sincosm1_f256 INLINECALLDICT + tan_aux_f256 INLINECALLDICT + fixed248::sincos INLINECALLDICT + fixed248::sin INLINECALLDICT + fixed248::cos INLINECALLDICT + fixed248::tan INLINECALLDICT + fixed248::cot INLINECALLDICT + atanh_f258 INLINECALLDICT + atanh_f261_inlined INLINECALLDICT + atanh_f261 INLINECALLDICT + log_aux_f257 INLINECALLDICT + pow33 INLINECALLDICT + pow33b INLINECALLDICT + log_auxx_f260 INLINECALLDICT + log_aux_f256 INLINECALLDICT + log2_aux_f256 INLINECALLDICT + fixed248::log INLINECALLDICT + fixed248::log2 INLINECALLDICT + fixed248::pow INLINECALLDICT + atan_f259 INLINECALLDICT + atan_f261_inlined INLINECALLDICT + atan_f261 INLINECALLDICT + atan_aux_prereduce INLINECALLDICT + atan_aux_f256 INLINECALLDICT + atan_auxx_f256 INLINECALLDICT + atan_f255 INLINECALLDICT + atan_f256_small INLINECALLDICT + asin_f255 INLINECALLDICT + acos_f255 INLINECALLDICT + fixed248::asin INLINECALLDICT + fixed248::acos INLINECALLDICT + fixed248::atan INLINECALLDICT + fixed248::acot INLINECALLDICT + nrand_f252 INLINECALLDICT + nrand_fast_f252 INLINECALLDICT + fixed248::random INLINECALLDICT + fixed248::nrand INLINECALLDICT + fixed248::nrand_fast INLINECALLDICT + }> +}END>c +2 boc+>B "mathlib.boc" B>file diff --git a/src/decompiler/decompileAll.spec.ts b/src/decompiler/decompileAll.spec.ts index c09e2e6..485e0df 100644 --- a/src/decompiler/decompileAll.spec.ts +++ b/src/decompiler/decompileAll.spec.ts @@ -64,4 +64,10 @@ describe('decompileAll', () => { let res = decompileAll({ src: wallet }); expect(res).toMatchSnapshot(); }); + + it('should decompile mathlib.fc', () => { + const mathlib = fs.readFileSync(__dirname + '/__testdata__/mathlib.boc'); + let res = decompileAll({ src: mathlib }); + expect(res).toMatchSnapshot(); + }); }); \ No newline at end of file