Skip to content

Instantly share code, notes, and snippets.

@fumieval
Created May 30, 2017 00:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fumieval/6933b61a6d63c721c8ff790a13e54249 to your computer and use it in GitHub Desktop.
Save fumieval/6933b61a6d63c721c8ff790a13e54249 to your computer and use it in GitHub Desktop.
insert_rp0_entry() // [R4, R3, R2]
{ [(c2ds,
block_c2ds_info:
const 2;
const 32;),
(c2dz,
insert_rp0_info:
const 12884901911;
const 0;
const 15;),
(c2dE,
block_c2dE_info:
const 5;
const 32;),
(c2dJ,
block_c2dJ_info:
const 772;
const 32;),
(c2e3,
block_c2e3_info:
const 1669;
const 32;),
(c2ef,
block_c2ef_info:
const 0;
const 32;)]
}
{offset
c2dz:
_s26q::P64 = R4;
_s26p::P64 = R3;
_s26o::P64 = R2;
if ((Sp + -72) < SpLim) goto c2dA; else goto c2dB;
c2dA:
R4 = _s26q::P64;
R3 = _s26p::P64;
R2 = _s26o::P64;
R1 = PicBaseReg + insert_rp0_closure;
call (I64[BaseReg - 8])(R4, R3, R2, R1) args: 8, res: 0, upd: 8;
c2dB:
I64[Sp - 24] = PicBaseReg + block_c2ds_info;
R1 = _s26q::P64;
P64[Sp - 16] = _s26o::P64;
P64[Sp - 8] = _s26p::P64;
Sp = Sp - 24;
if (R1 & 7 != 0) goto c2ds; else goto c2dt;
c2dt:
call (I64[R1])(R1) returns to c2ds, args: 8, res: 8, upd: 8;
c2ds:
_s26o::P64 = P64[Sp + 8];
_s26p::P64 = P64[Sp + 16];
_s26r::P64 = R1;
_c2dy::P64 = _s26r::P64 & 7;
if (_c2dy::P64 != 1) goto c2dx; else goto c2dw;
c2dx:
I64[Sp + 16] = PicBaseReg + block_c2ef_info;
R1 = _s26p::P64;
Sp = Sp + 16;
call stg_ap_0_fast(R1) returns to c2ef, args: 8, res: 8, upd: 8;
c2ef:
_s26y::P64 = R1;
Hp = Hp + 32;
if (Hp > I64[BaseReg + 856]) goto c2el; else goto c2ek;
c2el:
I64[BaseReg + 904] = 32;
R1 = _s26y::P64;
call (I64[PicBaseReg + stg_gc_unpt_r1@GOTPCREL])(R1) returns to c2ef, args: 8, res: 8, upd: 8;
c2ek:
I64[Hp - 24] = PicBaseReg + Main.Bin_con_info;
P64[Hp - 16] = _s26y::P64;
I64[Hp - 8] = PicBaseReg + (Main.Tip_closure+2);
I64[Hp] = PicBaseReg + (Main.Tip_closure+2);
_c2eh::P64 = Hp - 23;
R1 = _c2eh::P64;
Sp = Sp + 8;
call (P64[Sp])(R1) args: 8, res: 0, upd: 8;
c2dw:
_s26s::P64 = P64[_s26r::P64 + 7];
_s26t::P64 = P64[_s26r::P64 + 15];
_s26u::P64 = P64[_s26r::P64 + 23];
I64[Sp - 24] = PicBaseReg + block_c2dE_info;
R2 = _s26o::P64;
I64[Sp - 48] = I64[PicBaseReg + stg_ap_pp_info@GOTPCREL];
P64[Sp - 40] = _s26p::P64;
P64[Sp - 32] = _s26s::P64;
P64[Sp - 16] = _s26t::P64;
P64[Sp - 8] = _s26u::P64;
P64[Sp] = _s26s::P64;
Sp = Sp - 48;
call GHC.Classes.compare_info(R2) returns to c2dE, args: 32, res: 8, upd: 8;
c2dE:
_s26o::P64 = P64[Sp + 32];
_s26p::P64 = P64[Sp + 40];
_s26s::P64 = P64[Sp + 24];
_s26t::P64 = P64[Sp + 8];
_s26u::P64 = P64[Sp + 16];
_s26v::P64 = R1;
_c2en::P64 = _s26v::P64 & 7;
if (_c2en::P64 < 3) goto u2em; else goto c2e9;
u2em:
if (_c2en::P64 < 2) goto c2dQ; else goto c2dX;
c2dQ:
I64[Sp + 8] = PicBaseReg + block_c2dJ_info;
R4 = _s26t::P64;
R3 = _s26p::P64;
R2 = _s26o::P64;
Sp = Sp + 8;
call insert_rp0_info(R4,
R3,
R2) returns to c2dJ, args: 8, res: 8, upd: 8;
c2dJ:
_s26s::P64 = P64[Sp + 16];
_s26u::P64 = P64[Sp + 8];
_s26w::P64 = R1;
Hp = Hp + 32;
if (Hp > I64[BaseReg + 856]) goto c2dT; else goto c2dS;
c2dT:
I64[BaseReg + 904] = 32;
R1 = _s26w::P64;
call (I64[PicBaseReg + stg_gc_unpt_r1@GOTPCREL])(R1) returns to c2dJ, args: 8, res: 8, upd: 8;
c2dS:
I64[Hp - 24] = PicBaseReg + Main.Bin_con_info;
P64[Hp - 16] = _s26s::P64;
P64[Hp - 8] = _s26w::P64;
P64[Hp] = _s26u::P64;
_c2dN::P64 = Hp - 23;
R1 = _c2dN::P64;
Sp = Sp + 40;
call (P64[Sp])(R1) args: 8, res: 0, upd: 8;
c2dX:
Hp = Hp + 32;
if (Hp > I64[BaseReg + 856]) goto c2e0; else goto c2dZ;
c2e0:
I64[BaseReg + 904] = 32;
R1 = _s26v::P64;
call (I64[PicBaseReg + stg_gc_unpt_r1@GOTPCREL])(R1) returns to c2dE, args: 8, res: 8, upd: 8;
c2dZ:
I64[Hp - 24] = PicBaseReg + Main.Bin_con_info;
P64[Hp - 16] = _s26s::P64;
P64[Hp - 8] = _s26t::P64;
P64[Hp] = _s26u::P64;
_c2dW::P64 = Hp - 23;
R1 = _c2dW::P64;
Sp = Sp + 48;
call (P64[Sp])(R1) args: 8, res: 0, upd: 8;
c2e9:
I64[Sp] = PicBaseReg + block_c2e3_info;
R4 = _s26u::P64;
R3 = _s26p::P64;
R2 = _s26o::P64;
call insert_rp0_info(R4,
R3,
R2) returns to c2e3, args: 8, res: 8, upd: 8;
c2e3:
_s26s::P64 = P64[Sp + 24];
_s26t::P64 = P64[Sp + 8];
_s26x::P64 = R1;
Hp = Hp + 32;
if (Hp > I64[BaseReg + 856]) goto c2ec; else goto c2eb;
c2ec:
I64[BaseReg + 904] = 32;
R1 = _s26x::P64;
call (I64[PicBaseReg + stg_gc_unpt_r1@GOTPCREL])(R1) returns to c2e3, args: 8, res: 8, upd: 8;
c2eb:
I64[Hp - 24] = PicBaseReg + Main.Bin_con_info;
P64[Hp - 16] = _s26s::P64;
P64[Hp - 8] = _s26t::P64;
P64[Hp] = _s26x::P64;
_c2e7::P64 = Hp - 23;
R1 = _c2e7::P64;
Sp = Sp + 48;
call (P64[Sp])(R1) args: 8, res: 0, upd: 8;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment