From be4ed336c888206bc657f85ecb4ddc37a56144ea Mon Sep 17 00:00:00 2001 From: Know-It-All-Brother <354264050+Know-It-All-Brother@users.noreply.github.com> Date: Mon, 9 Nov 2026 12:51:18 -0600 Subject: [PATCH 1/2] Ampere instructions are checked against an Ampere GPU: test_dmsh_ampere_orin.py runs about 190 operations, each the GPU compiler's own machine code for one PTX operation, through the translator, spirv-cross, the chain's MSL rewrites and Metal on this Mac's GPU, and compares every output word with what a Jetson Orin (sm_87) computed from the same 1,024 input rows. The translator tests checked the MSL a few encodings give, not the values; this one finds the FSETP.NE, SHFL lane, F2FP, rounding-mode and signed-zero differences the tracking issue lists, which KNOWN names until each fix takes its entry out. dm/gfx/tools/ampere_orin/capture.py records the fixture on any Linux machine with an Ampere GPU and NVIDIA's driver, with no toolkit or compiler on either side --- dm/gfx/tests/ampere_orin/ampere_orin.sass | 9623 +++++++++++++++++++ dm/gfx/tests/ampere_orin/ampere_orin.u32.gz | Bin 0 -> 1878214 bytes dm/gfx/tests/ampere_orin/manifest.json | 3099 ++++++ dm/gfx/tests/test_dmsh_ampere_orin.py | 297 + dm/gfx/tools/ampere_orin/batch.py | 67 + dm/gfx/tools/ampere_orin/capture.py | 221 + dm/gfx/tools/ampere_orin/compare.py | 138 + dm/gfx/tools/ampere_orin/cu.py | 104 + dm/gfx/tools/ampere_orin/ops.py | 237 + dm/gfx/tools/ampere_orin/prog.py | 163 + docs/agents/symptoms.md | 1 + docs/reference/shaders.md | 10 + 12 files changed, 13960 insertions(+) create mode 100644 dm/gfx/tests/ampere_orin/ampere_orin.sass create mode 100644 dm/gfx/tests/ampere_orin/ampere_orin.u32.gz create mode 100644 dm/gfx/tests/ampere_orin/manifest.json create mode 100644 dm/gfx/tests/test_dmsh_ampere_orin.py create mode 100644 dm/gfx/tools/ampere_orin/batch.py create mode 100644 dm/gfx/tools/ampere_orin/capture.py create mode 100644 dm/gfx/tools/ampere_orin/compare.py create mode 100644 dm/gfx/tools/ampere_orin/cu.py create mode 100644 dm/gfx/tools/ampere_orin/ops.py create mode 100644 dm/gfx/tools/ampere_orin/prog.py diff --git a/dm/gfx/tests/ampere_orin/ampere_orin.sass b/dm/gfx/tests/ampere_orin/ampere_orin.sass new file mode 100644 index 0000000000..98a3ca86ac --- /dev/null +++ b/dm/gfx/tests/ampere_orin/ampere_orin.sass @@ -0,0 +1,9623 @@ +// Each op's program as the translator gets it (dm/gfx/tools/ampere_orin/capture.py): the GPU compiler's machine code with its global +// loads and stores made shared memory ones, disassembled by nvdisasm on the device. Thread t's words lie at shared memory word t * W +// (W = inputs + outputs): its inputs, then its outputs. + +// == fadd_rn +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FADD R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fmul_rn +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FMUL R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == ffma_rn +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ LDS R9, [R10+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ FFMA R7, R0, R7, R9 ; + /*0230*/ STS [R10+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == fadd_rz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FADD.RZ R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fmul_rz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FMUL.RZ R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == ffma_rz +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ LDS R9, [R10+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ FFMA.RZ R7, R0, R7, R9 ; + /*0230*/ STS [R10+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == fadd_rm +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FADD.RM R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fmul_rm +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FMUL.RM R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == ffma_rm +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ LDS R9, [R10+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ FFMA.RM R7, R0, R7, R9 ; + /*0230*/ STS [R10+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == fadd_rp +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FADD.RP R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fmul_rp +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FMUL.RP R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == ffma_rp +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ LDS R9, [R10+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ FFMA.RP R7, R0, R7, R9 ; + /*0230*/ STS [R10+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == fadd_ftz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FADD.FTZ R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fadd_sat +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FADD.SAT R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fsub +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FADD R7, R0, -R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fmul_ftz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FMUL.FTZ R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fmul_sat +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FMUL.SAT R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == ffma_ftz +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ LDS R9, [R10+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ FFMA.FTZ R7, R0, R7, R9 ; + /*0230*/ STS [R10+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == ffma_sat +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ LDS R9, [R10+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ FFMA.SAT R7, R0, R7, R9 ; + /*0230*/ STS [R10+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == ffma_ftz_sat +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ LDS R9, [R10+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ FFMA.FTZ.SAT R7, R0, R7, R9 ; + /*0230*/ STS [R10+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == fadd_abs_neg +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FADD R7, |R0|, -R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fmul_by_imm +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FMUL R7, R2, 0.3333333432674407959 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == fmin +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FMNMX R7, R0, R7, PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fmax +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FMNMX R7, R0, R7, !PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fmin_ftz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FMNMX.FTZ R7, R0, R7, PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fmax_nan +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FMNMX.NAN R7, R0, R7, !PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fmin_nan +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FMNMX.NAN R7, R0, R7, PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fcopysign +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ LOP3.LUT R7, R7, 0x80000000, R0, 0xb8, !PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fabs +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FADD R7, |R2|, -RZ ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == fneg +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FADD R7, -R2, -RZ ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == fsetp +// base register R24 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x8 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x38 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R24, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R24, R24, 0x40, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R24] ; + /*01e0*/ LDS R7, [R24+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FSETP.NEU.AND P3, PT, R0.reuse, R7.reuse, PT ; + /*0220*/ FSETP.NE.AND P0, PT, R0.reuse, R7.reuse, PT ; + /*0230*/ FSETP.GEU.AND P4, PT, R0.reuse, R7.reuse, PT ; + /*0240*/ FSETP.GTU.AND P5, PT, R0.reuse, R7.reuse, PT ; + /*0250*/ FSETP.GT.AND P1, PT, R0, R7, PT ; + /*0260*/ SEL R9, RZ, 0x1, P3 ; + /*0270*/ FSETP.GE.AND P2, PT, R0.reuse, R7.reuse, PT ; + /*0280*/ SEL R11, RZ, 0x1, !P0 ; + /*0290*/ STS [R24+0x8], R9 ; + /*02a0*/ SEL R3, RZ, 0x1, P4 ; + /*02b0*/ FSETP.NAN.AND P6, PT, R0, R7, PT ; + /*02c0*/ STS [R24+0xc], R11 ; + /*02d0*/ SEL R7, RZ, 0x1, P5 ; + /*02e0*/ SEL R13, RZ, 0x1, !P1 ; + /*02f0*/ STS [R24+0x10], R3 ; + /*0300*/ SEL R15, RZ, 0x1, !P2 ; + /*0310*/ SEL R17, RZ, 0x1, P0 ; + /*0320*/ STS [R24+0x14], R7 ; + /*0330*/ SEL R19, RZ, 0x1, !P3 ; + /*0340*/ SEL R21, RZ, 0x1, P2 ; + /*0350*/ STS [R24+0x18], R13 ; + /*0360*/ SEL R9, RZ, 0x1, !P4 ; + /*0370*/ SEL R11, RZ, 0x1, P6 ; + /*0380*/ STS [R24+0x1c], R15 ; + /*0390*/ SEL R3, RZ, 0x1, P1 ; + /*03a0*/ SEL R23, RZ, 0x1, !P6 ; + /*03b0*/ STS [R24+0x20], R17 ; + /*03c0*/ SEL R7, RZ, 0x1, !P5 ; + /*03d0*/ STS [R24+0x24], R19 ; + /*03e0*/ STS [R24+0x28], R21 ; + /*03f0*/ STS [R24+0x2c], R3 ; + /*0400*/ STS [R24+0x30], R7 ; + /*0410*/ STS [R24+0x34], R9 ; + /*0420*/ STS [R24+0x38], R11 ; + /*0430*/ STS [R24+0x3c], R23 ; + /*0440*/ EXIT ; + /*0450*/ BRA 0x450; + +// == fsetp_ftz +// base register R14 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.MOV.U32 R7, RZ, RZ, 0x10 +// nop 0x0220 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R7, c[0x0][0x168] + /*0000*/ S2R R14, SR_TID.X ; + /*0010*/ IMAD.U32 R14, R14, 0x18, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ IMAD.MOV.U32 R5, RZ, RZ, 0x8 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R14] ; + /*01e0*/ LDS R5, [R14+0x4] ; + /*01f0*/ NOP ; + /*0200*/ FSETP.NEU.FTZ.AND P2, PT, R0.reuse, R5.reuse, PT ; + /*0210*/ FSETP.GEU.FTZ.AND P3, PT, R0.reuse, R5.reuse, PT ; + /*0220*/ FSETP.GTU.FTZ.AND P0, PT, R0, R5, PT ; + /*0230*/ FSETP.NE.FTZ.AND P1, PT, R0, R5, PT ; + /*0240*/ NOP ; + /*0250*/ SEL R7, RZ, 0x1, P2 ; + /*0260*/ SEL R9, RZ, 0x1, P3 ; + /*0270*/ SEL R11, RZ, 0x1, !P0 ; + /*0280*/ STS [R14+0x8], R7 ; + /*0290*/ SEL R13, RZ, 0x1, !P1 ; + /*02a0*/ STS [R14+0xc], R9 ; + /*02b0*/ STS [R14+0x10], R11 ; + /*02c0*/ STS [R14+0x14], R13 ; + /*02d0*/ EXIT ; + /*02e0*/ BRA 0x2e0; + +// == fset_bf +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ NOP ; + /*0200*/ FSET.BF.LT.AND R9, R0.reuse, R7.reuse, PT ; + /*0210*/ FSET.BF.NEU.AND R7, R0, R7, PT ; + /*0220*/ STS [R10+0x8], R9 ; + /*0230*/ STS [R10+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == fset_u32 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R7, RZ, RZ, 0x8 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R7, c[0x0][0x160] +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R7, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ FSETP.GE.AND P0, PT, R0.reuse, R5.reuse, PT ; + /*0200*/ FSETP.NAN.AND P1, PT, R0, R5, PT ; + /*0210*/ NOP ; + /*0220*/ SEL R7, RZ, 0xffffffff, !P0 ; + /*0230*/ SEL R9, RZ, 0xffffffff, !P1 ; + /*0240*/ STS [R10+0x8], R7 ; + /*0250*/ STS [R10+0xc], R9 ; + /*0260*/ EXIT ; + /*0270*/ BRA 0x270; + +// == ftestp +// base register R14 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x4 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x14 +// nop 0x01d0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R14, SR_TID.X ; + /*0010*/ IMAD.U32 R14, R14, 0x18, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R14] ; + /*01e0*/ NOP ; + /*01f0*/ NOP ; + /*0200*/ LOP3.LUT R0, R2, 0x7fffffff, RZ, 0xc0, !PT ; + /*0210*/ ISETP.GE.U32.AND P4, PT, R0.reuse, 0x7f800000, PT ; + /*0220*/ ISETP.GE.U32.AND P0, PT, R0.reuse, 0x800000, PT ; + /*0230*/ ISETP.GE.U32.AND P1, PT, R0.reuse, 0x800000, !P4 ; + /*0240*/ ISETP.NE.U32.AND P3, PT, R0.reuse, 0x7f800000, PT ; + /*0250*/ ISETP.GT.U32.AND P2, PT, R0.reuse, 0x7f800000, PT ; + /*0260*/ ISETP.EQ.U32.OR P1, PT, R0, RZ, P1 ; + /*0270*/ ISETP.GT.U32.AND P0, PT, R0, RZ, !P0 ; + /*0280*/ SEL R3, RZ, 0x1, P4 ; + /*0290*/ SEL R7, RZ, 0x1, P3 ; + /*02a0*/ SEL R9, RZ, 0x1, P2 ; + /*02b0*/ STS [R14+0x4], R3 ; + /*02c0*/ SEL R11, RZ, 0x1, !P1 ; + /*02d0*/ SEL R13, RZ, 0x1, !P0 ; + /*02e0*/ STS [R14+0x8], R7 ; + /*02f0*/ STS [R14+0xc], R9 ; + /*0300*/ STS [R14+0x10], R11 ; + /*0310*/ STS [R14+0x14], R13 ; + /*0320*/ EXIT ; + /*0330*/ BRA 0x330; + +// == fsel_cmp +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01f0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0200 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ FSETP.GT.AND P0, PT, R0, RZ, PT ; + /*0200*/ @!P0 LDS R7, [R8+0x8] ; + /*0210*/ NOP ; + /*0220*/ NOP ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == mufu_ex2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FSETP.GEU.AND P0, PT, R0, -126, PT ; + /*0200*/ @!P0 FMUL R0, R0, 0.5 ; + /*0210*/ MUFU.EX2 R7, R0 ; + /*0220*/ @!P0 FMUL R7, R7, R7 ; + /*0230*/ STS [R8+0x4], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == mufu_ex2_ftz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ MUFU.EX2 R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == mufu_lg2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FSETP.GEU.AND P0, PT, |R0|, 1.175494350822287508e-38, PT ; + /*0200*/ @!P0 FMUL R0, R0, 16777216 ; + /*0210*/ MUFU.LG2 R7, R0 ; + /*0220*/ @!P0 FADD R7, R7, -24 ; + /*0230*/ STS [R8+0x4], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == mufu_lg2_ftz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ MUFU.LG2 R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == mufu_rcp +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ HFMA2.MMA R0, -RZ, RZ, 15, 0 ; + /*01f0*/ NOP ; + /*0200*/ FSETP.GEU.AND P1, PT, |R2|.reuse, 1.175494350822287508e-38, PT ; + /*0210*/ FSETP.GT.AND P0, PT, |R2|, 8.50705917302346158658e+37, PT ; + /*0220*/ FSEL R0, R0, 1, !P1 ; + /*0230*/ FSEL R7, R0, 0.25, !P0 ; + /*0240*/ FMUL R0, R2, R7 ; + /*0250*/ MUFU.RCP R0, R0 ; + /*0260*/ FMUL R7, R7, R0 ; + /*0270*/ STS [R8+0x4], R7 ; + /*0280*/ EXIT ; + /*0290*/ BRA 0x290; + +// == mufu_rcp_ftz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ MUFU.RCP R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == mufu_rsqrt +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FSETP.GEU.AND P0, PT, |R0|, 1.175494350822287508e-38, PT ; + /*0200*/ @!P0 FMUL R0, R0, 16777216 ; + /*0210*/ MUFU.RSQ R7, R0 ; + /*0220*/ @!P0 FMUL R7, R7, 4096 ; + /*0230*/ STS [R8+0x4], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == mufu_rsqrt_ftz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ MUFU.RSQ R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == mufu_sqrt +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FSETP.GEU.AND P0, PT, |R0|, 1.175494350822287508e-38, PT ; + /*0200*/ @!P0 FMUL R0, R0, 16777216 ; + /*0210*/ MUFU.SQRT R7, R0 ; + /*0220*/ @!P0 FMUL R7, R7, 0.000244140625 ; + /*0230*/ STS [R8+0x4], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == mufu_sqrt_ftz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ MUFU.SQRT R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == mufu_sin +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FMUL.RZ R7, R2, 0.15915493667125701904 ; + /*0200*/ MUFU.SIN R7, R7 ; + /*0210*/ STS [R8+0x4], R7 ; + /*0220*/ EXIT ; + /*0230*/ BRA 0x230; + +// == mufu_cos +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FMUL.RZ R7, R2, 0.15915493667125701904 ; + /*0200*/ MUFU.COS R7, R7 ; + /*0210*/ STS [R8+0x4], R7 ; + /*0220*/ EXIT ; + /*0230*/ BRA 0x230; + +// == mufu_tanh +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ MUFU.TANH R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == mufu_ex2_f16x2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ MUFU.EX2.F16 R0, R2 ; + /*0200*/ MUFU.EX2.F16 R7, R2.H1 ; + /*0210*/ PRMT R7, R0, 0x5410, R7 ; + /*0220*/ STS [R8+0x4], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == mufu_tanh_f16x2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ MUFU.TANH.F16 R0, R2 ; + /*0200*/ MUFU.TANH.F16 R7, R2.H1 ; + /*0210*/ PRMT R7, R0, 0x5410, R7 ; + /*0220*/ STS [R8+0x4], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == fdiv_rn +// base register R22 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR36, c[0x0][0x118] +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R16, R5, c[0x0][0x160] +// nop 0x02b0 (feeds only the removed addressing): HFMA2.MMA R3, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x02c0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R16, R3, c[0x0][0x168] + /*0000*/ S2R R22, SR_TID.X ; + /*0010*/ IMAD.U32 R22, R22, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R16, SR_TID.X ; + /*0180*/ HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ LEA R16, R3, R16, 0x5 ; + /*01c0*/ NOP ; + /*01d0*/ LDS R4, [R22] ; + /*01e0*/ LDS R5, [R22+0x4] ; + /*01f0*/ BSSY B6, 0x2d0 ; + /*0200*/ MUFU.RCP R0, R5 ; + /*0210*/ FCHK P0, R4, R5 ; + /*0220*/ FFMA R7, -R5, R0, 1 ; + /*0230*/ FFMA R7, R0, R7, R0 ; + /*0240*/ FFMA R0, R4, R7, RZ ; + /*0250*/ FFMA R6, -R5, R0, R4 ; + /*0260*/ FFMA R0, R7, R6, R0 ; + /*0270*/ @!P0 BRA 0x2c0 ; + /*0280*/ MOV R20, 0x0 ; + /*0290*/ MOV R21, 0x0 ; + /*02a0*/ CALL.ABS.NOINC 0x0 ; + /*02b0*/ MOV R0, R4 ; + /*02c0*/ BSYNC B6 ; + /*02d0*/ NOP ; + /*02e0*/ NOP ; + /*02f0*/ STS [R22+0x8], R0 ; + /*0300*/ EXIT ; + /*0310*/ BRA 0x310; + +// == fdiv_full +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R6, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FSETP.GT.AND P0, PT, |R6|.reuse, 8.50705917302346158658e+37, PT ; + /*0220*/ FSETP.GEU.AND P1, PT, |R6|, 1.175494350822287508e-38, PT ; + /*0230*/ @P0 FMUL R6, R6, 0.25 ; + /*0240*/ @P0 FMUL R0, R0, 0.25 ; + /*0250*/ @!P1 FMUL R6, R6, 16777216 ; + /*0260*/ @!P1 FMUL R0, R0, 16777216 ; + /*0270*/ MUFU.RCP R7, R6 ; + /*0280*/ FMUL R7, R7, R0 ; + /*0290*/ STS [R8+0x8], R7 ; + /*02a0*/ EXIT ; + /*02b0*/ BRA 0x2b0; + +// == fdiv_approx +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R6, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ FSETP.GEU.AND P0, PT, |R6|, 1.175494350822287508e-38, PT ; + /*0220*/ @!P0 FMUL R6, R6, 16777216 ; + /*0230*/ @!P0 FMUL R0, R0, 16777216 ; + /*0240*/ MUFU.RCP R7, R6 ; + /*0250*/ FMUL R7, R7, R0 ; + /*0260*/ STS [R8+0x8], R7 ; + /*0270*/ EXIT ; + /*0280*/ BRA 0x280; + +// == frcp_rn +// base register R22 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x4 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR36, c[0x0][0x118] +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R2, R5, c[0x0][0x160] +// nop 0x02a0 (feeds only the removed addressing): HFMA2.MMA R3, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x02b0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R2, R3, c[0x0][0x168] + /*0000*/ S2R R22, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R22, R22, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R2, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ IMAD R2, R3, 0x20, R2 ; + /*01c0*/ NOP ; + /*01d0*/ LDS R4, [R22] ; + /*01e0*/ BSSY B6, 0x2c0 ; + /*01f0*/ IADD3 R0, R4, 0x1800000, RZ ; + /*0200*/ LOP3.LUT R0, R0, 0x7f800000, RZ, 0xc0, !PT ; + /*0210*/ ISETP.GT.U32.AND P0, PT, R0, 0x1ffffff, PT ; + /*0220*/ @P0 BRA 0x270 ; + /*0230*/ MOV R20, 0x0 ; + /*0240*/ MOV R21, 0x0 ; + /*0250*/ CALL.ABS.NOINC 0x0 ; + /*0260*/ BRA 0x2b0 ; + /*0270*/ MUFU.RCP R3, R4 ; + /*0280*/ FFMA R0, R4, R3, -1 ; + /*0290*/ FADD.FTZ R0, -R0, -RZ ; + /*02a0*/ FFMA R4, R3, R0, R3 ; + /*02b0*/ BSYNC B6 ; + /*02c0*/ NOP ; + /*02d0*/ NOP ; + /*02e0*/ STS [R22+0x4], R4 ; + /*02f0*/ EXIT ; + /*0300*/ BRA 0x300; + +// == fsqrt_rn +// base register R22 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x4 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR36, c[0x0][0x118] +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R2, R5, c[0x0][0x160] +// nop 0x02a0 (feeds only the removed addressing): HFMA2.MMA R3, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x02b0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R2, R3, c[0x0][0x168] + /*0000*/ S2R R22, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R22, R22, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R2, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ LEA R2, R3, R2, 0x5 ; + /*01c0*/ NOP ; + /*01d0*/ LDS R4, [R22] ; + /*01e0*/ BSSY B6, 0x2c0 ; + /*01f0*/ IADD3 R0, R4, -0xd000000, RZ ; + /*0200*/ MUFU.RSQ R3, R4 ; + /*0210*/ ISETP.GT.U32.AND P0, PT, R0, 0x727fffff, PT ; + /*0220*/ @!P0 BRA 0x270 ; + /*0230*/ MOV R20, 0x0 ; + /*0240*/ MOV R21, 0x0 ; + /*0250*/ CALL.ABS.NOINC 0x0 ; + /*0260*/ BRA 0x2b0 ; + /*0270*/ FMUL.FTZ R5, R4, R3 ; + /*0280*/ FMUL.FTZ R3, R3, 0.5 ; + /*0290*/ FFMA R4, -R5, R5, R4 ; + /*02a0*/ FFMA R4, R4, R3, R5 ; + /*02b0*/ BSYNC B6 ; + /*02c0*/ NOP ; + /*02d0*/ NOP ; + /*02e0*/ STS [R22+0x4], R4 ; + /*02f0*/ EXIT ; + /*0300*/ BRA 0x300; + +// == f2i_s32_rni +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ F2I.NTZ R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == frnd_rni +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FRND R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == f2i_s32_rzi +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ F2I.TRUNC.NTZ R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == frnd_rzi +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FRND.TRUNC R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == f2i_s32_rmi +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ F2I.FLOOR.NTZ R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == frnd_rmi +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FRND.FLOOR R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == f2i_s32_rpi +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ F2I.CEIL.NTZ R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == frnd_rpi +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FRND.CEIL R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == f2i_u32_rzi +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ F2I.U32.TRUNC.NTZ R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == f2i_s32_ftz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ F2I.FTZ.TRUNC.NTZ R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == f2i_s16_sat +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ F2I.S16.TRUNC.NTZ R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == f2i_u8_sat +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ F2IP.U8.F32.NTZ R0, RZ, R2, RZ ; + /*0200*/ LOP3.LUT R7, R0, 0xff, RZ, 0xc0, !PT ; + /*0210*/ STS [R8+0x4], R7 ; + /*0220*/ EXIT ; + /*0230*/ BRA 0x230; + +// == f2i_s64 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R6, R3, R6, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R6, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): HFMA2.MMA R7, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x01d0 (feeds only the removed addressing): IMAD.WIDE.U32 R6, R6, R7, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R6, SR_TID.X ; + /*0180*/ HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ NOP ; + /*0200*/ F2I.S64.TRUNC R4, R2 ; + /*0210*/ STS [R8+0x4], R4 ; + /*0220*/ STS [R8+0x8], R5 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == i2f_s32_rn +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ I2FP.F32.S32 R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == i2f_s32_rz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ I2FP.F32.S32.RZ R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == i2f_s32_rm +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ I2F.RM R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == i2f_s32_rp +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ I2F.RP R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == i2f_u32_rn +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ I2FP.F32.U32 R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == i2f_s16 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ I2F.S16 R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == i2f_s64 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R6, R3, R6, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R6, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R7, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R6, R6, R7, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R6, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R4, [R8] ; + /*01e0*/ LDS R5, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ I2F.S64 R5, R4 ; + /*0220*/ STS [R8+0x8], R5 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == f2f_f16_rn +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ F2F.F16.F32 R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == f2f_f16_rz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ F2F.F16.F32.RZ R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == f2f_f32_from_f16 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x01d0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R10] ; + /*01e0*/ NOP ; + /*01f0*/ NOP ; + /*0200*/ HADD2.F32 R7, -RZ, R2.reuse.H0_H0 ; + /*0210*/ HADD2.F32 R9, -RZ, R2.H1_H1 ; + /*0220*/ STS [R10+0x4], R7 ; + /*0230*/ STS [R10+0x8], R9 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == f2fp_pack_f16x2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ F2FP.PACK_AB R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == f2fp_pack_f16x2_relu +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ F2FP.RELU.PACK_AB R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == f2fp_pack_bf16x2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ F2FP.BF16.PACK_AB R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == f2f_tf32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ HFMA2.MMA R7, -RZ, RZ, 0, 0.00048828125 ; + /*01f0*/ NOP ; + /*0200*/ FSETP.GEU.AND P0, PT, |R0|, +INF , PT ; + /*0210*/ @!P0 IMAD.IADD.U32 R0, R0, 0x1, R7 ; + /*0220*/ LOP3.LUT R7, R0, 0xffffe000, RZ, 0xc0, !PT ; + /*0230*/ STS [R8+0x4], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == i2i_s8_sat +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ I2I.S8.S32.SAT R0, R2 ; + /*0200*/ PRMT R7, R0, 0x8880, RZ ; + /*0210*/ STS [R8+0x4], R7 ; + /*0220*/ EXIT ; + /*0230*/ BRA 0x230; + +// == i2i_u16_sat +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ I2I.U16.S32.SAT R0, R2 ; + /*0200*/ LOP3.LUT R7, R0, 0xffff, RZ, 0xc0, !PT ; + /*0210*/ STS [R8+0x4], R7 ; + /*0220*/ EXIT ; + /*0230*/ BRA 0x230; + +// == sext_s8 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ PRMT R7, R2, 0x8880, RZ ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == hadd2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ HADD2 R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == hadd2_ftz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ HADD2.FTZ R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == hadd2_sat +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ HADD2.SAT R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == hsub2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ HADD2 R7, R0, -R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == hmul2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ HMUL2 R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == hmul2_ftz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ HMUL2.FTZ R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == hfma2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ HFMA2.MMA R7, R0, R7, R6 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == hfma2_ftz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ HFMA2.MMA.FTZ R7, R0, R7, R6 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == hfma2_sat +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ HFMA2.MMA.SAT R7, R0, R7, R6 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == hfma2_relu +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ HFMA2.MMA.RELU R7, R0, R7, R6 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == hmin2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ HMNMX2 R7, R0, R7, PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == hmax2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ HMNMX2 R7, R0, R7, !PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == hmin2_nan +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ HMNMX2.NAN R7, R0, R7, PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == hneg2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ HADD2 R7, -R2, -RZ.H0_H0 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == habs2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ HADD2 R7, |R2|, -RZ.H0_H0 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == hadd2_imm +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ HADD2 R7, R2, 1, -1 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == hadd_f16 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R7, RZ, RZ, 0x8 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R7, c[0x0][0x160] +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R7, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ HADD2 R3, R0.reuse.H0_H0, R5.H0_H0 ; + /*0200*/ HMUL2 R6, R0.H1_H1, R5.H1_H1 ; + /*0210*/ NOP ; + /*0220*/ PRMT R0, R3, 0x7610, R0 ; + /*0230*/ LOP3.LUT R9, R6, 0xffff, RZ, 0xc0, !PT ; + /*0240*/ LOP3.LUT R7, R0, 0xffff, RZ, 0xc0, !PT ; + /*0250*/ STS [R10+0x8], R7 ; + /*0260*/ STS [R10+0xc], R9 ; + /*0270*/ EXIT ; + /*0280*/ BRA 0x280; + +// == hsetp2 +// base register R20 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x8 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x20 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R20, SR_TID.X ; + /*0010*/ IMAD.U32 R20, R20, 0x28, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R20] ; + /*01e0*/ LDS R7, [R20+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ HSETP2.LT.AND P1, P2, R0.reuse, R7.reuse, PT ; + /*0220*/ HSETP2.EQ.AND P3, P0, R0, R7, PT ; + /*0230*/ SEL R9, RZ, 0x1, !P1 ; + /*0240*/ SEL R11, RZ, 0x1, !P2 ; + /*0250*/ HSETP2.GTU.AND P1, P2, R0.reuse, R7.reuse, PT ; + /*0260*/ STS [R20+0x8], R9 ; + /*0270*/ SEL R13, RZ, 0x1, !P3 ; + /*0280*/ HSETP2.NAN.AND P3, P4, R0, R7, PT ; + /*0290*/ STS [R20+0xc], R11 ; + /*02a0*/ SEL R3, RZ, 0x1, !P0 ; + /*02b0*/ SEL R7, RZ, 0x1, !P1 ; + /*02c0*/ STS [R20+0x10], R13 ; + /*02d0*/ SEL R15, RZ, 0x1, !P2 ; + /*02e0*/ SEL R17, RZ, 0x1, !P3 ; + /*02f0*/ STS [R20+0x14], R3 ; + /*0300*/ SEL R19, RZ, 0x1, !P4 ; + /*0310*/ STS [R20+0x18], R7 ; + /*0320*/ STS [R20+0x1c], R15 ; + /*0330*/ STS [R20+0x20], R17 ; + /*0340*/ STS [R20+0x24], R19 ; + /*0350*/ EXIT ; + /*0360*/ BRA 0x360; + +// == hset2 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ NOP ; + /*0200*/ HSET2.BF.LT.AND R9, R0.reuse, R7.reuse, PT ; + /*0210*/ HSET2.GEU.AND R7, R0, R7, PT ; + /*0220*/ STS [R10+0x8], R9 ; + /*0230*/ STS [R10+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == bfma2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ HFMA2.BF16_V2 R7, R0, R7, R6 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == bmin2 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ HMNMX2.BF16_V2 R7, R0, R7, PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == bmax2_nan +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ HMNMX2.BF16_V2.NAN R7, R0, R7, !PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == iadd +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ IADD3 R7, R0, R7, RZ ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == iadd3 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ IADD3 R7, -R6, R0, R7 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == iadd_sat +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.MOV.U32 R9, RZ, RZ, 0x4 +// nop 0x0210 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R9, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ IMAD.MOV.U32 R5, RZ, RZ, 0x8 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ NOP ; + /*0200*/ IADD3 R6, R0, R5, RZ ; + /*0210*/ PLOP3.LUT P0, PT, R0.SIGN, R5.SIGN, R6.SIGN, 0x2, 0x0 ; + /*0220*/ PLOP3.LUT P1, PT, R0.SIGN, R5.SIGN, R6.SIGN, 0x40, 0x0 ; + /*0230*/ NOP ; + /*0240*/ SEL R7, R6, 0x7fffffff, !P0 ; + /*0250*/ SEL R7, R7, 0x80000000, !P1 ; + /*0260*/ STS [R10+0x8], R7 ; + /*0270*/ EXIT ; + /*0280*/ BRA 0x280; + +// == isub_sat +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.MOV.U32 R9, RZ, RZ, 0x4 +// nop 0x0210 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R9, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ IMAD.MOV.U32 R5, RZ, RZ, 0x8 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ NOP ; + /*0200*/ IADD3 R6, R0, -R5, RZ ; + /*0210*/ PLOP3.LUT P0, PT, R0.SIGN, R5.SIGN, R6.SIGN, 0x8, 0x0 ; + /*0220*/ PLOP3.LUT P1, PT, R0.SIGN, R5.SIGN, R6.SIGN, 0x10, 0x0 ; + /*0230*/ NOP ; + /*0240*/ SEL R7, R6, 0x7fffffff, !P0 ; + /*0250*/ SEL R7, R7, 0x80000000, !P1 ; + /*0260*/ STS [R10+0x8], R7 ; + /*0270*/ EXIT ; + /*0280*/ BRA 0x280; + +// == iadd64 +// base register R12 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01f0 (feeds only the removed addressing): HFMA2.MMA R11, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0210 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R11, c[0x0][0x168] + /*0000*/ S2R R12, SR_TID.X ; + /*0010*/ IMAD.U32 R12, R12, 0x18, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ HFMA2.MMA R5, -RZ, RZ, 0, 9.5367431640625e-07 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R12] ; + /*01e0*/ LDS R6, [R12+0x4] ; + /*01f0*/ LDS R5, [R12+0x8] ; + /*0200*/ LDS R7, [R12+0xc] ; + /*0210*/ NOP ; + /*0220*/ IADD3 R9, P0, R0, R5, RZ ; + /*0230*/ NOP ; + /*0240*/ IADD3.X R7, R6, R7, RZ, P0, !PT ; + /*0250*/ STS [R12+0x10], R9 ; + /*0260*/ STS [R12+0x14], R7 ; + /*0270*/ EXIT ; + /*0280*/ BRA 0x280; + +// == isub64 +// base register R12 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01f0 (feeds only the removed addressing): HFMA2.MMA R11, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0210 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R11, c[0x0][0x168] + /*0000*/ S2R R12, SR_TID.X ; + /*0010*/ IMAD.U32 R12, R12, 0x18, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ HFMA2.MMA R5, -RZ, RZ, 0, 9.5367431640625e-07 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R12] ; + /*01e0*/ LDS R6, [R12+0x4] ; + /*01f0*/ LDS R5, [R12+0x8] ; + /*0200*/ LDS R7, [R12+0xc] ; + /*0210*/ NOP ; + /*0220*/ IADD3 R9, P0, R0, -R5, RZ ; + /*0230*/ NOP ; + /*0240*/ IADD3.X R7, R6, ~R7, RZ, P0, !PT ; + /*0250*/ STS [R12+0x10], R9 ; + /*0260*/ STS [R12+0x14], R7 ; + /*0270*/ EXIT ; + /*0280*/ BRA 0x280; + +// == imul_lo +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ IMAD R7, R0, R7, RZ ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == imul_hi_u32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ IMAD.HI.U32 R7, R0, R7, RZ ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == imul_hi_s32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ IMAD.HI R7, R0, R7, RZ ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == imul_wide_s32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R7, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R6, R3, R6, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R6, R7, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.WIDE.U32 R6, R6, R7, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R6, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R4, [R8] ; + /*01e0*/ LDS R5, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ IMAD.WIDE R4, R4, R5, RZ ; + /*0210*/ STS [R8+0x8], R4 ; + /*0220*/ STS [R8+0xc], R5 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == imul_wide_u32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R7, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R6, R3, R6, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R6, R7, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.WIDE.U32 R6, R6, R7, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R6, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R4, [R8] ; + /*01e0*/ LDS R5, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ IMAD.WIDE.U32 R4, R4, R5, RZ ; + /*0210*/ STS [R8+0x8], R4 ; + /*0220*/ STS [R8+0xc], R5 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == imad_lo +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ IMAD R7, R0, R7, R6 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == imad_hi_s32 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0200 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R9, [R10] ; + /*01e0*/ LDS R0, [R10+0x4] ; + /*01f0*/ LDS R7, [R10+0x8] ; + /*0200*/ NOP ; + /*0210*/ MOV R6, RZ ; + /*0220*/ NOP ; + /*0230*/ IMAD.HI R9, R9, R0, R6 ; + /*0240*/ STS [R10+0xc], R9 ; + /*0250*/ EXIT ; + /*0260*/ BRA 0x260; + +// == imul64 +// base register R12 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01f0 (feeds only the removed addressing): HFMA2.MMA R11, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0230 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R11, c[0x0][0x168] + /*0000*/ S2R R12, SR_TID.X ; + /*0010*/ IMAD.U32 R12, R12, 0x18, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ HFMA2.MMA R5, -RZ, RZ, 0, 9.5367431640625e-07 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R12] ; + /*01e0*/ LDS R5, [R12+0x4] ; + /*01f0*/ LDS R6, [R12+0x8] ; + /*0200*/ LDS R9, [R12+0xc] ; + /*0210*/ NOP ; + /*0220*/ IMAD R5, R5, R6, RZ ; + /*0230*/ IMAD.WIDE.U32 R6, R0, R6, RZ ; + /*0240*/ IMAD R9, R0, R9, R5 ; + /*0250*/ NOP ; + /*0260*/ IADD3 R7, R7, R9, RZ ; + /*0270*/ STS [R12+0x10], R6 ; + /*0280*/ STS [R12+0x14], R7 ; + /*0290*/ EXIT ; + /*02a0*/ BRA 0x2a0; + +// == imul24 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R9, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0200 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R9, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ NOP ; + /*0200*/ SGXT R0, R0, 0x18 ; + /*0210*/ SGXT R7, R5, 0x18 ; + /*0220*/ NOP ; + /*0230*/ IMAD R7, R0, R7, RZ ; + /*0240*/ STS [R10+0x8], R7 ; + /*0250*/ EXIT ; + /*0260*/ BRA 0x260; + +// == imin_s32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ IMNMX R7, R0, R7, PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == imax_u32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ IMNMX.U32 R7, R0, R7, !PT ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == imin_s64 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x10 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01f0 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x8 +// nop 0x0200 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0x18, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R6, [R10+0x4] ; + /*01f0*/ LDS R7, [R10+0x8] ; + /*0200*/ LDS R9, [R10+0xc] ; + /*0210*/ NOP ; + /*0220*/ NOP ; + /*0230*/ ISETP.LT.U32.AND P0, PT, R0, R7, PT ; + /*0240*/ ISETP.LT.AND.EX P0, PT, R6, R9, PT, P0 ; + /*0250*/ SEL R7, R0, R7, P0 ; + /*0260*/ SEL R9, R6, R9, P0 ; + /*0270*/ STS [R10+0x10], R7 ; + /*0280*/ STS [R10+0x14], R9 ; + /*0290*/ EXIT ; + /*02a0*/ BRA 0x2a0; + +// == iabs +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ IABS R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == ineg +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ IADD3 R7, -R2, RZ, RZ ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == isad +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ VABSDIFF.U32 R7, R0, R7, R6 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == idiv_u32 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x8 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R0, R3, R0, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.MOV.U32 R3, RZ, RZ, 0x4 +// nop 0x02a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R3, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R0, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R6, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ NOP ; + /*0200*/ I2F.U32.RP R8, R7 ; + /*0210*/ IMAD.MOV R9, RZ, RZ, -R7 ; + /*0220*/ ISETP.NE.U32.AND P2, PT, R7, RZ, PT ; + /*0230*/ MUFU.RCP R8, R8 ; + /*0240*/ IADD3 R4, R8, 0xffffffe, RZ ; + /*0250*/ F2I.FTZ.U32.TRUNC.NTZ R5, R4 ; + /*0260*/ HFMA2.MMA R4, -RZ, RZ, 0, 0 ; + /*0270*/ IMAD R9, R9, R5, RZ ; + /*0280*/ IMAD.HI.U32 R5, R5, R9, R4 ; + /*0290*/ IMAD.HI.U32 R5, R5, R6, RZ ; + /*02a0*/ IMAD.MOV R2, RZ, RZ, -R5 ; + /*02b0*/ IMAD R6, R7, R2, R6 ; + /*02c0*/ NOP ; + /*02d0*/ ISETP.GE.U32.AND P0, PT, R6, R7, PT ; + /*02e0*/ @P0 IADD3 R6, -R7, R6, RZ ; + /*02f0*/ @P0 IADD3 R5, R5, 0x1, RZ ; + /*0300*/ ISETP.GE.U32.AND P1, PT, R6, R7, PT ; + /*0310*/ @P1 IADD3 R5, R5, 0x1, RZ ; + /*0320*/ @!P2 LOP3.LUT R5, RZ, R7, RZ, 0x33, !PT ; + /*0330*/ STS [R10+0x8], R5 ; + /*0340*/ EXIT ; + /*0350*/ BRA 0x350; + +// == irem_u32 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R0, R3, 0x20, R0 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R3, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R3, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R0, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R6, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ I2F.U32.RP R8, R7 ; + /*0220*/ IADD3 R9, RZ, -R7, RZ ; + /*0230*/ ISETP.NE.U32.AND P1, PT, R7, RZ, PT ; + /*0240*/ MUFU.RCP R8, R8 ; + /*0250*/ IADD3 R4, R8, 0xffffffe, RZ ; + /*0260*/ F2I.FTZ.U32.TRUNC.NTZ R5, R4 ; + /*0270*/ IMAD.MOV.U32 R4, RZ, RZ, RZ ; + /*0280*/ IMAD R9, R9, R5, RZ ; + /*0290*/ IMAD.HI.U32 R5, R5, R9, R4 ; + /*02a0*/ IMAD.HI.U32 R5, R5, R6, RZ ; + /*02b0*/ IADD3 R5, -R5, RZ, RZ ; + /*02c0*/ IMAD R6, R7, R5, R6 ; + /*02d0*/ ISETP.GE.U32.AND P0, PT, R6, R7, PT ; + /*02e0*/ @P0 IMAD.IADD R6, R6, 0x1, -R7 ; + /*02f0*/ ISETP.GE.U32.AND P0, PT, R6, R7, PT ; + /*0300*/ @P0 IADD3 R6, -R7, R6, RZ ; + /*0310*/ @!P1 LOP3.LUT R6, RZ, R7, RZ, 0x33, !PT ; + /*0320*/ STS [R10+0x8], R6 ; + /*0330*/ EXIT ; + /*0340*/ BRA 0x340; + +// == idiv_s32 +// base register R13 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x8 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R0, R3, 0x20, R0 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R5, c[0x0][0x160] +// nop 0x02e0 (feeds only the removed addressing): IMAD.MOV.U32 R3, RZ, RZ, 0x4 +// nop 0x0330 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R3, c[0x0][0x168] + /*0000*/ S2R R13, SR_TID.X ; + /*0010*/ IMAD.U32 R13, R13, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R0, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R6, [R13] ; + /*01e0*/ LDS R7, [R13+0x4] ; + /*01f0*/ IABS R12, R6 ; + /*0200*/ IABS R9, R7.reuse ; + /*0210*/ IABS R3, R7 ; + /*0220*/ I2F.RP R8, R9 ; + /*0230*/ MOV R2, R12 ; + /*0240*/ IMAD.MOV R3, RZ, RZ, -R3 ; + /*0250*/ LOP3.LUT R6, R6, R7, RZ, 0x3c, !PT ; + /*0260*/ ISETP.GE.AND P1, PT, R6, RZ, PT ; + /*0270*/ MUFU.RCP R8, R8 ; + /*0280*/ IADD3 R4, R8, 0xffffffe, RZ ; + /*0290*/ F2I.FTZ.U32.TRUNC.NTZ R5, R4 ; + /*02a0*/ IMAD.MOV.U32 R4, RZ, RZ, RZ ; + /*02b0*/ IMAD.MOV R10, RZ, RZ, -R5 ; + /*02c0*/ IMAD R11, R10, R9, RZ ; + /*02d0*/ IMAD.HI.U32 R5, R5, R11, R4 ; + /*02e0*/ IMAD.HI.U32 R5, R5, R2, RZ ; + /*02f0*/ IMAD R2, R5, R3, R2 ; + /*0300*/ NOP ; + /*0310*/ ISETP.GT.U32.AND P2, PT, R9, R2, PT ; + /*0320*/ @!P2 IADD3 R2, R2, -R9.reuse, RZ ; + /*0330*/ @!P2 IADD3 R5, R5, 0x1, RZ ; + /*0340*/ ISETP.GE.U32.AND P0, PT, R2, R9, PT ; + /*0350*/ NOP ; + /*0360*/ ISETP.NE.AND P2, PT, R7, RZ, PT ; + /*0370*/ @P0 IADD3 R5, R5, 0x1, RZ ; + /*0380*/ @!P1 IADD3 R5, -R5, RZ, RZ ; + /*0390*/ @!P2 LOP3.LUT R5, RZ, R7, RZ, 0x33, !PT ; + /*03a0*/ STS [R13+0x8], R5 ; + /*03b0*/ EXIT ; + /*03c0*/ BRA 0x3c0; + +// == irem_s32 +// base register R12 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x8 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R0, R3, 0x20, R0 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R5, c[0x0][0x160] +// nop 0x02d0 (feeds only the removed addressing): MOV R3, 0x4 +// nop 0x02f0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R3, c[0x0][0x168] + /*0000*/ S2R R12, SR_TID.X ; + /*0010*/ IMAD.U32 R12, R12, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R0, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R11, [R12] ; + /*01e0*/ LDS R6, [R12+0x4] ; + /*01f0*/ IABS R10, R11 ; + /*0200*/ ISETP.GE.AND P2, PT, R11, RZ, PT ; + /*0210*/ IABS R8, R6.reuse ; + /*0220*/ IMAD.MOV.U32 R2, RZ, RZ, R10 ; + /*0230*/ IABS R3, R6 ; + /*0240*/ I2F.RP R7, R8 ; + /*0250*/ IMAD.MOV R3, RZ, RZ, -R3 ; + /*0260*/ MUFU.RCP R7, R7 ; + /*0270*/ IADD3 R4, R7, 0xffffffe, RZ ; + /*0280*/ F2I.FTZ.U32.TRUNC.NTZ R5, R4 ; + /*0290*/ HFMA2.MMA R4, -RZ, RZ, 0, 0 ; + /*02a0*/ IADD3 R9, RZ, -R5, RZ ; + /*02b0*/ IMAD R9, R9, R8, RZ ; + /*02c0*/ IMAD.HI.U32 R5, R5, R9, R4 ; + /*02d0*/ IMAD.HI.U32 R5, R5, R2, RZ ; + /*02e0*/ IMAD R5, R5, R3, R2 ; + /*02f0*/ NOP ; + /*0300*/ ISETP.GT.U32.AND P0, PT, R8, R5, PT ; + /*0310*/ NOP ; + /*0320*/ @!P0 IADD3 R5, R5, -R8, RZ ; + /*0330*/ ISETP.NE.AND P0, PT, R6, RZ, PT ; + /*0340*/ ISETP.GT.U32.AND P1, PT, R8, R5, PT ; + /*0350*/ @!P1 IMAD.IADD R5, R5, 0x1, -R8 ; + /*0360*/ @!P2 IMAD.MOV R5, RZ, RZ, -R5 ; + /*0370*/ @!P0 LOP3.LUT R5, RZ, R6, RZ, 0x33, !PT ; + /*0380*/ STS [R12+0x8], R5 ; + /*0390*/ EXIT ; + /*03a0*/ BRA 0x3a0; + +// == idiv_u32_by_7 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R9, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R0, R3, R0, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R9, c[0x0][0x160] +// nop 0x0250 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R9, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R0, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R10] ; + /*01e0*/ I2F.U32.RP R6, 0x7 ; + /*01f0*/ MUFU.RCP R6, R6 ; + /*0200*/ IADD3 R4, R6, 0xffffffe, RZ ; + /*0210*/ F2I.FTZ.U32.TRUNC.NTZ R5, R4 ; + /*0220*/ HFMA2.MMA R4, -RZ, RZ, 0, 0 ; + /*0230*/ IMAD R7, R5, -0x7, RZ ; + /*0240*/ IMAD.HI.U32 R5, R5, R7, R4 ; + /*0250*/ IMAD.HI.U32 R5, R5, R2, RZ ; + /*0260*/ IMAD R7, R5, -0x7, R2 ; + /*0270*/ NOP ; + /*0280*/ ISETP.GE.U32.AND P0, PT, R7, 0x7, PT ; + /*0290*/ @P0 IADD3 R7, R7, -0x7, RZ ; + /*02a0*/ @P0 IADD3 R5, R5, 0x1, RZ ; + /*02b0*/ ISETP.GE.U32.AND P1, PT, R7, 0x7, PT ; + /*02c0*/ @P1 IADD3 R5, R5, 0x1, RZ ; + /*02d0*/ STS [R10+0x4], R5 ; + /*02e0*/ EXIT ; + /*02f0*/ BRA 0x2f0; + +// == isetp +// base register R16 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x8 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x18 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R16, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R16, R16, 0x20, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R16] ; + /*01e0*/ LDS R7, [R16+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ ISETP.GE.AND P1, PT, R0.reuse, R7.reuse, PT ; + /*0220*/ ISETP.GE.U32.AND P0, PT, R0.reuse, R7.reuse, PT ; + /*0230*/ SEL R9, RZ, 0x1, P1 ; + /*0240*/ ISETP.GE.AND P1, PT, R0.reuse, R7.reuse, PT ; + /*0250*/ ISETP.GT.U32.AND P2, PT, R0.reuse, R7.reuse, PT ; + /*0260*/ STS [R16+0x8], R9 ; + /*0270*/ ISETP.NE.AND P4, PT, R0, R7, PT ; + /*0280*/ ISETP.NE.U32.AND P3, PT, R0, R7, PT ; + /*0290*/ SEL R3, RZ, 0x1, P0 ; + /*02a0*/ SEL R7, RZ, 0x1, !P1 ; + /*02b0*/ SEL R11, RZ, 0x1, !P2 ; + /*02c0*/ STS [R16+0xc], R3 ; + /*02d0*/ SEL R13, RZ, 0x1, P4 ; + /*02e0*/ SEL R15, RZ, 0x1, !P3 ; + /*02f0*/ STS [R16+0x10], R7 ; + /*0300*/ STS [R16+0x14], R11 ; + /*0310*/ STS [R16+0x18], R13 ; + /*0320*/ STS [R16+0x1c], R15 ; + /*0330*/ EXIT ; + /*0340*/ BRA 0x340; + +// == isetp_and +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x0200 (feeds only the removed addressing): IMAD.MOV.U32 R7, RZ, RZ, 0x8 +// nop 0x0230 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R7, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0x18, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ IMAD.MOV.U32 R5, RZ, RZ, 0x10 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ LDS R6, [R10+0x8] ; + /*0200*/ LDS R7, [R10+0xc] ; + /*0210*/ ISETP.GE.AND P0, PT, R6, R7, PT ; + /*0220*/ NOP ; + /*0230*/ ISETP.LT.AND P1, PT, R0.reuse, R5.reuse, !P0 ; + /*0240*/ ISETP.GE.U32.OR P0, PT, R0, R5, !P0 ; + /*0250*/ NOP ; + /*0260*/ SEL R7, RZ, 0x1, !P1 ; + /*0270*/ SEL R9, RZ, 0x1, !P0 ; + /*0280*/ STS [R10+0x10], R7 ; + /*0290*/ STS [R10+0x14], R9 ; + /*02a0*/ EXIT ; + /*02b0*/ BRA 0x2b0; + +// == isetp64 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x0200 (feeds only the removed addressing): IMAD.MOV.U32 R7, RZ, RZ, 0x8 +// nop 0x0230 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R7, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0x18, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ IMAD.MOV.U32 R5, RZ, RZ, 0x10 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ LDS R7, [R10+0x8] ; + /*0200*/ LDS R6, [R10+0xc] ; + /*0210*/ ISETP.GE.U32.AND P0, PT, R0, R7, PT ; + /*0220*/ NOP ; + /*0230*/ ISETP.GE.AND.EX P1, PT, R5.reuse, R6.reuse, PT, P0 ; + /*0240*/ ISETP.GE.U32.AND.EX P0, PT, R5, R6, PT, P0 ; + /*0250*/ NOP ; + /*0260*/ SEL R7, RZ, 0x1, P1 ; + /*0270*/ SEL R9, RZ, 0x1, P0 ; + /*0280*/ STS [R10+0x10], R7 ; + /*0290*/ STS [R10+0x14], R9 ; + /*02a0*/ EXIT ; + /*02b0*/ BRA 0x2b0; + +// == plop3 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): IMAD.MOV.U32 R7, RZ, RZ, 0x4 +// nop 0x0220 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R7, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ IMAD.MOV.U32 R5, RZ, RZ, 0xc ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R6, [R8] ; + /*01e0*/ LDS R0, [R8+0x4] ; + /*01f0*/ LDS R5, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ ISETP.NE.U32.AND P0, PT, R0, RZ, PT ; + /*0220*/ ISETP.NE.U32.XOR P0, PT, R6, RZ, P0 ; + /*0230*/ ISETP.NE.U32.OR P0, PT, R5, RZ, P0 ; + /*0240*/ NOP ; + /*0250*/ SEL R7, RZ, 0x1, P0 ; + /*0260*/ STS [R8+0xc], R7 ; + /*0270*/ EXIT ; + /*0280*/ BRA 0x280; + +// == shl +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ SHF.L.U32 R7, R0, R7, RZ ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == shr_u32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ SHF.R.U32.HI R7, RZ, R7, R0 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == shr_s32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ SHF.R.S32.HI R7, RZ, R7, R0 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == shl_imm +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x01d0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R10] ; + /*01e0*/ NOP ; + /*01f0*/ NOP ; + /*0200*/ SHF.L.U32 R7, R2, 0x7, RZ ; + /*0210*/ SHF.R.S32.HI R9, RZ, 0xd, R2 ; + /*0220*/ STS [R10+0x4], R7 ; + /*0230*/ STS [R10+0x8], R9 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == shf_l_wrap +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ SHF.L.W.U32.HI R7, R0, R6, R7 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == shf_l_clamp +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ SHF.L.U32.HI R7, R0, R6, R7 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == shf_r_wrap +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ SHF.R.W.U32 R7, R0, R6, R7 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == shf_r_clamp +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ SHF.R.U32 R7, R0, R6, R7 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == shl64 +// base register R12 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R12, SR_TID.X ; + /*0010*/ IMAD.U32 R12, R12, 0x14, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R12] ; + /*01e0*/ LDS R7, [R12+0x4] ; + /*01f0*/ LDS R9, [R12+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ SHF.L.U32 R11, R0.reuse, R9.reuse, RZ ; + /*0230*/ SHF.L.U64.HI R7, R0, R9, R7 ; + /*0240*/ STS [R12+0xc], R11 ; + /*0250*/ STS [R12+0x10], R7 ; + /*0260*/ EXIT ; + /*0270*/ BRA 0x270; + +// == shr64_u +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0x14, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ LDS R6, [R10+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ SHF.R.U64 R9, R0, R6.reuse, R7.reuse ; + /*0230*/ SHF.R.U32.HI R7, RZ, R6, R7 ; + /*0240*/ STS [R10+0xc], R9 ; + /*0250*/ STS [R10+0x10], R7 ; + /*0260*/ EXIT ; + /*0270*/ BRA 0x270; + +// == shr64_s +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0x14, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ LDS R6, [R10+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ SHF.R.S64 R9, R0, R6.reuse, R7.reuse ; + /*0230*/ SHF.R.S32.HI R7, RZ, R6, R7 ; + /*0240*/ STS [R10+0xc], R9 ; + /*0250*/ STS [R10+0x10], R7 ; + /*0260*/ EXIT ; + /*0270*/ BRA 0x270; + +// == lop3 +// base register R24 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0xc +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x28 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R24, SR_TID.X ; + /*0010*/ IMAD.U32 R24, R24, 0x34, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R24] ; + /*01e0*/ LDS R7, [R24+0x4] ; + /*01f0*/ LDS R6, [R24+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ LOP3.LUT R9, R0.reuse, R7.reuse, R6.reuse, 0x96, !PT ; + /*0230*/ LOP3.LUT R11, R0.reuse, R7.reuse, R6.reuse, 0xe8, !PT ; + /*0240*/ LOP3.LUT R13, R0.reuse, R7.reuse, R6.reuse, 0xca, !PT ; + /*0250*/ STS [R24+0xc], R9 ; + /*0260*/ LOP3.LUT R15, R0.reuse, R7.reuse, R6.reuse, 0x1, !PT ; + /*0270*/ LOP3.LUT R17, R0.reuse, R7.reuse, R6.reuse, 0x80, !PT ; + /*0280*/ STS [R24+0x10], R11 ; + /*0290*/ LOP3.LUT R19, R0, R7, R6, 0x6a, !PT ; + /*02a0*/ LOP3.LUT R21, R0.reuse, R7.reuse, R6.reuse, 0xf8, !PT ; + /*02b0*/ STS [R24+0x14], R13 ; + /*02c0*/ LOP3.LUT R23, R0.reuse, R7.reuse, R6.reuse, 0x1e, !PT ; + /*02d0*/ LOP3.LUT R3, R0.reuse, R7.reuse, R6.reuse, 0xb4, !PT ; + /*02e0*/ STS [R24+0x18], R15 ; + /*02f0*/ LOP3.LUT R7, R0, R7, R6, 0x3c, !PT ; + /*0300*/ STS [R24+0x1c], R17 ; + /*0310*/ STS [R24+0x20], R19 ; + /*0320*/ STS [R24+0x24], R21 ; + /*0330*/ STS [R24+0x28], R23 ; + /*0340*/ STS [R24+0x2c], R3 ; + /*0350*/ STS [R24+0x30], R7 ; + /*0360*/ EXIT ; + /*0370*/ BRA 0x370; + +// == logic +// base register R14 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x8 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x10 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R14, SR_TID.X ; + /*0010*/ IMAD.U32 R14, R14, 0x18, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R14] ; + /*01e0*/ LDS R7, [R14+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ LOP3.LUT R9, R0.reuse, R7.reuse, RZ, 0xc0, !PT ; + /*0220*/ LOP3.LUT R11, R0.reuse, R7.reuse, RZ, 0xfc, !PT ; + /*0230*/ LOP3.LUT R13, R0.reuse, R7.reuse, RZ, 0x3c, !PT ; + /*0240*/ STS [R14+0x8], R9 ; + /*0250*/ LOP3.LUT R7, R0, R7, RZ, 0xc, !PT ; + /*0260*/ STS [R14+0xc], R11 ; + /*0270*/ STS [R14+0x10], R13 ; + /*0280*/ STS [R14+0x14], R7 ; + /*0290*/ EXIT ; + /*02a0*/ BRA 0x2a0; + +// == prmt +// base register R20 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0xc +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x1c +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R20, SR_TID.X ; + /*0010*/ IMAD.U32 R20, R20, 0x28, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R20] ; + /*01e0*/ LDS R7, [R20+0x4] ; + /*01f0*/ LDS R6, [R20+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ PRMT R9, R0.reuse, R6.reuse, R7.reuse ; + /*0230*/ PRMT.F4E R11, R0.reuse, R6.reuse, R7.reuse ; + /*0240*/ PRMT.B4E R13, R0.reuse, R6.reuse, R7.reuse ; + /*0250*/ STS [R20+0xc], R9 ; + /*0260*/ PRMT.RC8 R15, R0.reuse, R6.reuse, R7.reuse ; + /*0270*/ PRMT.ECL R17, R0.reuse, R6.reuse, R7.reuse ; + /*0280*/ STS [R20+0x10], R11 ; + /*0290*/ PRMT.ECR R19, R0, R6, R7 ; + /*02a0*/ PRMT.RC16 R7, R0, R6, R7 ; + /*02b0*/ STS [R20+0x14], R13 ; + /*02c0*/ STS [R20+0x18], R15 ; + /*02d0*/ STS [R20+0x1c], R17 ; + /*02e0*/ STS [R20+0x20], R19 ; + /*02f0*/ STS [R20+0x24], R7 ; + /*0300*/ EXIT ; + /*0310*/ BRA 0x310; + +// == prmt_imm +// base register R12 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x8 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0xc +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R12, SR_TID.X ; + /*0010*/ IMAD.U32 R12, R12, 0x14, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R12] ; + /*01e0*/ LDS R7, [R12+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ PRMT R9, R0.reuse, 0x3210, R7.reuse ; + /*0220*/ PRMT R11, R0.reuse, 0x5140, R7.reuse ; + /*0230*/ PRMT R7, R0, 0x8880, R7 ; + /*0240*/ STS [R12+0x8], R9 ; + /*0250*/ STS [R12+0xc], R11 ; + /*0260*/ STS [R12+0x10], R7 ; + /*0270*/ EXIT ; + /*0280*/ BRA 0x280; + +// == bfe_u32 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): IMAD.MOV.U32 R7, RZ, RZ, 0x4 +// nop 0x0220 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R7, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ IMAD.MOV.U32 R5, RZ, RZ, 0xc ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ LDS R6, [R10+0x8] ; + /*0200*/ NOP ; + /*0210*/ PRMT R5, R6, 0x7604, R5 ; + /*0220*/ PRMT R9, RZ, 0x4, R5.reuse ; + /*0230*/ PRMT R6, RZ, 0x5, R5 ; + /*0240*/ NOP ; + /*0250*/ SHF.R.U32.HI R9, RZ, R9, R0 ; + /*0260*/ SGXT.U32 R7, R9, R6 ; + /*0270*/ STS [R10+0xc], R7 ; + /*0280*/ EXIT ; + /*0290*/ BRA 0x290; + +// == bfe_s32 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): IMAD.MOV.U32 R7, RZ, RZ, 0x4 +// nop 0x0220 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R7, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ IMAD.MOV.U32 R5, RZ, RZ, 0xc ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ LDS R6, [R10+0x8] ; + /*0200*/ NOP ; + /*0210*/ PRMT R5, R6, 0x7604, R5 ; + /*0220*/ PRMT R9, RZ, 0x4, R5.reuse ; + /*0230*/ PRMT R6, RZ, 0x5, R5 ; + /*0240*/ NOP ; + /*0250*/ SHF.R.S32.HI R9, RZ, R9, R0 ; + /*0260*/ SGXT R7, R9, R6 ; + /*0270*/ STS [R10+0xc], R7 ; + /*0280*/ EXIT ; + /*0290*/ BRA 0x290; + +// == bfi +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x0220 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x4 +// nop 0x0240 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0x14, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ IMAD.MOV.U32 R5, RZ, RZ, 0x10 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R6, [R10+0x4] ; + /*01f0*/ LDS R5, [R10+0x8] ; + /*0200*/ LDS R8, [R10+0xc] ; + /*0210*/ PRMT R5, R8, 0x7604, R5 ; + /*0220*/ PRMT R7, RZ, 0x4, R5.reuse ; + /*0230*/ PRMT R8, RZ, 0x5, R5 ; + /*0240*/ NOP ; + /*0250*/ BMSK R9, R7, R8 ; + /*0260*/ NOP ; + /*0270*/ SHF.L.U32 R7, R0, R7, RZ ; + /*0280*/ LOP3.LUT R7, R7, R9, R6, 0xe2, !PT ; + /*0290*/ STS [R10+0x10], R7 ; + /*02a0*/ EXIT ; + /*02b0*/ BRA 0x2b0; + +// == bmsk_clamp +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ BMSK R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == bmsk_wrap +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ BMSK.W R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == szext_s +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ SGXT R7, R0, R7 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == popc +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ POPC R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == popc64 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R6, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ POPC R0, R0 ; + /*0220*/ POPC R7, R6 ; + /*0230*/ IADD3 R7, R0, R7, RZ ; + /*0240*/ STS [R8+0x8], R7 ; + /*0250*/ EXIT ; + /*0260*/ BRA 0x260; + +// == clz +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FLO.U32 R0, R2 ; + /*0200*/ IADD3 R7, -R0, 0x1f, RZ ; + /*0210*/ STS [R8+0x4], R7 ; + /*0220*/ EXIT ; + /*0230*/ BRA 0x230; + +// == clz64 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01f0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0210 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ IMAD.MOV.U32 R5, RZ, RZ, 0x8 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R5, [R8+0x4] ; + /*01f0*/ ISETP.NE.U32.AND P0, PT, R5, RZ, PT ; + /*0200*/ SEL R0, R0, R5, !P0 ; + /*0210*/ NOP ; + /*0220*/ FLO.U32 R0, R0 ; + /*0230*/ NOP ; + /*0240*/ IADD3 R6, -R0.reuse, 0x1f, RZ ; + /*0250*/ IADD3 R7, -R0, 0x3f, RZ ; + /*0260*/ @P0 IMAD.MOV R7, RZ, RZ, R6 ; + /*0270*/ STS [R8+0x8], R7 ; + /*0280*/ EXIT ; + /*0290*/ BRA 0x290; + +// == bfind_u32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FLO.U32 R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == bfind_s32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FLO R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == bfind_shiftamt +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ FLO.U32.SH R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == brev +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ BREV R7, R2 ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == fns +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R5, c[0x0][0x160] +// nop 0x04d0 (feeds only the removed addressing): IMAD.MOV.U32 R7, RZ, RZ, 0x4 +// nop 0x0520 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R7, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R0, SR_TID.X ; + /*0180*/ IMAD.MOV.U32 R5, RZ, RZ, 0xc ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ IMAD R0, R3, 0x20, R0 ; + /*01c0*/ NOP ; + /*01d0*/ LDS R5, [R10] ; + /*01e0*/ LDS R6, [R10+0x4] ; + /*01f0*/ LDS R4, [R10+0x8] ; + /*0200*/ BSSY B0, 0x310 ; + /*0210*/ PLOP3.LUT P0, PT, PT, PT, PT, 0x8, 0x0 ; + /*0220*/ LOP3.LUT R4, R4, 0x1f, RZ, 0xc0, !PT ; + /*0230*/ ISETP.EQ.AND P1, PT, R4, RZ, PT ; + /*0240*/ @P1 BRA 0x2c0 ; + /*0250*/ ISETP.GT.AND P1, PT, R4, RZ, PT ; + /*0260*/ @P1 BRA 0x300 ; + /*0270*/ BREV R5, R5 ; + /*0280*/ PLOP3.LUT P0, PT, PT, PT, PT, 0x80, 0x0 ; + /*0290*/ IMAD.MOV R4, RZ, RZ, -R4 ; + /*02a0*/ IADD3 R6, -R6, 0x1f, RZ ; + /*02b0*/ BRA 0x300 ; + /*02c0*/ IMAD.MOV.U32 R3, RZ, RZ, 0x1 ; + /*02d0*/ IMAD.MOV.U32 R4, RZ, RZ, 0x1 ; + /*02e0*/ SHF.L.U32 R2, R3, R6, RZ ; + /*02f0*/ LOP3.LUT R5, R5, R2, RZ, 0xc0, !PT ; + /*0300*/ BSYNC B0 ; + /*0310*/ IMAD.MOV.U32 R3, RZ, RZ, -0x1 ; + /*0320*/ SHF.L.U32 R6, R3, R6, RZ ; + /*0330*/ LOP3.LUT R5, R5, R6, RZ, 0xc0, !PT ; + /*0340*/ PRMT R2, R5, 0x7710, RZ ; + /*0350*/ POPC R3, R5 ; + /*0360*/ POPC R7, R2 ; + /*0370*/ ISETP.LT.U32.AND P4, PT, R7, R4, PT ; + /*0380*/ IMAD.IADD R7, R4, 0x1, -R7 ; + /*0390*/ SEL R7, R7, R4, P4 ; + /*03a0*/ @P4 SHF.R.U32.HI R5, RZ, 0x10, R5 ; + /*03b0*/ PRMT R6, R5, 0x7770, RZ ; + /*03c0*/ POPC R6, R6 ; + /*03d0*/ ISETP.LT.U32.AND P3, PT, R6, R7, PT ; + /*03e0*/ @P3 SHF.R.U32.HI R5, RZ, 0x8, R5 ; + /*03f0*/ @P3 IMAD.IADD R7, R7, 0x1, -R6 ; + /*0400*/ SGXT.U32 R8, R5, 0x4 ; + /*0410*/ POPC R8, R8 ; + /*0420*/ ISETP.LT.U32.AND P2, PT, R8, R7, PT ; + /*0430*/ @P2 SHF.R.U32.HI R5, RZ, 0x4, R5 ; + /*0440*/ @P2 IMAD.IADD R7, R7, 0x1, -R8 ; + /*0450*/ SHF.R.U32.HI R9, RZ, 0x1, R5 ; + /*0460*/ SGXT.U32 R2, R5, 0x1 ; + /*0470*/ SGXT.U32 R9, R9, 0x1 ; + /*0480*/ IMAD.IADD R2, R2, 0x1, R9 ; + /*0490*/ ISETP.LT.U32.AND P1, PT, R2, R7, PT ; + /*04a0*/ @P1 SHF.R.U32.HI R5, RZ, 0x2, R5 ; + /*04b0*/ @P1 IMAD.IADD R7, R7, 0x1, -R2 ; + /*04c0*/ SGXT.U32 R2, R5, 0x1 ; + /*04d0*/ SEL R5, RZ, 0x10, !P4 ; + /*04e0*/ ISETP.LT.U32.AND P4, PT, R2, R7, PT ; + /*04f0*/ NOP ; + /*0500*/ @P3 IADD3 R5, R5, 0x8, RZ ; + /*0510*/ @P2 IADD3 R5, R5, 0x4, RZ ; + /*0520*/ @P1 IADD3 R5, R5, 0x2, RZ ; + /*0530*/ ISETP.LT.AND P1, PT, R3, R4, PT ; + /*0540*/ NOP ; + /*0550*/ @P4 IADD3 R5, R5, 0x1, RZ ; + /*0560*/ @P0 IADD3 R5, -R5, 0x1f, RZ ; + /*0570*/ SEL R5, R5, 0xffffffff, !P1 ; + /*0580*/ STS [R10+0xc], R5 ; + /*0590*/ EXIT ; + /*05a0*/ BRA 0x5a0; + +// == dp4a_u32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ IDP.4A.U8.U8 R7, R0, R7, R6 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == dp4a_s32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ IDP.4A.S8.S8 R7, R0, R7, R6 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == dp4a_su +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ IDP.4A.S8.U8 R7, R0, R7, R6 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == dp2a_lo +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ IDP.2A.LO.S16.S8 R7, R0, R7, R6 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == dp2a_hi +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 7.152557373046875e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01f0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ LDS R6, [R8+0x8] ; + /*0200*/ NOP ; + /*0210*/ NOP ; + /*0220*/ IDP.2A.HI.U16.U8 R7, R0, R7, R6 ; + /*0230*/ STS [R8+0xc], R7 ; + /*0240*/ EXIT ; + /*0250*/ BRA 0x250; + +// == shfl_idx +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ SHFL.IDX PT, R7, R0, R7, 0x1f ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == shfl_up +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R9, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R9, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R9, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ LOP3.LUT R7, R5, 0x1f, RZ, 0xc0, !PT ; + /*0200*/ NOP ; + /*0210*/ SHFL.UP P0, R7, R0, R7, RZ ; + /*0220*/ SEL R9, RZ, 0x1, !P0 ; + /*0230*/ STS [R10+0x8], R7 ; + /*0240*/ STS [R10+0xc], R9 ; + /*0250*/ EXIT ; + /*0260*/ BRA 0x260; + +// == shfl_down +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R9, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R9, c[0x0][0x160] +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R9, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R10, R10, 0x10, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ LOP3.LUT R7, R5, 0x1f, RZ, 0xc0, !PT ; + /*0200*/ NOP ; + /*0210*/ SHFL.DOWN P0, R7, R0, R7, 0x1f ; + /*0220*/ SEL R9, RZ, 0x1, !P0 ; + /*0230*/ STS [R10+0x8], R7 ; + /*0240*/ STS [R10+0xc], R9 ; + /*0250*/ EXIT ; + /*0260*/ BRA 0x260; + +// == shfl_bfly +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ SHFL.BFLY PT, R7, R0, R7, 0x1f ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == shfl_bfly_imm +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ SHFL.BFLY PT, R7, R2, 0x1, 0x1f ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == shfl_idx_seg +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01d0 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x01e0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.U32 R8, R8, 0xc, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R0, [R8] ; + /*01e0*/ LDS R7, [R8+0x4] ; + /*01f0*/ NOP ; + /*0200*/ NOP ; + /*0210*/ SHFL.IDX PT, R7, R0, R7, 0x1807 ; + /*0220*/ STS [R8+0x8], R7 ; + /*0230*/ EXIT ; + /*0240*/ BRA 0x240; + +// == vote +// base register R14 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x4 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): IMAD R4, R3, 0x20, R4 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.MOV.U32 R5, RZ, RZ, 0x10 +// nop 0x01d0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R14, SR_TID.X ; + /*0010*/ IMAD.U32 R14, R14, 0x14, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R14] ; + /*01e0*/ NOP ; + /*01f0*/ NOP ; + /*0200*/ LOP3.LUT P0, RZ, R2, 0x1, RZ, 0xc0, !PT ; + /*0210*/ VOTE.ANY P1, P0 ; + /*0220*/ VOTE.ALL P2, P0 ; + /*0230*/ VOTE.EQ P3, P0 ; + /*0240*/ VOTE.ANY R7, PT, P0 ; + /*0250*/ SEL R9, RZ, 0x1, !P1 ; + /*0260*/ SEL R11, RZ, 0x1, !P2 ; + /*0270*/ STS [R14+0x4], R7 ; + /*0280*/ SEL R13, RZ, 0x1, !P3 ; + /*0290*/ STS [R14+0x8], R9 ; + /*02a0*/ STS [R14+0xc], R11 ; + /*02b0*/ STS [R14+0x10], R13 ; + /*02c0*/ EXIT ; + /*02d0*/ BRA 0x2d0; + +// == activemask +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0190 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x01a0 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01b0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ S2R R3, SR_CTAID.X ; + /*01a0*/ VOTE.ANY R7, PT, PT ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ NOP ; + /*01e0*/ NOP ; + /*01f0*/ LDS R2, [R8] ; + /*0200*/ STS [R8+0x4], R7 ; + /*0210*/ EXIT ; + /*0220*/ BRA 0x220; + +// == match_any +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ LOP3.LUT R0, R2, 0x3, RZ, 0xc0, !PT ; + /*0200*/ MATCH.ANY R7, R0 ; + /*0210*/ STS [R8+0x4], R7 ; + /*0220*/ EXIT ; + /*0230*/ BRA 0x230; + +// == redux_add +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ REDUX.SUM UR6, R2 ; + /*0200*/ MOV R7, UR6 ; + /*0210*/ STS [R8+0x4], R7 ; + /*0220*/ EXIT ; + /*0230*/ BRA 0x230; + +// == redux_min_s32 +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ REDUX.MIN.S32 UR6, R2 ; + /*0200*/ MOV R7, UR6 ; + /*0210*/ STS [R8+0x4], R7 ; + /*0220*/ EXIT ; + /*0230*/ BRA 0x230; + +// == redux_or +// base register R8 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): HFMA2.MMA R5, -RZ, RZ, 0, 2.384185791015625e-07 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x01c0 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R8, SR_TID.X ; + /*0010*/ IMAD.SHL.U32 R8, R8, 0x8, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R2, [R8] ; + /*01e0*/ NOP ; + /*01f0*/ REDUX.OR UR6, R2 ; + /*0200*/ MOV R7, UR6 ; + /*0210*/ STS [R8+0x4], R7 ; + /*0220*/ EXIT ; + /*0230*/ BRA 0x230; + +// == hmma_16816_f16 +// base register R14 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): MOV R5, 0x20 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x0230 (feeds only the removed addressing): MOV R5, 0x8 +// nop 0x0240 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R14, SR_TID.X ; + /*0010*/ IMAD.U32 R14, R14, 0x28, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R8, [R14] ; + /*01e0*/ LDS R9, [R14+0x4] ; + /*01f0*/ LDS R10, [R14+0x8] ; + /*0200*/ LDS R11, [R14+0xc] ; + /*0210*/ LDS R6, [R14+0x10] ; + /*0220*/ LDS R7, [R14+0x14] ; + /*0230*/ LDS R12, [R14+0x18] ; + /*0240*/ LDS R13, [R14+0x1c] ; + /*0250*/ NOP ; + /*0260*/ NOP ; + /*0270*/ HMMA.16816.F16 R6, R8, R6, R12 ; + /*0280*/ @!UPT UIADD3 URZ, URZ, URZ, URZ ; + /*0290*/ @!UPT UIADD3 URZ, URZ, URZ, URZ ; + /*02a0*/ STS [R14+0x20], R6 ; + /*02b0*/ STS [R14+0x24], R7 ; + /*02c0*/ EXIT ; + /*02d0*/ BRA 0x2d0; + +// == hmma_16816_f32 +// base register R16 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): MOV R5, 0x28 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x0250 (feeds only the removed addressing): MOV R5, 0x10 +// nop 0x0260 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R16, SR_TID.X ; + /*0010*/ IMAD.U32 R16, R16, 0x38, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R8, [R16] ; + /*01e0*/ LDS R9, [R16+0x4] ; + /*01f0*/ LDS R10, [R16+0x8] ; + /*0200*/ LDS R11, [R16+0xc] ; + /*0210*/ LDS R6, [R16+0x10] ; + /*0220*/ LDS R7, [R16+0x14] ; + /*0230*/ LDS R12, [R16+0x18] ; + /*0240*/ LDS R13, [R16+0x1c] ; + /*0250*/ LDS R14, [R16+0x20] ; + /*0260*/ LDS R15, [R16+0x24] ; + /*0270*/ NOP ; + /*0280*/ NOP ; + /*0290*/ HMMA.16816.F32 R8, R8, R6, R12 ; + /*02a0*/ @!UPT UIADD3 URZ, URZ, URZ, URZ ; + /*02b0*/ @!UPT UIADD3 URZ, URZ, URZ, URZ ; + /*02c0*/ STS [R16+0x28], R8 ; + /*02d0*/ STS [R16+0x2c], R9 ; + /*02e0*/ STS [R16+0x30], R10 ; + /*02f0*/ STS [R16+0x34], R11 ; + /*0300*/ EXIT ; + /*0310*/ BRA 0x310; + +// == hmma_1688_f16 +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): MOV R5, 0x14 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x0200 (feeds only the removed addressing): MOV R5, 0x8 +// nop 0x0210 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0x1c, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R6, [R10] ; + /*01e0*/ LDS R7, [R10+0x4] ; + /*01f0*/ LDS R0, [R10+0x8] ; + /*0200*/ LDS R8, [R10+0xc] ; + /*0210*/ LDS R9, [R10+0x10] ; + /*0220*/ NOP ; + /*0230*/ NOP ; + /*0240*/ HMMA.1688.F16 R6, R6, R0, R8 ; + /*0250*/ STS [R10+0x14], R6 ; + /*0260*/ STS [R10+0x18], R7 ; + /*0270*/ EXIT ; + /*0280*/ BRA 0x280; + +// == hmma_16816_bf16 +// base register R16 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): MOV R5, 0x28 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x0250 (feeds only the removed addressing): MOV R5, 0x10 +// nop 0x0260 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R16, SR_TID.X ; + /*0010*/ IMAD.U32 R16, R16, 0x38, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R8, [R16] ; + /*01e0*/ LDS R9, [R16+0x4] ; + /*01f0*/ LDS R10, [R16+0x8] ; + /*0200*/ LDS R11, [R16+0xc] ; + /*0210*/ LDS R6, [R16+0x10] ; + /*0220*/ LDS R7, [R16+0x14] ; + /*0230*/ LDS R12, [R16+0x18] ; + /*0240*/ LDS R13, [R16+0x1c] ; + /*0250*/ LDS R14, [R16+0x20] ; + /*0260*/ LDS R15, [R16+0x24] ; + /*0270*/ NOP ; + /*0280*/ NOP ; + /*0290*/ HMMA.16816.F32.BF16 R8, R8, R6, R12 ; + /*02a0*/ @!UPT UIADD3 URZ, URZ, URZ, URZ ; + /*02b0*/ @!UPT UIADD3 URZ, URZ, URZ, URZ ; + /*02c0*/ STS [R16+0x28], R8 ; + /*02d0*/ STS [R16+0x2c], R9 ; + /*02e0*/ STS [R16+0x30], R10 ; + /*02f0*/ STS [R16+0x34], R11 ; + /*0300*/ EXIT ; + /*0310*/ BRA 0x310; + +// == hmma_1688_tf32 +// base register R16 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): MOV R5, 0x28 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x0250 (feeds only the removed addressing): MOV R5, 0x10 +// nop 0x0260 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R16, SR_TID.X ; + /*0010*/ IMAD.U32 R16, R16, 0x38, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R8, [R16] ; + /*01e0*/ LDS R9, [R16+0x4] ; + /*01f0*/ LDS R10, [R16+0x8] ; + /*0200*/ LDS R11, [R16+0xc] ; + /*0210*/ LDS R6, [R16+0x10] ; + /*0220*/ LDS R7, [R16+0x14] ; + /*0230*/ LDS R12, [R16+0x18] ; + /*0240*/ LDS R13, [R16+0x1c] ; + /*0250*/ LDS R14, [R16+0x20] ; + /*0260*/ LDS R15, [R16+0x24] ; + /*0270*/ NOP ; + /*0280*/ NOP ; + /*0290*/ HMMA.1688.F32.TF32 R8, R8, R6, R12 ; + /*02a0*/ @!UPT UIADD3 URZ, URZ, URZ, URZ ; + /*02b0*/ @!UPT UIADD3 URZ, URZ, URZ, URZ ; + /*02c0*/ STS [R16+0x28], R8 ; + /*02d0*/ STS [R16+0x2c], R9 ; + /*02e0*/ STS [R16+0x30], R10 ; + /*02f0*/ STS [R16+0x34], R11 ; + /*0300*/ EXIT ; + /*0310*/ BRA 0x310; + +// == imma_16832_s8 +// base register R16 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0160 (feeds only the removed addressing): MOV R5, 0x28 +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R4, R3, R4, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R4, R5, c[0x0][0x160] +// nop 0x0250 (feeds only the removed addressing): MOV R5, 0x10 +// nop 0x0260 (feeds only the removed addressing): IMAD.WIDE.U32 R4, R4, R5, c[0x0][0x168] + /*0000*/ S2R R16, SR_TID.X ; + /*0010*/ IMAD.U32 R16, R16, 0x38, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R4, SR_TID.X ; + /*0180*/ NOP ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R8, [R16] ; + /*01e0*/ LDS R9, [R16+0x4] ; + /*01f0*/ LDS R10, [R16+0x8] ; + /*0200*/ LDS R11, [R16+0xc] ; + /*0210*/ LDS R6, [R16+0x10] ; + /*0220*/ LDS R7, [R16+0x14] ; + /*0230*/ LDS R12, [R16+0x18] ; + /*0240*/ LDS R13, [R16+0x1c] ; + /*0250*/ LDS R14, [R16+0x20] ; + /*0260*/ LDS R15, [R16+0x24] ; + /*0270*/ NOP ; + /*0280*/ NOP ; + /*0290*/ IMMA.16832.S8.S8 R8, R8.ROW, R6.COL, R12 ; + /*02a0*/ @!UPT UIADD3 URZ, URZ, URZ, URZ ; + /*02b0*/ @!UPT UIADD3 URZ, URZ, URZ, URZ ; + /*02c0*/ STS [R16+0x28], R8 ; + /*02d0*/ STS [R16+0x2c], R9 ; + /*02e0*/ STS [R16+0x30], R10 ; + /*02f0*/ STS [R16+0x34], R11 ; + /*0300*/ EXIT ; + /*0310*/ BRA 0x310; + +// == dadd +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R0, R3, R0, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R5, c[0x0][0x160] +// nop 0x01f0 (feeds only the removed addressing): HFMA2.MMA R9, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0210 (feeds only the removed addressing): IMAD.WIDE.U32 R6, R0, R9, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0x18, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R0, SR_TID.X ; + /*0180*/ HFMA2.MMA R5, -RZ, RZ, 0, 9.5367431640625e-07 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R4, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ LDS R6, [R10+0x8] ; + /*0200*/ LDS R7, [R10+0xc] ; + /*0210*/ NOP ; + /*0220*/ DADD R4, R4, R6 ; + /*0230*/ NOP ; + /*0240*/ STS [R10+0x10], R4 ; + /*0250*/ STS [R10+0x14], R5 ; + /*0260*/ EXIT ; + /*0270*/ BRA 0x270; + +// == dmul +// base register R10 +// nop 0x0000..0x0140: the JIT's barrier set-up +// nop 0x0140 (feeds only the removed addressing): MOV R1, c[0x0][0x28] +// nop 0x0170 (feeds only the removed addressing): ULDC.64 UR4, c[0x0][0x118] +// nop 0x0190 (feeds only the removed addressing): LEA R0, R3, R0, 0x5 +// nop 0x01a0 (feeds only the removed addressing): IMAD.WIDE.U32 R2, R0, R5, c[0x0][0x160] +// nop 0x01f0 (feeds only the removed addressing): HFMA2.MMA R9, -RZ, RZ, 0, 4.76837158203125e-07 +// nop 0x0210 (feeds only the removed addressing): IMAD.WIDE.U32 R6, R0, R9, c[0x0][0x168] + /*0000*/ S2R R10, SR_TID.X ; + /*0010*/ IMAD.U32 R10, R10, 0x18, RZ ; + /*0020*/ NOP ; + /*0030*/ NOP ; + /*0040*/ NOP ; + /*0050*/ NOP ; + /*0060*/ NOP ; + /*0070*/ NOP ; + /*0080*/ NOP ; + /*0090*/ NOP ; + /*00a0*/ NOP ; + /*00b0*/ NOP ; + /*00c0*/ NOP ; + /*00d0*/ NOP ; + /*00e0*/ NOP ; + /*00f0*/ NOP ; + /*0100*/ NOP ; + /*0110*/ NOP ; + /*0120*/ NOP ; + /*0130*/ NOP ; + /*0140*/ NOP ; + /*0150*/ NOP ; + /*0160*/ NOP ; + /*0170*/ S2R R0, SR_TID.X ; + /*0180*/ HFMA2.MMA R5, -RZ, RZ, 0, 9.5367431640625e-07 ; + /*0190*/ NOP ; + /*01a0*/ S2R R3, SR_CTAID.X ; + /*01b0*/ NOP ; + /*01c0*/ NOP ; + /*01d0*/ LDS R4, [R10] ; + /*01e0*/ LDS R5, [R10+0x4] ; + /*01f0*/ LDS R6, [R10+0x8] ; + /*0200*/ LDS R7, [R10+0xc] ; + /*0210*/ NOP ; + /*0220*/ DMUL R4, R4, R6 ; + /*0230*/ NOP ; + /*0240*/ STS [R10+0x10], R4 ; + /*0250*/ STS [R10+0x14], R5 ; + /*0260*/ EXIT ; + /*0270*/ BRA 0x270; diff --git a/dm/gfx/tests/ampere_orin/ampere_orin.u32.gz b/dm/gfx/tests/ampere_orin/ampere_orin.u32.gz new file mode 100644 index 0000000000000000000000000000000000000000..3482d102adb5be6fac90b18e674802ca718defcb GIT binary patch literal 1878214 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 z ^fmr=P0CDY4b=QH-&0Pjvow;29(cUJ@*~Pk^%-cd-mdF?jyfWL?>IDZ?|O z+)7#PrSeD~3l{k<7aO}D<$g`X#P0uGZEt7#-0_xDVrwW!J1YhyU%rG23g;Q@EeXxb zIRgR<@}mOc!SM-=f?To&>!gS;<~t$Z9(ghUjVC*w4F6GSu=`OlNlE%j5m9&SlZojD zdNDRIKV>G$ho(5h+$zNq%Wa!dEX_8xN`m2Y-{p#z$H+gIfH%=tNQ=%9LpPT&J1P+0 zBXzSWcK;z=(C6#oQ>uFW+~5T_4cBt7X%jN4X$vzHZD+w>W%C&mbq=L#V3S&Lg$A)8 z{JL7#&C9svLD$VWdWP%YgQ9iXK!7WQ!S=6NP!qu7v`{n7Sve(S)y%!=g8H=s!EmcX zL}66vM^qz?q`1NHren3Rhe;XFgd(0-z5(xnZ-6VdSH)I8Y>2Ji(6B(u4S1cHZy=y2 zV5s37Tg^Ft$2)Um8m`ZV7AK5T(HvN@{ko6R^jAJoYKJoU&A-n(vE+3SK5MA^H0GT= zpDV^6^i+(?^x*o59{zv=@+DdhoL^Bw0o77eoA+iPq)>oklh}5EB~RxqUeO?_<@&2| zf!II|k=f}1zKO8_eQycq4EqhwT+=K)CvXDGMHEBJcfmM5fnvO-i&T7T7PYX9r{=j% z+5zx*nb^qYDXjO9RWZ7Mat*GlvM$n{(<|m*tnOsq{=@`Xhx_1cTFb;f*r!oiI(CkX zFJv%%`q({KyWAGI7GGg)Hn3&P+FMOD{!U}?`ezcHd&%l@L9(7jX4l)si!xVn&D1c8 z*?Np3b*3pW?@nA`FFJn)nR+DI`g2gMvDQ}Z^VGArzNLe zFKQF9=~ond^v+1HcBNYd=iJ8nO<)1sb;%kYITOvm5tM(bIkoo4IJ;%_hlP%sae85( z>#$9lNJFpj6%(@kp}p9S+#hOZH8}=;(kpW=b<>DX=EHpO74IDY`-{{4O>^m|2pErAAHs7JtL?XZ-ru)hCk^YY`*qfn)BmW# zDK?NM$;hD?$w=pQi>Gx0WtnlMtkSJ0Cz7nqTmUIxU6c2YeH*%F8D=wJSye+9>lLLo zU#=(}O}L)6|4r)c;B%qC?4rQD<5r93ugu4}mW0aHIylufMf26kx;5(rY&@o=h+gk_ zardI$#-A6rI_A|QS#hhQ>h^YvY!_T3%tGrxc1VL zZ$GW8cisQ%)Ay0QkM}Dd$u($SRvgcI0VpVm9k)YrI9=>`uPIZ`8P{wfDc&FBh59sD zQrze#M>Zh&@7?NajbB1^jT>Lb0zXxEll;bqWY)m#chAY*!{{=!-ENd{U!UP)RR0v) z2@#*YID&hMpS^gf9?b!?_F6WdW@zYq1ygbkCJGJrB7Je9(RH7Wu=5Aa*vswo4Q1Sw zXrGrW<8DFst!rBYbZm{Ak&GlSOINd8P6x$(6-s+D89N0EA}!Bb9S3K`^5K@1nJjj` z4Z3HhJ9Cx%y{r*%Yhknk`W&9q`?GjX4=`r1KEpef#yR`aNo7v$9*(VYV9hkGsk+XT zI2vqg^(6xV~C5Zf0%4y?d~%Ck-4ge#PoaD#Ehm-eLiq z6ThYYKMJ40^VF0QwdD)U73GZTxOw7W`jb0)KhM-vh?(_axp;|LpXt0GTS>0^0dqYj zt6@nRu3rR}qip zBb^7;vj5eR#H`3Z>yhr@Efyn+b&W2Mvwb)Q!sG0FHPxhKTpv?4Y4x6>MHbobJ9n(_ z^*ey}QOEacObWFov-82#AG0-zu9<6cdN5JfZ#z$nX8PXA282a+n>r`IgkIC9S4Wi` zFwQnuif+v=+aO+2J7y!+&$VM7b9&vP>uLJzzd6q}bPU!B)~el_<`H#ixhOn4d(I+s z9$l^1q)=py#^}VK3{$pD2Q8v+QdrE0iSz-EYBEFsZ5Ca|K|(*D`Vn4 ze828uP=1L!Z05zdu%qw9V1JBXouT+rGmp>5ly*HXy?;xlC=SPdcV>z%b>xYHr{2N9 z{^G3V8XJ_%W0V(hz~G@R^=QNMop_eXiTgTe(m|)7z@Ebp={P1QMByR@ zlS~Qy52%k7y=9lSMa!-d^J0gVW2@(W1G{ILqP$z$y!Vv?oH&q>vn0k*;c&Ua$Mr@f z#X~5rkE{}DqF_mE2);_Xme&G3<6*e)+g9S7^(9dL{xBHm!2VHkpko_wiF=0RX1a6S zu0I+Fc-y7RnDCaR(Y8zPH_^9=hQrHDH?sIA7r*0!h2}MU(esa~OPDPe4yTWWDd8G3 zDPOHX8DAiwfBOM+6#o7=c%$@Yd0R5^$^1m(YRl(D^x4UGZAACo_{z z;QyU`nZw-N%rts9DeW;{D@Eax+HJ@qCywjJ=#1(!qSpR$JDu3GNb3Czmf4Y=rj?58 z*f}FUiWQ3Mz8`sd&&1B)9FBEcpP6NPZ03pjq8P%Q=d`YG@;&t~bhfTZJ9dg)>)pG9 zl`$NkE(FKv*U0fI{X_0!Y0uDFz5V=8@m9}iHt2IBdrx!&Wk*PHb9d>d5l(%rZ!fgp z3#lvz`TO612Uh0LIoXYIUAi4U&YH{#4N_Qxa*QX&yYJ>bbc|#7R)7;Cos+%a(C@uH za=J!lT!vn&&Q{mJ6qDZt!@C)G$H`=CKO>nt2XKEphimDXPrwj(@pM0yDd+nbk+F6a zochCDCxM+87F0P z@?VLCc7b?*ZuR#ecWZPmU9b z2%0K=O$*eN{>Hil3JYL6i=sxfj&R*AT<3;WWshTzS%waJbKq@NcHcpEU3?$!eR({x zW{Gpn*!KlEc}qSYCk%Hk*@W%(Heyvco^8Q z^A>hpD=E?cGp3T4y#8+wX}125ot`K4w@$*-XGg*82LD{PJd2)(cm1bZSEN%_z@#1A z+i-WsRq3*A>%MZEW##1P)sB@PBURG*fv%-e zEkew_yaVTD>AbOxM?ae#@W~#Rm4%b_ZOFg1+KVjg-0^sGTEH^?&vziw-~%ay6AlJ>Z_Pb z_jO$_7~uPs5ce-PdtavFJopg)w)O{w6wuyu$VkJr+2tcxA+K?qZIktp=Joo7komIZ zHTtYiS4Uvx%T4aj!&0^Q#RjpCcl8pk`9yYdH4~QQ*X266n#s$3DNv@R4gRZJIe~lD z2$`(b;`um%`*zJ2nwRg(KN>z?=xQD(_S#L#F%{tkyhvF0_2K99Naq(&J}?ai_-%AN zsQ&GM(DZKykX+nEw&1*xnzg)4PJMv^dl`#C3h3I6o@G}@js`*mjz6YM)N3xniPv@6 zJwIFF-kA-+iNd6h--l2>{<45mUyg16!8V0s-2Muce$0CUy@yp0&XF>}Z%cdf&8TNJ z2m`PNf4>#XxJLbqZ8S&hf56?_+@P!dk9uwU?|A+-nTs_bthG)75|3knmT4QQ|F9g{ zsnn#0rK&jR$@43QOqK8;Rj$QB;MbxcFuq4poo$1+VEaH62OEEavj4;0b^l}e{eL4` z-f1Y2CM{C3_jPW2Q!12(N_%K8<)%bSL=*}oN|BY#b?i-pk|ZsKB9%16_j;ZCzT)#g ze1CX8p0~Qkb)D;s*Lj`S>-mb))t*|Rt9^HdQ7X|*VA{o>SJ#cwcOz@B3gu=@*4AC0 zWEQiz4y(3ulSu7|#|he#80bBktg5cQ3-k2?so759MMiB61s@*8?)=DLgV#sQ`ksC= z=on^s@Qk2@&0zgw0qVo$>t?fVUd5?F)68TaO(gU4AJdY_ z$%i-`&C@r}LVrSTGRJdzuZ%YR!T|PzTLQe*7Zz8bMGRzG!;OhHXxLKvTZ4>o+>gch z{OS(uD1HB<1A{P$l{kNAGqF3?9Lwb-y4sq-n1J>yvb42hwPaq+P$292nd~GVdJ{I<<_u;MScU`(9dYjJ#~^-n@KMn_`yo z>&I~4KJSazr!)=kWzZ4$&-Hptm+qv)7(oA$c3)?@%iyriZU+1qZz^~5 zZMZ)h-t)l&{5skmuQ)zaV7E zh9yGG7I#}%V)dYZi>>h^AaKBb6k3-vmq2b+6mtVW5Ullo$4`NH8@_C@NX#<>kAQDvXP8zG6}OGbI~=ZkvkiH*qOe1o_s+X*30 zFo25L=xX)pUe-4^#T0sPXv^}O+?4RrSxa*}G`=Et&$I+Lib0aTax54}~0?S4x&JpM*vN?ATviA7Z4VS`Mjiwx1OVP3zVk@;n^ft2_&N*kF+|3}A%jLs^I+*;Hb-)R1o!K{my(d%XN z&_M4nxl#9xI6NQbzxC3FuN9_0sp1cwRPh3*ravdPUVipi|59^V&YbcQxe;^f(U38% zzax~3IS+Rmgq3VIVEv72AML{cHpcaE*<<{Z0nw;df0rktJe)e8`ha53v4?8k^7p@> za|3Zo^smm*>NCrq>1UQb)6Wp>L~ISB*JBt&2I`87rIDDLmajbB#lBT-*gC|JK2tf1 z!}g`gPa^sC7X$<@HGASAd97UE&%>S1rsW`5Mu2#NOK$okM@gu)y2~&f80e1oK~Ur9eX(J$WjGYpL`(@bXjnzW8-Evp4Kg?W9&Rlzk!soo#H?}<3kNaEgdYLpB4BV-7O z)X&9fqfcmmy;W%ixUBp`XzAH)s+Uyn-~a|}t@n&A3Fs$-S2mZX@t!g7dGgQhR5mqK zX)wRLwEOOMSo_zmP(F^n-tAaj8Yrs4%VXnGcVHbi54O6>`H99&*jTggZge$&J*36A zE;tGR+X}8nuosjo+SIrkJB4SpKMxmip;Z88tyu0hA*f?Y72!YiA z5`%I3eM<6-ZNZJVT~$jYTQGa}#_E>A-wQ*uk^!tPfR24MHPAKiG%oW3`wx%P>^76!OzNbiNJjl;XS^iV# zslAI%(F@}?RxV-ye@h*bpmp$>_*=9nqoO>ZQw)U9Qe+Q)%WR+hr(q| z3o|M6Ndc6Y?CK4{P9i8H%7qO;4%1ljv#TW$tv! zNq@qFzYuqf?=uG4i`p4bhnxDb{JVLX#-1j)t}Usa$?TbRv&rTv{K{{LyI^ z=RF_OH@?@rQ1H%QFc4+CNm`fsAYy0!ZCwvCYMgBDL#L57rM-1k+!^NeFpnuoYwcd= z%_%6rvl&2JC)gC@qi7kG_w*G)J%03-91)_&Jhoo|+gT7TciPxu*hM=FS+wovxmzDx zdhW@2Ji@XJI$tUzf7bYAj*8OJ7nyW4??OMPXqO75y-g)gcvuqW)OjuI=dzOxzQ5%J2|`ZNd1;6hII2)>CKzI2_T-dml5}MN=VEgL}edE+oqW5ceKCIdn zu(t)DuYQV$)c$1W1hOUz856O}ZV5M7XVbTZB_XcUb~}nT zTRd6PrsR|fiNoRCd7f5ss>F7ONQjYIgUl8U>JMI+6r zlF8!(KJYZ)nKfdAHnX0;8h8rh`$?Hbc~D}s#pAN{hLDfXh`rJ~O|XD_Z4A+h&WoLg zC#K9L{$&->D%6#gO6(Mek>d?!k2b@iA0O&xw|+!&k{DI>tk>b?bnyJcw_aAd1s0ws z^F{mOmhR3=Px3xYdXUNbw-b(kLuc;IHP4hDgC`t|u#k2+wtbf6gk}77fQ&t_H(XLQ*ZQ?q-K^WOI*ILKUf!m>91aS_|^_n%Fyi@=|@}Sh9`xe zti)j_NvsV0;+c;!n@13#)=;)@&)nPWek#$s4C{@E(*S#QWf#$;vRt&wjKst#?JBcW zUu&=5qxBM7p2<`lc_)pQ9r2W&Fy`c0@7dS!soBIAYO9P^nO072Q&2%KRtTBa(=z4N z*eFP~#gM^Z>?P5owKx-YiP|@LA62^6%esug{yBOYZpweOed{J-9|o-Eij-1DApqJv z(Yy!Sk3EYouN2C^zt7)XzF-B!m|)*!drb_M&oZbhEvjvI)yHcN1#Z9YEHX)J zuV6a@*w2zs7|bIlF&_fce1b5W+Y0M)qxe+p(h*OuWAJy^@4U#Zy!!%uYcz7jU)V2g zt#h(IB|Wd7oaYD*#;?HjneG!I8vd5f_YGA2XNN%_3ocqXRmJ~S+?j|^=w#ReByB$d zE$K<(gct?j-GUtytE2B#_KMU|+P_TewpZEO^0=P1@vo;1PrD)|g#c=aKhfwC*DSc! ziWxkO)sp&wf3@4-8vGT{#cdNQBzCJUmL~gq!z20H%xjVd@U8U#u_=05)sWb@qa z{@gEA8&F5an18lMa_IH}b-*qw1^ew0_KTo>?}m;xbh?~ECH@cwzl&v2+7e58p#x`c zMh7J}Ee{=x>ml~YFW(!uO)Ci{o?Oa#T-|8u{96Exwrw`rqQ1sVr2CD&?6fj*cK+b^ zb4_xd(Ca}x>Go4>3@@c;9=?hI_fBs*4RdY#r#%Qjbkn!JKnE%sP~cHt&W`J(4zx;| zz;u=6c@e4Ap4ucPS$IN2_3!Zw)dn6JW$?T%#=Vbo{NP{CpGPWL`>*TR0}_W=nV788 zdF(+|V#6!kA=XLO6+Fkz!0YAbQjuC^n-2y4bJohmJe^w5k5@T=CN}$ZH8%q?o|yKt znSDOr-1Jud*DIft%pJVDH-7mz-Qe(#H(!;`7zO_tMs&gYyvNw{eZZ9d*^TOg-)U3c z{j-|#2>+bK^^$@94nr`<+q>V>#5ReY#t!&XMXM#s}PrbfZng| zJ^3odq>_#0)AhWQ0U|6I)G(Z?+39)|0UDzjK|l#36yi}+_go+XvU_ao85)92>~SG^_e zvn}ElrQ+;M`~gj#y?JrEC3IlpB18T@h|N`{=8pQ+ms35fXzr*ZedyIUJaMzdvdJeF zbpnXCt919RLH`1mJ}W&o@|(#{-R}%Se~Ft7`ijZ^9FNNRNc>SEYf@3mT#3^Et;sAv zms!SxpVM;fHg9Mv&0jKBo8TP`ujP*;k6R6apsVX~(DF^*jU}&%9pJuTI8Sp}PK&oD zU2>)mZ4As9$Zo*X4~1FIU;w{sl$L`oU)K3Q-0_z>pPMu?_D3#`AH4>^H;52 z{Dr|%iN$1Zllpv$`D+HgdUd83PIlz&{ToSHAj8s#^j$i}dcU!hl?X1MHXP3q4m4o* zv$KSQ4S2bonCjg)fa_I%8%(-nKAcwdQB`tWX;$f-JhGp@=J^1d3jW0>Hrz!s zx@gu?4#>RL+#|>5x7sGjA(v4e2hi_@I862X~FLKYS??t zIy)GLkFRW2$=qRI#qSSXF_FK8lQp_9U|QeplzpAqw2AU9WXhmb{yKi5c3Ndq_)8-I z{FdCgYPq*7V=#d47bRMoFKWwdIUUzQQ=8J;7>HLa4`gGGS#4vh7Kz2l+d^L8;NVac z5*+$Z^OzqqYd| z*VI?Z^#)$VU`fFbG|JE>jm>SF_c<89sOrwvc(zwBG8yarmdrz?bxpx=-=V){uMF-9 zcs>wAjwjJ~p&#GVGv)|_pKw4vu2EUlQeThNfzH3Dq?dQ8mZBLP-nZ?e;lk62N9LWT zuNNP1O4o={T}E^daeKRZ^RSH+(A z)^Ht*eaIr`^es~g`FZ8M^%VO4xE%pMN&Xwd8?H$so4j{Bl|`Q7sdLZn`kSH$T3hrj zuj!?Lkfup08CwIadSqQyPOMj8b0^o<-v6Y}e4nF%!80WE;t`U!S4!7Apk(m5qnhZJ z`g;s=Zqje@br`?Lb%FI-t6c@3{Vc+&8`tg4M6L)qb;) z?1{DBysQ0HeNVqofS8caF&UJhUWnxBw_HFDr7J|s1ozFTIjJs9mIZX`w>XA zA0viwN$iK5{yDVd*E@7W@toOvXAUlil1s7JqO#tS!Ev8wWUkN>IBBiTfd5r!Lm`?Og! zrW!DH?Kt#4VjF4iBZu1AwNr&1H@PXjWUlTyc?LZVLmZ;(ao`fv*R`}gaA_Gl+n$3{ zq28Wt@4=}X2kQ)Q$@zBC-2|fd=4U!S|B>_X{6!y|(UWb@D4w?HK+S<08Dt%;f4`Tt z_f+=%n4p#=nuf9&49mIY1=pm#;Ilqp(2dL1Omp{NX{)>fcZHqU6j949${ zi4{JE)F*qByp2B$w0sVwSt&VPc(7_zQ!0a|fu5s_RJ@TwsnH0n{()m~tJ8ITD|E~pIfl~ zf_Dv(l+Cyw<)4&(;KtRGbDq7oy!}iu`%IR)>EnVMs{u|(AX{gxGdU^#OT{N*5Rj+wKOrm->z;Qg-wFa-`NN^7(ZG{9Ya^e-iL2ks5M+hnLQIs}dGKJr|f*G)YB| z*mg%94u0k?djI68!;c*#j;)Qp_;z7>2LSB-&Y)Sixqsf$ItD1^IbwZzDCG!RW)*?l z6|!+$csM#(mY?6UUsrDBfiTS4tNinhe>I(7Mq0~t`U>gqx$jls#(=NuVW4(4oJQ|b z3fS=mYsSw34}JccBXC7iBNZTEe~_#veW~8)Vft--*cVLPAC64#OIFTfK>9Ot&1YgJ zp@luP>9l37Jf8tG&i*DnfdENKS129$WXMP@=bm6vH3I@ZaKHQUEz&J?vSmKz3LU(e5;=Y^TSr6DobU zUWl~It-}SJ+^ZRM!bCBH(UzGwFpPIbs_7|d;HZUhL%fxsoZ$4ox1pZ%;hRKw^hG)GhkzG`?Q~vG5PdBDa`S<9`_3u zKRaN$@~~3XIeE$Fi0!}OAFd@y-k{L3RW^A5)5;mpN7o*i=9z6;8TtC7TqDiat*ZT< zPC3WQuxEV4zOb9yT`%?I26eSPmvRspWA&)^Y-Q38q8*EiR(n|m_7x$8f?*Jcs$y*5y!I@eAz;skm z*hKp8Q779w6@||E=NA>%^R)$tKhwb|KB-Q9PWrW9nmC*Rv{kEkHJ<7@!)E3yQ5*S@ zFVWeqOgthzsKSu}(TvJKZ3WCc+=xbe7Rr8nB?4a<5sCj(7X7Gi`}m*z82!8UtXuIh>Oes!0m+Pj6T#)DNyp)ITeF)5Z>G~F3alD6=pU!-+A^oxS z_Lt|hLe;zr=d1p}LemcHg*mk}r{kM?*+u%>oIQAzfnk{y$FK~>=BwLzSmb&D)qFdz zs!eG$|BREX*{*bMt(bOf-n{*dc#L5kT2=EOXHX9a57Fr&t~+8B7F{;=ChIHTpG?j| znaSwDtcgbtGT66qrZJmKTi3z!{p^sL5^{f%HwA#d4}K^qhR+>*Qc@iFc7_J4PXn)s z53EO&_~`leEWP85^#^wTkw>=>&$i=QDsX4poeE8*%;yH8d9I5C-bB`-iY?*#eBTf` zyL%~1$&kvWZC&S1aOX061-iK>aG0`PqXqqy%$e>K<snT@$7grs;_8{#l9mTFpG0=ky94vo7x+EFVpj;0jcGwGJ;q85U|RpU~>=m-1ejZ=L-rz55=Q6Ar74@DEQ9So*JxUFkmyNC$@Mg^!M3oLa?Cx zGg@v<2>5Vp;$O+4Z#^yr@vm;$wsO<)BcUub!u0RdyURt0eG*~YRt#+#p|O?Zey%lk zsu`+r1?|2m&)l4?sjT#Cm1?SF0xrH2j~CD9mh5lZsW3~}zXU+e9<7Us#$w&C{|b~R z^rr@TNql1M#np)uqu`l;>f3?=Fi-e;UYI>$d{zbAkI;?s&mozd;e?!_fvn_+vYs+lYBxgM{MX!^1*cqbJaD~Sr^diAD=gY3Uxuafp<;Hrp z;Y|mV@%qWXHI2(=8H}D3hral$=8!qZqm*`Y6f2ulal(7U7RAe|n-ni!85V5C&I4~n zUsrAJy8`><8hHLjZzq?`K6*zkrRjcI*XuhNpePVcVw6o2RI$-6d0b34(k}fki9OYk zsArjZtQ|l5l%X+gk6wq&jR8FPcwTGN;)Qv3cR=(%t` zMx@pP56r%FkzT0NNo+pxFkXCn=Q&ctk^6p059W<$Oh39ATn&(amrn2fZf0&bPkV8L z6RBHF>lGT!y}02428b8DC9%O%{zM_qqVc45#RdtnMS^3?iv$=*?!KDGuP;nZ+I_X( z$S_fhjaM`@O#I~_@FfTO%+vg|6@bJD6Kn5V7D?0P_m`P4kPvz_y2oVtKYRKRSAzVW zz4ZACX9fj{6Oq|kVbekXG3)>PpLhuTIQ%o^CN&{X;|iB98l6)9&oC~2 zOk2Sme|%MVMcaT_)b%G{0`bU^CyPcfP@ej{`1Scjaz^2oJ<&AB$+JpaN1OOBB$Rcn zS>L~{AEE&8oa0pxO7H!IrFUv@vb$!L=upz7gZc%;*ErxZ{tWR?>%LdgvviWgl?p0Y z>VX!HNnT*WKL^r}O`lVL`q6 zW=q<-ur35WeJ@4&$Mcs3ixep9dH~-a!DY`AU_370=M>l5JXI3fJACHMT7H}|IS;E{ z+(&ZClb_1q7zT5lm2l^&=eS5vBrl;hh;vg?p01m^RAG_y1{yGOdjU14XIQbB*Radk zU(Ji5KPpbO(Cg>ttHAi)c%hP)Lw+F)&yg<|gZ}fwj#JvhAbKD$Q*_-$i1pQsD7jU2 zD_FGng^~w356YV_3T>--zJH&~ox;QeaSVpkejz$Dt1K z7{6S)ZM6z{Ceeqi>Dhi=NxX5*WnQo4EaF&Ur`Db4hjHR3$kQFV%hx14uhP`Aqx@=hi5foQrlxYBw~b z4X2qRqiLpOuZ_-}r~a1SlA_Lt5iMW8uZ4&B!{!U(2;vmtkYwER*{yGW8GhDX223tCYk~q{i zpMDl*zDkn4IO+&0_%j#hGdMO}fz+>`S2w{>QADA__m_Eq)3AZo6`Pv$;px!ynR%@VU1&R9ITX68_l;n=eOI zn;$Ed{wxc1h3MY{19|Jc&N@ksS?qbGmNQ*&ENA+U3EN0K(@afU&ehaqVDGMd`ua3k zU!J}eZE-!6g3Ua3gJwN9`F*T$j<~zip@do3@WywPqd21x`uSGDE^?mU5fErV>MJQZ zmdzClvT}SEMDor;-&U4SusdH+`M$E8*iXzjlhZp9Cd(i(uKK3-R(TcawAl!->e3W1 zhsEPG);6fB0EmCM>;;*#sIt3=r?JPYM**zX{Abg&btEo|dOYEL>l)knk2>UYQc{yD zjHIUDH=g>tob*r6(9v2Vzsm70vrqai7GXGky}p*u5^?OJP(!}kf8AC3(Ej0MK1}WU z02;D%;fw<$-s8L6pR13hL=WYLHtt58P-BM-Ze+ijwEqSjrnOga$$pbN+x<}rAH9pBJDr_y*(y=PL+867pL57dkv(@xCqZ!@|BRnWCkU=nR%>D$oIGW)0&09FTQQTuUFp8oi$BeFZ_)(*?$g`BXL{Q zZ_-amT`MZPw-smi2IF_=l7(F5e{fDG5F$J)|9J1?hy^iP`0J9ddEE^7^Csn((+GKx zHdR`EWbZh8)#ywIZTI~1u7-v2n)+~_ClIAHPMgiOIXz#1_^gGO=Mw+M&u=0eq2+pS z;CZ|#|BKWLey6E2$Qpi;zt7`RRmKYF(e5wQ=A65To0Wu1oBYvQO0ar<)IKfZv+(vH zd#Z9#u9WM=UbKn9lJ#Aa0_chFdte0w=1L$dcmc#zY z^7E=nlxxC4t|i-|9rRwKF3q??0Ib_v+DW}As6z*PV-nNZ(N+!dP97^`gOgvEhLSPO z{D0n{o-40N=>OM`{r~#0Lw|oJTR#>ilK-zCD^L<7%(*1jSQWrPv?$+;je8??!BgUl_j?tK41axDpC>e-$L_}Lzk!|P#*3dxu+4|MtpRa#7?6{M+HmPUZ0NVpAsyA|1U`#R-VV8yXlDV&*E=a0cP4O zaN#?>f-Pp21-zVaQiqD{uin(WF?`D~j!-4%b~6%hQJ-&)&4OtXcyqqi`-V-!RDcI- zsR_^vpN&f;`8NDB>&bbQxo@)1(^l)kk`u1FAVBn^luD=Y`#6^2yr>4eg)_Fq-Fa*Y z-)BSC%rG_02dsZYas3B0v&#j&TCjjKMAMr1ly}HylDeg5Cf>G68{UY08HTmgA>SO` zZ8=5S>+Wn_#M+^K@mh@lSpP&fEL|tMVeh&n!lPI27hH~j**p#bfpy4C&WfyUv&Xku z`nvBX{&=IjbSxU|L*64A9E&D>&ttXS){3ojpe$B-S^~^?F@Kt6*HW;{xk-qPr9EI7 zgCb>13)=E>3gA1|_i)kro=6mYQa#_PEJW=x!!zeiTKwfhAp#7^RiixjMgJYT=TF&Y zq2bE#-O4n|enHMB0LbcWGi@(BGv$A@6ike6D!6!32v92Crk<@K~!O zC|PhNb~g$_9NFm_{tRax*$(k@ROXQ#h6(nCw@qXO5P-`S(-r(>SKR#5u6Tid_<|MH zmS%uQ|BV29LRJ?rkzcu5yx6r260i>I< zl+)$E6*(&nr0-^UK90w~F0a+vmdDtY^VN$2h0DxqK9!o+ZT+uDNG~%Rn12nm|7u$@ zzs2n&{?$s}{X)F}4{A#TLaIBs$VH+7>?le~B#qj$JcW#dj5sM2W;62CsEh!06ySxFzT;fk3Fsvqd3p~uCs&{-s z&x>Xj?sJhY$wku zS|lC=7w?ZK2X1I5F$@C0YFguoo%B58GbP>DfCCrDXs0(f;Nf$ONV^Q1;DynOPsApj zp|FDV*#jF?$RWxssa&$h0)Dma9%$)M!f?G`ziIDXQcWL_sHQ!)PpH_|II&#jjb=sU zXcLng(~Yao${0f)Ilq2avVn4TN71?XV%)<0RK$w~|CaL09IDthi6QkB|L+T%R!%iG$)NsN!1ZzpgzWOajjZ&6F~Iu zBcgo*40F!bCSP;@9HqkA;b%tK9Emwz(aTNOi``PcHiwiyKS(UMGIQ24+)mJxH}Cq%H6m;DCg!)#O!k@qUKqfB13(o&}G&wx{>0b68&( z^vMGEB@~!Bt|RXuz$v9MnPGMN%>ZP+|9Qu-f&qNTC%1jUfcgdlyknX;j{I{Q?^D#B z*b|oO1$<)iM!e51Ul|z2xbGn)&2@rYs!38X>p|wv-2ixAQ(d1{0Z5K&sEmGBa#G%s z`PV(!^MHa-FB60G2CQ+x%cOJ1cAS06?n$ z>pya?>h~>-+UcxWdamCR={aeZ9`aUB_Sv&WyUuNm_Hmobum_}$+g&C(A@awPk^C_) zG#Fn&;zv9lD!P-gAZmBe=KDZbCh(z&BFT5O4%Yz6kIyh-ZG*kP(<$GwC?r=}i!wGp z`MgoMCL5U4;FKSRoUg@@^FaPNlWoi1CiHygczX7161PGBs~N)EGg2@{CJK*IHGJ8M z0J@=<$omefx{_SdC#h>%0fRL_c(H()S1KD>y8@k;bOiXmU;0LSlTaZr*deWNDObRt zeka#*`Wan?w>KXm!0iiLVs@BpP6I%n(Ow>-2jIs`k##|4W)T%-pkO9!s9<)_UQK0i zAI;V!7^pFS(NGNE{ox&n-=J@AU9Vl~H;^|?0;63?S3UvYUad<7ORVz+OZ2T9sQQh{ zsd@~Pam252AX9w_tA;NvXz1Bk&@CryL~Z_xWs#r}>{nr)SuMjgb(t=U4aPT21lBnD zo2;RXJzp_wdQWbrDy=NYFtky#Y5{6i^&<1frc;(W1+JKSaoY<^Z7#yUePl_V(+a~j z^ZUglRtI-FjH&p+KzO>y6|tyFX`9<_%149 z*Y$jyhz?APL|?{t4A}<@pc0cP@*4P(NJftR#(MqVZ_D*tj%}r$pLzEg@a5nRl)9u0 z1)EIgxL1y|H2CwwXncxWE*Hs|Fe}ex)z_; z%h`wn|C(qF`b%6sQ{TL3{LSk=mZ*@$$FCdY`qj-LXYE@)T@V2dkE|nFK|IEksNZ)i z>PK|uu*k+SSV-9i+soRo_?+!WxPpqztI#}#*GKx0^Oe=oB9r+#Tpr7YC6j%M+Qw)q zZH{k63WLP))ltJ!9T1?tp%*#X+-V1B+?WQ>xN;PO&N~fwXXSOAkflTPdS}iUg$z&~ zHO*a``1OEO8%`S~j0!Pa7j}=t%zvoQ!XN6}aZ;d*j`xpnY~L7;_fK8aed=j50w#KJ z2V^;bwT78kWYR61ykJrOU~V$k_Ss5xDy>vyBS0bRcY%*i4%+vlvtZaIcWaHWtBv0< ztT?Ng%twl|h%SNv8zWfKpi1H#ZAO#1s)XFTO-P{oMhZFPZIF-aZ9i5Va+Ci9nrr4w{8=ZfA2t_m;e;;6Rodz!c zaJK^Xm>CRbPnAVy_wmOawyRb$Tq2bP54S%y&ga`u|LXHN<(=jvyYJ+1del-| zm8%h;e)u*0rN7?f3I>|#=NqqZv7d5gc>%-l*`8mgQ2V#}$SrbYN>kGV1bBUCcvYdV z2Y$mav`y0}S1R4W39lLrniZiPA zd|33aRwRSV8*PKLraVCa{`^ewZOMUPM?tb5FX_;y*INfreXC1JJdLH{85B5wKF6!D zoSdb!)JGHTMRH#9+Qal(nHQQB*^SnzYIEG2H;@<>H)mP=reTDas{dIGFwzlEW7kBu z_o9~fc>R}A`4$;r5F(QrWlBQj0;S zj)uM)_YDpxX~G&oePmB0W1){F44TnY#i!WK)^kW~AG24p&9Jf7&PTv7=0-hkC9eYj2aB=FcYMf7T$ z0y^w}Z%B><0VQ>q!pdLz$-T!rSE6|5KPWNj78+vX(cW9nqft)|BeqsJ@T}YNu8wTJWU7rw^; z!*x=RZ_<5c7xRYN^YD7w@yY1$cNa?jRRDT1T+gzFLC*U(`kRl+RuVY1BLAdeEdb~< z!QRVz0sNZ40{lG%<-2}nhWlS~{;Z<+cy$Q?e%JWq2z*vFfPNAyMq+J%SAM>O+;!Eh z0UiNGy$+g$5wP;q+jXnT#Y2)AA7m_?3@Yruy9L7Ch%N^ zIFmWG_ALOo-eC7gP=H-I~u>wqjnsXmXpu2)Bw5V7UKQ zDVHo+87|%HG)F(|nE>v6`-#leda*Z6k28Swg|Qcsl@9s69`jF!RRRB0I9zGwu7>|G z41GXjj0o-<7_c}uFAZ7lKcRMkVfZX{H~|NpjWHOv`e~`z9Q9P-&GNc`*?W1U8iZfu z&o44=moLh?c>rn(s{ps3e@p3yYT`?=7hrB0D6+qd|HZvQpJ&#=v1>a1lKex$|8mFZ z3EW1+V|MS)tH0WKud8lJh zYNuyV+M02LBbJ^q4A?d58#c);q$H9H@a5(?2-cOL=1pj@4k6huTk`WBNv_up#jh0r z{(hm7X;Rw(sW^FQD^6ZX#+_x#n8|76v&?rc_PLe?xas_utQSicj^yNZ zYmqte)z9;|{Ds#)AGKnjA(`WV;dgH|Uq%2J>mL_p6@Qe^D(2^(k(^x5*l3ir&_AO) zCK|oGA4>8>fSXQ_tGOfVV|vqTTut$a?8R1_b1(qrH0Ry%IHOq`H}zKFrj&@X*wlzJ zXiw)H5#08Yu>0VauCou(?I$^W;@ywL9^^{aNx5{5GQIU9bOgM13!J7i>rwK@7`Llv| z0c8AB?*dlhuJ$e*{oVmh{dw}A1`1n~lRsqXQ)YeWQ1F$?eGGX1A6}l{wCz*S(y20Z zVChH7x-6h|_r!~uz%DC9Rd)W89S1ygj2B!c@pzgB48wQKyXu1g)SgLcs*1;k1H*Fz zdqruj1R9Ke!qoTE0c0F}KmCXwk3wRjJYXCjS8T@9E%#x5?LJLluH0XAx9pd`_c~F| zpf6tl+2&3rwaoa82kz~y2b90)R%UI6FP);qzWLI*3C+LWO)Gl5JP6o);w-7>27Jmr zA4TLwWxP3-|1V#T&AB>0+#US$^r)O7^UiC{`u{Nuzj^)gD|G#G7t-AsmpC#v#uzY| zC(5cs?KQJvsD0(M-w`jD%qWqXmQk{zU#zO*#aZmYaNVU>I)nQuwzdtg zZq$;6I|~8OW|Q_lPaV#%dV&?yt|ctFE*@_(pYs9GU%iGt78*?F3J4P)KVLIB^-?0y ze6s9e<{3fDc(#9d%x*rTCOBL+Ux0z%)Gp$S2ZrYn5SpC{JY`PbKb@32rqYlji-7&+ z22zF6=dwzN1yX^tL`Z%@;G1Da)a@eVxu{sfjp6V!>b+oB0Hc=wkk7VvoQrdQaM*kT zqBjq-va-X^*ke*2#GS$~|S z3Jm|2p&EcQRFm)x+fDTJkV|U*40nz4n$6mH!cwm*#+CV`0ngmrf(7@N(c=t8=Kt7N zRPy0;J#BTUsANyT%*bhfdT9XPhGgq7{+p}$uOS|nZu})JHZ(8o!!4f9xqI~~v|*Vi zMkdXqX6aY)FWFzkJG0f=9oIuY;W5{C(m@a75rf)wmVcS=Pr5(10@ji4`?3|h`4mIk ziv@oSk-eVF8$qZKL%FOMHau{%94i+E7?%eGfR+;-`1&Lce4T<>KMt^n$s?L-*<}r= zdl4?ISg^JL0Qaa#)jS69>{#CScbAVyHS)cV0l8g|s8Psu6tLUof)ed#Tzq_YLCL6@ zBvuJ|j}0f|EK9JOj-2u^_o3|h6uta27{HI6C*OHYEK2=Lv#d2hvo!(d%YQ&}<6l!l z>ReI7FP{^Fz5%=_!SC_K8Ka_sFWcHb*t&RkC4jeY2Sg$&-%=%by{v}ALOBh2i~GEs zLxzXWd$4YYj47c3{JknI(B)xDS)ZZym;FctuD9nJ55}|eawvc+UBa+phYx4}Yy(cm zSmN8IJH|f1wx0ELzwKR<+g5i?X3M3Z$M>zf07s;L>l~aIn>p)tmkw6!CGFD^JcV;) zyvXz%>sADKxLy3#p!R`4W%W8q(9~mNQz9&5l~CrJ(UmPg<74v7Cj4g~;9K(xOd=%wECT-Nqe z(fEtGN2>8kM^~aT`zq%PewEWg#zd65cN+lO_2#cgy-@M9#E;_GUx6I^L(z%R!-+56 zf7*Sj>cS`7aDFseS4wKK3XGgzg#p>S?#rqzsl|W~vPz^)t4&*Izl|;EujczmK!)oChzDZwA>j^6Q%FlbVgp`18$QhfcorFfGf|#nPEm zq=BIy#7|vz3b^S}C9Zs1hrUb;&>w%EGAgf-egLeyzIcuz4)6u$@1@E7)2}oO&CRYt zPuj+CejFjbbOFL&pcafdlKbXislocu<83Es{-tE zX|AVx+p|&tslUdZn!Z_JYC70|77zTOf32N}3e!(s2YP?qR2V?Lyd>@$0=LzkZrDj!~IxwWjSvX0GpEz z_-3IQaLhXZ0ifON7B000@Z+_J|E&JW^>p_A_pB}@8O5iT0m?5$QST0|&^mrKijp`q z*}AJx00YBk{&cIL{-0;aUJT~82u=vux1`l;DFSDIU0G&r{uGVrURg%k3Dzmzo{rum zGtUj2%JYkd($UBYVj%ooVYq&ziV(=^!)HRl>b?hBj;=R^YgWEWnj4OXX15aOn(lyF}-|rJEpGMnD*&jN)viy zr{7#_r~mrubIkfJe;t;6kWxRNy2IeCp(S=bUp^UFYF=OH6@#)e09==)sIs{Z1OC0N z1rF$$nX~xy8CqucIp`AtIy0)Y0APO@$Bs4ft)FAW*SI2W$aE4dEm=isx2hr)Iqn+@ zo*X?Km~T(A>ovvhk)fY=eEf<#J{Dk~tHsHzpAhE$C3e@&0eg<|uzs#X*&G=-VbdSn zN5(^ca22|iGo7p#Hq8 zdQbsA6N`8KHv;*&P9%DN56@k<0KkBn-4r4NfIizt-A4d*>qTT94T~YZaN6)|Qn@Ju zzCIoJby!_=O@V)XlBZE=IK>E!vUV@LrhB9ip3Coh%4-0t%s-VrpVOMVmEj=G!ot0; zrL{d7);!pUBx@sE0l}k+iQgu8)O+-!?@ncYbAUSVjKUN&I6rg$)qZmD3&BU#PrnBE zZ_O9bz|jVPoyx0G!0>O>lvQ`pXO&j14+E2vvz1%526OSz|IF3Ue!(Z6lt0-mUHNlQ z0I7+y&cFvh+WBeZW|y}JP_eCCeTcRpZSU`#rophuf%#ZUAqh8s70T!K#b!)@zCQKy z&f6IPkFgc&#=DPu-)+hJaYrRUX zpeG&qhP`JD&p&8qrAP9MuVvB-A7#iIr|{7kHSYO{?LSu{O}UNq`fBOB>^!+xbp|>2 z^8D&yTJ+rOFww>!%%v72#~Lko9BZ^_)*ig!{%vik|MuX@fwO3?-POGEZJwxK{JqwY zbBn-+hD}F=`4FVkJXl&`r(va~H*jjZp}KFqH*T~4d=KD1KN2is-{PBZ zkkVdxw+Yczqd>)-`O~2dO_H0h>a}m3l8i9)$G79pTp1Av(fDjU^bl@5)P(nWw$knl zL_#Sx3P&aHS0K81Wq!&JvjEmFnmkN2fPecW_~woj^=+z{`8uiROoWNM6Q`0nlUD8n zJWq|Eg%I`G7PGT9h!%ZO!|P??m(w6*;W0q^$3y7_kh?rkx;1E^lv^tpjiD|YLt%jj z>k#3(ByM5JBX%#2t@5#L*fE9XtpK5Z`4-SMPN(t*O<3o9poDW)Bv<`}W~)7*`;c1R zlwUPPs^v=zb)upaF_ z!~Z)U^S|>k|L^&j1&sflkD>pq66UB9_j?8;d1X$|9*=B%)P>#-W0Ko0&iBxrviX@L zcYX!=I^q%OHzjEu(T&vRt9FTk-)nSZ4$i+?$c~3-115v`;p!=F z#ILJ96n!h!Jd%ruW1>`1S1lhW4A+arz^R=UR@6U~M z;@-b?#uohxXYN40Jn*F;-l-#bF*$PswXKPI%NwKk*YX;ObXa#TMjh?O{=a9LEPP&V z=OqE$e!?GcJ(5qt*aj7S3kE60Ou_A!334_O71>~muCIQ6rdC<-9oOO;HNgvxgdO4w~K&<8kwvqmm>tY|dj$_NI zZpZQP`wqh27JzwLGd$4e3-yFkO~*;&&)1~cRC#=Q$9rGHdp~d-ug!Bm<(J7Ex$&A^ zH#i=9m6L1sP;VrU&2GJ1E;l}r#40mdFUTt*y4D^-;>sDHqxQ@?Wq29Sw?e~qXln8= zpM0GwOELDDzU$81DT&+vM9xb?x8&F+oTqMZj+XKhUosy|CI@(-bLN!ew{E!V`Z*6W zb{G0{E+Sl(TLU&e;?%Y@FAU98tkO**Z9Cq(mO{jxgLuBxbwxt1tcQIHVbP)Zb58*X z_;elOZ)bR)OXBSv=7w`wBAN$rOwyvVy^t%XlW+>$|IakH=acoKepvSCx8i;tf7UXs z#h)wROa??p^Ikf74Y@}1G;Q2Vd{1xueBR!{*=IOyxRCyG`G`-1UI-o8qWy3DM5 z2yG;pV3k8=F6KS2Uy$4ejG)Ry7;TpIWW;{X;Vm9o0jV~xa9lAXXpg!%=?Bq%lg1ya zN4Pd#tiNJ@KJQhnFhcV|dS>srkD5Oztf?JVqPN zD{het5klCZybX$2+T!QfZM&iUBZbAQQ^?yRP=5BfGJH=2Q-I{{qb44Wq$Y^|TZOLM zb{&5<5qFBkw@EDvZf$IQMwfcB!81t+2CKHF2diG*ode;9eEj^4bAB3IKOZ8p zm&MWV*q2S6jeD2KpHq9|iAVVUl%d_#d}~0Jn|D-IYVoElG>_HF-Ka{Tt-M+i4})id z%O||k$-Ldyw;hsNV6$HK;@>hhV;Pb5mmIneyM#|)#eEwZuKH)kJQ<_P( zrod|#aPFFrvS5&BtA+ChT@dJ{hJ@bW`KeeUSG_^^7k)3RorUZjPe$_uy$hnzEWTP= z_-b3)@+7j~-L<{?lJqQ+H>&UL$Ney2p#m?C;Pg0uuJ4G}OaBRKS0n48@Ewne^$yNeC*Rh>^zJh@3V&7eCyPM&0&9@A93T! zMM_&mKv#=W9%@AVsGtVKM&;`=AHyqfkxXlVi27n-!r=8#yH*#gbH zy)0?RHGH7bRs|VmlvBO4K{#mFlN7k%R-6KP8jZEs~%W^>0SKQI}Psw+c z)t4yM2d+yIc-*dt#_CtxMUq2*nD|%F^*zQQZi~>Qwfgseox-^*rLW$DYI0?~aryf3 zJd5ZuRGPB_kr{gSn&A3(>Ekvf=C;WZInzzk@)p*K2BdQH2;Z)Y?km`we5qz!U z)yrmUaQZ~Ma@uur4_{tGtS{J=?cIOA+@1D0A1B9RW z7n6AvF}gb%>o|w!mvP3I!B`p)u0{H=bjEi$F#9q(pT=ldGO1$j)WlUpwlA^EM)?CN zKc81<4yc+8xsmufk~`dlFYh96uaAH721cG)j{j}xx%py2XBrvD;cXWc@wL6rBN$t@ z3b)~z-8N+^xDNN#%hBR`sS|eLvGZCvI^%qo1k>^(I=ea|+u&N%NjOg_gSuu3%kRF# za_pM z?GIXFxX;^kwqt+dkzXRD{s5jod98^sT`Uto);?S-_Eo8E;fP+t(XY{eE>XkyH`K?- zs}kSq7@d=qqT{}qGDh;S<9FOU7~n43$8P7-_wnb~I|@O4pgrc{;oq%!@>pO{dm(54 z`cJ*AI7+PWVn+bVdC52z9-wb=A+TcPnVh!S9`_1=;)3&pQ?CAHVINP+#i7sdPJhNG za_>c@yWrQ@yh5^meI4!a=V{`(c+az!bfH}S6`M54%BAw{u|x)=(pIIQI0MFdt7y|r z%5!kr4hIHNd^!|Q@9Sv%z$E>H=3C;~ezF!6hDYklF;*^GnNGHmTap`b`FG)HU>oUuE&F2gN)w^0V^LrP|q;7Bbm4zF8E$?;_G z2RE3@zl)CW?cPV8Je%0el_f{;Sq0U2#7h+@)vx$0y~)*ho-Lw7@n15!Cn55=ky_tX zHW@4Tc6aOknsWBb=W zl73jwlg^V-cNcgiqkGm_m%?)Um(KrPv+=ii5+v_9*7H%^2=8^L-s3aQ?$pqF{XG4( zv%_%Q^8_I+g`6b3r%(L8kr!LC?cO{1iB0xL205pK*Y%>9id>@O0Jaj&Irn$ZBTZr} zc;*oY1Xpl!%UD`j>6ZN|EaSGpgv`BB-1=d7T{qOHp4;fh(>sVf$#1s|$m?w)&kuC{ zD9gg{?It`dW38MJ^fBP~BJLKDNxajQd1K zBRu(Q{me0MdxP|`z7vwKkT%s5f46V(30U34`EJ_Emw_oy!tp)H##bfK-x2bBf9M{i ztB&`RcBqjyl^=3t1;zkMy>6nubW;ei15oVW22;r1cyB^39I2nkn;VR1-I4Pcgn#Ni zya-v}dxX$+nIDQf;>;s`Po+$|^NZk!e!=-~&8u0J`-N9P3*42S$v+ z4No#Zt5~bS&cGW+#D+FGVO{~(R$wx<>LPB>%#~LS7$bWMJN~{Se*RapX>j)OW=%3@ z+PXet9cg|XKeIA$+#_ZwP zrjEQ@XjQ=)(dD`G6Y<{eEEe8d4XV7&ju;*Lf$QUjWkGl2DOfg;+X72TAC0q#)SYsq z6rYXRI?I7)@q&*0`7kyOZjSkn`(iPngqA4jOF&76605i=Hq0Lxl6 zo*hZ}9^(<-kLFxSBKmmIuoW~LR>N}3^bJpWzJM=pMMM^U${I1*OI^OxymHNp7WQm&(h`=$ zHpnm=#qn8mD^RJ-J-oGVGH#YfIFKw* z?uP9eLRvF;G8@+qgXiInlHUfz#)A0YZ*6&=@8DzXX;NR)ov(Hm<>!9`>p{Xg{-mY> zW1jO|jl=y%@pByiEYN=-dY3mpZ?59V0dJp<*0;#3#Mjd^Pr|^hj|q>W=Dwdc;t!L^ zY($?PGhVC1pMPHV{xKXs?0(w;W_jlGZ2Nmx?!f!bvbb=#!1o3o50iCT`km|c;XV4& z-s`-%^wrhHp!45V%+o#_S=taD_}KC!uYY2+_w#H=x2L=U4Ly}?zT9(UycrI;FL`=* zjFTJoBiJ%#7OoxFG@h)5q<H1_T@~ji+RNDs1YNKl4)>wC**Rs>=V%THtKhs+)U#LX8ygS3A$yZ~zO@N% zbIqR^p1p|F-$b8_^bhC~Swc^81<5VS5OVh5jdP&?K6o?#7k;mr`lwJo|7#7g!J@x~ zCO%Uo{wXtCkrbS-VcuL8Z*I_I8$HDoKi4brx9NY@I^&FQQh8(Ko7(lfntQ~4m{udZ zVnj!P?0|zf?>iN+IeFt`eU4vDvR^2R=v?H1t=^sV$^~Y5upe&#-1Lwc%SYF7vhu(Kab%QfI#z~Voc3Grg35oBmQ@&G+ zZKsQUlgT>$axztu&u0Pay|)qhlM&;^$#eYV(k5d*T@RGzKq3RX6aIGj$L#}PzJLOM zeFxNEr?2Mm?9XeUyz%;naj5G-PJU?HS=55<-+8|F9itC$_(p;Q>y!SYMDn@+t>Y|nMw z@1_0%ZrxtGEuMXZXDXom@;t|1&mLoVh1mTVeQP8%5TR#Q@77BBL+>js)u!;^iC~_L zRF{)Jmh9s@)*i>tER?WY<;~u~(+z`}LlI<7n4Ty}QzLeeZ9@1wNv+f(sCVirkxMDL zFMin0-$7-mPi)U2_HF9j)i$0!wW>?Ckl5cy|F7?8C?aitd3AkR*_Vfq=+0#Bd6gPf zo!4=|pMTJvmMXf0mIT-Oim&F7`@z8N)5 zn~e2+ub0sHQjOt=Pn^NqQ?fKl$a0G9iA_9WW9gtE(OHqVCCV1uOAPps7`$#$CE3HeHP($`lzZG zCWDft*gtg^?YVfbry}Q8_g*_3hS%e1;|Ezz&DHq3)e>vL!OI@1WImhz`;2+4qfv$& z>8o1iN;$$;pV)rj`KcrCEg2@V+}6Dpn3_2s_+mdezbmFTO_{{fEK`UFL{>qcb!X1S z`=dtv(E>6zB5bm#6(VPhNqdMde&WkcMqVxIx0XDB<+NjyGe>+Y!)}(h{BYme z)?b{kNbe55|D*Lha>j_^IOITG*V?7I*UJfySN%%?U}__Z=P>o@0-nz?Z>=&2PtJAo z0>cpJtfOA+uA*LtoFa9%sRKovc{?=w>T9WYS-AfP9>tju-8j9rfT^ ze7QLg%O1%sDN`1*u)Ny!`A&_u;$)09H+rNxV(7=M>lNWIS!2VYLO$hjwP`fs6Ge7m3@v$`sduICOBV+l~I> z=c_1Eqsn6N=Z_+~ZMgnLD$r{m;Fr&nXN*z!Z$Hal`MatvI#z^#vWq3ooWOqn{&1dO z7|mhHRXD#N2d`7)p%ZcgwGylvYf;d-7w52kwR8v=KOsKft zVN*Um%Yy9DuMQvBgXfHH5O2`Q$z74w#SmImJ=BiP%?)x}5;&$eYzYj)aRLJ9FI}Zr5%zCz_5P5)4?zG|N zQKYWeoU@WUh-*Pp#-=Plcw=_L&uOF|xcdx#=B`T5)GY%uRe!flRjrx2adTBaC$_RG z=ZHC(hXO_qDYCzmK65bT%5_+$aQDB2@3)AWn8X)v0A@$u`HT~F5vT&jtWwoAT zw^x@KT|i=fMrs$hQ(Nt%(n|y<;kcvT({s|nwO6?$+$lb05#F2rv>zBCI+4Ff5a8Ek ze(x74z`P}s&8BAkrUbp3nLAh3vsXPnJ^}kUW?U>i^}G|W;eTwigNG)9zWCEawR91qy7 zQF#%Be|Oinl}fSFJMfq`oZJrxFYOQ!aNd98RUC;+B=eKI7I7O6sI6sRH(!nSgGigP zrXlXSoO9fQ!q~U&ZX(Wn;xoka%}w)kPhR7okJ}?9Q&7P30goElmkZWa1@-(~g6|nh zH7Xg=>ml!bSFw__zS>1`Vy@yN*emozz}}3*lqqvD?3>H+0l7q^@#2kjvqhEXH}zoN z5?=T^m#nX?D#u*;WMiIhaornii^c26O23oMy8es0yre-Z`}5*rt{sgbWeth>Y zvPM1~e}kVtkYJrXvUfoCz>>WjeJ7_iwRM#a_CKz(jpX?nDy0MY<_RxXG&N)EM@Z~u zO5?2ozc1;Kdn<1L;5TO$Q6hbcMNIhY&lW_l_b@K22#I?FN8;;v^M^5WwGoAgAbTX9hoD~WWcz*FnR1pzOW>p>}%=2s;Wqz3q@^ak^8$7Uh($X@f#0-#m=HQ zrp0r4HkfNRV`#)q;!bKEm_JzB8%}s~RdoqHc~j#pwm@NUIQO zA=$v214~)({Eswgo{SnTkDqzck8rA>u z=6zpZYUMl!h^!cLz#szLcGF;SMx7+3*X!3&Nf! zcd)$q!Nv{vh(lg3Z!oSy{JQ5JKoeXheg)b3*{^B7>Uwk>I6a^V&!pjfc6i~z-z0Ye zdrG%H@bCA8LluV;YpSIeBSgm^bQC!w*(;H5f$H1it_@LU-8#} z`rXZB=F-nl>-!}T=dY1Bq??`7_QzT6*Yez)C1H(Zop9$Mq|O9N4b$YdY*;Lx)CTP9xCDb=j7vedM0ZI=jO#NcgyYqYR{XQg z(GOdDv_jYe?l_t|1|S@fQ{3IAKG=qH`AoyO00fR1rs)aU*Kw}4wugF@rr#C7_=s(l z?l+DV0-E6Zy~n}&tSCiG8jW5DApMPffkx5G3Mu4VP9t* z{w+vW08{??QLo0>Q@5*RQ2wFny-`C*u4eZIet>;}#UOLG=Da17MW zX15ZMuo_lHmBKC8cLDxfIef97Af}@lQ2&a+&J%&m_?z`(8aOdj$s`z(? z*zB-{7Xf?UXSQ%o5w_Pv8&zU#7Wiv0xh@a>nfTYB&^!|RwF=D>G2T+T!K$8RiseBW z%ZVv8DPpm~b=d)$I=8=Z&9zrEgM-?}Aj~9g^1ov)6iw`J)}qW8apwvzrJTd|D7A}H zDqHA&9Pnb}v*-g}cR)fj`J#1+tb z7~<5)tKjAiE3fmh{e*KH(>UP%Ba@qB9rFaCihx5jeL~M!uF7UhL{LDt@zZ&3ekInI zjuIqrk+z9)2^zNGY2`kgau>Rt>%GRJl2~LcDUWqkZHMQNmHG`=69mz@d1@InR?ia zhX#8dWY>s}heNmlZ~(ywollYZwp0vDQXhdaB_tFywr;Gg~-b!V4WV}Vu?hxTF^EZVeFo4l7E@H zI650nPmPg9D4FgKef^RsFYCu}$xvujitq+SgmzC|wQDN&D%sMAz9TWu%8aI}WZjbx z>K2;ORMq(OJ?0xSzuijeTGn8D>(jFvSf37DeXlNe86bRiGRV*+Hy4(;1Q}K|&q8{; ziQiS%3NM5CtYBt@VGJ{(e0KF4e#yLwk5E zqn~N}o4G24Y~I8fBz?-9{e%idj|F>Jn2nWnVV8{6@j$kZEq zbWTlPrSh!(PPVoBU5y%z8OV<4&OzwLshKeBCbZ(ltMf-zS#GD1ODj#g(7z+Z`>`BWDuVrU6+dwd|0SX%ZV_U}~tXsM??2X;|Dw@n@EF8qP zrSZWN^0+m6as1VCvnb#Y73l|lOg5$o@kmPXgxaDJUk=V0 z##VW}=J70<#hEi@7ONp1cB&?Zozv+|cp07($_4%!3&Tb&M>tZ`XaNxII-u}jRTiWP zR0WJ-lX->gqh*G<`CZ#obcH1(@m@1|Sw5vakiH#1kApSm{k4WMLcHkS2mHWk6x=0_x7i3K@Fj`M+DO@uWj-%972d^4Ke zyv+>fIG}N?(VxTk+!Kw=p0FXuF)Y zr-HKWmF#F7#XA!O05=aHmQP?nD)#qc95u3D&@+zQe_ctFDf&FE!LppDHH(IpyBs>F zu7yxO=nf=%Vp2BKXGs2^0!_)+{S|@i%TtBf7flk${(chp8F6uhBn8j1SOwqi~V%O#0n+!pPC?>_uPNfY6CidEf6(1dPBb!!)_g z+ipN=cw;;5GP`jHY5Mp(JXPh&XP923qoL~S!B&b;53!}`GitZpZOg^!L-)UmhlD_U>w zuaEeKr_6VX)ZJ!Ym;n11C{wSarjtB~@BUV7YwFyb2@!6+jOAlWrqm7R-R_Alq)xtd zGmKeNMg6_{6|C36XA_`n%X>$fzN5C8%Gjc_9VQW%`#{Qu)$A}Wl#`mFkTyvR&;$i4 zyz=AoCgxl!_R3E!R5v~5QUa1`3~qP}m|Ds3ps=yFNSkAM)7?#AI*qHRI>HNG)4>~o z0?6lo#p{x)iyEZq3~EE_nCIY?fJojh0X<|(tx0j~G>>0%!rO{w+UoxVkY8V6 z76%y|{k;r!jS`6@vNsw>mq*sn<6;uYT#_wAaug{D_d z;v3oZ-fl?<(f7lR9+%o0JvPdS%gWW?_CVPxAuAW{aW%>I24B|N6<@sf8iuD{fNjlE zxX(rXN@==)b%9rJ0%1z#cEHH{dj_)_8u3{qow<-EV61<{m@l85`-W!^Ax)Tv!yCu4 zQ_c^wTbo@-y@z*8E5|442n9O#AOUf2`XHhSW`e=eVK{?;X0WAeI1Jb|QDcjZE>ZdCi({4IQe&v$3V$3bRC zWbSgQhfu658k#8UC{OK*#`<6W{zVboT8X^8y2X$6aURBJJ8jcKepNt##bd>l6{Wj+E z2%bNN%a`0-#-(CEp1N?V;lnY4`&$Pd#Uq>)Lc8GVZ{i;Y)N}BZx*kou3YKP|JU3Q!f-?AyC zD>S0@A$V&D2;QoOW6xxQ)0>KGX+r04A#0^bMb1hQlRt5unrECBDn6ufrFje$lwdE5 zF!9?N_VGong}+C)>aEz=0m;7kFME>N;!X}!P& zzI>5<{x!lw7J!r}ZmIh?>mx=AI=sxmQ1ihYtU_lb}b}1 z#_?YJjuTV3+0;WL<=ilJt1VN3n_rXUBEqrM9RDk)&(RtZUOqOTCY&2O;KMJ)Zo0ou zZpr~|QWuPqr7n~qzPEI8G3XPI(c%6UIVaBby#uU^yEx4S{@>gT&lle#wfCy+ZS59b zPgw$J!nJ`izxhL&fY9RW9N!_0?mbTJpMq>5LSY}h8+>OZx&B@T;I|hYjU5adv6s55 zhQ90vQ(yMO_|(Qka`uh8-{AAPtd98Hq^!lJG~rsailHy5@N!W|Vt8p;0xoZK(EY_?pq{jc7&6b{yV+bhoH+zBk8$DS5U;_BL!k1m3wGQa|e%AX>8!`jc z`L59Qay1E-+Q>pEkuQvGbjSwIcRrha&!-LEdQ^P};iqlyfz0Qlm9n3Y;@Eo8iE-N8 z{Rwh(oy#yKB!bkcsaU;Y%$XnSP9-DU^-~D9FTbOTx}-EqzNkvhjizB!g#e(kd>Q;` z*a~FLBLhd~l>4ybs7HX*>M%SO4Ff;!2jLrjB^&jwF`%iqE`G6v?{GRmcsV);)?1vY zr3u%?Nix8>a%(31jguq#5n3AyBciYmzG9D)#_UTj5(rOT5k#>v6bCu6K=fEvjJ>?{ zQ%JgoBEtLxm}RcIeG0;VLuzf?ofpa@T-UFSWF2ZfjRlrJi;#S5VfC|!dls4E)^)JZ z|7(Y3V6=bEmH&|+;nJ&9{CP@_$OLyYnyLiX6~asTity~a^{_kB11^u44V|CVu&vD> zmdGD$(%3>HYPZ-{3gv@$Gca$4cQXA7_UrlRqBZV)_Mz_BTjvZvTk1?EHmK&k-o;OE zmcTumy^BeGB1C~28=0rA4+7Y`1@BGw3g@tw%Z(**KbRjU_eNoT3?nUjo;$|?G?DW# z5al-)&i6^Z_b;0r@h_ViIU7IBe3f93;CFDXAx$OEjM5%t?TZF95gCa=c=(?V)1yUUvo3x`jAGH12bJ>uPC2V`{^VZLtwGlqvTeYsDN-WA2q-o9`iS1&;;l;&nzt6upR1j_b!*C*9X=}O21bQu5kC<= zUyfw}W84P4MHhkIqHKKKe;k7T<6W@5?-}KHOAP**f$QYCsn>hrdK?RGF0J}3xp7Tw zk95_vvYJy(@dC04xiN+A2#-rHFn;3%)e)LVePlOpSvMac>VHG(4WtRAoEHrdym}eZ zgw}wGVBHU7`!F%{+Y>GN>@-Cau2CYlI!A}5{M9uw}KSX!4vp`An_0fh}9)qz*j_WaLVm;V12g{!vTmVWV|FP6kC@}453*Lhe z%1%{d`bp$UAp9Gp0qWxRm*gevH&pVj^Cx@O-_?nBZfhiL=gh8HP`ZAy0>XC9_f%TPfZl<)fx^}oYp}gF|8WDgYSlDc ziyGmC<*I!1q>Y5%8yG?4BiQ&``#T5r6XI!sHMlOjqZYVXlQ*)=p-aCr%q z)6~L~D9gfeNeEA|G83lVZ-+GD+Ccj6MUoKyo>T|+Ic@Ht>FCXlcyJ^jB?4jOd@(cS z8(WhQzMNQ3?cZw#dNWI~9P+NFQjzAd)Q8VqV0LJE>L(gye4R7M9yFNW%2qD;o2^>h z!rr+l1o`UNW9WXE6Ljh?S_cUE`JSMqX2@eaVL*YY@@ z-^YZ$ckxsYFvyvNT9RW#OJm#*@H{IxFlYyWWL%IST0ltt|5WR_vbo})DNAU$PH;k+bn zOd5D|V3#7Tn^PNH-{WU(aK&f#z!#>R2=)~}oC0M0e#18j3$&%hmTH!?oyj$>57GL1 zDHh9w2xGe!l!o`3WFths`R9{GRi3~HeAZoJUMLEyviL3Y4b{71ul@$9W}!=X|3LUx z*~v-9wp|h7dXXn^=kw=_5k_Sm1V07c!Vw<)@`lM+pHfAW+4HHBua3kSLUx@SpcZU-{!KOr z7?@nl-9yoHlYh*z7QDxDf;55IwjVh)v}_x}^ma|qnq>+9R+nHN9Iz?V#D7y}#b5Py z*t_~Yb1#+b?K&HQZ82%Bj3!ZM$1e!3vXaWymT#q?kQ)m7>%183r zx<@liX+nAd zdcYgzOK>-92W5T^uLThCcLpd++N`R*)~%W*9FMUxBfOF(Q|`Oqdf0z_^YMA*ubSp@MF`o9qexPEA6BvmxIQjxC)2G92XCtw2gIHnVP?`h!0 zXLJ38?B>63ztiM6iqF>^*+^k~6GCd{hxrMepn*F1Vn`xfE=4nyxwwbUgCNs zLtLGAFyb?BpVfNWjQxi$J2lwcvl;B~zTSZ3w;(>%4gJHoKEe!>SE_vaY=yz}ZOAW* z_4vEo!N&`bhdsR3MMu;H0QM+u*_+y z4*R}ZYiVOA6jc3$`N7dLxQ?b;#Q(^g=f-s5e{}Bs3iPKw1LCf`|HEE1J7WS&F|Y>* zhjXw@Iw$yNF2aW88Oq}eSAyPxmC#b~bJf)PXn>Hb6CnO+BYV;P=+A9C0K(mFF4agD zLdZQ!q(JJi8LxFqrAZ0B-=V-uM``LgcK<^`%Z7PiUVCRjm(v7%h6myN*uQKdyGA(V z`ozo1s?(G;lB3OiIBb^hnsr0sKWTDaDl=u>6F!78b51zZ_U?G0tiR(&T}!a4=UuM5UvrbI3ZMF zY>>GzO-KhZNobg66noFrq$s?k*m}#cG=ylK&Pfx~AN$+QWF_^B7n7sWHh}VmxFf6t z19+dR1ZD8VpfBfaKSEA@T;eZ)oqjLnNll_Ror`E58;s{w=Dixj@a&H-6gP0d zbsfbGoKVecH>sGPEK=X=?59JYX|m1Gn|)#Ayq`OpTerC6liBon9R1c9l04`LyWhd%lHHfu4hE=bVimR}y~RlYKI3TuDQ30F*Jz0G{&} z7?PBELLM3)1E1aXY2UW1xyX#Bq%(rch73Wzv3hA3~SC|HhGc(M_^u_?%h&c=|;a z=E4ofo(Ust3a_IFt3N9(AzH-|EM*~2=}ciWisVXN6W zyf$0S=3xx^{n_No@6Q!m)H2!EnRlT_%N}s{>L61o_=@@$#vqe9r5_AvIrY$V^t^`| zs?W^kBK6iSIYkJ`oAmhm4V{OQGMDk3YLtuwjgqzS$O`{QBxVxx--QFsG;L>a{X^Kk z=-3F4%9nsO&n)sT$!qJ~JSd!k5ZAlgC&La@jAm^*;tHJhYiZ@WxByGDGO#>fta3%Z zm?>I+FD@)J*!j{8`)0MoolK`img!9zXXdYsyy>o6C&>VXQ%gY4`qu$fBkL0AJ z`^m)V;Ty2=dl*nYF$T+D=QiJE6aGN>n`%>5g^R}8s`V|ZX8$`M^S|>k{J+0|)Q@3k z|L=SZ{cmcFoeIvcIp&M9-}+MuwT#<|)_P$vTpt+Xhsg!D!ng)^fvsP~*w-(YPDxuV zNX|N%r3O=GsgnRV#~Nl7ZB5S62W)W}HSW>4G`AaPVe z8t-xO^W3l>Omj>I;yqU$OrmDs*w{Ig9YnMt0_Pc_ILN5!vSyfeS-ZcU zAbV2&Z`{$q$3}J@I8R6RpB&R{7fr;Mk8U4j;!G1aCd7?f$CXzn@yHebvL5@*9?;xY zG!jfu*^+aJg1;FmIPZXs)XvW~G4CpLx>3Cq6B?1M2HF+fyxSFry(f%M**9suEU+DO zYJXc%HruCi5DF)%qIhxDFi(M}G(8-;7F4<5V;9VuKi0hH$av%@tSLHji5shg{>_y>g-L49%CmCtA2c`!)%^a$j1ORzQeTzLXF zOcJj1);4HeG z*U2BoeLi1!W633p@sT0V`?ku$z1hbA`^K_7l?&e4dSjBcySHZMHbg{tp}qAvjSHg< zc=c8+MbmM%)Y~{i@gQZqr*6dGa_oXryUk`KvtXon%1L%i?!ZkH&{@6b9AZ0b}Ch^8TX-AT4 zM@8jcv9G~$g=6q+RM+0Upn4wGcLr3Bp#1p=)ds*DODCpda+Dz#FCQRk)ws**8O|=(! zi?`8)_I8iWGO#?+so>d_`4xFDpHgb4wpHBubqj8{`U2DyC*`lMod`_NP%tf~0o#9^ zB~oZo)E>zd&tUjWJJK5v{~FF1Q+*=TyxypD*sgMWWq!lE#7=CBdzW|s=Y+6q?t_TX zx^5Ko(rOf>*G>z!mU@d@$qUiti2H*Vq7TQ-vI_*;$Mpa}ONeWnhJ61JMZeDf!rayc7b-q%bA_w+9W6Ku3+o719D?R}1+N4WP z=v0Bnqy0+JbCRc4mMxg=R{q7Njq3T7Ryv6-S+>>SEtba$QIdko? zJ&8tmeY`vzU0cUYx)Z{Yc{p`Pajw*cxBV~BwN9gzO2nz&{`B!xUB^YgVR`$wsDt+H zDG(ms5ett!_^a(PraAjm^GfO?Gc-F%rY4`fOY~S}Bqy6hk4d zCc~-Nhpjo7YqF}MVM=Z6yal?FCiC^|pC%Rmy%>VVTJ-EWAVO2iSsarKTh2P`331mX-AcW&`5S!3OV(f(`Z+)%-dM)z#Y;Adi!bt(!Gl&f`NIcej-p^^!T+X0o=FLU;cWK0XX1m9Jd?#aTlEi9n=cK5&^cf5 zdO8&0Re0OBsBm5#BgN(?1Bw=VDDF5^3Qt^EVz$)Avl{1m?tDir>a;Q8i_c+m=Pa_L zo+^BB66Z;*&&_0!8ol&wHhUZV(0r!$HV7w=tZ_Ql!oI)De?w91&*vk#WH|A)&fD|A=C{*zvU*|3#9vduToIenR3Sy2 z8;XN?FT%2c(z-0Td-)9zf3`U<%#L{%=ewqHq5D{5pD~wo_pJ?@TY_w8>=hfQrj67Y zXP8{fGb+-U>IaT8HWiy5_k!_yTI|eSI$*=@VC?5wzk5Xpvbh_GRwy z299as+BJE8sFS>X{@Fok{B2=NCA8e4^O^YL?vCg?VS_1l$)fTpd^ z{4LshJq5a-l_LWc9STkK0f?g7d2 zkW*(WMrwU9;FJL!DqWHSUcr-qXMGON70f{f2vBd=2~gjoi`vrnjZ*$ilh}%AEH8?! zSfur+X912wqcMfQPB+f46RsOe);_oIa2}6=x&kb(War$bMqT=r;%71?73ZzY{S8j% zo&*U-VN}=aKSObf(}uZmqSZ7HtFACCfyN2j;r+|;IDVft5UG|$It@wyEERj z=sr7K$C|Gf0xq2FVrSOO&O~!Ht7djl^1sQ{&DhN_x2hl8cAAY>Flky7mLevK=0sRZ z5Xy^5$qw~u$qpUYdah!L&xk))sl)wn$~o!jDQEe_4l9;2YEQcrv)FvD8+?0nA`G27 zQMPp}kSG>Lfcb_aw6M zKoQ07$3zqzd%3=B%rgbO;-IuwM5;r2t+LtDUFm|yrz!qiFBm_lBdUw*7EejgZBzIT zPaZUfza~QM$w5=lc@Z!<=*r=L14RZ3P19l18`~0_o=l@{{V!A+rRHcSZ@dj|fAwF# z@>Sf1T6|5|vyF>GjJm*{~-Hxu| zjRP)^;J`*`uw)ve)ML|6EXUFa-pX9Z*EE6w$v=X2hUMVeJ$)f@s}j~d7mbw2Kfy?+ ztZ9{~u4t7o-zxb1lMeQ^d_QE#7aMIJ>e>g!?)8wBT`?fX?E`$~)7RG)@fQVO-_H;C zT-*k17ltYQ`s$@@RjaHvuk#C3IvJa_A-){PlWd4z1MEI_g%X*0+q;_4X#St?ob65g zwDjly$KIbuQ}z81!1$%iC6WvY4N^*(XU@LnnMi|@=2?{H$t+4qMVccjDP^9WZJviF zr8EeolB6`_xqIKculsqg-ygq!pY?oO>$Udny62pI_I~ZxJm7OE8#EX5f}=}ZU&S6> zwY0B5@8{12+BK({<-c(#1!AI;gm{=h-C zPiy%f1D$fWV6)dACfZwey>$E@c(6MCRNG_3i{6H&Row36uM9q2j_sH1k>Ra7$gt5J z4BVj6sz2_1fIb|o9CHG_@2+R1V!NI(#fV&j#l zcQlu^?V>@C( zXpf=LvTP%t0ApPP?;Efv%Rk3KU^n>pJQFy~yu%#Y(P-H-`3$%#-D}0`BSrXdsj*i5 zQlnj(cw!y(WAW9@UuOR@RrFd&568f=7*8PP|Alt)Yk=rX8CER1Z#Ly-`nK;^(K*!K z_Fc({#EqkIbwDN@^-+(Q9ov>27r9M0?i*ZVe`sB`=kTTb>#<)4ovZ#4qXTO$+4gDL z>ueU@i)z=whpG?hhpKKYIqVV6VVncqKR0FFYbY5$2owkJG(PA!kLo1C2OV-YjCsRS z1;T4^?bk-5(%g&gigZ1{uYR{r8P@N%J(Ohf_z44f&s2Aj5VCiG?xLgmwgW*}7quDS zYhmk0EIF!&=G2U3=g96+9C(Jle-@|P#@0XBa>AgpG=7#}x;LgbGY)mqGY+k#M}5oy zF5dqrrhU_}5&s;w6P()A&8)R-E*!&Gm9RnjVQp;OQmpGN7e_#qMhaJ=XBY$tBl(Ci zhPk?y1;@_bvBj}YXYbTx^2Yq3dAYCk07pcx0k9?x(^A%$byv6A?m}rMwV*@H9?6Z# z_lk+1g4D@!*dO-?Dh4OskDI8Z^@4vawn??FaDiR-TEURR2hfsifot(8J@+kQ0gmau zB^qscOLRhoRsVTkoUKI*k009IKt0@EfKk?9bBa zYQZv0N1a5)!AG~KS#B3#-LZNsXFU0y%mNiAj**wdIa-Y8TgP$F{$RvD9H*MMp#Ww# zl;9ZttOhgG!^a@yxE{@dJWf9(6sv4DL9^c}xkaRMtaH$#kAVp~0V`5rpWd@Q>9n`Z@d=%vFUK5YO~1>WG0;;x-a!=rqxia}NnhX?m;g3S zkSSYzvTFj`quMQVCD?R^>-TAj^cVpV9sw<iH3GtNR9uwAg)=Sfl+*2GY0ih-7wu z-44XR0>>Jy`(*ZXJ*<20xb1y)A&xQZsV+peVuq|(9bf@pWxfme0tBdy;2GA#I6Tzh za@iYpos+Uv_zVpf%yc*`yVqe{;>l`qz5-ST;dqCV@nzH>CH}svl5?#Sd+y@eeyfwa zG5y?c=L;^ZwSba|dZoozTgz(h(1s!z%EhOp&H!g=b=ddDx|CV@hTAJQvo}k_(PD|N z=k)klS8HF$ZXdks`E!}H&PDmEe_B~mV8{7&L$ZqpB+p=k zS1%uUm0h5>QP_C)Q=B{Nz#1L@#wDP$;P5wYTHVmrw>!|YSmRfbXh*D{vPLHoCxhVo z9~pG!wOM02!mrnp+L%v{+&1TtTdAQcYpblh`aInQS4vX)RAF>bewza0($CN(O5T`cJ*i%@ zsz1+6?_ON4;7#6M!&N!mDInz-EwMTv)3Qz zhAfBhYiDV-&rO8|R{h3R@&l=ahG%Do!}=v%*Cbr~r@cs7(1YG_cbNYt;_E>FULNbV z{8~5##9u#dH6h?J;8$hP59mc$*1zLkiDKRYrk1+loc$@RajVucOcz?Z6XDymClJJ+ z8`?i{=!igsfD^){u@M5O&jPhbQO@+p-SwuN{?J&52vFGw&kMPL`F%#E;~(CrP4RgQ zHu;FwZ!`!Z`LBVmTyjioV~U`nyj#Jgqlhol*4oY5THY9db{%H5-`~c+OoBD*eZk{d_F5 z;o1gE)KcM676e54XNrz^gY_~VS#}ph^FHU8R&@C^nlMB%q3+Eh81-e0`HG)TyIf9r zgR`%+cOMP?ZXT-c3>Et-%9jY{g5F3mAQx`K<~KcL= zzIu7?c$?){beMTFo(dFf6sXhs(SH;;B)T6tUA`(nuqp-wEb}k!i#b+;o>`f{XUr5G z`LUz5mDu$=r6-Beq-HfacQo@mJrn4^(|VS+VX7-%-rAjyPF=n1foq`tef0|<2otMM zUolM-E}ptvi&4aIdi8L)^7PEWM`tZgAls1(YqV@S=R@C^am?|PP9U;T2mGw~g8Bgl zY^?f@Vwga`8Dz3w4by=@ctW}4@UzugE0V^iTazqIBoaHm-Z`d`1?lWF5#|4J@+7b0S*?;>#Dri-wQPg{*k&_@$d_-zXnp=Ns`q9IC9NoV+q4*RtqvG?>uviWj|GI}| z>6U?Sw8v*UbkY~YeQf7N-Zm*~96|j7 zycZspv|M;NW-VIRw=;i4>$ovvUI$&!OtLpLXiV`|JI|j+eGZkjEVOXIF)!XLvz=Jb z$m`EV*BW(s>r8ldPxn>OUtpyx?6~Mbm{X}6AI_yKbqlKHsey#>ivGN-6tV!+oNlUk z^LVfnthBai2^$jsk*5ZPC#Fo8s9%6=0WPd@3X&-}y{!T}9|PFHyl?6C1VR}^>2;; zLE>onFNb13!j}li>idFGI$3gQ@_+%-U9k{O$ z8u>W&eMuh(Hq-#|zAIvAJty>Ck?}OxxM=pOMTMacs20Q%q+J+r5)1OAa=_8u(G_}< z4V5iV4E4u7TSRpS$?N+G|D=~_4}h@T&82KR8>G7GCo}gIGokp3gV5K=jJad;rE;aL zKF(v7Hlg7OBqw8Rbjg87xNeO$Yt%tF zqx0!4)~%F$E*(WWks@nM^>_zeZbWMT$oQGna=7U-n$L2Y*DbxDY zl{k*BF7*|b>E!$PR1i!^P;jK$eJRD#iH=6`16Sj!a~r>_&YwTl$e3$mceIN)ml{s6 zIZy!Y*)}(Pm*$q@MzmX4t$^{xzvUcz8qE z4CfMKb5k|D=kkZG&^cwtsZC!QG-DRl*@9-=D7hUHrG4eqz*F{8q-Qi}$(C`AEp zoS!#uK{EaGfHRExms|4Z`784^YRYA%MJM1i$JYsz`OoQS{d}sm>`qIE*Z$MU0Nh#; zTUmO}j@gZ!tyzs|zs`=C3u0Mdk?%xb{rqs==fIRZh=yMlKLl7{cv2^vYTH@@Cf}?E zGc`-Hj~+5DZm5dVHVN4SPM*D}*RG=&NvdS)9G#M_DcX&iF=lqR2Oi!^5P5j$ zTqgWm1&nn}j~3mqIf(O&lWh)S->iw)BlyU6V#R2GId%;!!EUDqg58Y^5g8Qv@Z5~s zTbgYXdx*~{_sn8B3)jPV(baIMNHFSIrOfa+5slxTng`-8Wypgh&|3!iV13n52 zULN9=KOWt8x}exeG!E8YZ0b+@fMQmm(n=#|rIiIuy!nXe`h{}OvD|rHM3r7q+Xlnr zaeXrE2Y8A5f{k!$DU1Y|Z|KOEU*8DcKh;6{1#Mv{s%>F-EF<}^TgA7LbN2MH1I@VB z-z$BX@h%eNMJDK@|DSapz`Z5CK1a7AcoBIaT1Ig!I1;RMYG&OfY~Pz%r_h4-a8_Cu z?!EL|B%a$hVYfyz#<8XArZ8t7R%}>5_hEY2)L;~YYW5zuf^lase53Df=`wE;93-8;Y`r5 z(sl&gIDlsm7m!!`%;Exk%xw7Sg36uT**|7$IpiuC_LmwP_Y z^=`-c;iC`aecsJUM`uiU)#LP!=__|`F318*{mcH7pIx@i_Sp!prJtTh;gtG?A{qI0nzD9ZAxZfE6r*w(+r*;BWBQQg5{LYl)XBXa#iRF2uNK3)^}$9&Tp`<#NT;U&b=Hf&^F;hrqwT> ztZMb=ILEYF-SY*qe>nf{;&=YNPW;8eWMHvA8rZGPM=>V>JL=}^pgCW%|7Du@{-l-i z1yRfAA^`Cl>bVHiMpOUvvD}=;-_D}Nnq^rdxKE5(=Ey9dqIw;kK2>G^NOq|H;QF}2YOppC(MGXjl&H$+mfC9nBJ1Oe(8>zl39%3V2xcGd=WOMY*?rWpzD)2ec{MK zY~O^(W@GLB&?~=n@pR;Wf%zhWTKOX3865o`;cS!ZVm@pSkDlXzb96i3-6wm;xL?~@ zO>DQilfD8L=v?VPN&BD4D6rgGZG`S~cxDqgJkuE%m^8s-lZP7bbUL{3^x42Pvm>Z> z{pM*h?{->5(9_QfF&{6ID5V#rfN9^Cc`Z~swNl>pWeqyx3+wOJa{C0LzMhp|!6*6* zy*g5?H0$Cy4RUrih)rwiIel)NO_tfkW7Bhk(k#B>bJ5d%WdP@0bSwIwnUzr7aOzS1 zS9Jjcjz0>^ErDfm4!#YM@P}g}w)5LN9E0`_qL@~l+L@&HEcJ(8=DSOV@&gHGUxTX* z7N$f{r<#5n4SEU~qkTub7R4iF43t_uNv*TFcU;anr>7eAT6W3lu}Qygbp_+)eJe%C zi9y44WlFvlAzhAUjVP9ZvTxh1_iIg_p2_cZkP&tdE*`ps;@=!r`R>@_?Ymwe(9V_LGbZ0sZ?~>U zb{Rgu;^-{?iAf}PiKF)h_*9A7;<_1gTy1~ObB7x?g+mwGi+S5Hv_WfJ7!37`bn;6t z!+8>Z>E^E+w=Tx@Rav9vl;Hy}3A5g9e!B2>;ytH=`!#sK7VT20!8u2?Kv3BA?Qpy2 zZ$6h$W$n_3%WRy^3L9(l9dagoK{#)D=&pKQSR|w%AbCg=BwFvT%pRv!#nB%ykDJ#o zTG(^)DDasnRfK4mt=^M2pP6ADXpJ{-kEJ$mmqzslMh=&1BofgUh@~QO1u@}3_FCEC2d@r@bCd45YW}J(viPnwT zM&^0r?Ea?R*29$gyPr*(1!v6!<5v8gs~Y%6Fy<82n*?JdaE+qG!y_fPeMYK^O(L+I z>GQIvd~x7ItW$$GQ<;zh+(@#QuG*ylQ<2*B-C8K4jWpcw-= zNcT$o0xW|T3R#%m+se0=|F^f%V%U3jbn^Wwr|W-T{XzA@*KsVJU4F~D`)Eq&K< zv(Z^_aUZCm+y`u3ICUV{e#}=tpx3@1V0oHPnf}scI7g%XMx2G+pXhz$j@@SrkxsAO zeJ0;ne)&gg8=tV_hB5nb?r(CzZu5T*dFKC1|402b@)MkJ3=$f5JD!RxYfCLoC@d8^ z^{;^N_CV504%so#=UE$$14Fq7U>ws4>$BsSjeysNGZJBgWG|Y&5v$d@O%`9nyuJ>P zs#4=%fr1-a-u{)Go>`;^7VA8hYZmd;wj3e-TU%n;J>6W#v1By& zUAHW4SIb|VSBi8dYFCE@mNk4Y=N9qwGQ%*9DJzR;+cajp49Q(YK72&3vs5K8om_gZ zmr3}-nHERLHyXQ2d}!3pyA!H7HbRD6N)or%>K5~s-d$ZGjYJQ(t(=TM*Lq19-JAY( zv?r;-x=zv)P~v$UOyiP@z7FYcoU)b(*(h-QpO0lL0>-Zdj^XH6S-k_F;><{i)rTlU`kg7jO% znT$}--loT{@w`1UOUvKchj zo%n>;XTHQEkTAxBZ`aj({OICt2`0Cv9@}RdAUtt#G}x{4p731K=TtUsb#fzFe~}$$ zfwz$!yBBSNMAK;fTS#K4DHAHCYPym8DzZn77vt=34`sji=U?iqgo`?B*qzRhq9) z#!nlyK=7o)Cc`T=aP9Otzf3T2>_ld)bv3&(HVsDox>`c|PV)3}rM4<{YHU?nt6?xR zllL6aMlLwNi4kJp=67oTWSm2_N>LE-%1TPNuW(~CH6x1fT1|VNPi!z)wjnXsG3$hE z6cVj*U%7qmSrwx-Bmxe{^@uy<;YxWsdJj2PAW|4Nm$0?tl%HsV} z9FEL8DdmzcV&<*IFzp2gX?z|iIwQQ)Y}ZtL?FKm~X1#C({yscS|8?ArK>U3~tS(J@ zBQ7521W7**-F{6_e%nyfW;~x(cl+NBUeEO&|5s*2IIKA6%@A5**fWw_SaRx zC_asGDp+)D*J&yN$*b5`_=8^j=g7W+5MX5^|f;I30{}RD`d&A zdt8=39{>}ji-iNcwM9qiK7+C0(3`&!kFVg*f?7A|w_fjJyG}??RXrn3O*)tyLnl=53gn!%%umrIC+Zj;2TC|Grv^(EF+ml}N zjqRoQ+QbP5?RD0vYh0 zd}h~`e3wxvX3saW7yUlKcfRRpe^qwPN$mGh*stFqg7a`08vp#xpqJ42*Dv+*ur^); zG@49EYA1MQworl8`=IWgwL153`U_fOT8a#)Y=RF=Uf7Z|F>6ILX108jZRS@ z#<>vp!wso8UQh6Ilfn7;t0zu4;@-81A4yLUM$^?7eDbL?xqUn}iqtW^`g7~N{=vFF z{C$Yg2W|}@c70xUEzh+XHNc_Z82-J}>v3FO9P04^kRI7W!+WemEyoxBm#_7y>A`pN zzT){)mMc2zY?{cL&=)%2dl0^5smjkx|_#BOH(Wh)n>Wrt{)9i96)fBgOaWmJP@jX!0$N9Nez`*Dw;i zn}dCPj4X-NbfN9#kUGbYYN-SWgdf22;rs7%AV)68N=sivo~~Nz2E7jod$qR-Uc_fJ z%1kx)q;o5tL-Yqe*koV-9LH*CcooZS5XaXV_hmxY)obt`T>;$=_4jFf)|!4z%^Q_V z8FWs_Rs5SVQHF5h3rT!!sp?pKMxg3gK4pz(;G@WGEX#F&pGSPN)N*|xFtjV)g3zda zLr;l}M<7aS&aTch8_py6 z$*DKQ5cle&c=)EXR-!T9qu8IvM|*kmaqAN?f{vtc^`O?UvRodWpq`v}m7N!j?v1ef zs{f!_wBPJ9p&@1)^0TnrgwYatP4mk;ygr{cbuam6sf6EMRP`UiQ<^mza`->4s}r9Z zY%TYu7yss%3eHEt^9gG+DP04o_*&`l^5=FJN{!ak38X$#I8K{-n>w~X9E<9(-nR*_t~{+ov$`u(?t~(3Jgy+MAXV zJ!R|iBUpZ;{bpBj>Ju|=+%I2Gr(ak?yQ{ncBPK{Z{ zB>0(Lyv=r2{RJyr>u7BjJt}{)>sjF(%-MYfd(}S^T{7UU6Rz(?N!T*~N0&Krcm(Uq z8rsTcgchBv-#_Qe){l_T;ddbyCXxA7$|T1- z3-IU0nuXxQ!Hbwy_slG}=h6pM=TZ0p>2E$VHs8~e@L$c%$2jX2=#b?;gz@3t#VB3! z{QlhF&!@)jdWyb(?fwfAdq~lrGhBJbr)PxA7bI=x5g#REp5{{~k=c;0`o}~BudV0K z)4}B0MLKHS`#e0iv%}pqL7QuDSyqRCpZ3QV_asRBQ=@S|{50enjfr(3GQ9EQCx^*- zWXF_ojb2pGOh3FPq7t`2&irX&K?&~T4u9I9GvaXu)V~YW6_6Ssd&toCxJ32sEx~JY z`>9+T(dpFxc7jp=1@1wH_wM;ee#m1Rp$UCh9)7ECTcsz)^$gXS;cM>m!>|iC1?M^4 zviW+#?meEf+;mVjX$IyIOC@*5AY54J)iVl0_QuA$M0o-I0_J&{O#&B z7`XD1JqI5GBAPPiq0eG1k07VN2g4*_vMqTQIFky$A7JCB#=UOu>U~W_SE70?Tk+gp zkC{jUa3Rv zX~gjbo2L6+V1YbZ`gUW-^?hH`XKv@*sKUGeQYJ4*<5mx_7j_@y+!WH$uj47=om9J0r7NY zIYmHlEMdo1)Bp002!N6Fu4h&A5Bl|b2 za`Na=dl#-ViEORZ-*GwrscFn$lBR^IeTE6*y>5s$hr6<5CLqbJjc)VTWXv!vg9$> zE+Fiqim$D`@*MKoOW#hY!E*lUpg`!mu9(;6hTls{`U@YC4+|7dY2~{pK;m`Vu#C!?PZ2eYkb|-Wp))6$%wR6v){FsOIi|F*&*|#MpS&$GcU+KDziFS6F*p*&#EB&QYDH zSfV&>UZ%9Rne(;|oJT3Gc8y#|TUXA&Yo$_t^Uv`#$4Zhfx32j$H7eh-*K^#>HNSXr zv0d&pijgyG5bhL9vB2P%TM|5Oz6jS~KB;#cRu&q|{`XuU-0mo1*QO}h+22m=0Dbbo zwj(nh;d{=1wWf*C+t>C@xuZEg*oH^s272j7>zSMt3^=Q~4*Td`PaUPUgqE>ohPvNE zghuh&j#PBkI~=aXeRdgT7heEAZY^7uj4Qtn&u!1C`M^(d(lQ=N<^(UR&(gZ0y?z$XV}UO!#tG4ck79-f5jNn;!o0{SGBO{qgsgy%!df8nH9; znqkCL_8D;q)+sFZ&!k5Ep==zO_UA?3==s7vR5KoXc+=>7*nDuGm8CXs-Ob8h!&vS; zXdWE(ZFm^or}@Ou|JTdB#(BXO^Y1`jIre5#xEX@c9#dT35T2(KbwUT>>bqB7y3aN{ zgRx5EaW4Xk$!XQZ?rJpqV%<5lB^W<{wRuAxe*v{X|0A*618rwqZB46EvUYKqydN9R?r(YcXxscr-BVcN4py`~gHi$Rc5*Zj|-Nf@dtlP@9vxQ_lG9u>)y-Sy6 zHJMvfcX938!X-*@M@+LIro#tA zvb)fN8ysH5}Dvr`1j#Q zntA#tV!J4J&ZG9^fRS%fC-FQtXV=4R?w)W|Mq@wR?KH>?lvS1#ek=Wk* zbRRY0D^oi+)I?jPV0`?sQa^0NVS3hr;0wXyb9Xk1+uOgy`9!P{$(=65W;=W1D@bet z8y-5=lII#t)df8CpW1T;*ZyY&jI7D{S=)!#lEP9r|VK$&g7q4c)jd;v+vbk8r%;7;St6%s8QkFi& zdh{i~NtL7P7C`*I3^q@O#O_D8lva{6OQ~M6!M5wBify-Zg5#jB&hfb%JqcYa!FdmD z7M;=-|H)rRbdx2YjEae@i*U&-maX%Kzq7GQh}6J*A#Y1G;IZ{F!d4u@>dv{HHMxIs zJHV(6$^K{QmtZfF^MXr%sw>Pf9eh1|75BL@WA?x+;;mS|>h;>qTf3;9*dfvRGdiWA zXUqa5H<{)}782Z3e)}md{)2|h?7+9zj8Cp#$9Z%!gGc5xVwB-$@yD2np?%_uDG?2N z(zgKNQ_z#`l)Q7h+348`q_zx*V~AKMQc7sf#D)~WrstzJHM~cqR1NV*_)QGtl|vXC zmOcgljYat+Y@ttdjMpKP8>io&P|Abz3?91&KBw1pEL!&r72*3pRd?#F$Z%*rI%aA@8oOZ$0fIj!PMr2EQEJ!oe$??t$M?jd>5+Z`_O5MA82#Sbyar_Nj^W?K1D0 zvXV*ScVd>->exf2&R{++vspVf8B2_|LuuEq2- zELMxym-OjLdBirdy3*Tdol#pl)}tFcN*7xl!Ru3WX`>5Et1G?c|~iV%uR{tv1eOD+TeMe0Y?V;PtzrHH+mo|N z?BqQNX*zM?_-?}106`_9L*>5L-hCWfE}YX)P-wLqLHtszKd&X67JBp_@^@4lK6A| z3jo$DZ!50TIv>gdg!@!zppvi{Za4kv7d0I#oy zd|o+Tjnvv@EOkFobHo(eC>bkFe9of%TWRtc*?-^$J$5|R9K$w}H_xEu`=Rr9Swk`( zA|Dz(5W@9r*Vvj!^(KXY$I*-Mxj23B2h^&lz;sNf?FTHKmlAngd4^bX_Ki{d%P|NP|I4&TKx8AER+nFR3ff+b;GSLn3^y~uxM4dICv?T68L)s4olT{EH|u!p+x5iG zK<>Z!MLE!$%Ei@sokd&r5?np^I4k+wV;vM#O3{0xjOo4Oj1lcwzB2)zv1~bO`1(vf zo}28LZt%*w4eNoiOH1kDgNcyTqT!{bWNi`7o3CQq7)zMC|D#g~NbSOOa)57sjqt&K zeE;alWni6(6HRzTrRi~et;)LffanwzN6!NIX&4awg4ii^TI0BTeRGSRDdV0K{{0)@ z8Hq%0M?^3F0M5B!T#WiD+?f=a&Lc}x#O4q?*2I#$i%x$VcRrJvGj*h!acxt|YtMcB zeZq?*uG}#ppxB7W)vk_whow%hCvsiDP|JJlFH=x*Eh{Z647o|2b1_RUUns(nv} zGVo6x{UfBK9#n-*vM*@X33M&<7q}(oFQ; zpsC2c-KIP2cW({PcgC?CyH4qDUeo5jF?bHe zg4*EO{99dEZaHj_qpz$8tv+<3y?3c%zQcR!@nCG8%&k8#Q7qW7TE`RTL&V;^u9Y<| znHwvT9J}OB`dW1yBhkHag1wAP{}r^|7ilBl6*TK4Dx}x6k}KywP>d zl-Liwwhd8dJf=}!$Le#>rt<;QJ4Ckmx9=WB;uv4eX03VCR<2(2)o|?k(Kr^iO?aZS z1H5!8jl?MhUWd==1o)iMyR*n~p0_jp&C!PIA%ylJ`s22J>=kSqR~$|db!a|F_WJvE zwl1)0K>{dNUBLFQb-W+*KJ4fk5Ii_*iNBiTKJoTUB1f4j$O9JWaAW`n9{r9T3&&qn z^w7E(pVMd2{!UABg)r^~=?`rs@7|Pc!%G9HBozTK9M^HyY71G1eH-s*O8M&P5ZU0f z^Gd)D{f87!Y%_N~q2oj|A}73z5`*Uw4V`c-%Hsq7Vm@!c^HD$gz_ymZ4$E>Gt=~(+ zL)rSp(E;}xqk2;yBgAwBumE{jD9Sd3=s^J;?;hi4IS77sSzEcxZj`^U=Mefa%&+X< zL-x6txqwPmO2pTiiyWcJUOx{`xBQx3i@!geS+)8>R?7h4%R4*H9l)`mhjM`DKC%4- z|Fb`yz`y@``mb4OlW-D|f#vfa6JHX^CBs@?-wroF60lpZpk6Zhj2@zlbP9 z`2YWWnHijX84+}7+4(Y}LgW6wlP@z`N0amuVgI{MkFmsHUkkVWm=D*6TEe$u)-Y#F zRwDjUZ=q1(uEv7?!}oEY;V)g1W^b$Ro2#bwm;Bzq7s=5xT*?z~(6|4_=LEWi)gdtY zcoxY>fepK(AOfrpMIqjR&n(VWAE%Iw>FqcLUDtrNk97AEnL6wRti*t2#GkhoJnb*EQLww3qVTUYiW3)kqpYA6(y|K*9LuxY#t>M`4 zM%E-MKjh?c;C#m6{lOV}y63Xu#z$vuk$Zx9yM&wpisuO!e6W+6?{yK^rG#lBVAwj3 z)4Lo}MN7i4jP|D_4RUJiA^NV($q&VO?1#gfLGX7wP_Qxz9BQg!_W51Je!0F?S-AdU z{DxCuiIs_#pM63Bg3F!Q&QAwr{GszFU8F8rikR;Sd=3r2cT$j2DBT`3Z1yz2<)Eg7Cv>G zAM&TuV-qHWU&ngkB{^(oqEuzPj4kuy%!do&%tviZ?EGH0W%p}2e#mA)F-G$;eJh9K zDWVyjKQ@6PyER}m7n_}rJ?nQq$6gC*mERxWD>>zCv?qTgzcCTKyq^S)D0pqead*^7 zRI4x`vGW?x8oC&T@ImZTEUs0Ba5W@6wnFK}%$lMIh1uWEt6L%PSUn5-C+8J!C{Z?K|+~!u0{SCxb~xhVyfRrh)TIr-As#->}a3WWTW1 z&eu3cii)XRTDZqsMKPxGSwa01pFf&&O~LJNr@_yX1%Huzb#Kaeuy>aoL=f5X3p|g< zIU>~C({AQ7_R2fTEDf?i^Yfmp;ELw>PCgb|TJ;q#H5iT~_GXe8Q;3tr6TmZ)#CS!cQ ztshYDGo!K=L7}Biu2vED-b z;SAPiqKA2}kHRwcYqaL`m-Z{Ld+dw^)c7ZdPa412HqY)bMDRj%Nh+?x9QX?|F8;ze zDs=g!b-`2|&l}(xSPdFl?mOfJTEo6N5ho5F(r&$f!JHrCnXBxkfE{nIz)(3ucw5M~ z^qYhR)-xZJ>CZ-hXcMv<=qWh^iOyVe&%z{w2U^yL*93QL>JTX}PSx^D@{c?}Zc0_>i=2weINs{aK*j@R~W>?w;^^8}mK~66# zhh(|#tT`fen!?6%B?u6Gh&!AI4=-)Uar`Gk-kd_`r2oU#N(Q$#8aL;hX1E&D)1^M+ zyp;;CPxN}DB&clOT63ZH6ma$zv6r5D;4MdP#`S9?#%sFSm0Mbd73_7~euoNf zqsJIOXyx>LahU6St8%VyL?!Max9Udd4yW4%2#PK?(1m|-k0wg%;(fTTg8@@JH+)2E zVRE2n%h;8AIs?{e&`W6;EN6k>+NONN%^h3atJmFqnXmg!szw>b?ZWb&hP;X?%MD44 znbZk2FiSq0(zF`bh4y`2n*!+0)ZKl)YUO7KGdUEuOuhFMc!Ox=nbQvw<2OIHK!EPG zt+4CXAsGM=px;T3sV~!S>ywil<50%og>-CO4~&ibh3Vdx=oaeNPd^sVO~L%}ncbF8 z=uAJe`}h&z)U1PYnH(La{!Nz}&dWM>F%ux*XnohNIR_A!=q97w$$%eeK3IUj}8L=7HK}zkp`UE#`|T!=}NneR{TM9)h&LcPekV=9ZE^y9CeA zOZD$3=cndwtHI-ikKw%HpQj?mX%)QDc?AehwiS4c&+?2X-|KE?tpl1*b|D%c@Mo#N zVOWGZKL36}ONd@bCn?#}%2Tgoq4ya-dBh0?KtPkqYXC43b0!k%%w)Mq&$Y(>3&o6;Kz0X1MLq|kE>O*_BN}FghpQA@~pkF96J^s65IRfYEna0HDjLv(+-oB@Y?1T)Ls_Ij}MGrj)(i6_` z)$A!G^2?+oI}oj-=7{idxrCro&YDSB9tqpv2@!DgYkH@D4Ykw%7M}YDeG4s%UQZ`%5T&=7M%2tf%%R{;YT@-(#+B&q*h2X2dJl8Z&VvA z$e2r5&#D%d{R*UyVc(m9r+uq4-D+GxY8|m&qd7kQ>FRJbSiFF9DKl@lXtSMh>ivaz9 zO;R!>{3VkvgJQkM%fOR~Fsb+v(gDnD2KP|SArWB4w{zf4d(=4+BP%;eBVNLV@kIWk zr%k-oFmT)PqJ5rHq>$gh-ANq2@3M0B6wjSlODl z_{!@I6vy90U48w|UhStv8KMQ(sDQ%MR~B{YDuJHuwZBS>9;>bW)}XeQ^ja~D*i@{X zI0kPE@7Q_{r4SaHBU^if_GAI#hn80SnjE>#Vfy96SkH{! z>yBmR4YWkrn?`H6*hC4Aw7xL+p0TgTZnxj0ON)AF?aN4klpd$J@~wxu&#%aZjz;`pT;6YN2Hg>;J#_1EXa2hbm&WrcPuOH@a8Y>@FwMMhfA2cI% z0TJ|V=|S`}aQUBlh(K;t3qBur44&OYpFN7sqaM`s)1UXMPyM@BecgDl0Oz#oeuD^b zUc>$^x{-fgq$6li*^hGXT#77bnXo>8MCb0cmLzcSv&((071NwIx2EA@j5%mur9XsV zG*=hRR|4h))KY8SUZq-WGT$OV>#QsOYzmQg(EB&1XrTD3X6G=0<|M~pFlpXzoO_yo zE&UuEEu8gD01!`{#K5BuWv1t>C*(00dzj?jRPYI!1|L`_q!^idsn|WL8 zBRblt);S)NJ;&AAhb)k(Zvxn#=3*BRgzHTFbdmmpp7HIc_n&UPMp|xT!`gN4%6t$C z-VZ0Y`rf)*2(#8s#qnhEYeH~s@Kt53N#kw&dQe zGBP@TU+iD)D#Y*1vSPkxD&A;-2#_oid`kAn`IZ z$^dQY0#guIxv?7V6sRA(lHUG~1&6*?Vp+7;>$Vf8)}S+qmBT$UOs6y+jo3;}Je~l& z9*Z|#-SIN*Uut;OjGyO#DhtLnG^nPoQ2?C0N^j|yE0fT*@AIFNo^9Co_GS6{-w23) ze|Js+hM~eoS#j#=CB+`X#qlh_xXXIy{l}905QNAWWeq*~GuQRf^seu256!_76`4Jzten^1BgxpvxW6lX%?=+SL zBxXzXbr`)aq{l2)uhi~#bz*7Cu-3_aIfM1EZae6EV2x>v0BgTI;&x{7#-8Im&y-@D zJ+j(BGsSdCuE@)h*|RO}`_slYT^%EU)K)BS0(hR z|Lzl*W_-{5*ZZ!qxfT;EI&$BFDH*+(-cLdJ!uD}G=r^-?TK@>@16E)8_)b>6RxLQ! zG=b@&eAIN&mvy=%W*n{cFuQjb)-V6G)TwiNvl1Pj-d-A6@T@?rL`G8#$JWFueSv+< z>cSc`Z6-smJa4z23K;mMbJh64!F+^YzFEhS9gGrAEv>@+?EH?y-IIUmwEBsGW{;Uz0DV(`JBoxGO4#{pJ$)_ zuP*nL7YDSS^S*jZfy5oFw)v+<$M$1_83?=&KqYj_#QXkEUlY%)PG$(ZsBH?*)j z$UPrVwoe2Ce{-SOs(HnXS?)N_N_fvWFy8w@S#jBwvY%EJU{QB2_GN3l53us^-0Uhm6$ zVBYzE<&&L5Ul$^Ha7V?N_`8fk_BHvRplvF@oKZQVyGhYv?Mrop8|wXHnHQ!t!Fl~+ z{(~KB!PiasbwnSY`QRJKzC1`bY>I&$uII6RaQ2by#qTyWQiB7PlubO2>14c2_Sugh ze4-dUK5LL#b=hJ_=|q^|nwh=8ZRB(@)) zoN!|1%1Ropaob5F$Y@~GV&$7bW~v@lB_9p;wfa=5n1@KndW@T?+=kXZ>~%0C>tk_3 zJM&`FT8j(=N1>b)rCda(hJ(@wtqN!ojxpcfJBaIKta2BtL$pbM&ya4IN01YOJ$-9& z-qep}adm&jovTxM*0u9P{IsU%q1$?+{XcO0IfmB#=Zs=H9_n1`Jrwuo00LNYx|5O?E3(S zFUZhF3ZG%t=onLm&o13Eh3_>2=XGr`3ISTT&yI#g|F*vY2(YfldRdV18Ci4GJ3o<4croV}+Xym(>}zih5^3=7bHI5dUO!YifV zw+WYEsZDX2P=pHVr4^W5y^G#DoY}ykUx6*df{kTAf5OmbKhx0PD<%Cj(EV4tOtBfs z$7N=glFnUb!eM z?huyypA6_92~9T5zpBx1_lvezKi^L(vL14LD&`#ZN>O5!0#3%&SJYD{uIcB8wGmh+ z+sOvgSUmbJ)6*R%i7R9_v$2qxNg@B35x?;b$MLyC|7lU1X6GBYXxY~`DXgnG*0`(Y z>L0~gcFgHl#_Wgmf*S_A2`;>nwh2N#AJgZwbW8D*7N*0GY2n@g+J6GnsZstD4hs6S4K7Go1r6pd++A3X z);voVte2{?(`By)OLGVEgGlIFyqavh#N>>_eqnh&`H%aDb)HuX#~iO#JN5e>4}0aA z#y}2;<@g7kEt%hyjsBonU4d$3qJ7W{u@GP}~q{_=V8 ziIx+;W$X7fgD(3xb>WZ?J8TU-`#?W!+4;qGV%-7sb=4Kn7uVFH%kXnu^Rb7?xuB_m z1LhaqpAGbkzO{$z^#9CWePreI z;@P@QIQClSe0h7_)B3JN{2BFJ<+S(jlrgqhpI*~fO)rfP0^&gM{3jjx==I_ z|KsZJ?U+$C-+dI@=kaiOZ{mh=$Sy$+y_6eH`;3^y3|SFf>8EAYg$3J9Zw#l25PgI` zQdFLN72r6Vc6eE|>-5mp2S2ih=(yQoIh4vlbDye|JatejG%y}&)*Kg0YNO%vSGO65 zoSz~gPV}(#u&BqfCZX_Ll4@E%;%)l-{-RBB42>hb)+{-$98Jv_>tb+%;#6` z(R@A==3gJf^onq)%H^|JO`J!DSl)M3mXf-#_g}5b%vQ}XDNZ%c!*gQXw}+Wyd!c?+ z)L291iai=WHk!4=E}W_5#qSU`?1D7ddlEh3OjS$1PFS}c!|z?Ch`t#78*qp;n$;u= ze)Y?slyB(sqPM^gK9nCLJu5Q@?He=GRz9lB=6mF{ykNzrOv-K}D=c^}jILYd71wnd zHi-;jZyc)d)2a+r5Wc^&R_18Lwl%;lmzul4=*XR!z~}d1`|nKtdAKm>(femn8&;j{ zfBi`CRxa1588qk~W!^o!jPqgDtBu>~RZa3%`1w6wc^zY~>9(v?!upB|e3(Bopf)BK z3tlhk%D*#-zPYFpOwFEVq&D>2O`Y86n;2WNZ)Dn@WHLT#CR?3fi>Pr~+EGK!*Nbi% zl!^0Bl=+Q}GG?Aq>9!h7J7>l&<^R}fNf!#KGWiQsC&kQ z@B_CLQ=BugeEipS7N5~XpX2+kdF4vmzS@}ly4_XJQPl-~jyRPE`8(?@c)sInU!x=i z11cjzzL2jU(DRf8tEPVO3Gx8`;S=W9Ee`gJhxloFTzFQ>0OkXWx!`+@F7JC$+#uEl zTnq~u3-S24?(3w=POS{W^Ti2?*g#L*ww>;Nw_n3PJb~dqH-^729r?HlpMjf;eT$w~ zyEk{SBg^Qt+kB`2P%-rSj%C;uKiV~7W`eQkuEa}ed$2BL$hle(VT=6q&IiuP{z)m8 z7Mo(h```1~TvFp#P4cVmt6mjg(OZ?6kLRmOxddsnmkH{4qis!buOYKkY9}%nzH5U_ zxt+~p370n?W>2bl9_|Wpg&Q};ZTRt9R&VI(3M_cOP2b1Tq4bcqSn&6;Pkk*Y${uR4 z)Am!rH!4Q5eM*E%MA zZCjr?Zege#7U*jlca2h<*n+Tl%R^r!cXdqr6)aenyP>dM`Vk!eJ@{b6+jx-HrOJusZQ9E-*L+fd_dCOJb5 z-w)m+^MAa!JrMup;pKV0jq$|qSDt%K-<_F+X3tw^5Y{0JJPa3ii%5Ko@nvJdzfV5B zS!?L3c&67O9_Dde_;KjJ7%aenK$PKTtr~-VQQF!;8AWB$2Lrtgt`1T$BEC*5Eu}_! zBRA}nX`EBvO<`HSWbH@7A9?EcpSz_lt)&{&2b+@habtf1UHeaip55Vt?oe}$ z__|+^-_%-C0c*cmGfh-$i6yCxWmva8F(+NhEY0C2ew{Zm2mB>OxoSjKA3S$3rC-lL zpM3Q;HB^03YY7(UOF9)?OYAp(KN{WGFnTB!tn;2&rUM@1V)b;($RVC6Z2R+R9Fg|MT&eShPh{ z!CzmHk;}_*P+<$2PHv_p6sFJ}>!%2MApSBdCHQ)uYGIn`Wg9vThnYCj?4Oru?xnG4 zn45nymYoe(86nJPrrqq6rSakrZ2#GLCS7QRyx_5b3X!h-Em(#I#8p{8TfOgzDhscL zzPWRz!&z{)X?iUde7!20-qbknS$fZR&BFBu)EY18isv;5Ir^L_zoSoCgwz_aRkEIE zIg5`pe_?HtjBR$T_mp-9u%k<+R#YsTR3TqTkxq-nsP6!-)3mm$euDsP(fl;NI+&{xOmTl~kHEGdNOD2kXM43N5+7d3(Z3FQ=VQUT>(%oDYnhUXdhPwMZ6g~AUNVd+M7A1z zT)vI!>65GZ(=S*TB;DfmQQf_DWD)d(iC!W-gOD4M@w&V!i+P9|JfE-qem{r4qg#J} z=1rN=oq7`zeY|L>0X!>j%ZspfR;~G0#Ssm8e~NB3nQc{O z^Oq^PyBl;YTXLe&ki(Hz{kqF+FKXx0Sn%^TIWdur+j|q8S#k{VI4`Z}m4yqyUUIrN z(vX~~2{R8chvc)&@HTt9zJnh>XL05f$#^?7+y2C|^3YVyyed+_@`?^Yj&j}G67hLbAb}7?h`=eDRY^}=ASO7mD>m75s%QqX# zM$U`B{C&)9z+)p+WIdo^;0)Zdd^!E3yrQm;PvB~e2}BDtm^9qUwzo(yUf)sc7-~uA|&XA ztSf?nyZTl2B_{xi)4-k0%9%dpUyL-HRO zvSFQQho>?lk6A!HO^|0BqoNRvw*Ts-JLi2U!PikfXT<5I z0S{J!e$b;F^7?%dW`w&nWb{O{0_Wm1#Xp%Q``)V-oE|Z|0BQ|@XPnpj|uV{OhWBUy0@0=E%-eKfM@S5Y%=`u^GdEt6ZwO?5Fwy<6t-=F{M zZ$%fxJlMb)D*vSr|82cUb7sT&%Mc&>Jm?f18hGr>)`|Y~-RHrb-<+ywlSLtxhm?&e z{fL)V&ubk=g6%d&(;Q25!KJSL~Q@k1k0&u3;8iriZ~ zO-U@uFMN1;>AB(M8R0r~P{Cz&LyI~Zi_?W`5I-Mlv27KWKk41{2SYReqYOM&hU1DXDa@dO+HB z4P6r~PzxM+T?^{(`lU2WzPUbjE~0gx=0sUMbugCAq~~6hfzN(?eTU+6RB<`gFR}+X z7QHy5!mi*rTFrBjref&j{5aGs?cP7rLXFe8+q+JqkCXmXbo7h;`utRW%#ab~#qOx- zN8SkXVOxK7=K1H0%Pl%Rg6$MLf-SXTNc(EJ#gNZ>@VNP9sOf3Q?cR3`D-1S0js2Cn z5S2MluNN}wPMu?(B|U5F88rQLE%oXnrx5t(w?-Th;*;f^m{30d)MxvNCnuB}_@;`| z{s&K@@e>s3+xg`vb&@1Hx3QzLq*OM;$j8_EWjNqrA~B^Ps#tFdwm<1WsZP*gfl@nR zeQ((y^aQ8eo~I`mEO=0D2Zq)LExy2RJ8-;qP=v8b1SeZTC>~1%x80!I=O-dv zt_CXEy-tuzkl3mLXR6}0--*jBs6BMkMJ0{5f7J~~|5FFwTuwSTD=1vGDt3IZck2z-~_$^Uv9TGzR>zlx~Ld-g298R8yjjkHH`F z@Q5;+I$t{TK>zDCkIU$ddmU|m?IM%6R;=iRBuCD#tA;5bl!35_{8v6mMbCXT(MfK4 z?#o&#pSIMB)9B?<1Oy#q?M>{b`8}y|U57z{z+U-hT_J2nJbCkEN*ys$ul?mb|^w$E(M? znP}YHXsp4}kO$UHi=`s?gR-g%ZAmri8+ z_d3A7IsByGrd#=ty6Bic9oyvtxKD_>^;?Ir7qg^{tN|C3IT{m;vO6)S3D@gzPbnh# zg(J<})#ANxfJ4L6_ub~{>ia!*iCE>e>^r54?2LYs9xBpX6}y`KXx;XsX9ntpxy;sb z{T!7Uf$UK}f$X;S8064$6Zmo79lr;-PCo{_i9X1FNMl)k$uAH8Z8d5#s1EWg$rqcW zeQ`t=Et%sWK*3`0Ooz{B! z%>k6Jfh*t`i1y2`QU4I>YyLHAdtu`zHrNKKish&|0M-`d?j07*!FUXHqt)jC=V$no zrIx#G?${bW%dJ*ZHesZSrRjg#AsmM}vZI7?ityO&zpn)xhW=NmeM*p&H67?rfcQio zFE-Za)p3?K$y%L<`u6^5!?M~f9WC>o5AoB|v43^P`vlWj|1Q~souZJk9Q1a-J}w$@ z=Mol=g$4Bc8S>S)&9srhr0q3_(~G%?dsdU-luu%g<%%YJkI=JThsTC9m_r(WDmCTYK>XwsZ3BU zmR7Y7jLnWF$lLm;nxfy{XBmm{9JEQ|W>%2qHhO)PBBkq`O)zEwKWW3Kz1PToKWSpA zkM~2kOg;0-$kJl6RUJGJ#Y)W%ETzH65a~IZwH%%gou^)?O7tgQcME69Ig|Rst!7u| z7*CnPc9w2LSV)b=Q$FW1zi*i{^XH<%Ex%)}@gCX{6^UHm=AieqN@393-}yqA`oLp; zeE12fv8#ku{PmNE&Eyn`2I5z!&p=srx>V=PbG-PL6&*Ztk~+U0k2+cvi{9<`F2dK9 zXt-+9`c?nWh~YnwZS+VwAU4e-syB+6B)$RX&nSB-7IiS{BE8c)MrA`!y(N~t!5tL+ zFr6NJ-+95orAk=8I6jUk?WyT~5y6cgVz)TY?j8$e zUd^QMO`Hz;cuk)&;`6hDeI>Iy$vBs8!8wCEr*S)9JNFA-_kZ_a*x_<$sYd_nW;`z% zlUy*D6cwuwOg+^!cP94B)$8GHSC3S4PQ=^=`|NMXUg7sxC zqn`JTZAHu0onTbv1~FxehgW5M`CbLwL^gi*e7;Wh5|umF%lc)*CKm(0rHAb<4K2uN za#_ns?tP%nuOR??*?MX~7M}AJA+On<4zJmDqO{G-i=7YtSVkl2P+FVcd*Au7N^au^ zdhU>yc~>w^^!bUIiFEIUJAhU5P5oo3%r$SCj|~m`qbc@6%7GEUF~jmie>67EH^ep} z=lt90?SI!ZhLNI$2K_?tOiZE`Atw5-W7or6^%TGg*|hF2 z)^8g7%Iy)!mz3)@6P`I1|7XrOk23xGvA(pZSDD3*`BvaVzccxw)&H}NAG!nibys1Fxg=C+^|=B9or?1r1s7$>i6sP7_Bx zpX}~Zk-XfNP?Xs(t9KdFtDNnAt7i>OG0vXY({87#BXX8&)f~H=9?Uqye&W}g_uJ@w z8~JsP0{iv6X=CP@702h2`!i`Z$1y@=6m~_+q_xZz>c7^^aGvL7Pj6py)k$0gxXUQ3 zeO7K*ZvGsXLaQTS72p>HM)X3LkQp!a44oU5zZPlF`2JSNZ!=o(TPNY$tM6&C(n0w7U>^yAy9CdGjoKM%?X+Up>V! z*p^&;_+J?o!n3nHaW7h)sELlp-ucIeN7AD zIv}5<5QvqhjkN-PPnP9AIp>Hl0>*rZajp84@o4XkH9 zE&YwLow&l;5!e4zcMtwu1(=N0??wyNqe6VTH~t0cjju-+-~FKkSWfUW1Sv2W8!iPAB?a^xu+vNsAW9F-UAaL#4G}ctdJ>@c4em6#OfG zJtYjkpA^4k2|wRN@R|M%VE*I#5LpPZ01;pHQZE}6TPa!O^`N*l(-ZhBS(we~wvED45R-5s||G;bZ&{ALIXokAV?W|3AdXczGw@sDRzfC{K9;wp+=9 z)t@dDhM@0JB?SbZSERw0lK7P*z+LCpJqxh7v2HOf@B`cl4Ntp@Wz1J<_4_>p*NwaA zyHg3#@h&#+>DrAUbkVxkut!Cd?xRCf#@LeY-ZZfT{N-N#8Ri5F`c&{)D?RyWL~{I$ z)VNw9OjC`LiO&%?k%wDoo9G7nzev^taD~+J9JI{kPe#0LZ_~%(zbz|nPo_ORfMw4@ z74Q5I!G>$`8)ARedxxg!I6(_AOFiEN&;$9&LAkn`z7_(R_Z*JrBq2{sFC~ z;vFb#QF<}y(-YB*a@GEF-^NYo=o6u(={x=q9ml2PH_|yuF@#uQ`d#j%-d7kP~P&>|qSl199<-TiU9n{wxD1+yvvb2nk z&nn=(g8mDO9T#}qEr+I1<=Y}+?Kcm-zPS65z14#V=lyV#@1S%V0oq3sFC2bEt_a(w;}l^VDw$c z*lhRoXYo0Lql#^EtDhR9^td%JUQ@*gKE45O{N|i1DE(z?6}kW78*hT~J$>!!dP;Dx zI-ky~A$@`VeIIN`PxzavaB4s48>2^f-J^%LDj4VIqd!u4AvM`)YfU&fqz&*S9UFD8kshBT7>$qK9TWg>T%Eih_*3GW-_xYGkM zEEen8gHWXIT56!X?JHpR70WyVd;CS^bi!Z9ntT92K)=60+f+3CfoSez!y)*ZBQxq& z5pLrTfA8o8K4GK_T&!Kwutq&ft22CHtgxNeNjT{OvjFg?I8$E60z12zaN zvgi)2C4Goon;NAYWXRW%0)12b^E0y8p=fR&%LU_TTvp-1OgZCE(&dq=K^ankFm(1m3!*K<8w6?{y9HJj2 z_DrWI$gHQ==_JE?T{9=En%~m_Si+r$_M=48*K7iLYrXcP;nc-@wCg^$3*m)x7d{X8 z!Nc|6SV%wobW4a+2~oF2CYcj_@#V$ytN3%sA^T~>^2;^D-X#n4yVL{~=J0t5*uTw7 zh8sCNh_7fc(}wTMe9~>O*!Xr5!A{? zuHGG2WSRKcQ(%2RbB&?L{gxI^* zLOAx!W62~Y+LVXQ-uh)49~+-{J*!n+sp6vtOW)i78SeLU%UjbQf4ozVcs&0L=hvL@ z^&gCU3(5MvFZn!Or1X>s(Wj*TQRUf7;Pe?1_ABL$<#lveBS2&OuuYni>uYHtE-_Z) z#6j3UVcMlKR^Y#d9@-ReWo^PHl22Mv`-(p9)B-hUZ$dY-e^uyv|J)f{ePfI+g$43F zZdRn8fz_Mf!Q6EVrysfUa7KsLm!PMS=W>YtxU;qw;!&FqkAd^_v9>Pw8S(BFh~SvU z`PJz-e^y4q7|2V_vH^2&a9}cwJ?76S!dY5vu{)lgWw}fe(ev@R||){nX8w$xSjA9F%umd3dr~eb!kA% zU1eCl07H33&QGKflLUCBp|uf|;*b;QaK3LA4-?f}eU@C1O>goXSYHM6CP18Iw8JX_ zHfHnQ5L)V08;p18hBFZVSv70zP5fS4CGZP#uEymGxN4cb2w4{K^rP#wAj2|u?tk+{ zQ^NL$+B~U>Dc2G$1Puc?FYbFukZ1DQbZHM+6Pe8~y;eURiMHzm1CHoZlgBX5@jF_I z$ocY=8$|`Q&LO-^oI`95z0WP2ocSDKet_xJKKj({XTU8Hys2?0K6mE5E*9W+)+`j~ zSU)KgV2+=PS(g@5tcnD@%}c$}?;qxMRU_04i4UySu1nwhdIvr;wYnR|adz@59V`Mn zvi3Awzhsy%)EInmS}e>z!N@vgLto&~{CSuojggB54ggl;(Or~R@J=*$;{JTV>tESS z{9t0wK+IHf+cWt8MQ@J7d14ZdP!7~O8 z@O#2}KyZ{DuWA}LUi91spFgUOW7DjK1N;r7zn-T*8s0?de9c!uN8&noxTJ#@$N+EC z-@Bq%@I0jLW;3CKmht$FW=}+M$?1AUKSu(;x@GAs^jY)18NoMB&M4#a=<)hUPJOtE z6uSD1g3^}o{E00d6CR@PXyp{1y>~CsGiAqqm(I?Ta=5<)Eq9#D>(jEFyNuXdg?A^> z1AWn4#{KjY%U$!0s)aq5xg}i!T=QMdGU2QH76>>IF0Y%$QC*V^Tu6G8Cv*$*Y3JFm zfV1;48jnlO{aI|b$a$Y+a$e^wUkJ~Q{+kK&GhCv;=G~0PwBWqxUk`Ok zKGfEf?%xCZTb{nA&-dTCIyJD)*cgm`s{uSCKYimE%BvY!=_dfc zXHvHdA2*O!>v2PBJm%qL8ka_q>vN9Xn1_hHiN7~^E$AMw7m^}mst&G~4>4+6k}vf9 zsO7uE;QB|Eny^06UEO)1g*;FC`4^2_YkBvVq8v@vj1Cl>Y44wK(Seen3MZv3;PZU7 z&{@2|;}q%D1$mB& zwrAP=b>#U{oyF!t{9cqWz5}*}WM*}dT6vhS1I{|hFUMbp@z%9o23`0^FAI9*Z@5k$ z#n*Lk{ene%y0Lv1FPknn&l~p+!Er#U--uwF#`1K!5upXN> zRToGcy6zFUV z0M=&WcX(gluh;mQ(PN}POM9#^CcTvYdC>p+e&|qyQ-YWuNy=Hnbg5JxHuH^{^xB9? zXidp;urDsnT8s4nC$5;sZM-DoZ62pxyl#Ly1M?5FSdSi?!}Tv#57D6gMgne-6`yaq z=N?^K(jC-B!cT#5M!t^%eBpT+d1lHySaL(3>_6xmGrdHM?OqQ4aisfv`nZM@bM5(s zLZZJckOPp6@{iZ9Qn+?~WVGni?m9XtKuTG*K;!BiifEV$1Sf!I241~B5 zsm9i&rUUT-MBPa`L2YVJKM7dUYf@DBwsbw2FF0qYRf6+ufrsA#QhRUwwHA6~MvH!f z_qDIuXZ(=2Ob%!~1m7>^?c{OwPYku{(PaVlG!OG+fJ>AgPg+Pg5OoZ8^q)7UtI2u| ze;TVs&TqGEzG&DJaZ34DDeOme#b{bzo2ebN&l@;(cKQ1reO9yS09h-xjg9n`8`sLO zHA(|_$q7>)?~v2|O=4L1>zLAZlt$r2s|f!Lz362u@VP9Cg8UYx_V{8dfBc->v?A*6 z@`U;L_nT^;wwxTKq`~JEq6E14{QY<6{O3V)M=AUh;$YFJ*8{z;@h*CuhJR5jz4c-k z!&zhv_~7{mX4g$~C_t9yjuCry;XxN!I-u+>@VOidwJ;O*pYZ%RtP7(=hloRuQ~HJ3 zP%~zD40=nb!}`BVf|b>a#!MOGO!Swg2l!4_aT{LMkLpI35S}E(;AqSptj| z!a>Gjd30T;#Z`|{qe=s+1a@5iy_$}R1^-;^{#(GFQ%N`7k3TOSKLIfIQiAQkU%iy# zSwvgkuw_S#`YCk&awcw{4A0kQimAFVA1c1?hEW++{GJ-BWo|A~y^~09@l+w_H#4W@ zttDAccz->5`*1>h@` zSmX%eCHpns7oDzKJDk`T3#WVI^+EOY&uz@-@RZ-{s*!Z)1%hu+&AFasPS*cInGDP| zkBm!~3V8hRGr1T46ZZE=jeBqws(cuA0JznY-NRPxR7R!KHj(T1DRzu4dn@S!>(th+ zEcxW;I)VLx*QR2sA^py%U^m2TzR94AKjM>ToV_mKA50YKrF|{!LBB?QsI=vuCotA4 z?{7dY2-%)jk4jG;;4JLd*H1lC&aVtdN0Mg4_uZ8E#td+4_1oKZ+vrMED2Q*32i{vj z{S|dvx&UJjP@coN`dAKUf5uz3Oz@8O*2>M>kGe^U7WmmV*<2!dVnOawY3){f{BdxRlB7O0|3Ap}A--*oq)(kqq zD+1Qvj&C)2y=@f^1N^Nl*2?ApG|0?F0n5m$pKOT*lPyFtPebj%tLk_deH#Nc%%Kn4X?C$4Ef&Vh5GjqC- z{R0>l{+BpB?v9`8eBY8EPsqtHN!c+vpNz*cSq1k5dP#nnB{)BswT}ngvDygZ8Pfqg zIh+U6H$a`K`aa{d>(tGFrw%co&&+nsR^s>Tvj*b7EPCQEW5}lzbUmyJ4osuh#m`72 z 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