Created
September 2, 2025 07:34
-
-
Save kkent030315/fdc33fb97e852549678874322ceb1309 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ; ModuleID = 'lifted_code' | |
| source_filename = "lifted_code" | |
| target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" | |
| target triple = "x86_64-unknown-windows-msvc-coff" | |
| %struct.State = type { %struct.X86State } | |
| %struct.X86State = type { %struct.ArchState, [32 x %union.VectorReg], %struct.ArithFlags, %union.anon, %struct.Segments, %struct.AddressSpace, %struct.GPR, %struct.X87Stack, %struct.MMX, %struct.FPUStatusFlags, %union.anon, %union.FPU, %struct.SegmentCaches, %struct.K_REG } | |
| %struct.ArchState = type { i32, i32, %union.anon } | |
| %union.VectorReg = type { %union.vec512_t } | |
| %union.vec512_t = type { %struct.uint64v8_t } | |
| %struct.uint64v8_t = type { [8 x i64] } | |
| %struct.ArithFlags = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 } | |
| %struct.Segments = type { i16, %union.SegmentSelector, i16, %union.SegmentSelector, i16, %union.SegmentSelector, i16, %union.SegmentSelector, i16, %union.SegmentSelector, i16, %union.SegmentSelector } | |
| %union.SegmentSelector = type { i16 } | |
| %struct.AddressSpace = type { i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg } | |
| %struct.Reg = type { %union.anon } | |
| %struct.GPR = type { i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg } | |
| %struct.X87Stack = type { [8 x %struct.anon.3] } | |
| %struct.anon.3 = type { [6 x i8], %struct.float80_t } | |
| %struct.float80_t = type { [10 x i8] } | |
| %struct.MMX = type { [8 x %struct.anon.4] } | |
| %struct.anon.4 = type { i64, %union.vec64_t } | |
| %union.vec64_t = type { %struct.uint64v1_t } | |
| %struct.uint64v1_t = type { [1 x i64] } | |
| %struct.FPUStatusFlags = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] } | |
| %union.anon = type { i64 } | |
| %union.FPU = type { %struct.anon.13 } | |
| %struct.anon.13 = type { %struct.FpuFXSAVE, [96 x i8] } | |
| %struct.FpuFXSAVE = type { %union.SegmentSelector, %union.SegmentSelector, %union.FPUAbridgedTagWord, i8, i16, i32, %union.SegmentSelector, i16, i32, %union.SegmentSelector, i16, %union.FPUControlStatus, %union.FPUControlStatus, [8 x %struct.FPUStackElem], [16 x %union.vec128_t] } | |
| %union.FPUAbridgedTagWord = type { i8 } | |
| %union.FPUControlStatus = type { i32 } | |
| %struct.FPUStackElem = type { %union.anon.11, [6 x i8] } | |
| %union.anon.11 = type { %struct.float80_t } | |
| %union.vec128_t = type { %struct.uint128v1_t } | |
| %struct.uint128v1_t = type { [1 x i128] } | |
| %struct.SegmentCaches = type { %struct.SegmentShadow, %struct.SegmentShadow, %struct.SegmentShadow, %struct.SegmentShadow, %struct.SegmentShadow, %struct.SegmentShadow } | |
| %struct.SegmentShadow = type { %union.anon, i32, i32 } | |
| %struct.K_REG = type { [8 x %struct.anon.18] } | |
| %struct.anon.18 = type { i64, i64 } | |
| define ptr @sub_0(ptr noalias %state, i64 %program_counter, ptr noalias %memory) { | |
| %state.addr.i = alloca ptr, align 8 | |
| %mem.addr.i = alloca ptr, align 8 | |
| %call.addr.i = alloca i32, align 4 | |
| %rsp.i = alloca i64, align 8 | |
| %rbp.i = alloca i64, align 8 | |
| %r8.i = alloca i64, align 8 | |
| %r9.i = alloca i64, align 8 | |
| %r10.i = alloca i64, align 8 | |
| %r11.i = alloca i64, align 8 | |
| %r12.i = alloca i64, align 8 | |
| %r13.i = alloca i64, align 8 | |
| %r14.i = alloca i64, align 8 | |
| %r15.i = alloca i64, align 8 | |
| %read.i = alloca i64, align 8 | |
| %gdtr.i = alloca ptr, align 8 | |
| %read61.i = alloca i64, align 8 | |
| %idtr.i = alloca ptr, align 8 | |
| %BRANCH_TAKEN = alloca i8, align 1 | |
| %RETURN_PC = alloca i64, align 8 | |
| %MONITOR = alloca i64, align 8 | |
| %STATE = alloca ptr, align 8 | |
| store ptr %state, ptr %STATE, align 8 | |
| %MEMORY = alloca ptr, align 8 | |
| store ptr %memory, ptr %MEMORY, align 8 | |
| %NEXT_PC = alloca i64, align 8 | |
| store i64 %program_counter, ptr %NEXT_PC, align 8 | |
| %PC = getelementptr inbounds %struct.State, ptr %state, i32 0, i32 0, i32 6, i32 33, i32 0, i32 0 | |
| %CSBASE = alloca i64, align 8 | |
| store i64 0, ptr %CSBASE, align 8 | |
| %SSBASE = alloca i64, align 8 | |
| store i64 0, ptr %SSBASE, align 8 | |
| %ESBASE = alloca i64, align 8 | |
| store i64 0, ptr %ESBASE, align 8 | |
| %DSBASE = alloca i64, align 8 | |
| store i64 0, ptr %DSBASE, align 8 | |
| store i64 %program_counter, ptr %NEXT_PC, align 8 | |
| br label %1 | |
| 1: ; preds = %0 | |
| %2 = load i64, ptr %NEXT_PC, align 8 | |
| store i64 %2, ptr %PC, align 8 | |
| %3 = add i64 %2, 2 | |
| store i64 %3, ptr %NEXT_PC, align 8 | |
| %4 = load ptr, ptr %MEMORY, align 8 | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %state.addr.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %mem.addr.i) | |
| call void @llvm.lifetime.start.p0(i64 4, ptr %call.addr.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %rsp.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %rbp.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %r8.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %r9.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %r10.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %r11.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %r12.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %r13.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %r14.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %r15.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %read.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %gdtr.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %read61.i) | |
| call void @llvm.lifetime.start.p0(i64 8, ptr %idtr.i) | |
| store ptr %state, ptr %state.addr.i, align 8 | |
| store ptr %4, ptr %mem.addr.i, align 8 | |
| store i32 258, ptr %call.addr.i, align 4 | |
| %5 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr.i = getelementptr inbounds %struct.X86State, ptr %5, i32 0, i32 6 | |
| %rsp1.i = getelementptr inbounds %struct.GPR, ptr %gpr.i, i32 0, i32 13 | |
| %6 = load i64, ptr %rsp1.i, align 8 | |
| store i64 %6, ptr %rsp.i, align 8 | |
| %7 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr2.i = getelementptr inbounds %struct.X86State, ptr %7, i32 0, i32 6 | |
| %rbp3.i = getelementptr inbounds %struct.GPR, ptr %gpr2.i, i32 0, i32 15 | |
| %8 = load i64, ptr %rbp3.i, align 8 | |
| store i64 %8, ptr %rbp.i, align 8 | |
| %9 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr4.i = getelementptr inbounds %struct.X86State, ptr %9, i32 0, i32 6 | |
| %r85.i = getelementptr inbounds %struct.GPR, ptr %gpr4.i, i32 0, i32 17 | |
| %10 = load i64, ptr %r85.i, align 8 | |
| store i64 %10, ptr %r8.i, align 8 | |
| %11 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr6.i = getelementptr inbounds %struct.X86State, ptr %11, i32 0, i32 6 | |
| %r97.i = getelementptr inbounds %struct.GPR, ptr %gpr6.i, i32 0, i32 19 | |
| %12 = load i64, ptr %r97.i, align 8 | |
| store i64 %12, ptr %r9.i, align 8 | |
| %13 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr8.i = getelementptr inbounds %struct.X86State, ptr %13, i32 0, i32 6 | |
| %r109.i = getelementptr inbounds %struct.GPR, ptr %gpr8.i, i32 0, i32 21 | |
| %14 = load i64, ptr %r109.i, align 8 | |
| store i64 %14, ptr %r10.i, align 8 | |
| %15 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr10.i = getelementptr inbounds %struct.X86State, ptr %15, i32 0, i32 6 | |
| %r1111.i = getelementptr inbounds %struct.GPR, ptr %gpr10.i, i32 0, i32 23 | |
| %16 = load i64, ptr %r1111.i, align 8 | |
| store i64 %16, ptr %r11.i, align 8 | |
| %17 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr12.i = getelementptr inbounds %struct.X86State, ptr %17, i32 0, i32 6 | |
| %r1213.i = getelementptr inbounds %struct.GPR, ptr %gpr12.i, i32 0, i32 25 | |
| %18 = load i64, ptr %r1213.i, align 8 | |
| store i64 %18, ptr %r12.i, align 8 | |
| %19 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr14.i = getelementptr inbounds %struct.X86State, ptr %19, i32 0, i32 6 | |
| %r1315.i = getelementptr inbounds %struct.GPR, ptr %gpr14.i, i32 0, i32 27 | |
| %20 = load i64, ptr %r1315.i, align 8 | |
| store i64 %20, ptr %r13.i, align 8 | |
| %21 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr16.i = getelementptr inbounds %struct.X86State, ptr %21, i32 0, i32 6 | |
| %r1417.i = getelementptr inbounds %struct.GPR, ptr %gpr16.i, i32 0, i32 29 | |
| %22 = load i64, ptr %r1417.i, align 8 | |
| store i64 %22, ptr %r14.i, align 8 | |
| %23 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr18.i = getelementptr inbounds %struct.X86State, ptr %23, i32 0, i32 6 | |
| %r1519.i = getelementptr inbounds %struct.GPR, ptr %gpr18.i, i32 0, i32 31 | |
| %24 = load i64, ptr %r1519.i, align 8 | |
| store i64 %24, ptr %r15.i, align 8 | |
| %25 = load i32, ptr %call.addr.i, align 4 | |
| switch i32 %25, label %sw.default.i [ | |
| i32 258, label %sw.bb.i | |
| i32 259, label %sw.bb35.i | |
| i32 260, label %sw.bb42.i | |
| i32 261, label %sw.bb58.i | |
| i32 262, label %sw.bb60.i | |
| i32 263, label %sw.bb63.i | |
| i32 264, label %sw.bb70.i | |
| i32 265, label %sw.bb77.i | |
| i32 266, label %sw.bb78.i | |
| i32 267, label %sw.bb80.i | |
| i32 268, label %sw.bb82.i | |
| i32 269, label %sw.bb84.i | |
| i32 270, label %sw.bb86.i | |
| i32 272, label %sw.bb88.i | |
| i32 278, label %sw.bb90.i | |
| i32 279, label %sw.bb92.i | |
| i32 280, label %sw.bb94.i | |
| i32 281, label %sw.bb96.i | |
| i32 282, label %sw.bb98.i | |
| i32 283, label %sw.bb100.i | |
| i32 284, label %sw.bb102.i | |
| i32 285, label %sw.bb117.i | |
| i32 286, label %sw.bb134.i | |
| ] | |
| sw.bb.i: ; preds = %1 | |
| %26 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr20.i = getelementptr inbounds %struct.X86State, ptr %26, i32 0, i32 6 | |
| %rax.i = getelementptr inbounds %struct.GPR, ptr %gpr20.i, i32 0, i32 1 | |
| %27 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr21.i = getelementptr inbounds %struct.X86State, ptr %27, i32 0, i32 6 | |
| %rbx.i = getelementptr inbounds %struct.GPR, ptr %gpr21.i, i32 0, i32 3 | |
| %28 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr22.i = getelementptr inbounds %struct.X86State, ptr %28, i32 0, i32 6 | |
| %rcx.i = getelementptr inbounds %struct.GPR, ptr %gpr22.i, i32 0, i32 5 | |
| %29 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr23.i = getelementptr inbounds %struct.X86State, ptr %29, i32 0, i32 6 | |
| %rdx.i = getelementptr inbounds %struct.GPR, ptr %gpr23.i, i32 0, i32 7 | |
| %30 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr24.i = getelementptr inbounds %struct.X86State, ptr %30, i32 0, i32 6 | |
| %rax25.i = getelementptr inbounds %struct.GPR, ptr %gpr24.i, i32 0, i32 1 | |
| %31 = load i64, ptr %rax25.i, align 8 | |
| %32 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr26.i = getelementptr inbounds %struct.X86State, ptr %32, i32 0, i32 6 | |
| %rbx27.i = getelementptr inbounds %struct.GPR, ptr %gpr26.i, i32 0, i32 3 | |
| %33 = load i64, ptr %rbx27.i, align 8 | |
| %34 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr28.i = getelementptr inbounds %struct.X86State, ptr %34, i32 0, i32 6 | |
| %rcx29.i = getelementptr inbounds %struct.GPR, ptr %gpr28.i, i32 0, i32 5 | |
| %35 = load i64, ptr %rcx29.i, align 8 | |
| %36 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr30.i = getelementptr inbounds %struct.X86State, ptr %36, i32 0, i32 6 | |
| %rdx31.i = getelementptr inbounds %struct.GPR, ptr %gpr30.i, i32 0, i32 7 | |
| %37 = load i64, ptr %rdx31.i, align 8 | |
| %38 = call { i64, i64, i64, i64 } asm sideeffect "cpuid", "={ax},={bx},={cx},={dx},{ax},{bx},{cx},{dx},~{dirflag},~{fpsr},~{flags}"(i64 %31, i64 %33, i64 %35, i64 %37) #4 | |
| %asmresult.i = extractvalue { i64, i64, i64, i64 } %38, 0 | |
| %asmresult32.i = extractvalue { i64, i64, i64, i64 } %38, 1 | |
| %asmresult33.i = extractvalue { i64, i64, i64, i64 } %38, 2 | |
| %asmresult34.i = extractvalue { i64, i64, i64, i64 } %38, 3 | |
| store i64 %asmresult.i, ptr %rax.i, align 8 | |
| store i64 %asmresult32.i, ptr %rbx.i, align 8 | |
| store i64 %asmresult33.i, ptr %rcx.i, align 8 | |
| store i64 %asmresult34.i, ptr %rdx.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb35.i: ; preds = %1 | |
| %39 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr36.i = getelementptr inbounds %struct.X86State, ptr %39, i32 0, i32 6 | |
| %rax37.i = getelementptr inbounds %struct.GPR, ptr %gpr36.i, i32 0, i32 1 | |
| %40 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr38.i = getelementptr inbounds %struct.X86State, ptr %40, i32 0, i32 6 | |
| %rdx39.i = getelementptr inbounds %struct.GPR, ptr %gpr38.i, i32 0, i32 7 | |
| %41 = call { i32, i32 } asm sideeffect "rdtsc", "={ax},={dx},~{dirflag},~{fpsr},~{flags}"() #4 | |
| %asmresult40.i = extractvalue { i32, i32 } %41, 0 | |
| %asmresult41.i = extractvalue { i32, i32 } %41, 1 | |
| store i32 %asmresult40.i, ptr %rax37.i, align 8 | |
| store i32 %asmresult41.i, ptr %rdx39.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb42.i: ; preds = %1 | |
| %42 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr43.i = getelementptr inbounds %struct.X86State, ptr %42, i32 0, i32 6 | |
| %rax44.i = getelementptr inbounds %struct.GPR, ptr %gpr43.i, i32 0, i32 1 | |
| %43 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr45.i = getelementptr inbounds %struct.X86State, ptr %43, i32 0, i32 6 | |
| %rcx46.i = getelementptr inbounds %struct.GPR, ptr %gpr45.i, i32 0, i32 5 | |
| %44 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr47.i = getelementptr inbounds %struct.X86State, ptr %44, i32 0, i32 6 | |
| %rdx48.i = getelementptr inbounds %struct.GPR, ptr %gpr47.i, i32 0, i32 7 | |
| %45 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr49.i = getelementptr inbounds %struct.X86State, ptr %45, i32 0, i32 6 | |
| %rax50.i = getelementptr inbounds %struct.GPR, ptr %gpr49.i, i32 0, i32 1 | |
| %46 = load i64, ptr %rax50.i, align 8 | |
| %47 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr51.i = getelementptr inbounds %struct.X86State, ptr %47, i32 0, i32 6 | |
| %rcx52.i = getelementptr inbounds %struct.GPR, ptr %gpr51.i, i32 0, i32 5 | |
| %48 = load i64, ptr %rcx52.i, align 8 | |
| %49 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr53.i = getelementptr inbounds %struct.X86State, ptr %49, i32 0, i32 6 | |
| %rdx54.i = getelementptr inbounds %struct.GPR, ptr %gpr53.i, i32 0, i32 7 | |
| %50 = load i64, ptr %rdx54.i, align 8 | |
| %51 = call { i64, i64, i64 } asm sideeffect "rdtscp", "={ax},={cx},={dx},{ax},{cx},{dx},~{dirflag},~{fpsr},~{flags}"(i64 %46, i64 %48, i64 %50) #4 | |
| %asmresult55.i = extractvalue { i64, i64, i64 } %51, 0 | |
| %asmresult56.i = extractvalue { i64, i64, i64 } %51, 1 | |
| %asmresult57.i = extractvalue { i64, i64, i64 } %51, 2 | |
| store i64 %asmresult55.i, ptr %rax44.i, align 8 | |
| store i64 %asmresult56.i, ptr %rcx46.i, align 8 | |
| store i64 %asmresult57.i, ptr %rdx48.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb58.i: ; preds = %1 | |
| %52 = load ptr, ptr %mem.addr.i, align 8 | |
| %53 = load ptr, ptr %state.addr.i, align 8 | |
| %54 = getelementptr inbounds %struct.ArchState, ptr %53, i32 0, i32 2 | |
| %55 = load i64, ptr %54, align 8 | |
| %call59.i = call i64 @__remill_read_memory_64(ptr noundef %52, i64 noundef %55) #5 | |
| store i64 %call59.i, ptr %read.i, align 8 | |
| store ptr %read.i, ptr %gdtr.i, align 8 | |
| call void asm sideeffect "lgdt $0", "*m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(ptr) %gdtr.i) #4 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb60.i: ; preds = %1 | |
| %56 = load ptr, ptr %mem.addr.i, align 8 | |
| %57 = load ptr, ptr %state.addr.i, align 8 | |
| %58 = getelementptr inbounds %struct.ArchState, ptr %57, i32 0, i32 2 | |
| %59 = load i64, ptr %58, align 8 | |
| %call62.i = call i64 @__remill_read_memory_64(ptr noundef %56, i64 noundef %59) #5 | |
| store i64 %call62.i, ptr %read61.i, align 8 | |
| store ptr %read61.i, ptr %idtr.i, align 8 | |
| call void asm sideeffect "lidt $0", "*m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(ptr) %idtr.i) #4 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb63.i: ; preds = %1 | |
| %60 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr64.i = getelementptr inbounds %struct.X86State, ptr %60, i32 0, i32 6 | |
| %rcx65.i = getelementptr inbounds %struct.GPR, ptr %gpr64.i, i32 0, i32 5 | |
| %61 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr66.i = getelementptr inbounds %struct.X86State, ptr %61, i32 0, i32 6 | |
| %rax67.i = getelementptr inbounds %struct.GPR, ptr %gpr66.i, i32 0, i32 1 | |
| %62 = load i32, ptr %rax67.i, align 8 | |
| %63 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr68.i = getelementptr inbounds %struct.X86State, ptr %63, i32 0, i32 6 | |
| %rdx69.i = getelementptr inbounds %struct.GPR, ptr %gpr68.i, i32 0, i32 7 | |
| %64 = load i32, ptr %rdx69.i, align 8 | |
| %65 = call i32 asm sideeffect "rdmsr", "={cx},{ax},{dx},~{dirflag},~{fpsr},~{flags}"(i32 %62, i32 %64) #4 | |
| store i32 %65, ptr %rcx65.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb70.i: ; preds = %1 | |
| %66 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr71.i = getelementptr inbounds %struct.X86State, ptr %66, i32 0, i32 6 | |
| %rcx72.i = getelementptr inbounds %struct.GPR, ptr %gpr71.i, i32 0, i32 5 | |
| %67 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr73.i = getelementptr inbounds %struct.X86State, ptr %67, i32 0, i32 6 | |
| %rax74.i = getelementptr inbounds %struct.GPR, ptr %gpr73.i, i32 0, i32 1 | |
| %68 = load i32, ptr %rax74.i, align 8 | |
| %69 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr75.i = getelementptr inbounds %struct.X86State, ptr %69, i32 0, i32 6 | |
| %rdx76.i = getelementptr inbounds %struct.GPR, ptr %gpr75.i, i32 0, i32 7 | |
| %70 = load i32, ptr %rdx76.i, align 8 | |
| %71 = call i32 asm sideeffect "wrmsr", "={cx},{ax},{dx},~{dirflag},~{fpsr},~{flags}"(i32 %68, i32 %70) #4 | |
| store i32 %71, ptr %rcx72.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb77.i: ; preds = %1 | |
| call void asm sideeffect "wbinvd", "~{dirflag},~{fpsr},~{flags}"() #4 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb78.i: ; preds = %1 | |
| %72 = load ptr, ptr %mem.addr.i, align 8 | |
| %call79.i = call ptr @__remill_x86_set_segment_es(ptr noundef %72) #6 | |
| store ptr %call79.i, ptr %mem.addr.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb80.i: ; preds = %1 | |
| %73 = load ptr, ptr %mem.addr.i, align 8 | |
| %call81.i = call ptr @__remill_x86_set_segment_ss(ptr noundef %73) #6 | |
| store ptr %call81.i, ptr %mem.addr.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb82.i: ; preds = %1 | |
| %74 = load ptr, ptr %mem.addr.i, align 8 | |
| %call83.i = call ptr @__remill_x86_set_segment_ds(ptr noundef %74) #6 | |
| store ptr %call83.i, ptr %mem.addr.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb84.i: ; preds = %1 | |
| %75 = load ptr, ptr %mem.addr.i, align 8 | |
| %call85.i = call ptr @__remill_x86_set_segment_fs(ptr noundef %75) #6 | |
| store ptr %call85.i, ptr %mem.addr.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb86.i: ; preds = %1 | |
| %76 = load ptr, ptr %mem.addr.i, align 8 | |
| %call87.i = call ptr @__remill_x86_set_segment_gs(ptr noundef %76) #6 | |
| store ptr %call87.i, ptr %mem.addr.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb88.i: ; preds = %1 | |
| %77 = load ptr, ptr %mem.addr.i, align 8 | |
| %call89.i = call ptr @__remill_amd64_set_debug_reg(ptr noundef %77) #6 | |
| store ptr %call89.i, ptr %mem.addr.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb90.i: ; preds = %1 | |
| %78 = load ptr, ptr %mem.addr.i, align 8 | |
| %call91.i = call ptr @__remill_amd64_set_control_reg_0(ptr noundef %78) #6 | |
| store ptr %call91.i, ptr %mem.addr.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb92.i: ; preds = %1 | |
| %79 = load ptr, ptr %mem.addr.i, align 8 | |
| %call93.i = call ptr @__remill_amd64_set_control_reg_1(ptr noundef %79) #6 | |
| store ptr %call93.i, ptr %mem.addr.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb94.i: ; preds = %1 | |
| %80 = load ptr, ptr %mem.addr.i, align 8 | |
| %call95.i = call ptr @__remill_amd64_set_control_reg_2(ptr noundef %80) #6 | |
| store ptr %call95.i, ptr %mem.addr.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb96.i: ; preds = %1 | |
| %81 = load ptr, ptr %mem.addr.i, align 8 | |
| %call97.i = call ptr @__remill_amd64_set_control_reg_3(ptr noundef %81) #6 | |
| store ptr %call97.i, ptr %mem.addr.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb98.i: ; preds = %1 | |
| %82 = load ptr, ptr %mem.addr.i, align 8 | |
| %call99.i = call ptr @__remill_amd64_set_control_reg_4(ptr noundef %82) #6 | |
| store ptr %call99.i, ptr %mem.addr.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb100.i: ; preds = %1 | |
| %83 = load ptr, ptr %mem.addr.i, align 8 | |
| %call101.i = call ptr @__remill_amd64_set_control_reg_8(ptr noundef %83) #6 | |
| store ptr %call101.i, ptr %mem.addr.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb102.i: ; preds = %1 | |
| %84 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr103.i = getelementptr inbounds %struct.X86State, ptr %84, i32 0, i32 6 | |
| %rax104.i = getelementptr inbounds %struct.GPR, ptr %gpr103.i, i32 0, i32 1 | |
| %85 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr105.i = getelementptr inbounds %struct.X86State, ptr %85, i32 0, i32 6 | |
| %rax106.i = getelementptr inbounds %struct.GPR, ptr %gpr105.i, i32 0, i32 1 | |
| %86 = load i64, ptr %rax106.i, align 8 | |
| %87 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr107.i = getelementptr inbounds %struct.X86State, ptr %87, i32 0, i32 6 | |
| %rbx108.i = getelementptr inbounds %struct.GPR, ptr %gpr107.i, i32 0, i32 3 | |
| %88 = load i64, ptr %rbx108.i, align 8 | |
| %89 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr109.i = getelementptr inbounds %struct.X86State, ptr %89, i32 0, i32 6 | |
| %rcx110.i = getelementptr inbounds %struct.GPR, ptr %gpr109.i, i32 0, i32 5 | |
| %90 = load i64, ptr %rcx110.i, align 8 | |
| %91 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr111.i = getelementptr inbounds %struct.X86State, ptr %91, i32 0, i32 6 | |
| %rdx112.i = getelementptr inbounds %struct.GPR, ptr %gpr111.i, i32 0, i32 7 | |
| %92 = load i64, ptr %rdx112.i, align 8 | |
| %93 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr113.i = getelementptr inbounds %struct.X86State, ptr %93, i32 0, i32 6 | |
| %rsi.i = getelementptr inbounds %struct.GPR, ptr %gpr113.i, i32 0, i32 9 | |
| %94 = load i64, ptr %rsi.i, align 8 | |
| %95 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr114.i = getelementptr inbounds %struct.X86State, ptr %95, i32 0, i32 6 | |
| %rdi.i = getelementptr inbounds %struct.GPR, ptr %gpr114.i, i32 0, i32 11 | |
| %96 = load i64, ptr %rdi.i, align 8 | |
| %97 = load i64, ptr %rsp.i, align 8 | |
| %98 = load i64, ptr %rbp.i, align 8 | |
| %99 = load i64, ptr %r8.i, align 8 | |
| %100 = load i64, ptr %r9.i, align 8 | |
| %101 = load i64, ptr %r10.i, align 8 | |
| %102 = load i64, ptr %r11.i, align 8 | |
| %103 = load i64, ptr %r12.i, align 8 | |
| %104 = load i64, ptr %r13.i, align 8 | |
| %105 = load i64, ptr %r14.i, align 8 | |
| %106 = load i64, ptr %r15.i, align 8 | |
| %107 = call { i64, i64 } asm sideeffect "syscall", "={ax},={rsp},{ax},{bx},{cx},{dx},{si},{di},{rsp},{rbp},{r8},{r9},{r10},{r11},{r12},{r13},{r14},{r15},~{dirflag},~{fpsr},~{flags}"(i64 %86, i64 %88, i64 %90, i64 %92, i64 %94, i64 %96, i64 %97, i64 %98, i64 %99, i64 %100, i64 %101, i64 %102, i64 %103, i64 %104, i64 %105, i64 %106) #4 | |
| %asmresult115.i = extractvalue { i64, i64 } %107, 0 | |
| %asmresult116.i = extractvalue { i64, i64 } %107, 1 | |
| store i64 %asmresult115.i, ptr %rax104.i, align 8 | |
| store i64 %asmresult116.i, ptr %rsp.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb117.i: ; preds = %1 | |
| %108 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr118.i = getelementptr inbounds %struct.X86State, ptr %108, i32 0, i32 6 | |
| %rax119.i = getelementptr inbounds %struct.GPR, ptr %gpr118.i, i32 0, i32 1 | |
| %109 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr120.i = getelementptr inbounds %struct.X86State, ptr %109, i32 0, i32 6 | |
| %rax121.i = getelementptr inbounds %struct.GPR, ptr %gpr120.i, i32 0, i32 1 | |
| %110 = load i64, ptr %rax121.i, align 8 | |
| %111 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr122.i = getelementptr inbounds %struct.X86State, ptr %111, i32 0, i32 6 | |
| %rbx123.i = getelementptr inbounds %struct.GPR, ptr %gpr122.i, i32 0, i32 3 | |
| %112 = load i64, ptr %rbx123.i, align 8 | |
| %113 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr124.i = getelementptr inbounds %struct.X86State, ptr %113, i32 0, i32 6 | |
| %rcx125.i = getelementptr inbounds %struct.GPR, ptr %gpr124.i, i32 0, i32 5 | |
| %114 = load i64, ptr %rcx125.i, align 8 | |
| %115 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr126.i = getelementptr inbounds %struct.X86State, ptr %115, i32 0, i32 6 | |
| %rdx127.i = getelementptr inbounds %struct.GPR, ptr %gpr126.i, i32 0, i32 7 | |
| %116 = load i64, ptr %rdx127.i, align 8 | |
| %117 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr128.i = getelementptr inbounds %struct.X86State, ptr %117, i32 0, i32 6 | |
| %rsi129.i = getelementptr inbounds %struct.GPR, ptr %gpr128.i, i32 0, i32 9 | |
| %118 = load i64, ptr %rsi129.i, align 8 | |
| %119 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr130.i = getelementptr inbounds %struct.X86State, ptr %119, i32 0, i32 6 | |
| %rdi131.i = getelementptr inbounds %struct.GPR, ptr %gpr130.i, i32 0, i32 11 | |
| %120 = load i64, ptr %rdi131.i, align 8 | |
| %121 = load i64, ptr %rsp.i, align 8 | |
| %122 = load i64, ptr %rbp.i, align 8 | |
| %123 = load i64, ptr %r8.i, align 8 | |
| %124 = load i64, ptr %r9.i, align 8 | |
| %125 = load i64, ptr %r10.i, align 8 | |
| %126 = load i64, ptr %r11.i, align 8 | |
| %127 = load i64, ptr %r12.i, align 8 | |
| %128 = load i64, ptr %r13.i, align 8 | |
| %129 = load i64, ptr %r14.i, align 8 | |
| %130 = load i64, ptr %r15.i, align 8 | |
| %131 = call { i64, i64 } asm sideeffect "sysenter", "={ax},={rsp},{ax},{bx},{cx},{dx},{si},{di},{rsp},{rbp},{r8},{r9},{r10},{r11},{r12},{r13},{r14},{r15},~{dirflag},~{fpsr},~{flags}"(i64 %110, i64 %112, i64 %114, i64 %116, i64 %118, i64 %120, i64 %121, i64 %122, i64 %123, i64 %124, i64 %125, i64 %126, i64 %127, i64 %128, i64 %129, i64 %130) #4 | |
| %asmresult132.i = extractvalue { i64, i64 } %131, 0 | |
| %asmresult133.i = extractvalue { i64, i64 } %131, 1 | |
| store i64 %asmresult132.i, ptr %rax119.i, align 8 | |
| store i64 %asmresult133.i, ptr %rsp.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.bb134.i: ; preds = %1 | |
| %132 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr135.i = getelementptr inbounds %struct.X86State, ptr %132, i32 0, i32 6 | |
| %rax136.i = getelementptr inbounds %struct.GPR, ptr %gpr135.i, i32 0, i32 1 | |
| %133 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr137.i = getelementptr inbounds %struct.X86State, ptr %133, i32 0, i32 6 | |
| %rax138.i = getelementptr inbounds %struct.GPR, ptr %gpr137.i, i32 0, i32 1 | |
| %134 = load i64, ptr %rax138.i, align 8 | |
| %135 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr139.i = getelementptr inbounds %struct.X86State, ptr %135, i32 0, i32 6 | |
| %rbx140.i = getelementptr inbounds %struct.GPR, ptr %gpr139.i, i32 0, i32 3 | |
| %136 = load i64, ptr %rbx140.i, align 8 | |
| %137 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr141.i = getelementptr inbounds %struct.X86State, ptr %137, i32 0, i32 6 | |
| %rcx142.i = getelementptr inbounds %struct.GPR, ptr %gpr141.i, i32 0, i32 5 | |
| %138 = load i64, ptr %rcx142.i, align 8 | |
| %139 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr143.i = getelementptr inbounds %struct.X86State, ptr %139, i32 0, i32 6 | |
| %rdx144.i = getelementptr inbounds %struct.GPR, ptr %gpr143.i, i32 0, i32 7 | |
| %140 = load i64, ptr %rdx144.i, align 8 | |
| %141 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr145.i = getelementptr inbounds %struct.X86State, ptr %141, i32 0, i32 6 | |
| %rsi146.i = getelementptr inbounds %struct.GPR, ptr %gpr145.i, i32 0, i32 9 | |
| %142 = load i64, ptr %rsi146.i, align 8 | |
| %143 = load ptr, ptr %state.addr.i, align 8 | |
| %gpr147.i = getelementptr inbounds %struct.X86State, ptr %143, i32 0, i32 6 | |
| %rdi148.i = getelementptr inbounds %struct.GPR, ptr %gpr147.i, i32 0, i32 11 | |
| %144 = load i64, ptr %rdi148.i, align 8 | |
| %145 = load i64, ptr %rsp.i, align 8 | |
| %146 = load i64, ptr %rbp.i, align 8 | |
| %147 = load i64, ptr %r8.i, align 8 | |
| %148 = load i64, ptr %r9.i, align 8 | |
| %149 = load i64, ptr %r10.i, align 8 | |
| %150 = load i64, ptr %r11.i, align 8 | |
| %151 = load i64, ptr %r12.i, align 8 | |
| %152 = load i64, ptr %r13.i, align 8 | |
| %153 = load i64, ptr %r14.i, align 8 | |
| %154 = load i64, ptr %r15.i, align 8 | |
| %155 = call { i64, i64 } asm sideeffect "sysexit", "={ax},={rsp},{ax},{bx},{cx},{dx},{si},{di},{rsp},{rbp},{r8},{r9},{r10},{r11},{r12},{r13},{r14},{r15},~{dirflag},~{fpsr},~{flags}"(i64 %134, i64 %136, i64 %138, i64 %140, i64 %142, i64 %144, i64 %145, i64 %146, i64 %147, i64 %148, i64 %149, i64 %150, i64 %151, i64 %152, i64 %153, i64 %154) #4 | |
| %asmresult149.i = extractvalue { i64, i64 } %155, 0 | |
| %asmresult150.i = extractvalue { i64, i64 } %155, 1 | |
| store i64 %asmresult149.i, ptr %rax136.i, align 8 | |
| store i64 %asmresult150.i, ptr %rsp.i, align 8 | |
| br label %__remill_sync_hyper_call.exit | |
| sw.default.i: ; preds = %1 | |
| unreachable | |
| __remill_sync_hyper_call.exit: ; preds = %sw.bb134.i, %sw.bb117.i, %sw.bb102.i, %sw.bb100.i, %sw.bb98.i, %sw.bb96.i, %sw.bb94.i, %sw.bb92.i, %sw.bb90.i, %sw.bb88.i, %sw.bb86.i, %sw.bb84.i, %sw.bb82.i, %sw.bb80.i, %sw.bb78.i, %sw.bb77.i, %sw.bb70.i, %sw.bb63.i, %sw.bb60.i, %sw.bb58.i, %sw.bb42.i, %sw.bb35.i, %sw.bb.i | |
| %156 = load ptr, ptr %mem.addr.i, align 8 | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %state.addr.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %mem.addr.i) | |
| call void @llvm.lifetime.end.p0(i64 4, ptr %call.addr.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %rsp.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %rbp.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %r8.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %r9.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %r10.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %r11.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %r12.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %r13.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %r14.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %r15.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %read.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %gdtr.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %read61.i) | |
| call void @llvm.lifetime.end.p0(i64 8, ptr %idtr.i) | |
| store ptr %156, ptr %MEMORY, align 8 | |
| br label %157 | |
| 157: ; preds = %__remill_sync_hyper_call.exit | |
| %158 = load i64, ptr %NEXT_PC, align 8 | |
| store i64 %158, ptr %PC, align 8 | |
| %159 = load ptr, ptr %MEMORY, align 8 | |
| %160 = load i64, ptr %PC, align 8 | |
| %161 = tail call ptr @__remill_missing_block(ptr %state, i64 %160, ptr %159) | |
| ret ptr %161 | |
| } | |
| ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) | |
| declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0 | |
| ; Function Attrs: noduplicate noinline nounwind optnone | |
| declare i64 @__remill_read_memory_64(ptr noundef, i64 noundef) #1 | |
| declare ptr @__remill_x86_set_segment_es(ptr noundef) #2 | |
| declare ptr @__remill_x86_set_segment_ss(ptr noundef) #2 | |
| declare ptr @__remill_x86_set_segment_ds(ptr noundef) #2 | |
| declare ptr @__remill_x86_set_segment_fs(ptr noundef) #2 | |
| declare ptr @__remill_x86_set_segment_gs(ptr noundef) #2 | |
| declare ptr @__remill_amd64_set_debug_reg(ptr noundef) #2 | |
| declare ptr @__remill_amd64_set_control_reg_0(ptr noundef) #2 | |
| declare ptr @__remill_amd64_set_control_reg_1(ptr noundef) #2 | |
| declare ptr @__remill_amd64_set_control_reg_2(ptr noundef) #2 | |
| declare ptr @__remill_amd64_set_control_reg_3(ptr noundef) #2 | |
| declare ptr @__remill_amd64_set_control_reg_4(ptr noundef) #2 | |
| declare ptr @__remill_amd64_set_control_reg_8(ptr noundef) #2 | |
| ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) | |
| declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0 | |
| ; Function Attrs: noduplicate noinline nounwind optnone | |
| declare ptr @__remill_missing_block(ptr noundef nonnull align 1, i64 noundef, ptr noundef) #3 | |
| attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } | |
| attributes #1 = { noduplicate noinline nounwind optnone "no-builtins" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "tune-cpu"="generic" } | |
| attributes #2 = { "frame-pointer"="all" "no-builtins" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "tune-cpu"="generic" } | |
| attributes #3 = { noduplicate noinline nounwind optnone "frame-pointer"="all" "no-builtins" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "tune-cpu"="generic" } | |
| attributes #4 = { nounwind } | |
| attributes #5 = { nobuiltin "no-builtins" } | |
| attributes #6 = { nobuiltin nounwind "no-builtins" } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment