From cb0721056a168ea1381dfcc8d0716452c38a96a2 Mon Sep 17 00:00:00 2001 From: tevador Date: Thu, 13 Dec 2018 23:11:55 +0100 Subject: [PATCH] Assembly code generator for Windows 64-bit --- makefile | 16 +- src/AssemblyGeneratorX86.cpp | 523 +++ src/AssemblyGeneratorX86.hpp | 82 + src/CompiledVirtualMachine.cpp | 47 + src/CompiledVirtualMachine.hpp | 34 + src/Instruction.cpp | 70 + src/Instruction.hpp | 56 + src/InterpretedVirtualMachine.cpp | 2 +- src/Program.cpp | 44 +- src/Program.hpp | 23 +- src/VirtualMachine.hpp | 2 - src/common.hpp | 4 +- src/executeProgram-linux.cpp | 10 + src/executeProgram-win64.asm | 169 + src/main.cpp | 50 +- src/program.inc | 7033 +++++++++++++++++++++++++++++ 16 files changed, 8082 insertions(+), 83 deletions(-) create mode 100644 src/AssemblyGeneratorX86.cpp create mode 100644 src/AssemblyGeneratorX86.hpp create mode 100644 src/CompiledVirtualMachine.cpp create mode 100644 src/CompiledVirtualMachine.hpp create mode 100644 src/Instruction.cpp create mode 100644 src/Instruction.hpp create mode 100644 src/executeProgram-linux.cpp create mode 100644 src/executeProgram-win64.asm create mode 100644 src/program.inc diff --git a/makefile b/makefile index 2278a91..354d706 100644 --- a/makefile +++ b/makefile @@ -11,7 +11,7 @@ SRCDIR=src OBJDIR=obj LDFLAGS= TOBJS=$(addprefix $(OBJDIR)/,instructionsPortable.o TestAluFpu.o) -ROBJS=$(addprefix $(OBJDIR)/,argon2_core.o argon2_ref.o blake2b.o dataset.o instructionsPortable.o InterpretedVirtualMachine.o main.o Program.o softAes.o VirtualMachine.o) +ROBJS=$(addprefix $(OBJDIR)/,argon2_core.o argon2_ref.o AssemblyGeneratorX86.o blake2b.o CompiledVirtualMachine.o dataset.o executeProgram-linux.o instructionsPortable.o Instruction.o InterpretedVirtualMachine.o main.o Program.o softAes.o VirtualMachine.o) SRC1=$(addprefix $(SRCDIR)/,TestAluFpu.cpp instructions.hpp Pcg32.hpp) all: release test @@ -43,14 +43,26 @@ $(OBJDIR)/argon2_core.o: $(addprefix $(SRCDIR)/,argon2_core.c argon2_core.h blak $(OBJDIR)/argon2_ref.o: $(addprefix $(SRCDIR)/,argon2_ref.c argon2.h argon2_core.h blake2/blake2.h blake2/blake2-impl.h blake2/blamka-round-ref.h) | $(OBJDIR) $(CC) $(CCFLAGS) -c $(SRCDIR)/argon2_ref.c -o $@ +$(OBJDIR)/AssemblyGeneratorX86.o: $(addprefix $(SRCDIR)/,AssemblyGeneratorX86.cpp AssemblyGeneratorX86.hpp Instruction.hpp Pcg32.hpp common.hpp instructions.hpp) | $(OBJDIR) + $(CXX) $(CXXFLAGS) -c $(SRCDIR)/AssemblyGeneratorX86.cpp -o $@ + $(OBJDIR)/blake2b.o: $(addprefix $(SRCDIR)/blake2/,blake2b.c blake2.h blake2-impl.h) | $(OBJDIR) $(CC) $(CCFLAGS) -c $(SRCDIR)/blake2/blake2b.c -o $@ + +$(OBJDIR)/CompiledVirtualMachine.o: $(addprefix $(SRCDIR)/,CompiledVirtualMachine.cpp CompiledVirtualMachine.hpp Pcg32.hpp common.hpp instructions.hpp) | $(OBJDIR) + $(CXX) $(CXXFLAGS) -c $(SRCDIR)/CompiledVirtualMachine.cpp -o $@ $(OBJDIR)/dataset.o: $(addprefix $(SRCDIR)/,dataset.cpp common.hpp Pcg32.hpp argon2_core.h) | $(OBJDIR) $(CXX) $(CXXFLAGS) -c $(SRCDIR)/dataset.cpp -o $@ - + +$(OBJDIR)/executeProgram-linux.o: $(addprefix $(SRCDIR)/,executeProgram-linux.cpp common.hpp) | $(OBJDIR) + $(CXX) $(CXXFLAGS) -c $(SRCDIR)/executeProgram-linux.cpp -o $@ + $(OBJDIR)/instructionsPortable.o: $(addprefix $(SRCDIR)/,instructionsPortable.cpp instructions.hpp intrinPortable.h) | $(OBJDIR) $(CXX) $(CXXFLAGS) -c $(SRCDIR)/instructionsPortable.cpp -o $@ + +$(OBJDIR)/Instruction.o: $(addprefix $(SRCDIR)/,Instruction.cpp Instruction.hpp) | $(OBJDIR) + $(CXX) $(CXXFLAGS) -c $(SRCDIR)/Instruction.cpp -o $@ $(OBJDIR)/InterpretedVirtualMachine.o: $(addprefix $(SRCDIR)/,InterpretedVirtualMachine.cpp InterpretedVirtualMachine.hpp Pcg32.hpp instructions.hpp) | $(OBJDIR) $(CXX) $(CXXFLAGS) -c $(SRCDIR)/InterpretedVirtualMachine.cpp -o $@ diff --git a/src/AssemblyGeneratorX86.cpp b/src/AssemblyGeneratorX86.cpp new file mode 100644 index 0000000..092cd9f --- /dev/null +++ b/src/AssemblyGeneratorX86.cpp @@ -0,0 +1,523 @@ +/* +Copyright (c) 2018 tevador + +This file is part of RandomX. + +RandomX is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +RandomX is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with RandomX. If not, see. +*/ + +#include "AssemblyGeneratorX86.hpp" +#include "Pcg32.hpp" +#include "common.hpp" +#include "instructions.hpp" + +namespace RandomX { + + static const char* regR[8] = { "rbx", "r9", "r10", "r11", "r12", "r13", "r14", "r15" }; + static const char* regR32[8] = { "ebx", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d" }; + static const char* regF[8] = { "xmm8", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7" }; + + void AssemblyGeneratorX86::generateProgram(const void* seed) { + asmCode.str(std::string()); //clear + Pcg32 gen(seed); + for (unsigned i = 0; i < sizeof(RegisterFile) / sizeof(Pcg32::result_type); ++i) { + gen(); + } + Instruction instr; + for (unsigned i = 0; i < ProgramLength; ++i) { + for (unsigned j = 0; j < sizeof(instr) / sizeof(Pcg32::result_type); ++j) { + *(((uint32_t*)&instr) + j) = gen(); + } + generateCode(instr, i); + asmCode << std::endl; + } + if(ProgramLength > 0) + asmCode << "\tjmp rx_i_0" << std::endl; + } + + void AssemblyGeneratorX86::generateCode(Instruction& instr, int i) { + asmCode << "rx_i_" << i << ": ;" << instr.getName() << std::endl; + asmCode << "\tdec edi" << std::endl; + asmCode << "\tjs rx_finish" << std::endl; + auto generator = engine[instr.opcode]; + (this->*generator)(instr, i); + } + + void AssemblyGeneratorX86::gena(Instruction& instr) { + asmCode << "\txor " << regR[instr.rega % RegistersCount] << ", 0" << std::hex << instr.addr0 << "h" << std::dec << std::endl; + switch (instr.loca & 7) + { + case 0: + case 1: + case 2: + case 3: + asmCode << "\tmov ecx, " << regR32[instr.rega % RegistersCount] << std::endl; + asmCode << "\tcall rx_read_dataset" << std::endl; + return; + + case 4: + asmCode << "\tmov eax, " << regR32[instr.rega % RegistersCount] << std::endl; + asmCode << "\tand eax, " << (ScratchpadL2 - 1) << std::endl; + asmCode << "\tmov rax, qword ptr [rsi + rax * 8]" << std::endl; + return; + + default: + asmCode << "\tmov eax, " << regR32[instr.rega % RegistersCount] << std::endl; + asmCode << "\tand eax, " << (ScratchpadL1 - 1) << std::endl; + asmCode << "\tmov rax, qword ptr [rsi + rax * 8]" << std::endl; + return; + } + } + + void AssemblyGeneratorX86::genbr0(Instruction& instr, const char* instrx86) { + switch (instr.locb & 7) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + asmCode << "\tmov rcx, " << regR[instr.regb % RegistersCount] << std::endl; + asmCode << "\t" << instrx86 << " rax, cl" << std::endl; + return; + default: + asmCode << "\t" << instrx86 << " rax, " << (instr.imm0 & 63) << std::endl;; + return; + } + } + + void AssemblyGeneratorX86::genbr1(Instruction& instr) { + switch (instr.locb & 7) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + asmCode << regR[instr.regb % RegistersCount] << std::endl; + return; + default: + asmCode << instr.imm1 << std::endl;; + return; + } + } + + void AssemblyGeneratorX86::genbr132(Instruction& instr) { + switch (instr.locb & 7) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + asmCode << regR32[instr.regb % RegistersCount] << std::endl; + return; + default: + asmCode << instr.imm1 << std::endl;; + return; + } + } + + void AssemblyGeneratorX86::genbf(Instruction& instr, const char* instrx86) { + asmCode << "\tand rax, -2048" << std::endl; + asmCode << "\tcvtsi2sd xmm0, rax" << std::endl; + switch (instr.locb & 7) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + asmCode << "\t" << instrx86 << " xmm0, " << regF[instr.regb % RegistersCount] << std::endl; + return; + default: + convertible_t bimm; + bimm.f64 = (double)instr.imm1; + asmCode << "\tmov rax, " << bimm.i64 << std::endl; + asmCode << "\tmovd xmm9, rax" << std::endl; + asmCode << "\t" << instrx86 << " xmm0, xmm9" << std::endl; + return; + } + } + + void AssemblyGeneratorX86::gencr(Instruction& instr) { + switch (instr.locc & 7) + { + case 0: + asmCode << "\tmov rcx, rax" << std::endl; + asmCode << "\tmov eax, " << regR32[instr.regc % RegistersCount] << std::endl; + asmCode << "\txor eax, 0" << std::hex << instr.addr1 << "h" << std::dec << std::endl; + asmCode << "\tand eax, " << (ScratchpadL2 - 1) << std::endl; + asmCode << "\tmov qword ptr [rsi + rax * 8], rcx" << std::endl; + return; + + case 1: + case 2: + case 3: + asmCode << "\tmov rcx, rax" << std::endl; + asmCode << "\tmov eax, " << regR32[instr.regc % RegistersCount] << std::endl; + asmCode << "\txor eax, 0" << std::hex << instr.addr1 << "h" << std::dec << std::endl; + asmCode << "\tand eax, " << (ScratchpadL1 - 1) << std::endl; + asmCode << "\tmov qword ptr [rsi + rax * 8], rcx" << std::endl; + return; + + default: + asmCode << "\tmov " << regR[instr.regc % RegistersCount] << ", rax" << std::endl; + } + } + + void AssemblyGeneratorX86::gencf(Instruction& instr) { + switch (instr.locc & 7) + { + case 0: + asmCode << "\tmov eax, " << regR32[instr.regc % RegistersCount] << std::endl; + asmCode << "\txor eax, 0" << std::hex << instr.addr1 << "h" << std::dec << std::endl; + asmCode << "\tand eax, " << (ScratchpadL2 - 1) << std::endl; + asmCode << "\tmovd qword ptr [rsi + rax * 8], xmm0" << std::endl; + return; + + case 1: + case 2: + case 3: + asmCode << "\tmov eax, " << regR32[instr.regc % RegistersCount] << std::endl; + asmCode << "\txor eax, 0" << std::hex << instr.addr1 << "h" << std::dec << std::endl; + asmCode << "\tand eax, " << (ScratchpadL1 - 1) << std::endl; + asmCode << "\tmovd qword ptr [rsi + rax * 8], xmm0" << std::endl; + return; + + default: + asmCode << "\tmovsd " << regF[instr.regc % RegistersCount] << ", xmm0" << std::endl; + } + } + + static inline int wrapi(int i) { + return i % RandomX::ProgramLength; + } + + void AssemblyGeneratorX86::h_ADD_64(Instruction& instr, int i) { + gena(instr); + asmCode << "\tadd rax, "; + genbr1(instr); + gencr(instr); + } + + void AssemblyGeneratorX86::h_ADD_32(Instruction& instr, int i) { + gena(instr); + asmCode << "\tadd eax, "; + genbr132(instr); + gencr(instr); + } + + void AssemblyGeneratorX86::h_SUB_64(Instruction& instr, int i) { + gena(instr); + asmCode << "\tsub rax, "; + genbr1(instr); + gencr(instr); + } + + void AssemblyGeneratorX86::h_SUB_32(Instruction& instr, int i) { + gena(instr); + asmCode << "\tsub eax, "; + genbr132(instr); + gencr(instr); + } + + void AssemblyGeneratorX86::h_MUL_64(Instruction& instr, int i) { + gena(instr); + asmCode << "\timul rax, "; + if ((instr.locb & 7) >= 6) { + asmCode << "rax, "; + } + genbr1(instr); + gencr(instr); + } + + void AssemblyGeneratorX86::h_MULH_64(Instruction& instr, int i) { + gena(instr); + asmCode << "\tmov r8, rdx" << std::endl; + asmCode << "\tmov rcx, "; + genbr1(instr); + asmCode << "\tmul rcx" << std::endl; + asmCode << "\tmov rax, rdx" << std::endl; + asmCode << "\tmov rdx, r8" << std::endl; + gencr(instr); + } + + void AssemblyGeneratorX86::h_MUL_32(Instruction& instr, int i) { + gena(instr); + asmCode << "\tmov ecx, eax" << std::endl; + asmCode << "\tmov eax, "; + genbr132(instr); + asmCode << "\timul rax, rcx" << std::endl; + gencr(instr); + } + + void AssemblyGeneratorX86::h_IMUL_32(Instruction& instr, int i) { + gena(instr); + asmCode << "\tmovsxd rcx, eax" << std::endl; + if ((instr.locb & 7) >= 6) { + asmCode << "\tmov rax, " << instr.imm1 << std::endl; + } + else { + asmCode << "\tmovsxd rax, " << regR32[instr.regb % RegistersCount] << std::endl; + } + asmCode << "\timul rax, rcx" << std::endl; + gencr(instr); + } + + void AssemblyGeneratorX86::h_IMULH_64(Instruction& instr, int i) { + gena(instr); + asmCode << "\tmov r8, rdx" << std::endl; + asmCode << "\tmov rcx, "; + genbr1(instr); + asmCode << "\timul rcx" << std::endl; + asmCode << "\tmov rax, rdx" << std::endl; + asmCode << "\tmov rdx, r8" << std::endl; + gencr(instr); + } + + void AssemblyGeneratorX86::h_DIV_64(Instruction& instr, int i) { + gena(instr); + asmCode << "\tmov r8, rdx" << std::endl; + if ((instr.locb & 7) >= 6) { + if (instr.imm1 == 0) { + asmCode << "\tmov ecx, 1" << std::endl; + } + else { + asmCode << "\tmov ecx, " << instr.imm1 << std::endl; + } + } + else { + asmCode << "mov ecx, 1" << std::endl; + asmCode << "\tmov edx, " << regR32[instr.regb % RegistersCount] << std::endl; + asmCode << "\ttest edx, edx" << std::endl; + asmCode << "\tcmovne ecx, edx" << std::endl; + } + asmCode << "\txor edx, edx" << std::endl; + asmCode << "\tdiv rcx" << std::endl; + asmCode << "\tmov rdx, r8" << std::endl; + gencr(instr); + } + + void AssemblyGeneratorX86::h_IDIV_64(Instruction& instr, int i) { + gena(instr); + asmCode << "\tmov r8, rdx" << std::endl; + asmCode << "\tmov edx, "; + genbr132(instr); + asmCode << "\tcmp edx, -1" << std::endl; + asmCode << "\tjne short safe_idiv_" << i << std::endl; + asmCode << "\tmov rcx, rax" << std::endl; + asmCode << "\trol rcx, 1" << std::endl; + asmCode << "\tdec rcx" << std::endl; + asmCode << "\tjz short result_idiv_" << i << std::endl; + asmCode << "safe_idiv_" << i << ":" << std::endl; + asmCode << "\tmov ecx, 1" << std::endl; + asmCode << "\ttest edx, edx" << std::endl; + asmCode << "\tcmovne ecx, edx" << std::endl; + asmCode << "\tmovsxd rcx, ecx" << std::endl; + asmCode << "\tcqo" << std::endl; + asmCode << "\tidiv rcx" << std::endl; + asmCode << "result_idiv_" << i << ":" << std::endl; + asmCode << "\tmov rdx, r8" << std::endl; + gencr(instr); + } + + void AssemblyGeneratorX86::h_AND_64(Instruction& instr, int i) { + gena(instr); + asmCode << "\tand rax, "; + genbr1(instr); + gencr(instr); + } + + void AssemblyGeneratorX86::h_AND_32(Instruction& instr, int i) { + gena(instr); + asmCode << "\tand eax, "; + genbr132(instr); + gencr(instr); + } + + void AssemblyGeneratorX86::h_OR_64(Instruction& instr, int i) { + gena(instr); + asmCode << "\tor rax, "; + genbr1(instr); + gencr(instr); + } + + void AssemblyGeneratorX86::h_OR_32(Instruction& instr, int i) { + gena(instr); + asmCode << "\tor eax, "; + genbr132(instr); + gencr(instr); + } + + void AssemblyGeneratorX86::h_XOR_64(Instruction& instr, int i) { + gena(instr); + asmCode << "\txor rax, "; + genbr1(instr); + gencr(instr); + } + + void AssemblyGeneratorX86::h_XOR_32(Instruction& instr, int i) { + gena(instr); + asmCode << "\txor eax, "; + genbr132(instr); + gencr(instr); + } + + void AssemblyGeneratorX86::h_SHL_64(Instruction& instr, int i) { + gena(instr); + genbr0(instr, "shl"); + gencr(instr); + } + + void AssemblyGeneratorX86::h_SHR_64(Instruction& instr, int i) { + gena(instr); + genbr0(instr, "shr"); + gencr(instr); + } + + void AssemblyGeneratorX86::h_SAR_64(Instruction& instr, int i) { + gena(instr); + genbr0(instr, "sar"); + gencr(instr); + } + + void AssemblyGeneratorX86::h_ROL_64(Instruction& instr, int i) { + gena(instr); + genbr0(instr, "rol"); + gencr(instr); + } + + void AssemblyGeneratorX86::h_ROR_64(Instruction& instr, int i) { + gena(instr); + genbr0(instr, "ror"); + gencr(instr); + } + + void AssemblyGeneratorX86::h_FPADD(Instruction& instr, int i) { + gena(instr); + genbf(instr, "addsd"); + gencf(instr); + } + + void AssemblyGeneratorX86::h_FPSUB(Instruction& instr, int i) { + gena(instr); + genbf(instr, "subsd"); + gencf(instr); + } + + void AssemblyGeneratorX86::h_FPMUL(Instruction& instr, int i) { + gena(instr); + asmCode << "\tor rax, 2048" << std::endl; + genbf(instr, "mulsd"); + gencf(instr); + } + + void AssemblyGeneratorX86::h_FPDIV(Instruction& instr, int i) { + gena(instr); + asmCode << "\tor rax, 2048" << std::endl; + genbf(instr, "divsd"); + gencf(instr); + } + + void AssemblyGeneratorX86::h_FPSQRT(Instruction& instr, int i) { + gena(instr); + asmCode << "\tmov rcx, 9223372036854773760" << std::endl; + asmCode << "\tand rax, rcx" << std::endl; + asmCode << "\tcvtsi2sd xmm0, rax" << std::endl; + asmCode << "\tsqrtsd xmm0, xmm0" << std::endl; + gencf(instr); + } + + void AssemblyGeneratorX86::h_FPROUND(Instruction& instr, int i) { + gena(instr); + asmCode << "\tmov rcx, rax" << std::endl; + asmCode << "\tshl eax, 13" << std::endl; + asmCode << "\tand rcx, -2048" << std::endl; + asmCode << "\tand eax, 24576" << std::endl; + asmCode << "\tcvtsi2sd xmm0, rcx" << std::endl; + asmCode << "\tor eax, 40896" << std::endl; + asmCode << "\tmov dword ptr [rsp - 8], eax" << std::endl; + asmCode << "\tldmxcsr dword ptr [rsp - 8]" << std::endl; + gencf(instr); + } + + void AssemblyGeneratorX86::h_CALL(Instruction& instr, int i) { + gena(instr); + if ((instr.locb & 7) < 6) { + asmCode << "\tcmp " << regR32[instr.regb % RegistersCount] << ", " << instr.imm1 << std::endl; + asmCode << "\tjbe short taken_call_" << i << std::endl; + gencr(instr); + asmCode << "\tjmp rx_i_" << wrapi(i + 1) << std::endl; + asmCode << "taken_call_" << i << ":" << std::endl; + } + asmCode << "\tpush rax" << std::endl; + asmCode << "\tcall rx_i_" << wrapi(i + (instr.imm0 & 127) + 1) << std::endl; + } + + void AssemblyGeneratorX86::h_RET(Instruction& instr, int i) { + gena(instr); + asmCode << "\tcmp rsp, rbp" << std::endl; + asmCode << "\tje short not_taken_ret_" << i << std::endl; + if ((instr.locb & 7) < 6) { + asmCode << "\tcmp " << regR32[instr.regb % RegistersCount] << ", " << instr.imm1 << std::endl; + asmCode << "\tja short not_taken_ret_" << i << std::endl; + } + asmCode << "\txor rax, qword ptr [rsp + 8]" << std::endl; + gencr(instr); + asmCode << "\tret 8" << std::endl; + asmCode << "not_taken_ret_" << i << ":" << std::endl; + gencr(instr); + } + +#include "instructionWeights.hpp" +#define INST_HANDLE(x) REPN(&AssemblyGeneratorX86::h_##x, WT(x)) + + InstructionGenerator AssemblyGeneratorX86::engine[256] = { + INST_HANDLE(ADD_64) + INST_HANDLE(ADD_32) + INST_HANDLE(SUB_64) + INST_HANDLE(SUB_32) + INST_HANDLE(MUL_64) + INST_HANDLE(MULH_64) + INST_HANDLE(MUL_32) + INST_HANDLE(IMUL_32) + INST_HANDLE(IMULH_64) + INST_HANDLE(DIV_64) + INST_HANDLE(IDIV_64) + INST_HANDLE(AND_64) + INST_HANDLE(AND_32) + INST_HANDLE(OR_64) + INST_HANDLE(OR_32) + INST_HANDLE(XOR_64) + INST_HANDLE(XOR_32) + INST_HANDLE(SHL_64) + INST_HANDLE(SHR_64) + INST_HANDLE(SAR_64) + INST_HANDLE(ROL_64) + INST_HANDLE(ROR_64) + INST_HANDLE(FPADD) + INST_HANDLE(FPSUB) + INST_HANDLE(FPMUL) + INST_HANDLE(FPDIV) + INST_HANDLE(FPSQRT) + INST_HANDLE(FPROUND) + INST_HANDLE(CALL) + INST_HANDLE(RET) + }; +} \ No newline at end of file diff --git a/src/AssemblyGeneratorX86.hpp b/src/AssemblyGeneratorX86.hpp new file mode 100644 index 0000000..e61fa26 --- /dev/null +++ b/src/AssemblyGeneratorX86.hpp @@ -0,0 +1,82 @@ +/* +Copyright (c) 2018 tevador + +This file is part of RandomX. + +RandomX is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +RandomX is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with RandomX. If not, see. +*/ + +#pragma once + +#include "Instruction.hpp" +#include + +namespace RandomX { + + class AssemblyGeneratorX86; + + typedef void(AssemblyGeneratorX86::*InstructionGenerator)(Instruction&, int); + + class AssemblyGeneratorX86 { + public: + void generateProgram(const void* seed); + void printCode(std::ostream& os) { + os << asmCode.rdbuf(); + } + private: + static InstructionGenerator engine[256]; + std::stringstream asmCode; + + void gena(Instruction&); + void genbr0(Instruction&, const char*); + void genbr1(Instruction&); + void genbr132(Instruction&); + void genbf(Instruction&, const char*); + void gencr(Instruction&); + void gencf(Instruction&); + + void generateCode(Instruction&, int); + + void h_ADD_64(Instruction&, int); + void h_ADD_32(Instruction&, int); + void h_SUB_64(Instruction&, int); + void h_SUB_32(Instruction&, int); + void h_MUL_64(Instruction&, int); + void h_MULH_64(Instruction&, int); + void h_MUL_32(Instruction&, int); + void h_IMUL_32(Instruction&, int); + void h_IMULH_64(Instruction&, int); + void h_DIV_64(Instruction&, int); + void h_IDIV_64(Instruction&, int); + void h_AND_64(Instruction&, int); + void h_AND_32(Instruction&, int); + void h_OR_64(Instruction&, int); + void h_OR_32(Instruction&, int); + void h_XOR_64(Instruction&, int); + void h_XOR_32(Instruction&, int); + void h_SHL_64(Instruction&, int); + void h_SHR_64(Instruction&, int); + void h_SAR_64(Instruction&, int); + void h_ROL_64(Instruction&, int); + void h_ROR_64(Instruction&, int); + void h_FPADD(Instruction&, int); + void h_FPSUB(Instruction&, int); + void h_FPMUL(Instruction&, int); + void h_FPDIV(Instruction&, int); + void h_FPSQRT(Instruction&, int); + void h_FPROUND(Instruction&, int); + void h_CALL(Instruction&, int); + void h_RET(Instruction&, int); + }; +} \ No newline at end of file diff --git a/src/CompiledVirtualMachine.cpp b/src/CompiledVirtualMachine.cpp new file mode 100644 index 0000000..af9af7f --- /dev/null +++ b/src/CompiledVirtualMachine.cpp @@ -0,0 +1,47 @@ +/* +Copyright (c) 2018 tevador + +This file is part of RandomX. + +RandomX is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +RandomX is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with RandomX. If not, see. +*/ + +#include "CompiledVirtualMachine.hpp" +#include "Pcg32.hpp" +#include "common.hpp" +#include "instructions.hpp" + +namespace RandomX { + + void CompiledVirtualMachine::initializeProgram(const void* seed) { + Pcg32 gen(seed); + for (unsigned i = 0; i < sizeof(reg) / sizeof(Pcg32::result_type); ++i) { + *(((uint32_t*)®) + i) = gen(); + } + FPINIT(); + for (int i = 0; i < 8; ++i) { + reg.f[i].f64 = (double)reg.f[i].i64; + } + for (unsigned i = 0; i < ProgramLength; ++i) { + gen(); gen(); gen(); gen(); + } + mem.ma = (gen() ^ *(((uint32_t*)seed) + 4)) & ~7; + mem.mx = *(((uint32_t*)seed) + 5); + } + + void CompiledVirtualMachine::execute() { + FPINIT(); + executeProgram(reg, mem, readDataset, scratchpad); + } +} \ No newline at end of file diff --git a/src/CompiledVirtualMachine.hpp b/src/CompiledVirtualMachine.hpp new file mode 100644 index 0000000..e2acc50 --- /dev/null +++ b/src/CompiledVirtualMachine.hpp @@ -0,0 +1,34 @@ +/* +Copyright (c) 2018 tevador + +This file is part of RandomX. + +RandomX is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +RandomX is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with RandomX. If not, see. +*/ + +#pragma once + +#include "VirtualMachine.hpp" +#include "Program.hpp" +#include + +namespace RandomX { + + class CompiledVirtualMachine : public VirtualMachine { + public: + CompiledVirtualMachine(bool softAes) : VirtualMachine(softAes) {} + virtual void initializeProgram(const void* seed) override; + virtual void execute() override; + }; +} \ No newline at end of file diff --git a/src/Instruction.cpp b/src/Instruction.cpp new file mode 100644 index 0000000..5aec3cd --- /dev/null +++ b/src/Instruction.cpp @@ -0,0 +1,70 @@ +/* +Copyright (c) 2018 tevador + +This file is part of RandomX. + +RandomX is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +RandomX is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with RandomX. If not, see. +*/ + +#include "Instruction.hpp" + +namespace RandomX { + + void Instruction::print(std::ostream& os) const { + os << " A: loc = " << std::dec << (loca & 7) << ", reg: " << (rega & 7) << std::endl; + os << " B: loc = " << (locb & 7) << ", reg: " << (regb & 7) << std::endl; + os << " C: loc = " << (locc & 7) << ", reg: " << (regc & 7) << std::endl; + os << " addr0 = " << std::hex << addr0 << std::endl; + os << " addr1 = " << addr1 << std::endl; + os << " imm0 = " << std::dec << (int)imm0 << std::endl; + os << " imm1 = " << imm1 << std::endl; + } + +#include "instructionWeights.hpp" +#define INST_NAME(x) REPN(#x, WT(x)) + + const char* Instruction::names[256] = { + INST_NAME(ADD_64) + INST_NAME(ADD_32) + INST_NAME(SUB_64) + INST_NAME(SUB_32) + INST_NAME(MUL_64) + INST_NAME(MULH_64) + INST_NAME(MUL_32) + INST_NAME(IMUL_32) + INST_NAME(IMULH_64) + INST_NAME(DIV_64) + INST_NAME(IDIV_64) + INST_NAME(AND_64) + INST_NAME(AND_32) + INST_NAME(OR_64) + INST_NAME(OR_32) + INST_NAME(XOR_64) + INST_NAME(XOR_32) + INST_NAME(SHL_64) + INST_NAME(SHR_64) + INST_NAME(SAR_64) + INST_NAME(ROL_64) + INST_NAME(ROR_64) + INST_NAME(FPADD) + INST_NAME(FPSUB) + INST_NAME(FPMUL) + INST_NAME(FPDIV) + INST_NAME(FPSQRT) + INST_NAME(FPROUND) + INST_NAME(CALL) + INST_NAME(RET) + }; + +} \ No newline at end of file diff --git a/src/Instruction.hpp b/src/Instruction.hpp new file mode 100644 index 0000000..36983cf --- /dev/null +++ b/src/Instruction.hpp @@ -0,0 +1,56 @@ +/* +Copyright (c) 2018 tevador + +This file is part of RandomX. + +RandomX is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +RandomX is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with RandomX. If not, see. +*/ + +#pragma once + +#include +#include + +namespace RandomX { + + class Instruction { + public: + uint8_t opcode; + uint8_t loca; + uint8_t rega; + uint8_t locb; + uint8_t regb; + uint8_t locc; + uint8_t regc; + uint8_t imm0; + uint32_t addr0; + union { + uint32_t addr1; + int32_t imm1; + }; + const char* getName() const { + return names[opcode]; + } + friend std::ostream& operator<<(std::ostream& os, const Instruction& i) { + i.print(os); + return os; + } + private: + void print(std::ostream&) const; + static const char* names[256]; + }; + + static_assert(sizeof(Instruction) == 16, "Invalid alignment of struct Instruction"); + +} \ No newline at end of file diff --git a/src/InterpretedVirtualMachine.cpp b/src/InterpretedVirtualMachine.cpp index 3be9d7f..15a75a9 100644 --- a/src/InterpretedVirtualMachine.cpp +++ b/src/InterpretedVirtualMachine.cpp @@ -55,7 +55,7 @@ namespace RandomX { void InterpretedVirtualMachine::execute() { while (ic > 0) { auto& inst = p(pc); - if(trace) std::cout << p.getName(inst) << " (" << std::dec << pc << ")" << std::endl; + if(trace) std::cout << inst.getName() << " (" << std::dec << pc << ")" << std::endl; pc = (pc + 1) % ProgramLength; auto handler = engine[inst.opcode]; (this->*handler)(inst); diff --git a/src/Program.cpp b/src/Program.cpp index ae46de7..6e94fca 100644 --- a/src/Program.cpp +++ b/src/Program.cpp @@ -30,48 +30,8 @@ namespace RandomX { void Program::print(std::ostream& os) const { for (int i = 0; i < RandomX::ProgramLength; ++i) { auto instr = programBuffer[i]; - os << std::dec << instrNames[instr.opcode] << " (" << i << "):" << std::endl; - os << " A: loc = " << (instr.loca & 7) << ", reg: " << (instr.rega & 7) << std::endl; - os << " B: loc = " << (instr.locb & 7) << ", reg: " << (instr.regb & 7) << std::endl; - os << " C: loc = " << (instr.locc & 7) << ", reg: " << (instr.regc & 7) << std::endl; - os << " imm0 = " << (int)instr.imm0 << std::endl; - os << " imm1 = " << std::hex << instr.imm1 << std::endl; + os << std::dec << instr.getName() << " (" << i << "):" << std::endl; + os << instr; } } - -#include "instructionWeights.hpp" -#define INST_NAME(x) REPN(#x, WT(x)) - - const char* Program::instrNames[256] = { - INST_NAME(ADD_64) - INST_NAME(ADD_32) - INST_NAME(SUB_64) - INST_NAME(SUB_32) - INST_NAME(MUL_64) - INST_NAME(MULH_64) - INST_NAME(MUL_32) - INST_NAME(IMUL_32) - INST_NAME(IMULH_64) - INST_NAME(DIV_64) - INST_NAME(IDIV_64) - INST_NAME(AND_64) - INST_NAME(AND_32) - INST_NAME(OR_64) - INST_NAME(OR_32) - INST_NAME(XOR_64) - INST_NAME(XOR_32) - INST_NAME(SHL_64) - INST_NAME(SHR_64) - INST_NAME(SAR_64) - INST_NAME(ROL_64) - INST_NAME(ROR_64) - INST_NAME(FPADD) - INST_NAME(FPSUB) - INST_NAME(FPMUL) - INST_NAME(FPDIV) - INST_NAME(FPSQRT) - INST_NAME(FPROUND) - INST_NAME(CALL) - INST_NAME(RET) - }; } diff --git a/src/Program.hpp b/src/Program.hpp index 09641ee..35b45d2 100644 --- a/src/Program.hpp +++ b/src/Program.hpp @@ -22,37 +22,17 @@ along with RandomX. If not, see. #include #include #include "common.hpp" +#include "Instruction.hpp" class Pcg32; namespace RandomX { - struct Instruction { - uint8_t opcode; - uint8_t loca; - uint8_t rega; - uint8_t locb; - uint8_t regb; - uint8_t locc; - uint8_t regc; - uint8_t imm0; - uint32_t addr0; - union { - uint32_t addr1; - int32_t imm1; - }; - }; - - static_assert(sizeof(Instruction) == 16, "Invalid alignment of struct Instruction"); - class Program { public: Instruction& operator()(uint64_t pc) { return programBuffer[pc]; } - const char* getName(Instruction& instr) { - return instrNames[instr.opcode]; - } void initialize(Pcg32& gen); friend std::ostream& operator<<(std::ostream& os, const Program& p) { p.print(os); @@ -60,7 +40,6 @@ namespace RandomX { } private: void print(std::ostream&) const; - static const char* instrNames[256]; Instruction programBuffer[ProgramLength]; }; } diff --git a/src/VirtualMachine.hpp b/src/VirtualMachine.hpp index 79e9f58..826ca2f 100644 --- a/src/VirtualMachine.hpp +++ b/src/VirtualMachine.hpp @@ -23,8 +23,6 @@ along with RandomX. If not, see. namespace RandomX { - typedef convertible_t(*DatasetReadFunc)(addr_t, MemoryRegisters&); - class VirtualMachine { public: VirtualMachine(bool softAes); diff --git a/src/common.hpp b/src/common.hpp index 774a100..c980219 100644 --- a/src/common.hpp +++ b/src/common.hpp @@ -104,7 +104,9 @@ namespace RandomX { static_assert(sizeof(RegisterFile) == 2 * RegistersCount * sizeof(convertible_t), "Invalid alignment of struct RandomX::RegisterFile"); + typedef convertible_t(*DatasetReadFunc)(addr_t, MemoryRegisters&); + extern "C" { - void executeProgram(RegisterFile& registerFile, convertible_t& scratchpad, MemoryRegisters& memory); + void executeProgram(RegisterFile& registerFile, MemoryRegisters& memory, DatasetReadFunc readFunc, convertible_t* scratchpad); } } \ No newline at end of file diff --git a/src/executeProgram-linux.cpp b/src/executeProgram-linux.cpp new file mode 100644 index 0000000..91cbab9 --- /dev/null +++ b/src/executeProgram-linux.cpp @@ -0,0 +1,10 @@ +#include "common.hpp" +#include + +namespace RandomX { + extern "C" { + void executeProgram(RegisterFile& registerFile, MemoryRegisters& memory, DatasetReadFunc readFunc, convertible_t* scratchpad) { + throw std::runtime_error("not implemented"); + } + } +} \ No newline at end of file diff --git a/src/executeProgram-win64.asm b/src/executeProgram-win64.asm new file mode 100644 index 0000000..9828f5c --- /dev/null +++ b/src/executeProgram-win64.asm @@ -0,0 +1,169 @@ +; Copyright (c) 2018 tevador +; +; This file is part of RandomX. +; +; RandomX is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation, either version 3 of the License, or +; (at your option) any later version. +; +; RandomX is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with RandomX. If not, see. + +PUBLIC executeProgram + +.code + +executeProgram PROC + ; REGISTER ALLOCATION: + ; rax -> temporary + ; rbx -> "r0" + ; rcx -> temporary + ; rdx -> MemoryRegisters& memory + ; rsi -> convertible_t& scratchpad + ; rdi -> "ic" (instruction counter) + ; rbp -> beginning of VM stack + ; rsp -> end of VM stack + ; r8 -> temporary + ; r9 -> "r1" + ; r10 -> "r2" + ; r11 -> "r3" + ; r12 -> "r4" + ; r13 -> "r5" + ; r14 -> "r6" + ; r15 -> "r7" + ; xmm0 -> temporary + ; xmm1 -> "f1" + ; xmm2 -> "f2" + ; xmm3 -> "f3" + ; xmm4 -> "f4" + ; xmm5 -> "f5" + ; xmm6 -> "f6" + ; xmm7 -> "f7" + ; xmm8 -> "f0" + ; xmm9 -> temporary + + ; STACK STRUCTURE: + ; | + ; | + ; | saved registers + ; | + ; v + ; [rbp+8] RegisterFile& registerFile + ; [rbp] DatasetReadFunc readFunc + ; | + ; | + ; | VM stack + ; | + ; v + ; [rsp] last element of VM stack + + ; store callee-saved registers + push rbx + push rbp + push rdi + push rsi + push r12 + push r13 + push r14 + push r15 + sub rsp, 64 + movdqu xmmword ptr [rsp+48], xmm6 + movdqu xmmword ptr [rsp+32], xmm7 + movdqu xmmword ptr [rsp+16], xmm8 + movdqu xmmword ptr [rsp+0], xmm9 + + ; function arguments + push rcx ; RegisterFile& registerFile + ; mov rdx, rdx ; MemoryRegisters& memory + push r8 ; DatasetReadFunc readFunc + mov rsi, r9 ; convertible_t& scratchpad + + mov rbp, rsp ; beginning of VM stack + mov rdi, 1048576 ; number of VM instructions to execute + + ; load VM register values + mov rbx, qword ptr [rcx+0] + mov r9, qword ptr [rcx+8] + mov r10, qword ptr [rcx+16] + mov r11, qword ptr [rcx+24] + mov r12, qword ptr [rcx+32] + mov r13, qword ptr [rcx+40] + mov r14, qword ptr [rcx+48] + mov r15, qword ptr [rcx+56] + movd xmm8, qword ptr [rcx+64] + movd xmm1, qword ptr [rcx+72] + movd xmm2, qword ptr [rcx+80] + movd xmm3, qword ptr [rcx+88] + movd xmm4, qword ptr [rcx+96] + movd xmm5, qword ptr [rcx+104] + movd xmm6, qword ptr [rcx+112] + movd xmm7, qword ptr [rcx+120] + + ; program body + + include program.inc + +rx_finish: + ; unroll the stack + mov rsp, rbp + add rsp, 16 + + ; save VM register values + mov rcx, qword ptr [rbp+8] + mov qword ptr [rcx+0], rbx + mov qword ptr [rcx+8], r9 + mov qword ptr [rcx+16], r10 + mov qword ptr [rcx+24], r11 + mov qword ptr [rcx+32], r12 + mov qword ptr [rcx+40], r13 + mov qword ptr [rcx+48], r14 + mov qword ptr [rcx+56], r15 + movd qword ptr [rcx+64], xmm8 + movd qword ptr [rcx+72], xmm1 + movd qword ptr [rcx+80], xmm2 + movd qword ptr [rcx+88], xmm3 + movd qword ptr [rcx+96], xmm4 + movd qword ptr [rcx+104], xmm5 + movd qword ptr [rcx+112], xmm6 + movd qword ptr [rcx+120], xmm7 + + ; load callee-saved registers + movdqu xmm9, xmmword ptr [rsp+0] + movdqu xmm8, xmmword ptr [rsp+16] + movdqu xmm7, xmmword ptr [rsp+32] + movdqu xmm6, xmmword ptr [rsp+48] + add rsp, 64 + pop r15 + pop r14 + pop r13 + pop r12 + pop rsi + pop rdi + pop rbp + pop rbx + + ; return + ret 0 + +rx_read_dataset: + push rdx + push r9 + push r10 + push r11 + sub rsp, 32 + call qword ptr [rbp] + add rsp, 32 + pop r11 + pop r10 + pop r9 + pop rdx + ret 0 +executeProgram ENDP + +END diff --git a/src/main.cpp b/src/main.cpp index a7cf4fa..0637176 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,6 +18,8 @@ along with RandomX. If not, see. */ //#define TRACE #include "InterpretedVirtualMachine.hpp" +#include "CompiledVirtualMachine.hpp" +#include "AssemblyGeneratorX86.hpp" #include "Stopwatch.hpp" #include "blake2/blake2.h" #include @@ -27,6 +29,7 @@ along with RandomX. If not, see. #include #include "Program.hpp" #include +#include "instructions.hpp" const uint8_t seed[32] = { 191, 182, 222, 175, 249, 89, 134, 104, 241, 68, 191, 62, 162, 166, 61, 64, 123, 191, 227, 193, 118, 60, 188, 53, 223, 133, 175, 24, 123, 230, 55, 74 }; @@ -73,16 +76,14 @@ std::ostream& operator<<(std::ostream& os, const RandomX::RegisterFile& rf) { } int main(int argc, char** argv) { - bool softAes, lightClient; + bool softAes, lightClient, genAsm, compiled; int programCount; readOption("--softAes", argc, argv, softAes); readOption("--lightClient", argc, argv, lightClient); + readOption("--genAsm", argc, argv, genAsm); + readOption("--compiled", argc, argv, compiled); readInt(argc, argv, programCount, 1000); - if (softAes) - std::cout << "Using software AES." << std::endl; - uint8_t hash[32]; - char cumulative[32] = { 0 }; unsigned char blockTemplate[] = { 0x07, 0x07, 0xf7, 0xa4, 0xf0, 0xd6, 0x05, 0xb3, 0x03, 0x26, 0x08, 0x16, 0xba, 0x3f, 0x10, 0x90, 0x2e, 0x1a, 0x14, 0x5a, 0xc5, 0xfa, 0xd3, 0xaa, 0x3a, 0xf6, 0xea, 0x44, 0xc1, 0x18, 0x69, 0xdc, 0x4f, 0x85, 0x3f, 0x00, 0x2b, 0x2e, @@ -90,11 +91,34 @@ int main(int argc, char** argv) { 0xc3, 0x8b, 0xde, 0xd3, 0x4d, 0x2d, 0xcd, 0xee, 0xf9, 0x5c, 0xd2, 0x0c, 0xef, 0xc1, 0x2f, 0x61, 0xd5, 0x61, 0x09 }; int* nonce = (int*)(blockTemplate + 39); - RandomX::InterpretedVirtualMachine vm(softAes); + uint8_t hash[32]; + + if (genAsm) { + *nonce = programCount; + blake2b(hash, sizeof(hash), blockTemplate, sizeof(blockTemplate), nullptr, 0); + RandomX::AssemblyGeneratorX86 asmX86; + asmX86.generateProgram(hash); + asmX86.printCode(std::cout); + return 0; + } + + if (softAes) + std::cout << "Using software AES." << std::endl; + + char cumulative[32] = { 0 }; + + RandomX::VirtualMachine* vm; + + if (compiled) { + vm = new RandomX::CompiledVirtualMachine(softAes); + } + else { + vm = new RandomX::InterpretedVirtualMachine(softAes); + } try { std::cout << "Initializing..." << std::endl; Stopwatch sw(true); - vm.initializeDataset(seed, lightClient); + vm->initializeDataset(seed, lightClient); if(lightClient) std::cout << "Cache (64 MiB) initialized in " << sw.getElapsed() << " s" << std::endl; else @@ -106,16 +130,15 @@ int main(int argc, char** argv) { if (RandomX::trace) std::cout << "Nonce: " << i << " "; blake2b(hash, sizeof(hash), blockTemplate, sizeof(blockTemplate), nullptr, 0); int spIndex = hash[24] | ((hash[25] & 63) << 8); - vm.initializeScratchpad(spIndex); + vm->initializeScratchpad(spIndex); //dump((const char *)vm.getScratchpad(), RandomX::ScratchpadSize, "scratchpad-before.txt"); //return 0; - vm.initializeProgram(hash); - vm.execute(); + vm->initializeProgram(hash); + vm->execute(); /*std::string fileName("scratchpad-after-"); fileName = fileName + std::to_string(i) + ".txt"; dump((const char *)vm.getScratchpad(), RandomX::ScratchpadSize, fileName.c_str());*/ - blake2b((void*)hash, sizeof(hash), &vm.getRegisterFile(), sizeof(RandomX::RegisterFile), nullptr, 0); - //std::cout << vm.getRegisterFile(); + blake2b((void*)hash, sizeof(hash), &vm->getRegisterFile(), sizeof(RandomX::RegisterFile), nullptr, 0); if (RandomX::trace) { outputHex(std::cout, (char*)hash, sizeof(hash)); } @@ -124,9 +147,10 @@ int main(int argc, char** argv) { ((uint64_t*)cumulative)[2] ^= ((uint64_t*)hash)[2]; ((uint64_t*)cumulative)[3] ^= ((uint64_t*)hash)[3]; } + double elapsed = sw.getElapsed(); std::cout << "Cumulative output hash: "; outputHex(std::cout, cumulative, sizeof(cumulative)); - std::cout << "Performance: " << programCount / sw.getElapsed() << " programs per second" << std::endl; + std::cout << "Performance: " << programCount / elapsed << " programs per second" << std::endl; } catch (std::exception& e) { std::cout << "ERROR: " << e.what() << std::endl; diff --git a/src/program.inc b/src/program.inc new file mode 100644 index 0000000..63c99df --- /dev/null +++ b/src/program.inc @@ -0,0 +1,7033 @@ +rx_i_0: ;ADD_64 + dec edi + js rx_finish + xor r14, 087d93944h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, r10 + mov r14, rax + +rx_i_1: ;IMULH_64 + dec edi + js rx_finish + xor rbx, 0d7a5aadbh + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, -615634046 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r14d + xor eax, 0db4e2b82h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_2: ;RET + dec edi + js rx_finish + xor r10, 06ffcedb1h + mov eax, r10d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_2 + cmp ebx, 330026357 + ja short not_taken_ret_2 + xor rax, qword ptr [rsp + 8] + mov r13, rax + ret 8 +not_taken_ret_2: + mov r13, rax + +rx_i_3: ;RET + dec edi + js rx_finish + xor r9, 0a35d739ch + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_3 + cmp r14d, 2014518380 + ja short not_taken_ret_3 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r11d + xor eax, 078131c6ch + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_3: + mov rcx, rax + mov eax, r11d + xor eax, 078131c6ch + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_4: ;RET + dec edi + js rx_finish + xor r9, 0ca9788ah + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_4 + cmp r11d, 445530481 + ja short not_taken_ret_4 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r12d + xor eax, 01a8e4171h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_4: + mov rcx, rax + mov eax, r12d + xor eax, 01a8e4171h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_5: ;IMULH_64 + dec edi + js rx_finish + xor r15, 06afc2fa4h + mov ecx, r15d + call rx_read_dataset + mov r8, rdx + mov rcx, r10 + imul rcx + mov rax, rdx + mov rdx, r8 + mov r12, rax + +rx_i_6: ;CALL + dec edi + js rx_finish + xor r15, 097210f7bh + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp r11d, 1348521207 + jbe short taken_call_6 + mov rcx, rax + mov eax, r9d + xor eax, 05060ccf7h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_7 +taken_call_6: + push rax + call rx_i_50 + +rx_i_7: ;FPDIV + dec edi + js rx_finish + xor r13, 082c73195h + mov ecx, r13d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm1 + movsd xmm8, xmm0 + +rx_i_8: ;MULH_64 + dec edi + js rx_finish + xor r14, 077daefb4h + mov eax, r14d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r14 + mul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r9d + xor eax, 06ce10c20h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_9: ;MUL_32 + dec edi + js rx_finish + xor r15, 0379f9ee0h + mov ecx, r15d + call rx_read_dataset + mov ecx, eax + mov eax, r12d + imul rax, rcx + mov r12, rax + +rx_i_10: ;MUL_64 + dec edi + js rx_finish + xor rbx, 03bae7272h + mov ecx, ebx + call rx_read_dataset + imul rax, r15 + mov rcx, rax + mov eax, r9d + xor eax, 098a649d1h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_11: ;FPADD + dec edi + js rx_finish + xor r10, 0e264ed81h + mov eax, r10d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm6 + movsd xmm6, xmm0 + +rx_i_12: ;XOR_32 + dec edi + js rx_finish + xor r13, 068c1e5d2h + mov ecx, r13d + call rx_read_dataset + xor eax, 1344700093 + mov rcx, rax + mov eax, r12d + xor eax, 050267ebdh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_13: ;DIV_64 + dec edi + js rx_finish + xor r14, 085121c54h + mov eax, r14d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov ecx, 565870810 + xor edx, edx + div rcx + mov rdx, r8 + mov r10, rax + +rx_i_14: ;AND_32 + dec edi + js rx_finish + xor rbx, 052efde3eh + mov ecx, ebx + call rx_read_dataset + and eax, -727859809 + mov r13, rax + +rx_i_15: ;FPADD + dec edi + js rx_finish + xor r10, 0a9bf8aa1h + mov ecx, r10d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm5 + movsd xmm4, xmm0 + +rx_i_16: ;FPSQRT + dec edi + js rx_finish + xor r10, 0db2691ch + mov ecx, r10d + call rx_read_dataset + mov rcx, 9223372036854773760 + and rax, rcx + cvtsi2sd xmm0, rax + sqrtsd xmm0, xmm0 + movsd xmm8, xmm0 + +rx_i_17: ;FPADD + dec edi + js rx_finish + xor r12, 061c0d34dh + mov ecx, r12d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm3 + mov eax, r9d + xor eax, 04f2f223ch + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_18: ;SHL_64 + dec edi + js rx_finish + xor r10, 0e761d1beh + mov ecx, r10d + call rx_read_dataset + mov rcx, r9 + shl rax, cl + mov rcx, rax + mov eax, r10d + xor eax, 03c1a72f8h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_19: ;RET + dec edi + js rx_finish + xor r11, 074ddb688h + mov ecx, r11d + call rx_read_dataset + cmp rsp, rbp + je short not_taken_ret_19 + cmp r11d, 1183529144 + ja short not_taken_ret_19 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r14d + xor eax, 0468b38b8h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_19: + mov rcx, rax + mov eax, r14d + xor eax, 0468b38b8h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_20: ;ADD_64 + dec edi + js rx_finish + xor r14, 06be90627h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, r10 + mov rcx, rax + mov eax, r9d + xor eax, 0d7e75aeh + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_21: ;FPSUB + dec edi + js rx_finish + xor r11, 0fbc6fc35h + mov eax, r11d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm4 + movsd xmm4, xmm0 + +rx_i_22: ;FPSUB + dec edi + js rx_finish + xor r14, 0c28ca080h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm4 + movsd xmm3, xmm0 + +rx_i_23: ;FPADD + dec edi + js rx_finish + xor r13, 0ac009c30h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm8 + mov eax, r15d + xor eax, 0e92dc022h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_24: ;FPSUB + dec edi + js rx_finish + xor r13, 0ecca967dh + mov ecx, r13d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm2 + movsd xmm7, xmm0 + +rx_i_25: ;ROR_64 + dec edi + js rx_finish + xor rbx, 0977f0284h + mov ecx, ebx + call rx_read_dataset + mov rcx, r9 + ror rax, cl + mov rcx, rax + mov eax, r15d + xor eax, 0db5e0aafh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_26: ;ADD_64 + dec edi + js rx_finish + xor r13, 080bdfefah + mov ecx, r13d + call rx_read_dataset + add rax, rbx + mov rcx, rax + mov eax, r10d + xor eax, 0cfa09799h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_27: ;SUB_32 + dec edi + js rx_finish + xor r15, 0e1e0d3c4h + mov ecx, r15d + call rx_read_dataset + sub eax, r11d + mov rbx, rax + +rx_i_28: ;IMULH_64 + dec edi + js rx_finish + xor rbx, 070d3b8c7h + mov ecx, ebx + call rx_read_dataset + mov r8, rdx + mov rcx, r15 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r15d + xor eax, 099b77a68h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_29: ;FPMUL + dec edi + js rx_finish + xor r12, 01cf77a04h + mov ecx, r12d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm1 + movsd xmm6, xmm0 + +rx_i_30: ;IMUL_32 + dec edi + js rx_finish + xor r11, 0e311468ch + mov ecx, r11d + call rx_read_dataset + movsxd rcx, eax + movsxd rax, r13d + imul rax, rcx + mov rcx, rax + mov eax, r9d + xor eax, 0306ff9ech + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_31: ;FPMUL + dec edi + js rx_finish + xor r12, 01fd9911ah + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm3 + mov eax, r14d + xor eax, 04b5d4e80h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_32: ;OR_64 + dec edi + js rx_finish + xor r13, 067df757eh + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, r13 + mov r14, rax + +rx_i_33: ;ADD_64 + dec edi + js rx_finish + xor r12, 0be2e7c42h + mov ecx, r12d + call rx_read_dataset + add rax, 1944166515 + mov r14, rax + +rx_i_34: ;ROR_64 + dec edi + js rx_finish + xor r11, 084d067f7h + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + ror rax, 27 + mov rcx, rax + mov eax, r15d + xor eax, 0dd52e4f9h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_35: ;ROR_64 + dec edi + js rx_finish + xor r14, 0d352ce37h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r11 + ror rax, cl + mov r14, rax + +rx_i_36: ;OR_64 + dec edi + js rx_finish + xor r12, 0a1f248dah + mov ecx, r12d + call rx_read_dataset + or rax, -1936869641 + mov r9, rax + +rx_i_37: ;MUL_64 + dec edi + js rx_finish + xor r9, 0554720fch + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + imul rax, r15 + mov r12, rax + +rx_i_38: ;CALL + dec edi + js rx_finish + xor r13, 0665e91f1h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp r14d, -380224718 + jbe short taken_call_38 + mov r15, rax + jmp rx_i_39 +taken_call_38: + push rax + call rx_i_111 + +rx_i_39: ;CALL + dec edi + js rx_finish + xor r15, 05ef1be79h + mov eax, r15d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + cmp r9d, -2040787098 + jbe short taken_call_39 + mov rbx, rax + jmp rx_i_40 +taken_call_39: + push rax + call rx_i_61 + +rx_i_40: ;FPMUL + dec edi + js rx_finish + xor rbx, 012ec7e3ah + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm6 + mov eax, r15d + xor eax, 07a07ae2ah + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_41: ;FPSUB + dec edi + js rx_finish + xor r12, 0d0706601h + mov eax, r12d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, -4480846364313387008 + movd xmm9, rax + subsd xmm0, xmm9 + movsd xmm1, xmm0 + +rx_i_42: ;SUB_64 + dec edi + js rx_finish + xor r9, 064056913h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + sub rax, r14 + mov r10, rax + +rx_i_43: ;ADD_64 + dec edi + js rx_finish + xor r14, 02c1f1eb0h + mov ecx, r14d + call rx_read_dataset + add rax, r14 + mov r14, rax + +rx_i_44: ;CALL + dec edi + js rx_finish + xor r10, 068fd9009h + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp r12d, -1297973554 + jbe short taken_call_44 + mov rcx, rax + mov eax, r9d + xor eax, 0b2a27eceh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_45 +taken_call_44: + push rax + call rx_i_93 + +rx_i_45: ;FPROUND + dec edi + js rx_finish + xor r9, 037a30933h + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, rax + shl eax, 13 + and rcx, -2048 + and eax, 24576 + cvtsi2sd xmm0, rcx + or eax, 40896 + mov dword ptr [rsp - 8], eax + ldmxcsr dword ptr [rsp - 8] + movsd xmm1, xmm0 + +rx_i_46: ;FPADD + dec edi + js rx_finish + xor r15, 0bc1de9f6h + mov eax, r15d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4739074351570092032 + movd xmm9, rax + addsd xmm0, xmm9 + mov eax, r14d + xor eax, 029260733h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_47: ;ADD_64 + dec edi + js rx_finish + xor r12, 02b2a2eech + mov ecx, r12d + call rx_read_dataset + add rax, 1693705407 + mov rcx, rax + mov eax, r11d + xor eax, 064f3e4bfh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_48: ;ROL_64 + dec edi + js rx_finish + xor r11, 0685817abh + mov ecx, r11d + call rx_read_dataset + mov rcx, r9 + rol rax, cl + mov r15, rax + +rx_i_49: ;FPSUB + dec edi + js rx_finish + xor r12, 08cd244ebh + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, -4478227626472767488 + movd xmm9, rax + subsd xmm0, xmm9 + mov eax, r13d + xor eax, 0977132cdh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_50: ;ADD_64 + dec edi + js rx_finish + xor rbx, 06d8f4254h + mov ecx, ebx + call rx_read_dataset + add rax, r9 + mov rcx, rax + mov eax, ebx + xor eax, 0e9f58436h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_51: ;CALL + dec edi + js rx_finish + xor r12, 05ba232c6h + mov ecx, r12d + call rx_read_dataset + cmp r10d, 119251505 + jbe short taken_call_51 + mov rcx, rax + mov eax, r13d + xor eax, 071ba231h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_52 +taken_call_51: + push rax + call rx_i_134 + +rx_i_52: ;FPDIV + dec edi + js rx_finish + xor rbx, 0aaed618fh + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm3 + movsd xmm1, xmm0 + +rx_i_53: ;FPSUB + dec edi + js rx_finish + xor rbx, 0f96c6a45h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm3 + mov eax, r13d + xor eax, 0c56b47bh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_54: ;OR_64 + dec edi + js rx_finish + xor r9, 0da3e4842h + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + or rax, r10 + mov rcx, rax + mov eax, r15d + xor eax, 06ac56a2ah + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_55: ;ADD_32 + dec edi + js rx_finish + xor r10, 0302b676ah + mov ecx, r10d + call rx_read_dataset + add eax, 419241919 + mov r15, rax + +rx_i_56: ;FPDIV + dec edi + js rx_finish + xor r11, 0fa88f48bh + mov ecx, r11d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm5 + mov eax, r15d + xor eax, 0e0254dafh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_57: ;RET + dec edi + js rx_finish + xor r13, 03dff9b9eh + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_57 + cmp ebx, 2028798189 + ja short not_taken_ret_57 + xor rax, qword ptr [rsp + 8] + mov r13, rax + ret 8 +not_taken_ret_57: + mov r13, rax + +rx_i_58: ;IMULH_64 + dec edi + js rx_finish + xor r11, 060638de0h + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, 282209221 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r12d + xor eax, 010d22bc5h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_59: ;FPMUL + dec edi + js rx_finish + xor r10, 0dda983d4h + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm5 + movsd xmm3, xmm0 + +rx_i_60: ;DIV_64 + dec edi + js rx_finish + xor r14, 0f1456b8eh + mov eax, r14d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx +mov ecx, 1 + mov edx, r15d + test edx, edx + cmovne ecx, edx + xor edx, edx + div rcx + mov rdx, r8 + mov rcx, rax + mov eax, ebx + xor eax, 0fcf95491h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_61: ;SUB_64 + dec edi + js rx_finish + xor r9, 010dc4571h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + sub rax, r14 + mov rcx, rax + mov eax, r15d + xor eax, 0a426387h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_62: ;IMULH_64 + dec edi + js rx_finish + xor r14, 0bcec0ebah + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r13 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rbx, rax + +rx_i_63: ;FPADD + dec edi + js rx_finish + xor r11, 0980dd402h + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm8 + mov eax, r15d + xor eax, 04f4e2c91h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_64: ;RET + dec edi + js rx_finish + xor r15, 03de14d1eh + mov ecx, r15d + call rx_read_dataset + cmp rsp, rbp + je short not_taken_ret_64 + cmp r11d, 2075529029 + ja short not_taken_ret_64 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r11d + xor eax, 07bb60f45h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_64: + mov rcx, rax + mov eax, r11d + xor eax, 07bb60f45h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_65: ;CALL + dec edi + js rx_finish + xor r13, 05058ce64h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp r15d, 1933164545 + jbe short taken_call_65 + mov r11, rax + jmp rx_i_66 +taken_call_65: + push rax + call rx_i_123 + +rx_i_66: ;FPSUB + dec edi + js rx_finish + xor r15, 0c3089414h + mov ecx, r15d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4744280396844236800 + movd xmm9, rax + subsd xmm0, xmm9 + movsd xmm2, xmm0 + +rx_i_67: ;FPSUB + dec edi + js rx_finish + xor r9, 065cf272eh + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, -4480946344868970496 + movd xmm9, rax + subsd xmm0, xmm9 + mov eax, ebx + xor eax, 0be13d69eh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_68: ;ADD_32 + dec edi + js rx_finish + xor r13, 0ae54dfbfh + mov ecx, r13d + call rx_read_dataset + add eax, r15d + mov r9, rax + +rx_i_69: ;CALL + dec edi + js rx_finish + xor r13, 07b366ce6h + mov ecx, r13d + call rx_read_dataset + cmp ebx, 1498056607 + jbe short taken_call_69 + mov r11, rax + jmp rx_i_70 +taken_call_69: + push rax + call rx_i_132 + +rx_i_70: ;FPDIV + dec edi + js rx_finish + xor r15, 015a1b689h + mov ecx, r15d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm3 + movsd xmm1, xmm0 + +rx_i_71: ;CALL + dec edi + js rx_finish + xor r14, 088393ba0h + mov ecx, r14d + call rx_read_dataset + cmp r13d, 2031541081 + jbe short taken_call_71 + mov r9, rax + jmp rx_i_72 +taken_call_71: + push rax + call rx_i_82 + +rx_i_72: ;FPADD + dec edi + js rx_finish + xor r13, 03aa5c3a4h + mov ecx, r13d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm2 + movsd xmm4, xmm0 + +rx_i_73: ;FPADD + dec edi + js rx_finish + xor r15, 0376c9c27h + mov ecx, r15d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm5 + mov eax, ebx + xor eax, 098c2e84dh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_74: ;MUL_64 + dec edi + js rx_finish + xor rbx, 0bbbec3fah + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + imul rax, r9 + mov r13, rax + +rx_i_75: ;FPMUL + dec edi + js rx_finish + xor r14, 0e9efb350h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4743866573565984768 + movd xmm9, rax + mulsd xmm0, xmm9 + mov eax, r15d + xor eax, 056660eedh + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_76: ;CALL + dec edi + js rx_finish + xor r13, 0f4e51e28h + mov ecx, r13d + call rx_read_dataset + cmp r9d, -631091751 + jbe short taken_call_76 + mov rcx, rax + mov eax, r11d + xor eax, 0da624dd9h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_77 +taken_call_76: + push rax + call rx_i_194 + +rx_i_77: ;FPDIV + dec edi + js rx_finish + xor r12, 0c24ddbd4h + mov ecx, r12d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4742317416992735232 + movd xmm9, rax + divsd xmm0, xmm9 + mov eax, r10d + xor eax, 040624270h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_78: ;MUL_64 + dec edi + js rx_finish + xor rbx, 04c4b0c7fh + mov ecx, ebx + call rx_read_dataset + imul rax, rax, -1431647438 + mov rcx, rax + mov eax, r9d + xor eax, 0aaaacb32h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_79: ;CALL + dec edi + js rx_finish + xor r14, 03bcc02e3h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp r11d, -1160798683 + jbe short taken_call_79 + mov r13, rax + jmp rx_i_80 +taken_call_79: + push rax + call rx_i_205 + +rx_i_80: ;FPADD + dec edi + js rx_finish + xor r11, 04b0ff63eh + mov eax, r11d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm3 + movsd xmm7, xmm0 + +rx_i_81: ;RET + dec edi + js rx_finish + xor r14, 0b956b3e8h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_81 + cmp r15d, 982695034 + ja short not_taken_ret_81 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r11d + xor eax, 03a92bc7ah + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_81: + mov rcx, rax + mov eax, r11d + xor eax, 03a92bc7ah + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_82: ;MULH_64 + dec edi + js rx_finish + xor r9, 0edeca680h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, rbx + mul rcx + mov rax, rdx + mov rdx, r8 + mov r15, rax + +rx_i_83: ;CALL + dec edi + js rx_finish + xor r11, 0fbdddcb5h + mov eax, r11d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + cmp r13d, 1800043331 + jbe short taken_call_83 + mov rcx, rax + mov eax, r11d + xor eax, 06b4a7b43h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_84 +taken_call_83: + push rax + call rx_i_96 + +rx_i_84: ;ROR_64 + dec edi + js rx_finish + xor r13, 09cec97a1h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + ror rax, 4 + mov rcx, rax + mov eax, r11d + xor eax, 01a681d13h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_85: ;AND_32 + dec edi + js rx_finish + xor r15, 078228167h + mov ecx, r15d + call rx_read_dataset + and eax, r13d + mov rbx, rax + +rx_i_86: ;CALL + dec edi + js rx_finish + xor r11, 078cae1ffh + mov ecx, r11d + call rx_read_dataset + cmp r12d, -68969733 + jbe short taken_call_86 + mov rcx, rax + mov eax, r10d + xor eax, 0fbe39afbh + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_87 +taken_call_86: + push rax + call rx_i_148 + +rx_i_87: ;DIV_64 + dec edi + js rx_finish + xor r10, 0d9b6a533h + mov eax, r10d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx +mov ecx, 1 + mov edx, r10d + test edx, edx + cmovne ecx, edx + xor edx, edx + div rcx + mov rdx, r8 + mov r12, rax + +rx_i_88: ;ROL_64 + dec edi + js rx_finish + xor r15, 0e9e75336h + mov ecx, r15d + call rx_read_dataset + mov rcx, r10 + rol rax, cl + mov rcx, rax + mov eax, r13d + xor eax, 0ec5c52e6h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_89: ;MUL_64 + dec edi + js rx_finish + xor r13, 04c0d378ah + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + imul rax, rbx + mov r10, rax + +rx_i_90: ;AND_32 + dec edi + js rx_finish + xor r11, 04386e368h + mov ecx, r11d + call rx_read_dataset + and eax, ebx + mov rcx, rax + mov eax, r12d + xor eax, 0a90410e4h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_91: ;ADD_64 + dec edi + js rx_finish + xor r9, 0d75a0ecfh + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, r12 + mov rbx, rax + +rx_i_92: ;ROR_64 + dec edi + js rx_finish + xor r9, 031bb7f7ah + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r14 + ror rax, cl + mov r9, rax + +rx_i_93: ;MUL_64 + dec edi + js rx_finish + xor r9, 03b45ecebh + mov ecx, r9d + call rx_read_dataset + imul rax, rbx + mov rcx, rax + mov eax, r10d + xor eax, 0e67532afh + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_94: ;FPADD + dec edi + js rx_finish + xor r12, 0ee08e76bh + mov eax, r12d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm3 + mov eax, r14d + xor eax, 0b435cf2dh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_95: ;FPMUL + dec edi + js rx_finish + xor r9, 042e28e94h + mov ecx, r9d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm2 + mov eax, r12d + xor eax, 0b723c20bh + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_96: ;CALL + dec edi + js rx_finish + xor rbx, 0729260e1h + mov ecx, ebx + call rx_read_dataset + push rax + call rx_i_173 + +rx_i_97: ;ROR_64 + dec edi + js rx_finish + xor rbx, 0bfcebaf4h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r10 + ror rax, cl + mov r10, rax + +rx_i_98: ;CALL + dec edi + js rx_finish + xor r13, 0ea326630h + mov eax, r13d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + cmp r13d, -343122976 + jbe short taken_call_98 + mov rbx, rax + jmp rx_i_99 +taken_call_98: + push rax + call rx_i_160 + +rx_i_99: ;MUL_64 + dec edi + js rx_finish + xor r13, 0b5451a2dh + mov ecx, r13d + call rx_read_dataset + imul rax, r10 + mov rcx, rax + mov eax, r15d + xor eax, 01023aa04h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_100: ;MUL_32 + dec edi + js rx_finish + xor r11, 04f912ef8h + mov ecx, r11d + call rx_read_dataset + mov ecx, eax + mov eax, -1354397081 + imul rax, rcx + mov r11, rax + +rx_i_101: ;FPDIV + dec edi + js rx_finish + xor r15, 0acc45b3bh + mov ecx, r15d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm1 + movsd xmm5, xmm0 + +rx_i_102: ;ADD_32 + dec edi + js rx_finish + xor r14, 09900a4e8h + mov ecx, r14d + call rx_read_dataset + add eax, r15d + mov r14, rax + +rx_i_103: ;FPMUL + dec edi + js rx_finish + xor r9, 0841b2984h + mov ecx, r9d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4743144143516073984 + movd xmm9, rax + mulsd xmm0, xmm9 + movsd xmm4, xmm0 + +rx_i_104: ;ADD_64 + dec edi + js rx_finish + xor r15, 07ebea48fh + mov ecx, r15d + call rx_read_dataset + add rax, r9 + mov r14, rax + +rx_i_105: ;SUB_64 + dec edi + js rx_finish + xor r10, 0631209d3h + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + sub rax, rbx + mov r11, rax + +rx_i_106: ;FPMUL + dec edi + js rx_finish + xor r10, 0e50bf07ah + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm3 + mov eax, r15d + xor eax, 03ec98420h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_107: ;MUL_64 + dec edi + js rx_finish + xor r10, 02b7096f1h + mov eax, r10d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + imul rax, r13 + mov rcx, rax + mov eax, r15d + xor eax, 0e4dd92b6h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_108: ;IMULH_64 + dec edi + js rx_finish + xor r11, 075deaf71h + mov eax, r11d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, -1913070089 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r15d + xor eax, 08df8ddf7h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_109: ;MULH_64 + dec edi + js rx_finish + xor r13, 036a51f72h + mov ecx, r13d + call rx_read_dataset + mov r8, rdx + mov rcx, r15 + mul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r14d + xor eax, 09c8724edh + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_110: ;FPMUL + dec edi + js rx_finish + xor r11, 07b512986h + mov ecx, r11d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm3 + movsd xmm4, xmm0 + +rx_i_111: ;CALL + dec edi + js rx_finish + xor r12, 0f1d2e50h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + push rax + call rx_i_146 + +rx_i_112: ;FPMUL + dec edi + js rx_finish + xor r9, 07327ba60h + mov ecx, r9d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm5 + movsd xmm1, xmm0 + +rx_i_113: ;ROR_64 + dec edi + js rx_finish + xor r15, 0594e37deh + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r10 + ror rax, cl + mov rcx, rax + mov eax, r11d + xor eax, 094ab5a5ch + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_114: ;ROL_64 + dec edi + js rx_finish + xor r9, 04cdf5ebah + mov ecx, r9d + call rx_read_dataset + mov rcx, r9 + rol rax, cl + mov rcx, rax + mov eax, r14d + xor eax, 0ec68532fh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_115: ;CALL + dec edi + js rx_finish + xor rbx, 02e16c97ch + mov ecx, ebx + call rx_read_dataset + push rax + call rx_i_215 + +rx_i_116: ;ADD_32 + dec edi + js rx_finish + xor r12, 0d42ddbd4h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add eax, r13d + mov rcx, rax + mov eax, r14d + xor eax, 0c2d8d431h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_117: ;MULH_64 + dec edi + js rx_finish + xor r10, 07a4f8cbbh + mov ecx, r10d + call rx_read_dataset + mov r8, rdx + mov rcx, r9 + mul rcx + mov rax, rdx + mov rdx, r8 + mov r13, rax + +rx_i_118: ;IMULH_64 + dec edi + js rx_finish + xor r13, 06e83e2cdh + mov ecx, r13d + call rx_read_dataset + mov r8, rdx + mov rcx, r15 + imul rcx + mov rax, rdx + mov rdx, r8 + mov r14, rax + +rx_i_119: ;AND_64 + dec edi + js rx_finish + xor r14, 0336c980eh + mov ecx, r14d + call rx_read_dataset + and rax, r10 + mov r14, rax + +rx_i_120: ;IMULH_64 + dec edi + js rx_finish + xor r10, 0d122702eh + mov ecx, r10d + call rx_read_dataset + mov r8, rdx + mov rcx, -1850776691 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, ebx + xor eax, 091af638dh + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_121: ;IMULH_64 + dec edi + js rx_finish + xor r11, 015f2012bh + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, -1205826972 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r15d + xor eax, 0b8208a64h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_122: ;FPSUB + dec edi + js rx_finish + xor r9, 037ddf43dh + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm5 + mov eax, r14d + xor eax, 0d0b219d0h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_123: ;FPSUB + dec edi + js rx_finish + xor r9, 0bba475f3h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm3 + mov eax, r13d + xor eax, 02401488h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_124: ;FPADD + dec edi + js rx_finish + xor r12, 0e5561e3eh + mov eax, r12d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm4 + mov eax, ebx + xor eax, 04d46f867h + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_125: ;FPSUB + dec edi + js rx_finish + xor r9, 03ab8f73h + mov ecx, r9d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm5 + mov eax, ebx + xor eax, 0808a2d8bh + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_126: ;CALL + dec edi + js rx_finish + xor r10, 04e0dbd40h + mov ecx, r10d + call rx_read_dataset + cmp r11d, 2029448233 + jbe short taken_call_126 + mov rcx, rax + mov eax, r14d + xor eax, 078f6ec29h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_127 +taken_call_126: + push rax + call rx_i_195 + +rx_i_127: ;ADD_64 + dec edi + js rx_finish + xor r13, 073e9f58ah + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, r15 + mov r13, rax + +rx_i_128: ;CALL + dec edi + js rx_finish + xor r12, 0e3fa3670h + mov ecx, r12d + call rx_read_dataset + cmp r11d, 1719505436 + jbe short taken_call_128 + mov rcx, rax + mov eax, r11d + xor eax, 0667d921ch + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_129 +taken_call_128: + push rax + call rx_i_240 + +rx_i_129: ;MUL_32 + dec edi + js rx_finish + xor rbx, 0ebec27cdh + mov ecx, ebx + call rx_read_dataset + mov ecx, eax + mov eax, r14d + imul rax, rcx + mov r14, rax + +rx_i_130: ;FPMUL + dec edi + js rx_finish + xor rbx, 01feb5264h + mov eax, ebx + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm6 + mov eax, r10d + xor eax, 04b88e021h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_131: ;IMUL_32 + dec edi + js rx_finish + xor r9, 0405f500fh + mov ecx, r9d + call rx_read_dataset + movsxd rcx, eax + movsxd rax, r10d + imul rax, rcx + mov rbx, rax + +rx_i_132: ;MUL_64 + dec edi + js rx_finish + xor r13, 0459f1154h + mov ecx, r13d + call rx_read_dataset + imul rax, r9 + mov r9, rax + +rx_i_133: ;CALL + dec edi + js rx_finish + xor r9, 081918b4ch + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + push rax + call rx_i_157 + +rx_i_134: ;AND_64 + dec edi + js rx_finish + xor r9, 077c3b332h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -281794782 + mov rcx, rax + mov eax, r11d + xor eax, 0ef342722h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_135: ;RET + dec edi + js rx_finish + xor r12, 05792310bh + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_135 + cmp r15d, -537890955 + ja short not_taken_ret_135 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r15d + xor eax, 0dff06f75h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_135: + mov rcx, rax + mov eax, r15d + xor eax, 0dff06f75h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_136: ;ROR_64 + dec edi + js rx_finish + xor r10, 0ebc6e10h + mov ecx, r10d + call rx_read_dataset + mov rcx, r14 + ror rax, cl + mov rcx, rax + mov eax, r15d + xor eax, 0b0c38959h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_137: ;OR_32 + dec edi + js rx_finish + xor r14, 0822f8b60h + mov ecx, r14d + call rx_read_dataset + or eax, -1000526796 + mov rcx, rax + mov eax, r15d + xor eax, 0c45d2c34h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_138: ;ADD_64 + dec edi + js rx_finish + xor r10, 0d0f18593h + mov ecx, r10d + call rx_read_dataset + add rax, 1516102347 + mov r13, rax + +rx_i_139: ;FPMUL + dec edi + js rx_finish + xor r11, 088212ef9h + mov ecx, r11d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm3 + mov eax, ebx + xor eax, 0b29f3d2ah + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_140: ;FPDIV + dec edi + js rx_finish + xor rbx, 01ae56e03h + mov ecx, ebx + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm8 + movsd xmm5, xmm0 + +rx_i_141: ;SAR_64 + dec edi + js rx_finish + xor r11, 015a24231h + mov eax, r11d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r9 + sar rax, cl + mov r11, rax + +rx_i_142: ;RET + dec edi + js rx_finish + xor r13, 02fd380c5h + mov ecx, r13d + call rx_read_dataset + cmp rsp, rbp + je short not_taken_ret_142 + cmp r9d, -1910517416 + ja short not_taken_ret_142 + xor rax, qword ptr [rsp + 8] + mov r10, rax + ret 8 +not_taken_ret_142: + mov r10, rax + +rx_i_143: ;ADD_64 + dec edi + js rx_finish + xor r9, 093172470h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, 515364082 + mov rcx, rax + mov eax, r11d + xor eax, 01eb7d4f2h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_144: ;IMUL_32 + dec edi + js rx_finish + xor r14, 052543553h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + movsxd rcx, eax + movsxd rax, r11d + imul rax, rcx + mov r14, rax + +rx_i_145: ;FPADD + dec edi + js rx_finish + xor rbx, 02f636da1h + mov ecx, ebx + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, -4478407513863094272 + movd xmm9, rax + addsd xmm0, xmm9 + movsd xmm1, xmm0 + +rx_i_146: ;CALL + dec edi + js rx_finish + xor r11, 0b11a4f2ch + mov ecx, r11d + call rx_read_dataset + cmp r12d, 1365939282 + jbe short taken_call_146 + mov rcx, rax + mov eax, r10d + xor eax, 0516a9452h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_147 +taken_call_146: + push rax + call rx_i_260 + +rx_i_147: ;IMUL_32 + dec edi + js rx_finish + xor r15, 037f4b5d0h + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + movsxd rcx, eax + movsxd rax, r11d + imul rax, rcx + mov r9, rax + +rx_i_148: ;IMULH_64 + dec edi + js rx_finish + xor r10, 02e59e00ah + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r11 + imul rcx + mov rax, rdx + mov rdx, r8 + mov r15, rax + +rx_i_149: ;IMULH_64 + dec edi + js rx_finish + xor r13, 08d5c798h + mov ecx, r13d + call rx_read_dataset + mov r8, rdx + mov rcx, r11 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r10d + xor eax, 0dd491985h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_150: ;IMULH_64 + dec edi + js rx_finish + xor r13, 02327e6e2h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r12 + imul rcx + mov rax, rdx + mov rdx, r8 + mov r10, rax + +rx_i_151: ;MUL_64 + dec edi + js rx_finish + xor r13, 03a7df043h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + imul rax, rax, 1784404616 + mov rcx, rax + mov eax, r12d + xor eax, 06a5bda88h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_152: ;ADD_32 + dec edi + js rx_finish + xor r10, 0783e5c4eh + mov ecx, r10d + call rx_read_dataset + add eax, r14d + mov rcx, rax + mov eax, r10d + xor eax, 08c783d2ch + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_153: ;MUL_32 + dec edi + js rx_finish + xor r12, 0aa0f5b2fh + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov ecx, eax + mov eax, r14d + imul rax, rcx + mov rcx, rax + mov eax, ebx + xor eax, 09046b787h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_154: ;IMULH_64 + dec edi + js rx_finish + xor r9, 01504ca7ah + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, rbx + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r9d + xor eax, 0c854a524h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_155: ;OR_64 + dec edi + js rx_finish + xor r9, 0ea72a7cfh + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, r13 + mov rcx, rax + mov eax, r11d + xor eax, 087aed7f2h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_156: ;ROL_64 + dec edi + js rx_finish + xor r13, 0ad0e7a88h + mov ecx, r13d + call rx_read_dataset + mov rcx, r10 + rol rax, cl + mov r10, rax + +rx_i_157: ;FPMUL + dec edi + js rx_finish + xor r15, 0fd95ab87h + mov ecx, r15d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm2 + movsd xmm8, xmm0 + +rx_i_158: ;MUL_32 + dec edi + js rx_finish + xor r10, 0256697b0h + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov ecx, eax + mov eax, r13d + imul rax, rcx + mov r10, rax + +rx_i_159: ;ROL_64 + dec edi + js rx_finish + xor r11, 0d23f3b78h + mov ecx, r11d + call rx_read_dataset + mov rcx, r10 + rol rax, cl + mov rcx, rax + mov eax, r13d + xor eax, 01c5d3ebeh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_160: ;IMUL_32 + dec edi + js rx_finish + xor r10, 098917533h + mov ecx, r10d + call rx_read_dataset + movsxd rcx, eax + movsxd rax, r15d + imul rax, rcx + mov r15, rax + +rx_i_161: ;ADD_64 + dec edi + js rx_finish + xor r10, 0dfac3efch + mov ecx, r10d + call rx_read_dataset + add rax, r12 + mov r14, rax + +rx_i_162: ;ADD_64 + dec edi + js rx_finish + xor r15, 0a64de090h + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, 1233402159 + mov r10, rax + +rx_i_163: ;CALL + dec edi + js rx_finish + xor r13, 0952a3abbh + mov ecx, r13d + call rx_read_dataset + cmp r15d, -8571241 + jbe short taken_call_163 + mov rcx, rax + mov eax, r13d + xor eax, 0ff7d3697h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_164 +taken_call_163: + push rax + call rx_i_184 + +rx_i_164: ;ADD_32 + dec edi + js rx_finish + xor r14, 0b1685b90h + mov ecx, r14d + call rx_read_dataset + add eax, 1518778665 + mov rcx, rax + mov eax, r10d + xor eax, 05a86b929h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_165: ;AND_64 + dec edi + js rx_finish + xor r15, 0ea992531h + mov ecx, r15d + call rx_read_dataset + and rax, r14 + mov rbx, rax + +rx_i_166: ;SHR_64 + dec edi + js rx_finish + xor r9, 01fd57a4ah + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r10 + shr rax, cl + mov r13, rax + +rx_i_167: ;ADD_64 + dec edi + js rx_finish + xor r12, 0e3486c0ah + mov ecx, r12d + call rx_read_dataset + add rax, -2101130488 + mov rcx, rax + mov eax, r14d + xor eax, 082c34b08h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_168: ;MULH_64 + dec edi + js rx_finish + xor r12, 01f0c2737h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r9 + mul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r13d + xor eax, 09aa6da19h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_169: ;RET + dec edi + js rx_finish + xor r12, 0debb493eh + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_169 + cmp ebx, 1682991196 + ja short not_taken_ret_169 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r9d + xor eax, 06450685ch + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_169: + mov rcx, rax + mov eax, r9d + xor eax, 06450685ch + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_170: ;SAR_64 + dec edi + js rx_finish + xor r9, 0fe684081h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, rbx + sar rax, cl + mov rcx, rax + mov eax, r13d + xor eax, 0bb67f8abh + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_171: ;FPMUL + dec edi + js rx_finish + xor r11, 0d10371ch + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4739242735460941824 + movd xmm9, rax + mulsd xmm0, xmm9 + movsd xmm2, xmm0 + +rx_i_172: ;FPMUL + dec edi + js rx_finish + xor r12, 071b15effh + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm5 + mov eax, r15d + xor eax, 08d1a76f8h + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_173: ;CALL + dec edi + js rx_finish + xor r11, 072790347h + mov ecx, r11d + call rx_read_dataset + cmp r10d, -1286357107 + jbe short taken_call_173 + mov rcx, rax + mov eax, r14d + xor eax, 0b353bf8dh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_174 +taken_call_173: + push rax + call rx_i_200 + +rx_i_174: ;FPSQRT + dec edi + js rx_finish + xor rbx, 04ae8a020h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, 9223372036854773760 + and rax, rcx + cvtsi2sd xmm0, rax + sqrtsd xmm0, xmm0 + movsd xmm6, xmm0 + +rx_i_175: ;IMULH_64 + dec edi + js rx_finish + xor r15, 09901e05bh + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r12 + imul rcx + mov rax, rdx + mov rdx, r8 + mov r12, rax + +rx_i_176: ;SUB_64 + dec edi + js rx_finish + xor r13, 050e8c510h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + sub rax, r11 + mov r12, rax + +rx_i_177: ;MUL_64 + dec edi + js rx_finish + xor r14, 05422cf8fh + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + imul rax, r12 + mov rcx, rax + mov eax, r12d + xor eax, 0ad60ae9ch + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_178: ;FPDIV + dec edi + js rx_finish + xor r12, 0a025c3dbh + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm1 + movsd xmm6, xmm0 + +rx_i_179: ;SHR_64 + dec edi + js rx_finish + xor r13, 08f74c11h + mov ecx, r13d + call rx_read_dataset + mov rcx, rbx + shr rax, cl + mov rbx, rax + +rx_i_180: ;ADD_32 + dec edi + js rx_finish + xor r9, 01f2ed5f1h + mov ecx, r9d + call rx_read_dataset + add eax, r14d + mov r10, rax + +rx_i_181: ;ADD_64 + dec edi + js rx_finish + xor r10, 0d2072c79h + mov ecx, r10d + call rx_read_dataset + add rax, r10 + mov rcx, rax + mov eax, r13d + xor eax, 02f5713b7h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_182: ;RET + dec edi + js rx_finish + xor r15, 0a8e51933h + mov ecx, r15d + call rx_read_dataset + cmp rsp, rbp + je short not_taken_ret_182 + cmp r12d, -1016679819 + ja short not_taken_ret_182 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r12d + xor eax, 0c366b275h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_182: + mov rcx, rax + mov eax, r12d + xor eax, 0c366b275h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_183: ;FPADD + dec edi + js rx_finish + xor r12, 0934ad492h + mov eax, r12d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm2 + mov eax, ebx + xor eax, 01a997aebh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_184: ;OR_64 + dec edi + js rx_finish + xor r15, 01cb3ce1fh + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 1995308563 + mov rcx, rax + mov eax, r9d + xor eax, 076edfe13h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_185: ;CALL + dec edi + js rx_finish + xor r10, 023c7845fh + mov ecx, r10d + call rx_read_dataset + cmp r12d, -1612576918 + jbe short taken_call_185 + mov r10, rax + jmp rx_i_186 +taken_call_185: + push rax + call rx_i_214 + +rx_i_186: ;FPADD + dec edi + js rx_finish + xor rbx, 0f8884327h + mov ecx, ebx + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4746551310076084224 + movd xmm9, rax + addsd xmm0, xmm9 + mov eax, r14d + xor eax, 07c8d12a5h + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_187: ;ADD_64 + dec edi + js rx_finish + xor r13, 013070461h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, 137260710 + mov r10, rax + +rx_i_188: ;SHR_64 + dec edi + js rx_finish + xor r12, 04764cdf7h + mov ecx, r12d + call rx_read_dataset + shr rax, 40 + mov r12, rax + +rx_i_189: ;CALL + dec edi + js rx_finish + xor r10, 03c41026fh + mov eax, r10d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + cmp r15d, -1510284125 + jbe short taken_call_189 + mov rcx, rax + mov eax, r9d + xor eax, 0a5fae4a3h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_190 +taken_call_189: + push rax + call rx_i_249 + +rx_i_190: ;XOR_64 + dec edi + js rx_finish + xor r9, 0cded414bh + mov ecx, r9d + call rx_read_dataset + xor rax, r15 + mov rcx, rax + mov eax, r10d + xor eax, 0b55bfba0h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_191: ;FPMUL + dec edi + js rx_finish + xor r13, 05c6d64a8h + mov ecx, r13d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm6 + mov eax, r13d + xor eax, 020dcdd88h + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_192: ;FPSUB + dec edi + js rx_finish + xor r9, 04659becbh + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4746030173290233856 + movd xmm9, rax + subsd xmm0, xmm9 + mov eax, r12d + xor eax, 075253031h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_193: ;FPDIV + dec edi + js rx_finish + xor r11, 0c52741d5h + mov ecx, r11d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm7 + mov eax, r13d + xor eax, 0e6f1a3b7h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_194: ;RET + dec edi + js rx_finish + xor r12, 0217bf5f3h + mov ecx, r12d + call rx_read_dataset + cmp rsp, rbp + je short not_taken_ret_194 + cmp ebx, -1901851954 + ja short not_taken_ret_194 + xor rax, qword ptr [rsp + 8] + mov r13, rax + ret 8 +not_taken_ret_194: + mov r13, rax + +rx_i_195: ;FPSQRT + dec edi + js rx_finish + xor r15, 0884f3526h + mov ecx, r15d + call rx_read_dataset + mov rcx, 9223372036854773760 + and rax, rcx + cvtsi2sd xmm0, rax + sqrtsd xmm0, xmm0 + mov eax, r14d + xor eax, 0648f64e0h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_196: ;FPSQRT + dec edi + js rx_finish + xor rbx, 0d76edad3h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, 9223372036854773760 + and rax, rcx + cvtsi2sd xmm0, rax + sqrtsd xmm0, xmm0 + movsd xmm8, xmm0 + +rx_i_197: ;MULH_64 + dec edi + js rx_finish + xor r12, 0e9939ach + mov ecx, r12d + call rx_read_dataset + mov r8, rdx + mov rcx, r12 + mul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r15d + xor eax, 074e097dch + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_198: ;FPMUL + dec edi + js rx_finish + xor r12, 0f21ca520h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm2 + movsd xmm5, xmm0 + +rx_i_199: ;SHR_64 + dec edi + js rx_finish + xor r10, 09405152ch + mov ecx, r10d + call rx_read_dataset + mov rcx, rbx + shr rax, cl + mov r9, rax + +rx_i_200: ;ADD_64 + dec edi + js rx_finish + xor rbx, 0c2a9f41bh + mov ecx, ebx + call rx_read_dataset + add rax, -1907903895 + mov rcx, rax + mov eax, r13d + xor eax, 08e47b269h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_201: ;MUL_64 + dec edi + js rx_finish + xor r12, 0229208efh + mov ecx, r12d + call rx_read_dataset + imul rax, r15 + mov r11, rax + +rx_i_202: ;MUL_64 + dec edi + js rx_finish + xor r14, 0c8d95bbbh + mov eax, r14d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + imul rax, r14 + mov rcx, rax + mov eax, ebx + xor eax, 01149cba0h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_203: ;MUL_64 + dec edi + js rx_finish + xor r13, 050049e2eh + mov ecx, r13d + call rx_read_dataset + imul rax, r10 + mov rcx, rax + mov eax, r10d + xor eax, 0d0e71e9ah + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_204: ;FPSUB + dec edi + js rx_finish + xor r10, 0c63b99e8h + mov ecx, r10d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm2 + movsd xmm4, xmm0 + +rx_i_205: ;FPADD + dec edi + js rx_finish + xor rbx, 0cdda801dh + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm1 + movsd xmm4, xmm0 + +rx_i_206: ;FPADD + dec edi + js rx_finish + xor r13, 0fa44b04ah + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm1 + mov eax, r13d + xor eax, 0b44dbc71h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_207: ;FPSUB + dec edi + js rx_finish + xor r10, 0d73e472ch + mov ecx, r10d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, -4478539544748097536 + movd xmm9, rax + subsd xmm0, xmm9 + movsd xmm7, xmm0 + +rx_i_208: ;SUB_32 + dec edi + js rx_finish + xor r9, 01af8ab1dh + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + sub eax, r15d + mov rcx, rax + mov eax, ebx + xor eax, 0eb8fc30fh + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_209: ;FPMUL + dec edi + js rx_finish + xor r14, 094e997c5h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm8 + mov eax, r13d + xor eax, 0a1f8d8c7h + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_210: ;FPSUB + dec edi + js rx_finish + xor r11, 0e836a177h + mov ecx, r11d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, -4483350864878108672 + movd xmm9, rax + subsd xmm0, xmm9 + mov eax, r12d + xor eax, 0d01fb731h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_211: ;AND_64 + dec edi + js rx_finish + xor r9, 039ccdd30h + mov ecx, r9d + call rx_read_dataset + and rax, r12 + mov rcx, rax + mov eax, r9d + xor eax, 012bbcc84h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_212: ;SUB_32 + dec edi + js rx_finish + xor r9, 0f4f126c5h + mov ecx, r9d + call rx_read_dataset + sub eax, r12d + mov r10, rax + +rx_i_213: ;SHL_64 + dec edi + js rx_finish + xor rbx, 0b84811f1h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + shl rax, 30 + mov rcx, rax + mov eax, r12d + xor eax, 0c36b836ah + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_214: ;MUL_32 + dec edi + js rx_finish + xor r12, 0c5efc90ah + mov ecx, r12d + call rx_read_dataset + mov ecx, eax + mov eax, -1027162400 + imul rax, rcx + mov rcx, rax + mov eax, r15d + xor eax, 0c2c6bee0h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_215: ;ROR_64 + dec edi + js rx_finish + xor r12, 0ce533072h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r9 + ror rax, cl + mov rcx, rax + mov eax, r11d + xor eax, 0212e615h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_216: ;SUB_32 + dec edi + js rx_finish + xor r13, 06b465fdbh + mov ecx, r13d + call rx_read_dataset + sub eax, r13d + mov rcx, rax + mov eax, r15d + xor eax, 067d81043h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_217: ;IMUL_32 + dec edi + js rx_finish + xor r13, 02dd1d503h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + movsxd rcx, eax + mov rax, 129993589 + imul rax, rcx + mov r14, rax + +rx_i_218: ;SHR_64 + dec edi + js rx_finish + xor r9, 0a159f313h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r14 + shr rax, cl + mov r14, rax + +rx_i_219: ;ADD_64 + dec edi + js rx_finish + xor r15, 08359265eh + mov ecx, r15d + call rx_read_dataset + add rax, r12 + mov r10, rax + +rx_i_220: ;SUB_32 + dec edi + js rx_finish + xor r12, 080696de3h + mov ecx, r12d + call rx_read_dataset + sub eax, r13d + mov rcx, rax + mov eax, r15d + xor eax, 03b609d2bh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_221: ;IMUL_32 + dec edi + js rx_finish + xor rbx, 040d5b526h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + movsxd rcx, eax + movsxd rax, r9d + imul rax, rcx + mov rcx, rax + mov eax, r10d + xor eax, 017e667h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_222: ;FPSQRT + dec edi + js rx_finish + xor r11, 083c0bd93h + mov ecx, r11d + call rx_read_dataset + mov rcx, 9223372036854773760 + and rax, rcx + cvtsi2sd xmm0, rax + sqrtsd xmm0, xmm0 + movsd xmm3, xmm0 + +rx_i_223: ;OR_32 + dec edi + js rx_finish + xor rbx, 0ca37f668h + mov ecx, ebx + call rx_read_dataset + or eax, -740915304 + mov rcx, rax + mov eax, r15d + xor eax, 0d3d68798h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_224: ;IMUL_32 + dec edi + js rx_finish + xor r9, 0bb44c384h + mov ecx, r9d + call rx_read_dataset + movsxd rcx, eax + movsxd rax, r11d + imul rax, rcx + mov rcx, rax + mov eax, r11d + xor eax, 0903fd173h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_225: ;IMULH_64 + dec edi + js rx_finish + xor r9, 0a3deb512h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r15 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r11d + xor eax, 07feab351h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_226: ;FPMUL + dec edi + js rx_finish + xor r9, 084a02d64h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm5 + movsd xmm7, xmm0 + +rx_i_227: ;FPSUB + dec edi + js rx_finish + xor rbx, 01e5cc085h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm3 + movsd xmm2, xmm0 + +rx_i_228: ;SHL_64 + dec edi + js rx_finish + xor r12, 053982440h + mov ecx, r12d + call rx_read_dataset + mov rcx, r14 + shl rax, cl + mov rcx, rax + mov eax, r11d + xor eax, 0e500c69dh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_229: ;IMULH_64 + dec edi + js rx_finish + xor r13, 0c558367eh + mov ecx, r13d + call rx_read_dataset + mov r8, rdx + mov rcx, r10 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r12d + xor eax, 0fe304a4ah + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_230: ;CALL + dec edi + js rx_finish + xor r10, 040139b65h + mov ecx, r10d + call rx_read_dataset + cmp ebx, -1752488808 + jbe short taken_call_230 + mov rcx, rax + mov eax, ebx + xor eax, 0978b2498h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_231 +taken_call_230: + push rax + call rx_i_331 + +rx_i_231: ;FPMUL + dec edi + js rx_finish + xor r11, 0fa312dbdh + mov eax, r11d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, -4479585788803153920 + movd xmm9, rax + mulsd xmm0, xmm9 + movsd xmm3, xmm0 + +rx_i_232: ;FPSQRT + dec edi + js rx_finish + xor r11, 0b64246c0h + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, 9223372036854773760 + and rax, rcx + cvtsi2sd xmm0, rax + sqrtsd xmm0, xmm0 + mov eax, r15d + xor eax, 0ffdff798h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_233: ;IMUL_32 + dec edi + js rx_finish + xor r11, 05c535836h + mov ecx, r11d + call rx_read_dataset + movsxd rcx, eax + movsxd rax, r12d + imul rax, rcx + mov rcx, rax + mov eax, r13d + xor eax, 013e8b2e0h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_234: ;FPSUB + dec edi + js rx_finish + xor r15, 0f394972eh + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4737156465540726784 + movd xmm9, rax + subsd xmm0, xmm9 + movsd xmm5, xmm0 + +rx_i_235: ;RET + dec edi + js rx_finish + xor r9, 0bb56428dh + mov ecx, r9d + call rx_read_dataset + cmp rsp, rbp + je short not_taken_ret_235 + cmp r9d, -422974038 + ja short not_taken_ret_235 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r9d + xor eax, 0e6c9edaah + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_235: + mov rcx, rax + mov eax, r9d + xor eax, 0e6c9edaah + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_236: ;FPMUL + dec edi + js rx_finish + xor r15, 09ab46ab3h + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm3 + mov eax, r15d + xor eax, 07e732935h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_237: ;CALL + dec edi + js rx_finish + xor r13, 08eb2cd76h + mov ecx, r13d + call rx_read_dataset + cmp r12d, 392389867 + jbe short taken_call_237 + mov r14, rax + jmp rx_i_238 +taken_call_237: + push rax + call rx_i_271 + +rx_i_238: ;FPDIV + dec edi + js rx_finish + xor r15, 0ba687578h + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4743218015854657536 + movd xmm9, rax + divsd xmm0, xmm9 + mov eax, r12d + xor eax, 04d2e9e7dh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_239: ;MUL_32 + dec edi + js rx_finish + xor r13, 0b6cb9ff2h + mov ecx, r13d + call rx_read_dataset + mov ecx, eax + mov eax, r12d + imul rax, rcx + mov rcx, rax + mov eax, r15d + xor eax, 0ca73a89h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_240: ;FPADD + dec edi + js rx_finish + xor r15, 03ad196ach + mov ecx, r15d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm4 + mov eax, r11d + xor eax, 0b2ab82cdh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_241: ;CALL + dec edi + js rx_finish + xor r15, 0fab4600h + mov ecx, r15d + call rx_read_dataset + push rax + call rx_i_298 + +rx_i_242: ;ROR_64 + dec edi + js rx_finish + xor rbx, 0158f119fh + mov ecx, ebx + call rx_read_dataset + mov rcx, r14 + ror rax, cl + mov r15, rax + +rx_i_243: ;ADD_64 + dec edi + js rx_finish + xor r13, 044f30b3fh + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, r10 + mov r10, rax + +rx_i_244: ;IMUL_32 + dec edi + js rx_finish + xor r9, 0d65d29f9h + mov ecx, r9d + call rx_read_dataset + movsxd rcx, eax + mov rax, -423830277 + imul rax, rcx + mov rbx, rax + +rx_i_245: ;FPADD + dec edi + js rx_finish + xor r11, 0ce5260adh + mov ecx, r11d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm3 + movsd xmm7, xmm0 + +rx_i_246: ;MULH_64 + dec edi + js rx_finish + xor r12, 01119b0f9h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, 319324914 + mul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r10d + xor eax, 0130882f2h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_247: ;OR_32 + dec edi + js rx_finish + xor r12, 0d6c2ce3dh + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or eax, 1198180774 + mov r14, rax + +rx_i_248: ;ROR_64 + dec edi + js rx_finish + xor r11, 0c6a6248h + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r14 + ror rax, cl + mov rcx, rax + mov eax, r9d + xor eax, 0b4a1fad6h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_249: ;OR_64 + dec edi + js rx_finish + xor r13, 084505739h + mov ecx, r13d + call rx_read_dataset + or rax, -1546539637 + mov rcx, rax + mov eax, r12d + xor eax, 0a3d1ad8bh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_250: ;DIV_64 + dec edi + js rx_finish + xor r15, 027eeaa2eh + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx +mov ecx, 1 + mov edx, r9d + test edx, edx + cmovne ecx, edx + xor edx, edx + div rcx + mov rdx, r8 + mov r12, rax + +rx_i_251: ;MUL_32 + dec edi + js rx_finish + xor r10, 0c4de0296h + mov ecx, r10d + call rx_read_dataset + mov ecx, eax + mov eax, r14d + imul rax, rcx + mov rcx, rax + mov eax, r9d + xor eax, 03814cf80h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_252: ;MUL_32 + dec edi + js rx_finish + xor rbx, 0649df46fh + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov ecx, eax + mov eax, r15d + imul rax, rcx + mov rcx, rax + mov eax, r9d + xor eax, 07b10fc32h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_253: ;IMULH_64 + dec edi + js rx_finish + xor r15, 0499552cch + mov ecx, r15d + call rx_read_dataset + mov r8, rdx + mov rcx, r11 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r13d + xor eax, 0e1afcff9h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_254: ;SUB_64 + dec edi + js rx_finish + xor r13, 083eafe6fh + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + sub rax, rbx + mov rcx, rax + mov eax, r14d + xor eax, 031115b87h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_255: ;FPMUL + dec edi + js rx_finish + xor r13, 0a25a4d8ah + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm2 + movsd xmm4, xmm0 + +rx_i_256: ;SHR_64 + dec edi + js rx_finish + xor r14, 08a75ad41h + mov ecx, r14d + call rx_read_dataset + mov rcx, rbx + shr rax, cl + mov r14, rax + +rx_i_257: ;CALL + dec edi + js rx_finish + xor r14, 057f3f596h + mov ecx, r14d + call rx_read_dataset + cmp r15d, 1699431947 + jbe short taken_call_257 + mov rcx, rax + mov eax, r13d + xor eax, 0654b460bh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_258 +taken_call_257: + push rax + call rx_i_370 + +rx_i_258: ;FPADD + dec edi + js rx_finish + xor r14, 04cfb709eh + mov ecx, r14d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm4 + movsd xmm8, xmm0 + +rx_i_259: ;FPADD + dec edi + js rx_finish + xor r9, 0b96ec9ech + mov ecx, r9d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm5 + movsd xmm6, xmm0 + +rx_i_260: ;MUL_64 + dec edi + js rx_finish + xor rbx, 08375472ch + mov ecx, ebx + call rx_read_dataset + imul rax, r15 + mov rcx, rax + mov eax, r9d + xor eax, 0f8942c0h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_261: ;FPADD + dec edi + js rx_finish + xor r12, 0d75a8c3fh + mov ecx, r12d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4741056264732147712 + movd xmm9, rax + addsd xmm0, xmm9 + movsd xmm3, xmm0 + +rx_i_262: ;MUL_32 + dec edi + js rx_finish + xor r11, 064fdbda0h + mov eax, r11d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov ecx, eax + mov eax, r14d + imul rax, rcx + mov rcx, rax + mov eax, r9d + xor eax, 01c58ef2dh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_263: ;ROR_64 + dec edi + js rx_finish + xor r11, 02e36a073h + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r9 + ror rax, cl + mov rcx, rax + mov eax, r11d + xor eax, 06c1856f0h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_264: ;FPSUB + dec edi + js rx_finish + xor r13, 0f94e9fa9h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4743938178866479104 + movd xmm9, rax + subsd xmm0, xmm9 + mov eax, r9d + xor eax, 0576a8e8fh + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_265: ;FPDIV + dec edi + js rx_finish + xor r14, 02346171ch + mov ecx, r14d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm3 + movsd xmm3, xmm0 + +rx_i_266: ;OR_64 + dec edi + js rx_finish + xor r10, 01c42baa6h + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, r13 + mov rcx, rax + mov eax, r11d + xor eax, 0a271ff06h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_267: ;FPMUL + dec edi + js rx_finish + xor r11, 0b39b140h + mov ecx, r11d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm8 + mov eax, r14d + xor eax, 0d8823dc5h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_268: ;FPSUB + dec edi + js rx_finish + xor r11, 01a07d201h + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm3 + mov eax, r15d + xor eax, 0df89f274h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_269: ;FPADD + dec edi + js rx_finish + xor r13, 07a3eb340h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm8 + movsd xmm2, xmm0 + +rx_i_270: ;CALL + dec edi + js rx_finish + xor r13, 03d0a3a89h + mov eax, r13d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + cmp r12d, 136160027 + jbe short taken_call_270 + mov r10, rax + jmp rx_i_271 +taken_call_270: + push rax + call rx_i_298 + +rx_i_271: ;ROL_64 + dec edi + js rx_finish + xor rbx, 0c6c7b37h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r10 + rol rax, cl + mov r11, rax + +rx_i_272: ;FPROUND + dec edi + js rx_finish + xor r12, 0c2510cebh + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, rax + shl eax, 13 + and rcx, -2048 + and eax, 24576 + cvtsi2sd xmm0, rcx + or eax, 40896 + mov dword ptr [rsp - 8], eax + ldmxcsr dword ptr [rsp - 8] + movsd xmm5, xmm0 + +rx_i_273: ;ROL_64 + dec edi + js rx_finish + xor r11, 0c80cc899h + mov ecx, r11d + call rx_read_dataset + mov rcx, rbx + rol rax, cl + mov rcx, rax + mov eax, r10d + xor eax, 01ba81447h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_274: ;FPMUL + dec edi + js rx_finish + xor r11, 0eb355caah + mov ecx, r11d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm1 + mov eax, r15d + xor eax, 03981662bh + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_275: ;MUL_32 + dec edi + js rx_finish + xor r13, 0c6f12299h + mov ecx, r13d + call rx_read_dataset + mov ecx, eax + mov eax, -2032281772 + imul rax, rcx + mov rcx, rax + mov eax, r9d + xor eax, 086ddd754h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_276: ;OR_64 + dec edi + js rx_finish + xor r12, 0695a5dd2h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, r12 + mov r13, rax + +rx_i_277: ;CALL + dec edi + js rx_finish + xor r9, 0d315e4dch + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + push rax + call rx_i_375 + +rx_i_278: ;FPADD + dec edi + js rx_finish + xor r15, 0b66ca7e0h + mov ecx, r15d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4745257761179172864 + movd xmm9, rax + addsd xmm0, xmm9 + movsd xmm6, xmm0 + +rx_i_279: ;AND_64 + dec edi + js rx_finish + xor r10, 0788eceb7h + mov ecx, r10d + call rx_read_dataset + and rax, r11 + mov r13, rax + +rx_i_280: ;FPROUND + dec edi + js rx_finish + xor r9, 0c6ac5edah + mov ecx, r9d + call rx_read_dataset + mov rcx, rax + shl eax, 13 + and rcx, -2048 + and eax, 24576 + cvtsi2sd xmm0, rcx + or eax, 40896 + mov dword ptr [rsp - 8], eax + ldmxcsr dword ptr [rsp - 8] + mov eax, r12d + xor eax, 0b65161a6h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_281: ;IMUL_32 + dec edi + js rx_finish + xor r11, 0c9549789h + mov ecx, r11d + call rx_read_dataset + movsxd rcx, eax + movsxd rax, r10d + imul rax, rcx + mov rcx, rax + mov eax, r9d + xor eax, 01aca20a3h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_282: ;FPSUB + dec edi + js rx_finish + xor r9, 0a2bc66c9h + mov ecx, r9d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm7 + movsd xmm4, xmm0 + +rx_i_283: ;FPADD + dec edi + js rx_finish + xor r15, 0f1a91458h + mov ecx, r15d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4742807966216880128 + movd xmm9, rax + addsd xmm0, xmm9 + movsd xmm1, xmm0 + +rx_i_284: ;IMULH_64 + dec edi + js rx_finish + xor r12, 066246b43h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r11 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r13d + xor eax, 0211aeb00h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_285: ;ADD_32 + dec edi + js rx_finish + xor r10, 05a762727h + mov ecx, r10d + call rx_read_dataset + add eax, r10d + mov rcx, rax + mov eax, r11d + xor eax, 0f3e6c946h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_286: ;SUB_64 + dec edi + js rx_finish + xor r15, 0de1ab603h + mov ecx, r15d + call rx_read_dataset + sub rax, 1367326224 + mov r11, rax + +rx_i_287: ;ADD_64 + dec edi + js rx_finish + xor r9, 0df4d084fh + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + add rax, -1156732976 + mov rcx, rax + mov eax, r12d + xor eax, 0bb0da7d0h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_288: ;FPADD + dec edi + js rx_finish + xor r15, 0e68f36ach + mov ecx, r15d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, -4477945591619387392 + movd xmm9, rax + addsd xmm0, xmm9 + movsd xmm1, xmm0 + +rx_i_289: ;IMUL_32 + dec edi + js rx_finish + xor rbx, 09adb333bh + mov ecx, ebx + call rx_read_dataset + movsxd rcx, eax + movsxd rax, ebx + imul rax, rcx + mov r14, rax + +rx_i_290: ;ROR_64 + dec edi + js rx_finish + xor r14, 082f5e36ch + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r9 + ror rax, cl + mov rcx, rax + mov eax, r15d + xor eax, 0546e75d1h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_291: ;AND_64 + dec edi + js rx_finish + xor r11, 049547c9ch + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, r15 + mov rcx, rax + mov eax, ebx + xor eax, 04926c7fah + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_292: ;SUB_32 + dec edi + js rx_finish + xor r10, 08716ac8bh + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + sub eax, ebx + mov rcx, rax + mov eax, r9d + xor eax, 062eafa1bh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_293: ;FPMUL + dec edi + js rx_finish + xor r14, 0efef52b5h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm1 + mov eax, ebx + xor eax, 046affb49h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_294: ;FPSUB + dec edi + js rx_finish + xor r15, 060665748h + mov ecx, r15d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm8 + mov eax, r9d + xor eax, 02f4d18d7h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_295: ;RET + dec edi + js rx_finish + xor r13, 0ddf4bd1ah + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_295 + cmp r14d, 1988795765 + ja short not_taken_ret_295 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r14d + xor eax, 0768a9d75h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_295: + mov rcx, rax + mov eax, r14d + xor eax, 0768a9d75h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_296: ;ROL_64 + dec edi + js rx_finish + xor r13, 05a87cc3dh + mov eax, r13d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + rol rax, 23 + mov r10, rax + +rx_i_297: ;FPADD + dec edi + js rx_finish + xor r9, 0c61f4279h + mov ecx, r9d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm5 + mov eax, ebx + xor eax, 014844990h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_298: ;RET + dec edi + js rx_finish + xor r14, 0f3b9d85h + mov ecx, r14d + call rx_read_dataset + cmp rsp, rbp + je short not_taken_ret_298 + cmp r15d, -276467273 + ja short not_taken_ret_298 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, ebx + xor eax, 0ef8571b7h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_298: + mov rcx, rax + mov eax, ebx + xor eax, 0ef8571b7h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_299: ;FPSUB + dec edi + js rx_finish + xor r9, 0f42798fdh + mov ecx, r9d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm8 + mov eax, r15d + xor eax, 08a66e69fh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_300: ;FPDIV + dec edi + js rx_finish + xor r14, 018738758h + mov ecx, r14d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm1 + mov eax, ebx + xor eax, 0f3a594cah + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_301: ;ADD_64 + dec edi + js rx_finish + xor r15, 0de3b9d9bh + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, r10 + mov r14, rax + +rx_i_302: ;FPADD + dec edi + js rx_finish + xor r14, 084f53637h + mov eax, r14d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm7 + mov eax, r14d + xor eax, 0d10f7c42h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_303: ;ADD_64 + dec edi + js rx_finish + xor r12, 042f4897h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, 21400308 + mov rcx, rax + mov eax, r12d + xor eax, 01468af4h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_304: ;FPSUB + dec edi + js rx_finish + xor r12, 095765693h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, -4478628807791607808 + movd xmm9, rax + subsd xmm0, xmm9 + mov eax, r10d + xor eax, 09d24b005h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_305: ;FPMUL + dec edi + js rx_finish + xor rbx, 0a0ec5eech + mov ecx, ebx + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm5 + movsd xmm7, xmm0 + +rx_i_306: ;ADD_64 + dec edi + js rx_finish + xor r15, 0f6f8c345h + mov ecx, r15d + call rx_read_dataset + add rax, r10 + mov r11, rax + +rx_i_307: ;FPADD + dec edi + js rx_finish + xor r14, 082a3e965h + mov eax, r14d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm3 + movsd xmm1, xmm0 + +rx_i_308: ;MUL_64 + dec edi + js rx_finish + xor r12, 04940c652h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + imul rax, r15 + mov r13, rax + +rx_i_309: ;SUB_64 + dec edi + js rx_finish + xor r11, 03c6c62b8h + mov ecx, r11d + call rx_read_dataset + sub rax, -65873120 + mov r10, rax + +rx_i_310: ;ADD_64 + dec edi + js rx_finish + xor r15, 08b34cdfch + mov ecx, r15d + call rx_read_dataset + add rax, r15 + mov r13, rax + +rx_i_311: ;SHR_64 + dec edi + js rx_finish + xor r15, 04c36adb1h + mov ecx, r15d + call rx_read_dataset + mov rcx, rbx + shr rax, cl + mov r10, rax + +rx_i_312: ;MUL_64 + dec edi + js rx_finish + xor r11, 0a4213b21h + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + imul rax, r13 + mov r15, rax + +rx_i_313: ;IMULH_64 + dec edi + js rx_finish + xor r9, 090c42304h + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, -1652850028 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r9d + xor eax, 09d7b8294h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_314: ;FPMUL + dec edi + js rx_finish + xor r9, 0f78e1c8ch + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4746554338141274112 + movd xmm9, rax + mulsd xmm0, xmm9 + movsd xmm7, xmm0 + +rx_i_315: ;FPSUB + dec edi + js rx_finish + xor rbx, 0ff8848cfh + mov ecx, ebx + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4744327281034395648 + movd xmm9, rax + subsd xmm0, xmm9 + mov eax, r12d + xor eax, 05cf21a31h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_316: ;MULH_64 + dec edi + js rx_finish + xor r13, 0b18904cdh + mov ecx, r13d + call rx_read_dataset + mov r8, rdx + mov rcx, -1147928648 + mul rcx + mov rax, rdx + mov rdx, r8 + mov r10, rax + +rx_i_317: ;ROR_64 + dec edi + js rx_finish + xor rbx, 0a0d0befh + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + ror rax, 62 + mov rcx, rax + mov eax, r14d + xor eax, 09500d514h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_318: ;IMUL_32 + dec edi + js rx_finish + xor r15, 01e3c65f7h + mov ecx, r15d + call rx_read_dataset + movsxd rcx, eax + movsxd rax, r9d + imul rax, rcx + mov rcx, rax + mov eax, r9d + xor eax, 07fc7f955h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_319: ;XOR_32 + dec edi + js rx_finish + xor r9, 02e36ddafh + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + xor eax, r15d + mov r9, rax + +rx_i_320: ;RET + dec edi + js rx_finish + xor r14, 05b0cb5bbh + mov ecx, r14d + call rx_read_dataset + cmp rsp, rbp + je short not_taken_ret_320 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, ebx + xor eax, 03602c513h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_320: + mov rcx, rax + mov eax, ebx + xor eax, 03602c513h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_321: ;FPADD + dec edi + js rx_finish + xor r9, 0c74e7415h + mov ecx, r9d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm7 + mov eax, r13d + xor eax, 0b5bc8h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_322: ;ROR_64 + dec edi + js rx_finish + xor r9, 057621d9ah + mov ecx, r9d + call rx_read_dataset + mov rcx, r11 + ror rax, cl + mov rcx, rax + mov eax, r15d + xor eax, 061cb9db8h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_323: ;ROL_64 + dec edi + js rx_finish + xor r13, 08ee02d99h + mov ecx, r13d + call rx_read_dataset + mov rcx, r15 + rol rax, cl + mov rcx, rax + mov eax, r11d + xor eax, 01f931a08h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_324: ;FPADD + dec edi + js rx_finish + xor r15, 013461188h + mov ecx, r15d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm4 + movsd xmm2, xmm0 + +rx_i_325: ;IMUL_32 + dec edi + js rx_finish + xor r11, 0a7bae383h + mov eax, r11d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + movsxd rcx, eax + movsxd rax, r9d + imul rax, rcx + mov rcx, rax + mov eax, r12d + xor eax, 0f213dach + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_326: ;CALL + dec edi + js rx_finish + xor r14, 08215399bh + mov ecx, r14d + call rx_read_dataset + cmp r11d, 1411981860 + jbe short taken_call_326 + mov rcx, rax + mov eax, r11d + xor eax, 054292224h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_327 +taken_call_326: + push rax + call rx_i_346 + +rx_i_327: ;MUL_64 + dec edi + js rx_finish + xor r14, 07b07664bh + mov eax, r14d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + imul rax, rax, -696924877 + mov rcx, rax + mov eax, r14d + xor eax, 0d675c533h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_328: ;FPMUL + dec edi + js rx_finish + xor r9, 0f956baffh + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm2 + movsd xmm1, xmm0 + +rx_i_329: ;XOR_64 + dec edi + js rx_finish + xor r11, 0708ab9d1h + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + xor rax, -281580460 + mov r13, rax + +rx_i_330: ;MUL_64 + dec edi + js rx_finish + xor r11, 0d1b27540h + mov ecx, r11d + call rx_read_dataset + imul rax, rbx + mov rcx, rax + mov eax, r9d + xor eax, 0b67623c3h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_331: ;IMULH_64 + dec edi + js rx_finish + xor r9, 09665f98dh + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r15 + imul rcx + mov rax, rdx + mov rdx, r8 + mov r12, rax + +rx_i_332: ;SAR_64 + dec edi + js rx_finish + xor r12, 0fb9c32adh + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r13 + sar rax, cl + mov r9, rax + +rx_i_333: ;RET + dec edi + js rx_finish + xor r11, 0e1110623h + mov ecx, r11d + call rx_read_dataset + cmp rsp, rbp + je short not_taken_ret_333 + xor rax, qword ptr [rsp + 8] + mov r11, rax + ret 8 +not_taken_ret_333: + mov r11, rax + +rx_i_334: ;MUL_32 + dec edi + js rx_finish + xor r9, 0f6a93f19h + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov ecx, eax + mov eax, r13d + imul rax, rcx + mov rcx, rax + mov eax, r11d + xor eax, 0af8b7117h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_335: ;FPADD + dec edi + js rx_finish + xor r9, 0bc9bbe4ah + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm3 + mov eax, r9d + xor eax, 0ba4d4c0fh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_336: ;ROR_64 + dec edi + js rx_finish + xor r12, 0f253cd4eh + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r14 + ror rax, cl + mov r11, rax + +rx_i_337: ;OR_32 + dec edi + js rx_finish + xor r14, 0f009758bh + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or eax, -175125848 + mov r11, rax + +rx_i_338: ;ADD_64 + dec edi + js rx_finish + xor rbx, 0dda04168h + mov ecx, ebx + call rx_read_dataset + add rax, r13 + mov rbx, rax + +rx_i_339: ;ADD_32 + dec edi + js rx_finish + xor r15, 03e6cfb73h + mov eax, r15d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + add eax, ebx + mov rcx, rax + mov eax, r12d + xor eax, 07ffe4218h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_340: ;ROR_64 + dec edi + js rx_finish + xor r15, 0aea0a435h + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r10 + ror rax, cl + mov rcx, rax + mov eax, r11d + xor eax, 02644c5ah + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_341: ;ADD_64 + dec edi + js rx_finish + xor rbx, 03d6c4ab2h + mov ecx, ebx + call rx_read_dataset + add rax, r12 + mov rcx, rax + mov eax, r13d + xor eax, 0dab07c39h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_342: ;MUL_64 + dec edi + js rx_finish + xor r12, 0d428a742h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + imul rax, r12 + mov r11, rax + +rx_i_343: ;FPADD + dec edi + js rx_finish + xor r9, 04596ef73h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm6 + mov eax, r10d + xor eax, 07c8317fah + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_344: ;FPADD + dec edi + js rx_finish + xor r15, 0e51629cch + mov ecx, r15d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm5 + mov eax, r13d + xor eax, 038b653beh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_345: ;MULH_64 + dec edi + js rx_finish + xor r12, 019eb9ea5h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r15 + mul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, ebx + xor eax, 024736405h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_346: ;FPSUB + dec edi + js rx_finish + xor r9, 09ccc7abah + mov ecx, r9d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm2 + mov eax, r11d + xor eax, 0319de2d3h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_347: ;SHL_64 + dec edi + js rx_finish + xor r14, 056f6cf0bh + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r13 + shl rax, cl + mov rcx, rax + mov eax, r15d + xor eax, 0d9a469a9h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_348: ;FPSUB + dec edi + js rx_finish + xor r10, 03ef9bcc4h + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4744717476367958016 + movd xmm9, rax + subsd xmm0, xmm9 + mov eax, r13d + xor eax, 0627d9feah + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_349: ;MUL_64 + dec edi + js rx_finish + xor r12, 0bbbcdbach + mov ecx, r12d + call rx_read_dataset + imul rax, r13 + mov rcx, rax + mov eax, r9d + xor eax, 0ef03b0ddh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_350: ;OR_64 + dec edi + js rx_finish + xor r12, 0ae9d1e96h + mov ecx, r12d + call rx_read_dataset + or rax, r15 + mov rcx, rax + mov eax, r13d + xor eax, 0ed2d3987h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_351: ;ADD_64 + dec edi + js rx_finish + xor r14, 070c34d69h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, r10 + mov r13, rax + +rx_i_352: ;FPSUB + dec edi + js rx_finish + xor r13, 0523ff904h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4741412628788674560 + movd xmm9, rax + subsd xmm0, xmm9 + movsd xmm1, xmm0 + +rx_i_353: ;XOR_64 + dec edi + js rx_finish + xor rbx, 018e0e5ddh + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + xor rax, r15 + mov r13, rax + +rx_i_354: ;CALL + dec edi + js rx_finish + xor r9, 09bd050f0h + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + cmp r9d, -980411581 + jbe short taken_call_354 + mov rcx, rax + mov eax, r12d + xor eax, 0c5901b43h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_355 +taken_call_354: + push rax + call rx_i_355 + +rx_i_355: ;MUL_64 + dec edi + js rx_finish + xor r11, 0a3a5906fh + mov ecx, r11d + call rx_read_dataset + imul rax, r10 + mov r13, rax + +rx_i_356: ;FPADD + dec edi + js rx_finish + xor r10, 0afc9af2bh + mov ecx, r10d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm6 + movsd xmm2, xmm0 + +rx_i_357: ;FPSUB + dec edi + js rx_finish + xor r13, 02e65278bh + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm2 + movsd xmm7, xmm0 + +rx_i_358: ;MULH_64 + dec edi + js rx_finish + xor r13, 02412fc10h + mov ecx, r13d + call rx_read_dataset + mov r8, rdx + mov rcx, r13 + mul rcx + mov rax, rdx + mov rdx, r8 + mov r13, rax + +rx_i_359: ;SUB_32 + dec edi + js rx_finish + xor r10, 06bd6e65fh + mov ecx, r10d + call rx_read_dataset + sub eax, r14d + mov rcx, rax + mov eax, ebx + xor eax, 0c1062b3ch + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_360: ;SUB_64 + dec edi + js rx_finish + xor r10, 01cd85d80h + mov ecx, r10d + call rx_read_dataset + sub rax, r10 + mov r11, rax + +rx_i_361: ;ADD_64 + dec edi + js rx_finish + xor r10, 0f7daed36h + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, 820073637 + mov r11, rax + +rx_i_362: ;IMULH_64 + dec edi + js rx_finish + xor r13, 088fa6e5ah + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r11 + imul rcx + mov rax, rdx + mov rdx, r8 + mov r9, rax + +rx_i_363: ;FPSUB + dec edi + js rx_finish + xor r10, 0714fc2cdh + mov ecx, r10d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm1 + movsd xmm4, xmm0 + +rx_i_364: ;FPMUL + dec edi + js rx_finish + xor r10, 0c2d110b5h + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm8 + mov eax, ebx + xor eax, 0c41a4103h + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_365: ;FPDIV + dec edi + js rx_finish + xor r15, 01d125a7fh + mov ecx, r15d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm6 + movsd xmm6, xmm0 + +rx_i_366: ;ADD_32 + dec edi + js rx_finish + xor r9, 0ed8954bdh + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add eax, 1082179469 + mov rcx, rax + mov eax, r15d + xor eax, 04080bf8dh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_367: ;FPSUB + dec edi + js rx_finish + xor r12, 09f75887bh + mov eax, r12d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm6 + mov eax, r11d + xor eax, 05415334dh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_368: ;MULH_64 + dec edi + js rx_finish + xor r11, 0badaf867h + mov ecx, r11d + call rx_read_dataset + mov r8, rdx + mov rcx, rbx + mul rcx + mov rax, rdx + mov rdx, r8 + mov rbx, rax + +rx_i_369: ;MUL_32 + dec edi + js rx_finish + xor r15, 02db4444ah + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov ecx, eax + mov eax, r9d + imul rax, rcx + mov rcx, rax + mov eax, r12d + xor eax, 0bfd87d37h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_370: ;IMUL_32 + dec edi + js rx_finish + xor r12, 0bff7218fh + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + movsxd rcx, eax + movsxd rax, ebx + imul rax, rcx + mov rcx, rax + mov eax, r15d + xor eax, 0c3d6bcb7h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_371: ;ROR_64 + dec edi + js rx_finish + xor r9, 04d14cb3ah + mov ecx, r9d + call rx_read_dataset + mov rcx, r9 + ror rax, cl + mov r12, rax + +rx_i_372: ;SUB_64 + dec edi + js rx_finish + xor r10, 0a14836bah + mov ecx, r10d + call rx_read_dataset + sub rax, r10 + mov rbx, rax + +rx_i_373: ;IMULH_64 + dec edi + js rx_finish + xor r9, 053fe22e2h + mov eax, r9d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r13 + imul rcx + mov rax, rdx + mov rdx, r8 + mov r9, rax + +rx_i_374: ;FPADD + dec edi + js rx_finish + xor r15, 010e1fb24h + mov eax, r15d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm6 + movsd xmm6, xmm0 + +rx_i_375: ;FPADD + dec edi + js rx_finish + xor rbx, 0ebbd5cc9h + mov ecx, ebx + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm1 + movsd xmm5, xmm0 + +rx_i_376: ;SAR_64 + dec edi + js rx_finish + xor r10, 098ab79d7h + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r13 + sar rax, cl + mov r9, rax + +rx_i_377: ;FPMUL + dec edi + js rx_finish + xor r15, 056438b3h + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm8 + mov eax, r12d + xor eax, 05655fac9h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_378: ;FPMUL + dec edi + js rx_finish + xor r11, 0dbcce604h + mov ecx, r11d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm2 + mov eax, r10d + xor eax, 03507e810h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_379: ;ADD_64 + dec edi + js rx_finish + xor r9, 0edea6200h + mov ecx, r9d + call rx_read_dataset + add rax, r15 + mov rcx, rax + mov eax, r12d + xor eax, 0ec359be9h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_380: ;ADD_64 + dec edi + js rx_finish + xor r14, 05e61b279h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, 476136066 + mov rcx, rax + mov eax, ebx + xor eax, 01c614282h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_381: ;FPSUB + dec edi + js rx_finish + xor r14, 0fc1fb433h + mov ecx, r14d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm3 + mov eax, r15d + xor eax, 0d822f28fh + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_382: ;MULH_64 + dec edi + js rx_finish + xor r12, 082aa21ach + mov ecx, r12d + call rx_read_dataset + mov r8, rdx + mov rcx, 547725353 + mul rcx + mov rax, rdx + mov rdx, r8 + mov r15, rax + +rx_i_383: ;ROR_64 + dec edi + js rx_finish + xor r10, 05dba41fbh + mov ecx, r10d + call rx_read_dataset + ror rax, 56 + mov r13, rax + +rx_i_384: ;SUB_64 + dec edi + js rx_finish + xor r11, 0229e3d6eh + mov eax, r11d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + sub rax, -1443002912 + mov rcx, rax + mov eax, r13d + xor eax, 0a9fd85e0h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_385: ;SHL_64 + dec edi + js rx_finish + xor rbx, 019816ff9h + mov ecx, ebx + call rx_read_dataset + mov rcx, r14 + shl rax, cl + mov r9, rax + +rx_i_386: ;ROR_64 + dec edi + js rx_finish + xor r14, 036b5b81fh + mov ecx, r14d + call rx_read_dataset + mov rcx, r11 + ror rax, cl + mov r11, rax + +rx_i_387: ;FPSUB + dec edi + js rx_finish + xor r15, 05f798ec3h + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm4 + movsd xmm5, xmm0 + +rx_i_388: ;SHL_64 + dec edi + js rx_finish + xor r10, 05b459fd7h + mov ecx, r10d + call rx_read_dataset + mov rcx, r11 + shl rax, cl + mov rcx, rax + mov eax, r9d + xor eax, 054439464h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_389: ;MUL_64 + dec edi + js rx_finish + xor r15, 0c91749bbh + mov ecx, r15d + call rx_read_dataset + imul rax, r12 + mov rcx, rax + mov eax, r13d + xor eax, 0fb9b50b9h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_390: ;FPADD + dec edi + js rx_finish + xor r9, 0575b4bdch + mov ecx, r9d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm8 + mov eax, r9d + xor eax, 05702d58dh + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_391: ;SUB_64 + dec edi + js rx_finish + xor r9, 0d4f7bc6ah + mov ecx, r9d + call rx_read_dataset + sub rax, r15 + mov r9, rax + +rx_i_392: ;RET + dec edi + js rx_finish + xor rbx, 08a949356h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_392 + cmp r13d, -1600627518 + ja short not_taken_ret_392 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r11d + xor eax, 0a0985cc2h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_392: + mov rcx, rax + mov eax, r11d + xor eax, 0a0985cc2h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_393: ;FPROUND + dec edi + js rx_finish + xor r11, 06531ad2eh + mov eax, r11d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, rax + shl eax, 13 + and rcx, -2048 + and eax, 24576 + cvtsi2sd xmm0, rcx + or eax, 40896 + mov dword ptr [rsp - 8], eax + ldmxcsr dword ptr [rsp - 8] + movsd xmm6, xmm0 + +rx_i_394: ;ROR_64 + dec edi + js rx_finish + xor r15, 02914abeah + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r12 + ror rax, cl + mov rcx, rax + mov eax, r11d + xor eax, 0e5c5acbbh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_395: ;ROR_64 + dec edi + js rx_finish + xor rbx, 0473a41f0h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r11 + ror rax, cl + mov rcx, rax + mov eax, r14d + xor eax, 0aba2155fh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_396: ;ROL_64 + dec edi + js rx_finish + xor r14, 01ebc1f0dh + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + rol rax, 0 + mov rcx, rax + mov eax, r13d + xor eax, 08c4a0f0dh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_397: ;OR_64 + dec edi + js rx_finish + xor r14, 0742e95b1h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 552339548 + mov rcx, rax + mov eax, r13d + xor eax, 020ec085ch + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_398: ;FPADD + dec edi + js rx_finish + xor r12, 0db885c2ch + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm1 + mov eax, r14d + xor eax, 0910e8628h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_399: ;IMULH_64 + dec edi + js rx_finish + xor rbx, 04ae4fe8ch + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r13 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rbx, rax + +rx_i_400: ;ROR_64 + dec edi + js rx_finish + xor r10, 07b41862bh + mov ecx, r10d + call rx_read_dataset + ror rax, 62 + mov rcx, rax + mov eax, r12d + xor eax, 01ee1c837h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_401: ;SUB_64 + dec edi + js rx_finish + xor rbx, 0916f3819h + mov ecx, ebx + call rx_read_dataset + sub rax, r12 + mov rcx, rax + mov eax, r10d + xor eax, 0146db5dfh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_402: ;SAR_64 + dec edi + js rx_finish + xor rbx, 04eb6fd2ah + mov eax, ebx + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, rbx + sar rax, cl + mov rcx, rax + mov eax, r11d + xor eax, 0724e7136h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_403: ;FPMUL + dec edi + js rx_finish + xor r11, 0899a98cfh + mov ecx, r11d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm2 + mov eax, r14d + xor eax, 0fb6f7016h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_404: ;OR_64 + dec edi + js rx_finish + xor r13, 0aae75db6h + mov eax, r13d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + or rax, r11 + mov rcx, rax + mov eax, r14d + xor eax, 094ac538ch + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_405: ;FPSUB + dec edi + js rx_finish + xor r13, 032e81f25h + mov eax, r13d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4742100199122403328 + movd xmm9, rax + subsd xmm0, xmm9 + movsd xmm6, xmm0 + +rx_i_406: ;RET + dec edi + js rx_finish + xor r9, 0fa1a07ffh + mov ecx, r9d + call rx_read_dataset + cmp rsp, rbp + je short not_taken_ret_406 + xor rax, qword ptr [rsp + 8] + mov r14, rax + ret 8 +not_taken_ret_406: + mov r14, rax + +rx_i_407: ;IMULH_64 + dec edi + js rx_finish + xor r9, 0e59500f7h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r12 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r11d + xor eax, 01ff394a0h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_408: ;MULH_64 + dec edi + js rx_finish + xor r15, 05b8ceb2fh + mov ecx, r15d + call rx_read_dataset + mov r8, rdx + mov rcx, rbx + mul rcx + mov rax, rdx + mov rdx, r8 + mov r15, rax + +rx_i_409: ;CALL + dec edi + js rx_finish + xor rbx, 0f61082a3h + mov ecx, ebx + call rx_read_dataset + cmp r10d, 1795880641 + jbe short taken_call_409 + mov rcx, rax + mov eax, r12d + xor eax, 06b0af6c1h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_410 +taken_call_409: + push rax + call rx_i_497 + +rx_i_410: ;FPDIV + dec edi + js rx_finish + xor r9, 0af6886b7h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, -4478294004261191680 + movd xmm9, rax + divsd xmm0, xmm9 + movsd xmm1, xmm0 + +rx_i_411: ;FPSUB + dec edi + js rx_finish + xor r14, 09699566fh + mov ecx, r14d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm1 + mov eax, ebx + xor eax, 0904eec66h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_412: ;SUB_64 + dec edi + js rx_finish + xor r15, 066e79fa6h + mov ecx, r15d + call rx_read_dataset + sub rax, r9 + mov rcx, rax + mov eax, r10d + xor eax, 0295004c9h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_413: ;MUL_64 + dec edi + js rx_finish + xor r11, 04b6caa9ah + mov ecx, r11d + call rx_read_dataset + imul rax, r15 + mov rbx, rax + +rx_i_414: ;RET + dec edi + js rx_finish + xor r15, 0d17f245eh + mov eax, r15d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_414 + xor rax, qword ptr [rsp + 8] + mov rbx, rax + ret 8 +not_taken_ret_414: + mov rbx, rax + +rx_i_415: ;RET + dec edi + js rx_finish + xor r12, 0364f10e7h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_415 + cmp r13d, -1265436998 + ja short not_taken_ret_415 + xor rax, qword ptr [rsp + 8] + mov r12, rax + ret 8 +not_taken_ret_415: + mov r12, rax + +rx_i_416: ;FPDIV + dec edi + js rx_finish + xor r10, 0ac90e7ah + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm4 + movsd xmm3, xmm0 + +rx_i_417: ;FPMUL + dec edi + js rx_finish + xor r11, 04b6037abh + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm2 + mov eax, r12d + xor eax, 043989376h + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_418: ;AND_32 + dec edi + js rx_finish + xor r14, 06c01554dh + mov ecx, r14d + call rx_read_dataset + and eax, ebx + mov rcx, rax + mov eax, r10d + xor eax, 0e973b3b1h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_419: ;IMULH_64 + dec edi + js rx_finish + xor rbx, 08c3e59a1h + mov ecx, ebx + call rx_read_dataset + mov r8, rdx + mov rcx, -538093385 + imul rcx + mov rax, rdx + mov rdx, r8 + mov r9, rax + +rx_i_420: ;FPADD + dec edi + js rx_finish + xor r12, 0f3fafde9h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm3 + movsd xmm5, xmm0 + +rx_i_421: ;ADD_32 + dec edi + js rx_finish + xor r10, 03c6481fah + mov ecx, r10d + call rx_read_dataset + add eax, r12d + mov r10, rax + +rx_i_422: ;MUL_64 + dec edi + js rx_finish + xor r10, 02bd61c5fh + mov ecx, r10d + call rx_read_dataset + imul rax, r11 + mov r10, rax + +rx_i_423: ;OR_32 + dec edi + js rx_finish + xor r9, 0b6ab9d32h + mov ecx, r9d + call rx_read_dataset + or eax, r14d + mov rcx, rax + mov eax, r14d + xor eax, 0beeca8dbh + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_424: ;ROR_64 + dec edi + js rx_finish + xor r9, 0f9690ceah + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, r11 + ror rax, cl + mov r9, rax + +rx_i_425: ;CALL + dec edi + js rx_finish + xor r12, 01ada0f39h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp ebx, -1600409762 + jbe short taken_call_425 + mov r10, rax + jmp rx_i_426 +taken_call_425: + push rax + call rx_i_34 + +rx_i_426: ;IMUL_32 + dec edi + js rx_finish + xor r11, 04dd16ca4h + mov ecx, r11d + call rx_read_dataset + movsxd rcx, eax + movsxd rax, r10d + imul rax, rcx + mov r13, rax + +rx_i_427: ;SUB_64 + dec edi + js rx_finish + xor r12, 04df5ce05h + mov ecx, r12d + call rx_read_dataset + sub rax, r10 + mov rcx, rax + mov eax, r15d + xor eax, 0a5d40d0ah + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_428: ;FPADD + dec edi + js rx_finish + xor r13, 01ad12ce2h + mov ecx, r13d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm7 + movsd xmm1, xmm0 + +rx_i_429: ;IMUL_32 + dec edi + js rx_finish + xor rbx, 0a3c5391dh + mov ecx, ebx + call rx_read_dataset + movsxd rcx, eax + movsxd rax, r10d + imul rax, rcx + mov r14, rax + +rx_i_430: ;IMULH_64 + dec edi + js rx_finish + xor r12, 09dd55ba0h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r9 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r14d + xor eax, 0dcca31efh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_431: ;MULH_64 + dec edi + js rx_finish + xor r11, 0d6cae9aeh + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r11 + mul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r9d + xor eax, 0801190f4h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_432: ;RET + dec edi + js rx_finish + xor r11, 0f807a961h + mov eax, r11d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_432 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, ebx + xor eax, 0e3b86b2fh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_432: + mov rcx, rax + mov eax, ebx + xor eax, 0e3b86b2fh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_433: ;MUL_64 + dec edi + js rx_finish + xor r12, 0650a4102h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + imul rax, rax, 1990438276 + mov r15, rax + +rx_i_434: ;FPADD + dec edi + js rx_finish + xor r14, 019cc0e5h + mov ecx, r14d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4744016937443393536 + movd xmm9, rax + addsd xmm0, xmm9 + movsd xmm5, xmm0 + +rx_i_435: ;ROR_64 + dec edi + js rx_finish + xor r12, 0ed17ab58h + mov ecx, r12d + call rx_read_dataset + mov rcx, r13 + ror rax, cl + mov r13, rax + +rx_i_436: ;ADD_32 + dec edi + js rx_finish + xor r10, 01c3b321fh + mov ecx, r10d + call rx_read_dataset + add eax, r10d + mov rbx, rax + +rx_i_437: ;ADD_64 + dec edi + js rx_finish + xor r13, 0bbb88499h + mov ecx, r13d + call rx_read_dataset + add rax, r12 + mov rcx, rax + mov eax, r12d + xor eax, 04722b36fh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_438: ;FPMUL + dec edi + js rx_finish + xor r13, 0167edabdh + mov ecx, r13d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm3 + movsd xmm1, xmm0 + +rx_i_439: ;SUB_32 + dec edi + js rx_finish + xor r15, 0b940480ah + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + sub eax, r15d + mov rcx, rax + mov eax, r9d + xor eax, 0758605ffh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_440: ;FPADD + dec edi + js rx_finish + xor r15, 0bfc3ca8bh + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, -4481057281345060864 + movd xmm9, rax + addsd xmm0, xmm9 + movsd xmm7, xmm0 + +rx_i_441: ;FPMUL + dec edi + js rx_finish + xor rbx, 098a6bcf7h + mov ecx, ebx + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm3 + mov eax, ebx + xor eax, 025dac800h + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_442: ;FPMUL + dec edi + js rx_finish + xor r10, 0325b38ebh + mov ecx, r10d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm1 + mov eax, r12d + xor eax, 0b7c490eeh + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_443: ;XOR_64 + dec edi + js rx_finish + xor r13, 05e807e81h + mov ecx, r13d + call rx_read_dataset + xor rax, r15 + mov rcx, rax + mov eax, r10d + xor eax, 0b28e6e01h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_444: ;RET + dec edi + js rx_finish + xor r10, 062f83728h + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_444 + cmp r12d, 2127765370 + ja short not_taken_ret_444 + xor rax, qword ptr [rsp + 8] + mov r9, rax + ret 8 +not_taken_ret_444: + mov r9, rax + +rx_i_445: ;ADD_64 + dec edi + js rx_finish + xor r14, 0d18ec075h + mov ecx, r14d + call rx_read_dataset + add rax, 529736748 + mov rcx, rax + mov eax, r9d + xor eax, 01f93242ch + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_446: ;FPDIV + dec edi + js rx_finish + xor r14, 0a53dd1bh + mov ecx, r14d + call rx_read_dataset + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + divsd xmm0, xmm7 + mov eax, r11d + xor eax, 02fa7c0f6h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_447: ;RET + dec edi + js rx_finish + xor r14, 0232d1285h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_447 + cmp r12d, 1332855833 + ja short not_taken_ret_447 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r9d + xor eax, 04f71c419h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_447: + mov rcx, rax + mov eax, r9d + xor eax, 04f71c419h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_448: ;FPSUB + dec edi + js rx_finish + xor rbx, 042455dd8h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm7 + movsd xmm5, xmm0 + +rx_i_449: ;ADD_64 + dec edi + js rx_finish + xor r13, 09ae009b2h + mov ecx, r13d + call rx_read_dataset + add rax, r11 + mov rcx, rax + mov eax, r9d + xor eax, 084d1f575h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_450: ;MULH_64 + dec edi + js rx_finish + xor r12, 01734708eh + mov ecx, r12d + call rx_read_dataset + mov r8, rdx + mov rcx, r15 + mul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, r13d + xor eax, 03166163h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_451: ;FPADD + dec edi + js rx_finish + xor rbx, 01596d0e8h + mov ecx, ebx + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm7 + movsd xmm5, xmm0 + +rx_i_452: ;FPSUB + dec edi + js rx_finish + xor r9, 0390cfdb0h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm3 + mov eax, r9d + xor eax, 0a700e3f3h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_453: ;ROL_64 + dec edi + js rx_finish + xor rbx, 04f27744bh + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + rol rax, 28 + mov rbx, rax + +rx_i_454: ;ROL_64 + dec edi + js rx_finish + xor rbx, 04e2c76ffh + mov ecx, ebx + call rx_read_dataset + mov rcx, r12 + rol rax, cl + mov rcx, rax + mov eax, ebx + xor eax, 0f6de92ach + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_455: ;ADD_64 + dec edi + js rx_finish + xor rbx, 0c4d99ac9h + mov ecx, ebx + call rx_read_dataset + add rax, -287502157 + mov rbx, rax + +rx_i_456: ;RET + dec edi + js rx_finish + xor r13, 040130b88h + mov ecx, r13d + call rx_read_dataset + cmp rsp, rbp + je short not_taken_ret_456 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r11d + xor eax, 0e27dea25h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_456: + mov rcx, rax + mov eax, r11d + xor eax, 0e27dea25h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_457: ;IMULH_64 + dec edi + js rx_finish + xor r11, 0a2096aa4h + mov ecx, r11d + call rx_read_dataset + mov r8, rdx + mov rcx, r14 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rbx, rax + +rx_i_458: ;FPADD + dec edi + js rx_finish + xor r13, 081314291h + mov eax, r13d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4746671349487894528 + movd xmm9, rax + addsd xmm0, xmm9 + movsd xmm4, xmm0 + +rx_i_459: ;OR_32 + dec edi + js rx_finish + xor rbx, 059263cdbh + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or eax, r9d + mov rbx, rax + +rx_i_460: ;OR_64 + dec edi + js rx_finish + xor r9, 010e8fe6h + mov ecx, r9d + call rx_read_dataset + or rax, r11 + mov rcx, rax + mov eax, r9d + xor eax, 017f52c3fh + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_461: ;SUB_64 + dec edi + js rx_finish + xor r9, 09de1a3efh + mov ecx, r9d + call rx_read_dataset + sub rax, r10 + mov rcx, rax + mov eax, r10d + xor eax, 058584136h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_462: ;ROL_64 + dec edi + js rx_finish + xor r11, 05c79df6eh + mov ecx, r11d + call rx_read_dataset + rol rax, 22 + mov r14, rax + +rx_i_463: ;SUB_64 + dec edi + js rx_finish + xor r9, 0346f46adh + mov ecx, r9d + call rx_read_dataset + sub rax, 381354340 + mov rcx, rax + mov eax, r13d + xor eax, 016bb0164h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_464: ;ADD_64 + dec edi + js rx_finish + xor r11, 098ab71fch + mov ecx, r11d + call rx_read_dataset + add rax, r14 + mov rcx, rax + mov eax, r12d + xor eax, 0eb453a97h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_465: ;SHL_64 + dec edi + js rx_finish + xor r11, 0c814e926h + mov ecx, r11d + call rx_read_dataset + mov rcx, r13 + shl rax, cl + mov rcx, rax + mov eax, r12d + xor eax, 062ef5b99h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_466: ;ADD_64 + dec edi + js rx_finish + xor r10, 0c64b4a9eh + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, -1734323376 + mov r15, rax + +rx_i_467: ;ADD_64 + dec edi + js rx_finish + xor r9, 08c29341h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, r15 + mov r10, rax + +rx_i_468: ;MUL_64 + dec edi + js rx_finish + xor r12, 06ff587fdh + mov ecx, r12d + call rx_read_dataset + imul rax, r15 + mov rcx, rax + mov eax, r13d + xor eax, 0d0673df8h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_469: ;FPADD + dec edi + js rx_finish + xor r12, 0b62c0003h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm5 + mov eax, r10d + xor eax, 0d11c1242h + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_470: ;IMUL_32 + dec edi + js rx_finish + xor r13, 05c541c42h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + movsxd rcx, eax + mov rax, 282682508 + imul rax, rcx + mov r9, rax + +rx_i_471: ;FPADD + dec edi + js rx_finish + xor rbx, 0cbb33f81h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm1 + mov eax, ebx + xor eax, 0ad38e588h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_472: ;IMULH_64 + dec edi + js rx_finish + xor rbx, 091044dc3h + mov ecx, ebx + call rx_read_dataset + mov r8, rdx + mov rcx, -13394825 + imul rcx + mov rax, rdx + mov rdx, r8 + mov rcx, rax + mov eax, ebx + xor eax, 0ff339c77h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_473: ;MUL_32 + dec edi + js rx_finish + xor r9, 0c0186beh + mov ecx, r9d + call rx_read_dataset + mov ecx, eax + mov eax, 294019485 + imul rax, rcx + mov rcx, rax + mov eax, r9d + xor eax, 01186619dh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_474: ;XOR_64 + dec edi + js rx_finish + xor r14, 090849e3eh + mov ecx, r14d + call rx_read_dataset + xor rax, r11 + mov rcx, rax + mov eax, r14d + xor eax, 090d56b4ch + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_475: ;IMUL_32 + dec edi + js rx_finish + xor r14, 0cedba9b6h + mov eax, r14d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + movsxd rcx, eax + movsxd rax, r13d + imul rax, rcx + mov r14, rax + +rx_i_476: ;CALL + dec edi + js rx_finish + xor r9, 038f4b9d6h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + push rax + call rx_i_11 + +rx_i_477: ;MUL_64 + dec edi + js rx_finish + xor r14, 01fb7637dh + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + imul rax, rax, -751043211 + mov r12, rax + +rx_i_478: ;CALL + dec edi + js rx_finish + xor r9, 0b5c0b4d4h + mov ecx, r9d + call rx_read_dataset + cmp r15d, -233120543 + jbe short taken_call_478 + mov r15, rax + jmp rx_i_479 +taken_call_478: + push rax + call rx_i_72 + +rx_i_479: ;FPSUB + dec edi + js rx_finish + xor r10, 0910dcdeeh + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm1 + mov eax, r15d + xor eax, 04a936216h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_480: ;FPADD + dec edi + js rx_finish + xor rbx, 07ab3b5a4h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm2 + mov eax, r9d + xor eax, 0b01bb14ch + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_481: ;ROR_64 + dec edi + js rx_finish + xor r12, 07a29ec63h + mov eax, r12d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + ror rax, 15 + mov r14, rax + +rx_i_482: ;MUL_64 + dec edi + js rx_finish + xor r14, 02d3d7e7fh + mov ecx, r14d + call rx_read_dataset + imul rax, r10 + mov r12, rax + +rx_i_483: ;SUB_64 + dec edi + js rx_finish + xor r12, 09b49c793h + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + sub rax, r14 + mov rcx, rax + mov eax, r13d + xor eax, 0c42735ech + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_484: ;FPADD + dec edi + js rx_finish + xor r9, 0a9cc4f01h + mov eax, r9d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm4 + mov eax, r14d + xor eax, 0d8750eeh + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_485: ;IMULH_64 + dec edi + js rx_finish + xor r14, 0225ba1f9h + mov eax, r14d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, r13 + imul rcx + mov rax, rdx + mov rdx, r8 + mov r12, rax + +rx_i_486: ;OR_64 + dec edi + js rx_finish + xor r14, 044a0f592h + mov ecx, r14d + call rx_read_dataset + or rax, r12 + mov r11, rax + +rx_i_487: ;ROR_64 + dec edi + js rx_finish + xor r11, 07f71f219h + mov ecx, r11d + call rx_read_dataset + ror rax, 50 + mov rcx, rax + mov eax, r14d + xor eax, 0545908cah + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_488: ;SAR_64 + dec edi + js rx_finish + xor r12, 07027bacdh + mov ecx, r12d + call rx_read_dataset + sar rax, 37 + mov r11, rax + +rx_i_489: ;CALL + dec edi + js rx_finish + xor r13, 03a04647h + mov ecx, r13d + call rx_read_dataset + cmp ebx, 554879918 + jbe short taken_call_489 + mov rcx, rax + mov eax, r15d + xor eax, 02112cbaeh + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + jmp rx_i_490 +taken_call_489: + push rax + call rx_i_61 + +rx_i_490: ;ADD_64 + dec edi + js rx_finish + xor r15, 0ad072937h + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + add rax, 942846898 + mov rcx, rax + mov eax, ebx + xor eax, 03832b3b2h + and eax, 32767 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_491: ;SUB_64 + dec edi + js rx_finish + xor r11, 07f78ad34h + mov ecx, r11d + call rx_read_dataset + sub rax, -333279706 + mov r11, rax + +rx_i_492: ;IMULH_64 + dec edi + js rx_finish + xor r12, 0d8b1788eh + mov eax, r12d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov r8, rdx + mov rcx, 297357073 + imul rcx + mov rax, rdx + mov rdx, r8 + mov r12, rax + +rx_i_493: ;FPROUND + dec edi + js rx_finish + xor r10, 0b2ec9f3ah + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, rax + shl eax, 13 + and rcx, -2048 + and eax, 24576 + cvtsi2sd xmm0, rcx + or eax, 40896 + mov dword ptr [rsp - 8], eax + ldmxcsr dword ptr [rsp - 8] + mov eax, ebx + xor eax, 0bcd0a942h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_494: ;ROR_64 + dec edi + js rx_finish + xor r11, 015c7f598h + mov ecx, r11d + call rx_read_dataset + mov rcx, r9 + ror rax, cl + mov rcx, rax + mov eax, r15d + xor eax, 0ab8bd68h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_495: ;ROR_64 + dec edi + js rx_finish + xor rbx, 0902da6bdh + mov ecx, ebx + call rx_read_dataset + mov rcx, r9 + ror rax, cl + mov r15, rax + +rx_i_496: ;AND_64 + dec edi + js rx_finish + xor r9, 0491090d9h + mov ecx, r9d + call rx_read_dataset + and rax, r9 + mov r12, rax + +rx_i_497: ;FPSUB + dec edi + js rx_finish + xor rbx, 09de81282h + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4740027165670637568 + movd xmm9, rax + subsd xmm0, xmm9 + mov eax, r12d + xor eax, 02feb2fd7h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_498: ;MULH_64 + dec edi + js rx_finish + xor r10, 0b0d50e46h + mov ecx, r10d + call rx_read_dataset + mov r8, rdx + mov rcx, r11 + mul rcx + mov rax, rdx + mov rdx, r8 + mov r14, rax + +rx_i_499: ;FPMUL + dec edi + js rx_finish + xor r11, 0e276cad1h + mov eax, r11d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mov rax, 4739626697148596224 + movd xmm9, rax + mulsd xmm0, xmm9 + mov eax, ebx + xor eax, 02d12bd27h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_500: ;AND_64 + dec edi + js rx_finish + xor r14, 0fe757b73h + mov ecx, r14d + call rx_read_dataset + and rax, -359802064 + mov r9, rax + +rx_i_501: ;FPMUL + dec edi + js rx_finish + xor rbx, 08d25742eh + mov eax, ebx + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm3 + mov eax, ebx + xor eax, 0a800c041h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_502: ;FPMUL + dec edi + js rx_finish + xor r15, 0e066fd15h + mov eax, r15d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + or rax, 2048 + and rax, -2048 + cvtsi2sd xmm0, rax + mulsd xmm0, xmm1 + movsd xmm8, xmm0 + +rx_i_503: ;IMUL_32 + dec edi + js rx_finish + xor r12, 08925556bh + mov eax, r12d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + movsxd rcx, eax + mov rax, -1795485757 + imul rax, rcx + mov rbx, rax + +rx_i_504: ;FPSQRT + dec edi + js rx_finish + xor r10, 04bc870ebh + mov eax, r10d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + mov rcx, 9223372036854773760 + and rax, rcx + cvtsi2sd xmm0, rax + sqrtsd xmm0, xmm0 + mov eax, r10d + xor eax, 04a250342h + and eax, 32767 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_505: ;XOR_32 + dec edi + js rx_finish + xor rbx, 07d46c503h + mov ecx, ebx + call rx_read_dataset + xor eax, r10d + mov rcx, rax + mov eax, r12d + xor eax, 03e22874bh + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_506: ;RET + dec edi + js rx_finish + xor r10, 09e70b20ch + mov ecx, r10d + call rx_read_dataset + cmp rsp, rbp + je short not_taken_ret_506 + cmp r15d, 148394770 + ja short not_taken_ret_506 + xor rax, qword ptr [rsp + 8] + mov rcx, rax + mov eax, r9d + xor eax, 08d85312h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + ret 8 +not_taken_ret_506: + mov rcx, rax + mov eax, r9d + xor eax, 08d85312h + and eax, 2047 + mov qword ptr [rsi + rax * 8], rcx + +rx_i_507: ;FPSUB + dec edi + js rx_finish + xor r13, 0442e4850h + mov eax, r13d + and eax, 32767 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm2 + movsd xmm1, xmm0 + +rx_i_508: ;FPADD + dec edi + js rx_finish + xor r13, 099d48347h + mov eax, r13d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + and rax, -2048 + cvtsi2sd xmm0, rax + addsd xmm0, xmm1 + movsd xmm4, xmm0 + +rx_i_509: ;FPSUB + dec edi + js rx_finish + xor r12, 032c0a28ah + mov ecx, r12d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm4 + movsd xmm8, xmm0 + +rx_i_510: ;FPSUB + dec edi + js rx_finish + xor r9, 0a973d58ch + mov ecx, r9d + call rx_read_dataset + and rax, -2048 + cvtsi2sd xmm0, rax + subsd xmm0, xmm1 + mov eax, r11d + xor eax, 05e890759h + and eax, 2047 + movd qword ptr [rsi + rax * 8], xmm0 + +rx_i_511: ;RET + dec edi + js rx_finish + xor r10, 0d3b7165ch + mov eax, r10d + and eax, 2047 + mov rax, qword ptr [rsi + rax * 8] + cmp rsp, rbp + je short not_taken_ret_511 + cmp r11d, -260506265 + ja short not_taken_ret_511 + xor rax, qword ptr [rsp + 8] + mov r14, rax + ret 8 +not_taken_ret_511: + mov r14, rax + + jmp rx_i_0