diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 768cecd70344555251e9804264de991adce657c1..16309f651ed7cde44530739d4e291fd687cc942c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,25 +27,20 @@ jobs: strategy: fail-fast: false matrix: - platform: [X64, OTHER_ARM, RISCV, RPI4ARM64, RPI5ARM64, RK3326, RK3399, RK3588, PHYTIUM, SD845, SD888, ADLINK, ARM64, ANDROID, TERMUX, LARCH64] - type: [Release, Trace, StaticBuild] + platform: [X64, RISCV, RK3588, ARM64, ANDROID, TERMUX, LARCH64] + type: [Release, Trace, StaticBuild, Box32] os: [ubuntu-latest] - include: - - platform: TEGRAX1 - type: Release - os: ubuntu-20.04 - - platform: TEGRAX1 - type: Trace - os: ubuntu-20.04 exclude: - - platform: TEGRAX1 - type: StaticBuild - platform: ANDROID type: StaticBuild - platform: TERMUX type: StaticBuild - platform: X64 type: StaticBuild + - platform: ANDROID + type: Box32 + - platform: TERMUX + type: Box32 runs-on: ${{ matrix.os }} steps: @@ -55,7 +50,7 @@ jobs: - name: "Environment preparation" run: | sudo apt-get update - if [[ ${{ matrix.platform }} != 'X64' && ${{ matrix.platform }} != 'OTHER_ARM' && ${{ matrix.platform }} != 'RISCV' && ${{ matrix.platform }} != 'LARCH64' ]]; then + if [[ ${{ matrix.platform }} != 'X64' && ${{ matrix.platform }} != 'RISCV' && ${{ matrix.platform }} != 'LARCH64' ]]; then sudo apt-get -y install git cmake make python3 if [[ ${{ matrix.platform }} == 'ANDROID' || ${{ matrix.platform }} == 'TERMUX' ]]; then wget https://dl.google.com/android/repository/android-ndk-r26b-linux.zip @@ -93,7 +88,7 @@ jobs: elif [[ ${{ matrix.platform }} == 'RISCV' ]]; then echo BOX64_PLATFORM_MARCRO="-DRV64=ON" >> $GITHUB_ENV echo "BOX64_COMPILER=riscv64-linux-gnu-gcc" >> $GITHUB_ENV - sudo apt-get -y install git gcc-riscv64-linux-gnu cmake make python3 + sudo apt-get -y install git gcc-riscv64-linux-gnu cmake make python3 ninja-build elif [[ ${{ matrix.platform }} == 'LARCH64' ]]; then sudo mkdir /usr/local/larch wget -O- -q https://github.com/loongson/build-tools/releases/download/2023.08.08/CLFS-loongarch64-8.1-x86_64-cross-tools-gcc-glibc.tar.xz | sudo tar -C /usr/local/larch --strip-components=1 --xz -xf - @@ -119,16 +114,54 @@ jobs: echo BOX64_BUILD_TYPE=Release >> $GITHUB_ENV echo BOX64_HAVE_TRACE=0 >> $GITHUB_ENV echo BOX64_STATICBUILD=0 >> $GITHUB_ENV + echo BOX64_BOX32=0 >> $GITHUB_ENV elif [[ ${{ matrix.type }} == 'StaticBuild' ]]; then echo BOX64_BUILD_TYPE=Release >> $GITHUB_ENV echo BOX64_HAVE_TRACE=0 >> $GITHUB_ENV echo BOX64_STATICBUILD=1 >> $GITHUB_ENV + echo BOX64_BOX32=0 >> $GITHUB_ENV + elif [[ ${{ matrix.type }} == 'Box32' ]]; then + echo BOX64_BUILD_TYPE=Release >> $GITHUB_ENV + echo BOX64_HAVE_TRACE=0 >> $GITHUB_ENV + echo BOX64_STATICBUILD=0 >> $GITHUB_ENV + echo BOX64_BOX32=1 >> $GITHUB_ENV else echo BOX64_BUILD_TYPE=RelWithDebInfo >> $GITHUB_ENV echo BOX64_HAVE_TRACE=1 >> $GITHUB_ENV echo BOX64_STATICBUILD=0 >> $GITHUB_ENV + echo BOX64_BOX32=0 >> $GITHUB_ENV fi + - name: "Get XuanTie QEMU Cache Key" + if: matrix.platform == 'RISCV' + id: get-xuantie-qemu-cache-key + run: | + echo "key=f2dfdd13014d51f957c7172acc2e791cb42dc400" >> $GITHUB_OUTPUT + + - name: "Cache XuanTie QEMU" + if: matrix.platform == 'RISCV' + id: cache-xuantie-qemu + uses: actions/cache@v3 + with: + path: ${{ github.workspace }}/xuantie_qemu_install + key: ${{ runner.os }}-${{ steps.get-xuantie-qemu-cache-key.outputs.key }}-xuantie-qemu + + - name: "Checkout XuanTie QEMU" + if: matrix.platform == 'RISCV' && steps.cache-xuantie-qemu.outputs.cache-hit != 'true' + uses: actions/checkout@v3 + with: + repository: revyos/qemu + path: xuantie_qemu + ref: f2dfdd13014d51f957c7172acc2e791cb42dc400 + + - name: "Build XuanTie QEMU for XTheadVector" + if: matrix.platform == 'RISCV' && steps.cache-xuantie-qemu.outputs.cache-hit != 'true' + run: | + cd xuantie_qemu + ./configure --prefix=$GITHUB_WORKSPACE/xuantie_qemu_install --target-list=riscv64-linux-user --disable-system + make -j$(nproc) + make install + - name: "Display Build info" run: | echo "CMake Platform Macro: ${{ env.BOX64_PLATFORM_MARCRO }}" @@ -136,6 +169,7 @@ jobs: echo "Build type: ${{ env.BOX64_BUILD_TYPE }}" echo "Trace Enabled: ${{ env.BOX64_HAVE_TRACE }}" echo "StaticBuild Enabled: ${{ env.BOX64_STATICBUILD }}" + echo "Box32 Enabled: ${{ env.BOX64_BOX32 }}" - name: "Build Box64" run: | @@ -147,43 +181,71 @@ jobs: -DCMAKE_BUILD_TYPE=${{ env.BOX64_BUILD_TYPE }}\ -DHAVE_TRACE=${{ env.BOX64_HAVE_TRACE }}\ -DSTATICBUILD=${{ env.BOX64_STATICBUILD }}\ + -DBOX32=${{ env.BOX64_BOX32 }}\ -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON\ -DCI=${{ matrix.platform != 'ANDROID' }} make -j$(nproc) VERBOSE=1 - name: "Test Box64" - if: ${{ matrix.platform != 'TEGRAX1' }} run: | if [[ ${{ matrix.platform }} != 'X64' ]]; then - mkdir qemu9.0.0 - wget -O- -q https://archive.archlinux.org/packages/q/qemu-user-static/qemu-user-static-9.0.0-1-x86_64.pkg.tar.zst | tar -I zstd -C qemu9.0.0 -xf - - sudo cp qemu9.0.0/usr/bin/* /usr/bin/ + mkdir qemu9 + wget -O- -q https://archive.archlinux.org/packages/q/qemu-user-static/qemu-user-static-9.0.2-1-x86_64.pkg.tar.zst | tar -I zstd -C qemu9 -xf - + sudo cp qemu9/usr/bin/* /usr/bin/ fi cd build + export CTEST_OPTIONS="-j$(nproc) --timeout 60 --output-on-failure --repeat until-pass:20" if [[ ${{ matrix.platform }} == 'RISCV' ]]; then - INTERPRETER=qemu-riscv64-static QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ ctest -j$(nproc) --output-on-failure - INTERPRETER=qemu-riscv64-static QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ QEMU_CPU=rv64,v=false BOX64_DYNAREC=0 ctest -j$(nproc) --output-on-failure - INTERPRETER=qemu-riscv64-static QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ QEMU_CPU=rv64,v=false,zba=true,zbb=true,zbc=true,zbs=true ctest -j$(nproc) --output-on-failure - INTERPRETER=qemu-riscv64-static QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ QEMU_CPU=rv64,v=true,vlen=128,vext_spec=v1.0 ctest -j$(nproc) --output-on-failure - INTERPRETER=qemu-riscv64-static QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ QEMU_CPU=rv64,v=true,vlen=256,vext_spec=v1.0 ctest -j$(nproc) --output-on-failure - INTERPRETER=qemu-riscv64-static QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ QEMU_CPU=rv64,v=false,xtheadba=true,xtheadba=true,xtheadbb=true,xtheadbs=true,xtheadcondmov=true,xtheadmemidx=true,xtheadmempair=true,xtheadfmemidx=true,xtheadmac=true,xtheadfmv=true ctest -j$(nproc) --output-on-failure + export INTERPRETER=qemu-riscv64-static + export QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ + + ctest $CTEST_OPTIONS + QEMU_CPU=rv64,v=false BOX64_DYNAREC=0 ctest $CTEST_OPTIONS + QEMU_CPU=rv64,v=false,zba=true,zbb=true,zbc=true,zbs=true ctest $CTEST_OPTIONS + QEMU_CPU=rv64,v=true,vlen=128,vext_spec=v1.0 ctest $CTEST_OPTIONS + QEMU_CPU=rv64,v=true,vlen=256,vext_spec=v1.0 ctest $CTEST_OPTIONS + QEMU_CPU=thead-c906 ctest $CTEST_OPTIONS + + BOX64_DYNAREC_TEST=1 ctest $CTEST_OPTIONS -E nocosim + BOX64_DYNAREC_TEST=1 QEMU_CPU=rv64,v=false,zba=true,zbb=true,zbc=true,zbs=true ctest $CTEST_OPTIONS -E nocosim + BOX64_DYNAREC_TEST=1 QEMU_CPU=rv64,v=true,vlen=128,vext_spec=v1.0 ctest $CTEST_OPTIONS -E nocosim + BOX64_DYNAREC_TEST=1 QEMU_CPU=rv64,v=true,vlen=256,vext_spec=v1.0 ctest $CTEST_OPTIONS -E nocosim + BOX64_DYNAREC_TEST=1 QEMU_CPU=thead-c906 ctest $CTEST_OPTIONS -E nocosim + + export INTERPRETER=$GITHUB_WORKSPACE/xuantie_qemu_install/bin/qemu-riscv64 + QEMU_CPU=c910v ctest $CTEST_OPTIONS + BOX64_DYNAREC_TEST=1 QEMU_CPU=c910v ctest $CTEST_OPTIONS -E nocosim elif [[ ${{ matrix.platform }} == 'LARCH64' ]]; then - INTERPRETER=qemu-loongarch64-static QEMU_LD_PREFIX=/usr/loongarch64-linux-gnu/ BOX64_DYNAREC_LA64NOEXT=1 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure - INTERPRETER=qemu-loongarch64-static QEMU_LD_PREFIX=/usr/loongarch64-linux-gnu/ BOX64_DYNAREC_TEST=2 BOX64_DYNAREC_LA64NOEXT=1 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure - INTERPRETER=qemu-loongarch64-static QEMU_LD_PREFIX=/usr/loongarch64-linux-gnu/ BOX64_DYNAREC=0 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure + export INTERPRETER=qemu-loongarch64-static + export QEMU_LD_PREFIX=/usr/loongarch64-linux-gnu/ + + BOX64_DYNAREC_LA64NOEXT=1 ctest $CTEST_OPTIONS -E nocosim + BOX64_DYNAREC=0 ctest $CTEST_OPTIONS -E nocosim + + BOX64_DYNAREC_TEST=1 BOX64_DYNAREC_LA64NOEXT=1 ctest $CTEST_OPTIONS -E nocosim elif [[ ${{ matrix.platform }} == 'ANDROID' ]]; then - INTERPRETER=qemu-aarch64-static QEMU_LD_PREFIX=/system/lib64 BOX64_DYNAREC=0 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure - INTERPRETER=qemu-aarch64-static QEMU_LD_PREFIX=/system/lib64 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure + export INTERPRETER=qemu-aarch64-static + export QEMU_LD_PREFIX=/system/lib64 + + BOX64_DYNAREC=0 ctest $CTEST_OPTIONS + ctest $CTEST_OPTIONS elif [[ ${{ matrix.platform }} == 'TERMUX' ]]; then - INTERPRETER=qemu-aarch64-static QEMU_SET_ENV=LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib QEMU_LD_PREFIX=/system/lib64:/data/data/com.termux/files/usr/lib BOX64_DYNAREC=0 ctest -j$(nproc) --repeat until-pass:20 --output-on-failure - INTERPRETER=qemu-aarch64-static QEMU_SET_ENV=LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib QEMU_LD_PREFIX=/system/lib64:/data/data/com.termux/files/usr/lib ctest -j$(nproc) --repeat until-pass:20 --output-on-failure + export INTERPRETER=qemu-aarch64-static + export QEMU_SET_ENV=LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib + export QEMU_LD_PREFIX=/system/lib64:/data/data/com.termux/files/usr/lib + + BOX64_DYNAREC=0 ctest $CTEST_OPTIONS + ctest $CTEST_OPTIONS elif [[ ${{ matrix.platform }} != 'X64' ]]; then # AArch64 - INTERPRETER=qemu-aarch64-static QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/ BOX64_DYNAREC=0 ctest -j$(nproc) --output-on-failure - INTERPRETER=qemu-aarch64-static QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/ ctest -j$(nproc) --output-on-failure - INTERPRETER=qemu-aarch64-static QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/ BOX64_DYNAREC_TEST=2 ctest -j$(nproc) --output-on-failure + export INTERPRETER=qemu-aarch64-static + export QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/ + + BOX64_DYNAREC=0 ctest $CTEST_OPTIONS + ctest $CTEST_OPTIONS + BOX64_DYNAREC_TEST=1 ctest $CTEST_OPTIONS -E nocosim else - ctest -j$(nproc) --output-on-failure + ctest -j$(nproc) fi - name: "Upload Artifact" diff --git a/.gitignore b/.gitignore index 140a80eb08d1a458bb6d7f3724abde7b0af2cd61..8d8f4989a67baa217d66a246844621b3d7e87ce4 100644 --- a/.gitignore +++ b/.gitignore @@ -60,11 +60,16 @@ build*/ src/git_head.h backup/ -# LLVMprivateGenerator -/LLVMprivateGenerator/* -!/LLVMprivateGenerator/Makefile -!/LLVMprivateGenerator/main.cpp -!/LLVMprivateGenerator/registered_structs.cpp +# Wrapper helper +/wrapperhelper/bin +/wrapperhelper/makedir +/wrapperhelper/obj +/wrapperhelper/sanaddress +/wrapperhelper/sanleak +/wrapperhelper/sanundefined +/wrapperhelper/src/machine.gen +/wrapperhelper/*.h +!/wrapperhelper/example-libc.h # macOS .DS_Store diff --git a/CMakeLists.txt b/CMakeLists.txt index e3e36a53af9bd81788f4a830d291f87f9e90807b..79fd1176c4dca7b9a77c25058d5dcad85b348159 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,8 +17,10 @@ option(TEGRA_T194 "Set to ON if targeting an Tegra Xavier based device" ${TEGRA_ option(TEGRA_T234 "Set to ON if targeting an Tegra Orin based device" ${TEGRA_T234}) option(PHYTIUM "Set to ON if targeting an Phytium (D2000 or FT2000/4) based device" ${PHYTIUM}) option(SD845 "Set to ON if targeting a Snapragon 845 based device" ${SD845}) +option(SD865 "Set to ON if targeting a Snapragon 865 based device" ${SD865}) option(SD888 "Set to ON if targeting a Snapragon 888 based device" ${SD888}) option(SD8G2 "Set to ON if targeting a Snapragon 8 Gen 2 based device" ${SD8G2}) +option(SDORYON1 "Set to ON if targeting a Snapdragon Oryon 1 (X1E80100/X1E78100) based device" ${SDORYON1}) option(ADLINK "Set to ON if targeting an ADLink AmpereAltra based device" ${ADLINK}) option(M1 "Set to ON if targeting a AppleM1 running on Asahi computer" ${M1}) option(LARCH64 "Set to ON if targeting an Loongarch64 based device" ${LARCH64}) @@ -28,6 +30,7 @@ option(LX2160A "Set to ON if targeting an LX2160A based device" ${LX2160A}) option(ARM64 "Set to ON if targeting a generic ARM64 based device" ${ARM64}) option(ANDROID "Set to ON if targeting an Android device" ${ANDROID}) option(TERMUX "Set to ON if targeting an Android device with Termux" ${TERMUX}) +option(WINECE "Set to ON if supports Wine-CE" ${WINECE}) option(USE_CCACHE "Set to ON to use ccache if present in the system" ${USE_CCACHE}) option(HAVE_TRACE "Set to ON to have Trace ability (needs ZydisInfo library)" ${HAVE_TRACE}) option(SAVE_MEM "Set to ON to build dynarec with some slower memory saving optimisations" ${SAVE_MEM}) @@ -37,6 +40,8 @@ option(BAD_SIGNAL "Set to ON to activate the workaround for incoherent si_info o option(SW64 "Set ON if targeting an SW64 based device" ${SW64}) option(CI "Set to ON if running in CI" ${CI}) option(WITH_MOLD "Set to ON to use with mold" ${WITH_MOLD}) +option(BOX32 "Set to ON to add Linux 32bits support (experimental, do not use)" ${BO64}) +option(BOX32_BINFMT "Also setup binfmt integration for box32" ${BO64_BINFMT}) if(TERMUX) set(TERMUX_PATH "/data/data/com.termux/files") @@ -63,7 +68,7 @@ if(PPC64LE) set(RV64_DYNAREC OFF CACHE BOOL "") set(LARCH64_DYNAREC OFF CACHE BOOL "") endif() -if(RK3399 OR RK3588 OR ODROIDN2 OR RPI3ARM64 OR RPI4ARM64 OR RPI5ARM64 OR RK3326 OR TEGRAX1 OR TEGRA_T194 OR TEGRA_T234 OR PHYTIUM OR SD845 OR SD888 OR SD8G2 OR LX2160A OR M1 OR ARM64 OR ADLINK) +if(RK3399 OR RK3588 OR ODROIDN2 OR RPI3ARM64 OR RPI4ARM64 OR RPI5ARM64 OR RK3326 OR TEGRAX1 OR TEGRA_T194 OR TEGRA_T234 OR PHYTIUM OR SD845 OR SD865 OR SD888 OR SD8G2 OR SDORYON1 OR LX2160A OR M1 OR ARM64 OR ADLINK) set(LD80BITS OFF CACHE BOOL "") set(NOALIGN OFF CACHE BOOL "") set(ARM_DYNAREC ON CACHE BOOL "") @@ -173,6 +178,11 @@ elseif(SD845) add_definitions(-DSD845) add_definitions(-pipe -march=armv8.2-a+simd+crypto -mtune=cortex-a75.cortex-a55) set(CMAKE_ASM_FLAGS "-pipe -march=armv8.2-a+simd+crypto -mtune=cortex-a75.cortex-a55") +elseif(SD865) + add_definitions(-DSD865) + #note that cortex-a77.cortex-a55 is not supported, so fall back to a76 instead + add_definitions(-pipe -march=armv8.2-a+simd+crypto -mtune=cortex-a76.cortex-a55) + set(CMAKE_ASM_FLAGS "-pipe -march=armv8.2-a+simd+crypto -mtune=cortex-a76.cortex-a55") elseif(SD888) add_definitions(-DSD888) add_definitions(-pipe -march=armv8.4-a+simd+crypto) @@ -181,6 +191,24 @@ elseif(SD8G2) add_definitions(-DSD8G2) add_definitions(-pipe -march=armv9-a+i8mm+sm4+sha3+rcpc+crypto+nosve+nosve2) set(CMAKE_ASM_FLAGS "-pipe -march=armv9-a+i8mm+sm4+sha3+rcpc+crypto+nosve+nosve2") +elseif(SDORYON1) + add_definitions(-DSDORYON1) + # NOTE + # + # 1. + # GCC 14 and Clang 19 support oryon-1 as a -mcpu/-mtune argument, + # however it seems like fedora (the system I tested this on) does not work. + # see https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/AArch64-Options.html if you're interested + # + # 2. + # gcc/gcc/config/aarch64/aarch64-cores.def:157 defines oryon1 as + # AARCH64_CORE("oryon-1", oryon1, cortexa57, V8_6A, (CRYPTO, SM4, SHA3, F16), cortexa72, 0x51, 0x001, -1) + # where + # * the 3rd positional argument is represented as the "scheduler" + # * the 6th positional argument is represented as the "cost" + # I've chosen the a57 because I don't know if I should choose the a72 + add_definitions(-pipe -march=armv8.6-a+crypto+sm4+sha3+fp16 -mtune=cortex-a57) + set(CMAKE_ASM_FLAGS "-pipe -march=armv8.6-a+crypto+sm4+sha3+fp16 -mtune=cortex-a57") elseif(ADLINK) add_definitions(-DADLINK) add_definitions(-pipe -mcpu=neoverse-n1 -fuse-ld=gold -fuse-linker-plugin) @@ -217,6 +245,9 @@ endif() if(TERMUX) add_definitions(-DTERMUX) endif() +if(WINECE) + add_definitions(-DWINECE) +endif() if(BAD_SIGNAL) add_definitions(-DBAD_SIGNAL) endif() @@ -231,6 +262,10 @@ if(STATICBUILD) set(CMAKE_EXE_LINKER_FLAGS "-static") set(HAVE_TRACE OFF) endif() +if(BOX32) + add_definitions(-DBOX32) + add_definitions(-Wno-address-of-packed-member) #32bits might generated unaligned pointers +endif() if(NOGIT) add_definitions(-DNOGIT) @@ -244,6 +279,9 @@ endif() #set(BOX64_ELF_ADDRESS "0x500062800000") #random load address... set(BOX64_ELF_ADDRESS "0x34800000") #low address +if(WINECE) + set(BOX64_ELF_ADDRESS "0x100000000") #low address +endif() if(LD80BITS) add_definitions(-DHAVE_LD80BITS) @@ -298,6 +336,11 @@ include_directories( "${BOX64_ROOT}/src" "${BOX64_ROOT}/src/wrapped/generated" ) +if(BOX32) + include_directories( + "${BOX64_ROOT}/src/wrapped32/generated" + ) +endif() # git_head.h is a generated file set_source_files_properties( @@ -326,7 +369,6 @@ set(ELFLOADER_SRC "${BOX64_ROOT}/src/emu/x64run_private.c" "${BOX64_ROOT}/src/emu/x64shaext.c" "${BOX64_ROOT}/src/emu/x64syscall.c" - "${BOX64_ROOT}/src/emu/x86syscall.c" "${BOX64_ROOT}/src/emu/x64tls.c" "${BOX64_ROOT}/src/emu/x64trace.c" "${BOX64_ROOT}/src/librarian/librarian.c" @@ -359,11 +401,44 @@ if(NOT STATICBUILD) "${BOX64_ROOT}/src/librarian/globalsymbols.c" ) endif() +if(BOX32) + list(APPEND ELFLOADER_SRC + "${BOX64_ROOT}/src/box32.c" + "${BOX64_ROOT}/src/elfs/elfhash32.c" + "${BOX64_ROOT}/src/elfs/elfloader32.c" + "${BOX64_ROOT}/src/elfs/elfparser32.c" + "${BOX64_ROOT}/src/elfs/elfload_dump32.c" + "${BOX64_ROOT}/src/tools/box32stack.c" + "${BOX64_ROOT}/src/emu/x86int3.c" + "${BOX64_ROOT}/src/librarian/globalsymbols32.c" + "${BOX64_ROOT}/src/libtools/myalign32.c" + "${BOX64_ROOT}/src/libtools/myalign64_32.c" + "${BOX64_ROOT}/src/libtools/signal32.c" + "${BOX64_ROOT}/src/libtools/threads32.c" + "${BOX64_ROOT}/src/libtools/libc_net32.c" + "${BOX64_ROOT}/src/libtools/sdl1align32.c" + "${BOX64_ROOT}/src/libtools/sdl2align32.c" + "${BOX64_ROOT}/src/libtools/my_x11_conv.c" + "${BOX64_ROOT}/src/libtools/my_x11_xevent.c" + "${BOX64_ROOT}/src/emu/x86syscall_32.c" + "${BOX64_ROOT}/src/wrapped32/generated/wrapper32.c" + "${BOX64_ROOT}/src/wrapped32/generated/converter32.c" + ) +else() + list(APPEND ELFLOADER_SRC + "${BOX64_ROOT}/src/emu/x86syscall.c" + ) +endif() if(NOT ANDROID) list(APPEND ELFLOADER_SRC "${BOX64_ROOT}/src/libtools/obstack.c" ) endif() +if(WINECE) + list(APPEND ELFLOADER_SRC + "${BOX64_ROOT}/src/emu/ca11c0de.c" + ) +endif() set(INTERPRETER "${BOX64_ROOT}/src/emu/x64run.c" @@ -497,6 +572,7 @@ set(WRAPPEDS "${BOX64_ROOT}/src/wrapped/wrappedlibcups.c" "${BOX64_ROOT}/src/wrapped/wrappedlibdl.c" "${BOX64_ROOT}/src/wrapped/wrappedlibdrm.c" + "${BOX64_ROOT}/src/wrapped/wrappedlibdrmamdgpu.c" "${BOX64_ROOT}/src/wrapped/wrappedlibegl.c" "${BOX64_ROOT}/src/wrapped/wrappedlibform.c" "${BOX64_ROOT}/src/wrapped/wrappedlibformw.c" @@ -538,6 +614,7 @@ set(WRAPPEDS "${BOX64_ROOT}/src/wrapped/wrappedlibx11.c" "${BOX64_ROOT}/src/wrapped/wrappedlibx11xcb.c" "${BOX64_ROOT}/src/wrapped/wrappedlibxau.c" + "${BOX64_ROOT}/src/wrapped/wrappedlibxaw.c" "${BOX64_ROOT}/src/wrapped/wrappedlibxcb.c" "${BOX64_ROOT}/src/wrapped/wrappedlibxcbcursor.c" "${BOX64_ROOT}/src/wrapped/wrappedlibxcbdri2.c" @@ -649,6 +726,8 @@ set(WRAPPEDS "${BOX64_ROOT}/src/wrapped/wrappedicui18n73.c" "${BOX64_ROOT}/src/wrapped/wrappedicuuc74.c" "${BOX64_ROOT}/src/wrapped/wrappedicui18n74.c" + "${BOX64_ROOT}/src/wrapped/wrappedicuuc75.c" + "${BOX64_ROOT}/src/wrapped/wrappedicui18n75.c" "${BOX64_ROOT}/src/wrapped/wrappedidn2.c" "${BOX64_ROOT}/src/wrapped/wrappedanl.c" "${BOX64_ROOT}/src/wrapped/wrappedpsl5.c" @@ -660,6 +739,7 @@ set(WRAPPEDS "${BOX64_ROOT}/src/wrapped/wrappedlibhogweed6.c" "${BOX64_ROOT}/src/wrapped/wrappedlibsqlite3.c" "${BOX64_ROOT}/src/wrapped/wrappedlibtiff5.c" + "${BOX64_ROOT}/src/wrapped/wrappedbrotlidec.c" ) endif() if(ANDROID) @@ -712,6 +792,82 @@ endif () add_custom_target(WRAPPERS DEPENDS "${BOX64_ROOT}/src/wrapped/generated/functions_list.txt") #add_custom_target(PRINTER DEPENDS "${BOX64_ROOT}/src/dynarec/last_run.txt") +if(BOX32) + if(STATICBUILD) + set(WRAPPEDS32 + "${BOX64_ROOT}/src/wrapped32/wrappedldlinux.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibc.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibdl.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibm.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibpthread.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibrt.c" + ) + else() + set(WRAPPEDS32 + "${BOX64_ROOT}/src/wrapped32/wrappedldlinux.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibc.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibdl.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibm.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibpthread.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibrt.c" + "${BOX64_ROOT}/src/wrapped32/wrappedcrashhandler.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibgl.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibglu.c" + "${BOX64_ROOT}/src/wrapped32/wrappedsdl1.c" + "${BOX64_ROOT}/src/wrapped32/wrappedsdl2.c" + "${BOX64_ROOT}/src/wrapped32/wrappedsdl2image.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibasound.c" + "${BOX64_ROOT}/src/wrapped32/wrappedopenal.c" + "${BOX64_ROOT}/src/wrapped32/wrappedfreetype.c" + "${BOX64_ROOT}/src/wrapped32/wrappedfontconfig.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibx11.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibxext.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibxfixes.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibxrender.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibxi.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibxcomposite.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibxcursor.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibxrandr.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibxss.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibxxf86vm.c" + "${BOX64_ROOT}/src/wrapped32/wrappedxinerama.c" + "${BOX64_ROOT}/src/wrapped32/wrappedexpat.c" + "${BOX64_ROOT}/src/wrapped32/wrappedudev0.c" + "${BOX64_ROOT}/src/wrapped32/wrappedudev1.c" + "${BOX64_ROOT}/src/wrapped32/wrappedlibuuid.c" + "${BOX64_ROOT}/src/wrapped32/wrappedtcmallocminimal.c" + ) + endif() + string(REPLACE ".c" "_private.h" MODROOT ${BOX64_ROOT}) + #set(WRAPPEDS32_HEAD "${BOX64_ROOT}/src/wrapped/wrappedd3dadapter9_genvate.h") + foreach(A ${WRAPPEDS32}) + string(REPLACE ".c" "_private.h" C ${A}) + string(REPLACE "${MODROOT}" "${BOX64_ROOT}" B ${C}) + set(WRAPPEDS32_HEAD ${WRAPPEDS32_HEAD} ${B}) + set_source_files_properties(${A} PROPERTIES OBJECT_DEPENDS ${B}) + endforeach() + + set(WRAPPER32 "${BOX64_ROOT}/src/wrapped32/generated/wrapper32.c" "${BOX64_ROOT}/src/wrapped32/generated/wrapper32.h") + + if(NOT CI) + add_custom_command( + OUTPUT "${BOX64_ROOT}/src/wrapped32/generated/functions_list.txt" + COMMAND "${PYTHON_EXECUTABLE}" "${BOX64_ROOT}/rebuild_wrappers_32.py" + "${BOX64_ROOT}" + "PANDORA" "HAVE_LD80BITS" "NOALIGN" "HAVE_TRACE" "ANDROID" "TERMUX" "STATICBUILD" "--" + ${WRAPPEDS32_HEAD} + MAIN_DEPENDENCY "${BOX64_ROOT}/rebuild_wrappers_32.py" + DEPENDS ${WRAPPEDS32} ${WRAPPEDS32_HEAD} + BYPRODUCTS ${WRAPPER32} + ) + endif() + + add_custom_target(WRAPPERS32 DEPENDS "${BOX64_ROOT}/src/wrapped32/generated/functions_list.txt") +else() + set(WRAPPEDS32) +endif() + + if(DYNAREC) set(DYNAREC_SRC "${BOX64_ROOT}/src/dynarec/dynablock.c" @@ -777,6 +933,7 @@ if(ARM_DYNAREC) "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c" "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_f2_0f38.c" "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_f2_0f3a.c" + "${BOX64_ROOT}/src/dynarec/arm64/dynarec_arm64_avx_f3_0f38.c" ) endif() @@ -807,10 +964,12 @@ if(RV64_DYNAREC) "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_00_2.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_00_3.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_0f.c" + "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_0f_vector.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_64.c" - #"${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_65.c" + "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_64_vector.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_66.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_67.c" + "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_67_vector.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_67_32.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_d8.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_d9.c" @@ -822,13 +981,18 @@ if(RV64_DYNAREC) "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_df.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_f0.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_660f.c" + "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_660f38.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_660f_vector.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_66f20f.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_66f30f.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_6664.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_66f0.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_f20f.c" + "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_f20f_vector.c" "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_f30f.c" + "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_f30f_vector.c" + "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_avx.c" + "${BOX64_ROOT}/src/dynarec/rv64/dynarec_rv64_avx_f3_0f.c" ) endif() @@ -871,6 +1035,11 @@ if(DYNAREC) ${DYNAREC_PASS} "${BOX64_ROOT}/src/dynarec/dynarec_native_pass.c" ) + if(BOX32) + list(APPEND DYNAREC_PASS + "${BOX64_ROOT}/src/wrapped32/generated/wrapper32.h" + ) + endif() add_library(dynarec_native OBJECT ${DYNAREC_SRC}) @@ -888,6 +1057,12 @@ if(DYNAREC) add_dependencies(native_pass1 WRAPPERS) add_dependencies(native_pass2 WRAPPERS) add_dependencies(native_pass3 WRAPPERS) + if(BOX32) + add_dependencies(native_pass0 WRAPPERS32) + add_dependencies(native_pass1 WRAPPERS32) + add_dependencies(native_pass2 WRAPPERS32) + add_dependencies(native_pass3 WRAPPERS32) + endif() add_library(dynarec STATIC $ @@ -904,21 +1079,24 @@ if(DYNAREC) add_custom_command( OUTPUT "${BOX64_ROOT}/src/git_head.h" COMMAND sh -c "echo \\\#define GITREV \\\"$(git rev-parse --short HEAD)\\\">\"${BOX64_ROOT}/src/git_head.h\"" - DEPENDS dynarec ${ELFLOADER_SRC} ${INTERPRETER} ${WRAPPEDS} + DEPENDS dynarec ${ELFLOADER_SRC} ${INTERPRETER} ${WRAPPEDS} ${WRAPPEDS32} VERBATIM) else() add_custom_command( OUTPUT "${BOX64_ROOT}/src/git_head.h" COMMAND sh -c "echo \\\#define GITREV \\\"$(git rev-parse --short HEAD)\\\">\"${BOX64_ROOT}/src/git_head.h\"" - DEPENDS ${ELFLOADER_SRC} ${INTERPRETER} ${WRAPPEDS} + DEPENDS ${ELFLOADER_SRC} ${INTERPRETER} ${WRAPPEDS} ${WRAPPEDS32} VERBATIM) endif() add_library(interpreter OBJECT ${INTERPRETER}) -add_executable(${BOX64} ${ELFLOADER_SRC} ${WRAPPEDS} "${BOX64_ROOT}/src/git_head.h") +add_executable(${BOX64} ${ELFLOADER_SRC} ${WRAPPEDS} ${WRAPPEDS32} "${BOX64_ROOT}/src/git_head.h") set_target_properties(${BOX64} PROPERTIES ENABLE_EXPORTS ON) add_dependencies(${BOX64} WRAPPERS) +if(BOX32) + add_dependencies(${BOX64} WRAPPERS32) +endif() #add_dependencies(${BOX64} PRINTER) #target_link_libraries(${BOX64} c m dl rt pthread resolv) if(STATICBUILD) @@ -943,7 +1121,7 @@ target_link_libraries(${BOX64} interpreter) if(${CMAKE_VERSION} VERSION_LESS "3.13") if(NOT NOLOADADDR) if(CMAKE_C_COMPILER_ID STREQUAL "Clang" OR WITH_MOLD) - set_target_properties(${BOX64} PROPERTIES LINK_FLAGS "-Wl,--image-base=${BOX64_ELF_ADDRESS}") + set_target_properties(${BOX64} PROPERTIES LINK_FLAGS "-no-pie -Wl,--image-base=${BOX64_ELF_ADDRESS}") else() set_target_properties(${BOX64} PROPERTIES LINK_FLAGS "-Wl,-Ttext-segment,${BOX64_ELF_ADDRESS}") endif() @@ -952,6 +1130,9 @@ else() # If symbols are missing, try this: target_link_options(${BOX64} PUBLIC -rdynamic) if(NOT NOLOADADDR) if(CMAKE_C_COMPILER_ID STREQUAL "Clang" OR WITH_MOLD) + if(WITH_MOLD) # --image-base requires -no-pie in mold! + set_target_properties(${BOX64} PROPERTIES LINK_FLAGS "-no-pie -lm") + endif() target_link_options(${BOX64} PUBLIC LINKER:--image-base=${BOX64_ELF_ADDRESS}) else() target_link_options(${BOX64} PUBLIC LINKER:-Ttext-segment,${BOX64_ELF_ADDRESS}) @@ -970,24 +1151,36 @@ endif() if(NOT _x86 AND NOT _x86_64) if(NOT TERMUX) - install(TARGETS ${BOX64} - RUNTIME DESTINATION bin) + install(TARGETS ${BOX64} RUNTIME DESTINATION bin) + if(NOT NO_LIB_INSTALL) + install(PROGRAMS ${CMAKE_SOURCE_DIR}/tests/box64-bash DESTINATION bin) + endif() else() - install(TARGETS ${BOX64} - RUNTIME DESTINATION ${TERMUX_PATH}/usr/bin) + install(TARGETS ${BOX64} RUNTIME DESTINATION ${TERMUX_PATH}/usr/bin) + if(NOT NO_LIB_INSTALL) + install(PROGRAMS ${CMAKE_SOURCE_DIR}/tests/box64-bash DESTINATION ${TERMUX_PATH}/usr/bin) + endif() endif() if(NOT NO_CONF_INSTALL) configure_file(system/box64.conf.cmake system/box64.conf) if(NOT TERMUX) - install(FILES ${CMAKE_BINARY_DIR}/system/box64.conf DESTINATION /etc/binfmt.d/) - install(FILES ${CMAKE_SOURCE_DIR}/system/box64.box64rc DESTINATION /etc/) - else() - install(FILES ${CMAKE_BINARY_DIR}/system/box64.conf DESTINATION ${TERMUX_PATH}/usr/etc/binfmt.d/) - install(FILES ${CMAKE_SOURCE_DIR}/system/box64.box64rc DESTINATION ${TERMUX_PATH}/usr/etc/) + install(FILES ${CMAKE_BINARY_DIR}/system/box64.conf DESTINATION /etc/binfmt.d/) + install(FILES ${CMAKE_SOURCE_DIR}/system/box64.box64rc DESTINATION /etc/) + if(BOX32_BINFMT) + configure_file(system/box32.conf.cmake system/box32.conf) + install(FILES ${CMAKE_BINARY_DIR}/system/box32.conf DESTINATION /etc/binfmt.d/) + endif() + else() + install(FILES ${CMAKE_BINARY_DIR}/system/box64.conf DESTINATION ${TERMUX_PATH}/usr/etc/binfmt.d/) + install(FILES ${CMAKE_SOURCE_DIR}/system/box64.box64rc DESTINATION ${TERMUX_PATH}/usr/etc/) + if(BOX32_BINFMT) + configure_file(system/box32.conf.cmake system/box32.conf) + install(FILES ${CMAKE_BINARY_DIR}/system/box32.conf DESTINATION ${TERMUX_PATH}/usr/etc/binfmt.d/) + endif() endif() endif() - set(INSTALL_PATH "/usr/lib/x86_64-linux-gnu/") + set(INSTALL_PATH "/usr/lib/box64-x86_64-linux-gnu/") if(NOT NO_LIB_INSTALL) if(NOT TERMUX) install(FILES ${CMAKE_SOURCE_DIR}/x64lib/libstdc++.so.5 DESTINATION ${INSTALL_PATH}) @@ -1023,6 +1216,30 @@ if(NOT _x86 AND NOT _x86_64) install(FILES ${CMAKE_SOURCE_DIR}/x64lib/libmbedcrypto.so.3 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) endif() endif() + if(BOX32) + set(INSTALL_PATH "/usr/lib/box64-i386-linux-gnu/") + if(NOT NO_LIB_INSTALL) + if(NOT TERMUX) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libstdc++.so.5 DESTINATION ${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libstdc++.so.6 DESTINATION ${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libgcc_s.so.1 DESTINATION ${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libpng12.so.0 DESTINATION ${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libunwind.so.8 DESTINATION ${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libcrypto.so.1.0.0 DESTINATION ${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libssl.so.1.0.0 DESTINATION ${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libz.so.1 DESTINATION ${INSTALL_PATH}) + else() + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libstdc++.so.5 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libstdc++.so.6 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libgcc_s.so.1 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libpng12.so.0 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libunwind.so.8 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libcrypto.so.1.0.0 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libssl.so.1.0.0 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + install(FILES ${CMAKE_SOURCE_DIR}/x86lib/libz.so.1 DESTINATION ${TERMUX_PATH}${INSTALL_PATH}) + endif() + endif() + endif() endif() if(NOT TARGET uninstall) @@ -1130,11 +1347,13 @@ add_test(fork ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests/ref09.txt -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) -add_test(cppThreads ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} +add_test(cppThreads_nocosim ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests/test10 -D TEST_OUTPUT=tmpfile10.txt -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests/ref10.txt -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) +set_tests_properties(cppThreads_nocosim PROPERTIES ENVIRONMENT "BOX64_LD_LIBRARY_PATH=${CMAKE_SOURCE_DIR}/x64lib") + add_test(tlsData ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests/test11 -D TEST_OUTPUT=tmpfile11.txt -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests/ref11.txt @@ -1411,3 +1630,141 @@ foreach(file ${extension_tests}) -P ${CMAKE_SOURCE_DIR}/runTest.cmake) endforeach() endif() + +if(BOX32) + add_test(NAME bootSyscall_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test01 -D TEST_OUTPUT=tmpfile32_01.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref01.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME bootSyscallC_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test02 -D TEST_OUTPUT=tmpfile32_02.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref02.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME printf_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test03 -D TEST_OUTPUT=tmpfile32_03.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref03.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME args_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test04 -D TEST_ARGS2=yeah -D TEST_OUTPUT=tmpfile32_04.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref04.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME maths1_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test05 -D TEST_ARGS2=7 -D TEST_OUTPUT=tmpfile32_05.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref05.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME threadsStart_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test06 -D TEST_OUTPUT=tmpfile32_06.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref06.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME trig_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test07 -D TEST_OUTPUT=tmpfile32_07.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref07.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME pi_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test08 -D TEST_OUTPUT=tmpfile32_08.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref08.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME fork_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test09 -D TEST_OUTPUT=tmpfile32_09.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref09.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + if(NOT CI) + add_test(NAME cppThreads_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test10 -D TEST_OUTPUT=tmpfile32_10.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref10.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + set_tests_properties(cppThreads_32bits PROPERTIES ENVIRONMENT "BOX64_LD_LIBRARY_PATH=${CMAKE_SOURCE_DIR}/x86lib") + endif() + + add_test(NAME tlsData_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test11 -D TEST_OUTPUT=tmpfile32_11.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref11.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME fpu_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test12 -D TEST_OUTPUT=tmpfile32_12.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref12.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME contexts_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test13 -D TEST_OUTPUT=tmpfile32_13.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref13.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + if(NOT LD80BITS) + add_test(NAME conditionalThreads_32bits_nocosim COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test14 -D TEST_OUTPUT=tmpfile32_14.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref14.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + endif() + + add_test(NAME linkingIndirectNoversion_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test15 -D TEST_OUTPUT=tmpfile32_15.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref15.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME linkingIndirectVersion_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test16 -D TEST_OUTPUT=tmpfile32_16.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref16.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME sse_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test17 -D TEST_OUTPUT=tmpfile32_17.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref17.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + set_tests_properties(sse_32bits PROPERTIES ENVIRONMENT "BOX64_DYNAREC_FASTNAN=0;BOX64_DYNAREC_FASTROUND=0") + + add_test(NAME longjumpInSignals_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test18 -D TEST_OUTPUT=tmpfile32_18.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref18.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME x87_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test19 -D TEST_OUTPUT=tmpfile32_19.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref19.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + set_tests_properties(x87_32bits PROPERTIES ENVIRONMENT "BOX64_DYNAREC_FASTROUND=0") + + add_test(NAME idiv_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test20 -D TEST_OUTPUT=tmpfile32_20.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref20.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + add_test(NAME multiple_dlopen_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test21 -D TEST_OUTPUT=tmpfile32_21.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref21.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + file(GLOB extension_tests "${CMAKE_SOURCE_DIR}/tests32/extensions/*.c") + foreach(file ${extension_tests}) + get_filename_component(testname "${file}" NAME_WE) + add_test(NAME "${testname}_32bits" COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/extensions/${testname} -D TEST_OUTPUT=tmpfile32_-${testname}.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/extensions/${testname}.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake) + endforeach() + + #add_test(NAME sse_optimized_32bits COMMAND ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + # -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test17_o2 -D TEST_OUTPUT=tmpfile32_17_o2.txt + # -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref17_o2.txt + # -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) + + #set_tests_properties(sse_optimized_32bits PROPERTIES ENVIRONMENT "BOX64_DYNAREC_FASTNAN=0;BOX64_DYNAREC_FASTROUND=0") + + add_test(bswap_32bits ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests32/test23 -D TEST_OUTPUT=tmpfile32_23.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests32/ref23.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) +endif() diff --git a/LLVMprivateGenerator/Makefile b/LLVMprivateGenerator/Makefile deleted file mode 100644 index 61864262b689249f3503d22920d28520814a3117..0000000000000000000000000000000000000000 --- a/LLVMprivateGenerator/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -all: dumpSigs - -dumpSigs: main.o registered_structs.o - g++ -g3 -std=gnu++17 -fno-rtti main.o registered_structs.o -o dumpSigs "-L$(LLVM_install_dir)/lib" -lclang-cpp -lclangTooling -Wl,-rpath "-Wl,$(LLVM_install_dir)/lib" - -main.o: main.cpp - g++ -g3 -std=gnu++17 -fno-rtti -c main.cpp -Wfatal-errors "-I$(LLVM_install_dir)/include" -o main.o -registered_structs.o: registered_structs.cpp - g++ -g3 -std=gnu++17 -fno-rtti -c registered_structs.cpp -Wfatal-errors -o registered_structs.o - -clean: - $(RM) dumpSigs main.o registered_structs.o diff --git a/LLVMprivateGenerator/main.cpp b/LLVMprivateGenerator/main.cpp deleted file mode 100644 index fe070cb075e72d19e16971769413e10a39f7a134..0000000000000000000000000000000000000000 --- a/LLVMprivateGenerator/main.cpp +++ /dev/null @@ -1,458 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -clang::MangleContext *mangler = nullptr; - -std::unordered_map> funMap; -std::vector funList; - -bool isTypeTrivial(const clang::QualType &q, const clang::QualType *qorig); -clang::QualType getPointedType(const clang::QualType q) { - if (const clang::PointerType *p = q->getAs()) - return getPointedType(p->getPointeeType()); - else if (const clang::ReferenceType *r = q->getAs()) - return getPointedType(r->getPointeeType()); - else - return q; -} - -std::string record2name(const clang::RecordDecl &q, const clang::QualType *qorig) { - std::string s = q.getNameAsString(); - if (s == "") { - if (!qorig) return "????.!"; - if (const clang::TypedefType *tt = (*qorig)->getAs()) { - // Typedef - if (clang::TypedefNameDecl *td = tt->getDecl()) { - return td->getNameAsString(); - } else { - return ""; - } - } else { - return std::string("getTypeClassName() + ">"; - } - } else { - return s; - } -} - -char ptr2char(const std::string &str) __attribute__((const)); -const char *ptr2str(const std::string &str) __attribute__((const)); -char type2char(const clang::QualType &qual /* Canonical */, const clang::QualType *qorig) { - if (qual->isBuiltinType()) { - switch (static_cast(*qual).getKind()) { - case clang::BuiltinType::Kind::Void: - return 'v'; - case clang::BuiltinType::Kind::Bool: - return 'i'; - case clang::BuiltinType::Kind::Char_U: - return 'C'; - case clang::BuiltinType::Kind::Char_S: - return 'c'; - case clang::BuiltinType::Kind::Char8: - return 'c'; - case clang::BuiltinType::Kind::UChar: - return 'C'; - case clang::BuiltinType::Kind::SChar: - return 'c'; - case clang::BuiltinType::Kind::WChar_U: - return 'W'; - case clang::BuiltinType::Kind::UShort: - return 'W'; - case clang::BuiltinType::Kind::WChar_S: - return 'w'; - case clang::BuiltinType::Kind::Char16: - return 'w'; - case clang::BuiltinType::Kind::Short: - return 'w'; - case clang::BuiltinType::Kind::UInt: - return 'u'; - case clang::BuiltinType::Kind::Char32: - return 'i'; - case clang::BuiltinType::Kind::Int: - return 'i'; - case clang::BuiltinType::Kind::ULong: - return 'L'; - case clang::BuiltinType::Kind::Long: - return 'l'; - case clang::BuiltinType::Kind::ULongLong: - return 'U'; - case clang::BuiltinType::Kind::LongLong: - return 'I'; - case clang::BuiltinType::Kind::UInt128: - return 'H'; - case clang::BuiltinType::Kind::Int128: - return 'H'; - case clang::BuiltinType::Kind::Float: - return 'f'; - case clang::BuiltinType::Kind::Double: - return 'd'; - case clang::BuiltinType::Kind::LongDouble: - return 'D'; - case clang::BuiltinType::Kind::NullPtr: - return 'p'; // nullptr_t - - case clang::BuiltinType::Kind::Half: - case clang::BuiltinType::Kind::BFloat16: - case clang::BuiltinType::Kind::ShortAccum: - case clang::BuiltinType::Kind::Accum: - case clang::BuiltinType::Kind::LongAccum: - case clang::BuiltinType::Kind::UShortAccum: - case clang::BuiltinType::Kind::UAccum: - case clang::BuiltinType::Kind::ULongAccum: - case clang::BuiltinType::Kind::ShortFract: - case clang::BuiltinType::Kind::Fract: - case clang::BuiltinType::Kind::LongFract: - case clang::BuiltinType::Kind::UShortFract: - case clang::BuiltinType::Kind::UFract: - case clang::BuiltinType::Kind::ULongFract: - case clang::BuiltinType::Kind::SatShortAccum: - case clang::BuiltinType::Kind::SatAccum: - case clang::BuiltinType::Kind::SatLongAccum: - case clang::BuiltinType::Kind::SatUShortAccum: - case clang::BuiltinType::Kind::SatUAccum: - case clang::BuiltinType::Kind::SatULongAccum: - case clang::BuiltinType::Kind::SatShortFract: - case clang::BuiltinType::Kind::SatFract: - case clang::BuiltinType::Kind::SatLongFract: - case clang::BuiltinType::Kind::SatUShortFract: - case clang::BuiltinType::Kind::SatUFract: - case clang::BuiltinType::Kind::SatULongFract: - case clang::BuiltinType::Kind::Float16: - case clang::BuiltinType::Kind::Float128: - case clang::BuiltinType::Kind::Overload: - case clang::BuiltinType::Kind::BoundMember: - case clang::BuiltinType::Kind::PseudoObject: - case clang::BuiltinType::Kind::Dependent: - case clang::BuiltinType::Kind::UnknownAny: - case clang::BuiltinType::Kind::ARCUnbridgedCast: - case clang::BuiltinType::Kind::BuiltinFn: - case clang::BuiltinType::Kind::ObjCId: - case clang::BuiltinType::Kind::ObjCClass: - case clang::BuiltinType::Kind::ObjCSel: -#define IMAGE_TYPE(it, id, si, a, s) case clang::BuiltinType::Kind::id: -#include -#undef IMAGE_TYPE - case clang::BuiltinType::Kind::OCLSampler: - case clang::BuiltinType::Kind::OCLEvent: - case clang::BuiltinType::Kind::OCLClkEvent: - case clang::BuiltinType::Kind::OCLQueue: - case clang::BuiltinType::Kind::OCLReserveID: - case clang::BuiltinType::Kind::IncompleteMatrixIdx: - case clang::BuiltinType::Kind::OMPArraySection: - case clang::BuiltinType::Kind::OMPArrayShaping: - case clang::BuiltinType::Kind::OMPIterator: -#define EXT_OPAQUE_TYPE(et, id, e) case clang::BuiltinType::Kind::id: -#include -#define SVE_TYPE(n, id, si) case clang::BuiltinType::Kind::id: -#include -#define PPC_VECTOR_TYPE(n, id, s) case clang::BuiltinType::Kind::id: -#include -#undef EXT_OPAQUE_TYPE -#undef SVE_TYPE -#undef PPC_VECTOR_TYPE - return '!'; - default: - return ':'; - } - } else if (qual->isEnumeralType()) { - const clang::EnumDecl *ed = qual->getAs()->getDecl(); - if (!ed) { - return 'i'; - } else { - return type2char(ed->getIntegerType().getCanonicalType(), qorig); - } - } else if (qual->isFunctionPointerType()) { - return '@'; - } else if (qual->isAnyPointerType() || qual->isReferenceType()) { - const clang::QualType &pointed = getPointedType(qual); - if (isTypeTrivial(pointed, qorig)) { - return 'p'; - } else if (const clang::RecordType *rct = pointed->getAs()) { - clang::RecordDecl *rc = rct->getDecl(); - if (!rc) { - return '!'; - } else if (!rc->isCompleteDefinition()) { - return 'p'; - } else { - std::string str; - if (qorig) { - const clang::QualType qpted = getPointedType(*qorig); - str = record2name(*rc, &qpted); - } else { - str = record2name(*rc, nullptr); - } - char ret = ptr2char(str); - if (ret) return ret; - else { - return '!'; - } - } - } else { - return '!'; - } - } else if (const clang::RecordType *rct = qual->getAs()) { - clang::RecordDecl *rc = rct->getDecl(); - if (!rc) { - return '?'; - } else if (rc->getNameAsString() == "__builtin_va_list") { - // va_list - return 'A'; - } else { - return '?'; - } - } else { - return '?'; - } -} -bool isTypeTrivial(const clang::QualType &q, const clang::QualType *qorig) { - const char c = type2char(q, qorig); -#define GO(chr) || (c == chr) - return (c == 'v') - GO('i') GO('u') - GO('I') GO('U') - GO('l') GO('L') - GO('f') GO('d') - GO('D') GO('K') - GO('0') GO('1') - GO('C') GO('c') - GO('W') GO('w') - GO('H') - GO('p'); -#undef GO -} -bool isTypeValid(const clang::QualType &q, const clang::QualType *qorig) { - const char c = type2char(q, qorig); - if (c == 'A') return false; - if (c == 'V') return false; - return ((c >= '0') && (c <= '9')) || ((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z')); -} - -const std::string type2string(const clang::QualType &qual, const clang::QualType *qorig) { - if (qual->isBuiltinType()) { - return std::string("(builtin) ") + static_cast(*qual).getName(clang::PrintingPolicy{{}}).data(); - } else if (qual->isFunctionPointerType()) { - return "Callback (function pointer)"; - } else if (qual->isAnyPointerType() || qual->isReferenceType()) { - std::string prefix = qual->isAnyPointerType() ? "Pointer to " : "Reference to "; - const clang::QualType &pointed = getPointedType(qual); - if (isTypeTrivial(pointed, qorig)) { - return prefix + "trivial object " + type2string(pointed, qorig) + " (" + type2char(pointed, qorig) + ")"; - } else if (const clang::RecordType *rct = pointed->getAs()) { - clang::RecordDecl *rc = rct->getDecl(); - if (!rc) { - return prefix + "unknown record"; - } else if (!rc->isCompleteDefinition()) { - return prefix + "incomplete record " + rc->getNameAsString(); - } else { - std::string str; - if (qorig) { - const clang::QualType qpted = getPointedType(*qorig); - str = record2name(*rc, &qpted); - } else { - str = record2name(*rc, nullptr); - } - const char *ret = ptr2str(str); - if (ret[0] != '\0') { - return prefix + ret; - } else { - if (mangler && mangler->shouldMangleDeclName(rc)) { - std::string mangled; - { - llvm::raw_string_ostream strstr{mangled}; - mangler->mangleName(rc, strstr); - } - return prefix + "unknown record " + str + " (=== " + mangled + ")"; - } else { - return prefix + "unknown record " + str; - } - } - } - } else { - return prefix + "non-trivial or typedef'ed object " + type2string(pointed, qorig) + " (" + type2char(pointed, qorig) + ")"; - //return "Pointer (maybe to callback)"; - } - } else if (qual->isEnumeralType()) { - const clang::EnumDecl *ed = qual->getAs()->getDecl(); - if (!ed) { - return "Enumeration with unknown underlying integer type (assuming int)"; - } else { - return "Enumeration with underlying type " + type2string(ed->getIntegerType().getCanonicalType(), nullptr); - } - } else if (const clang::RecordType *rct = qual->getAs()) { - clang::RecordDecl *rc = rct->getDecl(); - if (!rc) { - return "Unknown record"; - } else if (rc->getNameAsString() == "__builtin_va_list") { - return "va_list"; - } else { - return "Unknown record " + std::string(rc->getName().data()); - } - } else { - return std::string("??? ") + qual->getTypeClassName(); - } -} - -class Visitor : public clang::RecursiveASTVisitor { -public: - clang::ASTContext &context; - - bool shouldVisitTemplateInstantiations() const /* override */ { return true; } - - Visitor(clang::CompilerInstance &ci) : context(ci.getASTContext()) { - if (!mangler) { - mangler = clang::ItaniumMangleContext::create(context, ci.getDiagnostics()); - } - } - - ~Visitor() { - if (mangler) { - delete mangler; - mangler = nullptr; - } - } - - bool VisitDecl(clang::Decl *decl) /* override */ { - std::cerr << std::flush; - if (!decl) return true; - - if ((decl->getKind() >= clang::Decl::Kind::firstFunction) && (decl->getKind() <= clang::Decl::Kind::lastFunction)) { - clang::DeclaratorDecl *ddecl = static_cast(decl); - std::cout << "Function detected!\n"; - - std::string funName{ddecl->getName()}; - - auto niceprint = [](const std::string &infotype, const auto &dat){ std::cout << " " << infotype << ": " << dat << "\n"; }; - niceprint("Function name", funName); - if (mangler && mangler->shouldMangleDeclName(ddecl)) { - std::string mangled; - { - llvm::raw_string_ostream strstr{mangled}; - mangler->mangleName(ddecl, strstr); - } - niceprint("Function mangled name", mangled); - funName = std::move(mangled); - } - - bool valid; - std::string funTypeStr{""}; - if (ddecl->getFunctionType()->isFunctionNoProtoType()) { - const clang::FunctionNoProtoType *funType = static_cast(ddecl->getFunctionType()); - const auto &retType = funType->getReturnType(); - - niceprint("Function return type", type2string(retType, &retType)); - niceprint("Canonical function return type", - type2string(retType.getCanonicalType(), &retType) + - " (" + type2char(retType.getCanonicalType(), &retType) + ")"); - niceprint("Is sugared", funType->isSugared()); - if (funType->isSugared()) { - clang::QualType qft{funType, 0}; - niceprint("Desugared", type2string(funType->desugar(), &qft)); - } - - funTypeStr = type2char(retType.getCanonicalType(), &retType) + std::string("Fv"); - valid = isTypeValid(retType.getCanonicalType(), &retType); - } else { - const clang::FunctionProtoType *funType = static_cast(ddecl->getFunctionType()); - const auto &retType = funType->getReturnType(); - - niceprint("Function return type", type2string(retType, &retType)); - niceprint("Canonical function return type", - type2string(retType.getCanonicalType(), &retType) - + " (" + type2char(retType.getCanonicalType(), &retType) + ")"); - niceprint("Parameter count", funType->getNumParams()); - for (const clang::QualType &type : funType->getParamTypes()) { - niceprint(" " + type2string(type, &type), - type2string(type.getCanonicalType(), &type) + " (" + type2char(type.getCanonicalType(), &type) + ")"); - } - niceprint("Variadic function", funType->isVariadic() ? "yes" : "no"); - - funTypeStr = - type2char(retType.getCanonicalType(), &retType) + - ((funType->getNumParams() == 0) - ? std::string("Fv") : std::accumulate(funType->getParamTypes().begin(), funType->getParamTypes().end(), std::string("F"), - [](const std::string &acc, const clang::QualType &qual){ return acc + type2char(qual.getCanonicalType(), &qual); })); - if (funType->isVariadic()) funTypeStr += "V"; - valid = !funType->isVariadic() && - std::accumulate(funType->getParamTypes().begin(), funType->getParamTypes().end(), isTypeValid(retType.getCanonicalType(), &retType), - [](bool acc, const clang::QualType &qual){ return acc && isTypeValid(qual.getCanonicalType(), &qual); }); - } - - niceprint("Conclusion", ""); - niceprint("Function final name", funName); - niceprint("Function type", funTypeStr); - niceprint("Valid function type", valid ? "yes" : "no"); - std::cout << "\n"; - - funMap[funName] = std::make_pair(funTypeStr, valid); - funList.push_back(funName); - } - - return true; - } -}; - -class Consumer : public clang::ASTConsumer { -public: - Visitor visitor; - - Consumer(clang::CompilerInstance &ci) : visitor(ci) { - } - - void HandleTranslationUnit(clang::ASTContext &context) override { - visitor.TraverseDecl(context.getTranslationUnitDecl()); - } -}; - -class Action : public clang::ASTFrontendAction { -public: - virtual std::unique_ptr CreateASTConsumer(clang::CompilerInstance &ci, llvm::StringRef inFile) override { - return std::make_unique(ci); - } -}; - -int main(int argc, const char **argv) { - if (argc < 2) { - std::cerr << "Usage: " << argv[0] << " (filenames) -- [-I...]" << std::endl; - return 2; - } - - /*int fakeargc = argc + 1; - const char **fakeargv = new const char*[fakeargc]; - memcpy(fakeargv, argv, argc * sizeof(char*)); - fakeargv[fakeargc - 1] = "--";*/ - llvm::cl::OptionCategory opcat{""}; - clang::tooling::CommonOptionsParser op{argc, argv, opcat}; - std::vector paths; for (int i = 1; i < argc; ++i) paths.push_back(argv[i]); - - clang::tooling::ClangTool tool{op.getCompilations(), paths}; - - tool.run(clang::tooling::newFrontendActionFactory().get()); - - std::cout << "Done, outputing output.h" << std::endl; - std::sort(funList.begin(), funList.end()); - std::fstream file{"output.h", std::ios_base::out}; - for (const std::string &funName : funList) { - if (!funMap[funName].second) { - file << "//"; - } - file << "GO(" << funName << ", " << funMap[funName].first << ")\n"; - } - - return 0; -} diff --git a/LLVMprivateGenerator/registered_structs.cpp b/LLVMprivateGenerator/registered_structs.cpp deleted file mode 100644 index 0473deb56e2ff9955c05126bcd576860ec5b19b0..0000000000000000000000000000000000000000 --- a/LLVMprivateGenerator/registered_structs.cpp +++ /dev/null @@ -1,267 +0,0 @@ -#include - -#define ALL START() \ - /* libc */ \ - STRUCT("_IO_FILE", "a FILE") \ - STRUCT("_G_fpos_t", "a file position") \ - STRUCT("sockaddr", "a socket address") \ - STRUCT("itimerspec", "an itimerspec") \ - STRUCT("timespec", "a timespec") \ - STRUCT("itimerval", "an itimerval") \ - STRUCT("timeval", "a timeval") \ - STRUCT("timex", "a timex") \ - STRUCT("timezone", "a timezone") \ - STRUCT("dirent", "a dirent") \ - STRUCT("dirent64", "a dirent64") \ - STRUCT("__dirstream", "a dir stream") \ - STRUCT("tm", "a time structure (tm)") \ - STRUCT("cmsghdr", "a cmsghdr") \ - STRUCT("msghdr", "a msghdr") \ - STRUCT("rpcent", "an rpcent") \ - STRUCT("random_data", "a random_data structure") \ - STRUCT("drand48_data", "a drand48_data structure") \ - STRUCT("termios", "a termios") \ - STRUCT("iovec", "an iovec") \ - STRUCT("file_handle", "a file handle") \ - STRUCT("lconv", "an lconv") \ - STRUCT("__locale_struct", "a locale structure") \ - STRUCT("aliasent", "an alias") \ - STRUCT("fstab", "an fstab") \ - STRUCT("group", "a group") \ - STRUCT("hostent", "a hostent") \ - STRUCT("protoent", "a protoent") \ - STRUCT("passwd", "a password") \ - STRUCT("spwd", "an spwd") \ - STRUCT("ttyent", "a ttyent") \ - STRUCT("utmp", "an utmp structure") \ - STRUCT("utmpx", "an utmpx structure") \ - STRUCT("ifaddrs", "an ifaddrs structure") \ - STRUCT("statfs", "a statfs structure") \ - STRUCT("statfs64", "a statfs64 structure") \ - STRUCT("statvfs", "a statvfs structure") \ - STRUCT("statvfs64", "a statvfs64 structure") \ - STRUCT("timeb", "a timeb structure") \ - STRUCT("_ftsent", "an _ftsent structure") \ - STRUCT("sysinfo", "a sysinfo structure") \ - STRUCT("rlimit", "an rlimit structure") \ - STRUCT("rlimit64", "an rlimit64 structure") \ - STRUCT("rusage", "an rusage structure") \ - STRUCT("entry", "an entry structure") \ - STRUCT("pollfd", "a pollfd structure") \ - STRUCT("re_pattern_buffer", "a re_pattern_buffer structure") \ - STRUCT("sembuf", "a sembuf structure") \ - STRUCT("tms", "a tms structure") \ - STRUCT("utsname", "an utsname structure") \ - STRUCT("utimbuf", "an utimbuf structure") \ - STRUCT2("__va_list_tag", "__va_list_tag (aka, a va_list)", 'A') \ - /* ncurses */ \ - STRUCT("_win_st", "a _win_st structure") \ - STRUCT("MEVENT", "an MEVENT structure") \ - TYPEDEF("cchar_t", "a cchar_t") \ - /* zlib */ \ - STRUCT("gz_header_s", "a gz_header_s structure") \ - STRUCT("gzFile_s", "a gzFile_s structure") \ - STRUCT("z_stream_s", "a z_stream_s structure") \ - \ - END() - -#define START() -#define STRUCT(s, ret) if (str == s) { return 'p'; } else -#define STRUCT2(s, ret, c) if (str == s) { return c; } else -#define TYPEDEF(s, ret) if (str == s) { return 'p'; } else -#define END() { return 0; } -char ptr2char(const std::string &str) { - /*if ((str == "_IO_FILE") - || (str == "_G_fpos_t") - || (str == "sockaddr") - || (str == "itimerspec") - || (str == "timespec") - || (str == "itimerval") - || (str == "timeval") - || (str == "timex") - || (str == "timezone") - || (str == "dirent") - || (str == "dirent64") - || (str == "__dirstream") - || (str == "tm") - || (str == "cmsghdr") - || (str == "msghdr") - || (str == "rpcent") - || (str == "random_data") - || (str == "drand48_data") - || (str == "termios") - || (str == "iovec") - || (str == "file_handle") - || (str == "lconv") - || (str == "__locale_struct") - || (str == "aliasent") - || (str == "fstab") - || (str == "group") - || (str == "hostent") - || (str == "protoent") - || (str == "passwd") - || (str == "spwd") - || (str == "ttyent") - || (str == "utmp") - || (str == "utmpx") - || (str == "ifaddrs") - || (str == "statfs") - || (str == "statfs64") - || (str == "statvfs") - || (str == "timeb") - || (str == "_ftsent") - || (str == "sysinfo") - || (str == "rlimit") - || (str == "rlimit64") - || (str == "rusage") - || (str == "entry") - || (str == "pollfd") - || (str == "re_pattern_buffer") - || (str == "sembuf") - || (str == "tms") - || (str == "utsname") - || (str == "utimbuf") - // ncurses - || (str == "_win_st") - - || (str == "cchar_t") - ) { - // FILE*, fpos_t*, ... - return 'p'; - } else if (str == "__va_list_tag") { - return 'A'; - } else { - return 0; - }*/ - ALL -} -#undef END -#undef TYPEDEF -#undef STRUCT2 -#undef STRUCT -#undef START - -#define START() -#define STRUCT(s, ret) if (str == s) { return ret; } else -#define STRUCT2(s, ret, c) if (str == s) { return ret; } else -#define TYPEDEF(s, ret) if (str == s) { return ret; } else -#define END() return ""; -const char *ptr2str(const std::string &str) { - /*if (str == "_IO_FILE") { - return "a FILE"; - } else if (str == "_G_fpos_t") { - return "a file position"; - } else if (str == "sockaddr") { - return "a socket address"; - } else if (str == "itimerspec") { - return "an itimerspec"; - } else if (str == "timespec") { - return "a timespec"; - } else if (str == "itimerval") { - return "an itimerval"; - } else if (str == "timeval") { - return "a timeval"; - } else if (str == "timex") { - return "a timex"; - } else if (str == "timezone") { - return "a timezone"; - } else if (str == "dirent") { - return "a dirent"; - } else if (str == "dirent64") { - return "a dirent64"; - } else if (str == "__dirstream") { - return "a dir stream"; - } else if (str == "tm") { - return "a time structure (tm)"; - } else if (str == "cmsghdr") { - return "a cmsghdr"; - } else if (str == "msghdr") { - return "a msghdr"; - } else if (str == "rpcent") { - return "an rpcent"; - } else if (str == "random_data") { - return "a random_data structure"; - } else if (str == "drand48_data") { - return "a drand48_data structure"; - } else if (str == "termios") { - return "a termios"; - } else if (str == "iovec") { - return "an iovec"; - } else if (str == "file_handle") { - return "a file handle"; - } else if (str == "lconv") { - return "an lconv"; - } else if (str == "__locale_struct") { - return "a locale structure"; - } else if (str == "aliasent") { - return "an alias"; - } else if (str == "fstab") { - return "an fstab"; - } else if (str == "group") { - return "a group"; - } else if (str == "hostent") { - return "a hostent"; - } else if (str == "protoent") { - return "a protoent"; - } else if (str == "passwd") { - return "a password"; - } else if (str == "spwd") { - return "an spwd"; - } else if (str == "ttyent") { - return "a ttyent"; - } else if (str == "utmp") { - return "an utmp structure"; - } else if (str == "utmpx") { - return "an utmpx structure"; - } else if (str == "ifaddrs") { - return "an ifaddrs structure"; - } else if (str == "statfs") { - return "a statfs structure"; - } else if (str == "statfs64") { - return "a statfs64 structure"; - } else if (str == "statvfs") { - return "a statvfs structure"; - } else if (str == "statvfs64") { - return "a statvfs64 structure"; - } else if (str == "timeb") { - return "a timeb structure"; - } else if (str == "_ftsent") { - return "an _ftsent structure"; - } else if (str == "sysinfo") { - return "a sysinfo structure"; - } else if (str == "rlimit") { - return "an rlimit structure"; - } else if (str == "rlimit64") { - return "an rlimit64 structure"; - } else if (str == "rusage") { - return "an rusage structure"; - } else if (str == "entry") { - return "an entry structure"; - } else if (str == "pollfd") { - return "a pollfd structure"; - } else if (str == "re_pattern_buffer") { - return "a re_pattern_buffer structure"; - } else if (str == "sembuf") { - return "a sembuf structure"; - } else if (str == "tms") { - return "a tms structure"; - } else if (str == "utsname") { - return "an utsname structure"; - } else if (str == "utimbuf") { - return "an utimbuf structure"; - } else if (str == "__va_list_tag") { - return "__va_list_tag (aka, a va_list)"; - // ncurses - } else if (str == "_win_st") { - return "a _win_st structure"; - - } else if (str == "cchar_t") { - return "a cchar_t"; - } else return "";*/ - ALL -} -#undef END -#undef TYPEDEF -#undef STRUCT2 -#undef STRUCT -#undef START diff --git a/README.md b/README.md index 0cc748048e5f94ee4eef72cd232fd5347847c5d0..a78e22a246e7da25da71e61de8e99c81e8155b68 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Box64 integrates with DynaRec (dynamic recompiler) for the ARM64 and RV64 platfo Some x64 internal opcodes use parts of "Realmode X86 Emulator Library", see [x64primop.c](src/emu/x64primop.c) for copyright details +Box64 now have an option Box32 part, that allows to run 32bits x86 program on 64bits system. Note that this option is experimental and a work in progress. Basically, nothing work with it yet, so unless you plan an helping with the development, don't bother enabling it (and don't create issue ticket about box32 not being able to run X or Y program). The main goals with box32 is to be able to run SteamCMD first. Then Linux Steam and Wine/Proton might come later. + Logo and Icon made by @grayduck, thanks! @@ -114,7 +116,7 @@ I want to thank everyone who has contributed to box64 development. There are many ways to contribute: code contribution, financial, hardware and advertisement! So, in no particular order, I want to thank: * For their major code contribution: rajdakin, mogery, ksco, xctan - * For their major financial contribution: [Playtron](https://playtron.one), FlyingFathead, stormchaser3000, dennis1248, sll00, [libre-computer-project](https://libre.computer/), [CubeCoders Limited](http://cubecoders.com/) + * For their major financial contribution: [Playtron](https://playtron.one), tohodakilla, FlyingFathead, stormchaser3000, dennis1248, sll00, [libre-computer-project](https://libre.computer/), [CubeCoders Limited](http://cubecoders.com/) * For hardware contribution and LoongArch migration: [xiaoji](https://www.linuxgame.cn/), Deepin Beijing Develop Team * For their hardware contribution: [ADLINK](https://www.adlinktech.com/Products/Computer_on_Modules/COM-HPC-Server-Carrier-and-Starter-Kit/Ampere_Altra_Developer_Platform?lang=en) with [Ampere](https://amperecomputing.com/home/edge), [SOPHGO](https://www.sophon.ai/), [Radxa](https://rockpi.org/), [StarFive](https://rvspace.org/), [Pine64](https://www.pine64.org/), [AYN](https://www.ayntec.com/), [AYANEO](https://ayaneo.com/), [jiangcuo](https://github.com/jiangcuo) * For their continuous advertisements for the box64 project: salva ([microLinux](https://www.youtube.com/channel/UCwFQAEj1lp3out4n7BeBatQ)), [PILab](https://www.youtube.com/channel/UCgfQjdc5RceRlTGfuthBs7g)/[TwisterOS](https://twisteros.com/) team, [The Byteman](https://www.youtube.com/channel/UCEr8lpIJ3B5Ctc5BvcOHSnA), [NicoD](https://www.youtube.com/channel/UCpv7NFr0-9AB5xoklh3Snhg), ekianjo ([Boilingsteam](https://boilingsteam.com/)) diff --git a/README_CN.md b/README_CN.md index e9719c47c0fcaf72655fe03501e5f7f7bdb8a321..4378d84a352bf7cce7f1297058c498a4ee8f053c 100644 --- a/README_CN.md +++ b/README_CN.md @@ -103,7 +103,7 @@ Box64 封装了 Vulkan 库,但请注意,它仅在 RX550 显卡上进行过 以下感谢不分先后: * 代码贡献:rajdakin, mogery, ksco, xctan - * 财务帮助:[Playtron](https://playtron.one), FlyingFathead, stormchaser3000, dennis1248, sll00, [libre-computer-project](https://libre.computer/) + * 财务帮助:[Playtron](https://playtron.one), tohodakilla, FlyingFathead, stormchaser3000, dennis1248, sll00, [libre-computer-project](https://libre.computer/) * 硬件捐赠和 LoongArch 迁移:[xiaoji](https://www.linuxgame.cn/), Deepin Beijing Develop Team * 硬件捐赠:[ADLINK](https://www.adlinktech.com/Products/Computer_on_Modules/COM-HPC-Server-Carrier-and-Starter-Kit/Ampere_Altra_Developer_Platform?lang=en) with [Ampere](https://amperecomputing.com/home/edge), [SOPHGO](https://www.sophon.ai/), [Radxa](https://rockpi.org/), [StarFive](https://rvspace.org/), [Pine64](https://www.pine64.org/), [AYN](https://www.ayntec.com/), [AYANEO](https://ayaneo.com/), [jiangcuo](https://github.com/jiangcuo) * 为本项目持续的宣传:salva ([microLinux](https://www.youtube.com/channel/UCwFQAEj1lp3out4n7BeBatQ)), [PILab](https://www.youtube.com/channel/UCgfQjdc5RceRlTGfuthBs7g)/[TwisterOS](https://twisteros.com/) team, [The Byteman](https://www.youtube.com/channel/UCEr8lpIJ3B5Ctc5BvcOHSnA), [NicoD](https://www.youtube.com/channel/UCpv7NFr0-9AB5xoklh3Snhg), ekianjo ([Boilingsteam](https://boilingsteam.com/)) diff --git a/README_UK.md b/README_UK.md index 78c4f7db0b64ec61b75a406748e791230a726c09..9aa8c305fce7263f9eb7b3bbf7452b4053823312 100644 --- a/README_UK.md +++ b/README_UK.md @@ -107,7 +107,7 @@ Box64 використовує бібліотеки Vulkan, але зауваж Є багато способів зробити внесок: внесок коду, фінансовий внесок, апаратне забезпечення та реклама! Отже, без особливого порядку, я хочу подякувати: * За основний внесок у код: rajdakin, mogery, ksco, xctan -* За великий фінансовий внесок: [Playtron](https://playtron.one), FlyingFathead, stormchaser3000, dennis1248, sll00, [libre-computer-project](https://libre.computer/) +* За великий фінансовий внесок: [Playtron](https://playtron.one), tohodakilla, FlyingFathead, stormchaser3000, dennis1248, sll00, [libre-computer-project](https://libre.computer/) * За апаратне забезпечення та міграцію LoongArch: [xiaoji](https://www.linuxgame.cn/), команда розробників Deepin Beijing * За внесок у апаратне забезпечення: [ADLINK](https://www.adlinktech.com/Products/Computer_on_Modules/COM-HPC-Server-Carrier-and-Starter-Kit/Ampere_Altra_Developer_Platform?lang=en) with [Ampere](https://amperecomputing.com/home/edge), [SOPHGO](https://www.sophon.ai/), [Radxa](https://rockpi.org/), [StarFive](https://rvspace.org/), [Pine64](https://www.pine64.org/), [AYN](https://www.ayntec.com/), [AYANEO](https://ayaneo.com/), [jiangcuo](https://github.com/jiangcuo) * За безперервну рекламу Box64: salva ([microLinux](https://www.youtube.com/channel/UCwFQAEj1lp3out4n7BeBatQ)), [PILab](https://www.youtube.com/channel/UCgfQjdc5RceRlTGfuthBs7g)/Команда [TwisterOS](https://twisteros.com/), [The Byteman](https://www.youtube.com/channel/UCEr8lpIJ3B5Ctc5BvcOHSnA), [NicoD](https://www.youtube.com/channel/UCpv7NFr0-9AB5xoklh3Snhg), ekianjo ([Boilingsteam](https://boilingsteam.com/)) diff --git a/docs/COMPILE.md b/docs/COMPILE.md index 6e16eb8fa77d43b62f94701e4716b69781790744..731502cb95d182ca0793d34970c8b8ae34b25510 100644 --- a/docs/COMPILE.md +++ b/docs/COMPILE.md @@ -98,7 +98,7 @@ Using a 64bit OS: Using a 64bit OS: -Caution: please use gcc-11 or higher, older gcc dosen't know cortex-a78ae +Caution: please use gcc-11 or higher, older gcc doesn't know cortex-a78ae ``` -D TEGRA_T234=1 -D CMAKE_BUILD_TYPE=RelWithDebInfo ``` @@ -211,7 +211,7 @@ If you encounter some linking errors, try using `NOLOADADDR=ON` (`cmake -D NOLOA ### Use ccmake -Alternatively, you can **use the curses-bases ccmake (or any other gui frontend for cmake)** to select wich platform to use interactively. +Alternatively, you can **use the curses-based ccmake (or any other gui frontend for cmake)** to select which platform to use interactively. ### Customize your build @@ -245,7 +245,7 @@ You need to add `-DWITH_MOLD=1` if GNU ld is extremely slow. Then run `mold -run #### Build a statically linked box64 -You can now build box64 staticaly linked, with `-DSTATICBUILD`. This is to use inside an x86_64 chroot. Note that this version of box64 will have just the minimum of wrapped libs. So only libc, libm and libpthread basically are wrapped. Other libs (like libGL or libvulkan, SDL2, etc...) will not be wrapped and x86_64 version will be used. It's designed to be used in docker image, or in headless server. +You can now build box64 statically linked, with `-DSTATICBUILD`. This is to use inside an x86_64 chroot. Note that this version of box64 will have just the minimum of wrapped libs. So only libc, libm and libpthread basically are wrapped. Other libs (like libGL or libvulkan, SDL2, etc...) will not be wrapped and x86_64 version will be used. It's designed to be used in docker image, or in headless server. Also, the Static Build is highly experimental, but feedback are always welcomed. ---- diff --git a/docs/USAGE.md b/docs/USAGE.md index 69c78dc1038a928f804fd7a8075074091b431525..379d82ddbd8229b06a6136915bad149097cc8712 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -7,7 +7,7 @@ Env. var with * can also be put inside box64rc files. Box64 look for 2 places for rcfile: `/etc/box64.box64rc` and `~/.box64rc` The second takes precedence to the first, on an APP level (that means if an [MYAPP] my appears in both file, only the settings in `~/.box64rc` will be applied) -There is also some égeneric" name, like [*SETUP*] that will be applied to every program containg "setup" in the name +There is also some égeneric" name, like [*SETUP*] that will be applied to every program containing "setup" in the name (Note that this is not a full regex rules, it's just a name between '[*' and '*]', nothing else) #### BOX64_LOG * @@ -30,7 +30,7 @@ Disables Box64 printing its version and build #### BOX64_LD_LIBRARY_PATH * Path to look for x86_64 libraries. Default is current folder and `lib` in current folder. -Also, `/usr/lib/x86_64-linux-gnu` and `/lib/x86_64-linux-gnu` are added if they exist. +Also, `/usr/lib/x86_64-linux-gnu`, `/lib/x86_64-linux-gnu` and `/usr/lib/box64-x86_64-linux-gnu` are added if they exist. #### BOX64_PATH * Path to look for x86_64 executable. Default is current folder and `bin` in current folder. @@ -43,7 +43,7 @@ Enables/Disables the logging of `dlsym` errors. #### BOX64_TRACE_FILE * Send all log and trace to a file instead of `stdout` Also, if name contains `%pid` then this is replaced by the actual PID of box64 instance -End the filename with `+` to have thetrace appended instead of overwritten +End the filename with `+` to have the trace appended instead of overwritten Use `stderr` to use this instead of default `stdout` #### BOX64_TRACE * @@ -97,7 +97,7 @@ Show Segfault signal even if a signal handler is present * 1 : Show SIGSEGV detail, even if a signal handler is present #### BOX64_SHOWBT * -Show some Backtrace (Nativ e and Emulated) whgen a signal (SEGV, ILL or BUS) is caught +Show some Backtrace (Native and Emulated) when a signal (SEGV, ILL or BUS) is caught * 0 : Don"t show backtraces (Default.) * 1 : Show Backtrace detail (for native, box64 is rename as the x86_64 binary run) @@ -151,8 +151,7 @@ Forbid dynablock creation in the interval specified (helpful for debugging behav #### BOX64_DYNAREC_TEST * Dynarec will compare it's execution with the interpreter (super slow, only for testing) * 0 : No comparison. (Default.) - * 1 : Each opcode runs on interepter and on Dynarec, and regs and memory are compared and print if different. - * 2 : Thread-safe tests, extremely slow. + * 1 : Each opcode runs on interpreter and on Dynarec, and regs and memory are compared and print if different. * 0xXXXXXXXX-0xYYYYYYYY : define the interval where dynarec is tested (inclusive-exclusive) #### BOX64_DYNAREC_BIGBLOCK * @@ -188,6 +187,7 @@ Enable/Disable generation of -NAN Enable/Disable generation of precise x86 rounding * 0 : Generate float/double -> int rounding like on x86 * 1 : Don't do anything special with edge case Rounding, to go as fast as possible (no INF/NAN/Overflow -> MIN_INT conversion) (default, faster) +* 2 : Everything from 1 plus also fast round of double->float (not taking into account current rounding mode) #### BOX64_DYNAREC_SAFEFLAGS * Handling of flags on CALL/RET opcodes @@ -203,7 +203,12 @@ Optimisation of CALL/RET opcodes (not compatible with jit/dynarec/smc) #### BOX64_DYNAREC_ALIGNED_ATOMICS * Generated code for aligned atomics only * 0 : The code generated can handle unaligned atomics (Default) -* 1 : Generated code only for aligned atomics (faster and less code generated, but will SEGBUS if LOCK prefix is unsed on unaligned data) +* 1 : Generated code only for aligned atomics (faster and less code generated, but will SEGBUS if LOCK prefix is unused on unaligned data) + +#### BOX64_DYNAREC_NATIVEFLAGS * +Generate code will use native flags if possible +* 0 : The code generated whill not use native flags even when possible +* 1 : Generated code will use native flags when possible (Arm64 only for now) (Default) #### BOX64_DYNAREC_BLEEDING_EDGE * Detect MonoBleedingEdge and apply conservative settings @@ -224,6 +229,7 @@ Behavior with FillBlock is not available (FillBlock build Dynarec blocks and is Dynarec print the missing opcodes * 0 : not print the missing opcode (Default, unless DYNAREC_LOG>=1 or DYNAREC_DUMP>=1 is used) * 1 : Will print the missing opcodes +* 2 : Will print the fallback to scalar opcodes (only valid on RISC-V) #### BOX64_SSE_FLUSHTO0 * Handling of SSE Flush to 0 flags @@ -290,10 +296,15 @@ Box64 will use wrapped libs even if the lib is specified with absolute path * 1 : Use Wrapped native libs even if path is absolute #### BOX64_PREFER_EMULATED * -Box64 will prefer emulated libs first (execpt for glibc, alsa, pulse, GL, vulkan and X11 +Box64 will prefer emulated libs first (except for glibc, alsa, pulse, GL, vulkan and X11 * 0 : Native libs are preferred (Default.) * 1 : Emulated libs are preferred (Default for program running inside pressure-vessel) +#### BOX64_WRAP_EGL * +Box64 will prefer wrapped libs for EGL and GLESv2 + * 0 : Emulated libs are preferred (Default) + * 1 : Native libs are preferred + #### BOX64_CRASHHANDLER * Box64 will use a dummy crashhandler.so library * 0 : Use Emulated crashhandler.so library if needed @@ -321,14 +332,14 @@ Disables the load of vulkan libraries. * 1 : Disables the load of vulkan libraries, both the native and the i386 version (can be useful on Pi4, where the vulkan driver is not quite there yet.) #### BOX64_SHAEXT * -Expose or not SHAEXT (a.k.a. SHA_NI) capabilites - * 0 : Do not expose SHAEXT capabilites - * 1 : Expose SHAEXT capabilites (Default.) +Expose or not SHAEXT (a.k.a. SHA_NI) capabilities + * 0 : Do not expose SHAEXT capabilities + * 1 : Expose SHAEXT capabilities (Default.) #### BOX64_SSE42 * -Expose or not SSE 4.2 capabilites - * 0 : Do not expose SSE 4.2 capabilites (default when libjvm is detected) - * 1 : Expose SSE 4.2 capabilites (Default.) +Expose or not SSE 4.2 capabilities + * 0 : Do not expose SSE 4.2 capabilities (default when libjvm is detected) + * 1 : Expose SSE 4.2 capabilities (Default.) #### BOX64_FUTEX_WAITV * Use of the new fuext_waitc syscall @@ -361,7 +372,7 @@ Define x86_64 bash to launch script `set waiting=0` to exit the infinite loop. * 2 : Launch `gdbserver` when a segfault, bus error or illegal instruction signal is trapped, attached to the offending process, and go in an endless loop, waiting. Use `gdb /PATH/TO/box64` and then `target remote 127.0.0.1:1234` to connect to the gdbserver (or use actual IP if not on the machine). After that, the procedure is the same as with ` BOX64_JITGDB=1`. - This mode can be usefullwhen programs redirect all console output to a file (like Unity3D Games) + This mode can be usefull when programs redirect all console output to a file (like Unity3D Games) * 3 : Launch `lldb` when a segfault, bus error or illegal instruction signal is trapped, attached to the offending process and go in an endless loop, waiting. #### BOX64_NORCFILES @@ -391,6 +402,12 @@ Those variables are only valid inside a rcfile: * 0 : Nothing special * 1 : Added "-cef-disable-gpu-compositor" to command line arguments (usefull for steamwebhelper/cef based programs) +#### BOX64_ARGS +If that var exist, it will be added as argument(s) to the command line if there is no current argument (it's ignored else). Note that "" are supported, but not '' + +#### BOX64_INSERT_ARGS +If that var exist, it will be inserted as firsts argument(s) to the command line. Note that "" are supported, but not '' + #### BOX64_EXIT * 0 : Nothing special * 1 : Just exit, don't try to run the program diff --git a/docs/box64.pod b/docs/box64.pod index d946dfcd44c8d67be6fe1e22640a8d0f7b4abca5..478e602f6eb49ea83aa7810567dd74aaa8504409 100644 --- a/docs/box64.pod +++ b/docs/box64.pod @@ -118,8 +118,8 @@ B > 1 (may need B also) =item B=I Path to look for x86_64 libraries. Default is current folder and C in -current folder. Also, F and -F are added if they exist. +current folder. Also, F, +F and F are added if they exist. =item B=I @@ -205,14 +205,14 @@ Disable handling of SigILL (to ease debugging mainly). Show Segfault signal even if a signal handler is present - * 0 : Don"t force show the SIGSEGV analysis (Default.) + * 0 : Don't force show the SIGSEGV analysis (Default.) * 1 : Show SIGSEGV detail, even if a signal handler is present =item B=I<0|1> -Show some Backtrace (Nativ e and Emulated) whgen a signal (SEGV, ILL or BUS) is caught +Show some Backtrace (Nativ e and Emulated) when a signal (SEGV, ILL or BUS) is caught - * 0 : Don"t show backtraces (Default.) + * 0 : Don't show backtraces (Default.) * 1 : Show Backtrace detail (for native, box64 is rename as the x86_64 binary run) =item B=I<0|1> @@ -272,7 +272,8 @@ Dynarec will compare it's execution with the interpreter (super slow, only for t * 0 : No comparison. (Default.) * 1 : Each opcode runs on interepter and on Dynarec, and regs and memory are compared and print if different. - * 2 : Thread-safe tests, extremely slow. + * 0xXXXXXXXX-0xYYYYYYYY : Define the interval where dynarec is tested (inclusive-exclusive) + =item B=I<0|1|2|3> @@ -407,7 +408,7 @@ Box64 will use wrapped libs even if the lib is specified with absolute path =item B=I<0|1> -Box64 will prefer emulated libs first (execpt for glibc, alsa, pulse, GL, +Box64 will prefer emulated libs first (except for glibc, alsa, pulse, GL, vulkan and X11 * 0 : Native libs are preferred (Default.) @@ -465,7 +466,7 @@ script. yyyy needs to be a full path to a valid x86_64 version of bash * 0 : Just print the Segfault message on segfault (default) * 1 : Launch `gdb` when a segfault, bus error or illegal instruction signal is trapped, attached to the offending process and go in an endless loop, waiting. When in gdb, you need to find the correct thread yourself (the one with `my_box64signalhandler` in is stack) then probably need to `finish` 1 or 2 functions (inside `usleep(..)`) and then you'll be in `my_box64signalhandler`, just before the printf of the Segfault message. Then simply `set waiting=0` to exit the infinite loop. - * 2 : Launch `gdbserver` when a segfault, bus error or illegal instruction signal is trapped, attached to the offending process, and go in an endless loop, waiting. Use `gdb /PATH/TO/box64` and then `target remote 127.0.0.1:1234` to connect to the gdbserver (or use actual IP if not on the machine). After that, the procedure is the same as with ` BOX64_JITGDB=1`. This mode can be usefullwhen programs redirect all console output to a file (like Unity3D Games) + * 2 : Launch `gdbserver` when a segfault, bus error or illegal instruction signal is trapped, attached to the offending process, and go in an endless loop, waiting. Use `gdb /PATH/TO/box64` and then `target remote 127.0.0.1:1234` to connect to the gdbserver (or use actual IP if not on the machine). After that, the procedure is the same as with ` BOX64_JITGDB=1`. This mode can be usefull when programs redirect all console output to a file (like Unity3D Games) =back diff --git a/rebuild_wrappers.py b/rebuild_wrappers.py index 7e2841943325e815c95ba86e46e97a7cf1df3e18..d4a8f4014c3ef6dee229de58d18325593cd1b2e4 100755 --- a/rebuild_wrappers.py +++ b/rebuild_wrappers.py @@ -150,14 +150,18 @@ class FunctionConvention(object): self.ident = ident self.name = convname self.values = valid_chars -# Free letters: B FG J QR T YZa e gh jk mno qrst z +# Free letters: B FG JK QR T YZa e gh jk mno qrst yz conventions = { - 'F': FunctionConvention('F', "System V", ['E', 'v', 'c', 'w', 'i', 'I', 'C', 'W', 'u', 'U', 'f', 'd', 'D', 'K', 'l', 'L', 'p', 'V', 'O', 'S', 'N', 'M', 'H', 'P', 'A', 'x', 'X', 'Y', 'y', 'b']), - 'W': FunctionConvention('W', "Windows", ['E', 'v', 'c', 'w', 'i', 'I', 'C', 'W', 'u', 'U', 'f', 'd', 'K', 'l', 'L', 'p', 'V', 'O', 'S', 'N', 'M', 'P', 'A']) + 'F': FunctionConvention('F', "System V", ['E', 'v', 'c', 'w', 'i', 'I', 'C', 'W', 'u', 'U', 'f', 'd', 'D', 'l', 'L', 'p', 'V', 'O', 'S', 'N', 'H', 'P', 'A', 'x', 'X', 'Y', 'b']), + 'W': FunctionConvention('W', "Windows", ['E', 'v', 'c', 'w', 'i', 'I', 'C', 'W', 'u', 'U', 'f', 'd', 'l', 'L', 'p', 'V', 'O', 'S', 'N', 'P', 'A']) } -sortedvalues = ['E', 'v', 'c', 'w', 'i', 'I', 'C', 'W', 'u', 'U', 'f', 'd', 'D', 'K', 'l', 'L', 'p', 'V', 'O', 'S', 'N', 'M', 'H', 'P', 'A', 'x', 'X', 'Y', 'y', 'b', '0', '1'] +sortedvalues = ['E', 'v', 'c', 'w', 'i', 'I', 'C', 'W', 'u', 'U', 'f', 'd', 'D', 'l', 'L', 'p', 'V', 'O', 'S', 'N', 'H', 'P', 'A', 'x', 'X', 'Y', 'b', '0', '1'] assert(all(all(c not in conv.values[:i] and c in sortedvalues for i, c in enumerate(conv.values)) for conv in conventions.values())) +# Some type depend on HAVE_LD80BITS; define this here so we can use it in readFiles and main +depends_on_ld: str = "DY" +assert(all(c in sortedvalues for c in depends_on_ld)) + class FunctionType(str): @staticmethod def validate(s: str, post: str) -> bool: @@ -369,7 +373,7 @@ def readFiles(files: Iterable[Filename]) -> Tuple[JumbledGlobals, JumbledRedirec # typedefs is a list of all "*FE*" types for the current file # mystructs is a map of all char -> (structure C name, replacement) for structures - typedefs : JumbledTypedefs = {} + typedefs : JumbledTypedefs = {} mystructs : JumbledStructures = {} mystructuses: JumbledStructUses = {} filespec[filename[:-10]] = (typedefs, mystructs, mystructuses) @@ -406,6 +410,7 @@ def readFiles(files: Iterable[Filename]) -> Tuple[JumbledGlobals, JumbledRedirec or match("libc", "tcmallocminimal") \ or match("libc", "tbbmallocproxy") \ or match("libc", "androidshmem") \ + or match("crypto", "libssl3") \ or match("tcmallocminimal", "tbbmallocproxy"): continue @@ -531,9 +536,22 @@ def readFiles(files: Iterable[Filename]) -> Tuple[JumbledGlobals, JumbledRedirec if ln not in gbl[str(dependants)]: gbl[str(dependants)].append(FunctionType(ln)) + if any(c in origLine for c in depends_on_ld): + if (gotype != "GOM") and (gotype != "GOWM") and (gotype != "GOD") and (gotype != "GOWD"): + print("\033[91mError:\033[m type depends on HAVE_LD80BITS but the GO type doesn't support that ({0}:{1})" + .format(filename, line[:-1])) + halt_required = True + if (gotype == "GO2") or (gotype == "GOW2") or (gotype == "GOD") or (gotype == "GODW"): + altfun = line.split(',')[2].split(')')[0].strip() + if altfun == "": + print("\033[91mError:\033[m empty alt function ({0}:{1})".format(filename, line[:-1])) + halt_required = True + elif altfun == funname: + print("\033[91mError:\033[m alt function is the original function ({0}:{1})".format(filename, line[:-1])) + halt_required = True if origLine[2] == "E": if (gotype != "GOM") and (gotype != "GOWM"): - if (gotype != "GO2") or not (line.split(',')[2].split(')')[0].strip().startswith('my_')): + if ((gotype != "GO2") and (gotype != "GOW2")) or not (line.split(',')[2].split(')')[0].strip().startswith('my_')): print("\033[91mThis is probably not what you meant!\033[m ({0}:{1})".format(filename, line[:-1])) halt_required = True if len(origLine) > 3: @@ -829,10 +847,10 @@ def main(root: str, files: Iterable[Filename], ver: str): # Detect functions which return in an x87 register retx87_wraps: Dict[ClausesStr, List[FunctionType]] = {} - return_x87: str = "DK" + return_x87: str = "D" # Sanity checks - forbidden_simple: Dict[str, str] = {"ARM64": "EDKVOSNMHPAxXYyb", "RV64": "EcwiDKVOSNMHPAxXYyb"} + forbidden_simple: Dict[str, str] = {"ARM64": "EDVOSNHPAxXYb", "RV64": "EcwiDVOSNHPAxXYb"} assert(all(k in allowed_simply for k in forbidden_simple)) assert(all(k in allowed_regs for k in forbidden_simple)) assert(all(k in allowed_fpr for k in forbidden_simple)) @@ -843,17 +861,18 @@ def main(root: str, files: Iterable[Filename], ver: str): assert(all(c not in allowed_simply[k1] + allowed_regs[k1] + allowed_fpr[k1] for c in forbidden_simple[k1])) assert(all(c in allowed_simply[k1] + allowed_regs[k1] + allowed_fpr[k1] + forbidden_simple[k1] for c in allowed_conv.values)) assert(all(c in allowed_conv.values for c in return_x87)) + assert(all(c in forbidden_simple[k] for c in depends_on_ld for k in forbidden_simple)) simple_wraps: Dict[str, Dict[ClausesStr, List[Tuple[FunctionType, int]]]] = { k1: {} for k1 in forbidden_simple } def check_simple(v: FunctionType) -> Dict[str, int]: - regs_count: int = 0 - fpr_count : int = 0 - - ret = {} + ret: Dict[str, int] = {} for k in forbidden_simple: + regs_count: int = 0 + fpr_count : int = 0 + if v.get_convention() is not allowed_conv: continue if v[0] in forbidden_simple[k]: @@ -931,6 +950,19 @@ def main(root: str, files: Iterable[Filename], ver: str): return v; {rbr} + static void* io_convert_back(void* v) + {lbr} + if(!v) + return v; + if(v == stdin) + return my__IO_2_1_stdin_; + if(v == stdout) + return my__IO_2_1_stdout_; + if(v == stderr) + return my__IO_2_1_stderr_; + return v; + {rbr} + #define ST0val ST0.d int of_convert(int); @@ -967,7 +999,6 @@ def main(root: str, files: Iterable[Filename], ver: str): // o = stdout // S = _IO_2_1_stdXXX_ pointer (or FILE*) // N = ... automatically sending 1 arg - // M = ... automatically sending 2 args // A = va_list // 0 = constant 0, 1 = constant 1 // x = float complex @@ -1034,20 +1065,59 @@ def main(root: str, files: Iterable[Filename], ver: str): # Rewrite the wrapper.c file: # i and u should only be 32 bits td_types = { - # E v c w i I C W u U f d D K l L p V O S N M H P A x X Y y b - 'F': ["x64emu_t*", "void", "int8_t", "int16_t", "int32_t", "int64_t", "uint8_t", "uint16_t", "uint32_t", "uint64_t", "float", "double", "long double", "double", "intptr_t", "uintptr_t", "void*", "void*", "int32_t", "void*", "...", "...", "unsigned __int128", "void*", "void*", "complexf_t", "complex_t", "complexl_t", "complex_t", "void*"], - # E v c w i I C W u U f d K l L p V O S N M P A - 'W': ["x64emu_t*", "void", "int8_t", "int16_t", "int32_t", "int64_t", "uint8_t", "uint16_t", "uint32_t", "uint64_t", "float", "double", "double", "intptr_t", "uintptr_t", "void*", "void*", "int32_t", "void*", "...", "...", "void*", "void*"] + # E v c w i I C W u U f d D l L p V O S N H P A x X Y b + 'F': ["x64emu_t*", "void", "int8_t", "int16_t", "int32_t", "int64_t", "uint8_t", "uint16_t", "uint32_t", "uint64_t", "float", "double", "long double", "intptr_t", "uintptr_t", "void*", "void*", "int32_t", "void*", "...", "unsigned __int128", "void*", "void*", "complexf_t", "complex_t", "complexl_t", "void*"], + # E v c w i I C W u U f d l L p V O S N P A + 'W': ["x64emu_t*", "void", "int8_t", "int16_t", "int32_t", "int64_t", "uint8_t", "uint16_t", "uint32_t", "uint64_t", "float", "double", "intptr_t", "uintptr_t", "void*", "void*", "int32_t", "void*", "...", "void*", "void*"] + } + td_types_nold = { + 'F': {'D': "double", 'Y': "complex_t"}, + 'W': {} + } + td_types_ld = { + k: {t: td_types[k][conventions[k].values.index(t)] for t in td_types_nold[k]} for k in td_types_nold } assert(all(k in conventions for k in td_types)) + assert(all(k in conventions for k in td_types_nold)) + assert(all(t in depends_on_ld for k in td_types_nold for t in td_types_nold[k])) for k in conventions: if len(conventions[k].values) != len(td_types[k]): raise NotImplementedError("len(values) = {lenval} != len(td_types) = {lentypes}".format(lenval=len(conventions[k].values), lentypes=len(td_types[k]))) def generate_typedefs(arr: Iterable[FunctionType], file) -> None: + any_depends_on_ld = False for v in arr: - file.write("typedef " + td_types[v.get_convention().ident][v.get_convention().values.index(v[0])] + " (*" + v + "_t)" + if any(c in v for c in depends_on_ld): + any_depends_on_ld = True + continue + name = v + "_t" + v = v[:-1] if v.endswith('NN') else v # FIXME + file.write("typedef " + td_types[v.get_convention().ident][v.get_convention().values.index(v[0])] + " (*" + name + ")" + "(" + ', '.join(td_types[v.get_convention().ident][v.get_convention().values.index(t)] for t in v[2:]) + ");\n") + if any_depends_on_ld: + file.write("\n#ifdef HAVE_LD80BITS\n") + for v in arr: + if all(c not in v for c in depends_on_ld): + continue + name = v + "_t" + v = v[:-1] if v.endswith('NN') else v # FIXME + file.write("typedef " + td_types[v.get_convention().ident][v.get_convention().values.index(v[0])] + " (*" + name + ")" + + "(" + ', '.join(td_types[v.get_convention().ident][v.get_convention().values.index(t)] for t in v[2:]) + ");\n") + file.write("#else // HAVE_LD80BITS\n") + for k in td_types_nold: + for t in td_types_nold[k]: + td_types[k][conventions[k].values.index(t)] = td_types_nold[k][t] + for v in arr: + if all(c not in v for c in depends_on_ld): + continue + name = v + "_t" + v = v[:-1] if v.endswith('NN') else v # FIXME + file.write("typedef " + td_types[v.get_convention().ident][v.get_convention().values.index(v[0])] + " (*" + name + ")" + + "(" + ', '.join(td_types[v.get_convention().ident][v.get_convention().values.index(t)] for t in v[2:]) + ");\n") + for k in td_types_nold: + for t in td_types_ld[k]: + td_types[k][conventions[k].values.index(t)] = td_types_ld[k][t] + file.write("#endif\n") with open(os.path.join(root, "src", "wrapped", "generated", "wrapper.c"), 'w') as file: file.write(files_header["wrapper.c"].format(lbr="{", rbr="}", version=ver)) @@ -1070,10 +1140,10 @@ def main(root: str, files: Iterable[Filename], ver: str): conventions['F']: [ "\n#error Invalid return type: emulator\n", # E "fn({0});", # v - "R_RAX=fn({0});", # c - "R_RAX=fn({0});", # w - "R_RAX=(int32_t)fn({0});", # i - "R_RAX=(int64_t)fn({0});", # I + "R_RAX=(uint8_t)fn({0});", # c + "R_RAX=(uint16_t)fn({0});", # w + "R_RAX=(uint32_t)fn({0});", # i + "S_RAX=(int64_t)fn({0});", # I "R_RAX=(unsigned char)fn({0});", # C "R_RAX=(unsigned short)fn({0});", # W "R_RAX=(uint32_t)fn({0});", # u @@ -1081,22 +1151,19 @@ def main(root: str, files: Iterable[Filename], ver: str): "emu->xmm[0].f[0]=fn({0});", # f "emu->xmm[0].d[0]=fn({0});", # d "long double ld=fn({0}); fpu_do_push(emu); ST0val = ld;", # D - "double db=fn({0}); fpu_do_push(emu); ST0val = db;", # K "R_RAX=(intptr_t)fn({0});", # l "R_RAX=(uintptr_t)fn({0});", # L "R_RAX=(uintptr_t)fn({0});", # p "\n#error Invalid return type: va_list\n", # V "\n#error Invalid return type: at_flags\n", # O - "\n#error Invalid return type: _io_file*\n", # S + "R_RAX=(uintptr_t)io_convert_back(fn({0}));", # S "\n#error Invalid return type: ... with 1 arg\n", # N - "\n#error Invalid return type: ... with 2 args\n", # M "unsigned __int128 u128 = fn({0}); R_RAX=(u128&0xFFFFFFFFFFFFFFFFL); R_RDX=(u128>>64)&0xFFFFFFFFFFFFFFFFL;", # H "\n#error Invalid return type: pointer in the stack\n", # P "\n#error Invalid return type: va_list\n", # A - 'from_complexf(emu, fn({0}));', # x - 'from_complex(emu, fn({0}));', # X - 'from_complexl(emu, fn({0}));', # Y - 'from_complexk(emu, fn({0}));', # y + "from_complexf(emu, fn({0}));", # x + "from_complex(emu, fn({0}));", # X + "from_complexl(emu, fn({0}));", # Y "\n#error Invalid return type: xcb_connection_t*\n", # b ], conventions['W']: [ @@ -1112,32 +1179,40 @@ def main(root: str, files: Iterable[Filename], ver: str): "R_RAX=fn({0});", # U "emu->xmm[0].f[0]=fn({0});", # f "emu->xmm[0].d[0]=fn({0});", # d - "double db=fn({0}); fpu_do_push(emu); ST0val = db;", # K "R_RAX=(intptr_t)fn({0});", # l "R_RAX=(uintptr_t)fn({0});", # L "R_RAX=(uintptr_t)fn({0});", # p "\n#error Invalid return type: va_list\n", # V "\n#error Invalid return type: at_flags\n", # O - "\n#error Invalid return type: _io_file*\n", # S + "R_RAX=io_convert_back(fn({0}));", # S "\n#error Invalid return type: ... with 1 arg\n", # N - "\n#error Invalid return type: ... with 2 args\n", # M "\n#error Invalid return type: pointer in the stack\n", # P "\n#error Invalid return type: va_list\n", # A ] } + vals_nold = { + conventions['F']: { + 'D': "double db=fn({0}); fpu_do_push(emu); ST0val = db;", + 'Y': "from_complexk(emu, fn({0}));", + }, + conventions['W']: {} + } + vals_ld = { + k: {t: vals[k][k.values.index(t)] for t in vals_nold[k]} for k in vals_nold + } # vreg: value is in a general register - # E v c w i I C W u U f d D K l L p V O S N M H P A x X Y y b - vreg = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 2, 2, 0, 1, 0, 0, 0, 0, 1] + # E v c w i I C W u U f d D l L p V O S N H P A x X Y b + vreg = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 2, 0, 1, 0, 0, 0, 1] # vxmm: value is in a XMM register - # E v c w i I C W u U f d D K l L p V O S N M H P A x X Y y b - vxmm = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0] + # E v c w i I C W u U f d D l L p V O S N H P A x X Y b + vxmm = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0] # vother: value is elsewere - # E v c w i I C W u U f d D K l L p V O S N M H P A x X Y y b - vother = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + # E v c w i I C W u U f d D l L p V O S N H P A x X Y b + vother = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # vstack: value is on the stack (or out of register) - # E v c w i I C W u U f d D K l L p V O S N M H P A x X Y y b - vstack = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 0, 1, 1, 1, 2, 2, 1, 1, 1, 2, 4, 4, 1] + # E v c w i I C W u U f d D l L p V O S N H P A x X Y b + vstack = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0, 1, 1, 1, 2, 1, 1, 1, 2, 4, 1] arg_r = [ "", # E "", # v @@ -1152,7 +1227,6 @@ def main(root: str, files: Iterable[Filename], ver: str): "", # f "", # d "", # D - "", # K "(intptr_t){p}, ", # l "(uintptr_t){p}, ", # L "(void*){p}, ", # p @@ -1160,14 +1234,12 @@ def main(root: str, files: Iterable[Filename], ver: str): "of_convert((int32_t){p}), ", # O "io_convert((void*){p}), ", # S "(void*){p}, ", # N - "(void*){p}, ", # M - "\n#error Use pp instead\n", # H + "(unsigned __int128){p} + ((unsigned __int128){p2} << 64), ", # H "", # P "(void*){p}, ", # A - "", # x + "", # x "", # X - "", # Y - "", # y + "", # Y "aligned_xcb, ", # b ] arg_x = [ @@ -1184,7 +1256,6 @@ def main(root: str, files: Iterable[Filename], ver: str): "emu->xmm[{p}].f[0], ", # f "emu->xmm[{p}].d[0], ", # d "", # D - "", # K "", # l "", # L "", # p @@ -1192,14 +1263,12 @@ def main(root: str, files: Iterable[Filename], ver: str): "", # O "", # S "", # N - "", # M "", # H "", # P "", # A "to_complexf(emu, {p}), ", # x "to_complex(emu, {p}), ", # X - "", # Y - "", # y + "", # Y "", # b ] arg_o = [ @@ -1216,7 +1285,6 @@ def main(root: str, files: Iterable[Filename], ver: str): "", # f "", # d "", # D - "", # K "", # l "", # L "", # p @@ -1224,14 +1292,12 @@ def main(root: str, files: Iterable[Filename], ver: str): "", # O "", # S "", # N - "", # M "", # H "", # P "", # A "", # x "", # X - "", # Y - "", # y + "", # Y "", # b ] arg_s = [ @@ -1248,7 +1314,6 @@ def main(root: str, files: Iterable[Filename], ver: str): "*(float*)(R_RSP + {p}), ", # f "*(double*)(R_RSP + {p}), ", # d "LD2localLD((void*)(R_RSP + {p})), ", # D - "FromLD((void*)(R_RSP + {p})), ", # K "*(intptr_t*)(R_RSP + {p}), ", # l "*(uintptr_t*)(R_RSP + {p}), ", # L "*(void**)(R_RSP + {p}), ", # p @@ -1256,16 +1321,21 @@ def main(root: str, files: Iterable[Filename], ver: str): "of_convert(*(int32_t*)(R_RSP + {p})), ", # O "io_convert(*(void**)(R_RSP + {p})), ", # S "*(void**)(R_RSP + {p}), ", # N - "*(void**)(R_RSP + {p}),*(void**)(R_RSP + {p} + 8), ", # M "*(unsigned __int128*)(R_RSP + {p}), ", # H "*(void**)(R_RSP + {p}), ", # P "*(void**)(R_RSP + {p}), ", # A "*(complexf_t*)(R_RSP + {p}), ", # x "*(complex_t*)(R_RSP + {p}), ", # X - "to_complexl(emu, R_RSP + {p}), ", # Y - "to_complexk(emu, R_RSP + {p}), ", # y + "to_complexl(emu, R_RSP + {p}), ", # Y "aligned_xcb, ", # b ] + arg_s_nold = { + 'D': "FromLD((void*)(R_RSP + {p})), ", # K + 'Y': "to_complexk(emu, R_RSP + {p}), ", # y + } + arg_s_ld = { + t: arg_s[conventions['F'].values.index(t)] for t in arg_s_nold + } # Asserts for k in conventions: @@ -1379,16 +1449,26 @@ def main(root: str, files: Iterable[Filename], ver: str): reg_arg = ["R_RDI", "R_RSI", "R_RDX", "R_RCX", "R_R8", "R_R9"] if (r < len(reg_arg)) and (vreg[idx] > 0): ret = "" - for _ in range(vreg[idx]): - # There may be values in multiple registers + if (vreg[idx] == 2) and ("{p2}" in arg_r[idx]): if r < len(reg_arg): # Value is in a general register - ret = ret + arg_r[idx].format(p=reg_arg[r]) - r = r + 1 + ret = ret + arg_r[idx].format(p=reg_arg[r], p2=reg_arg[r+1]) + r = r + 2 else: # Remaining is in the stack ret = ret + arg_s[idx].format(p=d) d = d + 8 + else: + for _ in range(vreg[idx]): + # There may be values in multiple registers + if r < len(reg_arg): + # Value is in a general register + ret = ret + arg_r[idx].format(p=reg_arg[r]) + r = r + 1 + else: + # Remaining is in the stack + ret = ret + arg_s[idx].format(p=d) + d = d + 8 return ret + function_args_systemV(args[1:], d, r, x) elif (x < 8) and (vxmm[idx] > 0): # Value is in an XMM register @@ -1446,22 +1526,82 @@ def main(root: str, files: Iterable[Filename], ver: str): f.write(" }\n") for k in gbls: + any_depends_on_ld = False if k != str(Clauses()): file.write("\n#if " + k + "\n") for v in gbls[k]: + if any(c in v for c in depends_on_ld): + any_depends_on_ld = True + continue if v == FunctionType("vFv"): # Suppress all warnings... file.write("void vFv(x64emu_t *emu, uintptr_t fcn) { vFv_t fn = (vFv_t)fcn; fn(); (void)emu; }\n") else: function_writer(file, v, v + "_t") + if any_depends_on_ld: + file.write("\n#ifdef HAVE_LD80BITS\n") + for v in gbls[k]: + if all(c not in v for c in depends_on_ld): + continue + if v == FunctionType("vFv"): + # Suppress all warnings... + file.write("void vFv(x64emu_t *emu, uintptr_t fcn) { vFv_t fn = (vFv_t)fcn; fn(); (void)emu; }\n") + else: + function_writer(file, v, v + "_t") + file.write("#else // HAVE_LD80BITS\n") + for c in vals_nold: + for t in vals_nold[c]: + vals[c][c.values.index(t)] = vals_nold[c][t] + for t in arg_s_nold: + arg_s[conventions['F'].values.index(t)] = arg_s_nold[t] + for v in gbls[k]: + if all(c not in v for c in depends_on_ld): + continue + if v == FunctionType("vFv"): + # Suppress all warnings... + file.write("void vFv(x64emu_t *emu, uintptr_t fcn) { vFv_t fn = (vFv_t)fcn; fn(); (void)emu; }\n") + else: + function_writer(file, v, v + "_t") + for c in vals_nold: + for t in vals_ld[c]: + vals[c][c.values.index(t)] = vals_ld[c][t] + for t in arg_s_nold: + arg_s[conventions['F'].values.index(t)] = arg_s_nold[t] + file.write("#endif\n") if k != str(Clauses()): file.write("#endif\n") file.write("\n") for k in redirects: + any_depends_on_ld = False if k != str(Clauses()): file.write("\n#if " + k + "\n") for vr, vf in redirects[k]: + if any(c in vr for c in depends_on_ld): + any_depends_on_ld = True + continue function_writer(file, vr, vf + "_t") + if any_depends_on_ld: + file.write("\n#ifdef HAVE_LD80BITS\n") + for vr, vf in redirects[k]: + if all(c not in vr for c in depends_on_ld): + continue + function_writer(file, vr, vf + "_t") + file.write("#else // HAVE_LD80BITS\n") + for c in vals_nold: + for t in vals_nold[c]: + vals[c][c.values.index(t)] = vals_nold[c][t] + for t in arg_s_nold: + arg_s[conventions['F'].values.index(t)] = arg_s_nold[t] + for vr, vf in redirects[k]: + if all(c not in vr for c in depends_on_ld): + continue + function_writer(file, vr, vf + "_t") + for c in vals_nold: + for t in vals_ld[c]: + vals[c][c.values.index(t)] = vals_ld[c][t] + for t in arg_s_nold: + arg_s[conventions['F'].values.index(t)] = arg_s_nold[t] + file.write("#endif\n") if k != str(Clauses()): file.write("#endif\n") @@ -1469,7 +1609,7 @@ def main(root: str, files: Iterable[Filename], ver: str): inttext = "" file.write("\n") for k1 in simple_idxs: - file.write("#{inttext}if defined({k1})\nint isSimpleWrapper(wrapper_t fun) {{\n".format(inttext=inttext, k1=k1)) + file.write("#{inttext}if defined({k1})\nint isSimpleWrapper(wrapper_t fun) {{\n\tif (box64_is32bits) return 0;\n".format(inttext=inttext, k1=k1)) inttext = "el" for k in simple_idxs[k1]: if k != str(Clauses()): @@ -1479,9 +1619,10 @@ def main(root: str, files: Iterable[Filename], ver: str): if k != str(Clauses()): file.write("#endif\n") file.write("\treturn 0;\n}\n") - file.write("\n#else\nint isSimpleWrapper(wrapper_t fun) {\n\treturn 0;\n}\n#endif\n") + file.write("#else\nint isSimpleWrapper(wrapper_t fun) {\n\treturn 0;\n}\n#endif\n") # Write the isRetX87Wrapper function + file.write("\nint isRetX87Wrapper32(wrapper_t fun)\n#ifndef BOX32\n{ return 0; }\n#else\n ;\n#endif\n") file.write("\nint isRetX87Wrapper(wrapper_t fun) {\n") for k in retx87_idxs: if k != str(Clauses()): @@ -1560,11 +1701,11 @@ def main(root: str, files: Iterable[Filename], ver: str): return 0 if __name__ == '__main__': - limit = [] + limit: List[int] = [] for i, v in enumerate(sys.argv): if v == "--": limit.append(i) Define.defines = list(map(DefineType, sys.argv[2:limit[0]])) - if main(sys.argv[1], sys.argv[limit[0]+1:], "2.4.0.21") != 0: + if main(sys.argv[1], sys.argv[limit[0]+1:], "2.5.0.24") != 0: exit(2) exit(0) diff --git a/rebuild_wrappers_32.py b/rebuild_wrappers_32.py new file mode 100755 index 0000000000000000000000000000000000000000..85fc3c973d17d614975d4e3bc0f53df5f56f676c --- /dev/null +++ b/rebuild_wrappers_32.py @@ -0,0 +1,1647 @@ +#!/usr/bin/env python3 + +import os +import sys + +try: + assert(sys.version_info.major == 3) + if sys.version_info.minor >= 9: + # Python 3.9+ + from typing import Any, Generic, NewType, Optional, TypeVar, Union, final + from collections.abc import Callable, Iterable, Sequence + Dict = dict + List = list + Type = type + Tuple = tuple + elif sys.version_info.minor >= 8: + # Python [3.8, 3.9) + from typing import Any, Callable, Dict, Generic, Iterable, List, NewType, Optional, Sequence, Tuple, Type, TypeVar, Union, final + elif (sys.version_info.minor >= 5) and (sys.version_info.micro >= 2): + # Python [3.5.2, 3.8) + from typing import Any, Callable, Dict, Generic, Iterable, List, NewType, Optional, Sequence, Tuple, Type, TypeVar, Union + final = lambda fun: fun # type: ignore + elif sys.version_info.minor >= 5: + # Python [3.5, 3.5.2) + from typing import Any, Callable, Dict, Generic, Iterable, List, Optional, Sequence, Tuple, Type, TypeVar, Union + def NewType(_, b): return b # type: ignore + final = lambda fun: fun # type: ignore + else: + # Python < 3.5 + #print("Your Python version does not have the typing module, fallback to empty 'types'") + # Dummies + class GTDummy: + def __getitem__(self, _): + return self + Any = GTDummy() # type: ignore + Callable = GTDummy() # type: ignore + Dict = GTDummy() # type: ignore + Generic = GTDummy() # type: ignore + Iterable = GTDummy() # type: ignore + List = GTDummy() # type: ignore + def NewType(_, b): return b # type: ignore + Optional = GTDummy() # type: ignore + Sequence = GTDummy() # type: ignore + Tuple = GTDummy() # type: ignore + Type = GTDummy() # type: ignore + def TypeVar(T): return object # type: ignore + Union = GTDummy() # type: ignore + final = lambda fun: fun # type: ignore +except ImportError: + print("It seems your Python version is quite broken...") + assert(False) + +""" +Generates all files in src/wrapped/generated +=== + +TL;DR: Automagically creates type definitions (/.F.+/ functions/typedefs...). + All '//%' in the headers are used by the script. + +Reads each lines of each "_private.h" headers (plus wrappedd3dadapter9_genvate.h, derived from wrappedd3dadapter9_gen.h). +For each of them: +- If if starts with a #ifdef, #else, #ifndef, #endif, it memorizes which definition is required +- If it starts with a "GO", it will do multiple things: + - It memorizes the type used by the function (second macro argument) + - It memorizes the type it is mapped to, if needed (eg, iFvp is mapped to iFp: the first argument is dropped) + - It checks if the type given (both original and mapped to) are valid + - If the signature contains a 'E' but it is not a "GOM" command, it will throw an error* (and vice-versa) + - If the line also contains '//%', the script will parse what's attached to this comment start: + - If it is attached to a '%', the function will be skipped when generating the 'SUPER' macro in the *types.h + - *If it is attached to a 'noE' or attached to something that ends with ',noE', it will ignore functions that + don't have the emulator as an argument but are still GOM functions + To know more about the signatures, see also box86.org's article (TODO FOR NOW). +- If the line starts with a '//%S', it will memorize a structure declaration. + The structure of it is: "//%S " + NOTE: Those structure letters are "fake types" that are accepted in the macros. + +`gbl` contains the first list, `redirects` the second and + `filespec` constains file specific informations (eg, structures, typedefs required...). + +After sorting the data, it generates: + +wrapper32.c +--------- +(Private) type definitions (/.F.+_t/) +Function definitions (/.F.+/ functions, that actually execute the function given as argument) + +wrapper32.h +--------- +Generic "wrapper32_t" type definition +Function declarations (/.F._32+/ functions) + +*types32.h +-------- +Local types definition, for the original signatures +The SUPER() macro definition, used to generate and initialize the `*_my_t` library structure +(TODO: also automate this declaration/definition? It would require more metadata, + and may break sometime in the future due to the system changing...) + +*defs32.h +------- +Local `#define`s, for signature mapping + +*undefs32.h +--------- +Local `#undefine`s, for signature mapping + + +Example: +======== +In wrappedtest_private.h: + ---------------------- +//%S X TestLibStructure ppu + +GO(superfunction, pFX) +GOM(superFunction2, pFEpX) +GOM(functionWithoutE, pFppu) //%noE +GOM(functionWithoutEAndNotInTypes, pFpppu) //%%,noE +GOM(functionNotInTypes, pFEpppu) //%% + +[No output] +Generated files: +wrapper32.c: [snippet] +---------- +typedef void *(*pFppu_t)(void*, void*, uint32_t); +typedef void *(*pFpppu_t)(void*, void*, void*, uint32_t); +typedef void *(*pFEpppu_t)(x64emu_t*, void*, void*, void*, uint32_t); + +void pFppu_32(x64emu_t *emu, uintptr_t fcn) { pFppu_t *fn = (pFppu_t)fn; R_RAX=...; } +void pFpppu_32(x64emu_t *emu, uintptr_t fcn) { pFpppu_t *fn = (pFpppu_t)fn; R_RAX=...; } +void pFEpppu_32(x64emu_t *emu, uintptr_t fcn) { pFpppu_t *fn = (pFpppu_t)fn; R_RAX=...; } + +wrapper32.h: [snippet] +---------- +typedef void (*wrapper_t)(x64emu_t*, uintptr_t); + +void pFppu_32(x64emu_t *emu, uintptr_t fcn); +void pFpppu_32(x64emu_t *emu, uintptr_t fcn); +void pFEpppu_32(x64emu_t *emu, uintptr_t fcn); + +wrappedtesttypes32.h: +------------------- +typedef void *(*pFpX_32_t)(void*, TestLibStructure); +typedef void *(*pFppu_32_t)(void*, void*, uint32_t); +typedef void *(*pFpppu_32_t)(void*, void*, void*, uint32_t); + +#define SUPER() ADDED_FUNCTIONS() \\ + GO(superFunction2, pFpX) \\ + GO(functionWithoutE, pFppu) + +wrappedtestdefs32.h: +------------------ +#define pFX pFppu +#define pFpX pFpppu + +wrappedtestundefs32.h: +-------------------- +#undef pFX +#undef pFpX +""" + +# Free characters: +# FG J QR T XYZ e g jk mno q xyz01 3456789 + +T = TypeVar('T') +U = TypeVar('U') + +Filename = str + +class CustOrderedDict(Generic[T, U], Iterable[T]): + __keys__: List[T] + __actdict__: Dict[T, U] + + def __init__(self, src: Optional[Dict[T, U]] = None) -> None: + if src is None: + self.__keys__ = [] + self.__actdict__ = {} + else: + self.__keys__ = list(src.keys()) + self.__actdict__ = src + + def sort(self, key: Callable[[T], Any] = lambda x: x) -> None: + self.__keys__.sort(key=key) + + def __iter__(self): + return iter(self.__keys__) + def __contains__(self, k: T) -> bool: + return k in self.__actdict__ + def __getitem__(self, k: T) -> U: + return self.__actdict__[k] + def __setitem__(self, k: T, v: U) -> None: + if k not in self.__keys__: self.__keys__.append(k) + self.__actdict__[k] = v +class CustOrderedDictList(CustOrderedDict[T, List[U]]): + def __getitem__(self, k: T) -> List[U]: + if k not in self: self[k] = [] + return super().__getitem__(k) + +class FirstArgumentSingletonMeta(Generic[T], type): + _singletons: Dict[T, Type['FirstArgumentSingletonMeta']] + + @classmethod + def __prepare__(metacls, __name: str, __bases: Tuple[type, ...], **kwds: Any) -> Dict[str, Any]: + return { "_singletons": {} } + + def __contains__(cls, k): + return k in cls._singletons + + def getSingletons(cls): + return cls._singletons + def __getitem__(cls, k): + return cls._singletons[k] + + def __call__(cls, fstarg, *largs, **kwargs): + if fstarg not in cls._singletons: + cls._singletons[fstarg] = super().__call__(fstarg, *largs, **kwargs) + return cls._singletons[fstarg] + +DefineType = NewType('DefineType', str) +@final +class Define: + name: DefineType + inverted_: bool + + defines: List[DefineType] = [] + + def __init__(self, name: DefineType, inverted_: bool) -> None: + # All values for "name" are in defines (throw otherwise) + if name not in Define.defines: + raise KeyError(name) + + self.name = name + self.inverted_ = inverted_ + def copy(self) -> "Define": + return Define(self.name, self.inverted_) + + def value(self) -> int: + return Define.defines.index(self.name)*2 + (1 if self.inverted_ else 0) + + def invert(self) -> "Define": + """ + invert -- Transform a `defined()` into a `!defined()` and vice-versa, in place. + """ + self.inverted_ = not self.inverted_ + return self + def inverted(self) -> "Define": + """ + inverted -- Transform a `defined()` into a `!defined()` and vice-versa, out-of-place. + """ + return Define(self.name, not self.inverted_) + + def __str__(self) -> str: + if self.inverted_: + return "!defined(" + self.name + ")" + else: + return "defined(" + self.name + ")" + def __eq__(self, o) -> bool: + return isinstance(o, Define) and (self.name == o.name) and (self.inverted_ == o.inverted_) +@final +class Clause: + defines: List[Define] + + def __init__(self, defines: Union[List[Define], str] = []) -> None: + if isinstance(defines, str): + if defines == "": + self.defines = [] + else: + self.defines = list( + map( + lambda x: + Define(DefineType(x[9:-1] if x[0] == '!' else x[8:-1]), x[0] == '!') + , defines.split(" && ") + ) + ) + else: + self.defines = [d.copy() for d in defines] + def copy(self) -> "Clause": + return Clause(self.defines) + + def append(self, define: Define) -> "Clause": + if any((define2.name == define.name) and (define2.inverted_ != define.inverted_) for define2 in self.defines): + raise ValueError("Tried to append an incompatible clause") + + self.defines.append(define) + return self + def invert_last(self) -> "Clause": + self.defines[-1].invert() + return self + def pop_last(self) -> "Clause": + if len(self.defines) > 0: self.defines.pop() + return self + + def empty(self) -> bool: + return self.defines == [] + + def __str__(self) -> str: + return " && ".join(map(str, self.defines)) + def __hash__(self): + return hash(str(self)) + def __eq__(self, o) -> bool: + return isinstance(o, Clause) and (self.defines == o.defines) +ClausesStr = str +@final +class Clauses: + """ + Represent a list of clauses, aka a list of or-ed together and-ed "defined()" + conditions + """ + clauses: List[Clause] + + def __init__(self, clauses: Union[List[Clause], str] = []) -> None: + if isinstance(clauses, str): + if clauses == "()": + self.clauses = [] + elif ") || (" in clauses: + self.clauses = list(map(Clause, clauses[1:-1].split(") || ("))) + else: + self.clauses = [Clause(clauses)] + else: + self.clauses = clauses[:] + def copy(self) -> "Clauses": + return Clauses(self.clauses[:]) + + def add(self, defines: Clause) -> "Clauses": + self.clauses.append(defines) + return self + + def empty(self) -> bool: + return self.clauses == [] + + def splitdef(self) -> Sequence[int]: + """ + splitdef -- Sorting key function for #ifdefs + + All #if defined(...) are sorted first by the length of its string + representation, then by the number of clauses, then by the number of + '&&' in each clause and then by the "key" of the tested names (left to + right, inverted placed after non-inverted). + """ + + ret = [len(str(self)), len(self.clauses)] if len(self.clauses) > 0 else [-1] + for cunj in self.clauses: + ret.append(len(cunj.defines)) + for cunj in self.clauses: + for d in cunj.defines: + ret.append(d.value()) + return ret + + def reduce(self) -> None: + """ + reduce -- Reduces the number of clauses in-place + + Removes the most possible number of conditions, both by removing + conditions and by removing entire clauses. + + As a side effect, sorts itself. + """ + # Early breaks + if any(c.empty() for c in self.clauses): + self.clauses = [] + return + if len(self.clauses) == 0: + return + elif len(self.clauses) == 1: + clause = Clause() + for define in self.clauses[0].defines: + if define in clause.defines: + continue + elif define.inverted() in clause.defines: + clause = Clause(',') # This should never happen (and never happens without breaking encapsulation) + else: + clause.append(define) + clause.defines.sort(key=lambda d: Define.defines.index(d.name)) + self.clauses = [clause] + return + elif len(self.clauses) == 2: + if len(self.clauses[0].defines) == len(self.clauses[1].defines) == 1: + if self.clauses[0].defines[0].inverted() == self.clauses[1].defines[0]: + self.clauses = [] + return + + # Quine-McCluskey algorithm + # matches: list of (matches, inverted_mask) + needed: List[Tuple[int, int]] = [ + (i, 0) + for i in range(1< 0: + combined: List[Tuple[int, int]] = [] + combinable: List[bool] = [False] * len(last_combined) + while len(last_combined) > 0: + attempt = last_combined[-1] + for idx, (i, m) in enumerate(last_combined): + if idx == len(last_combined) - 1: + if not combinable[idx]: + uncombinable.append(attempt) + elif m == attempt[1]: + if (i ^ attempt[0]) & ((i ^ attempt[0]) - 1) != 0: + continue # More than 1 bit of difference + + combinable[idx] = True + combinable[len(last_combined) - 1] = True + add = (i | attempt[0], m | (i ^ attempt[0])) + if add in combined: + continue # Aleady added + combined.append(add) + last_combined.pop() + last_combined = combined + + matches: Dict[int, List[Tuple[int, int]]] = { + i: [combination for combination in uncombinable if (i | combination[1]) == combination[0]] for i, _ in needed + } + self.clauses = [] + matches_size: int = 1 + while len(matches) != 0: + match_found = True + while match_found: + match_found = False + for i in matches: + if len(matches[i]) < matches_size: + raise NotImplementedError("There seems to be an error in the algorithm") + elif len(matches[i]) == matches_size: + match_found = True + self.clauses.append( + Clause([ + Define( + n, + matches[i][0][0] & (1 << j) == 0 + ) for j, n in enumerate(Define.defines) if matches[i][0][1] & (1 << j) == 0 + ])) + self.clauses[-1].defines.sort(key=lambda d: Define.defines.index(d.name)) + to_erase: List[int] = [] + for j in matches: + if matches[i][0] in matches[j]: + to_erase.append(j) + for j in to_erase: + del matches[j] + break + matches_size = matches_size + 1 + self.clauses.sort(key=lambda c: (len(c.defines), [Define.defines.index(d.name) for d in c.defines])) + + def __str__(self) -> ClausesStr: + if len(self.clauses) == 1: + return str(self.clauses[0]) + else: + return "(" + ") || (".join(map(str, self.clauses)) + ")" + def __hash__(self): + return hash(str(self)) + def __eq__(self, o) -> bool: + return isinstance(o, Clauses) and (self.clauses == o.clauses) + +class CType(metaclass=FirstArgumentSingletonMeta): + class ReadWrite: + none: 'CType.ReadWrite' + readonly: 'CType.ReadWrite' + writeonly: 'CType.ReadWrite' + readwrite: 'CType.ReadWrite' + def __init__(self, pre: bool, post: bool) -> None: + # pre is "need to convert before the call", post is "need to convert after the call" + self.pre = pre + self.post = post + + @staticmethod + def find_next(name: str) -> Tuple[str, Optional[Tuple['CType.ReadWrite', str, str]]]: + """ + Returns (pre, (type, str, post)) + where name == pre.('r' if type is readonly, 'b' if type is writeonly else 'B').str.'_'.post + Aka, pre contains no structure; type, str is the structure characterization (b fo writeonly). + If it returns (pre, None), it is guaranteed to have no structure in pre === name. + """ + beg: Optional[int] = None + t: Optional[CType.ReadWrite] = None + depth = 0 + + for i in range(len(name)): + if (name[i] == 'r') or (name[i] == 'b') or (name[i] == 'B'): + if beg is None: + beg = i + t = CType.ReadWrite.readonly if name[i] == 'r' else \ + CType.ReadWrite.writeonly if name[i] == 'B' else CType.ReadWrite.readwrite + depth = depth + 1 + elif name[i] == '_': + if depth == 0: + raise ValueError(f"Invalid type {name}") + elif depth == 1: + assert beg is not None, "Unreachable" + assert t is not None, "Unreachable" + return name[:beg], (t, name[beg+1:i], name[i+1:]) + depth = depth - 1 + + return name, None + + def __init__(self, name_t: Tuple[str, 'CType.ReadWrite'], clause: Clause, filespec: 'FileSpec') -> None: + self.name = name_t[0] + self.type = name_t[1] + if self.type is CType.ReadWrite.none: + self.structname = self.name + self.structname2 = self.name + elif self.type is CType.ReadWrite.readonly: + self.structname = "r" + self.name + "_" + self.structname2 = "struct_" + self.name + elif self.type is CType.ReadWrite.writeonly: + self.structname = "B" + self.name + "_" + self.structname2 = "struct_" + self.name + elif self.type is CType.ReadWrite.readwrite: + self.structname = "b" + self.name + "_" + self.structname2 = "struct_" + self.name + else: + self.structname = "//" + self.name + self.structname2 = "//" + self.name + self.recursive: List[CType] = [] + self.replaced = self.name + + if len(name_t[0]) != 1: + replaced = [] + pre, tmp = CType.find_next(self.name) + while tmp is not None: + self.recursive.extend(CType((c, CType.ReadWrite.none), clause, filespec) for c in pre) + self.recursive.append(CType((tmp[1], tmp[0]), clause, filespec)) + replaced.append(pre) + pre, tmp = CType.find_next(tmp[2]) + self.recursive.extend(CType((c, CType.ReadWrite.none), clause, filespec) for c in pre) + replaced.append(pre) + self.replaced = 'B'.join(replaced) + + self.asret: Optional[str] = None + self.aspre: Optional[str] = None + self.asarg: Optional[str] = None + self.aspost: Optional[str] = None + + def describe(self, spacer=""): + nl = "" if len(self.recursive) == 0 else f"\n{spacer}+-> " + if self.type is CType.ReadWrite.none: + t = "" + elif self.type is CType.ReadWrite.readonly: + t = " (r-)" + elif self.type is CType.ReadWrite.writeonly: + t = " (-w)" + elif self.type is CType.ReadWrite.readwrite: + t = " (rw)" + else: + t = " ?!?!" + return f"{self.structname} => {self.replaced}+{len(self.recursive)}{t}{nl}" + \ + f"\n{spacer}+-> ".join(r.describe(spacer + " ") for r in self.recursive) + + def generate_converters(self) -> None: + if self.asret is not None: + return # Already done: probably a base type + + self.asret = "\n#error TODO? Cannot return custom structure\n" + self.aspre = f"struct_{self.name}_t arg_{{p}}={{{{0}}}}; " + ("" if not self.type.pre else \ + f"if (*(ptr_t*)(from_ptr((R_ESP + {{p}})))) from_{self.structname2}(&arg_{{p}}, *(ptr_t*)(from_ptr((R_ESP + {{p}})))); ") + self.asarg = "*(ptr_t*)(from_ptr((R_ESP + {p}))) ? &arg_{p} : NULL, " + self.aspost = "" if not self.type.post else \ + (" if (*(ptr_t*)(from_ptr((R_ESP + {p})))) to_" + self.structname2 + \ + "(*(ptr_t*)(from_ptr((R_ESP + {p}))), &arg_{p});") + + for rec in self.recursive: + rec.generate_converters() +class CTypeNone(CType, metaclass=FirstArgumentSingletonMeta): + def __init__(self, name: str, clause: Clause, filespec: 'FileSpec') -> None: + super().__init__((name, CType.ReadWrite.none), clause, filespec) + +CType.ReadWrite.none = CType.ReadWrite(False, False) # Uppermost type +CType.ReadWrite.readonly = CType.ReadWrite(True, False) +CType.ReadWrite.writeonly = CType.ReadWrite(False, True) +CType.ReadWrite.readwrite = CType.ReadWrite(True, True) + +class FileSpec: + class Struct: + def __init__(self, name: str, repl: str) -> None: + self.name = name + self.repl = repl + + # CONSTANT- values: original set + # CONSTANT- rvalues: valid replacement values (outside of structures) + # CONSTANT- validrepl: valid replacement values (for structures) + # structs: structure ids and additional data + values: Sequence[str] = ['E', 'v', 'c', 'w', 'i', 'I', 'C', 'W', 'u', 'U', 'f', 'd', 'D', 'K', 'l', 'L', 'p', 'h', 'H', 'a', 'A', 'V', 'O', 'S', '2', 'P', 'N', 'M', 's', 'r', 'b', 'B', '_', 't', 'X'] + rvalues: Sequence[str] = ['E', 'v', 'c', 'w', 'i', 'I', 'C', 'W', 'u', 'U', 'f', 'd', 'D', 'K', 'l', 'L', 'p', 'h', 'H', 'a', 'A', 'V', 'O', 'S', '2', 'P', 'N', 'M', 's', 'r', 'b', 'B', '_', 't', 'X'] + validrepl: Sequence[str] = ['c', 'w', 'i', 'I', 'C', 'W', 'u', 'U', 'f', 'd', 'D', 'K', 'l', 'L', 'p', 'h', 'H', 'a', 'A', 'V', 'O', 'S', '2', 'P', 'N', 'M', 's', 'r', 'b', 'B', '_'] + + def __init__(self) -> None: + self.structs: CustOrderedDict[str, FileSpec.Struct] = CustOrderedDict() + + self.typedefs: CustOrderedDictList[_BareFunctionType, Function] = CustOrderedDictList() + self.structsuses: List[FunctionType] = [] + + def registerStruct(self, id: str, name: str, repl: str) -> None: + if len(id) != 1: + # If you REALLY need it, consider opening a ticket + # Before you do, consider that everything that is a valid in a C token is valid here too + raise ValueError("Type ID \"" + id + "\" is too long!") + if id in self.rvalues: + raise ValueError("Type " + id + " is already reserved!") + if id in self.structs: + raise ValueError("Type " + id + " is already used!") + if any(c not in self.validrepl for c in repl): + raise ValueError("Invalid structure replacement value \"" + repl + "\" (note: recursive replacements are not supported)") + if repl == "": + # If you need this, please open an issue (also, this is never actually called, empty strings are removed at the calling site) + raise NotImplementedError("Invalid structure metadata supply (empty replacement)") + + self.structs[id] = FileSpec.Struct(name, repl) + +class FunctionType(metaclass=FirstArgumentSingletonMeta): + def __new__(cls, string: str, clause: Clause, filespec: FileSpec) -> 'FunctionType': + if ((string[0] not in FileSpec.values) or any(c not in FileSpec.values for c in string[2:])) \ + and ((string[0] in FileSpec.values) or (string[0] in filespec.structs)) \ + and all((c != 'v') and (c in FileSpec.values) or (c in filespec.structs) for c in string[2:]): + return super().__new__(StructFunctionType) + else: + return super().__new__(cls) + + def __init__(self, string: str, clause: Clause, filespec: FileSpec) -> None: + # Early fail + if 'VV' in string: + raise ValueError("'V' can only be at the end of the type (use 's' instead)") + + self.orig = CTypeNone(string, clause, filespec) + + self.hasemu = 'E' in self.orig.replaced and ( + (self.orig.recursive[1].structname != 'E') or ('E' in self.orig.recursive[0].name) or any('E' in ct.name for ct in self.orig.recursive[2:])) + if self.hasemu: + if ("E" in self.orig.recursive[0].name) or any("E" in ct.name for ct in self.orig.recursive[3:]): + raise NotImplementedError("x64emu_t* not as the first parameter") + if len(self.orig.replaced) < 4: + raise NotImplementedError("Type {0} too short".format(self.orig.replaced)) + chk_type = self.orig.recursive[0].structname + ''.join(map(lambda ct: ct.structname, self.orig.recursive[3:])) + else: + if len(self.orig.replaced) < 3: + raise NotImplementedError("Type {0} too short".format(self.orig.replaced)) + chk_type = self.orig.recursive[0].structname + ''.join(map(lambda ct: ct.structname, self.orig.recursive[2:])) + self.withoutE = _BareFunctionType(string[0:2] + chk_type[1:], clause, filespec, isinstance(self, StructFunctionType)) + self._bare = _BareFunctionType(self.orig.name, clause, filespec, isinstance(self, StructFunctionType)) + if len(chk_type) < 2: + raise NotImplementedError("Type {0} too short".format(string)) + + if self.orig.recursive[1].structname not in ['E', 'F']: + raise NotImplementedError("Bad middle letter {0}".format(self.orig.recursive[1].structname)) + + self.redirect = any(c not in FileSpec.values for c in chk_type) or (('v' in chk_type[1:]) and (len(chk_type) > 2)) + self.usestruct: bool = False + self.redirected: Optional[FunctionType] = None + if self.redirect: + if all(((i == 0) or (c != 'v')) and (c in FileSpec.values) or (c in filespec.structs) for i, c in enumerate(chk_type)): + # 'v' is never allowed here + self.redirect = False + self.usestruct = True + return + else: + if any(c not in FileSpec.rvalues for c in chk_type): + raise NotImplementedError("Invalid type {0}".format(string)) + + # Ok, this is acceptable: there is void + string = string[:2] + (string[2:] + .replace("v", "")) # void -> nothing + assert(len(string) >= 3) # If this raises, don't use 'vFvvvvvv' as a signature... + self.redirected = FunctionType(string, clause, filespec) + assert(not self.redirected.redirect and not self.redirected.usestruct) + + def getchar(self, c: str) -> int: + return self._bare.getchar(c) + def getcharidx(self, i: int) -> int: + return self._bare.getcharidx(i) + def splitchar(self) -> List[int]: + return self._bare.splitchar() + + def __hash__(self) -> int: + return str.__hash__(self.orig.name) + def __eq__(self, o: object): + return isinstance(o, FunctionType) and ((self.orig.name == o.orig.name) and (o is self or not isinstance(self, StructFunctionType))) +class StructFunctionType(FunctionType): + def __init__(self, string: str, clause: Clause, filespec: FileSpec) -> None: + super().__init__(string, clause, filespec) + assert(self.usestruct) + self.filespec = filespec + self.filespec.structsuses.append(self) + + self.returnsstruct = string[0] in self.filespec.structs + if self.returnsstruct: + if self.hasemu: + string = "pFEp" + string[3:] + else: + string = "pFp" + string[2:] + + for struct in self.filespec.structs: + string = string.replace(struct, self.filespec.structs[struct].repl) + self.redirected = FunctionType(string, clause, self.filespec) + +class _BareFunctionType(FunctionType): # Fake derived + def __new__(cls, *largs, **kwargs): + return object.__new__(cls) + def __init__(self, string: str, clause: Clause, filespec: FileSpec, isstruct: bool) -> None: + self.orig = CTypeNone(string, clause, filespec) + self.filespec = filespec + self.isstruct = isstruct + + def getchar(self, c: str) -> int: + if c in FileSpec.rvalues: + return FileSpec.rvalues.index(c) + else: + assert(self.isstruct) + return self.filespec.structs.__keys__.index(c) + len(FileSpec.rvalues) + def getcharidx(self, i: int) -> int: + return self.getchar(self.orig.replaced[i]) + + def splitchar(self) -> List[int]: + try: + ret = [ + len(self.orig.replaced), len(self.orig.name), self.getcharidx(0), + *map(self.getcharidx, range(2, len(self.orig.replaced))) + ] + return ret + except ValueError as e: + raise ValueError("Value is " + self.orig.replaced + ":\n" + self.orig.describe()) from e + except AssertionError as e: + raise ValueError("Value is " + self.orig.replaced + ":\n" + self.orig.describe()) from e + +# Allowed GOs: GO,GOM,GO2,GOS,GOW,GOWM,GOW2,GO2S +class Function: + def __init__(self, name: str, funtype: FunctionType, gotype: str, filespec: FileSpec, filename: Filename, line: str) -> None: + self._noE = False + + self.no_dlsym: bool = False + if "//%" in line: + additional_meta = line.split("//%")[1].split(" ")[0].strip() + + if additional_meta.endswith(",noE"): + self._noE = True + additional_meta = additional_meta[:-4] + + if additional_meta == 'noE': + assert not self._noE, "Duplicated 'noE'" + self._noE = True + elif additional_meta == '%': + self.no_dlsym = True + else: + raise NotImplementedError("Changing the function type 'on the fly' is not supported") + + funtypeerr = ValueError("Invalid function type " + gotype) + if not gotype.startswith("GO"): + raise funtypeerr + gotype = gotype[2:] + self.isweak = (len(gotype) > 0) and (gotype[0] == "W") + if self.isweak: + gotype = gotype[1:] + self.ismy = (len(gotype) > 0) and (gotype[0] == "M") + self.is2 = (len(gotype) > 0) and (gotype[0] == "2") + self.retS = (len(gotype) > 0) and (gotype[0] == "S") + if self.ismy or self.is2 or self.retS: + gotype = gotype[1:] + if self.retS: + self.ismy = True + assert((self.no_dlsym and (funtype.orig.name.startswith("pFp") or funtype.orig.name.startswith("pFEp") or funtype.orig.name.startswith("pEp") or funtype.orig.name.startswith("pEEp"))) + or (isinstance(funtype, StructFunctionType) and funtype.returnsstruct)), \ + "Maybe TODO? (Returns unregistered structure)" + self._noE = self._noE or self.no_dlsym + if isinstance(funtype, StructFunctionType) and funtype.returnsstruct and not self.retS: + gotype = "GO" + \ + ("W" if self.isweak else "") + \ + ("M" if self.ismy else "") + ("2" if self.is2 else "") + raise ValueError("Function " + name + " of type " + funtype.orig.name + \ + " needs to return a structure, but doesn't (currently " + gotype + ")") + if gotype != "": + raise funtypeerr + + self.name = name + self.type = funtype + self.filespec = filespec + assert(not isinstance(funtype, StructFunctionType) or filespec is funtype.filespec) # No reason why not, so assert() + + if self.is2: + self.fun2 = line.split(',')[2].split(')')[0].strip() + if (self.type.hasemu != self.fun2.startswith("my32_") and self.type.hasemu != self.fun2.startswith("my_")) and not self._noE: + # If this raises because of a different prefix, open a pull request + print("\033[91mThis is probably not what you meant!\033[m ({0}:{1})".format(filename, line[:-1]), file=sys.stderr) + self.invalid = True + + if (self.ismy and not self.type.hasemu and not self.is2) and not self._noE: + # Probably invalid on box86; if not so, remove/comment this whole 'if' (and also open an issue) + print("\033[94mAre you sure of this?\033[m ({0}:{1})".format(filename, line[:-1]), file=sys.stderr) + self.invalid = True + return + if self.type.hasemu and not self.ismy and not self.is2: + # Certified invalid + print("\033[91mThis is probably not what you meant!\033[m ({0}:{1})".format(filename, line[:-1]), file=sys.stderr) + self.invalid = True + return + if self._noE and not self.ismy and not self.is2: + raise ValueError("Invalid meta: 'no E' provided but function is not a GOM") + + if self.ismy or self.is2: + # Add this to the typedefs + self.filespec.typedefs[self.type.withoutE].append(self) + +JumbledFunctions = CustOrderedDictList[Clause, Function] +FilesSpecific = Dict[Filename, FileSpec] + +SortedGlobals = CustOrderedDictList[Clauses, FunctionType] +SortedRedirects = CustOrderedDictList[Clauses, FunctionType] + +def readFiles(files: Iterable[str]) -> Tuple[JumbledFunctions, JumbledFunctions, FilesSpecific]: + """ + readFiles + + This function is the one that parses the files. + """ + + gbls: JumbledFunctions = CustOrderedDictList() + redirects: JumbledFunctions = CustOrderedDictList() + filespecs: FilesSpecific = {} + + symbols: Dict[str, Filename] = {} + need_halt: bool = False + + for filepath in files: + filename: Filename = filepath.split("/")[-1] + dependants: Clause = Clause() + + filespec = FileSpec() + filespecs[filename[:-10]] = filespec + + def add_symbol_name(symname: Optional[str], weak: bool = False, symsname: Dict[str, List[Tuple[str, bool]]] = {"": []}): + # Optional arguments are evaluated only once! + nonlocal need_halt + if symname is None: + for c in symsname: + if (c != "") and (len(symsname[c]) != 0): + # Note: if this condition ever raises, check the wrapper pointed by it. + # If you find no problem, comment the error below, add a "pass" below (so python is happy) + # and open a ticket so I can fix this. + raise NotImplementedError("Some symbols are only implemented under one condition '{0}' (probably) ({1}/{2})" + .format(c, symsname[c][0][0], filename) + " [extra note in the script]") + for s, w in symsname[c]: + if w: continue # Weak symbols never conflict with others in different libraries + + if s in ( + '_init', '_fini', + '__bss_start', '__bss_start__', '__bss_end__', '_bss_end__', + '__data_start', '_edata', + '_end', '__end__'): + continue # Always allow those symbols [TODO: check if OK] + if s in symbols: + # Check for resemblances between symbols[s] and filename + # if filename.startswith(symbols[s][:-12]) or symbols[s].startswith(filename[:-12]): + # # Probably OK + # continue + # Manual incompatible libs detection + match = lambda l, r: (filename[7:-10], symbols[s][7:-10]) in [(l, r), (r, l)] + if match("gdkx112", "gdk3") \ + or match("gtkx112", "gtk3") \ + or match("libjpeg", "libjpeg62") \ + or match("libncurses", "libncurses6") \ + or match("libncurses", "libncursesw") \ + or match("libncurses6", "libncursesw") \ + or match("libtinfo6", "libtinfo") \ + or match("png12", "png16") \ + or match("sdl1", "sdl2") \ + or match("sdl1image", "sdl2image") \ + or match("sdl1mixer", "sdl2mixer") \ + or match("sdl1net", "sdl2net") \ + or match("sdl1ttf", "sdl2ttf") \ + or match("smpeg", "smpeg2") \ + or match("udev0", "udev1") \ + or match("gstinterfaces010","gstvideo")\ + or match("gstinterfaces010","gstaudio")\ + or match("gstreamer010","gstreamer") \ + or match("appindicator","appindicator3")\ + \ + or match("libc", "tcmallocminimal") \ + or match("libc", "ldlinux") \ + : + # libc and ldlinux have some "__libc_" data symbols in common... TODO check if ok + continue + + # Note: this test is very (too) simple. If it ever raises, comment + # `need_halt = True` and open an issue. + print("The symbol {0} is declared in multiple files ({1}/{2})" + .format(s, symbols[s], filename) + " [extra note in the script]", file=sys.stderr) + need_halt = True + symbols[s] = filename + else: + symname = symname.strip() + if symname == "": + raise ValueError("This symbol name (\"\") is suspicious... ({0})".format(filename)) + + l = len(dependants.defines) + already_pst = any(s == symname for s, _ in symsname[""]) + if l == 1: + symsname.setdefault(str(dependants), []) + already_pst = already_pst or any(s == symname for s, _ in symsname[str(dependants)]) + if already_pst: + print("The symbol {0} is duplicated! ({1})".format(symname, filename), file=sys.stderr) + need_halt = True + return + if l == 1: + s = str(dependants.defines[0].inverted()) + if (s in symsname) and ((symname, weak) in symsname[s]): + symsname[s].remove((symname, weak)) + symsname[""].append((symname, weak)) + elif (s in symsname) and ((symname, not weak) in symsname[s]): + print("The symbol {0} doesn't have the same 'weakness' in different conditions! ({1})" + .format(symname, filename), file=sys.stderr) + need_halt = True + else: + symsname[str(dependants)].append((symname, weak)) + elif l == 0: + symsname[""].append((symname, weak)) + + with open(filepath, 'r') as file: + for line in file: + ln = line.strip() + + try: + # If the line is a `#' line (#ifdef LD80BITS/#ifndef LD80BITS/header) + if ln.startswith("#"): + preproc_cmd = ln[1:].strip() + if preproc_cmd.startswith("if defined(GO)"): + continue #if defined(GO) && defined(GOM)... + elif preproc_cmd.startswith("if !(defined(GO)"): + continue #if !(defined(GO) && defined(GOM)...) + elif preproc_cmd.startswith("error"): + continue #error meh! + elif preproc_cmd.startswith("include"): + continue #inherit other library + elif preproc_cmd.startswith("endif"): + dependants.pop_last() + elif preproc_cmd.startswith("ifdef"): + dependants.append(Define(DefineType(preproc_cmd[5:].strip()), False)) + elif preproc_cmd.startswith("ifndef"): + dependants.append(Define(DefineType(preproc_cmd[6:].strip()), True)) + elif preproc_cmd.startswith("else"): + dependants.invert_last() + else: + raise NotImplementedError("Unknown preprocessor directive: {0}".format(preproc_cmd.split(" ")[0])) + + # If the line is a `GO...' line (GO/GOM/GO2/...)... + elif ln.startswith("GO"): + # ... then look at the second parameter of the line + try: + gotype = ln.split("(")[0].strip() + funname = ln.split(",")[0].split("(")[1].strip() + ln = ln.split(",")[1].split(")")[0].strip() + except IndexError: + raise NotImplementedError("Invalid GO command") + + fun = Function(funname, FunctionType(ln, dependants, filespec), gotype, filespec, filename, line) + if not filename.endswith("_genvate.h"): + add_symbol_name(fun.name, fun.isweak) + + if hasattr(fun, 'invalid'): + need_halt = True + continue + + if fun.type.redirect or fun.type.usestruct: + redirects[dependants.copy()].append(fun) + else: + gbls[dependants.copy()].append(fun) + + # If the line is a structure metadata information... + elif ln.startswith("//%S"): + metadata = [e for e in ln.split() if e] + if len(metadata) != 4: + # If you need an empty replacement, please open a PR + raise NotImplementedError("Invalid structure metadata supply (too many/not enough fields)") + if metadata[0] != "//%S": + raise NotImplementedError("Invalid structure metadata supply (invalid signature)") + + filespec.registerStruct(metadata[1], metadata[2], metadata[3]) + + # If the line contains any symbol name... + elif ("GO" in ln) or ("DATA" in ln): + if filename.endswith("_genvate.h"): + continue + # Probably "//GO(..., " or "DATA(...," at least + try: + symname = ln.split('(')[1].split(',')[0].strip() + add_symbol_name(symname) + except IndexError: + # Oops, it wasn't... + pass + except Exception as e: + raise NotImplementedError("{0}:{1}".format(filename, line[:-1])) from e + + if filename.endswith("_genvate.h"): + del filespecs[filename[:-10]] + + add_symbol_name(None) + FunctionType.getSingletons().clear() + + if need_halt: + raise ValueError("Fix all previous errors before proceeding") + + return gbls, redirects, filespecs + +def sortArrays(gbl_funcs: JumbledFunctions, red_funcs: JumbledFunctions, filespecs: FilesSpecific) \ + -> Tuple[SortedGlobals, SortedRedirects]: + # First sort file specific stuff + for fn in filespecs: + filespecs[fn].typedefs.sort(key=_BareFunctionType.splitchar) + for funtype in filespecs[fn].typedefs: + filespecs[fn].typedefs[funtype].sort(key=lambda f: f.name) + + filespecs[fn].structs.sort() + filespecs[fn].structsuses.sort(key=FunctionType.splitchar) + + # Now, take all function types, and make a new table gbl_vals + # This table contains all #if conditions for when a function type needs to + # be generated. + def add_to_vals(vals: Dict[FunctionType, Clauses], t: FunctionType, clause: Clause) -> None: + vals.setdefault(t, Clauses()) + if clause in vals[t].clauses: return + vals[t].add(clause) + + gbl_vals: Dict[FunctionType, Clauses] = {} + for clause in gbl_funcs: + for f in gbl_funcs[clause]: + add_to_vals(gbl_vals, f.type, clause) + for clause in red_funcs: + for f in red_funcs[clause]: + assert(f.type.redirected is not None) + add_to_vals(gbl_vals, f.type.redirected, clause) + + # Remove duplicate/useless conditions (and sort) + for t in gbl_vals: + gbl_vals[t].reduce() + + # Now create a new gbls + # gbls will contain the final version of gbls (without duplicates, based on + # gbl_vals), meaning, a dict from clauses to function types to implement + gbls: SortedGlobals = CustOrderedDictList() + for funtype in gbl_vals: + gbls[gbl_vals[funtype]].append(funtype) + # Sort the #if clauses as defined in `splitdef` + gbls.sort(key=Clauses.splitdef) + + # Sort the function types as defined in `splitchar` + for clauses in gbls: + gbls[clauses].sort(key=FunctionType.splitchar) + + # This map will contain all additional function types that are "redirected" + # to an already defined type (with some remapping). + red_vals: Dict[FunctionType, Clauses] = {} + for clause in red_funcs: + for f in red_funcs[clause]: + if isinstance(f.type, StructFunctionType): continue + assert(f.type.redirected is not None) + add_to_vals(red_vals, f.type, clause) + + # Also do the same sorting as before (it also helps keep the order + # in the file deterministic) + for t in red_vals: + red_vals[t].reduce() + + redirects: SortedRedirects = CustOrderedDictList() + for funtype in red_vals: + redirects[red_vals[funtype]].append(funtype) + redirects.sort(key=Clauses.splitdef) + + def fail(): assert False, "value has no redirect" + for clauses in redirects: + redirects[clauses].sort(key=lambda v: fail() if v.redirected is None else v.splitchar() + v.redirected.splitchar()) + + return gbls, redirects + +def checkRun(root: str, gbls: SortedGlobals, redirects: SortedRedirects, filesspec: FilesSpecific) -> Optional[str]: + # Check if there was any new functions compared to last run + functions_list: str = "" + for clauses in gbls: + for v in gbls[clauses]: + functions_list = functions_list + "#" + str(clauses) + " " + v.orig.name + " -> " + v.orig.replaced + "\n" + for clauses in redirects: + for v in redirects[clauses]: + assert(v.redirected is not None) + functions_list = functions_list + "#" + str(clauses) + " " + v.orig.name + " -> " + v.redirected.orig.name + "\n" + for filename in sorted(filesspec.keys()): + functions_list = functions_list + filename + ":\n" + for st in filesspec[filename].structs: + struct = filesspec[filename].structs[st] + functions_list = functions_list + \ + "% " + st + " " + struct.name + " " + struct.repl + "\n" + for _bare in filesspec[filename].typedefs: + functions_list = functions_list + "- " + _bare.orig.name + ":\n" + for fn in filesspec[filename].typedefs[_bare]: + if fn.no_dlsym: continue + functions_list = functions_list + " - " + fn.name + "\n" + for funtype in filesspec[filename].structsuses: + assert(funtype.redirected is not None) + functions_list = functions_list + "% " + funtype.orig.name + " -> " + funtype.redirected.orig.name + "\n" + + # functions_list is a unique string, compare it with the last run + try: + last_run = "" + with open(os.path.join(root, "src", "wrapped32", "generated", "functions_list.txt"), 'r') as file: + last_run = file.read() + if last_run == functions_list: + # Mark as OK for CMake + with open(os.path.join(root, "src", "wrapped32", "generated", "functions_list.txt"), 'w') as file: + file.write(functions_list) + return None + except IOError: + # The file does not exist yet, first run + pass + + return functions_list + +def generate_files(root: str, files: Iterable[str], ver: str, gbls: SortedGlobals, redirects: SortedRedirects, \ + filespecs: FilesSpecific) -> None: + # Generate converters + asreturns = [ + "\n#error Invalid return type: emulator\n", # E + "fn({0});", # v + "R_EAX = fn({0});", # c + "R_EAX = fn({0});", # w + "R_EAX = fn({0});", # i + "ui64_t r; r.i = fn({0}); R_EAX = r.d[0]; R_EDX = r.d[1];", # I + "R_EAX = (unsigned char)fn({0});", # C + "R_EAX = (unsigned short)fn({0});", # W + "R_EAX = (uint32_t)fn({0});", # u + "ui64_t r; r.u = (uint64_t)fn({0}); R_EAX = r.d[0]; R_EDX = r.d[1];", # U + "float fl = fn({0}); fpu_do_push(emu); ST0val = fl;", # f + "double db = fn({0}); fpu_do_push(emu); ST0val = db;", # d + "long double ld = fn({0}); fpu_do_push(emu); ST0val = ld;", # D + "double db = fn({0}); fpu_do_push(emu); ST0val = db;", # K + "R_EAX = to_long(fn({0}));", # l + "R_EAX = to_ulong(fn({0}));", # L + "R_EAX = to_ptrv(fn({0}));", # p + "R_EAX = to_hash(fn({0}));", # h + "R_EAX = to_hash_d(fn({0}));", # H + "R_EAX = to_locale(fn({0}));", # a + "R_EAX = to_locale_d(fn({0}));", # A + "\n#error Invalid return type: va_list\n", # V + "\n#error Invalid return type: at_flags\n", # O + "R_EAX = to_ptrv(io_convert_from(fn({0})));", # S + "\n#error Invalid return type: _2uint_struct\n", # 2 + "\n#error Invalid return type: Vulkan Struct\n", # P + "\n#error Invalid return type: ... with 1 arg\n", # N + "\n#error Invalid return type: ... with 2 args\n", # M + "\n#error Invalid return type: address on the stack\n", # s + "\n#error Invalid return type: ro structure declaration\n", # r + "\n#error Invalid return type: rw structure declaration\n", # b + "\n#error Invalid return type: wo structure declaration\n", # B + "\n#error Invalid return type: end of structure declaration\n", # _ + "R_EAX = to_cstring(fn({0}));", # t + "R_EAX = to_ptrv(addDisplay(fn({0})));", # X + ] + asargs = [ + "emu, ", # E + "", # v + "from_ptri(int8_t, R_ESP + {p}), ", # c + "from_ptri(int16_t, R_ESP + {p}), ", # w + "from_ptri(int32_t, R_ESP + {p}), ", # i + "from_ptri(int64_t, R_ESP + {p}), ", # I + "from_ptri(uint8_t, R_ESP + {p}), ", # C + "from_ptri(uint16_t, R_ESP + {p}), ", # W + "from_ptri(uint32_t, R_ESP + {p}), ", # u + "from_ptri(uint64_t, R_ESP + {p}), ", # U + "from_ptri(float, R_ESP + {p}), ", # f + "from_ptri(double, R_ESP + {p}), ", # d + "LD2localLD(from_ptrv(R_ESP + {p})), ", # D + "FromLD(from_ptrv(R_ESP + {p})), ", # K + "from_long(from_ptri(long_t, R_ESP + {p})), ", # l + "from_ulong(from_ptri(ulong_t, R_ESP + {p})), ", # L + "from_ptriv(R_ESP + {p}), ", # p + "from_hash(from_ptri(ptr_t, R_ESP + {p})), ", # h + "from_hash_d(from_ptri(ptr_t, R_ESP + {p})), ", # H + "from_locale(from_ptri(ptr_t, R_ESP + {p})), ", # a + "from_locale_d(from_ptri(ptr_t, R_ESP + {p})), ", # A + "from_ptrv(R_ESP + {p}), ", # V + "of_convert32(from_ptri(int32_t, R_ESP + {p})), ", # O + "io_convert32(from_ptriv(R_ESP + {p})), ", # S + "(_2uint_struct_t){{from_ptri(uint32_t, R_ESP + {p}),from_ptri(uint32_t, R_ESP + {p} + 4)}}, ", # 2 + "arg_{p}, ", # P + "from_ptriv(R_ESP + {p}), ", # N + "from_ptriv(R_ESP + {p}),from_ptriv(R_ESP + {p} + 4), ", # M + "from_ptrv(R_ESP + {p}), ", # s + "\n#error Invalid argument type: ro structure declaration\n", # r + "\n#error Invalid argument type: rw structure declaration\n", # b + "\n#error Invalid argument type: wo structure declaration\n", # B + "\n#error Invalid argument type: end of structure declaration\n", # _ + "\n#error Invalid argument type: maybe-high string\n",# t + "getDisplay(from_ptriv(R_ESP + {p})), ", # X + ] + if len(FileSpec.values) != len(asreturns): + raise NotImplementedError("len(values) = {lenval} != len(asreturns) = {lenvals}".format(lenval=len(FileSpec.values), lenvals=len(asreturns))) + if len(FileSpec.values) != len(asargs): + raise NotImplementedError("len(values) = {lenval} != len(asargs) = {lenarg}".format(lenval=len(FileSpec.values), lenarg=len(asargs))) + for value, asret, asarg in zip(FileSpec.values, asreturns, asargs): + for ctrw in (CType.ReadWrite.none, CType.ReadWrite.readonly, CType.ReadWrite.writeonly, CType.ReadWrite.readwrite): + if (value, CType.ReadWrite.none) not in CType: + continue # TODO: remove this and fail if one base type is missing? + CType[(value, CType.ReadWrite.none)].asret = asret + CType[(value, CType.ReadWrite.none)].aspre = "" + CType[(value, CType.ReadWrite.none)].asarg = asarg + CType[(value, CType.ReadWrite.none)].aspost = "" + for ctn in CType.getSingletons(): + CType[ctn].generate_converters() + + # Detect functions which return in an x87 register + return_x87: str = "DKdf" + if any(c not in FileSpec.values for c in return_x87): + raise NotImplementedError("Invalid character") + + # Files header and guard + files_header = { + "wrapper32.c": """ + #include + #include + #include + #include + + #include "wrapper32.h" + #include "emu/x64emu_private.h" + #include "emu/x87emu_private.h" + #include "regs.h" + #include "x64emu.h" + #include "box32.h" + #include "converter32.h" + + typedef union ui64_s {lbr} + int64_t i; + uint64_t u; + uint32_t d[2]; + {rbr} ui64_t; + + typedef struct _2uint_struct_s {lbr} + uint32_t a; + uint32_t b; + {rbr} _2uint_struct_t; + + extern void* my__IO_2_1_stderr_; + extern void* my__IO_2_1_stdin_ ; + extern void* my__IO_2_1_stdout_; + + static void* io_convert32(void* v) + {lbr} + if(!v) + return v; + if(v==my__IO_2_1_stderr_) + return stderr; + if(v==my__IO_2_1_stdin_) + return stdin; + if(v==my__IO_2_1_stdout_) + return stdout; + return v; + {rbr} + + static void* io_convert_from(void* v) + {lbr} + if(!v) + return v; + if(v==stderr) + return my__IO_2_1_stderr_; + if(v==stdin) + return my__IO_2_1_stdin_; + if(v==stdout) + return my__IO_2_1_stdout_; + return v; + {rbr} + + typedef struct my_GValue_s + {lbr} + int g_type; + union {lbr} + int v_int; + int64_t v_int64; + uint64_t v_uint64; + float v_float; + double v_double; + void* v_pointer; + {rbr} data[2]; + {rbr} my_GValue_t; + + static void alignGValue(my_GValue_t* v, void* value) + {lbr} + v->g_type = *(int*)value; + memcpy(v->data, value+4, 2*sizeof(double)); + {rbr} + static void unalignGValue(void* value, my_GValue_t* v) + {lbr} + *(int*)value = v->g_type; + memcpy(value+4, v->data, 2*sizeof(double)); + {rbr} + + void* VulkanFromx86(void* src, void** save); + void VulkanTox86(void* src, void* save); + + #define ST0val ST0.d + + int of_convert32(int); + + void* getDisplay(void*); + void* addDisplay(void*); + + """, + "wrapper32.h": """ + #ifndef __WRAPPER32_H_ + #define __WRAPPER32_H_ + #include + #include + + typedef struct x64emu_s x64emu_t; + + // the generic wrapper pointer functions + typedef void (*wrapper_t)(x64emu_t* emu, uintptr_t fnc); + + // list of defined wrappers + // E = current x64emu struct + // v = void + // C = unsigned byte c = char + // W = unsigned short w = short + // u = uint32, i = int32 + // U = uint64, I = int64 + // L = unsigned long, l = signed long (long is an int with the size of a pointer) + // p = pointer + // h = hash (32<->64bits) + // H = hash (32<->64bits) that will be deleted from hashmaps + // a = locale + // A = locale that will be deleted from hashmaps + // f = float, d = double, D = long double, K = fake long double + // V = vaargs, s = address on the stack (doesn't move forward the pointer) + // O = libc O_ flags bitfield + // o = stdout + // S = _IO_2_1_stdXXX_ pointer (or FILE*) + // 2 = struct of 2 uint + // N = ... automatically sending 1 arg + // M = ... automatically sending 2 args + // P = Vulkan struct pointer + // r..._ = pointer to read-only structure + // B..._ = pointer to write-only structure + // b..._ = pointer to read-write structure + // t = char* as a return value (copies to a lower address if the return address is too high) + // X = Display* + + """, + "converter32.c": """ + #include "converter32.h" + """, + "converter32.h": """ + #ifndef __CONVERTER32_H_ + #define __CONVERTER32_H_ + """, + "fntypes32.h": """ + #ifndef __{filename}TYPES32_H_ + #define __{filename}TYPES32_H_ + + #ifndef LIBNAME + #error You should only #include this file inside a wrapped*.c file + #endif + #ifndef ADDED_FUNCTIONS + #define ADDED_FUNCTIONS() + #endif + + """, + "fndefs32.h": """ + #ifndef __{filename}DEFS32_H_ + #define __{filename}DEFS32_H_ + + """, + "fnundefs32.h": """ + #ifndef __{filename}UNDEFS32_H_ + #define __{filename}UNDEFS32_H_ + + """ + } + files_guard = { + "wrapper32.c": """ + """, + "wrapper32.h": """ + #endif // __WRAPPER32_H_ + """, + "converter32.c": """ + """, + "converter32.h": """ + #endif // __CONVERTER32_H_ + """, + "fntypes32.h": """ + #endif // __{filename}TYPES32_H_ + """, + "fndefs32.h": """ + + #endif // __{filename}DEFS32_H_ + """, + "fnundefs32.h": """ + + #endif // __{filename}UNDEFS32_H_ + """ + } + banner = "/***********************************************************" + ('*'*len(ver)) + "***\n" \ + " * File automatically generated by rebuild_wrappers_32.py (v" + ver + ") *\n" \ + " ***********************************************************" + ('*'*len(ver)) + "***/\n" + trim: Callable[[str], str] = lambda string: '\n'.join(line[2:] for line in string.splitlines())[1:] + # Yes, the for loops are inverted. This is because both dicts should have the same keys. + for fhdr in files_guard: + files_header[fhdr] = banner + trim(files_header[fhdr]) + for fhdr in files_header: + files_guard[fhdr] = trim(files_guard[fhdr]) + + # Typedefs + # E v c w i I C W u U f d D K l L p h H a A V O S 2 P N M s r b B _ t X + tdtypes = ["x64emu_t*", "void", "int8_t", "int16_t", "int32_t", "int64_t", "uint8_t", "uint16_t", "uint32_t", "uint64_t", "float", "double", "long double", "double", "intptr_t", "uintptr_t", "void*", "uintptr_t", "uintptr_t", "void*", "void*", "void*", "int32_t", "void*", "_2uint_struct_t", "void*", "...", "...", "void*", "\n#error _\n", "\n#error _\n", "\n#error _\n", "\n#error _\n", "char*", "void*"] + if len(FileSpec.values) != len(tdtypes): + raise NotImplementedError("len(values) = {lenval} != len(tdtypes) = {lentypes}".format(lenval=len(FileSpec.values), lentypes=len(tdtypes))) + def generate_typedefs(funs: Iterable[FunctionType], file): + for funtype in funs: + def getstr(i: int, ct: CType) -> str: + if ct.type != CType.ReadWrite.none: + return ct.structname2 + "_t*" + elif i < len(tdtypes): + return tdtypes[i] + else: + # We are in a *types.h file + assert(isinstance(funtype, _BareFunctionType) and funtype.isstruct) + return funtype.filespec.structs[funtype.filespec.structs.__keys__[i - len(tdtypes)]].name + if funtype.orig.name.endswith("Ev"): + file.write("typedef " + getstr(funtype.getcharidx(0), funtype.orig.recursive[0]) + + " (*" + funtype.orig.name + "_t)" + "(" + + getstr(funtype.getcharidx(2), funtype.orig.recursive[2]) + ");\n") + else: + file.write("typedef " + getstr(funtype.getcharidx(0), funtype.orig.recursive[0]) + + " (*" + funtype.orig.name + "_t)" + "(" + + ', '.join(getstr(funtype.getcharidx(i), funtype.orig.recursive[i]) + for i in range(2, len(funtype.orig.replaced))) + ");\n") + + # Wrappers + # E v c w i I C W u U f d D K l L p h H a A V O S 2 P N M s r b B _ t X + deltas = [0, 4, 4, 4, 4, 8, 4, 4, 4, 8, 4, 8, 12, 12, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 8, 4, 0, 0, 0, 1, 1, 4, 1, 4, 4] + # Asserts + if len(FileSpec.values) != len(deltas): + raise NotImplementedError("len(values) = {lenval} != len(deltas) = {lendeltas}".format(lenval=len(FileSpec.values), lendeltas=len(deltas))) + + # Helper functions to write the function definitions + def function_args(args: Iterable[Tuple[CType, str]], map: Callable[[CType], str], d: int = 4) -> str: + d = 4 + ret = "" + for arg, c in args: + if d % 4 != 0: + raise ValueError("{d} is not a multiple of 4. Did you try passing a V then something else?".format(d=d)) + + try: + ret = ret + map(arg).format(p=d) + d = d + deltas[FileSpec.values.index(c)] + except KeyError as e: + raise ValueError(arg.describe()) from e + return ret + + def function_writer(f, N: FunctionType, W: str) -> None: + f.write("void {0}_32(x64emu_t *emu, uintptr_t fcn) {2} {1} fn = ({1})fcn; ".format(N.orig.name, W, "{")) + + args = (N.orig.recursive[2:], N.orig.replaced[2:]) + if len(args[0]) == 0: + raise ValueError("Failed to properly parse {0}:\n{1}\nrecursive has length {2} < 3" + .format(N.orig.name, N.orig.describe(), len(N.orig.recursive))) + if len(args[1]) == 0: + raise ValueError("Failed to properly parse {0}:\n{1}\nreplaced ({2}) has length {3} < 3" + .format(N.orig.name, N.orig.describe(), N.orig.replaced, len(N.orig.replaced))) + if len(args[0]) != len(args[1]): + raise ValueError("Failed to properly parse {0}:\n{1}\nrecursive has length {2}, replaced has length {3}" + .format(N.orig.name, N.orig.describe(), len(args[0])+2, len(args[1])+2)) + if (len(args[0]) == 2) and (args[0][0].name == 'E') and (args[0][1].name == 'v'): args = ([args[0][0]], args[1][0]) + + #if any(c in 'PG' for c in args): + # # Vulkan struct or GValue pointer, need to unwrap functions at the end + # delta = 4 + # for c in args: + # if c == 'P': + # f.write("void* save{d} = NULL; void *arg{d} = VulkanFromx86(*(void**)(R_ESP + {d}), &save{d}); ".format(d=delta)) + # if c == 'G': + # f.write("my_GValue_t arg{d}; alignGValue(&arg{d}, *(void**)(R_ESP + {d})); ".format(d=delta)) + # delta = delta + deltas[FileSpec.values.index(c)] + # f.write(vals[FileSpec.values.index(N.orig[0])].format(function_args(args)[:-2])) + # delta = 4 + # for c in args: + # if c == 'P': + # f.write(" VulkanTox86(arg{d}, save{d});".format(d=delta)) + # if c == 'G': + # f.write(" unalignGValue(*(void**)(R_ESP + {d}), &arg{d});".format(d=delta)) + # delta = delta + deltas[FileSpec.values.index(c)] + # f.write(" }\n") + #else: + # # Generic function + # f.write(vals[FileSpec.values.index(N.orig[0])].format(function_args(args)[:-2]) + " }\n") + assert 'P' not in N.orig.name, "TODO: add back Vulkan compatibility" + def assertex(v: Optional[T]) -> T: + assert v is not None, "Value is None" + return v + if N.orig.recursive[1].structname == 'E': + f.write("errno = emu->libc_err; ") + f.write(function_args(zip(args[0], args[1]), lambda ct: assertex(ct.aspre))) + f.write(assertex(N.orig.recursive[0].asret).format(function_args(zip(args[0], args[1]), lambda ct: assertex(ct.asarg))[:-2])) + f.write(function_args(zip(args[0], args[1]), lambda ct: assertex(ct.aspost))) + if N.orig.recursive[1].structname == 'E': + f.write(" emu->libc_err = errno;") + f.write(" }\n") + + # TODO: src/wrapped/generated32/converter32.c&h + # Rewrite the wrapper.c file: + with open(os.path.join(root, "src", "wrapped32", "generated", "wrapper32.c"), 'w') as file: + file.write(files_header["wrapper32.c"].format(lbr="{", rbr="}", version=ver)) + + # First part: typedefs + for clauses in gbls: + if not clauses.empty(): + file.write("\n#if " + str(clauses) + "\n") + generate_typedefs(gbls[clauses], file) + if not clauses.empty(): + file.write("#endif\n") + + file.write("\n") + + # Next part: function definitions + + for clauses in gbls: + if not clauses.empty(): + file.write("\n#if " + str(clauses) + "\n") + for funtype in gbls[clauses]: + function_writer(file, funtype, funtype.orig.name + "_t") + if not clauses.empty(): + file.write("#endif\n") + file.write("\n") + for clauses in redirects: + if not clauses.empty(): + file.write("\n#if " + str(clauses) + "\n") + for funtype in redirects[clauses]: + assert(funtype.redirected is not None) + function_writer(file, funtype, funtype.redirected.orig.name + "_t") + if not clauses.empty(): + file.write("#endif\n") + + # Write the isRetX87Wrapper function + # isRetX87Wrapper + file.write("\nint isRetX87Wrapper32(wrapper_t fun) {\n") + for clauses in gbls: + empty = True + for funtype in gbls[clauses]: + if funtype.orig.name[0] in return_x87: # TODO: put this in a function (functions would request the ABI for more info) + if empty and (not clauses.empty()): + file.write("#if " + str(clauses) + "\n") + empty = False + file.write("\tif (fun == &" + funtype.orig.name + "_32) return 1;\n") + if not empty: + file.write("#endif\n") + file.write("\treturn 0;\n}\n") + + file.write(files_guard["wrapper32.c"].format(lbr="{", rbr="}", version=ver)) + + # Rewrite the wrapper32.h file: + with open(os.path.join(root, "src", "wrapped32", "generated", "wrapper32.h"), 'w') as file: + file.write(files_header["wrapper32.h"].format(lbr="{", rbr="}", version=ver)) + for clauses in gbls: + if not clauses.empty(): + file.write("\n#if " + str(clauses) + "\n") + for funtype in gbls[clauses]: + file.write("void " + funtype.orig.name + "_32(x64emu_t *emu, uintptr_t fnc);\n") + if not clauses.empty(): + file.write("#endif\n") + file.write("\n") + for clauses in redirects: + if not clauses.empty(): + file.write("\n#if " + str(clauses) + "\n") + for funtype in redirects[clauses]: + file.write("void " + funtype.orig.name + "_32(x64emu_t *emu, uintptr_t fnc);\n") + if not clauses.empty(): + file.write("#endif\n") + file.write(files_guard["wrapper32.h"].format(lbr="{", rbr="}", version=ver)) + + for fn in filespecs: + tdtypes[FileSpec.values.index('V')] = "..." + with open(os.path.join(root, "src", "wrapped32", "generated", fn + "types32.h"), 'w') as file: + file.write(files_header["fntypes32.h"].format(lbr="{", rbr="}", version=ver, filename=fn)) + generate_typedefs(filespecs[fn].typedefs, file) + file.write("\n#define SUPER() ADDED_FUNCTIONS()") + for _bare in filespecs[fn].typedefs: + for fun in filespecs[fn].typedefs[_bare]: + if fun.no_dlsym: continue + file.write(" \\\n\tGO({0}, {1}_t)".format(fun.name, _bare.orig.name)) + file.write("\n\n") + file.write(files_guard["fntypes32.h"].format(lbr="{", rbr="}", version=ver, filename=fn)) + + with open(os.path.join(root, "src", "wrapped32", "generated", fn + "defs32.h"), 'w') as file: + file.write(files_header["fndefs32.h"].format(lbr="{", rbr="}", version=ver, filename=fn)) + for defined in filespecs[fn].structsuses: + assert defined.redirected is not None, "Unreachable?" + file.write("#define {defined} {define}\n".format(defined=defined.orig.name, define=defined.redirected.orig.name)) + file.write("#define {defined}_32 {define}_32\n".format(defined=defined.orig.name, define=defined.redirected.orig.name)) + file.write(files_guard["fndefs32.h"].format(lbr="{", rbr="}", version=ver, filename=fn)) + + with open(os.path.join(root, "src", "wrapped32", "generated", fn + "undefs32.h"), 'w') as file: + file.write(files_header["fnundefs32.h"].format(lbr="{", rbr="}", version=ver, filename=fn)) + for defined in filespecs[fn].structsuses: + file.write("#undef {defined}\n".format(defined=defined.orig.name)) + file.write("#undef {defined}_32\n".format(defined=defined.orig.name)) + file.write(files_guard["fnundefs32.h"].format(lbr="{", rbr="}", version=ver, filename=fn)) + +def main(root: str, files: Iterable[str], ver: str): + """ + main -- The main function + + root: the root path (where the CMakeLists.txt is located) + files: a list of files to parse (wrapped*.h) + ver: version number + """ + + # First read the files inside the headers + gbl_funcs, red_funcs, filespecs = readFiles(files) + + if all(not c.empty() for c in gbl_funcs) or all(not c.empty() for c in red_funcs): + print("\033[1;31mThere is suspiciously not many types...\033[m", file=sys.stderr) + print("Check the CMakeLists.txt file. If you are SURE there is nothing wrong" + " (as a random example, `set()` resets the variable...), then comment out the following return.", file=sys.stderr) + print("(Also, the program WILL crash later if you proceed.)", file=sys.stderr) + return 2 # Check what you did, not proceeding + + gbls, redirects = sortArrays(gbl_funcs, red_funcs, filespecs) + + # Check if there was any new functions + functions_list = checkRun(root, gbls, redirects, filespecs) + if functions_list is None: + print("Detected same build as last run, skipping") + return 0 + + # Now the files rebuilding part + generate_files(root, files, ver, gbls, redirects, filespecs) + + # Save the string for the next iteration, writing was successful + with open(os.path.join(root, "src", "wrapped32", "generated", "functions_list.txt"), 'w') as file: + file.write(functions_list) + + return 0 + +if __name__ == '__main__': + limit = [] + for i, v in enumerate(sys.argv): + if v == "--": + limit.append(i) + Define.defines = list(map(DefineType, sys.argv[2:limit[0]])) + if main(sys.argv[1], sys.argv[limit[0]+1:], "0.0.2.2") != 0: + exit(2) + exit(0) diff --git a/runTest.cmake b/runTest.cmake index e9a5a46c1cd20a8c3759e873c77fb565cdbbf708..4d7733f381b57acb24268c905e85b3d61023f3b7 100644 --- a/runTest.cmake +++ b/runTest.cmake @@ -19,10 +19,10 @@ set(ENV{BOX64_LOG} 0) set(ENV{BOX64_NOBANNER} 1) if( EXISTS ${CMAKE_SOURCE_DIR}/x64lib ) # we are inside box64 folder - set(ENV{LD_LIBRARY_PATH} ${CMAKE_SOURCE_DIR}/x64lib) + set(ENV{BOX64_LD_LIBRARY_PATH} ${CMAKE_SOURCE_DIR}/x64lib) else() # we are inside build folder - set(ENV{LD_LIBRARY_PATH} ${CMAKE_SOURCE_DIR}/../x64lib) + set(ENV{BOX64_LD_LIBRARY_PATH} ${CMAKE_SOURCE_DIR}/../x64lib) endif( EXISTS ${CMAKE_SOURCE_DIR}/x64lib ) # run the test program, capture the stdout/stderr and the result var diff --git a/src/box32.c b/src/box32.c new file mode 100644 index 0000000000000000000000000000000000000000..a4c1a1b42a3e4b6a9227aa94d692cc22bed99f97 --- /dev/null +++ b/src/box32.c @@ -0,0 +1,342 @@ +#include +#include +#include +#include +#include + +#include "debug.h" +#include "box32.h" +#include "custommem.h" +#include "converter32.h" + +#include "khash.h" + +KHASH_MAP_INIT_INT64(to, ulong_t); +KHASH_MAP_INIT_INT(from, uintptr_t); +KHASH_MAP_INIT_STR(strings, ptr_t); + +static kh_from_t* hash_from = NULL; +static kh_to_t* hash_to = NULL; +#define HASH_MSK 0xf000000f +#define HASH_VAL 0x00ffffff +#define HASH_SHIFT 4 +static uint32_t hash_cnt = 1; +static pthread_rwlock_t hash_lock = {0}; +static int hash_running = 0; +// locale +static kh_from_t* locale_from = NULL; +static kh_to_t* locale_to = NULL; +static kh_strings_t* const_strings = NULL; + + +void init_hash_helper() { + hash_from = kh_init(from); + hash_to = kh_init(to); + locale_from = kh_init(from); + locale_to = kh_init(to); + const_strings = kh_init(strings); + pthread_rwlock_init(&hash_lock, NULL); + hash_running = 1; +} +void fini_hash_helper() { + if(!hash_running) + return; + hash_running = 0; + kh_destroy(from, hash_from); + hash_from = NULL; + kh_destroy(to, hash_to); + hash_to = NULL; + hash_cnt = 1; + kh_destroy(from, locale_from); + locale_from = NULL; + kh_destroy(to, locale_to); + locale_to = NULL; + kh_destroy(strings, const_strings); //TODO: does not free memory correctly + const_strings = NULL; + pthread_rwlock_destroy(&hash_lock); +} + +// Convert from hash key to original 64bits value +uintptr_t from_hash(ulong_t l) { + // easy case first + if((l&HASH_MSK)!=HASH_MSK) { + return (uintptr_t)l; + } + if(l==0xffffffff) { + return 0xffffffffffffffffll; + } + // get value from hash table second + uintptr_t ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, from_hash used but hash not running\n"); + return ret; + } + pthread_rwlock_rdlock(&hash_lock); + khint_t k = kh_get(from, hash_from, l); + if (k==kh_end(hash_from)) { + ret = (uintptr_t)l; + } else { + ret = kh_value(hash_from, k); + } + pthread_rwlock_unlock(&hash_lock); + return ret; +} +// same as from_hash +uintptr_t from_hash_d(ulong_t l) { + return from_hash(l); +} + +// Convert from 64bits to hash key, creating it if needed +ulong_t to_hash(uintptr_t p) { + if((p<0x100000000LL) && ((p&HASH_MSK)!=HASH_MSK)) + return (ulong_t)p; + if(p==0xffffffffffffffffll) { + return 0xffffffff; + } + ulong_t ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, to_hash used but hash not running\n"); + return ret; + } + khint_t k; + pthread_rwlock_rdlock(&hash_lock); + k = kh_get(to, hash_to, p); + if(k==kh_end(hash_to)) { + // create a new key, but need write lock! + pthread_rwlock_unlock(&hash_lock); + pthread_rwlock_wrlock(&hash_lock); + ret = HASH_MSK | (((hash_cnt++)&HASH_VAL)<sign = LOCALE_SIGN; + dest->org = (void*)src; + //copy the 2 arrays + for(int i=0; i<13; ++i) { + dest->p0[i] = to_hashv(src->p0[i]); + } + for(int i=0; i<13; ++i) { + dest->p4[i] = to_hashv(src->p4[i]); + } + // copy the 3 ctype int (1st is short int, but int will do) + memcpy(dest->type_b, src->p1-128*sizeof(short), 384*sizeof(short)); + memcpy(dest->tolower, src->p2-128*sizeof(int), 384*sizeof(int)); + memcpy(dest->tohigher, src->p3-128*sizeof(int), 384*sizeof(int)); + dest->p1 = to_ptrv(dest->type_b)+128*sizeof(short); + dest->p2 = to_ptrv(dest->tolower)+128*sizeof(int); + dest->p3 = to_ptrv(dest->tohigher)+128*sizeof(int); +} +void free_struct_locale(const struct_locale_t *src) { + for(int i=0; i<13; ++i) { + to_hash_d((uintptr_t)src->p0[i]); + } + for(int i=0; i<13; ++i) { + to_hash_d((uintptr_t)src->p4[i]); + } +} + +// Convert from locale key to original 64bits value +void* from_locale(ptr_t l) { + // easy case first + if(l < 0x100) { + return from_ptrv(l); + } + if(l == 0xffffffff) { + return (void*)-1; + } + // get value from hash table second + void* ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, from_locale used but hash not running\n"); + return ret; + } + struct_locale_32_t* loc = from_ptrv(l); + if(loc->sign==LOCALE_SIGN) + return loc->org; + pthread_rwlock_rdlock(&hash_lock); + khint_t k = kh_get(from, locale_from, l); + if (k==kh_end(locale_from)) { + ret = from_ptrv(l); + } else { + ret = (void*)kh_value(locale_from, k); + } + pthread_rwlock_unlock(&hash_lock); + //from_struct_locale((struct_locale_t*)ret, l); + return ret; +} +// same as from_locale +void* from_locale_d(ptr_t l) { + return from_locale(l); +} + +// Convert from 64bits to locale key, creating it if needed +ptr_t to_locale(void* p) { + if((uintptr_t)p < 0x100) { + return to_ptrv(p); + } + if(p == (void*)-1) { + return 0xffffffff; + } + ptr_t ret = 0; + if(!hash_running) { + //printf_log(LOG_INFO, "Warning, to_locale used but hash not running\n"); + return ret; + } + khint_t k; + pthread_rwlock_rdlock(&hash_lock); + k = kh_get(to, locale_to, (uintptr_t)p); + int conv = 0; + if(k==kh_end(locale_to)) { + // create a new key, but need write lock! + pthread_rwlock_unlock(&hash_lock); + pthread_rwlock_wrlock(&hash_lock); + // a locale_t is 5 pointer! + void* m = calloc(1, sizeof(struct_locale_32_t)); // the 3 ctype value are also inside the locale struct + ret = to_ptrv(m); + // add to hash maps + int r; + k = kh_put(to, locale_to, (uintptr_t)p, &r); + kh_value(locale_to, k) = ret; + k = kh_put(from, locale_from, ret, &r); + kh_value(locale_from, k) = (uintptr_t)p; + conv = 1; + } else { + ret = kh_value(locale_to, k); + } + pthread_rwlock_unlock(&hash_lock); + if(conv) + to_struct_locale(ret, (struct_locale_t*)p); + return ret; +} + +// Convert from 64bits to hash key and delete the entry from both hash table +ptr_t to_locale_d(void* p) { + if((uintptr_t)p < 0x100) + return to_ptrv(p); + ptr_t ret = 0; + if(!hash_running) + return ret; + khint_t k; + pthread_rwlock_wrlock(&hash_lock); + k = kh_get(to, locale_to, (uintptr_t)p); + if(k==kh_end(locale_to)) { + /// should this be an assert? + } else { + ret = kh_value(locale_to, k); + // free the memory + free_struct_locale(p); + free(from_ptrv(ret)); + // delete both entries + k = kh_get(to, locale_to, (uintptr_t)p); + kh_del(to, locale_to, k); + k = kh_get(from, locale_from, ret); + kh_del(from, locale_from, k); + } + pthread_rwlock_unlock(&hash_lock); + return ret; +} + +char* from_cstring(ptr_t p) { + return (char*)from_ptrv(p); +} + +ptr_t to_cstring(char* p) { + if((uintptr_t)p<0x100000000LL) + return to_ptrv(p); + ptr_t ret = 0; + pthread_rwlock_rdlock(&hash_lock); + khint_t k = kh_get(strings, const_strings, p); + if(k==kh_end(const_strings)) { + // create a new key, but need write lock! + pthread_rwlock_unlock(&hash_lock); + pthread_rwlock_wrlock(&hash_lock); + ret = to_ptrv(box_strdup(p)); + int r; + k = kh_put(strings, const_strings, (char*)from_ptrv(ret), &r); + kh_value(const_strings, k) = ret; + } else + ret = kh_value(const_strings, k); + pthread_rwlock_unlock(&hash_lock); + return ret; +} + +ptr_t to_cstring_d(char* p) { + if((uintptr_t)p<0x100000000LL) + return to_ptrv(p); + ptr_t ret = 0; + pthread_rwlock_wrlock(&hash_lock); + khint_t k = kh_get(strings, const_strings, p); + if(k==kh_end(const_strings)) { + // assert? + } else { + ret = kh_value(const_strings, k); + kh_del(strings, const_strings, k); + free(from_ptrv(ret)); + } + pthread_rwlock_unlock(&hash_lock); + return ret; +} \ No newline at end of file diff --git a/src/box64context.c b/src/box64context.c index 5d5155fa05baa287aeb44591dfb681e58dd54ac7..b88f3808c4b2bb418ab5c8b5ffab8ab6ef455bfe 100644 --- a/src/box64context.c +++ b/src/box64context.c @@ -23,6 +23,9 @@ #include "gltools.h" #include "rbtree.h" #include "dynarec.h" +#ifdef BOX32 +#include "box32.h" +#endif EXPORTDYN void initAllHelpers(box64context_t* context) @@ -31,6 +34,9 @@ void initAllHelpers(box64context_t* context) if(inited) return; my_context = context; + #ifdef BOX32 + init_hash_helper(); + #endif init_pthread_helper(); init_bridge_helper(); init_signal_helper(context); @@ -47,6 +53,9 @@ void finiAllHelpers(box64context_t* context) fini_pthread_helper(context); fini_signal_helper(); fini_bridge_helper(); + #ifdef BOX32 + fini_hash_helper(); + #endif fini_custommem_helper(context); finied = 1; } @@ -75,6 +84,7 @@ void free_tlsdatasize(void* p) } void x64Syscall(x64emu_t *emu); +void x86Syscall(x64emu_t *emu); int unlockMutex() { @@ -128,7 +138,7 @@ void relockMutex(int locks) #undef GO } -static void init_mutexes(box64context_t* context) +void init_mutexes(box64context_t* context) { #ifndef DYNAREC pthread_mutexattr_t attr; @@ -213,25 +223,27 @@ box64context_t *NewBox64Context(int argc) init_custommem_helper(context); - #ifdef DYNAREC - x64test_init(); - #endif - context->maplib = NewLibrarian(context); context->local_maplib = NewLibrarian(context); context->versym = NewDictionnary(); context->system = NewBridge(); // Cannot use Bridge name as the map is not initialized yet // create vsyscall - context->vsyscall = AddBridge(context->system, vFEv, x64Syscall, 0, NULL); + context->vsyscall = AddBridge(context->system, vFEv, box64_is32bits?x86Syscall:x64Syscall, 0, NULL); // create the vsyscalls - context->vsyscalls[0] = AddVSyscall(context->system, 96); - context->vsyscalls[1] = AddVSyscall(context->system, 201); - context->vsyscalls[2] = AddVSyscall(context->system, 309); - // create the alternate to map at address - addAlternate((void*)0xffffffffff600000, (void*)context->vsyscalls[0]); - addAlternate((void*)0xffffffffff600400, (void*)context->vsyscalls[1]); - addAlternate((void*)0xffffffffff600800, (void*)context->vsyscalls[2]); + if(box64_is32bits) { + #ifdef BOX32 + addAlternate((void*)0xffffe400, from_ptrv(context->vsyscall)); + #endif + } else { + context->vsyscalls[0] = AddVSyscall(context->system, 96); + context->vsyscalls[1] = AddVSyscall(context->system, 201); + context->vsyscalls[2] = AddVSyscall(context->system, 309); + // create the alternate to map at address + addAlternate((void*)0xffffffffff600000, (void*)context->vsyscalls[0]); + addAlternate((void*)0xffffffffff600400, (void*)context->vsyscalls[1]); + addAlternate((void*)0xffffffffff600800, (void*)context->vsyscalls[2]); + } // create exit bridge context->exit_bridge = AddBridge(context->system, NULL, NULL, 0, NULL); // get handle to box64 itself @@ -275,7 +287,7 @@ box64context_t *NewBox64Context(int argc) initAllHelpers(context); #ifdef DYNAREC - context->db_sizes = init_rbtree(); + context->db_sizes = rbtree_init("db_sizes"); #endif return context; @@ -351,6 +363,8 @@ void FreeBox64Context(box64context_t** context) #ifndef STATICBUILD freeGLProcWrapper(ctx); freeALProcWrapper(ctx); + #ifdef BOX32 + #endif #endif if(ctx->stack_clone) @@ -377,7 +391,7 @@ void FreeBox64Context(box64context_t** context) #ifdef DYNAREC //dynarec_log(LOG_INFO, "BOX64 Dynarec at exit: Max DB=%d, righter=%d\n", ctx->max_db_size, rb_get_righter(ctx->db_sizes)); - delete_rbtree(ctx->db_sizes); + rbtree_delete(ctx->db_sizes); #endif finiAllHelpers(ctx); diff --git a/src/core.c b/src/core.c index 507f65bb1e0d7bfb9f90042901586e5684eeb526..aa75a33b48e94c8b38e126137f8e6c6b362837f5 100644 --- a/src/core.c +++ b/src/core.c @@ -46,6 +46,7 @@ int box64_exit_code = 0; int box64_log = LOG_INFO; //LOG_NONE; int box64_dump = 0; int box64_nobanner = 0; +int box64_stdout_no_w = 0; int box64_dynarec_log = LOG_NONE; uintptr_t box64_pagesize; uintptr_t box64_load_addr = 0; @@ -55,9 +56,11 @@ int box64_cefdisablegpu = 0; int box64_cefdisablegpucompositor = 0; int box64_malloc_hack = 0; int box64_dynarec_test = 0; +int box64_x11sync = 0; path_collection_t box64_addlibs = {0}; int box64_maxcpu = 0; int box64_maxcpu_immutable = 0; +int box64_is32bits = 0; #if defined(SD845) || defined(SD888) || defined(SD8G2) || defined(TEGRAX1) int box64_mmap32 = 1; #else @@ -67,6 +70,8 @@ int box64_ignoreint3 = 0; int box64_rdtsc = 0; int box64_rdtsc_1ghz = 0; uint8_t box64_rdtsc_shift = 0; +char* box64_insert_args = NULL; +char* box64_new_args = NULL; #ifdef DYNAREC int box64_dynarec = 1; int box64_dynarec_dump = 0; @@ -85,6 +90,7 @@ int box64_dynarec_tbb = 1; int box64_dynarec_wait = 1; int box64_dynarec_missing = 0; int box64_dynarec_aligned_atomics = 0; +int box64_dynarec_nativeflags = 1; uintptr_t box64_nodynarec_start = 0; uintptr_t box64_nodynarec_end = 0; uintptr_t box64_dynarec_test_start = 0; @@ -108,7 +114,8 @@ int rv64_zba = 0; int rv64_zbb = 0; int rv64_zbc = 0; int rv64_zbs = 0; -int rv64_vector = 0; +int rv64_vector = 0; // rvv 1.0 or xtheadvector +int rv64_xtheadvector = 0; int rv64_vlen = 0; int rv64_xtheadba = 0; int rv64_xtheadbb = 0; @@ -152,6 +159,7 @@ int box64_x11glx = 1; int allow_missing_libs = 0; int box64_prefer_emulated = 0; int box64_prefer_wrapped = 0; +int box64_wrap_egl = 0; int box64_sse_flushto0 = 0; int box64_x87_no80bits = 0; int box64_sync_rounding = 0; @@ -169,6 +177,7 @@ int box64_dummy_crashhandler = 1; int box64_mapclean = 0; int box64_zoom = 0; int box64_steam = 0; +int box64_steamcmd = 0; int box64_wine = 0; int box64_musl = 0; int box64_nopulse = 0; @@ -187,6 +196,7 @@ char* box64_custom_gstreamer = NULL; uintptr_t fmod_smc_start = 0; uintptr_t fmod_smc_end = 0; uint32_t default_gs = 0x53; +uint32_t default_fs = 0; int jit_gdb = 0; int box64_tcmalloc_minimal = 0; @@ -194,7 +204,7 @@ FILE* ftrace = NULL; char* ftrace_name = NULL; int ftrace_has_pid = 0; -void openFTrace(const char* newtrace) +void openFTrace(const char* newtrace, int reopen) { const char* t = newtrace?newtrace:getenv("BOX64_TRACE_FILE"); #ifndef MAX_PATH @@ -208,30 +218,35 @@ void openFTrace(const char* newtrace) strncpy(tmp2, p, sizeof(tmp2)); tmp2[strlen(p)-1]='\0'; p = tmp2; - append=1; + append = 1; + } + if (reopen) { + p = ftrace_name; + append = 1; + } else { + if (p && strstr(p, "%pid")) { + int next = 0; + do { + strcpy(tmp, p); + char* c = strstr(tmp, "%pid"); + *c = 0; // cut + char pid[16]; + if (next) + sprintf(pid, "%d-%d", getpid(), next); + else + sprintf(pid, "%d", getpid()); + strcat(tmp, pid); + c = strstr(p, "%pid") + strlen("%pid"); + strcat(tmp, c); + ++next; + } while (FileExist(tmp, IS_FILE) && !append); + p = tmp; + ftrace_has_pid = 1; + } + if (ftrace_name) + free(ftrace_name); + ftrace_name = NULL; } - if(p && strstr(p, "%pid")) { - int next = 0; - do { - strcpy(tmp, p); - char* c = strstr(tmp, "%pid"); - *c = 0; // cut - char pid[16]; - if(next) - sprintf(pid, "%d-%d", getpid(), next); - else - sprintf(pid, "%d", getpid()); - strcat(tmp, pid); - c = strstr(p, "%pid") + strlen("%pid"); - strcat(tmp, c); - ++next; - } while (FileExist(tmp, IS_FILE) && !append); - p = tmp; - ftrace_has_pid = 1; - } - if(ftrace_name) - free(ftrace_name); - ftrace_name = NULL; if(p) { if(!strcmp(p, "stderr")) ftrace = stderr; @@ -244,11 +259,13 @@ void openFTrace(const char* newtrace) ftrace = stdout; printf_log(LOG_INFO, "Cannot open trace file \"%s\" for writing (error=%s)\n", p, strerror(errno)); } else { - ftrace_name = strdup(p); + if (!reopen) ftrace_name = strdup(p); /*fclose(ftrace); ftrace = NULL;*/ - if(!box64_nobanner) + if(!box64_nobanner) { printf("BOX64 Trace %s to \"%s\"\n", append?"appended":"redirected", p); + box64_stdout_no_w = 1; + } PrintBox64Version(); } } @@ -272,14 +289,27 @@ void printf_ftrace(const char* fmt, ...) va_end(args); } +void my_prepare_fork() +{ + if (ftrace_has_pid && ftrace && ftrace != stdout && ftrace != stderr) { + fclose(ftrace); + printf_log(LOG_INFO, "Closed trace file of %s at prepare\n", GetLastApplyName()); + } +} + +void my_parent_fork() +{ + if (ftrace_has_pid) { + openFTrace(NULL, 1); + printf_log(LOG_INFO, "Reopened trace file of %s at parent\n", GetLastApplyName()); + } +} + void my_child_fork() { - if(ftrace_has_pid) { - // open a new ftrace... - if(!ftrace_name) - fclose(ftrace); - openFTrace(NULL); - printf_log(/*LOG_DEBUG*/LOG_INFO, "Forked child of %s\n", GetLastApplyName()); + if (ftrace_has_pid) { + openFTrace(NULL, 0); + printf_log(LOG_INFO, "Created trace file of %s at child\n", GetLastApplyName()); } } @@ -482,10 +512,10 @@ HWCAP2_AFP if(p == NULL || p[0] == '0') { uint32_t cpucfg2 = 0, idx = 2; asm volatile("cpucfg %0, %1" : "=r"(cpucfg2) : "r"(idx)); - if ((cpucfg2 >> 6) & 0b1) { - printf_log(LOG_INFO, "with extension LSX"); + if (((cpucfg2 >> 6) & 0b11) == 3) { + printf_log(LOG_INFO, "with extension LSX LASX"); } else { - printf_log(LOG_INFO, "\nMissing LSX extension support, disabling Dynarec\n"); + printf_log(LOG_INFO, "\nMissing LSX and/or LASX extension support, disabling Dynarec\n"); box64_dynarec = 0; return; } @@ -501,25 +531,61 @@ HWCAP2_AFP } #elif defined(RV64) void RV64_Detect_Function(); + // private env. variable for the developer ;) char *p = getenv("BOX64_DYNAREC_RV64NOEXT"); if(p == NULL || p[0] == '0') RV64_Detect_Function(); + if (p != NULL && !strcasecmp(p, "vector")) { + RV64_Detect_Function(); + rv64_vector = 0; + rv64_xtheadvector = 0; + } else if (p != NULL && !strcasecmp(p, "zba")) { + RV64_Detect_Function(); + rv64_zba = 0; + } else if (p != NULL && !strcasecmp(p, "zbb")) { + RV64_Detect_Function(); + rv64_zbb = 0; + } else if (p != NULL && !strcasecmp(p, "zbc")) { + RV64_Detect_Function(); + rv64_zbc = 0; + } else if (p != NULL && !strcasecmp(p, "zbs")) { + RV64_Detect_Function(); + rv64_zbs = 0; + } else if (p != NULL && !strcasecmp(p, "xtheadba")) { + RV64_Detect_Function(); + rv64_xtheadba = 0; + } else if (p != NULL && !strcasecmp(p, "xtheadbb")) { + RV64_Detect_Function(); + rv64_xtheadbb = 0; + } else if (p != NULL && !strcasecmp(p, "xtheadbs")) { + RV64_Detect_Function(); + rv64_xtheadbs = 0; + } else if (p != NULL && !strcasecmp(p, "xtheadmempair")) { + RV64_Detect_Function(); + rv64_xtheadmempair = 0; + } else if (p != NULL && !strcasecmp(p, "xtheadcondmov")) { + RV64_Detect_Function(); + rv64_xtheadcondmov = 0; + } + printf_log(LOG_INFO, "Dynarec for RISC-V "); printf_log(LOG_INFO, "With extension: I M A F D C"); if(rv64_zba) printf_log(LOG_INFO, " Zba"); if(rv64_zbb) printf_log(LOG_INFO, " Zbb"); if(rv64_zbc) printf_log(LOG_INFO, " Zbc"); if(rv64_zbs) printf_log(LOG_INFO, " Zbs"); - if(rv64_vector) printf_log(LOG_INFO, " Vector (vlen: %d)", rv64_vlen); + if (rv64_vector && !rv64_xtheadvector) printf_log(LOG_INFO, " Vector (vlen: %d)", rv64_vlen); + if (rv64_xtheadvector) printf_log(LOG_INFO, " XTheadVector (vlen: %d)", rv64_vlen); if(rv64_xtheadba) printf_log(LOG_INFO, " XTheadBa"); if(rv64_xtheadbb) printf_log(LOG_INFO, " XTheadBb"); if(rv64_xtheadbs) printf_log(LOG_INFO, " XTheadBs"); - if(rv64_xtheadcondmov) printf_log(LOG_INFO, " XTheadCondMov"); - if(rv64_xtheadmemidx) printf_log(LOG_INFO, " XTheadMemIdx"); - if(rv64_xtheadmempair) printf_log(LOG_INFO, " XTheadMemPair"); - if(rv64_xtheadfmemidx) printf_log(LOG_INFO, " XTheadFMemIdx"); - if(rv64_xtheadmac) printf_log(LOG_INFO, " XTheadMac"); - if(rv64_xtheadfmv) printf_log(LOG_INFO, " XTheadFmv"); + if (rv64_xtheadmempair) printf_log(LOG_INFO, " XTheadMemPair"); + if (rv64_xtheadcondmov) printf_log(LOG_INFO, " XTheadCondMov"); + // Disable the display since these are only detected but never used. + // if(rv64_xtheadmemidx) printf_log(LOG_INFO, " XTheadMemIdx"); + // if(rv64_xtheadfmemidx) printf_log(LOG_INFO, " XTheadFMemIdx"); + // if(rv64_xtheadmac) printf_log(LOG_INFO, " XTheadMac"); + // if(rv64_xtheadfmv) printf_log(LOG_INFO, " XTheadFmv"); #else #error Unsupported architecture #endif @@ -579,7 +645,7 @@ void LoadLogEnv() } } // grab BOX64_TRACE_FILE envvar, and change %pid to actual pid is present in the name - openFTrace(NULL); + openFTrace(NULL, 0); box64_log = ftrace_name?LOG_INFO:(isatty(fileno(stdout))?LOG_INFO:LOG_NONE); //default LOG value different if stdout is redirected or not p = getenv("BOX64_LOG"); if(p) { @@ -606,6 +672,8 @@ void LoadLogEnv() if(!box64_nobanner) printf_log(LOG_INFO, "Debug level is %d\n", box64_log); } + if((box64_nobanner || box64_log) && ftrace==stdout) + box64_stdout_no_w = 1; #if !defined(DYNAREC) && (defined(ARM64) || defined(RV64) || defined(LA64)) printf_log(LOG_INFO, "Warning: DynaRec is available on this host architecture, an interpreter-only build is probably not intended.\n"); @@ -645,7 +713,7 @@ void LoadLogEnv() p = getenv("BOX64_DYNAREC_DUMP"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[0]<='2') + if (p[0] >= '0' && p[0] <= '2') box64_dynarec_dump = p[0]-'0'; } if (box64_dynarec_dump) printf_log(LOG_INFO, "Dynarec blocks are dumped%s\n", (box64_dynarec_dump>1)?" in color":""); @@ -747,11 +815,13 @@ void LoadLogEnv() p = getenv("BOX64_DYNAREC_FASTROUND"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[0]<='1') + if(p[0]>='0' && p[0]<='2') box64_dynarec_fastround = p[0]-'0'; } if(!box64_dynarec_fastround) printf_log(LOG_INFO, "Dynarec will try to generate x86 precise IEEE->int rounding\n"); + else if(box64_dynarec_fastround==2) + printf_log(LOG_INFO, "Dynarec will generate x86 very imprecise double->float rounding\n"); } p = getenv("BOX64_DYNAREC_SAFEFLAGS"); if(p) { @@ -820,14 +890,25 @@ void LoadLogEnv() if(box64_dynarec_aligned_atomics) printf_log(LOG_INFO, "Dynarec will generate only aligned atomics code\n"); } - p = getenv("BOX64_DYNAREC_MISSING"); + p = getenv("BOX64_DYNAREC_NATIVEFLAGS"); if(p) { if(strlen(p)==1) { if(p[0]>='0' && p[0]<='1') + box64_dynarec_nativeflags = p[0]-'0'; + } + if(!box64_dynarec_nativeflags) + printf_log(LOG_INFO, "Dynarec will not use native flags if possible\n"); + } + p = getenv("BOX64_DYNAREC_MISSING"); + if(p) { + if(strlen(p)==1) { + if(p[0]>='0' && p[0]<='2') box64_dynarec_missing = p[0]-'0'; } - if(box64_dynarec_missing) + if(box64_dynarec_missing==1) printf_log(LOG_INFO, "Dynarec will print missing opcodes\n"); + else if (box64_dynarec_missing==2) + printf_log(LOG_INFO, "Dynarec will print fallback to scalar opcodes\n"); } p = getenv("BOX64_NODYNAREC"); if(p) { @@ -842,7 +923,7 @@ void LoadLogEnv() p = getenv("BOX64_DYNAREC_TEST"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[0]<='2') + if(p[0]>='0' && p[0]<='1') box64_dynarec_test = p[0]-'0'; box64_dynarec_test_start = 0x0; box64_dynarec_test_end = 0x0; @@ -866,9 +947,7 @@ void LoadLogEnv() box64_dynarec_x87double = 1; box64_dynarec_div0 = 1; box64_dynarec_callret = 0; - printf_log(LOG_INFO, "Dynarec will compare it's execution with the interpreter%s (%s slow, only for testing)\n", - box64_dynarec_test == 2 ? " thread-safely" : "", - box64_dynarec_test == 2 ? "extremely" : "super"); + printf_log(LOG_INFO, "Dynarec will compare it's execution with the interpreter (super slow, only for testing)\n"); } } @@ -1181,6 +1260,13 @@ void LoadLogEnv() if(box64_ignoreint3) printf_log(LOG_INFO, "Will silently ignore INT3 in the code\n"); } + p = getenv("BOX64_X11SYNC"); + if(p) { + if(strlen(p)==1) { + if(p[0]>='0' && p[0]<='0'+1) + box64_x11sync = p[0]-'0'; + } + } // grab pagesize box64_pagesize = sysconf(_SC_PAGESIZE); if(!box64_pagesize) @@ -1267,7 +1353,11 @@ int GatherEnv(char*** dest, char** env, char* prog) (*dest)[idx++] = box_strdup("BOX64_PATH=.:bin"); } if(!ld_path) { + #ifdef BOX32 + (*dest)[idx++] = box_strdup("BOX64_LD_LIBRARY_PATH=.:lib:lib64:x86_64:bin64:libs64:i386:libs:bin"); + #else (*dest)[idx++] = box_strdup("BOX64_LD_LIBRARY_PATH=.:lib:lib64:x86_64:bin64:libs64"); + #endif } // add "_=prog" at the end... if(prog) { @@ -1380,24 +1470,7 @@ void LoadEnvVars(box64context_t *context) } } while(p); } - // check BOX64_LD_LIBRARY_PATH and load it - LoadEnvPath(&context->box64_ld_lib, ".:lib:lib64:x86_64:bin64:libs64", "BOX64_LD_LIBRARY_PATH"); - #ifndef TERMUX - if(FileExist("/lib/x86_64-linux-gnu", 0)) - AddPath("/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); - if(FileExist("/usr/lib/x86_64-linux-gnu", 0)) - AddPath("/usr/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); - if(FileExist("/usr/x86_64-linux-gnu/lib", 0)) - AddPath("/usr/x86_64-linux-gnu/lib", &context->box64_ld_lib, 1); - if(FileExist("/data/data/com.termux/files/usr/glibc/lib/x86_64-linux-gnu", 0)) - AddPath("/data/data/com.termux/files/usr/glibc/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); - #else - //TODO: Add Termux Library Path - Lily - if(FileExist("/data/data/com.termux/files/usr/lib/x86_64-linux-gnu", 0)) - AddPath("/data/data/com.termux/files/usr/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); - #endif - if(getenv("LD_LIBRARY_PATH")) - PrependList(&context->box64_ld_lib, getenv("LD_LIBRARY_PATH"), 1); // in case some of the path are for x86 world + if(getenv("BOX64_EMULATED_LIBS")) { char* p = getenv("BOX64_EMULATED_LIBS"); ParseList(p, &context->box64_emulated_libs, 0); @@ -1450,6 +1523,13 @@ void LoadEnvVars(box64context_t *context) printf_log(LOG_INFO, "BOX64: Prefering Emulated libs\n"); } } + if(getenv("BOX64_WRAP_EGL")) { + char* p = getenv("BOX64_WRAP_EGL"); + if (*p>='0' && *p<='1') { + box64_wrap_egl = *p - '0'; + if(box64_wrap_egl) printf_log(LOG_INFO, "BOX64: Prefering Native(Wrapped) EGL/GLESv2\n"); + } + } if(getenv("BOX64_NOSIGSEGV")) { if (strcmp(getenv("BOX64_NOSIGSEGV"), "1")==0) { @@ -1495,6 +1575,58 @@ void LoadEnvVars(box64context_t *context) #endif } +EXPORTDYN +void LoadLDPath(box64context_t *context) +{ + // check BOX64_LD_LIBRARY_PATH and load it + #ifdef BOX32 + if(box64_is32bits) + LoadEnvPath(&context->box64_ld_lib, ".:lib:i386:bin:libs", "BOX64_LD_LIBRARY_PATH"); + else + #endif + LoadEnvPath(&context->box64_ld_lib, ".:lib:lib64:x86_64:bin64:libs64", "BOX64_LD_LIBRARY_PATH"); + #ifndef TERMUX + if(box64_is32bits) { + #ifdef BOX32 + if(FileExist("/lib/i386-linux-gnu", 0)) + AddPath("/lib/i386-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/usr/lib/i386-linux-gnu", 0)) + AddPath("/usr/lib/i386-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/usr/i386-linux-gnu/lib", 0)) + AddPath("/usr/i386-linux-gnu/lib", &context->box64_ld_lib, 1); + if(FileExist("/usr/lib/box64-i386-linux-gnu", 0)) + AddPath("/usr/lib/box64-i386-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/data/data/com.termux/files/usr/glibc/lib/i386-linux-gnu", 0)) + AddPath("/data/data/com.termux/files/usr/glibc/lib/i386-linux-gnu", &context->box64_ld_lib, 1); + #endif + } else { + if(FileExist("/lib/x86_64-linux-gnu", 0)) + AddPath("/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/usr/lib/x86_64-linux-gnu", 0)) + AddPath("/usr/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/usr/x86_64-linux-gnu/lib", 0)) + AddPath("/usr/x86_64-linux-gnu/lib", &context->box64_ld_lib, 1); + if(FileExist("/usr/lib/box64-x86_64-linux-gnu", 0)) + AddPath("/usr/lib/box64-x86_64-linux-gnu", &context->box64_ld_lib, 1); + if(FileExist("/data/data/com.termux/files/usr/glibc/lib/x86_64-linux-gnu", 0)) + AddPath("/data/data/com.termux/files/usr/glibc/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); + } + #else + //TODO: Add Termux Library Path - Lily + if(box64_is32bits) { + #ifdef BOX32 + if(FileExist("/data/data/com.termux/files/usr/lib/i386-linux-gnu", 0)) + AddPath("/data/data/com.termux/files/usr/lib/i386-linux-gnu", &context->box64_ld_lib, 1); + #endif + } else { + if(FileExist("/data/data/com.termux/files/usr/lib/x86_64-linux-gnu", 0)) + AddPath("/data/data/com.termux/files/usr/lib/x86_64-linux-gnu", &context->box64_ld_lib, 1); + } + #endif + if(getenv("LD_LIBRARY_PATH")) + PrependList(&context->box64_ld_lib, getenv("LD_LIBRARY_PATH"), 1); // in case some of the path are for x86 world +} + EXPORTDYN void setupTraceInit() { @@ -1513,10 +1645,16 @@ void setupTraceInit() if(s_trace_start || s_trace_end) SetTraceEmu(s_trace_start, s_trace_end); } else { - if (GetGlobalSymbolStartEnd(my_context->maplib, p, &s_trace_start, &s_trace_end, NULL, -1, NULL, 0, NULL)) { - SetTraceEmu(s_trace_start, s_trace_end); - printf_log(LOG_INFO, "TRACE on %s only (%p-%p)\n", p, (void*)s_trace_start, (void*)s_trace_end); - } else if(GetLocalSymbolStartEnd(my_context->maplib, p, &s_trace_start, &s_trace_end, NULL, -1, NULL, 0, NULL)) { + int veropt = 1; + int ver = 0; + const char* vername = NULL; + int search = 0; + for(int i=0; ielfsize && !search; ++i) { + search = ElfGetSymbolStartEnd(my_context->elfs[i], &s_trace_start, &s_trace_end, p, &ver, &vername, 1, &veropt)?1:0; + if(!search) + search = ElfGetSymTabStartEnd(my_context->elfs[i], &s_trace_start, &s_trace_end, p); + } + if(search) { SetTraceEmu(s_trace_start, s_trace_end); printf_log(LOG_INFO, "TRACE on %s only (%p-%p)\n", p, (void*)s_trace_start, (void*)s_trace_end); } else { @@ -1540,42 +1678,19 @@ void setupTraceMapLib(lib_t* maplib) return; char* p = trace_func; uintptr_t s_trace_start=0, s_trace_end=0; - if(maplib) { - if (GetGlobalSymbolStartEnd(maplib, p, &s_trace_start, &s_trace_end, NULL, -1, NULL, 0, NULL)) { - SetTraceEmu(s_trace_start, s_trace_end); - printf_log(LOG_INFO, "TRACE on %s only (%p-%p)\n", p, (void*)s_trace_start, (void*)s_trace_end); - box_free(trace_func); - trace_func = NULL; - return; - } else if(GetLocalSymbolStartEnd(maplib, p, &s_trace_start, &s_trace_end, NULL, -1, NULL, 0, NULL)) { - SetTraceEmu(s_trace_start, s_trace_end); - printf_log(LOG_INFO, "TRACE on %s only (%p-%p)\n", p, (void*)s_trace_start, (void*)s_trace_end); - box_free(trace_func); - trace_func = NULL; - return; - } else if(GetSymTabStartEnd(maplib, p, &s_trace_start, &s_trace_end)) { - SetTraceEmu(s_trace_start, s_trace_end); - printf_log(LOG_INFO, "TRACE on %s only (%p-%p)\n", p, (void*)s_trace_start, (void*)s_trace_end); - box_free(trace_func); - trace_func = NULL; - return; - } - } - if (my_context->elfs && GetGlobalSymbolStartEnd(my_context->maplib, p, &s_trace_start, &s_trace_end, NULL, -1, NULL, 0, NULL)) { - SetTraceEmu(s_trace_start, s_trace_end); - printf_log(LOG_INFO, "TRACE on %s only (%p-%p)\n", p, (void*)s_trace_start, (void*)s_trace_end); - box_free(trace_func); - trace_func = NULL; - } else if(my_context->elfs && GetLocalSymbolStartEnd(my_context->maplib, p, &s_trace_start, &s_trace_end, NULL, -1, NULL, 0, NULL)) { + void* search = NULL; + if(GetAnySymbolStartEnd(maplib, p, &s_trace_start, &s_trace_end, 0, NULL, 1)) { SetTraceEmu(s_trace_start, s_trace_end); printf_log(LOG_INFO, "TRACE on %s only (%p-%p)\n", p, (void*)s_trace_start, (void*)s_trace_end); box_free(trace_func); trace_func = NULL; - } else if(GetSymTabStartEnd(my_context->maplib, p, &s_trace_start, &s_trace_end)) { + return; + } else if(GetSymTabStartEnd(maplib, p, &s_trace_start, &s_trace_end)) { SetTraceEmu(s_trace_start, s_trace_end); printf_log(LOG_INFO, "TRACE on %s only (%p-%p)\n", p, (void*)s_trace_start, (void*)s_trace_end); box_free(trace_func); trace_func = NULL; + return; } else { printf_log(LOG_NONE, "Warning, Symbol to trace (\"%s\") not found. Trying to set trace later\n", p); SetTraceEmu(0, 1); // disabling trace, mostly @@ -1607,10 +1722,18 @@ void setupTrace() } } } else { - if (my_context->elfs && GetGlobalSymbolStartEnd(my_context->maplib, p, &s_trace_start, &s_trace_end, NULL, -1, NULL, 0, NULL)) { - SetTraceEmu(s_trace_start, s_trace_end); - printf_log(LOG_INFO, "TRACE on %s only (%p-%p)\n", p, (void*)s_trace_start, (void*)s_trace_end); - } else if(my_context->elfs && GetLocalSymbolStartEnd(my_context->maplib, p, &s_trace_start, &s_trace_end, NULL, -1, NULL, 0, NULL)) { + int search = 0; + if (my_context->elfs) { + int veropt = 1; + int ver = 0; + const char* vername = NULL; + for(int i=0; ielfsize && !search; ++i) { + search = ElfGetSymbolStartEnd(my_context->elfs[i], &s_trace_start, &s_trace_end, p, &ver, &vername, 1, &veropt)?1:0; + if(!search) + search = ElfGetSymTabStartEnd(my_context->elfs[i], &s_trace_start, &s_trace_end, p); + } + } + if(search) { SetTraceEmu(s_trace_start, s_trace_end); printf_log(LOG_INFO, "TRACE on %s only (%p-%p)\n", p, (void*)s_trace_start, (void*)s_trace_end); } else { @@ -1684,10 +1807,16 @@ static void add_argv(const char* what) { if(!strcmp(my_context->argv[i], what)) there = 1; if(!there) { - printf_log(LOG_INFO, "Inserting \"%s\" to the arguments\n", what); + // try to prepend the arg, not appending + static int where = 0; + if(!where) + where = (box64_wine)?2:1; + printf_log(LOG_INFO, "Inserting \"%s\" to the argument %d\n", what, where); my_context->argv = (char**)box_realloc(my_context->argv, (my_context->argc+1)*sizeof(char*)); - my_context->argv[my_context->argc] = box_strdup(what); + memmove(my_context->argv+where+1, my_context->argv+where, (my_context->argc-where)*sizeof(char*)); + my_context->argv[where] = box_strdup(what); my_context->argc++; + where++; } } @@ -1800,22 +1929,32 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf printf("BOX64: Nothing to run\n"); exit(0); } +#ifndef WINECE if(!box64_nobanner) PrintBox64Version(); +#endif // precheck, for win-preload - if(strstr(prog, "wine-preloader")==(prog+strlen(prog)-strlen("wine-preloader")) - || strstr(prog, "wine64-preloader")==(prog+strlen(prog)-strlen("wine64-preloader"))) { + const char* prog_ = strrchr(prog, '/'); + if(!prog_) prog_ = prog; else ++prog_; + if(!strcmp(prog_, "wine-preloader") || !strcmp(prog_, "wine64-preloader")) { // wine-preloader detecter, skipping it if next arg exist and is an x86 binary int x64 = (nextarg9 && !strcmp(prog+strlen(prog)-strlen("/wineserver"), "/wineserver"))) { + } else if(!strcmp(prog_, "steam") ) { + printf_log(LOG_INFO, "steam detected\n"); + box64_steam = 1; + } else if(!strcmp(prog_, "steamcmd")) { + printf_log(LOG_INFO, "steamcmd detected\n"); + box64_steamcmd = 1; + } else if(!strcmp(prog_, "wineserver")) { + // check if this is wineserver box64_wine = 1; } // Create a new context @@ -1902,7 +2044,7 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf // Append ld_list if it exist if(ld_libs_args!=-1) PrependList(&my_context->box64_ld_lib, argv[ld_libs_args], 1); - if(is_custom_gstreamer) + if(is_custom_gstreamer) //TODO: is this still needed? AddPath("libwayland-client.so.0", &my_context->box64_emulated_libs, 0); my_context->box64path = ResolveFile(argv[0], &my_context->box64_path); @@ -1918,6 +2060,7 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf } path_collection_t ld_preload = {0}; +#ifndef WINECE if(getenv("BOX64_LD_PRELOAD")) { char* p = getenv("BOX64_LD_PRELOAD"); ParseList(p, &ld_preload, 0); @@ -1946,27 +2089,34 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf printf_log(LOG_INFO, "\n"); } } +#endif // print PATH and LD_LIB used PrintCollection(&my_context->box64_ld_lib, "BOX64 LIB PATH"); PrintCollection(&my_context->box64_path, "BOX64 BIN PATH"); // lets build argc/argv stuff printf_log(LOG_INFO, "Looking for %s\n", prog); - my_context->argv[0] = ResolveFileSoft(prog, &my_context->box64_path); + if(strchr(prog, '/')) + my_context->argv[0] = box_strdup(prog); + else + my_context->argv[0] = ResolveFileSoft(prog, &my_context->box64_path); // check if box86 is present { my_context->box86path = box_strdup(my_context->box64path); + #ifndef BOX32 char* p = strrchr(my_context->box86path, '6'); // get the 6 of box64 p[0] = '8'; p[1] = '6'; // change 64 to 86 if(!FileExist(my_context->box86path, IS_FILE)) { box_free(my_context->box86path); my_context->box86path = NULL; } + #endif } const char* prgname = strrchr(prog, '/'); if(!prgname) prgname = prog; else ++prgname; +#ifndef WINECE if(box64_wine) { #ifdef ANDROID AddPath("libdl.so", &ld_preload, 0); @@ -1974,13 +2124,14 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf AddPath("libdl.so.2", &ld_preload, 0); #endif } +#endif // special case for zoom if(strstr(prgname, "zoom")==prgname) { printf_log(LOG_INFO, "Zoom detected, Trying to use system libturbojpeg if possible\n"); box64_zoom = 1; } // special case for bash (add BOX86_NOBANNER=1 if not there) - if(!strcmp(prgname, "bash")) { + if(!strcmp(prgname, "bash") || !strcmp(prgname, "box64-bash")) { printf_log(LOG_INFO, "bash detected, disabling banner\n"); if (!box64_nobanner) { setenv("BOX86_NOBANNER", "1", 0); @@ -1991,6 +2142,8 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf setenv("BOX64_BASH", prog, 1); } } + if(!bashpath) + bashpath = ResolveFile("box64-bash", &my_context->box64_path); if(bashpath) my_context->bashpath = box_strdup(bashpath); @@ -2030,7 +2183,60 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf { add_argv("-cef-disable-gpu-compositor"); } - + // add new args only if there is no args already + if(box64_new_args) { + char tmp[256]; + char* p = box64_new_args; + int state = 0; + char* p2 = p; + if(my_context->argc==1 || (my_context->argc==2 && box64_wine)) + while(state>=0) { + switch(*p2) { + case 0: // end of flux + if(state && (p2!=p)) add_argv(p); + state = -1; + break; + case '"': // start/end of quotes + if(state<2) {if(!state) p=p2; state=2;} else state=1; + break; + case ' ': + if(state==1) {strncpy(tmp, p, p2-p); tmp[p2-p]='\0'; add_argv(tmp); state=0;} + break; + default: + if(state==0) {state=1; p=p2;} + break; + } + ++p2; + } + box_free(box64_new_args); + box64_new_args = NULL; + } + if(box64_insert_args) { + char tmp[256]; + char* p = box64_insert_args; + int state = 0; + char* p2 = p; + while(state>=0) { + switch(*p2) { + case 0: // end of flux + if(state && (p2!=p)) add_argv(p); + state = -1; + break; + case '"': // start/end of quotes + if(state<2) {if(!state) p=p2; state=2;} else state=1; + break; + case ' ': + if(state==1) {strncpy(tmp, p, p2-p); tmp[p2-p]='\0'; add_argv(tmp); state=0;} + break; + default: + if(state==0) {state=1; p=p2;} + break; + } + ++p2; + } + box_free(box64_insert_args); + box64_insert_args = NULL; + } // check if file exist if(!my_context->argv[0] || !FileExist(my_context->argv[0], IS_FILE)) { printf_log(LOG_NONE, "Error: File is not found. (check BOX64_PATH)\n"); @@ -2058,6 +2264,16 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf FreeCollection(&ld_preload); return -1; } + #ifdef BOX32 + box64_is32bits = FileIsX86ELF(my_context->fullpath); + if(box64_is32bits) { + printf_log(LOG_INFO, "BOX64: Using Box32 to load 32bits elf\n"); + loadProtectionFromMap(); + reserveHighMem(); + init_pthread_helper_32(); + } + #endif + LoadLDPath(my_context); elfheader_t *elf_header = LoadAndCheckElfHeader(f, my_context->fullpath, 1); if(!elf_header) { int x86 = my_context->box86path?FileIsX86ELF(my_context->fullpath):0; @@ -2111,6 +2327,18 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf FreeCollection(&ld_preload); return -1; } + if(!strcmp(prgname, "heroic")) { + // check if heroic needs patching (for the 2.15.1 version) + uint8_t* address = GetBaseAddress(elf_header); + if(address[0x422f6e1]==0x72 && address[0x422f6e2]==0x44 && address[0x422f6e0]==0xF8 && address[0x422f727]==0xcc) { + printf_log(LOG_INFO, "Patched heroic!\n"); + uintptr_t page = ((uintptr_t)&address[0x422f6e1])&~(box64_pagesize-1); + int prot = getProtection(page); + mprotect((void*)page, box64_pagesize, PROT_READ|PROT_WRITE|PROT_EXEC); + address[0x422f6e1]=0x90; address[0x422f6e2]=0x90; + mprotect((void*)page, box64_pagesize, prot); + } + } if(ElfCheckIfUseTCMallocMinimal(elf_header)) { if(!box64_tcmalloc_minimal) { // need to reload with tcmalloc_minimal as a LD_PRELOAD! @@ -2164,6 +2392,7 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf sanitize_mojosetup_gtk_background(); } #endif +#ifndef WINECE // change process name { char* p = strrchr(my_context->fullpath, '/'); @@ -2190,6 +2419,7 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf my_context->orig_argc = argc; my_context->orig_argv = (char**)argv; } +#endif box64_isglibc234 = GetNeededVersionForLib(elf_header, "libc.so.6", "GLIBC_2.34"); if(box64_isglibc234) printf_log(LOG_DEBUG, "Program linked with GLIBC 2.34+\n"); @@ -2206,10 +2436,15 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf // stack setup is much more complicated then just that! SetupInitialStack(emu); // starting here, the argv[] don't need free anymore SetupX64Emu(emu, NULL); - SetRSI(emu, my_context->argc); - SetRDX(emu, (uint64_t)my_context->argv); - SetRCX(emu, (uint64_t)my_context->envv); - SetRBP(emu, 0); // Frame pointer so to "No more frame pointer" + if(box64_is32bits) { + SetEAX(emu, my_context->argc); + SetEBX(emu, my_context->argv32); + } else { + SetRSI(emu, my_context->argc); + SetRDX(emu, (uint64_t)my_context->argv); + SetRCX(emu, (uint64_t)my_context->envv); + SetRBP(emu, 0); // Frame pointer so to "No more frame pointer" + } // child fork to handle traces pthread_atfork(NULL, NULL, my_child_fork); @@ -2293,11 +2528,20 @@ int emulate(x64emu_t* emu, elfheader_t* elf_header) // emulate! printf_log(LOG_DEBUG, "Start x64emu on Main\n"); // Stack is ready, with stacked: NULL env NULL argv argc - SetRIP(emu, my_context->ep); ResetFlags(emu); - Push64(emu, my_context->exit_bridge); // push to pop it just after - SetRDX(emu, Pop64(emu)); // RDX is exit function - Run(emu, 0); + #ifdef BOX32 + if(box64_is32bits) { + SetEIP(emu, my_context->ep); + Push32(emu, my_context->exit_bridge); // push to pop it just after + SetEDX(emu, Pop32(emu)); // RDX is exit function + } else + #endif + { + SetRIP(emu, my_context->ep); + Push64(emu, my_context->exit_bridge); // push to pop it just after + SetRDX(emu, Pop64(emu)); // RDX is exit function + } + DynaRun(emu); // Get EAX int ret = GetEAX(emu); printf_log(LOG_DEBUG, "Emulation finished, EAX=%d\n", ret); diff --git a/src/custommem.c b/src/custommem.c index da11885febf792e8285522d71f57e332a93430e1..3307335e6e8c0fa262296eff8c5b3b3bde0c946b 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -32,8 +32,6 @@ #include "dynarec/native_lock.h" #include "dynarec/dynarec_next.h" -#define USE_MMAP - // init inside dynablocks.c static mmaplist_t *mmaplist = NULL; static uint64_t jmptbl_allocated = 0, jmptbl_allocated1 = 0, jmptbl_allocated2 = 0, jmptbl_allocated3 = 0; @@ -62,12 +60,13 @@ static pthread_mutex_t mutex_prot; static pthread_mutex_t mutex_blocks; #endif //#define TRACE_MEMSTAT -rbtree* memprot = NULL; +rbtree_t* memprot = NULL; int have48bits = 0; static int inited = 0; -rbtree* mapallmem = NULL; -static rbtree* mmapmem = NULL; +rbtree_t* mapallmem = NULL; +static rbtree_t* mmapmem = NULL; +static rbtree_t* blockstree = NULL; typedef struct blocklist_s { void* block; @@ -76,7 +75,11 @@ typedef struct blocklist_s { void* first; } blocklist_t; +#ifdef BOX32 +#define MMAPSIZE (256*1024) // allocate 256kb sized blocks +#else #define MMAPSIZE (64*1024) // allocate 64kb sized blocks +#endif #define DYNMMAPSZ (2*1024*1024) // allocate 2Mb block for dynarec static int n_blocks = 0; // number of blocks for custom malloc @@ -85,7 +88,7 @@ static blocklist_t* p_blocks = NULL; // actual blocks for custom mallo typedef union mark_s { struct { - unsigned int size:31; + unsigned int offs:31; unsigned int fill:1; }; uint32_t x32; @@ -93,30 +96,44 @@ typedef union mark_s { typedef struct blockmark_s { mark_t prev; mark_t next; + uint8_t mark[]; } blockmark_t; -#define NEXT_BLOCK(b) (blockmark_t*)((uintptr_t)(b) + (b)->next.size + sizeof(blockmark_t)) -#define PREV_BLOCK(b) (blockmark_t*)(((uintptr_t)(b) - (b)->prev.size) - sizeof(blockmark_t)) +#define NEXT_BLOCK(b) (blockmark_t*)((uintptr_t)(b) + (b)->next.offs) +#define PREV_BLOCK(b) (blockmark_t*)(((uintptr_t)(b) - (b)->prev.offs)) #define LAST_BLOCK(b, s) (blockmark_t*)(((uintptr_t)(b)+(s))-sizeof(blockmark_t)) +#define SIZE_BLOCK(b) (((ssize_t)b.offs)-sizeof(blockmark_t)) void printBlock(blockmark_t* b, void* start) { + if(!b) return; printf_log(LOG_NONE, "========== Block is:\n"); do { - printf_log(LOG_NONE, "%c%p, fill=%d, size=0x%x (prev=%d/0x%x)\n", b==start?'*':' ', b, b->next.fill, b->next.size, b->prev.fill, b->prev.size); + printf_log(LOG_NONE, "%c%p, fill=%d, size=0x%x (prev=%d/0x%x)\n", b==start?'*':' ', b, b->next.fill, SIZE_BLOCK(b->next), b->prev.fill, SIZE_BLOCK(b->prev)); b = NEXT_BLOCK(b); } while(b->next.x32); printf_log(LOG_NONE, "===================\n"); } +blockmark_t* checkPrevNextCoherent(blockmark_t* b) +{ + while(b->next.x32) { + blockmark_t* next = NEXT_BLOCK(b); + if(b->next.x32 != next->prev.x32) + return next; + b = next; + } + return NULL; +} + // get first subblock free in block. Return NULL if no block, else first subblock free (mark included), filling size -static void* getFirstBlock(void* block, size_t maxsize, size_t* size, void* start) +static blockmark_t* getFirstBlock(void* block, size_t maxsize, size_t* size, void* start) { // get start of block blockmark_t *m = (blockmark_t*)((start)?start:block); while(m->next.x32) { // while there is a subblock - if(!m->next.fill && m->next.size>=maxsize) { - *size = m->next.size; + if(!m->next.fill && SIZE_BLOCK(m->next)>=maxsize) { + *size = SIZE_BLOCK(m->next); return m; } m = NEXT_BLOCK(m); @@ -125,7 +142,7 @@ static void* getFirstBlock(void* block, size_t maxsize, size_t* size, void* star return NULL; } -static void* getNextFreeBlock(void* block) +static blockmark_t* getNextFreeBlock(void* block) { blockmark_t *m = (blockmark_t*)block; while (m->next.fill) { @@ -133,12 +150,12 @@ static void* getNextFreeBlock(void* block) }; return m; } -static void* getPrevFreeBlock(void* block) +static blockmark_t* getPrevFreeBlock(void* block) { blockmark_t *m = (blockmark_t*)block; do { m = PREV_BLOCK(m); - } while (m->next.fill); + } while (m->prev.x32 && m->next.fill); return m; } @@ -147,52 +164,69 @@ static size_t getMaxFreeBlock(void* block, size_t block_size, void* start) // get start of block if(start) { blockmark_t *m = (blockmark_t*)start; - unsigned int maxsize = 0; + ssize_t maxsize = 0; while(m->next.x32) { // while there is a subblock - if(!m->next.fill && m->next.size>maxsize) { - maxsize = m->next.size; + if(!m->next.fill && SIZE_BLOCK(m->next)>maxsize) { + maxsize = SIZE_BLOCK(m->next); } m = NEXT_BLOCK(m); } - return (maxsize>=sizeof(blockmark_t))?maxsize:0; + return maxsize; } else { blockmark_t *m = LAST_BLOCK(block, block_size); // start with the end - unsigned int maxsize = 0; - while(m->prev.x32) { // while there is a subblock - if(!m->prev.fill && m->prev.size>maxsize) { - maxsize = m->prev.size; - if((uintptr_t)block+maxsize>(uintptr_t)m) - return (maxsize>=sizeof(blockmark_t))?maxsize:0; // no block large enough left... + ssize_t maxsize = 0; + while(m->prev.x32 && (((uintptr_t)block+maxsize)<(uintptr_t)m)) { // while there is a subblock + if(!m->prev.fill && SIZE_BLOCK(m->prev)>maxsize) { + maxsize = SIZE_BLOCK(m->prev); } m = PREV_BLOCK(m); } - return (maxsize>=sizeof(blockmark_t))?maxsize:0; + return maxsize; } } -#define THRESHOLD (128-2*sizeof(blockmark_t)) +#define THRESHOLD (128-1*sizeof(blockmark_t)) -static void* allocBlock(void* block, void *sub, size_t size, void** pstart) +static void* createAlignBlock(void* block, void *sub, size_t size) { (void)block; blockmark_t *s = (blockmark_t*)sub; blockmark_t *n = NEXT_BLOCK(s); + s->next.fill = 0; + size_t old_size = s->next.offs; + s->next.offs = size; + blockmark_t *m = NEXT_BLOCK(s); + m->prev.x32 = s->next.x32; + m->next.fill = 0; + m->next.offs = old_size - size; + n->prev.x32 = m->next.x32; + n = m; + return m; +} +static void* allocBlock(void* block, blockmark_t* sub, size_t size, void** pstart) +{ + (void)block; + + blockmark_t *s = (blockmark_t*)sub; + blockmark_t *n = NEXT_BLOCK(s); + + size+=sizeof(blockmark_t); // count current blockmark s->next.fill = 1; // check if a new mark is worth it - if(s->next.size>size+2*sizeof(blockmark_t)+THRESHOLD) { - size_t old_size = s->next.size; - s->next.size = size; + if(SIZE_BLOCK(s->next)>size+2*sizeof(blockmark_t)+THRESHOLD) { + // create a new mark + size_t old_offs = s->next.offs; + s->next.offs = size; blockmark_t *m = NEXT_BLOCK(s); - m->prev.fill = 1; - m->prev.size = s->next.size; + m->prev.x32 = s->next.x32; m->next.fill = 0; - m->next.size = old_size - (size + sizeof(blockmark_t)); - n->prev.fill = 0; - n->prev.size = m->next.size; + m->next.offs = old_offs - size; + n->prev.x32 = m->next.x32; n = m; } else { + // just fill the blok n->prev.fill = 1; } @@ -202,69 +236,77 @@ static void* allocBlock(void* block, void *sub, size_t size, void** pstart) n = NEXT_BLOCK(n); *pstart = (void*)n; } - return (void*)((uintptr_t)sub + sizeof(blockmark_t)); + return sub->mark; } -static size_t freeBlock(void *block, void* sub, void** pstart) +static size_t freeBlock(void *block, size_t bsize, blockmark_t* sub, void** pstart) { blockmark_t *m = (blockmark_t*)block; - blockmark_t *s = (blockmark_t*)sub; + blockmark_t *s = sub; blockmark_t *n = NEXT_BLOCK(s); - if(block!=sub) - m = PREV_BLOCK(s); s->next.fill = 0; n->prev.fill = 0; - // check if merge with previous - if (m!=s && s->prev.x32 && !s->prev.fill) { - // remove s... - m->next.size += s->next.size + sizeof(blockmark_t); - n->prev.size = m->next.size; - s = m; - } // check if merge with next - if(n->next.x32 && !n->next.fill) { + while (n->next.x32 && !n->next.fill) { blockmark_t *n2 = NEXT_BLOCK(n); //remove n - s->next.size += n->next.size + sizeof(blockmark_t); - n2->prev.size = s->next.size; + s->next.offs += n->next.offs; + n2->prev.offs = s->next.offs; + n = n2; + } + // check if merge with previous + while (s->prev.x32 && !s->prev.fill) { + m = PREV_BLOCK(s); + // remove s... + m->next.offs += s->next.offs; + n->prev.offs = m->next.offs; + s = m; } if(pstart && (uintptr_t)*pstart>(uintptr_t)s) { *pstart = (void*)s; } // return free size at current block (might be bigger) - return s->next.size; + return SIZE_BLOCK(s->next); } // return 1 if block has been expanded to new size, 0 if not -static int expandBlock(void* block, void* sub, size_t newsize) +static int expandBlock(void* block, blockmark_t* sub, size_t newsize, void** pstart) { (void)block; - newsize = (newsize+3)&~3; - blockmark_t *s = (blockmark_t*)sub; + blockmark_t *s = sub; blockmark_t *n = NEXT_BLOCK(s); - if(s->next.size>=newsize) - // big enough, no shrinking... + int re_first = (pstart && (n==*pstart))?1:0; + // big enough, nothing to do... + if(SIZE_BLOCK(s->next)>=newsize) return 1; - if(s->next.fill) + if(n->next.fill) return 0; // next block is filled - // unsigned bitfield of this length gets "promoted" to *signed* int... - if((size_t)(s->next.size + n->next.size + sizeof(blockmark_t)) < newsize) + // check the total size of the new block (so both offset - blocklist) + if(((size_t)s->next.offs + n->next.offs - sizeof(blockmark_t)) < newsize) return 0; // free space too short - // ok, doing the alloc! - if((s->next.size+n->next.size+sizeof(blockmark_t))-newsizenext.size += n->next.size+sizeof(blockmark_t); - else - s->next.size = newsize+sizeof(blockmark_t); - blockmark_t *m = NEXT_BLOCK(s); // this is new n - m->prev.fill = 1; - m->prev.size = s->next.size; - if(n!=m) { + // ok, expanding block! + if((s->next.offs+n->next.offs)-newsizenext.offs += n->next.offs; + blockmark_t *m = NEXT_BLOCK(s); + m->prev.x32 = s->next.x32; + n = m; + } else { + // remove n and create a new mark (or, move n farther) + blockmark_t *next = NEXT_BLOCK(n);// thenext of old n + s->next.offs = newsize + sizeof(blockmark_t); + blockmark_t *m = NEXT_BLOCK(s); // this is new n + m->prev.x32 = s->next.x32; // new mark - m->prev.fill = 1; - m->prev.size = s->next.size; m->next.fill = 0; - m->next.size = (uintptr_t)n - (uintptr_t)m; - n->prev.fill = 0; - n->prev.size = m->next.size; + m->next.offs = (uintptr_t)next - (uintptr_t)m; + next->prev.x32 = m->next.x32; + n = m; + } + if(re_first) { + // get the next free block + while(n->next.fill) + n = NEXT_BLOCK(n); + *pstart = (void*)n; } return 1; } @@ -272,7 +314,7 @@ static int expandBlock(void* block, void* sub, size_t newsize) static size_t sizeBlock(void* sub) { blockmark_t *s = (blockmark_t*)sub; - return s->next.size; + return SIZE_BLOCK(s->next); } // return 1 if block is coherent, 0 if not (and printf the issues) @@ -284,6 +326,7 @@ int printBlockCoherent(int i) } int ret = 1; blockmark_t* m = (blockmark_t*)p_blocks[i].block; + if(!m) {printf_log(LOG_NONE, "Warning, block #%d is NULL\n", i); return 0;} // check if first is correct blockmark_t* first = getNextFreeBlock(m); if(p_blocks[i].first && p_blocks[i].first!=first) {printf_log(LOG_NONE, "First %p and stored first %p differs for block %d\n", first, p_blocks[i].first, i); ret = 0;} @@ -293,18 +336,21 @@ int printBlockCoherent(int i) // check if maxfree from first is correct maxfree = getMaxFreeBlock(m, p_blocks[i].size, p_blocks[i].first); if(maxfree != p_blocks[i].maxfree) {printf_log(LOG_NONE, "Maxfree with hint %zd and stored maxfree %zd differs for block %d\n", maxfree, p_blocks[i].maxfree, i); ret = 0;} + // check next/ prev coehrency + blockmark_t *nope = checkPrevNextCoherent(m); + if(nope) { printf_log(LOG_NONE, "Next/Prev incoherency for block %d, at %p\n", i, nope); ret = 0;} // check chain - blockmark_t* last = (blockmark_t*)(((uintptr_t)m)+p_blocks[i].size-sizeof(blockmark_t)); - while(mnext.x32) { blockmark_t* n = NEXT_BLOCK(m); if(!m->next.fill && !n->next.fill && n!=last) { - printf_log(LOG_NONE, "Chain contains 2 subsequent free blocks %p (%d) and %p (%d) for block %d\n", m, m->next.size, n, n->next.size, i); + printf_log(LOG_NONE, "Chain contains 2 subsequent free blocks %p (%d) and %p (%d) for block %d\n", m, SIZE_BLOCK(m->next), n, SIZE_BLOCK(n->next), i); ret = 0; } m = n; } if(m!=last) { - printf_log(LOG_NONE, "Last block %p is beyond expected block %p for block %d\n", m, last, i); + printf_log(LOG_NONE, "Last block %p is not the expected last block %p for block %d\n", m, last, i); ret = 0; } @@ -317,18 +363,19 @@ void testAllBlocks() size_t fragmented_free = 0; size_t max_free = 0; for(int i=0; inext.x32) { if(!m->next.fill) - fragmented_free += m->next.size; + fragmented_free += SIZE_BLOCK(m->next); m = NEXT_BLOCK(m); } } - printf_log(LOG_NONE, "Total %d blocks, for %zd allocated memory, max_free %zd, toatal fragmented free %zd\n", n_blocks, total, max_free, fragmented_free); + printf_log(LOG_NONE, "CustomMem: Total %d blocks, for %zd allocated memory, max_free %zd, total fragmented free %zd\n", n_blocks, total, max_free, fragmented_free); } static size_t roundSize(size_t size) @@ -343,6 +390,26 @@ static size_t roundSize(size_t size) return size; } +blocklist_t* findBlock(uintptr_t addr) +{ + if(blockstree) { + uint32_t i; + uintptr_t end; + if(rb_get_end(blockstree, addr, &i, &end)) + return &p_blocks[i]; + } else { + for(int i=0; i=(uintptr_t)p_blocks[i].block) && (addr<=(uintptr_t)p_blocks[i].block+p_blocks[i].size)) + return &p_blocks[i]; + } + return NULL; +} +#ifdef BOX32 +int isCustomAddr(void* p) +{ + return findBlock((uintptr_t)p)?1:0; +} +#endif #ifdef DYNAREC #define GET_PROT_WAIT(A, B) \ uint32_t A; \ @@ -373,6 +440,7 @@ static uint32_t defered_prot_prot = 0; static sigset_t critical_prot = {0}; #define LOCK_PROT() sigset_t old_sig = {0}; pthread_sigmask(SIG_BLOCK, &critical_prot, &old_sig); mutex_lock(&mutex_prot) #define LOCK_PROT_READ() sigset_t old_sig = {0}; pthread_sigmask(SIG_BLOCK, &critical_prot, &old_sig); mutex_lock(&mutex_prot) +#define LOCK_PROT_FAST() mutex_lock(&mutex_prot) #define UNLOCK_PROT() if(defered_prot_p) { \ uintptr_t p = defered_prot_p; size_t sz = defered_prot_sz; uint32_t prot = defered_prot_prot; \ defered_prot_p = 0; \ @@ -384,23 +452,27 @@ static sigset_t critical_prot = {0}; mutex_unlock(&mutex_prot); \ } #define UNLOCK_PROT_READ() mutex_unlock(&mutex_prot); pthread_sigmask(SIG_SETMASK, &old_sig, NULL) +#define UNLOCK_PROT_FAST() mutex_unlock(&mutex_prot) #ifdef TRACE_MEMSTAT static uint64_t customMalloc_allocated = 0; #endif -void* customMalloc(size_t size) +void* internal_customMalloc(size_t size, int is32bits) { + size_t init_size = size; size = roundSize(size); // look for free space - void* sub = NULL; + blockmark_t* sub = NULL; size_t fullsize = size+2*sizeof(blockmark_t); mutex_lock(&mutex_blocks); for(int i=0; i=size) { + if(p_blocks[i].block && p_blocks[i].maxfree>=init_size && ((!is32bits) || (p_blocks[i].block<(void*)0x100000000LL))) { size_t rsize = 0; - sub = getFirstBlock(p_blocks[i].block, size, &rsize, p_blocks[i].first); + sub = getFirstBlock(p_blocks[i].block, init_size, &rsize, p_blocks[i].first); if(sub) { + if(size>rsize) + size = init_size; if(rsize-sizeMMAPSIZE)?fullsize:MMAPSIZE; - #ifdef USE_MMAP - void* p = internal_mmap(NULL, allocsize, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); - memset(p, 0, allocsize); - #else - void* p = box_calloc(1, allocsize); - #endif + p_blocks[i].block = NULL; // incase there is a re-entrance + p_blocks[i].first = NULL; + p_blocks[i].size = 0; + if(is32bits) // unlocking, because mmap might use it + mutex_unlock(&mutex_blocks); + void* p = is32bits + ?mmap(NULL, allocsize, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE|MAP_32BIT, -1, 0) + :internal_mmap(NULL, allocsize, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); + if(is32bits) + mutex_lock(&mutex_blocks); #ifdef TRACE_MEMSTAT customMalloc_allocated += allocsize; #endif @@ -434,15 +510,16 @@ void* customMalloc(size_t size) blockmark_t* m = (blockmark_t*)p; m->prev.x32 = 0; m->next.fill = 0; - m->next.size = allocsize-2*sizeof(blockmark_t); + m->next.offs = allocsize-sizeof(blockmark_t); blockmark_t* n = NEXT_BLOCK(m); n->next.x32 = 0; - n->prev.fill = 0; - n->prev.size = m->next.size; + n->prev.x32 = m->next.x32; // alloc 1st block void* ret = allocBlock(p_blocks[i].block, p, size, &p_blocks[i].first); p_blocks[i].maxfree = getMaxFreeBlock(p_blocks[i].block, p_blocks[i].size, p_blocks[i].first); mutex_unlock(&mutex_blocks); + if(blockstree) + rb_set(blockstree, (uintptr_t)p, (uintptr_t)p+allocsize, i); if(mapallmem) { // defer the setProtection... //setProtection((uintptr_t)p, allocsize, PROT_READ | PROT_WRITE); @@ -452,62 +529,250 @@ void* customMalloc(size_t size) } return ret; } +void* customMalloc(size_t size) +{ + return internal_customMalloc(size, 0); +} +void* customMalloc32(size_t size) +{ + return internal_customMalloc(size, 1); +} + void* customCalloc(size_t n, size_t size) { size_t newsize = roundSize(n*size); - void* ret = customMalloc(newsize); + void* ret = internal_customMalloc(newsize, 0); memset(ret, 0, newsize); return ret; } -void* customRealloc(void* p, size_t size) +void* customCalloc32(size_t n, size_t size) +{ + size_t newsize = roundSize(n*size); + void* ret = internal_customMalloc(newsize, 1); + memset(ret, 0, newsize); + return ret; +} + +void internal_customFree(void*, int); +void* internal_customRealloc(void* p, size_t size, int is32bits) { if(!p) - return customMalloc(size); + return internal_customMalloc(size, is32bits); size = roundSize(size); uintptr_t addr = (uintptr_t)p; mutex_lock(&mutex_blocks); - for(int i=0; i(uintptr_t)p_blocks[i].block) - && (addr<((uintptr_t)p_blocks[i].block+p_blocks[i].size))) { - void* sub = (void*)(addr-sizeof(blockmark_t)); - if(expandBlock(p_blocks[i].block, sub, size)) { - if(sub=p_blocks[i].first) - p_blocks[i].first = getNextFreeBlock(sub); - p_blocks[i].maxfree = getMaxFreeBlock(p_blocks[i].block, p_blocks[i].size, p_blocks[i].first); - mutex_unlock(&mutex_blocks); - return p; - } + blocklist_t* l = findBlock(addr); + if(l) { + blockmark_t* sub = (blockmark_t*)(addr-sizeof(blockmark_t)); + if(expandBlock(l->block, sub, size, &l->first)) { + l->maxfree = getMaxFreeBlock(l->block, l->size, l->first); mutex_unlock(&mutex_blocks); - void* newp = customMalloc(size); - memcpy(newp, p, sizeBlock(sub)); - customFree(p); - return newp; + return p; } + mutex_unlock(&mutex_blocks); + void* newp = internal_customMalloc(size, is32bits); + memcpy(newp, p, sizeBlock(sub)); + // disabling the "fast free", as mutex has been released, so things are not garantied to stay as-is + internal_customFree(p, is32bits); + //mutex_lock(&mutex_blocks); + //size_t newfree = freeBlock(l->block, l->size, sub, &l->first); + //if(l->maxfree < newfree) l->maxfree = newfree; + //mutex_unlock(&mutex_blocks); + return newp; } mutex_unlock(&mutex_blocks); - if(n_blocks) - dynarec_log(LOG_NONE, "Warning, block %p not found in p_blocks for realloc, malloc'ing again without free\n", (void*)addr); - return customMalloc(size); + if(n_blocks) { + if(is32bits) { + return box_realloc(p, size); + } else { + printf_log(LOG_INFO, "Warning, block %p not found in p_blocks for realloc, malloc'ing again without free\n", (void*)addr); + } + } + return internal_customMalloc(size, is32bits); } -void customFree(void* p) +void* customRealloc(void* p, size_t size) { - if(!p) + return internal_customRealloc(p, size, 0); +} +void* customRealloc32(void* p, size_t size) +{ + return internal_customRealloc(p, size, 1); +} + +void internal_customFree(void* p, int is32bits) +{ + if(!p) { return; + } uintptr_t addr = (uintptr_t)p; mutex_lock(&mutex_blocks); + blocklist_t* l = findBlock(addr); + if(l) { + blockmark_t* sub = (blockmark_t*)(addr-sizeof(blockmark_t)); + size_t newfree = freeBlock(l->block, l->size, sub, &l->first); + if(l->maxfree < newfree) l->maxfree = newfree; + mutex_unlock(&mutex_blocks); + return; + } + mutex_unlock(&mutex_blocks); + if(n_blocks) { + if(is32bits) { + box_free(p); + } else { + printf_log(LOG_INFO, "Warning, block %p not found in p_blocks for Free\n", (void*)addr); + } + } +} +void customFree(void* p) +{ + internal_customFree(p, 0); +} +void customFree32(void* p) +{ + internal_customFree(p, 1); +} + +void internal_print_block(int i) +{ + blockmark_t* m = p_blocks[i].block; + size_t sz = p_blocks[i].size; + while(m) { + blockmark_t *next = NEXT_BLOCK(m); + printf_log(LOG_INFO, " block %p(%p)->%p : %d\n", m, (void*)m+sizeof(blockmark_t), next, m->next.fill); + if(next!=m) + m = next; + } +} + +void* internal_customMemAligned(size_t align, size_t size, int is32bits) +{ + size_t align_mask = align-1; + size_t init_size = (size+align_mask)&~align_mask; + size = roundSize(size); + if(align<8) align = 8; + // look for free space + blockmark_t* sub = NULL; + size_t fullsize = size+2*sizeof(blockmark_t); + mutex_lock(&mutex_blocks); for(int i=0; i(uintptr_t)p_blocks[i].block) - && (addr<((uintptr_t)p_blocks[i].block+p_blocks[i].size))) { - void* sub = (void*)(addr-sizeof(blockmark_t)); - size_t newfree = freeBlock(p_blocks[i].block, sub, &p_blocks[i].first); - if(p_blocks[i].maxfree < newfree) p_blocks[i].maxfree = newfree; - mutex_unlock(&mutex_blocks); - return; + if(p_blocks[i].block && p_blocks[i].maxfree>=size && ((!is32bits) || ((uintptr_t)p_blocks[i].block<0x100000000LL))) { + size_t rsize = 0; + sub = getFirstBlock(p_blocks[i].block, init_size, &rsize, p_blocks[i].first); + uintptr_t p = (uintptr_t)sub+sizeof(blockmark_t); + uintptr_t aligned_p = (p+align_mask)&~align_mask; + uintptr_t empty_size = 0; + if(aligned_p!=p) + empty_size = aligned_p-p; + if(empty_size<=sizeof(blockmark_t)) { + empty_size += align; + aligned_p += align; + } + if(sub && (empty_size+init_size<=rsize)) { + if(size(uintptr_t)sub && (sub!=new_sub)) + p_blocks[i].first = sub; + if(rsize==p_blocks[i].maxfree) + p_blocks[i].maxfree = getMaxFreeBlock(p_blocks[i].block, p_blocks[i].size, p_blocks[i].first); + mutex_unlock(&mutex_blocks); + return ret; + } } } + // add a new block + int i = n_blocks++; + if(n_blocks>c_blocks) { + c_blocks += 4; + p_blocks = (blocklist_t*)box_realloc(p_blocks, c_blocks*sizeof(blocklist_t)); + } + p_blocks[i].block = NULL; // incase there is a re-entrance + p_blocks[i].first = NULL; + p_blocks[i].size = 0; + fullsize += 2*align+sizeof(blockmark_t); + size_t allocsize = (fullsize>MMAPSIZE)?fullsize:MMAPSIZE; + allocsize = (allocsize+box64_pagesize-1)&~(box64_pagesize-1); + if(is32bits) + mutex_unlock(&mutex_blocks); + void* p = is32bits + ?mmap(NULL, allocsize, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE|MAP_32BIT, -1, 0) + :internal_mmap(NULL, allocsize, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); + if(is32bits) + mutex_lock(&mutex_blocks); +#ifdef TRACE_MEMSTAT + customMalloc_allocated += allocsize; +#endif + p_blocks[i].block = p; + p_blocks[i].first = p; + p_blocks[i].size = allocsize; + // setup marks + blockmark_t* m = (blockmark_t*)p; + m->prev.x32 = 0; + m->next.fill = 0; + m->next.offs = allocsize-2*sizeof(blockmark_t); + blockmark_t* n = NEXT_BLOCK(m); + n->next.x32 = 0; + n->prev.x32 = m->next.x32; + uintptr_t aligned_p = ((uintptr_t)p+sizeof(blockmark_t)+align-1)&~(align-1); + size_t empty_size = 0; + if(aligned_p!=(uintptr_t)p+sizeof(blockmark_t)) + empty_size = aligned_p-sizeof(blockmark_t)-(uintptr_t)p; + if(empty_size<=sizeof(blockmark_t)) { + empty_size += align; + aligned_p += align; + } + void* new_sub = NULL; + sub = p; + if(empty_size) + new_sub = createAlignBlock(p_blocks[i].block, sub, empty_size); + // alloc 1st block + void* ret = allocBlock(p_blocks[i].block, new_sub, size, &p_blocks[i].first); + if(sub!=new_sub) + p_blocks[i].first = sub; + p_blocks[i].maxfree = getMaxFreeBlock(p_blocks[i].block, p_blocks[i].size, p_blocks[i].first); mutex_unlock(&mutex_blocks); - if(n_blocks) - dynarec_log(LOG_NONE, "Warning, block %p not found in p_blocks for Free\n", (void*)addr); + if(mapallmem) + setProtection((uintptr_t)p, allocsize, PROT_READ | PROT_WRITE); + if(blockstree) + rb_set(blockstree, (uintptr_t)p, (uintptr_t)p+allocsize, i); + return ret; +} +void* customMemAligned(size_t align, size_t size) +{ + return internal_customMemAligned(align, size, 0); +} +void* customMemAligned32(size_t align, size_t size) +{ + void* ret = internal_customMemAligned(align, size, 1); + if(((uintptr_t)ret)>=0x100000000LL) { + printf_log(LOG_NONE, "Error, customAligned32(0x%lx, 0x%lx) return 64bits point %p\n", align, size, ret); + } + return ret; +} + +size_t customGetUsableSize(void* p) +{ + if(!p) + return 0; + uintptr_t addr = (uintptr_t)p; + mutex_lock(&mutex_blocks); + blocklist_t* l = findBlock(addr); + if(l) { + blockmark_t* sub = (void*)(addr-sizeof(blockmark_t)); + + size_t size = SIZE_BLOCK(sub->next); + mutex_unlock(&mutex_blocks); + return size; + } + mutex_unlock(&mutex_blocks); + return 0; } #ifdef DYNAREC @@ -552,6 +817,31 @@ dynablock_t* FindDynablockFromNativeAddress(void* p) return NULL; } +#ifdef BOX32 +void* box32_dynarec_mmap(size_t size) +{ + // find a block that was prereserve before and big enough + uint32_t flag; + static uintptr_t cur = 0x100000000LL; + uintptr_t bend = 0; + while(bend<0x800000000000LL) { + if(rb_get_end(mapallmem, cur, &flag, &bend)) { + if(flag==2 && bend-cur>=size) { + void* ret = internal_mmap((void*)cur, size, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); + if(ret!=MAP_FAILED) + rb_set(mapallmem, cur, cur+size, 1); // mark as allocated + else + printf_log(LOG_INFO, "BOX32: Error allocating Dynarec memory: %s\n", strerror(errno)); + cur = cur+size; + return ret; + } + } + cur = bend; + } + return MAP_FAILED; +} +#endif + #ifdef TRACE_MEMSTAT static uint64_t dynarec_allocated = 0; #endif @@ -574,9 +864,7 @@ uintptr_t AllocDynarecMap(size_t size) size_t rsize = 0; void* sub = getFirstBlock(list->chunks[i].block, size, &rsize, list->chunks[i].first); if(sub) { - void* ret = allocBlock(list->chunks[i].block, sub, size, NULL); - if(sub==list->chunks[i].first) - list->chunks[i].first = getNextFreeBlock(sub); + void* ret = allocBlock(list->chunks[i].block, sub, size, &list->chunks[i].first); if(rsize==list->chunks[i].maxfree) list->chunks[i].maxfree = getMaxFreeBlock(list->chunks[i].block, list->chunks[i].size, list->chunks[i].first); return (uintptr_t)ret; @@ -588,20 +876,16 @@ uintptr_t AllocDynarecMap(size_t size) size_t allocsize = (sz>DYNMMAPSZ)?sz:DYNMMAPSZ; // allign sz with pagesize allocsize = (allocsize+(box64_pagesize-1))&~(box64_pagesize-1); - #ifndef USE_MMAP - void *p = NULL; - if(!(p=box_memalign(box64_pagesize, allocsize))) { - dynarec_log(LOG_INFO, "Cannot create dynamic map of %zu bytes\n", allocsize), allocsize, strerror(errno); - return 0; - } - mprotect(p, allocsize, PROT_READ | PROT_WRITE | PROT_EXEC); - #else void* p=MAP_FAILED; + #ifdef BOX32 + if(box64_is32bits) + p = box32_dynarec_mmap(allocsize); + #endif // disabling for now. explicit hugepage needs to be enabled to be used on userspace // with`/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages` as the number of allowaed 2M huge page // At least with a 2M allocation, transparent huge page should kick-in #if 0//def MAP_HUGETLB - if(allocsize==DYNMMAPSZ) { + if(p==MAP_FAILED && allocsize==DYNMMAPSZ) { p = internal_mmap(NULL, allocsize, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANONYMOUS|MAP_PRIVATE|MAP_HUGETLB, -1, 0); if(p!=MAP_FAILED) printf_log(LOG_INFO, "Allocated a dynarec memory block with HugeTLB\n"); else printf_log(LOG_INFO, "Failled to allocated a dynarec memory block with HugeTLB (%s)\n", strerror(errno)); @@ -616,7 +900,6 @@ uintptr_t AllocDynarecMap(size_t size) #ifdef MADV_HUGEPAGE madvise(p, allocsize, MADV_HUGEPAGE); #endif - #endif #ifdef TRACE_MEMSTAT dynarec_allocated += allocsize; #endif @@ -628,14 +911,13 @@ uintptr_t AllocDynarecMap(size_t size) blockmark_t* m = (blockmark_t*)p; m->prev.x32 = 0; m->next.fill = 0; - m->next.size = allocsize-2*sizeof(blockmark_t); + m->next.offs = allocsize-2*sizeof(blockmark_t); blockmark_t* n = NEXT_BLOCK(m); n->next.x32 = 0; - n->prev.fill = 0; - n->prev.size = m->next.size; + n->prev.x32 = m->next.x32; // alloc 1st block - void* ret = allocBlock(list->chunks[i].block, p, size, NULL); - list->chunks[i].maxfree = getMaxFreeBlock(list->chunks[i].block, list->chunks[i].size, NULL); + void* ret = allocBlock(list->chunks[i].block, p, size, &list->chunks[i].first); + list->chunks[i].maxfree = getMaxFreeBlock(list->chunks[i].block, list->chunks[i].size, list->chunks[i].first); if(list->chunks[i].maxfree) list->chunks[i].first = getNextFreeBlock(m); return (uintptr_t)ret; @@ -663,7 +945,7 @@ void FreeDynarecMap(uintptr_t addr) if ((addr>(uintptr_t)list->chunks[i].block) && (addr<((uintptr_t)list->chunks[i].block+list->chunks[i].size))) { void* sub = (void*)(addr-sizeof(blockmark_t)); - size_t newfree = freeBlock(list->chunks[i].block, sub, &list->chunks[i].first); + size_t newfree = freeBlock(list->chunks[i].block, list->chunks[i].size, sub, &list->chunks[i].first); if(list->chunks[i].maxfree < newfree) list->chunks[i].maxfree = newfree; return; @@ -1158,8 +1440,11 @@ void unprotectDB(uintptr_t addr, size_t size, int mark) if(mark) cleanDBFromAddressRange(cur, bend-cur, 0); mprotect((void*)cur, bend-cur, prot); - } else if(prot&PROT_DYNAREC_R) + } else if(prot&PROT_DYNAREC_R) { + if(mark) + cleanDBFromAddressRange(cur, bend-cur, 0); prot &= ~PROT_CUSTOM; + } } if (prot != oprot) rb_set(memprot, cur, bend, prot); @@ -1234,8 +1519,9 @@ void updateProtection(uintptr_t addr, size_t size, uint32_t prot) dyn = PROT_DYNAREC_R; } } - if ((prot|dyn) != oprot) - rb_set(memprot, cur, bend, prot|dyn); + uint32_t new_prot = prot?(prot|dyn):prot; + if (new_prot != oprot) + rb_set(memprot, cur, bend, new_prot); cur = bend; } UNLOCK_PROT(); @@ -1338,17 +1624,14 @@ void loadProtectionFromMap() box64_mapclean = 1; } -int isAddrInPrereserve(uintptr_t addr); void freeProtection(uintptr_t addr, size_t size) { size = ALIGN(size); addr &= ~(box64_pagesize-1); dynarec_log(LOG_DEBUG, "freeProtection %p:%p\n", (void*)addr, (void*)(addr+size-1)); LOCK_PROT(); - if(!isAddrInPrereserve(addr)) { - rb_unset(mapallmem, addr, addr+size); - rb_unset(mmapmem, addr, addr+size); - } + rb_unset(mapallmem, addr, addr+size); + rb_unset(mmapmem, addr, addr+size); rb_unset(memprot, addr, addr+size); UNLOCK_PROT(); } @@ -1361,6 +1644,14 @@ uint32_t getProtection(uintptr_t addr) return ret; } +uint32_t getProtection_fast(uintptr_t addr) +{ + LOCK_PROT_FAST(); + uint32_t ret = rb_get(memprot, addr); + UNLOCK_PROT_FAST(); + return ret; +} + int getMmapped(uintptr_t addr) { return rb_get(mmapmem, addr); @@ -1371,14 +1662,28 @@ int getMmapped(uintptr_t addr) #define MEDIUM (void*)0x40000000 #define HIGH (void*)0x60000000 -void* find31bitBlockNearHint(void* hint, size_t size, uintptr_t mask) +void* find31bitBlockNearHint(void* hint_, size_t size, uintptr_t mask) { uint32_t prot; - if(hintupper) upper = 0x100000000LL; if(!mask) mask = 0xffff; - while(bend<0xc0000000LL) { + while(cur=size) + return (void*)cur; + } + // granularity 0x10000 + cur = (bend+mask)&~mask; + } + if(hint_) + return NULL; + cur = (uintptr_t)LOWEST; + while(cur<(uintptr_t)hint) { if(!rb_get_end(mapallmem, cur, &prot, &bend)) { if(bend-cur>=size) return (void*)cur; @@ -1395,13 +1700,15 @@ void* find32bitBlock(size_t size) if(ret) return ret; ret = find31bitBlockNearHint(LOWEST, size, 0); - return ret?ret:find47bitBlock(size); + return ret; } void* find47bitBlock(size_t size) { void* ret = find47bitBlockNearHint(HIGH, size, 0); if(!ret) - ret = find32bitBlock(size); + ret = find31bitBlockNearHint(MEDIUM, size, 0); + if(!ret) + ret = find31bitBlockNearHint(LOWEST, size, 0); return ret; } void* find47bitBlockNearHint(void* hint, size_t size, uintptr_t mask) @@ -1438,6 +1745,21 @@ void* find47bitBlockElf(size_t size, int mainbin, uintptr_t mask) return ret; } +void* find31bitBlockElf(size_t size, int mainbin, uintptr_t mask) +{ + static void* startingpoint = NULL; + if(!startingpoint) { + startingpoint = (void*)WINE_LOWEST; + } + void* mainaddr = (void*)0x1000000; + void* ret = find31bitBlockNearHint(MEDIUM, size, mask); + if(!ret) + ret = find31bitBlockNearHint(LOWEST, size, mask); + if(!mainbin) + startingpoint = (void*)(((uintptr_t)startingpoint+size+0x1000000)&~0xffffff); + return ret; +} + int isBlockFree(void* hint, size_t size) { uint32_t prot; @@ -1506,21 +1828,97 @@ static void atfork_child_custommem(void) // (re)init mutex if it was lock before the fork init_mutexes(); } - +#ifdef BOX32 +void reverveHigMem32(void) +{ + loadProtectionFromMap(); + uintptr_t cur_size = 1024LL*1024*1024*1024; // start with 1TB check + void* cur; + while(cur_size>=65536) { + cur = internal_mmap(NULL, cur_size, 0, MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); + if((cur==MAP_FAILED) || (cur<(void*)0x100000000LL)) { + if(cur!=MAP_FAILED) { + //printf_log(LOG_DEBUG, " Failed to reserve high %p (%zx)\n", cur, cur_size); + internal_munmap(cur, cur_size); + } //else + // printf_log(LOG_DEBUG, " Failed to reserve %zx sized block\n", cur_size); + cur_size>>=1; + } else { + rb_set(mapallmem, (uintptr_t)cur, (uintptr_t)cur+cur_size, 1); + //printf_log(LOG_DEBUG, "Reserved high %p (%zx)\n", cur, cur_size); + } + } + // try again, but specifying a high address, just in case + if(0) + { + uintptr_t cur = 0xffff00000000LL; + uintptr_t bend = 0; + uint32_t prot; + while (bend!=0xffffffffffffffffLL) { + if(!rb_get_end(mapallmem, cur, &prot, &bend)) { + // create a border at 48bits + if(cur<(1ULL<<48) && bend>(1ULL<<48)) + bend = 1ULL<<48; + cur = (cur+0xffffLL)&~0xffffLL; // round to 64K page size + if(bend>cur) { + void* p = internal_mmap((void*)cur, bend-cur, 0, MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); + if((p==MAP_FAILED) || (p<(void*)0x100000000LL)) { + if(p!=MAP_FAILED) { + printf_log(LOG_DEBUG, " Failed to reserve high %p (%zx) => %p\n", (void*)cur, bend-cur, p); + internal_munmap(p, bend-cur); + } else + printf_log(LOG_DEBUG, " Failed to reserve %zx sized block (%s)\n", bend-cur, strerror(errno)); + } else { + rb_set(mapallmem, (uintptr_t)cur, (uintptr_t)bend, 2); + printf_log(LOG_DEBUG, "Reserved high %p (%zx)\n", cur, bend-cur); + } + } + } + cur = bend; + } + } + printf_log(LOG_INFO, "Memory higher than 32bits reserved\n"); + if(box64_log>=LOG_DEBUG) { + uintptr_t start=0x100000000LL; + int prot; + uintptr_t bend; + while (bend!=0xffffffffffffffffLL) { + if(rb_get_end(mapallmem, start, &prot, &bend)) { + printf_log(LOG_NONE, " Reserved: %p - %p (%d)\n", (void*)start, (void*)bend, prot); + } + start = bend; + } + } +} +#endif void my_reserveHighMem() { static int reserved = 0; - if(reserved || !have48bits) + if(reserved || (!have48bits && !box64_is32bits)) return; reserved = 1; - uintptr_t cur = 1ULL<<47; + #ifdef BOX32 + if(box64_is32bits) { + reverveHigMem32(); + return; + } + #endif + uintptr_t cur = box64_is32bits?(1ULL<<32):(1ULL<<47); uintptr_t bend = 0; uint32_t prot; while (bend!=0xffffffffffffffffLL) { if(!rb_get_end(mapallmem, cur, &prot, &bend)) { - void* ret = internal_mmap((void*)cur, bend-cur, 0, MAP_ANONYMOUS|MAP_FIXED|MAP_PRIVATE|MAP_NORESERVE, -1, 0); - printf_log(LOG_DEBUG, "Reserve %p-%p => %p (%s)\n", (void*)cur, bend, ret, strerror(errno)); - printf_log(LOG_DEBUG, "mmap %p-%p\n", cur, bend); + // create a border at 39bits... + if(cur<(1ULL<<39) && bend>(1ULL<<39)) + bend = 1ULL<<39; + // create a border at 47bits + if(cur<(1ULL<<47) && bend>(1ULL<<47)) + bend = 1ULL<<47; + // create a border at 48bits + if(cur<(1ULL<<48) && bend>(1ULL<<48)) + bend = 1ULL<<48; + void* ret = internal_mmap((void*)cur, bend-cur, 0, MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); + printf_log(LOG_DEBUG, "Reserve %p-%p => %p (%s)\n", (void*)cur, bend, ret, (ret==MAP_FAILED)?strerror(errno):"ok"); if(ret!=(void*)-1) { rb_set(mapallmem, cur, bend, 1); } @@ -1533,12 +1931,13 @@ void my_reserveHighMem() void reserveHighMem() { char* p = getenv("BOX64_RESERVE_HIGH"); + if(!box64_is32bits) #if 0//def ADLINK - if(p && p[0]=='0') + if(p && p[0]=='0') #else - if(!p || p[0]=='0') + if(!p || p[0]=='0') #endif - return; // don't reserve by default + return; // don't reserve by default my_reserveHighMem(); } @@ -1548,7 +1947,12 @@ void init_custommem_helper(box64context_t* ctx) if(inited) // already initialized return; inited = 1; - memprot = init_rbtree(); + blockstree = rbtree_init("blockstree"); + // if there is some blocks already + if(n_blocks) + for(int i=0; ichunks[i].block) - #ifdef USE_MMAP internal_munmap(head->chunks[i].block, head->chunks[i].size); - #else - box_free(head->chunks[i].block); - #endif } mmaplist_t *old = head; head = head->next; @@ -1664,19 +2066,17 @@ void fini_custommem_helper(box64context_t *ctx) kh_destroy(lockaddress, lockaddress); lockaddress = NULL; #endif - delete_rbtree(memprot); + rbtree_delete(memprot); memprot = NULL; - delete_rbtree(mmapmem); + rbtree_delete(mmapmem); mmapmem = NULL; - delete_rbtree(mapallmem); + rbtree_delete(mapallmem); mapallmem = NULL; + rbtree_delete(blockstree); + blockstree = NULL; for(int i=0; i>1))&0xfff, Rn, Rt)) @@ -301,6 +307,7 @@ int convert_bitmask(uint64_t bitmask); #define LDRS_REG_gen(size, Rm, option, S, Rn, Rt) ((size)<<30 | 0b111<<27 | 0b10<<22 | 1<<21 | (Rm)<<16 | (option)<<13 | (S)<<12 | (0b10)<<10 | (Rn)<<5 | (Rt)) #define LDRSW_REG(Rt, Rn, Rm) EMIT(LDRS_REG_gen(0b10, Rm, 0b011, 0, Rn, Rt)) +#define LDRSW_REG_SXTW(Rt, Rn, Rm) EMIT(LDRS_REG_gen(0b10, Rm, 0b110, 0, Rn, Rt)) #define LDR_PC_gen(opc, imm19, Rt) ((opc)<<30 | 0b011<<27 | (imm19)<<5 | (Rt)) #define LDRx_literal(Rt, imm19) EMIT(LDR_PC_gen(0b01, ((imm19)>>2)&0x7FFFF, Rt)) @@ -371,12 +378,18 @@ int convert_bitmask(uint64_t bitmask); #define STRx_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(0b11, Rm, 0b011, 0, Rn, Rt)) #define STRx_REG_LSL3(Rt, Rn, Rm) EMIT(STR_REG_gen(0b11, Rm, 0b011, 1, Rn, Rt)) #define STRx_REG_UXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b11, Rm, 0b010, 0, Rn, Rt)) +#define STRx_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b11, Rm, 0b110, 0, Rn, Rt)) #define STRw_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(0b10, Rm, 0b011, 0, Rn, Rt)) #define STRw_REG_LSL2(Rt, Rn, Rm) EMIT(STR_REG_gen(0b10, Rm, 0b011, 1, Rn, Rt)) +#define STRw_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b10, Rm, 0b110, 0, Rn, Rt)) #define STRB_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(0b00, Rm, 0b011, 0, Rn, Rt)) +#define STRB_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b00, Rm, 0b110, 0, Rn, Rt)) #define STRH_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(0b01, Rm, 0b011, 0, Rn, Rt)) +#define STRH_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(0b01, Rm, 0b110, 0, Rn, Rt)) #define STRxw_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(rex.w?0b11:0b10, Rm, 0b011, 0, Rn, Rt)) +#define STRxw_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(rex.w?0b11:0b10, Rm, 0b110, 0, Rn, Rt)) #define STRz_REG(Rt, Rn, Rm) EMIT(STR_REG_gen(rex.is32bits?0b10:0b11, Rm, 0b011, 0, Rn, Rt)) +#define STRz_REG_SXTW(Rt, Rn, Rm) EMIT(STR_REG_gen(rex.is32bits?0b10:0b11, Rm, 0b110, 0, Rn, Rt)) // LOAD/STORE PAIR #define MEMPAIR_gen(size, L, op2, imm7, Rt2, Rn, Rt) ((size)<<31 | 0b101<<27 | (op2)<<23 | (L)<<22 | (imm7)<<15 | (Rt2)<<10 | (Rn)<<5 | (Rt)) @@ -492,6 +505,7 @@ int convert_bitmask(uint64_t bitmask); #define BR_gen(Z, op, A, M, Rn, Rm) (0b1101011<<25 | (Z)<<24 | (op)<<21 | 0b11111<<16 | (A)<<11 | (M)<<10 | (Rn)<<5 | (Rm)) #define BR(Rn) EMIT(BR_gen(0, 0b00, 0, 0, Rn, 0)) #define BLR(Rn) EMIT(BR_gen(0, 0b01, 0, 0, Rn, 0)) +#define RET(Rn) EMIT(BR_gen(0, 0b10, 0, 0, Rn, 0)) #define CB_gen(sf, op, imm19, Rt) ((sf)<<31 | 0b011010<<25 | (op)<<24 | (imm19)<<5 | (Rt)) #define CBNZx(Rt, imm19) EMIT(CB_gen(1, 1, ((imm19)>>2)&0x7FFFF, Rt)) @@ -556,9 +570,9 @@ int convert_bitmask(uint64_t bitmask); #define ANDx_mask(Rd, Rn, N, immr, imms) EMIT(LOGIC_gen(1, 0b00, N, immr, imms, Rn, Rd)) #define ANDw_mask(Rd, Rn, immr, imms) EMIT(LOGIC_gen(0, 0b00, 0, immr, imms, Rn, Rd)) #define ANDxw_mask(Rd, Rn, N, immr, imms) EMIT(LOGIC_gen(rex.w, 0b00, rex.w?(N):0, immr, imms, Rn, Rd)) -#define ANDSx_mask(Rd, Rn, N, immr, imms) EMIT(LOGIC_gen(1, 0b11, N, immr, imms, Rn, Rd)) -#define ANDSw_mask(Rd, Rn, immr, imms) EMIT(LOGIC_gen(0, 0b11, 0, immr, imms, Rn, Rd)) -#define ANDSxw_mask(Rd, Rn, N, immr, imms) EMIT(LOGIC_gen(rex.w, 0b11, rex.w?(N):0, immr, imms, Rn, Rd)) +#define ANDSx_mask(Rd, Rn, N, immr, imms) FEMIT(LOGIC_gen(1, 0b11, N, immr, imms, Rn, Rd)) +#define ANDSw_mask(Rd, Rn, immr, imms) FEMIT(LOGIC_gen(0, 0b11, 0, immr, imms, Rn, Rd)) +#define ANDSxw_mask(Rd, Rn, N, immr, imms) FEMIT(LOGIC_gen(rex.w, 0b11, rex.w?(N):0, immr, imms, Rn, Rd)) #define ORRx_mask(Rd, Rn, N, immr, imms) EMIT(LOGIC_gen(1, 0b01, N, immr, imms, Rn, Rd)) #define ORRw_mask(Rd, Rn, immr, imms) EMIT(LOGIC_gen(0, 0b01, 0, immr, imms, Rn, Rd)) #define ORRxw_mask(Rd, Rn, N, immr, imms) EMIT(LOGIC_gen(rex.w, 0b01, rex.w?(N):0, immr, imms, Rn, Rd)) @@ -574,9 +588,9 @@ int convert_bitmask(uint64_t bitmask); #define ANDw_REG(Rd, Rn, Rm) EMIT(LOGIC_REG_gen(0, 0b00, 0b00, 0, Rm, 0, Rn, Rd)) #define ANDw_REG_LSR(Rd, Rn, Rm, lsr) EMIT(LOGIC_REG_gen(0, 0b00, 0b01, 0, Rm, lsr, Rn, Rd)) #define ANDxw_REG(Rd, Rn, Rm) EMIT(LOGIC_REG_gen(rex.w, 0b00, 0b00, 0, Rm, 0, Rn, Rd)) -#define ANDSx_REG(Rd, Rn, Rm) EMIT(LOGIC_REG_gen(1, 0b11, 0b00, 0, Rm, 0, Rn, Rd)) -#define ANDSw_REG(Rd, Rn, Rm) EMIT(LOGIC_REG_gen(0, 0b11, 0b00, 0, Rm, 0, Rn, Rd)) -#define ANDSxw_REG(Rd, Rn, Rm) EMIT(LOGIC_REG_gen(rex.w, 0b11, 0b00, 0, Rm, 0, Rn, Rd)) +#define ANDSx_REG(Rd, Rn, Rm) FEMIT(LOGIC_REG_gen(1, 0b11, 0b00, 0, Rm, 0, Rn, Rd)) +#define ANDSw_REG(Rd, Rn, Rm) FEMIT(LOGIC_REG_gen(0, 0b11, 0b00, 0, Rm, 0, Rn, Rd)) +#define ANDSxw_REG(Rd, Rn, Rm) FEMIT(LOGIC_REG_gen(rex.w, 0b11, 0b00, 0, Rm, 0, Rn, Rd)) #define ORRx_REG(Rd, Rn, Rm) EMIT(LOGIC_REG_gen(1, 0b01, 0b00, 0, Rm, 0, Rn, Rd)) #define ORRx_REG_LSL(Rd, Rn, Rm, lsl) EMIT(LOGIC_REG_gen(1, 0b01, 0b00, 0, Rm, lsl, Rn, Rd)) #define ORRw_REG_LSL(Rd, Rn, Rm, lsl) EMIT(LOGIC_REG_gen(0, 0b01, 0b00, 0, Rm, lsl, Rn, Rd)) @@ -627,10 +641,10 @@ int convert_bitmask(uint64_t bitmask); #define BICx(Rd, Rn, Rm) EMIT(LOGIC_REG_gen(1, 0b00, 0b00, 1, Rm, 0, Rn, Rd)) #define BICw(Rd, Rn, Rm) EMIT(LOGIC_REG_gen(0, 0b00, 0b00, 1, Rm, 0, Rn, Rd)) #define BICw_LSL(Rd, Rn, Rm, lsl) EMIT(LOGIC_REG_gen(0, 0b00, 0b00, 1, Rm, lsl, Rn, Rd)) -#define BICSx(Rd, Rn, Rm) EMIT(LOGIC_REG_gen(1, 0b00, 0b00, 1, Rm, 0, Rn, Rd)) -#define BICSw(Rd, Rn, Rm) EMIT(LOGIC_REG_gen(0, 0b00, 0b00, 1, Rm, 0, Rn, Rd)) -#define BICxw(Rd, Rn, Rm) EMIT(LOGIC_REG_gen(rex.w, 0b00, 0b00, 1, Rm, 0, Rn, Rd)) -#define BICSxw(Rd, Rn, Rm) EMIT(LOGIC_REG_gen(rex.w, 0b00, 0b00, 1, Rm, 0, Rn, Rd)) +#define BICSx(Rd, Rn, Rm) FEMIT(LOGIC_REG_gen(1, 0b11, 0b00, 1, Rm, 0, Rn, Rd)) +#define BICSw(Rd, Rn, Rm) FEMIT(LOGIC_REG_gen(0, 0b11, 0b00, 1, Rm, 0, Rn, Rd)) +#define BICxw(Rd, Rn, Rm) FEMIT(LOGIC_REG_gen(rex.w, 0b00, 0b00, 1, Rm, 0, Rn, Rd)) +#define BICSxw(Rd, Rn, Rm) FEMIT(LOGIC_REG_gen(rex.w, 0b11, 0b00, 1, Rm, 0, Rn, Rd)) #define BICx_REG BICx #define BICw_REG BICw #define BICxw_REG BICxw @@ -806,9 +820,9 @@ int convert_bitmask(uint64_t bitmask); #define MRS_gen(L, o0, op1, CRn, CRm, op2, Rt) (0b1101010100<<22 | (L)<<21 | 1<<20 | (o0)<<19 | (op1)<<16 | (CRn)<<12 | (CRm)<<8 | (op2)<<5 | (Rt)) // mrs x0, nzcv : 1101010100 1 1 1 011 0100 0010 000 00000 o0=1(op0=3), op1=0b011(3) CRn=0b0100(4) CRm=0b0010(2) op2=0 // MRS : from System register -#define MRS_nzvc(Rt) EMIT(MRS_gen(1, 1, 3, 4, 2, 0, Rt)) +#define MRS_nzcv(Rt) EMIT(MRS_gen(1, 1, 3, 4, 2, 0, Rt)) // MSR : to System register -#define MSR_nzvc(Rt) EMIT(MRS_gen(0, 1, 3, 4, 2, 0, Rt)) +#define MSR_nzcv(Rt) FEMIT(MRS_gen(0, 1, 3, 4, 2, 0, Rt)) // mrs x0, fpcr : 1101010100 1 1 1 011 0100 0100 000 00000 o0=1(op0=3), op1=0b011(3) CRn=0b0100(4) CRm=0b0100(4) op2=0 #define MRS_fpcr(Rt) EMIT(MRS_gen(1, 1, 3, 4, 4, 0, Rt)) #define MSR_fpcr(Rt) EMIT(MRS_gen(0, 1, 3, 4, 4, 0, Rt)) @@ -835,6 +849,14 @@ int convert_bitmask(uint64_t bitmask); #define FPSR_DZC 1 // NEON Invalid Operation Cumulative #define FPSR_IOC 0 +// NZCV N +#define NZCV_N 31 +// NZCV Z +#define NZCV_Z 30 +// NZCV C +#define NZCV_C 29 +// NZCV V +#define NZCV_V 28 // FCSEL #define FCSEL_scalar(type, Rm, cond, Rn, Rd) (0b11110<<24 | (type)<<22 | 1<<21 | (Rm)<<16 | (cond)<<12 | 0b11<<10 | (Rn)<<5 | (Rd)) @@ -896,18 +918,24 @@ int convert_bitmask(uint64_t bitmask); #define VMEM_REG_gen(size, opc, Rm, option, S, Rn, Rt) ((size)<<30 | 0b111<<27 | 1<<26 | (opc)<<22 | 1<<21 | (Rm)<<16 | (option)<<13 | (S)<<12 | 0b10<<10 | (Rn)<<5 | (Rt)) #define VLDR32_REG(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b01, Rm, 0b011, 0, Rn, Dt)) +#define VLDR32_REG_SXTW(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b01, Rm, 0b110, 0, Rn, Dt)) #define VLDR32_REG_LSL2(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b01, Rm, 0b011, 1, Rn, Dt)) #define VLDR64_REG(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b01, Rm, 0b011, 0, Rn, Dt)) +#define VLDR64_REG_SXTW(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b01, Rm, 0b110, 0, Rn, Dt)) #define VLDR64_REG_LSL3(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b01, Rm, 0b011, 1, Rn, Dt)) #define VLDR128_REG(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b11, Rm, 0b011, 0, Rn, Qt)) #define VLDR128_REG_LSL4(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b11, Rm, 0b011, 1, Rn, Qt)) +#define VLDR128_REG_SXTW(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b11, Rm, 0b110, 0, Rn, Qt)) #define VSTR32_REG(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b00, Rm, 0b011, 0, Rn, Dt)) #define VSTR32_REG_LSL2(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b00, Rm, 0b011, 1, Rn, Dt)) +#define VSTR32_REG_SXTW(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b10, 0b00, Rm, 0b110, 0, Rn, Dt)) #define VSTR64_REG(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b00, Rm, 0b011, 0, Rn, Dt)) #define VSTR64_REG_LSL3(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b00, Rm, 0b011, 1, Rn, Dt)) +#define VSTR64_REG_SXTW(Dt, Rn, Rm) EMIT(VMEM_REG_gen(0b11, 0b00, Rm, 0b110, 0, Rn, Dt)) #define VSTR128_REG(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b10, Rm, 0b011, 0, Rn, Qt)) #define VSTR128_REG_LSL4(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b10, Rm, 0b011, 1, Rn, Qt)) +#define VSTR128_REG_SXTW(Qt, Rn, Rm) EMIT(VMEM_REG_gen(0b00, 0b10, Rm, 0b110, 0, Rn, Qt)) #define VLDR_PC_gen(opc, imm19, Rt) ((opc)<<30 | 0b011<<27 | 1<<26 | (imm19)<<5 | (Rt)) #define VLDR32_literal(Vt, imm19) EMIT(VLDR_PC_gen(0b00, ((imm19)>>2)&0x7FFFF, Vt)) @@ -1253,10 +1281,10 @@ int convert_bitmask(uint64_t bitmask); // CMP #define FCMP_scalar(type, Rn, Rm, opc) (0b11110<<24 | (type)<<22 | 1<<21 | (Rm)<<16 | 0b1000<<10 | (Rn)<<5 | (opc)<<3) -#define FCMPS(Sn, Sm) EMIT(FCMP_scalar(0b00, Sn, Sm, 0b00)) -#define FCMPD(Dn, Dm) EMIT(FCMP_scalar(0b01, Dn, Dm, 0b00)) -#define FCMPS_0(Sn) EMIT(FCMP_scalar(0b00, Sn, 0, 0b01)) -#define FCMPD_0(Dn) EMIT(FCMP_scalar(0b01, Dn, 0, 0b01)) +#define FCMPS(Sn, Sm) FEMIT(FCMP_scalar(0b00, Sn, Sm, 0b00)) +#define FCMPD(Dn, Dm) FEMIT(FCMP_scalar(0b01, Dn, Dm, 0b00)) +#define FCMPS_0(Sn) FEMIT(FCMP_scalar(0b00, Sn, 0, 0b01)) +#define FCMPD_0(Dn) FEMIT(FCMP_scalar(0b01, Dn, 0, 0b01)) // CVT #define FCVT_scalar(sf, type, rmode, opcode, Rn, Rd) ((sf)<<31 | 0b11110<<24 | (type)<<22 | 1<<21 | (rmode)<<19 | (opcode)<<16 | (Rn)<<5 | (Rd)) @@ -2182,7 +2210,7 @@ int convert_bitmask(uint64_t bitmask); #define LDSETLH(Rs, Rt, Rn) EMIT(ATOMIC_gen(0b01, 0, 1, Rs, 0b011, Rn, Rt)) #define STSETH(Rs, Rn) EMIT(ATOMIC_gen(0b01, 0, 0, Rs, 0b011, Rn, 0b11111)) #define STSETLH(Rs, Rn) EMIT(ATOMIC_gen(0b01, 0, 1, Rs, 0b011, Rn, 0b11111)) -// Atomic Signel Max +// Atomic Signed Max #define LDSMAXxw(Rs, Rt, Rn) EMIT(ATOMIC_gen(0b10+rex.w, 0, 0, Rs, 0b100, Rn, Rt)) #define LDSMAXAxw(Rs, Rt, Rn) EMIT(ATOMIC_gen(0b10+rex.w, 1, 0, Rs, 0b100, Rn, Rt)) #define LDSMAXALxw(Rs, Rt, Rn) EMIT(ATOMIC_gen(0b10+rex.w, 1, 1, Rs, 0b100, Rn, Rt)) @@ -2298,23 +2326,23 @@ int convert_bitmask(uint64_t bitmask); // FLAGM extension // Invert Carry Flag -#define CFINV() EMIT(0b1101010100<<22 | 0b0100<<12 | 0b000<<5 | 0b11111) +#define CFINV() FEMIT(0b1101010100<<22 | 0b0100<<12 | 0b000<<5 | 0b11111) #define RMIF_gen(imm6, Rn, mask) (0b10111010000<<21 | (imm6)<<15 | 0b00001<<10 | (Rn)<<5 | (mask)) // Rotate right reg and use as NZCV -#define RMIF(Xn, shift, mask) EMIT(RMIF_gen(shift, Xn, mask)) +#define RMIF(Xn, shift, mask) FEMIT(RMIF_gen(shift, Xn, mask)) #define SETF_gen(sz, Rn) (0b00111010000<<21 | (sz)<<14 | 0b0010<<10 | (Rn)<<5 | 0b1101) // Set NZVc with 8bit value of reg: N=bit7, Z=[0..7]==0, V=bit8 eor bit7, C unchanged -#define SETF8(Wn) EMIT(SETF_gen(0, Wn)) +#define SETF8(Wn) FEMIT(SETF_gen(0, Wn)) // Set NZVc with 16bit value of reg: N=bit15, Z=[0..15]==0, V=bit16 eor bit15, C unchanged -#define SETF16(Wn) EMIT(SETF_gen(1, Wn)) +#define SETF16(Wn) FEMIT(SETF_gen(1, Wn)) // FLAGM2 extension // NZCV -> N=0 Z=C|V C=C&!V V=0 -#define AXFLAG() EMIT(0b1101010100<<22 | 0b0100<<12 | 0b010<<5 | 0b11111) +#define AXFLAG() FEMIT(0b1101010100<<22 | 0b0100<<12 | 0b010<<5 | 0b11111) // NZCV -> N=!C&!Z Z=Z&C C=C|Z V=!C&Z -#define XAFLAG() EMIT(0b1101010100<<22 | 0b0100<<12 | 0b001<<5 | 0b11111) +#define XAFLAG() FEMIT(0b1101010100<<22 | 0b0100<<12 | 0b001<<5 | 0b11111) // FRINTTS extension #define FRINTxx_scalar(type, op, Rn, Rd) (0b11110<<24 | (type)<<22 | 1<<21 | 0b0100<<17 | (op)<<15 | 0b10000<<10 | (Rn)<<5 | (Rd)) diff --git a/src/dynarec/arm64/arm64_printer.c b/src/dynarec/arm64/arm64_printer.c index 45818949f4eb5c640c646c06d1e1d7a1a1322cde..48b67e0c4993732ab84b827c81be6395b879d9ae 100644 --- a/src/dynarec/arm64/arm64_printer.c +++ b/src/dynarec/arm64/arm64_printer.c @@ -573,6 +573,14 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr) snprintf(buff, sizeof(buff), "BIC %s, %s, %s, %s %d", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn], sf?Xt[Rm]:Wt[Rm], shifts[shift], imm); return buff; } + if(isMask(opcode, "f1101010hh1mmmmmiiiiiinnnnnddddd", &a)) { + const char* shifts[] = { "LSL", "LSR", "ASR", "ROR" }; + if(shift==0 && imm==0) + snprintf(buff, sizeof(buff), "BICS %s, %s, %s", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn], sf?Xt[Rm]:Wt[Rm]); + else + snprintf(buff, sizeof(buff), "BICS %s, %s, %s, %s %d", sf?Xt[Rd]:Wt[Rd], sf?Xt[Rn]:Wt[Rn], sf?Xt[Rm]:Wt[Rm], shifts[shift], imm); + return buff; + } if(isMask(opcode, "f01100100Nrrrrrrssssssnnnnnddddd", &a)) { uint64_t i = DecodeBitMasks(a.N, imms, immr); if(!sf) i&=0xffffffff; diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 0ad91284ffa113f1e7da7d3bb3c1be0ca1f91660..e06cd2d695ae1fc91d3b4b9c1e1cea3c1e0d2029 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -996,7 +996,6 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; #define GO(GETFLAGS, NO, YES, F) \ - if (box64_dynarec_test == 2) { NOTEST(x1); } \ READFLAGS(F); \ i8 = F8S; \ BARRIER(BARRIER_MAYBE); \ @@ -1933,7 +1932,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("ROL Eb, Ib"); u8 = geted_ib(dyn, addr, ninst, nextop)&0x1f; if(u8) { - SETFLAGS(X_CF|X_OF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEB(x1, 1); u8 = F8&0x1f; emit_rol8c(dyn, ninst, x1, u8, x4, x5); @@ -1947,7 +1946,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("ROR Eb, Ib"); u8 = geted_ib(dyn, addr, ninst, nextop)&0x1f; if(u8) { - SETFLAGS(X_CF|X_OF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEB(x1, 1); u8 = F8&0x1f; emit_ror8c(dyn, ninst, x1, u8, x4, x5); @@ -1962,7 +1961,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin u8 = geted_ib(dyn, addr, ninst, nextop)&0x1f; if(u8) { READFLAGS(X_CF); - SETFLAGS(X_OF|X_CF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEB(x1, 1); u8 = F8&0x1f; emit_rcl8c(dyn, ninst, x1, u8, x4, x5); @@ -1977,7 +1976,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin u8 = geted_ib(dyn, addr, ninst, nextop)&0x1f; if(u8) { READFLAGS(X_CF); - SETFLAGS(X_OF|X_CF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEB(x1, 1); u8 = F8&0x1f; emit_rcr8c(dyn, ninst, x1, u8, x4, x5); @@ -2039,7 +2038,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("ROL Ed, Ib"); u8 = geted_ib(dyn, addr, ninst, nextop)&(0x1f+(rex.w*0x20)); if(u8) { - SETFLAGS(X_CF|X_OF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETED(1); u8 = (F8)&(rex.w?0x3f:0x1f); emit_rol32c(dyn, ninst, rex, ed, u8, x3, x4); @@ -2058,7 +2057,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("ROR Ed, Ib"); u8 = geted_ib(dyn, addr, ninst, nextop)&(0x1f+(rex.w*0x20)); if(u8) { - SETFLAGS(X_CF|X_OF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETED(1); u8 = (F8)&(rex.w?0x3f:0x1f); emit_ror32c(dyn, ninst, rex, ed, u8, x3, x4); @@ -2324,7 +2323,35 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MOVz_REG(xRSP, xRBP); POP1z(xRBP); break; - + case 0xCA: + INST_NAME("FAR RETN"); + u16 = F16; + READFLAGS(X_PEND); + BARRIER(BARRIER_FLOAT); + POP2z(xRIP, x3); + STH(x3, xEmu, offsetof(x64emu_t, segs[_CS])); + STW(xZR, xEmu, offsetof(x64emu_t, segs_serial[_CS])); + if(u16<0x1000) + ADDz_U12(xRSP, xRSP, u16); + else { + MOV32w(x1, u16); + ADDz_REG(xRSP, xRSP, x1); + } + jump_to_epilog(dyn, 0, xRIP, ninst); + *need_epilog = 0; + *ok = 0; + break; + case 0xCB: + INST_NAME("FAR RET"); + READFLAGS(X_PEND); + BARRIER(BARRIER_FLOAT); + POP2z(xRIP, x3); + STH(x3, xEmu, offsetof(x64emu_t, segs[_CS])); + STW(xZR, xEmu, offsetof(x64emu_t, segs_serial[_CS])); + jump_to_epilog(dyn, 0, xRIP, ninst); + *need_epilog = 0; + *ok = 0; + break; case 0xCC: SETFLAGS(X_ALL, SF_SET_NODF); // Hack, set all flags (to an unknown state...) NOTEST(x1); @@ -2332,7 +2359,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin addr+=2; //BARRIER(BARRIER_FLOAT); INST_NAME("Special Box64 instruction"); - if((PK64(0)==0)) + if(PK64(0)==0) { addr+=8; MESSAGE(LOG_DEBUG, "Exit x64 Emu\n"); @@ -2343,7 +2370,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin *ok = 0; *need_epilog = 1; } else { - MESSAGE(LOG_DUMP, "Native Call to %s\n", GetNativeName(GetNativeFnc(ip))); + MESSAGE(LOG_DUMP, "Native Call to %s\n", getBridgeName((void*)ip)?:GetNativeName(GetNativeFnc(ip))); x87_stackcount(dyn, ninst, x1); x87_forget(dyn, ninst, x3, x4, 0); sse_purge07cache(dyn, ninst, x3); @@ -2352,7 +2379,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(isRetX87Wrapper(*(wrapper_t*)(addr))) // return value will be on the stack, so the stack depth needs to be updated x87_purgecache(dyn, ninst, 0, x3, x1, x4); - if((box64_log<2 && !cycle_log) && tmp) { + if((box64_log<2 && !cycle_log && !box64_dynarec_test) && tmp) { //GETIP(ip+3+8+8); // read the 0xCC call_n(dyn, ninst, *(void**)(addr+8), tmp); addr+=8+8; @@ -2384,11 +2411,13 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin LDRx_REG(x3, x1, x2); //LDRx_U12(x3, x1, offsetof(box64context_t, signals[SIGTRAP])); CMPSx_U12(x3, 0); - B_NEXT(cEQ); + B_MARK(cEQ); GETIP(addr); // update RIP STORE_XEMU_CALL(xRIP); CALL(native_int3, -1); LOAD_XEMU_CALL(xRIP); + MARK; + jump_to_epilog(dyn, addr, 0, ninst); *need_epilog = 0; *ok = 0; } @@ -2437,6 +2466,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state GETIP(ip); // priviledged instruction, IP not updated STORE_XEMU_CALL(xRIP); + MOV32w(x1,u8); CALL(native_int, -1); LOAD_XEMU_CALL(xRIP); jump_to_epilog(dyn, 0, xRIP, ninst); @@ -2461,7 +2491,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("IRET"); SETFLAGS(X_ALL, SF_SET_NODF); // Not a hack, EFLAGS are restored BARRIER(BARRIER_FLOAT); - iret_to_epilog(dyn, ninst, rex.w); + iret_to_epilog(dyn, ninst, rex.is32bits, rex.w); *need_epilog = 0; *ok = 0; break; @@ -2470,14 +2500,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin switch((nextop>>3)&7) { case 0: INST_NAME("ROL Eb, 1"); - SETFLAGS(X_OF|X_CF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEB(x1, 0); emit_rol8c(dyn, ninst, ed, 1, x4, x5); EBBACK; break; case 1: INST_NAME("ROR Eb, 1"); - SETFLAGS(X_OF|X_CF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEB(x1, 0); emit_ror8c(dyn, ninst, ed, 1, x4, x5); EBBACK; @@ -2527,14 +2557,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin switch((nextop>>3)&7) { case 0: INST_NAME("ROL Ed, 1"); - SETFLAGS(X_OF|X_CF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETED(0); emit_rol32c(dyn, ninst, rex, ed, 1, x3, x4); WBACK; break; case 1: INST_NAME("ROR Ed, 1"); - SETFLAGS(X_OF|X_CF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETED(0); emit_ror32c(dyn, ninst, rex, ed, 1, x3, x4); WBACK; @@ -2589,8 +2619,8 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MAYSETFLAGS(); UFLAG_IF { UFLAG_DF(x2, d_none); - TSTw_mask(xRCX, 0, 0b00100); //mask=0x00000001f - B_NEXT(cEQ); + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + CBZw_NEXT(x2); } ANDw_mask(x2, xRCX, 0, 0b00010); //mask=0x000000007 MOV32w(x4, 8); @@ -2601,8 +2631,8 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin EBBACK; UFLAG_IF { // calculate flags directly IFX(X_OF) { - CMPSw_U12(x2, 7); - B_MARK(cNE); + SUBw_U12(x3, x2, 7); + CBNZw_MARK(x3); EORxw_REG_LSR(x3, ed, ed, 7); BFIw(xFlags, x3, F_OF, 1); MARK; @@ -2619,8 +2649,8 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MAYSETFLAGS(); UFLAG_IF { UFLAG_DF(x2, d_none); - TSTw_mask(xRCX, 0, 0b00100); //mask=0x00000001f - B_NEXT(cEQ); + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + CBZw_NEXT(x2); } ANDw_mask(x2, xRCX, 0, 0b00010); //mask=0x000000007 GETEB(x1, 0); @@ -2629,8 +2659,8 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin EBBACK; UFLAG_IF { // calculate flags directly IFX(X_OF) { - CMPSw_U12(x2, 1); - B_MARK(cNE); + SUBw_U12(x3, x2, 1); + CBNZw_MARK(x3); LSRxw(x2, ed, 6); // x2 = d>>6 EORw_REG_LSR(x2, x2, x2, 1); // x2 = ((d>>6) ^ ((d>>6)>>1)) BFIw(xFlags, x2, F_OF, 1); @@ -2648,7 +2678,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(box64_dynarec_safeflags>1) MAYSETFLAGS(); SETFLAGS(X_OF|X_CF, SF_SET_DF); - ANDSw_mask(x2, xRCX, 0, 0b00100); + ANDw_mask(x2, xRCX, 0, 0b00100); GETEB(x1, 0); CALL_(rcl8, x1, x3); EBBACK; @@ -2660,7 +2690,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(box64_dynarec_safeflags>1) MAYSETFLAGS(); SETFLAGS(X_OF|X_CF, SF_SET_DF); - ANDSw_mask(x2, xRCX, 0, 0b00100); + ANDw_mask(x2, xRCX, 0, 0b00100); GETEB(x1, 0); CALL_(rcr8, x1, x3); EBBACK; @@ -2671,11 +2701,9 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(box64_dynarec_safeflags>1) MAYSETFLAGS(); + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { - ANDSw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f - B_NEXT(cEQ); - } else { - ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + CBZw_NEXT(x2); } GETEB(x1, 0); emit_shl8(dyn, ninst, x1, x2, x5, x4); @@ -2686,11 +2714,9 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(box64_dynarec_safeflags>1) MAYSETFLAGS(); + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { - ANDSw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f - B_NEXT(cEQ); - } else { - ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + CBZw_NEXT(x2); } GETEB(x1, 0); emit_shr8(dyn, ninst, x1, x2, x5, x4); @@ -2701,11 +2727,9 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(box64_dynarec_safeflags>1) MAYSETFLAGS(); + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { - ANDSw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f - B_NEXT(cEQ); - } else { - ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + CBZw_NEXT(x2); } GETSEB(x1, 0); emit_sar8(dyn, ninst, x1, x2, x5, x4); @@ -2721,34 +2745,28 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_OF|X_CF, SF_SUBSET); if(box64_dynarec_safeflags>1) MAYSETFLAGS(); + if(rex.w) { + ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + } else { + ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f + } UFLAG_IF { UFLAG_DF(x2, d_none); - if(rex.w) { - ANDSx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f - } else { - ANDSw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f - } - } else { - if(rex.w) { - ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f - } else { - ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f - } } - MOV64xw(x4, (rex.w?64:32)); - SUBx_REG(x3, x4, x3); GETED(0); UFLAG_IF { if(!rex.w && !rex.is32bits && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x3); } + MOV64xw(x4, (rex.w?64:32)); + SUBx_REG(x3, x4, x3); RORxw_REG(ed, ed, x3); WBACK; UFLAG_IF { // calculate flags directly IFX(X_OF) { - CMPSw_U12(x3, rex.w?63:31); - B_MARK(cNE); - ADDxw_REG_LSR(x1, ed, ed, rex.w?63:31); + SUBw_U12(x3, x3, rex.w?63:31); + CBNZw_MARK(x3); + EORxw_REG_LSR(x1, ed, ed, rex.w?63:31); BFIw(xFlags, x1, F_OF, 1); MARK; } @@ -2762,31 +2780,25 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_OF|X_CF, SF_SUBSET); if(box64_dynarec_safeflags>1) MAYSETFLAGS(); + if(rex.w) { + ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + } else { + ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f + } UFLAG_IF { UFLAG_DF(x2, d_none); - if(rex.w) { - ANDSx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f - } else { - ANDSw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f - } - } else { - if(rex.w) { - ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f - } else { - ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f - } } GETED(0); UFLAG_IF { if(!rex.w && !rex.is32bits && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x3); } RORxw_REG(ed, ed, x3); WBACK; UFLAG_IF { // calculate flags directly IFX(X_OF) { - CMPSw_U12(x3, 1); - B_MARK(cNE); + SUBw_U12(x2, x3, 1); + CBNZw_MARK(x2); LSRxw(x2, ed, rex.w?62:30); // x2 = d>>30 EORw_REG_LSR(x2, x2, x2, 1); // x2 = ((d>>30) ^ ((d>>30)>>1)) BFIw(xFlags, x2, F_OF, 1); @@ -2805,13 +2817,13 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(box64_dynarec_safeflags>1) MAYSETFLAGS(); if(rex.w) { - ANDSx_mask(x2, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + ANDx_mask(x2, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - ANDSw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f } GETEDW(x4, x1, 0); if(!rex.w && !rex.is32bits && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x2); CALL_(rex.w?((void*)rcl64):((void*)rcl32), ed, x4); WBACK; break; @@ -2823,13 +2835,13 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(box64_dynarec_safeflags>1) MAYSETFLAGS(); if(rex.w) { - ANDSx_mask(x2, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + ANDx_mask(x2, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - ANDSw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f } GETEDW(x4, x1, 0); if(!rex.w && !rex.is32bits && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x2); CALL_(rex.w?((void*)rcr64):((void*)rcr32), ed, x4); WBACK; break; @@ -2839,23 +2851,15 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(box64_dynarec_safeflags>1) MAYSETFLAGS(); - UFLAG_IF { - if(rex.w) { - ANDSx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f - } else { - ANDSw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f - } + if(rex.w) { + ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - if(rex.w) { - ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f - } else { - ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f - } + ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f } GETED(0); UFLAG_IF { if(!rex.w && !rex.is32bits && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x3); } emit_shl32(dyn, ninst, rex, ed, x3, x5, x4); WBACK; @@ -2865,55 +2869,36 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(box64_dynarec_safeflags>1) MAYSETFLAGS(); - UFLAG_IF { - if(rex.w) { - ANDSx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f - } else { - ANDSw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f - } + if(rex.w) { + ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - if(rex.w) { - ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f - } else { - ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f - } + ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f } GETED(0); UFLAG_IF { if(!rex.w && !rex.is32bits && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x3); } emit_shr32(dyn, ninst, rex, ed, x3, x5, x4); WBACK; break; case 7: INST_NAME("SAR Ed, CL"); - SETFLAGS(X_ALL, SF_PENDING); + SETFLAGS(X_ALL, SF_SET_PENDING); if(box64_dynarec_safeflags>1) MAYSETFLAGS(); - UFLAG_IF { - if(rex.w) { - ANDSx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f - } else { - ANDSw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f - } + if(rex.w) { + ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - if(rex.w) { - ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f - } else { - ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f - } + ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f } GETED(0); UFLAG_IF { if(!rex.w && !rex.is32bits && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x3); } - UFLAG_OP12(ed, x3); - ASRxw_REG(ed, ed, x3); + emit_sar32(dyn, ninst, rex, ed, x3, x5, x4); WBACK; - UFLAG_RES(ed); - UFLAG_DF(x3, rex.w?d_sar64:d_sar32); break; } break; @@ -3029,15 +3014,20 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xE6: /* OUT Ib, AL */ case 0xE7: /* OUT Ib, EAX */ INST_NAME(opcode==0xE4?"IN AL, Ib":(opcode==0xE5?"IN EAX, Ib":(opcode==0xE6?"OUT Ib, AL":"OUT Ib, EAX"))); - SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state - u8 = F8; - GETIP(ip); - STORE_XEMU_CALL(xRIP); - CALL(native_priv, -1); - LOAD_XEMU_CALL(xRIP); - jump_to_epilog(dyn, 0, xRIP, ninst); - *need_epilog = 0; - *ok = 0; + if(rex.is32bits && box64_ignoreint3) + { + F8; + } else { + SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state + u8 = F8; + GETIP(ip); + STORE_XEMU_CALL(xRIP); + CALL(native_priv, -1); + LOAD_XEMU_CALL(xRIP); + jump_to_epilog(dyn, 0, xRIP, ninst); + *need_epilog = 0; + *ok = 0; + } break; case 0xE8: INST_NAME("CALL Id"); @@ -3048,10 +3038,10 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin #endif } #if STEP < 2 - if(!rex.is32bits && isNativeCall(dyn, addr+i32, &dyn->insts[ninst].natcall, &dyn->insts[ninst].retn)) + if(!rex.is32bits && isNativeCall(dyn, addr+i32, rex.is32bits, &dyn->insts[ninst].natcall, &dyn->insts[ninst].retn)) tmp = dyn->insts[ninst].pass2choice = 3; else - tmp = dyn->insts[ninst].pass2choice = 0; + tmp = dyn->insts[ninst].pass2choice = i32?0:1; #else tmp = dyn->insts[ninst].pass2choice; #endif @@ -3065,12 +3055,12 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } WILLWRITE2(); PUSH1(x2); - MESSAGE(LOG_DUMP, "Native Call to %s (retn=%d)\n", GetNativeName(GetNativeFnc(dyn->insts[ninst].natcall-1)), dyn->insts[ninst].retn); + MESSAGE(LOG_DUMP, "Native Call to %s (retn=%d)\n", getBridgeName((void*)(dyn->insts[ninst].natcall-1))?:GetNativeName(GetNativeFnc(dyn->insts[ninst].natcall-1)), dyn->insts[ninst].retn); SKIPTEST(x1); // disable test as this hack dos 2 instructions for 1 // calling a native function SMEND(); sse_purge07cache(dyn, ninst, x3); - if((box64_log<2 && !cycle_log) && dyn->insts[ninst].natcall) { + if((box64_log<2 && !cycle_log && !box64_dynarec_test) && dyn->insts[ninst].natcall) { tmp=isSimpleWrapper(*(wrapper_t*)(dyn->insts[ninst].natcall+2)); } else tmp=0; @@ -3109,6 +3099,15 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin dyn->last_ip = addr; } break; + case 1: + // this is call to next step, so just push the return address to the stack + if(rex.is32bits) { + MOV32w(x2, addr); + } else { + TABLE64(x2, addr); + } + PUSH1z(x2); + break; default: if((box64_dynarec_safeflags>1) || (ninst && dyn->insts[ninst-1].x64.set_flags)) { READFLAGS(X_PEND); // that's suspicious @@ -3116,14 +3115,6 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags to "dont'care" state } // regular call - /*if(box64_dynarec_callret && box64_dynarec_bigblock>1) { - BARRIER(BARRIER_FULL); - BARRIER_NEXT(BARRIER_FULL); - } else { - BARRIER(BARRIER_FLOAT); - *need_epilog = 0; - *ok = 0; - }*/ if(rex.is32bits) { MOV32w(x2, addr); } else { @@ -3140,24 +3131,34 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin ADR_S20(x4, j64); MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } else { - MESSAGE(LOG_NONE, "\tCALLRET set return to Jmptable(%p)\n", (void*)addr); - j64 = getJumpTableAddress64(addr); - TABLE64(x4, j64); - LDRx_U12(x4, x4, 0); + j64 = (dyn->insts)?(GETMARK-(dyn->native_size)):0; + ADR_S20(x4, j64); + MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } STPx_S7_preindex(x4, x2, xSP, -16); } else { *ok = 0; *need_epilog = 0; } - jump_to_next(dyn, addr+i32, 0, ninst, rex.is32bits); + if(rex.is32bits) + j64 = (uint32_t)(addr+i32); + else + j64 = addr+i32; + jump_to_next(dyn, j64, 0, ninst, rex.is32bits); + if(box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + // jumps out of current dynablock... + MARK; + j64 = getJumpTableAddress64(addr); + TABLE64(x4, j64); + LDRx_U12(x4, x4, 0); + BR(x4); + } break; } break; case 0xE9: case 0xEB: BARRIER(BARRIER_MAYBE); - if (box64_dynarec_test == 2) { NOTEST(x1); } if(opcode==0xEB && PK(0)==0xFF) { INST_NAME("JMP ib"); MESSAGE(LOG_DEBUG, "Hack for EB FF opcode"); @@ -3200,20 +3201,34 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xEE: /* OUT DX, AL */ case 0xEF: /* OUT DX, EAX */ INST_NAME(opcode==0xEC?"IN AL, DX":(opcode==0xED?"IN EAX, DX":(opcode==0xEE?"OUT DX, AL":"OUT DX, EAX"))); + if(rex.is32bits && box64_ignoreint3) + {} else { + SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state + GETIP(ip); + STORE_XEMU_CALL(xRIP); + CALL(native_priv, -1); + LOAD_XEMU_CALL(xRIP); + jump_to_epilog(dyn, 0, xRIP, ninst); + *need_epilog = 0; + *ok = 0; + } + break; + + case 0xF0: + addr = dynarec64_F0(dyn, addr, ip, ninst, rex, rep, ok, need_epilog); + break; + case 0xF1: + INST_NAME("INT1"); SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state GETIP(ip); STORE_XEMU_CALL(xRIP); - CALL(native_priv, -1); + CALL(native_priv, -1); // is that a privileged opcodes or an int 1?? LOAD_XEMU_CALL(xRIP); jump_to_epilog(dyn, 0, xRIP, ninst); *need_epilog = 0; *ok = 0; break; - case 0xF0: - addr = dynarec64_F0(dyn, addr, ip, ninst, rex, rep, ok, need_epilog); - break; - case 0xF4: INST_NAME("HLT"); SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -3554,14 +3569,17 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xFA: /* STI */ case 0xFB: /* CLI */ INST_NAME(opcode==0xFA?"CLI":"STI"); - SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state - GETIP(ip); - STORE_XEMU_CALL(xRIP); - CALL(native_priv, -1); - LOAD_XEMU_CALL(xRIP); - jump_to_epilog(dyn, 0, xRIP, ninst); - *need_epilog = 0; - *ok = 0; + if(rex.is32bits && box64_ignoreint3) + {} else { + SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state + GETIP(ip); + STORE_XEMU_CALL(xRIP); + CALL(native_priv, -1); + LOAD_XEMU_CALL(xRIP); + jump_to_epilog(dyn, 0, xRIP, ninst); + *need_epilog = 0; + *ok = 0; + } break; case 0xFC: INST_NAME("CLD"); @@ -3623,7 +3641,6 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin GETEDz(0); if(box64_dynarec_callret && box64_dynarec_bigblock>1) { BARRIER(BARRIER_FULL); - BARRIER_NEXT(BARRIER_FULL); } else { BARRIER(BARRIER_FLOAT); *need_epilog = 0; @@ -3639,15 +3656,22 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin ADR_S20(x4, j64); MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } else { - MESSAGE(LOG_NONE, "\tCALLRET set return to Jmptable(%p)\n", (void*)addr); - j64 = getJumpTableAddress64(addr); - TABLE64(x4, j64); - LDRx_U12(x4, x4, 0); + j64 = (dyn->insts)?(GETMARK-(dyn->native_size)):0; + ADR_S20(x4, j64); + MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } STPx_S7_preindex(x4, xRIP, xSP, -16); } PUSH1z(xRIP); jump_to_next(dyn, 0, ed, ninst, rex.is32bits); + if(box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + // jumps out of current dynablock... + MARK; + j64 = getJumpTableAddress64(addr); + TABLE64(x4, j64); + LDRx_U12(x4, x4, 0); + BR(x4); + } break; case 3: // CALL FAR Ed if(MODREG) { diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c index 85025081af54f785d54fcac88f11800c8ac57439..0c1ba5e3d4379aafa76d39fbff2bc2a175b94409 100644 --- a/src/dynarec/arm64/dynarec_arm64_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_0f.c @@ -69,8 +69,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin switch(nextop) { case 0xD0: INST_NAME("XGETBV"); - CMPSw_REG(xRCX, xZR); - B_MARK(cEQ); + CBZw_MARK(xRCX); UDF(0); MARK; MOV32w(xRAX, 0b111); @@ -154,8 +153,8 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CALL_S(x64Syscall, -1); LOAD_XEMU_CALL(xRIP); TABLE64(x3, addr); // expected return address - CMPSx_REG(xRIP, x3); - B_MARK(cNE); + SUBx_REG(x3, x3, xRIP); + CBNZx_MARK(x3); LDRw_U12(w1, xEmu, offsetof(x64emu_t, quit)); CBZw_NEXT(w1); MARK; @@ -190,13 +189,24 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0x0D: nextop = F8; switch((nextop>>3)&7) { + case 0: + INST_NAME("PREFETCH"); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0xfff, 7, rex, NULL, 0, 0); + PLD_L1_STREAM_U12(ed, fixedaddress); + break; case 1: INST_NAME("PREFETCHW"); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0xfff, 7, rex, NULL, 0, 0); PST_L1_STREAM_U12(ed, fixedaddress); break; - default: //??? - DEFAULT; + case 2: + INST_NAME("PREFETCHWT1"); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0xfff, 7, rex, NULL, 0, 0); + PST_L1_STREAM_U12(ed, fixedaddress); + break; + default: //NOP + FAKEED; + break; } break; case 0x0E: @@ -273,7 +283,6 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0x14: INST_NAME("UNPCKLPS Gx, Ex"); nextop = F8; - SMREAD(); GETEX(q0, 0, 0); GETGX(v0, 1); VZIP1Q_32(v0, v0, q0); @@ -281,7 +290,6 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0x15: INST_NAME("UNPCKHPS Gx, Ex"); nextop = F8; - SMREAD(); GETEX(q0, 0, 0); GETGX(v0, 1); VZIP2Q_32(v0, v0, q0); @@ -1547,11 +1555,14 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; #define GO(GETFLAGS, NO, YES, F) \ - if (box64_dynarec_test == 2) { NOTEST(x1); } \ READFLAGS(F); \ i32_ = F32S; \ + if(rex.is32bits) \ + j64 = (uint32_t)(addr+i32_); \ + else \ + j64 = addr+i32_; \ BARRIER(BARRIER_MAYBE); \ - JUMP(addr+i32_, 1); \ + JUMP(j64, 1); \ GETFLAGS; \ if(dyn->insts[ninst].x64.jmp_insts==-1 || \ CHECK_CACHE()) { \ @@ -1561,7 +1572,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(dyn->insts[ninst].x64.jmp_insts==-1) { \ if(!(dyn->insts[ninst].x64.barrier&BARRIER_FLOAT)) \ fpu_purgecache(dyn, ninst, 1, x1, x2, x3); \ - jump_to_next(dyn, addr+i32_, 0, ninst, rex.is32bits); \ + jump_to_next(dyn, j64, 0, ninst, rex.is32bits); \ } else { \ CacheTransform(dyn, ninst, cacheupd, x1, x2, x3); \ i32 = dyn->insts[dyn->insts[ninst].x64.jmp_insts].address-(dyn->native_size); \ @@ -1643,12 +1654,17 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xA4: nextop = F8; INST_NAME("SHLD Ed, Gd, Ib"); - SETFLAGS(X_ALL, SF_SET_PENDING); - GETED(1); - GETGD; - u8 = F8; - emit_shld32c(dyn, ninst, rex, ed, gd, u8, x3, x4); - WBACK; + if(geted_ib(dyn, addr, ninst, nextop)) { + SETFLAGS(X_ALL, SF_SET_PENDING); + GETED(1); + GETGD; + u8 = F8; + emit_shld32c(dyn, ninst, rex, ed, gd, u8, x3, x4); + WBACK; + } else { + FAKEED; + F8; + } break; case 0xA5: nextop = F8; @@ -1660,11 +1676,11 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin GETED(0); if(!rex.w && !rex.is32bits && MODREG) {MOVw_REG(ed, ed);} if(rex.w) { - ANDSx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - ANDSw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f + ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f } - B_NEXT(cEQ); + CBZw_NEXT(x3); emit_shld32(dyn, ninst, rex, ed, gd, x3, x5, x4); WBACK; break; @@ -1719,12 +1735,17 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xAC: nextop = F8; INST_NAME("SHRD Ed, Gd, Ib"); - SETFLAGS(X_ALL, SF_SET_PENDING); - GETED(1); - GETGD; - u8 = F8; - emit_shrd32c(dyn, ninst, rex, ed, gd, u8, x3, x4); - WBACK; + if(geted_ib(dyn, addr, ninst, nextop)) { + SETFLAGS(X_ALL, SF_SET_PENDING); + GETED(1); + GETGD; + u8 = F8; + emit_shrd32c(dyn, ninst, rex, ed, gd, u8, x3, x4); + WBACK; + } else { + FAKEED; + F8; + } break; case 0xAD: nextop = F8; @@ -1736,11 +1757,11 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin GETED(0); if(!rex.w && !rex.is32bits && MODREG) {MOVw_REG(ed, ed);} if(rex.w) { - ANDSx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - ANDSw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f + ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f } - B_NEXT(cEQ); + CBZw_NEXT(x3); emit_shrd32(dyn, ninst, rex, ed, gd, x3, x5, x4); WBACK; break; @@ -1772,7 +1793,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin fpu_purgecache(dyn, ninst, 0, x1, x2, x3); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); if(ed!=x1) {MOVx_REG(x1, ed);} - CALL(rex.w?((void*)fpu_fxsave64):((void*)fpu_fxsave32), -1); + CALL(rex.is32bits?((void*)fpu_fxsave32):((void*)fpu_fxsave64), -1); break; case 1: INST_NAME("FXRSTOR Ed"); @@ -1780,7 +1801,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin fpu_purgecache(dyn, ninst, 0, x1, x2, x3); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); if(ed!=x1) {MOVx_REG(x1, ed);} - CALL(rex.w?((void*)fpu_fxrstor64):((void*)fpu_fxrstor32), -1); + CALL(rex.is32bits?((void*)fpu_fxrstor32):((void*)fpu_fxrstor64), -1); break; case 2: INST_NAME("LDMXCSR Md"); @@ -1912,20 +1933,16 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin wback = 0; UFLAG_IF {emit_cmp32(dyn, ninst, rex, xRAX, ed, x3, x4, x5);} MOVxw_REG(x1, ed); // save value - CMPSxw_REG(xRAX, x1); - if(rex.w) { - CSELxw(ed, gd, ed, cEQ); - } else { - B_MARK2(cNE); - MOVw_REG(ed, gd); - MARK2; - } + SUBxw_REG(x4, xRAX, x1); + CBNZxw_MARK2(x4); + MOVxw_REG(ed, gd); + MARK2; } else { addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, &unscaled, 0xfff<<(2+rex.w), (1<<(2+rex.w))-1, rex, NULL, 0, 0); LDxw(x1, wback, fixedaddress); UFLAG_IF {emit_cmp32(dyn, ninst, rex, xRAX, x1, x3, x4, x5);} - CMPSxw_REG(xRAX, x1); - B_MARK(cNE); + SUBxw_REG(x4, xRAX, x1); + CBNZxw_MARK(x4); // EAX == Ed STxw(gd, wback, fixedaddress); MARK; @@ -2143,14 +2160,20 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin nextop = F8; GETED(0); GETGD; - TSTxw_REG(ed, ed); - B_MARK(cEQ); + IFX(X_ZF) { + TSTxw_REG(ed, ed); + B_MARK(cEQ); + } else { + CBZxw_MARK(ed); + } RBITxw(x1, ed); // reverse CLZxw(gd, x1); // x2 gets leading 0 == BSF MARK; IFX(X_ZF) { - CSETw(x1, cEQ); //other flags are undefined - BFIw(xFlags, x1, F_ZF, 1); + IFNATIVE(NF_EQ) {} else { + CSETw(x1, cEQ); //other flags are undefined + BFIw(xFlags, x1, F_ZF, 1); + } } break; case 0xBD: @@ -2160,15 +2183,21 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin nextop = F8; GETED(0); GETGD; - TSTxw_REG(ed, ed); - B_MARK(cEQ); + IFX(X_ZF) { + TSTxw_REG(ed, ed); + B_MARK(cEQ); + } else { + CBZxw_MARK(ed); + } CLZxw(gd, ed); // x2 gets leading 0 SUBxw_U12(gd, gd, rex.w?63:31); NEGxw_REG(gd, gd); // complement MARK; IFX(X_ZF) { - CSETw(x1, cEQ); //other flags are undefined - BFIw(xFlags, x1, F_ZF, 1); + IFNATIVE(NF_EQ) {} else { + CSETw(x1, cEQ); //other flags are undefined + BFIw(xFlags, x1, F_ZF, 1); + } } break; case 0xBE: @@ -2313,16 +2342,30 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin VMOVeS(v0, 1, v0, 0); } else if(v0==v1 && (u8==0xe5)) { // easy special case VMOVeS(v0, 0, v0, 1); + } else if(v0==v1 && (u8==0x39)) { + VEXTQ_8(v0, v0, v0, 4); + } else if(u8==0x4E && MODREG) { + VEXTQ_8(v0, v0, v1, 8); } else { d0 = fpu_get_scratch(dyn, ninst); // first two elements from Gx - for(int i=0; i<2; ++i) { - VMOVeS(d0, i, v0, (u8>>(i*2))&3); + if((u8&0xf)==0x04) + VMOVeD(d0, 0, v0, 0); + else if((u8&0xf)==0x0e) + VMOVeD(d0, 0, v0, 1); + else + for(int i=0; i<2; ++i) { + VMOVeS(d0, i, v0, (u8>>(i*2))&3); } // second two from Ex if(MODREG) { - for(int i=2; i<4; ++i) { - VMOVeS(d0, i, v1, (u8>>(i*2))&3); + if((u8&0xf0)==0x40) + VMOVeD(d0, 1, v1, 0); + else if((u8&0xf0)==0xe0) + VMOVeD(d0, 1, v1, 1); + else + for(int i=2; i<4; ++i) { + VMOVeS(d0, i, v1, (u8>>(i*2))&3); } } else { SMREAD(); @@ -2371,18 +2414,20 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin B_MARK(cNE); // EAX!=ED[0] || EDX!=Ed[1] STPxw_S7_offset(xRBX, xRCX, wback, 0); UFLAG_IF { - MOV32w(x1, 1); + IFNATIVE(NF_EQ) {} else {MOV32w(x1, 1);} } B_MARK3_nocond; MARK; MOVxw_REG(xRAX, x2); MOVxw_REG(xRDX, x3); UFLAG_IF { - MOV32w(x1, 0); + IFNATIVE(NF_EQ) {} else {MOV32w(x1, 0);} } MARK3; UFLAG_IF { - BFIw(xFlags, x1, F_ZF, 1); + IFNATIVE(NF_EQ) {} else { + BFIw(xFlags, x1, F_ZF, 1); + } } SMWRITE(); break; diff --git a/src/dynarec/arm64/dynarec_arm64_64.c b/src/dynarec/arm64/dynarec_arm64_64.c index 046c08d35baa098ccbc05c66b083a771e6c636e7..28078fc63c67d81fb17208bf950d780fca2d5928 100644 --- a/src/dynarec/arm64/dynarec_arm64_64.c +++ b/src/dynarec/arm64/dynarec_arm64_64.c @@ -108,7 +108,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v0 = sse_get_reg_empty(dyn, ninst, x1, gd); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VLD64(v0, x4, fixedaddress); // upper part reseted } break; @@ -126,7 +126,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v0 = sse_get_reg_empty(dyn, ninst, x1, gd); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VLD32(v0, x4, fixedaddress); } break; @@ -140,15 +140,16 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("MOVUPS Ex,Gx"); nextop = F8; GETG; - v0 = sse_get_reg(dyn, ninst, x1, gd, 0); if(MODREG) { + v0 = sse_get_reg(dyn, ninst, x1, gd, 0); ed = (nextop&7)+(rex.b<<3); v1 = sse_get_reg_empty(dyn, ninst, x1, ed); VMOVQ(v1, v0); } else { grab_segdata(dyn, addr, ninst, x4, seg); + v0 = sse_get_reg(dyn, ninst, x1, gd, 0); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<4, 15, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VST128(v0, x4, fixedaddress); SMWRITE2(); } @@ -157,15 +158,16 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("MOVSD Ex, Gx"); nextop = F8; GETG; - v0 = sse_get_reg(dyn, ninst, x1, gd, 0); if(MODREG) { + v0 = sse_get_reg(dyn, ninst, x1, gd, 0); ed = (nextop&7)+ (rex.b<<3); d0 = sse_get_reg(dyn, ninst, x1, ed, 1); VMOVeD(d0, 0, v0, 0); } else { grab_segdata(dyn, addr, ninst, x4, seg); + v0 = sse_get_reg(dyn, ninst, x1, gd, 0); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VST64(v0, x4, fixedaddress); SMWRITE2(); } @@ -174,15 +176,16 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("MOVSS Ex, Gx"); nextop = F8; GETG; - v0 = sse_get_reg(dyn, ninst, x1, gd, 0); if(MODREG) { + v0 = sse_get_reg(dyn, ninst, x1, gd, 0); ed = (nextop&7)+ (rex.b<<3); q0 = sse_get_reg(dyn, ninst, x1, ed, 1); VMOVeS(q0, 0, v0, 0); } else { grab_segdata(dyn, addr, ninst, x4, seg); + v0 = sse_get_reg(dyn, ninst, x1, gd, 0); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VST32(v0, x4, fixedaddress); SMWRITE2(); } @@ -192,21 +195,69 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } break; + case 0x28: + switch(rep) { + case 0: + INST_NAME("MOVAPS Gx,Seg:Ex"); + nextop = F8; + GETG; + if(MODREG) { + v0 = sse_get_reg_empty(dyn, ninst, x1, gd); + v1 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3), 0); + VMOVQ(v0, v1); + } else { + grab_segdata(dyn, addr, ninst, x4, seg); + v0 = sse_get_reg_empty(dyn, ninst, x1, gd); + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<4, 15, rex, NULL, 0, 0); + ADDz_REG(x4, x4, ed); + VLD128(v0, ed, fixedaddress); + } + break; + default: + DEFAULT; + } + break; + case 0x29: + switch(rep) { + case 0: + INST_NAME("MOVAPS Seg:Ex,Gx"); + nextop = F8; + GETG; + v0 = sse_get_reg(dyn, ninst, x1, gd, 0); + if(MODREG) { + ed = (nextop&7)+(rex.b<<3); + v1 = sse_get_reg_empty(dyn, ninst, x1, ed); + VMOVQ(v1, v0); + } else { + grab_segdata(dyn, addr, ninst, x4, seg); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<4, 15, rex, NULL, 0, 0); + ADDz_REG(x4, x4, ed); + VST128(v0, x4, fixedaddress); + SMWRITE2(); + } + break; + default: + DEFAULT; + } + break; + case 0x6F: switch(rep) { case 2: INST_NAME("MOVDQU Gx,Ex");// no alignment constraint on NEON here, so same as MOVDQA nextop = F8; GETG; - v0 = sse_get_reg_empty(dyn, ninst, x1, gd); if(MODREG) { + v0 = sse_get_reg_empty(dyn, ninst, x1, gd); v1 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3), 0); VMOVQ(v0, v1); } else { grab_segdata(dyn, addr, ninst, x4, seg); + v0 = sse_get_reg_empty(dyn, ninst, x1, gd); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<4, 15, rex, NULL, 0, 0); - ADDx_REG(x4, x4, ed); + ADDz_REG(x4, x4, ed); VLD128(v0, ed, fixedaddress); } break; @@ -275,7 +326,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRB_REG(gd, ed, x4); + if(rex.is32bits) + LDRB_REG_SXTW(gd, x4, ed); + else + LDRB_REG(gd, ed, x4); } break; default: @@ -382,6 +436,25 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_cmp32(dyn, ninst, rex, gd, ed, x3, x4, x5); break; + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: + case 0x5D: + case 0x5E: + case 0x5F: + // just use regular conditional jump + return dynarec64_00(dyn, addr-1, ip, ninst, rex, rep, ok, need_epilog); + case 0x63: if(rex.is32bits) { // ARPL here @@ -397,7 +470,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRSW_REG(gd, ed, x4); + if(rex.is32bits) + LDRSW_REG_SXTW(gd, x4, ed); + else + LDRSW_REG(gd, ed, x4); } } else { if(MODREG) { // reg <= reg @@ -406,7 +482,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRw_REG(gd, ed, x4); + if(rex.is32bits) + LDRw_REG_SXTW(gd, x4, ed); + else + LDRw_REG(gd, ed, x4); } } } @@ -428,6 +507,103 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } break; + case 0x69: + INST_NAME("IMUL Gd, Ed, Id"); + SETFLAGS(X_ALL, SF_SET_PENDING); + nextop = F8; + grab_segdata(dyn, addr, ninst, x4, seg); + GETGD; + GETEDO(x4, 4); + i64 = F32S; + MOV64xw(x4, i64); + if(rex.w) { + // 64bits imul + UFLAG_IF { + SMULH(x3, ed, x4); + MULx(gd, ed, x4); + IFX(X_PEND) { + UFLAG_OP1(x3); + UFLAG_RES(gd); + UFLAG_DF(x1, d_imul64); + } else { + SET_DFNONE(x1); + } + IFX(X_ZF | X_PF | X_AF | X_SF) { + MOV32w(x1, (1<>3)+(rex.r<<3); + if(rex.rex) { + gb2 = 0; + gb1 = xRAX + gd; + } else { + gb2 = ((gd&4)<<1); + gb1 = xRAX+(gd&3); + } + if(gb2) { + gd = x4; + UBFXw(gd, gb1, gb2, 8); + } else { + gd = gb1; // no need to extract + } + if(MODREG) { + ed = (nextop&7) + (rex.b<<3); + if(rex.rex) { + eb1 = xRAX+ed; + eb2 = 0; + } else { + eb1 = xRAX+(ed&3); // Ax, Cx, Dx or Bx + eb2 = ((ed&4)>>2); // L or H + } + BFIx(eb1, gd, eb2*8, 8); + } else { + grab_segdata(dyn, addr, ninst, x4, seg); + addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); + if(rex.is32bits) + STRB_REG_SXTW(gd, x4, wback); + else + STRB_REG(gd, wback, x4); + } + break; + case 0x89: + INST_NAME("MOV Seg:Ed, Gd"); + grab_segdata(dyn, addr, ninst, x4, seg); + nextop=F8; + GETGD; + if(MODREG) { // reg <= reg + MOVxw_REG(xRAX+(nextop&7)+(rex.b<<3), gd); + } else { // mem <= reg + addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); + if(rex.is32bits) + STRxw_REG_SXTW(gd, x4, ed); + else + STRxw_REG(gd, ed, x4); + SMWRITE2(); + } + break; case 0x8A: INST_NAME("MOV Gb, Eb"); nextop = F8; @@ -639,25 +878,14 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRB_REG(x4, wback, x4); + if(rex.is32bits) + LDRB_REG_SXTW(x4, x4, wback); + else + LDRB_REG(x4, wback, x4); ed = x4; } BFIx(gb1, ed, gb2, 8); break; - case 0x89: - INST_NAME("MOV Seg:Ed, Gd"); - grab_segdata(dyn, addr, ninst, x4, seg); - nextop=F8; - GETGD; - if(MODREG) { // reg <= reg - MOVxw_REG(xRAX+(nextop&7)+(rex.b<<3), gd); - } else { // mem <= reg - addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - STRxw_REG(gd, ed, x4); - SMWRITE2(); - } - break; - case 0x8B: INST_NAME("MOV Gd, Seg:Ed"); grab_segdata(dyn, addr, ninst, x4, seg); @@ -668,7 +896,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { // mem <= reg SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRxw_REG(gd, ed, x4); + if(rex.is32bits) + LDRxw_REG_SXTW(gd, x4, ed); + else + LDRxw_REG(gd, ed, x4); } break; @@ -698,7 +929,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { SMREAD(); addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - LDRH_REG(x1, wback, x4); + if(rex.is32bits) + LDRH_REG_SXTW(x1, x4, wback); + else + LDRH_REG(x1, wback, x4); ed = x1; } STRH_U12(ed, xEmu, offsetof(x64emu_t, segs[u8])); @@ -714,11 +948,17 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin POP1z(x2); // so this can handle POP [ESP] and maybe some variant too addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0, 0, rex, NULL, 0, 0); if(ed==xRSP) { - STRz_REG(x2, ed, x4); + if(rex.is32bits) + STRz_REG_SXTW(x2, x4, ed); + else + STRz_REG(x2, ed, x4); } else { // complicated to just allow a segfault that can be recovered correctly SUBz_U12(xRSP, xRSP, rex.is32bits?4:8); - STRz_REG(x2, ed, x4); + if(rex.is32bits) + STRz_REG_SXTW(x2, x4, ed); + else + STRz_REG(x2, ed, x4); ADDz_U12(xRSP, xRSP, rex.is32bits?4:8); } } @@ -727,6 +967,22 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("NOP"); break; + case 0x9D: + INST_NAME("POPF"); + SETFLAGS(X_ALL, SF_SET); + POP1z(xFlags); + MOV32w(x1, 0x3F7FD7); + ANDw_REG(xFlags, xFlags, x1); + MOV32w(x1, 0x202); + ORRw_REG(xFlags, xFlags, x1); + SET_DFNONE(x1); + if(box64_wine) { // should this be done all the time? + TBZ_NEXT(xFlags, F_TF); + // go to epilog, TF should trigger at end of next opcode, so using Interpreter only + jump_to_epilog(dyn, addr, 0, ninst); + } + break; + case 0xA1: INST_NAME("MOV EAX,FS:Od"); grab_segdata(dyn, addr, ninst, x4, seg); @@ -735,9 +991,25 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin else u64 = F64; MOV64z(x1, u64); - LDRxw_REG(xRAX, x1, x4); + if(rex.is32bits) + LDRxw_REG_SXTW(xRAX, x4, x1); + else + LDRxw_REG(xRAX, x4, x1); + break; + case 0xA2: + INST_NAME("MOV FS:Od,AL"); + grab_segdata(dyn, addr, ninst, x4, seg); + if(rex.is32bits) + u64 = F32; + else + u64 = F64; + MOV64z(x1, u64); + if(rex.is32bits) + STRB_REG_SXTW(xRAX, x4, x1); + else + STRB_REG(xRAX, x4, x1); + SMWRITE2(); break; - case 0xA3: INST_NAME("MOV FS:Od,EAX"); grab_segdata(dyn, addr, ninst, x4, seg); @@ -746,10 +1018,22 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin else u64 = F64; MOV64z(x1, u64); - STRxw_REG(xRAX, x1, x4); + if(rex.is32bits) + STRxw_REG_SXTW(xRAX, x4, x1); + else + STRxw_REG(xRAX, x4, x1); SMWRITE2(); break; + case 0xA8: + INST_NAME("TEST AL, Ib"); + SETFLAGS(X_ALL, SF_SET_PENDING); + UXTBx(x1, xRAX); + u8 = F8; + MOV32w(x2, u8); + emit_test8(dyn, ninst, x1, x2, x3, x4, x5); + break; + case 0xC6: INST_NAME("MOV Seg:Eb, Ib"); grab_segdata(dyn, addr, ninst, x4, seg); @@ -770,7 +1054,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 1); u8 = F8; MOV32w(x3, u8); - STRB_REG(x3, ed, x4); + if(rex.is32bits) + STRB_REG_SXTW(x3, x4, ed); + else + STRB_REG(x3, ed, x4); SMWRITE2(); } break; @@ -786,7 +1073,10 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 4); i64 = F32S; MOV64xw(x3, i64); - STRxw_REG(x3, ed, x4); + if(rex.is32bits) + STRxw_REG_SXTW(x3, x4, ed); + else + STRxw_REG(x3, ed, x4); SMWRITE2(); } break; @@ -797,14 +1087,14 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin switch((nextop>>3)&7) { case 0: INST_NAME("ROL Ed, 1"); - SETFLAGS(X_OF|X_CF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEDO(x6, 0); emit_rol32c(dyn, ninst, rex, ed, 1, x3, x4); WBACKO(x6); break; case 1: INST_NAME("ROR Ed, 1"); - SETFLAGS(X_OF|X_CF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEDO(x6, 0); emit_ror32c(dyn, ninst, rex, ed, 1, x3, x4); WBACKO(x6); @@ -857,22 +1147,21 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("ROL Ed, CL"); SETFLAGS(X_OF|X_CF, SF_SUBSET); if(rex.w) { - ANDSx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - ANDSw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f + ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f } MOV64xw(x4, (rex.w?64:32)); SUBx_REG(x3, x4, x3); GETEDO(x6, 0); if(!rex.w && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x3); RORxw_REG(ed, ed, x3); WBACKO(x6); UFLAG_IF { // calculate flags directly - CMPSw_U12(x3, rex.w?63:31); - B_MARK(cNE); - LSRxw(x4, ed, rex.w?63:31); - ADDxw_REG(x4, x4, ed); + SUBw_U12(x4, x3, rex.w?63:31); + CBNZw_MARK(x4); + EORw_REG_LSR(x4, ed, ed, rex.w?63:31); BFIw(xFlags, x4, F_OF, 1); MARK; BFIw(xFlags, ed, F_CF, 1); @@ -883,18 +1172,18 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("ROR Ed, CL"); SETFLAGS(X_OF|X_CF, SF_SUBSET); if(rex.w) { - ANDSx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - ANDSw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f + ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f } GETEDO(x6, 0); if(!rex.w && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x3); RORxw_REG(ed, ed, x3); WBACKO(x6); UFLAG_IF { // calculate flags directly - CMPSw_U12(x3, 1); - B_MARK(cNE); + SUBw_U12(x2, x3, 1); + CBNZw_MARK(x2); LSRxw(x2, ed, rex.w?62:30); // x2 = d>>30 EORw_REG_LSR(x2, x2, x2, 1); // x2 = ((d>>30) ^ ((d>>30)>>1)) BFIw(xFlags, x2, F_OF, 1); @@ -910,14 +1199,14 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin READFLAGS(X_CF); SETFLAGS(X_OF|X_CF, SF_SET_DF); if(rex.w) { - ANDSx_mask(x2, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + ANDx_mask(x2, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - ANDSw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f } GETEDO(x6, 0); if(wback) {ADDx_REG(x6, x6, wback); wback=x6;} if(!rex.w && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x2); CALL_(rex.w?((void*)rcl64):((void*)rcl32), ed, x6); WBACK; break; @@ -927,14 +1216,14 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin READFLAGS(X_CF); SETFLAGS(X_OF|X_CF, SF_SET_DF); if(rex.w) { - ANDSx_mask(x2, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + ANDx_mask(x2, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - ANDSw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f } GETEDO(x6, 0); if(wback) {ADDx_REG(x6, x6, wback); wback=x6;} if(!rex.w && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x2); CALL_(rex.w?((void*)rcr64):((void*)rcr32), ed, x6); WBACK; break; @@ -943,13 +1232,13 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("SHL Ed, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(rex.w) { - ANDSx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - ANDSw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f + ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f } GETEDO(x6, 0); if(!rex.w && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x3); emit_shl32(dyn, ninst, rex, ed, x3, x5, x4); WBACKO(x6); break; @@ -957,32 +1246,29 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("SHR Ed, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(rex.w) { - ANDSx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - ANDSw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f + ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f } GETEDO(x6, 0); if(!rex.w && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); + CBZw_NEXT(x3); emit_shr32(dyn, ninst, rex, ed, x3, x5, x4); WBACKO(x6); break; case 7: INST_NAME("SAR Ed, CL"); - SETFLAGS(X_ALL, SF_PENDING); + SETFLAGS(X_ALL, SF_SET_PENDING); if(rex.w) { - ANDSx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f + ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f } else { - ANDSw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f + ANDw_mask(x3, xRCX, 0, 0b00100); //mask=0x00000001f } GETEDO(x6, 0); if(!rex.w && MODREG) {MOVw_REG(ed, ed);} - B_NEXT(cEQ); - UFLAG_OP12(ed, x3); - ASRxw_REG(ed, ed, x3); + CBZw_NEXT(x3); + emit_sar32(dyn, ninst, rex, ed, x3, x5, x4); WBACKO(x6); - UFLAG_RES(ed); - UFLAG_DF(x3, rex.w?d_sar64:d_sar32); break; } break; @@ -1222,7 +1508,6 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin GETEDOz(x6, 0); if(box64_dynarec_callret && box64_dynarec_bigblock>1) { BARRIER(BARRIER_FULL); - BARRIER_NEXT(BARRIER_FULL); } else { BARRIER(BARRIER_FLOAT); *need_epilog = 0; @@ -1238,15 +1523,22 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin ADR_S20(x4, j64); MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } else { - MESSAGE(LOG_NONE, "\tCALLRET set return to Jmptable(%p)\n", (void*)addr); - j64 = getJumpTableAddress64(addr); - TABLE64(x4, j64); - LDRx_U12(x4, x4, 0); + j64 = (dyn->insts)?(GETMARK-(dyn->native_size)):0; + ADR_S20(x4, j64); + MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } STPx_S7_preindex(x4, xRIP, xSP, -16); } PUSH1z(xRIP); jump_to_next(dyn, 0, ed, ninst, rex.is32bits); + if(box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + // jumps out of current dynablock... + MARK; + j64 = getJumpTableAddress64(addr); + TABLE64(x4, j64); + LDRx_U12(x4, x4, 0); + BR(x4); + } break; case 4: // JMP Ed INST_NAME("JMP Ed"); diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c index d0e81c119b74e03e869801ba2fbdc3558705118e..8a270619b8be1caab678cf52f2e548e94a6bdd03 100644 --- a/src/dynarec/arm64/dynarec_arm64_66.c +++ b/src/dynarec/arm64/dynarec_arm64_66.c @@ -330,7 +330,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin gd = xRAX + (opcode&7); UXTHw(x1, gd); emit_inc16(dyn, ninst, x1, x2, x3); - BFIw(gd, x1, 0, 16); + BFIz(gd, x1, 0, 16); break; case 0x48: case 0x49: @@ -345,7 +345,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin gd = xRAX + (opcode&7); UXTHw(x1, gd); emit_dec16(dyn, ninst, x1, x2, x3); - BFIw(gd, x1, 0, 16); + BFIz(gd, x1, 0, 16); break; case 0x50: case 0x51: @@ -375,7 +375,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("POP reg"); gd = xRAX+(opcode&0x07)+(rex.b<<3); POP1_16(x1); - BFIw(gd, x1, 0, 16); + BFIz(gd, x1, 0, 16); break; case 0x60: if(rex.is32bits) { @@ -397,20 +397,20 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(rex.is32bits) { INST_NAME("POPA 16bits (32bits)"); POP1_16(x1); - BFIw(xRDI, x1, 0, 16); + BFIz(xRDI, x1, 0, 16); POP1_16(x1); - BFIw(xRSI, x1, 0, 16); + BFIz(xRSI, x1, 0, 16); POP1_16(x1); - BFIw(xRBP, x1, 0, 16); + BFIz(xRBP, x1, 0, 16); POP1_16(x1); // RSP ignored POP1_16(x1); - BFIw(xRBX, x1, 0, 16); + BFIz(xRBX, x1, 0, 16); POP1_16(x1); - BFIw(xRDX, x1, 0, 16); + BFIz(xRDX, x1, 0, 16); POP1_16(x1); - BFIw(xRCX, x1, 0, 16); + BFIz(xRCX, x1, 0, 16); POP1_16(x1); - BFIw(xRAX, x1, 0, 16); + BFIz(xRAX, x1, 0, 16); } else { DEFAULT; } @@ -450,6 +450,12 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin GWBACK; UFLAG_DF(x1, d_imul16); break; + case 0x6A: + INST_NAME("PUSH Ib"); + u16 = (uint16_t)F8S; + MOV32w(x2, u16); + PUSH1_16(x2); + break; case 0x70: case 0x71: @@ -575,8 +581,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin GETGD; addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, NULL, 0, 0, rex, LOCK_LOCK, 0, 0); if(!ALIGNED_ATOMICH) { - TSTx_mask(ed, 1, 0, 0); // mask=1 - B_MARK(cNE); + TBNZ_MARK(ed, 0); } if(arm64_atomics) { SWPALH(gd, x1, ed); @@ -977,7 +982,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("ROL Ew, Ib"); u8 = geted_ib(dyn, addr, ninst, nextop) & 15; if (u8) { - SETFLAGS(X_CF | X_OF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEW(x1, 1); u8 = (F8)&0x1f; emit_rol16c(dyn, ninst, x1, u8, x4, x5); @@ -990,7 +995,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 1: INST_NAME("ROR Ew, Ib"); if (geted_ib(dyn, addr, ninst, nextop) & 15) { - SETFLAGS(X_CF | X_OF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEW(x1, 1); u8 = (F8)&0x1f; emit_ror16c(dyn, ninst, x1, u8, x4, x5); @@ -1006,7 +1011,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin READFLAGS(X_CF); SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEW(x1, 1); - u8 = F8; + u8 = (F8)&0x1f; emit_rcl16c(dyn, ninst, ed, u8, x4, x5); EWBACK; } else { @@ -1020,7 +1025,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin READFLAGS(X_CF); SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEW(x1, 1); - u8 = F8; + u8 = (F8)&0x1f; emit_rcr16c(dyn, ninst, ed, u8, x4, x5); EWBACK; } else { @@ -1093,14 +1098,14 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin switch((nextop>>3)&7) { case 0: INST_NAME("ROL Ew, 1"); - SETFLAGS(X_OF|X_CF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEW(x1, 0); emit_rol16c(dyn, ninst, x1, 1, x5, x4); EWBACK; break; case 1: INST_NAME("ROR Ew, 1"); - SETFLAGS(X_OF|X_CF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETEW(x1, 0); emit_ror16c(dyn, ninst, x1, 1, x5, x4); EWBACK; @@ -1155,8 +1160,8 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(box64_dynarec_safeflags>1) MAYSETFLAGS(); UFLAG_IF { - TSTw_mask(xRCX, 0, 0b00100); //mask=0x00000001f - B_NEXT(cEQ); + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + CBZw_NEXT(x2); } ANDw_mask(x2, xRCX, 0, 0b00011); //mask=0x00000000f MOV32w(x4, 16); @@ -1166,9 +1171,9 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin LSRw_REG(ed, ed, x2); EWBACK; UFLAG_IF { // calculate flags directly - CMPSw_U12(x2, 15); - B_MARK(cNE); - ADDxw_REG_LSR(x3, ed, ed, 15); + SUBw_U12(x2, x2, 15); + CBNZw_MARK(x2); + EORw_REG_LSR(x3, ed, ed, 15); BFIw(xFlags, x3, F_OF, 1); MARK; BFIw(xFlags, ed, F_CF, 1); @@ -1181,8 +1186,8 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(box64_dynarec_safeflags>1) MAYSETFLAGS(); UFLAG_IF { - TSTw_mask(xRCX, 0, 0b00100); //mask=0x00000001f - B_NEXT(cEQ); + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + CBZw_NEXT(x2); } ANDw_mask(x2, xRCX, 0, 0b00011); //mask=0x00000000f GETEW(x1, 0); @@ -1190,8 +1195,8 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin LSRw_REG(ed, ed, x2); EWBACK; UFLAG_IF { // calculate flags directly - CMPSw_U12(x2, 1); - B_MARK(cNE); + SUBw_U12(x2, x2, 1); + CBNZw_MARK(x2); LSRxw(x2, ed, 14); // x2 = d>>14 EORw_REG_LSR(x2, x2, x2, 1); // x2 = ((d>>14) ^ ((d>>14)>>1)) BFIw(xFlags, x2, F_OF, 1); @@ -1230,11 +1235,9 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(box64_dynarec_safeflags>1) MAYSETFLAGS(); + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { - ANDSw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f - B_NEXT(cEQ); - } else { - ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + CBZw_NEXT(x2); } GETEW(x1, 0); emit_shl16(dyn, ninst, x1, x2, x5, x4); @@ -1245,11 +1248,9 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(box64_dynarec_safeflags>1) MAYSETFLAGS(); + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { - ANDSw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f - B_NEXT(cEQ); - } else { - ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f + CBZw_NEXT(x2); } GETEW(x1, 0); emit_shr16(dyn, ninst, x1, x2, x5, x4); @@ -1260,11 +1261,10 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(box64_dynarec_safeflags>1) MAYSETFLAGS(); + ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { - ANDSw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f - B_NEXT(cEQ); + CBZw_NEXT(x2); } else { - ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f } GETSEW(x1, 0); emit_sar16(dyn, ninst, x1, x2, x5, x4); diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c index a8625e235a3d4ba2a7be139767e80a6ec3e28261..b467cdf6ca2f53afc1d6a0cc2619623db3f5577b 100644 --- a/src/dynarec/arm64/dynarec_arm64_660f.c +++ b/src/dynarec/arm64/dynarec_arm64_660f.c @@ -235,7 +235,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n SQXTN_32(q0, q0); } else { if(arm64_frintts) { - VFRINT32ZD(q0, q0); + VFRINT32ZDQ(q0, v1); VFCVTZSQD(q0, q0); SQXTN_32(q0, q0); } else { @@ -275,7 +275,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } else { u8 = sse_setround(dyn, ninst, x1, x2, x3); if(arm64_frintts) { - VFRINT32XD(q0, q0); + VFRINT32XDQ(q0, v1); VFCVTZSQD(q0, q0); SQXTN_32(q0, q0); } else { @@ -923,9 +923,9 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n SETFLAGS(X_CF, SF_SUBSET); GETED(0); GETGD; - MRS_nzvc(x3); + MRS_nzcv(x3); BFIx(x3, xFlags, 29, 1); // set C - MSR_nzvc(x3); // load CC into ARM CF + MSR_nzcv(x3); // load CC into ARM CF IFX(X_CF) { ADCSxw_REG(gd, gd, ed); CSETw(x3, cCS); @@ -1006,7 +1006,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VMOVeD(q0, 0, v1, 0); break; case 0x0C: - INST_NAME("PBLENDPS Gx, Ex, Ib"); + INST_NAME("BLENDPS Gx, Ex, Ib"); nextop = F8; GETGX(q0, 1); GETEX(q1, 0, 1); @@ -1021,7 +1021,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } break; case 0x0D: - INST_NAME("PBLENDPD Gx, Ex, Ib"); + INST_NAME("BLENDPD Gx, Ex, Ib"); nextop = F8; GETGX(q0, 1); GETEX(q1, 0, 1); @@ -1720,7 +1720,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETEX(v1, 0, 0); GETGX_empty(v0); - if(box64_dynarec_fastround) { + if(box64_dynarec_fastround==2) { FCVTXN(v0, v1); } else { u8 = sse_setround(dyn, ninst, x1, x2, x3); @@ -1739,20 +1739,26 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n x87_restoreround(dyn, ninst, u8); VFCVTZSQS(v0, v0); } else { - MRS_fpsr(x5); - u8 = sse_setround(dyn, ninst, x1, x2, x3); - MOV32w(x4, 0x80000000); - d0 = fpu_get_scratch(dyn, ninst); - for(int i=0; i<4; ++i) { - BFCw(x5, FPSR_IOC, 1); // reset IOC bit - MSR_fpsr(x5); - VMOVeS(d0, 0, v1, i); - FRINTIS(d0, d0); - VFCVTZSs(d0, d0); - MRS_fpsr(x5); // get back FPSR to check the IOC bit - TBZ(x5, FPSR_IOC, 4+4); - VMOVQSfrom(d0, 0, x4); - VMOVeS(v0, i, d0, 0); + if(arm64_frintts) { + u8 = sse_setround(dyn, ninst, x1, x2, x3); + VFRINT32XSQ(v0, v1); // handle overflow + VFCVTZSQS(v0, v0); + } else { + MRS_fpsr(x5); + u8 = sse_setround(dyn, ninst, x1, x2, x3); + MOV32w(x4, 0x80000000); + d0 = fpu_get_scratch(dyn, ninst); + for(int i=0; i<4; ++i) { + BFCw(x5, FPSR_IOC, 1); // reset IOC bit + MSR_fpsr(x5); + VMOVeS(d0, 0, v1, i); + FRINTIS(d0, d0); + VFCVTZSs(d0, d0); + MRS_fpsr(x5); // get back FPSR to check the IOC bit + TBZ(x5, FPSR_IOC, 4+4); + VMOVQSfrom(d0, 0, x4); + VMOVeS(v0, i, d0, 0); + } } x87_restoreround(dyn, ninst, u8); } @@ -2344,11 +2350,9 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n MAYSETFLAGS(); GETGW(x2); GETEW(x1, 0); + ANDw_mask(x4, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { - ANDSw_mask(x4, xRCX, 0, 0b00100); //mask=0x00000001f - B_NEXT(cEQ); - } else { - ANDw_mask(x4, xRCX, 0, 0b00100); //mask=0x00000001f + CBZw_NEXT(x4); } emit_shld16(dyn, ninst, ed, gd, x4, x5, x6); EWBACK; @@ -2401,11 +2405,10 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n MAYSETFLAGS(); GETGW(x2); GETEW(x1, 0); + ANDw_mask(x4, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { - ANDSw_mask(x4, xRCX, 0, 0b00100); //mask=0x00000001f - B_NEXT(cEQ); + CBZw_NEXT(x4); } else { - ANDw_mask(x4, xRCX, 0, 0b00100); //mask=0x00000001f } emit_shrd16(dyn, ninst, ed, gd, x4, x5, x6); EWBACK; @@ -2586,14 +2589,22 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETGD; GETEW(x1, 0); // Get EW - TSTw_REG(x1, x1); - B_MARK(cEQ); + IFX(X_ZF) { + TSTw_REG(x1, x1); + B_MARK(cEQ); + } else { + CBZw_MARK(x1); + } RBITw(x1, x1); // reverse CLZw(x2, x1); // x2 gets leading 0 == BSF BFIx(gd, x2, 0, 16); MARK; - CSETw(x1, cEQ); //ZF not set - BFIw(xFlags, x1, F_ZF, 1); + IFX(X_ZF) { + IFNATIVE(NF_EQ) {} else { + CSETw(x1, cEQ); //ZF not set + BFIw(xFlags, x1, F_ZF, 1); + } + } break; case 0xBD: INST_NAME("BSR Gw,Ew"); @@ -2602,16 +2613,24 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETGD; GETEW(x1, 0); // Get EW - TSTw_REG(x1, x1); // Don't use CBZ here, as the flag is reused later - B_MARK(cEQ); + IFX(X_ZF) { + TSTw_REG(x1, x1); // Don't use CBZ here, as the flag is reused later + B_MARK(cEQ); + } else { + CBZw_MARK(x1); + } LSLw(x1, x1, 16); // put bits on top CLZw(x2, x1); // x2 gets leading 0 SUBw_U12(x2, x2, 15); NEGw_REG(x2, x2); // complement BFIx(gd, x2, 0, 16); MARK; - CSETw(x1, cEQ); //ZF not set - BFIw(xFlags, x1, F_ZF, 1); + IFX(X_ZF) { + IFNATIVE(NF_EQ) {} else { + CSETw(x1, cEQ); //ZF not set + BFIw(xFlags, x1, F_ZF, 1); + } + } break; case 0xBE: INST_NAME("MOVSX Gw, Eb"); @@ -2635,6 +2654,20 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } BFIx(gd, x1, 0, 16); break; + case 0xBF: + INST_NAME("MOVSX Gw, Ew"); + nextop = F8; + GETGW(x1); + if(MODREG) { + ed = xRAX+(nextop&7)+(rex.b<<3); + SXTHxw(gd, ed); + } else { + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, &unscaled, 0xfff<<1, 1, rex, NULL, 0, 0); + LDSHxw(gd, ed, fixedaddress); + } + GWBACK; + break; case 0xC1: INST_NAME("XADD Gw, Ew"); @@ -2981,26 +3014,32 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VFCVTZSQD(v0, v1); // convert double -> int64 SQXTN_32(v0, v0); // convert int64 -> int32 with saturation in lower part, RaZ high part } else { - MRS_fpsr(x5); - BFCw(x5, FPSR_IOC, 1); // reset IOC bit - MSR_fpsr(x5); - ORRw_mask(x4, xZR, 1, 0); //0x80000000 - d0 = fpu_get_scratch(dyn, ninst); - for(int i=0; i<2; ++i) { + if(arm64_frintts) { + VFRINT32ZDQ(v0, v1); // handle overflow + VFCVTZSQD(v0, v0); // convert double -> int64 + SQXTN_32(v0, v0); // convert int64 -> int32 with saturation in lower part, RaZ high part + } else { + MRS_fpsr(x5); BFCw(x5, FPSR_IOC, 1); // reset IOC bit MSR_fpsr(x5); - if(i) { - VMOVeD(d0, 0, v1, i); - FCVTZSwD(x1, d0); - } else { - FCVTZSwD(x1, v1); + ORRw_mask(x4, xZR, 1, 0); //0x80000000 + d0 = fpu_get_scratch(dyn, ninst); + for(int i=0; i<2; ++i) { + BFCw(x5, FPSR_IOC, 1); // reset IOC bit + MSR_fpsr(x5); + if(i) { + VMOVeD(d0, 0, v1, i); + FCVTZSwD(x1, d0); + } else { + FCVTZSwD(x1, v1); + } + MRS_fpsr(x5); // get back FPSR to check the IOC bit + TBZ(x5, FPSR_IOC, 4+4); + MOVw_REG(x1, x4); + VMOVQSfrom(v0, i, x1); } - MRS_fpsr(x5); // get back FPSR to check the IOC bit - TBZ(x5, FPSR_IOC, 4+4); - MOVw_REG(x1, x4); - VMOVQSfrom(v0, i, x1); + VMOVQDfrom(v0, 1, xZR); } - VMOVQDfrom(v0, 1, xZR); } break; case 0xE7: diff --git a/src/dynarec/arm64/dynarec_arm64_6664.c b/src/dynarec/arm64/dynarec_arm64_6664.c index 4b33fab65bec5ce78633e1f886b207b5ccca4483..30a28012ef3003d9d902d081274d844864df53ed 100644 --- a/src/dynarec/arm64/dynarec_arm64_6664.c +++ b/src/dynarec/arm64/dynarec_arm64_6664.c @@ -62,7 +62,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); v1 = fpu_get_scratch(dyn, ninst); - VLDR64_REG(v1, ed, x4); + if(rex.is32bits) + VLDR64_REG_SXTW(v1, x4, ed); + else + VLDR64_REG(v1, ed, x4); } FCMPD(v0, v1); FCOMI(x1, x2); @@ -80,7 +83,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); SMREAD(); - VLDR128_REG(v0, ed, x4); + if(rex.is32bits) + VLDR128_REG_SXTW(v0, x4, ed); + else + VLDR128_REG(v0, ed, x4); } break; @@ -94,7 +100,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - VSTR128_REG(v0, ed, x4); + if(rex.is32bits) + VSTR128_REG_SXTW(v0, x4, ed); + else + VSTR128_REG(v0, ed, x4); SMWRITE2(); } break; @@ -110,7 +119,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); - VSTR64_REG(v0, ed, x4); + if(rex.is32bits) + VSTR64_REG_SXTW(v0, x4, ed); + else + VSTR64_REG(v0, ed, x4); SMWRITE(); } break; @@ -229,7 +241,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n if(rex.w) { STRx_REG(gd, ed, x4); } else { - STRH_REG(gd, ed, x4); + if(rex.is32bits) + STRH_REG_SXTW(gd, x4, ed); + else + STRH_REG(gd, ed, x4); } SMWRITE(); } @@ -255,7 +270,10 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n if(rex.w) { LDRx_REG(gd, ed, x4); } else { - LDRH_REG(x1, ed, x4); + if(rex.is32bits) + LDRH_REG_SXTW(x1, x4, ed); + else + LDRH_REG(x1, ed, x4); BFIx(gd, x1, 0, 16); } } diff --git a/src/dynarec/arm64/dynarec_arm64_66f30f.c b/src/dynarec/arm64/dynarec_arm64_66f30f.c index 11a18eba13ac615da05ba8b4e347be94265024a8..66e349df02c6df5c04c4cb243792d4a0f72124a1 100644 --- a/src/dynarec/arm64/dynarec_arm64_66f30f.c +++ b/src/dynarec/arm64/dynarec_arm64_66f30f.c @@ -56,6 +56,27 @@ uintptr_t dynarec64_66F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int switch(opcode) { + case 0xBD: + INST_NAME("LZCNT Gw, Ew"); + SETFLAGS(X_CF|X_ZF, SF_SUBSET); + SET_DFNONE(x1); + nextop = F8; + GETEW(x1, 0); + GETGW(x2); + IFX(X_CF) { + TSTxw_REG(ed, ed); + CSETw(x3, cEQ); + BFIw(xFlags, x3, F_CF, 1); // CF = is source 0? + } + LSLw_IMM(ed, ed, 16); + CLZw(gd, ed); + IFX(X_ZF) { + TSTxw_REG(gd, gd); + CSETw(x3, cEQ); + BFIw(xFlags, x3, F_ZF, 1); // ZF = is dest 0? + } + EWBACK; + break; default: DEFAULT; diff --git a/src/dynarec/arm64/dynarec_arm64_67.c b/src/dynarec/arm64/dynarec_arm64_67.c index 5cfd3635f1551e919bb01347af18fabbb9154a81..e5a4e6139f000a18f1a20ae8c7ec183026a0e032 100644 --- a/src/dynarec/arm64/dynarec_arm64_67.c +++ b/src/dynarec/arm64/dynarec_arm64_67.c @@ -55,10 +55,12 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin return addr; } - GETREX(); while(opcode==0x67) opcode = F8; + // reset rex after 67 + GETREX(); + rep = 0; while((opcode==0xF2) || (opcode==0xF3) || (opcode>=0x40 && opcode<=0x4F)) { if((opcode==0xF2) || (opcode==0xF3)) @@ -220,6 +222,39 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } break; + case 0x38: /* MAP 0F38 */ + opcode = F8; + switch(opcode) { + case 0xF6: + switch(rep) { + case 2: + INST_NAME("ADOX Gd, Ed"); + nextop = F8; + READFLAGS(X_OF); + SETFLAGS(X_OF, SF_SUBSET); + GETED32(0); + GETGD; + MRS_nzcv(x3); + LSRw(x4, xFlags, F_OF); + BFIx(x3, x4, 29, 1); // set C + MSR_nzcv(x3); // load CC into ARM CF + IFX(X_OF) { + ADCSxw_REG(gd, gd, ed); + CSETw(x3, cCS); + BFIw(xFlags, x3, F_OF, 1); + } else { + ADCxw_REG(gd, gd, ed); + } + break; + default: + DEFAULT; + } + break; + default: + DEFAULT; + } + break; + case 0x6F: switch(rep) { case 0: @@ -271,6 +306,19 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SMWRITE(); } break; + case 2: + INST_NAME("MOVDQU Ex, Gx"); + nextop = F8; + GETGX(v0, 0); + if(MODREG) { + v1 = sse_get_reg_empty(dyn, ninst, x1, nextop&7); + VMOVQ(v1, v0); + } else { + addr = geted32(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<4, 15, rex, NULL, 0, 0); + VST128(v0, ed, fixedaddress); + SMWRITE(); + } + break; default: DEFAULT; } @@ -634,6 +682,25 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_cmp32_0(dyn, ninst, rex, xRAX, x3, x4); break; + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: + case 0x5D: + case 0x5E: + case 0x5F: + // just use regular conditional jump + return dynarec64_00(dyn, addr-1, ip, ninst, rex, rep, ok, need_epilog); + case 0x63: INST_NAME("MOVSXD Gd, Ed"); nextop = F8; @@ -665,6 +732,46 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0x0F: nextop = F8; switch(nextop) { + case 0x6F: + INST_NAME("MOVDQA Gx,Ex"); + nextop = F8; + if(MODREG) { + v1 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3), 0); + GETGX_empty(v0); + VMOVQ(v0, v1); + } else { + GETGX_empty(v0); + SMREAD(); + addr = geted32(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<4, 15, rex, NULL, 0, 0); + VLD128(v0, ed, fixedaddress); + } + break; + + case 0x7E: + INST_NAME("MOVD Ed,Gx"); + nextop = F8; + GETGX(v0, 0); + if(rex.w) { + if(MODREG) { + ed = xRAX + (nextop&7) + (rex.b<<3); + VMOVQDto(ed, v0, 0); + } else { + addr = geted32(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); + VST64(v0, ed, fixedaddress); + SMWRITE2(); + } + } else { + if(MODREG) { + ed = xRAX + (nextop&7) + (rex.b<<3); + VMOVSto(ed, v0, 0); + } else { + addr = geted32(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); + VST32(v0, ed, fixedaddress); + SMWRITE2(); + } + } + break; + case 0xD6: INST_NAME("MOVQ Ex, Gx"); nextop = F8; @@ -846,6 +953,25 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } break; + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + // just use regular conditional jump + return dynarec64_00(dyn, addr-1, ip, ninst, rex, rep, ok, need_epilog); + case 0x81: case 0x83: nextop = F8; @@ -1032,12 +1158,39 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } break; + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + gd = xRAX+(opcode&0x07)+(rex.b<<3); + if(gd==xRAX) { + INST_NAME("NOP"); + } else { + INST_NAME("XCHG EAX, Reg"); + MOVxw_REG(x2, xRAX); + MOVxw_REG(xRAX, gd); + MOVxw_REG(gd, x2); + } + break; + + case 0xA9: + INST_NAME("TEST EAX, Id"); + SETFLAGS(X_ALL, SF_SET_PENDING); + i64 = F32S; + MOV64xw(x2, i64); + emit_test32(dyn, ninst, rex, xRAX, x2, x3, x4, x5); + break; + case 0xC1: nextop = F8; switch((nextop>>3)&7) { case 0: INST_NAME("ROL Ed, Ib"); - SETFLAGS(X_OF|X_CF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETED32(1); u8 = (F8)&(rex.w?0x3f:0x1f); emit_rol32c(dyn, ninst, rex, ed, u8, x3, x4); @@ -1045,7 +1198,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 1: INST_NAME("ROR Ed, Ib"); - SETFLAGS(X_OF|X_CF, SF_SUBSET_PENDING); + SETFLAGS(X_OF|X_CF, SF_SUBSET); // removed PENDING on purpose GETED32(1); u8 = (F8)&(rex.w?0x3f:0x1f); emit_ror32c(dyn, ninst, rex, ed, u8, x3, x4); @@ -1221,9 +1374,9 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin READFLAGS(X_ZF); i8 = F8S; MOVw_REG(x1, xRCX); - SUBSw_U12(x1, x1, 1); + SUBw_U12(x1, x1, 1); BFIx(xRCX, x1, 0, 32); - B_NEXT(cEQ); // ECX is 0, no LOOP + CBZw_NEXT(x1); // ECX is 0, no LOOP TSTw_mask(xFlags, 0b011010, 0); //mask=0x40 GO(cNE, cEQ); break; @@ -1232,9 +1385,9 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin READFLAGS(X_ZF); i8 = F8S; MOVw_REG(x1, xRCX); - SUBSw_U12(x1, x1, 1); + SUBw_U12(x1, x1, 1); BFIx(xRCX, x1, 0, 32); - B_NEXT(cEQ); // ECX is 0, no LOOP + CBZw_NEXT(x1); // ECX is 0, no LOOP TSTw_mask(xFlags, 0b011010, 0); //mask=0x40 GO(cEQ, cNE); break; @@ -1426,7 +1579,6 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin GETED32(0); if(box64_dynarec_callret && box64_dynarec_bigblock>1) { BARRIER(BARRIER_FULL); - BARRIER_NEXT(BARRIER_FULL); } else { BARRIER(BARRIER_FLOAT); *need_epilog = 0; @@ -1442,15 +1594,22 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin ADR_S20(x4, j64); MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } else { - MESSAGE(LOG_NONE, "\tCALLRET set return to Jmptable(%p)\n", (void*)addr); - j64 = getJumpTableAddress64(addr); - TABLE64(x4, j64); - LDRx_U12(x4, x4, 0); + j64 = (dyn->insts)?(GETMARK-(dyn->native_size)):0; + ADR_S20(x4, j64); + MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } STPx_S7_preindex(x4, xRIP, xSP, -16); } PUSH1z(xRIP); jump_to_next(dyn, 0, ed, ninst, rex.is32bits); + if(box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + // jumps out of current dynablock... + MARK; + j64 = getJumpTableAddress64(addr); + TABLE64(x4, j64); + LDRx_U12(x4, x4, 0); + BR(x4); + } break; default: DEFAULT; diff --git a/src/dynarec/arm64/dynarec_arm64_67_32.c b/src/dynarec/arm64/dynarec_arm64_67_32.c index 691c470c11dd1845ee5a4bb1c5e88305218c9d77..6155671699946713098fd70066a22aaeaa5a35dd 100644 --- a/src/dynarec/arm64/dynarec_arm64_67_32.c +++ b/src/dynarec/arm64/dynarec_arm64_67_32.c @@ -92,9 +92,9 @@ uintptr_t dynarec64_67_32(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int READFLAGS(X_ZF); i8 = F8S; UXTHw(x1, xRCX); - SUBSw_U12(x1, x1, 1); + SUBw_U12(x1, x1, 1); BFIx(xRCX, x1, 0, 16); - B_NEXT(cEQ); // ECX is 0, no LOOP + CBZw_NEXT(x1); // ECX is 0, no LOOP TSTw_mask(xFlags, 0b011010, 0); //mask=0x40 GO(cNE, cEQ); break; @@ -103,9 +103,9 @@ uintptr_t dynarec64_67_32(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int READFLAGS(X_ZF); i8 = F8S; UXTHw(x1, xRCX); - SUBSw_U12(x1, x1, 1); + SUBw_U12(x1, x1, 1); BFIx(xRCX, x1, 0, 16); - B_NEXT(cEQ); // ECX is 0, no LOOP + CBZw_NEXT(x1); // ECX is 0, no LOOP TSTw_mask(xFlags, 0b011010, 0); //mask=0x40 GO(cEQ, cNE); break; diff --git a/src/dynarec/arm64/dynarec_arm64_67_avx.c b/src/dynarec/arm64/dynarec_arm64_67_avx.c index 1e1e59263581c681f7d784bf627178a200805e2a..6c00a9dc30b4e2755ad0ba22d61b01e0d51e25cb 100644 --- a/src/dynarec/arm64/dynarec_arm64_67_avx.c +++ b/src/dynarec/arm64/dynarec_arm64_67_avx.c @@ -103,9 +103,30 @@ uintptr_t dynarec64_67_AVX(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int } } + else if((vex.m==VEX_M_0F) && (vex.p==VEX_P_66)) { + switch(opcode) { + case 0xD6: + INST_NAME("VMOVQ Ex, Gx"); + nextop = F8; + GETG; + v0 = sse_get_reg(dyn, ninst, x1, gd, 0); + if(MODREG) { + v1 = sse_get_reg_empty(dyn, ninst, x1, (nextop&7)+(rex.b<<3)); + VMOV(v1, v0); + YMM0((nextop&7)+(rex.b<<3)); + } else { + addr = geted32(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0xfff<<3, 7, rex, NULL, 0, 0); + VSTR64_U12(v0, ed, fixedaddress); + } + break; + + default: + DEFAULT; + } + } else {DEFAULT;} - if((*ok==-1) && (box64_dynarec_log>=LOG_INFO || box64_dynarec_dump || box64_dynarec_missing)) { + if((*ok==-1) && (box64_dynarec_log>=LOG_INFO || box64_dynarec_dump || box64_dynarec_missing==1)) { dynarec_log(LOG_NONE, "Dynarec unimplemented AVX opcode size %d prefix %s map %s opcode %02X ", 128<=LOG_INFO || box64_dynarec_dump || box64_dynarec_missing)) { + if((*ok==-1) && (box64_dynarec_log>=LOG_INFO || box64_dynarec_dump || box64_dynarec_missing==1)) { dynarec_log(LOG_NONE, "Dynarec unimplemented AVX opcode size %d prefix %s map %s opcode %02X ", 128< out is NAN + VBICQ(d1, d0, d1); // forget it in any input was a NAN already + VSHLQ_64(d1, d1, 63); // only keep the sign bit + VORRQ(v0, v0, d1); // NAN -> -NAN + } else { + VFSQRTQD(v0, v1); + } + } + if(!vex.l) YMM0(gd); + break; case 0x54: INST_NAME("VANDPD Gx, Vx, Ex"); @@ -389,7 +412,7 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, nextop = F8; GETEX(v1, 0, 0); GETGX_empty(v0); - if(box64_dynarec_fastround) { + if(box64_dynarec_fastround==2) { FCVTXN(v0, v1); } else { u8 = sse_setround(dyn, ninst, x1, x2, x4); @@ -398,7 +421,7 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, } if(vex.l) { GETEY(v1); - if(box64_dynarec_fastround) { + if(box64_dynarec_fastround==2) { FCVTXN2(v0, v1); } else { FCVTN2(v0, v1); diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c index 7e41bec5901261a0faeac56d5670f29d0e66a906..15a938bdedef405612944b40a4a1e47a871fbea8 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c @@ -24,6 +24,9 @@ #include "dynarec_arm64_functions.h" #include "dynarec_arm64_helper.h" +static const float addsubps[4] = {-1.f, 1.f, -1.f, 1.f}; +static const double addsubpd[2] = {-1., 1.}; + uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, vex_t vex, int* ok, int* need_epilog) { (void)ip; (void)need_epilog; @@ -559,7 +562,7 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, NULL, 0xffe<<4, 15, rex, NULL, 0, 0); unscaled = 0; v1 = fpu_get_scratch(dyn, ninst); - // check if mask as anything, else scipt the whole read/write to avoid a SEGFAULT. + // check if mask as anything, else skip the whole read/write to avoid a SEGFAULT. // TODO: let a segfault trigger and check if the mask is null instead and ignore the segfault / actually triger: needs to implement SSE reg tracking first! SQXTN_32(v1, q0); VMOVQDto(x4, v1, 0); @@ -604,7 +607,7 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, NULL, 0xffe<<4, 15, rex, NULL, 0, 0); unscaled = 0; v1 = fpu_get_scratch(dyn, ninst); - // check if mask as anything, else scipt the whole read/write to avoid a SEGFAULT. + // check if mask as anything, else skip the whole read/write to avoid a SEGFAULT. // TODO: let a segfault trigger and check if the mask is null instead and ignore the segfault / actually triger: needs to implement SSE reg tracking first! SQXTN_32(q1, q0); VMOVQDto(x4, q1, 0); @@ -994,26 +997,72 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip break; case 0x8C: - INST_NAME("VMASKMOVD/Q Vx, Ex, Gx"); + INST_NAME("VPMASKMOVD/Q Gx, Vx, Ex"); nextop = F8; q0 = fpu_get_scratch(dyn, ninst); for(int l=0; l<1+vex.l; ++l) { - if(!l) { - GETGX_empty_VXEX(v0, v2, v1, 0); + if(MODREG) { + if(!l) { + GETGX_empty_VXEX(v0, v2, v1, 0); + } else { + GETGY_empty_VYEY(v0, v2, v1); + } + if(rex.w) + VSSHRQ_64(q0, v2, 63); + else + VSSHRQ_32(q0, v2, 31); + VANDQ(v0, v1, q0); } else { - GETGY_empty_VYEY(v0, v2, v1); + if(!l) { + GETGX_empty_VX(v0, v2); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); + v1 = fpu_get_scratch(dyn, ninst); + } else { + GETGY_empty_VY(v0, v2, 0, -1, -1); + } + unscaled = 0; + // check if mask as anything, else skip the whole read/write to avoid a SEGFAULT. + // TODO: let a segfault trigger and check if the mask is null instead and ignore the segfault / actually triger: needs to implement SSE reg tracking first! + VEORQ(v1, v1, v1); + if(rex.w) { + VSSHRQ_64(q0, v2, 63); + VMOVQDto(x4, q0, 0); + CBZx(x4, 4+1*4); + VLD1_64(v1, 0, ed); + ADDx_U12(ed, ed, 4); + VMOVQDto(x4, q0, 1); + CBZx(x4, 4+1*4); + VLD1_64(v1, 1, ed); + if(!l && vex.l) + ADDx_U12(ed, ed, 4); + } else { + VSSHRQ_32(q0, v2, 31); + VMOVSto(x4, q0, 0); + CBZx(x4, 4+1*4); + VLD1_32(v1, 0, ed); + ADDx_U12(ed, ed, 4); + VMOVSto(x4, q0, 1); + CBZx(x4, 4+1*4); + VLD1_32(v1, 1, ed); + ADDx_U12(ed, ed, 4); + VMOVSto(x4, q0, 2); + CBZx(x4, 4+1*4); + VLD1_32(v1, 2, ed); + ADDx_U12(ed, ed, 4); + VMOVSto(x4, q0, 3); + CBZx(x4, 4+1*4); + VLD1_32(v1, 3, ed); + if(!l && vex.l) + ADDx_U12(ed, ed, 4); + } + VMOVQ(v0, v1); } - if(rex.w) - VSSHRQ_64(q0, v2, 63); - else - VSSHRQ_32(q0, v2, 31); - VANDQ(v0, v1, q0); } if(!vex.l) YMM0(gd); break; case 0x8E: - INST_NAME("VMASKMOVD/Q Ex, Vx, Gx"); + INST_NAME("VPMASKMOVD/Q Ex, Vx, Gx"); nextop = F8; q0 = fpu_get_scratch(dyn, ninst); for(int l=0; l<1+vex.l; ++l) { @@ -1208,7 +1257,18 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip } YMM0(gd); break; - + case 0x9A: + INST_NAME("VFNMSUB132PS/D Gx, Vx, Ex"); + nextop = F8; + q0 = fpu_get_scratch(dyn, ninst); + for(int l=0; l<1+vex.l; ++l) { + if(!l) { GETGX_VXEX(v0, v2, v1, 0); } else { GETGY_VYEY(v0, v2, v1); } + if(rex.w) VFNEGQD(q0, v2); else VFNEGQS(q0, v2); + if(rex.w) VFMLAQD(q0, v0, v1); else VFMLAQS(q0, v0, v1); + VMOVQ(v0, q0); + } + if(!vex.l) YMM0(gd); + break; case 0x9B: INST_NAME("VFMSUB132SS/D Gx, Vx, Ex"); nextop = F8; @@ -1233,7 +1293,7 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip if(!l && v0!=v2) q0 = fpu_get_scratch(dyn, ninst); if(v0!=v2) VMOVQ(q0, v2); else q0 = v2; if(rex.w) VFMLSQD(q0, v0, v1); else VFMLSQS(q0, v0, v1); - VMOVQ(v0, q0); + if(q0!=v0) VMOVQ(v0, q0); } if(!vex.l) YMM0(gd); break; @@ -1271,6 +1331,27 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip YMM0(gd); break; + case 0xA6: + INST_NAME("VFMADDSUB213PS/D Gx, Vx, Ex"); + nextop = F8; + q0 = fpu_get_scratch(dyn, ninst); + TABLE64(x2, (rex.w)?((uintptr_t)&addsubpd):((uintptr_t)&addsubps)); + VLDR128_U12(q0, x2, 0); + q1 = fpu_get_scratch(dyn, ninst); + for(int l=0; l<1+vex.l; ++l) { + if(!l) { GETGX_VXEX(v0, v2, v1, 0); } else { GETGY_VYEY(v0, v2, v1); } + if(rex.w) { + VFMULQD(q1, v1, q0); + VFMLAQD(q1, v0, v2); + } else { + VFMULQS(q1, v1, q0); + VFMLAQS(q1, v0, v2); + } + VMOVQ(v0, q1); + } + if(!vex.l) YMM0(gd); + break; + case 0xA8: INST_NAME("VFMADD213PS/D Gx, Vx, Ex"); nextop = F8; @@ -1404,9 +1485,6 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip INST_NAME("VFMADDSUB231PS/D Gx, Vx, Ex"); nextop = F8; q0 = fpu_get_scratch(dyn, ninst); - static float addsubps[4] = {-1.f, 1.f, -1.f, 1.f}; - static double addsubpd[2] = {-1., 1.}; - MAYUSE(addsubps); MAYUSE(addsubpd); TABLE64(x2, (rex.w)?((uintptr_t)&addsubpd):((uintptr_t)&addsubps)); VLDR128_U12(q0, x2, 0); for(int l=0; l<1+vex.l; ++l) { diff --git a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c index 08a0482591c74c7fc391c3054e07988b6d5872ea..d4e0400ec65da02df7f8cf2a692518ec68fa9897 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c @@ -215,6 +215,21 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, VMOVeS(v0, 0, d0, 0); YMM0(gd); break; + case 0x53: + INST_NAME("VRCPSS Gx, Vx, Ex"); + nextop = F8; + GETGX(v0, 1); + GETVX(v2, 0); + GETEXSS(v1, 0, 0); + d0 = fpu_get_scratch(dyn, ninst); + FMOVS_8(d0, 0b01110000); //1.0f + FDIVS(d0, d0, v1); + if(v0!=v2) { + VMOVQ(v0, v2); + } + VMOVeS(v0, 0, d0, 0); + YMM0(gd); + break; case 0x58: INST_NAME("VADDSS Gx, Vx, Ex"); diff --git a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f38.c new file mode 100644 index 0000000000000000000000000000000000000000..b1bfd39e5344328d897391b7ec4e4eb323704c4e --- /dev/null +++ b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f38.c @@ -0,0 +1,78 @@ +#include +#include +#include +#include + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" +#include "my_cpuid.h" +#include "emu/x87emu_private.h" +#include "emu/x64shaext.h" + +#include "arm64_printer.h" +#include "dynarec_arm64_private.h" +#include "dynarec_arm64_functions.h" +#include "dynarec_arm64_helper.h" + +uintptr_t dynarec64_AVX_F3_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, vex_t vex, int* ok, int* need_epilog) +{ + (void)ip; (void)need_epilog; + + uint8_t opcode = F8; + uint8_t nextop, u8; + uint8_t gd, ed, vd; + uint8_t wback, wb1, wb2; + uint8_t eb1, eb2, gb1, gb2; + int32_t i32, i32_; + int cacheupd = 0; + int v0, v1, v2; + int q0, q1, q2; + int d0, d1, d2; + int s0; + uint64_t tmp64u; + int64_t j64; + int64_t fixedaddress; + int unscaled; + MAYUSE(wb1); + MAYUSE(wb2); + MAYUSE(eb1); + MAYUSE(eb2); + MAYUSE(gb1); + MAYUSE(gb2); + MAYUSE(q0); + MAYUSE(q1); + MAYUSE(d0); + MAYUSE(d1); + MAYUSE(s0); + MAYUSE(j64); + MAYUSE(cacheupd); + + rex_t rex = vex.rex; + + switch(opcode) { + + case 0xF7: + INST_NAME("SARX Gd, Ed, Vd"); + nextop = F8; + GETGD; + GETED(0); + GETVD; + ANDx_mask(x3, vd, 1, 0, rex.w?5:4); // mask 0x3f/0x1f + ASRxw_REG(gd, ed, x3); + break; + + default: + DEFAULT; + } + return addr; +} diff --git a/src/dynarec/arm64/dynarec_arm64_emit_logic.c b/src/dynarec/arm64/dynarec_arm64_emit_logic.c index dcdffdab4796bddb0a4c45d21d914083cb3929d7..8e6b9bff0a2fb4f45f53b5671690358c424f5929 100644 --- a/src/dynarec/arm64/dynarec_arm64_emit_logic.c +++ b/src/dynarec/arm64/dynarec_arm64_emit_logic.c @@ -34,18 +34,36 @@ void emit_or32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, IFX(X_PEND) { STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); } - IFX(X_CF | X_AF | X_OF) { - MOV32w(s3, (1<>6)&0x3F); } else { ANDw_mask(s1, s1, mask&0x3F, (mask>>6)&0x3F); } } else { MOV32w(s3, c&0xff); - IFX(X_ZF) { + IFX(X_ZF|X_SF) { ANDSw_REG(s1, s1, s3); } else { ANDw_REG(s1, s1, s3); @@ -399,12 +503,16 @@ void emit_and8c(dynarec_arm_t* dyn, int ninst, int s1, int32_t c, int s3, int s4 BICw(xFlags, xFlags, s3); } IFX(X_ZF) { - CSETw(s3, cEQ); - BFIw(xFlags, s3, F_ZF, 1); + IFNATIVE(NF_EQ) {} else { + CSETw(s3, cEQ); + BFIw(xFlags, s3, F_ZF, 1); + } } IFX(X_SF) { - LSRw(s3, s1, 7); - BFIw(xFlags, s3, F_SF, 1); + IFNATIVE(NF_SF) {} else { + LSRw(s3, s1, 7); + BFIw(xFlags, s3, F_SF, 1); + } } IFX(X_PF) { emit_pf(dyn, ninst, s1, s4); @@ -571,13 +679,19 @@ void emit_and16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) MOV32w(s3, (1<0 - BFCw(xFlags, F_SF, 1); + IFNATIVE(NF_SF) {} else { + // no sign if c>0 + BFCw(xFlags, F_SF, 1); + } + } + if(box64_dynarec_test) + IFX(X_AF) { + BFCw(xFlags, F_AF, 1); + } + IFX(X_PF) { + emit_pf(dyn, ninst, s1, s4); + } +} + +// emit SAR32 instruction, from s1 , s2, store result in s1 using s3 and s4 as scratch, s2 can be same as s3 +void emit_sar32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4) +{ + MAYUSE(s2); + int64_t j64; + MAYUSE(j64); + + IFX(X_PEND) { + STRxw_U12(s1, xEmu, offsetof(x64emu_t, op1)); + STRxw_U12(s2, xEmu, offsetof(x64emu_t, op2)); + SET_DF(s4, rex.w?d_sar64:d_sar32); + } else IFX(X_ALL) { + SET_DFNONE(s4); + } + IFX(X_CF) { + SUBxw_U12(s3, s2, 1); + ASRxw_REG(s3, s1, s3); + BFIw(xFlags, s3, 0, 1); + } + IFX(X_OF) { + BFCw(xFlags, F_OF, 1); + } + ASRxw_REG(s1, s1, s2); + IFX(X_PEND) { + STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); + } + int need_tst = 0; + IFX(X_ZF) need_tst = 1; + IFXNATIVE(X_SF, NF_SF) need_tst = 1; + if(need_tst) TSTxw_REG(s1, s1); + IFX(X_ZF) { + IFNATIVE(NF_EQ) {} else { + CSETw(s4, cEQ); + BFIw(xFlags, s4, F_ZF, 1); + } + } + IFX(X_SF) { + IFNATIVE(NF_SF) {} else { + LSRxw(s4, s1, (rex.w)?63:31); + BFIx(xFlags, s4, F_SF, 1); + } } if(box64_dynarec_test) IFX(X_AF) { @@ -259,17 +338,24 @@ void emit_sar32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i IFX(X_PEND) { STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); } + int need_tst = 0; + IFX(X_ZF) need_tst = 1; + IFXNATIVE(X_SF, NF_SF) need_tst = 1; + if(need_tst) TSTxw_REG(s1, s1); IFX(X_ZF) { - TSTxw_REG(s1, s1); - CSETw(s4, cEQ); - BFIw(xFlags, s4, F_ZF, 1); + IFNATIVE(NF_EQ) {} else { + CSETw(s4, cEQ); + BFIw(xFlags, s4, F_ZF, 1); + } } IFX(X_SF) { - LSRxw(s4, s1, (rex.w)?63:31); - BFIx(xFlags, s4, F_SF, 1); + IFNATIVE(NF_SF) {} else { + LSRxw(s4, s1, (rex.w)?63:31); + BFIx(xFlags, s4, F_SF, 1); + } } IFX(X_OF) - if(c==1) { + if(c==1 || box64_dynarec_test) { BFCw(xFlags, F_OF, 1); } if(box64_dynarec_test) @@ -365,20 +451,29 @@ void emit_shl8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s LSLw(s3, s1, c-1); BFXILw(xFlags, s3, 7, 1); // insert F_CF from s3[7:1] } - MOVw_REG(s1, xZR); + IFXNATIVE(X_ZF|X_SF, NF_EQ|NF_SF) { + SUBSw_REG(s1, s1, s1); + } else { + MOVw_REG(s1, xZR); + } + IFX(X_PEND) { + STRB_U12(s1, xEmu, offsetof(x64emu_t, res)); + } IFX(X_OF) { BFCw(xFlags, F_OF, 1); } IFX(X_SF) { - BFCw(xFlags, F_SF, 1); + IFNATIVE(NF_SF) {} else BFCw(xFlags, F_SF, 1); } if(box64_dynarec_test) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } IFX(X_PF | X_ZF) { - MOV32w(s3, 1); - IFX(X_ZF) { - BFIw(xFlags, s3, F_ZF, 1); + IFNATIVE(NF_EQ) {IFX(X_PF) {MOV32w(s3, 1);}} else { + MOV32w(s3, 1); + IFX(X_ZF) { + BFIw(xFlags, s3, F_ZF, 1); + } } IFX(X_PF) { BFIw(xFlags, s3, F_PF, 1); @@ -487,8 +582,8 @@ void emit_sar8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) } COMP_ZFSF(s1, 8) IFX(X_OF) { - CMPSw_U12(s2, 1); - Bcond(cNE, 4+4); + SUBw_U12(s4, s2, 1); + CBNZw(s4, 4+4); BFCw(xFlags, F_OF, 1); } if(box64_dynarec_test) @@ -629,17 +724,29 @@ void emit_shl16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int LSLw(s3, s1, c-1); BFXILw(xFlags, s3, 15, 1); // insert F_CF from s3[15:1] } - MOVw_REG(s1, xZR); + IFXNATIVE(X_ZF|X_SF, NF_EQ|NF_SF) { + SUBSw_REG(s1, s1, s1); + } else { + MOVw_REG(s1, xZR); + } + IFX(X_PEND) { + STRH_U12(s1, xEmu, offsetof(x64emu_t, res)); + } IFX(X_OF) { BFCw(xFlags, F_OF, 1); } IFX(X_SF) { - BFCw(xFlags, F_SF, 1); + IFNATIVE(NF_SF) {} else BFCw(xFlags, F_SF, 1); + } + if(box64_dynarec_test) IFX(X_AF) { + BFCw(xFlags, F_AF, 1); } IFX(X_PF | X_ZF) { - MOV32w(s3, 1); - IFX(X_ZF) { - BFIw(xFlags, s3, F_ZF, 1); + IFNATIVE(NF_EQ) {IFX(X_PF) {MOV32w(s3, 1);}} else { + MOV32w(s3, 1); + IFX(X_ZF) { + BFIw(xFlags, s3, F_ZF, 1); + } } IFX(X_PF) { BFIw(xFlags, s3, F_PF, 1); @@ -664,8 +771,8 @@ void emit_shr16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) BFIw(xFlags, s4, 0, 1); } IFX(X_OF) { - CMPSw_U12(s2, 1); // if s2==1 - Bcond(cNE, 4+2*4); + SUBw_U12(s4, s2, 1); // if s2==1 + CBNZw(s4, 4+2*4); LSRw(s4, s1, 15); BFIw(xFlags, s4, F_OF, 1); } @@ -745,8 +852,8 @@ void emit_sar16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) } COMP_ZFSF(s1, 16) IFX(X_OF) { - CMPSw_U12(s2, 1); - Bcond(cNE, 4+4); + SUBw_U12(s4, s2, 1); + CBNZw(s4, 4+4); BFCw(xFlags, F_OF, 1); } if(box64_dynarec_test) @@ -798,23 +905,9 @@ void emit_rol32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i if (!c) return; - IFX(X_PEND) { - MOV32w(s3, c); - STRxw_U12(s3, xEmu, offsetof(x64emu_t, op2)); - SET_DF(s4, rex.w?d_rol64:d_rol32); - } else IFX(X_ALL) { - SET_DFNONE(s4); - } - if(!c) { - IFX(X_PEND) { - STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); - } - return; - } + SET_DFNONE(s4); + RORxw(s1, s1, (rex.w?64:32)-c); - IFX(X_PEND) { - STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); - } IFX(X_CF) { BFIw(xFlags, s1, F_CF, 1); } @@ -833,23 +926,9 @@ void emit_ror32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i if (!c) return; - IFX(X_PEND) { - MOV32w(s3, c); - STRxw_U12(s3, xEmu, offsetof(x64emu_t, op2)); - SET_DF(s4, rex.w?d_ror64:d_ror32); - } else IFX(X_ALL) { - SET_DFNONE(s4); - } - if(!c) { - IFX(X_PEND) { - STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); - } - return; - } + SET_DFNONE(s4); + RORxw(s1, s1, c); - IFX(X_PEND) { - STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); - } IFX(X_CF) { BFXILxw(xFlags, s1, rex.w?63:31, 1); } @@ -869,21 +948,13 @@ void emit_rol8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s if (!c) return; - IFX(X_PEND) { - MOV32w(s3, c); - STRB_U12(s3, xEmu, offsetof(x64emu_t, op2)); - SET_DF(s4, d_rol8); - } else IFX(X_ALL) { - SET_DFNONE(s4); - } + SET_DFNONE(s4); + if(c&7) { int rc = 8-(c&7); ORRw_REG_LSL(s1, s1, s1, 8); LSRw(s1, s1, rc); } - IFX(X_PEND) { - STRB_U12(s1, xEmu, offsetof(x64emu_t, res)); - } IFX(X_CF) { BFIw(xFlags, s1, F_CF, 1); } @@ -902,20 +973,12 @@ void emit_ror8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s if (!c) return; - IFX(X_PEND) { - MOV32w(s3, c); - STRB_U12(s3, xEmu, offsetof(x64emu_t, op2)); - SET_DF(s4, d_ror8); - } else IFX(X_ALL) { - SET_DFNONE(s4); - } + SET_DFNONE(s4); + if(c&7) { ORRw_REG_LSL(s1, s1, s1, 8); LSRw(s1, s1, c&7); } - IFX(X_PEND) { - STRB_U12(s1, xEmu, offsetof(x64emu_t, res)); - } IFX(X_CF) { BFXILw(xFlags, s1, 7, 1); } @@ -935,21 +998,13 @@ void emit_rol16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int if (!c) return; - IFX(X_PEND) { - MOV32w(s3, c); - STRH_U12(s3, xEmu, offsetof(x64emu_t, op2)); - SET_DF(s4, d_rol16); - } else IFX(X_ALL) { - SET_DFNONE(s4); - } + SET_DFNONE(s4); + if(c&15) { int rc = 16-(c&15); ORRw_REG_LSL(s1, s1, s1, 16); LSRw(s1, s1, rc); } - IFX(X_PEND) { - STRH_U12(s1, xEmu, offsetof(x64emu_t, res)); - } IFX(X_CF) { BFIw(xFlags, s1, F_CF, 1); } @@ -968,20 +1023,12 @@ void emit_ror16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int if (!c) return; - IFX(X_PEND) { - MOV32w(s3, c); - STRH_U12(s3, xEmu, offsetof(x64emu_t, op2)); - SET_DF(s4, d_ror16); - } else IFX(X_ALL) { - SET_DFNONE(s4); - } + SET_DFNONE(s4); + if(c&15) { ORRw_REG_LSL(s1, s1, s1, 16); LSRw(s1, s1, c&15); } - IFX(X_PEND) { - STRH_U12(s1, xEmu, offsetof(x64emu_t, res)); - } IFX(X_CF) { BFXILw(xFlags, s1, 15, 1); } @@ -1014,9 +1061,6 @@ void emit_rcl8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s } ORRw_REG_LSL(s1, s1, s1, 9); // insert s1 again LSRw_IMM(s1, s1, 9-c); // do the rcl - IFX(X_PEND) { - STRB_U12(s1, xEmu, offsetof(x64emu_t, res)); - } IFX(X_OF|X_CF) { IFX(X_CF) { BFIw(xFlags, s3, F_CF, 1); @@ -1057,9 +1101,6 @@ void emit_rcr8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s BFIw(xFlags, s3, F_OF, 1); } } - IFX(X_PEND) { - STRB_U12(s1, xEmu, offsetof(x64emu_t, res)); - } } // emit RCL16 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch @@ -1082,9 +1123,6 @@ void emit_rcl16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int } ORRx_REG_LSL(s1, s1, s1, 17); // insert s1 again LSRx_IMM(s1, s1, 17-c); // do the rcl - IFX(X_PEND) { - STRH_U12(s1, xEmu, offsetof(x64emu_t, res)); - } IFX(X_CF) { BFIw(xFlags, s3, F_CF, 1); } @@ -1123,9 +1161,6 @@ void emit_rcr16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int BFIw(xFlags, s3, F_OF, 1); } } - IFX(X_PEND) { - STRH_U12(s1, xEmu, offsetof(x64emu_t, res)); - } } // emit RCL32/RCL64 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch @@ -1133,6 +1168,8 @@ void emit_rcl32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i { MAYUSE(s1); MAYUSE(s3); MAYUSE(s4); + if(!c) return; + SET_DFNONE(s4); IFX(X_OF|X_CF) { @@ -1146,9 +1183,6 @@ void emit_rcl32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i BFIxw(s4, xFlags, c-1, 1); ORRxw_REG_LSR(s1, s4, s1, (rex.w?65:33)-c); } - IFX(X_PEND) { - STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); - } IFX(X_CF) { BFIw(xFlags, s3, F_CF, 1); } @@ -1164,6 +1198,8 @@ void emit_rcr32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i { MAYUSE(s1); MAYUSE(s3); MAYUSE(s4); + if(!c) return; + SET_DFNONE(s4); IFX(X_OF) { @@ -1186,9 +1222,6 @@ void emit_rcr32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i IFX(X_CF) { BFIw(wFlags, s3, 0, 1); } - IFX(X_PEND) { - STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); - } } // emit SHRD32 instruction, from s1, fill s2 , constant c, store result in s1 using s3 and s4 as scratch @@ -1213,7 +1246,7 @@ void emit_shrd32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, uint BFXILxw(xFlags, s1, c-1, 1); // set CF } IFX(X_OF) { - if(c==1) { + if((c==1) || box64_dynarec_test) { LSRxw(s4, s1, rex.w?63:31); BFIw(xFlags, s4, F_OF, 1); // store sign for later use } @@ -1222,14 +1255,21 @@ void emit_shrd32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, uint IFX(X_PEND) { STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); } + int need_tst = 0; + IFX(X_ZF) need_tst = 1; + IFXNATIVE(X_SF, NF_SF) need_tst = 1; + if(need_tst) TSTxw_REG(s1, s1); IFX(X_ZF) { - TSTxw_REG(s1, s1); - CSETw(s4, cEQ); - BFIw(xFlags, s4, F_ZF, 1); + IFNATIVE(NF_EQ) {} else { + CSETw(s4, cEQ); + BFIw(xFlags, s4, F_ZF, 1); + } } IFX(X_SF) { - LSRxw(s4, s1, (rex.w)?63:31); - BFIx(xFlags, s4, F_SF, 1); + IFNATIVE(NF_SF) {} else { + LSRxw(s4, s1, (rex.w)?63:31); + BFIx(xFlags, s4, F_SF, 1); + } } IFX(X_OF) { if(c==1) { @@ -1325,18 +1365,25 @@ void emit_shrd32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s IFX(X_PEND) { STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); } + int need_tst = 0; + IFX(X_ZF) need_tst = 1; + IFXNATIVE(X_SF, NF_SF) need_tst = 1; + if(need_tst) TSTxw_REG(s1, s1); IFX(X_ZF) { - TSTxw_REG(s1, s1); - CSETw(s4, cEQ); - BFIw(xFlags, s4, F_ZF, 1); + IFNATIVE(NF_EQ) {} else { + CSETw(s4, cEQ); + BFIw(xFlags, s4, F_ZF, 1); + } } IFX(X_SF) { - LSRxw(s4, s1, (rex.w)?63:31); - BFIw(xFlags, s4, F_SF, 1); + IFNATIVE(NF_SF) {} else { + LSRxw(s4, s1, (rex.w)?63:31); + BFIx(xFlags, s4, F_SF, 1); + } } IFX(X_OF) { - CMPSw_U12(s5, 1); - Bcond(cNE, 4+2*4); + SUBw_U12(s3, s5, 1); + CBNZw(s3, 4+2*4); //flagless jump UBFXx(s3, s1, rex.w?63:31, 1); EORw_REG_LSL(xFlags, xFlags, s3, F_OF); // OF is set if sign changed } @@ -1371,18 +1418,25 @@ void emit_shld32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s IFX(X_PEND) { STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); } + int need_tst = 0; + IFX(X_ZF) need_tst = 1; + IFXNATIVE(X_SF, NF_SF) need_tst = 1; + if(need_tst) TSTxw_REG(s1, s1); IFX(X_ZF) { - TSTxw_REG(s1, s1); - CSETw(s4, cEQ); - BFIw(xFlags, s4, F_ZF, 1); + IFNATIVE(NF_EQ) {} else { + CSETw(s4, cEQ); + BFIw(xFlags, s4, F_ZF, 1); + } } IFX(X_SF) { - LSRxw(s4, s1, (rex.w)?63:31); - BFIx(xFlags, s4, F_SF, 1); + IFNATIVE(NF_SF) {} else { + LSRxw(s4, s1, (rex.w)?63:31); + BFIx(xFlags, s4, F_SF, 1); + } } IFX(X_OF) { - CMPSw_U12(s5, 1); - Bcond(cNE, 4+2*4); + SUBw_U12(s3, s5, 1); + CBNZw(s3, 4+2*4); //flagless jump UBFXx(s3, s1, rex.w?63:31, 1); EORw_REG_LSL(xFlags, xFlags, s3, F_OF); // OF is set if sign changed } @@ -1462,8 +1516,8 @@ void emit_shrd16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s5, int s3, } COMP_ZFSF(s1, 16) IFX(X_OF) { - CMPSw_U12(s5, 1); - Bcond(cNE, 4+2*4); + SUBw_U12(s3, s5, 1); + CBNZw(s3, 4+2*4); UBFXw(s3, s1, 15, 1); EORw_REG_LSL(xFlags, xFlags, s3, F_OF); // OF is set if sign changed } @@ -1553,8 +1607,8 @@ void emit_shld16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s5, int s3, } COMP_ZFSF(s1, 16) IFX(X_OF) { - CMPSw_U12(s5, 1); - Bcond(cNE, 4+2*4); + SUBw_U12(s3, s5, 1); + CBNZw(s3, 4+2*4); UBFXw(s3, s1, 15, 1); EORw_REG_LSL(xFlags, xFlags, s3, F_OF); // OF is set if sign changed } diff --git a/src/dynarec/arm64/dynarec_arm64_emit_tests.c b/src/dynarec/arm64/dynarec_arm64_emit_tests.c index 6a78ce8e4c8ec2f9644dcde7fbf3aee341bf6313..1b5184f4da328559a1e123acae593a5b65cb1bfb 100644 --- a/src/dynarec/arm64/dynarec_arm64_emit_tests.c +++ b/src/dynarec/arm64/dynarec_arm64_emit_tests.c @@ -47,21 +47,31 @@ void emit_cmp32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3 BFIx(xFlags, s4, F_AF, 1); // AF: bc & 0x08 } IFX(X_ZF) { - CSETw(s4, cEQ); - BFIw(xFlags, s4, F_ZF, 1); + IFNATIVE(NF_EQ) {} else { + CSETw(s4, cEQ); + BFIw(xFlags, s4, F_ZF, 1); + } } IFX(X_CF) { // inverted carry - CSETw(s4, cCC); - BFIw(xFlags, s4, F_CF, 1); + IFNATIVE(NF_CF) { + GEN_INVERTED_CARRY(); + } else { + CSETw(s4, cCC); + BFIw(xFlags, s4, F_CF, 1); + } } IFX(X_OF) { - CSETw(s4, cVS); - BFIw(xFlags, s4, F_OF, 1); + IFNATIVE(NF_VF) {} else { + CSETw(s4, cVS); + BFIw(xFlags, s4, F_OF, 1); + } } IFX(X_SF) { - LSRxw(s3, s5, (rex.w)?63:31); - BFIw(xFlags, s3, F_SF, 1); + IFNATIVE(NF_SF) {} else { + LSRxw(s3, s5, (rex.w)?63:31); + BFIw(xFlags, s3, F_SF, 1); + } } IFX(X_PF) { emit_pf(dyn, ninst, s5, s4); @@ -83,17 +93,32 @@ void emit_cmp32_0(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s3, int SUBSxw_U12(s3, s1, 0); // res = s1 - 0 // and now the tricky ones (and mostly unused), PF and AF // bc = (res & (~d | s)) | (~d & s) => is 0 here... - IFX(X_OF|X_AF|X_CF) { - MOV32w(s4, (1<>3)&7) { case 1: - INST_NAME("LOCK CMPXCHG8B Gq, Eq"); + if (rex.w) { + INST_NAME("LOCK CMPXCHG16B Gq, Eq"); + } else { + INST_NAME("LOCK CMPXCHG8B Gq, Eq"); + } SETFLAGS(X_ZF, SF_SUBSET); addr = geted(dyn, addr, ninst, nextop, &wback, x1, &fixedaddress, NULL, 0, 0, rex, LOCK_LOCK, 0, 0); if(!ALIGNED_ATOMICxw) { @@ -715,7 +719,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin UFLAG_IF { CMPSxw_REG(x2, xRAX); CCMPxw(x3, xRDX, 0, cEQ); - CSETw(x1, cEQ); + IFNATIVE(NF_EQ) {} else {CSETw(x1, cEQ);} } MOVx_REG(xRAX, x2); MOVx_REG(xRDX, x3); @@ -731,7 +735,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXPxw(x4, xRBX, xRCX, wback); CBNZx_MARKLOCK(x4); UFLAG_IF { - MOV32w(x1, 1); + IFNATIVE(NF_EQ) {} else {MOV32w(x1, 1);} } B_MARK3_nocond; MARK; @@ -740,7 +744,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MOVxw_REG(xRAX, x2); MOVxw_REG(xRDX, x3); UFLAG_IF { - MOV32w(x1, 0); + IFNATIVE(NF_EQ) {} else {MOV32w(x1, 0);} } if(!ALIGNED_ATOMICxw) { B_MARK3_nocond; @@ -757,7 +761,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CBNZx_MARK2(x4); STPxw_S7_offset(xRBX, xRCX, wback, 0); UFLAG_IF { - MOV32w(x1, 1); + IFNATIVE(NF_EQ) {} else {MOV32w(x1, 1);} } B_MARK3_nocond; MARKSEG; @@ -766,13 +770,13 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MOVxw_REG(xRAX, x2); MOVxw_REG(xRDX, x3); UFLAG_IF { - MOV32w(x1, 0); + IFNATIVE(NF_EQ) {} else {MOV32w(x1, 0);} } } MARK3; SMDMB(); UFLAG_IF { - BFIw(xFlags, x1, F_ZF, 1); + IFNATIVE(NF_EQ) {} else {BFIw(xFlags, x1, F_ZF, 1);} } break; default: @@ -831,6 +835,37 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SMDMB(); } break; + case 0x20: + INST_NAME("LOCK AND Eb, Gb"); + SETFLAGS(X_ALL, SF_SET_PENDING); + nextop = F8; + GETGD; + if(MODREG) { + GETEB(x1, 0); + GETGB(x2); + emit_and8(dyn, ninst, x1, x2, x4, x5); + EBBACK; + } else { + addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, NULL, 0, 0, rex, LOCK_LOCK, 0, 0); + GETGB(x5); + if(arm64_atomics) { + MVNxw_REG(x1, gd); + UFLAG_IF { + LDCLRALB(x1, x1, wback); + emit_and8(dyn, ninst, x1, gd, x3, x4); + } else { + STCLRLB(x1, wback); + } + } else { + MARKLOCK; + LDAXRB(x1, wback); + emit_and8(dyn, ninst, x1, gd, x3, x4); + STLXRB(x3, x1, wback); + CBNZx_MARKLOCK(x3); + SMDMB(); + } + } + break; case 0x21: INST_NAME("LOCK AND Ed, Gd"); SETFLAGS(X_ALL, SF_SET_PENDING); diff --git a/src/dynarec/arm64/dynarec_arm64_f30f.c b/src/dynarec/arm64/dynarec_arm64_f30f.c index eb487766c120f09c3490aea09cd3f741fdc722e8..752595fdd6e3c36e0f05bf21a8ed6e3e7cdaf8ac 100644 --- a/src/dynarec/arm64/dynarec_arm64_f30f.c +++ b/src/dynarec/arm64/dynarec_arm64_f30f.c @@ -184,10 +184,10 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n SETFLAGS(X_OF, SF_SUBSET); GETED(0); GETGD; - MRS_nzvc(x3); + MRS_nzcv(x3); LSRw(x4, xFlags, F_OF); BFIx(x3, x4, 29, 1); // set C - MSR_nzvc(x3); // load CC into ARM CF + MSR_nzcv(x3); // load CC into ARM CF IFX(X_OF) { ADCSxw_REG(gd, gd, ed); CSETw(x3, cCS); @@ -325,7 +325,7 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VMOVeS(v0, 0, d0, 0); // to not erase uper part #else FCMPS(v0, v1); - B_NEXT(cLS); //Less than or equal + B_NEXT(cCC); //Less than VMOVeS(v0, 0, v1, 0); // to not erase uper part #endif break; @@ -350,7 +350,7 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VMOVeS(v0, 0, d0, 0); // to not erase uper part #else FCMPS(v0, v1); - B_NEXT(cGE); //Greater than or equal + B_NEXT(cGT); //Greater than VMOVeS(v0, 0, v1, 0); // to not erase uper part #endif break; diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c index ee1104e9870862afe51ac1dd22a695240891f337..1400f977d7a7e4a2a3502330679e9fa567307f24 100644 --- a/src/dynarec/arm64/dynarec_arm64_functions.c +++ b/src/dynarec/arm64/dynarec_arm64_functions.c @@ -143,6 +143,7 @@ int internal_mark_ymm(dynarec_arm_t* dyn, int t, int ymm, int reg) // found a slot! dyn->n.neoncache[reg].t=t; dyn->n.neoncache[reg].n=ymm; + dyn->n.news |= (1<news) { // remove the newly created neoncache - for(int i=0; i<24; ++i) + for(int i=0; i<32; ++i) if(cache->news&(1<neoncache[i].v = 0; cache->news = 0; @@ -677,6 +678,22 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r dyn->insts[ninst].x64.need_before, dyn->insts[ninst].x64.need_after, dyn->smwrite, dyn->insts[ninst].will_write, dyn->insts[ninst].last_write); + if(dyn->insts[ninst].nat_flags_op) { + if(dyn->insts[ninst].nat_flags_op==NAT_FLAG_OP_TOUCH && dyn->insts[ninst].before_nat_flags) + printf_log(LOG_NONE, " NF:%d/read:%x", dyn->insts[ninst].nat_flags_op, dyn->insts[ninst].before_nat_flags); + else + printf_log(LOG_NONE, " NF:%d", dyn->insts[ninst].nat_flags_op); + } + if(dyn->insts[ninst].use_nat_flags || dyn->insts[ninst].set_nat_flags || dyn->insts[ninst].need_nat_flags) + printf_log(LOG_NONE, " nf:%hhx/%hhx/%hhx", dyn->insts[ninst].set_nat_flags, dyn->insts[ninst].use_nat_flags, dyn->insts[ninst].need_nat_flags); + if(dyn->insts[ninst].invert_carry) + printf_log(LOG_NONE, " CI"); + if(dyn->insts[ninst].gen_inverted_carry) + printf_log(LOG_NONE, " gic"); + if(dyn->insts[ninst].before_nat_flags&NF_CF) + printf_log(LOG_NONE, " %ccb", dyn->insts[ninst].normal_carry_before?'n':'i'); + if(dyn->insts[ninst].need_nat_flags&NF_CF) + printf_log(LOG_NONE, " %cc", dyn->insts[ninst].normal_carry?'n':'i'); if(dyn->insts[ninst].pred_sz) { dynarec_log(LOG_NONE, ", pred="); for(int ii=0; iiinsts[ninst].pred_sz; ++ii) @@ -795,3 +812,192 @@ int fpu_is_st_freed(dynarec_native_t* dyn, int ninst, int st) { return (dyn->n.tags&(0b11<<(st*2)))?1:0; } + + +uint8_t mark_natflag(dynarec_arm_t* dyn, int ninst, uint8_t flag, int before) +{ + if(dyn->insts[ninst].x64.set_flags && !before) { + dyn->insts[ninst].set_nat_flags |= flag; + if(dyn->insts[ninst].x64.use_flags) { + dyn->insts[ninst].use_nat_flags |= flag; + } + } else { + if(before) + dyn->insts[ninst].use_nat_flags_before |= flag; + else + dyn->insts[ninst].use_nat_flags |= flag; + } + return flag; +} + +uint8_t flag2native(uint8_t flags) +{ + uint8_t ret = 0; + #ifdef ARM64 + if(flags&X_ZF) ret|=NF_EQ; + if(flags&X_SF) ret|=NF_SF; + if(flags&X_OF) ret|=NF_VF; + if(flags&X_CF) ret|=NF_CF; + #else + // no native flags on rv64 or la64 + #endif + return ret; +} + +int flagIsNative(uint8_t flags) +{ + if(flags&(X_AF|X_PF)) return 0; + return 1; +} + +static uint8_t getNativeFlagsUsed(dynarec_arm_t* dyn, int start, uint8_t flags) +{ + // propagate and check wich flags are actually used + uint8_t used_flags = 0; + int ninst = start; + while(ninstsize) { +//printf_log(LOG_INFO, "getNativeFlagsUsed ninst:%d/%d, flags=%x, used_flags=%x, nat_flags_op_before:%x, nat_flags_op:%x, need_after:%x\n", ninst, start, flags, used_flags, dyn->insts[ninst].nat_flags_op_before, dyn->insts[ninst].nat_flags_op, flag2native(dyn->insts[ninst].x64.need_after)); + // check if this is an opcode that generate flags but consume flags before + if(dyn->insts[ninst].nat_flags_op_before) + return 0; + if(dyn->insts[ninst].nat_flags_op==NAT_FLAG_OP_TOUCH && dyn->insts[ninst].use_nat_flags_before) + used_flags|=dyn->insts[ninst].use_nat_flags_before&flags; + // if the opcode generate flags, return + if(dyn->insts[ninst].nat_flags_op==NAT_FLAG_OP_TOUCH && (start!=ninst)) { + if(used_flags&~dyn->insts[ninst].set_nat_flags) // check partial changes that would destroy flag state + return 0; + return used_flags; + } + // check if there is a callret barrier + if(dyn->insts[ninst].x64.has_callret) + return 0; + // check if flags are used, but not the natives ones + if(ninst!=start && dyn->insts[ninst].x64.use_flags) { + if((flag2native(dyn->insts[ninst].x64.use_flags)&~(dyn->insts[ninst].use_nat_flags))&used_flags) + return 0; + } + // check if flags are still needed + if(!(flag2native(dyn->insts[ninst].x64.need_after)&flags)) + return used_flags; + // check if flags are destroyed, cancel the use then + if(dyn->insts[ninst].nat_flags_op && (start!=ninst)) + return 0; + // check if flags are generated without native option + if((start!=ninst) && dyn->insts[ninst].x64.gen_flags && (flag2native(dyn->insts[ninst].x64.gen_flags&dyn->insts[ninst].x64.need_after)&used_flags)) { + if(used_flags&~flag2native(dyn->insts[ninst].x64.gen_flags&dyn->insts[ninst].x64.need_after)) + return 0; // partial covert, not supported for now (TODO: this might be fixable) + else + return used_flags; // full covert... End of propagation + } + // update used flags + used_flags |= (flag2native(dyn->insts[ninst].x64.need_after)&flags); + // go next + if(!dyn->insts[ninst].x64.has_next) { + // check if it's a jump to an opcode with only 1 preds, then just follow the jump + int jmp = dyn->insts[ninst].x64.jmp_insts; + if(dyn->insts[ninst].x64.jmp && (jmp!=-1) && (getNominalPred(dyn, jmp)==ninst)) + ninst = jmp; + else + return used_flags; + } else + ++ninst; + } + return used_flags; +} + +static void propagateNativeFlags(dynarec_arm_t* dyn, int start) +{ + int ninst = start; + // those are the flags generated by the opcode and used later on + uint8_t flags = dyn->insts[ninst].set_nat_flags&flag2native(dyn->insts[ninst].x64.need_after); + //check if they are actualy used before starting +//printf_log(LOG_INFO, "propagateNativeFlags called for start=%d, flags=%x, will need:%x\n", start, flags, flag2native(dyn->insts[ninst].x64.need_after)); + if(!flags) return; + // also check if some native flags are used but not genereated here + if(flag2native(dyn->insts[ninst].x64.need_after)&~flags) return; + uint8_t used_flags = getNativeFlagsUsed(dyn, start, flags); +//printf_log(LOG_INFO, " will use:%x, carry:%d, generate inverted carry:%d\n", used_flags, used_flags&NF_CF, dyn->insts[ninst].gen_inverted_carry); + if(!used_flags) return; // the flags wont be used, so just cancel + int nc = dyn->insts[ninst].gen_inverted_carry?0:1; + int carry = used_flags&NF_CF; + // propagate + while(ninstsize) { + // check if this is an opcode that generate flags but consume flags before + if((start!=ninst) && dyn->insts[ninst].nat_flags_op==NAT_FLAG_OP_TOUCH) { + if(dyn->insts[ninst].use_nat_flags_before) { + dyn->insts[ninst].before_nat_flags |= used_flags; + if(carry) dyn->insts[ninst].normal_carry_before = nc; + } + // if the opcode generate flags, return + return; + } + // check if flags are generated without native option + if((start!=ninst) && dyn->insts[ninst].x64.gen_flags && (flag2native(dyn->insts[ninst].x64.gen_flags&dyn->insts[ninst].x64.need_after)&used_flags)) + return; + // mark the opcode + uint8_t use_flags = flag2native(dyn->insts[ninst].x64.need_before|dyn->insts[ninst].x64.need_after); + if(dyn->insts[ninst].x64.use_flags) use_flags |= flag2native(dyn->insts[ninst].x64.use_flags); // should not change anything +//printf_log(LOG_INFO, " marking ninst=%d with %x | %x&%x => %x\n", ninst, dyn->insts[ninst].need_nat_flags, used_flags, use_flags, dyn->insts[ninst].need_nat_flags | (used_flags&use_flags)); + dyn->insts[ninst].need_nat_flags |= used_flags&use_flags; + if(carry) dyn->insts[ninst].normal_carry = nc; + if(carry && dyn->insts[ninst].invert_carry) nc = 0; + // check if flags are still needed + if(!(flag2native(dyn->insts[ninst].x64.need_after)&used_flags)) + return; + // go next + if(!dyn->insts[ninst].x64.has_next) { + // check if it's a jump to an opcode with only 1 preds, then just follow the jump + int jmp = dyn->insts[ninst].x64.jmp_insts; + if(dyn->insts[ninst].x64.jmp && (jmp!=-1) && (getNominalPred(dyn, jmp)==ninst)) + ninst = jmp; + else + return; + } else + ++ninst; + } +} + +void updateNatveFlags(dynarec_native_t* dyn) +{ + if(!box64_dynarec_nativeflags) + return; + // backward check if native flags are used + for(int ninst=0; ninstsize; ++ninst) + if(flag2native(dyn->insts[ninst].x64.gen_flags) && (dyn->insts[ninst].nat_flags_op==NAT_FLAG_OP_TOUCH)) { + propagateNativeFlags(dyn, ninst); + } +} + +void rasNativeState(dynarec_arm_t* dyn, int ninst) +{ + dyn->insts[ninst].nat_flags_op = dyn->insts[ninst].set_nat_flags = dyn->insts[ninst].use_nat_flags = dyn->insts[ninst].need_nat_flags = 0; +} + +int nativeFlagsNeedsTransform(dynarec_arm_t* dyn, int ninst) +{ + int jmp = dyn->insts[ninst].x64.jmp_insts; + if(jmp<0) + return 0; + if(!dyn->insts[ninst].x64.need_after || !dyn->insts[jmp].x64.need_before) + return 0; + if(dyn->insts[ninst].set_nat_flags) + return 0; + uint8_t flags_before = dyn->insts[ninst].need_nat_flags; + uint8_t nc_before = dyn->insts[ninst].normal_carry; + if(dyn->insts[ninst].invert_carry) + nc_before = 0; + uint8_t flags_after = dyn->insts[jmp].need_nat_flags; + uint8_t nc_after = dyn->insts[jmp].normal_carry; + if(dyn->insts[jmp].nat_flags_op==NAT_FLAG_OP_TOUCH) { + flags_after = dyn->insts[jmp].before_nat_flags; + nc_after = dyn->insts[jmp].normal_carry_before; + } + uint8_t flags_x86 = flag2native(dyn->insts[jmp].x64.need_before); + flags_x86 &= ~flags_after; + if((flags_before&NF_CF) && (flags_after&NF_CF) && (nc_before!=nc_after)) + return 1; + // all flags_after should be present and none remaining flags_x86 + if(((flags_before&flags_after)!=flags_after) || (flags_before&flags_x86)) + return 1; + return 0; +} \ No newline at end of file diff --git a/src/dynarec/arm64/dynarec_arm64_functions.h b/src/dynarec/arm64/dynarec_arm64_functions.h index e87da74c58ee137285830b5796082b90b83d7688..b17a5bf14c4f1e822939e990cf5ab86a476a9f24 100644 --- a/src/dynarec/arm64/dynarec_arm64_functions.h +++ b/src/dynarec/arm64/dynarec_arm64_functions.h @@ -51,6 +51,16 @@ int neoncache_combine_st(dynarec_arm_t* dyn, int ninst, int a, int b); // with // Do not allow i64 type int neoncache_no_i64(dynarec_arm_t* dyn, int ninst, int st, int a); +// transform x86 flags to native flags +uint8_t flag2native(uint8_t flags); +// mark a instruction as using/generating flags. return flag +uint8_t mark_natflag(dynarec_arm_t* dyn, int ninst, uint8_t flag, int before); +// propage the use of nativeflags or not (done between step 0 and step 1) +void updateNatveFlags(dynarec_arm_t* dyn); +// raz arm speicifc state when an opcode is unused +void rasNativeState(dynarec_arm_t* dyn, int ninst); +// check if natives flags needs some tranform to/from x86 flags +int nativeFlagsNeedsTransform(dynarec_arm_t* dyn, int ninst); // FPU Cache transformation (for loops) // Specific, need to be written by backend int fpuCacheNeedsTransform(dynarec_arm_t* dyn, int ninst); diff --git a/src/dynarec/arm64/dynarec_arm64_helper.c b/src/dynarec/arm64/dynarec_arm64_helper.c index 506167b38d200478472f0cc4988ca568e61b593c..7a29562b2b6a85b6ee1fa6dc93481e46be1b0eca 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.c +++ b/src/dynarec/arm64/dynarec_arm64_helper.c @@ -569,6 +569,9 @@ void jump_to_next(dynarec_arm_t* dyn, uintptr_t ip, int reg, int ninst, int is32 MAYUSE(dyn); MAYUSE(ninst); MESSAGE(LOG_DUMP, "Jump to next\n"); + if(is32bits) + ip &= 0xffffffffLL; + SMEND(); if(reg) { if(reg!=xRIP) { @@ -606,8 +609,14 @@ void jump_to_next(dynarec_arm_t* dyn, uintptr_t ip, int reg, int ninst, int is32 CLEARIP(); #ifdef HAVE_TRACE //MOVx(x3, 15); no access to PC reg - #endif BLR(x2); // save LR... + #else + if (dyn->insts[ninst].x64.has_callret) { + BLR(x2); // save LR... + } else { + BR(x2); + } + #endif } void ret_to_epilog(dynarec_arm_t* dyn, int ninst, rex_t rex) @@ -619,10 +628,10 @@ void ret_to_epilog(dynarec_arm_t* dyn, int ninst, rex_t rex) SMEND(); if(box64_dynarec_callret) { // pop the actual return address for ARM stack - LDPx_S7_postindex(x2, x6, xSP, 16); + LDPx_S7_postindex(xLR, x6, xSP, 16); SUBx_REG(x6, x6, xRIP); // is it the right address? CBNZx(x6, 2*4); - BLR(x2); + RET(xLR); // not the correct return address, regular jump, but purge the stack first, it's unsync now... SUBx_U12(xSP, xSavedSP, 16); } @@ -643,7 +652,7 @@ void ret_to_epilog(dynarec_arm_t* dyn, int ninst, rex_t rex) LDRx_REG_LSL3(x2, x2, x3); UBFXx(x3, xRIP, JMPTABL_START0, JMPTABL_SHIFT0); LDRx_REG_LSL3(x2, x2, x3); - BLR(x2); // save LR + BR(x2); CLEARIP(); } @@ -662,10 +671,10 @@ void retn_to_epilog(dynarec_arm_t* dyn, int ninst, rex_t rex, int n) SMEND(); if(box64_dynarec_callret) { // pop the actual return address for ARM stack - LDPx_S7_postindex(x2, x6, xSP, 16); + LDPx_S7_postindex(xLR, x6, xSP, 16); SUBx_REG(x6, x6, xRIP); // is it the right address? CBNZx(x6, 2*4); - BLR(x2); + RET(xLR); // not the correct return address, regular jump SUBx_U12(xSP, xSavedSP, 16); } @@ -686,14 +695,16 @@ void retn_to_epilog(dynarec_arm_t* dyn, int ninst, rex_t rex, int n) LDRx_REG_LSL3(x2, x2, x3); UBFXx(x3, xRIP, JMPTABL_START0, JMPTABL_SHIFT0); LDRx_REG_LSL3(x2, x2, x3); - BLR(x2); // save LR + BR(x2); CLEARIP(); } -void iret_to_epilog(dynarec_arm_t* dyn, int ninst, int is64bits) +void iret_to_epilog(dynarec_arm_t* dyn, int ninst, int is32bits, int is64bits) { + int64_t j64; //#warning TODO: is64bits MAYUSE(ninst); + MAYUSE(j64); MESSAGE(LOG_DUMP, "IRet to epilog\n"); SMEND(); SET_DFNONE(x2); @@ -716,6 +727,12 @@ void iret_to_epilog(dynarec_arm_t* dyn, int ninst, int is64bits) ANDx_REG(xFlags, xFlags, x1); ORRx_mask(xFlags, xFlags, 1, 0b111111, 0); // xFlags | 0b10 SET_DFNONE(x1); + if(is32bits) { + ANDw_mask(x2, x2, 0, 7); // mask 0xff + // check if return segment is 64bits, then restore rsp too + CMPSw_U12(x2, 0x23); + B_MARKSEG(cEQ); + } // POP RSP if(is64bits) { POP1(x3); //rsp @@ -729,6 +746,7 @@ void iret_to_epilog(dynarec_arm_t* dyn, int ninst, int is64bits) STRw_U12(xZR, xEmu, offsetof(x64emu_t, segs_serial[_SS])); // set new RSP MOVx_REG(xRSP, x3); + MARKSEG; // Ret.... MOV64x(x2, (uintptr_t)arm64_epilog); // epilog on purpose, CS might have changed! BR(x2); @@ -738,6 +756,9 @@ void iret_to_epilog(dynarec_arm_t* dyn, int ninst, int is64bits) void call_c(dynarec_arm_t* dyn, int ninst, void* fnc, int reg, int ret, int saveflags, int savereg) { MAYUSE(fnc); + #if STEP == 0 + dyn->insts[ninst].nat_flags_op = NAT_FLAG_OP_UNUSABLE; + #endif if(savereg==0) savereg = 7; if(saveflags) { @@ -783,6 +804,9 @@ void call_c(dynarec_arm_t* dyn, int ninst, void* fnc, int reg, int ret, int save void call_n(dynarec_arm_t* dyn, int ninst, void* fnc, int w) { MAYUSE(fnc); + #if STEP == 0 + dyn->insts[ninst].nat_flags_op = NAT_FLAG_OP_UNUSABLE; + #endif STRx_U12(xFlags, xEmu, offsetof(x64emu_t, eflags)); fpu_pushcache(dyn, ninst, x3, 1); // x9..x15, x16,x17,x18 those needs to be saved by caller @@ -832,18 +856,18 @@ void grab_segdata(dynarec_arm_t* dyn, uintptr_t addr, int ninst, int reg, int se int64_t j64; MAYUSE(j64); MESSAGE(LOG_DUMP, "Get %s Offset\n", (segment==_FS)?"FS":"GS"); - int t1 = x1, t2 = x4; - if(reg==t1) ++t1; + int t2 = x4; if(reg==t2) ++t2; LDRw_U12(t2, xEmu, offsetof(x64emu_t, segs_serial[segment])); - LDRx_U12(reg, xEmu, offsetof(x64emu_t, segs_offs[segment])); if(segment==_GS) { + LDRx_U12(reg, xEmu, offsetof(x64emu_t, segs_offs[segment])); CBNZw_MARKSEG(t2); // fast check } else { - LDRx_U12(t1, xEmu, offsetof(x64emu_t, context)); - LDRw_U12(t1, t1, offsetof(box64context_t, sel_serial)); - SUBw_REG(t1, t1, t2); - CBZw_MARKSEG(t1); + LDRx_U12(reg, xEmu, offsetof(x64emu_t, context)); + LDRw_U12(reg, reg, offsetof(box64context_t, sel_serial)); + SUBw_REG(t2, reg, t2); + LDRx_U12(reg, xEmu, offsetof(x64emu_t, segs_offs[segment])); + CBZw_MARKSEG(t2); } MOVZw(x1, segment); call_c(dyn, ninst, GetSegmentBaseEmu, t2, reg, 1, 0); @@ -2332,8 +2356,17 @@ static void flagsCacheTransform(dynarec_arm_t* dyn, int ninst, int s1) case SF_SET_PENDING: if(dyn->f.pending!=SF_SET && dyn->f.pending!=SF_SET_PENDING - && dyn->f.pending!=SF_PENDING) - go = 1; + && dyn->f.pending!=SF_PENDING + ) { + // only sync if some previous flags are used or if all flags are not regenerated at the instuction + if(dyn->insts[jmp].x64.use_flags || (dyn->insts[jmp].x64.set_flags!=X_ALL)) + go = 1; + else if(go) { + // just clear df flags + go = 0; + STRw_U12(xZR, xEmu, offsetof(x64emu_t, df)); + } + } break; case SF_PENDING: if(dyn->f.pending!=SF_SET @@ -2350,16 +2383,100 @@ static void flagsCacheTransform(dynarec_arm_t* dyn, int ninst, int s1) j64 = (GETMARKF2)-(dyn->native_size); CBZw(s1, j64); } - CALL_(UpdateFlags, -1, 0); + if(dyn->insts[ninst].need_nat_flags) + MRS_nzcv(s1); + CALL_(UpdateFlags, -1, s1); + if(dyn->insts[ninst].need_nat_flags) + MSR_nzcv(s1); MARKF2; } } +static void nativeFlagsTransform(dynarec_arm_t* dyn, int ninst, int s1, int s2) +{ + int j64; + int jmp = dyn->insts[ninst].x64.jmp_insts; + if(jmp<0) + return; + uint8_t flags_before = dyn->insts[ninst].need_nat_flags; + uint8_t nc_before = dyn->insts[ninst].normal_carry; + if(dyn->insts[ninst].invert_carry) + nc_before = 0; + uint8_t flags_after = dyn->insts[jmp].need_nat_flags; + uint8_t nc_after = dyn->insts[jmp].normal_carry; + if(dyn->insts[jmp].nat_flags_op==NAT_FLAG_OP_TOUCH) { + flags_after = dyn->insts[jmp].before_nat_flags; + nc_after = dyn->insts[jmp].normal_carry_before; + } + uint8_t flags_x86 = flag2native(dyn->insts[jmp].x64.need_before); + flags_x86 &= ~flags_after; + MESSAGE(LOG_DUMP, "\tNative Flags transform ---- ninst=%d -> %d %hhx -> %hhx/%hhx\n", ninst, jmp, flags_before, flags_after, flags_x86); + // flags present in before and missing in after + if((flags_before&NF_EQ) && (flags_x86&NF_EQ)) { + CSETw(s1, cEQ); + BFIw(xFlags, s1, F_ZF, 1); + } + if((flags_before&NF_SF) && (flags_x86&NF_SF)) { + CSETw(s1, cMI); + BFIw(xFlags, s1, F_SF, 1); + } + if((flags_before&NF_VF) && (flags_x86&NF_VF)) { + CSETw(s1, cVS); + BFIw(xFlags, s1, F_OF, 1); + } + if((flags_before&NF_CF) && (flags_x86&NF_CF)) { + if(nc_before) // might need to invert carry + CSETw(s1, cCS); + else + CSETw(s1, cCC); + BFIw(xFlags, s1, F_CF, 1); + } + // flags missing and needed later + int mrs = 0; + #define GO_MRS(A) if(!mrs) {mrs=1; MRS_nzcv(s2); } + if(!(flags_before&NF_EQ) && (flags_after&NF_EQ)) { + GO_MRS(s2); + UBFXw(s1, xFlags, F_ZF, 1); + BFIx(s2, s1, NZCV_Z, 1); + } + if(!(flags_before&NF_SF) && (flags_after&NF_SF)) { + GO_MRS(s2); + UBFXw(s1, xFlags, F_SF, 1); + BFIx(s2, s1, NZCV_N, 1); + } + if(!(flags_before&NF_VF) && (flags_after&NF_VF)) { + GO_MRS(s2); + UBFXw(s1, xFlags, F_OF, 1); + BFIx(s2, s1, NZCV_V, 1); + } + if(!(flags_before&NF_CF) && (flags_after&NF_CF)) { + GO_MRS(s2); + BFIx(s2, xFlags, NZCV_C, 1); // F_CF is bit 0 + if(!nc_after) + EORx_mask(s2, s2, 1, 35, 0); //mask=1<insts[ninst].marklock // Branch to MARK if cond (use j64) -#define B_MARK(cond) \ - j64 = GETMARK-(dyn->native_size); \ +#define B_MARK(cond) \ + j64 = GETMARK-(dyn->native_size); \ Bcond(cond, j64) // Branch to MARK unconditionnal (use j64) -#define B_MARK_nocond \ - j64 = GETMARK-(dyn->native_size); \ +#define B_MARK_nocond \ + j64 = GETMARK-(dyn->native_size); \ B(j64) // Branch to MARK if reg is 0 (use j64) -#define CBZxw_MARK(reg) \ - j64 = GETMARK-(dyn->native_size); \ +#define CBZw_MARK(reg) \ + j64 = GETMARK-(dyn->native_size); \ + CBZw(reg, j64) +// Branch to MARK if reg is 0 (use j64) +#define CBZxw_MARK(reg) \ + j64 = GETMARK-(dyn->native_size); \ CBZxw(reg, j64) // Branch to MARK if reg is not 0 (use j64) -#define CBNZx_MARK(reg) \ - j64 = GETMARK-(dyn->native_size); \ +#define CBNZx_MARK(reg) \ + j64 = GETMARK-(dyn->native_size); \ CBNZx(reg, j64) // Branch to MARK if reg is not 0 (use j64) -#define CBNZw_MARK(reg) \ - j64 = GETMARK-(dyn->native_size); \ +#define CBNZxw_MARK(reg) \ + j64 = GETMARK-(dyn->native_size); \ + CBNZxw(reg, j64) +// Branch to MARK if reg is not 0 (use j64) +#define CBNZw_MARK(reg) \ + j64 = GETMARK-(dyn->native_size); \ CBNZw(reg, j64) // Test bit N of A and branch to MARK if not set -#define TBZ_MARK(A, N) \ - j64 = GETMARK-(dyn->native_size); \ +#define TBZ_MARK(A, N) \ + j64 = GETMARK-(dyn->native_size); \ TBZ(A, N, j64) // Test bit N of A and branch to MARK if set -#define TBNZ_MARK(A, N) \ - j64 = GETMARK-(dyn->native_size); \ +#define TBNZ_MARK(A, N) \ + j64 = GETMARK-(dyn->native_size); \ TBNZ(A, N, j64) // Branch to MARK2 if cond (use j64) -#define B_MARK2(cond) \ - j64 = GETMARK2-(dyn->native_size); \ +#define B_MARK2(cond) \ + j64 = GETMARK2-(dyn->native_size); \ Bcond(cond, j64) // Branch to MARK2 unconditionnal (use j64) -#define B_MARK2_nocond \ - j64 = GETMARK2-(dyn->native_size); \ +#define B_MARK2_nocond \ + j64 = GETMARK2-(dyn->native_size); \ B(j64) // Branch to MARK2 if reg is 0 (use j64) -#define CBZx_MARK2(reg) \ - j64 = GETMARK2-(dyn->native_size); \ +#define CBZx_MARK2(reg) \ + j64 = GETMARK2-(dyn->native_size); \ CBZx(reg, j64) // Branch to MARK2 if reg is not 0 (use j64) -#define CBNZx_MARK2(reg) \ - j64 = GETMARK2-(dyn->native_size); \ +#define CBNZx_MARK2(reg) \ + j64 = GETMARK2-(dyn->native_size); \ CBNZx(reg, j64) +#define CBNZxw_MARK2(reg) \ + j64 = GETMARK2-(dyn->native_size); \ + CBNZxw(reg, j64) // Test bit N of A and branch to MARK2 if set -#define TBNZ_MARK2(A, N) \ - j64 = GETMARK2-(dyn->native_size); \ +#define TBNZ_MARK2(A, N) \ + j64 = GETMARK2-(dyn->native_size); \ TBNZ(A, N, j64) // Branch to MARK3 if cond (use j64) -#define B_MARK3(cond) \ - j64 = GETMARK3-(dyn->native_size); \ +#define B_MARK3(cond) \ + j64 = GETMARK3-(dyn->native_size); \ Bcond(cond, j64) // Test bit N of A and branch to MARK3 if not set -#define TBZ_MARK2(A, N) \ - j64 = GETMARK2-(dyn->native_size); \ +#define TBZ_MARK2(A, N) \ + j64 = GETMARK2-(dyn->native_size); \ TBZ(A, N, j64) // Branch to MARK3 unconditionnal (use j64) -#define B_MARK3_nocond \ - j64 = GETMARK3-(dyn->native_size); \ +#define B_MARK3_nocond \ + j64 = GETMARK3-(dyn->native_size); \ B(j64) // Branch to MARK3 if reg is not 0 (use j64) -#define CBNZx_MARK3(reg) \ - j64 = GETMARK3-(dyn->native_size); \ +#define CBNZx_MARK3(reg) \ + j64 = GETMARK3-(dyn->native_size); \ CBNZx(reg, j64) // Branch to MARK3 if reg is not 0 (use j64) -#define CBNZw_MARK3(reg) \ - j64 = GETMARK3-(dyn->native_size); \ +#define CBNZw_MARK3(reg) \ + j64 = GETMARK3-(dyn->native_size); \ CBNZw(reg, j64) // Branch to MARK3 if reg is 0 (use j64) -#define CBZx_MARK3(reg) \ - j64 = GETMARK3-(dyn->native_size); \ +#define CBZx_MARK3(reg) \ + j64 = GETMARK3-(dyn->native_size); \ CBZx(reg, j64) // Branch to MARK3 if reg is 0 (use j64) -#define CBZw_MARK3(reg) \ - j64 = GETMARK3-(dyn->native_size); \ +#define CBZw_MARK3(reg) \ + j64 = GETMARK3-(dyn->native_size); \ CBZw(reg, j64) // Test bit N of A and branch to MARK3 if not set -#define TBZ_MARK3(A, N) \ - j64 = GETMARK3-(dyn->native_size); \ +#define TBZ_MARK3(A, N) \ + j64 = GETMARK3-(dyn->native_size); \ TBZ(A, N, j64) // Test bit N of A and branch to MARK3 if set -#define TBNZ_MARK3(A, N) \ - j64 = GETMARK3-(dyn->native_size); \ +#define TBNZ_MARK3(A, N) \ + j64 = GETMARK3-(dyn->native_size); \ TBNZ(A, N, j64) // Branch to next instruction if cond (use j64) #define B_NEXT(cond) \ @@ -835,6 +862,14 @@ #define CBZx_NEXT(reg) \ j64 = (dyn->insts)?(dyn->insts[ninst].epilog-(dyn->native_size)):0; \ CBZx(reg, j64) +// Branch to next instruction if reg is 0 (use j64) +#define CBZxw_NEXT(reg) \ + j64 = (dyn->insts)?(dyn->insts[ninst].epilog-(dyn->native_size)):0; \ + CBZxw(reg, j64) +// Branch to next instruction if reg is not 0 (use j64) +#define CBNZw_NEXT(reg) \ + j64 = (dyn->insts)?(dyn->insts[ninst].epilog-(dyn->native_size)):0; \ + CBNZw(reg, j64) // Branch to next instruction if reg is not 0 (use j64) #define CBNZx_NEXT(reg) \ j64 = (dyn->insts)?(dyn->insts[ninst].epilog-(dyn->native_size)):0; \ @@ -872,12 +907,31 @@ j64 = GETMARKLOCK-(dyn->native_size); \ CBNZx(reg, j64) +#ifndef IFNATIVE +#define IFNATIVE(A) if(dyn->insts[ninst].need_nat_flags&(A)) +#define IFNATIVEN(A) if((dyn->insts[ninst].need_nat_flags&(A))==(A)) +#define IFNATIVE_BEFORE(A) if(dyn->insts[ninst].before_nat_flags&(A)) +#endif + +#ifndef IFX #define IFX(A) if((dyn->insts[ninst].x64.gen_flags&(A))) #define IFX2(A, B) if((dyn->insts[ninst].x64.gen_flags&(A)) B) #define IFX_PENDOR0 if((dyn->insts[ninst].x64.gen_flags&(X_PEND) || !dyn->insts[ninst].x64.gen_flags)) #define IFXX(A) if((dyn->insts[ninst].x64.gen_flags==(A))) #define IFX2X(A, B) if((dyn->insts[ninst].x64.gen_flags==(A) || dyn->insts[ninst].x64.gen_flags==(B) || dyn->insts[ninst].x64.gen_flags==((A)|(B)))) #define IFXN(A, B) if((dyn->insts[ninst].x64.gen_flags&(A) && !(dyn->insts[ninst].x64.gen_flags&(B)))) +#define IFXNATIVE(X, N) if((dyn->insts[ninst].x64.gen_flags&(X)) && (dyn->insts[ninst].need_nat_flags&(N))) +#endif +#ifndef INVERTED_CARRY +#define INVERTED_CARRY !dyn->insts[ninst].normal_carry +#define INVERTED_CARRY_BEFORE !dyn->insts[ninst].normal_carry_before +#endif +#ifndef GEN_INVERTED_CARRY +#define GEN_INVERTED_CARRY() +#endif +#ifndef INVERT_CARRY +#define INVERT_CARRY(A) if(dyn->insts[ninst].normal_carry) {if(arm64_flagm) CFINV(); else {MRS_nzcv(A); EORx_mask(A, A, 1, 35, 0); MSR_nzcv(A);}} +#endif // Generate FCOM with s1 and s2 scratch regs (the VCMP is already done) #define FCOM(s1, s2, s3) \ @@ -1078,9 +1132,6 @@ #ifndef BARRIER #define BARRIER(A) #endif -#ifndef BARRIER_NEXT -#define BARRIER_NEXT(A) -#endif #ifndef SET_HASCALLRET #define SET_HASCALLRET() #endif @@ -1197,6 +1248,7 @@ void* arm64_next(x64emu_t* emu, uintptr_t addr); #define dynarec64_AVX_66_0F3A STEPNAME(dynarec64_AVX_66_0F3A) #define dynarec64_AVX_F2_0F38 STEPNAME(dynarec64_AVX_F2_0F38) #define dynarec64_AVX_F2_0F3A STEPNAME(dynarec64_AVX_F2_0F3A) +#define dynarec64_AVX_F3_0F38 STEPNAME(dynarec64_AVX_F3_0F38) #define geted STEPNAME(geted) #define geted32 STEPNAME(geted32) @@ -1273,6 +1325,7 @@ void* arm64_next(x64emu_t* emu, uintptr_t addr); #define emit_shl32c STEPNAME(emit_shl32c) #define emit_shr32 STEPNAME(emit_shr32) #define emit_shr32c STEPNAME(emit_shr32c) +#define emit_sar32 STEPNAME(emit_sar32) #define emit_sar32c STEPNAME(emit_sar32c) #define emit_shl8 STEPNAME(emit_shl8) #define emit_shl8c STEPNAME(emit_shl8c) @@ -1369,7 +1422,7 @@ void jump_to_epilog(dynarec_arm_t* dyn, uintptr_t ip, int reg, int ninst); void jump_to_next(dynarec_arm_t* dyn, uintptr_t ip, int reg, int ninst, int is32bits); void ret_to_epilog(dynarec_arm_t* dyn, int ninst, rex_t rex); void retn_to_epilog(dynarec_arm_t* dyn, int ninst, rex_t rex, int n); -void iret_to_epilog(dynarec_arm_t* dyn, int ninst, int is64bits); +void iret_to_epilog(dynarec_arm_t* dyn, int ninst, int is32bits, int is64bits); void call_c(dynarec_arm_t* dyn, int ninst, void* fnc, int reg, int ret, int saveflags, int save_reg); void call_n(dynarec_arm_t* dyn, int ninst, void* fnc, int w); void grab_segdata(dynarec_arm_t* dyn, uintptr_t addr, int ninst, int reg, int segment); @@ -1437,6 +1490,7 @@ void emit_shl32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3 void emit_shl32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, int s3, int s4); void emit_shr32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4); void emit_shr32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, int s3, int s4); +void emit_sar32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4); void emit_sar32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, int s3, int s4); void emit_shl8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4); void emit_shl8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s4); @@ -1627,6 +1681,7 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip uintptr_t dynarec64_AVX_66_0F3A(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, vex_t vex, int* ok, int* need_epilog); uintptr_t dynarec64_AVX_F2_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, vex_t vex, int* ok, int* need_epilog); uintptr_t dynarec64_AVX_F2_0F3A(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, vex_t vex, int* ok, int* need_epilog); +uintptr_t dynarec64_AVX_F3_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, vex_t vex, int* ok, int* need_epilog); #if STEP < 2 #define PASS2(A) @@ -1649,55 +1704,105 @@ uintptr_t dynarec64_AVX_F2_0F3A(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip #define GOCOND(B, T1, T2) \ case B+0x0: \ INST_NAME(T1 "O " T2); \ + IFNATIVE(NF_VF) { \ + GO( , cVC, cVS, X_OF) \ + } else { \ GO( TSTw_mask(xFlags, 0b010101, 0) \ , cEQ, cNE, X_OF) \ + } \ break; \ case B+0x1: \ INST_NAME(T1 "NO " T2); \ + IFNATIVE(NF_VF) { \ + GO( , cVS, cVC, X_OF) \ + } else { \ GO( TSTw_mask(xFlags, 0b010101, 0) \ , cNE, cEQ, X_OF) \ + } \ break; \ case B+0x2: \ INST_NAME(T1 "C " T2); \ + IFNATIVE(NF_CF) { \ + if(INVERTED_CARRY) { \ + GO( , cCS, cCC, X_CF) \ + } else { \ + GO( , cCC, cCS, X_CF) \ + } \ + } else { \ GO( TSTw_mask(xFlags, 0, 0) \ , cEQ, cNE, X_CF) \ + } \ break; \ case B+0x3: \ INST_NAME(T1 "NC " T2); \ + IFNATIVE(NF_CF) { \ + if(INVERTED_CARRY) { \ + GO( , cCC, cCS, X_CF) \ + } else { \ + GO( , cCS, cCC, X_CF) \ + } \ + } else { \ GO( TSTw_mask(xFlags, 0, 0) \ , cNE, cEQ, X_CF) \ + } \ break; \ case B+0x4: \ INST_NAME(T1 "Z " T2); \ + IFNATIVE(NF_EQ) { \ + GO( , cNE, cEQ, X_ZF) \ + } else { \ GO( TSTw_mask(xFlags, 0b011010, 0) \ , cEQ, cNE, X_ZF) \ + } \ break; \ case B+0x5: \ INST_NAME(T1 "NZ " T2); \ + IFNATIVE(NF_EQ) { \ + GO( , cEQ, cNE, X_ZF) \ + } else { \ GO( TSTw_mask(xFlags, 0b011010, 0) \ , cNE, cEQ, X_ZF) \ + } \ break; \ case B+0x6: \ INST_NAME(T1 "BE " T2); \ + IFNATIVEN(NF_EQ|NF_CF) { \ + INVERT_CARRY(x1); \ + GO( , cHI, cLS, X_ZF|X_CF) \ + } else { \ GO( MOV32w(x1, (1<native_size+=4 #define JUMP(A, C) add_jump(dyn, ninst); add_next(dyn, (uintptr_t)A); SMEND(); dyn->insts[ninst].x64.jmp = A; dyn->insts[ninst].x64.jmp_cond = C; dyn->insts[ninst].x64.jmp_insts = 0 #define BARRIER(A) if(A!=BARRIER_MAYBE) {fpu_purgecache(dyn, ninst, 0, x1, x2, x3); dyn->insts[ninst].x64.barrier = A;} else dyn->insts[ninst].barrier_maybe = 1 -#define BARRIER_NEXT(A) dyn->insts[ninst].x64.barrier_next = A #define SET_HASCALLRET() dyn->insts[ninst].x64.has_callret = 1 #define NEW_INST \ ++dyn->size; \ @@ -31,12 +30,14 @@ #define INST_EPILOG \ dyn->insts[ninst].f_exit = dyn->f; \ dyn->insts[ninst].n = dyn->n; \ + if(dyn->insts[ninst].nat_flags_op==NAT_FLAG_OP_TOUCH && !dyn->insts[ninst].set_nat_flags) \ + dyn->insts[ninst].nat_flags_op=NAT_FLAG_OP_UNUSABLE; \ dyn->insts[ninst].x64.has_next = (ok>0)?1:0; #define INST_NAME(name) #define DEFAULT \ --dyn->size; \ *ok = -1; \ - if(box64_dynarec_log>=LOG_INFO || box64_dynarec_dump || box64_dynarec_missing) {\ + if(box64_dynarec_log>=LOG_INFO || box64_dynarec_dump || box64_dynarec_missing==1) {\ dynarec_log(LOG_NONE, "%p: Dynarec stopped because of %sOpcode %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", \ (void*)ip, rex.is32bits?"x86 ":"x64 ",\ PKip(0), \ @@ -48,3 +49,18 @@ printFunctionAddr(ip, " => "); \ dynarec_log(LOG_NONE, "\n"); \ } + +#define FEMIT(A) dyn->insts[ninst].nat_flags_op = dyn->insts[ninst].x64.set_flags?NAT_FLAG_OP_TOUCH:NAT_FLAG_OP_UNUSABLE +#define IFNATIVE(A) if(mark_natflag(dyn, ninst, A, 0)) +#define IFNATIVEN(A) if(mark_natflag(dyn, ninst, A, 0)) +#define IFX(A) if((dyn->insts[ninst].x64.set_flags&(A))) +#define IFX2(A, B) if((dyn->insts[ninst].x64.set_flags&(A)) B) +#define IFX_PENDOR0 if((dyn->insts[ninst].x64.set_flags&(X_PEND) || !dyn->insts[ninst].x64.set_flags)) +#define IFXX(A) if((dyn->insts[ninst].x64.set_flags==(A))) +#define IFX2X(A, B) if((dyn->insts[ninst].x64.set_flags==(A) || dyn->insts[ninst].x64.set_flags==(B) || dyn->insts[ninst].x64.set_flags==((A)|(B)))) +#define IFXN(A, B) if((dyn->insts[ninst].x64.set_flags&(A) && !(dyn->insts[ninst].x64.set_flags&(B)))) +#define IFXNATIVE(X, N) if((dyn->insts[ninst].x64.set_flags&(X)) && mark_natflag(dyn, ninst, N, 0)) +#define GEN_INVERTED_CARRY() dyn->insts[ninst].gen_inverted_carry = 1 +#define IFNATIVE_BEFORE(A) if(mark_natflag(dyn, ninst, A, 1)) +#define INVERT_CARRY(A) dyn->insts[ninst].invert_carry = 1 +#define INVERT_CARRY_BEFORE(A) dyn->insts[ninst].invert_carry_before = 1 diff --git a/src/dynarec/arm64/dynarec_arm64_private.h b/src/dynarec/arm64/dynarec_arm64_private.h index c1015abddb9ecc5b2be2a7e75da49afa13753d32..b010d4ed698770dd3cc0ee805cb078c22bd2dd48 100644 --- a/src/dynarec/arm64/dynarec_arm64_private.h +++ b/src/dynarec/arm64/dynarec_arm64_private.h @@ -9,6 +9,20 @@ typedef struct instsize_s instsize_t; #define BARRIER_MAYBE 8 +#define NF_EQ (1<<0) +#define NF_SF (1<<1) +#define NF_VF (1<<2) +#define NF_CF (1<<3) + +// Nothing happens to the native flags +#define NAT_FLAG_OP_NONE 0 +// Native flags are touched on this opcode +#define NAT_FLAG_OP_TOUCH 1 +// Native flags are destroyed and unusable +#define NAT_FLAG_OP_UNUSABLE 2 +// Native flags usaged are canceled here +#define NAT_FLAG_OP_CANCELED 3 + #define NEON_CACHE_NONE 0 #define NEON_CACHE_ST_D 1 #define NEON_CACHE_ST_F 2 @@ -89,11 +103,22 @@ typedef struct instruction_arm64_s { uint16_t ymm0_in; // bitmap of ymm to zero at purge uint16_t ymm0_add; // the ymm0 added by the opcode uint16_t ymm0_sub; // the ymm0 removed by the opcode - uint16_t ymm0_out; // the ymmm0 at th end of the opcode + uint16_t ymm0_out; // the ymm0 at th end of the opcode uint16_t ymm0_pass2, ymm0_pass3; uint8_t barrier_maybe; uint8_t will_write; uint8_t last_write; + uint8_t set_nat_flags; // 0 or combinaison of native flags define + uint8_t use_nat_flags; // 0 or combinaison of native flags define + uint8_t use_nat_flags_before; // 0 or combinaison of native flags define + uint8_t nat_flags_op:4;// what happens to native flags here + uint8_t nat_flags_op_before:4;// what happens to native flags here + uint8_t before_nat_flags; // 0 or combinaison of native flags define + uint8_t need_nat_flags; + unsigned gen_inverted_carry:1; + unsigned normal_carry:1; + unsigned normal_carry_before:1; + unsigned invert_carry:1; // this opcode force an inverted carry flagcache_t f_exit; // flags status at end of instruction neoncache_t n; // neoncache at end of instruction (but before poping) flagcache_t f_entry; // flags status before the instruction begin @@ -154,9 +179,11 @@ void CreateJmpNext(void* addr, void* next); #define GO_TRACE(A, B, s0) \ GETIP(addr); \ MOVx_REG(x1, xRIP); \ + MRS_nzcv(s0); \ STORE_XEMU_CALL(xRIP); \ MOV32w(x2, B); \ - CALL(A, -1); \ + CALL_(A, -1, s0); \ + MSR_nzcv(s0); \ LOAD_XEMU_CALL(xRIP) #endif //__DYNAREC_ARM_PRIVATE_H_ diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c index 4c70316729622d4bccc9cb5bf59d0c6d181d9cd8..35c2fb03bb771dad6f014a688ea532b0b7a35030 100644 --- a/src/dynarec/dynablock.c +++ b/src/dynarec/dynablock.c @@ -19,6 +19,7 @@ #include "dynarec_private.h" #include "elfloader.h" #include "bridge.h" +#include "signals.h" #include "dynarec_native.h" #include "native_lock.h" @@ -199,8 +200,11 @@ static dynablock_t* internalDBGetBlock(x64emu_t* emu, uintptr_t addr, uintptr_t if(hasAlternate((void*)addr)) return NULL; dynablock_t* block = getDB(addr); - if(block || !create) + if(block || !create) { + if(block && getNeedTest(addr) && (getProtection(addr)&(PROT_EXEC|PROT_READ))!=(PROT_EXEC|PROT_READ)) + block = NULL; return block; + } if(need_lock) { if(box64_dynarec_wait) { @@ -211,11 +215,18 @@ static dynablock_t* internalDBGetBlock(x64emu_t* emu, uintptr_t addr, uintptr_t } block = getDB(addr); // just in case if(block) { + if(block && getNeedTest(addr) && (getProtection_fast(addr)&(PROT_EXEC|PROT_READ))!=(PROT_EXEC|PROT_READ)) + block = NULL; mutex_unlock(&my_context->mutex_dyndump); return block; } } - + + if((getProtection_fast(addr)&(PROT_EXEC|PROT_READ))!=(PROT_EXEC|PROT_READ)) {// cannot be run, get out of the Dynarec + if(need_lock) + mutex_unlock(&my_context->mutex_dyndump); + return NULL; + } block = AddNewDynablock(addr); // fill the block diff --git a/src/dynarec/dynablock_private.h b/src/dynarec/dynablock_private.h index 18666e04ee94edb09f4b45cd0e6516e6a20aa393..4bf7dd7ad850e55db8eb95e18141d80acad43f95 100644 --- a/src/dynarec/dynablock_private.h +++ b/src/dynarec/dynablock_private.h @@ -10,14 +10,15 @@ typedef struct dynablock_s { void* block; // block-sizeof(void*) == self void* actual_block; // the actual start of the block (so block-sizeof(void*)) struct dynablock_s* previous; // a previous block that might need to be freed - int size; void* x64_addr; uintptr_t x64_size; + int size; uint32_t hash; uint8_t done; uint8_t gone; - uint8_t always_test; uint8_t dirty; // if need to be tested as soon as it's created + uint8_t always_test:1; + uint8_t is32bits:1; int isize; instsize_t* instsize; void* jmpnext; // a branch jmpnext code when block is marked diff --git a/src/dynarec/dynarec.c b/src/dynarec/dynarec.c index 1a389b94dc898ebeb8009c7af3347e24dd77e268..5dddc23bf88a894fc18e447685403d3dd1d823c9 100644 --- a/src/dynarec/dynarec.c +++ b/src/dynarec/dynarec.c @@ -38,6 +38,11 @@ void* LinkNext(x64emu_t* emu, uintptr_t addr, void* x2, uintptr_t* x3) } else if(addr<0x10000) { dynablock_t* db = FindDynablockFromNativeAddress(x2-4); printf_log(LOG_NONE, "Warning, jumping to low address %p from %p (db=%p, x64addr=%p/%s)\n", (void*)addr, x2-4, db, db?(void*)getX64Address(db, (uintptr_t)x2-4):NULL, db?getAddrFunctionName(getX64Address(db, (uintptr_t)x2-4)):"(nil)"); + #ifdef BOX32 + } else if(emu->segs[_CS]==0x23 && addr>0x100000000LL) { + dynablock_t* db = FindDynablockFromNativeAddress(x2-4); + printf_log(LOG_NONE, "Warning, jumping to high address %p from %p (db=%p, x64addr=%p/%s)\n", (void*)addr, x2-4, db, db?(void*)getX64Address(db, (uintptr_t)x2-4):NULL, db?getAddrFunctionName(getX64Address(db, (uintptr_t)x2-4)):"(nil)"); + #endif } #endif void * jblock; @@ -95,6 +100,7 @@ void DynaCall(x64emu_t* emu, uintptr_t addr) uint64_t old_rsi = R_RSI; uint64_t old_rbp = R_RBP; uint64_t old_rip = R_RIP; + x64flags_t old_eflags = emu->eflags; // save defered flags deferred_flags_t old_df = emu->df; multiuint_t old_op1 = emu->op1; @@ -104,10 +110,15 @@ void DynaCall(x64emu_t* emu, uintptr_t addr) multiuint_t old_res_sav= emu->res_sav; deferred_flags_t old_df_sav= emu->df_sav; // uc_link - x64_ucontext_t* old_uc_link = emu->uc_link; + void* old_uc_link = emu->uc_link; emu->uc_link = NULL; - PushExit(emu); + #ifdef BOX32 + if(box64_is32bits) + PushExit_32(emu); + else + #endif + PushExit(emu); R_RIP = addr; emu->df = d_none; DynaRun(emu); @@ -127,6 +138,7 @@ void DynaCall(x64emu_t* emu, uintptr_t addr) emu->res_sav = old_res_sav; emu->df_sav = old_df_sav; // and the old registers + emu->eflags = old_eflags; R_RBX = old_rbx; R_RDI = old_rdi; R_RSI = old_rsi; @@ -137,6 +149,9 @@ void DynaCall(x64emu_t* emu, uintptr_t addr) } int my_setcontext(x64emu_t* emu, void* ucp); +#ifdef BOX32 +int my32_setcontext(x64emu_t* emu, void* ucp); +#endif void DynaRun(x64emu_t* emu) { // prepare setjump for signal handling @@ -206,7 +221,12 @@ void DynaRun(x64emu_t* emu) } if(emu->quit && emu->uc_link) { emu->quit = 0; - my_setcontext(emu, emu->uc_link); + #ifdef BOX32 + if(box64_is32bits) + my32_setcontext(emu, emu->uc_link); + else + #endif + my_setcontext(emu, emu->uc_link); } } #endif diff --git a/src/dynarec/dynarec_arch.h b/src/dynarec/dynarec_arch.h index 6a5c4977e06fb217316a36396c8e6068c4ab5dd9..3790a5dbd4176006c3ecb1ae15cd3ad4eeef8210 100644 --- a/src/dynarec/dynarec_arch.h +++ b/src/dynarec/dynarec_arch.h @@ -9,14 +9,19 @@ #define ADDITIONNAL_DEFINITION() \ int fpuCacheNeedsTransform(dynarec_native_t* dyn, int ninst); -#define OTHER_CACHE() \ - if (fpuCacheNeedsTransform(dyn, ninst)) ret|=2; +#define OTHER_CACHE() \ + if (fpuCacheNeedsTransform(dyn, ninst)) ret|=2; \ + if (nativeFlagsNeedsTransform(dyn, ninst)) ret|=4; #include "arm64/arm64_printer.h" #include "arm64/dynarec_arm64_private.h" #include "arm64/dynarec_arm64_functions.h" // Limit here is defined by LD litteral, that is 19bits #define MAXBLOCK_SIZE ((1<<19)-200) + +#define RAZ_SPECIFIC(A, N) rasNativeState(A, N) +#define UPDATE_SPECIFICS(A) updateNatveFlags(A) + #elif defined(LA64) #define instruction_native_t instruction_la64_t @@ -33,6 +38,9 @@ #include "la64/dynarec_la64_functions.h" // Limit here is unconditionnal jump, that is signed 28bits #define MAXBLOCK_SIZE ((1 << 27) - 200) + +#define RAZ_SPECIFIC(A, N) +#define UPDATE_SPECIFICS(A) #elif defined(RV64) #define instruction_native_t instruction_rv64_t @@ -44,13 +52,16 @@ #define OTHER_CACHE() \ if (fpuCacheNeedsTransform(dyn, ninst)) ret |= 2; \ - if (sewNeedsTransform(dyn, ninst)) ret |= 3; + if (sewNeedsTransform(dyn, ninst)) ret |= 4; #include "rv64/rv64_printer.h" #include "rv64/dynarec_rv64_private.h" #include "rv64/dynarec_rv64_functions.h" // Limit here is unconditionnal jump, that is signed 21bits #define MAXBLOCK_SIZE ((1<<20)-200) + +#define RAZ_SPECIFIC(A, N) +#define UPDATE_SPECIFICS(A) #else #error Unsupported platform #endif diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c index e7cad50dad44f7e8563d4cde046894f0ba432fd4..e42b98f2cee7ef62442acc2b2f3e56494cada466 100644 --- a/src/dynarec/dynarec_native.c +++ b/src/dynarec/dynarec_native.c @@ -514,7 +514,7 @@ uintptr_t native_pass1(dynarec_native_t* dyn, uintptr_t addr, int alternate, int uintptr_t native_pass2(dynarec_native_t* dyn, uintptr_t addr, int alternate, int is32bits); uintptr_t native_pass3(dynarec_native_t* dyn, uintptr_t addr, int alternate, int is32bits); -void* CreateEmptyBlock(dynablock_t* block, uintptr_t addr) { +void* CreateEmptyBlock(dynablock_t* block, uintptr_t addr, int is32bits) { block->isize = 0; block->done = 0; size_t sz = 4*sizeof(void*); @@ -529,6 +529,7 @@ void* CreateEmptyBlock(dynablock_t* block, uintptr_t addr) { block->actual_block = actual_p; block->block = p; block->jmpnext = p; + block->is32bits = is32bits; *(dynablock_t**)actual_p = block; *(void**)(p+2*sizeof(void*)) = native_epilog; CreateJmpNext(block->jmpnext, p+2*sizeof(void*)); @@ -553,7 +554,7 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit */ if(addr>=box64_nodynarec_start && addrjmpnext = next+sizeof(void*); block->always_test = helper.always_test; block->dirty = block->always_test; + block->is32bits = is32bits; *(dynablock_t**)next = block; *(void**)(next+3*sizeof(void*)) = native_next; CreateJmpNext(block->jmpnext, next+3*sizeof(void*)); diff --git a/src/dynarec/dynarec_native_functions.c b/src/dynarec/dynarec_native_functions.c index 376541d18a2af2c822d22f91299c9c0da572a0e2..c6ea65b040417a8e33f6f0f12309a1279425f719 100644 --- a/src/dynarec/dynarec_native_functions.c +++ b/src/dynarec/dynarec_native_functions.c @@ -172,7 +172,7 @@ void native_ud(x64emu_t* emu) void native_priv(x64emu_t* emu) { emu->test.test = 0; - emit_signal(emu, SIGSEGV, (void*)R_RIP, 0); + emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0); } void native_int(x64emu_t* emu, int num) @@ -592,9 +592,11 @@ uint8_t geted_ib(dynarec_native_t* dyn, uintptr_t addr, int ninst, uint8_t nexto } #undef F8 -int isNativeCall(dynarec_native_t* dyn, uintptr_t addr, uintptr_t* calladdress, uint16_t* retn) +int isNativeCall(dynarec_native_t* dyn, uintptr_t addr, int is32bits, uintptr_t* calladdress, uint16_t* retn) { (void)dyn; + if(is32bits) + addr &= 0xFFFFFFFFLL; #define PK(a) *(uint8_t*)(addr+a) #define PK32(a) *(int32_t*)(addr+a) @@ -608,7 +610,7 @@ int isNativeCall(dynarec_native_t* dyn, uintptr_t addr, uintptr_t* calladdress, if(!addr || !getProtection(addr)) return 0; onebridge_t *b = (onebridge_t*)(addr); - if(b->CC==0xCC && b->S=='S' && b->C=='C' && b->w!=(wrapper_t)0 && b->f!=(uintptr_t)PltResolver) { + if(b->CC==0xCC && b->S=='S' && b->C=='C' && b->w!=(wrapper_t)0 && b->f!=(uintptr_t)PltResolver64) { // found ! if(retn) *retn = (b->C3==0xC2)?b->N:0; if(calladdress) *calladdress = addr+1; diff --git a/src/dynarec/dynarec_native_functions.h b/src/dynarec/dynarec_native_functions.h index e9cff96105fef449e4828577e8c1e4077152393c..fe74c2b38132153705f4453fbc5e1447e032d31c 100644 --- a/src/dynarec/dynarec_native_functions.h +++ b/src/dynarec/dynarec_native_functions.h @@ -72,7 +72,7 @@ uintptr_t fakeed(dynarec_native_t* dyn, uintptr_t addr, int ninst, uint8_t nexto uint8_t geted_ib(dynarec_native_t* dyn, uintptr_t addr, int ninst, uint8_t nextop); // Is what pointed at addr a native call? And if yes, to what function? -int isNativeCall(dynarec_native_t* dyn, uintptr_t addr, uintptr_t* calladdress, uint16_t* retn); +int isNativeCall(dynarec_native_t* dyn, uintptr_t addr, int is32bits, uintptr_t* calladdress, uint16_t* retn); // AVX utilities void avx_mark_zero(dynarec_native_t* dyn, int ninst, int reg); diff --git a/src/dynarec/dynarec_native_pass.c b/src/dynarec/dynarec_native_pass.c index 779ba9be6202f870be9ed317c504069a0805c4ad..dee5d4968ef36fd61a698c78fe77069bbd9c91c2 100644 --- a/src/dynarec/dynarec_native_pass.c +++ b/src/dynarec/dynarec_native_pass.c @@ -55,18 +55,18 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int #endif fpu_reset(dyn); ARCH_INIT(); - int reset_n = -1; + int reset_n = -1; // -1 no reset; -2 reset to 0; else reset to the state of reset_n dyn->last_ip = (alternate || (dyn->insts && dyn->insts[0].pred_sz))?0:ip; // RIP is always set at start of block unless there is a predecessor! int stopblock = 2+(FindElfAddress(my_context, addr)?0:1); // if block is in elf_memory, it can be extended with box64_dynarec_bigblock==2, else it needs 3 // ok, go now INIT; #if STEP == 0 - uintptr_t cur_page = (addr)&~box64_pagesize; + uintptr_t cur_page = (addr)&~(box64_pagesize-1); #endif while(ok) { #if STEP == 0 - if(cur_page != ((addr)&~box64_pagesize)) { - cur_page = (addr)&~box64_pagesize; + if(cur_page != ((addr)&~(box64_pagesize-1))) { + cur_page = (addr)&~(box64_pagesize-1); if(!(getProtection(addr)&PROT_READ)) { need_epilog = 1; break; @@ -111,12 +111,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int #endif dyn->f.dfnone_here = 0; NEW_INST; - MESSAGE(LOG_DUMP, "New Instruction x64:%p, native:%p\n", (void*)addr, (void*)dyn->block); - #if STEP == 0 - if(ninst && dyn->insts[ninst-1].x64.barrier_next) { - BARRIER(dyn->insts[ninst-1].x64.barrier_next); - } - #endif + MESSAGE(LOG_DUMP, "New Instruction %s:%p, native:%p\n", is32bits?"x86":"x64",(void*)addr, (void*)dyn->block); if(!ninst) { GOTEST(x1, x2); } diff --git a/src/dynarec/dynarec_private.h b/src/dynarec/dynarec_private.h index 682f267ac786ec3b1df398fc52f30954d1f097a0..6133c0f1ba4a741de880ffd04767ccf9790e119f 100644 --- a/src/dynarec/dynarec_private.h +++ b/src/dynarec/dynarec_private.h @@ -39,7 +39,6 @@ typedef struct instruction_x64_s { uint8_t has_callret:1; // this instruction have an optimised call setup uint8_t alive:1; // this opcode gets executed (0 if dead code in that block) uint8_t barrier; // next instruction is a jump point, so no optim allowed - uint8_t barrier_next; // next instruction needs a barrier uint8_t state_flags;// One of SF_XXX state uint8_t use_flags; // 0 or combination of X_?F uint8_t set_flags; // 0 or combination of X_?F diff --git a/src/dynarec/la64/dynarec_la64_00.c b/src/dynarec/la64/dynarec_la64_00.c index 02d2b8dcc5fe1264789e6da83399dd15636cd2b9..c0ab6470e95bbd671e501c809efe5ed09a995bf9 100644 --- a/src/dynarec/la64/dynarec_la64_00.c +++ b/src/dynarec/la64/dynarec_la64_00.c @@ -421,12 +421,38 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("CMP EAX, Id"); SETFLAGS(X_ALL, SF_SET_PENDING); i64 = F32S; - if(i64) { + if (i64) { MOV64xw(x2, i64); emit_cmp32(dyn, ninst, rex, xRAX, x2, x3, x4, x5, x6); } else emit_cmp32_0(dyn, ninst, rex, xRAX, x3, x4); break; + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + INST_NAME("INC Reg (32bits)"); + SETFLAGS(X_ALL & ~X_CF, SF_SUBSET_PENDING); + gd = TO_LA64(opcode & 7); + emit_inc32(dyn, ninst, rex, gd, x1, x2, x3, x4); + break; + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + INST_NAME("DEC Reg (32bits)"); + SETFLAGS(X_ALL & ~X_CF, SF_SUBSET_PENDING); + gd = TO_LA64(opcode & 7); + emit_dec32(dyn, ninst, rex, gd, x1, x2, x3, x4); + break; case 0x50: case 0x51: case 0x52: @@ -497,9 +523,9 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0x68: INST_NAME("PUSH Id"); i64 = F32S; - if(PK(0)==0xC3) { + if (PK(0) == 0xC3) { MESSAGE(LOG_DUMP, "PUSH then RET, using indirect\n"); - TABLE64(x3, addr-4); + TABLE64(x3, addr - 4); LD_W(x1, x3, 0); PUSH1z(x1); } else { @@ -583,7 +609,6 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; #define GO(GETFLAGS, NO, YES, F, I) \ - if (box64_dynarec_test == 2) { NOTEST(x1); } \ READFLAGS(F); \ i8 = F8S; \ BARRIER(BARRIER_MAYBE); \ @@ -624,7 +649,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0x80: nextop = F8; - switch((nextop>>3)&7) { + switch ((nextop >> 3) & 7) { case 0: // ADD INST_NAME("ADD Eb, Ib"); SETFLAGS(X_ALL, SF_SET_PENDING); @@ -679,7 +704,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SETFLAGS(X_ALL, SF_SET_PENDING); GETEB(x1, 1); u8 = F8; - if(u8) { + if (u8) { ADDI_D(x2, xZR, u8); emit_cmp8(dyn, ninst, x1, x2, x3, x4, x5, x6); } else { @@ -702,7 +727,10 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } SETFLAGS(X_ALL, SF_SET_PENDING); GETED((opcode == 0x81) ? 4 : 1); - if (opcode == 0x81) i64 = F32S; else i64 = F8S; + if (opcode == 0x81) + i64 = F32S; + else + i64 = F8S; emit_add32c(dyn, ninst, rex, ed, i64, x3, x4, x5, x6); WBACK; break; @@ -714,7 +742,10 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } SETFLAGS(X_ALL, SF_SET_PENDING); GETED((opcode == 0x81) ? 4 : 1); - if (opcode == 0x81) i64 = F32S; else i64 = F8S; + if (opcode == 0x81) + i64 = F32S; + else + i64 = F8S; emit_or32c(dyn, ninst, rex, ed, i64, x3, x4); WBACK; break; @@ -735,33 +766,36 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni emit_adc32(dyn, ninst, rex, ed, x5, x3, x4, x6, x1); WBACK; break; - case 4: // AND + case 3: // SBB if (opcode == 0x81) { - INST_NAME("AND Ed, Id"); + INST_NAME("SBB Ed, Id"); } else { - INST_NAME("AND Ed, Ib"); + INST_NAME("SBB Ed, Ib"); } + READFLAGS(X_CF); SETFLAGS(X_ALL, SF_SET_PENDING); GETED((opcode == 0x81) ? 4 : 1); - if (opcode == 0x81) i64 = F32S; else i64 = F8S; - emit_and32c(dyn, ninst, rex, ed, i64, x3, x4); + if (opcode == 0x81) + i64 = F32S; + else + i64 = F8S; + MOV64xw(x5, i64); + emit_sbb32(dyn, ninst, rex, ed, x5, x3, x4, x6); WBACK; break; - case 3: // SBB + case 4: // AND if (opcode == 0x81) { - INST_NAME("SBB Ed, Id"); + INST_NAME("AND Ed, Id"); } else { - INST_NAME("SBB Ed, Ib"); + INST_NAME("AND Ed, Ib"); } - READFLAGS(X_CF); SETFLAGS(X_ALL, SF_SET_PENDING); GETED((opcode == 0x81) ? 4 : 1); if (opcode == 0x81) i64 = F32S; else i64 = F8S; - MOV64xw(x5, i64); - emit_sbb32(dyn, ninst, rex, ed, x5, x3, x4, x6); + emit_and32c(dyn, ninst, rex, ed, i64, x3, x4); WBACK; break; case 5: // SUB @@ -802,7 +836,10 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } SETFLAGS(X_ALL, SF_SET_PENDING); GETED((opcode == 0x81) ? 4 : 1); - if (opcode == 0x81) i64 = F32S; else i64 = F8S; + if (opcode == 0x81) + i64 = F32S; + else + i64 = F8S; if (i64) { MOV64xw(x2, i64); emit_cmp32(dyn, ninst, rex, ed, x2, x3, x4, x5, x6); @@ -814,14 +851,12 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni emit_cmp32_0(dyn, ninst, rex, ed, x3, x4); } break; - default: - DEFAULT; } break; case 0x84: INST_NAME("TEST Eb, Gb"); SETFLAGS(X_ALL, SF_SET_PENDING); - nextop=F8; + nextop = F8; GETEB(x1, 0); GETGB(x2); emit_test8(dyn, ninst, x1, x2, x3, x4, x5); @@ -1054,13 +1089,65 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BSTRPICK_D(xRDX, xRDX, 31, 0); } break; + case 0x9C: + INST_NAME("PUSHF"); + READFLAGS(X_ALL); + PUSH1z(xFlags); + break; + case 0x9D: + INST_NAME("POPF"); + SETFLAGS(X_ALL, SF_SET); + POP1z(xFlags); + MOV32w(x1, 0x3F7FD7); + AND(xFlags, xFlags, x1); + ORI(xFlags, xFlags, 0x202); + SET_DFNONE(); + if (box64_wine) { // should this be done all the time? + ANDI(x1, xFlags, 1 << F_TF); + CBZ_NEXT(x1); + // go to epilog, TF should trigger at end of next opcode, so using Interpreter only + jump_to_epilog(dyn, addr, 0, ninst); + } + break; case 0xA0: INST_NAME("MOV AL,Ob"); - if(rex.is32bits) u64 = F32; else u64 = F64; + if (rex.is32bits) + u64 = F32; + else + u64 = F64; MOV64z(x1, u64); LD_BU(x2, x1, 0); BSTRINS_D(xRAX, x2, 7, 0); break; + case 0xA1: + INST_NAME("MOV EAX, Od"); + if (rex.is32bits) + u64 = F32; + else + u64 = F64; + MOV64z(x1, u64); + LDxw(xRAX, x1, 0); + break; + case 0xA2: + INST_NAME("MOV Ob, AL"); + if (rex.is32bits) + u64 = F32; + else + u64 = F64; + MOV64z(x1, u64); + ST_B(xRAX, x1, 0); + SMWRITE(); + break; + case 0xA3: + INST_NAME("MOV Od, EAX"); + if (rex.is32bits) + u64 = F32; + else + u64 = F64; + MOV64z(x1, u64); + SDxw(xRAX, x1, 0); + SMWRITE(); + break; case 0xA4: if (rep) { INST_NAME("REP MOVSB"); @@ -1521,7 +1608,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (box64_dynarec_safeflags) { READFLAGS(X_PEND); // lets play safe here too } - fpu_purgecache(dyn, ninst, 1, x1, x2, x3); // using next, even if there no next + fpu_purgecache(dyn, ninst, 1, x1, x2, x3); // using next, even if there no next i32 = F16; retn_to_epilog(dyn, ninst, rex, i32); *need_epilog = 0; @@ -1533,7 +1620,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (box64_dynarec_safeflags) { READFLAGS(X_PEND); // so instead, force the deferred flags, so it's not too slow, and flags are not lost } - fpu_purgecache(dyn, ninst, 1, x1, x2, x3); // using next, even if there no next + fpu_purgecache(dyn, ninst, 1, x1, x2, x3); // using next, even if there no next ret_to_epilog(dyn, ninst, rex); *need_epilog = 0; *ok = 0; @@ -1546,7 +1633,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (!rex.rex) { ed = (nextop & 7); eb1 = TO_LA64((ed & 3)); // Ax, Cx, Dx or Bx - eb2 = (ed & 4) >> 2; // L or H + eb2 = (ed & 4) >> 2; // L or H } else { eb1 = TO_LA64((nextop & 7) + (rex.b << 3)); eb2 = 0; @@ -1573,10 +1660,10 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ed = TO_LA64((nextop & 7) + (rex.b << 3)); MOV64xw(ed, i64); } else { // mem <= i32 - addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, &lock, 0, 4); + addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, &lock, 1, 4); i64 = F32S; if (i64) { - MOV64xw(x3, i64); + MOV64x(x3, i64); ed = x3; } else ed = xZR; @@ -1630,11 +1717,13 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni TABLE64(x1, (uintptr_t)my_context); MOV32w(x2, offsetof(box64context_t, signals[SIGTRAP])); LDX_D(x3, x1, x2); - CBZ_NEXT(x3); + BEQZ_MARK(x3); GETIP(addr); STORE_XEMU_CALL(); CALL(native_int3, -1); LOAD_XEMU_CALL(); + MARK; + jump_to_epilog(dyn, addr, 0, ninst); *need_epilog = 0; *ok = 0; } @@ -1647,16 +1736,17 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 5: if (opcode == 0xD0) { INST_NAME("SHR Eb, 1"); + GETEB(x1, 0); MOV32w(x2, 1); } else { INST_NAME("SHR Eb, CL"); + GETEB(x1, 0); ANDI(x2, xRCX, 0x1F); BEQ_NEXT(x2, xZR); } SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if (box64_dynarec_safeflags > 1) MAYSETFLAGS(); - GETEB(x1, 0); emit_shr8(dyn, ninst, x1, x2, x5, x4, x6); EBBACK(); break; @@ -1711,12 +1801,13 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 0xD3: nextop = F8; - switch((nextop>>3)&7) { + switch ((nextop >> 3) & 7) { case 0: INST_NAME("ROL Ed, CL"); SETFLAGS(X_OF | X_CF, SF_SUBSET); GETED(0); - emit_rol32(dyn, ninst, rex, ed, xRCX, x3, x4); + ANDI(x6, xRCX, rex.w ? 0x3f : 0x1f); + emit_rol32(dyn, ninst, rex, ed, x6, x3, x4); WBACK; if (!wback && !rex.w) ZEROUP(ed); break; @@ -1724,7 +1815,8 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("ROR Ed, CL"); SETFLAGS(X_OF | X_CF, SF_SUBSET); GETED(0); - emit_ror32(dyn, ninst, rex, ed, xRCX, x3, x4); + ANDI(x6, xRCX, rex.w ? 0x3f : 0x1f); + emit_ror32(dyn, ninst, rex, ed, x6, x3, x4); WBACK; if (!wback && !rex.w) ZEROUP(ed); break; @@ -1766,6 +1858,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni DEFAULT; } break; + #define GO(Z) \ BARRIER(BARRIER_MAYBE); \ JUMP(addr + i8, 1); \ @@ -1795,12 +1888,16 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BNE(xRCX, xZR, i32); \ }; \ } + case 0xE0: INST_NAME("LOOPNZ"); READFLAGS(X_ZF); i8 = F8S; ADDI_D(xRCX, xRCX, -1); - if (la64_lbt) X64_GET_EFLAGS(x1, X_ZF); else ANDI(x1, xFlags, 1 << F_ZF); + if (la64_lbt) + X64_GET_EFLAGS(x1, X_ZF); + else + ANDI(x1, xFlags, 1 << F_ZF); CBNZ_NEXT(x1); GO(0); break; @@ -1809,7 +1906,10 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni READFLAGS(X_ZF); i8 = F8S; ADDI_D(xRCX, xRCX, -1); - if (la64_lbt) X64_GET_EFLAGS(x1, X_ZF); else ANDI(x1, xFlags, 1 << F_ZF); + if (la64_lbt) + X64_GET_EFLAGS(x1, X_ZF); + else + ANDI(x1, xFlags, 1 << F_ZF); CBZ_NEXT(x1); GO(0); break; @@ -1825,28 +1925,28 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni GO(1); break; #undef GO + case 0xE8: INST_NAME("CALL Id"); i32 = F32S; if (addr + i32 == 0) { - #if STEP == 3 +#if STEP == 3 printf_log(LOG_INFO, "Warning, CALL to 0x0 at %p (%p)\n", (void*)addr, (void*)(addr - 1)); - #endif +#endif } - #if STEP < 2 - if (!rex.is32bits && isNativeCall(dyn, addr + i32, &dyn->insts[ninst].natcall, &dyn->insts[ninst].retn)) +#if STEP < 2 + if (!rex.is32bits && isNativeCall(dyn, addr + i32, rex.is32bits, &dyn->insts[ninst].natcall, &dyn->insts[ninst].retn)) tmp = dyn->insts[ninst].pass2choice = 3; else tmp = dyn->insts[ninst].pass2choice = 0; - #else +#else tmp = dyn->insts[ninst].pass2choice; - #endif +#endif switch (tmp) { case 3: SETFLAGS(X_ALL, SF_SET); // Hack to set flags to "dont'care" state SKIPTEST(x1); BARRIER(BARRIER_FULL); - // BARRIER_NEXT(BARRIER_FULL); if (dyn->last_ip && (addr - dyn->last_ip < 0x1000)) { ADDI_D(x2, xRIP, addr - dyn->last_ip); } else { @@ -1930,10 +2030,10 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ADDI_D(x4, x4, j64 & 0xfff); MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64 >> 2); } else { - MESSAGE(LOG_NONE, "\tCALLRET set return to Jmptable(%p)\n", (void*)addr); - j64 = getJumpTableAddress64(addr); - TABLE64(x4, j64); - LD_D(x4, x4, 0); + j64 = (dyn->insts)?(GETMARK-(dyn->native_size)):0; + PCADDU12I(x4, ((j64 + 0x800) >> 12) & 0xfffff); + ADDI_D(x4, x4, j64 & 0xfff); + MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } ADDI_D(xSP, xSP, -16); ST_D(x4, xSP, 0); @@ -1942,14 +2042,25 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni *ok = 0; *need_epilog = 0; } - jump_to_next(dyn, addr + i32, 0, ninst, rex.is32bits); + if(rex.is32bits) + j64 = (uint32_t)(addr+i32); + else + j64 = addr+i32; + jump_to_next(dyn, j64, 0, ninst, rex.is32bits); + if(box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + // jumps out of current dynablock... + MARK; + j64 = getJumpTableAddress64(addr); + TABLE64(x4, j64); + LD_D(x4, x4, 0); + BR(x4); + } break; } break; case 0xE9: case 0xEB: BARRIER(BARRIER_MAYBE); - if (box64_dynarec_test == 2) { NOTEST(x1); } if (opcode == 0xE9) { INST_NAME("JMP Id"); i32 = F32S; @@ -1957,11 +2068,15 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("JMP Ib"); i32 = F8S; } - JUMP((uintptr_t)getAlternate((void*)(addr + i32)), 0); + if(rex.is32bits) + j64 = (uint32_t)(addr+i32); + else + j64 = addr+i32; + JUMP((uintptr_t)getAlternate((void*)j64), 0); if (dyn->insts[ninst].x64.jmp_insts == -1) { // out of the block fpu_purgecache(dyn, ninst, 1, x1, x2, x3); - jump_to_next(dyn, (uintptr_t)getAlternate((void*)(addr + i32)), 0, ninst, rex.is32bits); + jump_to_next(dyn, (uintptr_t)getAlternate((void*)j64), 0, ninst, rex.is32bits); } else { // inside the block CacheTransform(dyn, ninst, CHECK_CACHE(), x1, x2, x3); @@ -2007,12 +2122,12 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 4: INST_NAME("MUL AL, Ed"); SETFLAGS(X_ALL, SF_PENDING); - UFLAG_DF(x1, d_mul8); GETEB(x1, 0); ANDI(x2, xRAX, 0xff); MUL_W(x1, x2, x1); UFLAG_RES(x1); BSTRINS_D(xRAX, x1, 15, 0); + UFLAG_DF(x1, d_mul8); break; case 6: INST_NAME("DIV Eb"); @@ -2040,7 +2155,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("NOT Ed"); GETED(0); NOR(ed, ed, xZR); - if(!rex.w && MODREG) + if (!rex.w && MODREG) ZEROUP(ed); WBACK; break; @@ -2054,7 +2169,6 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 4: INST_NAME("MUL EAX, Ed"); SETFLAGS(X_ALL, SF_PENDING); - UFLAG_DF(x2, rex.w ? d_mul64 : d_mul32); GETED(0); if (rex.w) { if (ed == xRDX) @@ -2076,11 +2190,11 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } UFLAG_RES(xRAX); UFLAG_OP1(xRDX); + UFLAG_DF(x2, rex.w ? d_mul64 : d_mul32); break; case 5: INST_NAME("IMUL EAX, Ed"); SETFLAGS(X_ALL, SF_PENDING); - UFLAG_DF(x2, rex.w ? d_imul64 : d_imul32); GETSED(0); if (rex.w) { if (ed == xRDX) @@ -2098,6 +2212,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } UFLAG_RES(xRAX); UFLAG_OP1(xRDX); + UFLAG_DF(x2, rex.w ? d_imul64 : d_imul32); break; case 6: INST_NAME("DIV Ed"); @@ -2264,10 +2379,10 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ADDI_D(x4, x4, j64 & 0xfff); MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64 >> 2); } else { - MESSAGE(LOG_NONE, "\tCALLRET set return to Jmptable(%p)\n", (void*)addr); - j64 = getJumpTableAddress64(addr); - TABLE64(x4, j64); - LD_D(x4, x4, 0); + j64 = (dyn->insts)?(GETMARK-(dyn->native_size)):0; + PCADDU12I(x4, ((j64 + 0x800) >> 12) & 0xfffff); + ADDI_D(x4, x4, j64 & 0xfff); + MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } ADDI_D(xSP, xSP, -16); ST_D(x4, xSP, 0); @@ -2275,6 +2390,14 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } PUSH1z(xRIP); jump_to_next(dyn, 0, ed, ninst, rex.is32bits); + if(box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + // jumps out of current dynablock... + MARK; + j64 = getJumpTableAddress64(addr); + TABLE64(x4, j64); + LD_D(x4, x4, 0); + BR(x4); + } break; case 4: // JMP Ed INST_NAME("JMP Ed"); diff --git a/src/dynarec/la64/dynarec_la64_0f.c b/src/dynarec/la64/dynarec_la64_0f.c index 0f795e61ea726fa0cea4ebdcbb65623570fdce96..164f14ef77fd06ebf43c64102b8a2e73ab80095c 100644 --- a/src/dynarec/la64/dynarec_la64_0f.c +++ b/src/dynarec/la64/dynarec_la64_0f.c @@ -566,11 +566,14 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; #define GO(GETFLAGS, NO, YES, F, I) \ - if (box64_dynarec_test == 2) { NOTEST(x1); } \ READFLAGS(F); \ i32_ = F32S; \ + if(rex.is32bits) \ + j64 = (uint32_t)(addr+i32_); \ + else \ + j64 = addr+i32_; \ BARRIER(BARRIER_MAYBE); \ - JUMP(addr + i32_, 1); \ + JUMP(j64, 1); \ if (la64_lbt) { \ X64_SETJ(x1, I); \ } else { \ @@ -586,7 +589,7 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (dyn->insts[ninst].x64.jmp_insts == -1) { \ if (!(dyn->insts[ninst].x64.barrier & BARRIER_FLOAT)) \ fpu_purgecache(dyn, ninst, 1, x1, x2, x3); \ - jump_to_next(dyn, addr + i32_, 0, ninst, rex.is32bits); \ + jump_to_next(dyn, j64, 0, ninst, rex.is32bits); \ } else { \ CacheTransform(dyn, ninst, cacheupd, x1, x2, x3); \ i32 = dyn->insts[dyn->insts[ninst].x64.jmp_insts].address - (dyn->native_size); \ @@ -669,12 +672,17 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0xA4: nextop = F8; INST_NAME("SHLD Ed, Gd, Ib"); - SETFLAGS(X_ALL, SF_SET_PENDING); - GETED(1); - GETGD; - u8 = F8; - emit_shld32c(dyn, ninst, rex, ed, gd, u8, x3, x4); - WBACK; + if (geted_ib(dyn, addr, ninst, nextop)) { + SETFLAGS(X_ALL, SF_SET_PENDING); + GETED(1); + GETGD; + u8 = F8; + emit_shld32c(dyn, ninst, rex, ed, gd, u8, x3, x4); + WBACK; + } else { + FAKEED; + F8; + } break; case 0xAB: INST_NAME("BTS Ed, Gd"); @@ -716,13 +724,18 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0xAC: nextop = F8; INST_NAME("SHRD Ed, Gd, Ib"); - SETFLAGS(X_ALL, SF_SET_PENDING); - GETED(1); - GETGD; - u8 = F8; - u8 &= (rex.w ? 0x3f : 0x1f); - emit_shrd32c(dyn, ninst, rex, ed, gd, u8, x3, x4); - WBACK; + if (geted_ib(dyn, addr, ninst, nextop)) { + SETFLAGS(X_ALL, SF_SET_PENDING); + GETED(1); + GETGD; + u8 = F8; + u8 &= (rex.w ? 0x3f : 0x1f); + emit_shrd32c(dyn, ninst, rex, ed, gd, u8, x3, x4); + WBACK; + } else { + FAKEED; + F8; + } break; case 0xAE: nextop = F8; @@ -755,7 +768,7 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else { addr = geted(dyn, addr, ninst, nextop, &ed, x1, x3, &fixedaddress, rex, NULL, 0, 0); if (ed != x1) { MV(x1, ed); } - CALL(rex.w ? ((void*)fpu_fxsave64) : ((void*)fpu_fxsave32), -1); + CALL(rex.is32bits ? ((void*)fpu_fxsave32) : ((void*)fpu_fxsave64), -1); } break; case 2: @@ -916,6 +929,8 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (wback) { SDxw(ed, wback, fixedaddress); SMWRITE(); + } else if (!rex.w) { + ZEROUP(ed); } MARK; break; @@ -935,6 +950,8 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (wback) { SDxw(ed, wback, fixedaddress); SMWRITE(); + } else if (!rex.w) { + ZEROUP(ed); } MARK; break; diff --git a/src/dynarec/la64/dynarec_la64_64.c b/src/dynarec/la64/dynarec_la64_64.c index ae23ab2e598c246873c6d15f4ebd17d2f604c74f..a069dd802e4fe67d5e3d0eb4d8c10136ae4b861a 100644 --- a/src/dynarec/la64/dynarec_la64_64.c +++ b/src/dynarec/la64/dynarec_la64_64.c @@ -319,9 +319,14 @@ uintptr_t dynarec64_64(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (MODREG) { // reg <= reg MVxw(TO_LA64((nextop & 7) + (rex.b << 3)), gd); } else { // mem <= reg - addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); - ADD_D(x4, ed, x4); - SDxw(gd, x4, fixedaddress); + if (rex.is32bits) { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); + ADDz(x4, ed, x4); + SDxw(gd, x4, fixedaddress); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 0, 0); + SDXxw(gd, ed, x4); + } SMWRITE2(); } break; @@ -334,11 +339,30 @@ uintptr_t dynarec64_64(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni MVxw(gd, TO_LA64((nextop & 7) + (rex.b << 3))); } else { // mem <= reg SMREAD(); - addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); - ADD_D(x4, ed, x4); - LDxw(gd, x4, fixedaddress); + if (rex.is32bits) { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); + ADDz(x4, ed, x4); + LDxw(gd, x4, fixedaddress); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 0, 0); + LDXxw(gd, ed, x4); + } } break; + case 0xA1: + INST_NAME("MOV EAX, FS:Od"); + grab_segdata(dyn, addr, ninst, x4, seg); + if (rex.is32bits) + u64 = F32; + else + u64 = F64; + MOV64z(x1, u64); + if (rex.is32bits) { + ADDz(x4, x1, x4); + LDxw(xRAX, x4, 0); + } else + LDXxw(xRAX, x4, x1); + break; case 0xC6: INST_NAME("MOV Seg:Eb, Ib"); grab_segdata(dyn, addr, ninst, x4, seg); @@ -356,14 +380,19 @@ uintptr_t dynarec64_64(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni MOV32w(x3, u8); BSTRINS_D(eb1, x3, eb2 * 8 + 7, eb2 * 8); } else { // mem <= u8 - addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, NULL, 1, 1); + addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, NULL, 0, 1); u8 = F8; if (u8) { ADDI_D(x3, xZR, u8); ed = x3; } else ed = xZR; - STX_B(x3, wback, x4); + if (rex.is32bits) { + ADDz(x4, wback, x4); + ST_B(ed, x4, 0); + } else { + STX_B(ed, wback, x4); + } SMWRITE2(); } break; @@ -376,15 +405,19 @@ uintptr_t dynarec64_64(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ed = TO_LA64((nextop & 7) + (rex.b << 3)); MOV64xw(ed, i64); } else { // mem <= i32 - addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, NULL, 1, 4); + addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, NULL, 0, 4); i64 = F32S; if (i64) { - MOV64xw(x3, i64); + MOV64x(x3, i64); ed = x3; } else ed = xZR; - ADD_D(x4, wback, x4); - SDxw(ed, x4, fixedaddress); + if (rex.is32bits) { + ADDz(x4, wback, x4); + SDxw(ed, x4, 0); + } else { + SDXxw(ed, wback, x4); + } SMWRITE2(); } break; diff --git a/src/dynarec/la64/dynarec_la64_66.c b/src/dynarec/la64/dynarec_la64_66.c index d2d7e075995587d4025f342e675f8e0e663b86a1..6ead1b5c21be3cc35fa148a2b2b5888f3a31a605 100644 --- a/src/dynarec/la64/dynarec_la64_66.c +++ b/src/dynarec/la64/dynarec_la64_66.c @@ -83,7 +83,7 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BSTRPICK_D(x1, xRAX, 15, 0); MOV32w(x2, i32); emit_add16(dyn, ninst, x1, x2, x3, x4, x6); - BSTRINS_D(xRAX, x1, 15, 0); + BSTRINSz(xRAX, x1, 15, 0); break; case 0x09: INST_NAME("OR Ew, Gw"); @@ -110,7 +110,7 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BSTRPICK_D(x1, xRAX, 15, 0); MOV32w(x2, i32); emit_or16(dyn, ninst, x1, x2, x3, x4); - BSTRINS_D(xRAX, x1, 15, 0); + BSTRINSz(xRAX, x1, 15, 0); break; case 0x0F: switch (rep) { @@ -154,7 +154,7 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BSTRPICK_D(x1, xRAX, 15, 0); MOV32w(x2, i32); emit_and16(dyn, ninst, x1, x2, x3, x4); - BSTRINS_D(xRAX, x1, 15, 0); + BSTRINSz(xRAX, x1, 15, 0); break; case 0x29: INST_NAME("SUB Ew, Gw"); @@ -181,7 +181,7 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BSTRPICK_D(x1, xRAX, 15, 0); MOV32w(x2, i32); emit_sub16(dyn, ninst, x1, x2, x3, x4, x5); - BSTRINS_D(xRAX, x1, 15, 0); + BSTRINSz(xRAX, x1, 15, 0); break; case 0x31: INST_NAME("XOR Ew, Gw"); @@ -380,7 +380,7 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (MODREG) { ed = TO_LA64((nextop & 7) + (rex.b << 3)); if (ed != gd) { - BSTRINS_D(ed, gd, 15, 0); + BSTRINSz(ed, gd, 15, 0); } } else { addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 0); @@ -395,13 +395,13 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (MODREG) { ed = TO_LA64((nextop & 7) + (rex.b << 3)); if (ed != gd) { - BSTRINS_D(gd, ed, 15, 0); + BSTRINSz(gd, ed, 15, 0); } } else { addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 0); SMREADLOCK(lock); LD_HU(x1, ed, fixedaddress); - BSTRINS_D(gd, x1, 15, 0); + BSTRINSz(gd, x1, 15, 0); } break; case 0x90: @@ -418,11 +418,10 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else { INST_NAME("XCHG AX, Reg"); MV(x2, xRAX); - BSTRINS_D(xRAX, gd, 15, 0); - BSTRINS_D(gd, x2, 15, 0); + BSTRINSz(xRAX, gd, 15, 0); + BSTRINSz(gd, x2, 15, 0); } break; - case 0xA4: if (rep) { INST_NAME("REP MOVSB"); @@ -530,7 +529,7 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni u16 = F16; MOV32w(x1, u16); gd = TO_LA64((opcode & 7) + (rex.b << 3)); - BSTRINS_D(gd, x1, 15, 0); + BSTRINSz(gd, x1, 15, 0); break; case 0xC1: nextop = F8; @@ -612,7 +611,7 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ed = TO_LA64((nextop & 7) + (rex.b << 3)); u16 = F16; MOV32w(x1, u16); - BSTRINS_D(ed, x1, 15, 0); + BSTRINSz(ed, x1, 15, 0); } else { addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 2); u16 = F16; @@ -717,8 +716,8 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni OR(x2, x2, x3); DIV_W(x3, x2, ed); MOD_W(x4, x2, ed); - BSTRINS_D(xRAX, x3, 15, 0); - BSTRINS_D(xRAX, x4, 15, 0); + BSTRINSz(xRAX, x3, 15, 0); + BSTRINSz(xRAX, x4, 15, 0); break; default: DEFAULT; diff --git a/src/dynarec/la64/dynarec_la64_660f.c b/src/dynarec/la64/dynarec_la64_660f.c index 095512d587b592eabb70dd6e80b77d3bb8701e8c..1cf3b2f9fc4788274fe12782199cf00360f775d7 100644 --- a/src/dynarec/la64/dynarec_la64_660f.c +++ b/src/dynarec/la64/dynarec_la64_660f.c @@ -446,7 +446,7 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int B##NO(x1, 4 + 4); \ BSTRINS_D(gd, ed, 15, 0); - GOCOND(0x40, "CMOV", "Gd, Ed"); + GOCOND(0x40, "CMOV", "Gd, Ed"); #undef GO case 0x54: @@ -996,13 +996,13 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("IMUL Gw,Ew"); SETFLAGS(X_ALL, SF_PENDING); nextop = F8; - UFLAG_DF(x1, d_imul16); GETSEW(x1, 0); GETSGW(x2); MUL_W(x2, x2, x1); UFLAG_RES(x2); BSTRPICK_D(x2, x2, 15, 0); GWBACK; + UFLAG_DF(x1, d_imul16); break; case 0xBE: INST_NAME("MOVSX Gw, Eb"); diff --git a/src/dynarec/la64/dynarec_la64_6664.c b/src/dynarec/la64/dynarec_la64_6664.c index 01db802142fb222d3b624c7d5f5f37eb62d1717c..b6efa1ee87ab920238fe3097ec522e5a861d8754 100644 --- a/src/dynarec/la64/dynarec_la64_6664.c +++ b/src/dynarec/la64/dynarec_la64_6664.c @@ -54,10 +54,11 @@ uintptr_t dynarec64_6664(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); + ADDz(x4, ed, x4); if (rex.w) { - LDX_D(gd, ed, x4); + LD_D(gd, x4, fixedaddress); } else { - LDX_HU(x1, ed, x4); + LD_HU(x1, x4, fixedaddress); BSTRINS_D(gd, x1, 15, 0); } } diff --git a/src/dynarec/la64/dynarec_la64_emit_math.c b/src/dynarec/la64/dynarec_la64_emit_math.c index fcf3230fd6ca8237a1c7578f57ca3e6730a489c7..47cf7ffd99980c2bc4eeb6438b15b9054552a587 100644 --- a/src/dynarec/la64/dynarec_la64_emit_math.c +++ b/src/dynarec/la64/dynarec_la64_emit_math.c @@ -134,11 +134,12 @@ void emit_add32c(dynarec_la64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i if (s1 == xRSP && (!dyn->insts || dyn->insts[ninst].x64.gen_flags == X_PEND)) { // special case when doing math on ESP and only PEND is needed: ignoring it! if (c >= -2048 && c < 2048) { - ADDIxw(s1, s1, c); + ADDI_D(s1, s1, c); } else { - MOV64xw(s2, c); - ADDxw(s1, s1, s2); + MOV64x(s2, c); + ADD_D(s1, s1, s2); } + if (!rex.w) { ZEROUP(s1); } return; } IFX(X_PEND | X_AF | X_CF | X_OF) @@ -422,7 +423,7 @@ void emit_add16(dynarec_la64_t* dyn, int ninst, int s1, int s2, int s3, int s4, } IFXA (X_ALL, la64_lbt) { - X64_ADD_DU(s1, s2); + X64_ADD_H(s1, s2); } ADD_D(s1, s1, s2); @@ -642,6 +643,7 @@ void emit_sub32c(dynarec_la64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i MOV64xw(s2, c); SUBxw(s1, s1, s2); } + if (!rex.w) { ZEROUP(s1); } return; } diff --git a/src/dynarec/la64/dynarec_la64_emit_shift.c b/src/dynarec/la64/dynarec_la64_emit_shift.c index 291674eb1616acfbe5875dc8c571951620c93355..2b83ccba6ec3696e77f4cc595bac42ed1465d9c9 100644 --- a/src/dynarec/la64/dynarec_la64_emit_shift.c +++ b/src/dynarec/la64/dynarec_la64_emit_shift.c @@ -514,7 +514,7 @@ void emit_sar16(dynarec_la64_t* dyn, int ninst, int s1, int s2, int s3, int s4, IFX (X_PEND) { ST_H(s2, xEmu, offsetof(x64emu_t, op2)); ST_H(s1, xEmu, offsetof(x64emu_t, op1)); - SET_DF(s4, d_sar8); + SET_DF(s4, d_sar16); } else IFX (X_ALL) { SET_DFNONE(); } @@ -612,6 +612,8 @@ void emit_sar32c(dynarec_la64_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, } OR(xFlags, xFlags, s3); } + // For the SAR instruction, the OF flag is cleared for all 1-bit shifts. + // OF nop if (rex.w) { SRAI_D(s1, s1, c); @@ -714,17 +716,11 @@ void emit_rol32(dynarec_la64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s X64_ROTL_W(s1, s2); } - if (rex.w) { - ANDI(s4, s2, 0x3f); - } else { - ANDI(s4, s2, 0x1f); - } - if (!rex.w) ZEROUP(s1); - BEQ_NEXT(s4, xZR); + BEQ_NEXT(s2, xZR); - SLLxw(s3, s1, s4); - NEG_D(s4, s4); + SLLxw(s3, s1, s2); + NEG_D(s4, s2); ADDI_D(s4, s4, rex.w ? 64 : 32); SRLxw(s1, s1, s4); OR(s1, s3, s1); @@ -745,12 +741,13 @@ void emit_rol32(dynarec_la64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s } IFX (X_OF) { // the OF flag is set to the exclusive OR of the CF bit (after the rotate) and the most-significant bit of the result. - ADDI_D(s3, xZR, 1); - BNE_NEXT(s2, s3); + ADDI_D(s3, s2, -1); + BNEZ_MARK(s3); SRLIxw(s3, s1, rex.w ? 63 : 31); XOR(s3, s3, s4); // s3: MSB, s4: CF bit SLLI_D(s3, s3, F_OF); OR(xFlags, xFlags, s3); + MARK; } } @@ -759,13 +756,10 @@ void emit_ror32(dynarec_la64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s { int64_t j64; - if (rex.w) { - ANDI(s4, s2, 0x3f); - } else { - ANDI(s4, s2, 0x1f); + if (!rex.w) { ZEROUP(s1); } - BEQ_NEXT(s4, xZR); + BEQ_NEXT(s2, xZR); IFX (X_PEND) { SDxw(s2, xEmu, offsetof(x64emu_t, op2)); SET_DF(s4, rex.w ? d_ror64 : d_ror32); @@ -775,15 +769,15 @@ void emit_ror32(dynarec_la64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s IFXA ((X_CF | X_OF), la64_lbt) { if (rex.w) - X64_ROTR_D(s1, s4); + X64_ROTR_D(s1, s2); else - X64_ROTR_W(s1, s4); + X64_ROTR_W(s1, s2); } if (rex.w) { - ROTR_D(s1, s1, s4); + ROTR_D(s1, s1, s2); } else { - ROTR_W(s1, s1, s4); + ROTR_W(s1, s1, s2); } IFX (X_PEND) { @@ -802,14 +796,15 @@ void emit_ror32(dynarec_la64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s } IFX (X_OF) { // the OF flag is set to the exclusive OR of the two most-significant bits of the result - ADDI_D(s3, xZR, 1); - BNE_NEXT(s2, s3); + ADDI_D(s3, s2, -1); + BNEZ_MARK(s3); SRLIxw(s3, s1, rex.w ? 63 : 31); SRLIxw(s4, s1, rex.w ? 62 : 30); XOR(s3, s3, s4); ANDI(s3, s3, 1); SLLI_D(s3, s3, F_OF); OR(xFlags, xFlags, s3); + MARK; } } diff --git a/src/dynarec/la64/dynarec_la64_f0.c b/src/dynarec/la64/dynarec_la64_f0.c index bfc918e8e418e14fc10377bcff952f5ecf512225..a6cad8dccd50b93b3447a0abb678c6293da6893e 100644 --- a/src/dynarec/la64/dynarec_la64_f0.c +++ b/src/dynarec/la64/dynarec_la64_f0.c @@ -188,21 +188,29 @@ uintptr_t dynarec64_F0(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } break; case 0xC7: - switch (rep) { - case 0: + // rep has no impact here + nextop = F8; + switch ((nextop >> 3) & 7) { + case 1: if (rex.w) { INST_NAME("LOCK CMPXCHG16B Gq, Eq"); + if (!la64_scq) { + static int warned = 0; + PASS3(if (!warned) dynarec_log(LOG_INFO, "Warning, LOCK CMPXCHG16B is not well supported on LoongArch without SCQ and issues are expected.\n")); + warned = 1; + } } else { INST_NAME("LOCK CMPXCHG8B Gq, Eq"); } SETFLAGS(X_ZF, SF_SUBSET); - nextop = F8; addr = geted(dyn, addr, ninst, nextop, &wback, x1, x2, &fixedaddress, rex, LOCK_LOCK, 0, 0); - if (la64_lbt) { - X64_SET_EFLAGS(xZR, X_ZF); - } else { - ADDI_D(x2, xZR, ~(1 << F_ZF)); - AND(xFlags, xFlags, x2); + UFLAG_IF { + if (la64_lbt) { + X64_SET_EFLAGS(xZR, X_ZF); + } else { + ADDI_D(x2, xZR, ~(1 << F_ZF)); + AND(xFlags, xFlags, x2); + } } if (rex.w) { if (la64_scq) { @@ -215,11 +223,13 @@ uintptr_t dynarec64_F0(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni MV(x5, xRBX); SC_Q(x5, xRCX, wback); BEQZ_MARKLOCK(x5); - if (la64_lbt) { - ADDI_D(x5, xZR, -1); - X64_SET_EFLAGS(x5, X_ZF); - } else { - ORI(xFlags, xFlags, 1 << F_ZF); + UFLAG_IF { + if (la64_lbt) { + ADDI_D(x5, xZR, -1); + X64_SET_EFLAGS(x5, X_ZF); + } else { + ORI(xFlags, xFlags, 1 << F_ZF); + } } B_MARK3_nocond; MARK; @@ -243,11 +253,13 @@ uintptr_t dynarec64_F0(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BNE_MARK(x3, xRDX); ST_D(xRBX, wback, 0); ST_D(xRCX, wback, 8); - if (la64_lbt) { - ADDI_D(x5, xZR, -1); - X64_SET_EFLAGS(x5, X_ZF); - } else { - ORI(xFlags, xFlags, 1 << F_ZF); + UFLAG_IF { + if (la64_lbt) { + ADDI_D(x5, xZR, -1); + X64_SET_EFLAGS(x5, X_ZF); + } else { + ORI(xFlags, xFlags, 1 << F_ZF); + } } B_MARK3_nocond; MARK; @@ -260,23 +272,46 @@ uintptr_t dynarec64_F0(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } } else { SMDMB(); - ZEROUP2(x3, xRAX); - SLLI_D(x2, xRDX, 32); - OR(x3, x3, x2); - ZEROUP2(x4, xRBX); - SLLI_D(x2, xRCX, 32); - OR(x4, x4, x2); + BSTRINS_D(x3, xRAX, 31, 0); + BSTRINS_D(x3, xRDX, 63, 32); + BSTRINS_D(x4, xRBX, 31, 0); + BSTRINS_D(x4, xRCX, 63, 32); + ANDI(x2, wback, 7); + BNEZ_MARK2(x2); + // Aligned MARKLOCK; LL_D(x2, wback, 0); BNE_MARK(x2, x3); // EDX_EAX != Ed MV(x5, x4); SC_D(x5, wback, 0); BEQZ_MARKLOCK(x5); - if (la64_lbt) { - ADDI_D(x5, xZR, -1); - X64_SET_EFLAGS(x5, X_ZF); - } else { - ORI(xFlags, xFlags, 1 << F_ZF); + UFLAG_IF { + if (la64_lbt) { + ADDI_D(x5, xZR, -1); + X64_SET_EFLAGS(x5, X_ZF); + } else { + ORI(xFlags, xFlags, 1 << F_ZF); + } + } + B_MARK3_nocond; + MARK2; + // Unaligned + ADDI_W(x5, xZR, 0xFF8); + AND(x5, wback, x5); + MARKLOCK2; + LD_D(x2, wback, 0); + LL_D(x6, x5, 0); + BNE_MARK(x2, x3); // EDX_EAX != Ed + SC_D(x6, x5, 0); + BEQZ_MARKLOCK2(x6); + ST_D(x4, wback, 0); + UFLAG_IF { + if (la64_lbt) { + ADDI_D(x5, xZR, -1); + X64_SET_EFLAGS(x5, X_ZF); + } else { + ORI(xFlags, xFlags, 1 << F_ZF); + } } B_MARK3_nocond; MARK; diff --git a/src/dynarec/la64/dynarec_la64_f20f.c b/src/dynarec/la64/dynarec_la64_f20f.c index 9f8bcc247102e4fd937eb55ff2380a8c8d7a422b..034e33be3dc957c4f3828f6c001283f02b3705bf 100644 --- a/src/dynarec/la64/dynarec_la64_f20f.c +++ b/src/dynarec/la64/dynarec_la64_f20f.c @@ -330,4 +330,4 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int DEFAULT; } return addr; -} \ No newline at end of file +} diff --git a/src/dynarec/la64/dynarec_la64_f30f.c b/src/dynarec/la64/dynarec_la64_f30f.c index 5f116b2df184555d9d42ab953e83dafcac9e7a3c..f0cfaf76932e0b3efae5b644089c50975897fc06 100644 --- a/src/dynarec/la64/dynarec_la64_f30f.c +++ b/src/dynarec/la64/dynarec_la64_f30f.c @@ -381,4 +381,4 @@ uintptr_t dynarec64_F30F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int DEFAULT; } return addr; -} \ No newline at end of file +} diff --git a/src/dynarec/la64/dynarec_la64_helper.c b/src/dynarec/la64/dynarec_la64_helper.c index b5b721fe39dc75f1e24d7eaeb906efc1ddccc146..b33445f3f878d14a6f7a0d91d6b2f6b4175aa8cb 100644 --- a/src/dynarec/la64/dynarec_la64_helper.c +++ b/src/dynarec/la64/dynarec_la64_helper.c @@ -133,7 +133,7 @@ uintptr_t geted(dynarec_la64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop, i64 = F32S; else i64 = F8S; - if (i64 == 0 || ((i64 >= -2048) && (i64 <= 2047) && i12)) { + if (i64 == 0 || ((i64 >= -2048) && (i64 <= maxval) && i12)) { *fixaddress = i64; if ((nextop & 7) == 4) { if (sib_reg != 4) { @@ -201,13 +201,15 @@ static uintptr_t geted_32(dynarec_la64_t* dyn, uintptr_t addr, int ninst, uint8_ int64_t tmp = F32S; if (sib_reg != 4) { if (tmp && ((tmp < -2048) || (tmp > maxval) || !i12)) { - MOV32w(scratch, tmp); + // no need to zero up, as we did it below + la64_move32(dyn, ninst, scratch, tmp, 0); if ((sib >> 6)) { SLLI_D(ret, TO_LA64(sib_reg), sib >> 6); ADD_W(ret, ret, scratch); } else { ADD_W(ret, TO_LA64(sib_reg), scratch); } + ZEROUP(ret); } else { if (sib >> 6) { SLLI_D(ret, TO_LA64(sib_reg), (sib >> 6)); @@ -233,6 +235,7 @@ static uintptr_t geted_32(dynarec_la64_t* dyn, uintptr_t addr, int ninst, uint8_ } else { ADD_W(ret, TO_LA64(sib_reg2), TO_LA64(sib_reg)); } + ZEROUP(ret); } else { ret = TO_LA64(sib_reg2); } @@ -265,7 +268,7 @@ static uintptr_t geted_32(dynarec_la64_t* dyn, uintptr_t addr, int ninst, uint8_ i32 = F32S; else i32 = F8S; - if (i32 == 0 || ((i32 >= -2048) && (i32 <= 2047) && i12)) { + if (i32 == 0 || ((i32 >= -2048) && (i32 <= maxval) && i12)) { *fixaddress = i32; if ((nextop & 7) == 4) { if (sib_reg != 4) { @@ -275,6 +278,7 @@ static uintptr_t geted_32(dynarec_la64_t* dyn, uintptr_t addr, int ninst, uint8_ } else { ADD_W(ret, TO_LA64(sib_reg2), TO_LA64(sib_reg)); } + ZEROUP(ret); } else { ret = TO_LA64(sib_reg2); } @@ -298,8 +302,10 @@ static uintptr_t geted_32(dynarec_la64_t* dyn, uintptr_t addr, int ninst, uint8_ scratch = TO_LA64((nextop & 0x07)); } ADDI_W(ret, scratch, i32); + ZEROUP(ret); } else { - MOV32w(scratch, i32); + // no need to zero up, as we did it below + la64_move32(dyn, ninst, scratch, i32, 0); if ((nextop & 7) == 4) { if (sib_reg != 4) { ADD_W(scratch, scratch, TO_LA64(sib_reg2)); @@ -317,6 +323,7 @@ static uintptr_t geted_32(dynarec_la64_t* dyn, uintptr_t addr, int ninst, uint8_ PASS3(int tmp = TO_LA64((nextop & 0x07))); ADD_W(ret, tmp, scratch); } + ZEROUP(ret); } } } @@ -354,8 +361,10 @@ uintptr_t geted32(dynarec_la64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop if ((sib >> 6)) { SLLI_D(ret, TO_LA64(sib_reg), sib >> 6); ADD_W(ret, ret, scratch); - } else + } else { ADD_W(ret, TO_LA64(sib_reg), scratch); + } + ZEROUP(ret); } else { if (sib >> 6) SLLI_D(ret, TO_LA64(sib_reg), (sib >> 6)); @@ -377,17 +386,21 @@ uintptr_t geted32(dynarec_la64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop if ((sib >> 6)) { SLLI_D(ret, TO_LA64(sib_reg), (sib >> 6)); ADD_W(ret, ret, TO_LA64(sib_reg2)); - } else + } else { ADD_W(ret, TO_LA64(sib_reg2), TO_LA64(sib_reg)); + } + ZEROUP(ret); } else { ret = TO_LA64(sib_reg2); } } } else if ((nextop & 7) == 5) { uint32_t tmp = F32; - MOV32w(ret, tmp); + // no need to zero up, as we did it below + la64_move32(dyn, ninst, ret, tmp, 0); GETIP(addr + delta); ADD_W(ret, ret, xRIP); + ZEROUP(ret); switch (lock) { case 1: addLockAddress(addr + delta + tmp); break; case 2: @@ -413,15 +426,17 @@ uintptr_t geted32(dynarec_la64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop i64 = F32S; else i64 = F8S; - if (i64 == 0 || ((i64 >= -2048) && (i64 <= 2047) && i12)) { + if (i64 == 0 || ((i64 >= -2048) && (i64 <= maxval) && i12)) { *fixaddress = i64; if ((nextop & 7) == 4) { if (sib_reg != 4) { if (sib >> 6) { SLLI_D(ret, TO_LA64(sib_reg), (sib >> 6)); ADD_W(ret, ret, TO_LA64(sib_reg2)); - } else + } else { ADD_W(ret, TO_LA64(sib_reg2), TO_LA64(sib_reg)); + } + ZEROUP(ret); } else { ret = TO_LA64(sib_reg2); } @@ -443,8 +458,10 @@ uintptr_t geted32(dynarec_la64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop } else scratch = TO_LA64((nextop & 0x07) + (rex.b << 3)); ADDI_W(ret, scratch, i64); + ZEROUP(ret); } else { - MOV32w(scratch, i64); + // no need to zero up, as we did it below + la64_move32(dyn, ninst, scratch, i64, 0); if ((nextop & 7) == 4) { if (sib_reg != 4) { ADD_W(scratch, scratch, TO_LA64(sib_reg2)); @@ -461,6 +478,7 @@ uintptr_t geted32(dynarec_la64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop PASS3(int tmp = TO_LA64((nextop & 0x07) + (rex.b << 3))); ADD_W(ret, tmp, scratch); } + ZEROUP(ret); } } } @@ -512,6 +530,9 @@ void jump_to_next(dynarec_la64_t* dyn, uintptr_t ip, int reg, int ninst, int is3 MAYUSE(ninst); MESSAGE(LOG_DUMP, "Jump to next\n"); + if(is32bits) + ip &= 0xffffffffLL; + if (reg) { if (reg != xRIP) { MV(xRIP, reg); @@ -550,7 +571,7 @@ void jump_to_next(dynarec_la64_t* dyn, uintptr_t ip, int reg, int ninst, int is3 // MOVx(x3, 15); no access to PC reg #endif SMEND(); - JIRL(xRA, x2, 0x0); // save LR... + JIRL((dyn->insts[ninst].x64.has_callret ? xRA : xZR), x2, 0x0); // save LR... } void ret_to_epilog(dynarec_la64_t* dyn, int ninst, rex_t rex) @@ -563,11 +584,11 @@ void ret_to_epilog(dynarec_la64_t* dyn, int ninst, rex_t rex) SMEND(); if (box64_dynarec_callret) { // pop the actual return address from RV64 stack - LD_D(x2, xSP, 0); // native addr + LD_D(xRA, xSP, 0); // native addr LD_D(x6, xSP, 8); // x86 addr ADDI_D(xSP, xSP, 16); // pop BNE(x6, xRIP, 2 * 4); // is it the right address? - BR(x2); + BR(xRA); // not the correct return address, regular jump, but purge the stack first, it's unsync now... ADDI_D(xSP, xSavedSP, -16); } @@ -588,7 +609,7 @@ void ret_to_epilog(dynarec_la64_t* dyn, int ninst, rex_t rex) BSTRPICK_D(x2, xRIP, JMPTABL_START0 + JMPTABL_SHIFT0 - 1, JMPTABL_START0); ALSL_D(x3, x2, x3, 3); LD_D(x2, x3, 0); - BR(x2); // save LR + BR(x2); CLEARIP(); } @@ -608,11 +629,11 @@ void retn_to_epilog(dynarec_la64_t* dyn, int ninst, rex_t rex, int n) SMEND(); if (box64_dynarec_callret) { // pop the actual return address from RV64 stack - LD_D(x2, xSP, 0); // native addr + LD_D(xRA, xSP, 0); // native addr LD_D(x6, xSP, 8); // x86 addr ADDI_D(xSP, xSP, 16); // pop BNE(x6, xRIP, 2 * 4); // is it the right address? - BR(x2); + BR(xRA); // not the correct return address, regular jump, but purge the stack first, it's unsync now... ADDI_D(xSP, xSavedSP, -16); } @@ -633,7 +654,7 @@ void retn_to_epilog(dynarec_la64_t* dyn, int ninst, rex_t rex, int n) BSTRPICK_D(x2, xRIP, JMPTABL_START0 + JMPTABL_SHIFT0 - 1, JMPTABL_START0); ALSL_D(x3, x2, x3, 3); LD_D(x2, x3, 0); - BR(x2); // save LR + BR(x2); CLEARIP(); } @@ -1146,7 +1167,6 @@ static void unloadCache(dynarec_la64_t* dyn, int ninst, int stack_cnt, int s1, i static void fpuCacheTransform(dynarec_la64_t* dyn, int ninst, int s1, int s2, int s3) { -#if STEP > 1 int i2 = dyn->insts[ninst].x64.jmp_insts; if (i2 < 0) return; @@ -1259,12 +1279,10 @@ static void fpuCacheTransform(dynarec_la64_t* dyn, int ninst, int s1, int s2, in } } MESSAGE(LOG_DUMP, "\t---- Cache Transform\n"); -#endif } static void flagsCacheTransform(dynarec_la64_t* dyn, int ninst, int s1) { -#if STEP > 1 int j64; int jmp = dyn->insts[ninst].x64.jmp_insts; if(jmp<0) @@ -1303,7 +1321,6 @@ static void flagsCacheTransform(dynarec_la64_t* dyn, int ninst, int s1) CALL_(UpdateFlags, -1, 0); MARKF2; } -#endif } void CacheTransform(dynarec_la64_t* dyn, int ninst, int cacheupd, int s1, int s2, int s3) { @@ -1339,4 +1356,4 @@ void la64_move64(dynarec_la64_t* dyn, int ninst, int reg, int64_t val) return; } LU52I_D(reg, reg, (val >> 52) & 0xfff); -} \ No newline at end of file +} diff --git a/src/dynarec/la64/dynarec_la64_helper.h b/src/dynarec/la64/dynarec_la64_helper.h index 9bf58812409ab8ed1501968fb4a11d1b55a70640..21f3c2af62d561166f1abb34c1ef4a3a42bcee1c 100644 --- a/src/dynarec/la64/dynarec_la64_helper.h +++ b/src/dynarec/la64/dynarec_la64_helper.h @@ -151,15 +151,21 @@ #define GETEW(i, D) GETEWW(x3, i, D) // GETEDO can use r1 for ed, and r2 for wback. wback is 0 if ed is xEAX..xEDI -#define GETEDO(O, D) \ - if (MODREG) { \ - ed = TO_LA64((nextop & 7) + (rex.b << 3)); \ - wback = 0; \ - } else { \ - SMREAD(); \ - addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, NULL, 0, D); \ - LDXxw(x1, wback, O); \ - ed = x1; \ +#define GETEDO(O, D) \ + if (MODREG) { \ + ed = TO_LA64((nextop & 7) + (rex.b << 3)); \ + wback = 0; \ + } else { \ + SMREAD(); \ + if (rex.is32bits) { \ + addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, NULL, 1, D); \ + ADDz(O, wback, O); \ + LD_WU(x1, O, fixedaddress); \ + } else { \ + addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, NULL, 0, D); \ + LDXxw(x1, wback, O); \ + } \ + ed = x1; \ } // GETSED can use r1 for ed, and r2 for wback. ed will be sign extended! @@ -203,10 +209,15 @@ SMWRITE(); \ } -#define WBACKO(O) \ - if (wback) { \ - SDXxw(ed, wback, O); \ - SMWRITE2(); \ +#define WBACKO(O) \ + if (wback) { \ + if (rex.is32bits) { \ + ADDz(O, wback, O); \ + ST_W(ed, O, 0); \ + } else { \ + SDXxw(ed, wback, O); \ + } \ + SMWRITE2(); \ } // GETSEW will use i for ed, and can use r3 for wback. This is the Signed version @@ -279,7 +290,7 @@ ed = i; \ } else { \ SMREAD(); \ - addr = geted(dyn, addr, ninst, nextop, &wback, x2, x3, &fixedaddress, rex, NULL, 1, D); \ + addr = geted(dyn, addr, ninst, nextop, &wback, x3, x2, &fixedaddress, rex, NULL, 1, D); \ LD_B(i, wback, fixedaddress); \ wb1 = 1; \ ed = i; \ @@ -291,34 +302,39 @@ gb2 = 0; \ } else { \ gd = (nextop & 0x38) >> 3; \ - gb2 = ((gd & 4) >> 2); \ + gb2 = ((gd & 4) << 1); \ gb1 = TO_LA64((gd & 3)); \ } \ gd = i; \ BSTRPICK_D(gd, gb1, gb2 + 7, gb2); // GETEBO will use i for ed, i is also Offset, and can use r3 for wback. -#define GETEBO(i, D) \ - if (MODREG) { \ - if (rex.rex) { \ - wback = TO_LA64((nextop & 7) + (rex.b << 3)); \ - wb2 = 0; \ - } else { \ - wback = (nextop & 7); \ - wb2 = (wback >> 2) * 8; \ - wback = TO_LA64(wback & 3); \ - } \ - BSTRPICK_D(i, wback, wb2 + 7, wb2); \ - wb1 = 0; \ - ed = i; \ - } else { \ - SMREAD(); \ - addr = geted(dyn, addr, ninst, nextop, &wback, x3, x2, &fixedaddress, rex, NULL, 1, D); \ - ADD_D(x3, wback, i); \ - if (wback != x3) wback = x3; \ - LD_B(i, wback, fixedaddress); \ - wb1 = 1; \ - ed = i; \ +#define GETEBO(i, D) \ + if (MODREG) { \ + if (rex.rex) { \ + wback = TO_LA64((nextop & 7) + (rex.b << 3)); \ + wb2 = 0; \ + } else { \ + wback = (nextop & 7); \ + wb2 = (wback >> 2) * 8; \ + wback = TO_LA64(wback & 3); \ + } \ + BSTRPICK_D(i, wback, wb2 + 7, wb2); \ + wb1 = 0; \ + ed = i; \ + } else { \ + SMREAD(); \ + if (rex.is32bits) { \ + addr = geted(dyn, addr, ninst, nextop, &wback, x3, x2, &fixedaddress, rex, NULL, 1, D); \ + ADDz(x3, wback, i); \ + if (wback != x3) wback = x3; \ + LD_BU(i, wback, fixedaddress); \ + } else { \ + addr = geted(dyn, addr, ninst, nextop, &wback, x3, x2, &fixedaddress, rex, NULL, 0, D); \ + LDX_BU(i, wback, i); \ + } \ + wb1 = 1; \ + ed = i; \ } // Get GX as a quad (might use x1) @@ -425,6 +441,8 @@ #define GETMARKSEG dyn->insts[ninst].markseg #define MARKLOCK dyn->insts[ninst].marklock = dyn->native_size #define GETMARKLOCK dyn->insts[ninst].marklock +#define MARKLOCK2 dyn->insts[ninst].marklock2 = dyn->native_size +#define GETMARKLOCK2 dyn->insts[ninst].marklock2 #define Bxx_gen(OP, M, reg1, reg2) \ j64 = GET##M - dyn->native_size; \ @@ -446,6 +464,8 @@ #define BNE_MARK3(reg1, reg2) Bxx_gen(NE, MARK3, reg1, reg2) // Branch to MARKLOCK if reg1!=reg2 (use j64) #define BNE_MARKLOCK(reg1, reg2) Bxx_gen(NE, MARKLOCK, reg1, reg2) +// Branch to MARKLOCK2 if reg1!=reg2 (use j64) +#define BNE_MARKLOCK2(reg1, reg2) Bxx_gen(NE, MARKLOCK2, reg1, reg2) // Branch to MARK if reg1==reg2 (use j64) #define BEQ_MARK(reg1, reg2) Bxx_gen(EQ, MARK, reg1, reg2) @@ -455,12 +475,16 @@ #define BEQ_MARK3(reg1, reg2) Bxx_gen(EQ, MARK3, reg1, reg2) // Branch to MARKLOCK if reg1==reg2 (use j64) #define BEQ_MARKLOCK(reg1, reg2) Bxx_gen(EQ, MARKLOCK, reg1, reg2) +// Branch to MARKLOCK2 if reg1==reg2 (use j64) +#define BEQ_MARKLOCK2(reg1, reg2) Bxx_gen(EQ, MARKLOCK2, reg1, reg2) // Branch to MARK if reg1==0 (use j64) #define BEQZ_MARK(reg) BxxZ_gen(EQ, MARK, reg) // Branch to MARK2 if reg1==0 (use j64) #define BEQZ_MARK2(reg) BxxZ_gen(EQ, MARK2, reg) // Branch to MARKLOCK if reg1==0 (use j64) #define BEQZ_MARKLOCK(reg) BxxZ_gen(EQ, MARKLOCK, reg) +// Branch to MARKLOCK2 if reg1==0 (use j64) +#define BEQZ_MARKLOCK2(reg) BxxZ_gen(EQ, MARKLOCK2, reg) // Branch to MARK if reg1!=0 (use j64) #define BNEZ_MARK(reg) BxxZ_gen(NE, MARK, reg) @@ -470,6 +494,8 @@ #define BNEZ_MARK3(reg) BxxZ_gen(NE, MARK3, reg) // Branch to MARKLOCK if reg1!=0 (use j64) #define BNEZ_MARKLOCK(reg) BxxZ_gen(NE, MARKLOCK, reg) +// Branch to MARKLOCK2 if reg1!=0 (use j64) +#define BNEZ_MARKLOCK2(reg) BxxZ_gen(NE, MARKLOCK2, reg) // Branch to MARK if fcc!=0 (use j64) #define BCNEZ_MARK(fcc) BCxxZ_gen(NE, MARK, fcc) @@ -479,6 +505,8 @@ #define BCNEZ_MARK3(fcc) BCxxZ_gen(NE, MARK3, fcc) // Branch to MARKLOCK if fcc!=0 (use j64) #define BCNEZ_MARKLOCK(fcc) BxxZ_gen(NE, MARKLOCK, fcc) +// Branch to MARKLOCK2 if fcc!=0 (use j64) +#define BCNEZ_MARKLOCK2(fcc) BxxZ_gen(NE, MARKLOCK2, fcc) // Branch to MARK if fcc==0 (use j64) #define BCEQZ_MARK(fcc) BCxxZ_gen(EQ, MARK, fcc) @@ -488,6 +516,8 @@ #define BCEQZ_MARK3(fcc) BCxxZ_gen(EQ, MARK3, fcc) // Branch to MARKLOCK if fcc==0 (use j64) #define BCEQZ_MARKLOCK(fcc) BxxZ_gen(EQ, MARKLOCK, fcc) +// Branch to MARKLOCK2 if fcc==0 (use j64) +#define BCEQZ_MARKLOCK2(fcc) BxxZ_gen(EQ, MARKLOCK2, fcc) // Branch to MARK if reg1f.dfnone_here=1; \ - if (!dyn->f.dfnone) { \ - ST_W(xZR, xEmu, offsetof(x64emu_t, df)); \ - dyn->f.dfnone = 1; \ - } } while(0); -#define SET_DF(S, N) \ - if ((N) != d_none) { \ - MOV32w(S, (N)); \ - ST_W(S, xEmu, offsetof(x64emu_t, df)); \ - dyn->f.dfnone = 0; \ - } else \ +#define SET_DFNONE() \ + do { \ + dyn->f.dfnone_here = 1; \ + if (!dyn->f.dfnone) { \ + ST_W(xZR, xEmu, offsetof(x64emu_t, df)); \ + dyn->f.dfnone = 1; \ + } \ + } while (0); + +#define SET_DF(S, N) \ + if ((N) != d_none) { \ + MOV32w(S, (N)); \ + ST_W(S, xEmu, offsetof(x64emu_t, df)); \ + if (dyn->f.pending == SF_PENDING \ + && dyn->insts[ninst].x64.need_after \ + && !(dyn->insts[ninst].x64.need_after & X_PEND)) { \ + CALL_(UpdateFlags, -1, 0); \ + dyn->f.pending = SF_SET; \ + SET_NODF(); \ + } \ + dyn->f.dfnone = 0; \ + } else \ SET_DFNONE() + #define SET_NODF() dyn->f.dfnone = 0 -#define SET_DFOK() dyn->f.dfnone = 1; dyn->f.dfnone_here=1 +#define SET_DFOK() \ + dyn->f.dfnone = 1; \ + dyn->f.dfnone_here = 1 -#define CLEAR_FLAGS_(s) \ - MOV64x(s, (1UL << F_AF) | (1UL << F_CF) | (1UL << F_OF) | (1UL << F_ZF) | (1UL << F_SF) | (1UL << F_PF)); ANDN(xFlags, xFlags, s); +#define CLEAR_FLAGS_(s) \ + MOV64x(s, (1UL << F_AF) | (1UL << F_CF) | (1UL << F_OF) | (1UL << F_ZF) | (1UL << F_SF) | (1UL << F_PF)); \ + ANDN(xFlags, xFlags, s); #define CLEAR_FLAGS(s) \ - IFX(X_ALL) { CLEAR_FLAGS_(s) } + IFX (X_ALL) { CLEAR_FLAGS_(s) } #define CALC_SUB_FLAGS(op1_, op2, res, scratch1, scratch2, width) \ - IFX(X_AF | X_CF | X_OF) \ - { \ + IFX (X_AF | X_CF | X_OF) { \ /* calc borrow chain */ \ /* bc = (res & (~op1 | op2)) | (~op1 & op2) */ \ OR(scratch1, op1_, op2); \ AND(scratch2, res, scratch1); \ AND(op1_, op1_, op2); \ OR(scratch2, scratch2, op1_); \ - IFX(X_AF) \ - { \ + IFX (X_AF) { \ /* af = bc & 0x8 */ \ ANDI(scratch1, scratch2, 8); \ BEQZ(scratch1, 8); \ ORI(xFlags, xFlags, 1 << F_AF); \ } \ - IFX(X_CF) \ - { \ + IFX (X_CF) { \ /* cf = bc & (1<<(width-1)) */ \ if ((width) == 8) { \ ANDI(scratch1, scratch2, 0x80); \ @@ -626,8 +666,7 @@ BEQZ(scratch1, 8); \ ORI(xFlags, xFlags, 1 << F_CF); \ } \ - IFX(X_OF) \ - { \ + IFX (X_OF) { \ /* of = ((bc >> (width-2)) ^ (bc >> (width-1))) & 0x1; */ \ SRLI_D(scratch1, scratch2, (width)-2); \ SRLI_D(scratch2, scratch1, 1); \ @@ -639,7 +678,9 @@ } #ifndef MAYSETFLAGS -#define MAYSETFLAGS() do {} while (0) +#define MAYSETFLAGS() \ + do { \ + } while (0) #endif #ifndef READFLAGS @@ -713,7 +754,7 @@ #define ARCH_RESET() #if STEP < 2 -#define GETIP(A) TABLE64(0, 0) +#define GETIP(A) TABLE64(0, 0) #define GETIP_(A) TABLE64(0, 0) #else // put value in the Table64 even if not using it for now to avoid difference between Step2 and Step3. Needs to be optimized later... @@ -857,8 +898,8 @@ void* la64_next(x64emu_t* emu, uintptr_t addr); #define x87_restoreround STEPNAME(x87_restoreround) #define sse_setround STEPNAME(sse_setround) -#define x87_forget STEPNAME(x87_forget) -#define sse_purge07cache STEPNAME(sse_purge07cache) +#define x87_forget STEPNAME(x87_forget) +#define sse_purge07cache STEPNAME(sse_purge07cache) #define sse_get_reg STEPNAME(sse_get_reg) #define sse_get_reg_empty STEPNAME(sse_get_reg_empty) #define sse_forget_reg STEPNAME(sse_forget_reg) @@ -1127,13 +1168,13 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int } // Restore xFlags from LBT.eflags -#define RESTORE_EFLAGS(s) \ - do { \ - if (la64_lbt) { \ - CLEAR_FLAGS_(s); \ - X64_GET_EFLAGS(s, X_ALL); \ - OR(xFlags, xFlags, s); \ - } \ +#define RESTORE_EFLAGS(s) \ + do { \ + if (la64_lbt) { \ + CLEAR_FLAGS_(s); \ + X64_GET_EFLAGS(s, X_ALL); \ + OR(xFlags, xFlags, s); \ + } \ } while (0) // Spill xFlags to LBT.eflags @@ -1144,6 +1185,6 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int } \ } while (0) -#define PURGE_YMM() /* TODO */ +#define PURGE_YMM() /* TODO */ #endif //__DYNAREC_LA64_HELPER_H__ diff --git a/src/dynarec/la64/dynarec_la64_jmpnext.c b/src/dynarec/la64/dynarec_la64_jmpnext.c index 793eb7297771488e72277cc63e1f83448c90a62d..abb49ff982307bef7c8ba65716d0b8665aa87413 100644 --- a/src/dynarec/la64/dynarec_la64_jmpnext.c +++ b/src/dynarec/la64/dynarec_la64_jmpnext.c @@ -2,7 +2,11 @@ #include "la64_emitter.h" -#define EMIT(A) *block = (A); ++block; +#define EMIT(A) \ + do { \ + *block = (A); \ + ++block; \ + } while (0) void CreateJmpNext(void* addr, void* next) { uint32_t* block = (uint32_t*)addr; @@ -10,4 +14,4 @@ void CreateJmpNext(void* addr, void* next) PCADDU12I(x2, SPLIT20(diff)); LD_D(x2, x2, SPLIT12(diff)); BR(x2); -} \ No newline at end of file +} diff --git a/src/dynarec/la64/dynarec_la64_pass0.h b/src/dynarec/la64/dynarec_la64_pass0.h index b3f0f7ef2b182e7b9a9f09bdc6f01889692724e2..3ed6c608ca0f725e5a503c8d6b175ebd9c96a329 100644 --- a/src/dynarec/la64/dynarec_la64_pass0.h +++ b/src/dynarec/la64/dynarec_la64_pass0.h @@ -40,7 +40,7 @@ #define DEFAULT \ --dyn->size; \ *ok = -1; \ - if (box64_dynarec_log >= LOG_INFO || box64_dynarec_dump || box64_dynarec_missing) { \ + if (box64_dynarec_log >= LOG_INFO || box64_dynarec_dump || box64_dynarec_missing==1) { \ dynarec_log(LOG_NONE, "%p: Dynarec stopped because of %sOpcode %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", \ (void*)ip, rex.is32bits ? "32bits " : "", \ PKip(0), \ diff --git a/src/dynarec/la64/dynarec_la64_private.h b/src/dynarec/la64/dynarec_la64_private.h index 56b2e715c95780d4a6386a5a45128614e058e3aa..3d65de485a7e1f7210af3c1d293377553b6e5a65 100644 --- a/src/dynarec/la64/dynarec_la64_private.h +++ b/src/dynarec/la64/dynarec_la64_private.h @@ -78,6 +78,7 @@ typedef struct instruction_la64_s { uintptr_t markf[2]; uintptr_t markseg; uintptr_t marklock; + uintptr_t marklock2; int pass2choice;// value for choices that are fixed on pass2 for pass3 uintptr_t natcall; uint16_t retn; @@ -85,7 +86,7 @@ typedef struct instruction_la64_s { uint16_t ymm0_in; // bitmap of ymm to zero at purge uint16_t ymm0_add; // the ymm0 added by the opcode uint16_t ymm0_sub; // the ymm0 removed by the opcode - uint16_t ymm0_out; // the ymmm0 at th end of the opcode + uint16_t ymm0_out; // the ymm0 at th end of the opcode uint16_t ymm0_pass2, ymm0_pass3; uint8_t barrier_maybe; uint8_t will_write; diff --git a/src/dynarec/la64/la64_emitter.h b/src/dynarec/la64/la64_emitter.h index 5f34cd1431f17cd2edc076424039882014248a10..dff896615648c03ed58ae30aa9aac2566543da2e 100644 --- a/src/dynarec/la64/la64_emitter.h +++ b/src/dynarec/la64/la64_emitter.h @@ -505,6 +505,12 @@ f24-f31 fs0-fs7 Static registers Callee #define ZEROUP(rd) BSTRPICK_D(rd, rd, 31, 0) #define ZEROUP2(rd, rj) BSTRPICK_D(rd, rj, 31, 0) +#define BSTRINSz(rd, rj, msbd6, lsbd6) \ + do { \ + BSTRINS_D(rd, rj, msbd6, lsbd6); \ + if (rex.is32bits) ZEROUP(rd); \ + } while (0) + #define CLO_W(rd, rj) EMIT(type_2R(0b0000000000000000000100, rj, rd)) #define CLZ_W(rd, rj) EMIT(type_2R(0b0000000000000000000101, rj, rd)) #define CTO_W(rd, rj) EMIT(type_2R(0b0000000000000000000110, rj, rd)) @@ -2006,20 +2012,6 @@ LSX instruction starts with V, LASX instruction starts with XV. //////////////////////////////////////////////////////////////////////////////// - -// GR[rd] = imm32 -#define MOV32w_(rd, imm32, zeroup) \ - do { \ - if (((uint32_t)(imm32)) > 0xfffu) { \ - LU12I_W(rd, (imm32) >> 12); \ - ORI(rd, rd, imm32); \ - if (zeroup && (int32_t)imm32 < 0) \ - ZEROUP(rd); \ - } else { \ - ORI(rd, xZR, imm32); \ - } \ - } while (0) - // MOV64x/MOV32w is quite complex, so use a function for this #define MOV64x(A, B) la64_move64(dyn, ninst, A, B) #define MOV32w(A, B) la64_move32(dyn, ninst, A, B, 1) @@ -2084,10 +2076,12 @@ LSX instruction starts with V, LASX instruction starts with XV. #define ADDz(rd, rj, rk) \ do { \ - if (rex.is32bits) \ - ADD_W(rd, rj, rk); \ - else \ + if (!rex.is32bits) \ ADD_D(rd, rj, rk); \ + else { \ + ADD_W(rd, rj, rk); \ + ZEROUP(rd); \ + } \ } while (0) #define LDxw(rd, rj, imm12) \ @@ -2183,12 +2177,12 @@ LSX instruction starts with V, LASX instruction starts with XV. #define PUSH1_32(reg) \ do { \ ST_W(reg, xRSP, -4); \ - ADDI_W(xRSP, xRSP, -4); \ + ADDI_D(xRSP, xRSP, -4); \ } while (0); #define POP1_32(reg) \ do { \ LD_WU(reg, xRSP, 0); \ - if (reg != xRSP) ADDI_W(xRSP, xRSP, 4); \ + if (reg != xRSP) ADDI_D(xRSP, xRSP, 4); \ } while (0); // POP reg diff --git a/src/dynarec/rv64/dynarec_rv64_00_0.c b/src/dynarec/rv64/dynarec_rv64_00_0.c index 716671d567d637d21d3fbfaf67542bfd54d0b0ea..b9a6faf2c5a52778e17d04a7093e7405e1d5604d 100644 --- a/src/dynarec/rv64/dynarec_rv64_00_0.c +++ b/src/dynarec/rv64/dynarec_rv64_00_0.c @@ -33,13 +33,14 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int int32_t i32, tmp; int64_t i64, j64; uint8_t u8; - uint8_t gb1, gb2, eb1, eb2; + uint8_t gb, gb1, gb2, eb1, eb2; uint32_t u32; uint64_t u64; uint8_t wback, wb1, wb2, wb; int64_t fixedaddress; int lock; int cacheupd = 0; + uintptr_t retaddr = 0; opcode = F8; MAYUSE(eb1); @@ -54,9 +55,10 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("ADD Eb, Gb"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(wb, gb, x1, ADD(wb, wb, x1)); GETEB(x1, 0); GETGB(x2); - emit_add8(dyn, ninst, x1, x2, x4, x5); + emit_add8(dyn, ninst, x1, x2, x4, x5, x6); EBBACK(x5, 0); break; case 0x01: @@ -72,9 +74,10 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("ADD Gb, Eb"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(gb, wb, x1, ADD(gb, gb, x1)); GETEB(x1, 0); GETGB(x2); - emit_add8(dyn, ninst, x2, x1, x4, x5); + emit_add8(dyn, ninst, x2, x1, x4, x5, x6); GBBACK(x5); break; case 0x03: @@ -90,7 +93,7 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int SETFLAGS(X_ALL, SF_SET_PENDING); u8 = F8; ANDI(x1, xRAX, 0xff); - emit_add8c(dyn, ninst, x1, u8, x3, x4, x5); + emit_add8c(dyn, ninst, x1, u8, x3, x4, x5, x6); ANDI(xRAX, xRAX, ~0xff); OR(xRAX, xRAX, x1); break; @@ -123,6 +126,7 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("OR Eb, Gb"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(wb, gb, x1, OR(wb, wb, x1)); GETEB(x1, 0); GETGB(x2); emit_or8(dyn, ninst, x1, x2, x4, x5); @@ -141,6 +145,7 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("OR Gb, Eb"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(gb, wb, x1, OR(gb, gb, x1)); GETEB(x1, 0); GETGB(x2); emit_or8(dyn, ninst, x2, x1, x4, x5); @@ -173,13 +178,19 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0x0F: switch(rep) { case 0: - addr = dynarec64_0F(dyn, addr, ip, ninst, rex, ok, need_epilog); + if (rv64_vector) + retaddr = dynarec64_0F_vector(dyn, addr, ip, ninst, rex, ok, need_epilog); + addr = retaddr ? retaddr : dynarec64_0F(dyn, addr, ip, ninst, rex, ok, need_epilog); break; case 1: - addr = dynarec64_F20F(dyn, addr, ip, ninst, rex, ok, need_epilog); + if (rv64_vector) + retaddr = dynarec64_F20F_vector(dyn, addr, ip, ninst, rex, ok, need_epilog); + addr = retaddr ? retaddr : dynarec64_F20F(dyn, addr, ip, ninst, rex, ok, need_epilog); break; case 2: - addr = dynarec64_F30F(dyn, addr, ip, ninst, rex, ok, need_epilog); + if (rv64_vector) + retaddr = dynarec64_F30F_vector(dyn, addr, ip, ninst, rex, ok, need_epilog); + addr = retaddr ? retaddr : dynarec64_F30F(dyn, addr, ip, ninst, rex, ok, need_epilog); break; default: DEFAULT; @@ -190,9 +201,15 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int READFLAGS(X_CF); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(wb, gb, x1, { + ADD(wb, wb, x1); + ANDI(x2, xFlags, 1 << F_CF); + SLLI(x2, x2, 64 - 8); + ADD(wb, wb, x2); + }); GETEB(x1, 0); GETGB(x2); - emit_adc8(dyn, ninst, x1, x2, x4, x5, x3); + emit_adc8(dyn, ninst, x1, x2, x4, x5, x6); EBBACK(x5, 0); break; case 0x11: @@ -210,9 +227,15 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int READFLAGS(X_CF); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(gb, wb, x1, { + ADD(gb, gb, x1); + ANDI(x2, xFlags, 1 << F_CF); + SLLI(x2, x2, 64 - 8); + ADD(gb, gb, x2); + }); GETEB(x2, 0); GETGB(x1); - emit_adc8(dyn, ninst, x1, x2, x4, x3, x5); + emit_adc8(dyn, ninst, x1, x2, x4, x6, x5); GBBACK(x5); break; case 0x13: @@ -268,6 +291,12 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int READFLAGS(X_CF); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(wb, gb, x1, { + SUB(wb, wb, x1); + ANDI(x2, xFlags, 1 << F_CF); + SLLI(x2, x2, 64 - 8); + SUB(wb, wb, x2); + }); GETEB(x1, 0); GETGB(x2); emit_sbb8(dyn, ninst, x1, x2, x4, x5, x6); @@ -288,9 +317,15 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int READFLAGS(X_CF); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(gb, wb, x1, { + SUB(gb, gb, x1); + ANDI(x2, xFlags, 1 << F_CF); + SLLI(x2, x2, 64 - 8); + SUB(gb, gb, x2); + }); GETEB(x2, 0); GETGB(x1); - emit_sbb8(dyn, ninst, x1, x2, x3, x4, x5); + emit_sbb8(dyn, ninst, x1, x2, x6, x4, x5); GBBACK(x5); break; case 0x1B: @@ -395,6 +430,7 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("SUB Eb, Gb"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(wb, gb, x1, SUB(wb, wb, x1)); GETEB(x1, 0); GETGB(x2); emit_sub8(dyn, ninst, x1, x2, x4, x5, x6); @@ -413,6 +449,7 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("SUB Gb, Eb"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(gb, wb, x1, SUB(gb, gb, x1)); GETEB(x1, 0); GETGB(x2); emit_sub8(dyn, ninst, x2, x1, x4, x5, x6); @@ -445,6 +482,7 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("XOR Eb, Gb"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(wb, gb, x1, XOR(wb, wb, x1)); GETEB(x1, 0); GETGB(x2); emit_xor8(dyn, ninst, x1, x2, x4, x5); @@ -465,6 +503,7 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("XOR Gb, Eb"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(gb, wb, x1, XOR(gb, gb, x1)); GETEB(x1, 0); GETGB(x2); emit_xor8(dyn, ninst, x2, x1, x4, x5); @@ -502,7 +541,7 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETEB(x1, 0); GETGB(x2); - emit_cmp8(dyn, ninst, x1, x2, x3, x4, x5, x6); + emit_cmp8(dyn, ninst, x1, x2, x9, x4, x5, x6); break; case 0x39: INST_NAME("CMP Ed, Gd"); @@ -518,7 +557,7 @@ uintptr_t dynarec64_00_0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETEB(x1, 0); GETGB(x2); - emit_cmp8(dyn, ninst, x2, x1, x3, x4, x5, x6); + emit_cmp8(dyn, ninst, x2, x1, x9, x4, x5, x6); break; case 0x3B: INST_NAME("CMP Gd, Ed"); diff --git a/src/dynarec/rv64/dynarec_rv64_00_1.c b/src/dynarec/rv64/dynarec_rv64_00_1.c index a361af5f1987d2bd02807fe3666a35a0088eb51a..a9c975845bdd2c2d0c5b83b9a3d41bf8cfa1ca69 100644 --- a/src/dynarec/rv64/dynarec_rv64_00_1.c +++ b/src/dynarec/rv64/dynarec_rv64_00_1.c @@ -42,6 +42,7 @@ uintptr_t dynarec64_00_1(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int int64_t fixedaddress; int lock; int cacheupd = 0; + uintptr_t retaddr = 0; opcode = F8; MAYUSE(eb1); @@ -134,7 +135,16 @@ uintptr_t dynarec64_00_1(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int DEFAULT; } break; - + case 0x62: + if(rex.is32bits) { + // BOUND here + DEFAULT; + } else { + INST_NAME("BOUND Gd, Ed"); + nextop = F8; + FAKEED; + } + break; case 0x63: if(rex.is32bits) { // this is ARPL opcode @@ -163,10 +173,14 @@ uintptr_t dynarec64_00_1(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int } break; case 0x64: - addr = dynarec64_64(dyn, addr, ip, ninst, rex, rep, _FS, ok, need_epilog); + if (rv64_vector) + retaddr = dynarec64_64_vector(dyn, addr, ip, ninst, rex, rep, _FS, ok, need_epilog); + addr = retaddr ? retaddr : dynarec64_64(dyn, addr, ip, ninst, rex, rep, _FS, ok, need_epilog); break; case 0x65: - addr = dynarec64_64(dyn, addr, ip, ninst, rex, rep, _GS, ok, need_epilog); + if (rv64_vector) + retaddr = dynarec64_64_vector(dyn, addr, ip, ninst, rex, rep, _GS, ok, need_epilog); + addr = retaddr ? retaddr : dynarec64_64(dyn, addr, ip, ninst, rex, rep, _GS, ok, need_epilog); break; case 0x66: addr = dynarec64_66(dyn, addr, ip, ninst, rex, rep, ok, need_epilog); @@ -174,8 +188,11 @@ uintptr_t dynarec64_00_1(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0x67: if(rex.is32bits) addr = dynarec64_67_32(dyn, addr, ip, ninst, rex, rep, ok, need_epilog); - else - addr = dynarec64_67(dyn, addr, ip, ninst, rex, rep, ok, need_epilog); + else { + if (rv64_vector) + retaddr = dynarec64_67_vector(dyn, addr, ip, ninst, rex, rep, ok, need_epilog); + addr = retaddr ? retaddr : dynarec64_67(dyn, addr, ip, ninst, rex, rep, ok, need_epilog); + } break; case 0x68: INST_NAME("PUSH Id"); @@ -291,7 +308,6 @@ uintptr_t dynarec64_00_1(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int break; #define GO(GETFLAGS, NO, YES, F) \ - if (box64_dynarec_test == 2) { NOTEST(x1); } \ READFLAGS(F); \ i8 = F8S; \ BARRIER(BARRIER_MAYBE); \ diff --git a/src/dynarec/rv64/dynarec_rv64_00_2.c b/src/dynarec/rv64/dynarec_rv64_00_2.c index f2f7d232a0026abb69d1ab80c98df7f25556c358..3390be54fdf42635fdd657422013831785f4e68d 100644 --- a/src/dynarec/rv64/dynarec_rv64_00_2.c +++ b/src/dynarec/rv64/dynarec_rv64_00_2.c @@ -58,7 +58,7 @@ uintptr_t dynarec64_00_2(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int SETFLAGS(X_ALL, SF_SET_PENDING); GETEB(x1, 1); u8 = F8; - emit_add8c(dyn, ninst, x1, u8, x2, x4, x5); + emit_add8c(dyn, ninst, x1, u8, x2, x4, x5, x6); EBBACK(x5, 0); break; case 1: // OR @@ -118,7 +118,7 @@ uintptr_t dynarec64_00_2(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int u8 = F8; if(u8) { ADDI(x2, xZR, u8); - emit_cmp8(dyn, ninst, x1, x2, x3, x4, x5, x6); + emit_cmp8(dyn, ninst, x1, x2, x9, x4, x5, x6); } else { emit_cmp8_0(dyn, ninst, x1, x3, x4); } @@ -215,7 +215,7 @@ uintptr_t dynarec64_00_2(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop=F8; GETEB(x1, 0); GETGB(x2); - emit_test8(dyn, ninst, x1, x2, x3, x4, x5); + emit_test8(dyn, ninst, x1, x2, x6, x4, x5); break; case 0x85: INST_NAME("TEST Ed, Gd"); @@ -423,8 +423,8 @@ uintptr_t dynarec64_00_2(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int DEFAULT; } else { // mem <= reg addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 0, 0); - MV(gd, ed); - if(!rex.w || rex.is32bits) { + if (gd != ed) { MV(gd, ed); } + if (!rex.w || rex.is32bits) { ZEROUP(gd); // truncate the higher 32bits as asked } } diff --git a/src/dynarec/rv64/dynarec_rv64_00_3.c b/src/dynarec/rv64/dynarec_rv64_00_3.c index 62618e4245bfdd9580a31b7ea38cff6410f011ee..1a7157e862e320d34725612d683551ea326de2ef 100644 --- a/src/dynarec/rv64/dynarec_rv64_00_3.c +++ b/src/dynarec/rv64/dynarec_rv64_00_3.c @@ -300,7 +300,45 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int *need_epilog = 0; *ok = 0; break; - + case 0xC4: + nextop = F8; + if (rex.is32bits && !(MODREG)) { + DEFAULT; + } else { + vex_t vex = { 0 }; + vex.rex = rex; + u8 = nextop; + vex.m = u8 & 0b00011111; + vex.rex.b = (u8 & 0b00100000) ? 0 : 1; + vex.rex.x = (u8 & 0b01000000) ? 0 : 1; + vex.rex.r = (u8 & 0b10000000) ? 0 : 1; + u8 = F8; + vex.p = u8 & 0b00000011; + vex.l = (u8 >> 2) & 1; + vex.v = ((~u8) >> 3) & 0b1111; + vex.rex.w = (u8 >> 7) & 1; + addr = dynarec64_AVX(dyn, addr, ip, ninst, vex, ok, need_epilog); + } + break; + case 0xC5: + nextop = F8; + if (rex.is32bits && !(MODREG)) { + DEFAULT; + } else { + vex_t vex = { 0 }; + vex.rex = rex; + u8 = nextop; + vex.p = u8 & 0b00000011; + vex.l = (u8 >> 2) & 1; + vex.v = ((~u8) >> 3) & 0b1111; + vex.rex.r = (u8 & 0b10000000) ? 0 : 1; + vex.rex.b = 0; + vex.rex.x = 0; + vex.rex.w = 0; + vex.m = VEX_M_0F; + addr = dynarec64_AVX(dyn, addr, ip, ninst, vex, ok, need_epilog); + } + break; case 0xC6: INST_NAME("MOV Eb, Ib"); nextop=F8; @@ -335,7 +373,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ORI(eb1, eb1, u8); } } else { // mem <= u8 - addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, &lock, 0, 1); + addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, &lock, 1, 1); u8 = F8; if(u8) { ADDI(x3, xZR, u8); @@ -354,10 +392,10 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ed = xRAX+(nextop&7)+(rex.b<<3); MOV64xw(ed, i64); } else { // mem <= i32 - addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, &lock, 0, 4); + addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, &lock, 1, 4); i64 = F32S; if(i64) { - MOV64xw(x3, i64); + MOV64x(x3, i64); ed = x3; } else ed = xZR; @@ -391,6 +429,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int *need_epilog = 1; } else { MESSAGE(LOG_DUMP, "Native Call to %s\n", GetNativeName(GetNativeFnc(ip))); + x87_stackcount(dyn, ninst, x1); x87_forget(dyn, ninst, x3, x4, 0); sse_purge07cache(dyn, ninst, x3); // Partially support isSimpleWrapper @@ -427,11 +466,13 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int MOV32w(x2, offsetof(box64context_t, signals[SIGTRAP])); ADD(x2, x2, x1); LD(x3, x2, 0); - CBZ_NEXT(x3); + BEQZ_MARK(x3); GETIP(addr); STORE_XEMU_CALL(x3); CALL(native_int3, -1); LOAD_XEMU_CALL(); + MARK; + jump_to_epilog(dyn, addr, 0, ninst); *need_epilog = 0; *ok = 0; } @@ -501,58 +542,62 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0: if(opcode==0xD0) { INST_NAME("ROL Eb, 1"); + GETEB(x1, 0); MOV32w(x2, 1); } else { INST_NAME("ROL Eb, CL"); + GETEB(x1, 0); ANDI(x2, xRCX, 0x1f); } MESSAGE(LOG_DUMP, "Need Optimization\n"); SETFLAGS(X_OF|X_CF, SF_SET_DF); - GETEB(x1, 0); CALL_(rol8, ed, x3); EBBACK(x5, 0); break; case 1: if(opcode==0xD0) { INST_NAME("ROR Eb, 1"); + GETEB(x1, 0); MOV32w(x2, 1); } else { INST_NAME("ROR Eb, CL"); + GETEB(x1, 0); ANDI(x2, xRCX, 0x1f); } MESSAGE(LOG_DUMP, "Need Optimization\n"); SETFLAGS(X_OF|X_CF, SF_SET_DF); - GETEB(x1, 0); CALL_(ror8, ed, x3); EBBACK(x5, 0); break; case 2: if(opcode==0xD0) { INST_NAME("RCL Eb, 1"); + GETEB(x1, 0); MOV32w(x2, 1); } else { INST_NAME("RCL Eb, CL"); + GETEB(x1, 0); ANDI(x2, xRCX, 0x1f); } MESSAGE(LOG_DUMP, "Need Optimization\n"); READFLAGS(X_CF); SETFLAGS(X_OF|X_CF, SF_SET_DF); - GETEB(x1, 0); CALL_(rcl8, ed, x3); EBBACK(x5, 0); break; case 3: if(opcode==0xD0) { INST_NAME("RCR Eb, 1"); + GETEB(x1, 0); MOV32w(x2, 1); } else { INST_NAME("RCR Eb, CL"); + GETEB(x1, 0); ANDI(x2, xRCX, 0x1f); } MESSAGE(LOG_DUMP, "Need Optimization\n"); READFLAGS(X_CF); SETFLAGS(X_OF|X_CF, SF_SET_DF); - GETEB(x1, 0); CALL_(rcr8, ed, x3); EBBACK(x5, 0); break; @@ -560,48 +605,51 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 6: if(opcode==0xD0) { INST_NAME("SHL Eb, 1"); + GETEB(x1, 0); MOV32w(x2, 1); } else { INST_NAME("SHL Eb, CL"); + GETEB(x1, 0); ANDI(x2, xRCX, 0x1f); BEQ_NEXT(x2, xZR); } SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(box64_dynarec_safeflags>1) MAYSETFLAGS(); - GETEB(x1, 0); emit_shl8(dyn, ninst, x1, x2, x5, x4, x6); EBBACK(x5, 0); break; case 5: if(opcode==0xD0) { INST_NAME("SHR Eb, 1"); + GETEB(x1, 0); MOV32w(x2, 1); } else { INST_NAME("SHR Eb, CL"); + GETEB(x1, 0); ANDI(x2, xRCX, 0x1F); BEQ_NEXT(x2, xZR); } SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(box64_dynarec_safeflags>1) MAYSETFLAGS(); - GETEB(x1, 0); emit_shr8(dyn, ninst, x1, x2, x5, x4, x6); EBBACK(x5, 0); break; case 7: if(opcode==0xD0) { INST_NAME("SAR Eb, 1"); + GETSEB(x1, 0); MOV32w(x2, 1); } else { INST_NAME("SAR Eb, CL"); + GETSEB(x1, 0); ANDI(x2, xRCX, 0x1f); BEQ_NEXT(x2, xZR); } SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined if(box64_dynarec_safeflags>1) MAYSETFLAGS(); - GETSEB(x1, 0); emit_sar8(dyn, ninst, x1, x2, x5, x4, x6); EBBACK(x5, 0); break; @@ -684,7 +732,8 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("ROL Ed, CL"); SETFLAGS(X_OF|X_CF, SF_SUBSET); GETED(0); - emit_rol32(dyn, ninst, rex, ed, xRCX, x3, x4); + ANDI(x6, xRCX, rex.w ? 0x3f : 0x1f); + emit_rol32(dyn, ninst, rex, ed, x6, x3, x4); WBACK; if(!wback && !rex.w) ZEROUP(ed); break; @@ -692,7 +741,8 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("ROR Ed, CL"); SETFLAGS(X_OF|X_CF, SF_SUBSET); GETED(0); - emit_ror32(dyn, ninst, rex, ed, xRCX, x3, x4); + ANDI(x6, xRCX, rex.w ? 0x3f : 0x1f); + emit_ror32(dyn, ninst, rex, ed, x6, x3, x4); WBACK; if(!wback && !rex.w) ZEROUP(ed); break; @@ -850,7 +900,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int #endif } #if STEP < 2 - if(!rex.is32bits && isNativeCall(dyn, addr+i32, &dyn->insts[ninst].natcall, &dyn->insts[ninst].retn)) + if(!rex.is32bits && isNativeCall(dyn, addr+i32, rex.is32bits, &dyn->insts[ninst].natcall, &dyn->insts[ninst].retn)) tmp = dyn->insts[ninst].pass2choice = 3; else tmp = dyn->insts[ninst].pass2choice = 0; @@ -862,7 +912,6 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags to "dont'care" state SKIPTEST(x1); BARRIER(BARRIER_FULL); - //BARRIER_NEXT(BARRIER_FULL); if(dyn->last_ip && (addr-dyn->last_ip<0x1000)) { ADDI(x2, xRIP, addr-dyn->last_ip); } else { @@ -946,10 +995,10 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ADDI(x4, x4, j64 & 0xfff); MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } else { - MESSAGE(LOG_NONE, "\tCALLRET set return to Jmptable(%p)\n", (void*)addr); - j64 = getJumpTableAddress64(addr); - TABLE64(x4, j64); - LD(x4, x4, 0); + j64 = (dyn->insts)?(GETMARK-(dyn->native_size)):0; + AUIPC(x4, ((j64 + 0x800) >> 12) & 0xfffff); + ADDI(x4, x4, j64 & 0xfff); + MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } ADDI(xSP, xSP, -16); SD(x4, xSP, 0); @@ -958,14 +1007,25 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int *ok = 0; *need_epilog = 0; } - jump_to_next(dyn, addr+i32, 0, ninst, rex.is32bits); + if(rex.is32bits) + j64 = (uint32_t)(addr+i32); + else + j64 = addr+i32; + jump_to_next(dyn, j64, 0, ninst, rex.is32bits); + if(box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + // jumps out of current dynablock... + MARK; + j64 = getJumpTableAddress64(addr); + TABLE64(x4, j64); + LD(x4, x4, 0); + BR(x4); + } break; } break; case 0xE9: case 0xEB: BARRIER(BARRIER_MAYBE); - if (box64_dynarec_test == 2) { NOTEST(x1); } if(opcode==0xE9) { INST_NAME("JMP Id"); i32 = F32S; @@ -973,11 +1033,15 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("JMP Ib"); i32 = F8S; } - JUMP((uintptr_t)getAlternate((void*)(addr+i32)), 0); + if(rex.is32bits) + j64 = (uint32_t)(addr+i32); + else + j64 = addr+i32; + JUMP((uintptr_t)getAlternate((void*)j64), 0); if(dyn->insts[ninst].x64.jmp_insts==-1) { // out of the block fpu_purgecache(dyn, ninst, 1, x1, x2, x3); - jump_to_next(dyn, (uintptr_t)getAlternate((void*)(addr+i32)), 0, ninst, rex.is32bits); + jump_to_next(dyn, (uintptr_t)getAlternate((void*)j64), 0, ninst, rex.is32bits); } else { // inside the block CacheTransform(dyn, ninst, CHECK_CACHE(), x1, x2, x3); @@ -992,6 +1056,24 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int *need_epilog = 0; *ok = 0; break; + case 0xEC ... 0xEF: + if (opcode == 0xEC) + INST_NAME("IN AL, DX"); + else if (opcode == 0xED) + INST_NAME("IN EAX, DX"); + else if (opcode == 0xEE) + INST_NAME("OUT DX, AL"); + else + INST_NAME("OUT DX, EAX"); + SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state + GETIP(ip); + STORE_XEMU_CALL(xRIP); + CALL(native_priv, -1); + LOAD_XEMU_CALL(); + jump_to_epilog(dyn, 0, xRIP, ninst); + *need_epilog = 0; + *ok = 0; + break; case 0xF0: addr = dynarec64_F0(dyn, addr, ip, ninst, rex, rep, ok, need_epilog); break; @@ -1011,7 +1093,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEB(x1, 1); u8 = F8; MOV32w(x2, u8); - emit_test8(dyn, ninst, x1, x2, x3, x4, x5); + emit_test8(dyn, ninst, x1, x2, x6, x4, x5); break; case 2: INST_NAME("NOT Eb"); @@ -1023,13 +1105,12 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("NEG Eb"); SETFLAGS(X_ALL, SF_SET_PENDING); GETEB(x1, 0); - emit_neg8(dyn, ninst, x1, x2, x4); + emit_neg8(dyn, ninst, x1, x2, x4, x5); EBBACK(x5, 0); break; case 4: INST_NAME("MUL AL, Ed"); SETFLAGS(X_ALL, SF_PENDING); - UFLAG_DF(x1, d_mul8); GETEB(x1, 0); ANDI(x2, xRAX, 0xff); MULW(x1, x2, x1); @@ -1038,11 +1119,11 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int AND(xRAX, xRAX, x2); ZEXTH(x1, x1); OR(xRAX, xRAX, x1); + UFLAG_DF(x1, d_mul8); break; case 5: INST_NAME("IMUL AL, Eb"); SETFLAGS(X_ALL, SF_PENDING); - UFLAG_DF(x1, d_imul8); GETSEB(x1, 0); SLLI(x2, xRAX, 56); SRAI(x2, x2, 56); @@ -1052,6 +1133,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int AND(xRAX, xRAX, x2); ZEXTH(x1, x1); OR(xRAX, xRAX, x1); + UFLAG_DF(x1, d_imul8); break; case 6: INST_NAME("DIV Eb"); @@ -1093,13 +1175,14 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("NEG Ed"); SETFLAGS(X_ALL, SF_SET_PENDING); GETED(0); - emit_neg32(dyn, ninst, rex, ed, x3, x4); + emit_neg32(dyn, ninst, rex, ed, x3, x4, x5, x6); WBACK; break; case 4: INST_NAME("MUL EAX, Ed"); - SETFLAGS(X_ALL, SF_PENDING); - UFLAG_DF(x2, rex.w?d_mul64:d_mul32); + SETFLAGS(X_ALL, SF_SET); + CLEAR_FLAGS(); + SET_DFNONE(); GETED(0); if(rex.w) { if(ed==xRDX) gd=x3; else gd=xRDX; @@ -1116,13 +1199,23 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int AND(xRAX, xRDX, xMASK); SRLI(xRDX, xRDX, 32); } - UFLAG_RES(xRAX); - UFLAG_OP1(xRDX); + IFX (X_CF | X_OF) { + // CF = OF = RDX != 0 + SNEZ(x6, xRDX); + IFX (X_CF) { + OR(xFlags, xFlags, x6); // F_CF == 0 + } + IFX (X_OF) { + SLLI(x6, x6, F_OF2); + OR(xFlags, xFlags, x6); + } + } break; case 5: INST_NAME("IMUL EAX, Ed"); - SETFLAGS(X_ALL, SF_PENDING); - UFLAG_DF(x2, rex.w?d_imul64:d_imul32); + SETFLAGS(X_ALL, SF_SET); + CLEAR_FLAGS(); + SET_DFNONE(); GETSED(0); if(rex.w) { if(ed==xRDX) gd=x3; else gd=xRDX; @@ -1135,8 +1228,19 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int AND(xRAX, xRDX, xMASK); SRLI(xRDX, xRDX, 32); } - UFLAG_RES(xRAX); - UFLAG_OP1(xRDX); + IFX (X_CF | X_OF) { + // CF = OF = SignExtend(RAX) != RDX:RAX + SRAIxw(x6, xRAX, rex.w ? 63 : 31); + SUBxw(x6, xRDX, x6); + SNEZ(x6, x6); + IFX (X_CF) { + OR(xFlags, xFlags, x6); // F_CF == 0 + } + IFX (X_OF) { + SLLI(x6, x6, F_OF2); + OR(xFlags, xFlags, x6); + } + } break; case 6: INST_NAME("DIV Ed"); @@ -1148,7 +1252,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int && dyn->insts[ninst-1].x64.addr && *(uint8_t*)(dyn->insts[ninst-1].x64.addr)==0xB8 && *(uint32_t*)(dyn->insts[ninst-1].x64.addr+1)==0) { - // hack for some protection that check a divide by zero actualy trigger a divide by zero exception + // hack for some protection that check a divide by zero actually trigger a divide by zero exception MESSAGE(LOG_INFO, "Divide by 0 hack\n"); GETIP(ip); STORE_XEMU_CALL(x3); @@ -1385,10 +1489,10 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ADDI(x4, x4, j64 & 0xfff); MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } else { - MESSAGE(LOG_NONE, "\tCALLRET set return to Jmptable(%p)\n", (void*)addr); - j64 = getJumpTableAddress64(addr); - TABLE64(x4, j64); - LD(x4, x4, 0); + j64 = (dyn->insts)?(GETMARK-(dyn->native_size)):0; + AUIPC(x4, ((j64 + 0x800) >> 12) & 0xfffff); + ADDI(x4, x4, j64 & 0xfff); + MESSAGE(LOG_NONE, "\tCALLRET set return to +%di\n", j64>>2); } ADDI(xSP, xSP, -16); SD(x4, xSP, 0); @@ -1396,6 +1500,14 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int } PUSH1z(xRIP); jump_to_next(dyn, 0, ed, ninst, rex.is32bits); + if(box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + // jumps out of current dynablock... + MARK; + j64 = getJumpTableAddress64(addr); + TABLE64(x4, j64); + LD(x4, x4, 0); + BR(x4); + } break; case 4: // JMP Ed INST_NAME("JMP Ed"); diff --git a/src/dynarec/rv64/dynarec_rv64_0f.c b/src/dynarec/rv64/dynarec_rv64_0f.c index f7565a7e363362b8212028d4f8072e99b9e39fa9..fd08d72bc51542155d2179d36fae0f54be9ec5e8 100644 --- a/src/dynarec/rv64/dynarec_rv64_0f.c +++ b/src/dynarec/rv64/dynarec_rv64_0f.c @@ -66,21 +66,26 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if(MODREG) { switch(nextop) { case 0xD0: - //TODO - DEFAULT; - /*INST_NAME("FAKE xgetbv"); - nextop = F8; - addr = fakeed(dyn, addr, ninst, nextop); - SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state - GETIP(ip); - STORE_XEMU_CALL(x3); - CALL(native_ud, -1); - LOAD_XEMU_CALL(); - jump_to_epilog(dyn, 0, xRIP, ninst); - *need_epilog = 0; - *ok = 0;*/ + INST_NAME("XGETBV"); + AND(x1, xRCX, xMASK); + BEQZ_MARK(x1); + UDF(); + MARK; + MOV32w(xRAX, 0b111); + MOV32w(xRDX, 0); + break; + case 0xE0: + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + INST_NAME("SMSW Ed"); + ed = xRAX + (nextop & 7) + (rex.b << 3); + MOV32w(ed, (1 << 0) | (1 << 4)); // only PE and ET set... break; - case 0xF9: INST_NAME("RDTSCP"); NOTEST(x1); @@ -164,7 +169,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MOVUPS Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); LD(x3, wback, fixedaddress + 0); LD(x4, wback, fixedaddress + 8); SD(x3, gback, gdoffset + 0); @@ -174,7 +179,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MOVUPS Ex,Gx"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); LD(x3, gback, gdoffset + 0); LD(x4, gback, gdoffset + 8); SD(x3, wback, fixedaddress + 0); @@ -187,7 +192,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (MODREG) { INST_NAME("MOVHLPS Gx,Ex"); GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); LD(x3, wback, fixedaddress + 8); SD(x3, gback, gdoffset + 0); } else { @@ -201,7 +206,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MOVLPS Ex,Gx"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 1); LD(x3, gback, gdoffset + 0); SD(x3, wback, fixedaddress + 0); if (!MODREG) @@ -211,7 +216,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("UNPCKLPS Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 4); LWU(x5, gback, gdoffset + 1 * 4); LWU(x3, wback, fixedaddress + 0); LWU(x4, wback, fixedaddress + 4); @@ -223,7 +228,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("UNPCKHPS Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); LWU(x3, wback, fixedaddress + 2 * 4); LWU(x4, wback, fixedaddress + 3 * 4); LWU(x5, gback, gdoffset + 2 * 4); @@ -242,7 +247,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SMREAD(); } GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 1); LD(x4, wback, fixedaddress + 0); SD(x4, gback, gdoffset + 8); break; @@ -250,7 +255,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MOVHPS Ex,Gx"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 1); LD(x4, gback, gdoffset + 8); SD(x4, wback, fixedaddress + 0); if (!MODREG) @@ -285,14 +290,14 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MOVAPS Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_MV_Q(x3); break; case 0x29: INST_NAME("MOVAPS Ex,Gx"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_MV_Q2(x3); if (!MODREG) SMWRITE2(); @@ -301,7 +306,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("CVTPI2PS Gx,Em"); nextop = F8; GETGX(); - GETEM(x2, 0); + GETEM(x2, 0, 4); d0 = fpu_get_scratch(dyn); u8 = sse_setround(dyn, ninst, x4, x5); for (int i = 0; i < 2; ++i) { @@ -315,7 +320,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MOVNTPS Ex,Gx"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); LD(x3, gback, gdoffset + 0); LD(x4, gback, gdoffset + 8); SD(x3, wback, fixedaddress + 0); @@ -325,7 +330,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("CVTTPS2PI Gm,Ex"); nextop = F8; GETGM(); - GETEX(x2, 0); + GETEX(x2, 0, 4); d0 = fpu_get_scratch(dyn); for (int i = 0; i < 2; ++i) { if (!box64_dynarec_fastround) { @@ -347,7 +352,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("CVTPS2PI Gm, Ex"); nextop = F8; GETGM(); - GETEX(x2, 0); + GETEX(x2, 0, 4); d0 = fpu_get_scratch(dyn); u8 = sse_setround(dyn, ninst, x6, x4); for (int i = 0; i < 2; ++i) { @@ -431,7 +436,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSHUFB Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); LD(x4, gback, gdoffset); for (int i = 0; i < 8; ++i) { LB(x3, wback, fixedaddress + i); @@ -461,7 +466,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni LW(x3, gback, gdoffset + 0); SW(x3, gback, gdoffset + 4); } else { - GETEM(x2, 0); + GETEM(x2, 0, 6); for (int i = 0; i < 2; ++i) { // tmp32s = EX->sw[i*2+0] + EX->sw[i*2+1]; // GX->sw[4+i] = sat(tmp32s); @@ -485,7 +490,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni // GM->sd[1] = GM->sd[0]; SW(x3, gback, gdoffset + 1 * 4); } else { - GETEM(x2, 0); + GETEM(x2, 0, 4); // GM->sd[1] = EM->sd[0] + EM->sd[1]; LW(x3, wback, fixedaddress + 0 * 4); LW(x4, wback, fixedaddress + 1 * 4); @@ -521,7 +526,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni LW(x3, gback, gdoffset + 0); SW(x3, gback, gdoffset + 4); } else { - GETEM(x2, 0); + GETEM(x2, 0, 6); for (int i = 0; i < 2; ++i) { // tmp32s = EX->sw[i*2+0] + EX->sw[i*2+1]; // GX->sw[4+i] = sat(tmp32s); @@ -545,7 +550,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PMADDUBSW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); MOV64x(x5, 32767); MOV64x(x6, -32768); for (int i = 0; i < 4; ++i) { @@ -585,7 +590,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni LW(x3, gback, gdoffset + 0); SW(x3, gback, gdoffset + 4); } else { - GETEM(x2, 0); + GETEM(x2, 0, 6); for (int i = 0; i < 2; ++i) { // tmp32s = EX->sw[i*2+0] + EX->sw[i*2+1]; // GX->sw[4+i] = sat(tmp32s); @@ -609,7 +614,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni // GM->sd[1] = GM->sd[0]; SW(x3, gback, gdoffset + 1 * 4); } else { - GETEM(x2, 0); + GETEM(x2, 0, 4); // GM->sd[1] = EM->sd[0] + EM->sd[1]; LW(x3, wback, fixedaddress + 0 * 4); LW(x4, wback, fixedaddress + 1 * 4); @@ -645,7 +650,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni LW(x3, gback, gdoffset + 0); SW(x3, gback, gdoffset + 4); } else { - GETEM(x2, 0); + GETEM(x2, 0, 6); for (int i = 0; i < 2; ++i) { // tmp32s = EX->sw[i*2+0] + EX->sw[i*2+1]; // GX->sw[4+i] = sat(tmp32s); @@ -669,7 +674,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSIGNB Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); for (int i = 0; i < 8; ++i) { LB(x3, gback, gdoffset + i); LB(x4, wback, fixedaddress + i); @@ -684,7 +689,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSIGNW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); for (int i = 0; i < 4; ++i) { LH(x3, gback, gdoffset + i * 2); LH(x4, wback, fixedaddress + i * 2); @@ -699,7 +704,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSIGND Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 4); for (int i = 0; i < 2; ++i) { LW(x3, gback, gdoffset + i * 4); LW(x4, wback, fixedaddress + i * 4); @@ -714,7 +719,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PMULHRSW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); for (int i = 0; i < 4; ++i) { LH(x3, gback, gdoffset + i * 2); LH(x4, wback, fixedaddress + i * 2); @@ -729,7 +734,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PABSB Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); for (int i = 0; i < 8; ++i) { LB(x4, wback, fixedaddress + i); BGE(x4, xZR, 4 + 4); @@ -741,7 +746,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PABSW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); for (int i = 0; i < 4; ++i) { LH(x4, wback, fixedaddress + i * 2); BGE(x4, xZR, 4 + 4); @@ -753,7 +758,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PABSD Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 4); for (int i = 0; i < 2; ++i) { LW(x4, wback, fixedaddress + i * 4); BGE(x4, xZR, 4 + 4); @@ -849,7 +854,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PALIGNR Gm, Em, Ib"); nextop = F8; GETGM(); - GETEM(x2, 1); + GETEM(x2, 1, 1); u8 = F8; if (u8 > 15) { SD(xZR, gback, gdoffset); @@ -919,7 +924,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MOVMSKPS Gd, Ex"); nextop = F8; GETGD; - GETEX(x1, 0); + GETEX(x1, 0, 12); XOR(gd, gd, gd); for (int i = 0; i < 4; ++i) { LWU(x2, wback, fixedaddress + i * 4); @@ -932,7 +937,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("SQRTPS Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); d0 = fpu_get_scratch(dyn); for (int i = 0; i < 4; ++i) { FLW(d0, wback, fixedaddress + 4 * i); @@ -944,7 +949,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("RSQRTPS Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); s0 = fpu_get_scratch(dyn); s1 = fpu_get_scratch(dyn); // 1.0f v0 = fpu_get_scratch(dyn); // 0.0f @@ -977,7 +982,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("RCPPS Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); d0 = fpu_get_scratch(dyn); d1 = fpu_get_scratch(dyn); LUI(x3, 0x3f800); @@ -994,7 +999,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni gd = ((nextop & 0x38) >> 3) + (rex.r << 3); if (!(MODREG && gd == (nextop & 7) + (rex.b << 3))) { GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_Q(x3, x4, AND(x3, x3, x4)); } break; @@ -1002,7 +1007,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("ANDNPS Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_Q(x3, x4, NOT(x3, x3); AND(x3, x3, x4)); break; case 0x56: @@ -1011,7 +1016,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni gd = ((nextop & 0x38) >> 3) + (rex.r << 3); if (!(MODREG && gd == (nextop & 7) + (rex.b << 3))) { GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_Q(x3, x4, OR(x3, x3, x4)); } break; @@ -1025,7 +1030,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SD(xZR, gback, gdoffset + 0); SD(xZR, gback, gdoffset + 8); } else { - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_Q(x3, x4, XOR(x3, x3, x4)); } break; @@ -1033,7 +1038,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("ADDPS Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); s0 = fpu_get_scratch(dyn); s1 = fpu_get_scratch(dyn); for (int i = 0; i < 4; ++i) { @@ -1048,7 +1053,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MULPS Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); s0 = fpu_get_scratch(dyn); s1 = fpu_get_scratch(dyn); for (int i = 0; i < 4; ++i) { @@ -1063,7 +1068,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("CVTPS2PD Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 4); s0 = fpu_get_scratch(dyn); s1 = fpu_get_scratch(dyn); FLW(s0, wback, fixedaddress); @@ -1077,7 +1082,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("CVTDQ2PS Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); s0 = fpu_get_scratch(dyn); for (int i = 0; i < 4; ++i) { LW(x3, wback, fixedaddress + i * 4); @@ -1089,7 +1094,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("SUBPS Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); s0 = fpu_get_scratch(dyn); s1 = fpu_get_scratch(dyn); for (int i = 0; i < 4; ++i) { @@ -1104,7 +1109,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MINPS Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); s0 = fpu_get_scratch(dyn); s1 = fpu_get_scratch(dyn); for (int i = 0; i < 4; ++i) { @@ -1128,7 +1133,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("DIVPS Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); s0 = fpu_get_scratch(dyn); s1 = fpu_get_scratch(dyn); for (int i = 0; i < 4; ++i) { @@ -1143,7 +1148,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MAXPS Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); s0 = fpu_get_scratch(dyn); s1 = fpu_get_scratch(dyn); for (int i = 0; i < 4; ++i) { @@ -1179,7 +1184,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SB(x3, gback, gdoffset + 2 * i + 1); } } else { - GETEM(x2, 0); + GETEM(x2, 0, 3); for (int i = 0; i < 4; ++i) { // GX->ub[2 * i + 1] = EX->ub[i]; LBU(x3, wback, fixedaddress + i); @@ -1191,7 +1196,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PUNPCKLWD Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 2); // GM->uw[3] = EM->uw[1]; LHU(x3, wback, fixedaddress + 2 * 1); SH(x3, gback, gdoffset + 2 * 3); @@ -1206,7 +1211,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PUNPCKLDQ Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 1); // GM->ud[1] = EM->ud[0]; LWU(x3, wback, fixedaddress); SW(x3, gback, gdoffset + 4 * 1); @@ -1215,7 +1220,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PACKSSWB Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); MOV64x(x5, 127); MOV64x(x6, -128); for (int i = 0; i < 4; ++i) { @@ -1253,7 +1258,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PCMPGTB Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); for (int i = 0; i < 8; ++i) { // GX->ub[i] = (GX->sb[i]>EX->sb[i])?0xFF:0x00; LB(x3, wback, fixedaddress + i); @@ -1267,14 +1272,14 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PCMPGTW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); MMX_LOOP_WS(x3, x4, SLT(x3, x4, x3); NEG(x3, x3)); break; case 0x66: INST_NAME("PCMPGTD Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 4); MMX_LOOP_DS(x3, x4, SLT(x3, x4, x3); NEG(x3, x3)); break; case 0x67: @@ -1297,7 +1302,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni LW(x3, gback, gdoffset + 0 * 4); SW(x3, gback, gdoffset + 1 * 4); } else { - GETEM(x1, 0); + GETEM(x1, 0, 6); for (int i = 0; i < 4; ++i) { // GX->ub[4+i] = (EX->sw[i]<0)?0:((EX->sw[i]>0xff)?0xff:EX->sw[i]); LH(x3, wback, fixedaddress + i * 2); @@ -1326,7 +1331,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SB(x3, gback, gdoffset + 2 * i + 1); } } else { - GETEM(x2, 0); + GETEM(x2, 0, 7); for (int i = 0; i < 4; ++i) { // GX->ub[2 * i + 1] = EX->ub[i + 4]; LBU(x3, wback, fixedaddress + i + 4); @@ -1350,7 +1355,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SH(x3, gback, gdoffset + (2 * i + 1) * 2); } } else { - GETEM(x1, 0); + GETEM(x1, 0, 6); for (int i = 0; i < 2; ++i) { // GX->uw[2 * i + 1] = EX->uw[i + 2]; LHU(x3, wback, fixedaddress + (i + 2) * 2); @@ -1361,8 +1366,8 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0x6A: INST_NAME("PUNPCKHDQ Gm,Em"); nextop = F8; - GETEM(x1, 0); GETGM(); + GETEM(x1, 0, 4); // GM->ud[0] = GM->ud[1]; LWU(x3, gback, gdoffset + 1 * 4); SW(x3, gback, gdoffset + 0 * 4); @@ -1392,7 +1397,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni LWU(x3, gback, gdoffset); SW(x3, gback, gdoffset + 4); } else { - GETEM(x1, 0); + GETEM(x1, 0, 4); for (int i = 0; i < 2; ++i) { // GM->sw[2+i] = (EM->sd[i]<-32768)?-32768:((EM->sd[i]>32767)?32767:EM->sd[i]); LW(x3, wback, fixedaddress + i * 4); @@ -1428,7 +1433,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MOVQ Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 1); LD(x3, wback, fixedaddress); SD(x3, gback, gdoffset + 0); break; @@ -1436,7 +1441,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSHUFW Gm, Em, Ib"); nextop = F8; GETGM(); - GETEM(x2, 1); + GETEM(x2, 1, 6); u8 = F8; LHU(x3, wback, fixedaddress + ((u8 >> (0 * 2)) & 3) * 2); LHU(x4, wback, fixedaddress + ((u8 >> (1 * 2)) & 3) * 2); @@ -1452,7 +1457,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni switch ((nextop >> 3) & 7) { case 2: INST_NAME("PSRLW Em, Ib"); - GETEM(x1, 1); + GETEM(x1, 1, 6); u8 = F8; if (u8 > 15) { // just zero dest @@ -1468,7 +1473,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 4: INST_NAME("PSRAW Em, Ib"); - GETEM(x1, 1); + GETEM(x1, 1, 6); u8 = F8; if (u8 > 15) u8 = 15; if (u8) { @@ -1482,7 +1487,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 6: INST_NAME("PSLLW Em, Ib"); - GETEM(x1, 1); + GETEM(x1, 1, 6); u8 = F8; if (u8 > 15) { // just zero dest @@ -1506,7 +1511,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni switch ((nextop >> 3) & 7) { case 2: INST_NAME("PSRLD Em, Ib"); - GETEM(x4, 1); + GETEM(x4, 1, 4); u8 = F8; if (u8) { if (u8 > 31) { @@ -1522,7 +1527,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 4: INST_NAME("PSRAD Em, Ib"); - GETEM(x4, 1); + GETEM(x4, 1, 4); u8 = F8; if (u8 > 31) u8 = 31; if (u8) { @@ -1535,7 +1540,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 6: INST_NAME("PSLLD Em, Ib"); - GETEM(x4, 1); + GETEM(x4, 1, 4); u8 = F8; if (u8) { if (u8 > 31) { @@ -1559,7 +1564,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni switch ((nextop >> 3) & 7) { case 2: INST_NAME("PSRLQ Em, Ib"); - GETEM(x4, 1); + GETEM(x4, 1, 1); u8 = F8; if (u8) { if (u8 > 63) { @@ -1573,7 +1578,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 6: INST_NAME("PSLLQ Em, Ib"); - GETEM(x4, 1); + GETEM(x4, 1, 1); u8 = F8; if (u8) { if (u8 > 63) { @@ -1593,7 +1598,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PCMPEQB Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); for (int i = 0; i < 8; ++i) { LBU(x3, gback, gdoffset + i); LBU(x4, wback, fixedaddress + i); @@ -1607,14 +1612,14 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PCMPEQW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); MMX_LOOP_W(x3, x4, SUB(x3, x3, x4); SEQZ(x3, x3); NEG(x3, x3)); break; case 0x76: INST_NAME("PCMPEQD Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 4); MMX_LOOP_D(x3, x4, SUB(x3, x3, x4); SEQZ(x3, x3); NEG(x3, x3)); break; case 0x77: @@ -1628,14 +1633,25 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0x7E: INST_NAME("MOVD Ed, Gm"); nextop = F8; - GETGM(); + gd = ((nextop & 0x38) >> 3); + v0 = mmx_get_reg(dyn, ninst, x1, x2, x3, gd); if ((nextop & 0xC0) == 0xC0) { ed = xRAX + (nextop & 7) + (rex.b << 3); - LDxw(ed, gback, gdoffset); + if (rex.w) + FMVXD(ed, v0); + else { + FMVXW(ed, v0); + ZEROUP(ed); + } } else { addr = geted(dyn, addr, ninst, nextop, &wback, x3, x2, &fixedaddress, rex, NULL, 1, 0); - LDxw(x1, gback, gdoffset); - SDxw(x1, wback, fixedaddress); + if (rex.w) { + FMVXD(x1, v0); + SD(x1, wback, fixedaddress); + } else { + FMVXW(x1, v0); + SW(x1, wback, fixedaddress); + } SMWRITE2(); } break; @@ -1643,77 +1659,78 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MOVQ Em, Gm"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 1); LD(x3, gback, gdoffset + 0); SD(x3, wback, fixedaddress); break; -#define GO(GETFLAGS, NO, YES, F) \ - if (box64_dynarec_test == 2) { NOTEST(x1); } \ - READFLAGS(F); \ - i32_ = F32S; \ - BARRIER(BARRIER_MAYBE); \ - JUMP(addr + i32_, 1); \ - GETFLAGS; \ - if (dyn->insts[ninst].x64.jmp_insts == -1 || CHECK_CACHE()) { \ - /* out of the block */ \ - i32 = dyn->insts[ninst].epilog - (dyn->native_size); \ - B##NO##_safe(x1, i32); \ - if (dyn->insts[ninst].x64.jmp_insts == -1) { \ - if (!(dyn->insts[ninst].x64.barrier & BARRIER_FLOAT)) \ - fpu_purgecache(dyn, ninst, 1, x1, x2, x3); \ - jump_to_next(dyn, addr + i32_, 0, ninst, rex.is32bits); \ - } else { \ - CacheTransform(dyn, ninst, cacheupd, x1, x2, x3); \ - i32 = dyn->insts[dyn->insts[ninst].x64.jmp_insts].address - (dyn->native_size); \ - B(i32); \ - } \ - } else { \ - /* inside the block */ \ - i32 = dyn->insts[dyn->insts[ninst].x64.jmp_insts].address - (dyn->native_size); \ - B##YES##_safe(x1, i32); \ - } - + #define GO(GETFLAGS, NO, YES, F) \ + READFLAGS(F); \ + i32_ = F32S; \ + if(rex.is32bits) \ + j64 = (uint32_t)(addr+i32_); \ + else \ + j64 = addr+i32_; \ + BARRIER(BARRIER_MAYBE); \ + JUMP(j64, 1); \ + GETFLAGS; \ + if (dyn->insts[ninst].x64.jmp_insts == -1 || CHECK_CACHE()) { \ + /* out of the block */ \ + i32 = dyn->insts[ninst].epilog - (dyn->native_size); \ + B##NO##_safe(x1, i32); \ + if (dyn->insts[ninst].x64.jmp_insts == -1) { \ + if (!(dyn->insts[ninst].x64.barrier & BARRIER_FLOAT)) \ + fpu_purgecache(dyn, ninst, 1, x1, x2, x3); \ + jump_to_next(dyn, j64, 0, ninst, rex.is32bits); \ + } else { \ + CacheTransform(dyn, ninst, cacheupd, x1, x2, x3); \ + i32 = dyn->insts[dyn->insts[ninst].x64.jmp_insts].address - (dyn->native_size); \ + B(i32); \ + } \ + } else { \ + /* inside the block */ \ + i32 = dyn->insts[dyn->insts[ninst].x64.jmp_insts].address - (dyn->native_size); \ + B##YES##_safe(x1, i32); \ + } GOCOND(0x80, "J", "Id"); -#undef GO - -#define GO(GETFLAGS, NO, YES, F) \ - READFLAGS(F); \ - GETFLAGS; \ - nextop = F8; \ - S##YES(x3, x1); \ - if (MODREG) { \ - if (rex.rex) { \ - eb1 = xRAX + (nextop & 7) + (rex.b << 3); \ - eb2 = 0; \ - } else { \ - ed = (nextop & 7); \ - eb2 = (ed >> 2) * 8; \ - eb1 = xRAX + (ed & 3); \ - } \ - if (eb2) { \ - LUI(x1, 0xffff0); \ - ORI(x1, x1, 0xff); \ - AND(eb1, eb1, x1); \ - SLLI(x3, x3, 8); \ - } else { \ - ANDI(eb1, eb1, 0xf00); \ - } \ - OR(eb1, eb1, x3); \ - } else { \ - addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); \ - SB(x3, ed, fixedaddress); \ - SMWRITE(); \ - } + #undef GO + #define GO(GETFLAGS, NO, YES, F) \ + READFLAGS(F); \ + GETFLAGS; \ + nextop = F8; \ + S##YES(x3, x1); \ + if (MODREG) { \ + if (rex.rex) { \ + eb1 = xRAX + (nextop & 7) + (rex.b << 3); \ + eb2 = 0; \ + } else { \ + ed = (nextop & 7); \ + eb2 = (ed >> 2) * 8; \ + eb1 = xRAX + (ed & 3); \ + } \ + if (eb2) { \ + LUI(x1, 0xffff0); \ + ORI(x1, x1, 0xff); \ + AND(eb1, eb1, x1); \ + SLLI(x3, x3, 8); \ + } else { \ + ANDI(eb1, eb1, 0xf00); \ + } \ + OR(eb1, eb1, x3); \ + } else { \ + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); \ + SB(x3, ed, fixedaddress); \ + SMWRITE(); \ + } GOCOND(0x90, "SET", "Eb"); -#undef GO + #undef GO case 0xA2: INST_NAME("CPUID"); NOTEST(x1); MV(A1, xRAX); CALL_(my_cpuid, -1, 0); - // BX and DX are not synchronized durring the call, so need to force the update + // BX and DX are not synchronized during the call, so need to force the update LD(xRDX, xEmu, offsetof(x64emu_t, regs[_DX])); LD(xRBX, xEmu, offsetof(x64emu_t, regs[_BX])); break; @@ -1740,12 +1757,17 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0xA4: nextop = F8; INST_NAME("SHLD Ed, Gd, Ib"); - SETFLAGS(X_ALL, SF_SET_PENDING); - GETED(1); - GETGD; - u8 = F8; - emit_shld32c(dyn, ninst, rex, ed, gd, u8, x3, x4); - WBACK; + if (geted_ib(dyn, addr, ninst, nextop)) { + SETFLAGS(X_ALL, SF_SET_PENDING); + GETED(1); + GETGD; + u8 = F8; + emit_shld32c(dyn, ninst, rex, ed, gd, u8, x3, x4, x5); + WBACK; + } else { + FAKEED; + F8; + } break; case 0xA5: nextop = F8; @@ -1796,13 +1818,18 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0xAC: nextop = F8; INST_NAME("SHRD Ed, Gd, Ib"); - SETFLAGS(X_ALL, SF_SET_PENDING); - GETED(1); - GETGD; - u8 = F8; - u8 &= (rex.w ? 0x3f : 0x1f); - emit_shrd32c(dyn, ninst, rex, ed, gd, u8, x3, x4); - WBACK; + if (geted_ib(dyn, addr, ninst, nextop)) { + SETFLAGS(X_ALL, SF_SET_PENDING); + GETED(1); + GETGD; + u8 = F8; + u8 &= (rex.w ? 0x3f : 0x1f); + emit_shrd32c(dyn, ninst, rex, ed, gd, u8, x3, x4, x5); + WBACK; + } else { + FAKEED; + F8; + } break; case 0xAD: nextop = F8; @@ -1846,7 +1873,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni fpu_purgecache(dyn, ninst, 0, x1, x2, x3); addr = geted(dyn, addr, ninst, nextop, &ed, x1, x3, &fixedaddress, rex, NULL, 0, 0); if (ed != x1) { MV(x1, ed); } - CALL(rex.w ? ((void*)fpu_fxsave64) : ((void*)fpu_fxsave32), -1); + CALL(rex.is32bits ? ((void*)fpu_fxsave32) : ((void*)fpu_fxsave64), -1); break; case 1: INST_NAME("FXRSTOR Ed"); @@ -1855,7 +1882,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni fpu_purgecache(dyn, ninst, 0, x1, x2, x3); addr = geted(dyn, addr, ninst, nextop, &ed, x1, x3, &fixedaddress, rex, NULL, 0, 0); if (ed != x1) { MV(x1, ed); } - CALL(rex.w ? ((void*)fpu_fxrstor64) : ((void*)fpu_fxrstor32), -1); + CALL(rex.is32bits ? ((void*)fpu_fxrstor32) : ((void*)fpu_fxrstor64), -1); break; case 2: INST_NAME("LDMXCSR Md"); @@ -1871,6 +1898,24 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni LWU(x4, xEmu, offsetof(x64emu_t, mxcsr)); SW(x4, wback, fixedaddress); break; + case 4: + INST_NAME("XSAVE Ed"); + MESSAGE(LOG_DUMP, "Need Optimization\n"); + fpu_purgecache(dyn, ninst, 0, x1, x2, x3); + addr = geted(dyn, addr, ninst, nextop, &wback, x1, x2, &fixedaddress, rex, NULL, 0, 0); + if (ed != x1) { MV(x1, ed); } + MOV32w(x2, rex.is32bits); + CALL((void*)fpu_xsave, -1); + break; + case 5: + INST_NAME("XRSTOR Ed"); + MESSAGE(LOG_DUMP, "Need Optimization\n"); + fpu_purgecache(dyn, ninst, 0, x1, x2, x3); + addr = geted(dyn, addr, ninst, nextop, &wback, x1, x2, &fixedaddress, rex, NULL, 0, 0); + if (ed != x1) { MV(x1, ed); } + MOV32w(x2, rex.is32bits); + CALL((void*)fpu_xrstor, -1); + break; case 7: INST_NAME("CLFLUSH Ed"); MESSAGE(LOG_DUMP, "Need Optimization?\n"); @@ -2028,10 +2073,9 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (wback) { SDxw(ed, wback, fixedaddress); SMWRITE(); - } else if(!rex.w) { - ZEROUP(ed); } MARK; + if (!rex.w && !wback) ZEROUP(ed); break; case 6: INST_NAME("BTR Ed, Ib"); @@ -2207,7 +2251,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni GETGB(x2); if (!(MODREG && wback == gb1 && !!(wb2) == !!(gb2))) MV(x9, ed); - emit_add8(dyn, ninst, ed, gd, x4, x5); + emit_add8(dyn, ninst, ed, gd, x4, x5, x6); if (!(MODREG && wback == gb1 && !!(wb2) == !!(gb2))) MV(gd, x9); EBBACK(x5, 0); @@ -2231,7 +2275,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("CMPPS Gx, Ex, Ib"); nextop = F8; GETGX(); - GETEX(x2, 1); + GETEX(x2, 1, 12); u8 = F8; d0 = fpu_get_scratch(dyn); d1 = fpu_get_scratch(dyn); @@ -2307,7 +2351,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PEXTRW Gd,Em,Ib"); nextop = F8; GETGD; - GETEM(x2, 0); + GETEM(x2, 0, 6); u8 = (F8)&3; LHU(gd, wback, fixedaddress + u8 * 2); break; @@ -2315,7 +2359,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("SHUFPS Gx, Ex, Ib"); nextop = F8; GETGX(); - GETEX(x2, 1); + GETEX(x2, 1, 12); u8 = F8; int32_t idx; @@ -2333,7 +2377,26 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SW(x5, gback, gdoffset + 2 * 4); SW(x6, gback, gdoffset + 3 * 4); break; - + case 0xC7: + // rep has no impact here + nextop = F8; + if (MODREG) { + switch ((nextop >> 3) & 7) { + default: + DEFAULT; + } + } else { + switch ((nextop >> 3) & 7) { + case 4: + INST_NAME("Unsupported XSAVEC Ed"); + FAKEED; + UDF(); + break; + default: + DEFAULT; + } + } + break; case 0xC8: case 0xC9: case 0xCA: @@ -2350,7 +2413,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSRLW Gm, Em"); nextop = F8; GETGM(); - GETEM(x4, 0); + GETEM(x4, 0, 1); LD(x1, wback, fixedaddress); ADDI(x2, xZR, 15); BLTU_MARK(x2, x1); @@ -2367,7 +2430,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSRLD Gm, Em"); nextop = F8; GETGM(); - GETEM(x4, 0); + GETEM(x4, 0, 1); LD(x1, wback, fixedaddress); ADDI(x2, xZR, 31); BLTU_MARK(x2, x1); @@ -2384,7 +2447,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSRLQ Gm,Em"); nextop = F8; GETGM(); - GETEM(x4, 0); + GETEM(x4, 0, 1); LD(x1, wback, fixedaddress); ADDI(x2, xZR, 63); BLTU_MARK(x2, x1); @@ -2399,7 +2462,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PADDQ Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 1); LD(x1, wback, fixedaddress); LD(x2, gback, gdoffset); ADD(x1, x1, x2); @@ -2409,14 +2472,14 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PMULLW Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); MMX_LOOP_WS(x3, x4, MULW(x3, x3, x4)); break; case 0xD7: INST_NAME("PMOVMSKB Gd, Em"); nextop = F8; GETGD; - GETEM(x2, 0); + GETEM(x2, 0, 1); LD(x1, wback, fixedaddress + 0); for (int i = 0; i < 8; i++) { if (rv64_zbs) { @@ -2447,7 +2510,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSUBUSB Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); for (int i = 0; i < 8; ++i) { LBU(x3, gback, gdoffset + i); LBU(x4, wback, fixedaddress + i); @@ -2466,7 +2529,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSUBUSW Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); MMX_LOOP_W(x3, x4, SUB(x3, x3, x4); if (rv64_zbb) { @@ -2483,7 +2546,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PMINUB Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); for (int i = 0; i < 8; ++i) { LBU(x3, gback, gdoffset + i); LBU(x4, wback, fixedaddress + i); @@ -2500,7 +2563,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PAND Gm, Em"); nextop = F8; GETGM(); - GETEM(x4, 0); + GETEM(x4, 0, 1); LD(x1, wback, fixedaddress); LD(x2, gback, gdoffset); AND(x1, x1, x2); @@ -2510,7 +2573,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PADDUSB Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); ADDI(x5, xZR, 0xFF); for (int i = 0; i < 8; ++i) { LBU(x3, gback, gdoffset + i); @@ -2529,7 +2592,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PADDUSW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); MOV32w(x5, 65535); for (int i = 0; i < 4; ++i) { // tmp32s = (int32_t)GX->uw[i] + EX->uw[i]; @@ -2550,7 +2613,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PMAXUB Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); for (int i = 0; i < 8; ++i) { LBU(x3, gback, gdoffset + i); LBU(x4, wback, fixedaddress + i); @@ -2567,7 +2630,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PANDN Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 1); LD(x1, gback, gdoffset); LD(x3, wback, fixedaddress); if (rv64_zbb) { @@ -2582,7 +2645,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PAVGB Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); for (int i = 0; i < 8; ++i) { LBU(x3, gback, gdoffset + i); LBU(x4, wback, fixedaddress + i); @@ -2596,7 +2659,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSRAW Gm,Em"); nextop = F8; GETGM(); - GETEM(x4, 0); + GETEM(x4, 0, 1); LBU(x1, wback, fixedaddress); ADDI(x2, xZR, 15); if (rv64_zbb) { @@ -2615,7 +2678,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSRAD Gm, Em"); nextop = F8; GETGM(); - GETEM(x4, 0); + GETEM(x4, 0, 1); LBU(x1, wback, fixedaddress); ADDI(x2, xZR, 31); if (rv64_zbb) { @@ -2634,7 +2697,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PAVGW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); for (int i = 0; i < 4; ++i) { LHU(x3, gback, gdoffset + 2 * i); LHU(x4, wback, fixedaddress + 2 * i); @@ -2648,7 +2711,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PMULHUW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); for (int i = 0; i < 4; ++i) { LHU(x3, gback, gdoffset + 2 * i); LHU(x4, wback, fixedaddress + 2 * i); @@ -2661,7 +2724,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PMULHW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); for (int i = 0; i < 4; ++i) { LH(x3, gback, gdoffset + 2 * i); LH(x4, wback, fixedaddress + 2 * i); @@ -2686,7 +2749,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSUBSB Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); ADDI(x5, xZR, 0x7f); ADDI(x6, xZR, 0xf80); for (int i = 0; i < 8; ++i) { @@ -2709,7 +2772,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSUBSW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); MOV64x(x5, 32767); MOV64x(x6, -32768); for (int i = 0; i < 4; ++i) { @@ -2734,7 +2797,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PMINSW Gx,Ex"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); for (int i = 0; i < 4; ++i) { LH(x3, gback, gdoffset + 2 * i); LH(x4, wback, fixedaddress + 2 * i); @@ -2751,7 +2814,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("POR Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 1); LD(x3, gback, gdoffset); LD(x4, wback, fixedaddress); OR(x3, x3, x4); @@ -2761,7 +2824,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PADDSB Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); MOV64x(x5, 127); MOV64x(x6, -128); for (int i = 0; i < 8; ++i) { @@ -2786,7 +2849,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PADDSW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); MOV64x(x5, 32767); MOV64x(x6, -32768); for (int i = 0; i < 4; ++i) { @@ -2811,7 +2874,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PMAXSW Gm,Em"); nextop = F8; GETGM(); - GETEM(x1, 0); + GETEM(x1, 0, 6); MMX_LOOP_WS(x3, x4, if (rv64_zbb) { MAX(x3, x3, x4); @@ -2829,7 +2892,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni // just zero dest SD(xZR, gback, gdoffset + 0); } else { - GETEM(x2, 0); + GETEM(x2, 0, 1); LD(x3, gback, gdoffset + 0); LD(x4, wback, fixedaddress); XOR(x3, x3, x4); @@ -2840,7 +2903,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSLLW Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 1); ADDI(x4, xZR, 15); LD(x1, wback, fixedaddress + 0); BLTU_MARK(x4, x1); @@ -2864,7 +2927,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSLLD Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 1); ADDI(x4, xZR, 31); LD(x1, wback, fixedaddress + 0); BLTU_MARK(x4, x1); @@ -2882,7 +2945,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSLLQ Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 1); ADDI(x4, xZR, 63); LD(x1, gback, gdoffset + 0); LD(x3, wback, fixedaddress + 0); @@ -2897,7 +2960,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PMULUDQ Gm,Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 1); LWU(x3, gback, gdoffset + 0 * 4); LWU(x4, wback, fixedaddress + 0 * 4); MUL(x3, x3, x4); @@ -2907,7 +2970,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PMADDWD Gm, Em"); nextop = F8; GETGM(); - GETEM(x5, 0); + GETEM(x5, 0, 6); for (int i = 0; i < 2; ++i) { LH(x1, gback, gdoffset + i * 4); LH(x2, gback, gdoffset + i * 4 + 2); @@ -2923,7 +2986,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSADBW Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); MV(x6, xZR); for (int i = 0; i < 8; ++i) { LBU(x3, gback, gdoffset + i); @@ -2943,7 +3006,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MASKMOVQ Gm, Em"); nextop = F8; GETGM(); - GETEM(x5, 0); + GETEM(x5, 0, 7); for (int i = 0; i < 8; i++) { LB(x1, wback, fixedaddress + i); BLT(xZR, x1, 4 * 3); @@ -2955,7 +3018,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSUBB Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); for (int i = 0; i < 8; ++i) { LB(x3, wback, fixedaddress + i); LB(x4, gback, gdoffset + i); @@ -2967,21 +3030,21 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PSUBW Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); MMX_LOOP_W(x3, x4, SUBW(x3, x3, x4)); break; case 0xFA: INST_NAME("PSUBD Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 4); MMX_LOOP_D(x3, x4, SUBW(x3, x3, x4)); break; case 0xFB: INST_NAME("PSUBQ Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 1); LD(x1, gback, gdoffset + 0); LD(x3, wback, fixedaddress + 0); SUB(x1, x1, x3); @@ -2991,7 +3054,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PADDB Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 7); for (int i = 0; i < 8; ++i) { // GM->sb[i] += EM->sb[i]; LB(x3, gback, gdoffset + i); @@ -3004,14 +3067,14 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("PADDW Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 6); MMX_LOOP_W(x3, x4, ADDW(x3, x3, x4)); break; case 0xFE: INST_NAME("PADDD Gm, Em"); nextop = F8; GETGM(); - GETEM(x2, 0); + GETEM(x2, 0, 4); MMX_LOOP_D(x3, x4, ADDW(x3, x3, x4)); break; default: diff --git a/src/dynarec/rv64/dynarec_rv64_0f_vector.c b/src/dynarec/rv64/dynarec_rv64_0f_vector.c new file mode 100644 index 0000000000000000000000000000000000000000..2eedcc22a7662383a3029b9bd1bc743f4866e541 --- /dev/null +++ b/src/dynarec/rv64/dynarec_rv64_0f_vector.c @@ -0,0 +1,608 @@ +#include +#include +#include +#include + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" +#include "my_cpuid.h" +#include "emu/x87emu_private.h" +#include "emu/x64shaext.h" +#include "bitutils.h" + +#include "rv64_printer.h" +#include "dynarec_rv64_private.h" +#include "dynarec_rv64_functions.h" +#include "dynarec_rv64_helper.h" + +uintptr_t dynarec64_0F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog) +{ + (void)ip; + (void)need_epilog; + + uint8_t opcode = F8; + uint8_t nextop, u8; + uint8_t gd, ed; + uint8_t wb1, wback, wb2, gback; + uint8_t eb1, eb2; + uint8_t gb1, gb2; + int32_t i32, i32_; + int cacheupd = 0; + int v0, v1; + int q0, q1; + int d0, d1; + int s0, s1; + uint64_t tmp64u0, tmp64u1; + int64_t j64; + int64_t fixedaddress, gdoffset; + int unscaled; + MAYUSE(wb2); + MAYUSE(gback); + MAYUSE(eb1); + MAYUSE(eb2); + MAYUSE(q0); + MAYUSE(q1); + MAYUSE(d0); + MAYUSE(d1); + MAYUSE(s0); + MAYUSE(j64); + MAYUSE(cacheupd); + + switch (opcode) { + case 0x10: + INST_NAME("MOVUPS Gx, Ex"); + nextop = F8; + GETG; + if (MODREG) { + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + ed = (nextop & 7) + (rex.b << 3); + v1 = sse_get_reg_vector(dyn, ninst, x1, ed, 0, dyn->vector_eew); + v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); + VMV_V_V(v0, v1); + } else { + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); // unaligned! + SMREAD(); + v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VLE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + } + break; + case 0x11: + INST_NAME("MOVUPS Ex, Gx"); + nextop = F8; + if (MODREG) { + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETGX_vector(v0, 0, dyn->vector_eew); + ed = (nextop & 7) + (rex.b << 3); + v1 = sse_get_reg_empty_vector(dyn, ninst, x1, ed); + VMV_V_V(v1, v0); + } else { + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); // unaligned! + GETGX_vector(v0, 0, dyn->vector_eew); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VSE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + SMWRITE2(); + } + break; + case 0x12: + nextop = F8; + if (MODREG) { + INST_NAME("MOVHLPS Gx, Ex"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(v0, 1, VECTOR_SEW64); + GETEX_vector(v1, 0, 0, VECTOR_SEW64); + q0 = fpu_get_scratch(dyn); + VSLIDEDOWN_VI(q0, v1, 1, VECTOR_UNMASKED); + if (rv64_xtheadvector) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v0, v0, q0); // implies VMASK + } else { + VMV_X_S(x4, q0); + VMV_S_X(v0, x4); + } + } else { + INST_NAME("MOVLPS Gx, Ex"); + SMREAD(); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); // unaligned! + GETGX_vector(v0, 1, VECTOR_SEW8); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 0, 0); + VECTOR_LOAD_VMASK(0xFF, x4, 1); + VLE8_V(v0, ed, VECTOR_MASKED, VECTOR_NFIELD1); + } + break; + case 0x13: + INST_NAME("MOVLPS Ex, Gx"); + nextop = F8; + GETG; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + v0 = sse_get_reg_vector(dyn, ninst, x1, gd, 0, VECTOR_SEW64); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + d0 = sse_get_reg_vector(dyn, ninst, x1, ed, 1, VECTOR_SEW64); + if (rv64_xtheadvector) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v0, v0, v1); // implies VMASK + } else { + VMV_X_S(x4, v1); + VMV_S_X(v0, x4); + } + } else { + VMV_X_S(x4, v0); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + SD(x4, ed, fixedaddress); + SMWRITE2(); + } + break; + case 0x14: + INST_NAME("UNPCKLPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + if (q0 == q1) { + q1 = fpu_get_scratch(dyn); + VMV_V_V(q1, q0); + } + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + v1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); // no more scratches! + // Zvbb VWSLL would help here.... + VWADDU_VX(v0, q0, xZR, VECTOR_UNMASKED); + VWADDU_VX(v1, q1, xZR, VECTOR_UNMASKED); + VSLIDE1UP_VX(d0, v1, xZR, VECTOR_UNMASKED); + VOR_VV(q0, v0, d0, VECTOR_UNMASKED); + break; + case 0x15: + INST_NAME("UNPCKHPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + if (q0 == q1) { + q1 = fpu_get_scratch(dyn); + VMV_V_V(q1, q0); + } + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + v1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); // no more scratches! + if (rv64_vlen >= 256) { + VWADDU_VX(v0, q0, xZR, VECTOR_UNMASKED); + VWADDU_VX(v1, q1, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL2, 2); + VSLIDEDOWN_VI(d0, v1, 3, VECTOR_UNMASKED); + VSLIDEDOWN_VI(v1, v0, 4, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 1); + VOR_VV(q0, v1, d0, VECTOR_UNMASKED); + } else { + // Zvbb VWSLL would help here.... + VWADDU_VX(v0, q0, xZR, VECTOR_UNMASKED); + VWADDU_VX(v1, q1, xZR, VECTOR_UNMASKED); + VSLIDE1UP_VX(d0, v1 + 1, xZR, VECTOR_UNMASKED); + VOR_VV(q0, v0 + 1, d0, VECTOR_UNMASKED); + } + break; + case 0x16: + nextop = F8; + if (MODREG) { + INST_NAME("MOVLHPS Gx, Ex"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(v0, 1, VECTOR_SEW64); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + if (v0 == v1) { + // for vslideup.vi, cannot be overlapped + v1 = fpu_get_scratch(dyn); + VMV_V_V(v1, v0); + } + VSLIDEUP_VI(v0, v1, 1, VECTOR_UNMASKED); + } else { + INST_NAME("MOVHPS Gx, Ex"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETGX_vector(v0, 1, VECTOR_SEW8); + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, 0); + v1 = fpu_get_scratch(dyn); + VECTOR_LOAD_VMASK(0xFF, x4, 1); + VLE8_V(v1, ed, VECTOR_MASKED, VECTOR_NFIELD1); + VSLIDEUP_VI(v0, v1, 8, VECTOR_UNMASKED); + } + break; + case 0x17: + INST_NAME("MOVHPS Ex, Gx"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(v0, 1, VECTOR_SEW64); + // EX->q[0] = GX->q[1]; + if (MODREG) { + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + q0 = fpu_get_scratch(dyn); + VSLIDE1DOWN_VX(q0, v0, xZR, VECTOR_UNMASKED); + if (rv64_xtheadvector) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v1, v1, q0); // implies VMASK + } else { + VMV_X_S(x4, q0); + VMV_S_X(v1, x4); + } + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 1, 0); + q0 = fpu_get_scratch(dyn); + VSLIDE1DOWN_VX(q0, v0, xZR, VECTOR_UNMASKED); + VMV_X_S(x4, q0); + SD(x4, ed, fixedaddress); + SMWRITE2(); + } + break; + case 0x28: + INST_NAME("MOVAPS Gx, Ex"); + nextop = F8; + GETG; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + v1 = sse_get_reg_vector(dyn, ninst, x1, ed, 0, dyn->vector_eew); + v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); + VMV_V_V(v0, v1); + } else { + SMREAD(); + v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VLE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + } + break; + case 0x29: + INST_NAME("MOVAPS Ex, Gx"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETGX_vector(v0, 0, dyn->vector_eew); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + v1 = sse_get_reg_empty_vector(dyn, ninst, x1, ed); + VMV_V_V(v1, v0); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VSE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + SMWRITE2(); + } + break; + case 0x2B: + INST_NAME("MOVNTPS Ex, Gx"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETGX_vector(v0, 0, dyn->vector_eew); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + v1 = sse_get_reg_empty_vector(dyn, ninst, x1, ed); + VMV_V_V(v1, v0); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VSE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + SMWRITE2(); + } + break; + case 0x50: + INST_NAME("MOVMSKPS Gd, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGD; + GETEX_vector(q0, 0, 0, VECTOR_SEW32); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL8); + VSRL_VI(v0, q0, 31, VECTOR_UNMASKED); + if (rv64_xtheadvector) { + // Force the element width to 4bit + vector_vsetvli(dyn, ninst, x4, VECTOR_SEW32, VECTOR_LMUL8, 1); + VMSNE_VX(VMASK, v0, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x4, VECTOR_SEW32, VECTOR_LMUL1, 1); + VMV_X_S(x4, VMASK); + BEXTI(gd, x4, 12); + BEXTI(x5, x4, 8); + ADDSL(gd, x5, gd, 1, x6); + BEXTI(x5, x4, 4); + ADDSL(gd, x5, gd, 1, x6); + BEXTI(x5, x4, 0); + ADDSL(gd, x5, gd, 1, x6); + } else { + VMSNE_VX(VMASK, v0, xZR, VECTOR_UNMASKED); + VMV_X_S(gd, VMASK); + ZEROUP(gd); + } + break; + case 0x51: + INST_NAME("SQRTPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(v0, 0, 0, VECTOR_SEW32); + GETGX_empty_vector(v1); + VFSQRT_V(v1, v0, VECTOR_UNMASKED); + break; + case 0x52: + if (!box64_dynarec_fastround) return 0; + INST_NAME("RSQRTPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(v0, 0, 0, VECTOR_SEW32); + GETGX_empty_vector(v1); + LUI(x4, 0x3f800); + FMVWX(v0, x4); // 1.0f + VFSQRT_V(v1, v0, VECTOR_UNMASKED); + VFRDIV_VF(v1, v1, v0, VECTOR_UNMASKED); + break; + case 0x53: + INST_NAME("RCPPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(v0, 0, 0, VECTOR_SEW32); + GETGX_empty_vector(v1); + LUI(x4, 0x3f800); + FMVWX(v0, x4); // 1.0f + VFRDIV_VF(v1, v0, v0, VECTOR_UNMASKED); + break; + case 0x54: + INST_NAME("ANDPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q0, 0, 0, VECTOR_SEW32); + GETGX_vector(v0, 1, VECTOR_SEW32); + VAND_VV(v0, v0, q0, VECTOR_UNMASKED); + break; + case 0x55: + INST_NAME("ANDNPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q0, 0, 0, VECTOR_SEW32); + GETGX_vector(v0, 1, VECTOR_SEW32); + VXOR_VI(v0, v0, 0x1f, VECTOR_UNMASKED); + VAND_VV(v0, v0, q0, VECTOR_UNMASKED); + break; + case 0x56: + INST_NAME("ORPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q0, 0, 0, VECTOR_SEW32); + GETGX_vector(v0, 1, VECTOR_SEW32); + VOR_VV(v0, v0, q0, VECTOR_UNMASKED); + break; + case 0x57: + INST_NAME("XORPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETG; + if (MODREG && ((nextop & 7) + (rex.b << 3) == gd)) { + // special case for XORPS Gx, Gx + q0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + } else { + q0 = sse_get_reg_vector(dyn, ninst, x1, gd, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + VXOR_VV(q0, q1, q0, VECTOR_UNMASKED); + } + break; + case 0x58: + INST_NAME("ADDPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q0, 0, 0, VECTOR_SEW32); + GETGX_vector(v0, 1, VECTOR_SEW32); + VFADD_VV(v0, v0, q0, VECTOR_UNMASKED); + break; + case 0x59: + INST_NAME("MULPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q0, 0, 0, VECTOR_SEW32); + GETGX_vector(v0, 1, VECTOR_SEW32); + VFMUL_VV(v0, v0, q0, VECTOR_UNMASKED); + break; + case 0x5A: + INST_NAME("CVTPS2PD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + GETGX_empty_vector(v0); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_empty_vector(v0); + } + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VFWCVT_F_F_V(d0, v1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); + VMV_V_V(v0, d0); + break; + case 0x5B: + INST_NAME("CVTDQ2PS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q0, 0, 0, VECTOR_SEW32); + GETGX_empty_vector(v0); + VFCVT_F_X_V(v0, q0, VECTOR_UNMASKED); + break; + case 0x5C: + INST_NAME("SUBPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q0, 0, 0, VECTOR_SEW32); + GETGX_vector(v0, 1, VECTOR_SEW32); + VFSUB_VV(v0, v0, q0, VECTOR_UNMASKED); + break; + case 0x5D: + INST_NAME("MINPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + if (!box64_dynarec_fastnan) { + v0 = fpu_get_scratch(dyn); + VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); + VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); + } + VFMIN_VV(q0, q0, q1, VECTOR_UNMASKED); + if (!box64_dynarec_fastnan) { + VMAND_MM(VMASK, v0, VMASK); + VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); + VADD_VX(q0, q1, xZR, VECTOR_MASKED); + } + break; + case 0x5E: + INST_NAME("DIVPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + VFDIV_VV(q0, q0, q1, VECTOR_UNMASKED); + break; + case 0x5F: + INST_NAME("MAXPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + v0 = fpu_get_scratch(dyn); + if (!box64_dynarec_fastnan) { + VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); + VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); + } + VFMAX_VV(q0, q0, q1, VECTOR_UNMASKED); + if (!box64_dynarec_fastnan) { + VMAND_MM(VMASK, v0, VMASK); + VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); + VADD_VX(q0, q1, xZR, VECTOR_MASKED); + } + break; + case 0x6F: + INST_NAME("MOVQ Gm, Em"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETG; + if (MODREG) { + v1 = mmx_get_reg_vector(dyn, ninst, x1, x2, x3, nextop & 7); + v0 = mmx_get_reg_empty_vector(dyn, ninst, x1, x2, x3, gd); + VMV_V_V(v0, v1); + } else { + v0 = mmx_get_reg_empty_vector(dyn, ninst, x1, x2, x3, gd); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v0, x4); + } + break; + case 0xC2: + INST_NAME("CMPPS Gx, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(v0, 1, VECTOR_SEW32); + GETEX_vector(v1, 0, 1, VECTOR_SEW32); + u8 = F8; + if ((u8 & 7) == 0) { // Equal + VMFEQ_VV(VMASK, v0, v1, VECTOR_UNMASKED); + } else if ((u8 & 7) == 4) { // Not Equal or unordered + VMFEQ_VV(VMASK, v0, v1, VECTOR_UNMASKED); + VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); + } else { + d0 = fpu_get_scratch(dyn); + VMFEQ_VV(VMASK, v0, v0, VECTOR_UNMASKED); + VMFEQ_VV(d0, v1, v1, VECTOR_UNMASKED); + VMAND_MM(VMASK, VMASK, d0); + switch (u8 & 7) { + case 1: // Less than + VMFLT_VV(d0, v0, v1, VECTOR_UNMASKED); + VMAND_MM(VMASK, VMASK, d0); + break; + case 2: // Less or equal + VMFLE_VV(d0, v0, v1, VECTOR_UNMASKED); + VMAND_MM(VMASK, VMASK, d0); + break; + case 3: // NaN + VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); + break; + case 5: // Greater or equal or unordered + VMFLE_VV(d0, v1, v0, VECTOR_UNMASKED); + VMORN_MM(VMASK, d0, VMASK); + break; + case 6: // Greater or unordered, test inverted, N!=V so unordered or less than (inverted) + VMFLT_VV(d0, v1, v0, VECTOR_UNMASKED); + VMORN_MM(VMASK, d0, VMASK); + break; + case 7: // Not NaN + break; + } + } + VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + VXOR_VI(v0, v0, 0x1F, VECTOR_MASKED); + break; + case 0xC6: + INST_NAME("SHUFPS Gx, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(v0, 1, VECTOR_SEW32); + GETEX_vector(v1, 0, 1, VECTOR_SEW32); + u8 = F8; + q0 = fpu_get_scratch(dyn); + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + if (rv64_xtheadvector) { // lack of vrgatherei16.vv + q1 = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); + tmp64u0 = ((((uint64_t)u8 >> 2) & 3) << 32) | (u8 & 3); + VECTOR_SPLAT_IMM(q0, tmp64u0, x4); + tmp64u1 = ((((uint64_t)u8 >> 6) & 3) << 32) | ((u8 >> 4) & 3); + if (tmp64u1 != tmp64u0) { + VECTOR_SPLAT_IMM(q1, tmp64u1, x4); + } else { + q1 = q0; + } + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 1); + VRGATHER_VV(d0, v0, q0, VECTOR_UNMASKED); + VRGATHER_VV(d1, v1, q1, VECTOR_UNMASKED); + } else { + tmp64u0 = ((((uint64_t)u8 >> 2) & 3) << 16) | (u8 & 3); + VECTOR_SPLAT_IMM(q0, tmp64u0, x4); + VRGATHEREI16_VV(d0, v0, q0, VECTOR_UNMASKED); + tmp64u1 = ((((uint64_t)u8 >> 6) & 3) << 16) | ((u8 >> 4) & 3); + if (tmp64u1 != tmp64u0) { + VECTOR_SPLAT_IMM(q0, tmp64u1, x4); + } + VRGATHEREI16_VV(d1, v1, q0, VECTOR_UNMASKED); + } + VMV_V_V(v0, d0); + VSLIDEUP_VI(v0, d1, 2, VECTOR_UNMASKED); + break; + case 0xFC: + INST_NAME("PADDB Gm, Em"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGM_vector(v0); + GETEM_vector(v1, 0); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + VADD_VV(v0, v0, v1, VECTOR_UNMASKED); + break; + case 0x00 ... 0x0F: + case 0x18: + case 0x1F: + case 0x31: + case 0x40 ... 0x4F: + case 0x77: + case 0x7E: + case 0x80 ... 0xBF: + case 0xC0 ... 0xC1: + case 0xC3 ... 0xC5: + case 0xC7 ... 0xCF: + return 0; + default: + DEFAULT_VECTOR; + } + return addr; +} diff --git a/src/dynarec/rv64/dynarec_rv64_64.c b/src/dynarec/rv64/dynarec_rv64_64.c index ad022f5a94ebe41830cb25ff4a31853f80c87dd4..6f6deabfdb0dba70c7e1f22cf1c7ce02718d8cfd 100644 --- a/src/dynarec/rv64/dynarec_rv64_64.c +++ b/src/dynarec/rv64/dynarec_rv64_64.c @@ -76,10 +76,10 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("MOVUPS Ex,Gx"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); if(!MODREG) { grab_segdata(dyn, addr, ninst, x4, seg); - ADD(x4, x4, wback); + ADDz(x4, x4, wback); wback = x4; } LD(x3, gback, gdoffset+0); @@ -101,7 +101,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); - ADD(x4, x4, ed); + ADDz(x4, x4, ed); ed = x4; FSD(v0, ed, fixedaddress); SMWRITE2(); @@ -118,7 +118,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); - ADD(x4, x4, ed); + ADDz(x4, x4, ed); ed = x4; FSW(v0, ed, fixedaddress); SMWRITE2(); @@ -165,7 +165,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SETFLAGS(X_ALL, SF_SET_PENDING); GETEBO(x1, 1); u8 = F8; - emit_add8c(dyn, ninst, x1, u8, x2, x4, x5); + emit_add8c(dyn, ninst, x1, u8, x2, x4, x5, x6); EBBACK(x5, 0); break; case 1: // OR @@ -373,7 +373,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni MVxw(xRAX+(nextop&7)+(rex.b<<3), gd); } else { // mem <= reg addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); - ADD(x4, ed, x4); + ADDz(x4, ed, x4); SDxw(gd, x4, fixedaddress); SMWRITE2(); } @@ -389,7 +389,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else { // mem <= reg SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); - ADD(x4, ed, x4); + ADDz(x4, ed, x4); LDxw(gd, x4, fixedaddress); } break; @@ -403,7 +403,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else { SMREAD(); addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, NULL, 0, 0); - ADD(x4, wback, x4); + ADDz(x4, wback, x4); LHU(x1, x4, 0); ed = x1; } @@ -420,12 +420,12 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni POP1z(x3); // so this can handle POP [ESP] and maybe some variant too addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 0, 0); if (ed == xRSP) { - ADD(x4, ed, x4); + ADDz(x4, ed, x4); SDz(x3, x4, 0); } else { // complicated to just allow a segfault that can be recovered correctly ADDIz(xRSP, xRSP, rex.is32bits ? -4 : -8); - ADD(x4, ed, x4); + ADDz(x4, ed, x4); SDz(x3, x4, 0); ADDIz(xRSP, xRSP, rex.is32bits ? 4 : 8); } @@ -440,7 +440,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni u64 = F64; // TODO: could be optimized. MOV64z(x1, u64); - ADD(x1, x1, x4); + ADDz(x1, x1, x4); LDxw(xRAX, x1, 0); break; @@ -453,7 +453,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni u64 = F64; // TODO: could be optimized. MOV64z(x1, u64); - ADD(x1, x1, x4); + ADDz(x1, x1, x4); SDxw(xRAX, x1, 0); SMWRITE2(); break; @@ -500,7 +500,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ed = x3; } else ed = xZR; - ADD(x4, wback, x4); + ADDz(x4, wback, x4); SB(ed, x4, fixedaddress); SMWRITE2(); } @@ -517,11 +517,11 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, NULL, 1, 4); i64 = F32S; if(i64) { - MOV64xw(x3, i64); + MOV64x(x3, i64); ed = x3; } else ed = xZR; - ADD(x4, wback, x4); + ADDz(x4, wback, x4); SDxw(ed, x4, fixedaddress); SMWRITE2(); } @@ -529,10 +529,10 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0xFF: nextop = F8; - grab_segdata(dyn, addr, ninst, x6, seg); switch((nextop>>3)&7) { case 6: // Push Ed INST_NAME("PUSH Ed"); + grab_segdata(dyn, addr, ninst, x6, seg); GETEDOz(x6, 0, x3); PUSH1z(ed); break; diff --git a/src/dynarec/rv64/dynarec_rv64_64_vector.c b/src/dynarec/rv64/dynarec_rv64_64_vector.c new file mode 100644 index 0000000000000000000000000000000000000000..52cb6764e4dd19e75404ebb53a8a6ddd8726888c --- /dev/null +++ b/src/dynarec/rv64/dynarec_rv64_64_vector.c @@ -0,0 +1,82 @@ +#include +#include +#include +#include + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" +#include "custommem.h" + +#include "rv64_printer.h" +#include "dynarec_rv64_private.h" +#include "dynarec_rv64_helper.h" +#include "dynarec_rv64_functions.h" + +uintptr_t dynarec64_64_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int seg, int* ok, int* need_epilog) +{ + (void)ip; + (void)rep; + (void)need_epilog; + + uint8_t opcode = F8; + uint8_t nextop; + uint8_t u8; + uint8_t gd, ed, eb1, eb2, gb1, gb2; + uint8_t gback, wback, wb1, wb2, wb; + int64_t i64, j64; + uint64_t u64; + int v0, v1; + int q0; + int d0; + int64_t fixedaddress, gdoffset; + int unscaled; + MAYUSE(eb1); + MAYUSE(eb2); + MAYUSE(wb1); + MAYUSE(wb2); + MAYUSE(gb1); + MAYUSE(gb2); + MAYUSE(j64); + MAYUSE(d0); + MAYUSE(q0); + MAYUSE(v0); + MAYUSE(v1); + + while ((opcode == 0xF2) || (opcode == 0xF3)) { + rep = opcode - 0xF1; + opcode = F8; + } + + GETREX(); + + switch (opcode) { + case 0x0F: + opcode = F8; + switch (opcode) { + case 0x10: + DEFAULT_VECTOR; + case 0x11: + DEFAULT_VECTOR; + case 0x28: + DEFAULT_VECTOR; + case 0x29: + DEFAULT_VECTOR; + case 0x6F: + DEFAULT_VECTOR; + } + break; + default: + return 0; + } + return addr; +} diff --git a/src/dynarec/rv64/dynarec_rv64_66.c b/src/dynarec/rv64/dynarec_rv64_66.c index 0f101d1611639293f4afcdd5ccb5eb8814cb98ab..a4df72f710a2ed81d3f54209140b0c46e6c70a54 100644 --- a/src/dynarec/rv64/dynarec_rv64_66.c +++ b/src/dynarec/rv64/dynarec_rv64_66.c @@ -63,6 +63,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("ADD Ew, Gw"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_16BIT_OPERATION(ed, gd, x1, ADD(ed, ed, x1)); GETGW(x2); GETEW(x1, 0); emit_add16(dyn, ninst, x1, x2, x4, x5, x6); @@ -72,6 +73,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("ADD Gw, Ew"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_16BIT_OPERATION(gd, ed, x1, ADD(gd, gd, x1)); GETGW(x1); GETEW(x2, 0); emit_add16(dyn, ninst, x1, x2, x5, x4, x6); @@ -84,7 +86,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ZEXTH(x1 , xRAX); MOV32w(x2, i32); emit_add16(dyn, ninst, x1, x2, x3, x4, x6); - INSH(xRAX, x1, x3, x4, 1, 0); + INSHz(xRAX, x1, x3, x4, 1, 0); break; case 0x06: INST_NAME("PUSH ES"); @@ -101,6 +103,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("OR Ew, Gw"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_16BIT_OPERATION(ed, gd, x1, OR(ed, ed, x1)); GETGW(x2); GETEW(x1, 0); emit_or16(dyn, ninst, x1, x2, x4, x5); @@ -110,6 +113,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("OR Gw, Ew"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_16BIT_OPERATION(gd, ed, x1, OR(gd, gd, x1)); GETGW(x1); GETEW(x2, 0); emit_or16(dyn, ninst, x1, x2, x4, x5); @@ -122,16 +126,14 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ZEXTH(x1, xRAX); MOV32w(x2, i32); emit_or16(dyn, ninst, x1, x2, x3, x4); - INSH(xRAX, x1, x3, x4, 1, 0); + INSHz(xRAX, x1, x3, x4, 1, 0); break; case 0x0F: switch(rep) { case 0: { - if (rv64_vector) { + if (rv64_vector) retaddr = dynarec64_660F_vector(dyn, addr, ip, ninst, rex, ok, need_epilog); - addr = retaddr ? retaddr : dynarec64_660F(dyn, addr, ip, ninst, rex, ok, need_epilog); - } else - addr = dynarec64_660F(dyn, addr, ip, ninst, rex, ok, need_epilog); + addr = retaddr ? retaddr : dynarec64_660F(dyn, addr, ip, ninst, rex, ok, need_epilog); break; } case 1: addr = dynarec64_66F20F(dyn, addr, ip, ninst, rex, ok, need_epilog); break; @@ -143,6 +145,12 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni READFLAGS(X_CF); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_16BIT_OPERATION(ed, gd, x1, { + ADD(ed, ed, x1); + ANDI(x2, xFlags, 1 << F_CF); + SLLI(x2, x2, 64 - 16); + ADD(ed, ed, x2); + }); GETGW(x2); GETEW(x1, 0); emit_adc16(dyn, ninst, x1, x2, x4, x6, x5); @@ -153,6 +161,12 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni READFLAGS(X_CF); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_16BIT_OPERATION(gd, ed, x1, { + ADD(gd, gd, x1); + ANDI(x2, xFlags, 1 << F_CF); + SLLI(x2, x2, 64 - 16); + ADD(gd, gd, x2); + }); GETGW(x1); GETEW(x2, 0); emit_adc16(dyn, ninst, x1, x2, x4, x6, x5); @@ -166,13 +180,19 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ZEXTH(x1, xRAX); MOV64x(x2, u64); emit_adc16(dyn, ninst, x1, x2, x3, x4, x5); - INSH(xRAX, x1, x3, x4, 1, 0); + INSHz(xRAX, x1, x3, x4, 1, 0); break; case 0x19: INST_NAME("SBB Ew, Gw"); READFLAGS(X_CF); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_16BIT_OPERATION(ed, gd, x1, { + SUB(ed, ed, x1); + ANDI(x2, xFlags, 1 << F_CF); + SLLI(x2, x2, 64 - 16); + SUB(ed, ed, x2); + }); GETGW(x2); GETEW(x1, 0); emit_sbb16(dyn, ninst, x1, x2, x4, x5, x6); @@ -183,6 +203,12 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni READFLAGS(X_CF); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_16BIT_OPERATION(gd, ed, x1, { + SUB(gd, gd, x1); + ANDI(x2, xFlags, 1 << F_CF); + SLLI(x2, x2, 64 - 16); + SUB(gd, gd, x2); + }); GETGW(x1); GETEW(x2, 0); emit_sbb16(dyn, ninst, x1, x2, x6, x4, x5); @@ -196,7 +222,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni u64 = F16; MOV64x(x2, u64); emit_sbb16(dyn, ninst, x1, x2, x3, x4, x5); - INSH(xRAX, x1, x3, x4, 1, 0); + INSHz(xRAX, x1, x3, x4, 1, 0); break; case 0x1E: INST_NAME("PUSH DS"); @@ -234,12 +260,13 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ZEXTH(x1, xRAX); MOV32w(x2, i32); emit_and16(dyn, ninst, x1, x2, x3, x4); - INSH(xRAX, x1, x3, x4, 1, 0); + INSHz(xRAX, x1, x3, x4, 1, 0); break; case 0x29: INST_NAME("SUB Ew, Gw"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_16BIT_OPERATION(ed, gd, x1, SUB(ed, ed, x1)); GETGW(x1); GETEW(x2, 0); emit_sub16(dyn, ninst, x2, x1, x4, x5, x6); @@ -249,6 +276,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("SUB Gw, Ew"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_16BIT_OPERATION(gd, ed, x1, SUB(gd, gd, x1)); GETGW(x1); GETEW(x2, 0); emit_sub16(dyn, ninst, x1, x2, x6, x4, x5); @@ -261,79 +289,45 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ZEXTH(x1, xRAX); MOV32w(x2, i32); emit_sub16(dyn, ninst, x1, x2, x3, x4, x5); - INSH(xRAX, x1, x3, x4, 1, 0); + INSHz(xRAX, x1, x3, x4, 1, 0); break; case 0x31: INST_NAME("XOR Ew, Gw"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; - // try to determine ed and gd - ed = 0; - GETGD; - if (MODREG) { - GETED(0); - } - if (ed == gd) { - // optimize XOR Gw, Gw - CLEAR_FLAGS(); - IFX(X_PEND) { - SET_DF(x6, d_xor16); - } else IFX(X_ALL) { - SET_DFNONE(); - } - SRLI(ed, ed, 16); - SLLI(ed, ed, 16); - IFX(X_PEND) { - SH(ed, xEmu, offsetof(x64emu_t, res)); - } - IFX(X_ZF) { - ORI(xFlags, xFlags, 1 << F_ZF); - } - IFX(X_PF) { - ORI(xFlags, xFlags, 1 << F_PF); + if (MODREG && !dyn->insts[ninst].x64.gen_flags) { + gd = xRAX + ((nextop & 0x38) >> 3) + (rex.r << 3); + ed = xRAX + (nextop & 7) + (rex.b << 3); + if (ed == gd) { + SRLI(ed, ed, 16); + SLLI(ed, ed, 16); + break; } - } else { - GETGW(x2); - GETEW(x1, 0); - emit_xor16(dyn, ninst, x1, x2, x4, x5, x6); - EWBACK; } + FAST_16BIT_OPERATION(ed, gd, x1, XOR(ed, ed, x1)); + GETGW(x2); + GETEW(x1, 0); + emit_xor16(dyn, ninst, x1, x2, x4, x5, x6); + EWBACK; break; case 0x33: INST_NAME("XOR Gw, Ew"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; - // try to determine ed and gd - ed = 0; - GETGD; - if (MODREG) { - GETED(0); - } - if (ed == gd) { - // optimize XOR Gw, Gw - CLEAR_FLAGS(); - IFX(X_PEND) { - SET_DF(x6, d_xor16); - } else IFX(X_ALL) { - SET_DFNONE(); - } - SRLI(ed, ed, 16); - SLLI(ed, ed, 16); - IFX(X_PEND) { - SH(ed, xEmu, offsetof(x64emu_t, res)); - } - IFX(X_ZF) { - ORI(xFlags, xFlags, 1 << F_ZF); - } - IFX(X_PF) { - ORI(xFlags, xFlags, 1 << F_PF); + if (MODREG && !dyn->insts[ninst].x64.gen_flags) { + gd = xRAX + ((nextop & 0x38) >> 3) + (rex.r << 3); + ed = xRAX + (nextop & 7) + (rex.b << 3); + if (ed == gd) { + SRLI(gd, gd, 16); + SLLI(gd, gd, 16); + break; } - } else { - GETGW(x1); - GETEW(x2, 0); - emit_xor16(dyn, ninst, x1, x2, x4, x5, x6); - GWBACK; } + FAST_16BIT_OPERATION(gd, ed, x1, XOR(gd, gd, x1)); + GETGW(x1); + GETEW(x2, 0); + emit_xor16(dyn, ninst, x1, x2, x4, x5, x6); + GWBACK; break; case 0x35: INST_NAME("XOR AX, Iw"); @@ -342,7 +336,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ZEXTH(x1, xRAX); MOV32w(x2, i32); emit_xor16(dyn, ninst, x1, x2, x3, x4, x5); - INSH(xRAX, x1, x3, x4, 1, 0); + INSHz(xRAX, x1, x3, x4, 1, 0); break; case 0x39: INST_NAME("CMP Ew, Gw"); @@ -384,11 +378,8 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SETFLAGS(X_ALL&~X_CF, SF_SUBSET_PENDING); gd = xRAX + (opcode&7); ZEXTH(x1, gd); - emit_inc16(dyn, ninst, x1, x2, x3, x4); - LUI(x3, 0xffff0); - AND(gd, gd, x3); - OR(gd, gd, x1); - ZEROUP(gd); + emit_inc16(dyn, ninst, x1, x2, x3, x4, x5); + INSHz(gd, x1, x3, x4, 1, 0); break; case 0x48: case 0x49: @@ -403,10 +394,32 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni gd = xRAX + (opcode&7); ZEXTH(x1, gd); emit_dec16(dyn, ninst, x1, x2, x3, x4, x5); - LUI(x3, 0xffff0); - AND(gd, gd, x3); - OR(gd, gd, x1); - ZEROUP(gd); + INSHz(gd, x1, x3, x4, 1, 0); + break; + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + INST_NAME("PUSH reg"); + gd = xRAX + (opcode & 0x07) + (rex.b << 3); + PUSH1_16(gd); + break; + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: + case 0x5D: + case 0x5E: + case 0x5F: + INST_NAME("POP reg"); + gd = xRAX + (opcode & 0x07) + (rex.b << 3); + POP1_16(x1); + INSHz(gd, x1, x2, x3, 1, 0); break; case 0x64: addr = dynarec64_6664(dyn, addr, ip, ninst, rex, _FS, ok, need_epilog); @@ -426,7 +439,6 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } SETFLAGS(X_ALL, SF_PENDING); nextop = F8; - UFLAG_DF(x1, d_imul16); GETSEW(x1, (opcode==0x69)?2:1); if(opcode==0x69) i32 = F16S; else i32 = F8S; MOV32w(x2, i32); @@ -435,6 +447,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni UFLAG_RES(x2); gd=x2; GWBACK; + UFLAG_DF(x1, d_imul16); break; case 0x70: case 0x71: @@ -554,8 +567,8 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni GETGD; GETED(0); MV(x1, gd); - INSH(gd, ed, x3, x4, 1, 1); - INSH(ed, x1, x3, x4, 0, 1); + INSHz(gd, ed, x3, x4, 1, 1); + INSHz(ed, x1, x3, x4, 0, 1); } else { GETGD; addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, LOCK_LOCK, 0, 0); @@ -600,7 +613,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni MARK2; SMDMB(); - INSH(gd, x1, x3, x4, 1, 0); + INSHz(gd, x1, x3, x4, 1, 0); } break; case 0x89: @@ -610,7 +623,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if(MODREG) { ed = xRAX+(nextop&7)+(rex.b<<3); if (ed != gd) { - INSH(ed, gd, x2, x3, 1, 1); + INSHz(ed, gd, x2, x3, 1, 1); } } else { addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 0); @@ -625,21 +638,21 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if(MODREG) { ed = xRAX+(nextop&7)+(rex.b<<3); if (ed != gd) { - INSH(gd, ed, x2, x3, 1, 1); + INSHz(gd, ed, x2, x3, 1, 1); } } else { addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 0); SMREADLOCK(lock); LHU(x1, ed, fixedaddress); - INSH(gd, x1, x2, x3, 1, 0); + INSHz(gd, x1, x2, x3, 1, 0); } break; case 0x8C: - INST_NAME("MOV Ed, Seg"); + INST_NAME("MOV Ew, Seg"); nextop = F8; LHU(x3, xEmu, offsetof(x64emu_t, segs[(nextop & 0x38) >> 3])); if ((nextop & 0xC0) == 0xC0) { // reg <= seg - INSH(xRAX + (nextop & 7) + (rex.b << 3), x3, x1, x2, 1, 0); + INSHz(xRAX + (nextop & 7) + (rex.b << 3), x3, x1, x2, 1, 0); } else { // mem <= seg addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); SH(x3, ed, fixedaddress); @@ -660,15 +673,15 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else { INST_NAME("XCHG AX, Reg"); MV(x2, xRAX); - INSH(xRAX, gd, x3, x4, 1, 1); - INSH(gd, x2, x3, x4, 0, 1); + INSHz(xRAX, gd, x3, x4, 1, 1); + INSHz(gd, x2, x3, x4, 0, 1); } break; case 0x98: INST_NAME("CBW"); SLLI(x1, xRAX, 56); SRAI(x1, x1, 56); - INSH(xRAX, x1, x2, x3, 1, 1); + INSHz(xRAX, x1, x2, x3, 1, 1); break; case 0x99: INST_NAME("CWD"); @@ -712,7 +725,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (isLockAddress(u64)) lock = 1; else lock = 0; SMREADLOCK(lock); LHU(x2, x1, 0); - INSH(xRAX, x2, x3, x4, 1, 0); + INSHz(xRAX, x2, x3, x4, 1, 0); break; case 0xA3: INST_NAME("MOV Od,EAX"); @@ -871,7 +884,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni GETDIR(x1, x2, 2); LHU(x2, xRSI, 0); ADD(xRSI, xRSI, x1); - INSH(xRAX, x2, x3, x4, 1, 0); + INSHz(xRAX, x2, x3, x4, 1, 0); } break; case 0xAF: @@ -934,7 +947,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni u16 = F16; MOV32w(x1, u16); gd = xRAX + (opcode & 7) + (rex.b << 3); - INSH(gd, x1, x2, x3, 1, 0); + INSHz(gd, x1, x2, x3, 1, 0); break; case 0xC1: @@ -1032,7 +1045,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ed = xRAX + (nextop & 7) + (rex.b << 3); u16 = F16; MOV32w(x1, u16); - INSH(ed, x1, x2, x3, 1, 0); + INSHz(ed, x1, x2, x3, 1, 0); } else { addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 2); u16 = F16; @@ -1183,9 +1196,38 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("NEG Ew"); SETFLAGS(X_ALL, SF_SET_PENDING); GETEW(x1, 0); - emit_neg16(dyn, ninst, ed, x2, x4); + emit_neg16(dyn, ninst, ed, x2, x4, x5); EWBACK; break; + case 4: + INST_NAME("MUL AX, Ew"); + SETFLAGS(X_ALL, SF_PENDING); + GETEW(x1, 0); + ZEXTH(x2, xRAX); + MULW(x1, x2, x1); + UFLAG_RES(x1); + INSHz(xRAX, x1, x4, x5, 1, 1); + SRLI(xRDX, xRDX, 16); + SLLI(xRDX, xRDX, 16); + SRLI(x1, x1, 48); + OR(xRDX, xRDX, x1); + UFLAG_DF(x1, d_mul16); + break; + case 5: + INST_NAME("IMUL AX, Ew"); + SETFLAGS(X_ALL, SF_PENDING); + GETSEW(x1, 0); + SLLI(x2, xRAX, 16); + SRAIW(x2, x2, 16); + MULW(x1, x2, x1); + UFLAG_RES(x1); + INSHz(xRAX, x1, x4, x5, 1, 1); + SRLI(xRDX, xRDX, 16); + SLLI(xRDX, xRDX, 16); + SRLI(x1, x1, 48); + OR(xRDX, xRDX, x1); + UFLAG_DF(x1, d_imul16); + break; case 6: INST_NAME("DIV Ew"); SETFLAGS(X_ALL, SF_SET); @@ -1207,8 +1249,8 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } DIVUW(x9, x2, ed); REMUW(x4, x2, ed); - INSH(xRAX, x9, x5, x6, 1, 1); - INSH(xRDX, x4, x5, x6, 0, 1); + INSHz(xRAX, x9, x5, x6, 1, 1); + INSHz(xRDX, x4, x5, x6, 0, 1); break; case 7: INST_NAME("IDIV Ew"); @@ -1232,8 +1274,8 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni OR(x2, x2, x3); DIVW(x3, x2, ed); REMW(x4, x2, ed); - INSH(xRAX, x3, x5, x6, 1, 1); - INSH(xRDX, x4, x5, x6, 0, 1); + INSHz(xRAX, x3, x5, x6, 1, 1); + INSHz(xRDX, x4, x5, x6, 0, 1); break; default: DEFAULT; @@ -1247,7 +1289,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("INC Ew"); SETFLAGS(X_ALL&~X_CF, SF_SUBSET_PENDING); GETEW(x1, 0); - emit_inc16(dyn, ninst, x1, x2, x4, x5); + emit_inc16(dyn, ninst, x1, x2, x4, x5, x6); EWBACK; break; case 1: diff --git a/src/dynarec/rv64/dynarec_rv64_660f.c b/src/dynarec/rv64/dynarec_rv64_660f.c index d2610cf4c87862d0fef9d6b6c324c3b766114724..9450f22dd4a11e4c93ad1fd5ed19f594919fddb3 100644 --- a/src/dynarec/rv64/dynarec_rv64_660f.c +++ b/src/dynarec/rv64/dynarec_rv64_660f.c @@ -56,14 +56,14 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0x10: INST_NAME("MOVUPD Gx,Ex"); nextop = F8; - GETEX(x1, 0); + GETEX(x1, 0, 8); GETGX(); SSE_LOOP_MV_Q(x3); break; case 0x11: INST_NAME("MOVUPD Ex,Gx"); nextop = F8; - GETEX(x1, 0); + GETEX(x1, 0, 8); GETGX(); SSE_LOOP_MV_Q2(x3); if (!MODREG) SMWRITE2(); @@ -100,7 +100,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("UNPCKLPD Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 2); // GX->q[1] = EX->q[0]; LD(x3, wback, fixedaddress + 0); SD(x3, gback, gdoffset + 8); @@ -108,7 +108,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0x15: INST_NAME("UNPCKHPD Gx, Ex"); nextop = F8; - GETEX(x1, 0); + GETEX(x1, 0, 8); GETGX(); // GX->q[0] = GX->q[1]; LD(x3, gback, gdoffset + 8); @@ -139,14 +139,14 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0x28: INST_NAME("MOVAPD Gx,Ex"); nextop = F8; - GETEX(x1, 0); + GETEX(x1, 0, 8); GETGX(); SSE_LOOP_MV_Q(x3); break; case 0x29: INST_NAME("MOVAPD Ex,Gx"); nextop = F8; - GETEX(x1, 0); + GETEX(x1, 0, 8); GETGX(); SSE_LOOP_MV_Q2(x3); if (!MODREG) SMWRITE2(); @@ -155,7 +155,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("CVTPI2PD Gx,Em"); nextop = F8; GETGX(); - GETEM(x2, 0); + GETEM(x2, 0, 4); d0 = fpu_get_scratch(dyn); for (int i = 0; i < 2; ++i) { LW(x1, wback, fixedaddress + i * 4); @@ -167,14 +167,14 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("MOVNTPD Ex, Gx"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_MV_Q2(x3); break; case 0x2C: INST_NAME("CVTTPD2PI Gm,Ex"); nextop = F8; GETGM(); - GETEX(x2, 0); + GETEX(x2, 0, 8); d0 = fpu_get_scratch(dyn); for (int i = 0; i < 2; ++i) { if (!box64_dynarec_fastround) { @@ -196,7 +196,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("CVTPD2PI Gm,Ex"); nextop = F8; GETGM(); - GETEX(x2, 0); + GETEX(x2, 0, 8); d0 = fpu_get_scratch(dyn); u8 = sse_setround(dyn, ninst, x4, x5); for (int i = 0; i < 2; ++i) { @@ -259,1151 +259,36 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int } break; case 0x38: // SSSE3 opcodes - nextop = F8; - switch (nextop) { - case 0x00: - INST_NAME("PSHUFB Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - - ADDI(x5, xEmu, offsetof(x64emu_t, scratch)); - - // perserve gd - LD(x3, gback, gdoffset + 0); - LD(x4, gback, gdoffset + 8); - SD(x3, x5, 0); - SD(x4, x5, 8); - - for (int i = 0; i < 16; ++i) { - LBU(x3, wback, fixedaddress + i); - ANDI(x4, x3, 128); - BEQZ(x4, 12); - SB(xZR, gback, gdoffset + i); - BEQZ(xZR, 20); // continue - ANDI(x4, x3, 15); - ADD(x4, x4, x5); - LBU(x4, x4, 0); - SB(x4, gback, gdoffset + i); - } - break; - case 0x01: - INST_NAME("PHADDW Gx, Ex"); - nextop = F8; - GETGX(); - for (int i = 0; i < 4; ++i) { - // GX->sw[i] = GX->sw[i*2+0]+GX->sw[i*2+1]; - LH(x3, gback, gdoffset + 2 * (i * 2 + 0)); - LH(x4, gback, gdoffset + 2 * (i * 2 + 1)); - ADDW(x3, x3, x4); - SH(x3, gback, gdoffset + 2 * i); - } - if (MODREG && gd == (nextop & 7) + (rex.b << 3)) { - // GX->q[1] = GX->q[0]; - LD(x3, gback, gdoffset + 0); - SD(x3, gback, gdoffset + 8); - } else { - GETEX(x2, 0); - for (int i = 0; i < 4; ++i) { - // GX->sw[4+i] = EX->sw[i*2+0] + EX->sw[i*2+1]; - LH(x3, wback, fixedaddress + 2 * (i * 2 + 0)); - LH(x4, wback, fixedaddress + 2 * (i * 2 + 1)); - ADDW(x3, x3, x4); - SH(x3, gback, gdoffset + 2 * (4 + i)); - } - } - break; - case 0x02: - INST_NAME("PHADDD Gx, Ex"); - nextop = F8; - GETGX(); - // GX->sd[0] += GX->sd[1]; - LW(x3, gback, gdoffset + 0 * 4); - LW(x4, gback, gdoffset + 1 * 4); - ADDW(x3, x3, x4); - SW(x3, gback, gdoffset + 0 * 4); - // GX->sd[1] = GX->sd[2] + GX->sd[3]; - LW(x3, gback, gdoffset + 2 * 4); - LW(x4, gback, gdoffset + 3 * 4); - ADDW(x3, x3, x4); - SW(x3, gback, gdoffset + 1 * 4); - if (MODREG && gd == (nextop & 7) + (rex.b << 3)) { - // GX->q[1] = GX->q[0]; - LD(x3, gback, gdoffset + 0); - SD(x3, gback, gdoffset + 8); - } else { - GETEX(x2, 0); - // GX->sd[2] = EX->sd[0] + EX->sd[1]; - LW(x3, wback, fixedaddress + 0 * 4); - LW(x4, wback, fixedaddress + 1 * 4); - ADDW(x3, x3, x4); - SW(x3, gback, gdoffset + 2 * 4); - // GX->sd[3] = EX->sd[2] + EX->sd[3]; - LW(x3, wback, fixedaddress + 2 * 4); - LW(x4, wback, fixedaddress + 3 * 4); - ADDW(x3, x3, x4); - SW(x3, gback, gdoffset + 3 * 4); - } - break; - case 0x03: - INST_NAME("PHADDSW Gx, Ex"); - nextop = F8; - GETGX(); - MOV64x(x5, 32767); - MOV64x(x6, -32768); - for (int i = 0; i < 4; ++i) { - // tmp32s = GX->sw[i*2+0]+GX->sw[i*2+1]; - // GX->sw[i] = sat(tmp32s); - LH(x3, gback, gdoffset + 2 * (i * 2 + 0)); - LH(x4, gback, gdoffset + 2 * (i * 2 + 1)); - ADDW(x3, x3, x4); - if (rv64_zbb) { - MIN(x3, x3, x5); - MAX(x3, x3, x6); - } else { - BLT(x3, x5, 4 + 4); - MV(x3, x5); - BLT(x6, x3, 4 + 4); - MV(x3, x6); - } - SH(x3, gback, gdoffset + i * 2); - } - if (MODREG && gd == (nextop & 7) + (rex.b << 3)) { - // GX->q[1] = GX->q[0]; - LD(x3, gback, gdoffset + 0); - SD(x3, gback, gdoffset + 8); - } else { - GETEX(x2, 0); - for (int i = 0; i < 4; ++i) { - // tmp32s = EX->sw[i*2+0] + EX->sw[i*2+1]; - // GX->sw[4+i] = sat(tmp32s); - LH(x3, wback, fixedaddress + 2 * (i * 2 + 0)); - LH(x4, wback, fixedaddress + 2 * (i * 2 + 1)); - ADDW(x3, x3, x4); - if (rv64_zbb) { - MIN(x3, x3, x5); - MAX(x3, x3, x6); - } else { - BLT(x3, x5, 4 + 4); - MV(x3, x5); - BLT(x6, x3, 4 + 4); - MV(x3, x6); - } - SH(x3, gback, gdoffset + 2 * (4 + i)); - } - } - break; - case 0x04: - INST_NAME("PMADDUBSW Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - MOV64x(x5, 32767); - MOV64x(x6, -32768); - for (int i = 0; i < 8; ++i) { - LBU(x3, gback, gdoffset + i * 2); - LB(x4, wback, fixedaddress + i * 2); - MUL(x9, x3, x4); - LBU(x3, gback, gdoffset + i * 2 + 1); - LB(x4, wback, fixedaddress + i * 2 + 1); - MUL(x3, x3, x4); - ADD(x3, x3, x9); - if (rv64_zbb) { - MIN(x3, x3, x5); - MAX(x3, x3, x6); - } else { - BLT(x3, x5, 4 + 4); - MV(x3, x5); - BLT(x6, x3, 4 + 4); - MV(x3, x6); - } - SH(x3, gback, gdoffset + i * 2); - } - break; - case 0x05: - INST_NAME("PHSUBW Gx, Ex"); - nextop = F8; - GETGX(); - for (int i = 0; i < 4; ++i) { - // GX->sw[i] = GX->sw[i*2+0] - GX->sw[i*2+1]; - LH(x3, gback, gdoffset + 2 * (i * 2 + 0)); - LH(x4, gback, gdoffset + 2 * (i * 2 + 1)); - SUBW(x3, x3, x4); - SH(x3, gback, gdoffset + 2 * i); - } - if (MODREG && gd == (nextop & 7) + (rex.b << 3)) { - // GX->q[1] = GX->q[0]; - LD(x3, gback, gdoffset + 0); - SD(x3, gback, gdoffset + 8); - } else { - GETEX(x2, 0); - for (int i = 0; i < 4; ++i) { - // GX->sw[4+i] = EX->sw[i*2+0] - EX->sw[i*2+1]; - LH(x3, wback, fixedaddress + 2 * (i * 2 + 0)); - LH(x4, wback, fixedaddress + 2 * (i * 2 + 1)); - SUBW(x3, x3, x4); - SH(x3, gback, gdoffset + 2 * (4 + i)); - } - } - break; - case 0x08: - INST_NAME("PSIGNB Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 16; ++i) { - LB(x3, gback, gdoffset + i); - LB(x4, wback, fixedaddress + i); - SLT(x1, xZR, x4); - SRAI(x5, x4, 63); - OR(x1, x1, x5); - MUL(x3, x1, x3); - SB(x3, gback, gdoffset + i); - } - break; - case 0x09: - INST_NAME("PSIGNW Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 8; ++i) { - LH(x3, gback, gdoffset + i * 2); - LH(x4, wback, fixedaddress + i * 2); - SLT(x1, xZR, x4); - SRAI(x5, x4, 63); - OR(x1, x1, x5); - MUL(x3, x1, x3); - SH(x3, gback, gdoffset + i * 2); - } - break; - case 0x0A: - INST_NAME("PSIGND Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 4; ++i) { - LW(x3, gback, gdoffset + i * 4); - LW(x4, wback, fixedaddress + i * 4); - SLT(x1, xZR, x4); - SRAI(x5, x4, 63); - OR(x1, x1, x5); - MUL(x3, x1, x3); - SW(x3, gback, gdoffset + i * 4); - } - break; - case 0x0B: - INST_NAME("PMULHRSW Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 8; ++i) { - LH(x3, gback, gdoffset + i * 2); - LH(x4, wback, fixedaddress + i * 2); - MUL(x3, x3, x4); - SRAI(x3, x3, 14); - ADDI(x3, x3, 1); - SRAI(x3, x3, 1); - SH(x3, gback, gdoffset + i * 2); - } - break; - case 0x10: - INST_NAME("PBLENDVB Gx,Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - sse_forget_reg(dyn, ninst, x6, 0); // forget xmm[0] - for (int i = 0; i < 16; ++i) { - LB(x3, xEmu, offsetof(x64emu_t, xmm[0]) + i); - BGE(x3, xZR, 12); // continue - LBU(x3, wback, fixedaddress + i); - SB(x3, gback, gdoffset + i); - // continue - } - break; - case 0x14: - INST_NAME("PBLENDVPS Gx,Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 4; ++i) { - LW(x3, xEmu, offsetof(x64emu_t, xmm[0]) + i * 4); - BGE(x3, xZR, 4 + 4 * 2); - LWU(x3, wback, fixedaddress + i * 4); - SW(x3, gback, gdoffset + i * 4); - } - break; - case 0x17: - INST_NAME("PTEST Gx, Ex"); - nextop = F8; - SETFLAGS(X_ALL, SF_SET); - GETGX(); - GETEX(x2, 0); - CLEAR_FLAGS(); - SET_DFNONE(); - IFX(X_ZF | X_CF) - { - LD(x5, wback, fixedaddress + 0); - LD(x6, wback, fixedaddress + 8); - - IFX(X_ZF) - { - LD(x3, gback, gdoffset + 0); - LD(x4, gback, gdoffset + 8); - AND(x3, x3, x5); - AND(x4, x4, x6); - OR(x3, x3, x4); - BNEZ(x3, 8); - ORI(xFlags, xFlags, 1 << F_ZF); - } - IFX(X_CF) - { - LD(x3, gback, gdoffset + 0); - NOT(x3, x3); - LD(x4, gback, gdoffset + 8); - NOT(x4, x4); - AND(x3, x3, x5); - AND(x4, x4, x6); - OR(x3, x3, x4); - BNEZ(x3, 8); - ORI(xFlags, xFlags, 1 << F_CF); - } - } - break; - - case 0x1C: - INST_NAME("PABSB Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 16; ++i) { - LB(x4, wback, fixedaddress + i); - BGE(x4, xZR, 4 + 4); - NEG(x4, x4); - SB(x4, gback, gdoffset + i); - } - break; - case 0x1D: - INST_NAME("PABSW Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 8; ++i) { - LH(x4, wback, fixedaddress + i * 2); - BGE(x4, xZR, 4 + 4); - NEG(x4, x4); - SH(x4, gback, gdoffset + i * 2); - } - break; - case 0x1E: - INST_NAME("PABSD Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 4; ++i) { - LW(x4, wback, fixedaddress + i * 4); - BGE(x4, xZR, 4 + 4); - NEG(x4, x4); - SW(x4, gback, gdoffset + i * 4); - } - break; - case 0x20: - INST_NAME("PMOVSXBW Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 7; i >= 0; --i) { - // GX->sw[i] = EX->sb[i]; - LB(x3, wback, fixedaddress + i); - SH(x3, gback, gdoffset + i * 2); - } - break; - case 0x21: - INST_NAME("PMOVSXBD Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 3; i >= 0; --i) { - // GX->sd[i] = EX->sb[i]; - LB(x3, wback, fixedaddress + i); - SW(x3, gback, gdoffset + i * 4); - } - break; - case 0x22: - INST_NAME("PMOVSXBQ Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 1; i >= 0; --i) { - // GX->sq[i] = EX->sb[i]; - LB(x3, wback, fixedaddress + i); - SD(x3, gback, gdoffset + i * 8); - } - break; - case 0x23: - INST_NAME("PMOVSXWD Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 3; i >= 0; --i) { - // GX->sd[i] = EX->sw[i]; - LH(x3, wback, fixedaddress + i * 2); - SW(x3, gback, gdoffset + i * 4); - } - break; - case 0x24: - INST_NAME("PMOVSXWQ Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 1; i >= 0; --i) { - // GX->sq[i] = EX->sw[i]; - LH(x3, wback, fixedaddress + i * 2); - SD(x3, gback, gdoffset + i * 8); - } - break; - case 0x25: - INST_NAME("PMOVSXDQ Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 1; i >= 0; --i) { - // GX->sq[i] = EX->sd[i]; - LW(x4, wback, fixedaddress + i * 4); - SD(x4, gback, gdoffset + i * 8); - } - break; - case 0x28: - INST_NAME("PMULDQ Gx, Ex"); - nextop = F8; - GETEX(x2, 0); - GETGX(); - for (int i = 1; i >= 0; --i) { - LW(x3, wback, fixedaddress + i * 8); - LW(x4, gback, gdoffset + i * 8); - MUL(x3, x3, x4); - SD(x3, gback, gdoffset + i * 8); - } - break; - case 0x2B: - INST_NAME("PACKUSDW Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - MOV64x(x5, 65535); - for (int i = 0; i < 4; ++i) { - LW(x3, gback, gdoffset + i * 4); - if (rv64_zbb) { - MIN(x3, x3, x5); - MAX(x3, x3, xZR); - } else { - BGE(x3, xZR, 4 + 4); - MV(x3, xZR); - BLT(x3, x5, 4 + 4); - MV(x3, x5); - } - SH(x3, gback, gdoffset + i * 2); - } - if (MODREG && gd == ed) { - LD(x3, gback, gdoffset + 0); - SD(x3, gback, gdoffset + 8); - } else - for (int i = 0; i < 4; ++i) { - LW(x3, wback, fixedaddress + i * 4); - if (rv64_zbb) { - MIN(x3, x3, x5); - MAX(x3, x3, xZR); - } else { - BGE(x3, xZR, 4 + 4); - MV(x3, xZR); - BLT(x3, x5, 4 + 4); - MV(x3, x5); - } - SH(x3, gback, gdoffset + 8 + i * 2); - } - break; - - case 0x30: - INST_NAME("PMOVZXBW Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 7; i >= 0; --i) { - LBU(x3, wback, fixedaddress + i); - SH(x3, gback, gdoffset + i * 2); - } - break; - case 0x31: - INST_NAME("PMOVZXBD Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 3; i >= 0; --i) { - LBU(x3, wback, fixedaddress + i); - SW(x3, gback, gdoffset + i * 4); - } - break; - case 0x32: - INST_NAME("PMOVZXBQ Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 1; i >= 0; --i) { - LBU(x3, wback, fixedaddress + i); - SD(x3, gback, gdoffset + i * 8); - } - break; - case 0x33: - INST_NAME("PMOVZXWD Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 3; i >= 0; --i) { - LHU(x3, wback, fixedaddress + i * 2); - SW(x3, gback, gdoffset + i * 4); - } - break; - case 0x34: - INST_NAME("PMOVZXWQ Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 1; i >= 0; --i) { - LHU(x3, wback, fixedaddress + i * 2); - SD(x3, gback, gdoffset + i * 8); - } - break; - case 0x35: - INST_NAME("PMOVZXDQ Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 1; i >= 0; --i) { - LWU(x3, wback, fixedaddress + i * 4); - SD(x3, gback, gdoffset + i * 8); - } - break; - - case 0x38: - INST_NAME("PMINSB Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 16; ++i) { - LB(x3, gback, gdoffset + i); - LB(x4, wback, fixedaddress + i); - if (rv64_zbb) - MIN(x4, x3, x4); - else - BLT(x3, x4, 4 + 4); - SB(x4, gback, gdoffset + i); - } - break; - case 0x39: - INST_NAME("PMINSD Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 4; ++i) { - LW(x3, gback, gdoffset + i * 4); - LW(x4, wback, fixedaddress + i * 4); - if (rv64_zbb) - MIN(x4, x3, x4); - else - BLT(x3, x4, 4 + 4); - SW(x4, gback, gdoffset + i * 4); - } - break; - case 0x3A: - INST_NAME("PMINUW Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 8; ++i) { - LHU(x3, gback, gdoffset + i * 2); - LHU(x4, wback, fixedaddress + i * 2); - if (rv64_zbb) - MINU(x4, x3, x4); - else - BLTU(x3, x4, 4 + 4); - SH(x4, gback, gdoffset + i * 2); - } - break; - case 0x3B: - INST_NAME("PMINUD Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 4; ++i) { - LWU(x3, gback, gdoffset + i * 4); - LWU(x4, wback, fixedaddress + i * 4); - if (rv64_zbb) - MINU(x4, x3, x4); - else - BLTU(x3, x4, 4 + 4); - SW(x4, gback, gdoffset + i * 4); - } - break; - case 0x3C: - INST_NAME("PMAXSB Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 16; ++i) { - LB(x3, gback, gdoffset + i); - LB(x4, wback, fixedaddress + i); - if (rv64_zbb) - MAX(x4, x3, x4); - else - BLT(x4, x3, 4 + 4); - SB(x4, gback, gdoffset + i); - } - break; - case 0x3D: - INST_NAME("PMAXSD Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 4; ++i) { - LW(x3, gback, gdoffset + i * 4); - LW(x4, wback, fixedaddress + i * 4); - if (rv64_zbb) - MAX(x4, x3, x4); - else - BLT(x4, x3, 4 + 4); - SW(x4, gback, gdoffset + i * 4); - } - break; - case 0x3E: - INST_NAME("PMAXUW Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 8; ++i) { - LHU(x3, gback, gdoffset + i * 2); - LHU(x4, wback, fixedaddress + i * 2); - if (rv64_zbb) - MAXU(x4, x3, x4); - else - BLTU(x4, x3, 4 + 4); - SH(x4, gback, gdoffset + i * 2); - } - break; - case 0x3F: - INST_NAME("PMAXUD Gx, Ex"); // SSE4 opcode! - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 4; ++i) { - LWU(x3, gback, gdoffset + i * 4); - LWU(x4, wback, fixedaddress + i * 4); - if (rv64_zbb) - MAXU(x4, x3, x4); - else - BLTU(x4, x3, 4 + 4); - SW(x4, gback, gdoffset + i * 4); - } - break; - case 0x40: - INST_NAME("PMULLD Gx, Ex"); - nextop = F8; - GETGX(); - GETEX(x2, 0); - for (int i = 0; i < 4; ++i) { - LW(x3, gback, gdoffset + i * 4); - LW(x4, wback, fixedaddress + i * 4); - MUL(x3, x3, x4); - SW(x3, gback, gdoffset + i * 4); - } - break; - case 0x61: - INST_NAME("PCMPESTRI Gx, Ex, Ib"); - SETFLAGS(X_ALL, SF_SET_DF); - nextop = F8; - GETG; - sse_reflect_reg(dyn, ninst, x6, gd); - ADDI(x3, xEmu, offsetof(x64emu_t, xmm[gd])); - if (MODREG) { - ed = (nextop & 7) + (rex.b << 3); - sse_reflect_reg(dyn, ninst, x6, ed); - ADDI(x1, xEmu, offsetof(x64emu_t, xmm[ed])); - } else { - addr = geted(dyn, addr, ninst, nextop, &wback, x1, x2, &fixedaddress, rex, NULL, 0, 1); - if (ed != x1) { - MV(x1, ed); - } - } - // prepare rest arguments - MV(x2, xRDX); - MV(x4, xRAX); - u8 = F8; - MOV32w(x5, u8); - CALL(sse42_compare_string_explicit_len, x1); - ZEROUP(x1); - BNEZ_MARK(x1); - MOV32w(xRCX, (u8 & 1) ? 8 : 16); - B_NEXT_nocond; - MARK; - if (u8 & 0b1000000) { - CLZxw(xRCX, x1, 0, x2, x3, x4); - ADDI(x2, xZR, 31); - SUB(xRCX, x2, xRCX); - } else { - CTZxw(xRCX, xRCX, 0, x1, x2); - } - break; - case 0xDB: - INST_NAME("AESIMC Gx, Ex"); // AES-NI - nextop = F8; - GETGX(); - GETEX(x2, 0); - SSE_LOOP_MV_Q(x3); - sse_forget_reg(dyn, ninst, x6, gd); - MOV32w(x1, gd); - CALL(native_aesimc, -1); - break; - case 0xDC: - INST_NAME("AESENC Gx, Ex"); // AES-NI - nextop = F8; - GETG; - sse_forget_reg(dyn, ninst, x6, gd); - MOV32w(x1, gd); - CALL(native_aese, -1); - GETGX(); - GETEX(x2, 0); - SSE_LOOP_Q(x3, x4, XOR(x3, x3, x4)); - break; - case 0xDD: - INST_NAME("AESENCLAST Gx, Ex"); // AES-NI - nextop = F8; - GETG; - sse_forget_reg(dyn, ninst, x6, gd); - MOV32w(x1, gd); - CALL(native_aeselast, -1); - GETGX(); - GETEX(x2, 0); - SSE_LOOP_Q(x3, x4, XOR(x3, x3, x4)); - break; - case 0xDE: - INST_NAME("AESDEC Gx, Ex"); // AES-NI - nextop = F8; - GETG; - sse_forget_reg(dyn, ninst, x6, gd); - MOV32w(x1, gd); - CALL(native_aesd, -1); - GETGX(); - GETEX(x2, 0); - SSE_LOOP_Q(x3, x4, XOR(x3, x3, x4)); - break; - - case 0xDF: - INST_NAME("AESDECLAST Gx, Ex"); // AES-NI - nextop = F8; - GETG; - sse_forget_reg(dyn, ninst, x6, gd); - MOV32w(x1, gd); - CALL(native_aesdlast, -1); - GETGX(); - GETEX(x2, 0); - SSE_LOOP_Q(x3, x4, XOR(x3, x3, x4)); - break; - case 0xF0: - INST_NAME("MOVBE Gw, Ew"); - nextop = F8; - GETGD; - SMREAD(); - addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 1, 0); - LHU(x1, ed, fixedaddress); - if (rv64_zbb) { - REV8(x1, x1); - SRLI(x1, x1, 48); - } else if (rv64_xtheadbb) { - TH_REVW(x1, x1); - SRLI(x1, x1, 16); - } else { - ANDI(x2, x1, 0xff); - SLLI(x2, x2, 8); - SRLI(x1, x1, 8); - OR(x1, x1, x2); - } - LUI(x2, 0xffff0); - AND(gd, gd, x2); - OR(gd, gd, x1); - break; - case 0xF1: - INST_NAME("MOVBE Ew, Gw"); - nextop = F8; - GETGD; - SMREAD(); - addr = geted(dyn, addr, ninst, nextop, &wback, x3, x2, &fixedaddress, rex, NULL, 1, 0); - if (rv64_zbb) { - REV8(x1, gd); - SRLI(x1, x1, 48); - } else if (rv64_xtheadbb) { - TH_REVW(x1, gd); - SRLI(x1, x1, 16); - } else { - ANDI(x1, gd, 0xff); - SLLI(x1, x1, 8); - SRLI(x2, gd, 8); - ANDI(x2, x2, 0xff); - OR(x1, x1, x2); - } - SH(x1, wback, fixedaddress); - break; - default: - DEFAULT; - } - break; case 0x3A: // these are some more SSSE3+ opcodes - opcode = F8; - switch (opcode) { - case 0x0B: - INST_NAME("ROUNDSD Gx, Ex, Ib"); - nextop = F8; - GETEXSD(d0, 1); - GETGXSD_empty(v0); - d1 = fpu_get_scratch(dyn); - v1 = fpu_get_scratch(dyn); - u8 = F8; - FEQD(x2, d0, d0); - BNEZ_MARK(x2); - if (v0 != d0) FMVD(v0, d0); - B_NEXT_nocond; - MARK; // d0 is not nan - FABSD(v1, d0); - MOV64x(x3, 1ULL << __DBL_MANT_DIG__); - FCVTDL(d1, x3, RD_RTZ); - FLTD(x3, v1, d1); - BNEZ_MARK2(x3); - if (v0 != d0) FMVD(v0, d0); - B_NEXT_nocond; - MARK2; - if (u8 & 4) { - u8 = sse_setround(dyn, ninst, x4, x2); - FCVTLD(x5, d0, RD_DYN); - FCVTDL(v0, x5, RD_RTZ); - x87_restoreround(dyn, ninst, u8); - } else { - FCVTLD(x5, d0, round_round[u8 & 3]); - FCVTDL(v0, x5, RD_RTZ); - } - break; - case 0x09: - INST_NAME("ROUNDPD Gx, Ex, Ib"); - nextop = F8; - GETGX(); - GETEX(x2, 1); - u8 = F8; - d0 = fpu_get_scratch(dyn); - d1 = fpu_get_scratch(dyn); - v1 = fpu_get_scratch(dyn); - MOV64x(x3, 1ULL << __DBL_MANT_DIG__); - FCVTDL(d1, x3, RD_RTZ); - - // i = 0 - FLD(d0, wback, fixedaddress); - FEQD(x4, d0, d0); - BNEZ(x4, 8); - B_MARK_nocond; - // d0 is not nan - FABSD(v1, d0); - FLTD(x4, v1, d1); - BNEZ(x4, 8); - B_MARK_nocond; - if (u8 & 4) { - u8 = sse_setround(dyn, ninst, x4, x5); - FCVTLD(x5, d0, RD_DYN); - FCVTDL(d0, x5, RD_RTZ); - x87_restoreround(dyn, ninst, u8); - } else { - FCVTLD(x5, d0, round_round[u8 & 3]); - FCVTDL(d0, x5, RD_RTZ); - } - MARK; - FSD(d0, gback, gdoffset + 0); - - // i = 1 - FLD(d0, wback, fixedaddress + 8); - FEQD(x4, d0, d0); - BNEZ(x4, 8); - B_MARK2_nocond; - // d0 is not nan - FABSD(v1, d0); - FLTD(x4, v1, d1); - BNEZ(x4, 8); - B_MARK2_nocond; - if (u8 & 4) { - u8 = sse_setround(dyn, ninst, x4, x5); - FCVTLD(x5, d0, RD_DYN); - FCVTDL(d0, x5, RD_RTZ); - x87_restoreround(dyn, ninst, u8); - } else { - FCVTLD(x5, d0, round_round[u8 & 3]); - FCVTDL(d0, x5, RD_RTZ); - } - MARK2; - FSD(d0, gback, gdoffset + 8); - break; - case 0x0E: - INST_NAME("PBLENDW Gx, Ex, Ib"); - nextop = F8; - GETGX(); - GETEX(x2, 1); - u8 = F8; - i32 = 0; - if (MODREG && gd == ed) break; - while (u8) - if (u8 & 1) { - if (!(i32 & 1) && u8 & 2) { - if (!(i32 & 3) && (u8 & 0xf) == 0xf) { - // whole 64bits - LD(x3, wback, fixedaddress + 8 * (i32 >> 2)); - SD(x3, gback, gdoffset + 8 * (i32 >> 2)); - i32 += 4; - u8 >>= 4; - } else { - // 32bits - LWU(x3, wback, fixedaddress + 4 * (i32 >> 1)); - SW(x3, gback, gdoffset + 4 * (i32 >> 1)); - i32 += 2; - u8 >>= 2; - } - } else { - // 16 bits - LHU(x3, wback, fixedaddress + 2 * i32); - SH(x3, gback, gdoffset + 2 * i32); - i32++; - u8 >>= 1; - } - } else { - // nope - i32++; - u8 >>= 1; - } - break; - case 0x0F: - INST_NAME("PALIGNR Gx, Ex, Ib"); - nextop = F8; - GETGX(); - GETEX(x2, 1); - u8 = F8; - if (u8 > 31) { - SD(xZR, gback, gdoffset + 0); - SD(xZR, gback, gdoffset + 8); - } else if (u8 > 23) { - LD(x5, gback, gdoffset + 8); - if (u8 > 24) { - SRLI(x5, x5, 8 * (u8 - 24)); - } - SD(x5, gback, gdoffset + 0); - SD(xZR, gback, gdoffset + 8); - } else if (u8 > 15) { - if (u8 > 16) { - LD(x5, gback, gdoffset + 8); - LD(x4, gback, gdoffset + 0); - SRLI(x3, x5, 8 * (u8 - 16)); // lower of higher 64 bits - SLLI(x5, x5, 8 * (24 - u8)); // higher of lower 64 bits - SD(x3, gback, gdoffset + 8); - SRLI(x4, x4, 8 * (u8 - 16)); // lower of lower 64 bits - OR(x4, x4, x5); // lower 64 bits - SD(x4, gback, gdoffset + 0); - } - } else if (u8 > 7) { - if (u8 > 8) { - LD(x5, gback, gdoffset + 8); - LD(x4, gback, gdoffset + 0); - LD(x3, wback, fixedaddress + 8); - SLLI(x5, x5, 8 * (16 - u8)); // higher of higher 64 bits - SRLI(x1, x4, 8 * (u8 - 8)); // lower of higher 64 bits - SLLI(x4, x4, 8 * (16 - u8)); // higher of lower 64 bits - OR(x5, x1, x5); // higher 64 bits - SRLI(x3, x3, 8 * (u8 - 8)); // lower of lower 64 bits - SD(x5, gback, gdoffset + 8); - OR(x4, x4, x3); // lower 64 bits - SD(x4, gback, gdoffset + 0); - } else { - LD(x5, gback, gdoffset + 0); - LD(x4, wback, fixedaddress + 8); - SD(x5, gback, gdoffset + 8); - SD(x4, gback, gdoffset + 0); - } - } else { - if (u8 > 0) { - LD(x5, gback, gdoffset + 0); - LD(x4, wback, fixedaddress + 8); - LD(x3, wback, fixedaddress + 0); - SLLI(x5, x5, 8 * (8 - u8)); // higher of higher 64 bits - SRLI(x1, x4, 8 * (u8 - 0)); // lower of higher 64 bits - SLLI(x4, x4, 8 * (8 - u8)); // higher of lower 64 bits - OR(x5, x1, x5); // higher 64 bits - SRLI(x3, x3, 8 * (u8 - 0)); // lower of lower 64 bits - SD(x5, gback, gdoffset + 8); - OR(x4, x4, x3); // lower 64 bits - SD(x4, gback, gdoffset + 0); - } else { - LD(x5, wback, fixedaddress + 8); - LD(x4, wback, fixedaddress + 0); - SD(x5, gback, gdoffset + 8); - SD(x4, gback, gdoffset + 0); - } - } - break; - case 0x16: - if (rex.w) { - INST_NAME("PEXTRQ Ed, Gx, Ib"); - } else { - INST_NAME("PEXTRD Ed, Gx, Ib"); - } - nextop = F8; - GETGX(); - GETED(1); - u8 = F8; - if (rex.w) - LD(ed, gback, gdoffset + 8 * (u8 & 1)); - else - LWU(ed, gback, gdoffset + 4 * (u8 & 3)); - if (wback) { - SDxw(ed, wback, fixedaddress); - SMWRITE2(); - } - break; - case 0x20: - INST_NAME("PINSRB Gx, ED, Ib"); - nextop = F8; - GETGX(); - GETED(1); - u8 = F8; - SB(ed, gback, gdoffset + (u8 & 0xF)); - break; - case 0x21: - INST_NAME("INSERTPS GX, EX, Ib"); - nextop = F8; - GETGX(); - GETEX(x2, 1); - u8 = F8; - if (MODREG) - s8 = (u8 >> 6) & 3; - else - s8 = 0; - // GX->ud[(tmp8u>>4)&3] = EX->ud[tmp8s]; - LWU(x3, wback, fixedaddress + 4 * s8); - SW(x3, gback, gdoffset + 4 * (u8 >> 4)); - for (int i = 0; i < 4; ++i) { - if (u8 & (1 << i)) - // GX->ud[i] = 0; - SW(xZR, gback, gdoffset + 4 * i); - } - break; - case 0x22: - INST_NAME("PINSRD Gx, ED, Ib"); - nextop = F8; - GETGX(); - GETED(1); - u8 = F8; - if (rex.w) { - SD(ed, gback, gdoffset + 8 * (u8 & 0x1)); - } else { - SW(ed, gback, gdoffset + 4 * (u8 & 0x3)); - } - break; - case 0x40: - INST_NAME("DPPS Gx, Ex, Ib"); - nextop = F8; - GETGX(); - GETEX(x2, 1); - u8 = F8; - d0 = fpu_get_scratch(dyn); - d1 = fpu_get_scratch(dyn); - d2 = fpu_get_scratch(dyn); - FMVWX(d2, xZR); - for (int i = 0; i < 4; ++i) - if (u8 & (1 << (i + 4))) { - FLW(d0, gback, gdoffset + i * 4); - FLW(d1, wback, fixedaddress + i * 4); - FMULS(d0, d0, d1); - FADDS(d2, d2, d0); - } - for (int i = 0; i < 4; ++i) - if (u8 & (1 << i)) - FSW(d2, gback, gdoffset + i * 4); - else - SW(xZR, gback, gdoffset + i * 4); - break; - case 0x44: - INST_NAME("PCLMULQDQ Gx, Ex, Ib"); - nextop = F8; - GETG; - sse_forget_reg(dyn, ninst, x6, gd); - MOV32w(x1, gd); // gx - if (MODREG) { - ed = (nextop & 7) + (rex.b << 3); - sse_forget_reg(dyn, ninst, x6, ed); - MOV32w(x2, ed); - MOV32w(x3, 0); // p = NULL - } else { - MOV32w(x2, 0); - addr = geted(dyn, addr, ninst, nextop, &ed, x3, x5, &fixedaddress, rex, NULL, 0, 1); - if (ed != x3) { - MV(x3, ed); - } - } - u8 = F8; - MOV32w(x4, u8); - CALL(native_pclmul, -1); - break; - case 0xDF: - INST_NAME("AESKEYGENASSIST Gx, Ex, Ib"); // AES-NI - nextop = F8; - GETG; - sse_forget_reg(dyn, ninst, x6, gd); - MOV32w(x1, gd); // gx - if (MODREG) { - ed = (nextop & 7) + (rex.b << 3); - sse_forget_reg(dyn, ninst, x6, ed); - MOV32w(x2, ed); - MOV32w(x3, 0); // p = NULL - } else { - MOV32w(x2, 0); - addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, 1); - if (ed != x3) { - MV(x3, ed); - } - } - u8 = F8; - MOV32w(x4, u8); - CALL(native_aeskeygenassist, -1); - break; - default: - DEFAULT; - } - break; -#define GO(GETFLAGS, NO, YES, F) \ - READFLAGS(F); \ - GETFLAGS; \ - nextop = F8; \ - GETGD; \ - if (MODREG) { \ - ed = xRAX + (nextop & 7) + (rex.b << 3); \ - ZEXTH(x4, ed); \ - ed = x4; \ - } else { \ - SMREAD(); \ - addr = geted(dyn, addr, ninst, nextop, &ed, x2, x4, &fixedaddress, rex, NULL, 1, 0); \ - LHU(x4, ed, fixedaddress); \ - ed = x4; \ - } \ - B##NO(x1, 4 + 3 * 4); \ - LUI(x3, 0xffff0); \ - AND(gd, gd, x3); \ - OR(gd, gd, ed); + addr = dynarec64_660F38(dyn, addr, opcode, ip, ninst, rex, ok, need_epilog); + break; + #define GO(GETFLAGS, NO, YES, F) \ + READFLAGS(F); \ + GETFLAGS; \ + nextop = F8; \ + GETGD; \ + if (MODREG) { \ + ed = xRAX + (nextop & 7) + (rex.b << 3); \ + ZEXTH(x4, ed); \ + ed = x4; \ + } else { \ + SMREAD(); \ + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x4, &fixedaddress, rex, NULL, 1, 0); \ + LHU(x4, ed, fixedaddress); \ + ed = x4; \ + } \ + B##NO(x1, 4 + 3 * 4); \ + LUI(x3, 0xffff0); \ + AND(gd, gd, x3); \ + OR(gd, gd, ed); GOCOND(0x40, "CMOV", "Gw, Ew"); -#undef GO + #undef GO case 0x50: INST_NAME("PMOVMSKD Gd, Ex"); nextop = F8; GETGD; - GETEX(x1, 0); + GETEX(x1, 0, 8); MV(gd, xZR); for (int i = 0; i < 2; ++i) { // GD->dword[0] |= ((EX->q[i]>>63)&1)<f[0] = EX->d[0]; FLD(d0, wback, fixedaddress + 0); @@ -1525,7 +410,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("CVTPS2DQ Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); d0 = fpu_get_scratch(dyn); u8 = sse_setround(dyn, ninst, x6, x4); for (int i = 0; i < 4; ++i) { @@ -1541,7 +426,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0x5C: INST_NAME("SUBPD Gx, Ex"); nextop = F8; - GETEX(x1, 0); + GETEX(x1, 0, 8); GETGX(); SSE_LOOP_FQ(x3, x4, { if (!box64_dynarec_fastnan) { @@ -1562,7 +447,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("MINPD Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); d0 = fpu_get_scratch(dyn); d1 = fpu_get_scratch(dyn); for (int i = 0; i < 2; ++i) { @@ -1580,7 +465,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0x5E: INST_NAME("DIVPD Gx, Ex"); nextop = F8; - GETEX(x1, 0); + GETEX(x1, 0, 8); GETGX(); SSE_LOOP_FQ(x3, x4, { if (!box64_dynarec_fastnan) { @@ -1601,7 +486,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("MAXPD Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); d0 = fpu_get_scratch(dyn); d1 = fpu_get_scratch(dyn); for (int i = 0; i < 2; ++i) { @@ -1632,7 +517,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int SB(x3, gback, gdoffset + 2 * i + 1); } } else { - GETEX(x1, 0); + GETEX(x1, 0, 7); for (int i = 0; i < 8; ++i) { // GX->ub[2 * i + 1] = EX->ub[i]; LBU(x3, wback, fixedaddress + i); @@ -1656,7 +541,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int SH(x3, gback, gdoffset + (2 * i + 1) * 2); } } else { - GETEX(x1, 0); + GETEX(x1, 0, 6); for (int i = 0; i < 4; ++i) { // GX->uw[2 * i + 1] = EX->uw[i]; LHU(x3, wback, fixedaddress + i * 2); @@ -1667,7 +552,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0x62: INST_NAME("PUNPCKLDQ Gx,Ex"); nextop = F8; - GETEX(x1, 0); + GETEX(x1, 0, 4); GETGX(); // GX->ud[3] = EX->ud[1]; LWU(x3, wback, fixedaddress + 1 * 4); @@ -1683,7 +568,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PACKSSWB Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); MOV64x(x5, 127); MOV64x(x6, -128); for (int i = 0; i < 8; ++i) { @@ -1721,7 +606,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PCMPGTB Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 15); for (int i = 0; i < 16; ++i) { // GX->ub[i] = (GX->sb[i]>EX->sb[i])?0xFF:0x00; LB(x3, wback, fixedaddress + i); @@ -1735,7 +620,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PCMPGTW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); for (int i = 0; i < 8; ++i) { // GX->uw[i] = (GX->sw[i]>EX->sw[i])?0xFFFF:0x0000; LH(x3, wback, fixedaddress + i * 2); @@ -1748,7 +633,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0x66: INST_NAME("PCMPGTD Gx,Ex"); nextop = F8; - GETEX(x1, 0); + GETEX(x1, 0, 12); GETGX(); SSE_LOOP_DS(x3, x4, SLT(x4, x4, x3); NEG(x3, x4)); break; @@ -1772,7 +657,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int LD(x3, gback, gdoffset + 0 * 8); SD(x3, gback, gdoffset + 1 * 8); } else { - GETEX(x1, 0); + GETEX(x1, 0, 14); for (int i = 0; i < 8; ++i) { // GX->ub[8+i] = (EX->sw[i]<0)?0:((EX->sw[i]>0xff)?0xff:EX->sw[i]); LH(x3, wback, fixedaddress + i * 2); @@ -1801,7 +686,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int SB(x3, gback, gdoffset + 2 * i + 1); } } else { - GETEX(x2, 0); + GETEX(x2, 0, 7); for (int i = 0; i < 8; ++i) { // GX->ub[2 * i + 1] = EX->ub[i + 8]; LBU(x3, wback, fixedaddress + i + 8); @@ -1825,7 +710,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int SH(x3, gback, gdoffset + (2 * i + 1) * 2); } } else { - GETEX(x1, 0); + GETEX(x1, 0, 14); for (int i = 0; i < 4; ++i) { // GX->uw[2 * i + 1] = EX->uw[i + 4]; LHU(x3, wback, fixedaddress + (i + 4) * 2); @@ -1836,7 +721,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0x6A: INST_NAME("PUNPCKHDQ Gx,Ex"); nextop = F8; - GETEX(x1, 0); + GETEX(x1, 0, 12); GETGX(); // GX->ud[0] = GX->ud[2]; LWU(x3, gback, gdoffset + 2 * 4); @@ -1873,7 +758,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int LD(x3, gback, gdoffset + 0 * 8); SD(x3, gback, gdoffset + 1 * 8); } else { - GETEX(x1, 0); + GETEX(x1, 0, 12); for (int i = 0; i < 4; ++i) { // GX->sw[4+i] = (EX->sd[i]<-32768)?-32768:((EX->sd[i]>32767)?32767:EX->sd[i]); LW(x3, wback, fixedaddress + i * 4); @@ -1902,7 +787,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PUNPCKHQDQ Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); LD(x3, gback, gdoffset + 8); SD(x3, gback, gdoffset + 0); LD(x3, wback, fixedaddress + 8); @@ -1929,14 +814,14 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("MOVDQA Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_MV_Q(x3); break; case 0x70: // TODO: Optimize this! INST_NAME("PSHUFD Gx,Ex,Ib"); nextop = F8; GETGX(); - GETEX(x2, 1); + GETEX(x2, 1, 12); u8 = F8; int32_t idx; @@ -1959,7 +844,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int switch ((nextop >> 3) & 7) { case 2: INST_NAME("PSRLW Ex, Ib"); - GETEX(x1, 1); + GETEX(x1, 1, 14); u8 = F8; if (u8 > 15) { // just zero dest @@ -1976,7 +861,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int break; case 4: INST_NAME("PSRAW Ex, Ib"); - GETEX(x1, 1); + GETEX(x1, 1, 14); u8 = F8; if (u8 > 15) u8 = 15; if (u8) { @@ -1990,7 +875,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int break; case 6: INST_NAME("PSLLW Ex, Ib"); - GETEX(x1, 1); + GETEX(x1, 1, 14); u8 = F8; if (u8 > 15) { // just zero dest @@ -2015,7 +900,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int switch ((nextop >> 3) & 7) { case 2: INST_NAME("PSRLD Ex, Ib"); - GETEX(x1, 1); + GETEX(x1, 1, 12); u8 = F8; if (u8) { if (u8 > 31) { @@ -2029,7 +914,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int break; case 4: INST_NAME("PSRAD Ex, Ib"); - GETEX(x1, 1); + GETEX(x1, 1, 12); u8 = F8; if (u8 > 31) u8 = 31; if (u8) { @@ -2038,7 +923,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int break; case 6: INST_NAME("PSLLD Ex, Ib"); - GETEX(x1, 1); + GETEX(x1, 1, 12); u8 = F8; if (u8) { if (u8 > 31) { @@ -2059,7 +944,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int switch ((nextop >> 3) & 7) { case 2: INST_NAME("PSRLQ Ex, Ib"); - GETEX(x1, 1); + GETEX(x1, 1, 8); u8 = F8; if (!u8) break; if (u8 > 63) { @@ -2077,7 +962,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int break; case 3: INST_NAME("PSRLDQ Ex, Ib"); - GETEX(x1, 1); + GETEX(x1, 1, 8); u8 = F8; if (!u8) break; if (u8 > 15) { @@ -2105,7 +990,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int break; case 6: INST_NAME("PSLLQ Ex, Ib"); - GETEX(x1, 1); + GETEX(x1, 1, 8); u8 = F8; if (!u8) break; if (u8 > 63) { @@ -2123,7 +1008,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int break; case 7: INST_NAME("PSLLDQ Ex, Ib"); - GETEX(x1, 1); + GETEX(x1, 1, 8); u8 = F8; if (!u8) break; if (u8 > 15) { @@ -2157,7 +1042,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PCMPEQB Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 15); for (int i = 0; i < 16; ++i) { LBU(x3, gback, gdoffset + i); LBU(x4, wback, fixedaddress + i); @@ -2171,14 +1056,14 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PCMPEQW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); SSE_LOOP_W(x3, x4, SUB(x3, x3, x4); SEQZ(x3, x3); NEG(x3, x3)); break; case 0x76: INST_NAME("PCMPEQD Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); SSE_LOOP_D(x3, x4, XOR(x3, x3, x4); SNEZ(x3, x3); ADDI(x3, x3, -1)); break; case 0x7C: @@ -2205,7 +1090,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int if (MODREG && gd == (nextop & 7) + (rex.b << 3)) { FSD(d0, gback, gdoffset + 8); } else { - GETEX(x2, 0); + GETEX(x2, 0, 8); FLD(d0, wback, fixedaddress + 0); FLD(d1, wback, fixedaddress + 8); if (!box64_dynarec_fastnan) { @@ -2253,7 +1138,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("MOVDQA Ex,Gx"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_MV_Q2(x3); if (!MODREG) SMWRITE2(); break; @@ -2309,13 +1194,13 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("IMUL Gw,Ew"); SETFLAGS(X_ALL, SF_PENDING); nextop = F8; - UFLAG_DF(x1, d_imul16); GETSEW(x1, 0); GETSGW(x2); MULW(x2, x2, x1); UFLAG_RES(x2); ZEXTH(x2, x2); GWBACK; + UFLAG_DF(x1, d_imul16); break; case 0xB3: INST_NAME("BTR Ew, Gw"); @@ -2565,7 +1450,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("CMPPD Gx, Ex, Ib"); nextop = F8; GETGX(); - GETEX(x2, 1); + GETEX(x2, 1, 8); u8 = F8; d0 = fpu_get_scratch(dyn); d1 = fpu_get_scratch(dyn); @@ -2585,11 +1470,11 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int switch (u8 & 7) { case 1: - BEQ_MARK(x3, xZR); + BEQ(x3, xZR, 8); // MARK FLTD(x3, d0, d1); break; // Less than case 2: - BEQ_MARK(x3, xZR); + BEQ(x3, xZR, 8); // MARK FLED(x3, d0, d1); break; // Less or equal case 3: XORI(x3, x3, 1); break; // NaN @@ -2630,7 +1515,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PEXTRW Gd,Ex,Ib"); nextop = F8; GETGD; - GETEX(x1, 0); + GETEX(x1, 0, 14); u8 = (F8)&7; LHU(gd, wback, fixedaddress + u8 * 2); break; @@ -2638,7 +1523,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("SHUFPD Gx, Ex, Ib"); nextop = F8; GETGX(); - GETEX(x2, 1); + GETEX(x2, 1, 8); u8 = F8; if (MODREG && gd == (nextop & 7) + (rex.b << 3) && u8 == 0) { LD(x3, gback, gdoffset + 0); @@ -2677,7 +1562,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSRLW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 1); LD(x3, wback, fixedaddress); ADDI(x4, xZR, 16); BLTU_MARK(x3, x4); @@ -2695,7 +1580,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSRLD Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 1); LD(x3, wback, fixedaddress); ADDI(x4, xZR, 32); BLTU_MARK(x3, x4); @@ -2713,7 +1598,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSRLQ Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 1); LD(x3, wback, fixedaddress); ADDI(x4, xZR, 64); BLTU_MARK(x3, x4); @@ -2731,14 +1616,14 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PADDQ Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_Q(x3, x4, ADD(x3, x3, x4)); break; case 0xD5: INST_NAME("PMULLW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); for (int i = 0; i < 8; ++i) { LH(x3, gback, gdoffset + 2 * i); LH(x4, wback, fixedaddress + 2 * i); @@ -2750,7 +1635,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("MOVQ Ex, Gx"); nextop = F8; GETGXSD(d0); - GETEX(x2, 0); + GETEX(x2, 0, 8); FSD(d0, wback, fixedaddress + 0); if (MODREG) { SD(xZR, wback, fixedaddress + 8); @@ -2761,7 +1646,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0xD7: INST_NAME("PMOVMSKB Gd, Ex"); nextop = F8; - GETEX(x2, 0); + GETEX(x2, 0, 8); GETGD; LD(x1, wback, fixedaddress + 8); // high part LD(x2, wback, fixedaddress + 0); // low part, also destroyed wback(x2) @@ -2808,7 +1693,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSUBUSB Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 15); for (int i = 0; i < 16; ++i) { LBU(x3, gback, gdoffset + i); LBU(x4, wback, fixedaddress + i); @@ -2827,8 +1712,9 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSUBUSW Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); - SSE_LOOP_W(x3, x4, + GETEX(x2, 0, 14); + SSE_LOOP_W( + x3, x4, SUB(x3, x3, x4); if (rv64_zbb) { MAX(x3, x3, xZR); @@ -2836,15 +1722,13 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int NOT(x4, x3); SRAI(x4, x4, 63); AND(x3, x3, x4); - } - SH(x3, gback, gdoffset + i * 2); - ); + }); break; case 0xDA: INST_NAME("PMINUB Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 15); for (int i = 0; i < 16; ++i) { LBU(x3, gback, gdoffset + i); LBU(x4, wback, fixedaddress + i); @@ -2861,14 +1745,14 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PAND Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_Q(x3, x4, AND(x3, x3, x4)); break; case 0xDC: INST_NAME("PADDUSB Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 15); ADDI(x5, xZR, 0xFF); for (int i = 0; i < 16; ++i) { LBU(x3, gback, gdoffset + i); @@ -2887,7 +1771,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PADDUSW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); MOV32w(x5, 65535); for (int i = 0; i < 8; ++i) { // tmp32s = (int32_t)GX->uw[i] + EX->uw[i]; @@ -2908,7 +1792,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PMAXUB Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 15); for (int i = 0; i < 16; ++i) { LBU(x3, gback, gdoffset + i); LBU(x4, wback, fixedaddress + i); @@ -2925,14 +1809,14 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PANDN Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_Q(x3, x4, NOT(x3, x3); AND(x3, x3, x4)); break; case 0xE0: INST_NAME("PAVGB Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 15); for (int i = 0; i < 16; ++i) { LBU(x3, gback, gdoffset + i); LBU(x4, wback, fixedaddress + i); @@ -2946,7 +1830,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSRAW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 1); ADDI(x4, xZR, 16); LD(x3, wback, fixedaddress); BLTU(x3, x4, 8); @@ -2961,7 +1845,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSRAD Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 1); ADDI(x4, xZR, 32); LD(x3, wback, fixedaddress); BLTU(x3, x4, 8); @@ -2976,7 +1860,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PAVGW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); for (int i = 0; i < 8; ++i) { LHU(x3, gback, gdoffset + 2 * i); LHU(x4, wback, fixedaddress + 2 * i); @@ -2990,7 +1874,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PMULHUW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); for (int i = 0; i < 8; ++i) { LHU(x3, gback, gdoffset + 2 * i); LHU(x4, wback, fixedaddress + 2 * i); @@ -3003,7 +1887,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PMULHW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); for (int i = 0; i < 8; ++i) { LH(x3, gback, gdoffset + 2 * i); LH(x4, wback, fixedaddress + 2 * i); @@ -3016,7 +1900,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("CVTTPD2DQ Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); v0 = fpu_get_scratch(dyn); v1 = fpu_get_scratch(dyn); FLD(v0, wback, fixedaddress + 0); @@ -3049,14 +1933,14 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("MOVNTDQ Ex, Gx"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_MV_Q2(x3); break; case 0xE8: INST_NAME("PSUBSB Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 15); ADDI(x5, xZR, 0x7f); ADDI(x6, xZR, 0xf80); for (int i = 0; i < 16; ++i) { @@ -3081,7 +1965,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSUBSW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); MOV64x(x5, 32767); MOV64x(x6, -32768); for (int i = 0; i < 8; ++i) { @@ -3106,7 +1990,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PMINSW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); for (int i = 0; i < 8; ++i) { LH(x3, gback, gdoffset + 2 * i); LH(x4, wback, fixedaddress + 2 * i); @@ -3123,14 +2007,14 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("POR Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_Q(x3, x4, OR(x3, x3, x4)); break; case 0xEC: INST_NAME("PADDSB Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 15); MOV64x(x5, 127); MOV64x(x6, -128); for (int i = 0; i < 16; ++i) { @@ -3155,7 +2039,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PADDSW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); MOV64x(x5, 32767); MOV64x(x6, -32768); for (int i = 0; i < 8; ++i) { @@ -3180,7 +2064,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PMAXSW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); SSE_LOOP_WS(x3, x4, if (rv64_zbb) { MAX(x3, x3, x4); @@ -3199,7 +2083,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int SD(xZR, gback, gdoffset + 0); SD(xZR, gback, gdoffset + 8); } else { - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_Q(x3, x4, XOR(x3, x3, x4)); } break; @@ -3207,7 +2091,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSLLQ Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 1); ADDI(x4, xZR, 16); LD(x3, wback, fixedaddress + 0); BLTU_MARK(x3, x4); @@ -3226,7 +2110,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSLLQ Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 1); ADDI(x4, xZR, 32); LD(x3, wback, fixedaddress + 0); BLTU_MARK(x3, x4); @@ -3245,7 +2129,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSLLQ Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 1); ADDI(x4, xZR, 64); LD(x3, wback, fixedaddress + 0); BLTU_MARK(x3, x4); @@ -3264,7 +2148,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PMULUDQ Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); // GX->q[1] = (uint64_t)EX->ud[2]*GX->ud[2]; LWU(x3, gback, gdoffset + 2 * 4); LWU(x4, wback, fixedaddress + 2 * 4); @@ -3280,7 +2164,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PMADDWD Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); for (int i = 0; i < 4; ++i) { // GX->sd[i] = (int32_t)(GX->sw[i*2+0])*EX->sw[i*2+0] + // (int32_t)(GX->sw[i*2+1])*EX->sw[i*2+1]; @@ -3298,7 +2182,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSADBW Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 15); MV(x6, xZR); for (int i = 0; i < 16; ++i) { LBU(x3, gback, gdoffset + i); @@ -3319,7 +2203,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSUBB Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 15); for (int i = 0; i < 16; ++i) { // GX->sb[i] -= EX->sb[i]; LB(x3, wback, fixedaddress + i); @@ -3332,28 +2216,28 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSUBW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); SSE_LOOP_W(x3, x4, SUBW(x3, x3, x4)); break; case 0xFA: INST_NAME("PSUBD Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); SSE_LOOP_D(x3, x4, SUBW(x3, x3, x4)); break; case 0xFB: INST_NAME("PSUBQ Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_Q(x3, x4, SUB(x3, x3, x4)); break; case 0xFC: INST_NAME("PADDB Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 15); for (int i = 0; i < 16; ++i) { // GX->sb[i] += EX->sb[i]; LB(x3, gback, gdoffset + i); @@ -3366,14 +2250,14 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PADDW Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 14); SSE_LOOP_W(x3, x4, ADDW(x3, x3, x4)); break; case 0xFE: INST_NAME("PADDD Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); SSE_LOOP_D(x3, x4, ADDW(x3, x3, x4)); break; default: diff --git a/src/dynarec/rv64/dynarec_rv64_660f38.c b/src/dynarec/rv64/dynarec_rv64_660f38.c new file mode 100644 index 0000000000000000000000000000000000000000..475bf1da427161173464c648d5d8ed7f95e93410 --- /dev/null +++ b/src/dynarec/rv64/dynarec_rv64_660f38.c @@ -0,0 +1,1266 @@ +#include +#include +#include +#include + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" +#include "bitutils.h" + +#include "rv64_printer.h" +#include "dynarec_rv64_private.h" +#include "dynarec_rv64_functions.h" +#include "dynarec_rv64_helper.h" +#include "emu/x64compstrings.h" + +uintptr_t dynarec64_660F38(dynarec_rv64_t* dyn, uintptr_t addr, uint8_t opcode, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog) +{ + (void)ip; + (void)need_epilog; + + uint8_t nextop, u8, s8; + int32_t i32; + uint8_t gd, ed; + uint8_t wback, wb1, wb2, gback; + uint8_t eb1, eb2; + int64_t j64; + uint64_t tmp64u, tmp64u2; + int v0, v1; + int q0, q1; + int d0, d1, d2; + int64_t fixedaddress, gdoffset; + int unscaled; + + MAYUSE(d0); + MAYUSE(d1); + MAYUSE(q0); + MAYUSE(q1); + MAYUSE(eb1); + MAYUSE(eb2); + MAYUSE(j64); + + static const int8_t round_round[] = { RD_RNE, RD_RDN, RD_RUP, RD_RTZ }; + + switch (opcode) { + case 0x38: // SSSE3 opcodes + nextop = F8; + switch (nextop) { + case 0x00: + INST_NAME("PSHUFB Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 15); + + ADDI(x5, xEmu, offsetof(x64emu_t, scratch)); + + // preserve gd + LD(x3, gback, gdoffset + 0); + LD(x4, gback, gdoffset + 8); + SD(x3, x5, 0); + SD(x4, x5, 8); + + for (int i = 0; i < 16; ++i) { + LBU(x3, wback, fixedaddress + i); + ANDI(x4, x3, 128); + BEQZ(x4, 12); + SB(xZR, gback, gdoffset + i); + BEQZ(xZR, 20); // continue + ANDI(x4, x3, 15); + ADD(x4, x4, x5); + LBU(x4, x4, 0); + SB(x4, gback, gdoffset + i); + } + break; + case 0x01: + INST_NAME("PHADDW Gx, Ex"); + nextop = F8; + GETGX(); + for (int i = 0; i < 4; ++i) { + // GX->sw[i] = GX->sw[i*2+0]+GX->sw[i*2+1]; + LH(x3, gback, gdoffset + 2 * (i * 2 + 0)); + LH(x4, gback, gdoffset + 2 * (i * 2 + 1)); + ADDW(x3, x3, x4); + SH(x3, gback, gdoffset + 2 * i); + } + if (MODREG && gd == (nextop & 7) + (rex.b << 3)) { + // GX->q[1] = GX->q[0]; + LD(x3, gback, gdoffset + 0); + SD(x3, gback, gdoffset + 8); + } else { + GETEX(x2, 0, 14); + for (int i = 0; i < 4; ++i) { + // GX->sw[4+i] = EX->sw[i*2+0] + EX->sw[i*2+1]; + LH(x3, wback, fixedaddress + 2 * (i * 2 + 0)); + LH(x4, wback, fixedaddress + 2 * (i * 2 + 1)); + ADDW(x3, x3, x4); + SH(x3, gback, gdoffset + 2 * (4 + i)); + } + } + break; + case 0x02: + INST_NAME("PHADDD Gx, Ex"); + nextop = F8; + GETGX(); + // GX->sd[0] += GX->sd[1]; + LW(x3, gback, gdoffset + 0 * 4); + LW(x4, gback, gdoffset + 1 * 4); + ADDW(x3, x3, x4); + SW(x3, gback, gdoffset + 0 * 4); + // GX->sd[1] = GX->sd[2] + GX->sd[3]; + LW(x3, gback, gdoffset + 2 * 4); + LW(x4, gback, gdoffset + 3 * 4); + ADDW(x3, x3, x4); + SW(x3, gback, gdoffset + 1 * 4); + if (MODREG && gd == (nextop & 7) + (rex.b << 3)) { + // GX->q[1] = GX->q[0]; + LD(x3, gback, gdoffset + 0); + SD(x3, gback, gdoffset + 8); + } else { + GETEX(x2, 0, 12); + // GX->sd[2] = EX->sd[0] + EX->sd[1]; + LW(x3, wback, fixedaddress + 0 * 4); + LW(x4, wback, fixedaddress + 1 * 4); + ADDW(x3, x3, x4); + SW(x3, gback, gdoffset + 2 * 4); + // GX->sd[3] = EX->sd[2] + EX->sd[3]; + LW(x3, wback, fixedaddress + 2 * 4); + LW(x4, wback, fixedaddress + 3 * 4); + ADDW(x3, x3, x4); + SW(x3, gback, gdoffset + 3 * 4); + } + break; + case 0x03: + INST_NAME("PHADDSW Gx, Ex"); + nextop = F8; + GETGX(); + MOV64x(x5, 32767); + MOV64x(x6, -32768); + for (int i = 0; i < 4; ++i) { + // tmp32s = GX->sw[i*2+0]+GX->sw[i*2+1]; + // GX->sw[i] = sat(tmp32s); + LH(x3, gback, gdoffset + 2 * (i * 2 + 0)); + LH(x4, gback, gdoffset + 2 * (i * 2 + 1)); + ADDW(x3, x3, x4); + if (rv64_zbb) { + MIN(x3, x3, x5); + MAX(x3, x3, x6); + } else { + BLT(x3, x5, 4 + 4); + MV(x3, x5); + BLT(x6, x3, 4 + 4); + MV(x3, x6); + } + SH(x3, gback, gdoffset + i * 2); + } + if (MODREG && gd == (nextop & 7) + (rex.b << 3)) { + // GX->q[1] = GX->q[0]; + LD(x3, gback, gdoffset + 0); + SD(x3, gback, gdoffset + 8); + } else { + GETEX(x2, 0, 14); + for (int i = 0; i < 4; ++i) { + // tmp32s = EX->sw[i*2+0] + EX->sw[i*2+1]; + // GX->sw[4+i] = sat(tmp32s); + LH(x3, wback, fixedaddress + 2 * (i * 2 + 0)); + LH(x4, wback, fixedaddress + 2 * (i * 2 + 1)); + ADDW(x3, x3, x4); + if (rv64_zbb) { + MIN(x3, x3, x5); + MAX(x3, x3, x6); + } else { + BLT(x3, x5, 4 + 4); + MV(x3, x5); + BLT(x6, x3, 4 + 4); + MV(x3, x6); + } + SH(x3, gback, gdoffset + 2 * (4 + i)); + } + } + break; + case 0x04: + INST_NAME("PMADDUBSW Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 15); + MOV64x(x5, 32767); + MOV64x(x6, -32768); + for (int i = 0; i < 8; ++i) { + LBU(x3, gback, gdoffset + i * 2); + LB(x4, wback, fixedaddress + i * 2); + MUL(x9, x3, x4); + LBU(x3, gback, gdoffset + i * 2 + 1); + LB(x4, wback, fixedaddress + i * 2 + 1); + MUL(x3, x3, x4); + ADD(x3, x3, x9); + if (rv64_zbb) { + MIN(x3, x3, x5); + MAX(x3, x3, x6); + } else { + BLT(x3, x5, 4 + 4); + MV(x3, x5); + BLT(x6, x3, 4 + 4); + MV(x3, x6); + } + SH(x3, gback, gdoffset + i * 2); + } + break; + case 0x05: + INST_NAME("PHSUBW Gx, Ex"); + nextop = F8; + GETGX(); + for (int i = 0; i < 4; ++i) { + // GX->sw[i] = GX->sw[i*2+0] - GX->sw[i*2+1]; + LH(x3, gback, gdoffset + 2 * (i * 2 + 0)); + LH(x4, gback, gdoffset + 2 * (i * 2 + 1)); + SUBW(x3, x3, x4); + SH(x3, gback, gdoffset + 2 * i); + } + if (MODREG && gd == (nextop & 7) + (rex.b << 3)) { + // GX->q[1] = GX->q[0]; + LD(x3, gback, gdoffset + 0); + SD(x3, gback, gdoffset + 8); + } else { + GETEX(x2, 0, 14); + for (int i = 0; i < 4; ++i) { + // GX->sw[4+i] = EX->sw[i*2+0] - EX->sw[i*2+1]; + LH(x3, wback, fixedaddress + 2 * (i * 2 + 0)); + LH(x4, wback, fixedaddress + 2 * (i * 2 + 1)); + SUBW(x3, x3, x4); + SH(x3, gback, gdoffset + 2 * (4 + i)); + } + } + break; + case 0x08: + INST_NAME("PSIGNB Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 15); + for (int i = 0; i < 16; ++i) { + LB(x3, gback, gdoffset + i); + LB(x4, wback, fixedaddress + i); + SLT(x1, xZR, x4); + SRAI(x5, x4, 63); + OR(x1, x1, x5); + MUL(x3, x1, x3); + SB(x3, gback, gdoffset + i); + } + break; + case 0x09: + INST_NAME("PSIGNW Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 14); + for (int i = 0; i < 8; ++i) { + LH(x3, gback, gdoffset + i * 2); + LH(x4, wback, fixedaddress + i * 2); + SLT(x1, xZR, x4); + SRAI(x5, x4, 63); + OR(x1, x1, x5); + MUL(x3, x1, x3); + SH(x3, gback, gdoffset + i * 2); + } + break; + case 0x0A: + INST_NAME("PSIGND Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 12); + for (int i = 0; i < 4; ++i) { + LW(x3, gback, gdoffset + i * 4); + LW(x4, wback, fixedaddress + i * 4); + SLT(x1, xZR, x4); + SRAI(x5, x4, 63); + OR(x1, x1, x5); + MUL(x3, x1, x3); + SW(x3, gback, gdoffset + i * 4); + } + break; + case 0x0B: + INST_NAME("PMULHRSW Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 14); + for (int i = 0; i < 8; ++i) { + LH(x3, gback, gdoffset + i * 2); + LH(x4, wback, fixedaddress + i * 2); + MUL(x3, x3, x4); + SRAI(x3, x3, 14); + ADDI(x3, x3, 1); + SRAI(x3, x3, 1); + SH(x3, gback, gdoffset + i * 2); + } + break; + case 0x10: + INST_NAME("PBLENDVB Gx,Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 15); + sse_forget_reg(dyn, ninst, x6, 0); // forget xmm[0] + for (int i = 0; i < 16; ++i) { + LB(x3, xEmu, offsetof(x64emu_t, xmm[0]) + i); + BGE(x3, xZR, 12); // continue + LBU(x3, wback, fixedaddress + i); + SB(x3, gback, gdoffset + i); + // continue + } + break; + case 0x14: + INST_NAME("PBLENDVPS Gx,Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 12); + for (int i = 0; i < 4; ++i) { + LW(x3, xEmu, offsetof(x64emu_t, xmm[0]) + i * 4); + BGE(x3, xZR, 4 + 4 * 2); + LWU(x3, wback, fixedaddress + i * 4); + SW(x3, gback, gdoffset + i * 4); + } + break; + case 0x17: + INST_NAME("PTEST Gx, Ex"); + nextop = F8; + SETFLAGS(X_ALL, SF_SET); + GETGX(); + GETEX(x2, 0, 8); + CLEAR_FLAGS(); + SET_DFNONE(); + IFX (X_ZF | X_CF) { + LD(x5, wback, fixedaddress + 0); + LD(x6, wback, fixedaddress + 8); + + IFX (X_ZF) { + LD(x3, gback, gdoffset + 0); + LD(x4, gback, gdoffset + 8); + AND(x3, x3, x5); + AND(x4, x4, x6); + OR(x3, x3, x4); + BNEZ(x3, 8); + ORI(xFlags, xFlags, 1 << F_ZF); + } + IFX (X_CF) { + LD(x3, gback, gdoffset + 0); + NOT(x3, x3); + LD(x4, gback, gdoffset + 8); + NOT(x4, x4); + AND(x3, x3, x5); + AND(x4, x4, x6); + OR(x3, x3, x4); + BNEZ(x3, 8); + ORI(xFlags, xFlags, 1 << F_CF); + } + } + break; + + case 0x1C: + INST_NAME("PABSB Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 15); + for (int i = 0; i < 16; ++i) { + LB(x4, wback, fixedaddress + i); + BGE(x4, xZR, 4 + 4); + NEG(x4, x4); + SB(x4, gback, gdoffset + i); + } + break; + case 0x1D: + INST_NAME("PABSW Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 14); + for (int i = 0; i < 8; ++i) { + LH(x4, wback, fixedaddress + i * 2); + BGE(x4, xZR, 4 + 4); + NEG(x4, x4); + SH(x4, gback, gdoffset + i * 2); + } + break; + case 0x1E: + INST_NAME("PABSD Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 12); + for (int i = 0; i < 4; ++i) { + LW(x4, wback, fixedaddress + i * 4); + BGE(x4, xZR, 4 + 4); + NEG(x4, x4); + SW(x4, gback, gdoffset + i * 4); + } + break; + case 0x20: + INST_NAME("PMOVSXBW Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 7); + for (int i = 7; i >= 0; --i) { + // GX->sw[i] = EX->sb[i]; + LB(x3, wback, fixedaddress + i); + SH(x3, gback, gdoffset + i * 2); + } + break; + case 0x21: + INST_NAME("PMOVSXBD Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 3); + for (int i = 3; i >= 0; --i) { + // GX->sd[i] = EX->sb[i]; + LB(x3, wback, fixedaddress + i); + SW(x3, gback, gdoffset + i * 4); + } + break; + case 0x22: + INST_NAME("PMOVSXBQ Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 1); + for (int i = 1; i >= 0; --i) { + // GX->sq[i] = EX->sb[i]; + LB(x3, wback, fixedaddress + i); + SD(x3, gback, gdoffset + i * 8); + } + break; + case 0x23: + INST_NAME("PMOVSXWD Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 6); + for (int i = 3; i >= 0; --i) { + // GX->sd[i] = EX->sw[i]; + LH(x3, wback, fixedaddress + i * 2); + SW(x3, gback, gdoffset + i * 4); + } + break; + case 0x24: + INST_NAME("PMOVSXWQ Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 2); + for (int i = 1; i >= 0; --i) { + // GX->sq[i] = EX->sw[i]; + LH(x3, wback, fixedaddress + i * 2); + SD(x3, gback, gdoffset + i * 8); + } + break; + case 0x25: + INST_NAME("PMOVSXDQ Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 4); + for (int i = 1; i >= 0; --i) { + // GX->sq[i] = EX->sd[i]; + LW(x4, wback, fixedaddress + i * 4); + SD(x4, gback, gdoffset + i * 8); + } + break; + case 0x28: + INST_NAME("PMULDQ Gx, Ex"); + nextop = F8; + GETEX(x2, 0, 8); + GETGX(); + for (int i = 1; i >= 0; --i) { + LW(x3, wback, fixedaddress + i * 8); + LW(x4, gback, gdoffset + i * 8); + MUL(x3, x3, x4); + SD(x3, gback, gdoffset + i * 8); + } + break; + case 0x29: + INST_NAME("PCMPEQQ Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 8); + SSE_LOOP_Q(x3, x4, XOR(x3, x3, x4); SNEZ(x3, x3); ADDI(x3, x3, -1)); + break; + case 0x2B: + INST_NAME("PACKUSDW Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 12); + MOV64x(x5, 65535); + for (int i = 0; i < 4; ++i) { + LW(x3, gback, gdoffset + i * 4); + if (rv64_zbb) { + MIN(x3, x3, x5); + MAX(x3, x3, xZR); + } else { + BGE(x3, xZR, 4 + 4); + MV(x3, xZR); + BLT(x3, x5, 4 + 4); + MV(x3, x5); + } + SH(x3, gback, gdoffset + i * 2); + } + if (MODREG && gd == ed) { + LD(x3, gback, gdoffset + 0); + SD(x3, gback, gdoffset + 8); + } else + for (int i = 0; i < 4; ++i) { + LW(x3, wback, fixedaddress + i * 4); + if (rv64_zbb) { + MIN(x3, x3, x5); + MAX(x3, x3, xZR); + } else { + BGE(x3, xZR, 4 + 4); + MV(x3, xZR); + BLT(x3, x5, 4 + 4); + MV(x3, x5); + } + SH(x3, gback, gdoffset + 8 + i * 2); + } + break; + + case 0x30: + INST_NAME("PMOVZXBW Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 7); + for (int i = 7; i >= 0; --i) { + LBU(x3, wback, fixedaddress + i); + SH(x3, gback, gdoffset + i * 2); + } + break; + case 0x31: + INST_NAME("PMOVZXBD Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 3); + for (int i = 3; i >= 0; --i) { + LBU(x3, wback, fixedaddress + i); + SW(x3, gback, gdoffset + i * 4); + } + break; + case 0x32: + INST_NAME("PMOVZXBQ Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 2); + for (int i = 1; i >= 0; --i) { + LBU(x3, wback, fixedaddress + i); + SD(x3, gback, gdoffset + i * 8); + } + break; + case 0x33: + INST_NAME("PMOVZXWD Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 6); + for (int i = 3; i >= 0; --i) { + LHU(x3, wback, fixedaddress + i * 2); + SW(x3, gback, gdoffset + i * 4); + } + break; + case 0x34: + INST_NAME("PMOVZXWQ Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 2); + for (int i = 1; i >= 0; --i) { + LHU(x3, wback, fixedaddress + i * 2); + SD(x3, gback, gdoffset + i * 8); + } + break; + case 0x35: + INST_NAME("PMOVZXDQ Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 4); + for (int i = 1; i >= 0; --i) { + LWU(x3, wback, fixedaddress + i * 4); + SD(x3, gback, gdoffset + i * 8); + } + break; + + case 0x38: + INST_NAME("PMINSB Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 15); + for (int i = 0; i < 16; ++i) { + LB(x3, gback, gdoffset + i); + LB(x4, wback, fixedaddress + i); + if (rv64_zbb) + MIN(x4, x3, x4); + else + BLT(x3, x4, 4 + 4); + SB(x4, gback, gdoffset + i); + } + break; + case 0x39: + INST_NAME("PMINSD Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 12); + for (int i = 0; i < 4; ++i) { + LW(x3, gback, gdoffset + i * 4); + LW(x4, wback, fixedaddress + i * 4); + if (rv64_zbb) + MIN(x4, x3, x4); + else + BLT(x3, x4, 4 + 4); + SW(x4, gback, gdoffset + i * 4); + } + break; + case 0x3A: + INST_NAME("PMINUW Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 14); + for (int i = 0; i < 8; ++i) { + LHU(x3, gback, gdoffset + i * 2); + LHU(x4, wback, fixedaddress + i * 2); + if (rv64_zbb) + MINU(x4, x3, x4); + else + BLTU(x3, x4, 4 + 4); + SH(x4, gback, gdoffset + i * 2); + } + break; + case 0x3B: + INST_NAME("PMINUD Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 12); + for (int i = 0; i < 4; ++i) { + LWU(x3, gback, gdoffset + i * 4); + LWU(x4, wback, fixedaddress + i * 4); + if (rv64_zbb) + MINU(x4, x3, x4); + else + BLTU(x3, x4, 4 + 4); + SW(x4, gback, gdoffset + i * 4); + } + break; + case 0x3C: + INST_NAME("PMAXSB Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 15); + for (int i = 0; i < 16; ++i) { + LB(x3, gback, gdoffset + i); + LB(x4, wback, fixedaddress + i); + if (rv64_zbb) + MAX(x4, x3, x4); + else + BLT(x4, x3, 4 + 4); + SB(x4, gback, gdoffset + i); + } + break; + case 0x3D: + INST_NAME("PMAXSD Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 12); + for (int i = 0; i < 4; ++i) { + LW(x3, gback, gdoffset + i * 4); + LW(x4, wback, fixedaddress + i * 4); + if (rv64_zbb) + MAX(x4, x3, x4); + else + BLT(x4, x3, 4 + 4); + SW(x4, gback, gdoffset + i * 4); + } + break; + case 0x3E: + INST_NAME("PMAXUW Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 14); + for (int i = 0; i < 8; ++i) { + LHU(x3, gback, gdoffset + i * 2); + LHU(x4, wback, fixedaddress + i * 2); + if (rv64_zbb) + MAXU(x4, x3, x4); + else + BLTU(x4, x3, 4 + 4); + SH(x4, gback, gdoffset + i * 2); + } + break; + case 0x3F: + INST_NAME("PMAXUD Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETGX(); + GETEX(x2, 0, 12); + for (int i = 0; i < 4; ++i) { + LWU(x3, gback, gdoffset + i * 4); + LWU(x4, wback, fixedaddress + i * 4); + if (rv64_zbb) + MAXU(x4, x3, x4); + else + BLTU(x4, x3, 4 + 4); + SW(x4, gback, gdoffset + i * 4); + } + break; + case 0x40: + INST_NAME("PMULLD Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 12); + for (int i = 0; i < 4; ++i) { + LW(x3, gback, gdoffset + i * 4); + LW(x4, wback, fixedaddress + i * 4); + MUL(x3, x3, x4); + SW(x3, gback, gdoffset + i * 4); + } + break; + case 0x61: + INST_NAME("PCMPESTRI Gx, Ex, Ib"); + SETFLAGS(X_ALL, SF_SET_DF); + nextop = F8; + GETG; + sse_reflect_reg(dyn, ninst, x6, gd); + ADDI(x3, xEmu, offsetof(x64emu_t, xmm[gd])); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + sse_reflect_reg(dyn, ninst, x6, ed); + ADDI(x1, xEmu, offsetof(x64emu_t, xmm[ed])); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 0, 1); + if (ed != x1) MV(x1, ed); + } + // prepare rest arguments + MV(x2, xRDX); + MV(x4, xRAX); + u8 = F8; + MOV32w(x5, u8); + CALL(sse42_compare_string_explicit_len, x1); + ZEROUP(x1); + BNEZ_MARK(x1); + MOV32w(xRCX, (u8 & 1) ? 8 : 16); + B_NEXT_nocond; + MARK; + if (u8 & 0b1000000) { + CLZxw(xRCX, x1, 0, x2, x3, x4); + ADDI(x2, xZR, 31); + SUB(xRCX, x2, xRCX); + } else { + CTZxw(xRCX, x1, 0, x2, x3); + } + break; + case 0xDB: + INST_NAME("AESIMC Gx, Ex"); // AES-NI + nextop = F8; + GETGX(); + GETEX(x2, 0, 8); + SSE_LOOP_MV_Q(x3); + sse_forget_reg(dyn, ninst, x6, gd); + MOV32w(x1, gd); + CALL(native_aesimc, -1); + break; + case 0xDC: + INST_NAME("AESENC Gx, Ex"); // AES-NI + nextop = F8; + GETG; + sse_forget_reg(dyn, ninst, x6, gd); + MOV32w(x1, gd); + CALL(native_aese, -1); + GETGX(); + GETEX(x2, 0, 8); + SSE_LOOP_Q(x3, x4, XOR(x3, x3, x4)); + break; + case 0xDD: + INST_NAME("AESENCLAST Gx, Ex"); // AES-NI + nextop = F8; + GETG; + sse_forget_reg(dyn, ninst, x6, gd); + MOV32w(x1, gd); + CALL(native_aeselast, -1); + GETGX(); + GETEX(x2, 0, 8); + SSE_LOOP_Q(x3, x4, XOR(x3, x3, x4)); + break; + case 0xDE: + INST_NAME("AESDEC Gx, Ex"); // AES-NI + nextop = F8; + GETG; + sse_forget_reg(dyn, ninst, x6, gd); + MOV32w(x1, gd); + CALL(native_aesd, -1); + GETGX(); + GETEX(x2, 0, 8); + SSE_LOOP_Q(x3, x4, XOR(x3, x3, x4)); + break; + + case 0xDF: + INST_NAME("AESDECLAST Gx, Ex"); // AES-NI + nextop = F8; + GETG; + sse_forget_reg(dyn, ninst, x6, gd); + MOV32w(x1, gd); + CALL(native_aesdlast, -1); + GETGX(); + GETEX(x2, 0, 8); + SSE_LOOP_Q(x3, x4, XOR(x3, x3, x4)); + break; + case 0xF0: + INST_NAME("MOVBE Gw, Ew"); + nextop = F8; + GETGD; + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 1, 0); + LHU(x1, ed, fixedaddress); + if (rv64_zbb) { + REV8(x1, x1); + SRLI(x1, x1, 48); + } else if (rv64_xtheadbb) { + TH_REVW(x1, x1); + SRLI(x1, x1, 16); + } else { + ANDI(x2, x1, 0xff); + SLLI(x2, x2, 8); + SRLI(x1, x1, 8); + OR(x1, x1, x2); + } + LUI(x2, 0xffff0); + AND(gd, gd, x2); + OR(gd, gd, x1); + break; + case 0xF1: + INST_NAME("MOVBE Ew, Gw"); + nextop = F8; + GETGD; + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &wback, x3, x2, &fixedaddress, rex, NULL, 1, 0); + if (rv64_zbb) { + REV8(x1, gd); + SRLI(x1, x1, 48); + } else if (rv64_xtheadbb) { + TH_REVW(x1, gd); + SRLI(x1, x1, 16); + } else { + ANDI(x1, gd, 0xff); + SLLI(x1, x1, 8); + SRLI(x2, gd, 8); + ANDI(x2, x2, 0xff); + OR(x1, x1, x2); + } + SH(x1, wback, fixedaddress); + break; + default: + DEFAULT; + } + break; + case 0x3A: // these are some more SSSE3+ opcodes + opcode = F8; + switch (opcode) { + case 0x09: + INST_NAME("ROUNDPD Gx, Ex, Ib"); + nextop = F8; + GETGX(); + GETEX(x2, 1, 8); + u8 = F8; + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); + MOV64x(x3, 1ULL << __DBL_MANT_DIG__); + FCVTDL(d1, x3, RD_RTZ); + + // i = 0 + FLD(d0, wback, fixedaddress); + FEQD(x4, d0, d0); + BNEZ(x4, 8); + B_MARK_nocond; + // d0 is not nan + FABSD(v1, d0); + FLTD(x4, v1, d1); + BNEZ(x4, 8); + B_MARK_nocond; + if (u8 & 4) { + u8 = sse_setround(dyn, ninst, x4, x5); + FCVTLD(x5, d0, RD_DYN); + FCVTDL(d0, x5, RD_RTZ); + x87_restoreround(dyn, ninst, u8); + } else { + FCVTLD(x5, d0, round_round[u8 & 3]); + FCVTDL(d0, x5, RD_RTZ); + } + MARK; + FSD(d0, gback, gdoffset + 0); + + // i = 1 + FLD(d0, wback, fixedaddress + 8); + FEQD(x4, d0, d0); + BNEZ(x4, 8); + B_MARK2_nocond; + // d0 is not nan + FABSD(v1, d0); + FLTD(x4, v1, d1); + BNEZ(x4, 8); + B_MARK2_nocond; + if (u8 & 4) { + u8 = sse_setround(dyn, ninst, x4, x5); + FCVTLD(x5, d0, RD_DYN); + FCVTDL(d0, x5, RD_RTZ); + x87_restoreround(dyn, ninst, u8); + } else { + FCVTLD(x5, d0, round_round[u8 & 3]); + FCVTDL(d0, x5, RD_RTZ); + } + MARK2; + FSD(d0, gback, gdoffset + 8); + break; + case 0x0A: + INST_NAME("ROUNDSS Gx, Ex, Ib"); + nextop = F8; + GETEXSS(d0, 1); + GETGXSS_empty(v0); + d1 = fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); + u8 = F8; + FEQS(x2, d0, d0); + BNEZ_MARK(x2); + if (v0 != d0) FMVS(v0, d0); + B_NEXT_nocond; + MARK; // d0 is not nan + FABSS(v1, d0); + MOV64x(x3, 1ULL << __FLT_MANT_DIG__); + FCVTSW(d1, x3, RD_RTZ); + FLTS(x3, v1, d1); + BNEZ_MARK2(x3); + if (v0 != d0) FMVS(v0, d0); + B_NEXT_nocond; + MARK2; + if (u8 & 4) { + u8 = sse_setround(dyn, ninst, x4, x2); + FCVTWS(x5, d0, RD_DYN); + FCVTSW(v0, x5, RD_RTZ); + x87_restoreround(dyn, ninst, u8); + } else { + FCVTWS(x5, d0, round_round[u8 & 3]); + FCVTSW(v0, x5, RD_RTZ); + } + break; + case 0x0B: + INST_NAME("ROUNDSD Gx, Ex, Ib"); + nextop = F8; + GETEXSD(d0, 1); + GETGXSD_empty(v0); + d1 = fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); + u8 = F8; + FEQD(x2, d0, d0); + BNEZ_MARK(x2); + if (v0 != d0) FMVD(v0, d0); + B_NEXT_nocond; + MARK; // d0 is not nan + FABSD(v1, d0); + MOV64x(x3, 1ULL << __DBL_MANT_DIG__); + FCVTDL(d1, x3, RD_RTZ); + FLTD(x3, v1, d1); + BNEZ_MARK2(x3); + if (v0 != d0) FMVD(v0, d0); + B_NEXT_nocond; + MARK2; + if (u8 & 4) { + u8 = sse_setround(dyn, ninst, x4, x2); + FCVTLD(x5, d0, RD_DYN); + FCVTDL(v0, x5, RD_RTZ); + x87_restoreround(dyn, ninst, u8); + } else { + FCVTLD(x5, d0, round_round[u8 & 3]); + FCVTDL(v0, x5, RD_RTZ); + } + break; + case 0x0C: + INST_NAME("BLENDPS Gx, Ex, Ib"); + nextop = F8; + GETGX(); + GETEX(x2, 1, 12); + u8 = F8 & 0b1111; + for (int i = 0; i < 4; ++i) + if (u8 & (1 << i)) { + LWU(x1, wback, fixedaddress + i * 4); + SW(x1, gback, gdoffset + i * 4); + } + break; + case 0x0E: + INST_NAME("PBLENDW Gx, Ex, Ib"); + nextop = F8; + GETGX(); + GETEX(x2, 1, 14); + u8 = F8; + i32 = 0; + if (MODREG && gd == ed) break; + while (u8) + if (u8 & 1) { + if (!(i32 & 1) && u8 & 2) { + if (!(i32 & 3) && (u8 & 0xf) == 0xf) { + // whole 64bits + LD(x3, wback, fixedaddress + 8 * (i32 >> 2)); + SD(x3, gback, gdoffset + 8 * (i32 >> 2)); + i32 += 4; + u8 >>= 4; + } else { + // 32bits + LWU(x3, wback, fixedaddress + 4 * (i32 >> 1)); + SW(x3, gback, gdoffset + 4 * (i32 >> 1)); + i32 += 2; + u8 >>= 2; + } + } else { + // 16 bits + LHU(x3, wback, fixedaddress + 2 * i32); + SH(x3, gback, gdoffset + 2 * i32); + i32++; + u8 >>= 1; + } + } else { + // nope + i32++; + u8 >>= 1; + } + break; + case 0x0F: + INST_NAME("PALIGNR Gx, Ex, Ib"); + nextop = F8; + GETGX(); + GETEX(x2, 1, 8); + u8 = F8; + if (u8 > 31) { + SD(xZR, gback, gdoffset + 0); + SD(xZR, gback, gdoffset + 8); + } else if (u8 > 23) { + LD(x5, gback, gdoffset + 8); + if (u8 > 24) { + SRLI(x5, x5, 8 * (u8 - 24)); + } + SD(x5, gback, gdoffset + 0); + SD(xZR, gback, gdoffset + 8); + } else if (u8 > 15) { + if (u8 > 16) { + LD(x5, gback, gdoffset + 8); + LD(x4, gback, gdoffset + 0); + SRLI(x3, x5, 8 * (u8 - 16)); // lower of higher 64 bits + SLLI(x5, x5, 8 * (24 - u8)); // higher of lower 64 bits + SD(x3, gback, gdoffset + 8); + SRLI(x4, x4, 8 * (u8 - 16)); // lower of lower 64 bits + OR(x4, x4, x5); // lower 64 bits + SD(x4, gback, gdoffset + 0); + } + } else if (u8 > 7) { + if (u8 > 8) { + LD(x5, gback, gdoffset + 8); + LD(x4, gback, gdoffset + 0); + LD(x3, wback, fixedaddress + 8); + SLLI(x5, x5, 8 * (16 - u8)); // higher of higher 64 bits + SRLI(x1, x4, 8 * (u8 - 8)); // lower of higher 64 bits + SLLI(x4, x4, 8 * (16 - u8)); // higher of lower 64 bits + OR(x5, x1, x5); // higher 64 bits + SRLI(x3, x3, 8 * (u8 - 8)); // lower of lower 64 bits + SD(x5, gback, gdoffset + 8); + OR(x4, x4, x3); // lower 64 bits + SD(x4, gback, gdoffset + 0); + } else { + LD(x5, gback, gdoffset + 0); + LD(x4, wback, fixedaddress + 8); + SD(x5, gback, gdoffset + 8); + SD(x4, gback, gdoffset + 0); + } + } else { + if (u8 > 0) { + LD(x5, gback, gdoffset + 0); + LD(x4, wback, fixedaddress + 8); + LD(x3, wback, fixedaddress + 0); + SLLI(x5, x5, 8 * (8 - u8)); // higher of higher 64 bits + SRLI(x1, x4, 8 * (u8 - 0)); // lower of higher 64 bits + SLLI(x4, x4, 8 * (8 - u8)); // higher of lower 64 bits + OR(x5, x1, x5); // higher 64 bits + SRLI(x3, x3, 8 * (u8 - 0)); // lower of lower 64 bits + SD(x5, gback, gdoffset + 8); + OR(x4, x4, x3); // lower 64 bits + SD(x4, gback, gdoffset + 0); + } else { + LD(x5, wback, fixedaddress + 8); + LD(x4, wback, fixedaddress + 0); + SD(x5, gback, gdoffset + 8); + SD(x4, gback, gdoffset + 0); + } + } + break; + case 0x16: + if (rex.w) { + INST_NAME("PEXTRQ Ed, Gx, Ib"); + } else { + INST_NAME("PEXTRD Ed, Gx, Ib"); + } + nextop = F8; + GETGX(); + GETED(1); + u8 = F8; + if (rex.w) + LD(ed, gback, gdoffset + 8 * (u8 & 1)); + else + LWU(ed, gback, gdoffset + 4 * (u8 & 3)); + if (wback) { + SDxw(ed, wback, fixedaddress); + SMWRITE2(); + } + break; + case 0x17: + INST_NAME("EXTRACTPS Ew, Gx, Ib"); + nextop = F8; + GETGX(); + GETED(1); + u8 = F8; + LWU(ed, gback, gdoffset + 4 * (u8 & 3)); + if (wback) { + SW(ed, wback, fixedaddress); + SMWRITE2(); + } + break; + case 0x20: + INST_NAME("PINSRB Gx, ED, Ib"); + nextop = F8; + GETGX(); + GETED(1); + u8 = F8; + SB(ed, gback, gdoffset + (u8 & 0xF)); + break; + case 0x21: + INST_NAME("INSERTPS GX, EX, Ib"); + nextop = F8; + GETGX(); + GETEX(x2, 1, 12); + u8 = F8; + if (MODREG) + s8 = (u8 >> 6) & 3; + else + s8 = 0; + // GX->ud[(tmp8u>>4)&3] = EX->ud[tmp8s]; + LWU(x3, wback, fixedaddress + 4 * s8); + SW(x3, gback, gdoffset + 4 * (u8 >> 4)); + for (int i = 0; i < 4; ++i) { + if (u8 & (1 << i)) + // GX->ud[i] = 0; + SW(xZR, gback, gdoffset + 4 * i); + } + break; + case 0x22: + INST_NAME("PINSRD Gx, ED, Ib"); + nextop = F8; + GETGX(); + GETED(1); + u8 = F8; + if (rex.w) { + SD(ed, gback, gdoffset + 8 * (u8 & 0x1)); + } else { + SW(ed, gback, gdoffset + 4 * (u8 & 0x3)); + } + break; + case 0x40: + INST_NAME("DPPS Gx, Ex, Ib"); + nextop = F8; + GETGX(); + GETEX(x2, 1, 12); + u8 = F8; + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + d2 = fpu_get_scratch(dyn); + FMVWX(d2, xZR); + for (int i = 0; i < 4; ++i) + if (u8 & (1 << (i + 4))) { + FLW(d0, gback, gdoffset + i * 4); + FLW(d1, wback, fixedaddress + i * 4); + FMULS(d0, d0, d1); + FADDS(d2, d2, d0); + } + for (int i = 0; i < 4; ++i) + if (u8 & (1 << i)) + FSW(d2, gback, gdoffset + i * 4); + else + SW(xZR, gback, gdoffset + i * 4); + break; + case 0x44: + INST_NAME("PCLMULQDQ Gx, Ex, Ib"); + nextop = F8; + GETG; + sse_forget_reg(dyn, ninst, x6, gd); + MOV32w(x1, gd); // gx + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + sse_forget_reg(dyn, ninst, x6, ed); + MOV32w(x2, ed); + MOV32w(x3, 0); // p = NULL + } else { + MOV32w(x2, 0); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x5, &fixedaddress, rex, NULL, 0, 1); + if (ed != x3) { + MV(x3, ed); + } + } + u8 = F8; + MOV32w(x4, u8); + CALL(native_pclmul, -1); + break; + case 0x63: + INST_NAME("PCMPISTRI Gx, Ex, Ib"); + SETFLAGS(X_ALL, SF_SET_DF); + nextop = F8; + GETG; + sse_reflect_reg(dyn, ninst, x6, gd); + ADDI(x2, xEmu, offsetof(x64emu_t, xmm[gd])); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + sse_reflect_reg(dyn, ninst, x6, ed); + ADDI(x1, xEmu, offsetof(x64emu_t, xmm[ed])); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 0, 1); + if (ed != x1) MV(x1, ed); + } + u8 = F8; + MOV32w(x3, u8); + CALL(sse42_compare_string_implicit_len, x1); + ZEROUP(x1); + BNEZ_MARK(x1); + MOV32w(xRCX, (u8 & 1) ? 8 : 16); + B_NEXT_nocond; + MARK; + if (u8 & 0b1000000) { + CLZxw(xRCX, x1, 0, x2, x3, x4); + ADDI(x2, xZR, 31); + SUB(xRCX, x2, xRCX); + } else { + CTZxw(xRCX, x1, 0, x2, x3); + } + break; + case 0xDF: + INST_NAME("AESKEYGENASSIST Gx, Ex, Ib"); // AES-NI + nextop = F8; + GETG; + sse_forget_reg(dyn, ninst, x6, gd); + MOV32w(x1, gd); // gx + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + sse_forget_reg(dyn, ninst, x6, ed); + MOV32w(x2, ed); + MOV32w(x3, 0); // p = NULL + } else { + MOV32w(x2, 0); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, 1); + if (ed != x3) { + MV(x3, ed); + } + } + u8 = F8; + MOV32w(x4, u8); + CALL(native_aeskeygenassist, -1); + break; + default: + DEFAULT; + } + break; + default: + DEFAULT; + } + return addr; +} diff --git a/src/dynarec/rv64/dynarec_rv64_660f_vector.c b/src/dynarec/rv64/dynarec_rv64_660f_vector.c index df823f23587a1a79df1150baa34114c803db7f4e..bbfc3c7236c625542be41d90a64c0a5150d3bfb0 100644 --- a/src/dynarec/rv64/dynarec_rv64_660f_vector.c +++ b/src/dynarec/rv64/dynarec_rv64_660f_vector.c @@ -35,7 +35,9 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i int v0, v1; int q0, q1; int d0, d1, d2; + uint64_t tmp64u0, tmp64u1; int64_t fixedaddress, gdoffset; + uint32_t vtypei; int unscaled; MAYUSE(d0); MAYUSE(d1); @@ -45,63 +47,311 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i MAYUSE(eb2); MAYUSE(j64); switch (opcode) { + case 0x10: + INST_NAME("MOVUPD Gx, Ex"); + nextop = F8; + GETG; + if (MODREG) { + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, dyn->vector_eew); + v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); + VMV_V_V(v0, v1); + } else { + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); // unaligned! + SMREAD(); + v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VLE8_V(v0, ed, VECTOR_UNMASKED, VECTOR_NFIELD1); + } + break; + case 0x11: + INST_NAME("MOVUPD Ex, Gx"); + nextop = F8; + GETG; + if (MODREG) { + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + v0 = sse_get_reg_vector(dyn, ninst, x1, gd, 0, dyn->vector_eew); + v1 = sse_get_reg_empty_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3)); + VMV_V_V(v1, v0); + } else { + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); // unaligned! + v0 = sse_get_reg_vector(dyn, ninst, x1, gd, 0, dyn->vector_eew); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VSE8_V(v0, ed, VECTOR_UNMASKED, VECTOR_NFIELD1); + SMWRITE2(); + } + break; + case 0x12: + INST_NAME("MOVLPD Gx, Eq"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(v0, 1, VECTOR_SEW64); + if (MODREG) { + // access register instead of memory is bad opcode! + DEFAULT; + return addr; + } + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + if (rv64_xtheadvector) { + v1 = fpu_get_scratch(dyn); + VMV_S_X(v1, x4); + VECTOR_LOAD_VMASK(0b01, x3, 1); + VMERGE_VVM(v0, v0, v1); // implies VMASK + } else { + VMV_S_X(v0, x4); + } + break; + case 0x14: + INST_NAME("UNPCKLPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + // GX->q[0] = GX->q[0]; -> unchanged + // GX->q[1] = EX->q[0]; + GETGX_vector(v0, 1, VECTOR_SEW64); + if (MODREG) { + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + if (v0 == v1) { + // for vslideup.vi, cannot be overlapped + v1 = fpu_get_scratch(dyn); + VMV_V_V(v1, v0); + } + VSLIDEUP_VI(v0, v1, 1, VECTOR_UNMASKED); + } else { + q0 = fpu_get_scratch(dyn); + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + VECTOR_LOAD_VMASK(0b10, x1, 1); + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, 0); + VLUXEI64_V(v0, q0, ed, VECTOR_MASKED, VECTOR_NFIELD1); + } + break; + case 0x15: + INST_NAME("UNPCKHPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + // GX->q[0] = GX->q[1]; + // GX->q[1] = EX->q[1]; + GETGX_vector(v0, 1, VECTOR_SEW64); + if (MODREG) { + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + q0 = fpu_get_scratch(dyn); + VSLIDE1DOWN_VX(q0, v0, xZR, VECTOR_UNMASKED); + if (rv64_xtheadvector) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v0, v1, q0); // implies VMASK + } else { + if (v0 != v1) { VMV_V_V(v0, v1); } + VMV_X_S(x4, q0); + VMV_S_X(v0, x4); + } + } else { + q0 = fpu_get_scratch(dyn); + VECTOR_LOAD_VMASK(0b10, x1, 1); + VSLIDE1DOWN_VX(v0, v0, xZR, VECTOR_UNMASKED); + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, 0); + VLE64_V(v0, ed, VECTOR_MASKED, VECTOR_NFIELD1); + } + break; + case 0x16: + INST_NAME("MOVHPD Gx, Eq"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(v0, 1, VECTOR_SEW64); + if (MODREG) { + // access register instead of memory is bad opcode! + DEFAULT; + return addr; + } + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, 0); + LD(x4, ed, fixedaddress); + d0 = fpu_get_scratch(dyn); + VMV_X_S(x5, v0); + VMV_S_X(d0, x4); + VSLIDE1UP_VX(v0, d0, x5, VECTOR_UNMASKED); + break; case 0x1F: return 0; case 0x28: INST_NAME("MOVAPD Gx, Ex"); nextop = F8; GETG; - SET_ELEMENT_WIDTH(x1, VECTOR_SEW8); + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); if (MODREG) { ed = (nextop & 7) + (rex.b << 3); - v1 = sse_get_reg_vector(dyn, ninst, x1, ed, 0, VECTOR_SEW8); + v1 = sse_get_reg_vector(dyn, ninst, x1, ed, 0, dyn->vector_eew); v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); VMV_V_V(v0, v1); } else { SMREAD(); v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); - VLE8_V(v0, ed, VECTOR_UNMASKED, VECTOR_NFIELD1); + VLE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + } + break; + case 0x29: + INST_NAME("MOVAPD Ex, Gx"); + nextop = F8; + GETG; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + v0 = sse_get_reg_vector(dyn, ninst, x1, gd, 0, dyn->vector_eew); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + v1 = sse_get_reg_empty_vector(dyn, ninst, x1, ed); + VMV_V_V(v1, v0); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VSE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + SMWRITE2(); + } + break; + case 0x2B: + INST_NAME("MOVNTPD Ex, Gx"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETGX_vector(v0, 0, dyn->vector_eew); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + v1 = sse_get_reg_empty_vector(dyn, ninst, x1, ed); + VMV_V_V(v1, v0); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VSE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + SMWRITE2(); } break; + case 0x2E: + case 0x2F: + return 0; case 0x38: // SSSE3 opcodes nextop = F8; switch (nextop) { case 0x00: INST_NAME("PSHUFB Gx, Ex"); nextop = F8; - SET_ELEMENT_WIDTH(x1, VECTOR_SEW8); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); GETGX_vector(q0, 1, VECTOR_SEW8); GETEX_vector(q1, 0, 0, VECTOR_SEW8); v0 = fpu_get_scratch(dyn); v1 = fpu_get_scratch(dyn); ADDI(x4, xZR, 0b000010001111); VMV_V_X(v0, x4); // broadcast the mask - VAND_VV(v0, v0, q1, VECTOR_UNMASKED); - VRGATHER_VV(v1, v0, q0, VECTOR_UNMASKED); // registers cannot be overlapped!! + VAND_VV(v0, q1, v0, VECTOR_UNMASKED); + VRGATHER_VV(v1, q0, v0, VECTOR_UNMASKED); // registers cannot be overlapped!! VMV_V_V(q0, v1); break; - case 0x01 ... 0x07: - // pairwise opcodes are complicated, fallback to scalar. - return 0; - case 0x08 ... 0x0a: + case 0x01: + INST_NAME("PHADDW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VMV_V_V(v0, q0); + if (q1 & 1) VMV_V_V(d1, q1); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL2, 2); + VSLIDEUP_VI(v0, (q1 & 1) ? d1 : q1, 8, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 1); + VNSRL_WI(d0, v0, 0, VECTOR_UNMASKED); + VNSRL_WI(d1, v0, 16, VECTOR_UNMASKED); + VADD_VV(q0, d1, d0, VECTOR_UNMASKED); + break; + case 0x02: + INST_NAME("PHADDD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VMV_V_V(v0, q0); + if (q1 & 1) VMV_V_V(d1, q1); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL2, 2); + VSLIDEUP_VI(v0, (q1 & 1) ? d1 : q1, 4, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 1); + ADDI(x4, xZR, 32); + VNSRL_WX(d0, v0, xZR, VECTOR_UNMASKED); + VNSRL_WX(d1, v0, x4, VECTOR_UNMASKED); + VADD_VV(q0, d1, d0, VECTOR_UNMASKED); + break; + case 0x03: + INST_NAME("PHADDSW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VMV_V_V(v0, q0); + if (q1 & 1) VMV_V_V(d1, q1); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL2, 2); + VSLIDEUP_VI(v0, (q1 & 1) ? d1 : q1, 8, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 1); + VNSRL_WI(d0, v0, 0, VECTOR_UNMASKED); + VNSRL_WI(d1, v0, 16, VECTOR_UNMASKED); + VSADD_VV(q0, d1, d0, VECTOR_UNMASKED); + break; + case 0x04: + INST_NAME("PMADDUBSW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETGX_vector(q0, 1, VECTOR_SEW8); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); // no more scratches! + VWMULSU_VV(v0, q1, q0, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL2, 2); + VECTOR_LOAD_VMASK(0b0101010101010101, x4, 2); + VCOMPRESS_VM(d0, v0, VMASK); + VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); + VCOMPRESS_VM(d1, v0, VMASK); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + VSADD_VV(q0, d1, d0, VECTOR_UNMASKED); + break; + case 0x05: + INST_NAME("PHSUBW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VMV_V_V(v0, q0); + if (q1 & 1) VMV_V_V(d1, q1); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL2, 2); + VSLIDEUP_VI(v0, (q1 & 1) ? d1 : q1, 8, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 1); + VNSRL_WI(d0, v0, 0, VECTOR_UNMASKED); + VNSRL_WI(d1, v0, 16, VECTOR_UNMASKED); + VSUB_VV(q0, d0, d1, VECTOR_UNMASKED); + break; + case 0x08 ... 0x0A: if (nextop == 0x08) { INST_NAME("PSIGNB Gx, Ex"); - SET_ELEMENT_WIDTH(x1, VECTOR_SEW8); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); i32 = 7; nextop = F8; GETGX_vector(q0, 1, VECTOR_SEW8); GETEX_vector(q1, 0, 0, VECTOR_SEW8); } else if (nextop == 0x09) { INST_NAME("PSIGNW Gx, Ex"); - SET_ELEMENT_WIDTH(x1, VECTOR_SEW16); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); i32 = 15; nextop = F8; GETGX_vector(q0, 1, VECTOR_SEW16); GETEX_vector(q1, 0, 0, VECTOR_SEW16); } else { INST_NAME("PSIGND Gx, Ex"); - SET_ELEMENT_WIDTH(x1, VECTOR_SEW32); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); i32 = 31; nextop = F8; GETGX_vector(q0, 1, VECTOR_SEW32); @@ -110,53 +360,1891 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i v0 = fpu_get_scratch(dyn); v1 = fpu_get_scratch(dyn); // absolute - VSRA_VI(v0, i32, q1, VECTOR_UNMASKED); - VXOR_VV(v1, v0, q0, VECTOR_UNMASKED); - VSUB_VV(v1, v0, v1, VECTOR_UNMASKED); + VSRA_VI(v0, q1, i32, VECTOR_UNMASKED); + VXOR_VV(v1, q0, v0, VECTOR_UNMASKED); + VSUB_VV(v1, v1, v0, VECTOR_UNMASKED); // handle zeroing - VMSEQ_VI(VECTOR_MASKREG, 0, q1, VECTOR_UNMASKED); + VMSEQ_VI(VMASK, q1, 0, VECTOR_UNMASKED); VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); - VADC_VIM(v0, 0x1f, v0); // implies VECTOR_MASKREG - VAND_VV(q0, v1, v0, VECTOR_UNMASKED); + VADC_VIM(v0, v0, 0x1f); // implies VMASK + VAND_VV(q0, v0, v1, VECTOR_UNMASKED); + break; + case 0x0B: + INST_NAME("PMULHRSW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + fpu_get_scratch(dyn); + VWMUL_VV(v0, q1, q0, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL2, 2); + VSRL_VI(v0, v0, 14, VECTOR_UNMASKED); + VADD_VI(v0, v0, 1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 1); + VNSRL_WI(q0, v0, 1, VECTOR_UNMASKED); + break; + case 0x14: + INST_NAME("PBLENDVPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + v0 = sse_get_reg_vector(dyn, ninst, x4, 0, 0, VECTOR_SEW32); + VMSLT_VX(VMASK, v0, xZR, VECTOR_UNMASKED); + VADD_VX(q0, q1, xZR, VECTOR_MASKED); + break; + case 0x17: + INST_NAME("PTEST Gx, Ex"); + nextop = F8; + SETFLAGS(X_ALL, SF_SET); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 0, VECTOR_SEW64); + GETEX_vector(q1, 0, 0, VECTOR_SEW64); + CLEAR_FLAGS(); + SET_DFNONE(); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + IFX (X_ZF) { + VAND_VV(v0, q1, q0, VECTOR_UNMASKED); + if (rv64_xtheadvector) { + // Force the mask element width to 32 + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL2, 1); + } + VMSGTU_VX(VMASK, v0, xZR, VECTOR_UNMASKED); + if (rv64_xtheadvector) { + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); + } + VMV_X_S(x4, VMASK); + if (!rv64_xtheadvector) ANDI(x4, x4, 0b11); + BNEZ(x4, 8); + ORI(xFlags, xFlags, 1 << F_ZF); + } + IFX (X_CF) { + VXOR_VI(v0, q0, 0x1F, VECTOR_UNMASKED); + VAND_VV(v0, q1, v0, VECTOR_UNMASKED); + if (rv64_xtheadvector) { + // Force the mask element width to 32 + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL2, 1); + } + VMSGTU_VX(VMASK, v0, xZR, VECTOR_UNMASKED); + if (rv64_xtheadvector) { + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); + } + VMV_X_S(x4, VMASK); + if (!rv64_xtheadvector) ANDI(x4, x4, 0b11); + BNEZ(x4, 8); + ORI(xFlags, xFlags, 1 << F_ZF); + } + break; + case 0x1C ... 0x1E: + if (nextop == 0x1C) { + INST_NAME("PABSB Gx, Ex"); + u8 = VECTOR_SEW8; + } else if (nextop == 0x1D) { + INST_NAME("PABSW Gx, Ex"); + u8 = VECTOR_SEW16; + } else { + INST_NAME("PABSD Gx, Ex"); + u8 = VECTOR_SEW32; + } + nextop = F8; + SET_ELEMENT_WIDTH(x1, u8, 1); + GETEX_vector(q1, 0, 0, u8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch(dyn); + VSRA_VI(v0, q1, 0x1F, VECTOR_UNMASKED); + VXOR_VV(q0, v0, q1, VECTOR_UNMASKED); + VSUB_VV(q0, q0, v0, VECTOR_UNMASKED); + break; + case 0x20: + INST_NAME("PMOVSXBW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 0.5); + VWADD_VX(v0, q1, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + VMV_V_V(q0, v0); + break; + case 0x21: + INST_NAME("PMOVSXBD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 0.25); + VWADD_VX(v0, q1, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 0.5); + VWADD_VX(v1, v0, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + VMV_V_V(q0, v1); + break; + case 0x22: + INST_NAME("PMOVSXBQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 0.125); + VWADD_VX(v0, q1, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 0.25); + VWADD_VX(v1, v0, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + VWADD_VX(v0, v1, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + VMV_V_V(q0, v0); + break; + case 0x23: + INST_NAME("PMOVSXWD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 0.5); + VWADD_VX(v0, q1, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + VMV_V_V(q0, v0); + break; + case 0x24: + INST_NAME("PMOVSXWQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 0.25); + VWADD_VX(v0, q1, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + VWADD_VX(v1, v0, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + VMV_V_V(q0, v1); + break; + case 0x25: + INST_NAME("PMOVSXDQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + VWADD_VX(v0, q1, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + VMV_V_V(q0, v0); + break; + case 0x28: + INST_NAME("PMULDQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 0, VECTOR_SEW64); + GETEX_vector(q1, 0, 0, VECTOR_SEW64); + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + // make sure the alignments before vnsrl... + // v0 cannot be the same with q0 in xtheadvector for the lack of tail undisturbed + v0 = ((q0 & 1) || rv64_xtheadvector) ? fpu_get_scratch_lmul(dyn, VECTOR_LMUL2) : q0; + v1 = (q1 & 1) ? fpu_get_scratch_lmul(dyn, VECTOR_LMUL2) : q1; + if (v0 != q0) VMV_V_V(v0, q0); + if (v1 != q1) VMV_V_V(v1, q1); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + VNSRL_WX(d0, v0, xZR, VECTOR_UNMASKED); + VNSRL_WX(d1, v1, xZR, VECTOR_UNMASKED); + VWMUL_VV(v0, d1, d0, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); + if (v0 != q0) VMV_V_V(q0, v0); + break; + case 0x2B: + INST_NAME("PACKUSDW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + GETGX_vector(q0, 1, VECTOR_SEW32); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VXOR_VV(d0, d0, d0, VECTOR_UNMASKED); + d1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VMAX_VX(d0, q0, xZR, VECTOR_UNMASKED); + if (q0 != q1) VMAX_VX(d1, q1, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 0.5); + VNCLIPU_WX(q0, d0, xZR, VECTOR_UNMASKED); + if (q0 != q1) VNCLIPU_WX(v0, d1, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + if (q0 == q1) VMV_V_V(v0, q0); + VSLIDEUP_VI(q0, v0, 4, VECTOR_UNMASKED); + break; + case 0x30: + INST_NAME("PMOVZXBW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 0.5); + VWADDU_VX(v0, q1, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + VMV_V_V(q0, v0); + break; + case 0x31: + INST_NAME("PMOVZXBD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 0.25); + VWADDU_VX(v0, q1, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 0.5); + VWADDU_VX(v1, v0, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + VMV_V_V(q0, v1); + break; + case 0x32: + INST_NAME("PMOVZXBQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 0.125); + VWADDU_VX(v0, q1, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 0.25); + VWADDU_VX(v1, v0, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + VWADDU_VX(v0, v1, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + VMV_V_V(q0, v0); + break; + case 0x33: + INST_NAME("PMOVZXWD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 0.5); + VWADDU_VX(v0, q1, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + VMV_V_V(q0, v0); + break; + case 0x34: + INST_NAME("PMOVZXWQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 0.25); + VWADDU_VX(v0, q1, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + VWADDU_VX(v1, v0, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + VMV_V_V(q0, v1); + break; + case 0x35: + INST_NAME("PMOVZXDQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + VWADDU_VX(v0, q1, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + VMV_V_V(q0, v0); + break; + case 0x39: + INST_NAME("PMINSD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + VMIN_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0x3A: + INST_NAME("PMINUW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + GETGX_vector(q0, 1, VECTOR_SEW16); + VMINU_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0x3B: + INST_NAME("PMINUD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + GETGX_vector(q0, 1, VECTOR_SEW32); + VMINU_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0x3D: + INST_NAME("PMAXSD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + VMAX_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0x40: + INST_NAME("PMULLD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + GETGX_vector(q0, 1, VECTOR_SEW32); + VMUL_VV(q0, q1, q0, VECTOR_UNMASKED); break; default: DEFAULT_VECTOR; } break; + case 0x3A: // these are some more SSSE3+ opcodes + opcode = F8; + switch (opcode) { + case 0x0E: + INST_NAME("PBLENDW Gx, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 1, VECTOR_SEW16); + u8 = F8; + VECTOR_LOAD_VMASK(u8, x4, 1); + VADD_VI(q0, q1, 0, VECTOR_MASKED); + break; + case 0x0F: + INST_NAME("PALIGNR Gx, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETGX_vector(q0, 1, VECTOR_SEW8); + GETEX_vector(q1, 0, 1, VECTOR_SEW8); + u8 = F8; + if (u8 > 31) { + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + } else if (u8 > 16) { + d0 = fpu_get_scratch(dyn); + if (rv64_vlen >= 256) { + // clear high bits before slidedown! + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 2); + VXOR_VV(d0, d0, d0, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 1); + } + VMV_V_V(d0, q0); + VSLIDEDOWN_VI(q0, d0, u8 - 16, VECTOR_UNMASKED); + } else if (u8 == 16) { + // nop + } else if (u8 > 0) { + v0 = fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); + VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + VSLIDEUP_VI(v0, q0, 16 - u8, VECTOR_UNMASKED); + if (rv64_vlen >= 256) { + // clear high bits before slidedown! + d0 = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 2); + VXOR_VV(d0, d0, d0, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 1); + VMV_V_V(d0, q1); + q1 = d0; + } + VSLIDEDOWN_VI(v1, q1, u8, VECTOR_UNMASKED); + VOR_VV(q0, v1, v0, VECTOR_UNMASKED); + } else { + if (q0 != q1) VMV_V_V(q0, q1); + } + break; + case 0x16: + nextop = F8; + if (rex.w) { + INST_NAME("PEXTRQ Ed, Gx, Ib"); + } else { + INST_NAME("PEXTRD Ed, Gx, Ib"); + } + SET_ELEMENT_WIDTH(x1, (rex.w ? VECTOR_SEW64 : VECTOR_SEW32), 1); + GETGX_vector(q0, 1, dyn->vector_eew); + if (MODREG) { + ed = xRAX + (nextop & 7) + (rex.b << 3); + u8 = F8; + if (u8 & (rex.w ? 1 : 3)) { + if (rv64_xtheadvector) { + ADDI(x4, xZR, (u8 & (rex.w ? 1 : 3))); + VEXT_X_V(ed, q0, x4); + } else { + d0 = fpu_get_scratch(dyn); + VSLIDEDOWN_VI(d0, q0, (u8 & (rex.w ? 1 : 3)), VECTOR_UNMASKED); + VMV_X_S(ed, d0); + if (!rex.w) ZEROUP(ed); + } + } else { + VMV_X_S(ed, q0); + if (!rv64_xtheadvector && !rex.w) ZEROUP(ed); + } + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 1); + u8 = F8; + if (u8 & (rex.w ? 1 : 3)) { + if (rv64_xtheadvector) { + ADDI(x4, xZR, (u8 & (rex.w ? 1 : 3))); + VEXT_X_V(x5, q0, x4); + } else { + d0 = fpu_get_scratch(dyn); + VSLIDEDOWN_VI(d0, q0, (u8 & (rex.w ? 1 : 3)), VECTOR_UNMASKED); + VMV_X_S(x5, d0); + } + } else { + VMV_X_S(x5, q0); + } + SDxw(x5, ed, fixedaddress); + SMWRITE2(); + } + break; + case 0x22: + INST_NAME("PINSRD Gx, Ed, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, rex.w ? VECTOR_SEW64 : VECTOR_SEW32, 1); + GETGX_vector(q0, 1, dyn->vector_eew); + if (MODREG) { + u8 = (F8) & (rex.w ? 1 : 3); + ed = xRAX + (nextop & 7) + (rex.b << 3); + } else { + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 1, 1); + u8 = (F8) & (rex.w ? 1 : 3); + LDxw(x4, ed, fixedaddress); + ed = x4; + } + VECTOR_LOAD_VMASK((1 << u8), x5, 1); + v0 = fpu_get_scratch(dyn); + VMERGE_VXM(v0, q0, ed); // uses VMASK + VMV_V_V(q0, v0); + break; + case 0x40: + INST_NAME("DPPS Gx, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 1, VECTOR_SEW32); + u8 = F8; + v0 = fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); + d0 = fpu_get_scratch(dyn); + VXOR_VV(v1, v1, v1, VECTOR_UNMASKED); + VECTOR_LOAD_VMASK((u8 >> 4), x4, 1); + VFMUL_VV(v0, q0, q1, VECTOR_MASKED); + VFREDUSUM_VS(d0, v0, v1, VECTOR_MASKED); + VMV_X_S(x4, d0); + VMV_V_X(d0, x4); + VECTOR_LOAD_VMASK((u8 & 0xf), x4, 1); + VMERGE_VVM(q0, v1, d0); + break; + case 0x63: return 0; + default: DEFAULT_VECTOR; + } + break; + case 0x40 ... 0x4F: return 0; + case 0x50: + INST_NAME("PMOVMSKD Gd, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGD; + GETEX_vector(q0, 0, 0, VECTOR_SEW64); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + ADDI(x4, xZR, 63); + VSRL_VX(v0, q0, x4, VECTOR_UNMASKED); + if (rv64_xtheadvector) { + // Force the mask element width to 32 + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL2, 1); + } + VMSNE_VX(VMASK, v0, xZR, VECTOR_UNMASKED); + if (rv64_xtheadvector) { + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); + VMV_X_S(x4, VMASK); + ANDI(gd, x4, 1); + SRLI(x4, x4, 31); + OR(gd, gd, x4); + } else { + VMV_X_S(x4, VMASK); + ANDI(gd, x4, 0b11); + } + break; + case 0x51: + INST_NAME("SQRTPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + GETEX_vector(q1, 0, 0, VECTOR_SEW64); + if (!box64_dynarec_fastnan) { + v0 = fpu_get_scratch(dyn); + VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + VMFLT_VV(VMASK, q1, v0, VECTOR_UNMASKED); + } + VFSQRT_V(q0, q1, VECTOR_UNMASKED); + if (!box64_dynarec_fastnan) { + VFSGNJN_VV(q0, q0, q0, VECTOR_MASKED); + } + break; + case 0x54: + INST_NAME("ANDPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETGX_vector(q0, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + VAND_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0x55: + INST_NAME("ANDNPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETGX_vector(q0, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + VXOR_VI(q0, q0, 0x1F, VECTOR_UNMASKED); + VAND_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0x56: + INST_NAME("ORPD Gx, Ex"); + nextop = F8; + GETG; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + if (MODREG && ((nextop & 7) + (rex.b << 3) == gd)) { + // special case for XORPD Gx, Gx + q0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); + VOR_VV(q0, q0, q0, VECTOR_UNMASKED); + } else { + GETGX_vector(q0, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + VOR_VV(q0, q1, q0, VECTOR_UNMASKED); + } + break; + case 0x57: + INST_NAME("XORPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETGX_vector(q0, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + VXOR_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0x58: + INST_NAME("ADDPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + GETEX_vector(q1, 0, 0, VECTOR_SEW64); + if (!box64_dynarec_fastnan) { + v0 = fpu_get_scratch(dyn); + VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); + VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); + } + VFADD_VV(q0, q0, q1, VECTOR_UNMASKED); + if (!box64_dynarec_fastnan) { + VMAND_MM(VMASK, v0, VMASK); + VMFEQ_VV(v0, q0, q0, VECTOR_UNMASKED); + VXOR_VI(v0, v0, 0x1F, VECTOR_UNMASKED); + VMAND_MM(VMASK, v0, VMASK); + VFSGNJN_VV(q0, q0, q0, VECTOR_MASKED); + } + break; + case 0x59: + INST_NAME("MULPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + GETEX_vector(q1, 0, 0, VECTOR_SEW64); + if (!box64_dynarec_fastnan) { + v0 = fpu_get_scratch(dyn); + VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); + VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); + } + VFMUL_VV(q0, q0, q1, VECTOR_UNMASKED); + if (!box64_dynarec_fastnan) { + VMAND_MM(VMASK, v0, VMASK); + VMFEQ_VV(v0, q0, q0, VECTOR_UNMASKED); + VXOR_VI(v0, v0, 0x1F, VECTOR_UNMASKED); + VMAND_MM(VMASK, v0, VMASK); + VFSGNJN_VV(q0, q0, q0, VECTOR_MASKED); + } + break; + case 0x5A: + INST_NAME("CVTPD2PS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETEX_vector(v1, 0, 0, VECTOR_SEW64); + GETGX_empty_vector(v0); + if (v1 & 1) { + d1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VMV_V_V(d1, v1); + } else { + d1 = v1; + } + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VFNCVT_F_F_W(d0, d1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); + if (!rv64_xtheadvector) VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + VMV_X_S(x4, d0); + VMV_S_X(v0, x4); + break; + case 0x5B: + if (!box64_dynarec_fastround) return 0; + INST_NAME("CVTPS2DQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(v1, 0, 0, VECTOR_SEW32); + GETGX_empty_vector(v0); + u8 = sse_setround(dyn, ninst, x6, x4); + VFCVT_X_F_V(v0, v1, VECTOR_UNMASKED); + x87_restoreround(dyn, ninst, u8); + break; + case 0x5C: + INST_NAME("SUBPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + GETEX_vector(q1, 0, 0, VECTOR_SEW64); + if (!box64_dynarec_fastnan) { + v0 = fpu_get_scratch(dyn); + VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); + VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); + } + VFSUB_VV(q0, q0, q1, VECTOR_UNMASKED); + if (!box64_dynarec_fastnan) { + VMAND_MM(VMASK, v0, VMASK); + VMFEQ_VV(v0, q0, q0, VECTOR_UNMASKED); + VXOR_VI(v0, v0, 0x1F, VECTOR_UNMASKED); + VMAND_MM(VMASK, v0, VMASK); + VFSGNJN_VV(q0, q0, q0, VECTOR_MASKED); + } + break; + case 0x5D: + INST_NAME("MINPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + GETEX_vector(q1, 0, 0, VECTOR_SEW64); + v0 = fpu_get_scratch(dyn); + if (!box64_dynarec_fastnan) { + VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); + VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); + } + VFMIN_VV(q0, q0, q1, VECTOR_UNMASKED); + if (!box64_dynarec_fastnan) { + VMAND_MM(VMASK, v0, VMASK); + VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); + VADD_VX(q0, q1, xZR, VECTOR_MASKED); + } + break; + case 0x5E: + INST_NAME("DIVPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + GETEX_vector(q1, 0, 0, VECTOR_SEW64); + if (!box64_dynarec_fastnan) { + v0 = fpu_get_scratch(dyn); + VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); + VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); + } + VFDIV_VV(q0, q0, q1, VECTOR_UNMASKED); + if (!box64_dynarec_fastnan) { + VMAND_MM(VMASK, v0, VMASK); + VMFEQ_VV(v0, q0, q0, VECTOR_UNMASKED); + VXOR_VI(v0, v0, 0x1F, VECTOR_UNMASKED); + VMAND_MM(VMASK, v0, VMASK); + VFSGNJN_VV(q0, q0, q0, VECTOR_MASKED); + } + break; + case 0x5F: + INST_NAME("MAXPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + GETEX_vector(q1, 0, 0, VECTOR_SEW64); + v0 = fpu_get_scratch(dyn); + if (!box64_dynarec_fastnan) { + VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); + VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); + } + VFMAX_VV(q0, q0, q1, VECTOR_UNMASKED); + if (!box64_dynarec_fastnan) { + VMAND_MM(VMASK, v0, VMASK); + VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); + VADD_VX(q0, q1, xZR, VECTOR_MASKED); + } + break; + case 0x60: + INST_NAME("PUNPCKLBW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + VECTOR_LOAD_VMASK(0b1010101010101010, x1, 1); + v0 = fpu_get_scratch(dyn); + VIOTA_M(v0, VMASK, VECTOR_UNMASKED); // v0 = 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0 + GETGX_vector(q0, 1, VECTOR_SEW8); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + VRGATHER_VV(d0, q0, v0, VECTOR_UNMASKED); + VRGATHER_VV(d1, q1, v0, VECTOR_UNMASKED); + VMERGE_VVM(q0, d0, d1); + break; + case 0x61: + INST_NAME("PUNPCKLWD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + VECTOR_LOAD_VMASK(0b10101010, x1, 1); + v0 = fpu_get_scratch(dyn); + VIOTA_M(v0, VMASK, VECTOR_UNMASKED); // v0 = 3 3 2 2 1 1 0 0 + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + VRGATHER_VV(d0, q0, v0, VECTOR_UNMASKED); + VRGATHER_VV(d1, q1, v0, VECTOR_UNMASKED); + VMERGE_VVM(q0, d0, d1); + break; + case 0x62: + INST_NAME("PUNPCKLDQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + VECTOR_LOAD_VMASK(0b1010, x1, 1); + v0 = fpu_get_scratch(dyn); + VIOTA_M(v0, VMASK, VECTOR_UNMASKED); // v0 = 1 1 0 0 + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + VRGATHER_VV(d0, q0, v0, VECTOR_UNMASKED); + VRGATHER_VV(d1, q1, v0, VECTOR_UNMASKED); + VMERGE_VVM(q0, d0, d1); + break; + case 0x63: + INST_NAME("PACKSSWB Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d1 = fpu_get_scratch(dyn); + if (rv64_vlen >= 256) { + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 2); // double the vl for slideup. + VMV_V_V(d0, q0); + VSLIDEUP_VI(d0, q1, 8, VECTOR_UNMASKED); // splice q0 and q1 here! + } else { + VMV_V_V(d0, q0); + VMV_V_V(d1, q1); + } + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + VNCLIP_WI(q0, d0, 0, VECTOR_UNMASKED); + break; + case 0x64 ... 0x66: + if (opcode == 0x64) { + INST_NAME("PCMPGTB Gx, Ex"); + u8 = VECTOR_SEW8; + } else if (opcode == 0x65) { + INST_NAME("PCMPGTW Gx, Ex"); + u8 = VECTOR_SEW16; + } else { + INST_NAME("PCMPGTD Gx, Ex"); + u8 = VECTOR_SEW32; + } + nextop = F8; + SET_ELEMENT_WIDTH(x1, u8, 1); + GETGX_vector(q0, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + VMSLT_VV(VMASK, q1, q0, VECTOR_UNMASKED); + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + VMERGE_VIM(q0, q0, 1); // implies vmask and widened it + VRSUB_VX(q0, q0, xZR, VECTOR_UNMASKED); + break; + case 0x67: + INST_NAME("PACKUSWB Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d1 = fpu_get_scratch(dyn); + if (rv64_vlen >= 256) { + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 2); // double the vl for slideup. + if (q0 == q1) { + VMV_V_V(d0, q0); + VSLIDEUP_VI(d0, q1, 8, VECTOR_UNMASKED); // splice q0 and q1 here! + VMAX_VX(d0, d0, xZR, VECTOR_UNMASKED); + } else { + VSLIDEUP_VI(q0, q1, 8, VECTOR_UNMASKED); // splice q0 and q1 here! + VMAX_VX(d0, q0, xZR, VECTOR_UNMASKED); + } + } else { + VMAX_VX(d0, q0, xZR, VECTOR_UNMASKED); + VMAX_VX(d1, q1, xZR, VECTOR_UNMASKED); + } + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + VNCLIPU_WI(q0, d0, 0, VECTOR_UNMASKED); + break; + case 0x68 ... 0x6A: + if (opcode == 0x68) { + INST_NAME("PUNPCKHBW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + VECTOR_LOAD_VMASK(0b1010101010101010, x1, 1); + v0 = fpu_get_scratch(dyn); + VIOTA_M(v0, VMASK, VECTOR_UNMASKED); + VADD_VI(v0, v0, 8, VECTOR_UNMASKED); // v0 = 15 15 14 14 13 13 12 12 11 11 10 10 9 9 8 8 + } else if (opcode == 0x69) { + INST_NAME("PUNPCKHWD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + VECTOR_LOAD_VMASK(0b10101010, x1, 1); + v0 = fpu_get_scratch(dyn); + VIOTA_M(v0, VMASK, VECTOR_UNMASKED); + VADD_VI(v0, v0, 4, VECTOR_UNMASKED); // v0 = 7 7 6 6 5 5 4 4 + } else { + INST_NAME("PUNPCKHDQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + VECTOR_LOAD_VMASK(0b1010, x1, 1); + v0 = fpu_get_scratch(dyn); + VIOTA_M(v0, VMASK, VECTOR_UNMASKED); + VADD_VI(v0, v0, 2, VECTOR_UNMASKED); // v0 = 3 3 2 2 + } + GETGX_vector(q0, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + VRGATHER_VV(d0, q0, v0, VECTOR_UNMASKED); + VRGATHER_VV(d1, q1, v0, VECTOR_UNMASKED); + VMERGE_VVM(q0, d0, d1); + break; + case 0x6B: + INST_NAME("PACKSSDW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d1 = fpu_get_scratch(dyn); + if (rv64_vlen >= 256) { + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 2); // double the vl for slideup. + VMV_V_V(d0, q0); + VSLIDEUP_VI(d0, q1, 4, VECTOR_UNMASKED); // splice q0 and q1 here! + } else { + VMV_V_V(d0, q0); + VMV_V_V(d1, q1); + } + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + VNCLIP_WI(q0, d0, 0, VECTOR_UNMASKED); + break; + case 0x6C: + INST_NAME("PUNPCKLQDQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + // GX->q[0] = GX->q[0]; -> unchanged + // GX->q[1] = EX->q[0]; + GETGX_vector(v0, 1, VECTOR_SEW64); + if (MODREG) { + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + if (v0 == v1) { + // for vslideup.vi, cannot be overlapped + v1 = fpu_get_scratch(dyn); + VMV_V_V(v1, v0); + } + VSLIDEUP_VI(v0, v1, 1, VECTOR_UNMASKED); + } else { + q0 = fpu_get_scratch(dyn); + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + VECTOR_LOAD_VMASK(0b10, x1, 1); + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, 0); + VLUXEI64_V(v0, q0, ed, VECTOR_MASKED, VECTOR_NFIELD1); + } + break; + case 0x6D: + INST_NAME("PUNPCKHQDQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + // GX->q[0] = GX->q[1]; + // GX->q[1] = EX->q[1]; + GETGX_vector(v0, 1, VECTOR_SEW64); + if (MODREG) { + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + q0 = fpu_get_scratch(dyn); + VSLIDE1DOWN_VX(q0, v0, xZR, VECTOR_UNMASKED); + if (rv64_xtheadvector) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v0, v1, q0); // implies VMASK + } else { + if (v0 != v1) { VMV_V_V(v0, v1); } + VMV_X_S(x4, q0); + VMV_S_X(v0, x4); + } + } else { + q0 = fpu_get_scratch(dyn); + VECTOR_LOAD_VMASK(0b10, x1, 1); + VSLIDE1DOWN_VX(v0, v0, xZR, VECTOR_UNMASKED); + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, 0); + VLE64_V(v0, ed, VECTOR_MASKED, VECTOR_NFIELD1); + } + break; case 0x6E: - return 0; + INST_NAME("MOVD Gx, Ed"); + nextop = F8; + GETGX_empty_vector(v0); + GETED(0); + if (rex.w) { + SET_ELEMENT_WIDTH(x3, VECTOR_SEW64, 1); + } else { + SET_ELEMENT_WIDTH(x3, VECTOR_SEW32, 1); + } + VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + VECTOR_LOAD_VMASK(1, x4, 1); + VMERGE_VXM(v0, v0, ed); + break; case 0x6F: INST_NAME("MOVDQA Gx, Ex"); nextop = F8; - SET_ELEMENT_WIDTH(x1, VECTOR_SEW8); + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); if (MODREG) { - v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW8); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, dyn->vector_eew); GETGX_empty_vector(v0); VMV_V_V(v0, v1); } else { GETGX_empty_vector(v0); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 0, 0); - VLE8_V(v0, ed, VECTOR_UNMASKED, VECTOR_NFIELD1); + VLE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + } + break; + case 0x70: + INST_NAME("PSHUFD Gx, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETEX_vector(q1, 0, 1, VECTOR_SEW64); + GETGX_empty_vector(q0); + v0 = fpu_get_scratch(dyn); + tmp64u0 = F8; + if (rv64_xtheadvector) { // lack of vrgatherei16.vv + v1 = fpu_get_scratch(dyn); + if (tmp64u0 == 0) { + VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + } else { + tmp64u1 = (((tmp64u0 >> 6) & 3) << 32) | ((tmp64u0 >> 4) & 3); + tmp64u0 = (((tmp64u0 >> 2) & 3) << 32) | (tmp64u0 & 3); + if (tmp64u1 == 0) { + VXOR_VV(v1, v1, v1, VECTOR_UNMASKED); + } else { + MOV64x(x4, tmp64u1); + VMV_S_X(v1, x4); // clears upper bits! + } + if (tmp64u0 == tmp64u1) { + VSLIDE1UP_VX(v0, v1, x4, VECTOR_UNMASKED); + } else if (tmp64u0 == 0) { + VSLIDE1UP_VX(v0, v1, xZR, VECTOR_UNMASKED); + } else { + MOV64x(x4, tmp64u0); + VSLIDE1UP_VX(v0, v1, x4, VECTOR_UNMASKED); + } + } + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (q0 == q1) { + VRGATHER_VV(v1, q1, v0, VECTOR_UNMASKED); + VMV_V_V(q0, v1); + } else { + VRGATHER_VV(q0, q1, v0, VECTOR_UNMASKED); + } + } else { + tmp64u0 = ((tmp64u0 >> 6) << 48) | (((tmp64u0 >> 4) & 3) << 32) | (((tmp64u0 >> 2) & 3) << 16) | (tmp64u0 & 3); + VECTOR_SPLAT_IMM(v0, tmp64u0, x4); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (q0 == q1) { + v1 = fpu_get_scratch(dyn); + VRGATHEREI16_VV(v1, q1, v0, VECTOR_UNMASKED); + VMV_V_V(q0, v1); + } else { + VRGATHEREI16_VV(q0, q1, v0, VECTOR_UNMASKED); + } + } + break; + case 0x71: + nextop = F8; + switch ((nextop >> 3) & 7) { + case 2: + INST_NAME("PSRLW Ex, Ib"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETEX_vector(q0, 1, 1, VECTOR_SEW16); + u8 = F8; + if (u8) { + if (u8 > 15) { + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + } else { + VSRL_VI(q0, q0, u8, VECTOR_UNMASKED); + } + PUTEX_vector(q0, VECTOR_SEW16); + } + break; + case 4: + INST_NAME("PSRAW Ex, Ib"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETEX_vector(q0, 1, 1, VECTOR_SEW16); + u8 = F8; + if (u8 > 15) u8 = 15; + if (u8) { + VSRA_VI(q0, q0, u8, VECTOR_UNMASKED); + } + PUTEX_vector(q0, VECTOR_SEW16); + break; + case 6: + INST_NAME("PSLLW Ex, Ib"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETEX_vector(q0, 1, 1, VECTOR_SEW16); + u8 = F8; + if (u8) { + if (u8 > 15) { + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + } else { + VSLL_VI(q0, q0, u8, VECTOR_UNMASKED); + } + PUTEX_vector(q0, VECTOR_SEW16); + } + break; + default: + DEFAULT_VECTOR; + } + break; + case 0x72: + nextop = F8; + switch ((nextop >> 3) & 7) { + case 2: + INST_NAME("PSRLD Ex, Ib"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q0, 1, 1, VECTOR_SEW32); + u8 = F8; + if (u8) { + if (u8 > 31) { + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + } else if (u8) { + VSRL_VI(q0, q0, u8, VECTOR_UNMASKED); + } + PUTEX_vector(q0, VECTOR_SEW32); + } + break; + case 4: + INST_NAME("PSRAD Ex, Ib"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q0, 1, 1, VECTOR_SEW32); + u8 = F8; + if (u8 > 31) u8 = 31; + if (u8) { + VSRA_VI(q0, q0, u8, VECTOR_UNMASKED); + } + PUTEX_vector(q0, VECTOR_SEW32); + break; + case 6: + INST_NAME("PSLLD Ex, Ib"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(q0, 1, 1, VECTOR_SEW32); + u8 = F8; + if (u8) { + if (u8 > 31) { + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + } else { + VSLL_VI(q0, q0, u8, VECTOR_UNMASKED); + } + PUTEX_vector(q0, VECTOR_SEW32); + } + break; + default: + DEFAULT_VECTOR; + } + break; + case 0x73: + nextop = F8; + switch ((nextop >> 3) & 7) { + case 2: + INST_NAME("PSRLQ Ex, Ib"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETEX_vector(q0, 1, 1, VECTOR_SEW64); + u8 = F8; + if (u8) { + if (u8 > 63) { + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + } else { + MOV64x(x4, u8); + VSRL_VX(q0, q0, x4, VECTOR_UNMASKED); + } + PUTEX_vector(q0, VECTOR_SEW64); + } + break; + case 3: + INST_NAME("PSRLDQ Ex, Ib"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q0, 1, 1, VECTOR_SEW8); + u8 = F8; + if (!u8) break; + if (u8 > 15) { + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + } else { + d0 = fpu_get_scratch(dyn); + if (rv64_vlen >= 256) { + // clear high bits before slidedown! + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 2); + VXOR_VV(d0, d0, d0, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 1); + } + VMV_V_V(d0, q0); + VSLIDEDOWN_VI(q0, d0, u8, VECTOR_UNMASKED); + } + PUTEX_vector(q0, VECTOR_SEW8); + break; + case 6: + INST_NAME("PSLLQ Ex, Ib"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETEX_vector(q0, 1, 1, VECTOR_SEW64); + u8 = F8; + if (u8) { + if (u8 > 63) { + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + } else { + MOV64x(x4, u8); + VSLL_VX(q0, q0, x4, VECTOR_UNMASKED); + } + PUTEX_vector(q0, VECTOR_SEW64); + } + break; + case 7: + INST_NAME("PSLLDQ Ex, Ib"); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETEX_vector(q0, 1, 1, VECTOR_SEW8); + u8 = F8; + if (!u8) break; + if (u8 > 15) { + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + PUTEX_vector(q0, VECTOR_SEW8); + } else { + d0 = fpu_get_scratch(dyn); + VXOR_VV(d0, d0, d0, VECTOR_UNMASKED); + VSLIDEUP_VI(d0, q0, u8, VECTOR_UNMASKED); + if (MODREG) { + VMV_V_V(q0, d0); + } else { + PUTEX_vector(d0, VECTOR_SEW8); + } + } + break; + default: DEFAULT_VECTOR; + } + break; + case 0x74 ... 0x76: + if (opcode == 0x74) { + INST_NAME("PCMPEQB Gx, Ex"); + u8 = VECTOR_SEW8; + } else if (opcode == 0x75) { + INST_NAME("PCMPEQW Gx, Ex"); + u8 = VECTOR_SEW16; + } else { + INST_NAME("PCMPEQD Gx, Ex"); + u8 = VECTOR_SEW32; + } + nextop = F8; + SET_ELEMENT_WIDTH(x1, u8, 1); + GETGX_vector(q0, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + VMSEQ_VV(VMASK, q1, q0, VECTOR_UNMASKED); + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + VMERGE_VIM(q0, q0, 1); // implies vmask and widened it + VRSUB_VX(q0, q0, xZR, VECTOR_UNMASKED); + break; + case 0x7C: + INST_NAME("HADDPD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + GETEX_vector(q1, 0, 0, VECTOR_SEW64); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + v1 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); // no more scratches! + VMV_V_V(v0, q0); + if (q1 & 1) VMV_V_V(d1, q1); + VMV_V_I(VMASK, rv64_xtheadvector ? 1 : 0b0101); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL2, 2); + VSLIDEUP_VI(v0, (q1 & 1) ? d1 : q1, 2, VECTOR_UNMASKED); + VCOMPRESS_VM(d0, v0, VMASK); + VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); + VCOMPRESS_VM(d1, v0, VMASK); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); + if (!box64_dynarec_fastnan) { + VMFEQ_VV(v0, d0, d0, VECTOR_UNMASKED); + VMFEQ_VV(v1, d1, d1, VECTOR_UNMASKED); + VMAND_MM(v0, v0, v1); + } + VFADD_VV(q0, d0, d1, VECTOR_UNMASKED); + if (!box64_dynarec_fastnan) { + VMFEQ_VV(v1, q0, q0, VECTOR_UNMASKED); + VMANDN_MM(VMASK, v0, v1); + VFSGNJN_VV(q0, q0, q0, VECTOR_MASKED); } break; case 0x7E: return 0; + case 0x7F: + INST_NAME("MOVDQA Ex, Gx"); + nextop = F8; + GETG; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + v0 = sse_get_reg_empty_vector(dyn, ninst, x1, ed); + v1 = sse_get_reg_vector(dyn, ninst, x1, gd, 0, dyn->vector_eew); + VMV_V_V(v0, v1); + } else { + SMREAD(); + v1 = sse_get_reg_vector(dyn, ninst, x1, gd, 0, dyn->vector_eew); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VSE_V(v1, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + } + break; + case 0xA3 ... 0xC1: return 0; + case 0xC2: + INST_NAME("CMPPD Gx, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(v0, 1, VECTOR_SEW64); + GETEX_vector(v1, 0, 1, VECTOR_SEW64); + u8 = F8; + if ((u8 & 7) == 0) { // Equal + VMFEQ_VV(VMASK, v0, v1, VECTOR_UNMASKED); + } else if ((u8 & 7) == 4) { // Not Equal or unordered + VMFEQ_VV(VMASK, v0, v1, VECTOR_UNMASKED); + VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); + } else { + d0 = fpu_get_scratch(dyn); + VMFEQ_VV(VMASK, v0, v0, VECTOR_UNMASKED); + VMFEQ_VV(d0, v1, v1, VECTOR_UNMASKED); + VMAND_MM(VMASK, VMASK, d0); + switch (u8 & 7) { + case 1: // Less than + VMFLT_VV(d0, v0, v1, VECTOR_UNMASKED); + VMAND_MM(VMASK, VMASK, d0); + break; + case 2: // Less or equal + VMFLE_VV(d0, v0, v1, VECTOR_UNMASKED); + VMAND_MM(VMASK, VMASK, d0); + break; + case 3: // NaN + VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); + break; + case 5: // Greater or equal or unordered + VMFLE_VV(d0, v1, v0, VECTOR_UNMASKED); + VMORN_MM(VMASK, d0, VMASK); + break; + case 6: // Greater or unordered, test inverted, N!=V so unordered or less than (inverted) + VMFLT_VV(d0, v1, v0, VECTOR_UNMASKED); + VMORN_MM(VMASK, d0, VMASK); + break; + case 7: // Not NaN + break; + } + } + VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + VXOR_VI(v0, v0, 0x1F, VECTOR_MASKED); + break; + case 0xC4: + INST_NAME("PINSRW Gx, Ed, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + if (MODREG) { + u8 = (F8) & 7; + ed = xRAX + (nextop & 7) + (rex.b << 3); + } else { + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 1, 1); + u8 = (F8) & 7; + LHU(x4, ed, fixedaddress); + ed = x4; + } + VECTOR_LOAD_VMASK((1 << u8), x5, 1); + v0 = fpu_get_scratch(dyn); + VMERGE_VXM(v0, q0, ed); // uses VMASK + VMV_V_V(q0, v0); + break; + case 0xC5: + INST_NAME("PEXTRW Gd, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGD; + if (MODREG) { + GETEX_vector(q0, 0, 1, VECTOR_SEW16); + u8 = (F8) & 7; + v0 = fpu_get_scratch(dyn); + VSLIDEDOWN_VI(v0, q0, u8, VECTOR_UNMASKED); + VMV_X_S(gd, v0); + ZEXTH(gd, gd); + } else { + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 1); + u8 = (F8) & 7; + LHU(gd, ed, u8 * 2); + } + break; + case 0xC6: + INST_NAME("SHUFPD Gx, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(v0, 1, VECTOR_SEW64); + GETEX_vector(v1, 0, 1, VECTOR_SEW64); + u8 = F8; + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + if ((u8 >> 1) & 1) { + VSLIDE1DOWN_VX(d1, v1, xZR, VECTOR_UNMASKED); + v1 = d1; + } else if (v0 == v1) { + v1 = fpu_get_scratch(dyn); + VMV_V_V(v1, v0); + } + if (u8 & 1) { + if (rv64_xtheadvector) { + ADDI(x5, xZR, 1); + VEXT_X_V(x4, v0, x5); + } else { + VSLIDE1DOWN_VX(d0, v0, xZR, VECTOR_UNMASKED); + VMV_X_S(x4, d0); + } + } else { + d0 = v0; + VMV_X_S(x4, d0); + } + VSLIDE1UP_VX(v0, v1, x4, VECTOR_UNMASKED); + break; + case 0xD1: + case 0xD2: + case 0xD3: + if (opcode == 0xD1) { + INST_NAME("PSRLW Gx, Ex"); + u8 = VECTOR_SEW16; + i32 = 16; + } else if (opcode == 0xD2) { + INST_NAME("PSRLD Gx, Ex"); + u8 = VECTOR_SEW32; + i32 = 32; + } else { + INST_NAME("PSRLQ Gx, Ex"); + u8 = VECTOR_SEW64; + i32 = 64; + } + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + if (MODREG) { + q1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + VECTOR_LOAD_VMASK(1, x1, 1); + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, 0); + q1 = fpu_get_scratch(dyn); + VLE_V(q1, ed, VECTOR_SEW64, VECTOR_MASKED, VECTOR_NFIELD1); + } + VMV_X_S(x4, q1); + ADDI(x5, xZR, i32); + SET_ELEMENT_WIDTH(x1, u8, 1); + BLTU_MARK(x4, x5); + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + B_NEXT_nocond; + MARK; + VSRL_VX(q0, q0, x4, VECTOR_UNMASKED); + break; + case 0xD4: + INST_NAME("PADDQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + GETEX_vector(q1, 0, 0, VECTOR_SEW64); + VADD_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0xD5: + INST_NAME("PMULLW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VMUL_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0xD6: + INST_NAME("MOVQ Ex, Gx"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + if (MODREG) { + q1 = sse_get_reg_empty_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3)); + VMV_X_S(x4, q0); + if (!rv64_xtheadvector) { + VXOR_VV(q1, q1, q1, VECTOR_UNMASKED); + } + VMV_S_X(q1, x4); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 1, 0); + VMV_X_S(x4, q0); + SD(x4, ed, fixedaddress); + SMWRITE2(); + } + break; + case 0xD7: + INST_NAME("PMOVMSKB Gd, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETGD; + GETEX_vector(q0, 0, 0, VECTOR_SEW8); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL8); + VSRL_VI(v0, q0, 7, VECTOR_UNMASKED); + if (rv64_xtheadvector) { + // Force the element width to 1bit + vector_vsetvli(dyn, ninst, x4, VECTOR_SEW8, VECTOR_LMUL8, 1); + } + VMSNE_VX(VMASK, v0, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + VMV_X_S(gd, VMASK); + if (!rv64_xtheadvector) { ZEXTH(gd, gd); } + break; + case 0xD8: + case 0xD9: + if (opcode == 0xD8) { + INST_NAME("PSUBUSB Gx, Ex"); + u8 = VECTOR_SEW8; + } else { + INST_NAME("PSUBUSW Gx, Ex"); + u8 = VECTOR_SEW16; + } + nextop = F8; + SET_ELEMENT_WIDTH(x1, u8, 1); + GETGX_vector(q0, 1, u8); + GETEX_vector(q1, 0, 0, u8); + VSSUBU_VV(q0, q0, q1, VECTOR_UNMASKED); + break; + case 0xDA: + INST_NAME("PMINUB Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETGX_vector(q0, 1, VECTOR_SEW8); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + VMINU_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0xDB: + INST_NAME("PAND Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETGX_vector(q0, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + VAND_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0xDC: + case 0xDD: + if (opcode == 0xDC) { + INST_NAME("PADDUSB Gx, Ex"); + u8 = VECTOR_SEW8; + } else { + INST_NAME("PADDUSW Gx, Ex"); + u8 = VECTOR_SEW16; + } + nextop = F8; + SET_ELEMENT_WIDTH(x1, u8, 1); + GETGX_vector(q0, 1, u8); + GETEX_vector(q1, 0, 0, u8); + VSADDU_VV(q0, q0, q1, VECTOR_UNMASKED); + break; + case 0xDE: + INST_NAME("PMAXUB Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETGX_vector(q0, 1, VECTOR_SEW8); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + VMAXU_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0xDF: + INST_NAME("PANDN Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETGX_vector(q0, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + VXOR_VI(q0, q0, 0x1F, VECTOR_UNMASKED); + VAND_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0xE0: + INST_NAME("PAVGB Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETGX_vector(q0, 1, VECTOR_SEW8); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + if (rv64_xtheadvector) { // lack of vaddu.vv + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VWADDU_VV(v0, q0, q1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL2, 2); + VADD_VI(v0, v0, 1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 1); + VNSRL_WI(q0, v0, 1, VECTOR_UNMASKED); + } else { + CSRRWI(xZR, 0b00 /* rnu */, 0x00A /* vxrm */); + VAADDU_VV(q0, q0, q1, VECTOR_UNMASKED); + } + break; + case 0xE1: + INST_NAME("PSRAW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + VECTOR_LOAD_VMASK(1, x1, 1); + if (MODREG) { + q1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, 0); + q1 = fpu_get_scratch(dyn); + VLE_V(q1, ed, VECTOR_SEW64, VECTOR_MASKED, VECTOR_NFIELD1); + } + v1 = fpu_get_scratch(dyn); + ADDI(x4, xZR, 15); + VMINU_VX(v1, q1, x4, VECTOR_MASKED); + VMV_X_S(x4, v1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + VSRA_VX(q0, q0, x4, VECTOR_UNMASKED); + break; + case 0xE2: + INST_NAME("PSRAD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + VECTOR_LOAD_VMASK(1, x1, 1); + if (MODREG) { + q1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, 0); + q1 = fpu_get_scratch(dyn); + VLE_V(q1, ed, VECTOR_SEW64, VECTOR_MASKED, VECTOR_NFIELD1); + } + v1 = fpu_get_scratch(dyn); + ADDI(x4, xZR, 31); + VMINU_VX(v1, q1, x4, VECTOR_MASKED); + VMV_X_S(x4, v1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + VSRA_VX(q0, q0, x4, VECTOR_UNMASKED); + break; + case 0xE3: + INST_NAME("PAVGW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + if (rv64_xtheadvector) { // lack of vaddu.vv + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VWADDU_VV(v0, q0, q1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL2, 2); + VADD_VI(v0, v0, 1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 1); + VNSRL_WI(q0, v0, 1, VECTOR_UNMASKED); + } else { + CSRRWI(xZR, 0b00 /* rnu */, 0x00A /* vxrm */); + VAADDU_VV(q0, q0, q1, VECTOR_UNMASKED); + } + break; + case 0xE4: + INST_NAME("PMULHUW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + VMULHU_VV(q0, q0, q1, VECTOR_UNMASKED); + break; + case 0xE5: + INST_NAME("PMULHW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + VMULH_VV(q0, q0, q1, VECTOR_UNMASKED); + break; + case 0xE6: + if (!box64_dynarec_fastround) return 0; + INST_NAME("CVTTPD2DQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(v1, 0, 0, VECTOR_SEW32); + GETGX_empty_vector(v0); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VMV_V_V(d0, v1); + if (rv64_xtheadvector) { + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + ADDI(x4, xZR, 1); // RTZ + FSRM(x4, x4); + VFNCVT_X_F_W(v0, d0, VECTOR_UNMASKED); + FSRM(xZR, x4); + } else { + VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + VFNCVT_RTZ_X_F_W(v0, d0, VECTOR_UNMASKED); + } + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 1); + break; + case 0xE7: + INST_NAME("MOVNTDQ Ex, Gx"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETGX_vector(v0, 0, dyn->vector_eew); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + v1 = sse_get_reg_empty_vector(dyn, ninst, x1, ed); + VMV_V_V(v1, v0); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VSE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + SMWRITE2(); + } + break; + case 0xE8: + INST_NAME("PSUBSB Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETGX_vector(q0, 1, VECTOR_SEW8); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + VSSUB_VV(q0, q0, q1, VECTOR_UNMASKED); + break; + case 0xE9: + INST_NAME("PSUBSW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + VSSUB_VV(q0, q0, q1, VECTOR_UNMASKED); + break; + case 0xEA: + INST_NAME("PMINSW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + VMIN_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0xEB: + INST_NAME("POR Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETGX_vector(q0, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + VOR_VV(q0, q1, q0, VECTOR_UNMASKED); + break; + case 0xEC: + INST_NAME("PADDSB Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETGX_vector(q0, 1, VECTOR_SEW8); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + VSADD_VV(q0, q0, q1, VECTOR_UNMASKED); + break; + case 0xED: + INST_NAME("PADDSW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + VSADD_VV(q0, q0, q1, VECTOR_UNMASKED); + break; + case 0xEE: + INST_NAME("PMAXSW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + VMAX_VV(q0, q1, q0, VECTOR_UNMASKED); + break; case 0xEF: INST_NAME("PXOR Gx, Ex"); nextop = F8; GETG; if (MODREG && gd == (nextop & 7) + (rex.b << 3)) { - SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY); + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); // special case q0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); } else { - SET_ELEMENT_WIDTH(x1, VECTOR_SEW8); - q0 = sse_get_reg_vector(dyn, ninst, x1, gd, 1, VECTOR_SEW8); - GETEX_vector(q1, 0, 0, VECTOR_SEW8); - VXOR_VV(q0, q0, q1, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + q0 = sse_get_reg_vector(dyn, ninst, x1, gd, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + VXOR_VV(q0, q1, q0, VECTOR_UNMASKED); + } + break; + case 0xF1: + case 0xF2: + case 0xF3: + if (opcode == 0xF1) { + INST_NAME("PSRLW Gx, Ex"); + u8 = VECTOR_SEW16; + i32 = 16; + } else if (opcode == 0xF2) { + INST_NAME("PSRLD Gx, Ex"); + u8 = VECTOR_SEW32; + i32 = 32; + } else { + INST_NAME("PSRLQ Gx, Ex"); + u8 = VECTOR_SEW64; + i32 = 64; + } + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETGX_vector(q0, 1, VECTOR_SEW64); + if (MODREG) { + q1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + VECTOR_LOAD_VMASK(1, x1, 1); + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, 0); + q1 = fpu_get_scratch(dyn); + VLE_V(q1, ed, VECTOR_SEW64, VECTOR_MASKED, VECTOR_NFIELD1); + } + VMV_X_S(x4, q1); + ADDI(x5, xZR, i32); + SET_ELEMENT_WIDTH(x1, u8, 1); + BLTU_MARK(x4, x5); + VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); + B_NEXT_nocond; + MARK; + VSLL_VX(q0, q0, x4, VECTOR_UNMASKED); + break; + case 0xF4: + INST_NAME("PMULUDQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(v0, 1, VECTOR_SEW32); + GETEX_vector(v1, 0, 0, VECTOR_SEW32); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d1 = fpu_get_scratch(dyn); + VWMULU_VV(d0, v0, v1, VECTOR_UNMASKED); + if (rv64_vlen >= 256) { + VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + q0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL2, 2); + VSLIDE1DOWN_VX((v0 & 1) ? q0 : v0, d0, xZR, VECTOR_UNMASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (v0 & 1) VMV_V_V(v0, q0); + VMV_X_S(x4, d0); + VMV_S_X(v0, x4); + } else { + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + VSLIDEUP_VI(d0, d1, 1, VECTOR_UNMASKED); + VMV_V_V(v0, d0); + } + break; + case 0xF5: + INST_NAME("PMADDWD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETGX_vector(q0, 1, VECTOR_SEW16); + GETEX_vector(q1, 0, 0, VECTOR_SEW16); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + v1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); // warning, no more scratches! + d1 = fpu_get_scratch(dyn); // use this at caution! + VWMUL_VV(v0, q1, q0, VECTOR_UNMASKED); + if (rv64_xtheadvector) { // lack of vrgatherei16.vv + ADDI(x4, xZR, 6); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL2, 2); + VID_V(d0, VECTOR_UNMASKED); + VSLL_VI(d0, d0, 1, VECTOR_UNMASKED); // times 2 + VMIN_VX(d0, d0, x4, VECTOR_UNMASKED); + VRGATHER_VV(v1, v0, d0, VECTOR_UNMASKED); // 6 4 2 0 + // out of scratches, go back to lmul1 and vmv.... + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 1); + VMV_V_V(d1, v1); + VADD_VI(d0, d0, 1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL2, 2); + VRGATHER_VV(v1, v0, d0, VECTOR_UNMASKED); // 7 5 3 1 + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + VADD_VV(q0, v1, d1, VECTOR_UNMASKED); + } else { + ADDI(x4, xZR, 6); + VID_V(d0, VECTOR_UNMASKED); + VSLL_VI(d0, d0, 1, VECTOR_UNMASKED); // times 2 + VMIN_VX(d0, d0, x4, VECTOR_UNMASKED); + VADD_VI(q0, d0, 1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL2, 2); + VRGATHEREI16_VV(v1, v0, d0, VECTOR_UNMASKED); // 6 4 2 0 + VRGATHEREI16_VV(d0, v0, q0, VECTOR_UNMASKED); // 7 5 3 1 + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + VADD_VV(q0, v1, d0, VECTOR_UNMASKED); + } + break; + case 0xF6: + INST_NAME("PSADBW Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); + GETGX_vector(q0, 1, VECTOR_SEW8); + GETEX_vector(q1, 0, 0, VECTOR_SEW8); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + v1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); // no more scratches! + VWSUBU_VV(v0, q0, q1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL2, 2); + VSRA_VI(v1, v0, 15, VECTOR_UNMASKED); + VXOR_VV(v0, v1, v0, VECTOR_UNMASKED); + VSUB_VV(v1, v0, v1, VECTOR_UNMASKED); + VECTOR_LOAD_VMASK(0xFF, x4, 2); + VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + VREDSUM_VS(v0, v1, v0, VECTOR_MASKED); // sum low 64 + VSLIDEDOWN_VI(d0, v1, 8, VECTOR_UNMASKED); + VXOR_VV(v1, v1, v1, VECTOR_UNMASKED); + VREDSUM_VS(v1, d0, v1, VECTOR_MASKED); // sum high 64 + VSLIDEUP_VI(v0, v1, 4, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW8, VECTOR_LMUL1, 1); + VMV_V_V(q0, v0); + break; + case 0xF8 ... 0xFB: + if (opcode == 0xF8) { + INST_NAME("PSUBB Gx, Ex"); + u8 = VECTOR_SEW8; + } else if (opcode == 0xF9) { + INST_NAME("PSUBW Gx, Ex"); + u8 = VECTOR_SEW16; + } else if (opcode == 0xFA) { + INST_NAME("PSUBD Gx, Ex"); + u8 = VECTOR_SEW32; + } else { + INST_NAME("PSUBQ Gx, Ex"); + u8 = VECTOR_SEW64; + } + nextop = F8; + SET_ELEMENT_WIDTH(x1, u8, 1); + GETGX_vector(q0, 1, u8); + GETEX_vector(q1, 0, 0, u8); + VSUB_VV(q0, q0, q1, VECTOR_UNMASKED); + break; + case 0xFC ... 0xFE: + nextop = F8; + if (opcode == 0xFC) { + INST_NAME("PADDB Gx, Ex"); + u8 = VECTOR_SEW8; + } else if (opcode == 0xFD) { + INST_NAME("PADDW Gx, Ex"); + u8 = VECTOR_SEW16; + } else { + INST_NAME("PADDD Gx, Ex"); + u8 = VECTOR_SEW32; } + SET_ELEMENT_WIDTH(x1, u8, 1); + GETGX_vector(q0, 1, dyn->vector_eew); + GETEX_vector(q1, 0, 0, dyn->vector_eew); + VADD_VV(q0, q1, q0, VECTOR_UNMASKED); break; default: DEFAULT_VECTOR; diff --git a/src/dynarec/rv64/dynarec_rv64_6664.c b/src/dynarec/rv64/dynarec_rv64_6664.c index 3acac90243c3891dd6619cefab5aad6b1960003c..a1389aba8258dd3abc3659c89a45b86c7817d098 100644 --- a/src/dynarec/rv64/dynarec_rv64_6664.c +++ b/src/dynarec/rv64/dynarec_rv64_6664.c @@ -56,7 +56,7 @@ uintptr_t dynarec64_6664(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int } else { grab_segdata(dyn, addr, ninst, x4, seg); addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); - ADD(x4, ed, x4); + ADDz(x4, ed, x4); if(rex.w) { SD(gd, x4, fixedaddress); } else { @@ -86,7 +86,7 @@ uintptr_t dynarec64_6664(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int grab_segdata(dyn, addr, ninst, x4, seg); SMREAD(); addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); - ADD(x4, ed, x4); + ADDz(x4, ed, x4); if(rex.w) { LD(gd, x4, fixedaddress); } else { diff --git a/src/dynarec/rv64/dynarec_rv64_67.c b/src/dynarec/rv64/dynarec_rv64_67.c index f1dd0549637ac0cd83da9243ac429183baa37b61..bedf6576be7195ebfe08049ab8f91c6227c86c92 100644 --- a/src/dynarec/rv64/dynarec_rv64_67.c +++ b/src/dynarec/rv64/dynarec_rv64_67.c @@ -28,7 +28,7 @@ uintptr_t dynarec64_67(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni uint8_t opcode = F8; uint8_t nextop; - uint8_t gd, ed, wback, wb, wb1, wb2, gb1, gb2, eb1, eb2; + uint8_t gd, ed, wback, wb, wb1, wb2, gb, gb1, gb2, eb1, eb2; int64_t fixedaddress; int unscaled; int8_t i8; @@ -75,9 +75,10 @@ uintptr_t dynarec64_67(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("ADD Gb, Eb"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(gb, wb, x1, ADD(gb, gb, x1)); GETEB32(x2, 0); GETGB(x1); - emit_add8(dyn, ninst, x1, x2, x3, x4); + emit_add8(dyn, ninst, x1, x2, x3, x4, x6); GBBACK(x4); break; case 0x03: @@ -109,6 +110,7 @@ uintptr_t dynarec64_67(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("OR Gb, Eb"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(gb, wb, x1, OR(gb, gb, x1)); GETEB32(x2, 0); GETGB(x1); emit_or8(dyn, ninst, x1, x2, x3, x4); @@ -268,6 +270,12 @@ uintptr_t dynarec64_67(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni READFLAGS(X_CF); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(gb, wb, x1, { + SUB(gb, gb, x1); + ANDI(x2, xFlags, 1 << F_CF); + SLLI(x2, x2, 64 - 8); + SUB(gb, gb, x2); + }); GETEB32(x2, 0); GETGB(x1); emit_sbb8(dyn, ninst, x1, x2, x3, x4, x5); @@ -339,6 +347,7 @@ uintptr_t dynarec64_67(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("SUB Gb, Eb"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(gb, wb, x1, SUB(gb, gb, x1)); GETEB32(x2, 0); GETGB(x1); emit_sub8(dyn, ninst, x1, x2, x3, x4, x5); @@ -373,6 +382,7 @@ uintptr_t dynarec64_67(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("XOR Gb, Eb"); SETFLAGS(X_ALL, SF_SET_PENDING); nextop = F8; + FAST_8BIT_OPERATION(gb, wb, x1, XOR(gb, gb, x1)); GETEB32(x2, 0); GETGB(x1); emit_xor8(dyn, ninst, x1, x2, x3, x4); @@ -688,9 +698,9 @@ uintptr_t dynarec64_67(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ed = xRAX + (nextop & 7) + (rex.b << 3); MOV64xw(ed, i64); } else { // mem <= i32 - addr = geted32(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 0); + addr = geted32(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 4); i64 = F32S; - MOV64xw(x3, i64); + MOV64x(x3, i64); SDxw(x3, ed, fixedaddress); SMWRITELOCK(lock); } @@ -753,6 +763,9 @@ uintptr_t dynarec64_67(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; #undef GO + case 0xE8: + return dynarec64_00(dyn, addr - 1, ip, ninst, rex, rep, ok, need_epilog); // addr-1, to "put back" opcode) + case 0xF7: nextop = F8; switch ((nextop >> 3) & 7) { diff --git a/src/dynarec/rv64/dynarec_rv64_67_vector.c b/src/dynarec/rv64/dynarec_rv64_67_vector.c new file mode 100644 index 0000000000000000000000000000000000000000..d82df0c955685306746b12d183e8b794ac8eeffe --- /dev/null +++ b/src/dynarec/rv64/dynarec_rv64_67_vector.c @@ -0,0 +1,116 @@ +#include +#include +#include +#include +#include + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" + +#include "rv64_printer.h" +#include "dynarec_rv64_private.h" +#include "dynarec_rv64_helper.h" +#include "dynarec_rv64_functions.h" + +uintptr_t dynarec64_67_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog) +{ + (void)ip; + (void)need_epilog; + + uint8_t opcode = F8; + uint8_t nextop; + uint8_t gd, ed, wback, wb, wb1, wb2, gb, gb1, gb2, eb1, eb2; + int64_t fixedaddress; + int unscaled; + int8_t i8; + uint8_t u8; + int32_t i32; + int64_t j64, i64; + int cacheupd = 0; + int lock; + int v0, v1, s0; + MAYUSE(i32); + MAYUSE(j64); + MAYUSE(v0); + MAYUSE(v1); + MAYUSE(s0); + MAYUSE(lock); + MAYUSE(cacheupd); + + if (rex.is32bits) { + // should do a different file + DEFAULT; + return addr; + } + + GETREX(); + + rep = 0; + while ((opcode == 0xF2) || (opcode == 0xF3)) { + rep = opcode - 0xF1; + opcode = F8; + } + + switch (opcode) { + case 0x0F: + opcode = F8; + switch (opcode) { + case 0x11: + DEFAULT_VECTOR; + case 0x2E: + case 0x2F: + DEFAULT_VECTOR; + case 0x6F: + switch (rep) { + case 2: + DEFAULT_VECTOR; + default: return 0; + } + break; + case 0x7F: + switch (rep) { + case 2: + DEFAULT_VECTOR; + default: return 0; + } + break; + default: + return 0; + } + break; + case 0x66: + opcode = F8; + GETREX(); + switch (opcode) { + case 0x0F: + nextop = F8; + switch (nextop) { + case 0x7E: + DEFAULT_VECTOR; + case 0xD6: + DEFAULT_VECTOR; + case 0xFE: + DEFAULT_VECTOR; + default: + return 0; + } + break; + default: + return 0; + } + break; + default: + return 0; + } + return addr; +} diff --git a/src/dynarec/rv64/dynarec_rv64_avx.c b/src/dynarec/rv64/dynarec_rv64_avx.c new file mode 100644 index 0000000000000000000000000000000000000000..c9d80f2a203e4fc2c7de725d9f2d4792a5b03c4d --- /dev/null +++ b/src/dynarec/rv64/dynarec_rv64_avx.c @@ -0,0 +1,63 @@ +#include +#include +#include +#include + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" + +#include "rv64_printer.h" +#include "dynarec_rv64_private.h" +#include "dynarec_rv64_functions.h" +#include "dynarec_rv64_helper.h" + +static const char* avx_prefix_string(uint16_t p) +{ + switch (p) { + case VEX_P_NONE: return "0"; + case VEX_P_66: return "66"; + case VEX_P_F2: return "F2"; + case VEX_P_F3: return "F3"; + default: return "??"; + } +} +static const char* avx_map_string(uint16_t m) +{ + switch (m) { + case VEX_M_NONE: return "0"; + case VEX_M_0F: return "0F"; + case VEX_M_0F38: return "0F38"; + case VEX_M_0F3A: return "0F3A"; + default: return "??"; + } +} + +uintptr_t dynarec64_AVX(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, vex_t vex, int* ok, int* need_epilog) +{ + (void)ip; + (void)need_epilog; + + uint8_t opcode = PK(0); + rex_t rex = vex.rex; + + if ((vex.m == VEX_M_0F) && (vex.p == VEX_P_F3)) + addr = dynarec64_AVX_F3_0F(dyn, addr, ip, ninst, vex, ok, need_epilog); + else { + DEFAULT; + } + + if ((*ok == -1) && (box64_dynarec_log >= LOG_INFO || box64_dynarec_dump || box64_dynarec_missing == 1)) { + dynarec_log(LOG_NONE, "Dynarec unimplemented AVX opcode size %d prefix %s map %s opcode %02X ", 128 << vex.l, avx_prefix_string(vex.p), avx_map_string(vex.m), opcode); + } + return addr; +} diff --git a/src/dynarec/rv64/dynarec_rv64_avx_f3_0f.c b/src/dynarec/rv64/dynarec_rv64_avx_f3_0f.c new file mode 100644 index 0000000000000000000000000000000000000000..443ef94946c971339f9b6e6beb7dfacb613a9e17 --- /dev/null +++ b/src/dynarec/rv64/dynarec_rv64_avx_f3_0f.c @@ -0,0 +1,96 @@ +#include +#include +#include +#include + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" +#include "my_cpuid.h" +#include "emu/x87emu_private.h" +#include "emu/x64shaext.h" + +#include "rv64_printer.h" +#include "dynarec_rv64_private.h" +#include "dynarec_rv64_functions.h" +#include "dynarec_rv64_helper.h" + +uintptr_t dynarec64_AVX_F3_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, vex_t vex, int* ok, int* need_epilog) +{ + (void)ip; + (void)need_epilog; + + uint8_t opcode = F8; + uint8_t nextop, u8; + uint8_t gd, ed, vd; + uint8_t wback, wb1, wb2, gback, vback; + uint8_t eb1, eb2, gb1, gb2; + int32_t i32, i32_; + int cacheupd = 0; + int v0, v1, v2; + int q0, q1, q2; + int d0, d1, d2; + int s0; + uint64_t tmp64u, u64; + int64_t j64; + int64_t fixedaddress, gdoffset, vxoffset; + int unscaled; + + rex_t rex = vex.rex; + + switch (opcode) { + case 0x10: + INST_NAME("VMOVSS Gx, [Vx,] Ex"); + nextop = F8; + GETG; + if (MODREG) { + if (gd == vex.v) { + v0 = sse_get_reg(dyn, ninst, x1, gd, 1); + q0 = sse_get_reg(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 1); + FMVS(v0, q0); + } else { + GETGX(); + GETVX(); + GETEX(x2, 0, 1); + if (rv64_xtheadmempair) { + ADD(x1, vback, vxoffset); + TH_LDD(x3, x4, x1, 0); + } else { + LD(x3, vback, vxoffset); + LD(x4, vback, vxoffset + 8); + } + LWU(x5, wback, fixedaddress); + if (rv64_xtheadmempair) { + ADDI(x1, gback, gdoffset); + TH_SDD(x3, x4, x1, 0); + } else { + SD(x3, gback, gdoffset); + SD(x4, gback, gdoffset + 8); + } + SW(x5, gback, gdoffset); + } + } else { + v0 = sse_get_reg_empty(dyn, ninst, x1, gd, 1); + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + FLW(v0, ed, fixedaddress); + // reset upper part + SW(xZR, xEmu, offsetof(x64emu_t, xmm[gd]) + 4); + SD(xZR, xEmu, offsetof(x64emu_t, xmm[gd]) + 8); + } + YMM0(gd); + break; + default: + DEFAULT; + } + return addr; +} diff --git a/src/dynarec/rv64/dynarec_rv64_df.c b/src/dynarec/rv64/dynarec_rv64_df.c index a164fc63cc27eca36a221d96d079968d01eabb2e..737f8e85290a4a381f877954376a44047c643605 100644 --- a/src/dynarec/rv64/dynarec_rv64_df.c +++ b/src/dynarec/rv64/dynarec_rv64_df.c @@ -48,6 +48,10 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0xE0: INST_NAME("FNSTSW AX"); LWU(x2, xEmu, offsetof(x64emu_t, top)); + if (dyn->e.x87stack) { + ADDI(x2, x2, -dyn->e.x87stack); + ANDI(x2, x2, 0x7); + } LHU(x1, xEmu, offsetof(x64emu_t, sw)); MOV32w(x3, 0b1100011111111111); // mask AND(x1, x1, x3); diff --git a/src/dynarec/rv64/dynarec_rv64_emit_logic.c b/src/dynarec/rv64/dynarec_rv64_emit_logic.c index e954b32ee9a27878107eee25fe5cc60bec6b3e24..04185f055a17efb8e7435512814a76e04c88bcdc 100644 --- a/src/dynarec/rv64/dynarec_rv64_emit_logic.c +++ b/src/dynarec/rv64/dynarec_rv64_emit_logic.c @@ -34,15 +34,13 @@ void emit_xor8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) ANDI(s1, s1, 0xff); IFX(X_SF) { SRLI(s3, s1, 7); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_PEND) { SB(s1, xEmu, offsetof(x64emu_t, res)); } - IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + IFX (X_ZF) { + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -62,15 +60,13 @@ void emit_xor8c(dynarec_rv64_t* dyn, int ninst, int s1, int32_t c, int s3, int s ANDI(s1, s1, 0xff); IFX(X_SF) { SRLI(s3, s1, 7); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_PEND) { SB(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -92,8 +88,7 @@ void emit_xor32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s // test sign bit before zeroup. IFX(X_SF) { if (!rex.w) SEXT_W(s1, s1); - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } if (!rex.w && s1!=s2) { ZEROUP(s1); @@ -104,8 +99,7 @@ void emit_xor32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -132,8 +126,7 @@ void emit_xor32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i // test sign bit before zeroup. IFX(X_SF) { if (!rex.w) SEXT_W(s1, s1); - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } if (!rex.w) { ZEROUP(s1); @@ -144,8 +137,7 @@ void emit_xor32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -170,13 +162,11 @@ void emit_xor16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, } IFX(X_ZF | X_SF) { IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_SF) { SRLI(s3, s1, 15); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } } IFX(X_PF) { @@ -201,13 +191,11 @@ void emit_or16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) { IFX(X_SF) { SRLI(s3, s1, 15); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -229,8 +217,7 @@ void emit_or32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3 // test sign bit before zeroup. IFX(X_SF) { if (!rex.w) SEXT_W(s1, s1); - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } if (!rex.w) { ZEROUP(s1); @@ -241,8 +228,7 @@ void emit_or32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3 } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -268,8 +254,7 @@ void emit_or32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, in // test sign bit before zeroup. IFX(X_SF) { if (!rex.w) SEXT_W(s1, s1); - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } if (!rex.w) { ZEROUP(s1); @@ -280,8 +265,7 @@ void emit_or32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, in } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -307,12 +291,10 @@ void emit_and8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) } IFX(X_SF) { SRLI(s3, s1, 7); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -337,12 +319,10 @@ void emit_and8c(dynarec_rv64_t* dyn, int ninst, int s1, int32_t c, int s3, int s } IFX(X_SF) { SRLI(s3, s1, 7); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -364,12 +344,10 @@ void emit_and16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) } IFX(X_SF) { SRLI(s3, s1, 15); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -394,12 +372,10 @@ void emit_and32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s } IFX(X_SF) { SRLI(s3, s1, rex.w?63:31); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -422,19 +398,17 @@ void emit_and32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i MOV64xw(s3, c); AND(s1, s1, s3); // res = s1 & s2 } - if (!rex.w) ZEROUP(s1); + if (!rex.w && (c > 2047 || c < 0)) ZEROUP(s1); IFX(X_PEND) { SDxw(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_SF) { SRLI(s3, s1, rex.w?63:31); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -458,12 +432,10 @@ void emit_or8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) } IFX(X_SF) { SRLI(s3, s1, 7); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); diff --git a/src/dynarec/rv64/dynarec_rv64_emit_math.c b/src/dynarec/rv64/dynarec_rv64_emit_math.c index 6175f19dae49c9f2f9871004afeb0cc5a725e3ad..c666497d84b882227bdb731b3646a90178e5c3cf 100644 --- a/src/dynarec/rv64/dynarec_rv64_emit_math.c +++ b/src/dynarec/rv64/dynarec_rv64_emit_math.c @@ -35,31 +35,31 @@ void emit_add32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s IFX(X_CF) { if (rex.w) { AND(s5, xMASK, s1); - if(rv64_zba) ADDUW(s5, s2, s5); else {AND(s4, xMASK, s2); ADD(s5, s5, s4);} // lo + if (rv64_zba) // lo + ADDUW(s5, s2, s5); + else { + AND(s4, xMASK, s2); + ADD(s5, s5, s4); + } SRLI(s3, s1, 0x20); SRLI(s4, s2, 0x20); ADD(s4, s4, s3); SRLI(s5, s5, 0x20); ADD(s5, s5, s4); // hi SRAI(s5, s5, 0x20); - BEQZ(s5, 8); - ORI(xFlags, xFlags, 1 << F_CF); } else { AND(s3, s1, xMASK); AND(s4, s2, xMASK); ADD(s5, s3, s4); SRLI(s5, s5, 0x20); - BEQZ(s5, 8); - ORI(xFlags, xFlags, 1 << F_CF); } + SET_FLAGS_NEZ(s5, F_CF, s4); } IFX(X_AF | X_OF) { OR(s3, s1, s2); // s3 = op1 | op2 - AND(s4, s1, s2); // s4 = op1 & op2 + AND(s4, s1, s2); // s4 = op1 & op2 } - ADDxw(s1, s1, s2); - IFX(X_PEND) { SDxw(s1, xEmu, offsetof(x64emu_t, res)); } @@ -73,21 +73,18 @@ void emit_add32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s OR(s3, s3, s4); // cc = (~res & (op1 | op2)) | (op1 & op2) IFX(X_AF) { ANDI(s4, s3, 0x08); // AF: cc & 0x08 - BEQZ(s4, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s4, F_AF, s5); } IFX(X_OF) { SRLI(s3, s3, rex.w?62:30); SRLI(s4, s3, 1); XOR(s3, s3, s4); ANDI(s3, s3, 1); // OF: xor of two MSB's of cc - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s3, F_OF2, s5); } } IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s5); } if (!rex.w) { ZEROUP(s1); @@ -96,8 +93,7 @@ void emit_add32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s emit_pf(dyn, ninst, s1, s3, s4); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } } @@ -105,14 +101,16 @@ void emit_add32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s void emit_add32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s2, int s3, int s4, int s5) { CLEAR_FLAGS(); - if(s1==xRSP && (!dyn->insts || dyn->insts[ninst].x64.gen_flags==X_PEND)) - { + if (s1 == xRSP && (!dyn->insts || dyn->insts[ninst].x64.gen_flags == X_PEND)) { // special case when doing math on ESP and only PEND is needed: ignoring it! - if(c >= -2048 && c < 2048) { - ADDIxw(s1, s1, c); + if (c >= -2048 && c < 2048) { + ADDI(s1, s1, c); } else { - MOV64xw(s2, c); - ADDxw(s1, s1, s2); + MOV64x(s2, c); + ADD(s1, s1, s2); + } + if (!rex.w) { + ZEROUP(s1); } return; } @@ -129,23 +127,25 @@ void emit_add32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i IFX(X_CF) { if (rex.w) { AND(s5, xMASK, s1); - if(rv64_zba) ADDUW(s5, s2, s5); else {AND(s4, xMASK, s2); ADD(s5, s5, s4);} // lo + if (rv64_zba) // lo + ADDUW(s5, s2, s5); + else { + AND(s4, xMASK, s2); + ADD(s5, s5, s4); + } SRLI(s3, s1, 0x20); SRLI(s4, s2, 0x20); ADD(s4, s4, s3); SRLI(s5, s5, 0x20); ADD(s5, s5, s4); // hi SRAI(s5, s5, 0x20); - BEQZ(s5, 8); - ORI(xFlags, xFlags, 1 << F_CF); } else { AND(s3, s1, xMASK); AND(s4, s2, xMASK); ADD(s5, s3, s4); SRLI(s5, s5, 0x20); - BEQZ(s5, 8); - ORI(xFlags, xFlags, 1 << F_CF); } + SET_FLAGS_NEZ(s5, F_CF, s4); } IFX(X_AF | X_OF) { OR(s3, s1, s2); // s3 = op1 | op2 @@ -172,21 +172,18 @@ void emit_add32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i OR(s3, s3, s4); // cc = (~res & (op1 | op2)) | (op1 & op2) IFX(X_AF) { ANDI(s4, s3, 0x08); // AF: cc & 0x08 - BEQZ(s4, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s4, F_AF, s5); } IFX(X_OF) { SRLI(s3, s3, rex.w?62:30); SRLI(s4, s3, 1); XOR(s3, s3, s4); ANDI(s3, s3, 1); // OF: xor of two MSB's of cc - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s3, F_OF2, s5); } } IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s5); } if (!rex.w) { ZEROUP(s1); @@ -195,8 +192,7 @@ void emit_add32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i emit_pf(dyn, ninst, s1, s3, s4); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } } @@ -230,35 +226,30 @@ void emit_add16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, OR(s3, s3, s4); // cc = (~res & (op1 | op2)) | (op1 & op2) IFX(X_AF) { ANDI(s4, s3, 0x08); // AF: cc & 0x08 - BEQZ(s4, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s4, F_AF, s5); } IFX(X_OF) { SRLI(s3, s3, 14); SRLI(s4, s3, 1); XOR(s3, s3, s4); ANDI(s3, s3, 1); // OF: xor of two MSB's of cc - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s3, F_OF2, s5); } } IFX(X_CF) { SRLI(s3, s1, 16); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_CF); + SET_FLAGS_NEZ(s3, F_CF, s4); } ZEXTH(s1, s1); IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_SF) { SRLI(s3, s1, 15); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -266,7 +257,7 @@ void emit_add16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, } // emit ADD8 instruction, from s1, s2, store result in s1 using s3 and s4 as scratch -void emit_add8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) +void emit_add8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, int s5) { CLEAR_FLAGS(); IFX(X_PEND) { @@ -292,35 +283,30 @@ void emit_add8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) OR(s3, s3, s4); // cc = (~res & (op1 | op2)) | (op1 & op2) IFX(X_AF) { ANDI(s4, s3, 0x08); // AF: cc & 0x08 - BEQZ(s4, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s4, F_AF, s5); } IFX(X_OF) { SRLI(s3, s3, 6); SRLI(s4, s3, 1); XOR(s3, s3, s4); ANDI(s3, s3, 1); // OF: xor of two MSB's of cc - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s3, F_OF2, s5); } } IFX(X_CF) { SRLI(s3, s1, 8); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_CF); + SET_FLAGS_NEZ(s3, F_CF, s4); } IFX(X_PEND) { SH(s1, xEmu, offsetof(x64emu_t, res)); } ANDI(s1, s1, 0xff); IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_SF) { SRLI(s3, s1, 7); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -328,7 +314,7 @@ void emit_add8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) } // emit ADD8 instruction, from s1, const c, store result in s1 using s3 and s4 as scratch -void emit_add8c(dynarec_rv64_t* dyn, int ninst, int s1, int c, int s2, int s3, int s4) +void emit_add8c(dynarec_rv64_t* dyn, int ninst, int s1, int c, int s2, int s3, int s4, int s5) { CLEAR_FLAGS(); IFX(X_PEND) { @@ -356,35 +342,30 @@ void emit_add8c(dynarec_rv64_t* dyn, int ninst, int s1, int c, int s2, int s3, i OR(s3, s3, s4); // cc = (~res & (op1 | op2)) | (op1 & op2) IFX(X_AF) { ANDI(s4, s3, 0x08); // AF: cc & 0x08 - BEQZ(s4, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s4, F_AF, s5); } IFX(X_OF) { SRLI(s3, s3, 6); SRLI(s4, s3, 1); XOR(s3, s3, s4); ANDI(s3, s3, 1); // OF: xor of two MSB's of cc - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s3, F_OF2, s5); } } IFX(X_CF) { SRLI(s3, s1, 8); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_CF); + SET_FLAGS_NEZ(s3, F_CF, s4); } IFX(X_PEND) { SH(s1, xEmu, offsetof(x64emu_t, res)); } ANDI(s1, s1, 0xff); IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_SF) { SRLI(s3, s1, 7); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -412,16 +393,14 @@ void emit_sub8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, i ANDI(s1, s1, 0xff); IFX(X_SF) { SRLI(s3, s1, 7); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_PEND) { SB(s1, xEmu, offsetof(x64emu_t, res)); } CALC_SUB_FLAGS(s5, s2, s1, s3, s4, 8); IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s5); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -458,15 +437,13 @@ void emit_sub16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, } SLLI(s1, s1, 48); IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } SRLI(s1, s1, 48); CALC_SUB_FLAGS(s5, s2, s1, s3, s4, 16); IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s5); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -496,16 +473,14 @@ void emit_sub32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s SDxw(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } if (!rex.w) { ZEROUP(s1); } CALC_SUB_FLAGS(s5, s2, s1, s3, s4, rex.w?64:32); IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s5); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -517,8 +492,7 @@ void emit_sub32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s void emit_sub32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s2, int s3, int s4, int s5) { CLEAR_FLAGS(); - if(s1==xRSP && (!dyn->insts || dyn->insts[ninst].x64.gen_flags==X_PEND)) - { + if (s1 == xRSP && (!dyn->insts || dyn->insts[ninst].x64.gen_flags == X_PEND)) { // special case when doing math on RSP and only PEND is needed: ignoring it! if (c > -2048 && c <= 2048) { SUBI(s1, s1, c); @@ -526,6 +500,9 @@ void emit_sub32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i MOV64xw(s2, c); SUBxw(s1, s1, s2); } + if (!rex.w) { + ZEROUP(s1); + } return; } @@ -560,16 +537,14 @@ void emit_sub32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i SDxw(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } if (!rex.w) { ZEROUP(s1); } CALC_SUB_FLAGS(s5, s2, s1, s3, s4, rex.w?64:32); IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s5); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -608,30 +583,26 @@ void emit_inc8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) OR(s3, s3, s4); // cc = (~res & (op1 | op2)) | (op1 & op2) IFX(X_AF) { ANDI(s2, s3, 0x08); // AF: cc & 0x08 - BEQZ(s2, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s2, F_AF, s4); } IFX(X_OF) { SRLI(s3, s3, 6); SRLI(s2, s3, 1); XOR(s3, s3, s2); ANDI(s3, s3, 1); // OF: xor of two MSB's of cc - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s3, F_OF2, s4); } } IFX(X_SF) { ANDI(s2, s1, 0x80); - BEQZ(s2, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s2, F_SF, s4); } ANDI(s1, s1, 0xff); IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s2); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } } @@ -664,30 +635,26 @@ void emit_dec8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) OR(s3, s3, s4); // cc = (res & (~op1 | op2)) | (~op1 & op2) IFX(X_AF) { ANDI(s2, s3, 0x08); // AF: cc & 0x08 - BEQZ(s2, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s2, F_AF, s4); } IFX(X_OF) { SRLI(s3, s3, 6); SRLI(s2, s3, 1); XOR(s3, s3, s2); ANDI(s3, s3, 1); // OF: xor of two MSB's of cc - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s3, F_OF2, s4); } } IFX(X_SF) { ANDI(s2, s1, 0x80); - BEQZ(s2, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s2, F_SF, s4); } ANDI(s1, s1, 0xff); IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s2); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } } @@ -723,21 +690,18 @@ void emit_inc32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s OR(s3, s3, s5); // cc = (~res & (op1 | op2)) | (op1 & op2) IFX(X_AF) { ANDI(s2, s3, 0x08); // AF: cc & 0x08 - BEQZ(s2, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s2, F_AF, s4); } IFX(X_OF) { SRLI(s3, s3, rex.w?62:30); SRLI(s2, s3, 1); XOR(s3, s3, s2); ANDI(s3, s3, 1); // OF: xor of two MSB's of cc - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s3, F_OF2, s4); } } IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s4, s5); } if (!rex.w) { ZEROUP(s1); @@ -746,8 +710,7 @@ void emit_inc32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s emit_pf(dyn, ninst, s1, s3, s2); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } } @@ -779,21 +742,18 @@ void emit_dec32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s OR(s3, s3, s5); // cc = (res & (~op1 | op2)) | (~op1 & op2) IFX(X_AF) { ANDI(s2, s3, 0x08); // AF: cc & 0x08 - BEQZ(s2, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s2, F_AF, s4); } IFX(X_OF) { SRLI(s3, s3, rex.w?62:30); SRLI(s2, s3, 1); XOR(s3, s3, s2); ANDI(s3, s3, 1); // OF: xor of two MSB's of cc - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s3, F_OF2, s4); } } IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s4, s5); } if (!rex.w) { ZEROUP(s1); @@ -802,13 +762,12 @@ void emit_dec32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s emit_pf(dyn, ninst, s1, s3, s2); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } } // emit INC16 instruction, from s1, store result in s1 using s3 and s4 as scratch -void emit_inc16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) +void emit_inc16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, int s5) { IFX(X_ALL) { ANDI(xFlags, xFlags, ~((1UL<> (width-2)) ^ (bc >> (width-1))) & 0x1; */ @@ -1166,13 +1104,11 @@ void emit_neg32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s SRLI(s3, s2, 1); XOR(s2, s2, s3); ANDI(s2, s2, 1); - BEQZ(s2, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s2, F_OF2, s4); } } IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s4, s5); } if (!rex.w) { ZEROUP(s1); @@ -1181,13 +1117,12 @@ void emit_neg32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s emit_pf(dyn, ninst, s1, s3, s2); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } } // emit NEG16 instruction, from s1, store result in s1 using s2 and s3 as scratch -void emit_neg16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) +void emit_neg16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) { CLEAR_FLAGS(); IFX(X_PEND) { @@ -1207,8 +1142,7 @@ void emit_neg16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) } IFX(X_CF) { - BEQZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_CF); + SET_FLAGS_NEZ(s1, F_CF, s4); } IFX(X_AF | X_OF) { @@ -1216,8 +1150,7 @@ void emit_neg16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) IFX(X_AF) { /* af = bc & 0x8 */ ANDI(s2, s3, 8); - BEQZ(s2, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s2, F_AF, s4); } IFX(X_OF) { /* of = ((bc >> (width-2)) ^ (bc >> (width-1))) & 0x1; */ @@ -1225,8 +1158,7 @@ void emit_neg16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) SRLI(s3, s2, 1); XOR(s2, s2, s3); ANDI(s2, s2, 1); - BEQZ(s2, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s2, F_OF2, s4); } } IFX(X_SF) { @@ -1238,13 +1170,12 @@ void emit_neg16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) emit_pf(dyn, ninst, s1, s3, s2); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } } // emit NEG8 instruction, from s1, store result in s1 using s2 and s3 as scratch -void emit_neg8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) +void emit_neg8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4) { CLEAR_FLAGS(); IFX(X_PEND) { @@ -1264,8 +1195,7 @@ void emit_neg8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) } IFX(X_CF) { - BEQZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_CF); + SET_FLAGS_NEZ(s1, F_CF, s4); } IFX(X_AF | X_OF) { @@ -1273,8 +1203,7 @@ void emit_neg8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) IFX(X_AF) { /* af = bc & 0x8 */ ANDI(s2, s3, 8); - BEQZ(s2, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s2, F_AF, s4); } IFX(X_OF) { /* of = ((bc >> (width-2)) ^ (bc >> (width-1))) & 0x1; */ @@ -1282,8 +1211,7 @@ void emit_neg8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) SRLI(s3, s2, 1); XOR(s2, s2, s3); ANDI(s2, s2, 1); - BEQZ(s2, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s2, F_OF2, s4); } } IFX(X_SF) { @@ -1294,8 +1222,7 @@ void emit_neg8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) emit_pf(dyn, ninst, s1, s3, s2); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } } @@ -1332,34 +1259,29 @@ void emit_adc16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, OR(s3, s3, s5); // cc = (~res & (op1 | op2)) | (op1 & op2) IFX(X_AF) { ANDI(s4, s3, 0x08); // AF: cc & 0x08 - BEQZ(s4, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s4, F_AF, s5); } IFX(X_OF) { SRLI(s3, s3, 14); SRLI(s4, s3, 1); XOR(s3, s3, s4); ANDI(s3, s3, 1); // OF: xor of two MSB's of cc - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s3, F_OF2, s5); } } IFX(X_CF) { SRLI(s3, s1, 16); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_CF); + SET_FLAGS_NEZ(s3, F_CF, s5); } ZEXTH(s1, s1); IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s5); } IFX(X_SF) { SRLI(s3, s1, 15); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s5); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -1410,10 +1332,6 @@ void emit_adc32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s IFX(X_PEND) { SDxw(s1, xEmu, offsetof(x64emu_t, res)); } - IFX(X_CF) { - BEQZ(s6, 8); - ORI(xFlags, xFlags, 1 << F_CF); - } IFX(X_AF | X_OF) { if(rv64_zbb) { ANDN(s3, s4, s1); // s3 = ~res & (op1 | op2) @@ -1424,21 +1342,21 @@ void emit_adc32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s OR(s3, s3, s5); // cc = (~res & (op1 | op2)) | (op1 & op2) IFX(X_AF) { ANDI(s4, s3, 0x08); // AF: cc & 0x08 - BEQZ(s4, 8); - ORI(xFlags, xFlags, 1 << F_AF); + SET_FLAGS_NEZ(s4, F_AF, s5); } IFX(X_OF) { SRLI(s3, s3, rex.w?62:30); SRLI(s4, s3, 1); XOR(s3, s3, s4); ANDI(s3, s3, 1); // OF: xor of two MSB's of cc - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_OF2); + SET_FLAGS_NEZ(s3, F_OF2, s5); } } + IFX (X_CF) { + SET_FLAGS_NEZ(s6, F_CF, s5); + } IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s5, s6); } if (!rex.w) { ZEROUP(s1); @@ -1447,7 +1365,6 @@ void emit_adc32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s emit_pf(dyn, ninst, s1, s3, s4); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s5); } } diff --git a/src/dynarec/rv64/dynarec_rv64_emit_shift.c b/src/dynarec/rv64/dynarec_rv64_emit_shift.c index 62fc485b7cdfccc1dea49de5e70ed13f7c7b79b8..6e61b769d1a280ef25dbbbf756c467b1467af4e9 100644 --- a/src/dynarec/rv64/dynarec_rv64_emit_shift.c +++ b/src/dynarec/rv64/dynarec_rv64_emit_shift.c @@ -48,8 +48,7 @@ void emit_shl8c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int SLLI(s1, s1, c+56); IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } SRLI(s1, s1, 56); @@ -57,8 +56,7 @@ void emit_shl8c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int SB(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_OF) { // OF flag is affected only on 1-bit shifts @@ -80,6 +78,9 @@ void emit_shl8c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int } } MV(s1, xZR); + IFX(X_PEND) { + SB(s1, xEmu, offsetof(x64emu_t, res)); + } // OF nop // SF nop // AF nop @@ -136,8 +137,7 @@ void emit_shr8c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int SB(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s5); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -172,8 +172,7 @@ void emit_sar8c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int // OF nop IFX(X_SF) { // SF is the same as the original operand - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } SRLI(s1, s1, c); @@ -183,8 +182,7 @@ void emit_sar8c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int SB(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -216,8 +214,7 @@ void emit_shl8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, i SLLI(s1, s1, 56); IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } SRLI(s1, s1, 56); @@ -225,8 +222,7 @@ void emit_shl8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, i SB(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_OF) { // OF flag is affected only on 1-bit shifts @@ -281,8 +277,7 @@ void emit_shr8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, i SB(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -313,8 +308,7 @@ void emit_sar8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, i // OF nop IFX(X_SF) { // SF is the same as the original operand - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } SRL(s1, s1, s2); @@ -324,8 +318,7 @@ void emit_sar8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, i SB(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -359,8 +352,7 @@ void emit_shl16c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int SLLI(s1, s1, c+48); IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } SRLI(s1, s1, 48); @@ -368,8 +360,7 @@ void emit_shl16c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int SH(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_OF) { // OF flag is affected only on 1-bit shifts @@ -391,6 +382,9 @@ void emit_shl16c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int } } MV(s1, xZR); + IFX(X_PEND) { + SH(s1, xEmu, offsetof(x64emu_t, res)); + } // OF nop // SF nop // AF nop @@ -446,8 +440,7 @@ void emit_shr16c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int SH(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -478,20 +471,11 @@ void emit_sar16c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int } OR(xFlags, xFlags, s3); } - IFX(X_OF) { - // OF flag is affected only on 1-bit shifts - // OF flag is set to the most-significant bit of the original operand - if (c == 1) { - SRLI(s3, s1, 15); - ANDI(s3, s3, 1); - SLLI(s3, s3, F_OF2); - OR(xFlags, xFlags, s3); - } - } + // For the SAR instruction, the OF flag is cleared for all 1-bit shifts. + // OF nop IFX(X_SF) { // SF is the same as the original operand - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } SRLI(s1, s1, c); @@ -501,8 +485,7 @@ void emit_sar16c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int SH(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -535,8 +518,7 @@ void emit_shl16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, SLLI(s1, s1, 48); IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } SRLI(s1, s1, 48); @@ -544,8 +526,7 @@ void emit_shl16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, SH(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_OF) { // OF flag is affected only on 1-bit shifts @@ -600,8 +581,7 @@ void emit_shr16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, SH(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -618,7 +598,7 @@ void emit_sar16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, IFX(X_PEND) { SH(s2, xEmu, offsetof(x64emu_t, op2)); SH(s1, xEmu, offsetof(x64emu_t, op1)); - SET_DF(s4, d_sar8); + SET_DF(s4, d_sar16); } else IFX(X_ALL) { SET_DFNONE(); } @@ -632,8 +612,7 @@ void emit_sar16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, // OF nop IFX(X_SF) { // SF is the same as the original operand - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } SRL(s1, s1, s2); @@ -643,8 +622,7 @@ void emit_sar16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, SH(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -681,8 +659,7 @@ void emit_shl32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s } IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } if (!rex.w) { ZEROUP(s1); @@ -691,8 +668,7 @@ void emit_shl32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s SDxw(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_OF) { // OF flag is affected only on 1-bit shifts @@ -740,8 +716,7 @@ void emit_shl32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, } IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } if (!rex.w) { ZEROUP(s1); @@ -750,8 +725,7 @@ void emit_shl32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, SDxw(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_OF) { // OF flag is affected only on 1-bit shifts @@ -801,8 +775,7 @@ void emit_shr32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s SRL(s1, s1, s2); IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } if (!rex.w) { ZEROUP(s1); @@ -811,8 +784,7 @@ void emit_shr32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s SDxw(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -866,8 +838,7 @@ void emit_shr32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, } IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } if (!rex.w && c == 0) { ZEROUP(s1); @@ -876,8 +847,7 @@ void emit_shr32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, SDxw(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -914,6 +884,8 @@ void emit_sar32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, } OR(xFlags, xFlags, s3); } + // For the SAR instruction, the OF flag is cleared for all 1-bit shifts. + // OF nop if (rex.w) { SRAI(s1, s1, c); @@ -923,8 +895,7 @@ void emit_sar32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, // SRAIW sign-extends, so test sign bit before clearing upper bits IFX(X_SF) { - BGE(s1, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } if (!rex.w) { ZEROUP(s1); @@ -933,8 +904,7 @@ void emit_sar32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, SDxw(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -946,15 +916,10 @@ void emit_rol32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s { int64_t j64; - if(rex.w) { - ANDI(s4, s2, 0x3f); - } else { - ANDI(s4, s2, 0x1f); - } if (!rex.w) { ZEROUP(s1); } - BEQ_NEXT(s4, xZR); + BEQ_NEXT(s2, xZR); IFX(X_PEND) { SDxw(s2, xEmu, offsetof(x64emu_t, op2)); SET_DF(s4, rex.w?d_rol64:d_rol32); @@ -964,14 +929,14 @@ void emit_rol32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s if(rv64_zbb) { if (rex.w) { - ROL(s1, s1, s4); + ROL(s1, s1, s2); } else { - ROLW(s1, s1, s4); + ROLW(s1, s1, s2); ZEROUP(s1); } } else { - SLLxw(s3, s1, s4); - NEG(s4, s4); + SLLxw(s3, s1, s2); + NEG(s4, s2); ADDI(s4, s4, rex.w?64:32); SRLxw(s1, s1, s4); OR(s1, s3, s1); @@ -988,12 +953,13 @@ void emit_rol32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s } IFX(X_OF) { // the OF flag is set to the exclusive OR of the CF bit (after the rotate) and the most-significant bit of the result. - ADDI(s3, xZR, 1); - BNE_NEXT(s2, s3); + ADDI(s3, s2, -1); + BNEZ_MARK(s3); SRLIxw(s3, s1, rex.w?63:31); XOR(s3, s3, s4); // s3: MSB, s4: CF bit SLLI(s3, s3, F_OF2); OR(xFlags, xFlags, s3); + MARK; } } @@ -1002,15 +968,10 @@ void emit_ror32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s { int64_t j64; - if(rex.w) { - ANDI(s4, s2, 0x3f); - } else { - ANDI(s4, s2, 0x1f); - } if (!rex.w) { ZEROUP(s1); } - BEQ_NEXT(s4, xZR); + BEQ_NEXT(s2, xZR); IFX(X_PEND) { SDxw(s2, xEmu, offsetof(x64emu_t, op2)); SET_DF(s4, rex.w?d_ror64:d_ror32); @@ -1020,14 +981,14 @@ void emit_ror32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s if(rv64_zbb) { if (rex.w) { - ROR(s1, s1, s4); + ROR(s1, s1, s2); } else { - RORW(s1, s1, s4); + RORW(s1, s1, s2); ZEROUP(s1); } } else { - SRLxw(s3, s1, s4); - NEG(s4, s4); + SRLxw(s3, s1, s2); + NEG(s4, s2); ADDI(s4, s4, rex.w?64:32); SLLxw(s1, s1, s4); OR(s1, s3, s1); @@ -1044,14 +1005,15 @@ void emit_ror32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s } IFX(X_OF) { // the OF flag is set to the exclusive OR of the two most-significant bits of the result - ADDI(s3, xZR, 1); - BNE_NEXT(s2, s3); + ADDI(s3, s2, -1); + BNEZ_MARK(s3); SRLIxw(s3, s1, rex.w?63:31); SRLIxw(s4, s1, rex.w?62:30); XOR(s3, s3, s4); ANDI(s3, s3, 1); SLLI(s3, s3, F_OF2); OR(xFlags, xFlags, s3); + MARK; } } @@ -1156,7 +1118,7 @@ void emit_ror32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, } // emit SHRD32 instruction, from s1, fill s2 , constant c, store result in s1 using s3 and s4 as scratch -void emit_shrd32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uint32_t c, int s3, int s4) +void emit_shrd32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uint32_t c, int s3, int s4, int s5) { c&=(rex.w?0x3f:0x1f); CLEAR_FLAGS(); @@ -1201,15 +1163,13 @@ void emit_shrd32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uin } IFX(X_SF) { SRLIxw(s3, s1, rex.w?63:31); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s5); } IFX(X_PEND) { SDxw(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s5); } IFX(X_OF) { // the OF flag is set if a sign change occurred @@ -1274,18 +1234,11 @@ void emit_shrd16c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uin OR(s1, s1, s5); } ZEXTH(s1, s1); - - IFX(X_SF) { - SLLIW(s3, s1, 16); - BGE(s3, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); - } IFX(X_PEND) { SH(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s5); } IFX(X_OF) { // the OF flag is set if a sign change occurred @@ -1297,12 +1250,16 @@ void emit_shrd16c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uin OR(xFlags, xFlags, s3); } } + IFX (X_SF) { + SLLIW(s3, s1, 16); + SET_FLAGS_LTZ(s3, F_SF, s4, s5); + } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); } } -void emit_shld32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uint32_t c, int s3, int s4) +void emit_shld32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uint32_t c, int s3, int s4, int s5) { c&=(rex.w?0x3f:0x1f); CLEAR_FLAGS(); @@ -1345,17 +1302,11 @@ void emit_shld32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uin if (!rex.w) { ZEROUP(s1); } - IFX(X_SF) { - SRLIxw(s3, s1, rex.w?63:31); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); - } IFX(X_PEND) { SDxw(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s5); } IFX(X_OF) { // the OF flag is set if a sign change occurred @@ -1366,6 +1317,10 @@ void emit_shld32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uin ORI(xFlags, xFlags, s3); } } + IFX (X_SF) { + SRLIxw(s3, s1, rex.w ? 63 : 31); + SET_FLAGS_NEZ(s3, F_SF, s4); + } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); } @@ -1405,15 +1360,6 @@ void emit_shrd32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int if (!rex.w) { ZEROUP(s1); } - IFX(X_SF) { - SRLIxw(s3, s1, rex.w?63:31); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); - } - IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); - } IFX(X_OF) { ADDI(s5, s5, -1); BNEZ_MARK(s5); @@ -1423,6 +1369,13 @@ void emit_shrd32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int OR(xFlags, xFlags, s3); MARK; } + IFX (X_ZF) { + SET_FLAGS_EQZ(s1, F_ZF, s5); + } + IFX (X_SF) { + SRLIxw(s3, s1, rex.w ? 63 : 31); + SET_FLAGS_NEZ(s3, F_SF, s5); + } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); } @@ -1461,15 +1414,6 @@ void emit_shld32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int if (!rex.w) { ZEROUP(s1); } - IFX(X_SF) { - SRLIxw(s3, s1, rex.w?63:31); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); - } - IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); - } IFX(X_OF) { ADDI(s5, s5, -1); BNEZ_MARK(s5); @@ -1479,6 +1423,13 @@ void emit_shld32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int OR(xFlags, xFlags, s3); MARK; } + IFX (X_ZF) { + SET_FLAGS_EQZ(s1, F_ZF, s5); + } + IFX (X_SF) { + SRLIxw(s3, s1, rex.w ? 63 : 31); + SET_FLAGS_NEZ(s3, F_SF, s5); + } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); } @@ -1532,19 +1483,9 @@ void emit_shld16c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uin OR(s1, s1, s3); } ZEXTH(s1, s1); - - IFX(X_SF) { - SLLIW(s4, s1, 16); - BGE(s4, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); - } IFX(X_PEND) { SH(s1, xEmu, offsetof(x64emu_t, res)); } - IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); - } IFX(X_OF) { // the OF flag is set if a sign change occurred if(c==1) { @@ -1555,6 +1496,13 @@ void emit_shld16c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uin OR(xFlags, xFlags, s3); } } + IFX (X_SF) { + SLLIW(s4, s1, 16); + SET_FLAGS_LTZ(s4, F_SF, s3, s5); + } + IFX (X_ZF) { + SET_FLAGS_EQZ(s1, F_ZF, s3); + } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); } diff --git a/src/dynarec/rv64/dynarec_rv64_emit_tests.c b/src/dynarec/rv64/dynarec_rv64_emit_tests.c index 00c1fb7d93313ecfcd876198feaa9fc825015069..439951a361e7bc20546be93cfcf937f95e6e880a 100644 --- a/src/dynarec/rv64/dynarec_rv64_emit_tests.c +++ b/src/dynarec/rv64/dynarec_rv64_emit_tests.c @@ -46,13 +46,11 @@ void emit_cmp8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, i } IFX(X_SF) { SRLI(s3, s6, 7); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } CALC_SUB_FLAGS(s5, s2, s6, s3, s4, 8); IFX(X_ZF) { - BNEZ(s6, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s6, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s6, s3, s4); @@ -74,12 +72,10 @@ void emit_cmp8_0(dynarec_rv64_t* dyn, int ninst, int s1, int s3, int s4) IFX(X_SF) { SRLI(s3, s1, 7); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -113,13 +109,11 @@ void emit_cmp16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, } IFX(X_SF) { SRLI(s3, s6, 15); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } CALC_SUB_FLAGS(s5, s2, s6, s3, s4, 16); IFX(X_ZF) { - BNEZ(s6, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s6, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s6, s3, s4); @@ -141,12 +135,10 @@ void emit_cmp16_0(dynarec_rv64_t* dyn, int ninst, int s1, int s3, int s4) IFX(X_SF) { SRLI(s3, s1, 15); - BEQZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s3, F_SF, s4); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -176,16 +168,14 @@ void emit_cmp32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s SDxw(s6, xEmu, offsetof(x64emu_t, res)); } IFX(X_SF) { - BGE(s6, xZR, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_LTZ(s6, F_SF, s3, s4); } if (!rex.w) { ZEROUP(s6); } CALC_SUB_FLAGS(s5, s2, s6, s3, s4, rex.w?64:32); IFX(X_ZF) { - BNEZ(s6, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s6, F_ZF, s4); } IFX(X_PF) { emit_pf(dyn, ninst, s6, s3, s4); @@ -206,16 +196,14 @@ void emit_cmp32_0(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s3, int } IFX(X_SF) { if (rex.w) { - BGE(s1, xZR, 8); + SET_FLAGS_LTZ(s1, F_SF, s3, s4); } else { SRLI(s3, s1, 31); - BEQZ(s3, 8); + SET_FLAGS_NEZ(s3, F_SF, s4); } - ORI(xFlags, xFlags, 1 << F_SF); } IFX(X_ZF) { - BNEZ(s1, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s1, F_ZF, s3); } IFX(X_PF) { emit_pf(dyn, ninst, s1, s3, s4); @@ -238,12 +226,10 @@ void emit_test8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, } IFX(X_SF) { SRLI(s4, s3, 7); - BEQZ(s4, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s4, F_SF, s5); } IFX(X_ZF) { - BNEZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s3, F_ZF, s5); } IFX(X_PF) { emit_pf(dyn, ninst, s3, s4, s5); @@ -267,12 +253,10 @@ void emit_test16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, } IFX(X_SF) { SRLI(s4, s3, 15); - BEQZ(s4, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SET_FLAGS_NEZ(s4, F_SF, s5); } IFX(X_ZF) { - BNEZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s3, F_ZF, s5); } IFX(X_PF) { emit_pf(dyn, ninst, s3, s4, s5); @@ -298,13 +282,11 @@ void emit_test32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int if (!rex.w) ZEROUP(s3); } IFX(X_SF) { - SRLI(s4, s3, rex.w?63:31); - BEQZ(s4, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SRLI(s4, s3, rex.w ? 63 : 31); + SET_FLAGS_NEZ(s4, F_SF, s5); } IFX(X_ZF) { - BNEZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s3, F_ZF, s5); } IFX(X_PF) { emit_pf(dyn, ninst, s3, s4, s5); @@ -335,13 +317,11 @@ void emit_test32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, SDxw(s3, xEmu, offsetof(x64emu_t, res)); } IFX(X_SF) { - SRLI(s4, s3, rex.w?63:31); - BEQZ(s4, 8); - ORI(xFlags, xFlags, 1 << F_SF); + SRLI(s4, s3, rex.w ? 63 : 31); + SET_FLAGS_NEZ(s4, F_SF, s5); } IFX(X_ZF) { - BNEZ(s3, 8); - ORI(xFlags, xFlags, 1 << F_ZF); + SET_FLAGS_EQZ(s3, F_ZF, s5); } IFX(X_PF) { emit_pf(dyn, ninst, s3, s4, s5); diff --git a/src/dynarec/rv64/dynarec_rv64_f0.c b/src/dynarec/rv64/dynarec_rv64_f0.c index 190ce101a258ba065dbe67f4574731f81a2bf3ca..3e504ca6f0ba15c3a497653cb433962a6695f4fd 100644 --- a/src/dynarec/rv64/dynarec_rv64_f0.c +++ b/src/dynarec/rv64/dynarec_rv64_f0.c @@ -49,7 +49,7 @@ uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni GETREX(); - // TODO: Add support for unligned memory access for all the LOCK ones. + // TODO: Add support for unaligned memory access for all the LOCK ones. // TODO: Add support for BOX4_DYNAREC_ALIGNED_ATOMICS. switch(opcode) { @@ -287,6 +287,9 @@ uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0: if (rex.w) { INST_NAME("LOCK CMPXCHG16B Gq, Eq"); + static int warned = 0; + PASS3(if (!warned) dynarec_log(LOG_INFO, "Warning, LOCK CMPXCHG16B is not well supported on RISC-V and issues are expected.\n")); + warned = 1; } else { INST_NAME("LOCK CMPXCHG8B Gq, Eq"); } @@ -299,17 +302,19 @@ uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni LD(x9, xEmu, offsetof(x64emu_t, context)); ADDI(x9, x9, offsetof(box64context_t, mutex_16b)); ADDI(x4, xZR, 1); - MARKLOCK; + MARK2; AMOSWAP_W(x4, x4, x9, 1, 1); // x4 == 1 if locked - BNEZ_MARKLOCK(x4); + BNEZ_MARK2(x4); SMDMB(); - LD(x2, wback, 0); LD(x3, wback, 8); + MARKLOCK; + LR_D(x2, wback, 1, 1); BNE_MARK(x2, xRAX); BNE_MARK(x3, xRDX); - SD(xRBX, wback, 0); + SC_D(x5, xRBX, wback, 1, 1); + BNEZ_MARKLOCK(x5); SD(xRCX, wback, 8); ORI(xFlags, xFlags, 1<> 3) + (rex.r << 3); + if (MODREG && gd == (nextop & 7) + (rex.b << 3)) { + v0 = sse_get_reg_size_changed(dyn, ninst, x2, gd, 1); + FCVTSD(v0, v0); + } else { + GETEXSD(v1, 0); + GETGXSS_empty(v0); + FCVTSD(v0, v1); + } break; case 0x5C: INST_NAME("SUBSD Gx, Ex"); @@ -312,7 +318,7 @@ uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("PSHUFLW Gx, Ex, Ib"); nextop = F8; GETGX(); - GETEX(x2, 1); + GETEX(x2, 1, 8); u8 = F8; int32_t idx; @@ -339,7 +345,7 @@ uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("HADDPS Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); s0 = fpu_get_scratch(dyn); s1 = fpu_get_scratch(dyn); // GX->f[0] += GX->f[1]; @@ -416,11 +422,42 @@ uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int NEG(x2, x2); FMVDX(d0, x2); break; + case 0xD0: + INST_NAME("ADDSUBPS Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 12); + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + // GX->f[0] -= EX->f[0]; + FLW(d0, wback, fixedaddress + 0); + FLW(d1, gback, gdoffset + 0); + FSUBS(d1, d1, d0); + FSW(d1, gback, gdoffset + 0); + + // GX->f[1] += EX->f[1]; + FLW(d0, wback, fixedaddress + 4); + FLW(d1, gback, gdoffset + 4); + FADDS(d1, d1, d0); + FSW(d1, gback, gdoffset + 4); + + // GX->f[2] -= EX->f[2]; + FLW(d0, wback, fixedaddress + 8); + FLW(d1, gback, gdoffset + 8); + FSUBS(d1, d1, d0); + FSW(d1, gback, gdoffset + 8); + + // GX->f[3] += EX->f[3]; + FLW(d0, wback, fixedaddress + 12); + FLW(d1, gback, gdoffset + 12); + FADDS(d1, d1, d0); + FSW(d1, gback, gdoffset + 12); + break; case 0xE6: INST_NAME("CVTPD2DQ Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); d0 = fpu_get_scratch(dyn); u8 = sse_setround(dyn, ninst, x6, x4); for (int i=0; i<2 ; ++i) { @@ -438,7 +475,7 @@ uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("LDDQU Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_MV_Q(x3); break; default: diff --git a/src/dynarec/rv64/dynarec_rv64_f20f_vector.c b/src/dynarec/rv64/dynarec_rv64_f20f_vector.c new file mode 100644 index 0000000000000000000000000000000000000000..78c224e7aab460c59438b4eddacc45cb733202c6 --- /dev/null +++ b/src/dynarec/rv64/dynarec_rv64_f20f_vector.c @@ -0,0 +1,658 @@ +#include +#include +#include +#include + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" + +#include "rv64_printer.h" +#include "dynarec_rv64_private.h" +#include "dynarec_rv64_functions.h" +#include "dynarec_rv64_helper.h" + +uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog) +{ + (void)ip; + (void)need_epilog; + + uint8_t opcode = F8; + uint8_t nextop; + uint8_t gd, ed; + uint8_t wb1, wback, wb2, gback; + uint8_t u8; + uint64_t u64, j64; + int v0, v1; + int q0, q1; + int d0, d1; + int s0, s1; + uint64_t tmp64u0, tmp64u1; + int64_t fixedaddress, gdoffset; + int unscaled; + + MAYUSE(d0); + MAYUSE(d1); + MAYUSE(q0); + MAYUSE(v0); + MAYUSE(v1); + + switch (opcode) { + case 0x10: + INST_NAME("MOVSD Gx, Ex"); + nextop = F8; + GETG; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + v0 = sse_get_reg_vector(dyn, ninst, x1, gd, 1, VECTOR_SEW64); + v1 = sse_get_reg_vector(dyn, ninst, x1, ed, 0, VECTOR_SEW64); + if (rv64_xtheadvector) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v0, v0, v1); // implies VMASK + } else { + VMV_X_S(x4, v1); + VMV_S_X(v0, x4); + } + } else { + SMREAD(); + v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + if (!rv64_xtheadvector) VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + VMV_S_X(v0, x4); + } + break; + case 0x11: + INST_NAME("MOVSD Ex, Gx"); + nextop = F8; + GETG; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + v0 = sse_get_reg_vector(dyn, ninst, x1, gd, 0, VECTOR_SEW64); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + d0 = sse_get_reg_vector(dyn, ninst, x1, ed, 1, VECTOR_SEW64); + if (rv64_xtheadvector) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v0, v0, v1); // implies VMASK + } else { + VMV_X_S(x4, v1); + VMV_S_X(v0, x4); + } + } else { + VMV_X_S(x4, v0); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + SD(x4, ed, fixedaddress); + SMWRITE2(); + } + break; + case 0x12: + INST_NAME("MOVDDUP Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + GETGX_empty_vector(v0); + VMV_X_S(x4, v1); + } else { + SMREAD(); + GETGX_empty_vector(v0); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + } + VMV_V_X(v0, x4); + break; + case 0x2A: + INST_NAME("CVTSI2SD Gx, Ed"); + nextop = F8; + if (rex.w) { + SET_ELEMENT_WIDTH(x3, VECTOR_SEW64, 1); + GETGX_vector(v0, 1, VECTOR_SEW64); + GETED(0); + FCVTDL(v0, ed, RD_RNE); + } else { + SET_ELEMENT_WIDTH(x3, VECTOR_SEW32, 1); + GETGX_vector(v0, 1, VECTOR_SEW32); + GETED(0); + FCVTDW(v0, ed, RD_RNE); + SET_ELEMENT_WIDTH(x3, VECTOR_SEW64, 1); + } + if (rv64_xtheadvector) { + v1 = fpu_get_scratch(dyn); + VFMV_S_F(v1, v0); + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v0, v0, v1); // implies VMASK + } else { + VFMV_S_F(v0, v0); + } + break; + case 0x2C: + INST_NAME("CVTTSD2SI Gd, Ex"); + nextop = F8; + GETGD; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + v0 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, dyn->vector_eew); + } else { + SMREAD(); + v0 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v0, x4); + } + if (box64_dynarec_fastround) { + VFMV_F_S(v0, v0); + FCVTLDxw(gd, v0, RD_RTZ); + if (!rex.w) ZEROUP(gd); + } else { + VFMV_F_S(v0, v0); + FSFLAGSI(0); // // reset all bits + FCVTLDxw(gd, v0, RD_RTZ); + if (!rex.w) ZEROUP(gd); + FRFLAGS(x5); // get back FPSR to check the IOC bit + ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); + CBZ_NEXT(x5); + if (rex.w) { + MOV64x(gd, 0x8000000000000000LL); + } else { + MOV32w(gd, 0x80000000); + } + } + break; + case 0x2D: + INST_NAME("CVTSD2SI Gd, Ex"); + nextop = F8; + GETGD; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + v0 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, dyn->vector_eew); + } else { + SMREAD(); + v0 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v0, x4); + } + if (box64_dynarec_fastround) { + VFMV_F_S(v0, v0); + u8 = sse_setround(dyn, ninst, x2, x3); + FCVTLDxw(gd, v0, RD_DYN); + if (!rex.w) ZEROUP(gd); + x87_restoreround(dyn, ninst, u8); + } else { + VFMV_F_S(v0, v0); + FSFLAGSI(0); // // reset all bits + u8 = sse_setround(dyn, ninst, x2, x3); + FCVTLDxw(gd, v0, RD_DYN); + if (!rex.w) ZEROUP(gd); + x87_restoreround(dyn, ninst, u8); + FRFLAGS(x5); // get back FPSR to check the IOC bit + ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); + CBZ_NEXT(x5); + if (rex.w) { + MOV64x(gd, 0x8000000000000000LL); + } else { + MOV32w(gd, 0x80000000); + } + } + break; + case 0x38: + return 0; + case 0x51: + INST_NAME("SQRTSD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW64); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + GETGX_vector(v0, 1, VECTOR_SEW64); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + } + if (box64_dynarec_fastnan) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VFSQRT_V(v0, v1, VECTOR_MASKED); + } else { + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + VFSQRT_V(d1, v1, VECTOR_UNMASKED); + FMVDX(d0, xZR); + VMFLT_VF(VMASK, v1, d0, VECTOR_UNMASKED); + VFSGNJN_VV(d1, d1, d1, VECTOR_MASKED); + if (rv64_xtheadvector) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v0, v0, d1); // implies VMASK + } else { + VMV_X_S(x4, d1); + VMV_S_X(v0, x4); + } + } + break; + case 0x58: + INST_NAME("ADDSD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW64); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW64); + } + if (box64_dynarec_fastnan) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VFADD_VV(v0, v0, v1, VECTOR_MASKED); + } else { + VFMV_F_S(v0, v0); + VFMV_F_S(v1, v1); + FEQD(x3, v0, v0); + FEQD(x4, v1, v1); + FADDD(v0, v0, v1); + AND(x3, x3, x4); + BEQZ_MARK(x3); + FEQD(x3, v0, v0); + BNEZ_MARK(x3); + FNEGD(v0, v0); + MARK; + if (rv64_xtheadvector) { + d0 = fpu_get_scratch(dyn); + VFMV_S_F(d0, v0); + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v0, v0, d0); // implies VMASK + } else { + VFMV_S_F(v0, v0); + } + } + break; + case 0x59: + INST_NAME("MULSD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW64); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW64); + } + if (box64_dynarec_fastnan) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VFMUL_VV(v0, v0, v1, VECTOR_MASKED); + } else { + VFMV_F_S(v0, v0); + VFMV_F_S(v1, v1); + FEQD(x3, v0, v0); + FEQD(x4, v1, v1); + FMULD(v0, v0, v1); + AND(x3, x3, x4); + BEQZ_MARK(x3); + FEQD(x3, v0, v0); + BNEZ_MARK(x3); + FNEGD(v0, v0); + MARK; + if (rv64_xtheadvector) { + d0 = fpu_get_scratch(dyn); + VFMV_S_F(d0, v0); + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v0, v0, d0); // implies VMASK + } else { + VFMV_S_F(v0, v0); + } + } + break; + case 0x5A: + INST_NAME("CVTSD2SS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW64); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + v1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW64); + } + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + VECTOR_LOAD_VMASK(0b0001, x4, 1); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + if (v1 & 1 || v0 == v1) { + d1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VMV_V_V(d1, v1); + if (rv64_xtheadvector) { + VFNCVT_F_F_W(d0, d1, VECTOR_MASKED); + VMERGE_VVM(v0, v0, d0); // implies VMASK + } else { + VFNCVT_F_F_W(v0, d1, VECTOR_MASKED); + } + } else { + if (rv64_xtheadvector) { + VFNCVT_F_F_W(d0, v1, VECTOR_MASKED); + VMERGE_VVM(v0, v0, d0); // implies VMASK + } else { + VFNCVT_F_F_W(v0, v1, VECTOR_MASKED); + } + } + break; + case 0x5C: + INST_NAME("SUBSD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW64); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW64); + } + if (box64_dynarec_fastnan) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VFSUB_VV(v0, v0, v1, VECTOR_MASKED); + } else { + VFMV_F_S(v0, v0); + VFMV_F_S(v1, v1); + FEQD(x3, v0, v0); + FEQD(x4, v1, v1); + FSUBD(v0, v0, v1); + AND(x3, x3, x4); + BEQZ_MARK(x3); + FEQD(x3, v0, v0); + BNEZ_MARK(x3); + FNEGD(v0, v0); + MARK; + if (rv64_xtheadvector) { + d0 = fpu_get_scratch(dyn); + VFMV_S_F(d0, v0); + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v0, v0, d0); // implies VMASK + } else { + VFMV_S_F(v0, v0); + } + } + break; + case 0x5D: + INST_NAME("MINSD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW64); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW64); + } + if (box64_dynarec_fastnan) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VFMIN_VV(v0, v0, v1, VECTOR_MASKED); + } else { + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + VFMV_F_S(d0, v0); + VFMV_F_S(d1, v1); + FEQD(x2, d0, d0); + FEQD(x3, d1, d1); + AND(x2, x2, x3); + BEQ_MARK(x2, xZR); + FLED(x2, d1, d0); + BEQ_MARK2(x2, xZR); + MARK; + FMVD(d0, d1); + MARK2; + if (rv64_xtheadvector) { + VFMV_S_F(d0, d0); + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VMERGE_VVM(v0, v0, d0); // implies VMASK + } else { + VFMV_S_F(v0, d0); + } + } + break; + case 0x5E: + INST_NAME("DIVSD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW64); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW64); + } + if (!box64_dynarec_fastnan) { + VFMV_F_S(v0, v0); + VFMV_F_S(v1, v1); + FEQD(x3, v0, v0); + FEQD(x4, v1, v1); + FDIVD(v0, v0, v1); + AND(x3, x3, x4); + BEQZ_MARK(x3); + FEQD(x3, v0, v0); + BNEZ_MARK(x3); + FNEGD(v0, v0); + MARK; + if (rv64_xtheadvector) { + d0 = fpu_get_scratch(dyn); + VFMV_S_F(d0, v0); + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(v0, v0, d0); // implies VMASK + } else { + VFMV_S_F(v0, v0); + } + } else { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VFDIV_VV(v0, v0, v1, VECTOR_MASKED); + } + break; + case 0x5F: + INST_NAME("MAXSD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW64); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW64); + } + if (box64_dynarec_fastnan) { + VECTOR_LOAD_VMASK(0b01, x4, 1); + VFMAX_VV(v0, v0, v1, VECTOR_MASKED); + } else { + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + VFMV_F_S(d0, v0); + VFMV_F_S(d1, v1); + FEQD(x2, d0, d0); + FEQD(x3, d1, d1); + AND(x2, x2, x3); + BEQ_MARK(x2, xZR); + FLED(x2, d0, d1); + BEQ_MARK2(x2, xZR); + MARK; + FMVD(d0, d1); + MARK2; + if (rv64_xtheadvector) { + VFMV_S_F(d0, d0); + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VMERGE_VVM(v0, v0, d0); // implies VMASK + } else { + VFMV_S_F(v0, d0); + } + } + break; + case 0x70: + INST_NAME("PSHUFLW Gx, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETEX_vector(v1, 0, 1, VECTOR_SEW16); + GETGX_vector(v0, 1, VECTOR_SEW16); + u8 = F8; + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); + tmp64u0 = 0x0007000600050004ULL; + MOV64x(x5, tmp64u0); + VMV_S_X(d1, x5); + tmp64u0 = ((((uint64_t)u8 >> 6) & 3) << 48) | ((((uint64_t)u8 >> 4) & 3) << 32) | (((u8 >> 2) & 3) << 16) | (u8 & 3); + MOV64x(x5, tmp64u0); + VSLIDE1UP_VX(d0, d1, x5, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 1); + if (v0 == v1) { + v1 = fpu_get_scratch(dyn); + VMV_V_V(v1, v0); + } + VRGATHER_VV(v0, v1, d0, VECTOR_UNMASKED); + break; + case 0x7C: + INST_NAME("HADDPS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETGX_vector(q0, 1, VECTOR_SEW32); + GETEX_vector(q1, 0, 0, VECTOR_SEW32); + v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VMV_V_V(v0, q0); + if (q1 & 1) VMV_V_V(d1, q1); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL2, 2); + VSLIDEUP_VI(v0, (q1 & 1) ? d1 : q1, 4, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 1); + ADDI(x4, xZR, 32); + VNSRL_WX(d0, v0, xZR, VECTOR_UNMASKED); + VNSRL_WX(d1, v0, x4, VECTOR_UNMASKED); + VFADD_VV(q0, d1, d0, VECTOR_UNMASKED); + break; + case 0xC2: + INST_NAME("CMPSD Gx, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + GETGX_vector(d0, 1, VECTOR_SEW64); + d1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + d1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 1); + LD(x4, ed, fixedaddress); + VMV_S_X(d1, x4); + GETGX_vector(d0, 1, VECTOR_SEW64); + } + u8 = F8; + VFMV_F_S(d0, d0); + VFMV_F_S(d1, d1); + if ((u8 & 7) == 0) { // Equal + FEQD(x2, d0, d1); + } else if ((u8 & 7) == 4) { // Not Equal or unordered + FEQD(x2, d0, d1); + XORI(x2, x2, 1); + } else { + // x2 = !(isnan(d0) || isnan(d1)) + FEQD(x3, d0, d0); + FEQD(x2, d1, d1); + AND(x2, x2, x3); + switch (u8 & 7) { + case 1: + BEQ_MARK(x2, xZR); + FLTD(x2, d0, d1); + break; // Less than + case 2: + BEQ_MARK(x2, xZR); + FLED(x2, d0, d1); + break; // Less or equal + case 3: XORI(x2, x2, 1); break; // NaN + case 5: { // Greater or equal or unordered + BEQ_MARK2(x2, xZR); + FLED(x2, d1, d0); + B_MARK_nocond; + break; + } + case 6: { // Greater or unordered, test inverted, N!=V so unordered or less than (inverted) + BEQ_MARK2(x2, xZR); + FLTD(x2, d1, d0); + B_MARK_nocond; + break; + } + case 7: break; // Not NaN + } + + MARK2; + if ((u8 & 7) == 5 || (u8 & 7) == 6) { + MOV32w(x2, 1); + } + MARK; + } + NEG(x2, x2); + if (rv64_xtheadvector) { + v0 = fpu_get_scratch(dyn); + VMV_S_X(v0, x2); + VECTOR_LOAD_VMASK(0b01, x4, 1); + VMERGE_VVM(d0, d0, v0); // implies VMASK + } else { + VMV_S_X(d0, x2); + } + break; + case 0xE6: + if (!box64_dynarec_fastround) return 0; + INST_NAME("CVTPD2DQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + GETEX_vector(v1, 0, 0, VECTOR_SEW64); + GETGX_empty_vector(v0); + if (v1 & 1) { + d1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VMV_V_V(d1, v1); + } else { + d1 = v1; + } + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VFNCVT_X_F_W(d0, d1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); + if (!rv64_xtheadvector) VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + VMV_X_S(x4, d0); + VMV_S_X(v0, x4); + break; + default: DEFAULT_VECTOR; + } + return addr; +} diff --git a/src/dynarec/rv64/dynarec_rv64_f30f.c b/src/dynarec/rv64/dynarec_rv64_f30f.c index bebcc55146a3d17e9b16066ab559bbb9d139286f..67305342fccd09a815e2858d5f4995bcc5f978b3 100644 --- a/src/dynarec/rv64/dynarec_rv64_f30f.c +++ b/src/dynarec/rv64/dynarec_rv64_f30f.c @@ -59,7 +59,7 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int } else { v0 = sse_get_reg_empty(dyn, ninst, x1, gd, 1); SMREAD(); - addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 8, 0); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); FLW(v0, ed, fixedaddress); // reset upper part SW(xZR, xEmu, offsetof(x64emu_t, xmm[gd]) + 4); @@ -85,7 +85,7 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("MOVSLDUP Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); // GX->ud[1] = GX->ud[0] = EX->ud[0]; // GX->ud[3] = GX->ud[2] = EX->ud[2]; @@ -100,7 +100,7 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("MOVSHDUP Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 12); // GX->ud[1] = GX->ud[0] = EX->ud[1]; // GX->ud[3] = GX->ud[2] = EX->ud[3]; @@ -216,14 +216,52 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGXSS(v0); GETEXSS(d0, 0); + if (!box64_dynarec_fastnan) { + FEQS(x3, v0, v0); + FEQS(x4, d0, d0); + } FMULS(v0, v0, d0); + if (!box64_dynarec_fastnan) { + AND(x3, x3, x4); + CBZ_NEXT(x3); + FEQS(x3, v0, v0); + CBNZ_NEXT(x3); + FNEGS(v0, v0); + } break; case 0x5A: INST_NAME("CVTSS2SD Gx, Ex"); nextop = F8; + gd = ((nextop & 0x38) >> 3) + (rex.r << 3); GETEXSS(v1, 0); - GETGXSD_empty(v0); - FCVTDS(v0, v1); + if (MODREG && gd == (nextop & 7) + (rex.b << 3)) { + v0 = sse_get_reg_size_changed(dyn, ninst, x2, gd, 0); + FCVTDS(v0, v0); + } else { + GETGXSD_empty(v0); + FCVTDS(v0, v1); + } + break; + case 0x5B: + INST_NAME("CVTTPS2DQ Gx, Ex"); + nextop = F8; + GETGX(); + GETEX(x2, 0, 12); + v0 = fpu_get_scratch(dyn); + for (int i = 0; i < 4; ++i) { + if (!box64_dynarec_fastround) { + FSFLAGSI(0); // reset all bits + } + FLW(v0, wback, fixedaddress + i * 4); + FCVTWS(x3, v0, RD_RTZ); + if (!box64_dynarec_fastround) { + FRFLAGS(x5); // get back FPSR to check the IOC bit + ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); + BEQZ(x5, 8); + MOV32w(x3, 0x80000000); + } + SW(x3, gback, gdoffset + i * 4); + } break; case 0x5C: INST_NAME("SUBSS Gx, Ex"); @@ -273,14 +311,14 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("MOVDQU Gx,Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_MV_Q(x3); break; case 0x70: // TODO: Optimize this! INST_NAME("PSHUFHW Gx, Ex, Ib"); nextop = F8; GETGX(); - GETEX(x2, 1); + GETEX(x2, 1, 14); u8 = F8; int32_t idx; @@ -323,30 +361,35 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("MOVDQU Ex,Gx"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 8); SSE_LOOP_MV_Q2(x3); if (!MODREG) SMWRITE2(); break; - - case 0x5B: - INST_NAME("CVTTPS2DQ Gx, Ex"); + case 0xAE: nextop = F8; - GETGX(); - GETEX(x2, 0); - v0 = fpu_get_scratch(dyn); - for (int i = 0; i < 4; ++i) { - if (!box64_dynarec_fastround) { - FSFLAGSI(0); // reset all bits - } - FLW(v0, wback, fixedaddress + i * 4); - FCVTWS(x3, v0, RD_RTZ); - if (!box64_dynarec_fastround) { - FRFLAGS(x5); // get back FPSR to check the IOC bit - ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); - BEQZ(x5, 8); - MOV32w(x3, 0x80000000); - } - SW(x3, gback, gdoffset + i * 4); + switch ((nextop >> 3) & 7) { + case 2: + INST_NAME("(unsupported) WRFSBASE Ed"); + FAKEED; + UDF(); + break; + case 3: + INST_NAME("(unsupported) WRGSBASE Ed"); + FAKEED; + UDF(); + break; + case 5: + INST_NAME("(unsupported) INCSSPD/INCSSPQ Ed"); + FAKEED; + UDF(); + break; + case 6: + INST_NAME("(unsupported) UMONITOR Ed"); + FAKEED; + UDF(); + break; + default: + DEFAULT; } break; case 0xB8: @@ -491,7 +534,7 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("CVTDQ2PD Gx, Ex"); nextop = F8; GETGX(); - GETEX(x2, 0); + GETEX(x2, 0, 4); q0 = fpu_get_scratch(dyn); q1 = fpu_get_scratch(dyn); LW(x3, wback, fixedaddress + 0); diff --git a/src/dynarec/rv64/dynarec_rv64_f30f_vector.c b/src/dynarec/rv64/dynarec_rv64_f30f_vector.c new file mode 100644 index 0000000000000000000000000000000000000000..ae7c02e27339b1536f22736bf819ab6722a634c0 --- /dev/null +++ b/src/dynarec/rv64/dynarec_rv64_f30f_vector.c @@ -0,0 +1,673 @@ +#include +#include +#include +#include + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" +#include "bitutils.h" + +#include "rv64_printer.h" +#include "dynarec_rv64_private.h" +#include "dynarec_rv64_functions.h" +#include "dynarec_rv64_helper.h" + +uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog) +{ + (void)ip; + (void)need_epilog; + + uint8_t opcode = F8; + uint8_t nextop, u8; + uint8_t gd, ed; + uint8_t wback, gback; + uint64_t u64; + int v0, v1; + int q0, q1; + int d0, d1; + uint64_t tmp64u0, tmp64u1; + int64_t fixedaddress, gdoffset; + int unscaled; + int64_t j64; + + MAYUSE(d0); + MAYUSE(d1); + MAYUSE(q0); + MAYUSE(q1); + MAYUSE(v0); + MAYUSE(v1); + MAYUSE(j64); + + switch (opcode) { + case 0x10: + INST_NAME("MOVSS Gx, Ex"); + nextop = F8; + GETG; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + v0 = sse_get_reg_vector(dyn, ninst, x1, gd, 1, VECTOR_SEW32); + v1 = sse_get_reg_vector(dyn, ninst, x1, ed, 0, VECTOR_SEW32); + if (rv64_xtheadvector) { + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VMERGE_VVM(v0, v0, v1); // implies VMASK + } else { + VMV_X_S(x4, v1); + VMV_S_X(v0, x4); + } + } else { + SMREAD(); + v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LWU(x4, ed, fixedaddress); + VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + VMV_S_X(v0, x4); + } + break; + case 0x11: + INST_NAME("MOVSS Ex, Gx"); + nextop = F8; + GETG; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + v0 = sse_get_reg_vector(dyn, ninst, x1, gd, 0, VECTOR_SEW32); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + d0 = sse_get_reg_vector(dyn, ninst, x1, ed, 1, VECTOR_SEW32); + if (rv64_xtheadvector) { + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VMERGE_VVM(v0, v0, v1); // implies VMASK + } else { + VMV_X_S(x4, v1); + VMV_S_X(v0, x4); + } + } else { + VMV_X_S(x4, v0); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + SW(x4, ed, fixedaddress); + SMWRITE2(); + } + break; + case 0x12: + INST_NAME("MOVSLDUP Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + q1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 0, 0); + q1 = fpu_get_scratch(dyn); + VLE32_V(q1, ed, VECTOR_UNMASKED, VECTOR_NFIELD1); + } + GETGX_empty_vector(q0); + ADDI(x4, xZR, 32); + v0 = fpu_get_scratch(dyn); + VSLL_VX(q0, q1, x4, VECTOR_UNMASKED); + VSRL_VX(v0, q0, x4, VECTOR_UNMASKED); + VOR_VV(q0, q0, v0, VECTOR_UNMASKED); + break; + case 0x16: + INST_NAME("MOVSHDUP Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + q1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + } else { + SMREAD(); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 0, 0); + q1 = fpu_get_scratch(dyn); + VLE32_V(q1, ed, VECTOR_UNMASKED, VECTOR_NFIELD1); + } + GETGX_empty_vector(q0); + ADDI(x4, xZR, 32); + v0 = fpu_get_scratch(dyn); + VSRL_VX(q0, q1, x4, VECTOR_UNMASKED); + VSLL_VX(v0, q0, x4, VECTOR_UNMASKED); + VOR_VV(q0, q0, v0, VECTOR_UNMASKED); + break; + case 0x1E: + return 0; + case 0x2A: + INST_NAME("CVTSI2SS Gx, Ed"); + nextop = F8; + if (rex.w) { + SET_ELEMENT_WIDTH(x3, VECTOR_SEW64, 1); + GETGX_vector(v0, 1, VECTOR_SEW64); + GETED(0); + FCVTSL(v0, ed, RD_RNE); + SET_ELEMENT_WIDTH(x3, VECTOR_SEW32, 1); + } else { + SET_ELEMENT_WIDTH(x3, VECTOR_SEW32, 1); + GETGX_vector(v0, 1, VECTOR_SEW32); + GETED(0); + FCVTSW(v0, ed, RD_RNE); + } + if (rv64_xtheadvector) { + v1 = fpu_get_scratch(dyn); + VFMV_S_F(v1, v0); + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VMERGE_VVM(v0, v0, v1); // implies VMASK + } else { + VFMV_S_F(v0, v0); + } + break; + case 0x2C: + INST_NAME("CVTTSS2SI Gd, Ex"); + nextop = F8; + GETGD; + SET_ELEMENT_WIDTH(x3, VECTOR_SEW32, 1); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + d0 = sse_get_reg_vector(dyn, ninst, x1, ed, 0, VECTOR_SEW32); + VFMV_F_S(d0, d0); + } else { + GETEXSS(d0, 0); + } + if (!box64_dynarec_fastround) FSFLAGSI(0); + FCVTSxw(gd, d0, RD_RTZ); + if (!rex.w) ZEROUP(gd); + if (!box64_dynarec_fastround) { + FRFLAGS(x5); + ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); + CBZ_NEXT(x5); + if (rex.w) { + MOV64x(gd, 0x8000000000000000LL); + } else { + MOV32w(gd, 0x80000000); + } + } + break; + case 0x2D: + INST_NAME("CVTSS2SI Gd, Ex"); + nextop = F8; + GETGD; + SET_ELEMENT_WIDTH(x3, VECTOR_SEW32, 1); + if (MODREG) { + ed = (nextop & 7) + (rex.b << 3); + d0 = sse_get_reg_vector(dyn, ninst, x1, ed, 0, VECTOR_SEW32); + VFMV_F_S(d0, d0); + } else { + GETEXSS(d0, 0); + } + if (!box64_dynarec_fastround) FSFLAGSI(0); + u8 = sse_setround(dyn, ninst, x5, x6); + FCVTSxw(gd, d0, RD_DYN); + x87_restoreround(dyn, ninst, u8); + if (!rex.w) ZEROUP(gd); + if (!box64_dynarec_fastround) { + FRFLAGS(x5); + ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); + CBZ_NEXT(x5); + if (rex.w) { + MOV64x(gd, 0x8000000000000000LL); + } else { + MOV32w(gd, 0x80000000); + } + } + break; + case 0x38: + return 0; + case 0x51: + INST_NAME("SQRTSS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW32); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW32); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LWU(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW32); + } + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VFSQRT_V(v0, v1, VECTOR_MASKED); + break; + case 0x52: + INST_NAME("RSQRTSS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW32); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW32); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LWU(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW32); + } + LUI(x4, 0x3f800); + FMVWX(v1, x4); // 1.0f + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VFSQRT_V(v0, v1, VECTOR_MASKED); + VFRDIV_VF(v0, v0, v1, VECTOR_MASKED); + break; + case 0x53: + INST_NAME("RCPSS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW32); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW32); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LWU(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW32); + } + LUI(x4, 0x3f800); + FMVWX(v1, x4); // 1.0f + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VFRDIV_VF(v0, v1, v1, VECTOR_MASKED); + break; + case 0x58: + INST_NAME("ADDSS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW32); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW32); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LWU(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW32); + } + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VFADD_VV(v0, v0, v1, VECTOR_MASKED); + break; + case 0x59: + INST_NAME("MULSS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW32); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW32); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LWU(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW32); + } + if (box64_dynarec_fastnan) { + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VFMUL_VV(v0, v0, v1, VECTOR_MASKED); + } else { + VFMV_F_S(v0, v0); + VFMV_F_S(v1, v1); + FEQS(x3, v0, v0); + FEQS(x4, v1, v1); + FMULS(v0, v0, v1); + AND(x3, x3, x4); + BEQZ_MARK(x3); + FEQS(x3, v0, v0); + BNEZ_MARK(x3); + FNEGS(v0, v0); + MARK; + if (rv64_xtheadvector) { + d0 = fpu_get_scratch(dyn); + VFMV_S_F(d0, v0); + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VMERGE_VVM(v0, v0, d0); // implies VMASK + } else { + VFMV_S_F(v0, v0); + } + } + break; + case 0x5A: + INST_NAME("CVTSS2SD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW32); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW32); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LWU(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW32); + } + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VFWCVT_F_F_V(d0, v1, VECTOR_MASKED); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (rv64_xtheadvector) { + VMERGE_VVM(v0, v0, d0); // implies VMASK + } else { + VMV_X_S(x4, d0); + VMV_S_X(v0, x4); + } + break; + case 0x5B: + if (!box64_dynarec_fastround) return 0; + INST_NAME("CVTTPS2DQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + GETEX_vector(v1, 0, 0, VECTOR_SEW32); + GETGX_empty_vector(v0); + if (rv64_xtheadvector) { + ADDI(x4, xZR, 1); // RTZ + FSRM(x4, x4); + VFCVT_X_F_V(v0, v1, VECTOR_UNMASKED); + FSRM(xZR, x4); + } else { + VFCVT_RTZ_X_F_V(v0, v1, VECTOR_UNMASKED); + } + break; + case 0x5C: + INST_NAME("SUBSS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW32); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW32); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LWU(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW32); + } + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VFSUB_VV(v0, v0, v1, VECTOR_MASKED); + break; + case 0x5D: + INST_NAME("MINSS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW32); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW32); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LWU(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW32); + } + if (box64_dynarec_fastnan) { + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VFMIN_VV(v0, v0, v1, VECTOR_MASKED); + } else { + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + VFMV_F_S(d0, v0); + VFMV_F_S(d1, v1); + FEQS(x2, d0, d0); + FEQS(x3, d1, d1); + AND(x2, x2, x3); + BEQ_MARK(x2, xZR); + FLES(x2, d1, d0); + BEQ_MARK2(x2, xZR); + MARK; + FMVS(d0, d1); + MARK2; + if (rv64_xtheadvector) { + VFMV_S_F(d0, d0); + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VMERGE_VVM(v0, v0, d0); // implies VMASK + } else { + VFMV_S_F(v0, d0); + } + } + break; + case 0x5E: + INST_NAME("DIVSS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW32); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW32); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LWU(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW32); + } + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VFDIV_VV(v0, v0, v1, VECTOR_MASKED); + break; + case 0x5F: + INST_NAME("MAXSS Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (MODREG) { + GETGX_vector(v0, 1, VECTOR_SEW32); + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW32); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LWU(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_vector(v0, 1, VECTOR_SEW32); + } + if (box64_dynarec_fastnan) { + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VFMAX_VV(v0, v0, v1, VECTOR_MASKED); + } else { + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + VFMV_F_S(d0, v0); + VFMV_F_S(d1, v1); + FEQS(x2, d0, d0); + FEQS(x3, d1, d1); + AND(x2, x2, x3); + BEQ_MARK(x2, xZR); + FLES(x2, d0, d1); + BEQ_MARK2(x2, xZR); + MARK; + FMVS(d0, d1); + MARK2; + if (rv64_xtheadvector) { + VFMV_S_F(d0, d0); + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VMERGE_VVM(v0, v0, d0); // implies VMASK + } else { + VFMV_S_F(v0, d0); + } + } + break; + case 0x6F: + INST_NAME("MOVDQU Gx, Ex"); + nextop = F8; + GETG; + if (MODREG) { + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + ed = (nextop & 7) + (rex.b << 3); + v1 = sse_get_reg_vector(dyn, ninst, x1, ed, 0, dyn->vector_eew); + v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); + VMV_V_V(v0, v1); + } else { + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); // unaligned! + SMREAD(); + v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VLE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + } + break; + case 0x70: + INST_NAME("PSHUFHW Gx, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + GETEX_vector(v1, 0, 1, VECTOR_SEW16); + GETGX_vector(v0, 1, VECTOR_SEW16); + u8 = F8; + d0 = fpu_get_scratch(dyn); + d1 = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); + tmp64u0 = ((((uint64_t)u8 >> 6) & 3) << 48) | ((((uint64_t)u8 >> 4) & 3) << 32) | (((u8 >> 2) & 3) << 16) | (u8 & 3); + tmp64u0 += 0x0004000400040004ULL; + MOV64x(x5, tmp64u0); + VMV_S_X(d1, x5); + tmp64u0 = 0x0003000200010000ULL; + MOV64x(x5, tmp64u0); + VSLIDE1UP_VX(d0, d1, x5, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW16, VECTOR_LMUL1, 1); + if (v0 == v1) { + v1 = fpu_get_scratch(dyn); + VMV_V_V(v1, v0); + } + VRGATHER_VV(v0, v1, d0, VECTOR_UNMASKED); + break; + case 0x7E: + INST_NAME("MOVQ Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + GETEX_vector(v1, 0, 0, VECTOR_SEW64); + GETGX_empty_vector(v0); + VMV_X_S(x4, v1); + } else { + SMREAD(); + GETGX_empty_vector(v0); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + } + if (!rv64_xtheadvector) VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); + VMV_S_X(v0, x4); + break; + case 0x7F: + INST_NAME("MOVDQU Ex, Gx"); + nextop = F8; + if (MODREG) { + SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1); + GETGX_vector(v0, 0, dyn->vector_eew); + ed = (nextop & 7) + (rex.b << 3); + v1 = sse_get_reg_empty_vector(dyn, ninst, x1, ed); + VMV_V_V(v1, v0); + } else { + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); // unaligned! + GETGX_vector(v0, 0, dyn->vector_eew); + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0); + VSE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + SMWRITE2(); + } + break; + case 0xAE: + case 0xB8: + case 0xBC: + case 0xBD: + return 0; + case 0xC2: + INST_NAME("CMPSS Gx, Ex, Ib"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + if (MODREG) { + GETGX_vector(d0, 1, VECTOR_SEW32); + d1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW32); + } else { + SMREAD(); + d1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 1); + LWU(x4, ed, fixedaddress); + VXOR_VV(d1, d1, d1, VECTOR_UNMASKED); + VMV_S_X(d1, x4); + GETGX_vector(d0, 1, VECTOR_SEW32); + } + u8 = F8; + VFMV_F_S(d0, d0); + VFMV_F_S(d1, d1); + if ((u8 & 7) == 0) { // Equal + FEQS(x2, d0, d1); + } else if ((u8 & 7) == 4) { // Not Equal or unordered + FEQS(x2, d0, d1); + XORI(x2, x2, 1); + } else { + // x2 = !(isnan(d0) || isnan(d1)) + FEQS(x3, d0, d0); + FEQS(x2, d1, d1); + AND(x2, x2, x3); + switch (u8 & 7) { + case 1: + BEQ_MARK(x2, xZR); + FLTS(x2, d0, d1); + break; // Less than + case 2: + BEQ_MARK(x2, xZR); + FLES(x2, d0, d1); + break; // Less or equal + case 3: XORI(x2, x2, 1); break; // NaN + case 5: { // Greater or equal or unordered + BEQ_MARK2(x2, xZR); + FLES(x2, d1, d0); + B_MARK_nocond; + break; + } + case 6: { // Greater or unordered, test inverted, N!=V so unordered or less than (inverted) + BEQ_MARK2(x2, xZR); + FLTS(x2, d1, d0); + B_MARK_nocond; + break; + } + case 7: break; // Not NaN + } + + MARK2; + if ((u8 & 7) == 5 || (u8 & 7) == 6) { + MOV32w(x2, 1); + } + MARK; + } + NEG(x2, x2); + if (rv64_xtheadvector) { + v0 = fpu_get_scratch(dyn); + VMV_S_X(v0, x2); + VECTOR_LOAD_VMASK(0b0001, x4, 1); + VMERGE_VVM(d0, d0, v0); // implies VMASK + } else { + VMV_S_X(d0, x2); + } + break; + case 0xE6: + INST_NAME("CVTDQ2PD Gx, Ex"); + nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); + if (MODREG) { + v1 = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0, VECTOR_SEW64); + GETGX_empty_vector(v0); + } else { + SMREAD(); + v1 = fpu_get_scratch(dyn); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 1, 0); + LD(x4, ed, fixedaddress); + VMV_S_X(v1, x4); + GETGX_empty_vector(v0); + } + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW32, VECTOR_LMUL1, 0.5); + d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); + VFWCVT_F_X_V(d0, v1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); + VMV_V_V(v0, d0); + break; + default: + DEFAULT_VECTOR; + } + return addr; +} diff --git a/src/dynarec/rv64/dynarec_rv64_functions.c b/src/dynarec/rv64/dynarec_rv64_functions.c index b3aedaa833e3fa03895d63a89f033547ed515559..5e85e735c8193e4aba01ba1c7057576bff352366 100644 --- a/src/dynarec/rv64/dynarec_rv64_functions.c +++ b/src/dynarec/rv64/dynarec_rv64_functions.c @@ -37,6 +37,16 @@ int fpu_get_scratch(dynarec_rv64_t* dyn) { return SCRATCH0 + dyn->e.fpu_scratch++; // return an Sx } + +// Get a FPU scratch reg aligned to LMUL +int fpu_get_scratch_lmul(dynarec_rv64_t* dyn, int lmul) +{ + int reg = SCRATCH0 + dyn->e.fpu_scratch; + int skip = (reg % (1 << lmul)) ? (1 << lmul) - (reg % (1 << lmul)) : 0; + dyn->e.fpu_scratch += skip + 1; + return reg + skip; +} + // Reset scratch regs counter void fpu_reset_scratch(dynarec_rv64_t* dyn) { @@ -62,37 +72,41 @@ void fpu_free_reg(dynarec_rv64_t* dyn, int reg) if (dyn->e.extcache[idx].t != EXT_CACHE_ST_F && dyn->e.extcache[idx].t != EXT_CACHE_ST_D && dyn->e.extcache[idx].t != EXT_CACHE_ST_I64) dyn->e.extcache[idx].v = 0; } -// Get an MMX double reg -int fpu_get_reg_emm(dynarec_rv64_t* dyn, int emm) + +// Get an MMX reg +int fpu_get_reg_emm(dynarec_rv64_t* dyn, int t, int emm) { - dyn->e.fpuused[EMM0 + emm] = 1; - dyn->e.extcache[EMM0 + emm].t = EXT_CACHE_MM; - dyn->e.extcache[EMM0 + emm].n = emm; - dyn->e.news |= (1<<(EMM0 + emm)); - return EXTREG(EMM0 + emm); + int i = EMM0 + emm; + dyn->e.fpuused[i] = 1; + dyn->e.extcache[i].t = t; + dyn->e.extcache[i].n = emm; + dyn->e.news |= (1 << (i)); + return EXTREG(i); } + // Get an XMM reg int fpu_get_reg_xmm(dynarec_rv64_t* dyn, int t, int xmm) { - int i = XMM0+xmm; + int i = XMM0 + xmm; dyn->e.fpuused[i] = 1; dyn->e.extcache[i].t = t; dyn->e.extcache[i].n = xmm; - dyn->e.news |= (1<e.news |= (1 << i); return EXTREG(i); } // Reset fpu regs counter -void fpu_reset_reg_extcache(extcache_t* e) +static void fpu_reset_reg_extcache(dynarec_rv64_t* dyn, extcache_t* e) { e->fpu_reg = 0; - for (int i=0; i<24; ++i) { - e->fpuused[i]=0; + for (int i = 0; i < 32; ++i) { + e->fpuused[i] = 0; e->extcache[i].v = 0; } + dyn->vector_sew = VECTOR_SEWNA; } void fpu_reset_reg(dynarec_rv64_t* dyn) { - fpu_reset_reg_extcache(&dyn->e); + fpu_reset_reg_extcache(dyn, &dyn->e); } int extcache_no_i64(dynarec_rv64_t* dyn, int ninst, int st, int a) @@ -379,11 +393,11 @@ int sewNeedsTransform(dynarec_rv64_t* dyn, int ninst) { int i2 = dyn->insts[ninst].x64.jmp_insts; - if (dyn->insts[i2].vector_sew == VECTOR_SEWNA) + if (dyn->insts[i2].vector_sew_entry == VECTOR_SEWNA) return 0; - else if (dyn->insts[i2].vector_sew == VECTOR_SEWANY && dyn->insts[ninst].vector_sew != VECTOR_SEWNA) + else if (dyn->insts[i2].vector_sew_entry == VECTOR_SEWANY && dyn->insts[ninst].vector_sew_exit != VECTOR_SEWNA) return 0; - else if (dyn->insts[i2].vector_sew == dyn->insts[ninst].vector_sew) + else if (dyn->insts[i2].vector_sew_entry == dyn->insts[ninst].vector_sew_exit) return 0; return 1; @@ -415,19 +429,24 @@ void extcacheUnwind(extcache_t* cache) if(cache->news) { // remove the newly created extcache for(int i=0; i<24; ++i) - if(cache->news&(1<news&(1<olds[i].changed) cache->extcache[i].v = 0; cache->news = 0; } // add/change bad regs - for(int i=0; i<16; ++i) { - if (cache->extcache[i].t == EXT_CACHE_SS || cache->extcache[i].t == EXT_CACHE_SD) { - if (cache->olds[i].changed) { - cache->extcache[i].t = cache->olds[i].single ? EXT_CACHE_SS : EXT_CACHE_SD; - } else if (cache->olds[i].purged) { + for (int i = 0; i < 16; ++i) { + if (cache->olds[i].changed || cache->olds[i].purged) { + if (cache->olds[i].type == EXT_CACHE_OLD_XMMR) + cache->extcache[i].t = EXT_CACHE_XMMR; + else if (cache->olds[i].type == EXT_CACHE_OLD_XMMW) + cache->extcache[i].t = EXT_CACHE_XMMW; + else if (cache->olds[i].type == EXT_CACHE_OLD_SS) + cache->extcache[i].t = EXT_CACHE_SS; + else if (cache->olds[i].type == EXT_CACHE_OLD_SD) + cache->extcache[i].t = EXT_CACHE_SD; + + if (cache->olds[i].purged) cache->extcache[i].n = i; - cache->extcache[i].t = cache->olds[i].single ? EXT_CACHE_SS : EXT_CACHE_SD; - } } } @@ -468,20 +487,22 @@ void extcacheUnwind(extcache_t* cache) cache->fpu_scratch = 0; cache->fpu_extra_qscratch = 0; cache->fpu_reg = 0; - for(int i=0; i<8; ++i) { + for (int i = 0; i < 8; ++i) { cache->x87cache[i] = -1; - cache->mmxcache[i] = -1; + cache->mmxcache[i].v = -1; cache->x87reg[i] = 0; cache->ssecache[i*2].v = -1; cache->ssecache[i*2+1].v = -1; } int x87reg = 0; - for(int i=0; i<24; ++i) { + for (int i = 0; i < 32; ++i) { if(cache->extcache[i].v) { cache->fpuused[i] = 1; switch (cache->extcache[i].t) { case EXT_CACHE_MM: - cache->mmxcache[cache->extcache[i].n] = EXTREG(i); + case EXT_CACHE_MMV: + cache->mmxcache[cache->extcache[i].n].reg = EXTREG(i); + cache->mmxcache[cache->extcache[i].n].vector = cache->extcache[i].t == EXT_CACHE_MMV; ++cache->mmxcount; ++cache->fpu_reg; break; @@ -499,6 +520,8 @@ void extcacheUnwind(extcache_t* cache) break; case EXT_CACHE_XMMR: case EXT_CACHE_XMMW: + case EXT_CACHE_YMMR: + case EXT_CACHE_YMMW: cache->ssecache[cache->extcache[i].n].reg = EXTREG(i); cache->ssecache[cache->extcache[i].n].vector = 1; cache->ssecache[cache->extcache[i].n].write = (cache->extcache[i].t == EXT_CACHE_XMMW) ? 1 : 0; @@ -584,11 +607,14 @@ const char* getCacheName(int t, int n) case EXT_CACHE_ST_F: sprintf(buff, "st%d", n); break; case EXT_CACHE_ST_I64: sprintf(buff, "STi%d", n); break; case EXT_CACHE_MM: sprintf(buff, "MM%d", n); break; + case EXT_CACHE_MMV: sprintf(buff, "MMV%d", n); break; case EXT_CACHE_SS: sprintf(buff, "SS%d", n); break; case EXT_CACHE_SD: sprintf(buff, "SD%d", n); break; case EXT_CACHE_SCR: sprintf(buff, "Scratch"); break; case EXT_CACHE_XMMW: sprintf(buff, "XMM%d", n); break; case EXT_CACHE_XMMR: sprintf(buff, "xmm%d", n); break; + case EXT_CACHE_YMMW: sprintf(buff, "YMM%d", n); break; + case EXT_CACHE_YMMR: sprintf(buff, "ymm%d", n); break; case EXT_CACHE_NONE: buff[0]='\0'; break; } return buff; @@ -611,7 +637,7 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r }; if(box64_dynarec_dump) { printf_x64_instruction(rex.is32bits?my_context->dec32:my_context->dec, &dyn->insts[ninst].x64, name); - dynarec_log(LOG_NONE, "%s%p: %d emitted opcodes, inst=%d, barrier=%d state=%d/%d(%d), %s=%X/%X, use=%X, need=%X/%X, sm=%d/%d, sew=%d", + dynarec_log(LOG_NONE, "%s%p: %d emitted opcodes, inst=%d, barrier=%d state=%d/%d(%d), %s=%X/%X, use=%X, need=%X/%X, sm=%d/%d, sew@entry=%d, sew@exit=%d", (box64_dynarec_dump > 1) ? "\e[32m" : "", (void*)(dyn->native_start + dyn->insts[ninst].address), dyn->insts[ninst].size / 4, @@ -626,7 +652,7 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r dyn->insts[ninst].x64.use_flags, dyn->insts[ninst].x64.need_before, dyn->insts[ninst].x64.need_after, - dyn->smread, dyn->smwrite, dyn->insts[ninst].vector_sew); + dyn->smread, dyn->smwrite, dyn->insts[ninst].vector_sew_entry, dyn->insts[ninst].vector_sew_exit); if(dyn->insts[ninst].pred_sz) { dynarec_log(LOG_NONE, ", pred="); for(int ii=0; iiinsts[ninst].pred_sz; ++ii) @@ -638,21 +664,26 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r dynarec_log(LOG_NONE, ", jmp=out"); if(dyn->last_ip) dynarec_log(LOG_NONE, ", last_ip=%p", (void*)dyn->last_ip); - for(int ii=0; ii<24; ++ii) { + for (int ii = 0; ii < 32; ++ii) { switch(dyn->insts[ninst].e.extcache[ii].t) { case EXT_CACHE_ST_D: dynarec_log(LOG_NONE, " %s:%s", fnames[EXTREG(ii)], getCacheName(dyn->insts[ninst].e.extcache[ii].t, dyn->insts[ninst].e.extcache[ii].n)); break; case EXT_CACHE_ST_F: dynarec_log(LOG_NONE, " %s:%s", fnames[EXTREG(ii)], getCacheName(dyn->insts[ninst].e.extcache[ii].t, dyn->insts[ninst].e.extcache[ii].n)); break; case EXT_CACHE_ST_I64: dynarec_log(LOG_NONE, " %s:%s", fnames[EXTREG(ii)], getCacheName(dyn->insts[ninst].e.extcache[ii].t, dyn->insts[ninst].e.extcache[ii].n)); break; case EXT_CACHE_MM: dynarec_log(LOG_NONE, " %s:%s", fnames[EXTREG(ii)], getCacheName(dyn->insts[ninst].e.extcache[ii].t, dyn->insts[ninst].e.extcache[ii].n)); break; + case EXT_CACHE_MMV: dynarec_log(LOG_NONE, " %s:%s", vnames[EXTREG(ii)], getCacheName(dyn->insts[ninst].e.extcache[ii].t, dyn->insts[ninst].e.extcache[ii].n)); break; case EXT_CACHE_SS: dynarec_log(LOG_NONE, " %s:%s", fnames[EXTREG(ii)], getCacheName(dyn->insts[ninst].e.extcache[ii].t, dyn->insts[ninst].e.extcache[ii].n)); break; case EXT_CACHE_SD: dynarec_log(LOG_NONE, " %s:%s", fnames[EXTREG(ii)], getCacheName(dyn->insts[ninst].e.extcache[ii].t, dyn->insts[ninst].e.extcache[ii].n)); break; case EXT_CACHE_XMMR: dynarec_log(LOG_NONE, " %s:%s", vnames[EXTREG(ii)], getCacheName(dyn->insts[ninst].e.extcache[ii].t, dyn->insts[ninst].e.extcache[ii].n)); break; case EXT_CACHE_XMMW: dynarec_log(LOG_NONE, " %s:%s", vnames[EXTREG(ii)], getCacheName(dyn->insts[ninst].e.extcache[ii].t, dyn->insts[ninst].e.extcache[ii].n)); break; + case EXT_CACHE_YMMW: dynarec_log(LOG_NONE, " %s:%s", vnames[EXTREG(ii)], getCacheName(dyn->insts[ninst].e.extcache[ii].t, dyn->insts[ninst].e.extcache[ii].n)); break; + case EXT_CACHE_YMMR: dynarec_log(LOG_NONE, " %s:%s", vnames[EXTREG(ii)], getCacheName(dyn->insts[ninst].e.extcache[ii].t, dyn->insts[ninst].e.extcache[ii].n)); break; case EXT_CACHE_SCR: dynarec_log(LOG_NONE, " %s:%s", fnames[EXTREG(ii)], getCacheName(dyn->insts[ninst].e.extcache[ii].t, dyn->insts[ninst].e.extcache[ii].n)); break; case EXT_CACHE_NONE: default: break; } } + if (dyn->ymm_zero) + dynarec_log(LOG_NONE, " ymm0_mask = %04x", dyn->ymm_zero); if(dyn->e.stack || dyn->insts[ninst].e.stack_next || dyn->insts[ninst].e.x87stack) dynarec_log(LOG_NONE, " X87:%d/%d(+%d/-%d)%d", dyn->e.stack, dyn->insts[ninst].e.stack_next, dyn->insts[ninst].e.stack_push, dyn->insts[ninst].e.stack_pop, dyn->insts[ninst].e.x87stack); if(dyn->insts[ninst].e.combined1 || dyn->insts[ninst].e.combined2) @@ -701,8 +732,8 @@ static void x87_reset(extcache_t* e) static void mmx_reset(extcache_t* e) { e->mmxcount = 0; - for (int i=0; i<8; ++i) - e->mmxcache[i] = -1; + for (int i = 0; i < 8; ++i) + e->mmxcache[i].v = -1; } static void sse_reset(extcache_t* e) @@ -717,6 +748,7 @@ void fpu_reset(dynarec_rv64_t* dyn) mmx_reset(&dyn->e); sse_reset(&dyn->e); fpu_reset_reg(dyn); + dyn->ymm_zero = 0; } void fpu_reset_ninst(dynarec_rv64_t* dyn, int ninst) @@ -724,7 +756,7 @@ void fpu_reset_ninst(dynarec_rv64_t* dyn, int ninst) x87_reset(&dyn->insts[ninst].e); mmx_reset(&dyn->insts[ninst].e); sse_reset(&dyn->insts[ninst].e); - fpu_reset_reg_extcache(&dyn->insts[ninst].e); + fpu_reset_reg_extcache(dyn, &dyn->insts[ninst].e); } int fpu_is_st_freed(dynarec_rv64_t* dyn, int ninst, int st) diff --git a/src/dynarec/rv64/dynarec_rv64_functions.h b/src/dynarec/rv64/dynarec_rv64_functions.h index 41d01c4bacda5e5610812842a72a74672deefde8..fa618381394ae0c3ff3f5a8cb0085b9be3bc0c2f 100644 --- a/src/dynarec/rv64/dynarec_rv64_functions.h +++ b/src/dynarec/rv64/dynarec_rv64_functions.h @@ -6,16 +6,19 @@ typedef struct x64emu_s x64emu_t; typedef struct dynarec_rv64_s dynarec_rv64_t; -#define SCRATCH0 2 +#define SCRATCH0 3 +#define VMASK 0 // Get an FPU scratch reg int fpu_get_scratch(dynarec_rv64_t* dyn); +// Get a FPU scratch reg aligned to LMUL +int fpu_get_scratch_lmul(dynarec_rv64_t* dyn, int lmul); // Reset scratch regs counter void fpu_reset_scratch(dynarec_rv64_t* dyn); // Get an x87 double reg int fpu_get_reg_x87(dynarec_rv64_t* dyn, int t, int n); // Get an MMX double reg -int fpu_get_reg_emm(dynarec_rv64_t* dyn, int emm); +int fpu_get_reg_emm(dynarec_rv64_t* dyn, int t, int emm); // Get an XMM quad reg int fpu_get_reg_xmm(dynarec_rv64_t* dyn, int t, int xmm); // Free a FPU/MMX/XMM reg diff --git a/src/dynarec/rv64/dynarec_rv64_helper.c b/src/dynarec/rv64/dynarec_rv64_helper.c index 3461cec0db6e57ab3d093aa9bb1c3d772a9d8bb0..5081a65390ff5ab5d70ad3fa12dce7a822d91cd1 100644 --- a/src/dynarec/rv64/dynarec_rv64_helper.c +++ b/src/dynarec/rv64/dynarec_rv64_helper.c @@ -125,7 +125,7 @@ uintptr_t geted(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop, i64 = F32S; else i64 = F8S; - if(i64==0 || ((i64>=-2048) && (i64<=2047) && i12)) { + if(i64==0 || ((i64>=-2048) && (i64<=maxval) && i12)) { *fixaddress = i64; if((nextop&7)==4) { if (sib_reg!=4) { @@ -190,12 +190,15 @@ static uintptr_t geted_32(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_ int64_t tmp = F32S; if (sib_reg!=4) { if(tmp && ((tmp<-2048) || (tmp>maxval) || !i12)) { - MOV32w(scratch, tmp); + // no need to zero up, as we did it below + rv64_move32(dyn, ninst, scratch, tmp, 0); if((sib>>6)) { SLLI(ret, xRAX + sib_reg, sib >> 6); ADDW(ret, ret, scratch); - } else + } else { ADDW(ret, xRAX+sib_reg, scratch); + } + ZEROUP(ret); } else { if(sib>>6) SLLI(ret, xRAX+sib_reg, (sib>>6)); @@ -215,8 +218,10 @@ static uintptr_t geted_32(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_ if((sib>>6)) { SLLI(ret, xRAX + sib_reg, (sib >> 6)); ADDW(ret, ret, xRAX + sib_reg2); - } else + } else { ADDW(ret, xRAX+sib_reg2, xRAX+sib_reg); + } + ZEROUP(ret); } else { ret = xRAX+sib_reg2; } @@ -247,15 +252,17 @@ static uintptr_t geted_32(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_ i32 = F32S; else i32 = F8S; - if(i32==0 || ((i32>=-2048) && (i32<=2047) && i12)) { + if(i32==0 || ((i32>=-2048) && (i32<=maxval) && i12)) { *fixaddress = i32; if((nextop&7)==4) { if (sib_reg!=4) { if(sib>>6) { SLLI(ret, xRAX + sib_reg, (sib >> 6)); ADDW(ret, ret, xRAX + sib_reg2); - } else + } else { ADDW(ret, xRAX+sib_reg2, xRAX+sib_reg); + } + ZEROUP(ret); } else { ret = xRAX+sib_reg2; } @@ -277,8 +284,10 @@ static uintptr_t geted_32(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_ } else scratch = xRAX+(nextop&0x07); ADDIW(ret, scratch, i32); + ZEROUP(ret); } else { - MOV32w(scratch, i32); + // no need to zero up, as we did it below + rv64_move32(dyn, ninst, scratch, i32, 0); if((nextop&7)==4) { if (sib_reg!=4) { ADDW(scratch, scratch, xRAX+sib_reg2); @@ -286,7 +295,7 @@ static uintptr_t geted_32(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_ SLLI(ret, xRAX + sib_reg, (sib >> 6)); ADDW(ret, ret, scratch); } else - ADDW(ret, scratch, xRAX+sib_reg); + ADDW(ret, scratch, xRAX + sib_reg); } else { PASS3(int tmp = xRAX+sib_reg2); ADDW(ret, tmp, scratch); @@ -295,6 +304,7 @@ static uintptr_t geted_32(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_ PASS3(int tmp = xRAX+(nextop&0x07)); ADDW(ret, tmp, scratch); } + ZEROUP(ret); } } } @@ -330,8 +340,10 @@ uintptr_t geted32(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop if((sib>>6)) { SLLI(ret, xRAX + sib_reg, sib >> 6); ADDW(ret, ret, scratch); - } else + } else { ADDW(ret, xRAX+sib_reg, scratch); + } + ZEROUP(ret); } else { if(sib>>6) SLLI(ret, xRAX+sib_reg, (sib>>6)); @@ -351,17 +363,21 @@ uintptr_t geted32(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop if((sib>>6)) { SLLI(ret, xRAX + sib_reg, (sib >> 6)); ADDW(ret, ret, xRAX + sib_reg2); - } else + } else { ADDW(ret, xRAX+sib_reg2, xRAX+sib_reg); + } + ZEROUP(ret); } else { ret = xRAX+sib_reg2; } } } else if((nextop&7)==5) { uint32_t tmp = F32; - MOV32w(ret, tmp); + // no need to zero up, as we did it below + rv64_move32(dyn, ninst, ret, tmp, 0); GETIP(addr+delta); ADDW(ret, ret, xRIP); + ZEROUP(ret); switch(lock) { case 1: addLockAddress(addr+delta+tmp); break; case 2: if(isLockAddress(addr+delta+tmp)) *l=1; break; @@ -385,15 +401,17 @@ uintptr_t geted32(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop i64 = F32S; else i64 = F8S; - if(i64==0 || ((i64>=-2048) && (i64<=2047) && i12)) { + if(i64==0 || ((i64>=-2048) && (i64<=maxval) && i12)) { *fixaddress = i64; if((nextop&7)==4) { if (sib_reg!=4) { if(sib>>6) { SLLI(ret, xRAX + sib_reg, (sib >> 6)); ADDW(ret, ret, xRAX + sib_reg2); - } else + } else { ADDW(ret, xRAX+sib_reg2, xRAX+sib_reg); + } + ZEROUP(ret); } else { ret = xRAX+sib_reg2; } @@ -415,8 +433,10 @@ uintptr_t geted32(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop } else scratch = xRAX+(nextop&0x07)+(rex.b<<3); ADDIW(ret, scratch, i64); + ZEROUP(ret); } else { - MOV32w(scratch, i64); + // no need to zero up, as we did it below + rv64_move32(dyn, ninst, scratch, i64, 0); if((nextop&7)==4) { if (sib_reg!=4) { ADDW(scratch, scratch, xRAX+sib_reg2); @@ -424,7 +444,7 @@ uintptr_t geted32(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop SLLI(ret, xRAX + sib_reg, (sib >> 6)); ADDW(ret, ret, scratch); } else - ADDW(ret, scratch, xRAX+sib_reg); + ADDW(ret, scratch, xRAX + sib_reg); } else { PASS3(int tmp = xRAX+sib_reg2); ADDW(ret, tmp, scratch); @@ -433,6 +453,7 @@ uintptr_t geted32(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop PASS3(int tmp = xRAX+(nextop&0x07)+(rex.b<<3)); ADDW(ret, tmp, scratch); } + ZEROUP(ret); } } } @@ -481,38 +502,69 @@ void jump_to_next(dynarec_rv64_t* dyn, uintptr_t ip, int reg, int ninst, int is3 MAYUSE(dyn); MAYUSE(ninst); MESSAGE(LOG_DUMP, "Jump to next\n"); + if(is32bits) + ip &= 0xffffffffLL; + if(reg) { if(reg!=xRIP) { MV(xRIP, reg); } + NOTEST(x2); uintptr_t tbl = is32bits?getJumpTable32():getJumpTable64(); MAYUSE(tbl); TABLE64(x3, tbl); - if(!is32bits) { - SRLI(x2, xRIP, JMPTABL_START3); - if(rv64_zba) SH3ADD(x3, x2, x3); else {SLLI(x2, x2, 3); ADD(x3, x3, x2);} - LD(x3, x3, 0); // could be LR_D(x3, x3, 1, 1); for better safety - } - MOV64x(x4, JMPTABLE_MASK2<<3); // x4 = mask - SRLI(x2, xRIP, JMPTABL_START2-3); - AND(x2, x2, x4); - ADD(x3, x3, x2); - LD(x3, x3, 0); //LR_D(x3, x3, 1, 1); - if(JMPTABLE_MASK2!=JMPTABLE_MASK1) { - MOV64x(x4, JMPTABLE_MASK1<<3); // x4 = mask - } - SRLI(x2, xRIP, JMPTABL_START1-3); - AND(x2, x2, x4); - ADD(x3, x3, x2); - LD(x3, x3, 0); //LR_D(x3, x3, 1, 1); - if(JMPTABLE_MASK0<2048) { - ANDI(x2, xRIP, JMPTABLE_MASK0); + if (rv64_xtheadbb) { + if (!is32bits) { + TH_EXTU(x2, xRIP, JMPTABL_START3 + JMPTABL_SHIFT3 - 1, JMPTABL_START3); + TH_ADDSL(x3, x3, x2, 3); + LD(x3, x3, 0); + } + TH_EXTU(x2, xRIP, JMPTABL_START2 + JMPTABL_SHIFT2 - 1, JMPTABL_START2); + TH_ADDSL(x3, x3, x2, 3); + LD(x3, x3, 0); + TH_EXTU(x2, xRIP, JMPTABL_START1 + JMPTABL_SHIFT1 - 1, JMPTABL_START1); + TH_ADDSL(x3, x3, x2, 3); + LD(x3, x3, 0); + TH_EXTU(x2, xRIP, JMPTABL_START0 + JMPTABL_SHIFT0 - 1, JMPTABL_START0); + TH_ADDSL(x3, x3, x2, 3); + LD(x2, x3, 0); } else { - MOV64x(x4, JMPTABLE_MASK0); // x4 = mask - AND(x2, xRIP, x4); + if (!is32bits) { + SRLI(x2, xRIP, JMPTABL_START3); + if (rv64_zba) + SH3ADD(x3, x2, x3); + else { + SLLI(x2, x2, 3); + ADD(x3, x3, x2); + } + LD(x3, x3, 0); // could be LR_D(x3, x3, 1, 1); for better safety + } + MOV64x(x4, JMPTABLE_MASK2 << 3); // x4 = mask + SRLI(x2, xRIP, JMPTABL_START2 - 3); + AND(x2, x2, x4); + ADD(x3, x3, x2); + LD(x3, x3, 0); // LR_D(x3, x3, 1, 1); + if (JMPTABLE_MASK2 != JMPTABLE_MASK1) { + MOV64x(x4, JMPTABLE_MASK1 << 3); // x4 = mask + } + SRLI(x2, xRIP, JMPTABL_START1 - 3); + AND(x2, x2, x4); + ADD(x3, x3, x2); + LD(x3, x3, 0); // LR_D(x3, x3, 1, 1); + if (JMPTABLE_MASK0 < 2048) { + ANDI(x2, xRIP, JMPTABLE_MASK0); + } else { + MOV64x(x4, JMPTABLE_MASK0); // x4 = mask + AND(x2, xRIP, x4); + } + if (rv64_zba) + SH3ADD(x3, x2, x3); + else { + SLLI(x2, x2, 3); + ADD(x3, x3, x2); + } + LD(x2, x3, 0); // LR_D(x2, x3, 1, 1); } - if(rv64_zba) SH3ADD(x3, x2, x3); else {SLLI(x2, x2, 3); ADD(x3, x3, x2);} - LD(x2, x3, 0); //LR_D(x2, x3, 1, 1); } else { uintptr_t p = getJumpTableAddress64(ip); MAYUSE(p); @@ -528,7 +580,7 @@ void jump_to_next(dynarec_rv64_t* dyn, uintptr_t ip, int reg, int ninst, int is3 //MOVx(x3, 15); no access to PC reg #endif SMEND(); - JALR(x2); // save LR... + JALR((dyn->insts[ninst].x64.has_callret ? xRA : xZR), x2); } void ret_to_epilog(dynarec_rv64_t* dyn, int ninst, rex_t rex) @@ -540,11 +592,11 @@ void ret_to_epilog(dynarec_rv64_t* dyn, int ninst, rex_t rex) SMEND(); if (box64_dynarec_callret) { // pop the actual return address from RV64 stack - LD(x2, xSP, 0); // native addr + LD(xRA, xSP, 0); // native addr LD(x6, xSP, 8); // x86 addr ADDI(xSP, xSP, 16); // pop BNE(x6, xRIP, 2*4); // is it the right address? - JALR(x2); + BR(xRA); // not the correct return address, regular jump, but purge the stack first, it's unsync now... LD(xSP, xEmu, offsetof(x64emu_t, xSPSave)); ADDI(xSP, xSP, -16); @@ -579,7 +631,7 @@ void ret_to_epilog(dynarec_rv64_t* dyn, int ninst, rex_t rex) } if(rv64_zba) SH3ADD(x3, x2, x3); else {SLLI(x2, x2, 3); ADD(x3, x3, x2);} LD(x2, x3, 0); - JALR(x2); // save LR + BR(x2); CLEARIP(); } @@ -598,11 +650,11 @@ void retn_to_epilog(dynarec_rv64_t* dyn, int ninst, rex_t rex, int n) SMEND(); if (box64_dynarec_callret) { // pop the actual return address from RV64 stack - LD(x2, xSP, 0); // native addr + LD(xRA, xSP, 0); // native addr LD(x6, xSP, 8); // x86 addr ADDI(xSP, xSP, 16); // pop BNE(x6, xRIP, 2*4); // is it the right address? - JALR(x2); + BR(xRA); // not the correct return address, regular jump, but purge the stack first, it's unsync now... LD(xSP, xEmu, offsetof(x64emu_t, xSPSave)); ADDI(xSP, xSP, -16); @@ -636,7 +688,7 @@ void retn_to_epilog(dynarec_rv64_t* dyn, int ninst, rex_t rex, int n) } if(rv64_zba) SH3ADD(x3, x2, x3); else {SLLI(x2, x2, 3); ADD(x3, x3, x2);} LD(x2, x3, 0); - JALR(x2); // save LR + BR(x2); CLEARIP(); } @@ -708,7 +760,7 @@ void call_c(dynarec_rv64_t* dyn, int ninst, void* fnc, int reg, int ret, int sav SD(xRIP, xEmu, offsetof(x64emu_t, ip)); } TABLE64(reg, (uintptr_t)fnc); - JALR(reg); + JALR(xRA, reg); if(ret>=0) { MV(ret, xEmu); } @@ -732,6 +784,10 @@ void call_c(dynarec_rv64_t* dyn, int ninst, void* fnc, int reg, int ret, int sav XORI(xMASK, xZR, -1); SRLI(xMASK, xMASK, 32); + // reinitialize sew + if (dyn->vector_sew != VECTOR_SEWNA) + vector_vsetvli(dyn, ninst, x3, dyn->vector_sew, VECTOR_LMUL1, 1); + fpu_popcache(dyn, ninst, reg, 0); if(saveflags) { LD(xFlags, xEmu, offsetof(x64emu_t, eflags)); @@ -777,8 +833,8 @@ void call_n(dynarec_rv64_t* dyn, int ninst, void* fnc, int w) MV(A4, xR8); MV(A5, xR9); // native call - TABLE64(16, (uintptr_t)fnc); // using x16 as scratch regs for call address - JALR(16); + TABLE64(xRAX, (uintptr_t)fnc); // using xRAX as scratch regs for call address + JALR(xRA, xRAX); // put return value in x64 regs if(w>0) { MV(xRAX, A0); @@ -796,6 +852,10 @@ void call_n(dynarec_rv64_t* dyn, int ninst, void* fnc, int w) XORI(xMASK, xZR, -1); SRLI(xMASK, xMASK, 32); + // reinitialize sew + if (dyn->vector_sew != VECTOR_SEWNA) + vector_vsetvli(dyn, ninst, x3, dyn->vector_sew, VECTOR_LMUL1, 1); + fpu_popcache(dyn, ninst, x3, 1); LD(xFlags, xEmu, offsetof(x64emu_t, eflags)); FLAGS_ADJUST_FROM11(xFlags, xFlags, x3); @@ -888,7 +948,7 @@ int extcache_st_coherency(dynarec_rv64_t* dyn, int ninst, int a, int b) return i1; } -// On step 1, Float/Double for ST is actualy computed and back-propagated +// On step 1, Float/Double for ST is actually computed and back-propagated // On step 2-3, the value is just read for inst[...].n.neocache[..] // the reg returned is *2 for FLOAT int x87_do_push(dynarec_rv64_t* dyn, int ninst, int s1, int t) @@ -1160,6 +1220,8 @@ static void x87_unreflectcache(dynarec_rv64_t* dyn, int ninst, int s1, int s2, i ADDI(s2, s2, a); ANDI(s2, s2, 7); SW(s2, xEmu, offsetof(x64emu_t, top)); + // update tags + LH(s1, xEmu, offsetof(x64emu_t, fpu_tags)); if(a>0) { SLLI(s3, xMASK, 16); // 0xffff0000 OR(s1, s1, s3); @@ -1167,6 +1229,7 @@ static void x87_unreflectcache(dynarec_rv64_t* dyn, int ninst, int s1, int s2, i } else { SLLI(s1, s1, -a*2); } + SH(s1, xEmu, offsetof(x64emu_t, fpu_tags)); } } @@ -1503,38 +1566,108 @@ static int isx87Empty(dynarec_rv64_t* dyn) } // forget ext register for a MMX reg, does nothing if the regs is not loaded -void mmx_forget_reg(dynarec_rv64_t* dyn, int ninst, int a) +void mmx_forget_reg(dynarec_rv64_t* dyn, int ninst, int s1, int a) { - if (dyn->e.mmxcache[a] == -1) + if (dyn->e.mmxcache[a].v == -1) return; - FSD(dyn->e.mmxcache[a], xEmu, offsetof(x64emu_t, mmx[a])); - fpu_free_reg(dyn, dyn->e.mmxcache[a]); + if (dyn->e.mmxcache[a].vector) { + SET_ELEMENT_WIDTH(s1, VECTOR_SEW64, 1); + VFMV_F_S(dyn->e.mmxcache[a].reg, dyn->e.mmxcache[a].reg); + } + FSD(dyn->e.mmxcache[a].reg, xEmu, offsetof(x64emu_t, mmx[a])); + fpu_free_reg(dyn, dyn->e.mmxcache[a].reg); + dyn->e.mmxcache[a].v = -1; return; } -// get neon register for a MMX reg, create the entry if needed +static void mmx_transfer_reg(dynarec_rv64_t* dyn, int ninst, int s1, int a) +{ + if (dyn->e.mmxcache[a].v == -1) + return; + + SET_ELEMENT_WIDTH(s1, VECTOR_SEW64, 1); + if (dyn->e.mmxcache[a].vector) { + VFMV_F_S(dyn->e.mmxcache[a].reg, dyn->e.mmxcache[a].reg); + } else { + VFMV_S_F(dyn->e.mmxcache[a].reg, dyn->e.mmxcache[a].reg); + } + dyn->e.mmxcache[a].vector = 1 - dyn->e.mmxcache[a].vector; + dyn->e.extcache[EXTIDX(dyn->e.mmxcache[a].reg)].t = dyn->e.mmxcache[a].vector ? EXT_CACHE_MMV : EXT_CACHE_MM; + return; +} + +// get float register for a MMX reg, create the entry if needed int mmx_get_reg(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int a) { if(!dyn->e.x87stack && isx87Empty(dyn)) x87_purgecache(dyn, ninst, 0, s1, s2, s3); - if(dyn->e.mmxcache[a]!=-1) - return dyn->e.mmxcache[a]; + if (dyn->e.mmxcache[a].v != -1) { + if (dyn->e.mmxcache[a].vector) { + mmx_transfer_reg(dyn, ninst, s1, a); + } + return dyn->e.mmxcache[a].reg; + } + ++dyn->e.mmxcount; - int ret = dyn->e.mmxcache[a] = fpu_get_reg_emm(dyn, a); - FLD(ret, xEmu, offsetof(x64emu_t, mmx[a])); - return ret; + dyn->e.mmxcache[a].reg = fpu_get_reg_emm(dyn, EXT_CACHE_MM, a); + dyn->e.mmxcache[a].vector = 0; + FLD(dyn->e.mmxcache[a].reg, xEmu, offsetof(x64emu_t, mmx[a])); + return dyn->e.mmxcache[a].reg; } -// get neon register for a MMX reg, but don't try to synch it if it needed to be created + +// get vector register for a MMX reg, create the entry if needed +int mmx_get_reg_vector(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int a) +{ + if (!dyn->e.x87stack && isx87Empty(dyn)) + x87_purgecache(dyn, ninst, 0, s1, s2, s3); + if (dyn->e.mmxcache[a].v != -1) { + if (!dyn->e.mmxcache[a].vector) { + mmx_transfer_reg(dyn, ninst, s1, a); + } + return dyn->e.mmxcache[a].reg; + } + + ++dyn->e.mmxcount; + dyn->e.mmxcache[a].reg = fpu_get_reg_emm(dyn, EXT_CACHE_MMV, a); + dyn->e.mmxcache[a].vector = 1; + FLD(dyn->e.mmxcache[a].reg, xEmu, offsetof(x64emu_t, mmx[a])); + SET_ELEMENT_WIDTH(s1, VECTOR_SEW64, 1); + VFMV_S_F(dyn->e.mmxcache[a].reg, dyn->e.mmxcache[a].reg); + return dyn->e.mmxcache[a].reg; +} + +// get float register for a MMX reg, but don't try to synch it if it needed to be created int mmx_get_reg_empty(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int a) +{ + if (!dyn->e.x87stack && isx87Empty(dyn)) + x87_purgecache(dyn, ninst, 0, s1, s2, s3); + if (dyn->e.mmxcache[a].v != -1) { + dyn->e.mmxcache[a].vector = 0; + dyn->e.extcache[EXTIDX(dyn->e.mmxcache[a].reg)].t = EXT_CACHE_MM; + return dyn->e.mmxcache[a].reg; + } + + ++dyn->e.mmxcount; + dyn->e.mmxcache[a].vector = 0; + return dyn->e.mmxcache[a].reg = fpu_get_reg_emm(dyn, EXT_CACHE_MM, a); +} + +// get vector register for a MMX reg, but don't try to synch it if it needed to be created +int mmx_get_reg_empty_vector(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int a) { if(!dyn->e.x87stack && isx87Empty(dyn)) x87_purgecache(dyn, ninst, 0, s1, s2, s3); - if(dyn->e.mmxcache[a]!=-1) - return dyn->e.mmxcache[a]; + if (dyn->e.mmxcache[a].v != -1) { + dyn->e.mmxcache[a].vector = 1; + dyn->e.extcache[EXTIDX(dyn->e.mmxcache[a].reg)].t = EXT_CACHE_MMV; + return dyn->e.mmxcache[a].reg; + } + ++dyn->e.mmxcount; - int ret = dyn->e.mmxcache[a] = fpu_get_reg_emm(dyn, a); - return ret; + dyn->e.mmxcache[a].vector = 1; + return dyn->e.mmxcache[a].reg = fpu_get_reg_emm(dyn, EXT_CACHE_MMV, a); } + // purge the MMX cache only(needs 3 scratch registers) void mmx_purgecache(dynarec_rv64_t* dyn, int ninst, int next, int s1) { @@ -1543,29 +1676,39 @@ void mmx_purgecache(dynarec_rv64_t* dyn, int ninst, int next, int s1) if(!next) dyn->e.mmxcount = 0; int old = -1; - for (int i=0; i<8; ++i) - if(dyn->e.mmxcache[i]!=-1) { - if (old==-1) { - MESSAGE(LOG_DUMP, "\tPurge %sMMX Cache ------\n", next?"locally ":""); + for (int i = 0; i < 8; ++i) { + if (dyn->e.mmxcache[i].v != -1) { + if (old == -1) { + MESSAGE(LOG_DUMP, "\tPurge %sMMX Cache ------\n", next ? "locally " : ""); ++old; } - FSD(dyn->e.mmxcache[i], xEmu, offsetof(x64emu_t, mmx[i])); - if(!next) { - fpu_free_reg(dyn, dyn->e.mmxcache[i]); - dyn->e.mmxcache[i] = -1; + if (dyn->e.mmxcache[i].vector) { + SET_ELEMENT_WIDTH(s1, VECTOR_SEW64, 1); + VFMV_F_S(dyn->e.mmxcache[i].reg, dyn->e.mmxcache[i].reg); + } + FSD(dyn->e.mmxcache[i].reg, xEmu, offsetof(x64emu_t, mmx[i])); + if (!next) { + fpu_free_reg(dyn, dyn->e.mmxcache[i].reg); + dyn->e.mmxcache[i].v = -1; } } - if(old!=-1) { + } + if (old != -1) { MESSAGE(LOG_DUMP, "\t------ Purge MMX Cache\n"); } } static void mmx_reflectcache(dynarec_rv64_t* dyn, int ninst, int s1) { - for (int i=0; i<8; ++i) - if(dyn->e.mmxcache[i]!=-1) { - FLD(dyn->e.mmxcache[i], xEmu, offsetof(x64emu_t, mmx[i])); + for (int i = 0; i < 8; ++i) { + if (dyn->e.mmxcache[i].v != -1) { + if (dyn->e.mmxcache[i].vector) { + SET_ELEMENT_WIDTH(s1, VECTOR_SEW64, 1); + VFMV_F_S(dyn->e.mmxcache[i].reg, dyn->e.mmxcache[i].reg); + } + FSD(dyn->e.mmxcache[i].reg, xEmu, offsetof(x64emu_t, mmx[i])); } + } } // SSE / SSE2 helpers @@ -1576,6 +1719,9 @@ int sse_get_reg(dynarec_rv64_t* dyn, int ninst, int s1, int a, int single) if (dyn->e.ssecache[a].vector == 1) { // it's in the fpu, forget it first... sse_forget_reg_vector(dyn, ninst, s1, a); + // update olds after the forget... + dyn->e.olds[a].changed = 1; + dyn->e.olds[a].purged = 0; return sse_get_reg(dyn, ninst, s1, a, single); } // forget / reload if change of size @@ -1584,7 +1730,7 @@ int sse_get_reg(dynarec_rv64_t* dyn, int ninst, int s1, int a, int single) // update olds after the forget... dyn->e.olds[a].changed = 1; dyn->e.olds[a].purged = 0; - dyn->e.olds[a].single = 1-single; + dyn->e.olds[a].type = 1 - single; return sse_get_reg(dyn, ninst, s1, a, single); } return dyn->e.ssecache[a].reg; @@ -1605,8 +1751,11 @@ int sse_get_reg_empty(dynarec_rv64_t* dyn, int ninst, int s1, int a, int single) { if (dyn->e.ssecache[a].v != -1) { if (dyn->e.ssecache[a].vector == 1) { - // it's in the fpu, forget it first... + // it's in the vpu, forget it first... sse_forget_reg_vector(dyn, ninst, s1, a); + // update olds after the forget... + dyn->e.olds[a].changed = 1; + dyn->e.olds[a].purged = 0; return sse_get_reg_empty(dyn, ninst, s1, a, single); } @@ -1619,7 +1768,7 @@ int sse_get_reg_empty(dynarec_rv64_t* dyn, int ninst, int s1, int a, int single) dyn->e.olds[a].changed = 1; dyn->e.olds[a].purged = 0; dyn->e.olds[a].reg = EXTIDX(dyn->e.ssecache[a].reg); - dyn->e.olds[a].single = 1-single; + dyn->e.olds[a].type = 1 - single; dyn->e.ssecache[a].single = single; dyn->e.ssecache[a].vector = 0; dyn->e.extcache[EXTIDX(dyn->e.ssecache[a].reg)].t = single?EXT_CACHE_SS:EXT_CACHE_SD; @@ -1632,6 +1781,43 @@ int sse_get_reg_empty(dynarec_rv64_t* dyn, int ninst, int s1, int a, int single) return dyn->e.ssecache[a].reg; } +// get an ext register for an SSE reg which changes size, with single or not AFTER the change +int sse_get_reg_size_changed(dynarec_rv64_t* dyn, int ninst, int s1, int a, int single) +{ + if (dyn->e.ssecache[a].v != -1) { + if (dyn->e.ssecache[a].vector == 1) { + // it's in the vpu, forget it first... + sse_forget_reg_vector(dyn, ninst, s1, a); + // update olds after the forget... + dyn->e.olds[a].changed = 1; + dyn->e.olds[a].purged = 0; + return sse_get_reg_size_changed(dyn, ninst, s1, a, single); + } + + // forget / reload if change of size + if (dyn->e.ssecache[a].single == single) { + sse_forget_reg(dyn, ninst, s1, a); + return sse_get_reg_size_changed(dyn, ninst, s1, a, single); + } + dyn->e.olds[a].changed = 1; + dyn->e.olds[a].purged = 0; + dyn->e.olds[a].type = !single; + dyn->e.ssecache[a].single = single; + dyn->e.ssecache[a].vector = 0; + dyn->e.extcache[EXTIDX(dyn->e.ssecache[a].reg)].t = single ? EXT_CACHE_SS : EXT_CACHE_SD; + return dyn->e.ssecache[a].reg; + } + dyn->e.ssecache[a].reg = fpu_get_reg_xmm(dyn, single ? EXT_CACHE_SS : EXT_CACHE_SD, a); + int ret = dyn->e.ssecache[a].reg; + dyn->e.ssecache[a].single = single; + dyn->e.ssecache[a].vector = 0; + if (!single) // load happens before size changed + FLW(dyn->e.ssecache[a].reg, xEmu, offsetof(x64emu_t, xmm[a])); + else + FLD(dyn->e.ssecache[a].reg, xEmu, offsetof(x64emu_t, xmm[a])); + return ret; +} + // forget ext register for a SSE reg, does nothing if the regs is not loaded void sse_forget_reg(dynarec_rv64_t* dyn, int ninst, int s1, int a) { @@ -1646,8 +1832,8 @@ void sse_forget_reg(dynarec_rv64_t* dyn, int ninst, int s1, int a) fpu_free_reg(dyn, dyn->e.ssecache[a].reg); dyn->e.olds[a].changed = 0; dyn->e.olds[a].purged = 1; - dyn->e.olds[a].reg = dyn->e.ssecache[a].reg; - dyn->e.olds[a].single = dyn->e.ssecache[a].single; + dyn->e.olds[a].reg = EXTIDX(dyn->e.ssecache[a].reg); + dyn->e.olds[a].type = dyn->e.ssecache[a].single; dyn->e.ssecache[a].v = -1; return; } @@ -1659,10 +1845,17 @@ int sse_get_reg_vector(dynarec_rv64_t* dyn, int ninst, int s1, int a, int forwri if (dyn->e.ssecache[a].vector == 0) { // it's in the fpu, forget it first... sse_forget_reg(dyn, ninst, s1, a); + // update olds after the forget... + dyn->e.olds[a].changed = 1; + dyn->e.olds[a].purged = 0; return sse_get_reg_vector(dyn, ninst, s1, a, forwrite, sew); } if (forwrite) { + dyn->e.olds[a].changed = 1; + dyn->e.olds[a].purged = 0; + dyn->e.olds[a].reg = EXTIDX(dyn->e.ssecache[a].reg); + dyn->e.olds[a].type = EXT_CACHE_OLD_XMMW; dyn->e.ssecache[a].write = 1; // update only if forwrite dyn->e.ssecache[a].single = 0; // just to be clean dyn->e.extcache[EXTIDX(dyn->e.ssecache[a].reg)].t = EXT_CACHE_XMMW; @@ -1686,8 +1879,15 @@ int sse_get_reg_empty_vector(dynarec_rv64_t* dyn, int ninst, int s1, int a) if (dyn->e.ssecache[a].vector == 0) { // it's in the fpu, forget it first... sse_forget_reg(dyn, ninst, s1, a); + // update olds after the forget... + dyn->e.olds[a].changed = 1; + dyn->e.olds[a].purged = 0; return sse_get_reg_empty_vector(dyn, ninst, s1, a); } + dyn->e.olds[a].changed = 1; + dyn->e.olds[a].purged = 0; + dyn->e.olds[a].reg = EXTIDX(dyn->e.ssecache[a].reg); + dyn->e.olds[a].type = EXT_CACHE_OLD_XMMW; dyn->e.ssecache[a].vector = 1; dyn->e.ssecache[a].write = 1; dyn->e.ssecache[a].single = 0; // just to be clean @@ -1709,11 +1909,15 @@ void sse_forget_reg_vector(dynarec_rv64_t* dyn, int ninst, int s1, int a) if (dyn->e.ssecache[a].vector == 0) return sse_forget_reg(dyn, ninst, s1, a); if (dyn->e.extcache[EXTIDX(dyn->e.ssecache[a].reg)].t == EXT_CACHE_XMMW) { - SET_ELEMENT_WIDTH(s1, VECTOR_SEW8); + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 1); ADDI(s1, xEmu, offsetof(x64emu_t, xmm[a])); - VSE8_V(dyn->e.ssecache[a].reg, s1, VECTOR_UNMASKED, VECTOR_NFIELD1); + VSE_V(dyn->e.ssecache[a].reg, s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); } fpu_free_reg(dyn, dyn->e.ssecache[a].reg); + dyn->e.olds[a].changed = 0; + dyn->e.olds[a].purged = 1; + dyn->e.olds[a].type = dyn->e.ssecache[a].write ? EXT_CACHE_OLD_XMMW : EXT_CACHE_OLD_XMMR; + dyn->e.olds[a].reg = EXTIDX(dyn->e.ssecache[a].reg); dyn->e.ssecache[a].v = -1; return; } @@ -1729,9 +1933,9 @@ void sse_purge07cache(dynarec_rv64_t* dyn, int ninst, int s1) ++old; } if (dyn->e.ssecache[i].vector) { - SET_ELEMENT_WIDTH(s1, VECTOR_SEW8); + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 0); ADDI(s1, xEmu, offsetof(x64emu_t, xmm[i])); - VSE8_V(dyn->e.ssecache[i].reg, s1, VECTOR_UNMASKED, VECTOR_NFIELD1); + VSE_V(dyn->e.ssecache[i].reg, s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); } else if (dyn->e.ssecache[i].single) FSW(dyn->e.ssecache[i].reg, xEmu, offsetof(x64emu_t, xmm[i])); else @@ -1755,27 +1959,44 @@ static void sse_purgecache(dynarec_rv64_t* dyn, int ninst, int next, int s1) ++old; } if (dyn->e.ssecache[i].vector) { - SET_ELEMENT_WIDTH(s1, VECTOR_SEW8); - ADDI(s1, xEmu, offsetof(x64emu_t, xmm[i])); - VSE8_V(dyn->e.ssecache[i].reg, s1, VECTOR_UNMASKED, VECTOR_NFIELD1); + if (dyn->e.ssecache[i].write) { + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 0); + ADDI(s1, xEmu, offsetof(x64emu_t, xmm[i])); + VSE_V(dyn->e.ssecache[i].reg, s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + } } else if (dyn->e.ssecache[i].single) FSW(dyn->e.ssecache[i].reg, xEmu, offsetof(x64emu_t, xmm[i])); else FSD(dyn->e.ssecache[i].reg, xEmu, offsetof(x64emu_t, xmm[i])); - if(!next) { - if (dyn->e.ssecache[i].vector) { - fpu_free_reg(dyn, dyn->e.ssecache[i].reg); - dyn->e.ssecache[i].v = -1; + if (!next) { + fpu_free_reg(dyn, dyn->e.ssecache[i].reg); + dyn->e.olds[i].changed = 0; + dyn->e.olds[i].purged = 1; + dyn->e.olds[i].type = dyn->e.ssecache[i].vector ? (dyn->e.ssecache[i].write ? EXT_CACHE_OLD_XMMW : EXT_CACHE_OLD_XMMR) : dyn->e.ssecache[i].single; + dyn->e.olds[i].reg = dyn->e.ssecache[i].reg; + dyn->e.ssecache[i].v = -1; + } + } + + // AVX + if (dyn->ymm_zero) { + if (old == -1) { + MESSAGE(LOG_DUMP, "\tPurge %sSSE Cache ------\n", next ? "locally " : ""); + ++old; + } + for (int i = 0; i < 16; ++i) + if (is_avx_zero(dyn, ninst, i)) { + if (rv64_xtheadmempair) { + ADDI(s1, xEmu, offsetof(x64emu_t, ymm[i])); + TH_SDD(xZR, xZR, s1, 0); } else { - fpu_free_reg(dyn, dyn->e.ssecache[i].reg); - dyn->e.olds[i].changed = 0; - dyn->e.olds[i].purged = 1; - dyn->e.olds[i].reg = dyn->e.ssecache[i].reg; - dyn->e.olds[i].single = dyn->e.ssecache[i].single; - dyn->e.ssecache[i].v = -1; + SD(xZR, xEmu, offsetof(x64emu_t, ymm[i])); + SD(xZR, xEmu, offsetof(x64emu_t, ymm[i]) + 8); } } - } + if (!next) + avx_mark_zero_reset(dyn, ninst); + } if(old!=-1) { MESSAGE(LOG_DUMP, "\t------ Purge SSE Cache\n"); } @@ -1786,124 +2007,200 @@ static void sse_reflectcache(dynarec_rv64_t* dyn, int ninst, int s1) for (int i = 0; i < 16; ++i) if (dyn->e.ssecache[i].v != -1) { if (dyn->e.ssecache[i].vector) { - SET_ELEMENT_WIDTH(s1, VECTOR_SEW8); + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 0); ADDI(s1, xEmu, offsetof(x64emu_t, xmm[i])); - VSE8_V(dyn->e.ssecache[i].reg, s1, VECTOR_UNMASKED, VECTOR_NFIELD1); + VSE_V(dyn->e.ssecache[i].reg, s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); } else if (dyn->e.ssecache[i].single) FSW(dyn->e.ssecache[i].reg, xEmu, offsetof(x64emu_t, xmm[i])); else FSD(dyn->e.ssecache[i].reg, xEmu, offsetof(x64emu_t, xmm[i])); } + + // AVX + if (dyn->ymm_zero) + for (int i = 0; i < 16; ++i) + if (is_avx_zero(dyn, ninst, i)) { + if (rv64_xtheadmempair) { + ADDI(s1, xEmu, offsetof(x64emu_t, ymm[i])); + TH_SDD(xZR, xZR, s1, 0); + } else { + SD(xZR, xEmu, offsetof(x64emu_t, ymm[i])); + SD(xZR, xEmu, offsetof(x64emu_t, ymm[i]) + 8); + } + } } void sse_reflect_reg(dynarec_rv64_t* dyn, int ninst, int s1, int a) { + if (is_avx_zero(dyn, ninst, a)) { + if (rv64_xtheadmempair) { + ADDI(s1, xEmu, offsetof(x64emu_t, ymm[a])); + TH_SDD(xZR, xZR, s1, 0); + } else { + SD(xZR, xEmu, offsetof(x64emu_t, ymm[a])); + SD(xZR, xEmu, offsetof(x64emu_t, ymm[a]) + 8); + } + } if (dyn->e.ssecache[a].v == -1) return; if (dyn->e.ssecache[a].vector) { - SET_ELEMENT_WIDTH(s1, VECTOR_SEW8); + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 0); ADDI(s1, xEmu, offsetof(x64emu_t, xmm[a])); - VSE8_V(dyn->e.ssecache[a].reg, s1, VECTOR_UNMASKED, VECTOR_NFIELD1); + VSE_V(dyn->e.ssecache[a].reg, s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); } else if (dyn->e.ssecache[a].single) FSW(dyn->e.ssecache[a].reg, xEmu, offsetof(x64emu_t, xmm[a])); else FSD(dyn->e.ssecache[a].reg, xEmu, offsetof(x64emu_t, xmm[a])); } +void ymm_mark_zero(dynarec_rv64_t* dyn, int ninst, int a) +{ +#if STEP == 0 + dyn->insts[ninst].ymm0_add |= (1 << a); +#endif + avx_mark_zero(dyn, ninst, a); +} + void fpu_pushcache(dynarec_rv64_t* dyn, int ninst, int s1, int not07) { - // need to save 0..1 && 10..17 (maybe) && 28..31 - // so 0..7 (SSE) && 17..23 (x87+MMX) - int start = not07?8:0; - // only SSE regs needs to be push back to xEmu (needs to be "write") - int n=0; - for (int i=start; i<8; i++) - if(dyn->e.ssecache[i].v!=-1) - ++n; + // for float registers, we might lost f0..f7, f10..f17 and f28..f31, that means + // for extcache, we're saving 0..7 (SSE), 18..23 (MMX). + int start = not07 ? 8 : 0; + int n = 0; + for (int i = start; i < 8; i++) + if (dyn->e.ssecache[i].v != -1 && !dyn->e.ssecache[i].vector) ++n; if(n) { - MESSAGE(LOG_DUMP, "\tPush XMM Cache (%d)------\n", n); - for (int i=start; i<8; ++i) - if(dyn->e.ssecache[i].v!=-1) { - if (dyn->e.ssecache[i].vector) { - SET_ELEMENT_WIDTH(s1, VECTOR_SEW8); - ADDI(s1, xEmu, offsetof(x64emu_t, xmm[i])); - VSE8_V(dyn->e.ssecache[i].reg, s1, VECTOR_UNMASKED, VECTOR_NFIELD1); - } else if (dyn->e.ssecache[i].single) + MESSAGE(LOG_DUMP, "\tPush (float) XMM Cache (%d)------\n", n); + for (int i = start; i < 8; ++i) + if (dyn->e.ssecache[i].v != -1) { + if (dyn->e.ssecache[i].vector) + continue; + else if (dyn->e.ssecache[i].single) FSW(dyn->e.ssecache[i].reg, xEmu, offsetof(x64emu_t, xmm[i])); else FSD(dyn->e.ssecache[i].reg, xEmu, offsetof(x64emu_t, xmm[i])); + if (is_avx_zero(dyn, ninst, i)) { + if (rv64_xtheadmempair) { + ADDI(s1, xEmu, offsetof(x64emu_t, ymm[i])); + TH_SDD(xZR, xZR, s1, 0); + } else { + SD(xZR, xEmu, offsetof(x64emu_t, ymm[i])); + SD(xZR, xEmu, offsetof(x64emu_t, ymm[i]) + 8); + } + } } - MESSAGE(LOG_DUMP, "\t------- Push XMM Cache (%d)\n", n); + MESSAGE(LOG_DUMP, "\t------- Push (float) XMM Cache (%d)\n", n); } n = 0; - for(int i=17; i<24; ++i) - if(dyn->e.extcache[i].v!=0) - ++n; - if(n) { - MESSAGE(LOG_DUMP, "\tPush x87/MMX Cache (%d)------\n", n); - SUBI(xSP, xSP, 8*((n+1)&~1)); + for (int i = 18; i < 24; ++i) + if (dyn->e.extcache[i].v != 0) ++n; + if (n) { + MESSAGE(LOG_DUMP, "\tPush (float) x87/MMX Cache (%d)------\n", n); + SUBI(xSP, xSP, 8 * ((n + 1) & ~1)); int p = 0; - for(int i=17; i<24; ++i) - if(dyn->e.extcache[i].v!=0) { - switch(dyn->e.extcache[i].t) { + for (int i = 18; i < 24; ++i) + if (dyn->e.extcache[i].v != 0) { + switch (dyn->e.extcache[i].t) { case EXT_CACHE_ST_F: case EXT_CACHE_SS: - FSW(EXTREG(i), xSP, p*8); + FSW(EXTREG(i), xSP, p * 8); break; default: - FSD(EXTREG(i), xSP, p*8); + FSD(EXTREG(i), xSP, p * 8); break; }; ++p; } - MESSAGE(LOG_DUMP, "\t------- Push x87/MMX Cache (%d)\n", n); + MESSAGE(LOG_DUMP, "\t------- Push (float) x87/MMX Cache (%d)\n", n); + } + + // for vector registers, we might lost all of them, that means for extcache, + // we're saving 0..15 (SSE). + // TODO: save MMX registers too when we add support for MMX vector. + n = 0; + for (int i = start; i < 16; i++) + if (dyn->e.ssecache[i].v != -1 && dyn->e.ssecache[i].vector) ++n; + if (n) { + MESSAGE(LOG_DUMP, "\tPush (vector) XMM Cache (%d)------\n", n); + for (int i = start; i < 16; ++i) + if (dyn->e.ssecache[i].v != -1) { + if (dyn->e.ssecache[i].vector) { + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 0); + ADDI(s1, xEmu, offsetof(x64emu_t, xmm[i])); + VSE_V(dyn->e.ssecache[i].reg, s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + } + if (is_avx_zero(dyn, ninst, i)) { + if (rv64_xtheadmempair) { + ADDI(s1, xEmu, offsetof(x64emu_t, ymm[i])); + TH_SDD(xZR, xZR, s1, 0); + } else { + SD(xZR, xEmu, offsetof(x64emu_t, ymm[i])); + SD(xZR, xEmu, offsetof(x64emu_t, ymm[i]) + 8); + } + } + } + MESSAGE(LOG_DUMP, "\t------- Push (vector) XMM Cache (%d)\n", n); } } void fpu_popcache(dynarec_rv64_t* dyn, int ninst, int s1, int not07) { - int start = not07?8:0; - // only SSE regs needs to be pop back from xEmu (don't need to be "write" this time) - int n=0; - for (int i=start; i<8; i++) - if(dyn->e.ssecache[i].v!=-1) - ++n; - if(n) { - MESSAGE(LOG_DUMP, "\tPop XMM Cache (%d)------\n", n); - for (int i=start; i<8; ++i) - if(dyn->e.ssecache[i].v!=-1) { - if (dyn->e.ssecache[i].vector) { - SET_ELEMENT_WIDTH(s1, VECTOR_SEW8); - ADDI(s1, xEmu, offsetof(x64emu_t, xmm[i])); - VLE8_V(dyn->e.ssecache[i].reg, s1, VECTOR_UNMASKED, VECTOR_NFIELD1); - } else if (dyn->e.ssecache[i].single) + // float registers + int start = not07 ? 8 : 0; + int n = 0; + for (int i = start; i < 8; i++) + if (dyn->e.ssecache[i].v != -1 && !dyn->e.ssecache[i].vector) ++n; + if (n) { + MESSAGE(LOG_DUMP, "\tPop (float) XMM Cache (%d)------\n", n); + for (int i = start; i < 8; ++i) + if (dyn->e.ssecache[i].v != -1) { + if (dyn->e.ssecache[i].vector) + continue; + else if (dyn->e.ssecache[i].single) FLW(dyn->e.ssecache[i].reg, xEmu, offsetof(x64emu_t, xmm[i])); else FLD(dyn->e.ssecache[i].reg, xEmu, offsetof(x64emu_t, xmm[i])); } - MESSAGE(LOG_DUMP, "\t------- Pop XMM Cache (%d)\n", n); + MESSAGE(LOG_DUMP, "\t------- Pop (float) XMM Cache (%d)\n", n); } n = 0; - for(int i=17; i<24; ++i) - if(dyn->e.extcache[i].v!=0) - ++n; - if(n) { - MESSAGE(LOG_DUMP, "\tPush x87/MMX Cache (%d)------\n", n); + for (int i = 18; i < 24; ++i) + if (dyn->e.extcache[i].v != 0) ++n; + if (n) { + MESSAGE(LOG_DUMP, "\tPush (float) x87/MMX Cache (%d)------\n", n); int p = 0; - for(int i=17; i<24; ++i) - if(dyn->e.extcache[i].v!=0) { - switch(dyn->e.extcache[i].t) { + for (int i = 18; i < 24; ++i) + if (dyn->e.extcache[i].v != 0) { + switch (dyn->e.extcache[i].t) { case EXT_CACHE_ST_F: case EXT_CACHE_SS: - FLW(EXTREG(i), xSP, p*8); + FLW(EXTREG(i), xSP, p * 8); break; default: - FLD(EXTREG(i), xSP, p*8); + FLD(EXTREG(i), xSP, p * 8); break; }; ++p; } - ADDI(xSP, xSP, 8*((n+1)&~1)); - MESSAGE(LOG_DUMP, "\t------- Push x87/MMX Cache (%d)\n", n); + ADDI(xSP, xSP, 8 * ((n + 1) & ~1)); + MESSAGE(LOG_DUMP, "\t------- Push (float) x87/MMX Cache (%d)\n", n); + } + + // vector registers + // TODO: restore MMX registers too when we add support for MMX vector. + n = 0; + for (int i = start; i < 16; i++) + if (dyn->e.ssecache[i].v != -1 && dyn->e.ssecache[i].vector) ++n; + if (n) { + MESSAGE(LOG_DUMP, "\tPop (vector) XMM Cache (%d)------\n", n); + for (int i = start; i < 16; ++i) + if (dyn->e.ssecache[i].v != -1) { + if (dyn->e.ssecache[i].vector) { + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 0); + ADDI(s1, xEmu, offsetof(x64emu_t, xmm[i])); + VLE_V(dyn->e.ssecache[i].reg, s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + } + } + MESSAGE(LOG_DUMP, "\t------- Pop (vector) XMM Cache (%d)\n", n); } } @@ -1951,6 +2248,13 @@ static int findCacheSlot(dynarec_rv64_t* dyn, int ninst, int t, int n, extcache_ case EXT_CACHE_XMMW: if (t == EXT_CACHE_XMMR) return i; + case EXT_CACHE_YMMR: + if (t == EXT_CACHE_YMMW) + return i; + break; + case EXT_CACHE_YMMW: + if (t == EXT_CACHE_YMMR) + return i; break; } } @@ -1962,11 +2266,16 @@ static void swapCache(dynarec_rv64_t* dyn, int ninst, int i, int j, extcache_t * { if (i == j) return; - if (cache->extcache[i].t == EXT_CACHE_XMMR || cache->extcache[i].t == EXT_CACHE_XMMW || cache->extcache[j].t == EXT_CACHE_XMMR || cache->extcache[j].t == EXT_CACHE_XMMW) { + if (cache->extcache[i].t == EXT_CACHE_XMMR || cache->extcache[i].t == EXT_CACHE_XMMW + || cache->extcache[j].t == EXT_CACHE_XMMR || cache->extcache[j].t == EXT_CACHE_XMMW + || cache->extcache[i].t == EXT_CACHE_YMMR || cache->extcache[i].t == EXT_CACHE_YMMW + || cache->extcache[j].t == EXT_CACHE_YMMR || cache->extcache[j].t == EXT_CACHE_YMMW) { + int reg_i = EXTREG(i); + int reg_j = EXTREG(j); if (!cache->extcache[i].v) { // a mov is enough, no need to swap MESSAGE(LOG_DUMP, "\t - Moving %d <- %d\n", i, j); - VMV_V_V(i, j); + VMV_V_V(reg_i, reg_j); cache->extcache[i].v = cache->extcache[j].v; cache->extcache[j].v = 0; return; @@ -1974,9 +2283,9 @@ static void swapCache(dynarec_rv64_t* dyn, int ninst, int i, int j, extcache_t * // SWAP ext_cache_t tmp; MESSAGE(LOG_DUMP, "\t - Swapping %d <-> %d\n", i, j); - VXOR_VV(i, i, j, VECTOR_UNMASKED); - VXOR_VV(j, i, j, VECTOR_UNMASKED); - VXOR_VV(i, i, j, VECTOR_UNMASKED); + VXOR_VV(reg_i, reg_i, reg_j, VECTOR_UNMASKED); + VXOR_VV(reg_j, reg_i, reg_j, VECTOR_UNMASKED); + VXOR_VV(reg_i, reg_i, reg_j, VECTOR_UNMASKED); tmp.v = cache->extcache[i].v; cache->extcache[i].v = cache->extcache[j].v; cache->extcache[j].v = tmp.v; @@ -2027,11 +2336,11 @@ static void swapCache(dynarec_rv64_t* dyn, int ninst, int i, int j, extcache_t * static void loadCache(dynarec_rv64_t* dyn, int ninst, int stack_cnt, int s1, int s2, int s3, int* s1_val, int* s2_val, int* s3_top, extcache_t* cache, int i, int t, int n) { int reg = EXTREG(i); - if (cache->extcache[i].v && (cache->extcache[i].t == EXT_CACHE_XMMR || cache->extcache[i].t == EXT_CACHE_XMMW)) { + if (cache->extcache[i].v && (cache->extcache[i].t == EXT_CACHE_XMMR || cache->extcache[i].t == EXT_CACHE_XMMW || cache->extcache[i].t == EXT_CACHE_YMMR || cache->extcache[i].t == EXT_CACHE_YMMW)) { int j = i + 1; while (cache->extcache[j].v) ++j; MESSAGE(LOG_DUMP, "\t - Moving away %d\n", i); - VMV_V_V(j, i); + VMV_V_V(EXTREG(j), reg); cache->extcache[j].v = cache->extcache[i].v; } else if (cache->extcache[i].v) { int single = 0; @@ -2053,9 +2362,16 @@ static void loadCache(dynarec_rv64_t* dyn, int ninst, int stack_cnt, int s1, int case EXT_CACHE_XMMR: case EXT_CACHE_XMMW: MESSAGE(LOG_DUMP, "\t - Loading %s\n", getCacheName(t, n)); - SET_ELEMENT_WIDTH(s1, VECTOR_SEW8); + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 0); ADDI(s1, xEmu, offsetof(x64emu_t, xmm[n])); - VLE8_V(reg, s1, VECTOR_UNMASKED, VECTOR_NFIELD1); + VLE_V(reg, s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + break; + case EXT_CACHE_YMMR: + case EXT_CACHE_YMMW: + MESSAGE(LOG_DUMP, "\t - Loading %s\n", getCacheName(t, n)); + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 0); + ADDI(s1, xEmu, offsetof(x64emu_t, ymm[n])); + VLE_V(reg, s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); break; case EXT_CACHE_SS: MESSAGE(LOG_DUMP, "\t - Loading %s\n", getCacheName(t, n)); @@ -2066,8 +2382,13 @@ static void loadCache(dynarec_rv64_t* dyn, int ninst, int stack_cnt, int s1, int FLD(reg, xEmu, offsetof(x64emu_t, xmm[n])); break; case EXT_CACHE_MM: + case EXT_CACHE_MMV: MESSAGE(LOG_DUMP, "\t - Loading %s\n", getCacheName(t, n)); FLD(reg, xEmu, offsetof(x64emu_t, mmx[n])); + if (t == EXT_CACHE_MMV) { + SET_ELEMENT_WIDTH(s1, VECTOR_SEW64, 0); + VFMV_S_F(reg, reg); + } break; case EXT_CACHE_ST_D: case EXT_CACHE_ST_F: @@ -2109,13 +2430,20 @@ static void unloadCache(dynarec_rv64_t* dyn, int ninst, int stack_cnt, int s1, i int reg = EXTREG(i); switch(t) { case EXT_CACHE_XMMR: + case EXT_CACHE_YMMR: MESSAGE(LOG_DUMP, "\t - ignoring %s\n", getCacheName(t, n)); break; case EXT_CACHE_XMMW: MESSAGE(LOG_DUMP, "\t - Unloading %s\n", getCacheName(t, n)); - SET_ELEMENT_WIDTH(s1, VECTOR_SEW8); + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 0); ADDI(s1, xEmu, offsetof(x64emu_t, xmm[n])); - VSE8_V(reg, s1, VECTOR_UNMASKED, VECTOR_NFIELD1); + VSE_V(reg, s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + break; + case EXT_CACHE_YMMW: + MESSAGE(LOG_DUMP, "\t - Unloading %s\n", getCacheName(t, n)); + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 0); + ADDI(s1, xEmu, offsetof(x64emu_t, ymm[n])); + VSE_V(reg, s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); break; case EXT_CACHE_SS: MESSAGE(LOG_DUMP, "\t - Unloading %s\n", getCacheName(t, n)); @@ -2126,7 +2454,12 @@ static void unloadCache(dynarec_rv64_t* dyn, int ninst, int stack_cnt, int s1, i FSD(reg, xEmu, offsetof(x64emu_t, xmm[n])); break; case EXT_CACHE_MM: + case EXT_CACHE_MMV: MESSAGE(LOG_DUMP, "\t - Unloading %s\n", getCacheName(t, n)); + if (t == EXT_CACHE_MMV) { + SET_ELEMENT_WIDTH(s1, VECTOR_SEW64, 0); + VFMV_F_S(reg, reg); + } FSD(reg, xEmu, offsetof(x64emu_t, mmx[n])); break; case EXT_CACHE_ST_D: @@ -2165,7 +2498,6 @@ static void unloadCache(dynarec_rv64_t* dyn, int ninst, int stack_cnt, int s1, i static void fpuCacheTransform(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) { -#if STEP > 1 int i2 = dyn->insts[ninst].x64.jmp_insts; if(i2<0) return; @@ -2204,7 +2536,7 @@ static void fpuCacheTransform(dynarec_rv64_t* dyn, int ninst, int s1, int s2, in extcache_t cache = dyn->e; int s1_val = 0; int s2_val = 0; - // unload every uneeded cache + // unload every unneeded cache // check SSE first, than MMX, in order, for optimisation issue for (int i = 0; i < 16; ++i) { int j = findCacheSlot(dyn, ninst, EXT_CACHE_SS, i, &cache); @@ -2221,6 +2553,9 @@ static void fpuCacheTransform(dynarec_rv64_t* dyn, int ninst, int s1, int s2, in int j = findCacheSlot(dyn, ninst, EXT_CACHE_MM, i, &cache); if (j >= 0 && findCacheSlot(dyn, ninst, EXT_CACHE_MM, i, &cache_i2) == -1) unloadCache(dyn, ninst, stack_cnt, s1, s2, s3, &s1_val, &s2_val, &s3_top, &cache, j, cache.extcache[j].t, cache.extcache[j].n); + j = findCacheSlot(dyn, ninst, EXT_CACHE_MMV, i, &cache); + if (j >= 0 && findCacheSlot(dyn, ninst, EXT_CACHE_MMV, i, &cache_i2) == -1) + unloadCache(dyn, ninst, stack_cnt, s1, s2, s3, &s1_val, &s2_val, &s3_top, &cache, j, cache.extcache[j].t, cache.extcache[j].n); } for (int i = 0; i < 24; ++i) { if(cache.extcache[i].v) @@ -2269,6 +2604,24 @@ static void fpuCacheTransform(dynarec_rv64_t* dyn, int ninst, int s1, int s2, in FMVXD(s1, EXTREG(i)); FCVTDL(EXTREG(i), s1, RD_RTZ); cache.extcache[i].t = EXT_CACHE_ST_D; + } else if (cache.extcache[i].t == EXT_CACHE_XMMR && cache_i2.extcache[i].t == EXT_CACHE_XMMW) { + cache.extcache[i].t = EXT_CACHE_XMMW; + } else if (cache.extcache[i].t == EXT_CACHE_YMMR && cache_i2.extcache[i].t == EXT_CACHE_YMMW) { + cache.extcache[i].t = EXT_CACHE_YMMW; + } else if (cache.extcache[i].t == EXT_CACHE_XMMW && cache_i2.extcache[i].t == EXT_CACHE_XMMR) { + // refresh cache... + MESSAGE(LOG_DUMP, "\t - Refreh %s\n", getCacheName(cache.extcache[i].t, cache.extcache[i].n)); + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 0); + ADDI(s1, xEmu, offsetof(x64emu_t, xmm[cache.extcache[i].n])); + VSE_V(EXTREG(i), s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + cache.extcache[i].t = EXT_CACHE_XMMR; + } else if (cache.extcache[i].t == EXT_CACHE_YMMW && cache_i2.extcache[i].t == EXT_CACHE_YMMR) { + // refresh cache... + MESSAGE(LOG_DUMP, "\t - Refreh %s\n", getCacheName(cache.extcache[i].t, cache.extcache[i].n)); + SET_ELEMENT_WIDTH(s1, VECTOR_SEWANY, 0); + ADDI(s1, xEmu, offsetof(x64emu_t, ymm[cache.extcache[i].n])); + VSE_V(EXTREG(i), s1, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1); + cache.extcache[i].t = EXT_CACHE_YMMR; } } } @@ -2299,11 +2652,9 @@ static void fpuCacheTransform(dynarec_rv64_t* dyn, int ninst, int s1, int s2, in stack_cnt = cache_i2.stack; } MESSAGE(LOG_DUMP, "\t---- Cache Transform\n"); -#endif } static void flagsCacheTransform(dynarec_rv64_t* dyn, int ninst, int s1) { -#if STEP > 1 int j64; int jmp = dyn->insts[ninst].x64.jmp_insts; if(jmp<0) @@ -2344,34 +2695,32 @@ static void flagsCacheTransform(dynarec_rv64_t* dyn, int ninst, int s1) CALL_(UpdateFlags, -1, 0); MARKF2; } -#endif } static void sewTransform(dynarec_rv64_t* dyn, int ninst, int s1) { -#if STEP > 1 int j64; int jmp = dyn->insts[ninst].x64.jmp_insts; if (jmp < 0) return; - if (dyn->insts[jmp].vector_sew == VECTOR_SEWNA) return; - MESSAGE(LOG_DUMP, "\tSEW changed to %d ---- ninst=%d -> %d\n", dyn->insts[jmp].vector_sew, ninst, jmp); - vector_vsetvl_emul1(dyn, ninst, s1, dyn->insts[jmp].vector_sew); -#endif + if (dyn->insts[jmp].vector_sew_entry == VECTOR_SEWNA) return; + MESSAGE(LOG_DUMP, "\tSEW changed to %d ---- ninst=%d -> %d\n", dyn->insts[jmp].vector_sew_entry, ninst, jmp); + vector_vsetvli(dyn, ninst, s1, dyn->insts[jmp].vector_sew_entry, VECTOR_LMUL1, 1); } -void CacheTransform(dynarec_rv64_t* dyn, int ninst, int cacheupd, int s1, int s2, int s3) { - if (cacheupd & 3) - sewTransform(dyn, ninst, s1); +void CacheTransform(dynarec_rv64_t* dyn, int ninst, int cacheupd, int s1, int s2, int s3) +{ if (cacheupd & 2) fpuCacheTransform(dyn, ninst, s1, s2, s3); if (cacheupd & 1) flagsCacheTransform(dyn, ninst, s1); + if (cacheupd & 4) + sewTransform(dyn, ninst, s1); } void rv64_move32(dynarec_rv64_t* dyn, int ninst, int reg, int32_t val, int zeroup) { - // Depending on val, the following insns are emitted. + // Depending on val, the following insts are emitted. // val == 0 -> ADDI // lo12 != 0 && hi20 == 0 -> ADDI // lo12 == 0 && hi20 != 0 -> LUI @@ -2385,8 +2734,7 @@ void rv64_move32(dynarec_rv64_t* dyn, int ninst, int reg, int32_t val, int zerou src = reg; } if (lo12 || !hi20) ADDIW(reg, src, lo12); - if((zeroup && ((hi20&0x80000) || (!hi20 && (lo12&0x800)))) - || (!zeroup && !(val&0x80000000) && ((hi20&0x80000) || (!hi20 && (lo12&0x800))))) { + if (zeroup && (val & 0x80000000)) { ZEROUP(reg); } } @@ -2420,7 +2768,7 @@ void fpu_reflectcache(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) void fpu_unreflectcache(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3) { - // need to undo the top and stack tracking that must not be reflected permenatly yet + // need to undo the top and stack tracking that must not be reflected permanently yet x87_unreflectcache(dyn, ninst, s1, s2, s3); } @@ -2450,10 +2798,10 @@ void fpu_reset_cache(dynarec_rv64_t* dyn, int ninst, int reset_n) #if STEP > 1 // for STEP 2 & 3, just need to refresh with current, and undo the changes (push & swap) dyn->e = dyn->insts[ninst].e; - dyn->vector_sew = dyn->insts[ninst].vector_sew; + dyn->vector_sew = dyn->insts[ninst].vector_sew_entry; #else dyn->e = dyn->insts[reset_n].e; - dyn->vector_sew = dyn->insts[reset_n].vector_sew; + dyn->vector_sew = dyn->insts[reset_n].vector_sew_exit; #endif extcacheUnwind(&dyn->e); #if STEP == 0 @@ -2512,19 +2860,304 @@ void fpu_propagate_stack(dynarec_rv64_t* dyn, int ninst) dyn->e.swapped = 0; } -// Use vector extension as like SIMD for now, this function sets the specified element width, -// other configs are set automatically. -void vector_vsetvl_emul1(dynarec_rv64_t* dyn, int ninst, int s1, int sew) +// Simple wrapper for vsetvli, may use s1 as scratch +int vector_vsetvli(dynarec_rv64_t* dyn, int ninst, int s1, int sew, int vlmul, float multiple) { - if (sew == VECTOR_SEWNA) return; + if (sew == VECTOR_SEWNA) return VECTOR_SEW8; if (sew == VECTOR_SEWANY) sew = VECTOR_SEW8; - /* mu: mask undisturbed - * tu: tail undisturbed - * sew: selected element width - * lmul: vector register group multiplier - * - * mu tu sew lmul=1 */ - uint32_t vtypei = (0b0 << 7) | (0b0 << 6) | (sew << 3) | 0b000; - ADDI(s1, xZR, 16 >> sew); - VSETVLI(xZR, s1, vtypei); + + uint32_t vl = (int)((float)(16 >> sew) * multiple); + uint32_t vtypei = (sew << (3 - !!rv64_xtheadvector)) | vlmul; + if (dyn->inst_sew == VECTOR_SEWNA || dyn->inst_vl == 0 || dyn->inst_sew != sew || dyn->inst_vl != vl || dyn->inst_vlmul != vlmul) { + if (vl <= 31 && !rv64_xtheadvector) { + VSETIVLI(xZR, vl, vtypei); + } else { + ADDI(s1, xZR, vl); + VSETVLI(xZR, s1, vtypei); + } + } + dyn->inst_sew = sew; + dyn->inst_vl = vl; + dyn->inst_vlmul = vlmul; + return sew; +} + +static uint64_t xtheadvector_16bitmasks[16] = { + 0x0000000000000000, + 0x0000000000000001, + 0x0000000000010000, + 0x0000000000010001, + 0x0000000100000000, + 0x0000000100000001, + 0x0000000100010000, + 0x0000000100010001, + 0x0001000000000000, + 0x0001000000000001, + 0x0001000000010000, + 0x0001000000010001, + 0x0001000100000000, + 0x0001000100000001, + 0x0001000100010000, + 0x0001000100010001, +}; + +void vector_loadmask(dynarec_rv64_t* dyn, int ninst, int vreg, uint64_t imm, int s1, float multiple) +{ +#if STEP > 1 + uint8_t sew = dyn->inst_sew; + uint8_t vlmul = dyn->inst_vlmul; + if (rv64_xtheadvector) { + if (sew == VECTOR_SEW64 && vlmul == VECTOR_LMUL1) { + switch (imm) { + case 0: + VXOR_VV(vreg, vreg, vreg, VECTOR_UNMASKED); + return; + case 1: + ADDI(s1, xZR, 1); + VMV_S_X(vreg, s1); + return; + case 2: { + int scratch = fpu_get_scratch(dyn); + VMV_V_I(scratch, 1); + VSLIDE1UP_VX(vreg, scratch, xZR, VECTOR_UNMASKED); + return; + } + case 3: + VMV_V_I(vreg, 1); + return; + default: abort(); + } + } else if ((sew == VECTOR_SEW32 && vlmul == VECTOR_LMUL1) || (sew == VECTOR_SEW64 && vlmul == VECTOR_LMUL2)) { + switch (imm) { + case 0b0000: + VMV_S_X(vreg, xZR); + return; + case 0b0001: + ADDI(s1, xZR, 1); + VMV_S_X(vreg, s1); + return; + case 0b0010: + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0x100000000ULL); + VMV_S_X(vreg, s1); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + case 0b0011: + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0x100000001ULL); + VMV_S_X(vreg, s1); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + case 0b0100: { + int scratch = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + VMV_V_I(scratch, 1); + VMV_S_X(vreg, xZR); + VSLIDE1UP_VX(vreg, scratch, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + } + case 0b0101: + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + VMV_V_I(vreg, 1); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + case 0b0110: { + int scratch = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + VMV_V_I(scratch, 1); + MOV64x(s1, 0x100000000ULL); + VSLIDE1UP_VX(vreg, scratch, s1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + } + case 0b0111: { + int scratch = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + VMV_V_I(scratch, 1); + MOV64x(s1, 0x100000001ULL); + VSLIDE1UP_VX(vreg, scratch, s1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + } + case 0b1000: { + int scratch = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0x100000000ULL); + VMV_V_X(scratch, s1); + VMV_S_X(vreg, xZR); + VSLIDE1UP_VX(vreg, scratch, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + } + case 0b1001: { + int scratch = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0x100000000ULL); + VMV_V_X(scratch, s1); + ADDI(s1, xZR, 1); + VSLIDE1UP_VX(vreg, scratch, s1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + } + case 0b1010: + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0x100000000ULL); + VMV_V_X(vreg, s1); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + case 0b1011: { + int scratch = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0x100000000ULL); + VMV_V_X(scratch, s1); + MOV64x(s1, 0x100000001ULL); + VSLIDE1UP_VX(vreg, scratch, s1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + } + case 0b1100: { + int scratch = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0x100000001ULL); + VMV_V_X(scratch, s1); + VMV_S_X(vreg, xZR); + VSLIDE1UP_VX(vreg, scratch, xZR, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + } + case 0b1101: { + int scratch = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0x100000001ULL); + VMV_V_X(scratch, s1); + ADDI(s1, xZR, 1); + VSLIDE1UP_VX(vreg, scratch, s1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + } + case 0b1110: { + int scratch = fpu_get_scratch(dyn); + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0x100000001ULL); + VMV_V_X(scratch, s1); + ADDI(s1, s1, -1); + VSLIDE1UP_VX(vreg, scratch, s1, VECTOR_UNMASKED); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + } + case 0b1111: + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0x100000001ULL); + VMV_V_X(vreg, s1); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + default: abort(); + } + } else if ((sew == VECTOR_SEW16 && vlmul == VECTOR_LMUL1) || (sew == VECTOR_SEW32 && vlmul == VECTOR_LMUL2)) { + if (imm > 255) abort(); + if (imm == 0) { + VMV_S_X(vreg, xZR); + return; + } + int low = imm & 0xF; + int high = (imm >> 4) & 0xF; + int scratch; + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + if (low == high) { + MOV64x(s1, xtheadvector_16bitmasks[low]); + VMV_V_X(vreg, s1); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + } + if (high != 0) { + scratch = fpu_get_scratch(dyn); + MOV64x(s1, xtheadvector_16bitmasks[high]); + VMV_S_X(scratch, s1); + } + if (low != 0) + MOV64x(s1, xtheadvector_16bitmasks[low]); + else + s1 = xZR; + if (high != 0) { + VSLIDE1UP_VX(vreg, scratch, s1, VECTOR_UNMASKED); + } else { + VMV_S_X(vreg, s1); + } + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + } else if ((sew == VECTOR_SEW8 && vlmul == VECTOR_LMUL1) || (sew == VECTOR_SEW16 && vlmul == VECTOR_LMUL2)) { + switch (imm) { + case 0b0000000000001111: + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW32, VECTOR_LMUL1, 1); + MOV64x(s1, 0xFFFFFFFFFFFFFFFFULL); + VMV_S_X(vreg, s1); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + case 0b0000000011111111: + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0xFFFFFFFFFFFFFFFFULL); + VMV_S_X(vreg, s1); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + case 0b0101010101010101: + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0x0001000100010001ULL); + VMV_V_X(vreg, s1); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + case 0b1010101010101010: + vector_vsetvli(dyn, ninst, s1, VECTOR_SEW64, VECTOR_LMUL1, 1); + MOV64x(s1, 0x0100010001000100ULL); + VMV_V_X(vreg, s1); + vector_vsetvli(dyn, ninst, s1, sew, vlmul, multiple); + return; + default: abort(); + } + } else + abort(); + } else { + if (imm <= 0xF && (dyn->vector_eew == VECTOR_SEW32 || dyn->vector_eew == VECTOR_SEW64)) { + VMV_V_I(vreg, imm); + } else if (dyn->vector_eew == VECTOR_SEW8 && imm >= 0xFF) { + if ((imm > 0xFF) && (imm & 0xFF) == (imm >> 8)) { + MOV64x(s1, imm); + VMV_V_X(vreg, s1); + } else if (imm > 0xFF) { + abort(); // not used (yet) + } else { + MOV64x(s1, imm); + VXOR_VV(vreg, vreg, vreg, VECTOR_UNMASKED); + VMV_S_X(vreg, s1); + } + } else { + MOV64x(s1, imm); + VMV_S_X(vreg, s1); + } + } +#endif +} + + +void avx_purge_ymm(dynarec_rv64_t* dyn, int ninst, uint16_t mask, int s1) +{ + int do_something = 0; + for (int i = 0; i < 16; ++i) + if (mask & (1 << i)) { + if (is_avx_zero_unset(dyn, ninst, i)) { + if (!do_something) { + MESSAGE(LOG_NONE, "Purge YMM mask=%04x --------\n", mask); + do_something = 1; + } + if (rv64_xtheadmempair) { + ADDI(s1, xEmu, offsetof(x64emu_t, ymm[i])); + TH_SDD(xZR, xZR, s1, 0); + } else { + SD(xZR, xEmu, offsetof(x64emu_t, ymm[i])); + SD(xZR, xEmu, offsetof(x64emu_t, ymm[i]) + 8); + } + } + } + if (do_something) + MESSAGE(LOG_NONE, "---------- Purge YMM\n"); } diff --git a/src/dynarec/rv64/dynarec_rv64_helper.h b/src/dynarec/rv64/dynarec_rv64_helper.h index 16098141e56fe34613e4952a2589a082db0edf93..2ae12cf3e4cf7188cbda3ffba93d9584d9c8ea8e 100644 --- a/src/dynarec/rv64/dynarec_rv64_helper.h +++ b/src/dynarec/rv64/dynarec_rv64_helper.h @@ -213,7 +213,7 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x2, S, &fixedaddress, rex, NULL, 1, D); \ - ADD(S, wback, O); \ + ADDz(S, wback, O); \ LDxw(x1, S, fixedaddress); \ ed = x1; \ } @@ -225,15 +225,15 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x2, S, &fixedaddress, rex, NULL, 1, D); \ - ADD(S, wback, O); \ + ADDz(S, wback, O); \ LDz(x1, S, fixedaddress); \ ed = x1; \ } -#define WBACKO(O) \ - if (wback) { \ - ADD(O, wback, O); \ - SDxw(ed, O, 0); \ - SMWRITE2(); \ +#define WBACKO(O) \ + if (wback) { \ + ADDz(O, wback, O); \ + SDxw(ed, O, 0); \ + SMWRITE2(); \ } // FAKEED like GETED, but doesn't get anything @@ -310,7 +310,7 @@ } else { \ SMREAD(); \ addr = geted(dyn, addr, ninst, nextop, &wback, x3, x2, &fixedaddress, rex, NULL, 1, D); \ - ADD(x3, wback, i); \ + ADDz(x3, wback, i); \ if (wback != x3) wback = x3; \ LBU(i, wback, fixedaddress); \ wb1 = 1; \ @@ -334,7 +334,7 @@ ed = i; \ } else { \ SMREAD(); \ - addr = geted(dyn, addr, ninst, nextop, &wback, x2, x3, &fixedaddress, rex, NULL, 1, D); \ + addr = geted(dyn, addr, ninst, nextop, &wback, x3, x2, &fixedaddress, rex, NULL, 1, D); \ LB(i, wback, fixedaddress); \ wb1 = 1; \ ed = i; \ @@ -420,6 +420,9 @@ OR(wback, wback, ed); \ } + +#define YMM0(a) ymm_mark_zero(dyn, ninst, a); + // Get direction with size Z and based of F_DF flag, on register r ready for load/store fetching // using s as scratch. #define GETDIR(r, s, Z) \ @@ -480,18 +483,22 @@ gback = xEmu; \ gdoffset = offsetof(x64emu_t, xmm[gd]) +#define GETVX() \ + sse_forget_reg(dyn, ninst, x3, vex.v); \ + vback = xEmu; \ + vxoffset = offsetof(x64emu_t, xmm[vex.v]) + // Get Ex address in general register a, will purge SS or SD if it's reg and is loaded. May use x3. Use wback as load address! -#define GETEX(a, D) \ - if (MODREG) { \ - ed = (nextop & 7) + (rex.b << 3); \ - sse_forget_reg(dyn, ninst, x3, ed); \ - fixedaddress = offsetof(x64emu_t, xmm[ed]); \ - wback = xEmu; \ - } else { \ - SMREAD(); \ - ed = 16; \ - addr = geted(dyn, addr, ninst, nextop, &wback, a, x3, &fixedaddress, rex, NULL, 0, D); \ - fixedaddress = 0; /* TODO: optimize this! */ \ +#define GETEX(a, D, I12) \ + if (MODREG) { \ + ed = (nextop & 7) + (rex.b << 3); \ + sse_forget_reg(dyn, ninst, x3, ed); \ + fixedaddress = offsetof(x64emu_t, xmm[ed]); \ + wback = xEmu; \ + } else { \ + SMREAD(); \ + ed = 16; \ + addr = geted(dyn, addr, ninst, nextop, &wback, a, x3, &fixedaddress, rex, NULL, I12, D); \ } // Get GX as a quad (might use x1) @@ -505,30 +512,53 @@ a = sse_get_reg_vector(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), w, sew); \ } else { \ SMREAD(); \ - addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 1, D); \ + addr = geted(dyn, addr, ninst, nextop, &ed, x3, x2, &fixedaddress, rex, NULL, 0, D); \ a = fpu_get_scratch(dyn); \ - ADDI(x2, ed, fixedaddress); \ - VLE_V(a, x2, sew, VECTOR_UNMASKED, VECTOR_NFIELD1); \ + VLE_V(a, ed, sew, VECTOR_UNMASKED, VECTOR_NFIELD1); \ + } + +// Put Back EX if it was a memory and not an emm register +#define PUTEX_vector(a, sew) \ + if (!MODREG) { \ + VSE_V(a, ed, sew, VECTOR_UNMASKED, VECTOR_NFIELD1); \ + SMWRITE2(); \ } -#define GETGM() \ - gd = ((nextop & 0x38) >> 3); \ - mmx_forget_reg(dyn, ninst, gd); \ - gback = xEmu; \ +// Get GM, might use x1 as a scratch +#define GETGM() \ + gd = ((nextop & 0x38) >> 3); \ + mmx_forget_reg(dyn, ninst, x1, gd); \ + gback = xEmu; \ gdoffset = offsetof(x64emu_t, mmx[gd]) +// Get GM as vector, might use x1, x2 and x3 +#define GETGM_vector(a) \ + gd = ((nextop & 0x38) >> 3); \ + a = mmx_get_reg_vector(dyn, ninst, x1, x2, x3, gd) + // Get EM, might use x3 -#define GETEM(a, D) \ +#define GETEM(a, D, I12) \ + if (MODREG) { \ + ed = (nextop & 7); \ + mmx_forget_reg(dyn, ninst, a, ed); \ + fixedaddress = offsetof(x64emu_t, mmx[ed]); \ + wback = xEmu; \ + } else { \ + SMREAD(); \ + ed = 8; \ + addr = geted(dyn, addr, ninst, nextop, &wback, a, x3, &fixedaddress, rex, NULL, I12, D); \ + } + +// Get EM as vector, might use x1, x2 and x3 +#define GETEM_vector(a, D) \ if (MODREG) { \ - ed = (nextop & 7); \ - mmx_forget_reg(dyn, ninst, ed); \ - fixedaddress = offsetof(x64emu_t, mmx[ed]); \ - wback = xEmu; \ + a = mmx_get_reg_vector(dyn, ninst, x1, x2, x3, (nextop & 7)); \ } else { \ SMREAD(); \ - ed = 8; \ - addr = geted(dyn, addr, ninst, nextop, &wback, a, x3, &fixedaddress, rex, NULL, 0, D); \ - fixedaddress = 0; /* TODO: optimize this! */ \ + addr = geted(dyn, addr, ninst, nextop, &wback, a, x3, &fixedaddress, rex, NULL, 1, D); \ + a = fpu_get_scratch(dyn); \ + FLD(a, ed, fixedaddress); \ + VFMV_S_F(a, a); \ } #define GETGX_empty_vector(a) \ @@ -854,6 +884,11 @@ if ((N) != d_none) { \ MOV_U12(S, (N)); \ SW(S, xEmu, offsetof(x64emu_t, df)); \ + if(dyn->f.pending==SF_PENDING && dyn->insts[ninst].x64.need_after && !(dyn->insts[ninst].x64.need_after&X_PEND)) { \ + CALL_(UpdateFlags, -1, 0); \ + dyn->f.pending = SF_SET; \ + SET_NODF(); \ + } \ dyn->f.dfnone = 0; \ } else \ SET_DFNONE() @@ -863,43 +898,71 @@ #define CLEAR_FLAGS() \ IFX(X_ALL) { ANDI(xFlags, xFlags, ~((1UL << F_AF) | (1UL << F_CF) | (1UL << F_OF2) | (1UL << F_ZF) | (1UL << F_SF) | (1UL << F_PF))); } +#define SET_FLAGS_NEZ(reg, F, scratch) \ + do { \ + if (rv64_xtheadcondmov) { \ + ORI(scratch, xFlags, 1 << F); \ + TH_MVNEZ(xFlags, scratch, reg); \ + } else { \ + BEQZ(reg, 8); \ + ORI(xFlags, xFlags, 1 << F); \ + } \ + } while (0) + +#define SET_FLAGS_EQZ(reg, F, scratch) \ + do { \ + if (rv64_xtheadcondmov) { \ + ORI(scratch, xFlags, 1 << F); \ + TH_MVEQZ(xFlags, scratch, reg); \ + } else { \ + BNEZ(reg, 8); \ + ORI(xFlags, xFlags, 1 << F); \ + } \ + } while (0) + +#define SET_FLAGS_LTZ(reg, F, scratch1, scratch2) \ + do { \ + if (rv64_xtheadcondmov) { \ + SLT(scratch1, reg, xZR); \ + ORI(scratch2, xFlags, 1 << F); \ + TH_MVNEZ(xFlags, scratch2, scratch1); \ + } else { \ + BGE(reg, xZR, 8); \ + ORI(xFlags, xFlags, 1 << F); \ + } \ + } while (0) + +// might use op1_ as scratch #define CALC_SUB_FLAGS(op1_, op2, res, scratch1, scratch2, width) \ - IFX(X_AF | X_CF | X_OF) \ - { \ + IFX (X_AF | X_CF | X_OF) { \ /* calc borrow chain */ \ /* bc = (res & (~op1 | op2)) | (~op1 & op2) */ \ OR(scratch1, op1_, op2); \ AND(scratch2, res, scratch1); \ AND(op1_, op1_, op2); \ OR(scratch2, scratch2, op1_); \ - IFX(X_AF) \ - { \ + IFX (X_AF) { \ /* af = bc & 0x8 */ \ ANDI(scratch1, scratch2, 8); \ - BEQZ(scratch1, 8); \ - ORI(xFlags, xFlags, 1 << F_AF); \ + SET_FLAGS_NEZ(scratch1, F_AF, op1_); \ } \ - IFX(X_CF) \ - { \ + IFX (X_CF) { \ /* cf = bc & (1<<(width-1)) */ \ if ((width) == 8) { \ ANDI(scratch1, scratch2, 0x80); \ } else { \ - SRLI(scratch1, scratch2, (width)-1); \ + SRLI(scratch1, scratch2, (width) - 1); \ if ((width) != 64) ANDI(scratch1, scratch1, 1); \ } \ - BEQZ(scratch1, 8); \ - ORI(xFlags, xFlags, 1 << F_CF); \ + SET_FLAGS_NEZ(scratch1, F_CF, op1_); \ } \ - IFX(X_OF) \ - { \ + IFX (X_OF) { \ /* of = ((bc >> (width-2)) ^ (bc >> (width-1))) & 0x1; */ \ - SRLI(scratch1, scratch2, (width)-2); \ + SRLI(scratch1, scratch2, (width) - 2); \ SRLI(scratch2, scratch1, 1); \ XOR(scratch1, scratch1, scratch2); \ ANDI(scratch1, scratch1, 1); \ - BEQZ(scratch1, 8); \ - ORI(xFlags, xFlags, 1 << F_OF2); \ + SET_FLAGS_NEZ(scratch1, F_OF2, op1_); \ } \ } @@ -995,9 +1058,6 @@ #ifndef BARRIER #define BARRIER(A) #endif -#ifndef BARRIER_NEXT -#define BARRIER_NEXT(A) -#endif #ifndef SET_HASCALLRET #define SET_HASCALLRET() #endif @@ -1081,15 +1141,16 @@ #define MODREG ((nextop & 0xC0) == 0xC0) #ifndef SET_ELEMENT_WIDTH -#define SET_ELEMENT_WIDTH(s1, sew) \ - do { \ - if (sew == VECTOR_SEWNA) { \ - } else if (sew == VECTOR_SEWANY && dyn->vector_sew != VECTOR_SEWNA) { \ - } else if (sew == dyn->vector_sew) { \ - } else { \ - vector_vsetvl_emul1(dyn, ninst, s1, sew); \ - } \ - dyn->vector_sew = sew; \ +#define SET_ELEMENT_WIDTH(s1, sew, set) \ + do { \ + if (sew == VECTOR_SEWANY && dyn->vector_sew != VECTOR_SEWNA) { \ + dyn->vector_eew = dyn->vector_sew; \ + } else if (sew == dyn->vector_sew) { \ + dyn->vector_eew = dyn->vector_sew; \ + } else { \ + dyn->vector_eew = vector_vsetvli(dyn, ninst, s1, sew, VECTOR_LMUL1, 1); \ + } \ + if (set) dyn->vector_sew = dyn->vector_eew; \ } while (0) #endif @@ -1126,6 +1187,7 @@ void* rv64_next(x64emu_t* emu, uintptr_t addr); #define dynarec64_DF STEPNAME(dynarec64_DF) #define dynarec64_F0 STEPNAME(dynarec64_F0) #define dynarec64_660F STEPNAME(dynarec64_660F) +#define dynarec64_660F38 STEPNAME(dynarec64_660F38) #define dynarec64_66F20F STEPNAME(dynarec64_66F20F) #define dynarec64_66F30F STEPNAME(dynarec64_66F30F) #define dynarec64_6664 STEPNAME(dynarec64_6664) @@ -1133,7 +1195,15 @@ void* rv64_next(x64emu_t* emu, uintptr_t addr); #define dynarec64_F20F STEPNAME(dynarec64_F20F) #define dynarec64_F30F STEPNAME(dynarec64_F30F) +#define dynarec64_64_vector STEPNAME(dynarec64_64_vector) +#define dynarec64_67_vector STEPNAME(dynarec64_67_vector) +#define dynarec64_0F_vector STEPNAME(dynarec64_0F_vector) #define dynarec64_660F_vector STEPNAME(dynarec64_660F_vector) +#define dynarec64_F20F_vector STEPNAME(dynarec64_F20F_vector) +#define dynarec64_F30F_vector STEPNAME(dynarec64_F30F_vector) + +#define dynarec64_AVX STEPNAME(dynarec64_AVX) +#define dynarec64_AVX_F3_0F STEPNAME(dynarec64_AVX_F3_0F) #define geted STEPNAME(geted) #define geted32 STEPNAME(geted32) @@ -1238,33 +1308,38 @@ void* rv64_next(x64emu_t* emu, uintptr_t addr); #define emit_pf STEPNAME(emit_pf) -#define x87_do_push STEPNAME(x87_do_push) -#define x87_do_push_empty STEPNAME(x87_do_push_empty) -#define x87_do_pop STEPNAME(x87_do_pop) -#define x87_get_current_cache STEPNAME(x87_get_current_cache) -#define x87_get_cache STEPNAME(x87_get_cache) -#define x87_get_extcache STEPNAME(x87_get_extcache) -#define x87_get_st STEPNAME(x87_get_st) -#define x87_get_st_empty STEPNAME(x87_get_st) -#define x87_free STEPNAME(x87_free) -#define x87_refresh STEPNAME(x87_refresh) -#define x87_forget STEPNAME(x87_forget) -#define x87_reget_st STEPNAME(x87_reget_st) -#define x87_stackcount STEPNAME(x87_stackcount) -#define x87_unstackcount STEPNAME(x87_unstackcount) -#define x87_swapreg STEPNAME(x87_swapreg) -#define x87_setround STEPNAME(x87_setround) -#define x87_restoreround STEPNAME(x87_restoreround) -#define sse_setround STEPNAME(sse_setround) -#define mmx_get_reg STEPNAME(mmx_get_reg) -#define mmx_get_reg_empty STEPNAME(mmx_get_reg_empty) -#define mmx_forget_reg STEPNAME(mmx_forget_reg) -#define sse_get_reg STEPNAME(sse_get_reg) -#define sse_get_reg_empty STEPNAME(sse_get_reg_empty) -#define sse_forget_reg STEPNAME(sse_forget_reg) -#define sse_purge07cache STEPNAME(sse_purge07cache) -#define sse_reflect_reg STEPNAME(sse_reflect_reg) - +#define x87_do_push STEPNAME(x87_do_push) +#define x87_do_push_empty STEPNAME(x87_do_push_empty) +#define x87_do_pop STEPNAME(x87_do_pop) +#define x87_get_current_cache STEPNAME(x87_get_current_cache) +#define x87_get_cache STEPNAME(x87_get_cache) +#define x87_get_extcache STEPNAME(x87_get_extcache) +#define x87_get_st STEPNAME(x87_get_st) +#define x87_get_st_empty STEPNAME(x87_get_st) +#define x87_free STEPNAME(x87_free) +#define x87_refresh STEPNAME(x87_refresh) +#define x87_forget STEPNAME(x87_forget) +#define x87_reget_st STEPNAME(x87_reget_st) +#define x87_stackcount STEPNAME(x87_stackcount) +#define x87_unstackcount STEPNAME(x87_unstackcount) +#define x87_swapreg STEPNAME(x87_swapreg) +#define x87_setround STEPNAME(x87_setround) +#define x87_restoreround STEPNAME(x87_restoreround) +#define sse_setround STEPNAME(sse_setround) +#define mmx_get_reg STEPNAME(mmx_get_reg) +#define mmx_get_reg_empty STEPNAME(mmx_get_reg_empty) +#define mmx_forget_reg STEPNAME(mmx_forget_reg) +#define sse_get_reg STEPNAME(sse_get_reg) +#define sse_get_reg_empty STEPNAME(sse_get_reg_empty) +#define sse_get_reg_size_changed STEPNAME(sse_get_reg_size_changed) +#define sse_forget_reg STEPNAME(sse_forget_reg) +#define sse_purge07cache STEPNAME(sse_purge07cache) +#define sse_reflect_reg STEPNAME(sse_reflect_reg) + +#define ymm_mark_zero STEPNAME(ymm_mark_zero) + +#define mmx_get_reg_vector STEPNAME(mmx_get_reg_vector) +#define mmx_get_reg_empty_vector STEPNAME(mmx_get_reg_empty_vector) #define sse_get_reg_empty_vector STEPNAME(sse_get_reg_empty_vector) #define sse_get_reg_vector STEPNAME(sse_get_reg_vector) #define sse_forget_reg_vector STEPNAME(sse_forget_reg_vector) @@ -1279,12 +1354,14 @@ void* rv64_next(x64emu_t* emu, uintptr_t addr); #define sse_purgecache STEPNAME(sse_purgecache) #define fpu_reflectcache STEPNAME(fpu_reflectcache) #define fpu_unreflectcache STEPNAME(fpu_unreflectcache) +#define avx_purge_ymm STEPNAME(avx_purge_ymm) #define CacheTransform STEPNAME(CacheTransform) #define rv64_move64 STEPNAME(rv64_move64) #define rv64_move32 STEPNAME(rv64_move32) -#define vector_vsetvl_emul1 STEPNAME(vector_vsetvl_emul1) +#define vector_vsetvli STEPNAME(vector_vsetvli) +#define vector_loadmask STEPNAME(vector_loadmask) /* setup r2 to address pointed by */ uintptr_t geted(dynarec_rv64_t* dyn, uintptr_t addr, int ninst, uint8_t nextop, uint8_t* ed, uint8_t hint, uint8_t scratch, int64_t* fixaddress, rex_t rex, int* l, int i12, int delta); @@ -1318,8 +1395,8 @@ void emit_test32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int void emit_test32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s3, int s4, int s5); void emit_add32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4, int s5); void emit_add32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s2, int s3, int s4, int s5); -void emit_add8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4); -void emit_add8c(dynarec_rv64_t* dyn, int ninst, int s1, int32_t c, int s2, int s3, int s4); +void emit_add8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, int s5); +void emit_add8c(dynarec_rv64_t* dyn, int ninst, int s1, int32_t c, int s2, int s3, int s4, int s5); void emit_sub32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4, int s5); void emit_sub32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s2, int s3, int s4, int s5); void emit_sub8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, int s5); @@ -1347,7 +1424,7 @@ void emit_xor16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, void emit_and16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4); // void emit_and16c(dynarec_rv64_t* dyn, int ninst, int s1, int32_t c, int s3, int s4); void emit_inc32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4, int s5); -void emit_inc16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4); +void emit_inc16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, int s5); void emit_inc8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4); void emit_dec32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4, int s5); void emit_dec16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, int s5); @@ -1364,9 +1441,9 @@ void emit_sbb8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, i void emit_sbb8c(dynarec_rv64_t* dyn, int ninst, int s1, int32_t c, int s3, int s4, int s5, int s6); void emit_sbb16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, int s5); // void emit_sbb16c(dynarec_rv64_t* dyn, int ninst, int s1, int32_t c, int s3, int s4); -void emit_neg32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3); -void emit_neg16(dynarec_rv64_t* dyn, int ninst, int s1, int s3, int s4); -void emit_neg8(dynarec_rv64_t* dyn, int ninst, int s1, int s3, int s4); +void emit_neg32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4, int s5); +void emit_neg16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4); +void emit_neg8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4); void emit_shl8c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int s4, int s5); void emit_shr8c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int s4, int s5); void emit_sar8c(dynarec_rv64_t* dyn, int ninst, int s1, uint32_t c, int s3, int s4, int s5); @@ -1388,8 +1465,8 @@ void emit_rol32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s void emit_ror32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4); void emit_rol32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, int s3, int s4); void emit_ror32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, int s3, int s4); -void emit_shrd32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uint32_t c, int s3, int s4); -void emit_shld32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uint32_t c, int s3, int s4); +void emit_shrd32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uint32_t c, int s3, int s4, int s5); +void emit_shld32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uint32_t c, int s3, int s4, int s5); void emit_shrd32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s5, int s3, int s4, int s6); void emit_shld32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s5, int s3, int s4, int s6); void emit_shrd16c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uint32_t c, int s3, int s4, int s5); @@ -1398,7 +1475,7 @@ void emit_shld16c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, uin void emit_pf(dynarec_rv64_t* dyn, int ninst, int s1, int s3, int s4); // x87 helper -// cache of the local stack counter, to avoid upadte at every call +// cache of the local stack counter, to avoid update at every call int x87_stackcount(dynarec_rv64_t* dyn, int ninst, int scratch); // restore local stack counter void x87_unstackcount(dynarec_rv64_t* dyn, int ninst, int scratch, int count); @@ -1435,12 +1512,16 @@ void x87_restoreround(dynarec_rv64_t* dyn, int ninst, int s1); // Set rounding according to mxcsr flags, return reg to restore flags int sse_setround(dynarec_rv64_t* dyn, int ninst, int s1, int s2); +// purge ymm_zero mask according to purge_ymm +void avx_purge_ymm(dynarec_rv64_t* dyn, int ninst, uint16_t mask, int s1); + void CacheTransform(dynarec_rv64_t* dyn, int ninst, int cacheupd, int s1, int s2, int s3); void rv64_move64(dynarec_rv64_t* dyn, int ninst, int reg, int64_t val); void rv64_move32(dynarec_rv64_t* dyn, int ninst, int reg, int32_t val, int zeroup); -void vector_vsetvl_emul1(dynarec_rv64_t* dyn, int ninst, int s1, int sew); +int vector_vsetvli(dynarec_rv64_t* dyn, int ninst, int s1, int sew, int vlmul, float multiple); +void vector_loadmask(dynarec_rv64_t* dyn, int ninst, int vreg, uint64_t imm, int s1, float multiple); #if STEP < 2 #define CHECK_CACHE() 0 @@ -1477,10 +1558,14 @@ int extcache_st_coherency(dynarec_rv64_t* dyn, int ninst, int a, int b); // MMX helpers // get float register for a MMX reg, create the entry if needed int mmx_get_reg(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int a); +// get vector register for a MMX reg, create the entry if needed +int mmx_get_reg_vector(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int a); // get float register for a MMX reg, but don't try to synch it if it needed to be created int mmx_get_reg_empty(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int a); +// get vector register for a MMX reg, but don't try to synch it if it needed to be created +int mmx_get_reg_empty_vector(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int a); // forget float register for a MMX reg, create the entry if needed -void mmx_forget_reg(dynarec_rv64_t* dyn, int ninst, int a); +void mmx_forget_reg(dynarec_rv64_t* dyn, int ninst, int s1, int a); // SSE/SSE2 helpers // get float register for a SSE reg, create the entry if needed @@ -1489,6 +1574,8 @@ int sse_get_reg(dynarec_rv64_t* dyn, int ninst, int s1, int a, int single); int sse_get_reg_vector(dynarec_rv64_t* dyn, int ninst, int s1, int a, int forwrite, int sew); // get float register for a SSE reg, but don't try to synch it if it needed to be created int sse_get_reg_empty(dynarec_rv64_t* dyn, int ninst, int s1, int a, int single); +// get an ext register for an SSE reg which changes size, with single or not AFTER the change +int sse_get_reg_size_changed(dynarec_rv64_t* dyn, int ninst, int s1, int a, int single); // get rvv register for an SSE reg, but don't try to synch it if it needed to be created int sse_get_reg_empty_vector(dynarec_rv64_t* dyn, int ninst, int s1, int a); // forget float register for a SSE reg, create the entry if needed @@ -1500,6 +1587,9 @@ void sse_purge07cache(dynarec_rv64_t* dyn, int ninst, int s1); // Push current value to the cache void sse_reflect_reg(dynarec_rv64_t* dyn, int ninst, int s1, int a); +// mark an ymm upper part has zero (forgetting upper part if needed) +void ymm_mark_zero(dynarec_rv64_t* dyn, int ninst, int a); + // common coproc helpers // reset the cache with n void fpu_reset_cache(dynarec_rv64_t* dyn, int ninst, int reset_n); @@ -1527,6 +1617,7 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni // uintptr_t dynarec64_65(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep,int* ok, int* need_epilog); uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); uintptr_t dynarec64_67(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); +uintptr_t dynarec64_67_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); uintptr_t dynarec64_67_32(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); uintptr_t dynarec64_D8(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); uintptr_t dynarec64_D9(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); @@ -1538,6 +1629,7 @@ uintptr_t dynarec64_DE(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); +uintptr_t dynarec64_660F38(dynarec_rv64_t* dyn, uintptr_t addr, uint8_t opcode, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); uintptr_t dynarec64_66F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); uintptr_t dynarec64_66F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); uintptr_t dynarec64_6664(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int seg, int* ok, int* need_epilog); @@ -1545,7 +1637,14 @@ uintptr_t dynarec64_66F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); +uintptr_t dynarec64_64_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int seg, int* ok, int* need_epilog); +uintptr_t dynarec64_0F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); +uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); +uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); + +uintptr_t dynarec64_AVX(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, vex_t vex, int* ok, int* need_epilog); +uintptr_t dynarec64_AVX_F3_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, vex_t vex, int* ok, int* need_epilog); #if STEP < 2 #define PASS2(A) @@ -1730,7 +1829,7 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i #define FCOMIS(v1, v2, s1, s2, s3, s4, s5) FCOMI(S, v1, v2, s1, s2, s3, s4, s5) #define FCOMID(v1, v2, s1, s2, s3, s4, s5) FCOMI(D, v1, v2, s1, s2, s3, s4, s5) -#define PURGE_YMM() /* TODO */ +#define PURGE_YMM() avx_purge_ymm(dyn, ninst, dyn->insts[ninst + 1].purge_ymm, x1) // reg = (reg < -32768) ? -32768 : ((reg > 32767) ? 32767 : reg) #define SAT16(reg, s) \ @@ -1742,4 +1841,69 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i BLT(reg, s, 4 + 4); \ ADDIW(reg, s, -1); +#define FAST_8BIT_OPERATION(dst, src, s1, OP) \ + if (MODREG && (rv64_zbb || rv64_xtheadbb) && !dyn->insts[ninst].x64.gen_flags) { \ + if (rex.rex) { \ + wb = xRAX + (nextop & 7) + (rex.b << 3); \ + wb2 = 0; \ + gb = xRAX + ((nextop & 0x38) >> 3) + (rex.r << 3); \ + gb2 = 0; \ + } else { \ + wb = (nextop & 7); \ + wb2 = (wb >> 2) * 8; \ + wb = xRAX + (wb & 3); \ + gd = (nextop & 0x38) >> 3; \ + gb2 = ((gd & 4) >> 2) * 8; \ + gb = xRAX + (gd & 3); \ + } \ + if (src##2) { ANDI(s1, src, 0xf00); } \ + SLLI(s1, (src##2 ? s1 : src), 64 - src##2 - 8); \ + if (rv64_zbb) { \ + RORI(dst, dst, 8 + dst##2); \ + } else { \ + TH_SRRI(dst, dst, 8 + dst##2); \ + } \ + OP; \ + if (rv64_zbb) { \ + RORI(dst, dst, 64 - 8 - dst##2); \ + } else { \ + TH_SRRI(dst, dst, 64 - 8 - dst##2); \ + } \ + break; \ + } + +#define FAST_16BIT_OPERATION(dst, src, s1, OP) \ + if (MODREG && (rv64_zbb || rv64_xtheadbb) && !dyn->insts[ninst].x64.gen_flags) { \ + gd = xRAX + ((nextop & 0x38) >> 3) + (rex.r << 3); \ + ed = xRAX + (nextop & 7) + (rex.b << 3); \ + SLLI(s1, src, 64 - 16); \ + if (rv64_zbb) { \ + RORI(dst, dst, 16); \ + } else { \ + TH_SRRI(dst, dst, 16); \ + } \ + OP; \ + if (rv64_zbb) { \ + RORI(dst, dst, 64 - 16); \ + } else { \ + TH_SRRI(dst, dst, 64 - 16); \ + } \ + break; \ + } + +#define VECTOR_SPLAT_IMM(vreg, imm, s1) \ + do { \ + if (imm == 0) { \ + VXOR_VV(vreg, vreg, vreg, VECTOR_UNMASKED); \ + } else if ((imm & 0xf) == imm) { \ + VMV_V_I(vreg, imm); \ + } else { \ + MOV64x(s1, imm); \ + VMV_V_X(vreg, s1); \ + } \ + } while (0) + +#define VECTOR_LOAD_VMASK(mask, s1, multiple) \ + vector_loadmask(dyn, ninst, VMASK, mask, s1, multiple) + #endif //__DYNAREC_RV64_HELPER_H__ diff --git a/src/dynarec/rv64/dynarec_rv64_jmpnext.c b/src/dynarec/rv64/dynarec_rv64_jmpnext.c index 9150dd44d1143fb7814e173247a1e9ae54af1769..4c6d42a969f11e49d6dd4073f81b627534d98b90 100644 --- a/src/dynarec/rv64/dynarec_rv64_jmpnext.c +++ b/src/dynarec/rv64/dynarec_rv64_jmpnext.c @@ -2,7 +2,11 @@ #include "rv64_emitter.h" -#define EMIT(A) *block = (A); ++block +#define EMIT(A) \ + do { \ + *block = (A); \ + ++block; \ + } while (0) void CreateJmpNext(void* addr, void* next) { uint32_t* block = (uint32_t*)addr; @@ -16,4 +20,4 @@ void CreateJmpNext(void* addr, void* next) LR_D(x2, x2, 1, 1); #endif BR(x2); -} \ No newline at end of file +} diff --git a/src/dynarec/rv64/dynarec_rv64_pass0.h b/src/dynarec/rv64/dynarec_rv64_pass0.h index 8924cae081d25aefa4e67f4b76102ccf8ec8247d..c2b7a27b40ad97aec43c454437ea37816d6562ee 100644 --- a/src/dynarec/rv64/dynarec_rv64_pass0.h +++ b/src/dynarec/rv64/dynarec_rv64_pass0.h @@ -18,33 +18,34 @@ #define EMIT(A) dyn->native_size+=4 #define JUMP(A, C) add_jump(dyn, ninst); add_next(dyn, (uintptr_t)A); SMEND(); dyn->insts[ninst].x64.jmp = A; dyn->insts[ninst].x64.jmp_cond = C; dyn->insts[ninst].x64.jmp_insts = 0 #define BARRIER(A) if(A!=BARRIER_MAYBE) {fpu_purgecache(dyn, ninst, 0, x1, x2, x3); dyn->insts[ninst].x64.barrier = A;} else dyn->insts[ninst].barrier_maybe = 1 -#define BARRIER_NEXT(A) dyn->insts[ninst].x64.barrier_next = A #define SET_HASCALLRET() dyn->insts[ninst].x64.has_callret = 1 -#define NEW_INST \ - ++dyn->size; \ - memset(&dyn->insts[ninst], 0, sizeof(instruction_native_t)); \ - dyn->insts[ninst].x64.addr = ip; \ - dyn->e.combined1 = dyn->e.combined2 = 0; \ - dyn->e.swapped = 0; \ - dyn->e.barrier = 0; \ - for (int i = 0; i < 16; ++i) \ - dyn->e.olds[i].v = 0; \ - dyn->insts[ninst].f_entry = dyn->f; \ - if (reset_n != -1) \ - dyn->vector_sew = ninst ? dyn->insts[ninst - 1].vector_sew : VECTOR_SEWNA; \ - if (ninst) \ +#define NEW_INST \ + ++dyn->size; \ + memset(&dyn->insts[ninst], 0, sizeof(instruction_native_t)); \ + dyn->insts[ninst].x64.addr = ip; \ + dyn->e.combined1 = dyn->e.combined2 = 0; \ + dyn->e.swapped = 0; \ + dyn->e.barrier = 0; \ + for (int i = 0; i < 16; ++i) \ + dyn->e.olds[i].v = 0; \ + dyn->insts[ninst].f_entry = dyn->f; \ + dyn->insts[ninst].vector_sew_entry = dyn->vector_sew; \ + dyn->inst_sew = dyn->vector_sew; \ + dyn->inst_vlmul = VECTOR_LMUL1; \ + dyn->inst_vl = 0; \ + if (ninst) \ dyn->insts[ninst - 1].x64.size = dyn->insts[ninst].x64.addr - dyn->insts[ninst - 1].x64.addr; -#define INST_EPILOG \ - dyn->insts[ninst].f_exit = dyn->f; \ - dyn->insts[ninst].e = dyn->e; \ - dyn->insts[ninst].vector_sew = dyn->vector_sew; \ +#define INST_EPILOG \ + dyn->insts[ninst].f_exit = dyn->f; \ + dyn->insts[ninst].e = dyn->e; \ + dyn->insts[ninst].vector_sew_exit = dyn->vector_sew; \ dyn->insts[ninst].x64.has_next = (ok > 0) ? 1 : 0; #define INST_NAME(name) #define DEFAULT \ --dyn->size; \ *ok = -1; \ - if(box64_dynarec_log>=LOG_INFO || box64_dynarec_dump || box64_dynarec_missing) {\ + if(box64_dynarec_log>=LOG_INFO || box64_dynarec_dump || box64_dynarec_missing==1) {\ dynarec_log(LOG_NONE, "%p: Dynarec stopped because of %sOpcode %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", \ (void*)ip, rex.is32bits?"32bits ":"",\ PKip(0), \ @@ -57,21 +58,10 @@ dynarec_log(LOG_NONE, "\n"); \ } -#define DEFAULT_VECTOR \ - if (box64_dynarec_log >= LOG_INFO || box64_dynarec_dump || box64_dynarec_missing) { \ - dynarec_log(LOG_NONE, "%p: Dynarec fallback to scalar version because of %s Opcode" \ - " %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", \ - (void*)ip, rex.is32bits ? "x86 " : "x64 ", \ - PKip(0), \ - PKip(1), PKip(2), PKip(3), \ - PKip(4), PKip(5), PKip(6), \ - PKip(7), PKip(8), PKip(9), \ - PKip(10), PKip(11), PKip(12), \ - PKip(13), PKip(14)); \ - printFunctionAddr(ip, " => "); \ - dynarec_log(LOG_NONE, "\n"); \ - } \ - return 0 - -#define SET_ELEMENT_WIDTH(s1, sew) \ - dyn->vector_sew = sew; +#define SET_ELEMENT_WIDTH(s1, sew, set) \ + do { \ + if (sew != VECTOR_SEWANY && set) \ + dyn->vector_sew = sew; \ + else if (dyn->vector_sew == VECTOR_SEWNA && set) \ + dyn->vector_sew = VECTOR_SEW8; \ + } while (0) diff --git a/src/dynarec/rv64/dynarec_rv64_pass1.h b/src/dynarec/rv64/dynarec_rv64_pass1.h index c7813ba0980fc4a67c1e6d641813bca0bd48a8bd..b488ef861096331efd7407fa7a4381249ba0fd75 100644 --- a/src/dynarec/rv64/dynarec_rv64_pass1.h +++ b/src/dynarec/rv64/dynarec_rv64_pass1.h @@ -2,18 +2,21 @@ #define FINI #define MESSAGE(A, ...) do {} while (0) #define EMIT(A) do {} while (0) -#define NEW_INST \ - dyn->insts[ninst].f_entry = dyn->f; \ - dyn->e.combined1 = dyn->e.combined2 = 0; \ - for (int i = 0; i < 16; ++i) \ - dyn->e.olds[i].v = 0; \ - if (reset_n != -1) \ - dyn->vector_sew = ninst ? dyn->insts[ninst - 1].vector_sew : VECTOR_SEWNA; \ - dyn->e.swapped = 0; \ +#define NEW_INST \ + dyn->insts[ninst].f_entry = dyn->f; \ + dyn->e.combined1 = dyn->e.combined2 = 0; \ + for (int i = 0; i < 16; ++i) \ + dyn->e.olds[i].v = 0; \ + dyn->insts[ninst].vector_sew_entry = dyn->vector_sew; \ + dyn->inst_sew = dyn->vector_sew; \ + dyn->inst_vlmul = VECTOR_LMUL1; \ + dyn->inst_vl = 0; \ + dyn->e.swapped = 0; \ dyn->e.barrier = 0 -#define INST_EPILOG \ - dyn->insts[ninst].e = dyn->e; \ - dyn->insts[ninst].f_exit = dyn->f +#define INST_EPILOG \ + dyn->insts[ninst].e = dyn->e; \ + dyn->insts[ninst].f_exit = dyn->f; \ + dyn->insts[ninst].vector_sew_exit = dyn->vector_sew; #define INST_NAME(name) diff --git a/src/dynarec/rv64/dynarec_rv64_pass2.h b/src/dynarec/rv64/dynarec_rv64_pass2.h index 37a71b9a0301372ed064c770edbae8f709f35c3f..7cfbc724c8a6a2fc92da095b7efcc30b8d5837ce 100644 --- a/src/dynarec/rv64/dynarec_rv64_pass2.h +++ b/src/dynarec/rv64/dynarec_rv64_pass2.h @@ -8,8 +8,10 @@ #define MESSAGE(A, ...) do {} while (0) #define EMIT(A) do {dyn->insts[ninst].size+=4; dyn->native_size+=4;}while(0) #define NEW_INST \ - if (reset_n != -1) \ - dyn->vector_sew = ninst ? dyn->insts[ninst - 1].vector_sew : VECTOR_SEWNA; \ + dyn->vector_sew = dyn->insts[ninst].vector_sew_entry; \ + dyn->inst_sew = dyn->vector_sew; \ + dyn->inst_vlmul = VECTOR_LMUL1; \ + dyn->inst_vl = 0; \ if (ninst) { \ dyn->insts[ninst].address = (dyn->insts[ninst - 1].address + dyn->insts[ninst - 1].size); \ dyn->insts_size += 1 + ((dyn->insts[ninst - 1].x64.size > (dyn->insts[ninst - 1].size / 4)) ? dyn->insts[ninst - 1].x64.size : (dyn->insts[ninst - 1].size / 4)) / 15; \ diff --git a/src/dynarec/rv64/dynarec_rv64_pass3.h b/src/dynarec/rv64/dynarec_rv64_pass3.h index 1dce2bc49dfba6bb55b71db77b67917aa253ad34..0384b0a9a5215cff5a3abe950fab75d26996f183 100644 --- a/src/dynarec/rv64/dynarec_rv64_pass3.h +++ b/src/dynarec/rv64/dynarec_rv64_pass3.h @@ -13,8 +13,10 @@ #define MESSAGE(A, ...) if(box64_dynarec_dump) dynarec_log(LOG_NONE, __VA_ARGS__) #define NEW_INST \ - if (reset_n != -1) \ - dyn->vector_sew = ninst ? dyn->insts[ninst - 1].vector_sew : VECTOR_SEWNA; \ + dyn->vector_sew = dyn->insts[ninst].vector_sew_entry; \ + dyn->inst_sew = dyn->vector_sew; \ + dyn->inst_vlmul = VECTOR_LMUL1; \ + dyn->inst_vl = 0; \ if (box64_dynarec_dump) print_newinst(dyn, ninst); \ if (ninst) { \ addInst(dyn->instsize, &dyn->insts_size, dyn->insts[ninst - 1].x64.size, dyn->insts[ninst - 1].size / 4); \ @@ -25,3 +27,19 @@ #define TABLE64(A, V) {int val64offset = Table64(dyn, (V), 3); MESSAGE(LOG_DUMP, " Table64: 0x%lx\n", (V)); AUIPC(A, SPLIT20(val64offset)); LD(A, A, SPLIT12(val64offset));} #define FTABLE64(A, V) {mmx87_regs_t v = {.d = V}; int val64offset = Table64(dyn, v.q, 3); MESSAGE(LOG_DUMP, " FTable64: %g\n", v.d); AUIPC(x1, SPLIT20(val64offset)); FLD(A, x1, SPLIT12(val64offset));} + +#define DEFAULT_VECTOR \ + if (box64_dynarec_log >= LOG_INFO || box64_dynarec_dump || box64_dynarec_missing==2) { \ + dynarec_log(LOG_NONE, "%p: Dynarec fallback to scalar version because of %sOpcode" \ + " %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", \ + (void*)ip, rex.is32bits ? "x86 " : "x64 ", \ + PKip(0), \ + PKip(1), PKip(2), PKip(3), \ + PKip(4), PKip(5), PKip(6), \ + PKip(7), PKip(8), PKip(9), \ + PKip(10), PKip(11), PKip(12), \ + PKip(13), PKip(14)); \ + printFunctionAddr(ip, " => "); \ + dynarec_log(LOG_NONE, "\n"); \ + } \ + return 0 diff --git a/src/dynarec/rv64/dynarec_rv64_private.h b/src/dynarec/rv64/dynarec_rv64_private.h index b5bfff5bf0fd98a57f8b7eca11dc8c30c85d96e3..0beaf11ca3b378b19458b356f3b0ee990c8cfa55 100644 --- a/src/dynarec/rv64/dynarec_rv64_private.h +++ b/src/dynarec/rv64/dynarec_rv64_private.h @@ -20,6 +20,14 @@ typedef struct instsize_s instsize_t; #define EXT_CACHE_SCR 7 #define EXT_CACHE_XMMW 8 #define EXT_CACHE_XMMR 9 +#define EXT_CACHE_YMMW 10 +#define EXT_CACHE_YMMR 11 +#define EXT_CACHE_MMV 12 + +#define EXT_CACHE_OLD_SD 0 +#define EXT_CACHE_OLD_SS 1 +#define EXT_CACHE_OLD_XMMW 2 +#define EXT_CACHE_OLD_XMMR 3 typedef union ext_cache_s { int8_t v; @@ -29,14 +37,21 @@ typedef union ext_cache_s { }; } ext_cache_t; +typedef union mmx_cache_s { + int8_t v; + struct { + uint8_t reg : 7; + uint8_t vector : 1; + }; +} mmx_cache_t; + typedef union sse_cache_s { int16_t v; struct { - uint16_t reg : 7; + uint16_t reg : 13; uint16_t vector : 1; uint16_t single : 1; uint16_t write : 1; - uint16_t unused : 7; }; } sse_cache_t; @@ -46,13 +61,13 @@ typedef union sse_old_s { uint8_t changed:1; uint8_t purged:1; uint8_t reg:4; - uint8_t single:1; + uint8_t type:2; }; } sse_old_t; typedef struct extcache_s { // ext cache - ext_cache_t extcache[24]; + ext_cache_t extcache[32]; int8_t stack; int8_t stack_next; int8_t stack_pop; @@ -69,9 +84,9 @@ typedef struct extcache_s { int8_t x87cache[8]; // cache status for the 8 x87 register behind the fpu stack int8_t x87reg[8]; // reg used for x87cache entry int16_t tags; // similar to fpu_tags - int8_t mmxcache[8]; // cache status for the 8 MMX registers + mmx_cache_t mmxcache[8]; // cache status for the 8 MMX registers sse_cache_t ssecache[16]; // cache status for the 16 SSE(2) registers - int8_t fpuused[24]; // all 10..31 & 0..1 double reg from fpu, used by x87, sse and mmx + int8_t fpuused[32]; // all double reg from fpu, used by x87, mmx, sse and avx int8_t x87stack; // cache stack counter int8_t mmxcount; // number of mmx register used (not both mmx and x87 at the same time) int8_t fpu_scratch; // scratch counter @@ -87,10 +102,10 @@ typedef struct flagcache_s { typedef struct instruction_rv64_s { instruction_x64_t x64; - uintptr_t address; // (start) address of the arm emitted instruction + uintptr_t address; // (start) address of the riscv emitted instruction uintptr_t epilog; // epilog of current instruction (can be start of next, or barrier stuff) - int size; // size of the arm emitted instruction - int size2; // size of the arm emitted instrucion after pass2 + int size; // size of the riscv emitted instruction + int size2; // size of the riscv emitted instruction after pass2 int pred_sz; // size of predecessor list int *pred; // predecessor array uintptr_t mark[3]; @@ -104,13 +119,14 @@ typedef struct instruction_rv64_s { uint16_t ymm0_in; // bitmap of ymm to zero at purge uint16_t ymm0_add; // the ymm0 added by the opcode uint16_t ymm0_sub; // the ymm0 removed by the opcode - uint16_t ymm0_out; // the ymmm0 at th end of the opcode + uint16_t ymm0_out; // the ymm0 at th end of the opcode uint16_t ymm0_pass2, ymm0_pass3; int barrier_maybe; - flagcache_t f_exit; // flags status at end of intruction - extcache_t e; // extcache at end of intruction (but before poping) + flagcache_t f_exit; // flags status at end of instruction + extcache_t e; // extcache at end of instruction (but before poping) flagcache_t f_entry; // flags status before the instruction begin - uint8_t vector_sew; + uint8_t vector_sew_entry; // sew status before the instruction begin + uint8_t vector_sew_exit; // sew status at the end of instruction } instruction_rv64_t; typedef struct dynarec_rv64_s { @@ -120,8 +136,8 @@ typedef struct dynarec_rv64_s { uintptr_t start; // start of the block uint32_t isize; // size in byte of x64 instructions included void* block; // memory pointer where next instruction is emitted - uintptr_t native_start; // start of the arm code - size_t native_size; // size of emitted arm code + uintptr_t native_start; // start of the riscv code + size_t native_size; // size of emitted riscv code uintptr_t last_ip; // last set IP in RIP (or NULL if unclean state) TODO: move to a cache something uint64_t* table64; // table of 64bits value int table64size;// size of table (will be appended at end of executable code) @@ -149,13 +165,18 @@ typedef struct dynarec_rv64_s { uint16_t ymm_zero; // bitmap of ymm to zero at purge uint8_t always_test; uint8_t abort; - uint8_t vector_sew; + uint8_t vector_sew; // current sew status + uint8_t vector_eew; // current effective sew status, should only be used after SET_ELEMENT_WIDTH + uint8_t inst_sew; // sew inside current instruction, for vsetvli elimination + uint8_t inst_vl; // vl inside current instruction, for vsetvli elimination + uint8_t inst_vlmul; // vlmul inside current instruction } dynarec_rv64_t; -// convert idx (0..24) to reg index (10..31 0..1) -#define EXTREG(A) (((A)+10)&31) -// convert reg index (10..31 0..1) to idx (0..24) -#define EXTIDX(A) (((A)-10)&31) +// v0 is hardware wired to vector mask register, which should be always reserved +// convert idx (0..23) to reg index (10..31 1..2) +#define EXTREG(A) (((A) + 10 + ((A) > 21)) & 31) +// convert reg index (10..31 1..2) to idx (0..23) +#define EXTIDX(A) (((A) - 10 - ((A) < 3)) & 31) void add_next(dynarec_rv64_t *dyn, uintptr_t addr); uintptr_t get_closest_next(dynarec_rv64_t *dyn, uintptr_t addr); diff --git a/src/dynarec/rv64/rv64_emitter.h b/src/dynarec/rv64/rv64_emitter.h index abf718df0c6ea01bfaafc423a0c34c2ec5187d88..f56b68e770bb800fcb9046604d07f207544737e3 100644 --- a/src/dynarec/rv64/rv64_emitter.h +++ b/src/dynarec/rv64/rv64_emitter.h @@ -157,9 +157,9 @@ f28–31 ft8–11 FP temporaries Caller // Unconditionnal branch to r+i12, no return address set #define BR_I12(r, imm12) EMIT(JALR_gen(xZR, r, (imm12) & 0b111111111111)) // Unconditionnal branch to r, return address set to xRA -#define JALR(r) EMIT(JALR_gen(xRA, r, 0)) +#define JALR(rd, rs) EMIT(JALR_gen(rd, rs, 0)) // Unconditionnal branch to r+i12, return address set to xRA -#define JALR_I12(r, imm12) EMIT(JALR_gen(xRA, r, (imm12) & 0b111111111111)) +#define JALR_I12(rd, rs, imm12) EMIT(JALR_gen(rd, rs, (imm12) & 0b111111111111)) // rd = rs1 + imm12 #define ADDI(rd, rs1, imm12) EMIT(I_type((imm12) & 0b111111111111, rs1, 0b000, rd, 0b0010011)) @@ -190,7 +190,15 @@ f28–31 ft8–11 FP temporaries Caller // rd = rs1 + rs2 #define ADDxw(rd, rs1, rs2) EMIT(R_type(0b0000000, rs2, rs1, 0b000, rd, rex.w ? 0b0110011 : 0b0111011)) // rd = rs1 + rs2 -#define ADDz(rd, rs1, rs2) EMIT(R_type(0b0000000, rs2, rs1, 0b000, rd, rex.is32bits ? 0b0111011 : 0b0110011)) +#define ADDz(rd, rs1, rs2) \ + do { \ + if (!rex.is32bits) { \ + ADD(rd, rs1, rs2); \ + } else { \ + ADDW(rd, rs1, rs2); \ + ZEROUP(rd); \ + } \ + } while (0) // rd = rs1 - rs2 #define SUB(rd, rs1, rs2) EMIT(R_type(0b0100000, rs2, rs1, 0b000, rd, 0b0110011)) // rd = rs1 - rs2 @@ -257,7 +265,7 @@ f28–31 ft8–11 FP temporaries Caller #define BLTU(rs1, rs2, imm13) EMIT(B_type(imm13, rs2, rs1, 0b110, 0b1100011)) #define BGEU(rs1, rs2, imm13) EMIT(B_type(imm13, rs2, rs1, 0b111, 0b1100011)) -// TODO: Find a better way to have conditionnal jumps? Imm is a relative jump address, so the the 2nd jump needs to be addapted +// TODO: Find a better way to have conditionnal jumps? Imm is a relative jump address, so the the 2nd jump needs to be adapted #define BEQ_safe(rs1, rs2, imm) \ if ((imm) > -0x1000 && (imm) < 0x1000) { \ BEQ(rs1, rs2, imm); \ @@ -357,12 +365,12 @@ f28–31 ft8–11 FP temporaries Caller #define PUSH1_32(reg) \ do { \ SW(reg, xRSP, 0xFFC); \ - SUBIW(xRSP, xRSP, 4); \ + SUBI(xRSP, xRSP, 4); \ } while (0) -#define POP1_32(reg) \ - do { \ - LWU(reg, xRSP, 0); \ - if (reg != xRSP) ADDIW(xRSP, xRSP, 4); \ +#define POP1_32(reg) \ + do { \ + LWU(reg, xRSP, 0); \ + if (reg != xRSP) ADDI(xRSP, xRSP, 4); \ } while (0) #define POP1z(reg) \ @@ -605,7 +613,7 @@ f28–31 ft8–11 FP temporaries Caller #define FSGNJS(rd, rs1, rs2) EMIT(R_type(0b0010000, rs2, rs1, 0b000, rd, 0b1010011)) // move rs1 to rd #define FMVS(rd, rs1) FSGNJS(rd, rs1, rs1) -// store rs1 with oposite rs2 sign bit to rd +// store rs1 with opposite rs2 sign bit to rd #define FSGNJNS(rd, rs1, rs2) EMIT(R_type(0b0010000, rs2, rs1, 0b001, rd, 0b1010011)) // -rs1 => rd #define FNEGS(rd, rs1) FSGNJNS(rd, rs1, rs1) @@ -619,7 +627,7 @@ f28–31 ft8–11 FP temporaries Caller #define FMVWX(frd, rs1) EMIT(R_type(0b1111000, 0b00000, rs1, 0b000, frd, 0b1010011)) // Convert from signed 32bits to Single #define FCVTSW(frd, rs1, rm) EMIT(R_type(0b1101000, 0b00000, rs1, rm, frd, 0b1010011)) -// Convert from Single to signed 32bits (trucated) +// Convert from Single to signed 32bits (truncated) #define FCVTWS(rd, frs1, rm) EMIT(R_type(0b1100000, 0b00000, frs1, rm, rd, 0b1010011)) #define FADDS(frd, frs1, frs2) EMIT(R_type(0b0000000, frs2, frs1, 0b000, frd, 0b1010011)) @@ -644,7 +652,7 @@ f28–31 ft8–11 FP temporaries Caller #define FCVTLS(rd, frs1, rm) EMIT(R_type(0b1100000, 0b00010, frs1, rm, rd, 0b1010011)) // Convert from Single to unsigned 64bits #define FCVTLUS(rd, frs1, rm) EMIT(R_type(0b1100000, 0b00011, frs1, rm, rd, 0b1010011)) -// onvert from Single to signed 32/64bits (trucated) +// Convert from Single to signed 32/64bits (truncated) #define FCVTSxw(rd, frs1, rm) EMIT(R_type(0b1100000, rex.w ? 0b00010 : 0b00000, frs1, rm, rd, 0b1010011)) // RV32D @@ -664,7 +672,7 @@ f28–31 ft8–11 FP temporaries Caller #define FSGNJD(rd, rs1, rs2) EMIT(R_type(0b0010001, rs2, rs1, 0b000, rd, 0b1010011)) // move rs1 to rd #define FMVD(rd, rs1) FSGNJD(rd, rs1, rs1) -// store rs1 with oposite rs2 sign bit to rd +// store rs1 with opposite rs2 sign bit to rd #define FSGNJND(rd, rs1, rs2) EMIT(R_type(0b0010001, rs2, rs1, 0b001, rd, 0b1010011)) // -rs1 => rd #define FNEGD(rd, rs1) FSGNJND(rd, rs1, rs1) @@ -796,14 +804,14 @@ f28–31 ft8–11 FP temporaries Caller else \ CTZW(rd, rs); \ } else { \ - NEG(s2, ed); \ - AND(s2, s2, ed); \ - TABLE64(x3, 0x03f79d71b4ca8b09ULL); \ - MUL(s2, s2, x3); \ + NEG(s2, rs); \ + AND(s2, s2, rs); \ + TABLE64(s1, 0x03f79d71b4ca8b09ULL); \ + MUL(s2, s2, s1); \ SRLI(s2, s2, 64 - 6); \ TABLE64(s1, (uintptr_t) & deBruijn64tab); \ ADD(s1, s1, s2); \ - LBU(gd, s1, 0); \ + LBU(rd, s1, 0); \ } // Count set bits @@ -854,6 +862,11 @@ f28–31 ft8–11 FP temporaries Caller OR(rd, rd, rs); \ } +// Insert low 16bits in rs to low 16bits of rd +#define INSHz(rd, rs, s1, s2, init_s1, zexth_rs) \ + INSH(rd, rs, s1, s2, init_s1, zexth_rs) \ + if (rex.is32bits) AND(rd, rd, xMASK); + // Rotate left (register) #define ROL(rd, rs1, rs2) EMIT(R_type(0b0110000, rs2, rs1, 0b001, rd, 0b0110011)) // Rotate left word (register) @@ -939,7 +952,7 @@ f28–31 ft8–11 FP temporaries Caller // Zbc -// Carry-less multily (low-part) +// Carry-less multiply (low-part) #define CLMUL(rd, rs1, rs2) EMIT(R_type(0b0000101, rs2, rs1, 0b001, rd, 0b0110011)) // Carry-less multiply (high-part) #define CLMULH(rd, rs1, rs2) EMIT(R_type(0b0000101, rs2, rs1, 0b011, rd, 0b0110011)) @@ -947,7 +960,7 @@ f28–31 ft8–11 FP temporaries Caller #define CLMULR(rd, rs1, rs2) EMIT(R_type(0b0000101, rs2, rs1, 0b010, rd, 0b0110011)) // Zbs -// encoding of the "imm" on RV64 use a slight different mask, but it will work using R_type with high bit of imm ovewriting low bit op func +// encoding of the "imm" on RV64 use a slight different mask, but it will work using R_type with high bit of imm overwriting low bit op func // Single-bit Clear (Register) #define BCLR(rd, rs1, rs2) EMIT(R_type(0b0100100, rs2, rs1, 0b001, rd, 0b0110011)) // Single-bit Clear (Immediate) @@ -1020,11 +1033,11 @@ f28–31 ft8–11 FP temporaries Caller // Extract and sign-extend bits. // reg[rd] := sign_extend(reg[rs1][imm1:imm2]) -#define TH_EXT(rd, rs1, imm1, imm2) EMIT(I_type((((imm1) & 0x1f) << 6) | ((imm2) & 0x1f), rs1, 0b010, rd, 0b0001011)) +#define TH_EXT(rd, rs1, imm1, imm2) EMIT(I_type((((imm1) & 0x3f) << 6) | ((imm2) & 0x3f), rs1, 0b010, rd, 0b0001011)) // Extract and zero-extend bits. // reg[rd] := zero_extend(reg[rs1][imm1:imm2]) -#define TH_EXTU(rd, rs1, imm1, imm2) EMIT(I_type((((imm1) & 0x1f) << 6) | ((imm2) & 0x1f), rs1, 0b011, rd, 0b0001011)) +#define TH_EXTU(rd, rs1, imm1, imm2) EMIT(I_type((((imm1) & 0x3f) << 6) | ((imm2) & 0x3f), rs1, 0b011, rd, 0b0001011)) // Find first '0'-bit // for i=xlen..0: @@ -1211,6 +1224,26 @@ f28–31 ft8–11 FP temporaries Caller // Vector extension emitter +/* Warning: mind the differences between RVV 1.0 and XTheadVector! + * + * - Different encoding of vsetvl/th.vsetvl. + * - No vsetivli instruction. + * - Cannot configure vta and vma vsetvl instruction, the fixed value is TAMU. + * - No whole register move instructions. + * - No fractional lmul. + * - Different load/store instructions. + * - Different name of vector indexed instructions. + * - Destination vector register cannot overlap source vector register group for vmadc/vmsbc/widen arithmetic/narrow arithmetic. + * - No vlm/vsm instructions. + * - Different vnsrl/vnsra/vfncvt suffix (vv/vx/vi vs wv/wx/wi). + * - Different size of mask mode (1.0 is vl and xtheadvector is vlen). + * - No vrgatherei16.vv instruction. + * - Different encoding of vmv.s.x instruction. + * + * We ignore all the naming differences and use the RVV 1.0 naming convention. + + */ + #define VECTOR_SEW8 0b000 #define VECTOR_SEW16 0b001 #define VECTOR_SEW32 0b010 @@ -1218,6 +1251,11 @@ f28–31 ft8–11 FP temporaries Caller #define VECTOR_SEWNA 0b111 // N/A #define VECTOR_SEWANY 0b1000 // any sew would be ok, but not N/A. +#define VECTOR_LMUL1 0b000 +#define VECTOR_LMUL2 0b001 +#define VECTOR_LMUL4 0b010 +#define VECTOR_LMUL8 0b011 + #define VECTOR_MASKED 0 #define VECTOR_UNMASKED 1 @@ -1230,8 +1268,6 @@ f28–31 ft8–11 FP temporaries Caller #define VECTOR_NFIELD7 0b110 #define VECTOR_NFIELD8 0b111 -#define VECTOR_MASKREG 0 // fixed to v0 - // configuration setting // https://github.com/riscv/riscv-v-spec/blob/master/vcfg-format.adoc #define VSETIVLI(rd, zimm, zimm10) EMIT(I_type(0b110000000000 | (zimm10), zimm, 0b111, rd, 0b1010111)) // 11...............111.....1010111 @@ -1256,44 +1292,45 @@ f28–31 ft8–11 FP temporaries Caller #define VSE32_V(vs3, rs1, vm, nf) EMIT(I_type(((nf) << 9) | (vm << 5), rs1, 0b110, vs3, 0b0100111)) // ...000.00000.....110.....0100111 #define VSE64_V(vs3, rs1, vm, nf) EMIT(I_type(((nf) << 9) | (vm << 5), rs1, 0b111, vs3, 0b0100111)) // ...000.00000.....111.....0100111 -#define VLE_V(vd, rs1, sew, vm, nf) EMIT(I_type(((nf) << 9) | (vm << 5), rs1, (sew == 0b000 ? 0b000 : (0b100 | sew)), vd, 0b0000111)) -#define VSE_V(vd, rs1, sew, vm, nf) EMIT(I_type(((nf) << 9) | (vm << 5), rs1, (sew == 0b000 ? 0b000 : (0b100 | sew)), vs3, 0b0100111)) +#define VLE_V(vd, rs1, sew, vm, nf) EMIT(I_type(((nf) << 9) | (vm << 5), rs1, (sew == 0b000 ? 0b000 : (0b100 | sew)), vd, 0b0000111)) +#define VSE_V(vs3, rs1, sew, vm, nf) EMIT(I_type(((nf) << 9) | (vm << 5), rs1, (sew == 0b000 ? 0b000 : (0b100 | sew)), vs3, 0b0100111)) // Vector Indexed-Unordered Instructions (including segment part) // https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#76-vector-indexed-instructions +// Note: Make sure SEW in vtype is always the same as EEW, for xtheadvector compatibility! -#define VLUXEI8_V(vd, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0010, vs2, rs1, 0b000, vd, 0b0000111)) // ...001...........000.....0000111 -#define VLUXEI16_V(vd, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0010, vs2, rs1, 0b101, vd, 0b0000111)) // ...001...........101.....0000111 -#define VLUXEI32_V(vd, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0010, vs2, rs1, 0b110, vd, 0b0000111)) // ...001...........110.....0000111 -#define VLUXEI64_V(vd, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0010, vs2, rs1, 0b111, vd, 0b0000111)) // ...001...........111.....0000111 -#define VSUXEI8_V(vs3, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0010, vs2, rs1, 0b000, vs3, 0b0100111)) // ...001...........000.....0100111 -#define VSUXEI16_V(vs3, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0010, vs2, rs1, 0b101, vs3, 0b0100111)) // ...001...........101.....0100111 -#define VSUXEI32_V(vs3, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0010, vs2, rs1, 0b110, vs3, 0b0100111)) // ...001...........110.....0100111 -#define VSUXEI64_V(vs3, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0010, vs2, rs1, 0b111, vs3, 0b0100111)) // ...001...........111.....0100111 +#define VLUXEI8_V(vd, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | (rv64_xtheadvector ? 0b0110 : 0b0010), vs2, rs1, 0b000, vd, 0b0000111)) // ...001...........000.....0000111 +#define VLUXEI16_V(vd, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | (rv64_xtheadvector ? 0b0110 : 0b0010), vs2, rs1, 0b101, vd, 0b0000111)) // ...001...........101.....0000111 +#define VLUXEI32_V(vd, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | (rv64_xtheadvector ? 0b0110 : 0b0010), vs2, rs1, 0b110, vd, 0b0000111)) // ...001...........110.....0000111 +#define VLUXEI64_V(vd, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | (rv64_xtheadvector ? 0b0110 : 0b0010), vs2, rs1, 0b111, vd, 0b0000111)) // ...001...........111.....0000111 +#define VSUXEI8_V(vs3, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | (rv64_xtheadvector ? 0b1110 : 0b0010), vs2, rs1, 0b000, vs3, 0b0100111)) // ...001...........000.....0100111 +#define VSUXEI16_V(vs3, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | (rv64_xtheadvector ? 0b1110 : 0b0010), vs2, rs1, 0b101, vs3, 0b0100111)) // ...001...........101.....0100111 +#define VSUXEI32_V(vs3, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | (rv64_xtheadvector ? 0b1110 : 0b0010), vs2, rs1, 0b110, vs3, 0b0100111)) // ...001...........110.....0100111 +#define VSUXEI64_V(vs3, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | (rv64_xtheadvector ? 0b1110 : 0b0010), vs2, rs1, 0b111, vs3, 0b0100111)) // ...001...........111.....0100111 // Vector Strided Instructions (including segment part) // https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#75-vector-strided-instructions -#define VLSE8_V(vd, rs1, rs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b000, vd, 0b0000111)) // ...010...........000.....0000111 -#define VLSE16_V(vd, rs1, rs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b101, vd, 0b0000111)) // ...010...........101.....0000111 -#define VLSE32_V(vd, rs1, rs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b110, vd, 0b0000111)) // ...010...........110.....0000111 -#define VLSE64_V(vd, rs1, rs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b111, vd, 0b0000111)) // ...010...........111.....0000111 -#define VSSE8_V(vs3, rs1, rs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b000, vs3, 0b0100111)) // ...010...........000.....0100111 -#define VSSE16_V(vs3, rs1, rs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b101, vs3, 0b0100111)) // ...010...........101.....0100111 -#define VSSE32_V(vs3, rs1, rs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b110, vs3, 0b0100111)) // ...010...........110.....0100111 -#define VSSE64_V(vs3, rs1, rs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b111, vs3, 0b0100111)) // ...010...........111.....0100111 +#define VLSE8_V(vd, rs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b000, vd, 0b0000111)) // ...010...........000.....0000111 +#define VLSE16_V(vd, rs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b101, vd, 0b0000111)) // ...010...........101.....0000111 +#define VLSE32_V(vd, rs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b110, vd, 0b0000111)) // ...010...........110.....0000111 +#define VLSE64_V(vd, rs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b111, vd, 0b0000111)) // ...010...........111.....0000111 +#define VSSE8_V(vs3, rs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b000, vs3, 0b0100111)) // ...010...........000.....0100111 +#define VSSE16_V(vs3, rs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b101, vs3, 0b0100111)) // ...010...........101.....0100111 +#define VSSE32_V(vs3, rs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b110, vs3, 0b0100111)) // ...010...........110.....0100111 +#define VSSE64_V(vs3, rs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0100, rs2, rs1, 0b111, vs3, 0b0100111)) // ...010...........111.....0100111 // Vector Indexed-Ordered Instructions (including segment part) // https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#76-vector-indexed-instructions -#define VLOXEI8_V(vd, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b000, vd, 0b0000111)) // ...011...........000.....0000111 -#define VLOXEI16_V(vd, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b101, vd, 0b0000111)) // ...011...........101.....0000111 -#define VLOXEI32_V(vd, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b110, vd, 0b0000111)) // ...011...........110.....0000111 -#define VLOXEI64_V(vd, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b111, vd, 0b0000111)) // ...011...........111.....0000111 -#define VSOXEI8_V(vs3, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b000, vs3, 0b0100111)) // ...011...........000.....0100111 -#define VSOXEI16_V(vs3, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b101, vs3, 0b0100111)) // ...011...........101.....0100111 -#define VSOXEI32_V(vs3, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b110, vs3, 0b0100111)) // ...011...........110.....0100111 -#define VSOXEI64_V(vs3, rs1, vs2, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b111, vs3, 0b0100111)) // ...011...........111.....0100111 +#define VLOXEI8_V(vd, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b000, vd, 0b0000111)) // ...011...........000.....0000111 +#define VLOXEI16_V(vd, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b101, vd, 0b0000111)) // ...011...........101.....0000111 +#define VLOXEI32_V(vd, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b110, vd, 0b0000111)) // ...011...........110.....0000111 +#define VLOXEI64_V(vd, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b111, vd, 0b0000111)) // ...011...........111.....0000111 +#define VSOXEI8_V(vs3, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b000, vs3, 0b0100111)) // ...011...........000.....0100111 +#define VSOXEI16_V(vs3, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b101, vs3, 0b0100111)) // ...011...........101.....0100111 +#define VSOXEI32_V(vs3, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b110, vs3, 0b0100111)) // ...011...........110.....0100111 +#define VSOXEI64_V(vs3, vs2, rs1, vm, nf) EMIT(R_type(((nf) << 4) | (vm) | 0b0110, vs2, rs1, 0b111, vs3, 0b0100111)) // ...011...........111.....0100111 // Unit-stride F31..29=0ault-Only-First Loads // https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#77-unit-stride-fault-only-first-loads @@ -1331,246 +1368,247 @@ f28–31 ft8–11 FP temporaries Caller // https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#14-vector-floating-point-instructions // OPFVF -#define VFADD_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0000000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 000000...........101.....1010111 -#define VFSUB_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0000100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 000010...........101.....1010111 -#define VFMIN_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0001000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 000100...........101.....1010111 -#define VFMAX_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0001100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 000110...........101.....1010111 -#define VFSGNJ_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0010000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 001000...........101.....1010111 -#define VFSGNJN_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0010010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 001001...........101.....1010111 -#define VFSGNJX_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0010100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 001010...........101.....1010111 -#define VFSLIDE1UP_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0011100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 001110...........101.....1010111 -#define VFSLIDE1DOWN_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0011110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 001111...........101.....1010111 - -#define VFMV_S_F(vd, rs1) EMIT(I_type(0b010000100000, rs1, 0b101, vd, 0b1010111)) // 010000100000.....101.....1010111 +#define VFADD_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0000000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 000000...........101.....1010111 +#define VFSUB_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0000100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 000010...........101.....1010111 +#define VFMIN_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0001000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 000100...........101.....1010111 +#define VFMAX_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0001100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 000110...........101.....1010111 +#define VFSGNJ_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0010000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 001000...........101.....1010111 +#define VFSGNJN_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0010010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 001001...........101.....1010111 +#define VFSGNJX_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0010100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 001010...........101.....1010111 +#define VFSLIDE1UP_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0011100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 001110...........101.....1010111 +#define VFSLIDE1DOWN_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0011110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 001111...........101.....1010111 + +#define VFMV_S_F(vd, rs1) EMIT(I_type((rv64_xtheadvector ? 0b001101100000 : 0b010000100000), rs1, 0b101, vd, 0b1010111)) // 010000100000.....101.....1010111 #define VFMV_V_F(vd, rs1) EMIT(I_type(0b010111100000, rs1, 0b101, vd, 0b1010111)) // 010111100000.....101.....1010111 -#define VFMERGE_VFM(vd, rs1, vs2) EMIT(R_type(0b0101110, vs2, rs1, 0b101, vd, 0b1010111)) // 0101110..........101.....1010111 - -#define VMFEQ_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0110000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 011000...........101.....1010111 -#define VMFLE_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0110010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 011001...........101.....1010111 -#define VMFLT_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0110110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 011011...........101.....1010111 -#define VMFNE_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0111000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 011100...........101.....1010111 -#define VMFGT_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0111010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 011101...........101.....1010111 -#define VMFGE_VF(vd, rs1, vs2, vm) EMIT(R_type(0b0111110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 011111...........101.....1010111 -#define VFDIV_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1000000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 100000...........101.....1010111 -#define VFRDIV_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1000010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 100001...........101.....1010111 -#define VFMUL_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1001000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 100100...........101.....1010111 -#define VFRSUB_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1001110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 100111...........101.....1010111 -#define VFMADD_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1010000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101000...........101.....1010111 -#define VFNMADD_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1010010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101001...........101.....1010111 -#define VFMSUB_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1010100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101010...........101.....1010111 -#define VFNMSUB_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1010110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101011...........101.....1010111 -#define VFMACC_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1011000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101100...........101.....1010111 -#define VFNMACC_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1011010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101101...........101.....1010111 -#define VFMSAC_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1011100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101110...........101.....1010111 -#define VFNMSAC_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1011110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101111...........101.....1010111 -#define VFWADD_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1100000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 110000...........101.....1010111 -#define VFWSUB_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1100100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 110010...........101.....1010111 -#define VFWADD_WF(vd, rs1, vs2, vm) EMIT(R_type(0b1101000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 110100...........101.....1010111 -#define VFWSUB_WF(vd, rs1, vs2, vm) EMIT(R_type(0b1101100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 110110...........101.....1010111 -#define VFWMUL_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1110000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 111000...........101.....1010111 -#define VFWMACC_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1111000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 111100...........101.....1010111 -#define VFWNMACC_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1111010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 111101...........101.....1010111 -#define VFWMSAC_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1111100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 111110...........101.....1010111 -#define VFWNMSAC_VF(vd, rs1, vs2, vm) EMIT(R_type(0b1111110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 111111...........101.....1010111 +#define VFMERGE_VFM(vd, vs2, rs1) EMIT(R_type(0b0101110, vs2, rs1, 0b101, vd, 0b1010111)) // 0101110..........101.....1010111 + +#define VMFEQ_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0110000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 011000...........101.....1010111 +#define VMFLE_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0110010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 011001...........101.....1010111 +#define VMFLT_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0110110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 011011...........101.....1010111 +#define VMFNE_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0111000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 011100...........101.....1010111 +#define VMFGT_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0111010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 011101...........101.....1010111 +#define VMFGE_VF(vd, vs2, rs1, vm) EMIT(R_type(0b0111110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 011111...........101.....1010111 +#define VFDIV_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1000000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 100000...........101.....1010111 +#define VFRDIV_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1000010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 100001...........101.....1010111 +#define VFMUL_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1001000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 100100...........101.....1010111 +#define VFRSUB_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1001110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 100111...........101.....1010111 +#define VFMADD_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1010000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101000...........101.....1010111 +#define VFNMADD_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1010010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101001...........101.....1010111 +#define VFMSUB_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1010100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101010...........101.....1010111 +#define VFNMSUB_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1010110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101011...........101.....1010111 +#define VFMACC_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1011000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101100...........101.....1010111 +#define VFNMACC_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1011010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101101...........101.....1010111 +#define VFMSAC_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1011100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101110...........101.....1010111 +#define VFNMSAC_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1011110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 101111...........101.....1010111 +#define VFWADD_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1100000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 110000...........101.....1010111 +#define VFWSUB_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1100100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 110010...........101.....1010111 +#define VFWADD_WF(vd, vs2, rs1, vm) EMIT(R_type(0b1101000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 110100...........101.....1010111 +#define VFWSUB_WF(vd, vs2, rs1, vm) EMIT(R_type(0b1101100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 110110...........101.....1010111 +#define VFWMUL_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1110000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 111000...........101.....1010111 +#define VFWMACC_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1111000 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 111100...........101.....1010111 +#define VFWNMACC_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1111010 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 111101...........101.....1010111 +#define VFWMSAC_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1111100 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 111110...........101.....1010111 +#define VFWNMSAC_VF(vd, vs2, rs1, vm) EMIT(R_type(0b1111110 | (vm), vs2, rs1, 0b101, vd, 0b1010111)) // 111111...........101.....1010111 // OPFVV -#define VFADD_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0000000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000000...........001.....1010111 -#define VFREDUSUM_VS(vd, vs1, vs2, vm) EMIT(R_type(0b0000010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000001...........001.....1010111 -#define VFSUB_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0000100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000010...........001.....1010111 -#define VFREDOSUM_VS(vd, vs1, vs2, vm) EMIT(R_type(0b0000110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000011...........001.....1010111 -#define VFMIN_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0001000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000100...........001.....1010111 -#define VFREDMIN_VS(vd, vs1, vs2, vm) EMIT(R_type(0b0001010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000101...........001.....1010111 -#define VFMAX_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0001100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000110...........001.....1010111 -#define VFREDMAX_VS(vd, vs1, vs2, vm) EMIT(R_type(0b0001110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000111...........001.....1010111 -#define VFSGNJ_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0010000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 001000...........001.....1010111 -#define VFSGNJN_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0010010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 001001...........001.....1010111 -#define VFSGNJX_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0010100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 001010...........001.....1010111 - -#define VFMV_F_S(rd, vs2) EMIT(R_type(0b0100001, vs2, 0b00000, 0b001, rd, 0b1010111)) // 0100001.....00000001.....1010111 - -#define VMFEQ_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0110000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 011000...........001.....1010111 -#define VMFLE_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0110010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 011001...........001.....1010111 -#define VMFLT_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0110110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 011011...........001.....1010111 -#define VMFNE_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0111000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 011100...........001.....1010111 -#define VFDIV_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1000000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 100000...........001.....1010111 -#define VFMUL_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1001000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 100100...........001.....1010111 -#define VFMADD_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1010000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101000...........001.....1010111 -#define VFNMADD_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1010010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101001...........001.....1010111 -#define VFMSUB_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1010100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101010...........001.....1010111 -#define VFNMSUB_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1010110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101011...........001.....1010111 -#define VFMACC_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1011000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101100...........001.....1010111 -#define VFNMACC_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1011010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101101...........001.....1010111 -#define VFMSAC_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1011100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101110...........001.....1010111 -#define VFNMSAC_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1011110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101111...........001.....1010111 - -#define VFCVT_XU_F_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b00000, 0b001, vd, 0b1010111)) // 010010......00000001.....1010111 -#define VFCVT_X_F_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b00001, 0b001, vd, 0b1010111)) // 010010......00001001.....1010111 -#define VFCVT_F_XU_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b00010, 0b001, vd, 0b1010111)) // 010010......00010001.....1010111 -#define VFCVT_F_X_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b00011, 0b001, vd, 0b1010111)) // 010010......00011001.....1010111 -#define VFCVT_RTZ_XU_F_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b00110, 0b001, vd, 0b1010111)) // 010010......00110001.....1010111 -#define VFCVT_RTZ_X_F_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b00111, 0b001, vd, 0b1010111)) // 010010......00111001.....1010111 -#define VFWCVT_XU_F_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b01000, 0b001, vd, 0b1010111)) // 010010......01000001.....1010111 -#define VFWCVT_X_F_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b01001, 0b001, vd, 0b1010111)) // 010010......01001001.....1010111 -#define VFWCVT_F_XU_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b01010, 0b001, vd, 0b1010111)) // 010010......01010001.....1010111 -#define VFWCVT_F_X_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b01011, 0b001, vd, 0b1010111)) // 010010......01011001.....1010111 -#define VFWCVT_F_F_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b01100, 0b001, vd, 0b1010111)) // 010010......01100001.....1010111 -#define VFWCVT_RTZ_XU_F_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b01110, 0b001, vd, 0b1010111)) // 010010......01110001.....1010111 -#define VFWCVT_RTZ_X_F_V(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b01111, 0b001, vd, 0b1010111)) // 010010......01111001.....1010111 -#define VFNCVT_XU_F_W(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b10000, 0b001, vd, 0b1010111)) // 010010......10000001.....1010111 -#define VFNCVT_X_F_W(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b10001, 0b001, vd, 0b1010111)) // 010010......10001001.....1010111 -#define VFNCVT_F_XU_W(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b10010, 0b001, vd, 0b1010111)) // 010010......10010001.....1010111 -#define VFNCVT_F_X_W(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b10011, 0b001, vd, 0b1010111)) // 010010......10011001.....1010111 -#define VFNCVT_F_F_W(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b10100, 0b001, vd, 0b1010111)) // 010010......10100001.....1010111 -#define VFNCVT_ROD_F_F_W(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b10101, 0b001, vd, 0b1010111)) // 010010......10101001.....1010111 -#define VFNCVT_RTZ_XU_F_W(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b10110, 0b001, vd, 0b1010111)) // 010010......10110001.....1010111 -#define VFNCVT_RTZ_X_F_W(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b10111, 0b001, vd, 0b1010111)) // 010010......10111001.....1010111 -#define VFSQRT_V(vd, vs2, vm) EMIT(R_type(0b0100110 | (vm), vs2, 0b00000, 0b001, vd, 0b1010111)) // 010011......00000001.....1010111 +#define VFADD_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0000000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000000...........001.....1010111 +#define VFREDUSUM_VS(vd, vs2, vs1, vm) EMIT(R_type(0b0000010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000001...........001.....1010111 +#define VFSUB_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0000100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000010...........001.....1010111 +#define VFREDOSUM_VS(vd, vs2, vs1, vm) EMIT(R_type(0b0000110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000011...........001.....1010111 +#define VFMIN_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0001000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000100...........001.....1010111 +#define VFREDMIN_VS(vd, vs2, vs1, vm) EMIT(R_type(0b0001010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000101...........001.....1010111 +#define VFMAX_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0001100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000110...........001.....1010111 +#define VFREDMAX_VS(vd, vs2, vs1, vm) EMIT(R_type(0b0001110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 000111...........001.....1010111 +#define VFSGNJ_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0010000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 001000...........001.....1010111 +#define VFSGNJN_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0010010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 001001...........001.....1010111 +#define VFSGNJX_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0010100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 001010...........001.....1010111 + +#define VFMV_F_S(rd, vs2) EMIT(R_type((rv64_xtheadvector ? 0b0011001 : 0b0100001), vs2, 0b00000, 0b001, rd, 0b1010111)) // 0100001.....00000001.....1010111 + +#define VMFEQ_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0110000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 011000...........001.....1010111 +#define VMFLE_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0110010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 011001...........001.....1010111 +#define VMFLT_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0110110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 011011...........001.....1010111 +#define VMFNE_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0111000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 011100...........001.....1010111 +#define VFDIV_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1000000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 100000...........001.....1010111 +#define VFMUL_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1001000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 100100...........001.....1010111 +#define VFMADD_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1010000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101000...........001.....1010111 +#define VFNMADD_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1010010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101001...........001.....1010111 +#define VFMSUB_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1010100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101010...........001.....1010111 +#define VFNMSUB_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1010110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101011...........001.....1010111 +#define VFMACC_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1011000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101100...........001.....1010111 +#define VFNMACC_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1011010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101101...........001.....1010111 +#define VFMSAC_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1011100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101110...........001.....1010111 +#define VFNMSAC_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1011110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 101111...........001.....1010111 + +#define VFCVT_XU_F_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b00000, 0b001, vd, 0b1010111)) // 010010......00000001.....1010111 +#define VFCVT_X_F_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b00001, 0b001, vd, 0b1010111)) // 010010......00001001.....1010111 +#define VFCVT_F_XU_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b00010, 0b001, vd, 0b1010111)) // 010010......00010001.....1010111 +#define VFCVT_F_X_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b00011, 0b001, vd, 0b1010111)) // 010010......00011001.....1010111 +#define VFCVT_RTZ_XU_F_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b00110, 0b001, vd, 0b1010111)) // 010010......00110001.....1010111 +#define VFCVT_RTZ_X_F_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b00111, 0b001, vd, 0b1010111)) // 010010......00111001.....1010111 +#define VFWCVT_XU_F_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b01000, 0b001, vd, 0b1010111)) // 010010......01000001.....1010111 +#define VFWCVT_X_F_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b01001, 0b001, vd, 0b1010111)) // 010010......01001001.....1010111 +#define VFWCVT_F_XU_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b01010, 0b001, vd, 0b1010111)) // 010010......01010001.....1010111 +#define VFWCVT_F_X_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b01011, 0b001, vd, 0b1010111)) // 010010......01011001.....1010111 +#define VFWCVT_F_F_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b01100, 0b001, vd, 0b1010111)) // 010010......01100001.....1010111 +#define VFWCVT_RTZ_XU_F_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b01110, 0b001, vd, 0b1010111)) // 010010......01110001.....1010111 +#define VFWCVT_RTZ_X_F_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b01111, 0b001, vd, 0b1010111)) // 010010......01111001.....1010111 +#define VFNCVT_XU_F_W(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b10000, 0b001, vd, 0b1010111)) // 010010......10000001.....1010111 +#define VFNCVT_X_F_W(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b10001, 0b001, vd, 0b1010111)) // 010010......10001001.....1010111 +#define VFNCVT_F_XU_W(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b10010, 0b001, vd, 0b1010111)) // 010010......10010001.....1010111 +#define VFNCVT_F_X_W(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b10011, 0b001, vd, 0b1010111)) // 010010......10011001.....1010111 +#define VFNCVT_F_F_W(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b10100, 0b001, vd, 0b1010111)) // 010010......10100001.....1010111 +#define VFNCVT_ROD_F_F_W(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b10101, 0b001, vd, 0b1010111)) // 010010......10101001.....1010111 +#define VFNCVT_RTZ_XU_F_W(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b10110, 0b001, vd, 0b1010111)) // 010010......10110001.....1010111 +#define VFNCVT_RTZ_X_F_W(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000100 : 0b0100100) | (vm), vs2, 0b10111, 0b001, vd, 0b1010111)) // 010010......10111001.....1010111 +#define VFSQRT_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000110 : 0b0100110) | (vm), vs2, 0b00000, 0b001, vd, 0b1010111)) // 010011......00000001.....1010111 +#define VFCLASS_V(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b1000110 : 0b0100110) | (vm), vs2, 0b10000, 0b001, vd, 0b1010111)) // 010011......10000001.....1010111 + #define VFRSQRT7_V(vd, vs2, vm) EMIT(R_type(0b0100110 | (vm), vs2, 0b00100, 0b001, vd, 0b1010111)) // 010011......00100001.....1010111 #define VFREC7_V(vd, vs2, vm) EMIT(R_type(0b0100110 | (vm), vs2, 0b00101, 0b001, vd, 0b1010111)) // 010011......00101001.....1010111 -#define VFCLASS_V(vd, vs2, vm) EMIT(R_type(0b0100110 | (vm), vs2, 0b10000, 0b001, vd, 0b1010111)) // 010011......10000001.....1010111 - -#define VFWADD_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1100000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 110000...........001.....1010111 -#define VFWREDUSUM_VS(vd, vs1, vs2, vm) EMIT(R_type(0b1100010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 110001...........001.....1010111 -#define VFWSUB_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1100100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 110010...........001.....1010111 -#define VFWREDOSUM_VS(vd, vs1, vs2, vm) EMIT(R_type(0b1100110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 110011...........001.....1010111 -#define VFWADD_WV(vd, vs1, vs2, vm) EMIT(R_type(0b1101000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 110100...........001.....1010111 -#define VFWSUB_WV(vd, vs1, vs2, vm) EMIT(R_type(0b1101100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 110110...........001.....1010111 -#define VFWMUL_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1110000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 111000...........001.....1010111 -#define VFWMACC_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1111000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 111100...........001.....1010111 -#define VFWNMACC_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1111010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 111101...........001.....1010111 -#define VFWMSAC_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1111100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 111110...........001.....1010111 -#define VFWNMSAC_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1111110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 111111...........001.....1010111 + +#define VFWADD_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1100000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 110000...........001.....1010111 +#define VFWREDUSUM_VS(vd, vs2, vs1, vm) EMIT(R_type(0b1100010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 110001...........001.....1010111 +#define VFWSUB_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1100100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 110010...........001.....1010111 +#define VFWREDOSUM_VS(vd, vs2, vs1, vm) EMIT(R_type(0b1100110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 110011...........001.....1010111 +#define VFWADD_WV(vd, vs2, vs1, vm) EMIT(R_type(0b1101000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 110100...........001.....1010111 +#define VFWSUB_WV(vd, vs2, vs1, vm) EMIT(R_type(0b1101100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 110110...........001.....1010111 +#define VFWMUL_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1110000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 111000...........001.....1010111 +#define VFWMACC_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1111000 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 111100...........001.....1010111 +#define VFWNMACC_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1111010 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 111101...........001.....1010111 +#define VFWMSAC_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1111100 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 111110...........001.....1010111 +#define VFWNMSAC_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1111110 | (vm), vs2, vs1, 0b001, vd, 0b1010111)) // 111111...........001.....1010111 // OPIVX -#define VADD_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0000000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000000...........100.....1010111 -#define VSUB_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0000100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000010...........100.....1010111 -#define VRSUB_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0000110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000011...........100.....1010111 -#define VMINU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0001000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000100...........100.....1010111 -#define VMIN_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0001010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000101...........100.....1010111 -#define VMAXU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0001100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000110...........100.....1010111 -#define VMAX_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0001110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000111...........100.....1010111 -#define VAND_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0010010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 001001...........100.....1010111 -#define VOR_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0010100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 001010...........100.....1010111 -#define VXOR_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0010110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 001011...........100.....1010111 -#define VRGATHER_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0011000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 001100...........100.....1010111 -#define VSLIDEUP_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0011100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 001110...........100.....1010111 -#define VSLIDEDOWN_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0011110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 001111...........100.....1010111 - -#define VADC_VXM(vd, rs1, vs2) EMIT(R_type(0b0100000, vs2, rs1, 0b100, vd, 0b1010111)) // 0100000..........100.....1010111 -#define VMADC_VXM(vd, rs1, vs2) EMIT(R_type(0b0100010, vs2, rs1, 0b100, vd, 0b1010111)) // 0100010..........100.....1010111 -#define VMADC_VX(vd, rs1, vs2) EMIT(R_type(0b0100011, vs2, rs1, 0b100, vd, 0b1010111)) // 0100011..........100.....1010111 -#define VSBC_VXM(vd, rs1, vs2) EMIT(R_type(0b0100100, vs2, rs1, 0b100, vd, 0b1010111)) // 0100100..........100.....1010111 -#define VMSBC_VXM(vd, rs1, vs2) EMIT(R_type(0b0100110, vs2, rs1, 0b100, vd, 0b1010111)) // 0100110..........100.....1010111 -#define VMSBC_VX(vd, rs1, vs2) EMIT(R_type(0b0100111, vs2, rs1, 0b100, vd, 0b1010111)) // 0100111..........100.....1010111 -#define VMERGE_VXM(vd, rs1, vs2) EMIT(R_type(0b0101110, vs2, rs1, 0b100, vd, 0b1010111)) // 0101110..........100.....1010111 +#define VADD_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0000000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000000...........100.....1010111 +#define VSUB_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0000100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000010...........100.....1010111 +#define VRSUB_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0000110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000011...........100.....1010111 +#define VMINU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0001000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000100...........100.....1010111 +#define VMIN_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0001010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000101...........100.....1010111 +#define VMAXU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0001100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000110...........100.....1010111 +#define VMAX_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0001110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 000111...........100.....1010111 +#define VAND_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0010010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 001001...........100.....1010111 +#define VOR_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0010100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 001010...........100.....1010111 +#define VXOR_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0010110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 001011...........100.....1010111 +#define VRGATHER_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0011000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 001100...........100.....1010111 +#define VSLIDEUP_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0011100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 001110...........100.....1010111 +#define VSLIDEDOWN_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0011110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 001111...........100.....1010111 + +#define VADC_VXM(vd, vs2, rs1) EMIT(R_type((0b0100000 | rv64_xtheadvector), vs2, rs1, 0b100, vd, 0b1010111)) // 0100000..........100.....1010111 +#define VMADC_VXM(vd, vs2, rs1) EMIT(R_type(0b0100010, vs2, rs1, 0b100, vd, 0b1010111)) // 0100010..........100.....1010111 +#define VMADC_VX(vd, vs2, rs1) EMIT(R_type(0b0100011, vs2, rs1, 0b100, vd, 0b1010111)) // 0100011..........100.....1010111 +#define VSBC_VXM(vd, vs2, rs1) EMIT(R_type((0b0100100 | rv64_xtheadvector), vs2, rs1, 0b100, vd, 0b1010111)) // 0100100..........100.....1010111 +#define VMSBC_VXM(vd, vs2, rs1) EMIT(R_type(0b0100110, vs2, rs1, 0b100, vd, 0b1010111)) // 0100110..........100.....1010111 +#define VMSBC_VX(vd, vs2, rs1) EMIT(R_type(0b0100111, vs2, rs1, 0b100, vd, 0b1010111)) // 0100111..........100.....1010111 +#define VMERGE_VXM(vd, vs2, rs1) EMIT(R_type(0b0101110, vs2, rs1, 0b100, vd, 0b1010111)) // 0101110..........100.....1010111 #define VMV_V_X(vd, rs1) EMIT(I_type(0b010111100000, rs1, 0b100, vd, 0b1010111)) // 010111100000.....100.....1010111 -#define VMSEQ_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0110000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011000...........100.....1010111 -#define VMSNE_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0110010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011001...........100.....1010111 -#define VMSLTU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0110100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011010...........100.....1010111 -#define VMSLT_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0110110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011011...........100.....1010111 -#define VMSLEU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0111000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011100...........100.....1010111 -#define VMSLE_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0111010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011101...........100.....1010111 -#define VMSGTU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0111100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011110...........100.....1010111 -#define VMSGT_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0111110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011111...........100.....1010111 -#define VSADDU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1000000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 100000...........100.....1010111 -#define VSADD_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1000010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 100001...........100.....1010111 -#define VSSUBU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1000100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 100010...........100.....1010111 -#define VSSUB_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1000110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 100011...........100.....1010111 -#define VSLL_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1001010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 100101...........100.....1010111 -#define VSMUL_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1001110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 100111...........100.....1010111 -#define VSRL_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1010000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101000...........100.....1010111 -#define VSRA_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1010010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101001...........100.....1010111 -#define VSSRL_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1010100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101010...........100.....1010111 -#define VSSRA_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1010110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101011...........100.....1010111 -#define VNSRL_WX(vd, rs1, vs2, vm) EMIT(R_type(0b1011000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101100...........100.....1010111 -#define VNSRA_WX(vd, rs1, vs2, vm) EMIT(R_type(0b1011010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101101...........100.....1010111 -#define VNCLIPU_WX(vd, rs1, vs2, vm) EMIT(R_type(0b1011100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101110...........100.....1010111 -#define VNCLIP_WX(vd, rs1, vs2, vm) EMIT(R_type(0b1011110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101111...........100.....1010111 +#define VMSEQ_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0110000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011000...........100.....1010111 +#define VMSNE_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0110010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011001...........100.....1010111 +#define VMSLTU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0110100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011010...........100.....1010111 +#define VMSLT_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0110110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011011...........100.....1010111 +#define VMSLEU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0111000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011100...........100.....1010111 +#define VMSLE_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0111010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011101...........100.....1010111 +#define VMSGTU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0111100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011110...........100.....1010111 +#define VMSGT_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0111110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 011111...........100.....1010111 +#define VSADDU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1000000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 100000...........100.....1010111 +#define VSADD_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1000010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 100001...........100.....1010111 +#define VSSUBU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1000100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 100010...........100.....1010111 +#define VSSUB_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1000110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 100011...........100.....1010111 +#define VSLL_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1001010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 100101...........100.....1010111 +#define VSMUL_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1001110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 100111...........100.....1010111 +#define VSRL_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1010000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101000...........100.....1010111 +#define VSRA_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1010010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101001...........100.....1010111 +#define VSSRL_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1010100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101010...........100.....1010111 +#define VSSRA_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1010110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101011...........100.....1010111 +#define VNSRL_WX(vd, vs2, rs1, vm) EMIT(R_type(0b1011000 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101100...........100.....1010111 +#define VNSRA_WX(vd, vs2, rs1, vm) EMIT(R_type(0b1011010 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101101...........100.....1010111 +#define VNCLIPU_WX(vd, vs2, rs1, vm) EMIT(R_type(0b1011100 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101110...........100.....1010111 +#define VNCLIP_WX(vd, vs2, rs1, vm) EMIT(R_type(0b1011110 | (vm), vs2, rs1, 0b100, vd, 0b1010111)) // 101111...........100.....1010111 // OPIVV -#define VADD_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0000000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 000000...........000.....1010111 -#define VSUB_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0000100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 000010...........000.....1010111 -#define VMINU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0001000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 000100...........000.....1010111 -#define VMIN_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0001010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 000101...........000.....1010111 -#define VMAXU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0001100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 000110...........000.....1010111 -#define VMAX_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0001110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 000111...........000.....1010111 -#define VAND_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0010010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 001001...........000.....1010111 -#define VOR_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0010100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 001010...........000.....1010111 -#define VXOR_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0010110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 001011...........000.....1010111 -#define VRGATHER_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0011000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 001100...........000.....1010111 -#define VRGATHEREI16_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0011100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 001110...........000.....1010111 - -#define VADC_VVM(vd, vs1, vs2) EMIT(R_type(0b0100000, vs2, vs1, 0b000, vd, 0b1010111)) // 0100000..........000.....1010111 -#define VMADC_VVM(vd, vs1, vs2) EMIT(R_type(0b0100010, vs2, vs1, 0b000, vd, 0b1010111)) // 0100010..........000.....1010111 -#define VMADC_VV(vd, vs1, vs2) EMIT(R_type(0b0100011, vs2, vs1, 0b000, vd, 0b1010111)) // 0100011..........000.....1010111 -#define VSBC_VVM(vd, vs1, vs2) EMIT(R_type(0b0100100, vs2, vs1, 0b000, vd, 0b1010111)) // 0100100..........000.....1010111 -#define VMSBC_VVM(vd, vs1, vs2) EMIT(R_type(0b0100110, vs2, vs1, 0b000, vd, 0b1010111)) // 0100110..........000.....1010111 -#define VMSBC_VV(vd, vs1, vs2) EMIT(R_type(0b0100111, vs2, vs1, 0b000, vd, 0b1010111)) // 0100111..........000.....1010111 -#define VMERGE_VVM(vd, vs1, vs2) EMIT(R_type(0b0101110, vs2, vs1, 0b000, vd, 0b1010111)) // 0101110..........000.....1010111 +#define VADD_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0000000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 000000...........000.....1010111 +#define VSUB_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0000100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 000010...........000.....1010111 +#define VMINU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0001000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 000100...........000.....1010111 +#define VMIN_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0001010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 000101...........000.....1010111 +#define VMAXU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0001100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 000110...........000.....1010111 +#define VMAX_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0001110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 000111...........000.....1010111 +#define VAND_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0010010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 001001...........000.....1010111 +#define VOR_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0010100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 001010...........000.....1010111 +#define VXOR_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0010110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 001011...........000.....1010111 +#define VRGATHER_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0011000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 001100...........000.....1010111 +#define VRGATHEREI16_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0011100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 001110...........000.....1010111 + +#define VADC_VVM(vd, vs2, vs1) EMIT(R_type((0b0100000 | rv64_xtheadvector), vs2, vs1, 0b000, vd, 0b1010111)) // 0100000..........000.....1010111 +#define VMADC_VVM(vd, vs2, vs1) EMIT(R_type(0b0100010, vs2, vs1, 0b000, vd, 0b1010111)) // 0100010..........000.....1010111 +#define VMADC_VV(vd, vs2, vs1) EMIT(R_type(0b0100011, vs2, vs1, 0b000, vd, 0b1010111)) // 0100011..........000.....1010111 +#define VSBC_VVM(vd, vs2, vs1) EMIT(R_type((0b0100100 | rv64_xtheadvector), vs2, vs1, 0b000, vd, 0b1010111)) // 0100100..........000.....1010111 +#define VMSBC_VVM(vd, vs2, vs1) EMIT(R_type(0b0100110, vs2, vs1, 0b000, vd, 0b1010111)) // 0100110..........000.....1010111 +#define VMSBC_VV(vd, vs2, vs1) EMIT(R_type(0b0100111, vs2, vs1, 0b000, vd, 0b1010111)) // 0100111..........000.....1010111 +#define VMERGE_VVM(vd, vs2, vs1) EMIT(R_type(0b0101110, vs2, vs1, 0b000, vd, 0b1010111)) // 0101110..........000.....1010111 #define VMV_V_V(vd, vs1) EMIT(I_type(0b010111100000, vs1, 0b000, vd, 0b1010111)) // 010111100000.....000.....1010111 -#define VMSEQ_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0110000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 011000...........000.....1010111 -#define VMSNE_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0110010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 011001...........000.....1010111 -#define VMSLTU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0110100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 011010...........000.....1010111 -#define VMSLT_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0110110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 011011...........000.....1010111 -#define VMSLEU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0111000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 011100...........000.....1010111 -#define VMSLE_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0111010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 011101...........000.....1010111 -#define VSADDU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1000000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 100000...........000.....1010111 -#define VSADD_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1000010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 100001...........000.....1010111 -#define VSSUBU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1000100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 100010...........000.....1010111 -#define VSSUB_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1000110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 100011...........000.....1010111 -#define VSLL_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1001010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 100101...........000.....1010111 -#define VSMUL_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1001110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 100111...........000.....1010111 -#define VSRL_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1010000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101000...........000.....1010111 -#define VSRA_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1010010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101001...........000.....1010111 -#define VSSRL_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1010100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101010...........000.....1010111 -#define VSSRA_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1010110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101011...........000.....1010111 -#define VNSRL_WV(vd, vs1, vs2, vm) EMIT(R_type(0b1011000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101100...........000.....1010111 -#define VNSRA_WV(vd, vs1, vs2, vm) EMIT(R_type(0b1011010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101101...........000.....1010111 -#define VNCLIPU_WV(vd, vs1, vs2, vm) EMIT(R_type(0b1011100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101110...........000.....1010111 -#define VNCLIP_WV(vd, vs1, vs2, vm) EMIT(R_type(0b1011110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101111...........000.....1010111 -#define VWREDSUMU_VS(vd, vs1, vs2, vm) EMIT(R_type(0b1100000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 110000...........000.....1010111 -#define VWREDSUM_VS(vd, vs1, vs2, vm) EMIT(R_type(0b1100010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 110001...........000.....1010111 +#define VMSEQ_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0110000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 011000...........000.....1010111 +#define VMSNE_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0110010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 011001...........000.....1010111 +#define VMSLTU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0110100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 011010...........000.....1010111 +#define VMSLT_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0110110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 011011...........000.....1010111 +#define VMSLEU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0111000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 011100...........000.....1010111 +#define VMSLE_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0111010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 011101...........000.....1010111 +#define VSADDU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1000000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 100000...........000.....1010111 +#define VSADD_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1000010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 100001...........000.....1010111 +#define VSSUBU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1000100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 100010...........000.....1010111 +#define VSSUB_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1000110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 100011...........000.....1010111 +#define VSLL_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1001010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 100101...........000.....1010111 +#define VSMUL_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1001110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 100111...........000.....1010111 +#define VSRL_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1010000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101000...........000.....1010111 +#define VSRA_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1010010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101001...........000.....1010111 +#define VSSRL_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1010100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101010...........000.....1010111 +#define VSSRA_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1010110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101011...........000.....1010111 +#define VNSRL_WV(vd, vs2, vs1, vm) EMIT(R_type(0b1011000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101100...........000.....1010111 +#define VNSRA_WV(vd, vs2, vs1, vm) EMIT(R_type(0b1011010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101101...........000.....1010111 +#define VNCLIPU_WV(vd, vs2, vs1, vm) EMIT(R_type(0b1011100 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101110...........000.....1010111 +#define VNCLIP_WV(vd, vs2, vs1, vm) EMIT(R_type(0b1011110 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 101111...........000.....1010111 +#define VWREDSUMU_VS(vd, vs2, vs1, vm) EMIT(R_type(0b1100000 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 110000...........000.....1010111 +#define VWREDSUM_VS(vd, vs2, vs1, vm) EMIT(R_type(0b1100010 | (vm), vs2, vs1, 0b000, vd, 0b1010111)) // 110001...........000.....1010111 // OPIVI -#define VADD_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0000000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 000000...........011.....1010111 -#define VRSUB_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0000110 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 000011...........011.....1010111 -#define VAND_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0010010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 001001...........011.....1010111 -#define VOR_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0010100 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 001010...........011.....1010111 -#define VXOR_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0010110 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 001011...........011.....1010111 -#define VRGATHER_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0011000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 001100...........011.....1010111 -#define VSLIDEUP_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0011100 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 001110...........011.....1010111 -#define VSLIDEDOWN_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0011110 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 001111...........011.....1010111 - -#define VADC_VIM(vd, simm5, vs2) EMIT(R_type(0b0100000, vs2, simm5, 0b011, vd, 0b1010111)) // 0100000..........011.....1010111 -#define VMADC_VIM(vd, simm5, vs2) EMIT(R_type(0b0100010, vs2, simm5, 0b011, vd, 0b1010111)) // 0100010..........011.....1010111 -#define VMADC_VI(vd, simm5, vs2) EMIT(R_type(0b0100011, vs2, simm5, 0b011, vd, 0b1010111)) // 0100011..........011.....1010111 -#define VMERGE_VIM(vd, simm5, vs2) EMIT(R_type(0b0101110, vs2, simm5, 0b011, vd, 0b1010111)) // 0101110..........011.....1010111 +#define VADD_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0000000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 000000...........011.....1010111 +#define VRSUB_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0000110 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 000011...........011.....1010111 +#define VAND_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0010010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 001001...........011.....1010111 +#define VOR_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0010100 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 001010...........011.....1010111 +#define VXOR_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0010110 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 001011...........011.....1010111 +#define VRGATHER_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0011000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 001100...........011.....1010111 +#define VSLIDEUP_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0011100 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 001110...........011.....1010111 +#define VSLIDEDOWN_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0011110 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 001111...........011.....1010111 + +#define VADC_VIM(vd, vs2, simm5) EMIT(R_type((0b0100000 | rv64_xtheadvector), vs2, simm5, 0b011, vd, 0b1010111)) // 0100000..........011.....1010111 +#define VMADC_VIM(vd, vs2, simm5) EMIT(R_type(0b0100010, vs2, simm5, 0b011, vd, 0b1010111)) // 0100010..........011.....1010111 +#define VMADC_VI(vd, vs2, simm5) EMIT(R_type(0b0100011, vs2, simm5, 0b011, vd, 0b1010111)) // 0100011..........011.....1010111 +#define VMERGE_VIM(vd, vs2, simm5) EMIT(R_type(0b0101110, vs2, simm5, 0b011, vd, 0b1010111)) // 0101110..........011.....1010111 #define VMV_V_I(vd, simm5) EMIT(I_type(0b010111100000, simm5, 0b011, vd, 0b1010111)) // 010111100000.....011.....1010111 -#define VMSEQ_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0110000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 011000...........011.....1010111 -#define VMSNE_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0110010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 011001...........011.....1010111 -#define VMSLEU_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0111000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 011100...........011.....1010111 -#define VMSLE_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0111010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 011101...........011.....1010111 -#define VMSGTU_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0111100 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 011110...........011.....1010111 -#define VMSGT_VI(vd, simm5, vs2, vm) EMIT(R_type(0b0111110 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 011111...........011.....1010111 - -#define VSADDU_VI(vd, simm5, vs2, vm) EMIT(R_type(0b1000000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 100000...........011.....1010111 -#define VSADD_VI(vd, simm5, vs2, vm) EMIT(R_type(0b1000010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 100001...........011.....1010111 -#define VSLL_VI(vd, simm5, vs2, vm) EMIT(R_type(0b1001010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 100101...........011.....1010111 -#define VSRL_VI(vd, simm5, vs2, vm) EMIT(R_type(0b1010000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101000...........011.....1010111 -#define VSRA_VI(vd, simm5, vs2, vm) EMIT(R_type(0b1010010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101001...........011.....1010111 -#define VSSRL_VI(vd, simm5, vs2, vm) EMIT(R_type(0b1010100 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101010...........011.....1010111 -#define VSSRA_VI(vd, simm5, vs2, vm) EMIT(R_type(0b1010110 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101011...........011.....1010111 -#define VNSRL_WI(vd, simm5, vs2, vm) EMIT(R_type(0b1011000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101100...........011.....1010111 -#define VNSRA_WI(vd, simm5, vs2, vm) EMIT(R_type(0b1011010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101101...........011.....1010111 -#define VNCLIPU_WI(vd, simm5, vs2, vm) EMIT(R_type(0b1011100 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101110...........011.....1010111 -#define VNCLIP_WI(vd, simm5, vs2, vm) EMIT(R_type(0b1011110 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101111...........011.....1010111 +#define VMSEQ_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0110000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 011000...........011.....1010111 +#define VMSNE_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0110010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 011001...........011.....1010111 +#define VMSLEU_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0111000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 011100...........011.....1010111 +#define VMSLE_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0111010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 011101...........011.....1010111 +#define VMSGTU_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0111100 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 011110...........011.....1010111 +#define VMSGT_VI(vd, vs2, simm5, vm) EMIT(R_type(0b0111110 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 011111...........011.....1010111 + +#define VSADDU_VI(vd, vs2, simm5, vm) EMIT(R_type(0b1000000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 100000...........011.....1010111 +#define VSADD_VI(vd, vs2, simm5, vm) EMIT(R_type(0b1000010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 100001...........011.....1010111 +#define VSLL_VI(vd, vs2, simm5, vm) EMIT(R_type(0b1001010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 100101...........011.....1010111 +#define VSRL_VI(vd, vs2, simm5, vm) EMIT(R_type(0b1010000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101000...........011.....1010111 +#define VSRA_VI(vd, vs2, simm5, vm) EMIT(R_type(0b1010010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101001...........011.....1010111 +#define VSSRL_VI(vd, vs2, simm5, vm) EMIT(R_type(0b1010100 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101010...........011.....1010111 +#define VSSRA_VI(vd, vs2, simm5, vm) EMIT(R_type(0b1010110 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101011...........011.....1010111 +#define VNSRL_WI(vd, vs2, simm5, vm) EMIT(R_type(0b1011000 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101100...........011.....1010111 +#define VNSRA_WI(vd, vs2, simm5, vm) EMIT(R_type(0b1011010 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101101...........011.....1010111 +#define VNCLIPU_WI(vd, vs2, simm5, vm) EMIT(R_type(0b1011100 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101110...........011.....1010111 +#define VNCLIP_WI(vd, vs2, simm5, vm) EMIT(R_type(0b1011110 | (vm), vs2, simm5, 0b011, vd, 0b1010111)) // 101111...........011.....1010111 #define VMV1R_V(vd, vs2) EMIT(R_type(0b1001111, vs2, 0b00000, 0b011, vd, 0b1010111)) // 1001111.....00000011.....1010111 #define VMV2R_V(vd, vs2) EMIT(R_type(0b1001111, vs2, 0b00001, 0b011, vd, 0b1010111)) // 1001111.....00001011.....1010111 @@ -1578,20 +1616,25 @@ f28–31 ft8–11 FP temporaries Caller #define VMV8R_V(vd, vs2) EMIT(R_type(0b1001111, vs2, 0b00111, 0b011, vd, 0b1010111)) // 1001111.....00111011.....1010111 // OPMVV -#define VREDSUM_VS(vd, vs1, vs2, vm) EMIT(R_type(0b0000000 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000000...........010.....1010111 -#define VREDAND_VS(vd, vs1, vs2, vm) EMIT(R_type(0b0000010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000001...........010.....1010111 -#define VREDOR_VS(vd, vs1, vs2, vm) EMIT(R_type(0b0000100 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000010...........010.....1010111 -#define VREDXOR_VS(vd, vs1, vs2, vm) EMIT(R_type(0b0000110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000011...........010.....1010111 -#define VREDMINU_VS(vd, vs1, vs2, vm) EMIT(R_type(0b0001000 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000100...........010.....1010111 -#define VREDMIN_VS(vd, vs1, vs2, vm) EMIT(R_type(0b0001010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000101...........010.....1010111 -#define VREDMAXU_VS(vd, vs1, vs2, vm) EMIT(R_type(0b0001100 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000110...........010.....1010111 -#define VREDMAX_VS(vd, vs1, vs2, vm) EMIT(R_type(0b0001110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000111...........010.....1010111 -#define VAADDU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0010000 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 001000...........010.....1010111 -#define VAADD_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0010010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 001001...........010.....1010111 -#define VASUBU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0010100 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 001010...........010.....1010111 -#define VASUB_VV(vd, vs1, vs2, vm) EMIT(R_type(0b0010110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 001011...........010.....1010111 - -#define VMV_X_S(rd, vs2) EMIT(R_type(0b0100001, vs2, 0b00000, 0b010, rd, 0b1010111)) // 0100001.....00000010.....1010111 +#define VREDSUM_VS(vd, vs2, vs1, vm) EMIT(R_type(0b0000000 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000000...........010.....1010111 +#define VREDAND_VS(vd, vs2, vs1, vm) EMIT(R_type(0b0000010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000001...........010.....1010111 +#define VREDOR_VS(vd, vs2, vs1, vm) EMIT(R_type(0b0000100 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000010...........010.....1010111 +#define VREDXOR_VS(vd, vs2, vs1, vm) EMIT(R_type(0b0000110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000011...........010.....1010111 +#define VREDMINU_VS(vd, vs2, vs1, vm) EMIT(R_type(0b0001000 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000100...........010.....1010111 +#define VREDMIN_VS(vd, vs2, vs1, vm) EMIT(R_type(0b0001010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000101...........010.....1010111 +#define VREDMAXU_VS(vd, vs2, vs1, vm) EMIT(R_type(0b0001100 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000110...........010.....1010111 +#define VREDMAX_VS(vd, vs2, vs1, vm) EMIT(R_type(0b0001110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 000111...........010.....1010111 +#define VAADD_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0010010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 001001...........010.....1010111 +#define VASUB_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0010110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 001011...........010.....1010111 +// Warning, no unsigned edition in Xtheadvector +#define VAADDU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0010000 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 001000...........010.....1010111 +#define VASUBU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b0010100 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 001010...........010.....1010111 + +// Warning: zero-extended on xtheadvector! +#define VMV_X_S(rd, vs2) EMIT(R_type((rv64_xtheadvector ? 0b0011001 : 0b0100001), vs2, 0b00000, 0b010, rd, 0b1010111)) // 0100001.....00000010.....1010111 + +// Warning: xtheadvector only +#define VEXT_X_V(rd, vs2, rs1) EMIT(R_type((rv64_xtheadvector ? 0b0011001 : 0b0100001), vs2, rs1, 0b010, rd, 0b1010111)) // Vector Integer Extension Instructions // https://github.com/riscv/riscv-v-spec/blob/e49574c92b072fd4d71e6cb20f7e8154de5b83fe/v-spec.adoc#123-vector-integer-extension @@ -1603,88 +1646,89 @@ f28–31 ft8–11 FP temporaries Caller #define VZEXT_VF2(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b00110, 0b010, vd, 0b1010111)) // 010010......00110010.....1010111 #define VSEXT_VF2(vd, vs2, vm) EMIT(R_type(0b0100100 | (vm), vs2, 0b00111, 0b010, vd, 0b1010111)) // 010010......00111010.....1010111 -#define VCOMPRESS_VM(vd, vs1, vs2) EMIT(R_type(0b0101111, vs2, vs1, 0b010, vd, 0b1010111)) // 0101111..........010.....1010111 -#define VMANDN_MM(vd, vs1, vs2) EMIT(R_type(0b0110001, vs2, vs1, 0b010, vd, 0b1010111)) // 0110001..........010.....1010111 -#define VMAND_MM(vd, vs1, vs2) EMIT(R_type(0b0110011, vs2, vs1, 0b010, vd, 0b1010111)) // 0110011..........010.....1010111 -#define VMOR_MM(vd, vs1, vs2) EMIT(R_type(0b0110101, vs2, vs1, 0b010, vd, 0b1010111)) // 0110101..........010.....1010111 -#define VMXOR_MM(vd, vs1, vs2) EMIT(R_type(0b0110111, vs2, vs1, 0b010, vd, 0b1010111)) // 0110111..........010.....1010111 -#define VMORN_MM(vd, vs1, vs2) EMIT(R_type(0b0111001, vs2, vs1, 0b010, vd, 0b1010111)) // 0111001..........010.....1010111 -#define VMNAND_MM(vd, vs1, vs2) EMIT(R_type(0b0111011, vs2, vs1, 0b010, vd, 0b1010111)) // 0111011..........010.....1010111 -#define VMNOR_MM(vd, vs1, vs2) EMIT(R_type(0b0111101, vs2, vs1, 0b010, vd, 0b1010111)) // 0111101..........010.....1010111 -#define VMXNOR_MM(vd, vs1, vs2) EMIT(R_type(0b0111111, vs2, vs1, 0b010, vd, 0b1010111)) // 0111111..........010.....1010111 - -#define VMSBF_M(vd, vs2, vm) EMIT(R_type(0b0101000 | (vm), vs2, 0b00001, 0b010, vd, 0b1010111)) // 010100......00001010.....1010111 -#define VMSOF_M(vd, vs2, vm) EMIT(R_type(0b0101000 | (vm), vs2, 0b00010, 0b010, vd, 0b1010111)) // 010100......00010010.....1010111 -#define VMSIF_M(vd, vs2, vm) EMIT(R_type(0b0101000 | (vm), vs2, 0b00011, 0b010, vd, 0b1010111)) // 010100......00011010.....1010111 -#define VIOTA_M(vd, vs2, vm) EMIT(R_type(0b0101000 | (vm), vs2, 0b10000, 0b010, vd, 0b1010111)) // 010100......10000010.....1010111 -#define VCPOP_M(rd, vs2, vm) EMIT(R_type(0b0100000 | (vm), vs2, 0b10000, 0b010, rd, 0b1010111)) // 010000......10000010.....1010111 -#define VFIRST_M(rd, vs2, vm) EMIT(R_type(0b0100000 | (vm), vs2, 0b10001, 0b010, rd, 0b1010111)) // 010000......10001010.....1010111 - -#define VID_V(vd, vm) EMIT(R_type(0b0101000 | (vm), 0b00000, 0b10001, 0b010, vd, 0b1010111)) // 010100.0000010001010.....1010111 - -#define VDIVU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1000000 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 100000...........010.....1010111 -#define VDIV_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1000010 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 100001...........010.....1010111 -#define VREMU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1000100 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 100010...........010.....1010111 -#define VREM_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1000110 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 100011...........010.....1010111 -#define VMULHU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1001000 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 100100...........010.....1010111 -#define VMUL_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1001010 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 100101...........010.....1010111 -#define VMULHSU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1001100 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 100110...........010.....1010111 -#define VMULH_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1001110 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 100111...........010.....1010111 -#define VMADD_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1010010 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 101001...........010.....1010111 -#define VNMSUB_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1010110 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 101011...........010.....1010111 -#define VMACC_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1011010 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 101101...........010.....1010111 -#define VNMSAC_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1011110 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 101111...........010.....1010111 -#define VWADDU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1100000 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 110000...........010.....1010111 -#define VWADD_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1100010 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 110001...........010.....1010111 -#define VWSUBU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1100100 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 110010...........010.....1010111 -#define VWSUB_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1100110 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 110011...........010.....1010111 -#define VWADDU_WV(vd, vs1, vs2, vm) EMIT(R_type(0b1101000 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 110100...........010.....1010111 -#define VWADD_WV(vd, vs1, vs2, vm) EMIT(R_type(0b1101010 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 110101...........010.....1010111 -#define VWSUBU_WV(vd, vs1, vs2, vm) EMIT(R_type(0b1101100 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 110110...........010.....1010111 -#define VWSUB_WV(vd, vs1, vs2, vm) EMIT(R_type(0b1101110 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 110111...........010.....1010111 -#define VWMULU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1110000 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 111000...........010.....1010111 -#define VWMULSU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1110100 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 111010...........010.....1010111 -#define VWMUL_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1110110 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 111011...........010.....1010111 -#define VWMACCU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1111000 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 111100...........010.....1010111 -#define VWMACC_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1111010 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 111101...........010.....1010111 -#define VWMACCSU_VV(vd, vs1, vs2, vm) EMIT(R_type(0b1111110 | (vm), vs2, vs1, 010, vd, 0b1010111)) // 111111...........010.....1010111 +#define VCOMPRESS_VM(vd, vs2, vs1) EMIT(R_type(0b0101111, vs2, vs1, 0b010, vd, 0b1010111)) // 0101111..........010.....1010111 +#define VMANDN_MM(vd, vs2, vs1) EMIT(R_type(0b0110001, vs2, vs1, 0b010, vd, 0b1010111)) // 0110001..........010.....1010111 +#define VMAND_MM(vd, vs2, vs1) EMIT(R_type(0b0110011, vs2, vs1, 0b010, vd, 0b1010111)) // 0110011..........010.....1010111 +#define VMOR_MM(vd, vs2, vs1) EMIT(R_type(0b0110101, vs2, vs1, 0b010, vd, 0b1010111)) // 0110101..........010.....1010111 +#define VMXOR_MM(vd, vs2, vs1) EMIT(R_type(0b0110111, vs2, vs1, 0b010, vd, 0b1010111)) // 0110111..........010.....1010111 +#define VMORN_MM(vd, vs2, vs1) EMIT(R_type(0b0111001, vs2, vs1, 0b010, vd, 0b1010111)) // 0111001..........010.....1010111 +#define VMNAND_MM(vd, vs2, vs1) EMIT(R_type(0b0111011, vs2, vs1, 0b010, vd, 0b1010111)) // 0111011..........010.....1010111 +#define VMNOR_MM(vd, vs2, vs1) EMIT(R_type(0b0111101, vs2, vs1, 0b010, vd, 0b1010111)) // 0111101..........010.....1010111 +#define VMXNOR_MM(vd, vs2, vs1) EMIT(R_type(0b0111111, vs2, vs1, 0b010, vd, 0b1010111)) // 0111111..........010.....1010111 + +#define VMSBF_M(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b0101100 : 0b0101000) | (vm), vs2, 0b00001, 0b010, vd, 0b1010111)) // 010100......00001010.....1010111 +#define VMSOF_M(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b0101100 : 0b0101000) | (vm), vs2, 0b00010, 0b010, vd, 0b1010111)) // 010100......00010010.....1010111 +#define VMSIF_M(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b0101100 : 0b0101000) | (vm), vs2, 0b00011, 0b010, vd, 0b1010111)) // 010100......00011010.....1010111 +#define VIOTA_M(vd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b0101100 : 0b0101000) | (vm), vs2, 0b10000, 0b010, vd, 0b1010111)) // 010100......10000010.....1010111 +#define VCPOP_M(rd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b0101100 : 0b0100000) | (vm), vs2, 0b10000, 0b010, rd, 0b1010111)) // 010000......10000010.....1010111 +#define VFIRST_M(rd, vs2, vm) EMIT(R_type((rv64_xtheadvector ? 0b0101100 : 0b0100000) | (vm), vs2, 0b10001, 0b010, rd, 0b1010111)) // 010000......10001010.....1010111 + +#define VID_V(vd, vm) EMIT(R_type((rv64_xtheadvector ? 0b0101100 : 0b0101000) | (vm), 0b00000, 0b10001, 0b010, vd, 0b1010111)) // 010100.0000010001010.....1010111 + +#define VDIVU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1000000 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 100000...........010.....1010111 +#define VDIV_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1000010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 100001...........010.....1010111 +#define VREMU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1000100 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 100010...........010.....1010111 +#define VREM_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1000110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 100011...........010.....1010111 +#define VMULHU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1001000 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 100100...........010.....1010111 +#define VMUL_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1001010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 100101...........010.....1010111 +#define VMULHSU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1001100 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 100110...........010.....1010111 +#define VMULH_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1001110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 100111...........010.....1010111 +#define VMADD_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1010010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 101001...........010.....1010111 +#define VNMSUB_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1010110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 101011...........010.....1010111 +#define VMACC_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1011010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 101101...........010.....1010111 +#define VNMSAC_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1011110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 101111...........010.....1010111 +#define VWADDU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1100000 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 110000...........010.....1010111 +#define VWADD_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1100010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 110001...........010.....1010111 +#define VWSUBU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1100100 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 110010...........010.....1010111 +#define VWSUB_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1100110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 110011...........010.....1010111 +#define VWADDU_WV(vd, vs2, vs1, vm) EMIT(R_type(0b1101000 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 110100...........010.....1010111 +#define VWADD_WV(vd, vs2, vs1, vm) EMIT(R_type(0b1101010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 110101...........010.....1010111 +#define VWSUBU_WV(vd, vs2, vs1, vm) EMIT(R_type(0b1101100 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 110110...........010.....1010111 +#define VWSUB_WV(vd, vs2, vs1, vm) EMIT(R_type(0b1101110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 110111...........010.....1010111 +#define VWMULU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1110000 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 111000...........010.....1010111 +#define VWMULSU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1110100 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 111010...........010.....1010111 +#define VWMUL_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1110110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 111011...........010.....1010111 +#define VWMACCU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1111000 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 111100...........010.....1010111 +#define VWMACC_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1111010 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 111101...........010.....1010111 +#define VWMACCSU_VV(vd, vs2, vs1, vm) EMIT(R_type(0b1111110 | (vm), vs2, vs1, 0b010, vd, 0b1010111)) // 111111...........010.....1010111 // OPMVX -#define VAADDU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0010000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 001000...........110.....1010111 -#define VAADD_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0010010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 001001...........110.....1010111 -#define VASUBU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0010100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 001010...........110.....1010111 -#define VASUB_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0010110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 001011...........110.....1010111 -#define VSLIDE1UP_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0011100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 001110...........110.....1010111 -#define VSLIDE1DOWN_VX(vd, rs1, vs2, vm) EMIT(R_type(0b0011110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 001111...........110.....1010111 - -#define VMV_S_X(vd, rs1) EMIT(I_type(0b010000100000, rs1, 0b110, vd, 0b1010111)) // 010000100000.....110.....1010111 - -#define VDIVU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1000000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100000...........110.....1010111 -#define VDIV_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1000010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100001...........110.....1010111 -#define VREMU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1000100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100010...........110.....1010111 -#define VREM_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1000110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100011...........110.....1010111 -#define VMULHU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1001000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100100...........110.....1010111 -#define VMUL_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1001010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100101...........110.....1010111 -#define VMULHSU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1001100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100110...........110.....1010111 -#define VMULH_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1001110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100111...........110.....1010111 -#define VMADD_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1010010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 101001...........110.....1010111 -#define VNMSUB_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1010110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 101011...........110.....1010111 -#define VMACC_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1011010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 101101...........110.....1010111 -#define VNMSAC_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1011110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 101111...........110.....1010111 -#define VWADDU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1100000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110000...........110.....1010111 -#define VWADD_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1100010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110001...........110.....1010111 -#define VWSUBU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1100100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110010...........110.....1010111 -#define VWSUB_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1100110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110011...........110.....1010111 -#define VWADDU_WX(vd, rs1, vs2, vm) EMIT(R_type(0b1101000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110100...........110.....1010111 -#define VWADD_WX(vd, rs1, vs2, vm) EMIT(R_type(0b1101010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110101...........110.....1010111 -#define VWSUBU_WX(vd, rs1, vs2, vm) EMIT(R_type(0b1101100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110110...........110.....1010111 -#define VWSUB_WX(vd, rs1, vs2, vm) EMIT(R_type(0b1101110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110111...........110.....1010111 -#define VWMULU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1110000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111000...........110.....1010111 -#define VWMULSU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1110100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111010...........110.....1010111 -#define VWMUL_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1110110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111011...........110.....1010111 -#define VWMACCU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1111000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111100...........110.....1010111 -#define VWMACC_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1111010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111101...........110.....1010111 -#define VWMACCUS_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1111100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111110...........110.....1010111 -#define VWMACCSU_VX(vd, rs1, vs2, vm) EMIT(R_type(0b1111110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111111...........110.....1010111 +#define VAADDU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0010000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 001000...........110.....1010111 +#define VAADD_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0010010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 001001...........110.....1010111 +#define VASUBU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0010100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 001010...........110.....1010111 +#define VASUB_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0010110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 001011...........110.....1010111 +#define VSLIDE1UP_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0011100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 001110...........110.....1010111 +#define VSLIDE1DOWN_VX(vd, vs2, rs1, vm) EMIT(R_type(0b0011110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 001111...........110.....1010111 + +// Warning, upper elements will be cleared in xtheadvector! +#define VMV_S_X(vd, rs1) EMIT(I_type((rv64_xtheadvector ? 0b001101100000 : 0b010000100000), rs1, 0b110, vd, 0b1010111)) + +#define VDIVU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1000000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100000...........110.....1010111 +#define VDIV_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1000010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100001...........110.....1010111 +#define VREMU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1000100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100010...........110.....1010111 +#define VREM_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1000110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100011...........110.....1010111 +#define VMULHU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1001000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100100...........110.....1010111 +#define VMUL_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1001010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100101...........110.....1010111 +#define VMULHSU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1001100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100110...........110.....1010111 +#define VMULH_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1001110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 100111...........110.....1010111 +#define VMADD_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1010010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 101001...........110.....1010111 +#define VNMSUB_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1010110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 101011...........110.....1010111 +#define VMACC_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1011010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 101101...........110.....1010111 +#define VNMSAC_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1011110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 101111...........110.....1010111 +#define VWADDU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1100000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110000...........110.....1010111 +#define VWADD_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1100010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110001...........110.....1010111 +#define VWSUBU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1100100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110010...........110.....1010111 +#define VWSUB_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1100110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110011...........110.....1010111 +#define VWADDU_WX(vd, vs2, rs1, vm) EMIT(R_type(0b1101000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110100...........110.....1010111 +#define VWADD_WX(vd, vs2, rs1, vm) EMIT(R_type(0b1101010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110101...........110.....1010111 +#define VWSUBU_WX(vd, vs2, rs1, vm) EMIT(R_type(0b1101100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110110...........110.....1010111 +#define VWSUB_WX(vd, vs2, rs1, vm) EMIT(R_type(0b1101110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 110111...........110.....1010111 +#define VWMULU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1110000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111000...........110.....1010111 +#define VWMULSU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1110100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111010...........110.....1010111 +#define VWMUL_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1110110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111011...........110.....1010111 +#define VWMACCU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1111000 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111100...........110.....1010111 +#define VWMACC_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1111010 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111101...........110.....1010111 +#define VWMACCUS_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1111100 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111110...........110.....1010111 +#define VWMACCSU_VX(vd, vs2, rs1, vm) EMIT(R_type(0b1111110 | (vm), vs2, rs1, 0b110, vd, 0b1010111)) // 111111...........110.....1010111 #endif //__RV64_EMITTER_H__ diff --git a/src/dynarec/rv64/rv64_printer.c b/src/dynarec/rv64/rv64_printer.c index 54f1ad51076f31a6b45141d1353c55864aa3b288..6f7af4d23ec9ae9259f40140469b1af4a3b3a595 100644 --- a/src/dynarec/rv64/rv64_printer.c +++ b/src/dynarec/rv64/rv64_printer.c @@ -7,1783 +7,5957 @@ #include "rv64_printer.h" #include "debug.h" +extern int rv64_xtheadba; +extern int rv64_xtheadbb; +extern int rv64_xtheadbs; +extern int rv64_xtheadcondmov; +extern int rv64_xtheadmemidx; +extern int rv64_xtheadmempair; +extern int rv64_xtheadfmemidx; +extern int rv64_xtheadmac; +extern int rv64_xtheadfmv; + +static const char gpr[32][9] = { + "zero", + "ra", + "sp", + "gp", + "tp", + "t0_mask", + "t1", + "t2_rip", + "s0_flags", + "s1", + "a0", + "a1", + "a2", + "a3", + "a4", + "a5", + "a6_rax", + "a7_rcx", + "s2_rdx", + "s3_rbx", + "s4_rsp", + "s5_rbp", + "s6_rsi", + "s7_rdi", + "s8_r8", + "s9_r9", + "s10_r10", + "s11_r11", + "t3_r12", + "t4_r13", + "t5_r14", + "t6_r15", +}; + +static const char fpr[32][5] = { + "ft0", + "ft1", + "ft2", + "ft3", + "ft4", + "ft5", + "ft6", + "ft7", + "fs0", + "fs1", + "fa0", + "fa1", + "fa2", + "fa3", + "fa4", + "fa5", + "fa6", + "fa7", + "fs2", + "fs3", + "fs4", + "fs5", + "fs6", + "fs7", + "fs8", + "fs9", + "fs10", + "fs11", + "ft8", + "ft9", + "ft10", + "ft11", +}; + +static const char vpr[32][4] = { + "v0", + "v1", + "v2", + "v3", + "v4", + "v5", + "v6", + "v7", + "v8", + "v9", + "v10", + "v11", + "v12", + "v13", + "v14", + "v15", + "v16", + "v17", + "v18", + "v19", + "v20", + "v21", + "v22", + "v23", + "v24", + "v25", + "v26", + "v27", + "v28", + "v29", + "v30", + "v31", +}; + +static const char vm[2][5] = { + "v0.t", + "none", +}; + +static const char aq[4][5] = { + "none", + "aq", +}; + +static const char rl[4][5] = { + "none", + "rl", +}; + +static const char rm[8][4] = { + "rne", + "rtz", + "rdn", + "rup", + "rmm", + "n/a", + "n/a", + "dyn", +}; + +static const char nf[8][4] = { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", +}; + +#define BX(v, b) (((v) >> b) & 1) +#define FX(v, high, low) (((v) >> low) & ((1ULL << (high - low + 1)) - 1)) +#define SIGN_EXTEND(val, val_sz) (((int32_t)(val) << (32 - (val_sz))) >> (32 - (val_sz))) + typedef struct { int8_t rd; int8_t rs1; int8_t rs2; int8_t rs3; + int8_t vd; + int8_t vs1; + int8_t vs2; + int8_t vs3; + int8_t aq; + int8_t rl; + int8_t vm; + int8_t rm; + int8_t nf; + int16_t csr; + int32_t imm; int32_t imm2; - uint16_t csr; - char *name; - bool rvc; - bool f; -} insn_t; - -static const char gpnames[32][9] = { - "zero", "ra", "sp", "gp", "tp", "t0_mask", "t1", "t2_rip", - "s0_flags", "s1", "a0", "a1", "a2", "a3", "a4", "a5", - "a6_rax", "a7_rcx", "s2_rdx", "s3_rbx", "s4_rsp", "s5_rbp", "s6_rsi", "s7_rdi", - "s8_r8", "s9_r9", "s10_r10", "s11_r11", "t3_r12", "t4_r13", "t5_r14", "t6_r15", -}; + char* name; +} rv64_print_t; -static const char fpnames[32][5] = { - "ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7", - "fs0", "fs1", "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", - "fa6", "fa7", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7", - "fs8", "fs9", "fs10", "fs11", "ft8", "ft9", "ft10", "ft11", -}; - -#define QUADRANT(data) (((data) >> 0) & 0x3 ) - -/** - * normal types -*/ -#define OPCODE(data) (((data) >> 2) & 0x1f) -#define RD(data) (((data) >> 7) & 0x1f) -#define RS1(data) (((data) >> 15) & 0x1f) -#define RS2(data) (((data) >> 20) & 0x1f) -#define RS3(data) (((data) >> 27) & 0x1f) -#define FUNCT2(data) (((data) >> 25) & 0x3) -#define FUNCT3(data) (((data) >> 12) & 0x7) -#define FUNCT7(data) (((data) >> 25) & 0x7f) -#define IMM116(data) (((data) >> 26) & 0x3f) -#define AQ(data) (((data) >> 26) & 0x1) -#define RL(data) (((data) >> 25) & 0x1) -#define THIMM2(data) (((data) >> 20) & 0x3f) -#define THFUNCT12(data) (((data) >> 20) & 0xfff) -#define THFUNCT5(data) (((data) >> 27) & 0x1f) - -static inline insn_t insn_utype_read(uint32_t data) +const char* rv64_print(uint32_t opcode, uintptr_t addr) { - return (insn_t) { - .imm = (int32_t)data & 0xfffff000, - .rd = RD(data), - }; -} + static char buff[200]; + rv64_print_t a; -static inline insn_t insn_itype_read(uint32_t data) -{ - return (insn_t) { - .imm = (int32_t)data >> 20, - .rs1 = RS1(data), - .rd = RD(data), - }; -} + if (rv64_xtheadba || rv64_xtheadbb || rv64_xtheadbs || rv64_xtheadcondmov || rv64_xtheadmempair) { -static inline insn_t insn_jtype_read(uint32_t data) -{ - uint32_t imm20 = (data >> 31) & 0x1; - uint32_t imm101 = (data >> 21) & 0x3ff; - uint32_t imm11 = (data >> 20) & 0x1; - uint32_t imm1912 = (data >> 12) & 0xff; - - int32_t imm = (imm20 << 20) | (imm1912 << 12) | (imm11 << 11) | (imm101 << 1); - imm = (imm << 11) >> 11; - - return (insn_t) { - .imm = imm, - .rd = RD(data), - }; -} + /**************** + * Generated by https://github.com/ksco/riscv-opcodes/tree/box64_printer + * Command: python parse.py -box64 rv_xtheadba rv_xtheadbb rv_xtheadbs rv_xtheadcondmov rv_xtheadmempair > code.c + * Please do NOT edit the following code manually. + */ -static inline insn_t insn_btype_read(uint32_t data) -{ - uint32_t imm12 = (data >> 31) & 0x1; - uint32_t imm105 = (data >> 25) & 0x3f; - uint32_t imm41 = (data >> 8) & 0xf; - uint32_t imm11 = (data >> 7) & 0x1; - - int32_t imm = (imm12 << 12) | (imm11 << 11) |(imm105 << 5) | (imm41 << 1); - imm = (imm << 19) >> 19; - - return (insn_t) { - .imm = imm, - .rs1 = RS1(data), - .rs2 = RS2(data), - }; -} + // rv_xtheadba, TH.ADDSL + if ((opcode & 0xf800707f) == 0x100b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.ADDSL", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], a.imm, a.imm); + return buff; + } -static inline insn_t insn_rtype_read(uint32_t data) -{ - return (insn_t) { - .rs1 = RS1(data), - .rs2 = RS2(data), - .rd = RD(data), - }; -} + // rv_xtheadbb, TH.EXT + if ((opcode & 0x707f) == 0x200b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm2 = FX(opcode, 31, 26); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), 0x%x(%d)", "TH.EXT", gpr[a.rd], gpr[a.rs1], a.imm2, a.imm2, a.imm, a.imm); + return buff; + } -static inline insn_t insn_stype_read(uint32_t data) -{ - uint32_t imm115 = (data >> 25) & 0x7f; - uint32_t imm40 = (data >> 7) & 0x1f; - - int32_t imm = (imm115 << 5) | imm40; - imm = (imm << 20) >> 20; - return (insn_t) { - .imm = imm, - .rs1 = RS1(data), - .rs2 = RS2(data), - }; -} + // rv_xtheadbb, TH.EXTU + if ((opcode & 0x707f) == 0x300b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm2 = FX(opcode, 31, 26); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), 0x%x(%d)", "TH.EXTU", gpr[a.rd], gpr[a.rs1], a.imm2, a.imm2, a.imm, a.imm); + return buff; + } -static inline insn_t insn_csrtype_read(uint32_t data) -{ - return (insn_t) { - .csr = data >> 20, - .rs1 = RS1(data), - .rd = RD(data), - }; -} + // rv_xtheadbb, TH.FF0 + if ((opcode & 0xfff0707f) == 0x8400100b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "TH.FF0", gpr[a.rd], gpr[a.rs1]); + return buff; + } -static inline insn_t insn_fprtype_read(uint32_t data) -{ - return (insn_t) { - .rs1 = RS1(data), - .rs2 = RS2(data), - .rs3 = RS3(data), - .rd = RD(data), - }; -} + // rv_xtheadbb, TH.FF1 + if ((opcode & 0xfff0707f) == 0x8600100b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "TH.FF1", gpr[a.rd], gpr[a.rs1]); + return buff; + } -/** - * compressed types -*/ -#define COPCODE(data) (((data) >> 13) & 0x7 ) -#define CFUNCT1(data) (((data) >> 12) & 0x1 ) -#define CFUNCT2LOW(data) (((data) >> 5) & 0x3 ) -#define CFUNCT2HIGH(data) (((data) >> 10) & 0x3 ) -#define RP1(data) (((data) >> 7) & 0x7 ) -#define RP2(data) (((data) >> 2) & 0x7 ) -#define RC1(data) (((data) >> 7) & 0x1f) -#define RC2(data) (((data) >> 2) & 0x1f) - -static inline insn_t insn_catype_read(uint16_t data) -{ - return (insn_t) { - .rd = RP1(data) + 8, - .rs2 = RP2(data) + 8, - .rvc = true, - }; -} + // rv_xtheadmempair, TH.LDD + if ((opcode & 0xf800707f) == 0xf800400b) { + a.rd = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LDD", gpr[a.rd], gpr[a.rs2], gpr[a.rs1], a.imm, a.imm); + return buff; + } -static inline insn_t insn_crtype_read(uint16_t data) -{ - return (insn_t) { - .rs1 = RC1(data), - .rs2 = RC2(data), - .rvc = true, - }; -} + // rv_xtheadmempair, TH.LWD + if ((opcode & 0xf800707f) == 0xe000400b) { + a.rd = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LWD", gpr[a.rd], gpr[a.rs2], gpr[a.rs1], a.imm, a.imm); + return buff; + } -static inline insn_t insn_citype_read(uint16_t data) -{ - uint32_t imm40 = (data >> 2) & 0x1f; - uint32_t imm5 = (data >> 12) & 0x1; - int32_t imm = (imm5 << 5) | imm40; - imm = (imm << 26) >> 26; - - return (insn_t) { - .imm = imm, - .rd = RC1(data), - .rvc = true, - }; -} + // rv_xtheadmempair, TH.LWUD + if ((opcode & 0xf800707f) == 0xf000400b) { + a.rd = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.LWUD", gpr[a.rd], gpr[a.rs2], gpr[a.rs1], a.imm, a.imm); + return buff; + } -static inline insn_t insn_citype_read2(uint16_t data) -{ - uint32_t imm86 = (data >> 2) & 0x7; - uint32_t imm43 = (data >> 5) & 0x3; - uint32_t imm5 = (data >> 12) & 0x1; + // rv_xtheadcondmov, TH.MVEQZ + if ((opcode & 0xfe00707f) == 0x4000100b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "TH.MVEQZ", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } - int32_t imm = (imm86 << 6) | (imm43 << 3) | (imm5 << 5); + // rv_xtheadcondmov, TH.MVNEZ + if ((opcode & 0xfe00707f) == 0x4200100b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "TH.MVNEZ", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } - return (insn_t) { - .imm = imm, - .rd = RC1(data), - .rvc = true, - }; -} + // rv_xtheadbb, TH.REV + if ((opcode & 0xfff0707f) == 0x8200100b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "TH.REV", gpr[a.rd], gpr[a.rs1]); + return buff; + } -static inline insn_t insn_citype_read3(uint16_t data) -{ - uint32_t imm5 = (data >> 2) & 0x1; - uint32_t imm87 = (data >> 3) & 0x3; - uint32_t imm6 = (data >> 5) & 0x1; - uint32_t imm4 = (data >> 6) & 0x1; - uint32_t imm9 = (data >> 12) & 0x1; - - int32_t imm = (imm5 << 5) | (imm87 << 7) | (imm6 << 6) | (imm4 << 4) | (imm9 << 9); - imm = (imm << 22) >> 22; - - return (insn_t) { - .imm = imm, - .rd = RC1(data), - .rvc = true, - }; -} + // rv_xtheadbb, TH.REVW + if ((opcode & 0xfff0707f) == 0x9000100b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "TH.REVW", gpr[a.rd], gpr[a.rs1]); + return buff; + } -static inline insn_t insn_citype_read4(uint16_t data) -{ - uint32_t imm5 = (data >> 12) & 0x1; - uint32_t imm42 = (data >> 4) & 0x7; - uint32_t imm76 = (data >> 2) & 0x3; + // rv_xtheadmempair, TH.SDD + if ((opcode & 0xf800707f) == 0xf800500b) { + a.rd = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.SDD", gpr[a.rd], gpr[a.rs2], gpr[a.rs1], a.imm, a.imm); + return buff; + } - int32_t imm = (imm5 << 5) | (imm42 << 2) | (imm76 << 6); + // rv_xtheadbb, TH.SRRI + if ((opcode & 0xfc00707f) == 0x1000100b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "TH.SRRI", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } - return (insn_t) { - .imm = imm, - .rd = RC1(data), - .rvc = true, - }; -} + // rv_xtheadbb, TH.SRRIW + if ((opcode & 0xfe00707f) == 0x1400100b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "TH.SRRIW", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } -static inline insn_t insn_citype_read5(uint16_t data) -{ - uint32_t imm1612 = (data >> 2) & 0x1f; - uint32_t imm17 = (data >> 12) & 0x1; - - int32_t imm = (imm1612 << 12) | (imm17 << 17); - imm = (imm << 14) >> 14; - return (insn_t) { - .imm = imm, - .rd = RC1(data), - .rvc = true, - }; -} + // rv_xtheadmempair, TH.SWD + if ((opcode & 0xf800707f) == 0xe000500b) { + a.rd = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 26, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, 0x%x(%d)", "TH.SWD", gpr[a.rd], gpr[a.rs2], gpr[a.rs1], a.imm, a.imm); + return buff; + } -static inline insn_t insn_cbtype_read(uint16_t data) -{ - uint32_t imm5 = (data >> 2) & 0x1; - uint32_t imm21 = (data >> 3) & 0x3; - uint32_t imm76 = (data >> 5) & 0x3; - uint32_t imm43 = (data >> 10) & 0x3; - uint32_t imm8 = (data >> 12) & 0x1; - - int32_t imm = (imm8 << 8) | (imm76 << 6) | (imm5 << 5) | (imm43 << 3) | (imm21 << 1); - imm = (imm << 23) >> 23; - - return (insn_t) { - .imm = imm, - .rs1 = RP1(data) + 8, - .rvc = true, - }; -} + // rv_xtheadbs, TH.TST + if ((opcode & 0xfc00707f) == 0x8800100b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "TH.TST", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } -static inline insn_t insn_cbtype_read2(uint16_t data) -{ - uint32_t imm40 = (data >> 2) & 0x1f; - uint32_t imm5 = (data >> 12) & 0x1; - int32_t imm = (imm5 << 5) | imm40; - imm = (imm << 26) >> 26; - - return (insn_t) { - .imm = imm, - .rd = RP1(data) + 8, - .rvc = true, - }; -} + // rv_xtheadbb, TH.TSTNBZ + if ((opcode & 0xfff0707f) == 0x8000100b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "TH.TSTNBZ", gpr[a.rd], gpr[a.rs1]); + return buff; + } + } -static inline insn_t insn_cstype_read(uint16_t data) -{ - uint32_t imm76 = (data >> 5) & 0x3; - uint32_t imm53 = (data >> 10) & 0x7; + if (rv64_xtheadvector) { + /* These are written by hand.... */ - int32_t imm = ((imm76 << 6) | (imm53 << 3)); + // rv_v, VSETVLI + if ((opcode & 0x8000707f) == 0x7057) { + a.imm = FX(opcode, 30, 20); + a.rs1 = FX(opcode, 19, 15); + a.rd = FX(opcode, 11, 7); + const char *lmul_str, *sew_str; + switch (a.imm & 0b11) { + case 0b00: lmul_str = "m1"; break; + case 0b01: lmul_str = "m2"; break; + case 0b10: lmul_str = "m4"; break; + case 0b11: lmul_str = "m8"; break; + default: lmul_str = "reserved"; break; + } + switch ((a.imm & 0b0011100) >> 2) { + case 0b000: sew_str = "e8"; break; + case 0b001: sew_str = "e16"; break; + case 0b010: sew_str = "e32"; break; + case 0b011: sew_str = "e64"; break; + default: sew_str = "reserved"; break; + } - return (insn_t) { - .imm = imm, - .rs1 = RP1(data) + 8, - .rs2 = RP2(data) + 8, - .rvc = true, - }; -} + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSETVLI", gpr[a.rd], gpr[a.rs1], sew_str, lmul_str); + return buff; + } -static inline insn_t insn_cstype_read2(uint16_t data) -{ - uint32_t imm6 = (data >> 5) & 0x1; - uint32_t imm2 = (data >> 6) & 0x1; - uint32_t imm53 = (data >> 10) & 0x7; - - int32_t imm = ((imm6 << 6) | (imm2 << 2) | (imm53 << 3)); - - return (insn_t) { - .imm = imm, - .rs1 = RP1(data) + 8, - .rs2 = RP2(data) + 8, - .rvc = true, - }; -} + // TODO: add more... + } -static inline insn_t insn_cjtype_read(uint16_t data) -{ - uint32_t imm5 = (data >> 2) & 0x1; - uint32_t imm31 = (data >> 3) & 0x7; - uint32_t imm7 = (data >> 6) & 0x1; - uint32_t imm6 = (data >> 7) & 0x1; - uint32_t imm10 = (data >> 8) & 0x1; - uint32_t imm98 = (data >> 9) & 0x3; - uint32_t imm4 = (data >> 11) & 0x1; - uint32_t imm11 = (data >> 12) & 0x1; - - int32_t imm = ((imm5 << 5) | (imm31 << 1) | (imm7 << 7) | (imm6 << 6) | - (imm10 << 10) | (imm98 << 8) | (imm4 << 4) | (imm11 << 11)); - imm = (imm << 20) >> 20; - return (insn_t) { - .imm = imm, - .rvc = true, - }; -} + /**************** + * Generated by https://github.com/ksco/riscv-opcodes/tree/box64_printer + * Command: python parse.py -box64 rv_a rv_d rv_f rv_i rv_m rv_v rv_zba rv_zbb rv_zbc rv_zicsr rv_zbs rv64_a rv64_d rv64_f rv64_i rv64_m rv64_zba rv64_zbb rv64_zbs > code.c + * Please do NOT edit the following code manually. + */ -static inline insn_t insn_cltype_read(uint16_t data) -{ - uint32_t imm6 = (data >> 5) & 0x1; - uint32_t imm2 = (data >> 6) & 0x1; - uint32_t imm53 = (data >> 10) & 0x7; - - int32_t imm = (imm6 << 6) | (imm2 << 2) | (imm53 << 3); - - return (insn_t) { - .imm = imm, - .rs1 = RP1(data) + 8, - .rd = RP2(data) + 8, - .rvc = true, - }; -} + // rv_i, ADD + if ((opcode & 0xfe00707f) == 0x33) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "ADD", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } -static inline insn_t insn_cltype_read2(uint16_t data) -{ - uint32_t imm76 = (data >> 5) & 0x3; - uint32_t imm53 = (data >> 10) & 0x7; + // rv64_zba, ADD.UW + if ((opcode & 0xfe00707f) == 0x800003b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "ADD.UW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } - int32_t imm = (imm76 << 6) | (imm53 << 3); + // rv_i, ADDI + if ((opcode & 0x707f) == 0x13) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "ADDI", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } - return (insn_t) { - .imm = imm, - .rs1 = RP1(data) + 8, - .rd = RP2(data) + 8, - .rvc = true, - }; -} + // rv64_i, ADDIW + if ((opcode & 0x707f) == 0x1b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "ADDIW", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } -static inline insn_t insn_csstype_read(uint16_t data) -{ - uint32_t imm86 = (data >> 7) & 0x7; - uint32_t imm53 = (data >> 10) & 0x7; + // rv64_i, ADDW + if ((opcode & 0xfe00707f) == 0x3b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "ADDW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } - int32_t imm = (imm86 << 6) | (imm53 << 3); + // rv64_a, AMOADD.D + if ((opcode & 0xf800707f) == 0x302f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOADD.D", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } - return (insn_t) { - .imm = imm, - .rs2 = RC2(data), - .rvc = true, - }; -} + // rv_a, AMOADD.W + if ((opcode & 0xf800707f) == 0x202f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOADD.W", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } -static inline insn_t insn_csstype_read2(uint16_t data) -{ - uint32_t imm76 = (data >> 7) & 0x3; - uint32_t imm52 = (data >> 9) & 0xf; + // rv64_a, AMOAND.D + if ((opcode & 0xf800707f) == 0x6000302f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOAND.D", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } - int32_t imm = (imm76 << 6) | (imm52 << 2); + // rv_a, AMOAND.W + if ((opcode & 0xf800707f) == 0x6000202f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOAND.W", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } - return (insn_t) { - .imm = imm, - .rs2 = RC2(data), - .rvc = true, - }; -} + // rv64_a, AMOMAX.D + if ((opcode & 0xf800707f) == 0xa000302f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOMAX.D", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } -static inline insn_t insn_ciwtype_read(uint16_t data) -{ - uint32_t imm3 = (data >> 5) & 0x1; - uint32_t imm2 = (data >> 6) & 0x1; - uint32_t imm96 = (data >> 7) & 0xf; - uint32_t imm54 = (data >> 11) & 0x3; - - int32_t imm = (imm3 << 3) | (imm2 << 2) | (imm96 << 6) | (imm54 << 4); - - return (insn_t) { - .imm = imm, - .rd = RP2(data) + 8, - .rvc = true, - }; -} + // rv_a, AMOMAX.W + if ((opcode & 0xf800707f) == 0xa000202f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOMAX.W", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } -static inline insn_t insn_th1type_read(uint32_t data) -{ - return (insn_t) { - .rs1 = RS1(data), - .rs2 = RS2(data), - .rd = RD(data), - .imm = FUNCT2(data), - }; -} + // rv64_a, AMOMAXU.D + if ((opcode & 0xf800707f) == 0xe000302f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOMAXU.D", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } -static inline insn_t insn_th2type_read(uint32_t data) -{ - return (insn_t) { - .rs1 = RS1(data), - .rd = RD(data), - .imm = IMM116(data), - .imm2 = THIMM2(data), - }; -} + // rv_a, AMOMAXU.W + if ((opcode & 0xf800707f) == 0xe000202f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOMAXU.W", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } -#define RN(r) insn.f ? fpnames[insn.r] : gpnames[insn.r] - -#define PRINT_none() snprintf(buff, sizeof(buff), "%s", insn.name); return buff -#define PRINT_rd_rs1() snprintf(buff, sizeof(buff), "%s\t%s, %s", insn.name, RN(rd), RN(rs1)); return buff -#define PRINT_rd_rs1_rs2() snprintf(buff, sizeof(buff), "%s\t%s, %s, %s", insn.name, RN(rd), RN(rs1), RN(rs2)); return buff -#define PRINT_rd_rs1_rs2_rs3() snprintf(buff, sizeof(buff), "%s\t%s, %s, %s, %s", insn.name, RN(rd), RN(rs1), RN(rs2), RN(rs3)); return buff -#define PRINT_rd_rs1_imm() snprintf(buff, sizeof(buff), "%s\t%s, %s, %s0x%x", insn.name, RN(rd), RN(rs1), insn.imm>=0?"":"-", insn.imm>=0?insn.imm:-insn.imm); return buff -#define PRINT_rd_rs1_immx() snprintf(buff, sizeof(buff), "%s\t%s, %s, 0x%x", insn.name, RN(rd), RN(rs1), insn.imm); return buff -#define PRINT_rd_imm_rs1() snprintf(buff, sizeof(buff), "%s\t%s, %s0x%x(%s)", insn.name, RN(rd), insn.imm>=0?"":"-", insn.imm>=0?insn.imm:-insn.imm, gpnames[insn.rs1]); return buff -#define PRINT_rs2_imm_rs1() snprintf(buff, sizeof(buff), "%s\t%s, %s0x%x(%s)", insn.name, RN(rs2), insn.imm>=0?"":"-", insn.imm>=0?insn.imm:-insn.imm, gpnames[insn.rs1]); return buff -#define PRINT_rd_imm() snprintf(buff, sizeof(buff), "%s\t%s, %s0x%x", insn.name, RN(rd), insn.imm>=0?"":"-", insn.imm>=0?insn.imm:-insn.imm); return buff -#define PRINT_rd_imm_rel() snprintf(buff, sizeof(buff), "%s\t%s, pc%s0x%x # 0x%"PRIx64, insn.name, RN(rd), insn.imm>=0?"+":"-", insn.imm>=0?insn.imm:-insn.imm, insn.imm+(uint64_t)addr); return buff -#define PRINT_imm_rel() snprintf(buff, sizeof(buff), "%s\tpc%s0x%x # 0x%"PRIx64, insn.name, insn.imm>=0?"+":"-", insn.imm>=0?insn.imm:-insn.imm, insn.imm+(uint64_t)addr); return buff -#define PRINT_rd_immx() snprintf(buff, sizeof(buff), "%s\t%s, 0x%x", insn.name, RN(rd), insn.imm); return buff -#define PRINT_rs1_rs2_imm() snprintf(buff, sizeof(buff), "%s\t%s, %s, %s0x%x", insn.name, RN(rs1), RN(rs2), insn.imm>=0?"":"-", insn.imm>=0?insn.imm:-insn.imm); return buff -#define PRINT_rs1_rs2_imm_rel() snprintf(buff, sizeof(buff), "%s\t%s, %s, pc%s0x%x # 0x%"PRIx64, insn.name, RN(rs1), RN(rs2), insn.imm>=0?"+":"-", insn.imm>=0?insn.imm:-insn.imm, insn.imm+(uint64_t)addr); return buff -#define PRINT_fd_fs1() snprintf(buff, sizeof(buff), "%s\t%s, %s", insn.name, fpnames[insn.rd], fpnames[insn.rs1]); return buff -#define PRINT_xd_fs1() snprintf(buff, sizeof(buff), "%s\t%s, %s", insn.name, gpnames[insn.rd], fpnames[insn.rs1]); return buff -#define PRINT_fd_xs1() snprintf(buff, sizeof(buff), "%s\t%s, %s", insn.name, fpnames[insn.rd], gpnames[insn.rs1]); return buff -#define PRINT_rd_fs1_fs2() snprintf(buff, sizeof(buff), "%s\t%s, %s, %s", insn.name, gpnames[insn.rd], RN(rs1), RN(rs2)); return buff -#define PRINT_rd_rs1_aqrl() snprintf(buff, sizeof(buff), "%s%s%s\t%s, (%s)", insn.name, aq?".aq":"", rl?".rl":"", gpnames[insn.rd], gpnames[insn.rs1]); return buff -#define PRINT_rd_rs1_rs2_aqrl() snprintf(buff, sizeof(buff), "%s%s%s\t%s, %s, (%s)", insn.name, aq?".aq":"", rl?".rl":"", gpnames[insn.rd], gpnames[insn.rs2], gpnames[insn.rs1]); return buff -#define PRINT_rd_rs1_rs2_imm() snprintf(buff, sizeof(buff), "%s\t%s, %s, %s, %s0x%x", insn.name, RN(rd), RN(rs1), RN(rs2), insn.imm>=0?"":"-", insn.imm>=0?insn.imm:-insn.imm); return buff -#define PRINT_rd_rs1_imm1_imm2() snprintf(buff, sizeof(buff), "%s\t%s, %s, %s0x%x, %s0x%x", insn.name, RN(rd), RN(rs1), insn.imm>=0?"":"-", insn.imm>=0?insn.imm:-insn.imm, insn.imm2>=0?"":"-", insn.imm2>=0?insn.imm2:-insn.imm2); return buff -#define PRINT_rd1_rd2_rs1_imm_4() snprintf(buff, sizeof(buff), "%s\t%s, %s, (%s), %s0x%x, 4", insn.name, RN(rd), RN(rs2), RN(rs1), insn.imm>=0?"":"-", insn.imm>=0?insn.imm:-insn.imm); return buff - -// TODO: display csr name -#define PRINT_rd_csr_rs1() snprintf(buff, sizeof(buff), "%s\t%s, %d, %s", insn.name, RN(rd), insn.csr, RN(rs1)); return buff -#define PRINT_rd_csr_uimm() snprintf(buff, sizeof(buff), "%s\t%s, %d, %d", insn.name, RN(rd), insn.csr, (uint32_t)insn.imm); return buff - -const char* rv64_print(uint32_t data, uintptr_t addr) -{ - static char buff[200] = {0}; - - insn_t insn = { 0 }; - uint32_t quadrant = QUADRANT(data); - switch (quadrant) { - case 0x0: { - uint32_t copcode = COPCODE(data); - - switch (copcode) { - case 0x0: - insn = insn_ciwtype_read(data); - insn.rs1 = 2; - insn.name = "addi"; - assert(insn.imm != 0); - PRINT_rd_rs1_imm(); - case 0x1: - insn = insn_cltype_read2(data); - insn.name = "fld"; - insn.f = true; - PRINT_rd_imm_rs1(); - case 0x2: - insn = insn_cltype_read(data); - insn.name = "lw"; - PRINT_rd_imm_rs1(); - case 0x3: - insn = insn_cltype_read2(data); - insn.name = "ld"; - PRINT_rd_imm_rs1(); - case 0x5: - insn = insn_cstype_read(data); - insn.name = "fsd"; - insn.f = true; - PRINT_rs2_imm_rs1(); - case 0x6: - insn = insn_cstype_read2(data); - insn.name = "sw"; - PRINT_rd_imm_rs1(); - case 0x7: - insn = insn_cstype_read(data); - insn.name = "sd"; - PRINT_rs2_imm_rs1(); - } + // rv64_a, AMOMIN.D + if ((opcode & 0xf800707f) == 0x8000302f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOMIN.D", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; } - case 0x1: { - uint32_t copcode = COPCODE(data); - - switch (copcode) { - case 0x0: - insn = insn_citype_read(data); - insn.rs1 = insn.rd; - insn.name = "addi"; - PRINT_rd_rs1_imm(); - case 0x1: - insn = insn_citype_read(data); - assert(insn.rd != 0); - insn.rs1 = insn.rd; - insn.name = "addiw"; - PRINT_rd_rs1_imm(); - case 0x2: - insn = insn_citype_read(data); - insn.rs1 = 0; - insn.name = "addi"; - PRINT_rd_rs1_imm(); - case 0x3: { - int32_t rd = RC1(data); - if (rd == 2) { - insn = insn_citype_read3(data); - assert(insn.imm != 0); - insn.rs1 = insn.rd; - insn.name = "addi"; - PRINT_rd_rs1_imm(); - } else { - insn = insn_citype_read5(data); - assert(insn.imm != 0); - insn.name = "lui"; - PRINT_rd_immx(); - } - } - case 0x4: { - uint32_t cfunct2high = CFUNCT2HIGH(data); - - switch (cfunct2high) { - case 0x0: - case 0x1: - case 0x2: { - insn = insn_cbtype_read2(data); - insn.rs1 = insn.rd; - - if (cfunct2high == 0x0) { - insn.name = "srli"; - } else if (cfunct2high == 0x1) { - insn.name = "srai"; - } else { - insn.name = "andi"; - } - PRINT_rd_rs1_imm(); - } - case 0x3: { - uint32_t cfunct1 = CFUNCT1(data); - - switch (cfunct1) { - case 0x0: { - uint32_t cfunct2low = CFUNCT2LOW(data); - - insn = insn_catype_read(data); - insn.rs1 = insn.rd; - - switch (cfunct2low) { - case 0x0: - insn.name = "sub"; - break; - case 0x1: - insn.name = "xor"; - break; - case 0x2: - insn.name = "or"; - break; - case 0x3: - insn.name = "and"; - break; - } - break; - } - case 0x1: { - uint32_t cfunct2low = CFUNCT2LOW(data); - - insn = insn_catype_read(data); - insn.rs1 = insn.rd; - - switch (cfunct2low) { - case 0x0: - insn.name = "subw"; - break; - case 0x1: - insn.name = "addw"; - break; - default: - goto unknown; - } - break; - } - } - PRINT_rd_rs1_rs2(); - } - } - } - case 0x5: - insn = insn_cjtype_read(data); - insn.rd = 0; - insn.name = "jal"; - PRINT_rd_imm(); - case 0x6: - case 0x7: - insn = insn_cbtype_read(data); - insn.rs2 = 0; - insn.name = copcode == 0x6 ? "beq" : "bne"; - PRINT_rs1_rs2_imm(); - } + + // rv_a, AMOMIN.W + if ((opcode & 0xf800707f) == 0x8000202f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOMIN.W", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; } - case 0x2: { - uint32_t copcode = COPCODE(data); - switch (copcode) { - case 0x0: - insn = insn_citype_read(data); - insn.rs1 = insn.rd; - insn.name = "slli"; - PRINT_rd_rs1_imm(); - case 0x1: - insn = insn_citype_read2(data); - insn.rs1 = 2; - insn.f = true; - insn.name = "fld"; - PRINT_rd_imm_rs1(); - case 0x2: - insn = insn_citype_read4(data); - assert(insn.rd != 0); - insn.rs1 = 2; - insn.name = "lw"; - PRINT_rd_imm_rs1(); - case 0x3: - insn = insn_citype_read2(data); - assert(insn.rd != 0); - insn.rs1 = 2; - insn.name = "ld"; - PRINT_rd_imm_rs1(); - case 0x4: { - uint32_t cfunct1 = CFUNCT1(data); - - switch (cfunct1) { - case 0x0: { - insn = insn_crtype_read(data); - - if (insn.rs2 == 0) { - assert(insn.rs1 != 0); - insn.rd = 0; - insn.name = "jalr"; - PRINT_rd_imm_rs1(); - } else { - insn.rd = insn.rs1; - insn.rs1 = 0; - insn.name = "add"; - PRINT_rd_rs1_rs2(); - } - } - case 0x1: { - insn = insn_crtype_read(data); - if (insn.rs1 == 0 && insn.rs2 == 0) { - insn.name = "ebreak"; - PRINT_none(); - } else if (insn.rs2 == 0) { - insn.rd = 1; - insn.name = "jalr"; - PRINT_rd_imm_rs1(); - } else { - insn.rd = insn.rs1; - insn.name = "add"; - PRINT_rd_rs1_rs2(); - } - } - } - } - case 0x5: - insn = insn_csstype_read(data); - insn.rs1 = 2; - insn.f = true; - insn.name = "fsd"; - PRINT_rs2_imm_rs1(); - case 0x6: - insn = insn_csstype_read2(data); - insn.rs1 = 2; - insn.name = "sw"; - PRINT_rs2_imm_rs1(); - case 0x7: - insn = insn_csstype_read(data); - insn.rs1 = 2; - insn.name = "sd"; - PRINT_rs2_imm_rs1(); - } + + // rv64_a, AMOMINU.D + if ((opcode & 0xf800707f) == 0xc000302f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOMINU.D", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; } - case 0x3: { - uint32_t opcode = OPCODE(data); - switch (opcode) { - case 0x0: { - uint32_t funct3 = FUNCT3(data); - - insn = insn_itype_read(data); - switch (funct3) { - case 0x0: - insn.name = "lb"; - break; - case 0x1: - insn.name = "lh"; - break; - case 0x2: - insn.name = "lw"; - break; - case 0x3: - insn.name = "ld"; - break; - case 0x4: - insn.name = "lbu"; - break; - case 0x5: - insn.name = "lhu"; - break; - case 0x6: - insn.name = "lwu"; - break; - default: - goto unknown; - } - PRINT_rd_imm_rs1(); - } - case 0x1: { - uint32_t funct3 = FUNCT3(data); - - insn = insn_itype_read(data); - switch (funct3) { - case 0x2: - insn.name = "flw"; - insn.f = true; - break; - case 0x3: - insn.name = "fld"; - insn.f = true; - break; - default: - goto unknown; - } - PRINT_rd_imm_rs1(); - } - case 0x2: { /* thead custom-0 */ - uint32_t funct3 = FUNCT3(data); - - switch (funct3) { - case 0x1: { - if (RS3(data) == 0x0) { - insn = insn_th1type_read(data); - insn.name = "th.addsl"; - PRINT_rd_rs1_rs2_imm(); - } else if (IMM116(data) == 0x4) { - insn = insn_itype_read(data); - insn.name = "th.srri"; - insn.imm &= 0b111111; - PRINT_rd_rs1_imm(); - } else if (IMM116(data) == 0x22) { - insn = insn_itype_read(data); - insn.name = "th.tst"; - insn.imm &= 0b111111; - PRINT_rd_rs1_imm(); - } else if (FUNCT7(data) == 0xa) { - insn = insn_itype_read(data); - insn.name = "th.srriw"; - insn.imm &= 0b11111; - PRINT_rd_rs1_imm(); - } else if (THFUNCT12(data) == 0x840) { - insn = insn_rtype_read(data); - insn.name = "th.ff0"; - PRINT_rd_rs1(); - } else if (THFUNCT12(data) == 0x860) { - insn = insn_rtype_read(data); - insn.name = "th.ff1"; - PRINT_rd_rs1(); - } else if (THFUNCT12(data) == 0x820) { - insn = insn_rtype_read(data); - insn.name = "th.rev"; - PRINT_rd_rs1(); - } else if (THFUNCT12(data) == 0x900) { - insn = insn_rtype_read(data); - insn.name = "th.revw"; - PRINT_rd_rs1(); - } else if (THFUNCT12(data) == 0x800) { - insn = insn_rtype_read(data); - insn.name = "th.tstnbz"; - PRINT_rd_rs1(); - } - goto unknown; - } - case 0x2: { - insn = insn_th2type_read(data); - insn.name = "th.ext"; - PRINT_rd_rs1_imm1_imm2(); - } - case 0x3: { - insn = insn_th2type_read(data); - insn.name = "th.extu"; - PRINT_rd_rs1_imm1_imm2(); - } - case 0x4: { - switch (THFUNCT5(data)) { - case 0x1f: { - insn = insn_th1type_read(data); - insn.name = "th.ldd"; - PRINT_rd1_rd2_rs1_imm_4(); - } - default: - goto unknown; - } - } - case 0x5: { - switch (THFUNCT5(data)) { - case 0x1f: { - insn = insn_th1type_read(data); - insn.name = "th.sdd"; - PRINT_rd1_rd2_rs1_imm_4(); - } - default: - goto unknown; - } - } - default: - goto unknown; - } - break; - } - case 0x3: { - uint32_t funct3 = FUNCT3(data); - - switch (funct3) { - case 0x0: { - insn.name = "fence"; - // TODO: handle pred succ - PRINT_none(); - } - case 0x1: { - insn.name = "fence.i"; - PRINT_none(); - } - default: - goto unknown; - } - } - case 0x4: { - int hex = 0; - int mv_alias = 0; - int nop_alias = 0; - int not_alias = 0; - uint32_t funct3 = FUNCT3(data); - - insn = insn_itype_read(data); - switch (funct3) { - case 0x0: - insn.name = "addi"; - if (insn.imm == 0) { - if (insn.rd == 0 && insn.rs1 == 0) { - nop_alias = 1; - insn.name = "nop"; - } else { - mv_alias = 1; - insn.name = "mv"; - } - } - break; - case 0x1: { - uint32_t imm116 = IMM116(data); - switch (imm116) { - case 0x0: - insn.name = "slli"; - break; - case 0x18: { - uint32_t rs2 = RS2(data); - switch (rs2) { - case 0x0: - insn.name = "clz"; - break; - case 0x1: - insn.name = "ctz"; - break; - case 0x2: - insn.name = "cpop"; - break; - case 0x4: - insn.name = "sext.b"; - break; - case 0x5: - insn.name = "sext.h"; - break; - default: - goto unknown; - } - PRINT_rd_rs1(); - } - default: - goto unknown; - } - break; - } - case 0x2: - insn.name = "slti"; - break; - case 0x3: - insn.name = "sltiu"; - break; - case 0x4: - insn.name = "xori"; - hex = 1; - if (insn.imm == -1) { - not_alias = 1; - insn.name = "not"; - } - break; - case 0x5: { - uint32_t imm116 = IMM116(data); - - if (imm116 == 0x0) { - insn.name = "srli"; - } else if (imm116 == 0x10) { - insn.name = "srai"; - insn.imm &= 0b111111; - } else if (imm116 == 0x12) { - insn.name = "bexti"; - insn.imm &= 0b111111; - } else if (imm116 == 0x18) { - insn.name = "rori"; - insn.imm &= 0b111111; - } else if (insn.imm==0b011010111000) { - insn.name = "rev8"; - PRINT_rd_rs1(); - } - break; - } - case 0x6: - insn.name = "ori"; - hex = 1; - break; - case 0x7: - insn.name = "andi"; - hex = 1; - break; - } - if (not_alias) { - PRINT_rd_rs1(); - } else if (nop_alias) { - PRINT_none(); - } else if (mv_alias) { - PRINT_rd_rs1(); - } else if(hex) { - PRINT_rd_rs1_immx(); - } else { - PRINT_rd_rs1_imm(); - } - } - case 0x5: { - insn = insn_utype_read(data); - insn.name = "auipc"; - PRINT_rd_imm_rel(); - } - case 0x6: { - uint32_t funct3 = FUNCT3(data); - uint32_t funct7 = FUNCT7(data); - - insn = insn_itype_read(data); - - switch (funct3) { - case 0x0: - insn.name = "addiw"; - break; - case 0x1: - switch (funct7) { - case 0x0: - insn.name = "slliw"; - break; - case 0x4: - insn.name = "slli.uw"; - break; - case 0x30: { - uint32_t rs2 = RS2(data); - switch (rs2) { - case 0x0: - insn.name = "clzw"; - break; - case 0x1: - insn.name = "ctzw"; - break; - case 0x2: - insn.name = "cpopw"; - break; - default: - goto unknown; - } - PRINT_rd_rs1(); - } - default: - goto unknown; - } - break; - case 0x5: { - switch (funct7) { - case 0x0: - insn.name = "srliw"; - break; - case 0x20: - insn.name = "sraiw"; - insn.imm &= 0b11111; - break; - case 0x30: - insn.name = "roriw"; - insn.imm &= 0b11111; - break; - default: - goto unknown; - } - break; - } - default: - goto unknown; - } - PRINT_rd_rs1_imm(); - } - case 0x8: { - uint32_t funct3 = FUNCT3(data); - - insn = insn_stype_read(data); - switch (funct3) { - case 0x0: - insn.name = "sb"; - break; - case 0x1: - insn.name = "sh"; - break; - case 0x2: - insn.name = "sw"; - break; - case 0x3: - insn.name = "sd"; - break; - default: - goto unknown; - } - PRINT_rs2_imm_rs1(); - } - case 0x9: { - uint32_t funct3 = FUNCT3(data); - - insn = insn_stype_read(data); - switch (funct3) { - case 0x2: - insn.name = "fsw"; - insn.f = true; - break; - case 0x3: - insn.name = "fsd"; - insn.f = true; - break; - default: - goto unknown; - } - PRINT_rs2_imm_rs1(); - } - case 0xb: { - uint32_t funct3 = FUNCT3(data); - uint32_t rs1 = RS3(data); - bool aq = AQ(data), rl = RL(data); - insn = insn_rtype_read(data); - switch(funct3) { - case 0x2: - switch (rs1) { - case 0x2: - insn.name = "lr.w"; - PRINT_rd_rs1_aqrl(); - case 0x3: - insn.name = "sc.w"; - PRINT_rd_rs1_rs2_aqrl(); - } - case 0x3: - switch (rs1) { - case 0x2: - insn.name = "lr.d"; - PRINT_rd_rs1_aqrl(); - case 0x3: - insn.name = "sc.d"; - PRINT_rd_rs1_rs2_aqrl(); - } - default: - goto unknown; - } - } - case 0xc: { - insn = insn_rtype_read(data); - - uint32_t funct3 = FUNCT3(data); - uint32_t funct7 = FUNCT7(data); - - switch (funct7) { - case 0x0: { - switch (funct3) { - case 0x0: - insn.name = "add"; - break; - case 0x1: - insn.name = "sll"; - break; - case 0x2: - insn.name = "slt"; - break; - case 0x3: - insn.name = "sltu"; - break; - case 0x4: - insn.name = "xor"; - break; - case 0x5: - insn.name = "srl"; - break; - case 0x6: - insn.name = "or"; - break; - case 0x7: - insn.name = "and"; - break; - } - } - break; - case 0x1: { - switch (funct3) { - case 0x0: - insn.name = "mul"; - break; - case 0x1: - insn.name = "mulh"; - break; - case 0x2: - insn.name = "mulhsu"; - break; - case 0x3: - insn.name = "mulhu"; - break; - case 0x4: - insn.name = "div"; - break; - case 0x5: - insn.name = "divu"; - break; - case 0x6: - insn.name = "rem"; - break; - case 0x7: - insn.name = "remu"; - break; - } - } - break; - case 0x5: { - switch (funct3) { - case 0x4: - insn.name = "min"; - break; - case 0x5: - insn.name = "minu"; - break; - case 0x6: - insn.name = "max"; - break; - case 0x7: - insn.name = "maxu"; - break; - default: - goto unknown; - } - } - break; - case 0x10: { - switch (funct3) { - case 0x2: - insn.name = "sh1add"; - break; - case 0x4: - insn.name = "sh2add"; - break; - case 0x6: - insn.name = "sh3add"; - break; - default: - goto unknown; - } - } - break; - case 0x20: { - switch (funct3) { - case 0x0: - insn.name = "sub"; - break; - case 0x4: - insn.name = "xnor"; - break; - case 0x5: - insn.name = "sra"; - break; - case 0x6: - insn.name = "orn"; - break; - case 0x7: - insn.name = "andn"; - break; - default: - goto unknown; - } - break; - } - case 0x24: { - switch (funct3) { - case 0x5: - insn.name = "bext"; - break; - default: - goto unknown; - } - break; - } - case 0x30: { - switch (funct3) { - case 0x1: - insn.name = "rol"; - break; - case 0x5: - insn.name = "ror"; - break; - default: - goto unknown; - } - } - default: - goto unknown; - } - PRINT_rd_rs1_rs2(); - } - case 0xd: { - insn = insn_utype_read(data); - insn.name = "lui"; - PRINT_rd_immx(); - } - case 0xe: { - insn = insn_rtype_read(data); - - uint32_t funct3 = FUNCT3(data); - uint32_t funct7 = FUNCT7(data); - - switch (funct7) { - case 0x0: { - switch (funct3) { - case 0x0: - insn.name = "addw"; - break; - case 0x1: - insn.name = "sllw"; - break; - case 0x5: - insn.name = "srlw"; - break; - default: - goto unknown; - } - } - break; - case 0x1: { - switch (funct3) { - case 0x0: - insn.name = "mulw"; - break; - case 0x4: - insn.name = "divw"; - break; - case 0x5: - insn.name = "divuw"; - break; - case 0x6: - insn.name = "remw"; - break; - case 0x7: - insn.name = "remuw"; - break; - default: - goto unknown; - } - } - break; - case 0x4: { - switch (funct3) { - case 0x0: - insn.name = "add.uw"; - break; - case 0x4: - assert(insn.rs2 == 0); - insn.name = "zext.h"; - PRINT_rd_rs1(); - default: - goto unknown; - } - } - break; - case 0x10: { - switch (funct3) { - case 0x2: - insn.name = "sh1add.uw"; - break; - case 0x4: - insn.name = "sh2add.uw"; - break; - case 0x6: - insn.name = "sh3add.uw"; - break; - default: - goto unknown; - } - } - break; - case 0x20: { - switch (funct3) { - case 0x0: - insn.name = "subw"; - break; - case 0x5: - insn.name = "sraw"; - break; - default: - goto unknown; - } - } - break; - case 0x30: { - switch (funct3) { - case 0x1: - insn.name = "rolw"; - break; - case 0x5: - insn.name = "rorw"; - break; - default: - goto unknown; - } - } - default: - goto unknown; - } - PRINT_rd_rs1_rs2(); - } - case 0x10: { - uint32_t funct2 = FUNCT2(data); - - insn = insn_fprtype_read(data); - switch (funct2) { - case 0x0: - insn.name = "fmadd.s"; - insn.f = true; - break; - case 0x1: - insn.name = "fmadd.d"; - insn.f = true; - break; - default: - goto unknown; - } - PRINT_rd_rs1_rs2(); - } - case 0x11: { - uint32_t funct2 = FUNCT2(data); - - insn = insn_fprtype_read(data); - switch (funct2) { - case 0x0: - insn.name = "fmsub.s"; - insn.f = true; - break; - case 0x1: - insn.name = "fmsub.d"; - insn.f = true; - break; - default: - goto unknown; - } - PRINT_rd_rs1_rs2(); - } - case 0x12: { - uint32_t funct2 = FUNCT2(data); - - insn = insn_fprtype_read(data); - switch (funct2) { - case 0x0: - insn.name = "fnmsub.s"; - insn.f = true; - break; - case 0x1: - insn.name = "fnmsub.d"; - insn.f = true; - break; - default: - goto unknown; - } - PRINT_rd_rs1_rs2_rs3(); - } - case 0x13: { - uint32_t funct2 = FUNCT2(data); - - insn = insn_fprtype_read(data); - switch (funct2) { - case 0x0: - insn.name = "fnmadd.s"; - insn.f = true; - break; - case 0x1: - insn.name = "fnmadd.d"; - insn.f = true; - break; - default: - goto unknown; - } - PRINT_rd_rs1_rs2_rs3(); - } - case 0x14: { - uint32_t funct7 = FUNCT7(data); - - insn = insn_rtype_read(data); - insn.f = true; - switch (funct7) { - case 0x0: - insn.name = "fadd.s"; - PRINT_rd_rs1_rs2(); - case 0x1: - insn.name = "fadd.d"; - PRINT_rd_rs1_rs2(); - case 0x4: - insn.name = "fsub.s"; - PRINT_rd_rs1_rs2(); - case 0x5: - insn.name = "fsub.d"; - PRINT_rd_rs1_rs2(); - case 0x8: - insn.name = "fmul.s"; - PRINT_rd_rs1_rs2(); - case 0x9: - insn.name = "fmul.d"; - PRINT_rd_rs1_rs2(); - case 0xc: - insn.name = "fdiv.s"; - PRINT_rd_rs1_rs2(); - case 0xd: - insn.name = "fdiv.d"; - PRINT_rd_rs1_rs2(); - case 0x10: { - uint32_t funct3 = FUNCT3(data); - - switch (funct3) { - case 0x0: - insn.name = "fsgnj.s"; - break; - case 0x1: - insn.name = "fsgnjn.s"; - break; - case 0x2: - insn.name = "fsgnjx.s"; - break; - default: - goto unknown; - } - PRINT_rd_rs1_rs2(); - } - case 0x11: { - uint32_t funct3 = FUNCT3(data); - - switch (funct3) { - case 0x0: - insn.name = "fsgnj.d"; - break; - case 0x1: - insn.name = "fsgnjn.d"; - break; - case 0x2: - insn.name = "fsgnjx.d"; - break; - default: - goto unknown; - } - PRINT_rd_rs1_rs2(); - } - case 0x14: { - uint32_t funct3 = FUNCT3(data); - - switch (funct3) { - case 0x0: - insn.name = "fmin.s"; - break; - case 0x1: - insn.name = "fmax.s"; - break; - default: - goto unknown; - } - PRINT_rd_rs1_rs2(); - } - case 0x15: { - uint32_t funct3 = FUNCT3(data); - - switch (funct3) { - case 0x0: - insn.name = "fmin.d"; - break; - case 0x1: - insn.name = "fmax.d"; - break; - default: - goto unknown; - } - PRINT_rd_rs1_rs2(); - } - case 0x20: - assert(RS2(data) == 1); - insn.name = "fcvt.s.d"; - PRINT_fd_fs1(); - case 0x21: - assert(RS2(data) == 0); - insn.name = "fcvt.d.s"; - PRINT_fd_fs1(); - case 0x2c: - assert(insn.rs2 == 0); - insn.name = "fsqrt.s"; - PRINT_fd_fs1(); - case 0x2d: - assert(insn.rs2 == 0); - insn.name = "fsqrt.d"; - PRINT_fd_fs1(); - case 0x50: { - uint32_t funct3 = FUNCT3(data); - - switch (funct3) { - case 0x0: - insn.name = "fle.s"; - break; - case 0x1: - insn.name = "flt.s"; - break; - case 0x2: - insn.name = "feq.s"; - break; - default: - goto unknown; - } - PRINT_rd_fs1_fs2(); - } - case 0x51: { - uint32_t funct3 = FUNCT3(data); - - switch (funct3) { - case 0x0: - insn.name = "fle.d"; - break; - case 0x1: - insn.name = "flt.d"; - break; - case 0x2: - insn.name = "feq.d"; - break; - default: - goto unknown; - } - PRINT_rd_fs1_fs2(); - } - case 0x60: { - uint32_t rs2 = RS2(data); - - switch (rs2) { - case 0x0: - insn.name = "fcvt.w.s"; - break; - case 0x1: - insn.name = "fcvt.wu.s"; - break; - case 0x2: - insn.name = "fcvt.l.s"; - break; - case 0x3: - insn.name = "fcvt.lu.s"; - break; - default: - goto unknown; - } - PRINT_xd_fs1(); - } - case 0x61: { - uint32_t rs2 = RS2(data); - - switch (rs2) { - case 0x0: - insn.name = "fcvt.w.d"; - break; - case 0x1: - insn.name = "fcvt.wu.d"; - break; - case 0x2: - insn.name = "fcvt.l.d"; - break; - case 0x3: - insn.name = "fcvt.lu.d"; - break; - default: - goto unknown; - } - PRINT_xd_fs1(); - } - case 0x68: { - uint32_t rs2 = RS2(data); - - switch (rs2) { - case 0x0: - insn.name = "fcvt.s.w"; - break; - case 0x1: - insn.name = "fcvt.s.wu"; - break; - case 0x2: - insn.name = "fcvt.s.l"; - break; - case 0x3: - insn.name = "fcvt.s.lu"; - break; - default: - goto unknown; - } - PRINT_fd_xs1(); - } - case 0x69: { - uint32_t rs2 = RS2(data); - - switch (rs2) { - case 0x0: - insn.name = "fcvt.d.w"; - break; - case 0x1: - insn.name = "fcvt.d.wu"; - break; - case 0x2: - insn.name = "fcvt.d.l"; - break; - case 0x3: - insn.name = "fcvt.d.lu"; - break; - default: - goto unknown; - } - PRINT_fd_xs1(); - } - case 0x70: { - assert(RS2(data) == 0); - uint32_t funct3 = FUNCT3(data); - - switch (funct3) { - case 0x0: - insn.name = "fmv.x.w"; - break; - case 0x1: - insn.name = "fclass.s"; - break; - default: - goto unknown; - } - PRINT_xd_fs1(); - } - case 0x71: { - assert(RS2(data) == 0); - uint32_t funct3 = FUNCT3(data); - - switch (funct3) { - case 0x0: - insn.name = "fmv.x.d"; - break; - case 0x1: - insn.name = "fclass.d"; - break; - default: - goto unknown; - } - PRINT_xd_fs1(); - } - case 0x78: - assert(RS2(data) == 0 && FUNCT3(data) == 0); - insn.name = "fmv.w.x"; - PRINT_fd_xs1(); - case 0x79: - assert(RS2(data) == 0 && FUNCT3(data) == 0); - insn.name = "fmv.d.x"; - PRINT_fd_xs1(); - } - default: - goto unknown; - } - case 0x18: { - insn = insn_btype_read(data); - - uint32_t funct3 = FUNCT3(data); - switch (funct3) { - case 0x0: - insn.name = "beq"; - break; - case 0x1: - insn.name = "bne"; - break; - case 0x4: - insn.name = "blt"; - break; - case 0x5: - insn.name = "bge"; - break; - case 0x6: - insn.name = "bltu"; - break; - case 0x7: - insn.name = "bgeu"; - break; - default: - goto unknown; - } - PRINT_rs1_rs2_imm_rel(); - } - case 0x19: { - insn = insn_itype_read(data); - insn.name = "jalr"; - PRINT_rd_imm_rs1(); - } - case 0x1b: { - insn = insn_jtype_read(data); - if (insn.rd != 0) { - insn.name = "jal"; - PRINT_rd_imm_rel(); - } else { - insn.name = "j"; - PRINT_imm_rel(); - } - } - case 0x1c: { - if (data == 0x73) { - insn.name = "ecall"; - PRINT_none(); - } + // rv_a, AMOMINU.W + if ((opcode & 0xf800707f) == 0xc000202f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOMINU.W", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } - uint32_t funct3 = FUNCT3(data); - insn = insn_csrtype_read(data); - switch(funct3) { - case 0x1: - insn.name = "csrrw"; - PRINT_rd_csr_rs1(); - case 0x2: - insn.name = "csrrs"; - PRINT_rd_csr_rs1(); - case 0x3: - insn.name = "csrrc"; - PRINT_rd_csr_rs1(); - case 0x5: - insn.name = "csrrwi"; - PRINT_rd_csr_uimm(); - case 0x6: - insn.name = "csrrsi"; - PRINT_rd_csr_uimm(); - case 0x7: - insn.name = "csrrci"; - PRINT_rd_csr_uimm(); - } - } - } + // rv64_a, AMOOR.D + if ((opcode & 0xf800707f) == 0x4000302f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOOR.D", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } + + // rv_a, AMOOR.W + if ((opcode & 0xf800707f) == 0x4000202f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOOR.W", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } + + // rv64_a, AMOSWAP.D + if ((opcode & 0xf800707f) == 0x800302f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOSWAP.D", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } + + // rv_a, AMOSWAP.W + if ((opcode & 0xf800707f) == 0x800202f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOSWAP.W", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } + + // rv64_a, AMOXOR.D + if ((opcode & 0xf800707f) == 0x2000302f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOXOR.D", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } + + // rv_a, AMOXOR.W + if ((opcode & 0xf800707f) == 0x2000202f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "AMOXOR.W", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } + + // rv_i, AND + if ((opcode & 0xfe00707f) == 0x7033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "AND", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, ANDI + if ((opcode & 0x707f) == 0x7013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "ANDI", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv_zbb, ANDN + if ((opcode & 0xfe00707f) == 0x40007033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "ANDN", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, AUIPC + if ((opcode & 0x7f) == 0x17) { + a.rd = FX(opcode, 11, 7); + a.imm = FX(opcode, 31, 12); + snprintf(buff, sizeof(buff), "%-15s %s, 0x%x(%d)", "AUIPC", gpr[a.rd], SIGN_EXTEND(a.imm, 20), SIGN_EXTEND(a.imm, 20)); + return buff; + } + + // rv_zbs, BCLR + if ((opcode & 0xfe00707f) == 0x48001033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "BCLR", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_zbs, BCLRI + if ((opcode & 0xfc00707f) == 0x48001013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "BCLRI", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv_i, BEQ + if ((opcode & 0x707f) == 0x63) { + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm = BX(opcode, 31) << 12; + a.imm |= BX(opcode, 7) << 11; + a.imm |= FX(opcode, 30, 25) << 5; + a.imm |= FX(opcode, 11, 8) << 1; + a.imm = SIGN_EXTEND(a.imm, 13); + + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "BEQ", gpr[a.rs1], gpr[a.rs2], a.imm, a.imm); + return buff; + } + + // rv_zbs, BEXT + if ((opcode & 0xfe00707f) == 0x48005033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "BEXT", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_zbs, BEXTI + if ((opcode & 0xfc00707f) == 0x48005013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "BEXTI", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv_i, BGE + if ((opcode & 0x707f) == 0x5063) { + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm = BX(opcode, 31) << 12; + a.imm |= BX(opcode, 7) << 11; + a.imm |= FX(opcode, 30, 25) << 5; + a.imm |= FX(opcode, 11, 8) << 1; + a.imm = SIGN_EXTEND(a.imm, 13); + + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "BGE", gpr[a.rs1], gpr[a.rs2], a.imm, a.imm); + return buff; + } + + // rv_i, BGEU + if ((opcode & 0x707f) == 0x7063) { + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm = BX(opcode, 31) << 12; + a.imm |= BX(opcode, 7) << 11; + a.imm |= FX(opcode, 30, 25) << 5; + a.imm |= FX(opcode, 11, 8) << 1; + a.imm = SIGN_EXTEND(a.imm, 13); + + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "BGEU", gpr[a.rs1], gpr[a.rs2], a.imm, a.imm); + return buff; + } + + // rv_zbs, BINV + if ((opcode & 0xfe00707f) == 0x68001033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "BINV", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_zbs, BINVI + if ((opcode & 0xfc00707f) == 0x68001013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "BINVI", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv_i, BLT + if ((opcode & 0x707f) == 0x4063) { + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm = BX(opcode, 31) << 12; + a.imm |= BX(opcode, 7) << 11; + a.imm |= FX(opcode, 30, 25) << 5; + a.imm |= FX(opcode, 11, 8) << 1; + a.imm = SIGN_EXTEND(a.imm, 13); + + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "BLT", gpr[a.rs1], gpr[a.rs2], a.imm, a.imm); + return buff; + } + + // rv_i, BLTU + if ((opcode & 0x707f) == 0x6063) { + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm = BX(opcode, 31) << 12; + a.imm |= BX(opcode, 7) << 11; + a.imm |= FX(opcode, 30, 25) << 5; + a.imm |= FX(opcode, 11, 8) << 1; + a.imm = SIGN_EXTEND(a.imm, 13); + + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "BLTU", gpr[a.rs1], gpr[a.rs2], a.imm, a.imm); + return buff; } + + // rv_i, BNE + if ((opcode & 0x707f) == 0x1063) { + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.imm = BX(opcode, 31) << 12; + a.imm |= BX(opcode, 7) << 11; + a.imm |= FX(opcode, 30, 25) << 5; + a.imm |= FX(opcode, 11, 8) << 1; + a.imm = SIGN_EXTEND(a.imm, 13); + + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "BNE", gpr[a.rs1], gpr[a.rs2], a.imm, a.imm); + return buff; + } + + // rv_zbs, BSET + if ((opcode & 0xfe00707f) == 0x28001033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "BSET", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_zbs, BSETI + if ((opcode & 0xfc00707f) == 0x28001013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "BSETI", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv_zbc, CLMUL + if ((opcode & 0xfe00707f) == 0xa001033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "CLMUL", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_zbc, CLMULH + if ((opcode & 0xfe00707f) == 0xa003033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "CLMULH", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_zbc, CLMULR + if ((opcode & 0xfe00707f) == 0xa002033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "CLMULR", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_zbb, CLZ + if ((opcode & 0xfff0707f) == 0x60001013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "CLZ", gpr[a.rd], gpr[a.rs1]); + return buff; + } + + // rv64_zbb, CLZW + if ((opcode & 0xfff0707f) == 0x6000101b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "CLZW", gpr[a.rd], gpr[a.rs1]); + return buff; + } + + // rv_zbb, CPOP + if ((opcode & 0xfff0707f) == 0x60201013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "CPOP", gpr[a.rd], gpr[a.rs1]); + return buff; + } + + // rv64_zbb, CPOPW + if ((opcode & 0xfff0707f) == 0x6020101b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "CPOPW", gpr[a.rd], gpr[a.rs1]); + return buff; + } + + // rv_zicsr, CSRRC + if ((opcode & 0x707f) == 0x3073) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.csr = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "CSRRC", gpr[a.rd], gpr[a.rs1], a.csr, a.csr); + return buff; + } + + // rv_zicsr, CSRRCI + if ((opcode & 0x707f) == 0x7073) { + a.rd = FX(opcode, 11, 7); + a.csr = FX(opcode, 31, 20); + a.imm = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, 0x%x(%d), 0x%x(%d)", "CSRRCI", gpr[a.rd], a.csr, a.csr, a.imm, a.imm); + return buff; + } + + // rv_zicsr, CSRRS + if ((opcode & 0x707f) == 0x2073) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.csr = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "CSRRS", gpr[a.rd], gpr[a.rs1], a.csr, a.csr); + return buff; + } + + // rv_zicsr, CSRRSI + if ((opcode & 0x707f) == 0x6073) { + a.rd = FX(opcode, 11, 7); + a.csr = FX(opcode, 31, 20); + a.imm = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, 0x%x(%d), 0x%x(%d)", "CSRRSI", gpr[a.rd], a.csr, a.csr, a.imm, a.imm); + return buff; + } + + // rv_zicsr, CSRRW + if ((opcode & 0x707f) == 0x1073) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.csr = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "CSRRW", gpr[a.rd], gpr[a.rs1], a.csr, a.csr); + return buff; + } + + // rv_zicsr, CSRRWI + if ((opcode & 0x707f) == 0x5073) { + a.rd = FX(opcode, 11, 7); + a.csr = FX(opcode, 31, 20); + a.imm = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, 0x%x(%d), 0x%x(%d)", "CSRRWI", gpr[a.rd], a.csr, a.csr, a.imm, a.imm); + return buff; + } + + // rv_zbb, CTZ + if ((opcode & 0xfff0707f) == 0x60101013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "CTZ", gpr[a.rd], gpr[a.rs1]); + return buff; + } + + // rv64_zbb, CTZW + if ((opcode & 0xfff0707f) == 0x6010101b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "CTZW", gpr[a.rd], gpr[a.rs1]); + return buff; + } + + // rv_m, DIV + if ((opcode & 0xfe00707f) == 0x2004033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "DIV", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_m, DIVU + if ((opcode & 0xfe00707f) == 0x2005033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "DIVU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_m, DIVUW + if ((opcode & 0xfe00707f) == 0x200503b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "DIVUW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_m, DIVW + if ((opcode & 0xfe00707f) == 0x200403b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "DIVW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, EBREAK + if ((opcode & 0xffffffff) == 0x100073) { + + snprintf(buff, sizeof(buff), "%-15s ", "EBREAK"); + return buff; + } + + // rv_i, ECALL + if ((opcode & 0xffffffff) == 0x73) { + + snprintf(buff, sizeof(buff), "%-15s ", "ECALL"); + return buff; + } + + // rv_d, FADD.D + if ((opcode & 0xfe00007f) == 0x2000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "FADD.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], rm[a.rm]); + return buff; + } + + // rv_f, FADD.S + if ((opcode & 0xfe00007f) == 0x53) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "FADD.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], rm[a.rm]); + return buff; + } + + // rv_d, FCLASS.D + if ((opcode & 0xfff0707f) == 0xe2001053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FCLASS.D", gpr[a.rd], fpr[a.rs1]); + return buff; + } + + // rv_f, FCLASS.S + if ((opcode & 0xfff0707f) == 0xe0001053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FCLASS.S", gpr[a.rd], fpr[a.rs1]); + return buff; + } + + // rv64_d, FCVT.D.L + if ((opcode & 0xfff0007f) == 0xd2200053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.D.L", fpr[a.rd], gpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv64_d, FCVT.D.LU + if ((opcode & 0xfff0007f) == 0xd2300053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.D.LU", fpr[a.rd], gpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_d, FCVT.D.S + if ((opcode & 0xfff0007f) == 0x42000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.D.S", fpr[a.rd], fpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_d, FCVT.D.W + if ((opcode & 0xfff0007f) == 0xd2000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.D.W", fpr[a.rd], gpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_d, FCVT.D.WU + if ((opcode & 0xfff0007f) == 0xd2100053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.D.WU", fpr[a.rd], gpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv64_d, FCVT.L.D + if ((opcode & 0xfff0007f) == 0xc2200053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.L.D", gpr[a.rd], fpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv64_f, FCVT.L.S + if ((opcode & 0xfff0007f) == 0xc0200053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.L.S", gpr[a.rd], fpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv64_d, FCVT.LU.D + if ((opcode & 0xfff0007f) == 0xc2300053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.LU.D", gpr[a.rd], fpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv64_f, FCVT.LU.S + if ((opcode & 0xfff0007f) == 0xc0300053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.LU.S", gpr[a.rd], fpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_d, FCVT.S.D + if ((opcode & 0xfff0007f) == 0x40100053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.S.D", fpr[a.rd], fpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv64_f, FCVT.S.L + if ((opcode & 0xfff0007f) == 0xd0200053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.S.L", fpr[a.rd], gpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv64_f, FCVT.S.LU + if ((opcode & 0xfff0007f) == 0xd0300053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.S.LU", fpr[a.rd], gpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_f, FCVT.S.W + if ((opcode & 0xfff0007f) == 0xd0000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.S.W", fpr[a.rd], gpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_f, FCVT.S.WU + if ((opcode & 0xfff0007f) == 0xd0100053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.S.WU", fpr[a.rd], gpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_d, FCVT.W.D + if ((opcode & 0xfff0007f) == 0xc2000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.W.D", gpr[a.rd], fpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_f, FCVT.W.S + if ((opcode & 0xfff0007f) == 0xc0000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.W.S", gpr[a.rd], fpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_d, FCVT.WU.D + if ((opcode & 0xfff0007f) == 0xc2100053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.WU.D", gpr[a.rd], fpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_f, FCVT.WU.S + if ((opcode & 0xfff0007f) == 0xc0100053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FCVT.WU.S", gpr[a.rd], fpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_d, FDIV.D + if ((opcode & 0xfe00007f) == 0x1a000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "FDIV.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], rm[a.rm]); + return buff; + } + + // rv_f, FDIV.S + if ((opcode & 0xfe00007f) == 0x18000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "FDIV.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], rm[a.rm]); + return buff; + } + + // rv_i, FENCE + if ((opcode & 0x707f) == 0xf) { + snprintf(buff, sizeof(buff), "%-15s", "FENCE"); + return buff; + } + + // rv_d, FEQ.D + if ((opcode & 0xfe00707f) == 0xa2002053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FEQ.D", gpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_f, FEQ.S + if ((opcode & 0xfe00707f) == 0xa0002053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FEQ.S", gpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_d, FLD + if ((opcode & 0x707f) == 0x3007) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "FLD", fpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv_d, FLE.D + if ((opcode & 0xfe00707f) == 0xa2000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FLE.D", gpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_f, FLE.S + if ((opcode & 0xfe00707f) == 0xa0000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FLE.S", gpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_d, FLT.D + if ((opcode & 0xfe00707f) == 0xa2001053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FLT.D", gpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_f, FLT.S + if ((opcode & 0xfe00707f) == 0xa0001053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FLT.S", gpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_f, FLW + if ((opcode & 0x707f) == 0x2007) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "FLW", fpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv_d, FMADD.D + if ((opcode & 0x600007f) == 0x2000043) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rs3 = FX(opcode, 31, 27); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "FMADD.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], fpr[a.rs3], rm[a.rm]); + return buff; + } + + // rv_f, FMADD.S + if ((opcode & 0x600007f) == 0x43) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rs3 = FX(opcode, 31, 27); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "FMADD.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], fpr[a.rs3], rm[a.rm]); + return buff; + } + + // rv_d, FMAX.D + if ((opcode & 0xfe00707f) == 0x2a001053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FMAX.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_f, FMAX.S + if ((opcode & 0xfe00707f) == 0x28001053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FMAX.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_d, FMIN.D + if ((opcode & 0xfe00707f) == 0x2a000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FMIN.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_f, FMIN.S + if ((opcode & 0xfe00707f) == 0x28000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FMIN.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_d, FMSUB.D + if ((opcode & 0x600007f) == 0x2000047) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rs3 = FX(opcode, 31, 27); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "FMSUB.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], fpr[a.rs3], rm[a.rm]); + return buff; + } + + // rv_f, FMSUB.S + if ((opcode & 0x600007f) == 0x47) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rs3 = FX(opcode, 31, 27); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "FMSUB.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], fpr[a.rs3], rm[a.rm]); + return buff; + } + + // rv_d, FMUL.D + if ((opcode & 0xfe00007f) == 0x12000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "FMUL.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], rm[a.rm]); + return buff; + } + + // rv_f, FMUL.S + if ((opcode & 0xfe00007f) == 0x10000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "FMUL.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], rm[a.rm]); + return buff; + } + + // rv64_d, FMV.D.X + if ((opcode & 0xfff0707f) == 0xf2000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FMV.D.X", fpr[a.rd], gpr[a.rs1]); + return buff; + } + + // rv_f, FMV.W.X + if ((opcode & 0xfff0707f) == 0xf0000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FMV.W.X", fpr[a.rd], gpr[a.rs1]); + return buff; + } + + // rv64_d, FMV.X.D + if ((opcode & 0xfff0707f) == 0xe2000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FMV.X.D", gpr[a.rd], fpr[a.rs1]); + return buff; + } + + // rv_f, FMV.X.W + if ((opcode & 0xfff0707f) == 0xe0000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FMV.X.W", gpr[a.rd], fpr[a.rs1]); + return buff; + } + + // rv_d, FNMADD.D + if ((opcode & 0x600007f) == 0x200004f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rs3 = FX(opcode, 31, 27); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "FNMADD.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], fpr[a.rs3], rm[a.rm]); + return buff; + } + + // rv_f, FNMADD.S + if ((opcode & 0x600007f) == 0x4f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rs3 = FX(opcode, 31, 27); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "FNMADD.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], fpr[a.rs3], rm[a.rm]); + return buff; + } + + // rv_d, FNMSUB.D + if ((opcode & 0x600007f) == 0x200004b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rs3 = FX(opcode, 31, 27); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "FNMSUB.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], fpr[a.rs3], rm[a.rm]); + return buff; + } + + // rv_f, FNMSUB.S + if ((opcode & 0x600007f) == 0x4b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rs3 = FX(opcode, 31, 27); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "FNMSUB.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], fpr[a.rs3], rm[a.rm]); + return buff; + } + + // rv_d, FSD + if ((opcode & 0x707f) == 0x3027) { + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.imm = (FX(opcode, 31, 25) << 5) | (FX(opcode, 11, 7)); + a.imm = SIGN_EXTEND(a.imm, 12); + + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "FSD", fpr[a.rs2], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv_d, FSGNJ.D + if ((opcode & 0xfe00707f) == 0x22000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FSGNJ.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_f, FSGNJ.S + if ((opcode & 0xfe00707f) == 0x20000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FSGNJ.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_d, FSGNJN.D + if ((opcode & 0xfe00707f) == 0x22001053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FSGNJN.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_f, FSGNJN.S + if ((opcode & 0xfe00707f) == 0x20001053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FSGNJN.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_d, FSGNJX.D + if ((opcode & 0xfe00707f) == 0x22002053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FSGNJX.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_f, FSGNJX.S + if ((opcode & 0xfe00707f) == 0x20002053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FSGNJX.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2]); + return buff; + } + + // rv_d, FSQRT.D + if ((opcode & 0xfff0007f) == 0x5a000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FSQRT.D", fpr[a.rd], fpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_f, FSQRT.S + if ((opcode & 0xfff0007f) == 0x58000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "FSQRT.S", fpr[a.rd], fpr[a.rs1], rm[a.rm]); + return buff; + } + + // rv_d, FSUB.D + if ((opcode & 0xfe00007f) == 0xa000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "FSUB.D", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], rm[a.rm]); + return buff; + } + + // rv_f, FSUB.S + if ((opcode & 0xfe00007f) == 0x8000053) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.rm = FX(opcode, 14, 12); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "FSUB.S", fpr[a.rd], fpr[a.rs1], fpr[a.rs2], rm[a.rm]); + return buff; + } + + // rv_f, FSW + if ((opcode & 0x707f) == 0x2027) { + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.imm = (FX(opcode, 31, 25) << 5) | (FX(opcode, 11, 7)); + a.imm = SIGN_EXTEND(a.imm, 12); + + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "FSW", fpr[a.rs2], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv_i, JAL + if ((opcode & 0x7f) == 0x6f) { + a.rd = FX(opcode, 11, 7); + a.imm = BX(opcode, 31) << 20; + a.imm |= FX(opcode, 19, 12) << 12; + a.imm |= BX(opcode, 20) << 11; + a.imm |= FX(opcode, 30, 21) << 1; + a.imm = SIGN_EXTEND(a.imm, 21); + + snprintf(buff, sizeof(buff), "%-15s %s, 0x%x(%d)", "JAL", gpr[a.rd], SIGN_EXTEND(a.imm, 20), SIGN_EXTEND(a.imm, 20)); + return buff; + } + + // rv_i, JALR + if ((opcode & 0x707f) == 0x67) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "JALR", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv_i, LB + if ((opcode & 0x707f) == 0x3) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "LB", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv_i, LBU + if ((opcode & 0x707f) == 0x4003) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "LBU", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv64_i, LD + if ((opcode & 0x707f) == 0x3003) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "LD", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv_i, LH + if ((opcode & 0x707f) == 0x1003) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "LH", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv_i, LHU + if ((opcode & 0x707f) == 0x5003) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "LHU", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv64_a, LR.D + if ((opcode & 0xf9f0707f) == 0x1000302f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "LR.D", gpr[a.rd], gpr[a.rs1], aq[a.aq], rl[a.rl]); + return buff; + } + + // rv_a, LR.W + if ((opcode & 0xf9f0707f) == 0x1000202f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "LR.W", gpr[a.rd], gpr[a.rs1], aq[a.aq], rl[a.rl]); + return buff; + } + + // rv_i, LUI + if ((opcode & 0x7f) == 0x37) { + a.rd = FX(opcode, 11, 7); + a.imm = FX(opcode, 31, 12); + snprintf(buff, sizeof(buff), "%-15s %s, 0x%x(%d)", "LUI", gpr[a.rd], SIGN_EXTEND(a.imm, 20), SIGN_EXTEND(a.imm, 20)); + return buff; + } + + // rv_i, LW + if ((opcode & 0x707f) == 0x2003) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "LW", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv64_i, LWU + if ((opcode & 0x707f) == 0x6003) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "LWU", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv_zbb, MAX + if ((opcode & 0xfe00707f) == 0xa006033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "MAX", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_zbb, MAXU + if ((opcode & 0xfe00707f) == 0xa007033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "MAXU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_zbb, MIN + if ((opcode & 0xfe00707f) == 0xa004033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "MIN", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_zbb, MINU + if ((opcode & 0xfe00707f) == 0xa005033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "MINU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_m, MUL + if ((opcode & 0xfe00707f) == 0x2000033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "MUL", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_m, MULH + if ((opcode & 0xfe00707f) == 0x2001033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "MULH", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_m, MULHSU + if ((opcode & 0xfe00707f) == 0x2002033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "MULHSU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_m, MULHU + if ((opcode & 0xfe00707f) == 0x2003033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "MULHU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_m, MULW + if ((opcode & 0xfe00707f) == 0x200003b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "MULW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, OR + if ((opcode & 0xfe00707f) == 0x6033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "OR", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_zbb, ORC.B + if ((opcode & 0xfff0707f) == 0x28705013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "ORC.B", gpr[a.rd], gpr[a.rs1]); + return buff; + } + + // rv_i, ORI + if ((opcode & 0x707f) == 0x6013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "ORI", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv_zbb, ORN + if ((opcode & 0xfe00707f) == 0x40006033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "ORN", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_m, REM + if ((opcode & 0xfe00707f) == 0x2006033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "REM", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_m, REMU + if ((opcode & 0xfe00707f) == 0x2007033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "REMU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_m, REMUW + if ((opcode & 0xfe00707f) == 0x200703b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "REMUW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_m, REMW + if ((opcode & 0xfe00707f) == 0x200603b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "REMW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_zbb, REV8 + if ((opcode & 0xfff0707f) == 0x6b805013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "REV8", gpr[a.rd], gpr[a.rs1]); + return buff; + } + + // rv_zbb, ROL + if ((opcode & 0xfe00707f) == 0x60001033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "ROL", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_zbb, ROLW + if ((opcode & 0xfe00707f) == 0x6000103b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "ROLW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_zbb, ROR + if ((opcode & 0xfe00707f) == 0x60005033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "ROR", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_zbb, RORI + if ((opcode & 0xfc00707f) == 0x60005013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "RORI", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv64_zbb, RORIW + if ((opcode & 0xfe00707f) == 0x6000501b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "RORIW", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv64_zbb, RORW + if ((opcode & 0xfe00707f) == 0x6000503b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "RORW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, SB + if ((opcode & 0x707f) == 0x23) { + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.imm = (FX(opcode, 31, 25) << 5) | (FX(opcode, 11, 7)); + a.imm = SIGN_EXTEND(a.imm, 12); + + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SB", gpr[a.rs2], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv64_a, SC.D + if ((opcode & 0xf800707f) == 0x1800302f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "SC.D", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } + + // rv_a, SC.W + if ((opcode & 0xf800707f) == 0x1800202f) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + a.aq = FX(opcode, 26, 26); + a.rl = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "SC.W", gpr[a.rd], gpr[a.rs1], gpr[a.rs2], aq[a.aq], rl[a.rl]); + return buff; + } + + // rv64_i, SD + if ((opcode & 0x707f) == 0x3023) { + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.imm = (FX(opcode, 31, 25) << 5) | (FX(opcode, 11, 7)); + a.imm = SIGN_EXTEND(a.imm, 12); + + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SD", gpr[a.rs2], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv_zbb, SEXT.B + if ((opcode & 0xfff0707f) == 0x60401013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "SEXT.B", gpr[a.rd], gpr[a.rs1]); + return buff; + } + + // rv_zbb, SEXT.H + if ((opcode & 0xfff0707f) == 0x60501013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "SEXT.H", gpr[a.rd], gpr[a.rs1]); + return buff; + } + + // rv_i, SH + if ((opcode & 0x707f) == 0x1023) { + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.imm = (FX(opcode, 31, 25) << 5) | (FX(opcode, 11, 7)); + a.imm = SIGN_EXTEND(a.imm, 12); + + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SH", gpr[a.rs2], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv_zba, SH1ADD + if ((opcode & 0xfe00707f) == 0x20002033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SH1ADD", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_zba, SH1ADD.UW + if ((opcode & 0xfe00707f) == 0x2000203b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SH1ADD.UW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_zba, SH2ADD + if ((opcode & 0xfe00707f) == 0x20004033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SH2ADD", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_zba, SH2ADD.UW + if ((opcode & 0xfe00707f) == 0x2000403b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SH2ADD.UW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_zba, SH3ADD + if ((opcode & 0xfe00707f) == 0x20006033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SH3ADD", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_zba, SH3ADD.UW + if ((opcode & 0xfe00707f) == 0x2000603b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SH3ADD.UW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, SLL + if ((opcode & 0xfe00707f) == 0x1033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SLL", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_i, SLLI + if ((opcode & 0xfc00707f) == 0x1013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SLLI", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv64_zba, SLLI.UW + if ((opcode & 0xfc00707f) == 0x800101b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SLLI.UW", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv64_i, SLLIW + if ((opcode & 0xfe00707f) == 0x101b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SLLIW", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv64_i, SLLW + if ((opcode & 0xfe00707f) == 0x103b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SLLW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, SLT + if ((opcode & 0xfe00707f) == 0x2033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SLT", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, SLTI + if ((opcode & 0x707f) == 0x2013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SLTI", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv_i, SLTIU + if ((opcode & 0x707f) == 0x3013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SLTIU", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv_i, SLTU + if ((opcode & 0xfe00707f) == 0x3033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SLTU", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, SRA + if ((opcode & 0xfe00707f) == 0x40005033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SRA", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_i, SRAI + if ((opcode & 0xfc00707f) == 0x40005013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SRAI", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv64_i, SRAIW + if ((opcode & 0xfe00707f) == 0x4000501b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SRAIW", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv64_i, SRAW + if ((opcode & 0xfe00707f) == 0x4000503b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SRAW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, SRL + if ((opcode & 0xfe00707f) == 0x5033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SRL", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_i, SRLI + if ((opcode & 0xfc00707f) == 0x5013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 25, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SRLI", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv64_i, SRLIW + if ((opcode & 0xfe00707f) == 0x501b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SRLIW", gpr[a.rd], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv64_i, SRLW + if ((opcode & 0xfe00707f) == 0x503b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SRLW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, SUB + if ((opcode & 0xfe00707f) == 0x40000033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SUB", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv64_i, SUBW + if ((opcode & 0xfe00707f) == 0x4000003b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "SUBW", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, SW + if ((opcode & 0x707f) == 0x2023) { + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.imm = (FX(opcode, 31, 25) << 5) | (FX(opcode, 11, 7)); + a.imm = SIGN_EXTEND(a.imm, 12); + + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "SW", gpr[a.rs2], gpr[a.rs1], a.imm, a.imm); + return buff; + } + + // rv_v, VAADD.VV + if ((opcode & 0xfc00707f) == 0x24002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VAADD.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VAADD.VX + if ((opcode & 0xfc00707f) == 0x24006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VAADD.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VAADDU.VV + if ((opcode & 0xfc00707f) == 0x20002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VAADDU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VAADDU.VX + if ((opcode & 0xfc00707f) == 0x20006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VAADDU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VADC.VIM + if ((opcode & 0xfe00707f) == 0x40003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "VADC.VIM", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5)); + return buff; + } + + // rv_v, VADC.VVM + if ((opcode & 0xfe00707f) == 0x40000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VADC.VVM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VADC.VXM + if ((opcode & 0xfe00707f) == 0x40004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VADC.VXM", vpr[a.vd], vpr[a.vs2], gpr[a.rs1]); + return buff; + } + + // rv_v, VADD.VI + if ((opcode & 0xfc00707f) == 0x3057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VADD.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VADD.VV + if ((opcode & 0xfc00707f) == 0x57) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VADD.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VADD.VX + if ((opcode & 0xfc00707f) == 0x4057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VADD.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VAND.VI + if ((opcode & 0xfc00707f) == 0x24003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VAND.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VAND.VV + if ((opcode & 0xfc00707f) == 0x24000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VAND.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VAND.VX + if ((opcode & 0xfc00707f) == 0x24004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VAND.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VASUB.VV + if ((opcode & 0xfc00707f) == 0x2c002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VASUB.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VASUB.VX + if ((opcode & 0xfc00707f) == 0x2c006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VASUB.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VASUBU.VV + if ((opcode & 0xfc00707f) == 0x28002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VASUBU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VASUBU.VX + if ((opcode & 0xfc00707f) == 0x28006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VASUBU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VCOMPRESS.VM + if ((opcode & 0xfe00707f) == 0x5e002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VCOMPRESS.VM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VCPOP.M + if ((opcode & 0xfc0ff07f) == 0x40082057) { + a.rd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VCPOP.M", gpr[a.rd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VDIV.VV + if ((opcode & 0xfc00707f) == 0x84002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VDIV.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VDIV.VX + if ((opcode & 0xfc00707f) == 0x84006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VDIV.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VDIVU.VV + if ((opcode & 0xfc00707f) == 0x80002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VDIVU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VDIVU.VX + if ((opcode & 0xfc00707f) == 0x80006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VDIVU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFADD.VF + if ((opcode & 0xfc00707f) == 0x5057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFADD.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFADD.VV + if ((opcode & 0xfc00707f) == 0x1057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFADD.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFCLASS.V + if ((opcode & 0xfc0ff07f) == 0x4c081057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCLASS.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFCVT.F.X.V + if ((opcode & 0xfc0ff07f) == 0x48019057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCVT.F.X.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFCVT.F.XU.V + if ((opcode & 0xfc0ff07f) == 0x48011057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCVT.F.XU.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFCVT.RTZ.X.F.V + if ((opcode & 0xfc0ff07f) == 0x48039057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCVT.RTZ.X.F.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFCVT.RTZ.XU.F.V + if ((opcode & 0xfc0ff07f) == 0x48031057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCVT.RTZ.XU.F.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFCVT.X.F.V + if ((opcode & 0xfc0ff07f) == 0x48009057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCVT.X.F.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFCVT.XU.F.V + if ((opcode & 0xfc0ff07f) == 0x48001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCVT.XU.F.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFDIV.VF + if ((opcode & 0xfc00707f) == 0x80005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFDIV.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFDIV.VV + if ((opcode & 0xfc00707f) == 0x80001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFDIV.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFIRST.M + if ((opcode & 0xfc0ff07f) == 0x4008a057) { + a.rd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFIRST.M", fpr[a.rd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFMACC.VF + if ((opcode & 0xfc00707f) == 0xb0005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMACC.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMACC.VV + if ((opcode & 0xfc00707f) == 0xb0001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMACC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMADD.VF + if ((opcode & 0xfc00707f) == 0xa0005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMADD.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMADD.VV + if ((opcode & 0xfc00707f) == 0xa0001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMADD.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMAX.VF + if ((opcode & 0xfc00707f) == 0x18005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMAX.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMAX.VV + if ((opcode & 0xfc00707f) == 0x18001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMAX.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMERGE.VFM + if ((opcode & 0xfe00707f) == 0x5c005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFMERGE.VFM", vpr[a.vd], vpr[a.vs2], fpr[a.rs1]); + return buff; + } + + // rv_v, VFMIN.VF + if ((opcode & 0xfc00707f) == 0x10005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMIN.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMIN.VV + if ((opcode & 0xfc00707f) == 0x10001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMIN.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMSAC.VF + if ((opcode & 0xfc00707f) == 0xb8005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMSAC.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMSAC.VV + if ((opcode & 0xfc00707f) == 0xb8001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMSAC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMSUB.VF + if ((opcode & 0xfc00707f) == 0xa8005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMSUB.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMSUB.VV + if ((opcode & 0xfc00707f) == 0xa8001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMSUB.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMUL.VF + if ((opcode & 0xfc00707f) == 0x90005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMUL.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMUL.VV + if ((opcode & 0xfc00707f) == 0x90001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFMUL.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFMV.F.S + if ((opcode & 0xfe0ff07f) == 0x42001057) { + a.rd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VFMV.F.S", fpr[a.rd], vpr[a.vs2]); + return buff; + } + + // rv_v, VFMV.S.F + if ((opcode & 0xfff0707f) == 0x42005057) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VFMV.S.F", vpr[a.vd], fpr[a.rs1]); + return buff; + } + + // rv_v, VFMV.V.F + if ((opcode & 0xfff0707f) == 0x5e005057) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VFMV.V.F", vpr[a.vd], fpr[a.rs1]); + return buff; + } + + // rv_v, VFNCVT.F.F.W + if ((opcode & 0xfc0ff07f) == 0x480a1057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFNCVT.F.F.W", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFNCVT.F.X.W + if ((opcode & 0xfc0ff07f) == 0x48099057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFNCVT.F.X.W", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFNCVT.F.XU.W + if ((opcode & 0xfc0ff07f) == 0x48091057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFNCVT.F.XU.W", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFNCVT.ROD.F.F.W + if ((opcode & 0xfc0ff07f) == 0x480a9057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFNCVT.ROD.F.F.W", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFNCVT.RTZ.X.F.W + if ((opcode & 0xfc0ff07f) == 0x480b9057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFNCVT.RTZ.X.F.W", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFNCVT.RTZ.XU.F.W + if ((opcode & 0xfc0ff07f) == 0x480b1057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFNCVT.RTZ.XU.F.W", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFNCVT.X.F.W + if ((opcode & 0xfc0ff07f) == 0x48089057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFNCVT.X.F.W", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFNCVT.XU.F.W + if ((opcode & 0xfc0ff07f) == 0x48081057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFNCVT.XU.F.W", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFNMACC.VF + if ((opcode & 0xfc00707f) == 0xb4005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFNMACC.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFNMACC.VV + if ((opcode & 0xfc00707f) == 0xb4001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFNMACC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFNMADD.VF + if ((opcode & 0xfc00707f) == 0xa4005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFNMADD.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFNMADD.VV + if ((opcode & 0xfc00707f) == 0xa4001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFNMADD.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFNMSAC.VF + if ((opcode & 0xfc00707f) == 0xbc005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFNMSAC.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFNMSAC.VV + if ((opcode & 0xfc00707f) == 0xbc001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFNMSAC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFNMSUB.VF + if ((opcode & 0xfc00707f) == 0xac005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFNMSUB.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFNMSUB.VV + if ((opcode & 0xfc00707f) == 0xac001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFNMSUB.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFRDIV.VF + if ((opcode & 0xfc00707f) == 0x84005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFRDIV.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFREC7.V + if ((opcode & 0xfc0ff07f) == 0x4c029057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFREC7.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFREDMAX.VS + if ((opcode & 0xfc00707f) == 0x1c001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFREDMAX.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFREDMIN.VS + if ((opcode & 0xfc00707f) == 0x14001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFREDMIN.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFREDOSUM.VS + if ((opcode & 0xfc00707f) == 0xc001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFREDOSUM.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFREDUSUM.VS + if ((opcode & 0xfc00707f) == 0x4001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFREDUSUM.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFRSQRT7.V + if ((opcode & 0xfc0ff07f) == 0x4c021057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFRSQRT7.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFRSUB.VF + if ((opcode & 0xfc00707f) == 0x9c005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFRSUB.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFSGNJ.VF + if ((opcode & 0xfc00707f) == 0x20005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFSGNJ.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFSGNJ.VV + if ((opcode & 0xfc00707f) == 0x20001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFSGNJ.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFSGNJN.VF + if ((opcode & 0xfc00707f) == 0x24005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFSGNJN.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFSGNJN.VV + if ((opcode & 0xfc00707f) == 0x24001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFSGNJN.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFSGNJX.VF + if ((opcode & 0xfc00707f) == 0x28005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFSGNJX.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFSGNJX.VV + if ((opcode & 0xfc00707f) == 0x28001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFSGNJX.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFSLIDE1DOWN.VF + if ((opcode & 0xfc00707f) == 0x3c005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFSLIDE1DOWN.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFSLIDE1UP.VF + if ((opcode & 0xfc00707f) == 0x38005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFSLIDE1UP.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFSQRT.V + if ((opcode & 0xfc0ff07f) == 0x4c001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFSQRT.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFSUB.VF + if ((opcode & 0xfc00707f) == 0x8005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFSUB.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFSUB.VV + if ((opcode & 0xfc00707f) == 0x8001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFSUB.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWADD.VF + if ((opcode & 0xfc00707f) == 0xc0005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWADD.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWADD.VV + if ((opcode & 0xfc00707f) == 0xc0001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWADD.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWADD.WF + if ((opcode & 0xfc00707f) == 0xd0005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWADD.WF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWADD.WV + if ((opcode & 0xfc00707f) == 0xd0001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWADD.WV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWCVT.F.F.V + if ((opcode & 0xfc0ff07f) == 0x48061057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFWCVT.F.F.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFWCVT.F.X.V + if ((opcode & 0xfc0ff07f) == 0x48059057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFWCVT.F.X.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFWCVT.F.XU.V + if ((opcode & 0xfc0ff07f) == 0x48051057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFWCVT.F.XU.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFWCVT.RTZ.X.F.V + if ((opcode & 0xfc0ff07f) == 0x48079057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFWCVT.RTZ.X.F.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFWCVT.RTZ.XU.F.V + if ((opcode & 0xfc0ff07f) == 0x48071057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFWCVT.RTZ.XU.F.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFWCVT.X.F.V + if ((opcode & 0xfc0ff07f) == 0x48049057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFWCVT.X.F.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFWCVT.XU.F.V + if ((opcode & 0xfc0ff07f) == 0x48041057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFWCVT.XU.F.V", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VFWMACC.VF + if ((opcode & 0xfc00707f) == 0xf0005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWMACC.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWMACC.VV + if ((opcode & 0xfc00707f) == 0xf0001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWMACC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWMSAC.VF + if ((opcode & 0xfc00707f) == 0xf8005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWMSAC.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWMSAC.VV + if ((opcode & 0xfc00707f) == 0xf8001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWMSAC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWMUL.VF + if ((opcode & 0xfc00707f) == 0xe0005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWMUL.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWMUL.VV + if ((opcode & 0xfc00707f) == 0xe0001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWMUL.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWNMACC.VF + if ((opcode & 0xfc00707f) == 0xf4005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWNMACC.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWNMACC.VV + if ((opcode & 0xfc00707f) == 0xf4001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWNMACC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWNMSAC.VF + if ((opcode & 0xfc00707f) == 0xfc005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWNMSAC.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWNMSAC.VV + if ((opcode & 0xfc00707f) == 0xfc001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWNMSAC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWREDOSUM.VS + if ((opcode & 0xfc00707f) == 0xcc001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWREDOSUM.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWREDUSUM.VS + if ((opcode & 0xfc00707f) == 0xc4001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWREDUSUM.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWSUB.VF + if ((opcode & 0xfc00707f) == 0xc8005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWSUB.VF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWSUB.VV + if ((opcode & 0xfc00707f) == 0xc8001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWSUB.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWSUB.WF + if ((opcode & 0xfc00707f) == 0xd8005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWSUB.WF", vpr[a.vd], vpr[a.vs2], fpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VFWSUB.WV + if ((opcode & 0xfc00707f) == 0xd8001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VFWSUB.WV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VID.V + if ((opcode & 0xfdfff07f) == 0x5008a057) { + a.vd = FX(opcode, 11, 7); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VID.V", vpr[a.vd], vm[a.vm]); + return buff; + } + + // rv_v, VIOTA.M + if ((opcode & 0xfc0ff07f) == 0x50082057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VIOTA.M", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VL1RE16.V + if ((opcode & 0xfff0707f) == 0x2805007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL1RE16.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL1RE32.V + if ((opcode & 0xfff0707f) == 0x2806007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL1RE32.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL1RE64.V + if ((opcode & 0xfff0707f) == 0x2807007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL1RE64.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL1RE8.V + if ((opcode & 0xfff0707f) == 0x2800007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL1RE8.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL2RE16.V + if ((opcode & 0xfff0707f) == 0x22805007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL2RE16.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL2RE32.V + if ((opcode & 0xfff0707f) == 0x22806007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL2RE32.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL2RE64.V + if ((opcode & 0xfff0707f) == 0x22807007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL2RE64.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL2RE8.V + if ((opcode & 0xfff0707f) == 0x22800007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL2RE8.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL4RE16.V + if ((opcode & 0xfff0707f) == 0x62805007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL4RE16.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL4RE32.V + if ((opcode & 0xfff0707f) == 0x62806007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL4RE32.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL4RE64.V + if ((opcode & 0xfff0707f) == 0x62807007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL4RE64.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL4RE8.V + if ((opcode & 0xfff0707f) == 0x62800007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL4RE8.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL8RE16.V + if ((opcode & 0xfff0707f) == 0xe2805007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL8RE16.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL8RE32.V + if ((opcode & 0xfff0707f) == 0xe2806007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL8RE32.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL8RE64.V + if ((opcode & 0xfff0707f) == 0xe2807007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL8RE64.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VL8RE8.V + if ((opcode & 0xfff0707f) == 0xe2800007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VL8RE8.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VLE16.V + if ((opcode & 0x1df0707f) == 0x5007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VLE16.V", vpr[a.vd], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLE16FF.V + if ((opcode & 0x1df0707f) == 0x1005007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VLE16FF.V", vpr[a.vd], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLE32.V + if ((opcode & 0x1df0707f) == 0x6007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VLE32.V", vpr[a.vd], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLE32FF.V + if ((opcode & 0x1df0707f) == 0x1006007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VLE32FF.V", vpr[a.vd], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLE64.V + if ((opcode & 0x1df0707f) == 0x7007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VLE64.V", vpr[a.vd], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLE64FF.V + if ((opcode & 0x1df0707f) == 0x1007007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VLE64FF.V", vpr[a.vd], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLE8.V + if ((opcode & 0x1df0707f) == 0x7) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VLE8.V", vpr[a.vd], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLE8FF.V + if ((opcode & 0x1df0707f) == 0x1000007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VLE8FF.V", vpr[a.vd], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLM.V + if ((opcode & 0xfff0707f) == 0x2b00007) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VLM.V", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VLOXEI16.V + if ((opcode & 0x1c00707f) == 0xc005007) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VLOXEI16.V", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLOXEI32.V + if ((opcode & 0x1c00707f) == 0xc006007) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VLOXEI32.V", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLOXEI64.V + if ((opcode & 0x1c00707f) == 0xc007007) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VLOXEI64.V", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLOXEI8.V + if ((opcode & 0x1c00707f) == 0xc000007) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VLOXEI8.V", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLSE16.V + if ((opcode & 0x1c00707f) == 0x8005007) { + a.vd = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VLSE16.V", vpr[a.vd], gpr[a.rs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLSE32.V + if ((opcode & 0x1c00707f) == 0x8006007) { + a.vd = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VLSE32.V", vpr[a.vd], gpr[a.rs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLSE64.V + if ((opcode & 0x1c00707f) == 0x8007007) { + a.vd = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VLSE64.V", vpr[a.vd], gpr[a.rs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLSE8.V + if ((opcode & 0x1c00707f) == 0x8000007) { + a.vd = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VLSE8.V", vpr[a.vd], gpr[a.rs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLUXEI16.V + if ((opcode & 0x1c00707f) == 0x4005007) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VLUXEI16.V", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLUXEI32.V + if ((opcode & 0x1c00707f) == 0x4006007) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VLUXEI32.V", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLUXEI64.V + if ((opcode & 0x1c00707f) == 0x4007007) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VLUXEI64.V", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VLUXEI8.V + if ((opcode & 0x1c00707f) == 0x4000007) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VLUXEI8.V", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VMACC.VV + if ((opcode & 0xfc00707f) == 0xb4002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMACC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMACC.VX + if ((opcode & 0xfc00707f) == 0xb4006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMACC.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMADC.VI + if ((opcode & 0xfe00707f) == 0x46003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "VMADC.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5)); + return buff; + } + + // rv_v, VMADC.VIM + if ((opcode & 0xfe00707f) == 0x44003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "VMADC.VIM", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5)); + return buff; + } + + // rv_v, VMADC.VV + if ((opcode & 0xfe00707f) == 0x46000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMADC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VMADC.VVM + if ((opcode & 0xfe00707f) == 0x44000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMADC.VVM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VMADC.VX + if ((opcode & 0xfe00707f) == 0x46004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMADC.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1]); + return buff; + } + + // rv_v, VMADC.VXM + if ((opcode & 0xfe00707f) == 0x44004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMADC.VXM", vpr[a.vd], vpr[a.vs2], gpr[a.rs1]); + return buff; + } + + // rv_v, VMADD.VV + if ((opcode & 0xfc00707f) == 0xa4002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMADD.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMADD.VX + if ((opcode & 0xfc00707f) == 0xa4006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMADD.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMAND.MM + if ((opcode & 0xfe00707f) == 0x66002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMAND.MM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VMANDN.MM + if ((opcode & 0xfe00707f) == 0x62002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMANDN.MM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VMAX.VV + if ((opcode & 0xfc00707f) == 0x1c000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMAX.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMAX.VX + if ((opcode & 0xfc00707f) == 0x1c004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMAX.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMAXU.VV + if ((opcode & 0xfc00707f) == 0x18000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMAXU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMAXU.VX + if ((opcode & 0xfc00707f) == 0x18004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMAXU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMERGE.VIM + if ((opcode & 0xfe00707f) == 0x5c003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "VMERGE.VIM", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5)); + return buff; + } + + // rv_v, VMERGE.VVM + if ((opcode & 0xfe00707f) == 0x5c000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMERGE.VVM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VMERGE.VXM + if ((opcode & 0xfe00707f) == 0x5c004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMERGE.VXM", vpr[a.vd], vpr[a.vs2], gpr[a.rs1]); + return buff; + } + + // rv_v, VMFEQ.VF + if ((opcode & 0xfc00707f) == 0x60005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMFEQ.VF", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMFEQ.VV + if ((opcode & 0xfc00707f) == 0x60001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMFEQ.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMFGE.VF + if ((opcode & 0xfc00707f) == 0x7c005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMFGE.VF", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMFGT.VF + if ((opcode & 0xfc00707f) == 0x74005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMFGT.VF", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMFLE.VF + if ((opcode & 0xfc00707f) == 0x64005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMFLE.VF", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMFLE.VV + if ((opcode & 0xfc00707f) == 0x64001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMFLE.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMFLT.VF + if ((opcode & 0xfc00707f) == 0x6c005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMFLT.VF", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMFLT.VV + if ((opcode & 0xfc00707f) == 0x6c001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMFLT.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMFNE.VF + if ((opcode & 0xfc00707f) == 0x70005057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMFNE.VF", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMFNE.VV + if ((opcode & 0xfc00707f) == 0x70001057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMFNE.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMIN.VV + if ((opcode & 0xfc00707f) == 0x14000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMIN.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMIN.VX + if ((opcode & 0xfc00707f) == 0x14004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMIN.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMINU.VV + if ((opcode & 0xfc00707f) == 0x10000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMINU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMINU.VX + if ((opcode & 0xfc00707f) == 0x10004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMINU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMNAND.MM + if ((opcode & 0xfe00707f) == 0x76002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMNAND.MM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VMNOR.MM + if ((opcode & 0xfe00707f) == 0x7a002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMNOR.MM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VMOR.MM + if ((opcode & 0xfe00707f) == 0x6a002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMOR.MM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VMORN.MM + if ((opcode & 0xfe00707f) == 0x72002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMORN.MM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VMSBC.VV + if ((opcode & 0xfe00707f) == 0x4e000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMSBC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VMSBC.VVM + if ((opcode & 0xfe00707f) == 0x4c000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMSBC.VVM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VMSBC.VX + if ((opcode & 0xfe00707f) == 0x4e004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMSBC.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1]); + return buff; + } + + // rv_v, VMSBC.VXM + if ((opcode & 0xfe00707f) == 0x4c004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMSBC.VXM", vpr[a.vd], vpr[a.vs2], gpr[a.rs1]); + return buff; + } + + // rv_v, VMSBF.M + if ((opcode & 0xfc0ff07f) == 0x5000a057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMSBF.M", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VMSEQ.VI + if ((opcode & 0xfc00707f) == 0x60003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VMSEQ.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VMSEQ.VV + if ((opcode & 0xfc00707f) == 0x60000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSEQ.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSEQ.VX + if ((opcode & 0xfc00707f) == 0x60004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSEQ.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSGT.VI + if ((opcode & 0xfc00707f) == 0x7c003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VMSGT.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VMSGT.VX + if ((opcode & 0xfc00707f) == 0x7c004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSGT.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSGTU.VI + if ((opcode & 0xfc00707f) == 0x78003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VMSGTU.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VMSGTU.VX + if ((opcode & 0xfc00707f) == 0x78004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSGTU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSIF.M + if ((opcode & 0xfc0ff07f) == 0x5001a057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMSIF.M", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VMSLE.VI + if ((opcode & 0xfc00707f) == 0x74003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VMSLE.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VMSLE.VV + if ((opcode & 0xfc00707f) == 0x74000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSLE.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSLE.VX + if ((opcode & 0xfc00707f) == 0x74004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSLE.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSLEU.VI + if ((opcode & 0xfc00707f) == 0x70003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VMSLEU.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VMSLEU.VV + if ((opcode & 0xfc00707f) == 0x70000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSLEU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSLEU.VX + if ((opcode & 0xfc00707f) == 0x70004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSLEU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSLT.VV + if ((opcode & 0xfc00707f) == 0x6c000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSLT.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSLT.VX + if ((opcode & 0xfc00707f) == 0x6c004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSLT.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSLTU.VV + if ((opcode & 0xfc00707f) == 0x68000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSLTU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSLTU.VX + if ((opcode & 0xfc00707f) == 0x68004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSLTU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSNE.VI + if ((opcode & 0xfc00707f) == 0x64003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VMSNE.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VMSNE.VV + if ((opcode & 0xfc00707f) == 0x64000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSNE.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSNE.VX + if ((opcode & 0xfc00707f) == 0x64004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMSNE.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMSOF.M + if ((opcode & 0xfc0ff07f) == 0x50012057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMSOF.M", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VMUL.VV + if ((opcode & 0xfc00707f) == 0x94002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMUL.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMUL.VX + if ((opcode & 0xfc00707f) == 0x94006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMUL.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMULH.VV + if ((opcode & 0xfc00707f) == 0x9c002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMULH.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMULH.VX + if ((opcode & 0xfc00707f) == 0x9c006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMULH.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMULHSU.VV + if ((opcode & 0xfc00707f) == 0x98002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMULHSU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMULHSU.VX + if ((opcode & 0xfc00707f) == 0x98006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMULHSU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMULHU.VV + if ((opcode & 0xfc00707f) == 0x90002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMULHU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VMULHU.VX + if ((opcode & 0xfc00707f) == 0x90006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VMULHU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VMV1R.V + if ((opcode & 0xfe0ff07f) == 0x9e003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VMV1R.V", vpr[a.vd], vpr[a.vs2]); + return buff; + } + + // rv_v, VMV2R.V + if ((opcode & 0xfe0ff07f) == 0x9e00b057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VMV2R.V", vpr[a.vd], vpr[a.vs2]); + return buff; + } + + // rv_v, VMV4R.V + if ((opcode & 0xfe0ff07f) == 0x9e01b057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VMV4R.V", vpr[a.vd], vpr[a.vs2]); + return buff; + } + + // rv_v, VMV8R.V + if ((opcode & 0xfe0ff07f) == 0x9e03b057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VMV8R.V", vpr[a.vd], vpr[a.vs2]); + return buff; + } + + // rv_v, VMV.S.X + if ((opcode & 0xfff0707f) == 0x42006057) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VMV.S.X", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VMV.V.I + if ((opcode & 0xfff0707f) == 0x5e003057) { + a.vd = FX(opcode, 11, 7); + a.imm = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, 0x%x(%d)", "VMV.V.I", vpr[a.vd], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5)); + return buff; + } + + // rv_v, VMV.V.V + if ((opcode & 0xfff0707f) == 0x5e000057) { + a.vd = FX(opcode, 11, 7); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VMV.V.V", vpr[a.vd], vpr[a.vs1]); + return buff; + } + + // rv_v, VMV.V.X + if ((opcode & 0xfff0707f) == 0x5e004057) { + a.vd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VMV.V.X", vpr[a.vd], gpr[a.rs1]); + return buff; + } + + // rv_v, VMV.X.S + if ((opcode & 0xfe0ff07f) == 0x42002057) { + a.rd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VMV.X.S", gpr[a.rd], vpr[a.vs2]); + return buff; + } + + // rv_v, VMXNOR.MM + if ((opcode & 0xfe00707f) == 0x7e002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMXNOR.MM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VMXOR.MM + if ((opcode & 0xfe00707f) == 0x6e002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VMXOR.MM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VNCLIP.WI + if ((opcode & 0xfc00707f) == 0xbc003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VNCLIP.WI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VNCLIP.WV + if ((opcode & 0xfc00707f) == 0xbc000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VNCLIP.WV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VNCLIP.WX + if ((opcode & 0xfc00707f) == 0xbc004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VNCLIP.WX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VNCLIPU.WI + if ((opcode & 0xfc00707f) == 0xb8003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VNCLIPU.WI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VNCLIPU.WV + if ((opcode & 0xfc00707f) == 0xb8000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VNCLIPU.WV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VNCLIPU.WX + if ((opcode & 0xfc00707f) == 0xb8004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VNCLIPU.WX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VNMSAC.VV + if ((opcode & 0xfc00707f) == 0xbc002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VNMSAC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VNMSAC.VX + if ((opcode & 0xfc00707f) == 0xbc006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VNMSAC.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VNMSUB.VV + if ((opcode & 0xfc00707f) == 0xac002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VNMSUB.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VNMSUB.VX + if ((opcode & 0xfc00707f) == 0xac006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VNMSUB.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VNSRA.WI + if ((opcode & 0xfc00707f) == 0xb4003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VNSRA.WI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VNSRA.WV + if ((opcode & 0xfc00707f) == 0xb4000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VNSRA.WV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VNSRA.WX + if ((opcode & 0xfc00707f) == 0xb4004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VNSRA.WX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VNSRL.WI + if ((opcode & 0xfc00707f) == 0xb0003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VNSRL.WI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VNSRL.WV + if ((opcode & 0xfc00707f) == 0xb0000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VNSRL.WV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VNSRL.WX + if ((opcode & 0xfc00707f) == 0xb0004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VNSRL.WX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VOR.VI + if ((opcode & 0xfc00707f) == 0x28003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VOR.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VOR.VV + if ((opcode & 0xfc00707f) == 0x28000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VOR.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VOR.VX + if ((opcode & 0xfc00707f) == 0x28004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VOR.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VREDAND.VS + if ((opcode & 0xfc00707f) == 0x4002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VREDAND.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VREDMAX.VS + if ((opcode & 0xfc00707f) == 0x1c002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VREDMAX.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VREDMAXU.VS + if ((opcode & 0xfc00707f) == 0x18002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VREDMAXU.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VREDMIN.VS + if ((opcode & 0xfc00707f) == 0x14002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VREDMIN.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VREDMINU.VS + if ((opcode & 0xfc00707f) == 0x10002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VREDMINU.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VREDOR.VS + if ((opcode & 0xfc00707f) == 0x8002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VREDOR.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VREDSUM.VS + if ((opcode & 0xfc00707f) == 0x2057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VREDSUM.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VREDXOR.VS + if ((opcode & 0xfc00707f) == 0xc002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VREDXOR.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VREM.VV + if ((opcode & 0xfc00707f) == 0x8c002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VREM.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VREM.VX + if ((opcode & 0xfc00707f) == 0x8c006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VREM.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VREMU.VV + if ((opcode & 0xfc00707f) == 0x88002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VREMU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VREMU.VX + if ((opcode & 0xfc00707f) == 0x88006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VREMU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VRGATHER.VI + if ((opcode & 0xfc00707f) == 0x30003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VRGATHER.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VRGATHER.VV + if ((opcode & 0xfc00707f) == 0x30000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VRGATHER.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VRGATHER.VX + if ((opcode & 0xfc00707f) == 0x30004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VRGATHER.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VRGATHEREI16.VV + if ((opcode & 0xfc00707f) == 0x38000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VRGATHEREI16.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VRSUB.VI + if ((opcode & 0xfc00707f) == 0xc003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VRSUB.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VRSUB.VX + if ((opcode & 0xfc00707f) == 0xc004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VRSUB.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VS1R.V + if ((opcode & 0xfff0707f) == 0x2800027) { + a.vs3 = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VS1R.V", vpr[a.vs3], gpr[a.rs1]); + return buff; + } + + // rv_v, VS2R.V + if ((opcode & 0xfff0707f) == 0x22800027) { + a.vs3 = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VS2R.V", vpr[a.vs3], gpr[a.rs1]); + return buff; + } + + // rv_v, VS4R.V + if ((opcode & 0xfff0707f) == 0x62800027) { + a.vs3 = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VS4R.V", vpr[a.vs3], gpr[a.rs1]); + return buff; + } + + // rv_v, VS8R.V + if ((opcode & 0xfff0707f) == 0xe2800027) { + a.vs3 = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VS8R.V", vpr[a.vs3], gpr[a.rs1]); + return buff; + } + + // rv_v, VSADD.VI + if ((opcode & 0xfc00707f) == 0x84003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VSADD.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VSADD.VV + if ((opcode & 0xfc00707f) == 0x84000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSADD.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VSADD.VX + if ((opcode & 0xfc00707f) == 0x84004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSADD.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSADDU.VI + if ((opcode & 0xfc00707f) == 0x80003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VSADDU.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VSADDU.VV + if ((opcode & 0xfc00707f) == 0x80000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSADDU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VSADDU.VX + if ((opcode & 0xfc00707f) == 0x80004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSADDU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSBC.VVM + if ((opcode & 0xfe00707f) == 0x48000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VSBC.VVM", vpr[a.vd], vpr[a.vs2], vpr[a.vs1]); + return buff; + } + + // rv_v, VSBC.VXM + if ((opcode & 0xfe00707f) == 0x48004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VSBC.VXM", vpr[a.vd], vpr[a.vs2], gpr[a.rs1]); + return buff; + } + + // rv_v, VSE16.V + if ((opcode & 0x1df0707f) == 0x5027) { + a.vs3 = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSE16.V", vpr[a.vs3], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSE32.V + if ((opcode & 0x1df0707f) == 0x6027) { + a.vs3 = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSE32.V", vpr[a.vs3], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSE64.V + if ((opcode & 0x1df0707f) == 0x7027) { + a.vs3 = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSE64.V", vpr[a.vs3], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSE8.V + if ((opcode & 0x1df0707f) == 0x27) { + a.vs3 = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSE8.V", vpr[a.vs3], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSETIVLI + if ((opcode & 0xc000707f) == 0xc0007057) { + a.imm = FX(opcode, 29, 20); + a.imm2 = FX(opcode, 19, 15); + a.rd = FX(opcode, 11, 7); + const char *vta_str, *vma_str, *lmul_str, *sew_str; + if (a.imm & 0b01000000) + vta_str = "ta"; + else + vta_str = "tu"; + if (a.imm & 0b10000000) + vma_str = "ma"; + else + vma_str = "mu"; + switch (a.imm & 0b00000111) { + case 0b101: lmul_str = "mf8"; break; + case 0b110: lmul_str = "mf4"; break; + case 0b111: lmul_str = "mf2"; break; + case 0b000: lmul_str = "m1"; break; + case 0b001: lmul_str = "m2"; break; + case 0b010: lmul_str = "m4"; break; + case 0b011: lmul_str = "m8"; break; + default: lmul_str = "reserved"; break; + } + switch ((a.imm & 0b00111000) >> 3) { + case 0b000: sew_str = "e8"; break; + case 0b001: sew_str = "e16"; break; + case 0b010: sew_str = "e32"; break; + case 0b011: sew_str = "e64"; break; + default: sew_str = "reserved"; break; + } + + snprintf(buff, sizeof(buff), "%-15s %s, %d, %s, %s, %s, %s", "VSETIVLI", gpr[a.rd], a.imm2, sew_str, lmul_str, vta_str, vma_str); + return buff; + } + + // rv_v, VSETVL + if ((opcode & 0xfe00707f) == 0x80007057) { + a.rd = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VSETVL", gpr[a.rd], gpr[a.rs2], gpr[a.rs1]); + return buff; + } + + // rv_v, VSETVLI + if ((opcode & 0x8000707f) == 0x7057) { + a.imm = FX(opcode, 30, 20); + a.rs1 = FX(opcode, 19, 15); + a.rd = FX(opcode, 11, 7); + const char *vta_str, *vma_str, *lmul_str, *sew_str; + if (a.imm & 0b01000000) + vta_str = "ta"; + else + vta_str = "tu"; + if (a.imm & 0b10000000) + vma_str = "ma"; + else + vma_str = "mu"; + switch (a.imm & 0b00000111) { + case 0b101: lmul_str = "mf8"; break; + case 0b110: lmul_str = "mf4"; break; + case 0b111: lmul_str = "mf2"; break; + case 0b000: lmul_str = "m1"; break; + case 0b001: lmul_str = "m2"; break; + case 0b010: lmul_str = "m4"; break; + case 0b011: lmul_str = "m8"; break; + default: lmul_str = "reserved"; break; + } + switch ((a.imm & 0b00111000) >> 3) { + case 0b000: sew_str = "e8"; break; + case 0b001: sew_str = "e16"; break; + case 0b010: sew_str = "e32"; break; + case 0b011: sew_str = "e64"; break; + default: sew_str = "reserved"; break; + } + + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s, %s", "VSETVLI", gpr[a.rd], gpr[a.rs1], sew_str, lmul_str, vta_str, vma_str); + return buff; + } + + // rv_v, VSEXT.VF2 + if ((opcode & 0xfc0ff07f) == 0x4803a057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VSEXT.VF2", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VSEXT.VF4 + if ((opcode & 0xfc0ff07f) == 0x4802a057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VSEXT.VF4", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VSEXT.VF8 + if ((opcode & 0xfc0ff07f) == 0x4801a057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VSEXT.VF8", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VSLIDE1DOWN.VX + if ((opcode & 0xfc00707f) == 0x3c006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSLIDE1DOWN.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSLIDE1UP.VX + if ((opcode & 0xfc00707f) == 0x38006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSLIDE1UP.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSLIDEDOWN.VI + if ((opcode & 0xfc00707f) == 0x3c003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VSLIDEDOWN.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VSLIDEDOWN.VX + if ((opcode & 0xfc00707f) == 0x3c004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSLIDEDOWN.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSLIDEUP.VI + if ((opcode & 0xfc00707f) == 0x38003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VSLIDEUP.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VSLIDEUP.VX + if ((opcode & 0xfc00707f) == 0x38004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSLIDEUP.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSLL.VI + if ((opcode & 0xfc00707f) == 0x94003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VSLL.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VSLL.VV + if ((opcode & 0xfc00707f) == 0x94000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSLL.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VSLL.VX + if ((opcode & 0xfc00707f) == 0x94004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSLL.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSM.V + if ((opcode & 0xfff0707f) == 0x2b00027) { + a.vs3 = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VSM.V", vpr[a.vs3], gpr[a.rs1]); + return buff; + } + + // rv_v, VSMUL.VV + if ((opcode & 0xfc00707f) == 0x9c000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSMUL.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VSMUL.VX + if ((opcode & 0xfc00707f) == 0x9c004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSMUL.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSOXEI16.V + if ((opcode & 0x1c00707f) == 0xc005027) { + a.vs3 = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VSOXEI16.V", vpr[a.vs3], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSOXEI32.V + if ((opcode & 0x1c00707f) == 0xc006027) { + a.vs3 = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VSOXEI32.V", vpr[a.vs3], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSOXEI64.V + if ((opcode & 0x1c00707f) == 0xc007027) { + a.vs3 = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VSOXEI64.V", vpr[a.vs3], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSOXEI8.V + if ((opcode & 0x1c00707f) == 0xc000027) { + a.vs3 = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VSOXEI8.V", vpr[a.vs3], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSRA.VI + if ((opcode & 0xfc00707f) == 0xa4003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VSRA.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VSRA.VV + if ((opcode & 0xfc00707f) == 0xa4000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSRA.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VSRA.VX + if ((opcode & 0xfc00707f) == 0xa4004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSRA.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSRL.VI + if ((opcode & 0xfc00707f) == 0xa0003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VSRL.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VSRL.VV + if ((opcode & 0xfc00707f) == 0xa0000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSRL.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VSRL.VX + if ((opcode & 0xfc00707f) == 0xa0004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSRL.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSSE16.V + if ((opcode & 0x1c00707f) == 0x8005027) { + a.vs3 = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VSSE16.V", vpr[a.vs3], gpr[a.rs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSSE32.V + if ((opcode & 0x1c00707f) == 0x8006027) { + a.vs3 = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VSSE32.V", vpr[a.vs3], gpr[a.rs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSSE64.V + if ((opcode & 0x1c00707f) == 0x8007027) { + a.vs3 = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VSSE64.V", vpr[a.vs3], gpr[a.rs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSSE8.V + if ((opcode & 0x1c00707f) == 0x8000027) { + a.vs3 = FX(opcode, 11, 7); + a.rs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VSSE8.V", vpr[a.vs3], gpr[a.rs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSSRA.VI + if ((opcode & 0xfc00707f) == 0xac003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VSSRA.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VSSRA.VV + if ((opcode & 0xfc00707f) == 0xac000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSSRA.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VSSRA.VX + if ((opcode & 0xfc00707f) == 0xac004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSSRA.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSSRL.VI + if ((opcode & 0xfc00707f) == 0xa8003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VSSRL.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VSSRL.VV + if ((opcode & 0xfc00707f) == 0xa8000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSSRL.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VSSRL.VX + if ((opcode & 0xfc00707f) == 0xa8004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSSRL.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSSUB.VV + if ((opcode & 0xfc00707f) == 0x8c000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSSUB.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VSSUB.VX + if ((opcode & 0xfc00707f) == 0x8c004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSSUB.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSSUBU.VV + if ((opcode & 0xfc00707f) == 0x88000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSSUBU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VSSUBU.VX + if ((opcode & 0xfc00707f) == 0x88004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSSUBU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSUB.VV + if ((opcode & 0xfc00707f) == 0x8000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSUB.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VSUB.VX + if ((opcode & 0xfc00707f) == 0x8004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VSUB.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VSUXEI16.V + if ((opcode & 0x1c00707f) == 0x4005027) { + a.vs3 = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VSUXEI16.V", vpr[a.vs3], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSUXEI32.V + if ((opcode & 0x1c00707f) == 0x4006027) { + a.vs3 = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VSUXEI32.V", vpr[a.vs3], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSUXEI64.V + if ((opcode & 0x1c00707f) == 0x4007027) { + a.vs3 = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VSUXEI64.V", vpr[a.vs3], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VSUXEI8.V + if ((opcode & 0x1c00707f) == 0x4000027) { + a.vs3 = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + a.nf = FX(opcode, 31, 29); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s, %s", "VSUXEI8.V", vpr[a.vs3], vpr[a.vs2], gpr[a.rs1], vm[a.vm], nf[a.nf]); + return buff; + } + + // rv_v, VWADD.VV + if ((opcode & 0xfc00707f) == 0xc4002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWADD.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWADD.VX + if ((opcode & 0xfc00707f) == 0xc4006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWADD.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWADD.WV + if ((opcode & 0xfc00707f) == 0xd4002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWADD.WV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWADD.WX + if ((opcode & 0xfc00707f) == 0xd4006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWADD.WX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWADDU.VV + if ((opcode & 0xfc00707f) == 0xc0002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWADDU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWADDU.VX + if ((opcode & 0xfc00707f) == 0xc0006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWADDU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWADDU.WV + if ((opcode & 0xfc00707f) == 0xd0002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWADDU.WV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWADDU.WX + if ((opcode & 0xfc00707f) == 0xd0006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWADDU.WX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMACC.VV + if ((opcode & 0xfc00707f) == 0xf4002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMACC.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMACC.VX + if ((opcode & 0xfc00707f) == 0xf4006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMACC.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMACCSU.VV + if ((opcode & 0xfc00707f) == 0xfc002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMACCSU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMACCSU.VX + if ((opcode & 0xfc00707f) == 0xfc006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMACCSU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMACCU.VV + if ((opcode & 0xfc00707f) == 0xf0002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMACCU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMACCU.VX + if ((opcode & 0xfc00707f) == 0xf0006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMACCU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMACCUS.VX + if ((opcode & 0xfc00707f) == 0xf8006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMACCUS.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMUL.VV + if ((opcode & 0xfc00707f) == 0xec002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMUL.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMUL.VX + if ((opcode & 0xfc00707f) == 0xec006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMUL.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMULSU.VV + if ((opcode & 0xfc00707f) == 0xe8002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMULSU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMULSU.VX + if ((opcode & 0xfc00707f) == 0xe8006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMULSU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMULU.VV + if ((opcode & 0xfc00707f) == 0xe0002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMULU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWMULU.VX + if ((opcode & 0xfc00707f) == 0xe0006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWMULU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWREDSUM.VS + if ((opcode & 0xfc00707f) == 0xc4000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWREDSUM.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWREDSUMU.VS + if ((opcode & 0xfc00707f) == 0xc0000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWREDSUMU.VS", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWSUB.VV + if ((opcode & 0xfc00707f) == 0xcc002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWSUB.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWSUB.VX + if ((opcode & 0xfc00707f) == 0xcc006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWSUB.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWSUB.WV + if ((opcode & 0xfc00707f) == 0xdc002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWSUB.WV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWSUB.WX + if ((opcode & 0xfc00707f) == 0xdc006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWSUB.WX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWSUBU.VV + if ((opcode & 0xfc00707f) == 0xc8002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWSUBU.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWSUBU.VX + if ((opcode & 0xfc00707f) == 0xc8006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWSUBU.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VWSUBU.WV + if ((opcode & 0xfc00707f) == 0xd8002057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWSUBU.WV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VWSUBU.WX + if ((opcode & 0xfc00707f) == 0xd8006057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VWSUBU.WX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VXOR.VI + if ((opcode & 0xfc00707f) == 0x2c003057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.imm = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d), %s", "VXOR.VI", vpr[a.vd], vpr[a.vs2], SIGN_EXTEND(a.imm, 5), SIGN_EXTEND(a.imm, 5), vm[a.vm]); + return buff; + } + + // rv_v, VXOR.VV + if ((opcode & 0xfc00707f) == 0x2c000057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VXOR.VV", vpr[a.vd], vpr[a.vs2], vpr[a.vs1], vm[a.vm]); + return buff; + } + + // rv_v, VXOR.VX + if ((opcode & 0xfc00707f) == 0x2c004057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.rs1 = FX(opcode, 19, 15); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VXOR.VX", vpr[a.vd], vpr[a.vs2], gpr[a.rs1], vm[a.vm]); + return buff; + } + + // rv_v, VZEXT.VF2 + if ((opcode & 0xfc0ff07f) == 0x48032057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VZEXT.VF2", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VZEXT.VF4 + if ((opcode & 0xfc0ff07f) == 0x48022057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VZEXT.VF4", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_v, VZEXT.VF8 + if ((opcode & 0xfc0ff07f) == 0x48012057) { + a.vd = FX(opcode, 11, 7); + a.vs2 = FX(opcode, 24, 20); + a.vm = FX(opcode, 25, 25); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VZEXT.VF8", vpr[a.vd], vpr[a.vs2], vm[a.vm]); + return buff; + } + + // rv_zbb, XNOR + if ((opcode & 0xfe00707f) == 0x40004033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "XNOR", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, XOR + if ((opcode & 0xfe00707f) == 0x4033) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.rs2 = FX(opcode, 24, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "XOR", gpr[a.rd], gpr[a.rs1], gpr[a.rs2]); + return buff; + } + + // rv_i, XORI + if ((opcode & 0x707f) == 0x4013) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + a.imm = FX(opcode, 31, 20); + snprintf(buff, sizeof(buff), "%-15s %s, %s, 0x%x(%d)", "XORI", gpr[a.rd], gpr[a.rs1], SIGN_EXTEND(a.imm, 12), SIGN_EXTEND(a.imm, 12)); + return buff; + } + + // rv64_zbb, ZEXT.H + if ((opcode & 0xfff0707f) == 0x800403b) { + a.rd = FX(opcode, 11, 7); + a.rs1 = FX(opcode, 19, 15); + snprintf(buff, sizeof(buff), "%-15s %s, %s", "ZEXT.H", gpr[a.rd], gpr[a.rs1]); + return buff; } -unknown: - snprintf(buff, sizeof(buff), "%08X ???", __builtin_bswap32(data)); + snprintf(buff, sizeof(buff), "%08X ???", __builtin_bswap32(opcode)); return buff; } diff --git a/src/dynarec/rv64/rv64_prolog.S b/src/dynarec/rv64/rv64_prolog.S index b209db9a8ed6fd188c0cde8eabbefb0929a15c09..67af8253ac7ba3e678dd1cfd6ee92339883e2a29 100644 --- a/src/dynarec/rv64/rv64_prolog.S +++ b/src/dynarec/rv64/rv64_prolog.S @@ -1,4 +1,4 @@ -//arm prologue for dynarec +//riscv prologue for dynarec //Save stuff, prepare stack and register //called with pointer to emu as 1st parameter //and address to jump to as 2nd parameter @@ -67,4 +67,4 @@ rv64_prolog: xori x5, x0, -1 srli x5, x5, 32 // jump to block - jalr a1 + jr a1 diff --git a/src/elfs/elfhash.c b/src/elfs/elfhash.c index fefb0e7f3f7e0e87afa0421a03fb6d8f2a99cd8f..ebb81285729b9a6258f7dd3a85dd5d4107460ffc 100644 --- a/src/elfs/elfhash.c +++ b/src/elfs/elfhash.c @@ -18,14 +18,20 @@ #include "elfload_dump.h" #include "elfloader_private.h" -const char* GetSymbolVersion(elfheader_t* h, int version) +const char* GetSymbolVersion32(elfheader_t* h, int version) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif +const char* GetSymbolVersion64(elfheader_t* h, int version) { if(version<2) return NULL; /*if(version==1) return "*";*/ - if(h->VerNeed) { - Elf64_Verneed *ver = (Elf64_Verneed*)((uintptr_t)h->VerNeed + h->delta); + if(h->VerNeed._64) { + Elf64_Verneed *ver = (Elf64_Verneed*)((uintptr_t)h->VerNeed._64 + h->delta); while(ver) { Elf64_Vernaux *aux = (Elf64_Vernaux*)((uintptr_t)ver + ver->vn_aux); for(int j=0; jvn_cnt; ++j) { @@ -38,12 +44,22 @@ const char* GetSymbolVersion(elfheader_t* h, int version) } return GetParentSymbolVersion(h, version); // if symbol is "internal", use Def table instead } +const char* GetSymbolVersion(elfheader_t* h, int version) +{ + return box64_is32bits?GetSymbolVersion32(h, version):GetSymbolVersion64(h, version); +} -const char* GetParentSymbolVersion(elfheader_t* h, int index) +const char* GetParentSymbolVersion32(elfheader_t* h, int index) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif +const char* GetParentSymbolVersion64(elfheader_t* h, int index) { - if(!h->VerDef || (index<1)) + if(!h->VerDef._64 || (index<1)) return NULL; - Elf64_Verdef *def = (Elf64_Verdef*)((uintptr_t)h->VerDef + h->delta); + Elf64_Verdef *def = (Elf64_Verdef*)((uintptr_t)h->VerDef._64 + h->delta); while(def) { if(def->vd_ndx==index) { if(def->vd_cnt<1) @@ -57,26 +73,47 @@ const char* GetParentSymbolVersion(elfheader_t* h, int index) } return NULL; } +const char* GetParentSymbolVersion(elfheader_t* h, int version) +{ + return box64_is32bits?GetParentSymbolVersion32(h, version):GetParentSymbolVersion64(h, version); +} -Elf64_Half GetParentSymbolVersionFlag(elfheader_t* h, int index) +uint16_t GetParentSymbolVersionFlag32(elfheader_t* h, int index) +#ifndef BOX32 + { return (uint16_t)-1; } +#else + ; +#endif +uint16_t GetParentSymbolVersionFlag64(elfheader_t* h, int index) { - if(!h->VerDef || (index<1)) - return (Elf64_Half)-1; - Elf64_Verdef *def = (Elf64_Verdef*)((uintptr_t)h->VerDef + h->delta); + if(!h->VerDef._64 || (index<1)) + return (uint16_t)-1; + Elf64_Verdef *def = (Elf64_Verdef*)((uintptr_t)h->VerDef._64 + h->delta); while(def) { if(def->vd_ndx==index) { return def->vd_flags; } def = def->vd_next?((Elf64_Verdef*)((uintptr_t)def + def->vd_next)):NULL; } - return (Elf64_Half)-1; + return (uint16_t)-1; } -Elf64_Half GetSymbolVersionFlag(elfheader_t* h, int version) +uint16_t GetParentSymbolVersionFlag(elfheader_t* h, int index) +{ + return box64_is32bits?GetParentSymbolVersionFlag32(h, index):GetParentSymbolVersionFlag64(h, index); +} + +uint16_t GetSymbolVersionFlag32(elfheader_t* h, int version) +#ifndef BOX32 +{ return (uint16_t)-1; } +#else + ; +#endif +uint16_t GetSymbolVersionFlag64(elfheader_t* h, int version) { if(version<2) - return (Elf64_Half)-1; - if(h->VerNeed) { - Elf64_Verneed *ver = (Elf64_Verneed*)((uintptr_t)h->VerNeed + h->delta); + return (uint16_t)-1; + if(h->VerNeed._64) { + Elf64_Verneed *ver = (Elf64_Verneed*)((uintptr_t)h->VerNeed._64 + h->delta); while(ver) { Elf64_Vernaux *aux = (Elf64_Vernaux*)((uintptr_t)ver + ver->vn_aux); for(int j=0; jvn_cnt; ++j) { @@ -89,14 +126,23 @@ Elf64_Half GetSymbolVersionFlag(elfheader_t* h, int version) } return GetParentSymbolVersionFlag(h, version); // if symbol is "internal", use Def table instead } +uint16_t GetSymbolVersionFlag(elfheader_t* h, int index) { + return box64_is32bits?GetSymbolVersionFlag32(h, index):GetSymbolVersionFlag64(h, index); +} -int GetVersionIndice(elfheader_t* h, const char* vername) +int GetVersionIndice32(elfheader_t* h, const char* vername) +#ifndef BOX32 +{ return 0; } +#else + ; +#endif +int GetVersionIndice64(elfheader_t* h, const char* vername) { if(!vername) return 0; - if(h->VerDef) { - Elf64_Verdef *def = (Elf64_Verdef*)((uintptr_t)h->VerDef + h->delta); + if(h->VerDef._64) { + Elf64_Verdef *def = (Elf64_Verdef*)((uintptr_t)h->VerDef._64 + h->delta); while(def) { Elf64_Verdaux *aux = (Elf64_Verdaux*)((uintptr_t)def + def->vd_aux); if(!strcmp(h->DynStr+aux->vda_name, vername)) @@ -106,13 +152,23 @@ int GetVersionIndice(elfheader_t* h, const char* vername) } return 0; } +int GetVersionIndice(elfheader_t* h, const char* vername) +{ + return box64_is32bits?GetVersionIndice32(h, vername):GetVersionIndice64(h, vername); +} -int GetNeededVersionCnt(elfheader_t* h, const char* libname) +int GetNeededVersionCnt32(elfheader_t* h, const char* libname) +#ifndef BOX32 +{ return 0; } +#else + ; +#endif +int GetNeededVersionCnt64(elfheader_t* h, const char* libname) { if(!libname) return 0; - if(h->VerNeed) { - Elf64_Verneed *ver = (Elf64_Verneed*)((uintptr_t)h->VerNeed + h->delta); + if(h->VerNeed._64) { + Elf64_Verneed *ver = (Elf64_Verneed*)((uintptr_t)h->VerNeed._64 + h->delta); while(ver) { char *filename = h->DynStr + ver->vn_file; if(!strcmp(filename, libname)) @@ -122,13 +178,23 @@ int GetNeededVersionCnt(elfheader_t* h, const char* libname) } return 0; } +int GetNeededVersionCnt(elfheader_t* h, const char* libname) +{ + return box64_is32bits?GetNeededVersionCnt32(h, libname):GetNeededVersionCnt64(h, libname); +} -const char* GetNeededVersionString(elfheader_t* h, const char* libname, int idx) +const char* GetNeededVersionString32(elfheader_t* h, const char* libname, int idx) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif +const char* GetNeededVersionString64(elfheader_t* h, const char* libname, int idx) { if(!libname) - return 0; - if(h->VerNeed) { - Elf64_Verneed *ver = (Elf64_Verneed*)((uintptr_t)h->VerNeed + h->delta); + return NULL; + if(h->VerNeed._64) { + Elf64_Verneed *ver = (Elf64_Verneed*)((uintptr_t)h->VerNeed._64 + h->delta); while(ver) { char *filename = h->DynStr + ver->vn_file; Elf64_Vernaux *aux = (Elf64_Vernaux*)((uintptr_t)ver + ver->vn_aux); @@ -145,6 +211,10 @@ const char* GetNeededVersionString(elfheader_t* h, const char* libname, int idx) } return NULL; } +const char* GetNeededVersionString(elfheader_t* h, const char* libname, int idx) +{ + return box64_is32bits?GetNeededVersionString32(h, libname, idx):GetNeededVersionString64(h, libname, idx); +} int GetNeededVersionForLib(elfheader_t* h, const char* libname, const char* ver) { @@ -197,7 +267,7 @@ uint32_t old_elf_hash(const char* name) return h; } -Elf64_Sym* old_elf_lookup(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt) +static Elf64_Sym* old_elf_lookup(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt) { // Prepare hash table const uint32_t *hashtab = (uint32_t*)(h->hash + h->delta); @@ -209,16 +279,16 @@ Elf64_Sym* old_elf_lookup(elfheader_t* h, const char* symname, int ver, const ch const uint32_t hash = old_elf_hash(symname); // Search for it for (uint32_t i = buckets[hash % nbuckets]; i; i = chains[i]) { - const char* name = h->DynStr + h->DynSym[i].st_name; + const char* name = h->DynStr + h->DynSym._64[i].st_name; if (!strcmp(symname, name) && SymbolMatch(h, i, ver, vername, local, veropt)) { - return &h->DynSym[i]; + return &h->DynSym._64[i]; } } return NULL; } -void old_elf_hash_dump(elfheader_t* h) +static void old_elf_hash_dump(elfheader_t* h) { // Prepare hash table const uint32_t *hashtab = (uint32_t*)(h->hash + h->delta); @@ -229,7 +299,7 @@ void old_elf_hash_dump(elfheader_t* h) printf_log(LOG_NONE, "------------ Dump HASH from %s\n", h->name); printf_log(LOG_NONE, "Buckets[%d] = \n", nbuckets); for(uint32_t i=0; iDynStr + h->DynSym[buckets[i]].st_name; + const char* name = h->DynStr + h->DynSym._64[buckets[i]].st_name; printf_log(LOG_NONE, "%d: %s\n", buckets[i], name); } printf_log(LOG_NONE,"Chains[%d] = ", nchains); @@ -246,7 +316,7 @@ uint32_t new_elf_hash(const char *name) return h; } -Elf64_Sym* new_elf_lookup(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt) +static Elf64_Sym* new_elf_lookup(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt) { // Prepare hash table const uint32_t *hashtab = (uint32_t*)(h->gnu_hash + h->delta); @@ -272,10 +342,10 @@ Elf64_Sym* new_elf_lookup(elfheader_t* h, const char* symname, int ver, const ch if (symidx < symoffset) return NULL; while(1) { - const char* name = h->DynStr + h->DynSym[symidx].st_name; + const char* name = h->DynStr + h->DynSym._64[symidx].st_name; const uint32_t symhash = chains[symidx-symoffset]; if ((hash|1) == (symhash|1) && !strcmp(name, symname) && SymbolMatch(h, symidx, ver, vername, local, veropt)) { - return &h->DynSym[symidx]; + return &h->DynSym._64[symidx]; } if(symhash&1) return NULL; @@ -283,7 +353,7 @@ Elf64_Sym* new_elf_lookup(elfheader_t* h, const char* symname, int ver, const ch } } -void new_elf_hash_dump(elfheader_t* h) +static void new_elf_hash_dump(elfheader_t* h) { // Prepare hash table const uint32_t *hashtab = (uint32_t*)(h->gnu_hash + h->delta); @@ -301,7 +371,7 @@ void new_elf_hash_dump(elfheader_t* h) uint32_t symidx = buckets[i]; printf_log(LOG_NONE, "%d:", symidx); while(symidx>=symoffset) { - const char* name = h->DynStr + h->DynSym[symidx].st_name; + const char* name = h->DynStr + h->DynSym._64[symidx].st_name; const uint32_t hash = chains[symidx-symoffset]; if(hash&1) symidx=0; @@ -314,19 +384,24 @@ void new_elf_hash_dump(elfheader_t* h) printf_log(LOG_NONE, "\n===============\n"); } -Elf64_Sym* ElfLookup(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt) +#ifndef BOX32 +Elf32_Sym* ElfLookup32(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt) { return NULL; } +Elf32_Sym* ElfSymTabLookup32(elfheader_t* h, const char* symname) { return NULL; } +Elf32_Sym* ElfDynSymLookup32(elfheader_t* h, const char* symname) { return NULL; } +#endif +Elf64_Sym* ElfLookup64(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt) { if(h->gnu_hash) return new_elf_lookup(h, symname, ver, vername, local, veropt); return old_elf_lookup(h, symname, ver, vername, local, veropt); } -Elf64_Sym* ElfSymTabLookup(elfheader_t* h, const char* symname) +Elf64_Sym* ElfSymTabLookup64(elfheader_t* h, const char* symname) { - if(!h->SymTab) + if(!h->SymTab._64) return 0; for(size_t i=0; inumSymTab; ++i) { - Elf64_Sym* sym = &h->SymTab[i]; + Elf64_Sym* sym = &h->SymTab._64[i]; int type = ELF64_ST_TYPE(sym->st_info); if(type==STT_FUNC || type==STT_TLS || type==STT_OBJECT) { const char * name = h->StrTab+sym->st_name; @@ -337,12 +412,12 @@ Elf64_Sym* ElfSymTabLookup(elfheader_t* h, const char* symname) return NULL; } -Elf64_Sym* ElfDynSymLookup(elfheader_t* h, const char* symname) +Elf64_Sym* ElfDynSymLookup64(elfheader_t* h, const char* symname) { - if(!h->DynSym) + if(!h->DynSym._64) return 0; for(size_t i=0; inumDynSym; ++i) { - Elf64_Sym* sym = &h->DynSym[i]; + Elf64_Sym* sym = &h->DynSym._64[i]; int type = ELF64_ST_TYPE(sym->st_info); if(type==STT_FUNC || type==STT_TLS || type==STT_OBJECT) { const char * name = h->DynStr+sym->st_name; diff --git a/src/elfs/elfhash32.c b/src/elfs/elfhash32.c new file mode 100644 index 0000000000000000000000000000000000000000..3773e59a6dbc6c860f2df24c3fba8b01af469a55 --- /dev/null +++ b/src/elfs/elfhash32.c @@ -0,0 +1,224 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "custommem.h" +#include "box64version.h" +#include "elfloader.h" +#include "debug.h" +#include "elfload_dump.h" +#include "elfloader_private.h" + +static int SymbolMatch(elfheader_t* h, uint32_t i, int ver, const char* vername, int local, int veropt) +{ + int version = h->VerSym?((Elf32_Half*)((uintptr_t)h->VerSym+h->delta))[i]:-1; + if(version!=-1) version &=0x7fff; + const char* symvername = GetSymbolVersion(h, version); + Elf32_Half flags = GetSymbolVersionFlag(h, version); + if(ver==-1 || version==-1) + return 1; + if(version==0 && !local) + return 0; + if(version<2 && ver>1 && veropt) + return 1; + if(ver==0 && version<2) + return 1; + if(ver==1 && version<2) + return 1; + if(ver<2 && version>1 && flags==0) // flag is not WEAK, so global works + return 1; + if(ver<2 || !symvername) + return 0; + return strcmp(vername, symvername)?0:1; +} + +uint16_t GetParentSymbolVersionFlag32(elfheader_t* h, int index) +{ + if(!h->VerDef._32 || (index<1)) + return (uint16_t)-1; + Elf32_Verdef *def = (Elf32_Verdef*)((uintptr_t)h->VerDef._32 + h->delta); + while(def) { + if(def->vd_ndx==index) { + return def->vd_flags; + } + def = def->vd_next?((Elf32_Verdef*)((uintptr_t)def + def->vd_next)):NULL; + } + return (uint16_t)-1; +} + +uint16_t GetSymbolVersionFlag32(elfheader_t* h, int version) +{ + if(version<2) + return (uint16_t)-1; + if(h->VerNeed._32) { + Elf32_Verneed *ver = (Elf32_Verneed*)((uintptr_t)h->VerNeed._32 + h->delta); + while(ver) { + Elf32_Vernaux *aux = (Elf32_Vernaux*)((uintptr_t)ver + ver->vn_aux); + for(int j=0; jvn_cnt; ++j) { + if(aux->vna_other==version) + return aux->vna_flags; + aux = (Elf32_Vernaux*)((uintptr_t)aux + aux->vna_next); + } + ver = ver->vn_next?((Elf32_Verneed*)((uintptr_t)ver + ver->vn_next)):NULL; + } + } + return GetParentSymbolVersionFlag32(h, version); // if symbol is "internal", use Def table instead +} + + +static Elf32_Sym* old_elf_lookup(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt) +{ + // Prepare hash table + const uint32_t *hashtab = (uint32_t*)(h->hash + h->delta); + const uint32_t nbuckets = hashtab[0]; + const uint32_t nchains = hashtab[1]; + const uint32_t *buckets = &hashtab[2]; + const uint32_t *chains = &buckets[nbuckets]; + // get hash from symname to lookup + const uint32_t hash = old_elf_hash(symname); + // Search for it + for (uint32_t i = buckets[hash % nbuckets]; i; i = chains[i]) { + const char* name = h->DynStr + h->DynSym._32[i].st_name; + if (!strcmp(symname, name) && SymbolMatch(h, i, ver, vername, local, veropt)) { + return &h->DynSym._32[i]; + } + } + return NULL; +} + + +static void old_elf_hash_dump(elfheader_t* h) +{ + // Prepare hash table + const uint32_t *hashtab = (uint32_t*)(h->hash + h->delta); + const uint32_t nbuckets = hashtab[0]; + const uint32_t nchains = hashtab[1]; + const uint32_t *buckets = &hashtab[2]; + const uint32_t *chains = &buckets[nbuckets]; + printf_log(LOG_NONE, "------------ Dump HASH from %s\n", h->name); + printf_log(LOG_NONE, "Buckets[%d] = \n", nbuckets); + for(uint32_t i=0; iDynStr + h->DynSym._32[buckets[i]].st_name; + printf_log(LOG_NONE, "%d: %s\n", buckets[i], name); + } + printf_log(LOG_NONE,"Chains[%d] = ", nchains); + for (uint32_t i = 0; ignu_hash + h->delta); + const uint32_t nbuckets = hashtab[0]; + const uint32_t symoffset = hashtab[1]; + const uint32_t bloom_size = hashtab[2]; + const uint32_t bloom_shift = hashtab[3]; + const uint32_t *blooms = (uint32_t*)&hashtab[4]; + const uint32_t *buckets = (uint32_t*)&blooms[bloom_size]; + const uint32_t *chains = &buckets[nbuckets]; + // get hash from symname to lookup + const uint32_t hash = new_elf_hash(symname); + // early check with bloom: if at least one bit is not set, a symbol is surely missing. + uint32_t word = blooms[(hash/32)%bloom_size]; + uint32_t mask = 0 + | 1LL << (hash%32) + | 1LL << ((hash>>bloom_shift)%32); + if ((word & mask) != mask) { + return NULL; + } + // now look at the bucket chain for the symbol + uint32_t symidx = buckets[hash%nbuckets]; + if (symidx < symoffset) + return NULL; + while(1) { + const char* name = h->DynStr + h->DynSym._32[symidx].st_name; + const uint32_t symhash = chains[symidx-symoffset]; + if ((hash|1) == (symhash|1) && !strcmp(name, symname) && SymbolMatch(h, symidx, ver, vername, local, veropt)) { + return &h->DynSym._32[symidx]; + } + if(symhash&1) + return NULL; + symidx++; + } +} + +static void new_elf_hash_dump(elfheader_t* h) +{ + // Prepare hash table + const uint32_t *hashtab = (uint32_t*)(h->gnu_hash + h->delta); + const uint32_t nbuckets = hashtab[0]; + const uint32_t symoffset = hashtab[1]; + const uint32_t bloom_size = hashtab[2]; + const uint32_t bloom_shift = hashtab[3]; + const uint32_t *blooms = (uint32_t*)&hashtab[4]; + const uint32_t *buckets = (uint32_t*)&blooms[bloom_size]; + const uint32_t *chains = &buckets[nbuckets]; + printf_log(LOG_NONE, "===============Dump GNU_HASH from %s\n", h->name); + printf_log(LOG_NONE, "Bloom: size=%d, shift=%d\n", bloom_size, bloom_shift); + printf_log(LOG_NONE, "Buckets[%d] offset=%d = \n", nbuckets, symoffset); + for(uint32_t i=0; i=symoffset) { + const char* name = h->DynStr + h->DynSym._32[symidx].st_name; + const uint32_t hash = chains[symidx-symoffset]; + if(hash&1) + symidx=0; + else + symidx++; + printf_log(LOG_NONE, " %s (%x) -> %d", name, hash, symidx); + } + printf_log(LOG_NONE, "\n"); + } + printf_log(LOG_NONE, "\n===============\n"); +} + +Elf32_Sym* ElfLookup32(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt) +{ + if(h->gnu_hash) + return new_elf_lookup(h, symname, ver, vername, local, veropt); + return old_elf_lookup(h, symname, ver, vername, local, veropt); +} + +Elf32_Sym* ElfSymTabLookup32(elfheader_t* h, const char* symname) +{ + if(!h->SymTab._32) + return 0; + for(size_t i=0; inumSymTab; ++i) { + Elf32_Sym* sym = &h->SymTab._32[i]; + int type = ELF32_ST_TYPE(sym->st_info); + if(type==STT_FUNC || type==STT_TLS || type==STT_OBJECT) { + const char * name = h->StrTab+sym->st_name; + if(name && !strcmp(symname, name)) + return sym; + } + } + return NULL; +} + +Elf32_Sym* ElfDynSymLookup32(elfheader_t* h, const char* symname) +{ + if(!h->DynSym._32) + return 0; + for(size_t i=0; inumDynSym; ++i) { + Elf32_Sym* sym = &h->DynSym._32[i]; + int type = ELF32_ST_TYPE(sym->st_info); + if(type==STT_FUNC || type==STT_TLS || type==STT_OBJECT) { + const char * name = h->DynStr+sym->st_name; + if(name && !strcmp(symname, name)) + return sym; + } + } + return NULL; +} diff --git a/src/elfs/elfload_dump.c b/src/elfs/elfload_dump.c index 62cedcf63c7b255568b831faca406dd002735956..2ec0d603fa09bb7e31eaa286c3da81c16d81805d 100644 --- a/src/elfs/elfload_dump.c +++ b/src/elfs/elfload_dump.c @@ -9,18 +9,14 @@ #include "elfload_dump.h" #include "elfloader_private.h" -#ifndef SHT_CHECKSUM -#define SHT_CHECKSUM 0x6ffffff8 -#endif - -const char* DumpSection(Elf64_Shdr *s, char* SST) { +static const char* DumpSection(Elf64_Shdr *s, char* SST) { static char buff[400]; switch (s->sh_type) { case SHT_NULL: return "SHT_NULL"; #define GO(A) \ case A: \ - sprintf(buff, #A " Name=\"%s\"(%d) off=0x%lX, size=%ld, attr=0x%04lX, addr=%p(%02lX), link/info=%d/%d", \ + sprintf(buff, #A " Name=\"%s\"(%d) off=0x%llX, size=%lld, attr=0x%04llX, addr=%p(%02llX), link/info=%d/%d", \ SST+s->sh_name, s->sh_name, s->sh_offset, s->sh_size, s->sh_flags, (void*)s->sh_addr, s->sh_addralign, s->sh_link, s->sh_info); \ break GO(SHT_PROGBITS); @@ -64,14 +60,14 @@ const char* DumpSection(Elf64_Shdr *s, char* SST) { return buff; } -const char* DumpDynamic(Elf64_Dyn *s) { +static const char* DumpDynamic(Elf64_Dyn *s) { static char buff[200]; switch (s->d_tag) { case DT_NULL: return "DT_NULL: End Dynamic Section"; #define GO(A, Add) \ case A: \ - sprintf(buff, #A " %s=0x%lX", (Add)?"Addr":"Val", (Add)?s->d_un.d_ptr:s->d_un.d_val); \ + sprintf(buff, #A " %s=0x%llX", (Add)?"Addr":"Val", (Add)?s->d_un.d_ptr:s->d_un.d_val); \ break GO(DT_NEEDED, 0); GO(DT_PLTRELSZ, 0); @@ -143,18 +139,18 @@ const char* DumpDynamic(Elf64_Dyn *s) { #endif #undef GO default: - sprintf(buff, "0x%lX unknown type", s->d_tag); + sprintf(buff, "0x%llX unknown type", s->d_tag); } return buff; } -const char* DumpPHEntry(Elf64_Phdr *e) +static const char* DumpPHEntry(Elf64_Phdr *e) { static char buff[500]; memset(buff, 0, sizeof(buff)); switch(e->p_type) { case PT_NULL: sprintf(buff, "type: %s", "PT_NULL"); break; - #define GO(T) case T: sprintf(buff, "type: %s, Off=%lx vaddr=%p paddr=%p filesz=%lu memsz=%lu flags=%x align=%lu", #T, e->p_offset, (void*)e->p_vaddr, (void*)e->p_paddr, e->p_filesz, e->p_memsz, e->p_flags, e->p_align); break + #define GO(T) case T: sprintf(buff, "type: %s, Off=%llx vaddr=%p paddr=%p filesz=%llu memsz=%llu flags=%x align=%llu", #T, e->p_offset, (void*)e->p_vaddr, (void*)e->p_paddr, e->p_filesz, e->p_memsz, e->p_flags, e->p_align); break GO(PT_LOAD); GO(PT_DYNAMIC); GO(PT_INTERP); @@ -170,12 +166,14 @@ const char* DumpPHEntry(Elf64_Phdr *e) GO(PT_GNU_RELRO); #endif #undef GO - default: sprintf(buff, "type: %x, Off=%lx vaddr=%p paddr=%p filesz=%lu memsz=%lu flags=%x align=%lu", e->p_type, e->p_offset, (void*)e->p_vaddr, (void*)e->p_paddr, e->p_filesz, e->p_memsz, e->p_flags, e->p_align); break; + default: sprintf(buff, "type: %x, Off=%llx vaddr=%p paddr=%p filesz=%llu memsz=%llu flags=%x align=%llu", e->p_type, e->p_offset, (void*)e->p_vaddr, (void*)e->p_paddr, e->p_filesz, e->p_memsz, e->p_flags, e->p_align); break; } return buff; } - -const char* DumpRelType(int t) +#ifndef BOX32 +const char* DumpRelType32(int t) { return NULL; } +#endif +const char* DumpRelType64(int t) { static char buff[50]; memset(buff, 0, sizeof(buff)); @@ -229,28 +227,34 @@ const char* DumpRelType(int t) return buff; } -const char* DumpSym(elfheader_t *h, Elf64_Sym* sym, int version) +static const char* DumpSym(elfheader_t *h, Elf64_Sym* sym, int version) { static char buff[4096]; const char* vername = (version==-1)?"(none)":((version==0)?"*local*":((version==1)?"*global*":GetSymbolVersion(h, version))); int veropt = GetSymbolVersionFlag(h, version)?0:1; memset(buff, 0, sizeof(buff)); - sprintf(buff, "\"%s\", value=%p, size=%ld, info/other=%d/%d index=%d (%sver=%d/%s)", + sprintf(buff, "\"%s\", value=%p, size=%lld, info/other=%d/%d index=%d (%sver=%d/%s)", h->DynStr+sym->st_name, (void*)sym->st_value, sym->st_size, sym->st_info, sym->st_other, sym->st_shndx, veropt?"opt":"", version, vername); return buff; } -const char* SymName(elfheader_t *h, Elf64_Sym* sym) +#ifndef BOX32 +const char* SymName32(elfheader_t *h, Elf32_Sym* sym) { return NULL; } +#endif +const char* SymName64(elfheader_t *h, Elf64_Sym* sym) { return h->DynStr+sym->st_name; } -const char* IdxSymName(elfheader_t *h, int sym) +static const char* IdxSymName(elfheader_t *h, int sym) { - return h->DynStr+h->DynSym[sym].st_name; + return h->DynStr+h->DynSym._64[sym].st_name; } -void DumpMainHeader(Elf64_Ehdr *header, elfheader_t *h) +#ifndef BOX32 +void DumpMainHeader32(Elf32_Ehdr *header, elfheader_t *h) { } +#endif +void DumpMainHeader64(Elf64_Ehdr *header, elfheader_t *h) { if(box64_dump) { printf_dump(LOG_NEVER, "ELF Dump main header\n"); @@ -266,108 +270,142 @@ void DumpMainHeader(Elf64_Ehdr *header, elfheader_t *h) printf_dump(LOG_NEVER, "ELF Dump PEntries (%zu)\n", h->numPHEntries); for (size_t i=0; inumPHEntries; ++i) - printf_dump(LOG_NEVER, " PHEntry %04zu : %s\n", i, DumpPHEntry(h->PHEntries+i)); + printf_dump(LOG_NEVER, " PHEntry %04zu : %s\n", i, DumpPHEntry(h->PHEntries._64+i)); printf_dump(LOG_NEVER, "ELF Dump PEntries ====\n"); printf_dump(LOG_NEVER, "ELF Dump Sections (%zu)\n", h->numSHEntries); for (size_t i=0; inumSHEntries; ++i) - printf_dump(LOG_NEVER, " Section %04zu : %s\n", i, DumpSection(h->SHEntries+i, h->SHStrTab)); + printf_dump(LOG_NEVER, " Section %04zu : %s\n", i, DumpSection(h->SHEntries._64+i, h->SHStrTab)); printf_dump(LOG_NEVER, "ELF Dump Sections ====\n"); } } - -void DumpSymTab(elfheader_t *h) +#ifndef BOX32 +void DumpSymTab32(elfheader_t *h) { } +#endif +void DumpSymTab64(elfheader_t *h) { - if(box64_dump && h->SymTab) { + if(box64_dump && h->SymTab._64) { const char* name = ElfName(h); printf_dump(LOG_NEVER, "ELF Dump SymTab(%zu)=\n", h->numSymTab); for (size_t i=0; inumSymTab; ++i) printf_dump(LOG_NEVER, " %s:SymTab[%zu] = \"%s\", value=%p, size=%ld, info/other=%d/%d index=%d\n", name, - i, h->StrTab+h->SymTab[i].st_name, (void*)h->SymTab[i].st_value, h->SymTab[i].st_size, - h->SymTab[i].st_info, h->SymTab[i].st_other, h->SymTab[i].st_shndx); + i, h->StrTab+h->SymTab._64[i].st_name, (void*)h->SymTab._64[i].st_value, h->SymTab._64[i].st_size, + h->SymTab._64[i].st_info, h->SymTab._64[i].st_other, h->SymTab._64[i].st_shndx); printf_dump(LOG_NEVER, "ELF Dump SymTab=====\n"); } } -void DumpDynamicSections(elfheader_t *h) +#ifndef BOX32 +void DumpDynamicSections32(elfheader_t *h) { } +#endif +void DumpDynamicSections64(elfheader_t *h) { - if(box64_dump && h->Dynamic) { + if(box64_dump && h->Dynamic._64) { printf_dump(LOG_NEVER, "ELF Dump Dynamic(%zu)=\n", h->numDynamic); for (size_t i=0; inumDynamic; ++i) - printf_dump(LOG_NEVER, " Dynamic %04zu : %s\n", i, DumpDynamic(h->Dynamic+i)); + printf_dump(LOG_NEVER, " Dynamic %04zu : %s\n", i, DumpDynamic(h->Dynamic._64+i)); printf_dump(LOG_NEVER, "ELF Dump Dynamic=====\n"); } } -void DumpDynSym(elfheader_t *h) +#ifndef BOX32 +void DumpDynSym32(elfheader_t *h) { } +#endif +void DumpDynSym64(elfheader_t *h) { - if(box64_dump && h->DynSym) { + if(box64_dump && h->DynSym._64) { const char* name = ElfName(h); printf_dump(LOG_NEVER, "ELF Dump DynSym(%zu)=\n", h->numDynSym); for (size_t i=0; inumDynSym; ++i) { int version = h->VerSym?((Elf64_Half*)((uintptr_t)h->VerSym+h->delta))[i]:-1; - printf_dump(LOG_NEVER, " %s:DynSym[%zu] = %s\n", name, i, DumpSym(h, h->DynSym+i, version)); + printf_dump(LOG_NEVER, " %s:DynSym[%zu] = %s\n", name, i, DumpSym(h, h->DynSym._64+i, version)); } printf_dump(LOG_NEVER, "ELF Dump DynSym=====\n"); } } +void DumpDynamicNeeded32(elfheader_t *h) +#ifndef BOX32 + { } +#else + ; +#endif void DumpDynamicNeeded(elfheader_t *h) { - if(box64_dump && h->DynStrTab) { - printf_dump(LOG_NEVER, "ELF Dump DT_NEEDED=====\n"); - for (size_t i=0; inumDynamic; ++i) - if(h->Dynamic[i].d_tag==DT_NEEDED) { - printf_dump(LOG_NEVER, " Needed : %s\n", h->DynStrTab+h->Dynamic[i].d_un.d_val + h->delta); - } - printf_dump(LOG_NEVER, "ELF Dump DT_NEEDED=====\n"); - } + if(box64_is32bits) + DumpDynamicNeeded32(h); + else + if(box64_dump && h->DynStrTab) { + printf_dump(LOG_NEVER, "ELF Dump DT_NEEDED=====\n"); + for (size_t i=0; inumDynamic; ++i) + if(h->Dynamic._64[i].d_tag==DT_NEEDED) { + printf_dump(LOG_NEVER, " Needed : %s\n", h->DynStrTab+h->Dynamic._64[i].d_un.d_val + h->delta); + } + printf_dump(LOG_NEVER, "ELF Dump DT_NEEDED=====\n"); + } } +void DumpDynamicRPath32(elfheader_t *h) +#ifndef BOX32 +{ } +#else + ; +#endif void DumpDynamicRPath(elfheader_t *h) { - if(box64_dump && h->DynStrTab) { - printf_dump(LOG_NEVER, "ELF Dump DT_RPATH/DT_RUNPATH=====\n"); - for (size_t i=0; inumDynamic; ++i) { - if(h->Dynamic[i].d_tag==DT_RPATH) { - printf_dump(LOG_NEVER, " RPATH : %s\n", h->DynStrTab+h->Dynamic[i].d_un.d_val + h->delta); - } - if(h->Dynamic[i].d_tag==DT_RUNPATH) { - printf_dump(LOG_NEVER, " RUNPATH : %s\n", h->DynStrTab+h->Dynamic[i].d_un.d_val + h->delta); + if(box64_is32bits) + DumpDynamicRPath32(h); + else + if(box64_dump && h->DynStrTab) { + printf_dump(LOG_NEVER, "ELF Dump DT_RPATH/DT_RUNPATH=====\n"); + for (size_t i=0; inumDynamic; ++i) { + if(h->Dynamic._64[i].d_tag==DT_RPATH) { + printf_dump(LOG_NEVER, " RPATH : %s\n", h->DynStrTab+h->Dynamic._64[i].d_un.d_val + h->delta); + } + if(h->Dynamic._64[i].d_tag==DT_RUNPATH) { + printf_dump(LOG_NEVER, " RUNPATH : %s\n", h->DynStrTab+h->Dynamic._64[i].d_un.d_val + h->delta); + } } + printf_dump(LOG_NEVER, "=====ELF Dump DT_RPATH/DT_RUNPATH\n"); } - printf_dump(LOG_NEVER, "=====ELF Dump DT_RPATH/DT_RUNPATH\n"); - } } -void DumpRelTable(elfheader_t *h, int cnt, Elf64_Rel *rel, const char* name) +#ifndef BOX32 +void DumpRelTable32(elfheader_t *h, int cnt, Elf32_Rel *rel, const char* name) { } +#endif +void DumpRelTable64(elfheader_t *h, int cnt, Elf64_Rel *rel, const char* name) { if(box64_dump) { const char* elfname = ElfName(h); printf_dump(LOG_NEVER, "ELF Dump %s Table(%d) @%p\n", name, cnt, rel); for (int i = 0; irela) { const char* elfname = ElfName(h); printf_dump(LOG_NEVER, "ELF Dump %s Table(%d) @%p\n", name, cnt, rela); for (int i = 0; irelr) { const char* elfname = ElfName(h); diff --git a/src/elfs/elfload_dump32.c b/src/elfs/elfload_dump32.c new file mode 100755 index 0000000000000000000000000000000000000000..b6d8df41b62ae2a542b16da2d3a593af347578e8 --- /dev/null +++ b/src/elfs/elfload_dump32.c @@ -0,0 +1,352 @@ +#include +#include +#include +#include + +#include "box64version.h" +#include "elfloader.h" +#include "debug.h" +#include "elfload_dump.h" +#include "elfloader_private.h" +#include "box32.h" + +static const char* DumpSection(Elf32_Shdr *s, char* SST) { + static char buff[400]; + switch (s->sh_type) { + case SHT_NULL: + return "SHT_NULL"; + #define GO(A) \ + case A: \ + sprintf(buff, #A " Name=\"%s\"(%d) off=0x%X, size=%d, attr=0x%04X, addr=%p(%02X), link/info=%d/%d", \ + SST+s->sh_name, s->sh_name, s->sh_offset, s->sh_size, s->sh_flags, from_ptrv(s->sh_addr), s->sh_addralign, s->sh_link, s->sh_info); \ + break + GO(SHT_PROGBITS); + GO(SHT_SYMTAB); + GO(SHT_STRTAB); + GO(SHT_RELA); + GO(SHT_HASH); + GO(SHT_DYNAMIC); + GO(SHT_NOTE); + GO(SHT_NOBITS); + GO(SHT_REL); + GO(SHT_SHLIB); + GO(SHT_DYNSYM); + GO(SHT_INIT_ARRAY); + GO(SHT_FINI_ARRAY); + GO(SHT_PREINIT_ARRAY); + GO(SHT_GROUP); + GO(SHT_SYMTAB_SHNDX); + GO(SHT_NUM); + GO(SHT_LOPROC); + GO(SHT_HIPROC); + GO(SHT_LOUSER); + GO(SHT_HIUSER); + #if defined(SHT_GNU_versym) && defined(SHT_GNU_ATTRIBUTES) + GO(SHT_GNU_versym); + GO(SHT_GNU_ATTRIBUTES); + GO(SHT_GNU_HASH); + GO(SHT_GNU_LIBLIST); + GO(SHT_CHECKSUM); + GO(SHT_LOSUNW); + //GO(SHT_SUNW_move); + GO(SHT_SUNW_COMDAT); + GO(SHT_SUNW_syminfo); + GO(SHT_GNU_verdef); + GO(SHT_GNU_verneed); + #endif + #undef GO + default: + sprintf(buff, "0x%X unknown type", s->sh_type); + } + return buff; +} + +static const char* DumpDynamic(Elf32_Dyn *s) { + static char buff[200]; + switch (s->d_tag) { + case DT_NULL: + return "DT_NULL: End Dynamic Section"; + #define GO(A, Add) \ + case A: \ + sprintf(buff, #A " %s=0x%X", (Add)?"Addr":"Val", (Add)?s->d_un.d_ptr:s->d_un.d_val); \ + break + GO(DT_NEEDED, 0); + GO(DT_PLTRELSZ, 0); + GO(DT_PLTGOT, 1); + GO(DT_HASH, 1); + GO(DT_STRTAB, 1); + GO(DT_SYMTAB, 1); + GO(DT_RELA, 1); + GO(DT_RELASZ, 0); + GO(DT_RELAENT, 0); + GO(DT_STRSZ, 0); + GO(DT_SYMENT, 0); + GO(DT_INIT, 1); + GO(DT_FINI, 1); + GO(DT_SONAME, 0); + GO(DT_RPATH, 0); + GO(DT_SYMBOLIC, 0); + GO(DT_REL, 1); + GO(DT_RELSZ, 0); + GO(DT_RELENT, 0); + GO(DT_PLTREL, 0); + GO(DT_DEBUG, 0); + GO(DT_TEXTREL, 0); + GO(DT_JMPREL, 1); + GO(DT_BIND_NOW, 1); + GO(DT_INIT_ARRAY, 1); + GO(DT_FINI_ARRAY, 1); + GO(DT_INIT_ARRAYSZ, 0); + GO(DT_FINI_ARRAYSZ, 0); + GO(DT_RUNPATH, 0); + GO(DT_FLAGS, 0); + GO(DT_ENCODING, 0); + #if defined(DT_NUM) && defined(DT_TLSDESC_PLT) + GO(DT_NUM, 0); + GO(DT_VALRNGLO, 0); + GO(DT_GNU_PRELINKED, 0); + GO(DT_GNU_CONFLICTSZ, 0); + GO(DT_GNU_LIBLISTSZ, 0); + GO(DT_CHECKSUM, 0); + GO(DT_PLTPADSZ, 0); + GO(DT_MOVEENT, 0); + GO(DT_MOVESZ, 0); + GO(DT_FEATURE_1, 0); + GO(DT_POSFLAG_1, 0); + GO(DT_SYMINSZ, 0); + GO(DT_SYMINENT, 0); + GO(DT_ADDRRNGLO, 0); + GO(DT_GNU_HASH, 0); + GO(DT_TLSDESC_PLT, 0); + GO(DT_TLSDESC_GOT, 0); + GO(DT_GNU_CONFLICT, 0); + GO(DT_GNU_LIBLIST, 0); + GO(DT_CONFIG, 0); + GO(DT_DEPAUDIT, 0); + GO(DT_AUDIT, 0); + GO(DT_PLTPAD, 0); + GO(DT_MOVETAB, 0); + GO(DT_SYMINFO, 0); + GO(DT_VERSYM, 0); + GO(DT_RELACOUNT, 0); + GO(DT_RELCOUNT, 0); + GO(DT_FLAGS_1, 0); + GO(DT_VERDEF, 0); + GO(DT_VERDEFNUM, 0); + GO(DT_VERNEED, 0); + GO(DT_VERNEEDNUM, 0); + GO(DT_AUXILIARY, 0); + GO(DT_FILTER, 0); + #endif + #undef GO + default: + sprintf(buff, "0x%X unknown type", s->d_tag); + } + return buff; +} + +static const char* DumpPHEntry(Elf32_Phdr *e) +{ + static char buff[500]; + memset(buff, 0, sizeof(buff)); + switch(e->p_type) { + case PT_NULL: sprintf(buff, "type: %s", "PT_NULL"); break; + #define GO(T) case T: sprintf(buff, "type: %s, Off=%x vaddr=%p paddr=%p filesz=%u memsz=%u flags=%x align=%u", #T, e->p_offset, from_ptrv(e->p_vaddr), from_ptrv(e->p_paddr), e->p_filesz, e->p_memsz, e->p_flags, e->p_align); break + GO(PT_LOAD); + GO(PT_DYNAMIC); + GO(PT_INTERP); + GO(PT_NOTE); + GO(PT_SHLIB); + GO(PT_PHDR); + GO(PT_TLS); + #ifdef PT_NUM + GO(PT_NUM); + GO(PT_LOOS); + GO(PT_GNU_EH_FRAME); + GO(PT_GNU_STACK); + GO(PT_GNU_RELRO); + #endif + #undef GO + default: sprintf(buff, "type: %x, Off=%x vaddr=%p paddr=%p filesz=%u memsz=%u flags=%x align=%u", e->p_type, e->p_offset, from_ptrv(e->p_vaddr), from_ptrv(e->p_paddr), e->p_filesz, e->p_memsz, e->p_flags, e->p_align); break; + } + return buff; +} + +const char* DumpRelType32(int t) +{ + static char buff[50]; + memset(buff, 0, sizeof(buff)); + switch(t) { + #define GO(T) case T: sprintf(buff, "type: %s", #T); break + GO(R_386_NONE); + GO(R_386_32); + GO(R_386_PC32); + GO(R_386_GOT32); + GO(R_386_PLT32); + GO(R_386_COPY); + GO(R_386_GLOB_DAT); + GO(R_386_JMP_SLOT); + GO(R_386_RELATIVE); + GO(R_386_GOTOFF); + GO(R_386_GOTPC); + GO(R_386_PC8); + GO(R_386_TLS_TPOFF); + GO(R_386_TLS_GD_32); + GO(R_386_TLS_DTPMOD32); + GO(R_386_TLS_DTPOFF32); + GO(R_386_TLS_TPOFF32); + #undef GO + default: sprintf(buff, "type: 0x%x (unknown)", t); break; + } + return buff; +} + +static const char* DumpSym(elfheader_t *h, Elf32_Sym* sym, int version) +{ + static char buff[4096]; + const char* vername = (version==-1)?"(none)":((version==0)?"*local*":((version==1)?"*global*":GetSymbolVersion(h, version))); + memset(buff, 0, sizeof(buff)); + sprintf(buff, "\"%s\", value=%p, size=%d, info/other=%d/%d index=%d (ver=%d/%s)", + h->DynStr+sym->st_name, from_ptrv(sym->st_value), sym->st_size, + sym->st_info, sym->st_other, sym->st_shndx, version, vername); + return buff; +} + +const char* SymName32(elfheader_t *h, Elf32_Sym* sym) +{ + return h->DynStr+sym->st_name; +} +static const char* IdxSymName(elfheader_t *h, int sym) +{ + return h->DynStr+h->DynSym._32[sym].st_name; +} + +void DumpMainHeader32(Elf32_Ehdr *header, elfheader_t *h) +{ + if(box64_dump) { + printf_dump(LOG_NEVER, "ELF Dump main header\n"); + printf_dump(LOG_NEVER, " Entry point = %p\n", from_ptrv(header->e_entry)); + printf_dump(LOG_NEVER, " Program Header table offset = %p\n", from_ptrv(header->e_phoff)); + printf_dump(LOG_NEVER, " Section Header table offset = %p\n", from_ptrv(header->e_shoff)); + printf_dump(LOG_NEVER, " Flags = 0x%X\n", header->e_flags); + printf_dump(LOG_NEVER, " ELF Header size = %d\n", header->e_ehsize); + printf_dump(LOG_NEVER, " Program Header Entry num/size = %d(%d)/%d\n", h->numPHEntries, header->e_phnum, header->e_phentsize); + printf_dump(LOG_NEVER, " Section Header Entry num/size = %d(%d)/%d\n", h->numSHEntries, header->e_shnum, header->e_shentsize); + printf_dump(LOG_NEVER, " Section Header index num = %d(%d)\n", h->SHIdx, header->e_shstrndx); + printf_dump(LOG_NEVER, "ELF Dump ==========\n"); + + printf_dump(LOG_NEVER, "ELF Dump PEntries (%d)\n", h->numSHEntries); + for (int i=0; inumPHEntries; ++i) + printf_dump(LOG_NEVER, " PHEntry %04d : %s\n", i, DumpPHEntry(h->PHEntries._32+i)); + printf_dump(LOG_NEVER, "ELF Dump PEntries ====\n"); + + printf_dump(LOG_NEVER, "ELF Dump Sections (%d)\n", h->numSHEntries); + for (int i=0; inumSHEntries; ++i) + printf_dump(LOG_NEVER, " Section %04d : %s\n", i, DumpSection(h->SHEntries._32+i, h->SHStrTab)); + printf_dump(LOG_NEVER, "ELF Dump Sections ====\n"); + } +} + +void DumpSymTab32(elfheader_t *h) +{ + if(box64_dump && h->SymTab._32) { + const char* name = ElfName(h); + printf_dump(LOG_NEVER, "ELF Dump SymTab(%d)=\n", h->numSymTab); + for (int i=0; inumSymTab; ++i) + printf_dump(LOG_NEVER, " %s:SymTab[%d] = \"%s\", value=%p, size=%d, info/other=%d/%d index=%d\n", name, + i, h->StrTab+h->SymTab._32[i].st_name, from_ptrv(h->SymTab._32[i].st_value), h->SymTab._32[i].st_size, + h->SymTab._32[i].st_info, h->SymTab._32[i].st_other, h->SymTab._32[i].st_shndx); + printf_dump(LOG_NEVER, "ELF Dump SymTab=====\n"); + } +} + +void DumpDynamicSections32(elfheader_t *h) +{ + if(box64_dump && h->Dynamic._32) { + printf_dump(LOG_NEVER, "ELF Dump Dynamic(%d)=\n", h->numDynamic); + for (int i=0; inumDynamic; ++i) + printf_dump(LOG_NEVER, " Dynamic %04d : %s\n", i, DumpDynamic(h->Dynamic._32+i)); + printf_dump(LOG_NEVER, "ELF Dump Dynamic=====\n"); + } +} + +void DumpDynSym32(elfheader_t *h) +{ + if(box64_dump && h->DynSym._32) { + const char* name = ElfName(h); + printf_dump(LOG_NEVER, "ELF Dump DynSym(%d)=\n", h->numDynSym); + for (int i=0; inumDynSym; ++i) { + int version = h->VerSym?((Elf32_Half*)((uintptr_t)h->VerSym+h->delta))[i]:-1; + printf_dump(LOG_NEVER, " %s:DynSym[%d] = %s\n", name, i, DumpSym(h, h->DynSym._32+i, version)); + } + printf_dump(LOG_NEVER, "ELF Dump DynSym=====\n"); + } +} + +void DumpDynamicNeeded32(elfheader_t *h) +{ + if(box64_dump && h->DynStrTab) { + printf_dump(LOG_NEVER, "ELF Dump DT_NEEDED=====\n"); + for (int i=0; inumDynamic; ++i) + if(h->Dynamic._32[i].d_tag==DT_NEEDED) { + printf_dump(LOG_NEVER, " Needed : %s\n", h->DynStrTab+h->Dynamic._32[i].d_un.d_val + h->delta); + } + printf_dump(LOG_NEVER, "ELF Dump DT_NEEDED=====\n"); + } +} + +void DumpDynamicRPath32(elfheader_t *h) +{ + if(box64_dump && h->DynStrTab) { + printf_dump(LOG_NEVER, "ELF Dump DT_RPATH/DT_RUNPATH=====\n"); + for (int i=0; inumDynamic; ++i) { + if(h->Dynamic._32[i].d_tag==DT_RPATH) { + printf_dump(LOG_NEVER, " RPATH : %s\n", h->DynStrTab+h->Dynamic._32[i].d_un.d_val + h->delta); + } + if(h->Dynamic._32[i].d_tag==DT_RUNPATH) { + printf_dump(LOG_NEVER, " RUNPATH : %s\n", h->DynStrTab+h->Dynamic._32[i].d_un.d_val + h->delta); + } + } + printf_dump(LOG_NEVER, "=====ELF Dump DT_RPATH/DT_RUNPATH\n"); + } +} + +void DumpRelTable32(elfheader_t *h, int cnt, Elf32_Rel *rel, const char* name) +{ + if(box64_dump) { + const char* elfname = ElfName(h); + printf_dump(LOG_NEVER, "ELF Dump %s Table(%d) @%p\n", name, cnt, rel); + for (int i = 0; irela) { + const char* elfname = ElfName(h); + printf_dump(LOG_NEVER, "ELF Dump %s Table(%d) @%p\n", name, cnt, rela); + for (int i = 0; irelr) { + const char* elfname = ElfName(h); + printf_dump(LOG_NEVER, "ELF Dump %s Table(%d) @%p\n", name, cnt, relr); + for (int i = 0; ielfsize; ++i) if(ctx->elfs[i]==head) return i; @@ -55,7 +55,7 @@ int getElfIndex(box64context_t* ctx, elfheader_t* head) { elfheader_t* LoadAndCheckElfHeader(FILE* f, const char* name, int exec) { - elfheader_t *h = ParseElfHeader(f, name, exec); + elfheader_t *h = box64_is32bits?ParseElfHeader32(f, name, exec):ParseElfHeader64(f, name, exec); if(!h) return NULL; @@ -80,14 +80,14 @@ void FreeElfHeader(elfheader_t** head) if(my_context) RemoveElfHeader(my_context, h); - box_free(h->PHEntries); - box_free(h->SHEntries); + box_free(h->PHEntries._64); //_64 or _32 doesn't mater for free, it's the same address + box_free(h->SHEntries._64); box_free(h->SHStrTab); box_free(h->StrTab); - box_free(h->Dynamic); + box_free(h->Dynamic._64); box_free(h->DynStr); - box_free(h->SymTab); - box_free(h->DynSym); + box_free(h->SymTab._64); + box_free(h->DynSym._64); FreeElfMemory(h); @@ -105,13 +105,23 @@ int CalcLoadAddr(elfheader_t* head) head->memsz = 0; head->paddr = head->vaddr = ~(uintptr_t)0; head->align = box64_pagesize; - for (size_t i=0; inumPHEntries; ++i) - if(head->PHEntries[i].p_type == PT_LOAD) { - if(head->paddr > (uintptr_t)head->PHEntries[i].p_paddr) - head->paddr = (uintptr_t)head->PHEntries[i].p_paddr; - if(head->vaddr > (uintptr_t)head->PHEntries[i].p_vaddr) - head->vaddr = (uintptr_t)head->PHEntries[i].p_vaddr; - } + if(box64_is32bits) { + for (size_t i=0; inumPHEntries; ++i) + if(head->PHEntries._32[i].p_type == PT_LOAD) { + if(head->paddr > (uintptr_t)head->PHEntries._32[i].p_paddr) + head->paddr = (uintptr_t)head->PHEntries._32[i].p_paddr; + if(head->vaddr > (uintptr_t)head->PHEntries._32[i].p_vaddr) + head->vaddr = (uintptr_t)head->PHEntries._32[i].p_vaddr; + } + } else { + for (size_t i=0; inumPHEntries; ++i) + if(head->PHEntries._64[i].p_type == PT_LOAD) { + if(head->paddr > (uintptr_t)head->PHEntries._64[i].p_paddr) + head->paddr = (uintptr_t)head->PHEntries._64[i].p_paddr; + if(head->vaddr > (uintptr_t)head->PHEntries._64[i].p_vaddr) + head->vaddr = (uintptr_t)head->PHEntries._64[i].p_vaddr; + } + } if(head->vaddr==~(uintptr_t)0 || head->paddr==~(uintptr_t)0) { printf_log(LOG_NONE, "Error: v/p Addr for Elf Load not set\n"); @@ -120,31 +130,58 @@ int CalcLoadAddr(elfheader_t* head) head->stacksz = 1024*1024; //1M stack size default? head->stackalign = 16; // default align for stack - for (size_t i=0; inumPHEntries; ++i) { - if(head->PHEntries[i].p_type == PT_LOAD) { - uintptr_t phend = head->PHEntries[i].p_vaddr - head->vaddr + head->PHEntries[i].p_memsz; - if(phend > head->memsz) - head->memsz = phend; - if(head->PHEntries[i].p_align > head->align) - head->align = head->PHEntries[i].p_align; - } - if(head->PHEntries[i].p_type == PT_GNU_STACK) { - if(head->stacksz < head->PHEntries[i].p_memsz) - head->stacksz = head->PHEntries[i].p_memsz; - if(head->stackalign < head->PHEntries[i].p_align) - head->stackalign = head->PHEntries[i].p_align; + if(box64_is32bits) + for (size_t i=0; inumPHEntries; ++i) { + if(head->PHEntries._32[i].p_type == PT_LOAD) { + uintptr_t phend = head->PHEntries._32[i].p_vaddr - head->vaddr + head->PHEntries._32[i].p_memsz; + if(phend > head->memsz) + head->memsz = phend; + if(head->PHEntries._32[i].p_align > head->align) + head->align = head->PHEntries._32[i].p_align; + } + if(head->PHEntries._32[i].p_type == PT_GNU_STACK) { + if(head->stacksz < head->PHEntries._32[i].p_memsz) + head->stacksz = head->PHEntries._32[i].p_memsz; + if(head->stackalign < head->PHEntries._32[i].p_align) + head->stackalign = head->PHEntries._32[i].p_align; + } + if(head->PHEntries._32[i].p_type == PT_TLS) { + head->tlsaddr = head->PHEntries._32[i].p_vaddr; + head->tlssize = head->PHEntries._32[i].p_memsz; + head->tlsfilesize = head->PHEntries._32[i].p_filesz; + head->tlsalign = head->PHEntries._32[i].p_align; + // force alignement... + if(head->tlsalign>1) + while(head->tlssize&(head->tlsalign-1)) + head->tlssize++; + } } - if(head->PHEntries[i].p_type == PT_TLS) { - head->tlsaddr = head->PHEntries[i].p_vaddr; - head->tlssize = head->PHEntries[i].p_memsz; - head->tlsfilesize = head->PHEntries[i].p_filesz; - head->tlsalign = head->PHEntries[i].p_align; - // force alignement... - if(head->tlsalign>1) - while(head->tlssize&(head->tlsalign-1)) - head->tlssize++; + else + for (size_t i=0; inumPHEntries; ++i) { + if(head->PHEntries._64[i].p_type == PT_LOAD) { + uintptr_t phend = head->PHEntries._64[i].p_vaddr - head->vaddr + head->PHEntries._64[i].p_memsz; + if(phend > head->memsz) + head->memsz = phend; + if(head->PHEntries._64[i].p_align > head->align) + head->align = head->PHEntries._64[i].p_align; + } + if(head->PHEntries._64[i].p_type == PT_GNU_STACK) { + if(head->stacksz < head->PHEntries._64[i].p_memsz) + head->stacksz = head->PHEntries._64[i].p_memsz; + if(head->stackalign < head->PHEntries._64[i].p_align) + head->stackalign = head->PHEntries._64[i].p_align; + } + if(head->PHEntries._64[i].p_type == PT_TLS) { + head->tlsaddr = head->PHEntries._64[i].p_vaddr; + head->tlssize = head->PHEntries._64[i].p_memsz; + head->tlsfilesize = head->PHEntries._64[i].p_filesz; + head->tlsalign = head->PHEntries._64[i].p_align; + // force alignement... + if(head->tlsalign>1) + while(head->tlssize&(head->tlsalign-1)) + head->tlssize++; + } } - } printf_log(LOG_DEBUG, "Elf Addr(v/p)=%p/%p Memsize=0x%zx (align=0x%zx)\n", (void*)head->vaddr, (void*)head->paddr, head->memsz, head->align); printf_log(LOG_DEBUG, "Elf Stack Memsize=%zu (align=%zu)\n", head->stacksz, head->stackalign); printf_log(LOG_DEBUG, "Elf TLS Memsize=%zu (align=%zu)\n", head->tlssize, head->tlsalign); @@ -165,8 +202,16 @@ const char* ElfPath(elfheader_t* head) return head->path; } +int AllocLoadElfMemory32(box64context_t* context, elfheader_t* head, int mainbin) +#ifndef BOX32 +{ return 1; } +#else + ; +#endif int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin) { + if(box64_is32bits) + return AllocLoadElfMemory32(context, head, mainbin); uintptr_t offs = 0; loadProtectionFromMap(); int log_level = box64_load_addr?LOG_INFO:LOG_DEBUG; @@ -174,7 +219,7 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin) head->multiblock_n = 0; // count PHEntrie with LOAD uintptr_t max_align = head->align-1; for (size_t i=0; inumPHEntries; ++i) - if(head->PHEntries[i].p_type == PT_LOAD && head->PHEntries[i].p_flags) { + if(head->PHEntries._64[i].p_type == PT_LOAD && head->PHEntries._64[i].p_flags) { ++head->multiblock_n; } @@ -195,6 +240,13 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin) image = (void*)(((uintptr_t)raw+max_align)&~max_align); } else { image = raw = mmap64((void*)head->vaddr, sz, 0, MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); + if(head->vaddr&(box64_pagesize-1)) { + // load address might be lower + if((uintptr_t)image == (head->vaddr&~(box64_pagesize-1))) { + image = (void*)head->vaddr; + sz += ((uintptr_t)image)-((uintptr_t)raw); + } + } } if(image!=MAP_FAILED && !head->vaddr && image!=(void*)offs) { printf_log(LOG_INFO, "%s: Mmap64 for (@%p 0x%zx) for elf \"%s\" returned %p(%p/0x%zx) instead\n", (((uintptr_t)image)&max_align)?"Error":"Warning", (void*)(head->vaddr?head->vaddr:offs), head->memsz, head->name, image, raw, head->align); @@ -230,8 +282,8 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin) head->memory = (char*)0xffffffffffffffff; int n = 0; for (size_t i=0; inumPHEntries; ++i) { - if(head->PHEntries[i].p_type == PT_LOAD && head->PHEntries[i].p_flags) { - Elf64_Phdr * e = &head->PHEntries[i]; + if(head->PHEntries._64[i].p_type == PT_LOAD && head->PHEntries._64[i].p_flags) { + Elf64_Phdr * e = &head->PHEntries._64[i]; head->multiblocks[n].flags = e->p_flags; head->multiblocks[n].offs = e->p_offset; @@ -280,7 +332,7 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin) size_t asize = head->multiblocks[n].asize+(head->multiblocks[n].paddr-paddr); void* p = MAP_FAILED; if(paddr==(paddr&~(box64_pagesize-1)) && (asize==ALIGN(asize))) { - printf_dump(log_level, "Mmapping 0x%zx (0x%zx) bytes @%p, will read 0x%zx @%p for Elf \"%s\"\n", asize, e->p_memsz, (void*)paddr, e->p_filesz, (void*)head->multiblocks[n].paddr, head->name); + printf_dump(log_level, "Allocating 0x%zx (0x%zx) bytes @%p, will read 0x%zx @%p for Elf \"%s\"\n", asize, e->p_memsz, (void*)paddr, e->p_filesz, (void*)head->multiblocks[n].paddr, head->name); p = mmap64( (void*)paddr, asize, @@ -350,8 +402,8 @@ int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin) head->memory = (char*)head->multiblocks[n].p; ++n; } - if(head->PHEntries[i].p_type == PT_TLS) { - Elf64_Phdr * e = &head->PHEntries[i]; + if(head->PHEntries._64[i].p_type == PT_TLS) { + Elf64_Phdr * e = &head->PHEntries._64[i]; char* dest = (char*)(context->tlsdata+context->tlssize+head->tlsbase); printf_log(LOG_DEBUG, "Loading TLS block #%zu @%p (0x%zx/0x%zx)\n", i, dest, e->p_filesz, e->p_memsz); if(e->p_filesz) { @@ -400,7 +452,7 @@ int isElfHasNeededVer(elfheader_t* head, const char* libname, elfheader_t* verne { if(!verneeded || !head) return 1; - if(!head->VerDef || !verneeded->VerNeed) + if(!head->VerDef._64 || !verneeded->VerNeed._64) return 1; int cnt = GetNeededVersionCnt(verneeded, libname); for (int i=0; iSymTab && addr>=(uintptr_t)h->SymTab && addr<(uintptr_t)&h->SymTab[h->numSymTab]) + if(h->SymTab._64 && addr>=(uintptr_t)h->SymTab._64 && addr<(uintptr_t)&h->SymTab._64[h->numSymTab]) return 1; - if(h->DynSym && addr>=(uintptr_t)h->DynSym && addr<(uintptr_t)&h->DynSym[h->numDynSym]) + if(h->DynSym._64 && addr>=(uintptr_t)h->DynSym._64 && addr<(uintptr_t)&h->DynSym._64[h->numDynSym]) return 1; return 0; } @@ -435,7 +487,7 @@ static elfheader_t* FindElfSymbol(box64context_t *context, Elf64_Sym* sym) return NULL; } -int FindR64COPYRel(elfheader_t* h, const char* name, uintptr_t *offs, uint64_t** p, size_t size, int version, const char* vername, int veropt) +static int FindR64COPYRel(elfheader_t* h, const char* name, uintptr_t *offs, uint64_t** p, size_t size, int version, const char* vername, int veropt) { if(!h) return 0; @@ -445,8 +497,8 @@ int FindR64COPYRel(elfheader_t* h, const char* name, uintptr_t *offs, uint64_t** int cnt = h->relasz / h->relaent; for (int i=0; iDynSym[ELF64_R_SYM(rela[i].r_info)]; - const char* symname = SymName(h, sym); + Elf64_Sym *sym = &h->DynSym._64[ELF64_R_SYM(rela[i].r_info)]; + const char* symname = SymName64(h, sym); if((t==R_X86_64_COPY) && symname && !strcmp(symname, name) && (sym->st_size==size)) { int version2 = h->VerSym?((Elf64_Half*)((uintptr_t)h->VerSym+h->delta))[ELF64_R_SYM(rela[i].r_info)]:-1; if(version2!=-1) version2 &= 0x7fff; @@ -464,7 +516,7 @@ int FindR64COPYRel(elfheader_t* h, const char* name, uintptr_t *offs, uint64_t** return 0; } -int RelocateElfREL(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head, int cnt, Elf64_Rel *rel) +static int RelocateElfREL(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head, int cnt, Elf64_Rel *rel) { printf_log(LOG_NONE, "Error: REL type of Relocation unsupported (only RELA)\n"); return 1; @@ -483,7 +535,7 @@ EXPORT uintptr_t my__dl_tlsdesc_undefweak(x64emu_t* emu) return td->arg; } -void GrabX64CopyMainElfReloc(elfheader_t* head) +static void GrabX64CopyMainElfReloc(elfheader_t* head) { if(head->rela) { int cnt = head->relasz / head->relaent; @@ -492,8 +544,8 @@ void GrabX64CopyMainElfReloc(elfheader_t* head) for (int i=0; iDynSym[ELF64_R_SYM(rela[i].r_info)]; - const char* symname = SymName(head, sym); + Elf64_Sym *sym = &head->DynSym._64[ELF64_R_SYM(rela[i].r_info)]; + const char* symname = SymName64(head, sym); int version = head->VerSym?((Elf64_Half*)((uintptr_t)head->VerSym+head->delta))[ELF64_R_SYM(rela[i].r_info)]:-1; if(version!=-1) version &=0x7fff; const char* vername = GetSymbolVersion(head, version); @@ -505,21 +557,6 @@ void GrabX64CopyMainElfReloc(elfheader_t* head) } } } -void CheckGNUUniqueBindings(elfheader_t* head) -{ - if(head->rela) { - int cnt = head->relasz / head->relaent; - Elf64_Rela* rela = (Elf64_Rela *)(head->rela + head->delta); - printf_dump(LOG_DEBUG, "Checking for symbol with STB_GNU_UNIQUE bindingsfor %s\n", head->name); - for (int i=0; ignuunique = 1; - return; // can stop searching - } - } - } -} static elfheader_t* checkElfLib(elfheader_t* h, library_t* lib) { @@ -531,15 +568,15 @@ static elfheader_t* checkElfLib(elfheader_t* h, library_t* lib) return h; } -int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head, int cnt, Elf64_Rela *rela, int* need_resolv) +static int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head, int cnt, Elf64_Rela *rela, int* need_resolv) { int ret_ok = 0; for (int i=0; iDynSym[ELF64_R_SYM(rela[i].r_info)]; + Elf64_Sym *sym = &head->DynSym._64[ELF64_R_SYM(rela[i].r_info)]; int bind = ELF64_ST_BIND(sym->st_info); //uint64_t ndx = sym->st_shndx; - const char* symname = SymName(head, sym); + const char* symname = SymName64(head, sym); uint64_t *p = (uint64_t*)(rela[i].r_offset + head->delta); uintptr_t offs = 0; uintptr_t end = 0; @@ -554,7 +591,11 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbin Elf64_Sym* elfsym = NULL; int vis = ELF64_ST_VISIBILITY(sym->st_other); if(vis==STV_PROTECTED) { - elfsym = ElfDynSymLookup(head, symname); + elfsym = ElfDynSymLookup64(head, symname); + if(elfsym) { + offs = elfsym->st_value + head->delta; + end = offs + elfsym->st_size; + } printf_log(LOG_DEBUG, "Symbol %s from %s is PROTECTED\n", symname, head->name); } else { if(bind==STB_GNU_UNIQUE) { @@ -566,7 +607,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbin offs = sym->st_value + head->delta; end = offs + sym->st_size; } else { - elfsym = ElfDynSymLookup(head, symname); + elfsym = ElfDynSymLookup64(head, symname); if(elfsym && elfsym->st_shndx) { offs = elfsym->st_value + head->delta; end = offs + elfsym->st_size; @@ -695,7 +736,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbin if(offs!=globoffs) { offs = globoffs; sym_elf = my_context->elfs[0]; - elfsym = ElfDynSymLookup(sym_elf, symname); + elfsym = ElfDynSymLookup64(sym_elf, symname); } } if (!offs && !elfsym) { @@ -718,11 +759,11 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbin } if(sym_elf) { delta = *(int64_t*)p; - printf_dump(LOG_NEVER, "Applying %s %s on %s @%p (%ld -> %ld+%ld+%ld, size=%ld)\n", BindSym(bind), DumpRelType(t), symname, p, delta, sym_elf->tlsbase, (int64_t)offs, rela[i].r_addend, end-offs); + printf_dump(LOG_NEVER, "Applying %s %s on %s @%p (%ld -> %ld+%ld+%ld, size=%ld)\n", BindSym(bind), DumpRelType64(t), symname, p, delta, sym_elf->tlsbase, (int64_t)offs, rela[i].r_addend, end-offs); *p = (uintptr_t)((int64_t)offs + rela[i].r_addend + sym_elf->tlsbase); if(sym_elf && sym_elf!=last_elf && sym_elf!=head) last_elf = checkElfLib(head, sym_elf->lib); } else { - printf_log(LOG_INFO, "Warning, cannot apply %s %s on %s @%p (%ld), no elf_header found\n", BindSym(bind), DumpRelType(t), symname, p, (int64_t)offs); + printf_log(LOG_INFO, "Warning, cannot apply %s %s on %s @%p (%ld), no elf_header found\n", BindSym(bind), DumpRelType64(t), symname, p, (int64_t)offs); } } break; @@ -779,13 +820,13 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbin } break; default: - printf_log(LOG_INFO, "Warning, don't know of to handle rela #%d %s on %s\n", i, DumpRelType(ELF64_R_TYPE(rela[i].r_info)), symname); + printf_log(LOG_INFO, "Warning, don't know of to handle rela #%d %s on %s\n", i, DumpRelType64(ELF64_R_TYPE(rela[i].r_info)), symname); } } return bindnow?ret_ok:0; } -int RelocateElfRELR(elfheader_t *head, int cnt, Elf64_Relr *relr) { +static int RelocateElfRELR(elfheader_t *head, int cnt, Elf64_Relr *relr) { Elf64_Addr *where = NULL; for (int i = 0; i < cnt; i++) { Elf64_Relr p = relr[i]; @@ -805,7 +846,13 @@ int RelocateElfRELR(elfheader_t *head, int cnt, Elf64_Relr *relr) { return 0; } -int RelocateElf(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) +int RelocateElf32(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) +#ifndef BOX32 +{ return -1; } +#else + ; +#endif +int RelocateElf64(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) { if((head->flags&DF_BIND_NOW) && !bindnow) { bindnow = 1; @@ -813,29 +860,39 @@ int RelocateElf(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, e } if(head->relr) { int cnt = head->relrsz / head->relrent; - DumpRelRTable(head, cnt, (Elf64_Relr *)(head->relr + head->delta), "RelR"); + DumpRelRTable64(head, cnt, (Elf64_Relr *)(head->relr + head->delta), "RelR"); printf_dump(LOG_DEBUG, "Applying %d Relocation(s) without Addend for %s bindnow=%d, deepbind=%d\n", cnt, head->name, bindnow, deepbind); if(RelocateElfRELR(head, cnt, (Elf64_Relr *)(head->relr + head->delta))) return -1; } if(head->rel) { int cnt = head->relsz / head->relent; - DumpRelTable(head, cnt, (Elf64_Rel *)(head->rel + head->delta), "Rel"); + DumpRelTable64(head, cnt, (Elf64_Rel *)(head->rel + head->delta), "Rel"); printf_dump(LOG_DEBUG, "Applying %d Relocation(s) for %s bindnow=%d, deepbind=%d\n", cnt, head->name, bindnow, deepbind); if(RelocateElfREL(maplib, local_maplib, bindnow, deepbind, head, cnt, (Elf64_Rel *)(head->rel + head->delta))) return -1; } if(head->rela) { int cnt = head->relasz / head->relaent; - DumpRelATable(head, cnt, (Elf64_Rela *)(head->rela + head->delta), "RelA"); + DumpRelATable64(head, cnt, (Elf64_Rela *)(head->rela + head->delta), "RelA"); printf_dump(LOG_DEBUG, "Applying %d Relocation(s) with Addend for %s bindnow=%d, deepbind=%d\n", cnt, head->name, bindnow, deepbind); if(RelocateElfRELA(maplib, local_maplib, bindnow, deepbind, head, cnt, (Elf64_Rela *)(head->rela + head->delta), NULL)) return -1; } return 0; } +int RelocateElf(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) +{ + return box64_is32bits?RelocateElf32(maplib, local_maplib, bindnow, deepbind, head):RelocateElf64(maplib, local_maplib, bindnow, deepbind, head); +} -int RelocateElfPlt(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) +int RelocateElfPlt32(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) +#ifndef BOX32 +{ return -1; } +#else + ; +#endif +int RelocateElfPlt64(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) { int need_resolver = 0; if((head->flags&DF_BIND_NOW) && !bindnow) { @@ -845,26 +902,26 @@ int RelocateElfPlt(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind if(head->pltrel) { int cnt = head->pltsz / head->pltent; if(head->pltrel==DT_REL) { - DumpRelTable(head, cnt, (Elf64_Rel *)(head->jmprel + head->delta), "PLT"); + DumpRelTable64(head, cnt, (Elf64_Rel *)(head->jmprel + head->delta), "PLT"); printf_dump(LOG_DEBUG, "Applying %d PLT Relocation(s) for %s bindnow=%d, deepbind=%d\n", cnt, head->name, bindnow, deepbind); if(RelocateElfREL(maplib, local_maplib, bindnow, deepbind, head, cnt, (Elf64_Rel *)(head->jmprel + head->delta))) return -1; } else if(head->pltrel==DT_RELA) { - DumpRelATable(head, cnt, (Elf64_Rela *)(head->jmprel + head->delta), "PLT"); + DumpRelATable64(head, cnt, (Elf64_Rela *)(head->jmprel + head->delta), "PLT"); printf_dump(LOG_DEBUG, "Applying %d PLT Relocation(s) with Addend for %s bindnow=%d, deepbind=%d\n", cnt, head->name, bindnow, deepbind); if(RelocateElfRELA(maplib, local_maplib, bindnow, deepbind, head, cnt, (Elf64_Rela *)(head->jmprel + head->delta), &need_resolver)) return -1; } if(need_resolver) { - if(pltResolver==(uintptr_t)-1) { - pltResolver = AddBridge(my_context->system, vFE, PltResolver, 0, "PltResolver"); + if(pltResolver64==(uintptr_t)-1) { + pltResolver64 = AddBridge(my_context->system, vFE, PltResolver64, 0, "PltResolver"); } if(head->pltgot) { - *(uintptr_t*)(head->pltgot+head->delta+16) = pltResolver; + *(uintptr_t*)(head->pltgot+head->delta+16) = pltResolver64; *(uintptr_t*)(head->pltgot+head->delta+8) = (uintptr_t)head; printf_dump(LOG_DEBUG, "PLT Resolver injected in plt.got at %p\n", (void*)(head->pltgot+head->delta+16)); } else if(head->got) { - *(uintptr_t*)(head->got+head->delta+16) = pltResolver; + *(uintptr_t*)(head->got+head->delta+16) = pltResolver64; *(uintptr_t*)(head->got+head->delta+8) = (uintptr_t)head; printf_dump(LOG_DEBUG, "PLT Resolver injected in got at %p\n", (void*)(head->got+head->delta+16)); } @@ -873,6 +930,10 @@ int RelocateElfPlt(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind return 0; } +int RelocateElfPlt(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) +{ + return box64_is32bits?RelocateElfPlt32(maplib, local_maplib, bindnow, deepbind, head):RelocateElfPlt64(maplib, local_maplib, bindnow, deepbind, head); +} void CalcStack(elfheader_t* elf, uint64_t* stacksz, size_t* stackalign) { @@ -882,43 +943,6 @@ void CalcStack(elfheader_t* elf, uint64_t* stacksz, size_t* stackalign) *stackalign = elf->stackalign; } -Elf64_Sym* GetFunction(elfheader_t* h, const char* name) -{ - // TODO: create a hash on named to avoid this loop - for (size_t i=0; inumSymTab; ++i) { - int type = ELF64_ST_TYPE(h->SymTab[i].st_info); - if(type==STT_FUNC) { - const char * symname = h->StrTab+h->SymTab[i].st_name; - if(strcmp(symname, name)==0) { - return h->SymTab+i; - } - } - } - return NULL; -} - -Elf64_Sym* GetElfObject(elfheader_t* h, const char* name) -{ - for (size_t i=0; inumSymTab; ++i) { - int type = ELF64_ST_TYPE(h->SymTab[i].st_info); - if(type==STT_OBJECT) { - const char * symname = h->StrTab+h->SymTab[i].st_name; - if(strcmp(symname, name)==0) { - return h->SymTab+i; - } - } - } - return NULL; -} - - -uintptr_t GetFunctionAddress(elfheader_t* h, const char* name) -{ - Elf64_Sym* sym = GetFunction(h, name); - if(sym) return sym->st_value; - return 0; -} - uintptr_t GetEntryPoint(lib_t* maplib, elfheader_t* h) { (void)maplib; @@ -945,13 +969,23 @@ uintptr_t GetLastByte(elfheader_t* h) #endif void checkHookedSymbols(elfheader_t* h); // in mallochook.c +void AddSymbols32(lib_t *maplib, elfheader_t* h) +#ifndef BOX32 +{ } +#else + ; +#endif void AddSymbols(lib_t *maplib, elfheader_t* h) { - //if(box64_dump && h->hash) old_elf_hash_dump(h); - //if(box64_dump && h->gnu_hash) new_elf_hash_dump(h); - if(box64_dump && h->DynSym) DumpDynSym(h); - if(h==my_context->elfs[0]) - GrabX64CopyMainElfReloc(h); + if(box64_is32bits) { + AddSymbols32(maplib, h); + } else { + //if(box64_dump && h->hash) old_elf_hash_dump(h); + //if(box64_dump && h->gnu_hash) new_elf_hash_dump(h); + if(box64_dump && h->DynSym._64) DumpDynSym64(h); + if(h==my_context->elfs[0]) + GrabX64CopyMainElfReloc(h); + } #ifndef STATICBUILD checkHookedSymbols(h); #endif @@ -977,9 +1011,10 @@ int LoadNeededLibs(elfheader_t* h, lib_t *maplib, int local, int bindnow, int de return 0; DumpDynamicRPath(h); // update RPATH first - for (size_t i=0; inumDynamic; ++i) - if(h->Dynamic[i].d_tag==DT_RPATH || h->Dynamic[i].d_tag==DT_RUNPATH) { - char *rpathref = h->DynStrTab+h->delta+h->Dynamic[i].d_un.d_val; + for (size_t i=0; inumDynamic; ++i) { + int tag = box64_is32bits?h->Dynamic._32[i].d_tag:h->Dynamic._64[i].d_tag; + if(tag==DT_RPATH || tag==DT_RUNPATH) { + char *rpathref = h->DynStrTab+h->delta+(box64_is32bits?h->Dynamic._32[i].d_un.d_val:h->Dynamic._64[i].d_un.d_val); char* rpath = rpathref; while(strstr(rpath, "$ORIGIN")) { char* origin = box_strdup(h->path); @@ -1032,23 +1067,24 @@ int LoadNeededLibs(elfheader_t* h, lib_t *maplib, int local, int bindnow, int de if(rpath!=rpathref) box_free(rpath); } - + } DumpDynamicNeeded(h); int cnt = 0; // count the number of needed libs, and also grab soname for (size_t i=0; inumDynamic; ++i) { - if(h->Dynamic[i].d_tag==DT_NEEDED) + int tag = box64_is32bits?h->Dynamic._32[i].d_tag:h->Dynamic._64[i].d_tag; + if(tag==DT_NEEDED) ++cnt; - if(h->Dynamic[i].d_tag==DT_SONAME) - h->soname = h->DynStrTab+h->delta+h->Dynamic[i].d_un.d_val; + if(tag==DT_SONAME) + h->soname = h->DynStrTab+h->delta+(box64_is32bits?h->Dynamic._32[i].d_un.d_val:h->Dynamic._64[i].d_un.d_val); } h->needed = new_neededlib(cnt); if(h == my_context->elfs[0]) my_context->neededlibs = h->needed; int j=0; for (size_t i=0; inumDynamic; ++i) - if(h->Dynamic[i].d_tag==DT_NEEDED) - h->needed->names[j++] = h->DynStrTab+h->delta+h->Dynamic[i].d_un.d_val; + if((box64_is32bits?h->Dynamic._32[i].d_tag:h->Dynamic._64[i].d_tag)==DT_NEEDED) + h->needed->names[j++] = h->DynStrTab+h->delta+(box64_is32bits?h->Dynamic._32[i].d_un.d_val:h->Dynamic._64[i].d_un.d_val); if(h==my_context->elfs[0] && box64_addlibs.size) { for(int i=0; iname); @@ -1069,8 +1105,8 @@ int ElfCheckIfUseTCMallocMinimal(elfheader_t* h) if(!h) return 0; for (size_t i=0; inumDynamic; ++i) - if(h->Dynamic[i].d_tag==DT_NEEDED) { - char *needed = h->DynStrTab+h->delta+h->Dynamic[i].d_un.d_val; + if((box64_is32bits?h->Dynamic._32[i].d_tag:h->Dynamic._64[i].d_tag)==DT_NEEDED) { + char *needed = h->DynStrTab+h->delta+(box64_is32bits?h->Dynamic._32[i].d_un.d_val:h->Dynamic._64[i].d_un.d_val); if(!strcmp(needed, "libtcmalloc_minimal.so.4")) // tcmalloc needs to be the 1st lib loaded return 1; else if(!strcmp(needed, "libtcmalloc_minimal.so.0")) // tcmalloc needs to be the 1st lib loaded @@ -1133,15 +1169,32 @@ void RunElfInit(elfheader_t* h, x64emu_t *emu) RunElfInit(lib_elf, emu); } printf_dump(LOG_DEBUG, "Calling Init for %s @%p\n", ElfName(h), (void*)p); - if(h->initentry) - RunFunctionWithEmu(emu, 0, p, 3, my_context->argc, my_context->argv, my_context->envv); + if(h->initentry) { + if(box64_is32bits) + RunFunctionWithEmu(emu, 0, p, 3, my_context->argc, my_context->argv32, my_context->envv32); + else + RunFunctionWithEmu(emu, 0, p, 3, my_context->argc, my_context->argv, my_context->envv); + } printf_dump(LOG_DEBUG, "Done Init for %s\n", ElfName(h)); // and check init array now - Elf64_Addr *addr = (Elf64_Addr*)(h->initarray + h->delta); - for (size_t i=0; iinitarray_sz; ++i) { - if(addr[i]) { - printf_dump(LOG_DEBUG, "Calling Init[%zu] for %s @%p\n", i, ElfName(h), (void*)addr[i]); - RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 3, my_context->argc, my_context->argv, my_context->envv); + #ifdef BOX32 + if(box64_is32bits) { + Elf32_Addr *addr = (Elf32_Addr*)(h->initarray + h->delta); + for (size_t i=0; iinitarray_sz; ++i) { + if(addr[i]) { + printf_dump(LOG_DEBUG, "Calling Init[%zu] for %s @%p\n", i, ElfName(h), from_ptrv(addr[i])); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 3, my_context->argc, my_context->argv32, my_context->envv32); + } + } + } else + #endif + { + Elf64_Addr *addr = (Elf64_Addr*)(h->initarray + h->delta); + for (size_t i=0; iinitarray_sz; ++i) { + if(addr[i]) { + printf_dump(LOG_DEBUG, "Calling Init[%zu] for %s @%p\n", i, ElfName(h), (void*)addr[i]); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 3, my_context->argc, my_context->argv, my_context->envv); + } } } @@ -1183,10 +1236,21 @@ void RunElfFini(elfheader_t* h, x64emu_t *emu) printf_log(LOG_DEBUG, "Android does not support Fini for %s\n", ElfName(h)); #else // first check fini array - Elf64_Addr *addr = (Elf64_Addr*)(h->finiarray + h->delta); - for (int i=h->finiarray_sz-1; i>=0; --i) { - printf_dump(LOG_DEBUG, "Calling Fini[%d] for %s @%p\n", i, ElfName(h), (void*)addr[i]); - RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 0); + #ifdef BOX32 + if(box64_is32bits) { + Elf32_Addr *addr = (Elf32_Addr*)(h->finiarray + h->delta); + for (int i=h->finiarray_sz-1; i>=0; --i) { + printf_dump(LOG_DEBUG, "Calling Fini[%d] for %s @%p\n", i, ElfName(h), from_ptrv(addr[i])); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 0); + } + } else + #endif + { + Elf64_Addr *addr = (Elf64_Addr*)(h->finiarray + h->delta); + for (int i=h->finiarray_sz-1; i>=0; --i) { + printf_dump(LOG_DEBUG, "Calling Fini[%d] for %s @%p\n", i, ElfName(h), (void*)addr[i]); + RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 0); + } } // then the "old-style" fini if(h->finientry) { @@ -1274,28 +1338,28 @@ const char* FindNearestSymbolName(elfheader_t* h, void* p, uintptr_t* start, uin return ret; for (size_t i=0; inumSymTab && distance!=0; ++i) { - const char * symname = h->StrTab+h->SymTab[i].st_name; - uintptr_t offs = h->SymTab[i].st_value + h->delta; + const char * symname = box64_is32bits?(h->StrTab+h->SymTab._32[i].st_name):(h->StrTab+h->SymTab._64[i].st_name); + uintptr_t offs = (box64_is32bits?h->SymTab._32[i].st_value:h->SymTab._64[i].st_value) + h->delta; if(offs<=addr) { if(distance>addr-offs) { distance = addr-offs; ret = symname; s = offs; - size = h->SymTab[i].st_size; + size = box64_is32bits?h->SymTab._32[i].st_size:h->SymTab._64[i].st_size; } } } for (size_t i=0; inumDynSym && distance!=0; ++i) { - const char * symname = h->DynStr+h->DynSym[i].st_name; - uintptr_t offs = h->DynSym[i].st_value + h->delta; + const char * symname = h->DynStr+(box64_is32bits?h->DynSym._32[i].st_name:h->DynSym._64[i].st_name); + uintptr_t offs = (box64_is32bits?h->DynSym._32[i].st_value:h->DynSym._64[i].st_value) + h->delta; if(offs<=addr) { if(distance>addr-offs) { distance = addr-offs; ret = symname; s = offs; - size = h->DynSym[i].st_size; + size = box64_is32bits?h->DynSym._32[i].st_size:h->DynSym._64[i].st_size; } } } @@ -1376,7 +1440,7 @@ void* GetDynamicSection(elfheader_t* h) { if(!h) return NULL; - return h->Dynamic; + return box64_is32bits?((void*)h->Dynamic._32):((void*)h->Dynamic._64); } #ifdef DYNAREC @@ -1451,7 +1515,16 @@ static void* find_dl_iterate_phdr_Fct(void* fct) } #undef SUPER +EXPORT int my32_dl_iterate_phdr(x64emu_t *emu, void* F, void *data) +#ifdef BOX32 +; +#else +{ + return -1; +} +#endif EXPORT int my_dl_iterate_phdr(x64emu_t *emu, void* F, void *data) { + if(box64_is32bits) return my32_dl_iterate_phdr(emu, F, data); printf_log(LOG_DEBUG, "Call to partially implemented dl_iterate_phdr(%p, %p)\n", F, data); box64context_t *context = GetEmuContext(emu); const char* empty = ""; @@ -1461,7 +1534,7 @@ EXPORT int my_dl_iterate_phdr(x64emu_t *emu, void* F, void *data) { my_dl_phdr_info_t info; info.dlpi_addr = GetElfDelta(context->elfs[idx]); info.dlpi_name = idx?context->elfs[idx]->name:empty; //1st elf is program, and this one doesn't get a name - info.dlpi_phdr = context->elfs[idx]->PHEntries; + info.dlpi_phdr = context->elfs[idx]->PHEntries._64; info.dlpi_phnum = context->elfs[idx]->numPHEntries; if((ret = dl_iterate_phdr_callback(emu, F, &info, sizeof(info), data))) { return ret; @@ -1473,12 +1546,22 @@ EXPORT int my_dl_iterate_phdr(x64emu_t *emu, void* F, void *data) { return ret; } +void ResetSpecialCaseMainElf32(elfheader_t* h) +#ifndef BOX32 +{ } +#else + ; +#endif void ResetSpecialCaseMainElf(elfheader_t* h) { + if(box64_is32bits) { + ResetSpecialCaseMainElf32(h); + return; + } Elf64_Sym *sym = NULL; for (size_t i=0; inumDynSym; ++i) { - if(h->DynSym[i].st_info == 17) { - sym = h->DynSym+i; + if(h->DynSym._64[i].st_info == 17) { + sym = h->DynSym._64+i; const char * symname = h->DynStr+sym->st_name; if(strcmp(symname, "_IO_2_1_stderr_")==0 && ((void*)sym->st_value+h->delta)) { memcpy((void*)sym->st_value+h->delta, stderr, sym->st_size); @@ -1564,12 +1647,12 @@ void ElfAttachLib(elfheader_t* head, library_t* lib) head->lib = lib; } -Elf64_Sym* ElfLocateSymbol(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +static Elf64_Sym* ElfLocateSymbol(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { - Elf64_Sym* sym = ElfLookup(head, symname, *ver, *vername, local, *veropt); + Elf64_Sym* sym = ElfLookup64(head, symname, *ver, *vername, local, *veropt); if(!sym) return NULL; if(head->VerSym && !*veropt) { - int idx = ((uintptr_t)sym - (uintptr_t)head->DynSym)/sizeof(Elf64_Sym); + int idx = ((uintptr_t)sym - (uintptr_t)head->DynSym._64)/sizeof(Elf64_Sym); int version = ((Elf64_Half*)((uintptr_t)head->VerSym+head->delta))[idx]; if(version!=-1) version &=0x7fff; const char* symvername = GetSymbolVersion(head, version); @@ -1589,7 +1672,13 @@ Elf64_Sym* ElfLocateSymbol(elfheader_t* head, uintptr_t *offs, uintptr_t *end, c return sym; } -void* ElfGetLocalSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +void* ElfGetLocalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif +void* ElfGetLocalSymbolStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { Elf64_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); if(!sym) return NULL; @@ -1599,7 +1688,18 @@ void* ElfGetLocalSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *e if(end) *end = sym->st_value + head->delta + sym->st_size; return sym; } -void* ElfGetGlobalSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +void* ElfGetLocalSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + return box64_is32bits?ElfGetLocalSymbolStartEnd32(head, offs, end, symname, ver, vername, local, veropt):ElfGetLocalSymbolStartEnd64(head, offs, end, symname, ver, vername, local, veropt); +} + +void* ElfGetGlobalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif +void* ElfGetGlobalSymbolStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { Elf64_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); if(!sym) return NULL; @@ -1609,7 +1709,18 @@ void* ElfGetGlobalSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t * if(end) *end = sym->st_value + head->delta + sym->st_size; return sym; } -void* ElfGetWeakSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +void* ElfGetGlobalSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + return box64_is32bits?ElfGetGlobalSymbolStartEnd32(head, offs, end, symname, ver, vername, local, veropt):ElfGetGlobalSymbolStartEnd64(head, offs, end, symname, ver, vername, local, veropt); +} + +void* ElfGetWeakSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif +void* ElfGetWeakSymbolStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { Elf64_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); if(!sym) return NULL; @@ -1619,9 +1730,39 @@ void* ElfGetWeakSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *en if(end) *end = sym->st_value + head->delta + sym->st_size; return sym; } -int ElfGetSymTabStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) +void* ElfGetWeakSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + return box64_is32bits?ElfGetWeakSymbolStartEnd32(head, offs, end, symname, ver, vername, local, veropt):ElfGetWeakSymbolStartEnd64(head, offs, end, symname, ver, vername, local, veropt); +} + +void* ElfGetSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +#ifndef BOX32 +{ return NULL; } +#else + ; +#endif +void* ElfGetSymbolStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) { - Elf64_Sym* sym = ElfSymTabLookup(head, symname); + Elf64_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); + if(!sym) return NULL; + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return sym; +} +void* ElfGetSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + return box64_is32bits?ElfGetSymbolStartEnd32(head, offs, end, symname, ver, vername, local, veropt):ElfGetSymbolStartEnd64(head, offs, end, symname, ver, vername, local, veropt); +} + +int ElfGetSymTabStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) +#ifndef BOX32 +{ return 0; } +#else + ; +#endif +int ElfGetSymTabStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) +{ + Elf64_Sym* sym = ElfSymTabLookup64(head, symname); if(!sym) return 0; if(!sym->st_shndx) return 0; if(!sym->st_size) return 0; //needed? @@ -1629,6 +1770,10 @@ int ElfGetSymTabStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *end, con if(end) *end = sym->st_value + head->delta + sym->st_size; return 1; } +int ElfGetSymTabStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) +{ + return box64_is32bits?ElfGetSymTabStartEnd32(head, offs, end, symname):ElfGetSymTabStartEnd64(head, offs, end, symname); +} typedef struct search_symbol_s{ const char* name; @@ -1701,8 +1846,8 @@ void* GetNativeSymbolUnversioned(void* lib, const char* name) return s.addr; } -uintptr_t pltResolver = ~0LL; -EXPORT void PltResolver(x64emu_t* emu) +uintptr_t pltResolver64 = ~0LL; +EXPORT void PltResolver64(x64emu_t* emu) { uintptr_t addr = Pop64(emu); int slot = (int)Pop64(emu); @@ -1710,13 +1855,13 @@ EXPORT void PltResolver(x64emu_t* emu) library_t* lib = h->lib; lib_t* local_maplib = GetMaplib(lib); int deepbind = GetDeepBind(lib); - printf_dump(LOG_DEBUG, "PltResolver: Addr=%p, Slot=%d Return=%p(%s): elf is %s (VerSym=%p, deepbind=%d, local_maplib=%p) func param: %p, %p...\n", (void*)addr, slot, *(void**)(R_RSP), getAddrFunctionName(*(uintptr_t*)R_RSP),h->name, h->VerSym, deepbind, local_maplib, (void*)R_RDI, (void*)R_RSI); + printf_dump(LOG_DEBUG, "PltResolver64: Addr=%p, Slot=%d Return=%p(%s): elf is %s (VerSym=%p, deepbind=%d, local_maplib=%p) func param: %p, %p...\n", (void*)addr, slot, *(void**)(R_RSP), getAddrFunctionName(*(uintptr_t*)R_RSP),h->name, h->VerSym, deepbind, local_maplib, (void*)R_RDI, (void*)R_RSI); Elf64_Rela * rel = (Elf64_Rela *)(h->jmprel + h->delta) + slot; - Elf64_Sym *sym = &h->DynSym[ELF64_R_SYM(rel->r_info)]; + Elf64_Sym *sym = &h->DynSym._64[ELF64_R_SYM(rel->r_info)]; int bind = ELF64_ST_BIND(sym->st_info); - const char* symname = SymName(h, sym); + const char* symname = SymName64(h, sym); int version = h->VerSym?((Elf64_Half*)((uintptr_t)h->VerSym+h->delta))[ELF64_R_SYM(rel->r_info)]:-1; if(version!=-1) version &= 0x7fff; const char* vername = GetSymbolVersion(h, version); @@ -1728,7 +1873,7 @@ EXPORT void PltResolver(x64emu_t* emu) Elf64_Sym *elfsym = NULL; if(bind==STB_LOCAL) { - elfsym = ElfDynSymLookup(h, symname); + elfsym = ElfDynSymLookup64(h, symname); if(elfsym && elfsym->st_shndx) { offs = elfsym->st_value + h->delta; end = offs + elfsym->st_size; diff --git a/src/elfs/elfloader32.c b/src/elfs/elfloader32.c new file mode 100644 index 0000000000000000000000000000000000000000..cdddb9a104af7028fb94831412bb731291fa0c9c --- /dev/null +++ b/src/elfs/elfloader32.c @@ -0,0 +1,956 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef _DLFCN_H +#include +#endif + +#include "custommem.h" +#include "box64version.h" +#include "elfloader.h" +#include "debug.h" +#include "elfload_dump.h" +#include "elfloader_private.h" +#include "librarian.h" +#include "x64run.h" +#include "bridge.h" +#include "wrapper.h" +#include "box64context.h" +#include "library.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "box64stack.h" +#include "wine_tools.h" +#include "dictionnary.h" +#include "symbols.h" +#ifdef DYNAREC +#include "dynablock.h" +#endif +#include "../emu/x64emu_private.h" +#include "../emu/x64run_private.h" +#include "../tools/bridge_private.h" +#include "x64tls.h" +#include "box32.h" + +ptr_t pltResolver32 = ~(ptr_t)0; + +extern void* my__IO_2_1_stderr_; +extern void* my__IO_2_1_stdin_ ; +extern void* my__IO_2_1_stdout_; + +// return the index of header (-1 if it doesn't exist) +static int getElfIndex(box64context_t* ctx, elfheader_t* head) { + for (int i=0; ielfsize; ++i) + if(ctx->elfs[i]==head) + return i; + return -1; +} + +static elfheader_t* checkElfLib(elfheader_t* h, library_t* lib) +{ + if(h && lib) { + if(!h->needed) + h->needed = new_neededlib(1); + add1libref_neededlib(h->needed, lib); + } + return h; +} + +static Elf32_Sym* ElfLocateSymbol(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLookup32(head, symname, *ver, *vername, local, *veropt); + if(!sym) return NULL; + if(head->VerSym && !*veropt) { + int idx = ((uintptr_t)sym - (uintptr_t)head->DynSym._32)/sizeof(Elf32_Sym); + int version = ((Elf32_Half*)((uintptr_t)head->VerSym+head->delta))[idx]; + if(version!=-1) version &=0x7fff; + const char* symvername = GetSymbolVersion(head, version); + Elf32_Half flags = GetSymbolVersionFlag(head, version); + if(version>1 && *ver<2 && (flags==0)) { + *ver = version; + *vername = symvername; + *veropt = 1; + } else if(flags==0 && !*veropt && version>1 && *ver>1 && !strcmp(symvername, *vername)) { + *veropt = 1; + } + } + if(!sym->st_shndx) return NULL; + int vis = ELF32_ST_VISIBILITY(sym->st_other); + if(vis==STV_HIDDEN && !local) + return NULL; + return sym; +} + + +static void GrabX32CopyMainElfReloc(elfheader_t* head) +{ + if(head->rel) { + int cnt = head->relsz / head->relent; + Elf32_Rel* rel = (Elf32_Rel *)(head->rel + head->delta); + printf_dump(LOG_DEBUG, "Grabbing R_386_COPY Relocation(s) in advance for %s\n", head->name); + for (int i=0; iDynSym._32[ELF32_R_SYM(rel[i].r_info)]; + const char* symname = SymName32(head, sym); + int version = head->VerSym?((Elf32_Half*)((uintptr_t)head->VerSym+head->delta))[ELF32_R_SYM(rel[i].r_info)]:-1; + if(version!=-1) version &=0x7fff; + const char* vername = GetSymbolVersion(head, version); + Elf32_Half flags = GetSymbolVersionFlag(head, version); + int veropt = flags?0:1; + uintptr_t offs = sym->st_value + head->delta; + AddUniqueSymbol(my_context->globdata, symname, offs, sym->st_size, version, vername, veropt); + } + } + } +} + +void checkHookedSymbols(elfheader_t* h); +void AddSymbols32(lib_t *maplib, elfheader_t* h) +{ + //if(box64_dump && h->hash) old_elf_hash_dump(h); + //if(box64_dump && h->gnu_hash) new_elf_hash_dump(h); + if(box64_dump && h->DynSym._32) DumpDynSym32(h); + if(h==my_context->elfs[0]) + GrabX32CopyMainElfReloc(h); + #ifndef STATICBUILD + checkHookedSymbols(h); + #endif +} + +int AllocLoadElfMemory32(box64context_t* context, elfheader_t* head, int mainbin) +{ + ptr_t offs = 0; + loadProtectionFromMap(); + int log_level = box64_load_addr?LOG_INFO:LOG_DEBUG; + + head->multiblock_n = 0; // count PHEntrie with LOAD + uintptr_t max_align = (box64_pagesize-1); + for (size_t i=0; inumPHEntries; ++i) + if(head->PHEntries._32[i].p_type == PT_LOAD && head->PHEntries._32[i].p_flags) { + ++head->multiblock_n; + } + + if(!head->vaddr && box64_load_addr) { + offs = to_ptrv(find31bitBlockNearHint((void*)box64_load_addr, head->memsz, max_align)); + box64_load_addr = offs + head->memsz; + box64_load_addr = (box64_load_addr+0x10ffffff)&~0xffffff; + } + if(!offs && !head->vaddr) + offs = (uintptr_t)find31bitBlockElf(head->memsz, mainbin, max_align); + // prereserve the whole elf image, without populating + size_t sz = head->memsz; + void* raw = NULL; + void* image = NULL; + if(!head->vaddr) { + sz += head->align; + raw = mmap64(from_ptrv(offs), sz, 0, MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); + image = (void*)(((uintptr_t)raw+max_align)&~max_align); + } else { + image = raw = mmap64(from_ptrv(head->vaddr), sz, 0, MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); + if(from_ptr(head->vaddr)&(box64_pagesize-1)) { + // load address might be lower + if((uintptr_t)image == (from_ptr(head->vaddr)&~(box64_pagesize-1))) { + image = from_ptrv(head->vaddr); + sz += ((uintptr_t)image)-((uintptr_t)raw); + } + } + } + if(image!=MAP_FAILED && !head->vaddr && image!=from_ptrv(offs)) { + printf_log(LOG_INFO, "%s: Mmap64 for (@%p 0x%zx) for elf \"%s\" returned %p(%p/0x%zx) instead\n", (((uintptr_t)image)&max_align)?"Error":"Warning", from_ptrv(head->vaddr?head->vaddr:offs), head->memsz, head->name, image, raw, head->align); + offs = to_ptrv(image); + if(((uintptr_t)image)&max_align) { + munmap(raw, sz); + return 1; // that's an error, alocated memory is not aligned properly + } + } + if(image==MAP_FAILED || image!=from_ptrv(head->vaddr?head->vaddr:offs)) { + printf_log(LOG_NONE, "%s cannot create memory map (@%p 0x%zx) for elf \"%s\"", (image==MAP_FAILED)?"Error:":"Warning:", from_ptrv(head->vaddr?head->vaddr:offs), head->memsz, head->name); + if(image==MAP_FAILED) { + printf_log(LOG_NONE, " error=%d/%s\n", errno, strerror(errno)); + } else { + printf_log(LOG_NONE, " got %p\n", image); + } + if(image==MAP_FAILED) + return 1; + offs = to_ptrv(image)-head->vaddr; + } + printf_dump(log_level, "Pre-allocated 0x%zx byte at %p for %s\n", head->memsz, image, head->name); + head->delta = offs; + printf_dump(log_level, "Delta of %p (vaddr=%p) for Elf \"%s\"\n", from_ptrv(offs), from_ptrv(head->vaddr), head->name); + + head->image = image; + head->raw = raw; + head->raw_size = sz; + setProtection_elf((uintptr_t)raw, sz, 0); + + head->multiblocks = (multiblock_t*)box_calloc(head->multiblock_n, sizeof(multiblock_t)); + head->tlsbase = AddTLSPartition(context, head->tlssize); + // and now, create all individual blocks + head->memory = (char*)0xffffffff; + int n = 0; + for (size_t i=0; inumPHEntries; ++i) { + if(head->PHEntries._32[i].p_type == PT_LOAD && head->PHEntries._32[i].p_flags) { + Elf32_Phdr * e = &head->PHEntries._32[i]; + + head->multiblocks[n].flags = e->p_flags; + head->multiblocks[n].offs = e->p_offset; + head->multiblocks[n].paddr = e->p_paddr + offs; + head->multiblocks[n].size = e->p_filesz; + head->multiblocks[n].align = e->p_align; + uint8_t prot = PROT_READ|PROT_WRITE|((e->p_flags & PF_X)?PROT_EXEC:0); + // check if alignment is correct + uintptr_t balign = head->multiblocks[n].align-1; + if(balign<4095) balign = 4095; + head->multiblocks[n].asize = (e->p_memsz+(e->p_paddr&balign)+4095)&~4095; + int try_mmap = 1; + if(e->p_paddr&balign) + try_mmap = 0; + if(e->p_offset&(box64_pagesize-1)) + try_mmap = 0; + if(ALIGN(e->p_memsz)!=ALIGN(e->p_filesz)) + try_mmap = 0; + if(!e->p_filesz) + try_mmap = 0; + if(e->p_alignmultiblocks[n].size, head->multiblocks[n].asize, (void*)head->multiblocks[n].paddr, head->name); + void* p = mmap64( + (void*)head->multiblocks[n].paddr, + head->multiblocks[n].size, + prot, + MAP_PRIVATE|MAP_FIXED, //((prot&PROT_WRITE)?MAP_SHARED:MAP_PRIVATE)|MAP_FIXED, + head->fileno, + e->p_offset + ); + if(p==MAP_FAILED || p!=(void*)head->multiblocks[n].paddr) { + try_mmap = 0; + printf_dump(log_level, "Mapping failed, using regular mmap+read"); + } else { + if(e->p_memsz>e->p_filesz && (prot&PROT_WRITE)) + memset((void*)((uintptr_t)p + e->p_filesz), 0, e->p_memsz-e->p_filesz); + setProtection_elf((uintptr_t)p, head->multiblocks[n].asize, prot); + head->multiblocks[n].p = p; + + } + } + if(!try_mmap) { + uintptr_t paddr = head->multiblocks[n].paddr&~balign; + size_t asize = head->multiblocks[n].asize; + void* p = MAP_FAILED; + if(paddr==(paddr&~(box64_pagesize-1)) && (asize==ALIGN(asize))) { + printf_dump(log_level, "Allocating 0x%zx (0x%zx) bytes @%p, will read 0x%zx @%p for Elf \"%s\"\n", asize, e->p_memsz, (void*)paddr, e->p_filesz, (void*)head->multiblocks[n].paddr, head->name); + p = mmap64( + (void*)paddr, + asize, + prot|PROT_WRITE, + MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED, + -1, + 0 + ); + } else { + // difference in pagesize, so need to mmap only what needed to be... + //check startint point + uintptr_t new_addr = paddr&~(box64_pagesize-1); // new_addr might be smaller than paddr + ssize_t new_size = asize + (paddr-new_addr); // so need new_size to compensate + while(getProtection(new_addr) && (new_size>0)) {// but then, there might be some overlap + uintptr_t diff = ALIGN(new_addr+1) - new_addr; // next page + if(diff<(size_t)new_size) + new_size -= diff; + else + new_size = 0; + new_addr = ALIGN(new_addr+1); + } + if(new_size>0) { + printf_dump(log_level, "Allocating 0x%zx (0x%zx/0x%zx) bytes @%p, will read 0x%zx @%p for Elf \"%s\"\n", ALIGN(new_size), paddr, e->p_memsz, (void*)new_addr, e->p_filesz, (void*)head->multiblocks[n].paddr, head->name); + p = mmap64( + (void*)new_addr, + ALIGN(new_size), + prot|PROT_WRITE, + MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED, + -1, + 0 + ); + if(p==(void*)new_addr) + p = (void*)paddr; + } else { + p = (void*)paddr; + printf_dump(log_level, "Will read 0x%zx @%p for Elf \"%s\"\n", e->p_filesz, (void*)head->multiblocks[n].paddr, head->name); + } + } + if(p==MAP_FAILED || p!=(void*)paddr) { + printf_log(LOG_NONE, "Cannot create memory map (@%p 0x%zx/0x%zx) for elf \"%s\"", (void*)paddr, asize, balign, head->name); + if(p==MAP_FAILED) { + printf_log(LOG_NONE, " error=%d/%s\n", errno, strerror(errno)); + } else { + printf_log(LOG_NONE, " got %p\n", p); + } + return 1; + } + setProtection_elf((uintptr_t)p, asize, prot); + head->multiblocks[n].p = p; + if(e->p_filesz) { + fseeko64(head->file, head->multiblocks[n].offs, SEEK_SET); + if(fread((void*)head->multiblocks[n].paddr, head->multiblocks[n].size, 1, head->file)!=1) { + printf_log(LOG_NONE, "Cannot read elf block (@%p 0x%zx/0x%zx) for elf \"%s\"\n", (void*)head->multiblocks[n].offs, head->multiblocks[n].asize, balign, head->name); + return 1; + } + } + if(!(prot&PROT_WRITE) && (paddr==(paddr&(box64_pagesize-1)) && (asize==ALIGN(asize)))) + mprotect((void*)paddr, asize, prot); + } +#ifdef DYNAREC + if(box64_dynarec && (e->p_flags & PF_X)) { + dynarec_log(LOG_DEBUG, "Add ELF eXecutable Memory %p:%p\n", head->multiblocks[n].p, (void*)head->multiblocks[n].asize); + addDBFromAddressRange((uintptr_t)head->multiblocks[n].p, head->multiblocks[n].asize); + } +#endif + if((uintptr_t)head->memory>(uintptr_t)head->multiblocks[n].p) + head->memory = (char*)head->multiblocks[n].p; + ++n; + } + if(head->PHEntries._32[i].p_type == PT_TLS) { + Elf32_Phdr * e = &head->PHEntries._32[i]; + char* dest = (char*)(context->tlsdata+context->tlssize+head->tlsbase); + printf_log(LOG_DEBUG, "Loading TLS block #%zu @%p (0x%zx/0x%zx)\n", i, dest, e->p_filesz, e->p_memsz); + if(e->p_filesz) { + fseeko64(head->file, e->p_offset, SEEK_SET); + if(fread(dest, e->p_filesz, 1, head->file)!=1) { + printf_log(LOG_NONE, "Fail to read PT_TLS part #%zu (size=%zd)\n", i, e->p_filesz); + return 1; + } + } + // zero'd difference between filesz and memsz + if(e->p_filesz != e->p_memsz) + memset(dest+e->p_filesz, 0, e->p_memsz - e->p_filesz); + } + } + + // can close the elf file now! + fclose(head->file); + head->file = NULL; + head->fileno = -1; + + return 0; +} + +static int IsSymInElfSpace(const elfheader_t* h, Elf32_Sym* sym) +{ + if(!h || !sym) + return 0; + uintptr_t addr = (uintptr_t)sym; + if(h->SymTab._32 && addr>=(uintptr_t)h->SymTab._32 && addr<(uintptr_t)&h->SymTab._32[h->numSymTab]) + return 1; + if(h->DynSym._32 && addr>=(uintptr_t)h->DynSym._32 && addr<(uintptr_t)&h->DynSym._32[h->numDynSym]) + return 1; + return 0; +} +static elfheader_t* FindElfSymbol(box64context_t *context, Elf32_Sym* sym) +{ + if(!sym) + return NULL; + for (int i=0; ielfsize; ++i) + if(IsSymInElfSpace(context->elfs[i], sym)) + return context->elfs[i]; + + return NULL; +} + +void GrabR386CopyMainElfReloc(elfheader_t* head) +{ + if(head->rel) { + int cnt = head->relsz / head->relent; + Elf32_Rel* rel = (Elf32_Rel *)(head->rel + head->delta); + printf_dump(LOG_DEBUG, "Grabbing R_386_COPY Relocation(s) in advance for %s\n", head->name); + for (int i=0; iDynSym._32[ELF32_R_SYM(rel[i].r_info)]; + const char* symname = SymName32(head, sym); + int version = head->VerSym?((Elf32_Half*)((uintptr_t)head->VerSym+head->delta))[ELF32_R_SYM(rel[i].r_info)]:-1; + if(version!=-1) version &=0x7fff; + const char* vername = GetSymbolVersion(head, version); + Elf32_Half flags = GetSymbolVersionFlag(head, version); + int veropt = flags?0:1; + uintptr_t offs = sym->st_value + head->delta; + AddUniqueSymbol(my_context->globdata, symname, offs, sym->st_size, version, vername, veropt); + } + } + } +} + + +static int FindR386COPYRel(elfheader_t* h, const char* name, ptr_t *offs, uint32_t** p, size_t size, int version, const char* vername, int veropt) +{ + if(!h) + return 0; + if(!h->rel) + return 0; + if(h->relent) { + Elf32_Rel * rel = (Elf32_Rel *)(h->rel + h->delta); + int cnt = h->relsz / h->relent; + for (int i=0; iDynSym._32[ELF32_R_SYM(rel[i].r_info)]; + const char* symname = SymName32(h, sym); + if((t==R_386_COPY) && symname && !strcmp(symname, name) && (sym->st_size==size)) { + int version2 = h->VerSym?((Elf32_Half*)((uintptr_t)h->VerSym+h->delta))[ELF32_R_SYM(rel[i].r_info)]:-1; + if(version2!=-1) version2 &= 0x7fff; + if(version && !version2) version2=-1; // match a versionned symbol against a global "local" symbol + const char* vername2 = GetSymbolVersion(h, version2); + Elf32_Half flags = GetSymbolVersionFlag(h, version2); + int veropt2 = flags?0:1; + if(SameVersionedSymbol(name, version, vername, veropt, symname, version2, vername2, veropt2)) { + if(offs) *offs = sym->st_value + h->delta; + if(p) *p = (uint32_t*)(rel[i].r_offset + h->delta); + return 1; + } + } + } + } + return 0; +} + +static int RelocateElfREL(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head, int cnt, Elf32_Rel *rel, int* need_resolv) +{ + int ret_ok = 0; + for (int i=0; iDynSym._32[ELF32_R_SYM(rel[i].r_info)]; + int bind = ELF32_ST_BIND(sym->st_info); + //uint32_t ndx = sym->st_shndx; + const char* symname = SymName32(head, sym); + uint32_t *p = (uint32_t*)(rel[i].r_offset + head->delta); + uintptr_t offs = 0; + uintptr_t end = 0; + size_t size = sym->st_size; + elfheader_t* sym_elf = NULL; + elfheader_t* last_elf = NULL; + int version = head->VerSym?((Elf32_Half*)((uintptr_t)head->VerSym+head->delta))[ELF32_R_SYM(rel[i].r_info)]:-1; + if(version!=-1) version &=0x7fff; + const char* vername = GetSymbolVersion(head, version); + Elf32_Half flags = GetSymbolVersionFlag(head, version); + int veropt = flags?0:1; + Elf32_Sym* elfsym = NULL; + int vis = ELF64_ST_VISIBILITY(sym->st_other); + if(vis==STV_PROTECTED) { + elfsym = ElfDynSymLookup32(head, symname); + if(elfsym) { + offs = elfsym->st_value + head->delta; + end = offs + elfsym->st_size; + } + printf_log(LOG_DEBUG, "Symbol %s from %s is PROTECTED\n", symname, head->name); + } else { + if(bind==STB_GNU_UNIQUE) { + GetGlobalSymbolStartEnd(maplib, symname, &offs, &end, head, version, vername, veropt, (void**)&elfsym); + if(!offs && !end && local_maplib) + GetGlobalSymbolStartEnd(local_maplib, symname, &offs, &end, head, version, vername, veropt, (void**)&elfsym); + } else if(bind==STB_LOCAL) { + if(!symname || !symname[0]) { + offs = sym->st_value + head->delta; + end = offs + sym->st_size; + } else { + elfsym = ElfDynSymLookup32(head, symname); + if(elfsym && elfsym->st_shndx) { + offs = elfsym->st_value + head->delta; + end = offs + elfsym->st_size; + } + if(!offs && !end && local_maplib && deepbind) + GetLocalSymbolStartEnd(local_maplib, symname, &offs, &end, head, version, vername, veropt, (void**)&elfsym); + if(!offs && !end) + GetLocalSymbolStartEnd(maplib, symname, &offs, &end, head, version, vername, veropt, (void**)&elfsym); + if(!offs && !end && local_maplib && !deepbind) + GetLocalSymbolStartEnd(local_maplib, symname, &offs, &end, head, version, vername, veropt, (void**)&elfsym); + } + } else { + if(!offs && !end && local_maplib && deepbind) + GetGlobalSymbolStartEnd(local_maplib, symname, &offs, &end, head, version, vername, veropt, (void**)&elfsym); + if(!offs && !end) + GetGlobalSymbolStartEnd(maplib, symname, &offs, &end, head, version, vername, veropt, (void**)&elfsym); + if(!offs && !end && local_maplib && !deepbind) + GetGlobalSymbolStartEnd(local_maplib, symname, &offs, &end, head, version, vername, veropt, (void**)&elfsym); + } + } + sym_elf = FindElfSymbol(my_context, elfsym); + if(elfsym && (ELF32_ST_TYPE(elfsym->st_info)==STT_TLS)) + offs = elfsym->st_value; + uintptr_t globoffs, globend; + uint32_t* globp; + uintptr_t tmp = 0; + intptr_t delta; + switch(t) { + case R_386_NONE: + // can be ignored + printf_dump(LOG_NEVER, "Ignoring [%d] %s %p (%p)\n", i, DumpRelType32(t), p, from_ptrv(p?(*p):0)); + break; + case R_386_PC32: + if (!offs) { + printf_log(LOG_NONE, "Error: Global Symbol %s not found, cannot apply R_386_PC32 %p (%p) in %s\n", symname, p, from_ptrv(*p), head->name); + ret_ok = 1; + } + if(offs) + printf_dump(LOG_NEVER, "Apply [%d] %s R_386_PC32 %p with sym=%s (ver=%d/%s), (%p -> %p/%p)\n", i, (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), p, symname, version, vername?vername:"(none)", from_ptrv(*(ptr_t*)p), from_ptrv(*(ptr_t*)p+(offs-to_ptrv(p))), from_ptrv(offs)); + offs = (offs - to_ptrv(p)); + *p += offs; + break; + case R_386_RELATIVE: + printf_dump(LOG_NEVER, "Apply [%d] %s R_386_RELATIVE %p (%p -> %p)\n", i, (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), p, from_ptrv(*p), (void*)((*p)+head->delta)); + *p += head->delta; + break; + case R_386_COPY: + globoffs = offs; + globend = end; + offs = end = 0; + if(!offs && local_maplib && deepbind) + GetNoSelfSymbolStartEnd(local_maplib, symname, &offs, &end, head, size, version, vername, veropt, NULL); + if(!offs) + GetNoSelfSymbolStartEnd(maplib, symname, &offs, &end, head, size, version, vername, veropt, NULL); + if(!offs && local_maplib && !deepbind) + GetNoSelfSymbolStartEnd(local_maplib, symname, &offs, &end, head, size, version, vername, veropt, NULL); + if(!offs) {offs = globoffs; end = globend;} + if(offs) { + // add r_addend to p? + printf_dump(LOG_NEVER, "Apply R_386_COPY @%p with sym=%s (%sver=%d/%s), @%p size=%d\n", p, symname, veropt?"opt":"", version, vername?vername:"(none)", from_ptrv(offs), sym->st_size); + if(p!=from_ptrv(offs)) + memmove(p, from_ptrv(offs), sym->st_size); + sym_elf = FindElfAddress(my_context, offs); + if(sym_elf && sym_elf!=last_elf && sym_elf!=head) last_elf = checkElfLib(head, sym_elf->lib); + } else { + printf_log(LOG_NONE, "Error: Symbol %s not found, cannot apply REL R_386_COPY @%p (%p) in %s\n", symname, p, from_ptrv(*p), head->name); + } + break; + case R_386_GLOB_DAT: + if(GetSymbolStartEnd(my_context->globdata, symname, &globoffs, &globend, version, vername, 1, veropt)) { + globp = (uint32_t*)globoffs; + printf_dump(LOG_NEVER, "Apply %s R_386_GLOB_DAT with R_386_COPY @%p/%p (%p/%p -> %p/%p) size=%d on sym=%s (%sver=%d/%s) \n", + BindSymFriendly(bind), p, globp, from_ptrv(p?(*p):0), + from_ptrv(globp?(*globp):0), (void*)offs, (void*)globoffs, sym->st_size, symname, veropt?"opt":"", version, vername?vername:"(none)"); + sym_elf = my_context->elfs[0]; + *p = globoffs; + } else { + if (!offs) { + if(strcmp(symname, "__gmon_start__") && strcmp(symname, "data_start") && strcmp(symname, "__data_start") && strcmp(symname, "collector_func_load")) + printf_log((bind==STB_WEAK)?LOG_DEBUG:LOG_NONE, "%s: Global Symbol %s not found, cannot apply R_386_GLOB_DAT @%p (%p) in %s\n", (bind==STB_WEAK)?"Warning":"Error", symname, p, *(void**)p, head->name); + } else { + printf_dump(LOG_NEVER, "Apply %s R_386_GLOB_DAT @%p (%p -> %p) on sym=%s (%sver=%d/%s, elf=%s)\n", BindSymFriendly(bind), p, from_ptrv(p?(*p):0), from_ptrv(offs), symname, veropt?"opt":"", version, vername?vername:"(none)", sym_elf?sym_elf->name:"(native)"); + *p = offs; + if(sym_elf && sym_elf!=last_elf && sym_elf!=head) last_elf = checkElfLib(head, sym_elf->lib); + } + } + break; + case R_386_JMP_SLOT: + // apply immediatly for gobject closure marshal or for LOCAL binding. Also, apply immediatly if it doesn't jump in the got + tmp = (uintptr_t)(*p); + if (bind==STB_LOCAL + || ((symname && strstr(symname, "g_cclosure_marshal_")==symname)) + || ((symname && strstr(symname, "__pthread_unwind_next")==symname)) + || !tmp + || !((tmp>=head->plt && tmpplt_end) || (tmp>=head->gotplt && tmpgotplt_end)) + || !need_resolv + || bindnow + ) { + if (!offs) { + if(bind==STB_WEAK) { + printf_log(LOG_INFO, "Warning: Weak Symbol %s not found, cannot apply R_386_JMP_SLOT %p (%p)\n", symname, p, from_ptrv(*p)); + } else { + printf_log(LOG_NONE, "Error: Symbol %s not found, cannot apply R_386_JMP_SLOT %p (%p) in %s\n", symname, p, from_ptrv(*p), head->name); + ret_ok = 1; + } + } else { + if(p) { + printf_dump(LOG_NEVER, "Apply %s R_386_JMP_SLOT %p with sym=%s(%s%s%s) (%p -> %p)\n", (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), p, symname, symname, vername?"@":"", vername?vername:"", from_ptrv(*p), from_ptrv(offs)); + *p = offs; + } else { + printf_log(LOG_NONE, "Warning, Symbol %s found, but Jump Slot Offset is NULL \n", symname); + } + } + } else { + printf_dump(LOG_NEVER, "Preparing (if needed) %s R_386_JMP_SLOT %p (0x%x->0x%0x) with sym=%s(%s%s%s/version %d) to be apply later\n", (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), p, *p, *p+head->delta, symname, symname, vername?"@":"", vername?vername:"", version); + *p += head->delta; + *need_resolv = 1; + } + break; + case R_386_32: + if(GetSymbolStartEnd(my_context->globdata, symname, &globoffs, &globend, version, vername, 1, veropt)) { + if(offs!=globoffs) { + offs = globoffs; + sym_elf = my_context->elfs[0]; + elfsym = ElfDynSymLookup32(sym_elf, symname); + } + } + if (!offs) { + if(strcmp(symname, "__gmon_start__") && strcmp(symname, "data_start") && strcmp(symname, "__data_start")) { + printf_log(LOG_NONE, "Error: Symbol sym=%s(%s%s%s/version %d) not found, cannot apply R_386_32 %p (%p) in %s\n", symname, symname, vername?"@":"", vername?vername:"", version, p, from_ptrv(*p), head->name); + ret_ok = 1; + } + } else { + printf_dump(LOG_NEVER, "Apply %s R_386_32 %p with sym=%s (ver=%d/%s) (%p -> %p)\n", (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), p, symname, version, vername?vername:"(none)", from_ptrv(*p), from_ptrv(offs+*p)); + *p += offs; + } + break; + case R_386_TLS_TPOFF: + // Negated offset in static TLS block + { + if(!symname || !symname[0]) { + sym_elf = head; + offs = sym->st_value; + } + if(sym_elf) { + delta = *(int32_t*)p; + printf_dump(LOG_NEVER, "Applying %s %s on %s @%p (%d -> %d+%d, size=%d)\n", (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), DumpRelType32(t), symname, p, delta, sym_elf->tlsbase, (int32_t)offs, end-offs); + *p = (uintptr_t)((int32_t)offs + sym_elf->tlsbase); + } else { + printf_log(LOG_INFO, "Warning, cannot apply %s %s on %s @%p (%d), no elf_header found\n", (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), DumpRelType32(t), symname, p, (int32_t)offs); + } + } + break; + case R_386_TLS_TPOFF32: + // Non-negated offset in static TLS block??? + { + if(!symname || !symname[0]) { + sym_elf = head; + offs = sym->st_value; + } + if(sym_elf) { + delta = *(int32_t*)p; + printf_dump(LOG_NEVER, "Applying %s %s on %s @%p (%d -> %d+%d, size=%d)\n", (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), DumpRelType32(t), symname, p, delta, -sym_elf->tlsbase, (int32_t)offs, end-offs); + *p = (uintptr_t)((int32_t)offs - sym_elf->tlsbase); + } else { + printf_log(LOG_INFO, "Warning, cannot apply %s %s on %s @%p (%d), no elf_header found\n", (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), DumpRelType32(t), symname, p, (int32_t)offs); + } + } + break; + case R_386_TLS_DTPMOD32: + // ID of module containing symbol + if(!symname || symname[0]=='\0' || bind==STB_LOCAL) { + offs = getElfIndex(my_context, head); + sym_elf = head; + } else { + offs = getElfIndex(my_context, sym_elf); + } + if(p) { + printf_dump(LOG_NEVER, "Apply %s %s %p with sym=%s (%p -> %p)\n", "R_386_TLS_DTPMOD32", (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), p, symname, from_ptrv(*p), from_ptrv(offs)); + *p = offs; + } else { + printf_log(LOG_NONE, "Warning, Symbol %s or Elf not found, but R_386_TLS_DTPMOD32 Slot Offset is NULL \n", symname); + } + break; + case R_386_TLS_DTPOFF32: + // Offset in TLS block + if (!offs && !end) { + if(bind==STB_WEAK) { + printf_log(LOG_INFO, "Warning: Weak Symbol %s not found, cannot apply R_386_TLS_DTPOFF32 %p (%p)\n", symname, p, from_ptrv(*p)); + } else { + printf_log(LOG_NONE, "Error: Symbol %s not found, cannot apply R_386_TLS_DTPOFF32 %p (%p) in %s\n", symname, p, from_ptrv(*p), head->name); + } + } else { + if(!symname || !symname[0]) { + offs = (uintptr_t)((intptr_t)(head->tlsaddr + head->delta) - (intptr_t)offs); // negative offset + } + if(p) { + printf_dump(LOG_NEVER, "Apply %s R_386_TLS_DTPOFF32 %p with sym=%s (ver=%d/%s) (%zd -> %zd)\n", (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), p, symname, version, vername?vername:"(none)", (intptr_t)*p, (intptr_t)offs); + *p = offs; + } else { + printf_log(LOG_NONE, "Warning, Symbol %s found, but R_386_TLS_DTPOFF32 Slot Offset is NULL \n", symname); + } + } + break; + default: + printf_log(LOG_INFO, "Warning, don't know of to handle rel #%d %s (%p) for %s\n", i, DumpRelType32(ELF32_R_TYPE(rel[i].r_info)), p, symname?symname:"(nil)"); + } + } + return bindnow?ret_ok:0; +} + +static int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head, int cnt, Elf32_Rela *rela, int* need_resolv) +{ + printf_log(LOG_NONE, "Error: RELA type of Relocation unsupported (only REL)\n"); + return 1; +} + +static int RelocateElfRELR(elfheader_t *head, int cnt, Elf32_Relr *relr) +{ + printf_log(LOG_NONE, "Error: RELR type of Relocation unsupported (only REL)\n"); + return 1; +} + +int RelocateElf32(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) +{ + if(0 && (head->flags&DF_BIND_NOW) && !bindnow) { // disable for now, needs more symbol in a fow libs like gtk and nss3 + bindnow = 1; + printf_log(LOG_DEBUG, "Forcing %s to Bind Now\n", head->name); + } + if(head->relr) { + int cnt = head->relrsz / head->relrent; + DumpRelRTable32(head, cnt, (Elf32_Relr *)(head->relr + head->delta), "RelR"); + printf_log(LOG_DEBUG, "Applying %d Relocation(s) with Addend for %s\n", cnt, head->name); + if(RelocateElfRELR(head, cnt, (Elf32_Relr *)(head->relr + head->delta))) + return -1; + } + if(head->rel) { + int cnt = head->relsz / head->relent; + DumpRelTable32(head, cnt, (Elf32_Rel *)(head->rel + head->delta), "Rel"); + printf_log(LOG_DEBUG, "Applying %d Relocation(s) for %s\n", cnt, head->name); + if(RelocateElfREL(maplib, local_maplib, bindnow, deepbind, head, cnt, (Elf32_Rel *)(head->rel + head->delta), NULL)) + return -1; + } + if(head->rela) { + int cnt = head->relasz / head->relaent; + DumpRelATable32(head, cnt, (Elf32_Rela *)(head->rela + head->delta), "RelA"); + printf_log(LOG_DEBUG, "Applying %d Relocation(s) with Addend for %s\n", cnt, head->name); + if(RelocateElfRELA(maplib, local_maplib, bindnow, deepbind, head, cnt, (Elf32_Rela *)(head->rela + head->delta), NULL)) + return -1; + } + return 0; +} + +int RelocateElfPlt32(lib_t *maplib, lib_t *local_maplib, int bindnow, int deepbind, elfheader_t* head) +{ + int need_resolver = 0; + if(0 && (head->flags&DF_BIND_NOW) && !bindnow) { // disable for now, needs more symbol in a fow libs like gtk and nss3 + bindnow = 1; + printf_log(LOG_DEBUG, "Forcing %s to Bind Now\n", head->name); + } + if(head->pltrel) { + int cnt = head->pltsz / head->pltent; + if(head->pltrel==DT_REL) { + DumpRelTable32(head, cnt, (Elf32_Rel *)(head->jmprel + head->delta), "PLT"); + printf_log(LOG_DEBUG, "Applying %d PLT Relocation(s) for %s\n", cnt, head->name); + if(RelocateElfREL(maplib, local_maplib, bindnow, deepbind, head, cnt, (Elf32_Rel *)(head->jmprel + head->delta), &need_resolver)) + return -1; + } else if(head->pltrel==DT_RELA) { + DumpRelATable32(head, cnt, (Elf32_Rela *)(head->jmprel + head->delta), "PLT"); + printf_log(LOG_DEBUG, "Applying %d PLT Relocation(s) with Addend for %s\n", cnt, head->name); + if(RelocateElfRELA(maplib, local_maplib, bindnow, deepbind, head, cnt, (Elf32_Rela *)(head->jmprel + head->delta), &need_resolver)) + return -1; + } + if(need_resolver) { + if(pltResolver32==~(ptr_t)0) { + pltResolver32 = AddBridge(my_context->system, vFEv, PltResolver32, 0, "(PltResolver)"); + } + if(head->pltgot) { + *(ptr_t*)from_ptrv(head->pltgot+head->delta+8) = pltResolver32; + *(ptr_t*)from_ptrv(head->pltgot+head->delta+4) = to_ptrv(head); + printf_log(LOG_DEBUG, "PLT Resolver injected in plt.got at %p\n", from_ptrv(head->pltgot+head->delta+8)); + } else if(head->got) { + *(ptr_t*)from_ptrv(head->got+head->delta+8) = pltResolver32; + *(ptr_t*)from_ptrv(head->got+head->delta+4) = to_ptrv(head); + printf_log(LOG_DEBUG, "PLT Resolver injected in got at %p\n", from_ptrv(head->got+head->delta+8)); + } + } + } + return 0; +} + +void ResetSpecialCaseMainElf32(elfheader_t* h) +{ + Elf32_Sym *sym = NULL; + for (uint32_t i=0; inumDynSym; ++i) { + if(h->DynSym._32[i].st_info == 17) { + sym = h->DynSym._32+i; + const char * symname = h->DynStr+sym->st_name; + if(strcmp(symname, "_IO_2_1_stderr_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stderr, sym->st_size); + my__IO_2_1_stderr_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_2_1_stderr_ to %p\n", my__IO_2_1_stderr_); + } else + if(strcmp(symname, "_IO_2_1_stdin_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stdin, sym->st_size); + my__IO_2_1_stdin_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_2_1_stdin_ to %p\n", my__IO_2_1_stdin_); + } else + if(strcmp(symname, "_IO_2_1_stdout_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stdout, sym->st_size); + my__IO_2_1_stdout_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_2_1_stdout_ to %p\n", my__IO_2_1_stdout_); + } else + if(strcmp(symname, "_IO_stderr_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stderr, sym->st_size); + my__IO_2_1_stderr_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_stderr_ to %p\n", my__IO_2_1_stderr_); + } else + if(strcmp(symname, "_IO_stdin_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stdin, sym->st_size); + my__IO_2_1_stdin_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_stdin_ to %p\n", my__IO_2_1_stdin_); + } else + if(strcmp(symname, "_IO_stdout_")==0 && (from_ptrv(sym->st_value+h->delta))) { + memcpy(from_ptrv(sym->st_value+h->delta), stdout, sym->st_size); + my__IO_2_1_stdout_ = from_ptrv(sym->st_value+h->delta); + printf_log(LOG_DEBUG, "BOX32: Set @_IO_stdout_ to %p\n", my__IO_2_1_stdout_); + } + } + } +} + +void* ElfGetLocalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); + if(!sym) return NULL; + int bind = ELF32_ST_BIND(sym->st_info); + if(bind!=STB_LOCAL) return 0; + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return sym; +} + +void* ElfGetGlobalSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); + if(!sym) return NULL; + int bind = ELF32_ST_BIND(sym->st_info); + if(bind!=STB_GLOBAL && bind!=STB_GNU_UNIQUE) return 0; + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return sym; +} + +void* ElfGetWeakSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); + if(!sym) return NULL; + int bind = ELF32_ST_BIND(sym->st_info); + if(bind!=STB_WEAK) return 0; + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return sym; +} + +void* ElfGetSymbolStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt) +{ + Elf32_Sym* sym = ElfLocateSymbol(head, offs, end, symname, ver, vername, local, veropt); + if(!sym) return NULL; + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return sym; +} + +int ElfGetSymTabStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname) +{ + Elf32_Sym* sym = ElfSymTabLookup32(head, symname); + if(!sym) return 0; + if(!sym->st_shndx) return 0; + if(!sym->st_size) return 0; //needed? + if(offs) *offs = sym->st_value + head->delta; + if(end) *end = sym->st_value + head->delta + sym->st_size; + return 1; +} + +EXPORT void PltResolver32(x64emu_t* emu) +{ + ptr_t addr = Pop32(emu); + int slot = (int)Pop32(emu); + elfheader_t *h = (elfheader_t*)from_ptrv(addr); + library_t* lib = h->lib; + lib_t* local_maplib = GetMaplib(lib); + int deepbind = GetDeepBind(lib); + printf_dump(LOG_DEBUG, "PltResolver32: Addr=%p, Slot=%d Return=%p: elf is %s (VerSym=%p)\n", from_ptrv(addr), slot, *(ptr_t*)from_ptrv(R_ESP), h->name, h->VerSym); + + Elf32_Rel * rel = (Elf32_Rel *)(from_ptrv(h->jmprel + h->delta + slot)); + + Elf32_Sym *sym = &h->DynSym._32[ELF32_R_SYM(rel->r_info)]; + int bind = ELF32_ST_BIND(sym->st_info); + const char* symname = SymName32(h, sym); + int version = h->VerSym?((Elf32_Half*)((uintptr_t)h->VerSym+h->delta))[ELF32_R_SYM(rel->r_info)]:-1; + if(version!=-1) version &= 0x7fff; + const char* vername = GetSymbolVersion(h, version); + Elf32_Half flags = GetSymbolVersionFlag(h, version); + int veropt = flags?0:1; + ptr_t *p = (uint32_t*)from_ptrv(rel->r_offset + h->delta); + uintptr_t offs = 0; + uintptr_t end = 0; + + Elf32_Sym *elfsym = NULL; + if(bind==STB_LOCAL) { + elfsym = ElfDynSymLookup32(h, symname); + if(elfsym && elfsym->st_shndx) { + offs = elfsym->st_value + h->delta; + end = offs + elfsym->st_size; + } + if(!offs && !end && local_maplib && deepbind) + GetLocalSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end) + GetLocalSymbolStartEnd(my_context->maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end && local_maplib && !deepbind) + GetLocalSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + } else if(bind==STB_WEAK) { + if(local_maplib && deepbind) + GetGlobalWeakSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + else + GetGlobalWeakSymbolStartEnd(my_context->maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end && local_maplib && !deepbind) + GetGlobalWeakSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + } else { + if(!offs && !end && local_maplib && deepbind) + GetGlobalSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end) + GetGlobalSymbolStartEnd(my_context->maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + if(!offs && !end && local_maplib && !deepbind) + GetGlobalSymbolStartEnd(local_maplib, symname, &offs, &end, h, version, vername, veropt, (void**)&elfsym); + } + + if (!offs) { + printf_log(LOG_NONE, "Error: PltResolver32: Symbol %s(ver %d: %s%s%s) not found, cannot apply R_386_JMP_SLOT %p (%p) in %s\n", symname, version, symname, vername?"@":"", vername?vername:"", p, from_ptrv(*p), h->name); + emu->quit = 1; + return; + } else { + elfheader_t* sym_elf = FindElfSymbol(my_context, elfsym); + offs = (uintptr_t)getAlternate(from_ptrv(offs)); + + if(p) { + printf_dump(LOG_DEBUG, " Apply %s R_386_JMP_SLOT %p with sym=%s(ver %d: %s%s%s) (%p -> %p / %s)\n", (bind==STB_LOCAL)?"Local":((bind==STB_WEAK)?"Weak":"Global"), p, symname, version, symname, vername?"@":"", vername?vername:"",from_ptrv(*p), from_ptrv(offs), ElfName(FindElfAddress(my_context, offs))); + *p = offs; + } else { + printf_log(LOG_NONE, "PltResolver32: Warning, Symbol %s(ver %d: %s%s%s) found, but Jump Slot Offset is NULL \n", symname, version, symname, vername?"@":"", vername?vername:""); + } + } + + // jmp to function + R_EIP = offs; +} + + +typedef struct my_dl_phdr_info_32_s { + ptr_t dlpi_addr; //void* + ptr_t dlpi_name; //const char* + ptr_t dlpi_phdr; //Elf32_Phdr* + Elf32_Half dlpi_phnum; +} my_dl_phdr_info_32_t; + +static int dl_iterate_phdr_callback(x64emu_t *emu, void* F, my_dl_phdr_info_32_t *info, size_t size, void* data) +{ + int ret = RunFunctionWithEmu(emu, 0, (uintptr_t)F, 3, to_ptrv(info), to_ulong(size), to_ptrv(data)); + return ret; +} + +EXPORT int my32_dl_iterate_phdr(x64emu_t *emu, void* F, void *data) { + printf_log(LOG_DEBUG, "Call to partially implemented 32bits dl_iterate_phdr(%p, %p)\n", F, data); + box64context_t *context = GetEmuContext(emu); + const char* empty = ""; + int ret = 0; + for (int idx=0; idxelfsize; ++idx) { + if(context->elfs[idx]) { + static my_dl_phdr_info_32_t info; + info.dlpi_addr = to_ptrv(GetElfDelta(context->elfs[idx])); + info.dlpi_name = to_ptrv((void*)(idx?context->elfs[idx]->name:empty)); //1st elf is program, and this one doesn't get a name + info.dlpi_phdr = to_ptrv(context->elfs[idx]->PHEntries._32); + info.dlpi_phnum = context->elfs[idx]->numPHEntries; + if((ret = dl_iterate_phdr_callback(emu, F, &info, sizeof(info), data))) { + return ret; + } + } + } + // not iterationg on native libs + return ret; +} diff --git a/src/elfs/elfloader_private.h b/src/elfs/elfloader_private.h index d813488cad825d1f5aa13ec1dd76fc9084bca5f1..61de1a43a68ccecb5c336640bbf83b38a0a2dae4 100644 --- a/src/elfs/elfloader_private.h +++ b/src/elfs/elfloader_private.h @@ -7,6 +7,7 @@ typedef struct cleanup_s cleanup_t; #include #include "elfloader.h" +#include "box32.h" typedef struct multiblock_s { void* p; @@ -22,27 +23,48 @@ typedef struct elfheader_s { char* name; char* path; // Resolved path to file char* soname; // soname of the elf - size_t numPHEntries; - Elf64_Phdr *PHEntries; - size_t numSHEntries; - Elf64_Shdr *SHEntries; + uint16_t numPHEntries; + union { + Elf64_Phdr* _64; + Elf32_Phdr* _32; + } PHEntries; + uint16_t numSHEntries; + union { + Elf64_Shdr* _64; + Elf32_Shdr* _32; + } SHEntries; size_t SHIdx; size_t numSST; char* SHStrTab; char* StrTab; - Elf64_Sym* SymTab; + union { + Elf64_Sym* _64; + Elf32_Sym* _32; + } SymTab; size_t numSymTab; char* DynStr; - Elf64_Sym* DynSym; + union { + Elf64_Sym* _64; + Elf32_Sym* _32; + } DynSym; size_t numDynSym; - Elf64_Dyn* Dynamic; + union { + Elf64_Dyn* _64; + Elf32_Dyn* _32; + } Dynamic; size_t numDynamic; char* DynStrTab; size_t szDynStrTab; - Elf64_Half* VerSym; - Elf64_Verneed* VerNeed; + uint16_t* VerSym; + union { + Elf64_Verneed* _64; + Elf32_Verneed* _32; + } VerNeed; int szVerNeed; - Elf64_Verdef* VerDef; + union { + Elf64_Verdef* _64; + Elf32_Verdef* _32; + } VerDef; int szVerDef; int e_type; uint32_t flags; @@ -172,25 +194,31 @@ typedef struct elfheader_s { #define STB_GNU_UNIQUE 10 #endif +#ifndef ELF32_ST_VISIBILITY +#define ELF32_ST_VISIBILITY(o) ((o) & 0x03) +#endif + #ifndef ELF64_ST_VISIBILITY -#define ELF64_ST_VISIBILITY(o) ((o) & 0x03) +#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) #endif -elfheader_t* ParseElfHeader(FILE* f, const char* name, int exec); +elfheader_t* ParseElfHeader32(FILE* f, const char* name, int exec); +elfheader_t* ParseElfHeader64(FILE* f, const char* name, int exec); const char* BindSym(int bind); +const char* BindSymFriendly(int bind); -Elf64_Half GetSymbolVersionFlag(elfheader_t* h, int index); +uint16_t GetSymbolVersionFlag(elfheader_t* h, int index); uint32_t old_elf_hash(const char* name); -Elf64_Sym* old_elf_lookup(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt); -void old_elf_hash_dump(elfheader_t* h); uint32_t new_elf_hash(const char *name); -Elf64_Sym* new_elf_lookup(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt); -void new_elf_hash_dump(elfheader_t* h); -Elf64_Sym* ElfLookup(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt); -Elf64_Sym* ElfSymTabLookup(elfheader_t* h, const char* symname); -Elf64_Sym* ElfDynSymLookup(elfheader_t* h, const char* symname); +Elf32_Sym* ElfLookup32(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt); +Elf32_Sym* ElfSymTabLookup32(elfheader_t* h, const char* symname); +Elf32_Sym* ElfDynSymLookup32(elfheader_t* h, const char* symname); + +Elf64_Sym* ElfLookup64(elfheader_t* h, const char* symname, int ver, const char* vername, int local, int veropt); +Elf64_Sym* ElfSymTabLookup64(elfheader_t* h, const char* symname); +Elf64_Sym* ElfDynSymLookup64(elfheader_t* h, const char* symname); #endif //__ELFLOADER_PRIVATE_H_ diff --git a/src/elfs/elfparser.c b/src/elfs/elfparser.c index 49fea7aaac9b29cba67ba3068a2b0df7c3607ffc..618b55d091904d81545da85bd20e9a2453a21161 100644 --- a/src/elfs/elfparser.c +++ b/src/elfs/elfparser.c @@ -17,7 +17,7 @@ #define DT_GNU_HASH 0x6ffffef5 #endif -int LoadSH(FILE *f, Elf64_Shdr *s, void** SH, const char* name, uint32_t type) +static int LoadSH(FILE *f, Elf64_Shdr *s, void** SH, const char* name, uint32_t type) { if(type && (s->sh_type != type)) { printf_log(LOG_INFO, "Section Header \"%s\" (off=%ld, size=%ld) has incorect type (%d != %d)\n", name, s->sh_offset, s->sh_size, s->sh_type, type); @@ -36,7 +36,7 @@ int LoadSH(FILE *f, Elf64_Shdr *s, void** SH, const char* name, uint32_t type) return 0; } -int FindSection(Elf64_Shdr *s, int n, char* SHStrTab, const char* name) +static int FindSection(Elf64_Shdr *s, int n, char* SHStrTab, const char* name) { for (int i=0; inumSHEntries) { // now read all section headers printf_dump(LOG_DEBUG, "Read %zu Section header\n", h->numSHEntries); - h->SHEntries = (Elf64_Shdr*)box_calloc(h->numSHEntries, sizeof(Elf64_Shdr)); + h->SHEntries._64 = (Elf64_Shdr*)box_calloc(h->numSHEntries, sizeof(Elf64_Shdr)); fseeko64(f, header.e_shoff ,SEEK_SET); - if(fread(h->SHEntries, sizeof(Elf64_Shdr), h->numSHEntries, f)!=h->numSHEntries) { + if(fread(h->SHEntries._64, sizeof(Elf64_Shdr), h->numSHEntries, f)!=h->numSHEntries) { FreeElfHeader(&h); printf_log(LOG_INFO, "Cannot read all Section Header\n"); return NULL; @@ -156,14 +159,14 @@ elfheader_t* ParseElfHeader(FILE* f, const char* name, int exec) if(h->numPHEntries == PN_XNUM) { printf_dump(LOG_DEBUG, "Read number of Program Header in 1st Section\n"); // read 1st section header and grab actual number from here - h->numPHEntries = h->SHEntries[0].sh_info; + h->numPHEntries = h->SHEntries._64[0].sh_info; } } printf_dump(LOG_DEBUG, "Read %zu Program header\n", h->numPHEntries); - h->PHEntries = (Elf64_Phdr*)box_calloc(h->numPHEntries, sizeof(Elf64_Phdr)); + h->PHEntries._64 = (Elf64_Phdr*)box_calloc(h->numPHEntries, sizeof(Elf64_Phdr)); fseeko64(f, header.e_phoff ,SEEK_SET); - if(fread(h->PHEntries, sizeof(Elf64_Phdr), h->numPHEntries, f)!=h->numPHEntries) { + if(fread(h->PHEntries._64, sizeof(Elf64_Phdr), h->numPHEntries, f)!=h->numPHEntries) { FreeElfHeader(&h); printf_log(LOG_INFO, "Cannot read all Program Header\n"); return NULL; @@ -172,7 +175,7 @@ elfheader_t* ParseElfHeader(FILE* f, const char* name, int exec) if(header.e_shentsize && header.e_shnum) { if(h->SHIdx == SHN_XINDEX) { printf_dump(LOG_DEBUG, "Read number of String Table in 1st Section\n"); - h->SHIdx = h->SHEntries[0].sh_link; + h->SHIdx = h->SHEntries._64[0].sh_link; } if(h->SHIdx > h->numSHEntries) { printf_log(LOG_INFO, "Incoherent Section String Table Index : %zu / %zu\n", h->SHIdx, h->numSHEntries); @@ -181,23 +184,23 @@ elfheader_t* ParseElfHeader(FILE* f, const char* name, int exec) } // load Section table printf_dump(LOG_DEBUG, "Loading Sections Table String (idx = %zu)\n", h->SHIdx); - if(LoadSH(f, h->SHEntries+h->SHIdx, (void*)&h->SHStrTab, ".shstrtab", SHT_STRTAB)) { + if(LoadSH(f, h->SHEntries._64+h->SHIdx, (void*)&h->SHStrTab, ".shstrtab", SHT_STRTAB)) { FreeElfHeader(&h); return NULL; } - if(box64_dump) DumpMainHeader(&header, h); + if(box64_dump) DumpMainHeader64(&header, h); - LoadNamedSection(f, h->SHEntries, h->numSHEntries, h->SHStrTab, ".strtab", "SymTab Strings", SHT_STRTAB, (void**)&h->StrTab, NULL); - LoadNamedSection(f, h->SHEntries, h->numSHEntries, h->SHStrTab, ".symtab", "SymTab", SHT_SYMTAB, (void**)&h->SymTab, &h->numSymTab); - if(box64_dump && h->SymTab) DumpSymTab(h); + LoadNamedSection(f, h->SHEntries._64, h->numSHEntries, h->SHStrTab, ".strtab", "SymTab Strings", SHT_STRTAB, (void**)&h->StrTab, NULL); + LoadNamedSection(f, h->SHEntries._64, h->numSHEntries, h->SHStrTab, ".symtab", "SymTab", SHT_SYMTAB, (void**)&h->SymTab._64, &h->numSymTab); + if(box64_dump && h->SymTab._64) DumpSymTab64(h); - LoadNamedSection(f, h->SHEntries, h->numSHEntries, h->SHStrTab, ".dynamic", "Dynamic", SHT_DYNAMIC, (void**)&h->Dynamic, &h->numDynamic); - if(box64_dump && h->Dynamic) DumpDynamicSections(h); + LoadNamedSection(f, h->SHEntries._64, h->numSHEntries, h->SHStrTab, ".dynamic", "Dynamic", SHT_DYNAMIC, (void**)&h->Dynamic._64, &h->numDynamic); + if(box64_dump && h->Dynamic._64) DumpDynamicSections64(h); // grab DT_REL & DT_RELA stuffs // also grab the DT_STRTAB string table { for (size_t i=0; inumDynamic; ++i) { - Elf64_Dyn d = h->Dynamic[i]; + Elf64_Dyn d = h->Dynamic._64[i]; Elf64_Word val = d.d_un.d_val; Elf64_Addr ptr = d.d_un.d_ptr; switch (d.d_tag) { @@ -281,7 +284,7 @@ elfheader_t* ParseElfHeader(FILE* f, const char* name, int exec) printf_dump(LOG_DEBUG, "The DT_VERNEEDNUM is %d\n", h->szVerNeed); break; case DT_VERNEED: - h->VerNeed = (Elf64_Verneed*)ptr; + h->VerNeed._64 = (Elf64_Verneed*)ptr; printf_dump(LOG_DEBUG, "The DT_VERNEED is at address %p\n", h->VerNeed); break; case DT_VERDEFNUM: @@ -289,7 +292,7 @@ elfheader_t* ParseElfHeader(FILE* f, const char* name, int exec) printf_dump(LOG_DEBUG, "The DT_VERDEFNUM is %d\n", h->szVerDef); break; case DT_VERDEF: - h->VerDef = (Elf64_Verdef*)ptr; + h->VerDef._64 = (Elf64_Verdef*)ptr; printf_dump(LOG_DEBUG, "The DT_VERDEF is at address %p\n", h->VerDef); break; case DT_FLAGS: @@ -340,55 +343,55 @@ elfheader_t* ParseElfHeader(FILE* f, const char* name, int exec) printf_dump(LOG_DEBUG, "PLT Table @%p (type=%ld 0x%zx/0x%0x)\n", (void*)h->jmprel, h->pltrel, h->pltsz, h->pltent); } if(h->DynStrTab && h->szDynStrTab) { - //DumpDynamicNeeded(h); cannot dump now, it's not loaded yet + //DumpDynamicNeeded64(h); cannot dump now, it's not loaded yet } } // look for PLT Offset - int ii = FindSection(h->SHEntries, h->numSHEntries, h->SHStrTab, ".got.plt"); + int ii = FindSection(h->SHEntries._64, h->numSHEntries, h->SHStrTab, ".got.plt"); if(ii) { - h->gotplt = h->SHEntries[ii].sh_addr; - h->gotplt_end = h->gotplt + h->SHEntries[ii].sh_size; + h->gotplt = h->SHEntries._64[ii].sh_addr; + h->gotplt_end = h->gotplt + h->SHEntries._64[ii].sh_size; printf_dump(LOG_DEBUG, "The GOT.PLT Table is at address %p\n", (void*)h->gotplt); } - ii = FindSection(h->SHEntries, h->numSHEntries, h->SHStrTab, ".got"); + ii = FindSection(h->SHEntries._64, h->numSHEntries, h->SHStrTab, ".got"); if(ii) { - h->got = h->SHEntries[ii].sh_addr; - h->got_end = h->got + h->SHEntries[ii].sh_size; + h->got = h->SHEntries._64[ii].sh_addr; + h->got_end = h->got + h->SHEntries._64[ii].sh_size; printf_dump(LOG_DEBUG, "The GOT Table is at address %p..%p\n", (void*)h->got, (void*)h->got_end); } - ii = FindSection(h->SHEntries, h->numSHEntries, h->SHStrTab, ".plt"); + ii = FindSection(h->SHEntries._64, h->numSHEntries, h->SHStrTab, ".plt"); if(ii) { - h->plt = h->SHEntries[ii].sh_addr; - h->plt_end = h->plt + h->SHEntries[ii].sh_size; + h->plt = h->SHEntries._64[ii].sh_addr; + h->plt_end = h->plt + h->SHEntries._64[ii].sh_size; printf_dump(LOG_DEBUG, "The PLT Table is at address %p..%p\n", (void*)h->plt, (void*)h->plt_end); } // grab version of symbols - ii = FindSection(h->SHEntries, h->numSHEntries, h->SHStrTab, ".gnu.version"); + ii = FindSection(h->SHEntries._64, h->numSHEntries, h->SHStrTab, ".gnu.version"); if(ii) { - h->VerSym = (Elf64_Half*)(h->SHEntries[ii].sh_addr); + h->VerSym = (Elf64_Half*)(h->SHEntries._64[ii].sh_addr); printf_dump(LOG_DEBUG, "The .gnu.version is at address %p\n", h->VerSym); } // grab .text for main code - ii = FindSection(h->SHEntries, h->numSHEntries, h->SHStrTab, ".text"); + ii = FindSection(h->SHEntries._64, h->numSHEntries, h->SHStrTab, ".text"); if(ii) { - h->text = (uintptr_t)(h->SHEntries[ii].sh_addr); - h->textsz = h->SHEntries[ii].sh_size; + h->text = (uintptr_t)(h->SHEntries._64[ii].sh_addr); + h->textsz = h->SHEntries._64[ii].sh_size; printf_dump(LOG_DEBUG, "The .text is at address %p, and is %zu big\n", (void*)h->text, h->textsz); } - ii = FindSection(h->SHEntries, h->numSHEntries, h->SHStrTab, ".eh_frame"); + ii = FindSection(h->SHEntries._64, h->numSHEntries, h->SHStrTab, ".eh_frame"); if(ii) { - h->ehframe = (uintptr_t)(h->SHEntries[ii].sh_addr); - h->ehframe_end = h->ehframe + h->SHEntries[ii].sh_size; + h->ehframe = (uintptr_t)(h->SHEntries._64[ii].sh_addr); + h->ehframe_end = h->ehframe + h->SHEntries._64[ii].sh_size; printf_dump(LOG_DEBUG, "The .eh_frame section is at address %p..%p\n", (void*)h->ehframe, (void*)h->ehframe_end); } - ii = FindSection(h->SHEntries, h->numSHEntries, h->SHStrTab, ".eh_frame_hdr"); + ii = FindSection(h->SHEntries._64, h->numSHEntries, h->SHStrTab, ".eh_frame_hdr"); if(ii) { - h->ehframehdr = (uintptr_t)(h->SHEntries[ii].sh_addr); + h->ehframehdr = (uintptr_t)(h->SHEntries._64[ii].sh_addr); printf_dump(LOG_DEBUG, "The .eh_frame_hdr section is at address %p\n", (void*)h->ehframehdr); } - LoadNamedSection(f, h->SHEntries, h->numSHEntries, h->SHStrTab, ".dynstr", "DynSym Strings", SHT_STRTAB, (void**)&h->DynStr, NULL); - LoadNamedSection(f, h->SHEntries, h->numSHEntries, h->SHStrTab, ".dynsym", "DynSym", SHT_DYNSYM, (void**)&h->DynSym, &h->numDynSym); + LoadNamedSection(f, h->SHEntries._64, h->numSHEntries, h->SHStrTab, ".dynstr", "DynSym Strings", SHT_STRTAB, (void**)&h->DynStr, NULL); + LoadNamedSection(f, h->SHEntries._64, h->numSHEntries, h->SHStrTab, ".dynsym", "DynSym", SHT_DYNSYM, (void**)&h->DynSym, &h->numDynSym); } return h; @@ -406,3 +409,16 @@ const char* BindSym(int bind) sprintf(tmp, "??? 0x%x", bind); return tmp; } + +const char* BindSymFriendly(int bind) +{ + switch(bind) { + case STB_GLOBAL: return "Global"; + case STB_WEAK: return "Weak"; + case STB_LOCAL: return "Local"; + case STB_GNU_UNIQUE: return "Unique"; + } + static char tmp[50]; + sprintf(tmp, "??? 0x%x", bind); + return tmp; +} diff --git a/src/elfs/elfparser32.c b/src/elfs/elfparser32.c new file mode 100755 index 0000000000000000000000000000000000000000..376bb34d178c60fde90edb27b1da23652c3094b3 --- /dev/null +++ b/src/elfs/elfparser32.c @@ -0,0 +1,468 @@ +#define _GNU_SOURCE +#include +#include +#include +#include + +#include "box64version.h" +#include "elfloader.h" +#include "debug.h" +#include "elfload_dump.h" +#include "elfloader_private.h" +#include "box32.h" + +#ifndef PN_XNUM +#define PN_XNUM (0xffff) +#endif + +static int LoadSH(FILE *f, Elf32_Shdr *s, void** SH, const char* name, uint32_t type) +{ + if(type && (s->sh_type != type)) { + printf_log(LOG_INFO, "Section Header \"%s\" (off=%d, size=%d) has incorect type (%d != %d)\n", name, s->sh_offset, s->sh_size, s->sh_type, type); + return -1; + } + if (type==SHT_SYMTAB && s->sh_size%sizeof(Elf32_Sym)) { + printf_log(LOG_INFO, "Section Header \"%s\" (off=%d, size=%d) has size (not multiple of %ld)\n", name, s->sh_offset, s->sh_size, sizeof(Elf32_Sym)); + } + *SH = box_calloc(1, s->sh_size); + fseeko64(f, s->sh_offset ,SEEK_SET); + if(fread(*SH, s->sh_size, 1, f)!=1) { + printf_log(LOG_INFO, "Cannot read Section Header \"%s\" (off=%d, size=%d)\n", name, s->sh_offset, s->sh_size); + return -1; + } + + return 0; +} + +static int FindSection(Elf32_Shdr *s, int n, char* SHStrTab, const char* name) +{ + for (int i=0; iname = box_strdup(name); + h->entrypoint = header.e_entry; + h->numPHEntries = header.e_phnum; + h->numSHEntries = header.e_shnum; + h->SHIdx = header.e_shstrndx; + h->e_type = header.e_type; + if(header.e_shentsize && header.e_shnum) { + // special cases for nums + if(h->numSHEntries == 0) { + printf_log(LOG_DEBUG, "Read number of Sections in 1st Section\n"); + // read 1st section header and grab actual number from here + fseeko64(f, header.e_shoff, SEEK_SET); + Elf32_Shdr section; + if(fread(§ion, sizeof(Elf32_Shdr), 1, f)!=1) { + box_free(h); + printf_log(LOG_INFO, "Cannot read Initial Section Header\n"); + return NULL; + } + h->numSHEntries = section.sh_size; + } + // now read all section headers + printf_log(LOG_DEBUG, "Read %d Section header\n", h->numSHEntries); + h->SHEntries._32 = (Elf32_Shdr*)box_calloc(h->numSHEntries, sizeof(Elf32_Shdr)); + fseeko64(f, header.e_shoff ,SEEK_SET); + if(fread(h->SHEntries._32, sizeof(Elf32_Shdr), h->numSHEntries, f)!=h->numSHEntries) { + FreeElfHeader(&h); + printf_log(LOG_INFO, "Cannot read all Section Header\n"); + return NULL; + } + + if(h->numPHEntries == PN_XNUM) { + printf_log(LOG_DEBUG, "Read number of Program Header in 1st Section\n"); + // read 1st section header and grab actual number from here + h->numPHEntries = h->SHEntries._32[0].sh_info; + } + } + + printf_log(LOG_DEBUG, "Read %d Program header\n", h->numPHEntries); + h->PHEntries._32 = (Elf32_Phdr*)box_calloc(h->numPHEntries, sizeof(Elf32_Phdr)); + fseeko64(f, header.e_phoff ,SEEK_SET); + if(fread(h->PHEntries._32, sizeof(Elf32_Phdr), h->numPHEntries, f)!=h->numPHEntries) { + FreeElfHeader(&h); + printf_log(LOG_INFO, "Cannot read all Program Header\n"); + return NULL; + } + + if(header.e_shentsize && header.e_shnum) { + if(h->SHIdx == SHN_XINDEX) { + printf_log(LOG_DEBUG, "Read number of String Table in 1st Section\n"); + h->SHIdx = h->SHEntries._32[0].sh_link; + } + if(h->SHIdx > h->numSHEntries) { + printf_log(LOG_INFO, "Incoherent Section String Table Index : %d / %d\n", h->SHIdx, h->numSHEntries); + FreeElfHeader(&h); + return NULL; + } + // load Section table + printf_log(LOG_DEBUG, "Loading Sections Table String (idx = %d)\n", h->SHIdx); + if(LoadSH(f, h->SHEntries._32+h->SHIdx, (void*)&h->SHStrTab, ".shstrtab", SHT_STRTAB)) { + FreeElfHeader(&h); + return NULL; + } + if(box64_dump) DumpMainHeader32(&header, h); + + LoadNamedSection(f, h->SHEntries._32, h->numSHEntries, h->SHStrTab, ".strtab", "SymTab Strings", SHT_STRTAB, (void**)&h->StrTab, NULL); + LoadNamedSection(f, h->SHEntries._32, h->numSHEntries, h->SHStrTab, ".symtab", "SymTab", SHT_SYMTAB, (void**)&h->SymTab._32, &h->numSymTab); + if(box64_dump && h->SymTab._32) DumpSymTab32(h); + + LoadNamedSection(f, h->SHEntries._32, h->numSHEntries, h->SHStrTab, ".dynamic", "Dynamic", SHT_DYNAMIC, (void**)&h->Dynamic._32, &h->numDynamic); + if(box64_dump && h->Dynamic._32) DumpDynamicSections32(h); + // grab DT_REL & DT_RELA stuffs + // also grab the DT_STRTAB string table + { + for (int i=0; inumDynamic; ++i) { + Elf32_Dyn d = h->Dynamic._32[i]; + Elf32_Word val = d.d_un.d_val; + Elf32_Addr ptr = d.d_un.d_ptr; + switch (d.d_tag) { + case DT_REL: + h->rel = ptr; + break; + case DT_RELSZ: + h->relsz = val; + break; + case DT_RELENT: + h->relent = val; + break; + case DT_RELA: + h->rela = ptr; + break; + case DT_RELASZ: + h->relasz = val; + break; + case DT_RELAENT: + h->relaent = val; + break; + case DT_RELR: + h->relr = ptr; + break; + case DT_RELRSZ: + h->relrsz = val; + break; + case DT_RELRENT: + h->relrent = val; + break; + case DT_PLTGOT: + h->pltgot = ptr; + break; + case DT_PLTREL: + h->pltrel = val; + break; + case DT_PLTRELSZ: + h->pltsz = val; + break; + case DT_JMPREL: + h->jmprel = ptr; + break; + case DT_STRTAB: + h->DynStrTab = (char *)from_ptr(ptr); + break; + case DT_STRSZ: + h->szDynStrTab = val; + break; + case DT_INIT: // Entry point + h->initentry = ptr; + printf_log(LOG_DEBUG, "The DT_INIT is at address %p\n", from_ptrv(h->initentry)); + break; + case DT_INIT_ARRAY: + h->initarray = ptr; + printf_log(LOG_DEBUG, "The DT_INIT_ARRAY is at address %p\n", from_ptrv(h->initarray)); + break; + case DT_INIT_ARRAYSZ: + h->initarray_sz = val / sizeof(Elf32_Addr); + printf_log(LOG_DEBUG, "The DT_INIT_ARRAYSZ is %d\n", h->initarray_sz); + break; + case DT_PREINIT_ARRAYSZ: + #ifndef ANDROID + if(val) + printf_log(LOG_NONE, "Warning, PreInit Array (size=%d) present and ignored!\n", val); + #endif + break; + case DT_FINI: // Exit hook + h->finientry = ptr; + printf_log(LOG_DEBUG, "The DT_FINI is at address %p\n", from_ptrv(h->finientry)); + break; + case DT_FINI_ARRAY: + h->finiarray = ptr; + printf_log(LOG_DEBUG, "The DT_FINI_ARRAY is at address %p\n", from_ptrv(h->finiarray)); + break; + case DT_FINI_ARRAYSZ: + h->finiarray_sz = val / sizeof(Elf32_Addr); + printf_log(LOG_DEBUG, "The DT_FINI_ARRAYSZ is %d\n", h->finiarray_sz); + break; + case DT_VERNEEDNUM: + h->szVerNeed = val; + printf_log(LOG_DEBUG, "The DT_VERNEEDNUM is %d\n", h->szVerNeed); + break; + case DT_VERNEED: + h->VerNeed._32 = (Elf32_Verneed*)from_ptr(ptr); + printf_log(LOG_DEBUG, "The DT_VERNEED is at address %p\n", h->VerNeed); + break; + case DT_VERDEFNUM: + h->szVerDef = val; + printf_log(LOG_DEBUG, "The DT_VERDEFNUM is %d\n", h->szVerDef); + break; + case DT_VERDEF: + h->VerDef._32 = (Elf32_Verdef*)from_ptr(ptr); + printf_log(LOG_DEBUG, "The DT_VERDEF is at address %p\n", h->VerDef); + break; + case DT_HASH: + h->hash = ptr; + printf_dump(LOG_DEBUG, "The DT_HASH is at address %p\n", (void*)h->hash); + break; + case DT_GNU_HASH: + h->gnu_hash = ptr; + printf_dump(LOG_DEBUG, "The DT_GNU_HASH is at address %p\n", (void*)h->gnu_hash); + break; + } + } + if(h->rel) { + if(h->relent != sizeof(Elf32_Rel)) { + printf_log(LOG_NONE, "Rel Table Entry size invalid (0x%x should be 0x%lx)\n", h->relent, sizeof(Elf32_Rel)); + FreeElfHeader(&h); + return NULL; + } + printf_log(LOG_DEBUG, "Rel Table @%p (0x%x/0x%x)\n", from_ptrv(h->rel), h->relsz, h->relent); + } + if(h->rela) { + if(h->relaent != sizeof(Elf32_Rela)) { + printf_log(LOG_NONE, "RelA Table Entry size invalid (0x%x should be 0x%lx)\n", h->relaent, sizeof(Elf32_Rela)); + FreeElfHeader(&h); + return NULL; + } + printf_log(LOG_DEBUG, "RelA Table @%p (0x%x/0x%x)\n", from_ptrv(h->rela), h->relasz, h->relaent); + } + if(h->jmprel) { + if(h->pltrel == DT_REL) { + h->pltent = sizeof(Elf32_Rel); + } else if(h->pltrel == DT_RELA) { + h->pltent = sizeof(Elf32_Rela); + } else { + printf_log(LOG_NONE, "PLT Table type is unknown (size = 0x%x, type=%d)\n", h->pltsz, h->pltrel); + FreeElfHeader(&h); + return NULL; + } + if((h->pltsz / h->pltent)*h->pltent != h->pltsz) { + printf_log(LOG_NONE, "PLT Table Entry size invalid (0x%x, ent=0x%x, type=%d)\n", h->pltsz, h->pltent, h->pltrel); + FreeElfHeader(&h); + return NULL; + } + printf_log(LOG_DEBUG, "PLT Table @%p (type=%d 0x%x/0x%0x)\n", from_ptrv(h->jmprel), h->pltrel, h->pltsz, h->pltent); + } + if(h->DynStrTab && h->szDynStrTab) { + //DumpDynamicNeeded32(h); cannot dump now, it's not loaded yet + } + } + // look for PLT Offset + int ii = FindSection(h->SHEntries._32, h->numSHEntries, h->SHStrTab, ".got.plt"); + if(ii) { + h->gotplt = h->SHEntries._32[ii].sh_addr; + h->gotplt_end = h->gotplt + h->SHEntries._32[ii].sh_size; + printf_log(LOG_DEBUG, "The GOT.PLT Table is at address %p\n", from_ptrv(h->gotplt)); + } + ii = FindSection(h->SHEntries._32, h->numSHEntries, h->SHStrTab, ".got"); + if(ii) { + h->got = h->SHEntries._32[ii].sh_addr; + h->got_end = h->got + h->SHEntries._32[ii].sh_size; + printf_log(LOG_DEBUG, "The GOT Table is at address %p..%p\n", from_ptrv(h->got), from_ptrv(h->got_end)); + } + ii = FindSection(h->SHEntries._32, h->numSHEntries, h->SHStrTab, ".plt"); + if(ii) { + h->plt = h->SHEntries._32[ii].sh_addr; + h->plt_end = h->plt + h->SHEntries._32[ii].sh_size; + printf_log(LOG_DEBUG, "The PLT Table is at address %p..%p\n", from_ptrv(h->plt), from_ptrv(h->plt_end)); + } + // grab version of symbols + ii = FindSection(h->SHEntries._32, h->numSHEntries, h->SHStrTab, ".gnu.version"); + if(ii) { + h->VerSym = (Elf32_Half*)from_ptrv(h->SHEntries._32[ii].sh_addr); + printf_log(LOG_DEBUG, "The .gnu.version is at address %p\n", h->VerSym); + } + // grab .text for main code + ii = FindSection(h->SHEntries._32, h->numSHEntries, h->SHStrTab, ".text"); + if(ii) { + h->text = (uintptr_t)(h->SHEntries._32[ii].sh_addr); + h->textsz = h->SHEntries._32[ii].sh_size; + printf_log(LOG_DEBUG, "The .text is at address %p, and is %d big\n", from_ptrv(h->text), h->textsz); + } + + LoadNamedSection(f, h->SHEntries._32, h->numSHEntries, h->SHStrTab, ".dynstr", "DynSym Strings", SHT_STRTAB, (void**)&h->DynStr, NULL); + LoadNamedSection(f, h->SHEntries._32, h->numSHEntries, h->SHStrTab, ".dynsym", "DynSym", SHT_DYNSYM, (void**)&h->DynSym, &h->numDynSym); + } + + return h; +} + +const char* GetParentSymbolVersion32(elfheader_t* h, int index) +{ + if(!h->VerDef._32 || (index<1)) + return NULL; + Elf32_Verdef *def = (Elf32_Verdef*)((uintptr_t)h->VerDef._32 + h->delta); + while(def) { + if(def->vd_ndx==index) { + if(def->vd_cnt<1) + return NULL; + /*if(def->vd_flags&VER_FLG_BASE) + return NULL;*/ + Elf32_Verdaux *aux = (Elf32_Verdaux*)((uintptr_t)def + def->vd_aux); + return h->DynStr+aux->vda_name; // return Parent, so 1st aux + } + def = def->vd_next?((Elf32_Verdef*)((uintptr_t)def + def->vd_next)):NULL; + } + return NULL; +} + +const char* GetSymbolVersion32(elfheader_t* h, int version) +{ + version&=0x7fff; // remove bit15 that switch between hidden/public + if(!h->VerNeed._32 || (version<2)) + return NULL; + /*if(version==1) + return "*";*/ + Elf32_Verneed *ver = (Elf32_Verneed*)((uintptr_t)h->VerNeed._32 + h->delta); + while(ver) { + Elf32_Vernaux *aux = (Elf32_Vernaux*)((uintptr_t)ver + ver->vn_aux); + for(int j=0; jvn_cnt; ++j) { + if(aux->vna_other==version) + return h->DynStr+aux->vna_name; + aux = (Elf32_Vernaux*)((uintptr_t)aux + aux->vna_next); + } + ver = ver->vn_next?((Elf32_Verneed*)((uintptr_t)ver + ver->vn_next)):NULL; + } + return GetParentSymbolVersion32(h, version); // if symbol is "internal", use Def table instead +} + +int GetVersionIndice32(elfheader_t* h, const char* vername) +{ + if(!vername) + return 0; + if(h->VerDef._32) { + Elf32_Verdef *def = (Elf32_Verdef*)((uintptr_t)h->VerDef._32 + h->delta); + while(def) { + Elf32_Verdaux *aux = (Elf32_Verdaux*)((uintptr_t)def + def->vd_aux); + if(!strcmp(h->DynStr+aux->vda_name, vername)) + return def->vd_ndx; + def = def->vd_next?((Elf32_Verdef*)((uintptr_t)def + def->vd_next)):NULL; + } + } + return 0; +} + +int GetNeededVersionCnt32(elfheader_t* h, const char* libname) +{ + if(!libname) + return 0; + if(h->VerNeed._32) { + Elf32_Verneed *ver = (Elf32_Verneed*)((uintptr_t)h->VerNeed._32 + h->delta); + while(ver) { + char *filename = h->DynStr + ver->vn_file; + Elf32_Vernaux *aux = (Elf32_Vernaux*)((uintptr_t)ver + ver->vn_aux); + if(!strcmp(filename, libname)) + return ver->vn_cnt; + ver = ver->vn_next?((Elf32_Verneed*)((uintptr_t)ver + ver->vn_next)):NULL; + } + } + return 0; +} + +const char* GetNeededVersionString32(elfheader_t* h, const char* libname, int idx) +{ + if(!libname) + return 0; + if(h->VerNeed._32) { + Elf32_Verneed *ver = (Elf32_Verneed*)((uintptr_t)h->VerNeed._32 + h->delta); + while(ver) { + char *filename = h->DynStr + ver->vn_file; + Elf32_Vernaux *aux = (Elf32_Vernaux*)((uintptr_t)ver + ver->vn_aux); + if(!strcmp(filename, libname)) { + for(int j=0; jvn_cnt; ++j) { + if(j==idx) + return h->DynStr+aux->vna_name; + aux = (Elf32_Vernaux*)((uintptr_t)aux + aux->vna_next); + } + return NULL; // idx out of bound, return NULL... + } + ver = ver->vn_next?((Elf32_Verneed*)((uintptr_t)ver + ver->vn_next)):NULL; + } + } + return NULL; +} diff --git a/src/emu/ca11c0de.c b/src/emu/ca11c0de.c new file mode 100644 index 0000000000000000000000000000000000000000..bb6a9417fa8a5d3884c37f583eb6e6f6c270bf35 --- /dev/null +++ b/src/emu/ca11c0de.c @@ -0,0 +1,112 @@ +#include +#include +#include +#include + +#include "debug.h" +#include "box64stack.h" +#include "x64emu.h" +#include "x64run.h" +#include "x64emu_private.h" +#include "x64run_private.h" +//#include "x64primop.h" +#include "x64trace.h" +//#include "myalign.h" +#include "box64context.h" +#include "callback.h" +#include "signals.h" +#include "x64tls.h" + +extern int (*host_signal_notify)(void*); + +enum qemu_host_event_t +{ + QEMU_HOST_UNKNOWN = 0, + QEMU_HOST_DLOPEN, + QEMU_HOST_DLSYM, + QEMU_HOST_DLCLOSE, + QEMU_HOST_MMAN, + QEMU_HOST_SIGNAL_NOTIFY, + QEMU_HOST_SIGNAL_CALLBACK, +}; + +struct qemu_event_context_t +{ + x64emu_t *emu; + union { enum qemu_host_event_t event; void* unused; }; +}; + +extern void* my_mmap(x64emu_t* emu, void *addr, unsigned long length, int prot, int flags, int fd, int64_t offset); +extern int my_munmap(x64emu_t* emu, void* addr, unsigned long length); +extern int my_mprotect(x64emu_t* emu, void *addr, unsigned long len, int prot); +extern void user_sigactionhandler(void* args); + +static void *target_mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset) +{ + return my_mmap(NULL, addr, len, prot, flags, fd, (int64_t)offset); +} + +static int target_munmap(void* addr, unsigned long len) +{ + return my_munmap(NULL, addr, len); +} + +static int target_mprotect(void *addr, unsigned long len, int prot) +{ + return my_mprotect(NULL, addr, len, prot); +} + +#define target_madvise madvise + +extern int my_pthread_create(x64emu_t *emu, void* t, void* attr, void* start_routine, void* arg); + +static void qemu_host_handle_event(struct qemu_event_context_t* $context) +{ + switch($context->event) { + case QEMU_HOST_DLOPEN: { + struct { struct qemu_event_context_t $context; const char* name; void* $ret; } *_ = (typeof(_))$context; + _->$ret = dlopen(_->name, 2); + break; + } + case QEMU_HOST_DLSYM: { + struct { struct qemu_event_context_t $context; void* handle; const char* name; void* $ret; } *_ = (typeof(_))$context; + _->$ret = dlsym(_->handle, _->name); + break; + } + case QEMU_HOST_DLCLOSE: { + struct { struct qemu_event_context_t $context; void* handle; } *_ = (typeof(_))$context; + dlclose(_->handle); + break; + } + case QEMU_HOST_MMAN: { + struct { struct qemu_event_context_t $context; void *p_mmap, *p_munmap, *p_mprotect, *p_madvise; } *_ = (typeof(_))$context; + _->p_mmap = &target_mmap; + _->p_munmap = &target_munmap; + _->p_mprotect = &target_mprotect; + _->p_madvise = &target_madvise; + break; + } + case QEMU_HOST_SIGNAL_NOTIFY: { + struct { struct qemu_event_context_t $context; void* handle; } *_ = (typeof(_))$context; + host_signal_notify = (typeof(host_signal_notify))_->handle; + break; + } + case QEMU_HOST_SIGNAL_CALLBACK: { + struct { struct qemu_event_context_t $context; void* args; } *_ = (typeof(_))$context; + user_sigactionhandler(_->args); + break; + } + default: + break; + } +} + +__attribute__((visibility("default"))) void my_qemu_host_direct_call(void* arg) +{ + typeof(qemu_host_handle_event)* func = *(typeof(func)*)arg; + if(func) { + (*func)((struct qemu_event_context_t*)arg); + } else { + *(void**)arg = &qemu_host_handle_event; + } +} \ No newline at end of file diff --git a/src/emu/modrm.h b/src/emu/modrm.h index 2f2cd1fc641ab5699367ac8a6608f9a4da08c52b..fcfc7dc68aa989077c28b8c598ef3914113db383 100644 --- a/src/emu/modrm.h +++ b/src/emu/modrm.h @@ -11,9 +11,9 @@ #define F64S *(int64_t*)(addr+=8, addr-8) #define PK(a) *(uint8_t*)(addr+a) #ifdef DYNAREC -#define STEP if(step) return 0; -#define STEP2 if(step) {R_RIP = addr; return 0;} -#define STEP3 if(*step) (*step)++; +#define STEP check_exec(emu, addr); if(step) return 0; +#define STEP2 check_exec(emu, addr); if(step) {R_RIP = addr; return 0;} +#define STEP3 check_exec(emu, addr); if(*step) (*step)++; #else #define STEP #define STEP2 @@ -23,7 +23,9 @@ #ifdef TEST_INTERPRETER #define GETED(D) oped=TestEd(test, &addr, rex, nextop, D) #define GETE4(D) oped=TestEd4(test, &addr, rex, nextop, D) +#define GETE4_OFFS(D, O) oped=TestEd4O(test, &addr, rex, nextop, D, O) #define GETE8(D) oped=TestEd8(test, &addr, rex, nextop, D) +#define GETE8_OFFS(D, O) oped=TestEd8O(test, &addr, rex, nextop, D, O) #define GETET(D) oped=TestEdt(test, &addr, rex, nextop, D) #define GETE8xw(D) oped=TestEd8xw(test, rex.w, &addr, rex, nextop, D) #define GETED32(D) oped=TestEd32O(test, &addr, rex, nextop, D, 0) @@ -56,7 +58,9 @@ #else #define GETED(D) oped=GetEd(emu, &addr, rex, nextop, D) #define GETE4(D) GETED(D) +#define GETE4_OFFS(D, O) GETED_OFFS(D, O) #define GETE8(D) GETED(D) +#define GETE8_OFFS(D, O) GETED_OFFS(D, O) #define GETET(D) GETED(D) #define GETE8xw(D) GETED(D) #define GETED32(D) oped=GetEd32O(emu, &addr, rex, nextop, D, 0) @@ -107,6 +111,7 @@ #define GETEA(D) GetEA(emu, &addr, rex, nextop, D) #define GETEA32(D) GetEA32(emu, &addr, rex, nextop, D) #define _GETED(D) oped=GetEd(emu, &addr, rex, nextop, D) +#define _GETED_OFFS(D, O) oped=GetEdO(emu, &addr, rex, nextop, D, O) #define _GETED32(D) oped=GetEd32O(emu, &addr, rex, nextop, D, 0) #define _GETEB(D) oped=GetEb(emu, &addr, rex, nextop, D) #define _GETEX(D) opex=GetEx(emu, &addr, rex, nextop, D) diff --git a/src/emu/x64emu.c b/src/emu/x64emu.c index f08652990301636bf964b755f2dd82900d5d7f22..760ba17046eb39383488ac72617454fa86497003 100644 --- a/src/emu/x64emu.c +++ b/src/emu/x64emu.c @@ -64,11 +64,29 @@ static void internalX64Setup(x64emu_t* emu, box64context_t *context, uintptr_t s // set default value R_RIP = start; R_RSP = (stack + stacksize) & ~7; // align stack start, always + #ifdef BOX32 + if(box64_is32bits) { + if(stack>=0x100000000LL) { + printf_log(LOG_NONE, "BOX32: Stack pointer too high (%p), aborting\n", (void*)stack); + abort(); + } + if(R_RSP>=0x100000000LL) { // special case, stack is just a bit too high + R_RSP = 0x100000000LL - 16; + } + } + #endif // fake init of segments... - emu->segs[_CS] = 0x33; - emu->segs[_DS] = emu->segs[_ES] = emu->segs[_SS] = 0x2b; - emu->segs[_FS] = 0x43; - emu->segs[_GS] = default_gs; + if(box64_is32bits) { + emu->segs[_CS] = 0x23; + emu->segs[_DS] = emu->segs[_ES] = emu->segs[_SS] = 0x2b; + emu->segs[_FS] = default_fs; + emu->segs[_GS] = 0x33; + } else { + emu->segs[_CS] = 0x33; + emu->segs[_DS] = emu->segs[_ES] = emu->segs[_SS] = 0x2b; + emu->segs[_FS] = 0x43; + emu->segs[_GS] = default_gs; + } // setup fpu regs reset_fpu(emu); emu->mxcsr.x32 = 0x1f80; @@ -77,9 +95,9 @@ static void internalX64Setup(x64emu_t* emu, box64context_t *context, uintptr_t s EXPORTDYN x64emu_t *NewX64Emu(box64context_t *context, uintptr_t start, uintptr_t stack, int stacksize, int ownstack) { - printf_log(LOG_DEBUG, "Allocate a new X86_64 Emu, with EIP=%p and Stack=%p/0x%X\n", (void*)start, (void*)stack, stacksize); + printf_log(LOG_DEBUG, "Allocate a new X86_64 Emu, with %cIP=%p and Stack=%p/0x%X\n", box64_is32bits?'E':'R', (void*)start, (void*)stack, stacksize); - x64emu_t *emu = (x64emu_t*)box_calloc(1, sizeof(x64emu_t)); + x64emu_t *emu = (x64emu_t*)actual_calloc(1, sizeof(x64emu_t)); internalX64Setup(emu, context, start, stack, stacksize, ownstack); @@ -161,7 +179,7 @@ void CallCleanup(x64emu_t *emu, elfheader_t* h) if(!h) return; for(int i=h->clean_sz-1; i>=0; --i) { - printf_log(LOG_DEBUG, "Call cleanup #%d\n", i); + printf_log(LOG_DEBUG, "Call cleanup #%d (args:%d, arg:%p)\n", i, h->cleanups[i].arg, h->cleanups[i].a); RunFunctionWithEmu(emu, 0, (uintptr_t)(h->cleanups[i].f), h->cleanups[i].arg, h->cleanups[i].a ); // now remove the cleanup if(i!=h->clean_sz-1) @@ -184,10 +202,8 @@ void CallAllCleanup(x64emu_t *emu) static void internalFreeX64(x64emu_t* emu) { - if(emu && emu->stack2free) { - if(!internal_munmap(emu->stack2free, emu->size_stack)) - freeProtection((uintptr_t)emu->stack2free, emu->size_stack); - } + if(emu && emu->stack2free) + !munmap(emu->stack2free, emu->size_stack); } EXPORTDYN @@ -199,12 +215,12 @@ void FreeX64Emu(x64emu_t **emu) if((*emu)->test.emu) { internalFreeX64((*emu)->test.emu); - box_free((*emu)->test.emu); + actual_free((*emu)->test.emu); (*emu)->test.emu = NULL; } internalFreeX64(*emu); - box_free(*emu); + actual_free(*emu); *emu = NULL; } @@ -246,10 +262,7 @@ void CloneEmu(x64emu_t *newemu, const x64emu_t* emu) newemu->mxcsr = emu->mxcsr; newemu->quit = emu->quit; newemu->error = emu->error; - // adapt R_RSP to new stack frame - uintptr_t oldst = (uintptr_t)((emu->init_stack)?emu->init_stack:emu->context->stack); - uintptr_t newst = (uintptr_t)((newemu->init_stack)?newemu->init_stack:newemu->context->stack); - newemu->regs[_SP].q[0] = emu->regs[_SP].q[0] + (intptr_t)(newst - oldst); + newemu->x64emu_parity_tab = emu->x64emu_parity_tab; } void CopyEmu(x64emu_t *newemu, const x64emu_t* emu) @@ -325,10 +338,14 @@ void SetEBP(x64emu_t *emu, uint32_t v) { R_EBP = v; } -//void SetESP(x64emu_t *emu, uint32_t v) -//{ -// R_ESP = v; -//} +void SetESP(x64emu_t *emu, uint32_t v) +{ + R_ESP = v; +} +void SetEIP(x64emu_t *emu, uint32_t v) +{ + R_EIP = v; +} void SetRAX(x64emu_t *emu, uint64_t v) { R_RAX = v; @@ -373,7 +390,7 @@ uint64_t GetRBP(x64emu_t *emu) { return R_RBP; } -/*void SetFS(x64emu_t *emu, uint16_t v) +void SetFS(x64emu_t *emu, uint16_t v) { emu->segs[_FS] = v; emu->segs_serial[_FS] = 0; @@ -381,7 +398,7 @@ uint64_t GetRBP(x64emu_t *emu) uint16_t GetFS(x64emu_t *emu) { return emu->segs[_FS]; -}*/ +} void ResetFlags(x64emu_t *emu) @@ -533,16 +550,32 @@ void StopEmu(x64emu_t* emu, const char* reason, int is32bits) // dump stuff... printf_log(LOG_NONE, "==== CPU Registers ====\n%s\n", DumpCPURegs(emu, R_RIP, is32bits)); printf_log(LOG_NONE, "======== Stack ========\nStack is from %lX to %lX\n", R_RBP, R_RSP); - if (R_RBP == R_RSP) { - printf_log(LOG_NONE, "RBP = RSP: leaf function detected; next 128 bytes should be either data or random.\n"); + if(emu->segs[_CS]==0x23) { + if (R_EBP == R_ESP) { + printf_log(LOG_NONE, "EBP = ESP: leaf function detected; next 128 bytes should be either data or random.\n"); + } else { + // TODO: display stack if operation should be allowed (to avoid crashes) + /* for (uint64_t *sp = R_RBP; sp >= R_RSP; --sp) { + } */ + } } else { - // TODO: display stack if operation should be allowed (to avoid crashes) - /* for (uint64_t *sp = R_RBP; sp >= R_RSP; --sp) { - } */ + if (R_RBP == R_RSP) { + printf_log(LOG_NONE, "RBP = RSP: leaf function detected; next 128 bytes should be either data or random.\n"); + } else { + // TODO: display stack if operation should be allowed (to avoid crashes) + /* for (uint64_t *sp = R_RBP; sp >= R_RSP; --sp) { + } */ + } } printf_log(LOG_NONE, "Old IP: %tX\n", emu->old_ip); #ifdef HAVE_TRACE - printf_log(LOG_NONE, "%s\n", DecodeX64Trace(my_context->dec, emu->old_ip)); + if(box64_is32bits) { + if(my_context->dec32) + printf_log(LOG_NONE, "%s\n", DecodeX64Trace(my_context->dec32, emu->old_ip)); + } else { + if(my_context->dec) + printf_log(LOG_NONE, "%s\n", DecodeX64Trace(my_context->dec, emu->old_ip)); + } #endif } @@ -570,20 +603,48 @@ void EmuCall(x64emu_t* emu, uintptr_t addr) uint64_t old_rsi = R_RSI; uint64_t old_rbp = R_RBP; uint64_t old_rip = R_RIP; + x64flags_t old_eflags = emu->eflags; + // save defered flags + deferred_flags_t old_df = emu->df; + multiuint_t old_op1 = emu->op1; + multiuint_t old_op2 = emu->op2; + multiuint_t old_res = emu->res; + multiuint_t old_op1_sav= emu->op1_sav; + multiuint_t old_res_sav= emu->res_sav; + deferred_flags_t old_df_sav= emu->df_sav; + // uc_link + void* old_uc_link = emu->uc_link; + emu->uc_link = NULL; //Push64(emu, GetRBP(emu)); // set frame pointer //SetRBP(emu, GetRSP(emu)); // save RSP - R_RSP -= 200; - R_RSP &= ~63LL; - PushExit(emu); + //R_RSP -= 200; + //R_RSP &= ~63LL; + #ifdef BOX32 + if(box64_is32bits) + PushExit_32(emu); + else + #endif + PushExit(emu); R_RIP = addr; emu->df = d_none; Run(emu, 0); emu->quit = 0; // reset Quit flags... emu->df = d_none; + emu->uc_link = old_uc_link; if(emu->flags.quitonlongjmp && emu->flags.longjmp) { if(emu->flags.quitonlongjmp==1) emu->flags.longjmp = 0; // don't change anything because of the longjmp } else { + // restore defered flags + emu->df = old_df; + emu->op1 = old_op1; + emu->op2 = old_op2; + emu->res = old_res; + emu->op1_sav = old_op1_sav; + emu->res_sav = old_res_sav; + emu->df_sav = old_df_sav; + // and the old registers + emu->eflags = old_eflags; R_RBX = old_rbx; R_RDI = old_rdi; R_RSI = old_rsi; diff --git a/src/emu/x64emu_private.h b/src/emu/x64emu_private.h index bef4a9a43295ac93b224ac49c90f40a56d1746e0..0c02f5edf1c38e35a532b3be2ea85b97fe8a5f67 100644 --- a/src/emu/x64emu_private.h +++ b/src/emu/x64emu_private.h @@ -5,6 +5,9 @@ typedef struct box64context_s box64context_t; typedef struct x64_ucontext_s x64_ucontext_t; +#ifdef BOX32 +typedef struct i386_ucontext_s i386_ucontext_t; +#endif #define ERR_UNIMPL 1 #define ERR_DIVBY0 2 @@ -37,7 +40,6 @@ typedef struct x64test_s { int memsize; int test; int clean; - int notest; uint8_t mem[32]; } x64test_t; @@ -56,6 +58,8 @@ typedef struct emu_flags_s { #define JUMPBUFF struct __jmp_buf_tag #endif +#define N_SCRATCH 200 + typedef struct x64emu_s { // cpu reg64_t regs[16]; @@ -116,7 +120,8 @@ typedef struct x64emu_s { uintptr_t prev2_ip; #endif // scratch stack, used for alignment of double and 64bits ints on arm. 200 elements should be enough - uint64_t scratch[200]; + __int128_t dummy_align; // here to have scratch 128bits aligned + uint64_t scratch[N_SCRATCH]; // local stack, do be deleted when emu is freed void* stack2free; // this is the stack to free (can be NULL) void* init_stack; // initial stack (owned or not) @@ -126,9 +131,22 @@ typedef struct x64emu_s { uintptr_t old_savedsp; #endif - x64_ucontext_t *uc_link; // to handle setcontext + void* uc_link; // to handle setcontext (can be x64_ucontext_t or a i386_ucontext_t) int type; // EMUTYPE_xxx define + #ifdef BOX32 + int libc_err; // copy of errno from libc + int libc_herr; // copy of h_errno from libc + unsigned short libctype[384]; // copy from __ctype_b address might be too high + const unsigned short* ref_ctype; + const unsigned short* ctype; + int libctolower[384]; // copy from __ctype_b_tolower address might be too high + const int* ref_tolower; + const int* tolower; + int libctoupper[384]; // copy from __ctype_b_toupper address might be too high + const int* ref_toupper; + const int* toupper; + #endif } x64emu_t; #define EMUTYPE_NONE 0 diff --git a/src/emu/x64int3.c b/src/emu/x64int3.c index 14493647a7fd16011a279f32b4ee504abb2ce1d9..349974facaf892f79d7a2be4ea6e54515b8a7bb3 100644 --- a/src/emu/x64int3.c +++ b/src/emu/x64int3.c @@ -88,6 +88,10 @@ static uint8_t Peek8(uintptr_t addr, uintptr_t offset) void x64Int3(x64emu_t* emu, uintptr_t* addr) { + if(box64_is32bits) { + x86Int3(emu,addr); + return; + } onebridge_t* bridge = (onebridge_t*)(*addr-1); if(Peek8(*addr, 0)=='S' && Peek8(*addr, 1)=='C') // Signature for "Out of x86 door" { @@ -127,14 +131,14 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) const char *s = bridge->name; if(!s) s = GetNativeName((void*)a); - if(a==(uintptr_t)PltResolver) { + if(a==(uintptr_t)PltResolver64) { if(cycle_log) { uintptr_t addr = *((uint64_t*)(R_RSP)); int slot = *((uint64_t*)(R_RSP+8)); elfheader_t *h = (elfheader_t*)addr; Elf64_Rela * rel = (Elf64_Rela *)(h->jmprel + h->delta) + slot; - Elf64_Sym *sym = &h->DynSym[ELF64_R_SYM(rel->r_info)]; - const char* symname = SymName(h, sym); + Elf64_Sym *sym = &h->DynSym._64[ELF64_R_SYM(rel->r_info)]; + const char* symname = SymName64(h, sym); snprintf(buff, 256, "%04d|PltResolver \"%s\"", tid, symname?symname:"???"); } else { snprintf(buff, 256, "%s", " ... "); @@ -153,7 +157,7 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) perr = 2; } else if (!strcmp(s, "__openat64") || !strcmp(s, "openat64") || !strcmp(s, "__openat64_2")) { tmp = (char*)(R_RSI); - snprintf(buff, 256, "%04d|%p: Calling %s(%d, \"%s\", %d (,%d))", tid, *(void**)(R_RSP), s, (int)R_EDI, (tmp)?tmp:"(nil)", (int)(R_EDX), (int)(R_ECX)); + snprintf(buff, 256, "%04d|%p: Calling %s(%d, \"%s\", %d (,%d))", tid, *(void**)(R_RSP), s, S_EDI, (tmp)?tmp:"(nil)", (int)(R_EDX), (int)(R_ECX)); perr = 1; } else if (!strcmp(s, "readlink")) { tmp = (char*)(R_RDI); @@ -191,11 +195,14 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) snprintf(buff, 256, "%04d|%p: Calling %s(%d, %p, %d)", tid, *(void**)(R_RSP), s, R_EDI, pu32, R_EDX); perr = 1; post = 6; + } else if (!strcmp(s, "ioctl")) { + snprintf(buff, 256, "%04d|%p: Calling %s(%d, 0x%x, %p)", tid, *(void**)(R_RSP), s, S_EDI, R_ESI, (void*)R_RDX); + perr = 1; } else if (!strcmp(s, "lseek64")) { - snprintf(buff, 256, "%04d|%p: Calling %s(%d, %ld, %d)", tid, *(void**)(R_RSP), s, (int)R_EDI, (int64_t)R_RSI, (int)R_EDX); + snprintf(buff, 256, "%04d|%p: Calling %s(%d, %ld, %d)", tid, *(void**)(R_RSP), s, S_EDI, (int64_t)R_RSI, S_EDX); perr = 1; } else if (!strcmp(s, "lseek")) { - snprintf(buff, 256, "%04d|%p: Calling %s(%d, %ld, %d)", tid, *(void**)(R_RSP), s, (int)R_EDI, (int64_t)R_RSI, (int)R_EDX); + snprintf(buff, 256, "%04d|%p: Calling %s(%d, %ld, %d)", tid, *(void**)(R_RSP), s, S_EDI, (int64_t)R_RSI, S_EDX); perr = 1; } else if (!strcmp(s, "recvmsg")) { snprintf(buff, 256, "%04d|%p: Calling %s(%d, %p, 0x%x)", tid, *(void**)(R_RSP), s, R_EDI, (void*)R_RSI, R_EDX); @@ -209,6 +216,9 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) } else if (strstr(s, "puts")==s) { tmp = (char*)(R_RDI); snprintf(buff, 256, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)(R_RSP), s, (tmp)?tmp:"(nil)"); + } else if (!strcmp(s, "syscall")) { + snprintf(buff, 256, "%04d|%p: Calling %s(%d, %p, %p....)", tid, *(void**)(R_RSP), s, S_EDI, (void*)R_RSI, (void*)R_RDX); + perr = 1; } else if (strstr(s, "strlen")==s) { tmp = (char*)(R_RDI); snprintf(buff, 256, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)(R_RSP), s, (tmp)?tmp:"(nil)"); @@ -249,6 +259,8 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) } else if (!strcmp(s, "vfprintf") || !strcmp(s, "my_vfprintf")) { tmp = (char*)((R_RSI>2)?R_RSI:R_RDX); snprintf(buff, 256, "%04d|%p: Calling %s(%p, \"%s\", ...)", tid, *(void**)(R_RSP), s, (void*)R_RDI, (tmp)?tmp:"(nil)"); + } else if (!strcmp(s, "g_source_set_name")) { + snprintf(buff, 256, "%04d|%p: Calling %s(%p, \"%s\")", tid, *(void**)(R_RSP), s, (void*)R_RDI, (char*)R_RSI); } else if (!strcmp(s, "getcwd")) { post = 2; snprintf(buff, 256, "%04d|%p: Calling %s(%p, %zu)", tid, *(void**)(R_RSP), s, (void*)R_RDI, R_RSI); @@ -256,6 +268,9 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) tmp = (char*)(R_RDI); perr = 1; snprintf(buff, 256, "%04d|%p: Calling %s(\"%s\", %d)", tid, *(void**)(R_RSP), s, tmp?tmp:"nil", R_ESI); + } else if (!strcmp(s, "xcb_wait_for_event") || !strcmp(s, "xcb_poll_for_queued_event") || !strcmp(s, "xcb_poll_for_event")) { + post = 9; + snprintf(buff, 256, "%04d|%p: Calling %s(%p)", tid, *(void**)(R_RSP), s, (void*)R_RDI); } else if (!strcmp(s, "glXGetProcAddress") || !strcmp(s, "SDL_GL_GetProcAddress") || !strcmp(s, "glXGetProcAddressARB")) { tmp = (char*)(R_RDI); snprintf(buff, 256, "%04d|%p: Calling %s(\"%s\")", tid, *(void**)(R_RSP), s, (tmp)?tmp:"(nil)"); @@ -283,7 +298,7 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) snprintf(buff, 256, "%04d|%p: Calling %s(%p, %p, %d, %d, %d, %d, %p)", tid, *(void**)(R_RSP), s, (void*)R_RDI, (void*)R_RSI, R_EDX, R_ECX, R_R8d, R_R9d, *(void**)(R_RSP+8)); } else if (!strcmp(s, "mmap64") || !strcmp(s, "mmap")) { snprintf(buff, 256, "%04d|%p: Calling %s(%p, 0x%lx, 0x%x, 0x%x, %d, %ld)", tid, *(void**)(R_RSP), s, - (void*)R_RDI, R_RSI, (int)(R_RDX), (int)R_RCX, (int)R_R8, R_R9); + (void*)R_RDI, R_RSI, (int)(R_RDX), S_RCX, S_R8, R_R9); perr = 3; } else if (!strcmp(s, "sscanf")) { tmp = (char*)(R_RSI); @@ -294,7 +309,7 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) } else if (!strcmp(s, "XCreateWindow")) { tmp = (char*)(R_RSI); snprintf(buff, 256, "%04d|%p: Calling %s(%p, %p, %d, %d, %u, %u, %u, %d, %u, %p, 0x%lx, %p)", tid, *(void**)(R_RSP), s, - (void*)R_RDI, (void*)R_RSI, (int)R_EDX, (int)R_ECX, R_R8d, R_R9d, + (void*)R_RDI, (void*)R_RSI, S_EDX, S_ECX, R_R8d, R_R9d, (uint32_t)*(uint64_t*)(R_RSP+8), (int)*(uint64_t*)(R_RSP+16), (uint32_t)*(uint64_t*)(R_RSP+24), (void*)*(uint64_t*)(R_RSP+32), (unsigned long)*(uint64_t*)(R_RSP+40), (void*)*(uint64_t*)(R_RSP+48)); @@ -344,12 +359,17 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) snprintf(buff2, 64, "[%s%s] ", buff5, (n==S_EAX)?"":"..."); } break; + case 9: if(R_RAX) { + uint8_t type = *(uint8_t*)(R_RAX); + snprintf(buff2, 64, "[type=%d]", type); + } + break; } - if(perr==1 && ((int)R_EAX)<0) + if(perr==1 && (S_EAX)<0) snprintf(buff3, 64, " (errno=%d:\"%s\")", errno, strerror(errno)); else if(perr==2 && R_EAX==0) snprintf(buff3, 64, " (errno=%d:\"%s\")", errno, strerror(errno)); - else if(perr==3 && ((int64_t)R_RAX)==-1) + else if(perr==3 && (S_RAX)==-1) snprintf(buff3, 64, " (errno=%d:\"%s\")", errno, strerror(errno)); if(cycle_log) @@ -381,7 +401,7 @@ int GetTID() void print_cycle_log(int loglevel) { if(cycle_log) { - printf_log(LOG_INFO, "Last calls\n"); + printf_log(loglevel, "Last calls\n"); int j = (my_context->current_line+1)%cycle_log; for (int i=0; idf = d_shl8; emu->op1.u8 = d; emu->op2.u8 = s; - emu->res.u8 = d << s; + emu->res.u8 = (s>7) ? 0 : (d<res.u8; } else @@ -327,7 +327,7 @@ static inline uint16_t shl16(x64emu_t *emu, uint16_t d, uint8_t s) emu->df = d_shl16; emu->op1.u16 = d; emu->op2.u16 = s; - emu->res.u16 = d << s; + emu->res.u16 = (s>15) ? 0 : (d<res.u16; } else return d; @@ -374,7 +374,7 @@ static inline uint8_t shr8(x64emu_t *emu, uint8_t d, uint8_t s) emu->df = d_shr8; emu->op1.u8 = d; emu->op2.u8 = s; - emu->res.u8 = d >> s; + emu->res.u8 = (s>7) ? 0 : (d>>s); return emu->res.u8; } else @@ -390,7 +390,7 @@ static inline uint16_t shr16(x64emu_t *emu, uint16_t d, uint8_t s) emu->df = d_shr16; emu->op1.u16 = d; emu->op2.u16 = s; - emu->res.u16 = d >> s; + emu->res.u16 = (s>15) ? 0 : (d>>s); return emu->res.u16; } else @@ -438,7 +438,10 @@ static inline uint8_t sar8(x64emu_t *emu, uint8_t d, uint8_t s) emu->df = d_sar8; emu->op1.u8 = d; emu->op2.u8 = s; - emu->res.u8 = (uint8_t)(((int8_t)d)>>s); + if (s > 7) + emu->res.u8 = (d&0x80) ? 0xff : 0; + else + emu->res.u8 = (uint8_t)(((int8_t)d)>>s); return emu->res.u8; } else @@ -454,7 +457,10 @@ static inline uint16_t sar16(x64emu_t *emu, uint16_t d, uint8_t s) emu->df = d_sar16; emu->op1.u16 = d; emu->op2.u16 = s; - emu->res.u16 = (uint16_t)(((int16_t)d)>>s); + if (s > 15) + emu->res.u16 = (d&0x8000) ? 0xffff : 0; + else + emu->res.u16 = (uint16_t)(((int16_t)d)>>s); return emu->res.u16; } else diff --git a/src/emu/x64run.c b/src/emu/x64run.c index 614bf91c27916456f96fdfbb3e16e1bb20c177dd..8972d63f593c9bcc983f9c23775ef9c541e54a53 100644 --- a/src/emu/x64run.c +++ b/src/emu/x64run.c @@ -27,6 +27,9 @@ #include "modrm.h" int my_setcontext(x64emu_t* emu, void* ucp); +#ifdef BOX32 +int my32_setcontext(x64emu_t* emu, void* ucp); +#endif #ifdef TEST_INTERPRETER int RunTest(x64test_t *test) @@ -68,6 +71,7 @@ int Run(x64emu_t *emu, int step) #ifdef TEST_INTERPRETER test->memsize = 0; #else + check_exec(emu, R_RIP); x64emurun: while(1) #endif @@ -392,7 +396,7 @@ x64emurun: case 0x5E: case 0x5F: /* POP Reg */ tmp8u = (opcode&7)+(rex.b<<3); - emu->regs[tmp8u].q[0] = is32bits?Pop32(emu):Pop64(emu); + emu->regs[tmp8u].q[0] = rex.is32bits?Pop32(emu):Pop64(emu); break; case 0x60: /* PUSHAD */ if(rex.is32bits) { @@ -557,19 +561,20 @@ x64emurun: case 0x6D: /* INSD DX */ case 0x6E: /* OUTSB DX */ case 0x6F: /* OUTSD DX */ - #ifndef TEST_INTERPRETER - emit_signal(emu, SIGSEGV, (void*)R_RIP, 0); +#ifndef TEST_INTERPRETER + if(rex.is32bits && box64_ignoreint3) + { + F8; + } else { + F8; + emit_signal(emu, SIGSEGV, (void*)R_RIP, 0); + } STEP; - #else - test->notest = 1; #endif break; GOCOND(0x70 , tmp8s = F8S; CHECK_FLAGS(emu); - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif , addr += tmp8s; ,,STEP2 ) /* Jxx Ib */ @@ -1333,16 +1338,10 @@ x64emurun: addr = rex.is32bits?Pop32(emu):Pop64(emu); R_RSP += tmp16u; STEP2 - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 0xC3: /* RET */ addr = rex.is32bits?Pop32(emu):Pop64(emu); STEP2 - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 0xC4: /* LES Gd,Ed */ nextop = F8; @@ -1472,7 +1471,11 @@ x64emurun: } emu->segs_serial[_CS] = 0; R_RSP += tmp16u; - // need to check status of CS register! + is32bits = (R_CS==0x23); // checking if CS changed + #ifndef TEST_INTERPRETER + if(is32bits) + running32bits = 1; + #endif STEP2; break; case 0xCB: /* FAR RET */ @@ -1484,7 +1487,11 @@ x64emurun: emu->segs[_CS] = Pop64(emu); // no check, no use.... } emu->segs_serial[_CS] = 0; - // need to check status of CS register! + is32bits = (R_CS==0x23); // checking if CS changed + #ifndef TEST_INTERPRETER + if(is32bits) + running32bits = 1; + #endif STEP2; break; case 0xCC: /* INT 3 */ @@ -1493,8 +1500,6 @@ x64emurun: x64Int3(emu, &addr); if(emu->quit) goto fini; // R_RIP is up to date when returning from x64Int3 addr = R_RIP; - #else - test->notest = 1; #endif break; case 0xCD: /* INT n */ @@ -1517,23 +1522,17 @@ x64emurun: #ifndef TEST_INTERPRETER x86Syscall(emu); STEP2; - #else - test->notest = 1; #endif } else if (tmp8u==0x03) { R_RIP = addr; #ifndef TEST_INTERPRETER emit_signal(emu, SIGTRAP, NULL, 3); STEP2; - #else - test->notest = 1; #endif } else { #ifndef TEST_INTERPRETER emit_interruption(emu, tmp8u, (void*)R_RIP); STEP2; - #else - test->notest = 1; #endif } break; @@ -1552,14 +1551,16 @@ x64emurun: #endif break; case 0xCF: /* IRET */ - addr = rex.is32bits?Pop32(emu):Pop64(emu); - emu->segs[_CS] = (rex.is32bits?Pop32(emu):Pop64(emu))&0xffff; + addr = (!rex.w)?Pop32(emu):Pop64(emu); + emu->segs[_CS] = ((!rex.w)?Pop32(emu):Pop64(emu))&0xffff; emu->segs_serial[_CS] = 0; - emu->eflags.x64 = (((rex.is32bits?Pop32(emu):Pop64(emu)) & 0x3F7FD7)/* & (0xffff-40)*/ ) | 0x2; // mask off res2 and res3 and on res1 - tmp64u = rex.is32bits?Pop32(emu):Pop64(emu); //RSP - emu->segs[_SS] = (rex.is32bits?Pop32(emu):Pop64(emu))&0xffff; - emu->segs_serial[_SS] = 0; - R_RSP = tmp64u; + emu->eflags.x64 = ((((!rex.w)?Pop32(emu):Pop64(emu)) & 0x3F7FD7)/* & (0xffff-40)*/ ) | 0x2; // mask off res2 and res3 and on res1 + if(!is32bits || (is32bits && emu->segs[_CS]!=0x23)) { + tmp64u = (!rex.w)?Pop32(emu):Pop64(emu); //RSP + emu->segs[_SS] = ((!rex.w)?Pop32(emu):Pop64(emu))&0xffff; + emu->segs_serial[_SS] = 0; + R_RSP = tmp64u; + } RESET_FLAGS(emu); R_RIP = addr; STEP; @@ -1567,8 +1568,6 @@ x64emurun: #ifndef TEST_INTERPRETER if(is32bits) running32bits = 1; - #else - test->notest = 1; #endif break; case 0xD0: /* GRP2 Eb,1 */ @@ -1659,10 +1658,10 @@ x64emurun: break; case 0xD8: /* x87 opcodes */ #ifdef TEST_INTERPRETER - if(!(addr = TestD8(test, rex, addr))) + if(!(addr = TestD8(test, rex, addr, 0))) unimp = 1; #else - if(!(addr = RunD8(emu, rex, addr))) { + if(!(addr = RunD8(emu, rex, addr, 0))) { unimp = 1; goto fini; } @@ -1674,10 +1673,10 @@ x64emurun: break; case 0xD9: /* x87 opcodes */ #ifdef TEST_INTERPRETER - if(!(addr = TestD9(test, rex, addr))) + if(!(addr = TestD9(test, rex, addr, 0))) unimp = 1; #else - if(!(addr = RunD9(emu, rex, addr))) { + if(!(addr = RunD9(emu, rex, addr, 0))) { unimp = 1; goto fini; } @@ -1812,10 +1811,11 @@ x64emurun: case 0xE7: /* OUT XX, EAX */ // this is a privilege opcode... #ifndef TEST_INTERPRETER - emit_signal(emu, SIGSEGV, (void*)R_RIP, 0); + F8; + if(rex.is32bits && box64_ignoreint3) + {} else + emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0); STEP; - #else - test->notest = 1; #endif break; case 0xE8: /* CALL Id */ @@ -1830,9 +1830,6 @@ x64emurun: addr += tmp32s; addr = (uintptr_t)getAlternate((void*)addr); STEP2 - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 0xE9: /* JMP Id */ tmp32s = F32S; // jmp is relative @@ -1842,18 +1839,12 @@ x64emurun: addr += tmp32s; addr = (uintptr_t)getAlternate((void*)addr); STEP2 - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 0xEB: /* JMP Ib */ tmp32s = F8S; // jump is relative addr += tmp32s; STEP2 - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 0xEC: /* IN AL, DX */ case 0xED: /* IN EAX, DX */ @@ -1861,10 +1852,10 @@ x64emurun: case 0xEF: /* OUT DX, EAX */ // this is a privilege opcode... #ifndef TEST_INTERPRETER - emit_signal(emu, SIGSEGV, (void*)R_RIP, 0); + if(rex.is32bits && box64_ignoreint3) + {} else + emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0); STEP; - #else - test->notest = 1; #endif break; case 0xF0: /* LOCK prefix */ @@ -1892,10 +1883,8 @@ x64emurun: case 0xF4: /* HLT */ // this is a privilege opcode... #ifndef TEST_INTERPRETER - emit_signal(emu, SIGSEGV, (void*)R_RIP, 0); + emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0); STEP; - #else - test->notest = 1; #endif break; case 0xF5: /* CMC */ @@ -1933,9 +1922,6 @@ x64emurun: if(!EB->byte[0]) emit_div0(emu, (void*)R_RIP, 0); idiv8(emu, EB->byte[0]); - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; } break; @@ -1971,9 +1957,6 @@ x64emurun: if(!ED->q[0]) emit_div0(emu, (void*)R_RIP, 0); idiv64(emu, ED->q[0]); - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; } } else { @@ -2032,19 +2015,17 @@ x64emurun: break; case 0xFA: /* CLI */ // this is a privilege opcode - emit_signal(emu, SIGSEGV, (void*)R_RIP, 0); + if(rex.is32bits && box64_ignoreint3) + {} else + emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0); STEP; - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 0xFB: /* STI */ // this is a privilege opcode - emit_signal(emu, SIGSEGV, (void*)R_RIP, 0); + if(rex.is32bits && box64_ignoreint3) + {} else + emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0); STEP; - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 0xFC: /* CLD */ CLEAR_FLAG(F_DF); @@ -2103,9 +2084,6 @@ x64emurun: } addr = tmp64u; STEP2 - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 3: /* CALL FAR Ed */ GETET(0); @@ -2130,8 +2108,6 @@ x64emurun: #ifndef TEST_INTERPRETER if(is32bits) running32bits = 1; - #else - test->notest = 1; #endif } break; @@ -2217,6 +2193,7 @@ if(emu->segs[_CS]!=0x33 && emu->segs[_CS]!=0x23) printf_log(LOG_NONE, "Warning, if(unimp) { emu->quit = 1; UnimpOpcode(emu, is32bits); + emit_signal(emu, SIGILL, (void*)R_RIP, 0); } // fork handling if(emu->fork) { @@ -2232,7 +2209,12 @@ if(emu->segs[_CS]!=0x33 && emu->segs[_CS]!=0x23) printf_log(LOG_NONE, "Warning, // setcontext handling else if(emu->quit && emu->uc_link) { emu->quit = 0; - my_setcontext(emu, emu->uc_link); + #ifdef BOX32 + if(box64_is32bits) + my32_setcontext(emu, emu->uc_link); + else + #endif + my_setcontext(emu, emu->uc_link); addr = R_RIP; goto x64emurun; } diff --git a/src/emu/x64run0f.c b/src/emu/x64run0f.c index 4f12e615b7c7ede61391f4aa02cdd26ac59ce96b..0364f4e9b6dc88ac998fe41115caf8f53c3965a3 100644 --- a/src/emu/x64run0f.c +++ b/src/emu/x64run0f.c @@ -94,8 +94,6 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) if(R_RCX) { #ifndef TEST_INTERPRETER emit_signal(emu, SIGILL, (void*)R_RIP, 0); - #else - test->notest = 1; #endif } else { R_RAX = 0b111; // x87 & SSE & AVX for now @@ -119,9 +117,6 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) R_RAX = tmp64u & 0xffffffff; R_RDX = tmp64u >> 32; R_RCX = helper_getcpu(emu); - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; default: return 0; @@ -156,8 +151,6 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) #ifndef TEST_INTERPRETER R_RIP = addr; x64Syscall(emu); - #else - test->notest = 1; #endif break; case 0x06: /* CLTS */ @@ -172,16 +165,12 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) // this is a privilege opcode... #ifndef TEST_INTERPRETER emit_signal(emu, SIGSEGV, (void*)R_RIP, 0); - #else - test->notest = 1; #endif break; case 0x0B: /* UD2 */ #ifndef TEST_INTERPRETER emit_signal(emu, SIGILL, (void*)R_RIP, 0); - #else - test->notest = 1; #endif break; @@ -189,18 +178,22 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) nextop = F8; GETED(0); switch((nextop>>3)&7) { + case 0: //PREFETCH? + __builtin_prefetch((void*)ED, 0, 0); + break; case 1: //PREFETCHW __builtin_prefetch((void*)ED, 1, 0); break; - default: //??? - return 0; + case 2: //PREFETCHWT1 + __builtin_prefetch((void*)ED, 1, 0); + break; + default: //NOP + break; } break; case 0x0E: /* FEMMS */ #ifndef TEST_INTERPRETER emit_signal(emu, SIGILL, (void*)R_RIP, 0); - #else - test->notest = 1; #endif break; @@ -392,8 +385,18 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) tmp64u<<=box64_rdtsc_shift; R_RDX = tmp64u>>32; R_RAX = tmp64u&0xFFFFFFFF; - #ifdef TEST_INTERPRETER - test->notest = 1; + break; + + case 0x34: /* SYSENTER */ + #ifndef TEST_INTERPRETER + emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0); + STEP; + #endif + break; + case 0x35: /* SYSEXIT */ + #ifndef TEST_INTERPRETER + emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0); + STEP; #endif break; @@ -710,9 +713,6 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) else GX->f[i] = 1.0f/sqrtf(EX->f[i]); } - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 0x53: /* RCPPS Gx, Ex */ nextop = F8; @@ -720,9 +720,6 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) GETGX; for(int i=0; i<4; ++i) GX->f[i] = 1.0f/EX->f[i]; - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 0x54: /* ANDPS Gx, Ex */ nextop = F8; @@ -1089,9 +1086,6 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) break; GOCOND(0x80 , tmp32s = F32S; CHECK_FLAGS(emu); - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif , addr += tmp32s; ,, ) /* 0x80 -> 0x8F Jxx */ //STEP3 @@ -1118,9 +1112,6 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) case 0xA2: /* CPUID */ tmp32u = R_EAX; my_cpuid(emu, tmp32u); - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 0xA3: /* BT Ed,Gd */ CHECK_FLAGS(emu); @@ -1270,18 +1261,18 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) #ifdef TEST_INTERPRETER emu->sw.f.F87_TOP = emu->top&7; #else - if(rex.w) - fpu_fxsave64(emu, ED); - else + if(rex.is32bits) fpu_fxsave32(emu, ED); + else + fpu_fxsave64(emu, ED); #endif break; case 1: /* FXRSTOR Ed */ _GETED(0); - if(rex.w) - fpu_fxrstor64(emu, ED); - else + if(rex.is32bits) fpu_fxrstor32(emu, ED); + else + fpu_fxrstor64(emu, ED); break; case 2: /* LDMXCSR Md */ GETED(0); diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c index fe8da3e5fb544857c7c7617bfbad5fec19a15f8c..5433319d85b1a077d1d560611886011e1d7f2bc0 100644 --- a/src/emu/x64run64.c +++ b/src/emu/x64run64.c @@ -19,6 +19,7 @@ #include "x87emu_private.h" #include "box64context.h" #include "bridge.h" +#include "signals.h" #include "modrm.h" @@ -465,6 +466,23 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) else return 0; + case 0x69: /* IMUL Gd,Ed,Id */ + nextop = F8; + GETED_OFFS(4, tlsdata); + GETGD; + tmp64u = F32S64; + if(rex.w) + GD->q[0] = imul64(emu, ED->q[0], tmp64u); + else + GD->q[0] = imul32(emu, ED->dword[0], tmp64u); + break; + + case 0x6C: /* INSB DX */ + case 0x6D: /* INSD DX */ + case 0x6E: /* OUTSB DX */ + case 0x6F: /* OUTSD DX */ + return addr-1; // skip 64/65 prefix and resume normal execution + case 0x80: /* GRP Eb,Ib */ nextop = F8; GETEB_OFFS(1, tlsdata); @@ -528,6 +546,15 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) } break; + case 0x85: /* TEST Ed,Gd */ + nextop = F8; + GETED_OFFS(0, tlsdata); + GETGD; + if(rex.w) + test64(emu, ED->q[0], GD->q[0]); + else + test32(emu, ED->dword[0], GD->dword[0]); + break; case 0x86: /* XCHG Eb,Gb */ nextop = F8; #if defined(DYNAREC) && !defined(TEST_INTERPRETER) @@ -627,6 +654,9 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) case 0x90: /* NOP */ break; + case 0x9D: /* POPF */ + return addr-1; // skip 64/65 prefix and resume normal execution + case 0xA1: /* MOV EAX,FS:Od */ if(rex.is32bits) { tmp32s = F32S; @@ -639,7 +669,15 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) R_RAX = *(uint32_t*)(tlsdata+tmp64u); } break; - + case 0xA2: /* MOV Ob,AL */ + if(rex.is32bits) { + tmp32s = F32S; + *(uint8_t*)(uintptr_t)(tlsdata+tmp32s) = R_AL; + } else { + tmp64u = F64; + *(uint8_t*)(tlsdata+tmp64u) = R_AL; + } + break; case 0xA3: /* MOV FS:Od,EAX */ if(rex.is32bits) { tmp32s = F32S; @@ -712,11 +750,58 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) } break; - case 0xEB: /* JMP Ib */ - tmp32s = F8S; // jump is relative - addr += tmp32s; + case 0xD8: /* x87 opcodes */ + #ifdef TEST_INTERPRETER + return TestD8(test, rex, addr, tlsdata); + #else + return RunD8(emu, rex, addr, tlsdata); + #endif + break; + case 0xD9: /* x87 opcodes */ + #ifdef TEST_INTERPRETER + return TestD9(test, rex, addr, tlsdata); + #else + return RunD9(emu, rex, addr, tlsdata); + #endif break; + case 0xEB: /* JMP Ib */ + return addr-1; // skip 64/65 prefix and resume normal execution + + case 0xF6: /* GRP3 Eb(,Ib) */ + nextop = F8; + tmp8u = (nextop>>3)&7; + GETEB_OFFS((tmp8u<2)?1:0, tlsdata); + switch(tmp8u) { + case 0: + case 1: /* TEST Eb,Ib */ + tmp8u = F8; + test8(emu, EB->byte[0], tmp8u); + break; + case 2: /* NOT Eb */ + EB->byte[0] = not8(emu, EB->byte[0]); + break; + case 3: /* NEG Eb */ + EB->byte[0] = neg8(emu, EB->byte[0]); + break; + case 4: /* MUL AL,Eb */ + mul8(emu, EB->byte[0]); + break; + case 5: /* IMUL AL,Eb */ + imul8(emu, EB->byte[0]); + break; + case 6: /* DIV Eb */ + if(!EB->byte[0]) + emit_div0(emu, (void*)R_RIP, 0); + div8(emu, EB->byte[0]); + break; + case 7: /* IDIV Eb */ + if(!EB->byte[0]) + emit_div0(emu, (void*)R_RIP, 0); + idiv8(emu, EB->byte[0]); + break; + } + break; case 0xF7: /* GRP3 Ed(,Id) */ nextop = F8; tmp8u = (nextop>>3)&7; @@ -745,9 +830,6 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) break; case 7: /* IDIV Ed */ idiv64(emu, ED->q[0]); - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; } } else { diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c index 89aec17c5f9791bb384c2175d2f2c009a3c3e2be..e1abf3b7aebe6532192122fba4d60ff4afa301d3 100644 --- a/src/emu/x64run66.c +++ b/src/emu/x64run66.c @@ -291,7 +291,10 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) GW->word[0] = imul16(emu, EW->word[0], tmp16u); } break; - + case 0x6A: /* PUSH u8 */ + tmp16s = F8S; + Push16(emu, tmp16s); + break; case 0x6B: /* IMUL Gw,Ew,Ib */ nextop = F8; GETEW(1); @@ -850,9 +853,6 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) break; case 7: /* IDIV Ed */ idiv64(emu, ED->q[0]); - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; } } else { diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c index 84ed4e25eb354e48d65471fb6141afbc61411582..46ff4d6e0fd7e892dc8a8a173e8a6e41f6a3edf5 100644 --- a/src/emu/x64run660f.c +++ b/src/emu/x64run660f.c @@ -966,7 +966,7 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr) } break; - case 0x0C: /* PBLENDPS Gx, Ex, Ib */ + case 0x0C: /* BLENDPS Gx, Ex, Ib */ nextop = F8; GETEX(1); GETGX; @@ -976,7 +976,7 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr) GX->ud[i] = EX->ud[i]; } break; - case 0x0D: /* PBLENDPD Gx, Ex, Ib */ + case 0x0D: /* BLENDPD Gx, Ex, Ib */ nextop = F8; GETEX(1); GETGX; @@ -2123,9 +2123,9 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr) GETEW(0); GETGW; if(rex.w) - GW->sq[0] = EB->sword[0]; + GW->sq[0] = EW->sword[0]; else - GW->sword[0] = EB->sword[0]; + GW->sword[0] = EW->sword[0]; break; case 0xC1: /* XADD Gw,Ew */ // Xchange and Add @@ -2389,11 +2389,11 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr) nextop = F8; GETEX(0); GETGX; - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffff) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffff) GX->sd[0] = 0x80000000; else GX->sd[0] = EX->d[0]; - if(isnan(EX->d[1]) || isinf(EX->d[1]) || EX->d[1]>0x7fffffff) + if(isnan(EX->d[1]) || isinf(EX->d[1]) || EX->d[1]>(double)0x7fffffff) GX->sd[1] = 0x80000000; else GX->sd[1] = EX->d[1]; diff --git a/src/emu/x64run66f30f.c b/src/emu/x64run66f30f.c index dd466ad56c37a6c0ce0be7e04a1a7db5fd6cb332..4e455d7cd733505bd9ed9b024b52a99dbbac30d0 100644 --- a/src/emu/x64run66f30f.c +++ b/src/emu/x64run66f30f.c @@ -56,6 +56,24 @@ uintptr_t Run66F30F(x64emu_t *emu, rex_t rex, uintptr_t addr) switch(opcode) { + case 0xBD: /* LZCNT Ed,Gd */ + CHECK_FLAGS(emu); + nextop = F8; + GETEW(0); + GETGW; + if(rex.w) { + tmp64u = ED->q[0]; + tmp8u = (tmp64u)?__builtin_clzl(tmp64u):64; + CONDITIONAL_SET_FLAG(tmp8u==0, F_ZF); + CONDITIONAL_SET_FLAG(tmp8u==64, F_CF); + } else { + tmp32u = EW->word[0]; + tmp8u = (tmp32u)?__builtin_clz(tmp32u<<16):16; + CONDITIONAL_SET_FLAG(tmp8u==0, F_ZF); + CONDITIONAL_SET_FLAG(tmp8u==16, F_CF); + } + GD->q[0] = tmp8u; + break; default: return 0; diff --git a/src/emu/x64run67.c b/src/emu/x64run67.c index f808517dd0a6cfbe15ce78431169f35f2ad846d3..ae5366fb24fe016338b402b04180647e2b5c0f0e 100644 --- a/src/emu/x64run67.c +++ b/src/emu/x64run67.c @@ -162,6 +162,31 @@ uintptr_t Run67(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) cmp32(emu, R_EAX, F32); break; + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x55: + case 0x56: + case 0x57: /* PUSH Reg */ + tmp8u = (opcode&7)+(rex.b<<3); + if(rex.is32bits) + Push32(emu, emu->regs[tmp8u].dword[0]); + else + Push64(emu, emu->regs[tmp8u].q[0]); + break; + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: /* POP ESP */ + case 0x5D: + case 0x5E: + case 0x5F: /* POP Reg */ + tmp8u = (opcode&7)+(rex.b<<3); + emu->regs[tmp8u].q[0] = rex.is32bits?Pop32(emu):Pop64(emu); + break; + case 0x63: /* MOVSXD Gd,Ed */ nextop = F8; GETED32(0); @@ -182,6 +207,8 @@ uintptr_t Run67(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) return Run6766(emu, rex, rep, addr); #endif + case 0x70 ... 0x7F: + return addr-1; // skip 67 prefix and resume normal execution case 0x80: /* GRP Eb,Ib */ nextop = F8; GETEB32(1); @@ -462,9 +489,6 @@ uintptr_t Run67(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) break; case 7: /* IDIV Ed */ idiv64(emu, ED->q[0]); - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; } } else { diff --git a/src/emu/x64run670f.c b/src/emu/x64run670f.c index 0b3f1493f44cebdfe912582dd1541c8d7ab1bcb0..87b89f847f65dccab7cfef37d313431cc6fcc0fd 100644 --- a/src/emu/x64run670f.c +++ b/src/emu/x64run670f.c @@ -98,6 +98,46 @@ uintptr_t Run670F(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) } break; + case 0x38: /* MAP 0F38 */ + opcode = F8; + switch(opcode) { + + case 0xF6: + switch(rep) { + case 2: + /* ADOX Gd, Rd */ + nextop = F8; + GETED32(0); + GETGD; + CHECK_FLAGS(emu); + if(rex.w) { + if (ACCESS_FLAG(F_OF)) { + tmp64u = 1 + (GD->q[0] & 0xFFFFFFFF) + (ED->q[0] & 0xFFFFFFFF); + tmp64u2 = 1 + GD->q[0] + ED->q[0]; + } + else { + tmp64u = (GD->q[0] & 0xFFFFFFFF) + (ED->q[0] & 0xFFFFFFFF); + tmp64u2 = GD->q[0] + ED->q[0]; + } + tmp64u = (tmp64u >> 32) + (GD->q[0] >> 32) + (ED->q[0] >> 32); + CONDITIONAL_SET_FLAG(tmp64u & 0x100000000L, F_OF); + GD->q[0] = tmp64u2; + } else { + if (ACCESS_FLAG(F_OF)) + GD->q[0] = 1LL + GD->dword[0] + ED->dword[0]; + else + GD->q[0] = (uint64_t)GD->dword[0] + ED->dword[0]; + CONDITIONAL_SET_FLAG(GD->q[0] & 0x100000000LL, F_OF); + } + break; + default: + return 0; + } + default: + return 0; + } + break; + case 0x6F: switch(rep) { case 0: /* MOVQ Gm, Em */ @@ -125,6 +165,12 @@ uintptr_t Run670F(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) GETGM; EM->q = GM->q; break; + case 2: /* MOVDQU Ex, Gx */ + nextop = F8; + GETEX32(0); + GETGX; + memcpy(EX, GX, 16); + break; default: return 0; } diff --git a/src/emu/x64run67avx.c b/src/emu/x64run67avx.c index c19a22f72f1c178f68e0bac136fa656fbb365bde..bfc99e9cd96897151272d828d1709f6fcce5058f 100644 --- a/src/emu/x64run67avx.c +++ b/src/emu/x64run67avx.c @@ -76,7 +76,7 @@ uintptr_t Run67AVX(x64emu_t *emu, vex_t vex, uintptr_t addr) rex_t rex = vex.rex; - if( (vex.m==VEX_M_0F38) && (vex.p==VEX_P_F2)) + if( (vex.m==VEX_M_0F38) && (vex.p==VEX_P_F2)) { switch(opcode) { case 0xF6: /* MULX Gd, Vd, Ed (,RDX) */ @@ -97,7 +97,23 @@ uintptr_t Run67AVX(x64emu_t *emu, vex_t vex, uintptr_t addr) default: addr = 0; } - else addr = 0; + } else if ((vex.m==VEX_M_0F) && (vex.p==VEX_P_66)) { + switch(opcode) { + case 0xD6: /* VMOVQ Ex, Gx */ + nextop = F8; + GETEX32(0); + GETGX; + EX->q[0] = GX->q[0]; + if(MODREG) { + EX->q[1] = 0; + GETEY; + EY->u128 = 0; + } + break; + + default: addr = 0; + } + } else addr = 0; if(!addr) printf_log(LOG_INFO, "Unimplemented 67 AVX opcode size %d prefix %s map %s opcode %02X ", 128<x64emu_parity_tab[(x) / 32] >> ((x) % 32)) & 1) == 0) #define XOR2(x) (((x) ^ ((x)>>1)) & 0x1) @@ -53,7 +58,7 @@ void EXPORT my___libc_init(x64emu_t* emu, void* raw_args , void (*onexit)(void) emu->quit = 1; // finished! } #else -int32_t EXPORT my___libc_start_main(x64emu_t* emu, int (*main) (int, char * *, char * *), int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end)) +EXPORT int32_t my___libc_start_main(x64emu_t* emu, int (*main) (int, char * *, char * *), int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end)) { (void)argc; (void)ubp_av; (void)fini; (void)rtld_fini; (void)stack_end; @@ -106,6 +111,62 @@ int32_t EXPORT my___libc_start_main(x64emu_t* emu, int (*main) (int, char * *, c } return (int)GetEAX(emu); } +#ifdef BOX32 +#ifdef ANDROID +void EXPORT my32___libc_init(x64emu_t* emu, void* raw_args , void (*onexit)(void) , int (*main)(int, char**, char**), void const * const structors ) +{ + //TODO: register fini + // let's cheat and set all args... + Push_32(emu, (uint32_t)my_context->envv32); + Push_32(emu, (uint32_t)my_context->argv32); + Push_32(emu, (uint32_t)my_context->argc); + + printf_log(LOG_DEBUG, "Transfert to main(%d, %p, %p)=>%p from __libc_init\n", my_context->argc, my_context->argv, my_context->envv, main); + // should call structors->preinit_array and structors->init_array! + // call main and finish + PushExit_32(emu); + R_EIP=to_ptrv(main); + + DynaRun(emu); + + emu->quit = 1; // finished! +} +#else +int32_t EXPORT my32___libc_start_main(x64emu_t* emu, int *(main) (int, char * *, char * *), int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void (* stack_end)) +{ + // let's cheat and set all args... + Push_32(emu, my_context->envv32); + Push_32(emu, my_context->argv32); + Push_32(emu, my_context->argc); + if(init) { + PushExit_32(emu); + R_EIP=to_ptrv(*init); + printf_log(LOG_DEBUG, "Calling init(%p) from __libc_start_main\n", *init); + DynaRun(emu); + if(emu->error) // any error, don't bother with more + return 0; + emu->quit = 0; + } else { + if(my_context->elfs[0]) { + printf_dump(LOG_DEBUG, "Calling init from main elf\n"); + RunElfInit(my_context->elfs[0], emu); + } + } + if(my_context->elfs[0]) { + MarkElfInitDone(my_context->elfs[0]); + } + printf_log(LOG_DEBUG, "Transfert to main(%d, %p, %p)=>%p from __libc_start_main\n", my_context->argc, my_context->argv, my_context->envv, main); + // call main and finish + PushExit_32(emu); + R_EIP=to_ptrv(main); + + DynaRun(emu); + + emu->quit = 1; // finished! + return 0; +} +#endif +#endif #endif const char* GetNativeName(void* p) @@ -1206,11 +1267,17 @@ void PrintTrace(x64emu_t* emu, uintptr_t ip, int dynarec) } else if((peek==0x55 /*|| peek==0x53*/) && !is32bits) { if(!printFunctionAddr(*(uintptr_t*)(R_RSP), " STACK_TOP: ")) printf_log(LOG_NONE, " STACK_TOP: %p ", (void*)*(uintptr_t*)(R_RSP)); - } else if((peek==0x55 || peek==0x56) && is32bits) { + } else if((peek==0x55 || peek==0x56 || peek==0x53 || peek==0x57) && is32bits) { if(!printFunctionAddr(*(uint32_t*)(R_RSP), " STACK_TOP: ")) printf_log(LOG_NONE, " STACK_TOP: %p ", (void*)(uintptr_t)*(uint32_t*)(R_RSP)); } else if(peek==0xF3 && PK(1)==0x0F && PK(2)==0x1E && PK(3)==0xFA && !is32bits) { - printFunctionAddr(*(uintptr_t*)(R_RSP), " STACK_TOP: "); + uintptr_t nextaddr = *(uintptr_t*)(R_RSP); + if(!printFunctionAddr(nextaddr, "=> ")) + printf_log(LOG_NONE, " => %p", (void*)nextaddr); + } else if((peek==0x81 || peek==0x83) && PK(1)==0xEC && is32bits) { + uintptr_t nextaddr = *(ptr_t*)from_ptrv(R_ESP); + if(!printFunctionAddr(nextaddr, "STACK_TOP: ")) + printf_log(LOG_NONE, " STACK_TOP: %p", (void*)nextaddr); } else if(peek==0xE8 || peek==0xE9) { // Call & Jmp uintptr_t nextaddr = ip + 5 + PK32(1); printFunctionAddr(nextaddr, "=> "); @@ -1227,6 +1294,11 @@ void PrintTrace(x64emu_t* emu, uintptr_t ip, int dynarec) uintptr_t nextaddr = *(uintptr_t*)(R_RAX+PK(2)); if(!printFunctionAddr(nextaddr, "=> ")) printf_log(LOG_NONE, " => %p", (void*)nextaddr); + } else if(PK(1)==0xE0) { + uintptr_t nextaddr = R_RAX; + if(is32bits) nextaddr &= 0xffffffff; + if(!printFunctionAddr(nextaddr, "=> ")) + printf_log(LOG_NONE, " => %p", (void*)nextaddr); } else if((PK(1)==0x14) && (PK(2)==0x25)) { uintptr_t nextaddr = is32bits?(*(uint32_t*)(uintptr_t)PK32(3)):(*(uintptr_t*)(uintptr_t)PK32(3)); printf_log(LOG_NONE, " => %p", (void*)nextaddr); @@ -1239,6 +1311,26 @@ void PrintTrace(x64emu_t* emu, uintptr_t ip, int dynarec) uintptr_t nextaddr = R_R9; printf_log(LOG_NONE, " => %p", (void*)nextaddr); printFunctionAddr(nextaddr, "=> "); + } else if(is32bits && PK(1)==0xA3) { + uintptr_t nextaddr = *(ptr_t*)from_ptrv(R_EBX + PK32(2)); + printf_log(LOG_NONE, " => %p", (void*)nextaddr); + printFunctionAddr(nextaddr, "=> "); + } else if(PK(1)==0x92) { + uintptr_t nextaddr = is32bits?(*(ptr_t*)from_ptrv(R_EDX + PK32(2))):(*(uintptr_t*)(R_RDX + PK32(2))); + printf_log(LOG_NONE, " => %p", (void*)nextaddr); + printFunctionAddr(nextaddr, "=> "); + } else if(PK(1)==0x50) { + uintptr_t nextaddr = is32bits?(*(ptr_t*)from_ptrv(R_EAX + PK(2))):(*(uintptr_t*)(R_RAX + PK(2))); + printf_log(LOG_NONE, " => %p", (void*)nextaddr); + printFunctionAddr(nextaddr, "=> "); + } else if(PK(1)==0x52) { + uintptr_t nextaddr = is32bits?(*(ptr_t*)from_ptrv(R_EDX + PK(2))):(*(uintptr_t*)(R_RDX + PK(2))); + printf_log(LOG_NONE, " => %p", (void*)nextaddr); + printFunctionAddr(nextaddr, "=> "); + } else if(is32bits && PK(1)==0x10) { + uintptr_t nextaddr = *(ptr_t*)from_ptrv(R_EAX); + printf_log(LOG_NONE, " => %p", (void*)nextaddr); + printFunctionAddr(nextaddr, "=> "); } } @@ -1522,6 +1614,19 @@ reg64_t* TestEd4(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t return (reg64_t*)test->mem; } } +reg64_t* TestEd4O(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta, uintptr_t offset) +{ + uint8_t m = v&0xC7; // filter Ed + if(m>=0xC0) { + return &test->emu->regs[(m&0x07)+(rex.b<<3)]; + } else { + reg64_t* ret = GetECommonO(test->emu, addr, rex, m, delta, offset); + test->memsize = 4; + test->memaddr = (uintptr_t)ret; + *(uint32_t*)test->mem = ret->dword[0]; + return (reg64_t*)test->mem; + } +} reg64_t* TestEd8(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta) { uint8_t m = v&0xC7; // filter Ed @@ -1535,6 +1640,19 @@ reg64_t* TestEd8(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t return (reg64_t*)test->mem; } } +reg64_t* TestEd8O(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta, uintptr_t offset) +{ + uint8_t m = v&0xC7; // filter Ed + if(m>=0xC0) { + return &test->emu->regs[(m&0x07)+(rex.b<<3)]; + } else { + reg64_t* ret = GetECommonO(test->emu, addr, rex, m, delta, offset); + test->memsize = 8; + test->memaddr = (uintptr_t)ret; + *(uint64_t*)test->mem = ret->q[0]; + return (reg64_t*)test->mem; + } +} reg64_t* TestEdt(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta) { uint8_t m = v&0xC7; // filter Ed diff --git a/src/emu/x64run_private.h b/src/emu/x64run_private.h index 45a6865952535f242a9f3fd0b29494f94694dce0..e7416b19a5805fc5cef60c6099bdda9cf614279c 100644 --- a/src/emu/x64run_private.h +++ b/src/emu/x64run_private.h @@ -50,6 +50,12 @@ static inline void Push16(x64emu_t *emu, uint16_t v) *((uint16_t*)R_RSP) = v; } +static inline void Push_32(x64emu_t *emu, uint32_t v) +{ + R_ESP -= 4; + *((uint32_t*)(uintptr_t)R_ESP) = v; +} + static inline void Push32(x64emu_t *emu, uint32_t v) { R_RSP -= 4; @@ -70,6 +76,13 @@ static inline uint16_t Pop16(x64emu_t *emu) return *st; } +static inline uint32_t Pop_32(x64emu_t *emu) +{ + uint32_t* st = (uint32_t*)(uintptr_t)R_RSP; + R_ESP += 4; + return *st; +} + static inline uint32_t Pop32(x64emu_t *emu) { uint32_t* st = (uint32_t*)R_RSP; @@ -90,6 +103,13 @@ static inline void PushExit(x64emu_t* emu) *((uint64_t*)R_RSP) = my_context->exit_bridge; } +#ifdef BOX32 +static inline void PushExit_32(x64emu_t* emu) +{ + R_ESP -= 4; + *((ptr_t*)(uintptr_t)R_ESP) = my_context->exit_bridge; +} +#endif // the op code definition can be found here: http://ref.x86asm.net/geek32.html reg64_t* GetECommon(x64emu_t* emu, uintptr_t* addr, rex_t rex, uint8_t m, uint8_t delta); @@ -102,7 +122,9 @@ reg64_t* TestEbO(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t reg64_t* GetEd(x64emu_t *emu, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta); reg64_t* TestEd(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta); reg64_t* TestEd4(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta); +reg64_t* TestEd4O(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta, uintptr_t offset); reg64_t* TestEd8(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta); +reg64_t* TestEd8O(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta, uintptr_t offset); reg64_t* TestEd8xw(x64test_t *test, int w, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta); reg64_t* TestEdt(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta); uintptr_t GetEA(x64emu_t *emu, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta); @@ -163,8 +185,8 @@ uintptr_t Run6764_32(x64emu_t *emu, rex_t rex, int rep, int seg, uintptr_t addr) uintptr_t Run670F(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr); uintptr_t Run6766(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr); uintptr_t Run67660F(x64emu_t *emu, rex_t rex, uintptr_t addr); -uintptr_t RunD8(x64emu_t *emu, rex_t rex, uintptr_t addr); -uintptr_t RunD9(x64emu_t *emu, rex_t rex, uintptr_t addr); +uintptr_t RunD8(x64emu_t *emu, rex_t rex, uintptr_t addr, uintptr_t offs); +uintptr_t RunD9(x64emu_t *emu, rex_t rex, uintptr_t addr, uintptr_t offs); uintptr_t RunDA(x64emu_t *emu, rex_t rex, uintptr_t addr); uintptr_t RunDB(x64emu_t *emu, rex_t rex, uintptr_t addr); uintptr_t RunDC(x64emu_t *emu, rex_t rex, uintptr_t addr); @@ -204,8 +226,8 @@ uintptr_t Test6764_32(x64test_t *test, rex_t rex, int rep, int seg, uintptr_t ad uintptr_t Test670F(x64test_t *test, rex_t rex, int rep, uintptr_t addr); uintptr_t Test6766(x64test_t *test, rex_t rex, int rep, uintptr_t addr); uintptr_t Test67660F(x64test_t *test, rex_t rex, uintptr_t addr); -uintptr_t TestD8(x64test_t *test, rex_t rex, uintptr_t addr); -uintptr_t TestD9(x64test_t *test, rex_t rex, uintptr_t addr); +uintptr_t TestD8(x64test_t *test, rex_t rex, uintptr_t addr, uintptr_t offs); +uintptr_t TestD9(x64test_t *test, rex_t rex, uintptr_t addr, uintptr_t offs); uintptr_t TestDA(x64test_t *test, rex_t rex, uintptr_t addr); uintptr_t TestDB(x64test_t *test, rex_t rex, uintptr_t addr); uintptr_t TestDC(x64test_t *test, rex_t rex, uintptr_t addr); @@ -232,6 +254,7 @@ void x64Syscall(x64emu_t *emu); void x64Int3(x64emu_t* emu, uintptr_t* addr); x64emu_t* x64emu_fork(x64emu_t* e, int forktype); void x86Syscall(x64emu_t *emu); //32bits syscall +void x86Int3(x64emu_t* emu, uintptr_t* addr); uintptr_t GetSegmentBaseEmu(x64emu_t* emu, int seg); #define GetGSBaseEmu(emu) GetSegmentBaseEmu(emu, _GS) diff --git a/src/emu/x64runavx0f.c b/src/emu/x64runavx0f.c index 7bf0c306f48b4b4c8e4ea6ef1300383f3885e7e4..1b02989b1cc43fbdca48a8e574d3abfc87a00732 100644 --- a/src/emu/x64runavx0f.c +++ b/src/emu/x64runavx0f.c @@ -287,9 +287,6 @@ uintptr_t RunAVX_0F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) } } else GY->u128 = 0; - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 0x53: /* VRCPPS Gx, Ex */ nextop = F8; @@ -303,9 +300,6 @@ uintptr_t RunAVX_0F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GY->f[i] = 1.0f/EY->f[i]; } else GY->u128 = 0; - #ifdef TEST_INTERPRETER - test->notest = 1; - #endif break; case 0x54: /* VANDPS Gx, Vx, Ex */ nextop = F8; diff --git a/src/emu/x64runavx0f38.c b/src/emu/x64runavx0f38.c index 11e324c9e5f8b2f5ef2e4d55ef930250fb72915c..c18b5c44187539815e1b364429190a790d0450eb 100644 --- a/src/emu/x64runavx0f38.c +++ b/src/emu/x64runavx0f38.c @@ -62,6 +62,7 @@ uintptr_t RunAVX_0F38(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) case 0xF2: /* ANDN Gd, Vd, Ed */ nextop = F8; if(vex.l) emit_signal(emu, SIGILL, (void*)R_RIP, 0); + ResetFlags(emu); GETGD; GETED(0); GETVD; @@ -73,6 +74,12 @@ uintptr_t RunAVX_0F38(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) else GD->dword[0] = ED->dword[0] & ~VD->dword[0]; } + CONDITIONAL_SET_FLAG(rex.w?(GD->q[0]==0):(GD->dword[0]==0), F_ZF); + CONDITIONAL_SET_FLAG(rex.w?(GD->q[0]>>63):(GD->dword[0]>>31), F_SF); + CLEAR_FLAG(F_CF); + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_AF); // Undef + CLEAR_FLAG(F_PF); // Undef break; case 0xF3: nextop = F8; diff --git a/src/emu/x64runavx660f.c b/src/emu/x64runavx660f.c index 071547eb0c7859b15d295b30fb3ac1832fdb99f2..e0212dd35011a2bc3910a4f609ef78639e0ed581 100644 --- a/src/emu/x64runavx660f.c +++ b/src/emu/x64runavx660f.c @@ -1714,21 +1714,21 @@ uintptr_t RunAVX_660F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GETEX(0); GETGX; GETGY; - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffff) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffff) GX->sd[0] = 0x80000000; else GX->sd[0] = EX->d[0]; - if(isnan(EX->d[1]) || isinf(EX->d[1]) || EX->d[1]>0x7fffffff) + if(isnan(EX->d[1]) || isinf(EX->d[1]) || EX->d[1]>(double)0x7fffffff) GX->sd[1] = 0x80000000; else GX->sd[1] = EX->d[1]; if(vex.l) { GETEY; - if(isnan(EY->d[0]) || isinf(EY->d[0]) || EY->d[0]>0x7fffffff) + if(isnan(EY->d[0]) || isinf(EY->d[0]) || EY->d[0]>(double)0x7fffffff) GX->sd[2] = 0x80000000; else GX->sd[2] = EY->d[0]; - if(isnan(EY->d[1]) || isinf(EY->d[1]) || EY->d[1]>0x7fffffff) + if(isnan(EY->d[1]) || isinf(EY->d[1]) || EY->d[1]>(double)0x7fffffff) GX->sd[3] = 0x80000000; else GX->sd[3] = EY->d[1]; diff --git a/src/emu/x64runavx660f38.c b/src/emu/x64runavx660f38.c index 084a323440a81b494e0d159bf2a6a1b3b0961e3e..849506b0e9cf4d45de9480b4ea0451fae26795bb 100644 --- a/src/emu/x64runavx660f38.c +++ b/src/emu/x64runavx660f38.c @@ -1322,7 +1322,7 @@ uintptr_t RunAVX_660F38(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GY->u128 = 0; break; - case 0x8C: /*VMASKMOVD/Q Gx, Vx, Ex */ + case 0x8C: /*VPMASKMOVD/Q Gx, Vx, Ex */ nextop = F8; GETEX(0); GETGX; @@ -1350,7 +1350,7 @@ uintptr_t RunAVX_660F38(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GY->u128 = 0; } break; - case 0x8E: /*VMASKMOVD/Q Ex, Vx, Gx */ + case 0x8E: /*VPMASKMOVD/Q Ex, Vx, Gx */ nextop = F8; GETEX(0); GETGX; diff --git a/src/emu/x64runavxf20f.c b/src/emu/x64runavxf20f.c index a6224f59e0f08f5df52ea92c2f842ce2dee01ac9..37bc57f628393f83524e8e991076469952c564d5 100644 --- a/src/emu/x64runavxf20f.c +++ b/src/emu/x64runavxf20f.c @@ -119,12 +119,12 @@ uintptr_t RunAVX_F20F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GETEX(0); GETGD; if(rex.w) - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffffffffffffLL) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>=(double)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else GD->sq[0] = EX->d[0]; else { - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffff) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffff) GD->dword[0] = 0x80000000; else GD->sdword[0] = EX->d[0]; @@ -136,7 +136,7 @@ uintptr_t RunAVX_F20F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GETEX(0); GETGD; if(rex.w) { - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffffffffffffLL) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>=(double)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else switch(emu->mxcsr.f.MXCSR_RC) { @@ -158,7 +158,7 @@ uintptr_t RunAVX_F20F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) break; } } else { - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffff) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffff) GD->dword[0] = 0x80000000; else switch(emu->mxcsr.f.MXCSR_RC) { diff --git a/src/emu/x64runavxf30f.c b/src/emu/x64runavxf30f.c index 89c0bad4b94e6d7e0cc3f399d9fd1c4e8ba497f2..d712b105d98f5c9bde1b5d3e504b60c3161e0e87 100644 --- a/src/emu/x64runavxf30f.c +++ b/src/emu/x64runavxf30f.c @@ -142,12 +142,12 @@ uintptr_t RunAVX_F30F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GETEX(0); GETGD; if (rex.w) { - if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>(float)0x7fffffffffffffffLL) + if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>=(float)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else GD->sq[0] = EX->f[0]; } else { - if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>0x7fffffff) + if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>=(float)0x7fffffff) GD->dword[0] = 0x80000000; else GD->sdword[0] = EX->f[0]; @@ -159,7 +159,7 @@ uintptr_t RunAVX_F30F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GETEX(0); GETGD; if(rex.w) { - if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>(float)0x7fffffffffffffffLL) + if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>=(float)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else switch(emu->mxcsr.f.MXCSR_RC) { diff --git a/src/emu/x64rund8.c b/src/emu/x64rund8.c index fcd0b0eec7f1fb3d19a06551c22bb583db70897f..000eab215ebbfea3b5af141fad17b50cb546dade 100644 --- a/src/emu/x64rund8.c +++ b/src/emu/x64rund8.c @@ -23,9 +23,9 @@ #include "modrm.h" #ifdef TEST_INTERPRETER -uintptr_t TestD8(x64test_t *test, rex_t rex, uintptr_t addr) +uintptr_t TestD8(x64test_t *test, rex_t rex, uintptr_t addr, uintptr_t offs) #else -uintptr_t RunD8(x64emu_t *emu, rex_t rex, uintptr_t addr) +uintptr_t RunD8(x64emu_t *emu, rex_t rex, uintptr_t addr, uintptr_t offs) #endif { uint8_t nextop; @@ -125,36 +125,68 @@ uintptr_t RunD8(x64emu_t *emu, rex_t rex, uintptr_t addr) } else switch((nextop>>3)&7) { case 0: /* FADD ST0, float */ - GETE4(0); + if(offs) { + GETE4_OFFS(0, offs); + } else { + GETE4(0); + } ST0.d += *(float*)ED; break; case 1: /* FMUL ST0, float */ - GETE4(0); + if(offs) { + GETE4_OFFS(0, offs); + } else { + GETE4(0); + } ST0.d *= *(float*)ED; break; case 2: /* FCOM ST0, float */ - GETE4(0); + if(offs) { + GETE4_OFFS(0, offs); + } else { + GETE4(0); + } fpu_fcom(emu, *(float*)ED); break; case 3: /* FCOMP */ - GETE4(0); + if(offs) { + GETE4_OFFS(0, offs); + } else { + GETE4(0); + } fpu_fcom(emu, *(float*)ED); fpu_do_pop(emu); break; case 4: /* FSUB ST0, float */ - GETE4(0); + if(offs) { + GETE4_OFFS(0, offs); + } else { + GETE4(0); + } ST0.d -= *(float*)ED; break; case 5: /* FSUBR ST0, float */ - GETE4(0); + if(offs) { + GETE4_OFFS(0, offs); + } else { + GETE4(0); + } ST0.d = *(float*)ED - ST0.d; break; case 6: /* FDIV ST0, float */ - GETE4(0); + if(offs) { + GETE4_OFFS(0, offs); + } else { + GETE4(0); + } ST0.d /= *(float*)ED; break; case 7: /* FDIVR ST0, float */ - GETE4(0); + if(offs) { + GETE4_OFFS(0, offs); + } else { + GETE4(0); + } ST0.d = *(float*)ED / ST0.d; break; default: diff --git a/src/emu/x64rund9.c b/src/emu/x64rund9.c index df39ed3e30bb1d9fc3a643f0779749d9a4851c0d..3c7ac1424f989b0a33c764490bb172e8cdecde92 100644 --- a/src/emu/x64rund9.c +++ b/src/emu/x64rund9.c @@ -23,9 +23,9 @@ #include "modrm.h" #ifdef TEST_INTERPRETER -uintptr_t TestD9(x64test_t *test, rex_t rex, uintptr_t addr) +uintptr_t TestD9(x64test_t *test, rex_t rex, uintptr_t addr, uintptr_t offs) #else -uintptr_t RunD9(x64emu_t *emu, rex_t rex, uintptr_t addr) +uintptr_t RunD9(x64emu_t *emu, rex_t rex, uintptr_t addr, uintptr_t offs) #endif { uint8_t nextop; @@ -232,39 +232,67 @@ uintptr_t RunD9(x64emu_t *emu, rex_t rex, uintptr_t addr) } else switch((nextop>>3)&7) { case 0: /* FLD ST0, Ed float */ - GETE4(0); + if(offs) { + GETE4_OFFS(0, offs); + } else { + GETE4(0); + } fpu_do_push(emu); ST0.d = *(float*)ED; break; case 2: /* FST Ed, ST0 */ - GETE4(0); + if(offs) { + GETE4_OFFS(0, offs); + } else { + GETE4(0); + } *(float*)ED = ST0.d; break; case 3: /* FSTP Ed, ST0 */ - GETE4(0); + if(offs) { + GETE4_OFFS(0, offs); + } else { + GETE4(0); + } *(float*)ED = ST0.d; fpu_do_pop(emu); break; case 4: /* FLDENV m */ // warning, incomplete - _GETED(0); + if(offs) { + _GETED_OFFS(0, offs); + } else { + _GETED(0); + } fpu_loadenv(emu, (char*)ED, 0); break; case 5: /* FLDCW Ew */ - GETEW(0); + if(offs) { + GETEW_OFFS(0, offs); + } else { + GETEW(0); + } emu->cw.x16 = EW->word[0]; // do something with cw? break; case 6: /* FNSTENV m */ // warning, incomplete - GETE8(0); + if(offs) { + GETE8_OFFS(0, offs); + } else { + GETE8(0); + } fpu_savenv(emu, (char*)ED, 0); // intruction pointer: 48bits // data (operand) pointer: 48bits // last opcode: 11bits save: 16bits restaured (1st and 2nd opcode only) break; case 7: /* FNSTCW Ew */ - GETEW(0); + if(offs) { + GETEW_OFFS(0, offs); + } else { + GETEW(0); + } EW->word[0] = emu->cw.x16; break; default: diff --git a/src/emu/x64runf20f.c b/src/emu/x64runf20f.c index 92292f3c937ed4b15e71fc0ea23d5660c3e6ea5d..097d0e324844c80e4b217333f19d59ff71252582 100644 --- a/src/emu/x64runf20f.c +++ b/src/emu/x64runf20f.c @@ -20,6 +20,7 @@ #include "x87emu_private.h" #include "box64context.h" #include "bridge.h" +#include "signals.h" #include "modrm.h" @@ -93,12 +94,12 @@ uintptr_t RunF20F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) _GETEX(0); GETGD; if(rex.w) - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffffffffffffLL) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>=(double)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else GD->sq[0] = EX->d[0]; else { - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffff) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffff) GD->dword[0] = 0x80000000; else GD->sdword[0] = EX->d[0]; @@ -110,7 +111,7 @@ uintptr_t RunF20F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) _GETEX(0); GETGD; if(rex.w) { - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffffffffffffLL) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>=(double)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else switch(emu->mxcsr.f.MXCSR_RC) { @@ -132,7 +133,7 @@ uintptr_t RunF20F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) break; } } else { - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffff) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffff) GD->dword[0] = 0x80000000; else switch(emu->mxcsr.f.MXCSR_RC) { diff --git a/src/emu/x64runf30f.c b/src/emu/x64runf30f.c index d42586fed5f22561c929de52d5985866657b354b..69f8fee737a7a5d4523cc29a3575c6f4aa198c3a 100644 --- a/src/emu/x64runf30f.c +++ b/src/emu/x64runf30f.c @@ -104,12 +104,12 @@ uintptr_t RunF30F(x64emu_t *emu, rex_t rex, uintptr_t addr) GETEX(0); GETGD; if (rex.w) { - if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>(float)0x7fffffffffffffffLL) + if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>=(float)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else GD->sq[0] = EX->f[0]; } else { - if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>0x7fffffff) + if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>=(float)0x7fffffff) GD->dword[0] = 0x80000000; else GD->sdword[0] = EX->f[0]; @@ -121,7 +121,7 @@ uintptr_t RunF30F(x64emu_t *emu, rex_t rex, uintptr_t addr) GETEX(0); GETGD; if(rex.w) { - if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>(float)0x7fffffffffffffffLL) + if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>=(float)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else switch(emu->mxcsr.f.MXCSR_RC) { diff --git a/src/emu/x64syscall.c b/src/emu/x64syscall.c index 5cc6038fc120840de49369eb2e194301e1ceda20..6109583fec2282e447335612e55e24c753cf8516 100644 --- a/src/emu/x64syscall.c +++ b/src/emu/x64syscall.c @@ -184,6 +184,9 @@ static const scwrap_t syscallwrap[] = { [118] = {__NR_getresuid, 3}, [120] = {__NR_getresgid, 3}, [121] = {__NR_getpgid, 1}, + [122] = {__NR_setfsuid, 1}, + [123] = {__NR_setfsgid, 1}, + [124] = {__NR_getsid, 1}, [125] = {__NR_capget, 2}, [126] = {__NR_capset, 2}, [127] = {__NR_rt_sigpending, 2}, @@ -204,7 +207,11 @@ static const scwrap_t syscallwrap[] = { [160] = {__NR_setrlimit, 2}, #endif [161] = {__NR_chroot, 1}, + [165] = {__NR_mount, 5}, [186] = {__NR_gettid, 0 }, //0xBA + [194] = {__NR_listxattr, 3}, + [195] = {__NR_llistxattr, 3}, + [196] = {__NR_flistxattr, 3}, [200] = {__NR_tkill, 2 }, #ifdef __NR_time [201] = {__NR_time, 1}, @@ -298,6 +305,15 @@ static const scwrap_t syscallwrap[] = { #ifdef __NR_fchmodat4 [434] = {__NR_fchmodat4, 4}, #endif + #ifdef __NR_landlock_create_ruleset + [444] = {__NR_landlock_create_ruleset, 3}, + #endif + #ifdef __NR_landlock_add_rule + [445] = {__NR_landlock_add_rule, 4}, + #endif + #ifdef __NR_landlock_restrict_self + [446] = {__NR_landlock_restrict_self, 2}, + #endif //[449] = {__NR_futex_waitv, 5}, }; @@ -571,6 +587,7 @@ void EXPORT x64Syscall(x64emu_t *emu) { void* stack_base = (void*)R_RSI; int stack_size = 0; + uintptr_t sp = R_RSI; if(!R_RSI) { // allocate a new stack... int currstack = 0; @@ -579,18 +596,19 @@ void EXPORT x64Syscall(x64emu_t *emu) stack_size = (currstack && emu->size_stack)?emu->size_stack:(1024*1024); stack_base = mmap(NULL, stack_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); // copy value from old stack to new stack - if(currstack) + if(currstack) { memcpy(stack_base, emu->init_stack, stack_size); - else { + sp = (uintptr_t)emu->init_stack + R_RSP - (uintptr_t)stack_base; + } else { int size_to_copy = (uintptr_t)emu->init_stack + emu->size_stack - (R_RSP); memcpy(stack_base+stack_size-size_to_copy, (void*)R_RSP, size_to_copy); + sp = (uintptr_t)stack_base+stack_size-size_to_copy; } } x64emu_t * newemu = NewX64Emu(emu->context, R_RIP, (uintptr_t)stack_base, stack_size, (R_RSI)?0:1); SetupX64Emu(newemu, emu); - //CloneEmu(newemu, emu); - Push64(newemu, 0); - PushExit(newemu); + CloneEmu(newemu, emu); + newemu->regs[_SP].q[0] = sp; // setup new stack pointer void* mystack = NULL; if(my_context->stack_clone_used) { mystack = box_malloc(1024*1024); // stack for own process... memory leak, but no practical way to remove it @@ -717,6 +735,10 @@ void EXPORT x64Syscall(x64emu_t *emu) S_RAX = -errno; break; #endif + case 175: // sys_init_module + // huh? + S_RAX = -EPERM; + break; #ifndef __NR_time case 201: // sys_time R_RAX = (uintptr_t)time((void*)R_RDI); @@ -924,6 +946,7 @@ long EXPORT my_syscall(x64emu_t *emu) { void* stack_base = (void*)R_RDX; int stack_size = 0; + uintptr_t sp = R_RDX; if(!stack_base) { // allocate a new stack... int currstack = 0; @@ -932,18 +955,19 @@ long EXPORT my_syscall(x64emu_t *emu) stack_size = (currstack)?emu->size_stack:(1024*1024); stack_base = mmap(NULL, stack_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); // copy value from old stack to new stack - if(currstack) + if(currstack) { memcpy(stack_base, emu->init_stack, stack_size); - else { + sp = (uintptr_t)emu->init_stack + R_RSP - (uintptr_t)stack_base; + } else { int size_to_copy = (uintptr_t)emu->init_stack + emu->size_stack - (R_RSP); memcpy(stack_base+stack_size-size_to_copy, (void*)R_RSP, size_to_copy); + sp = (uintptr_t)stack_base+stack_size-size_to_copy; } } x64emu_t * newemu = NewX64Emu(emu->context, R_RIP, (uintptr_t)stack_base, stack_size, (R_RDX)?0:1); SetupX64Emu(newemu, emu); - //CloneEmu(newemu, emu); - Push64(newemu, 0); - PushExit(newemu); + CloneEmu(newemu, emu); + newemu->regs[_SP].q[0] = sp; // setup new stack pointer void* mystack = NULL; if(my_context->stack_clone_used) { mystack = box_malloc(1024*1024); // stack for own process... memory leak, but no practical way to remove it @@ -1024,6 +1048,10 @@ long EXPORT my_syscall(x64emu_t *emu) case 160: return setrlimit(S_ESI, (void*)R_RDX); #endif + case 175: // sys_init_module + // huh? + errno = -EPERM; + return -1; #ifndef __NR_time case 201: // sys_time return (intptr_t)time((void*)R_RSI); diff --git a/src/emu/x64test.c b/src/emu/x64test.c index 95021ca4fba2d5d2a590d90501076a19c0cbc869..135a120c075ab29a5788fae7e9807097767628ce 100644 --- a/src/emu/x64test.c +++ b/src/emu/x64test.c @@ -22,8 +22,6 @@ #include "bridge.h" #include "signals.h" -static pthread_mutex_t mutex_global_test; - void print_banner(x64emu_t* ref) { printf_log(LOG_NONE, "Warning, difference between %s Interpreter and Dynarec in %p (%02x %02x %02x %02x %02x %02x %02x %02x)\n"\ @@ -154,8 +152,6 @@ void x64test_step(x64emu_t* ref, uintptr_t ip) test->emu = NewX64Emu(my_context, ip, (uintptr_t)ref->init_stack, ref->size_stack, 0); CopyEmu(test->emu, ref); } else { - if (box64_dynarec_test == 2 && test->test && test->clean) - pthread_mutex_unlock(&mutex_global_test); // check if IP is same, else, sync uintptr_t prev_ip = test->emu->ip.q[0]; if(test->clean) @@ -167,20 +163,8 @@ void x64test_step(x64emu_t* ref, uintptr_t ip) // do a dry single step test->memsize = 0; test->clean = 1; - test->notest = 0; ref->old_ip = ip; - if (box64_dynarec_test == 2) pthread_mutex_lock(&mutex_global_test); RunTest(test); - if (box64_dynarec_test == 2 && test->notest) pthread_mutex_unlock(&mutex_global_test); // this will be analyzed next step } - -void x64test_init() -{ - pthread_mutexattr_t attr; - pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK); - pthread_mutex_init(&mutex_global_test, &attr); - pthread_mutexattr_destroy(&attr); -} diff --git a/src/emu/x64tls.c b/src/emu/x64tls.c index 78f83c74e937a17a794726b76c711181d9b4dcd8..99ae188c8a02df8711e68d4f10566e58b3f036b1 100644 --- a/src/emu/x64tls.c +++ b/src/emu/x64tls.c @@ -11,6 +11,9 @@ #include "x64emu_private.h" #include "x64tls.h" #include "elfloader.h" +#ifdef BOX32 +#include "box32.h" +#endif typedef struct thread_area_s { @@ -118,12 +121,19 @@ uint32_t my_modify_ldt(x64emu_t* emu, int op, thread_area_t* td, int size) return (uint32_t)-1; } - /* - my_context->segtls[idx].base = td->base_addr; - my_context->segtls[idx].limit = td->limit; - pthread_setspecific(my_context->segtls[idx].key, (void*)my_context->segtls[idx].base); - */ - + if(box64_is32bits) { + emu->segs_serial[_GS] = 0; + my_context->segtls[idx].base = td->base_addr; + my_context->segtls[idx].limit = td->limit; + my_context->segtls[idx].present = 1; + if(idx>8 && !my_context->segtls[idx].key_init) { + pthread_key_create(&my_context->segtls[idx].key, NULL); + my_context->segtls[idx].key_init = 1; + } + if(my_context->segtls[idx].key_init) + pthread_setspecific(my_context->segtls[idx].key, (void*)my_context->segtls[idx].base); + } + ResetSegmentsCache(emu); return 0; @@ -220,6 +230,7 @@ int my_arch_prctl(x64emu_t *emu, int code, void* addr) #define POS_TLS 0x200 +#define POS_TLS_32 0x50 /* tls record should looks like: void* tcb 0x00 @@ -255,7 +266,7 @@ static tlsdatasize_t* setupTLSData(box64context_t* context) // Setup the GS segment: int dtssize = sizeDTS(context); int datasize = sizeTLSData(context->tlssize); - void *ptr_oversized = (char*)box_malloc(dtssize+POS_TLS+datasize); + void *ptr_oversized = (char*)box_malloc(dtssize+(box64_is32bits?POS_TLS_32:POS_TLS)+datasize); void *ptr = (void*)((uintptr_t)ptr_oversized + datasize); memcpy((void*)((uintptr_t)ptr-context->tlssize), context->tlsdata, context->tlssize); tlsdatasize_t *data = (tlsdatasize_t*)box_calloc(1, sizeof(tlsdatasize_t)); @@ -264,23 +275,45 @@ static tlsdatasize_t* setupTLSData(box64context_t* context) data->ptr = ptr_oversized; data->n_elfs = context->elfsize; pthread_setspecific(context->tlskey, data); - // copy canary... - memset((void*)((uintptr_t)ptr), 0, POS_TLS+dtssize); // set to 0 remining bytes - memcpy((void*)((uintptr_t)ptr+0x28), context->canary, sizeof(void*)); // put canary in place - uintptr_t tlsptr = (uintptr_t)ptr; - memcpy((void*)((uintptr_t)ptr+0x0), &tlsptr, sizeof(void*)); - memcpy((void*)((uintptr_t)ptr+0x10), &tlsptr, sizeof(void*)); // set tcb and self same address - uintptr_t dtp = (uintptr_t)ptr+POS_TLS; - memcpy((void*)(tlsptr+sizeof(void*)), &dtp, sizeof(void*)); - if(dtssize) { - for (int i=0; ielfsize; ++i) { - // set pointer - dtp = (uintptr_t)ptr + GetTLSBase(context->elfs[i]); - *(uint64_t*)((uintptr_t)ptr+POS_TLS+i*16) = dtp; - *(uint64_t*)((uintptr_t)ptr+POS_TLS+i*16+8) = i; // index + #ifdef BOX32 + if(box64_is32bits) { + // copy canary... + memset((void*)((uintptr_t)ptr), 0, POS_TLS_32+dtssize); // set to 0 remining bytes + memcpy((void*)((uintptr_t)ptr+0x14), context->canary, 4); // put canary in place + ptr_t tlsptr = to_ptrv(ptr); + memcpy((void*)((uintptr_t)ptr+0x0), &tlsptr, 4); + ptr_t dtp = to_ptrv(ptr+POS_TLS_32); + memcpy(from_ptrv(tlsptr+0x4), &dtp, 4); + if(dtssize) { + for (int i=0; ielfsize; ++i) { + // set pointer + dtp = to_ptrv(ptr + GetTLSBase(context->elfs[i])); + memcpy((void*)((uintptr_t)ptr+POS_TLS_32+i*8), &dtp, 4); + memcpy((void*)((uintptr_t)ptr+POS_TLS_32+i*8+4), &i, 4); // index + } } + memcpy((void*)((uintptr_t)ptr+0x10), &context->vsyscall, 4); // address of vsyscall + } else + #endif + { + // copy canary... + memset((void*)((uintptr_t)ptr), 0, POS_TLS+dtssize); // set to 0 remining bytes + memcpy((void*)((uintptr_t)ptr+0x28), context->canary, sizeof(void*)); // put canary in place + uintptr_t tlsptr = (uintptr_t)ptr; + memcpy((void*)((uintptr_t)ptr+0x0), &tlsptr, sizeof(void*)); + memcpy((void*)((uintptr_t)ptr+0x10), &tlsptr, sizeof(void*)); // set tcb and self same address + uintptr_t dtp = (uintptr_t)ptr+POS_TLS; + memcpy((void*)(tlsptr+sizeof(void*)), &dtp, sizeof(void*)); + if(dtssize) { + for (int i=0; ielfsize; ++i) { + // set pointer + dtp = (uintptr_t)ptr + GetTLSBase(context->elfs[i]); + *(uint64_t*)((uintptr_t)ptr+POS_TLS+i*16) = dtp; + *(uint64_t*)((uintptr_t)ptr+POS_TLS+i*16+8) = i; // index + } + } + memcpy((void*)((uintptr_t)ptr+0x20), &context->vsyscall, sizeof(void*)); // address of vsyscall } - memcpy((void*)((uintptr_t)ptr+0x20), &context->vsyscall, sizeof(void*)); // address of vsyscall return data; } @@ -356,7 +389,9 @@ void* GetSegmentBase(uint32_t desc) return NULL; } int base = desc>>3; - if(base==0x8 && !my_context->segtls[base].key_init) + if(!box64_is32bits && base==0x8 && !my_context->segtls[base].key_init) + return GetSeg43Base(); + if(box64_is32bits && (base==0x6)) return GetSeg43Base(); if(base>15) { printf_log(LOG_NONE, "Warning, accessing segment unknown 0x%x or unset\n", desc); diff --git a/src/emu/x86int3.c b/src/emu/x86int3.c new file mode 100755 index 0000000000000000000000000000000000000000..cd5b9e85a8a858001632e8c37b8926da62e8c0d1 --- /dev/null +++ b/src/emu/x86int3.c @@ -0,0 +1,474 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "debug.h" +#include "box64stack.h" +#include "x64emu.h" +#include "x64run.h" +#include "x64emu_private.h" +#include "x64run_private.h" +#include "x87emu_private.h" +#include "x64primop.h" +#include "x64trace.h" +#include "wrapper32.h" +#include "box32context.h" +#include "librarian.h" +#include "signals.h" +#include "tools/bridge_private.h" + +#include +#include "elfloader.h" +#include "elfload_dump.h" +#include "elfs/elfloader_private.h" + +typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); + +static uint64_t F64(uintptr_t* addr) { + uint64_t ret = *(uint64_t*)*addr; + *addr+=8; + return ret; +} +static uint8_t Peek8(uintptr_t addr, uintptr_t offset) +{ + return *(uint8_t*)(addr+offset); +} + +extern int errno; +void x86Int3(x64emu_t* emu, uintptr_t* addr) +{ + onebridge_t* bridge = (onebridge_t*)(*addr-1); + if(Peek8(*addr, 0)=='S' && Peek8(*addr, 1)=='C') // Signature for "Out of x86 door" + { + *addr += 2; + uintptr_t a = F64(addr); + if(a==0) { + R_RIP = *addr; + //printf_log(LOG_INFO, "%p:Exit x86 emu (emu=%p)\n", *(void**)(R_ESP), emu); + emu->quit=1; // normal quit + } else { + RESET_FLAGS(emu); + wrapper_t w = bridge->w; + a = F64(addr); + R_RIP = *addr; + /* This party can be used to trace only 1 specific lib (but it is quite slow) + elfheader_t *h = FindElfAddress(my_context, *(uintptr_t*)(R_ESP)); + int have_trace = 0; + if(h && strstr(ElfName(h), "libMiles")) have_trace = 1;*/ + if(box64_log>=LOG_DEBUG || cycle_log) { + int tid = GetTID(); + char t_buff[256] = "\0"; + char buff2[64] = "\0"; + char buff3[64] = "\0"; + int cycle_line = my_context->current_line; + if(cycle_log) { + my_context->current_line = (my_context->current_line+1)%cycle_log; + } + char* buff = cycle_log?my_context->log_call[cycle_line]:t_buff; + char* buffret = cycle_log?my_context->log_ret[cycle_line]:NULL; + if(buffret) buffret[0] = '\0'; + char *tmp; + int post = 0; + int perr = 0; + int ret_fmt = 0; + uint64_t *pu64 = NULL; + uint32_t *pu32 = NULL; + uint8_t *pu8 = NULL; + const char *s = bridge->name; + if(!s) + s = GetNativeName((void*)a); + if(a==(uintptr_t)PltResolver32) { + if(cycle_log) { + ptr_t addr = *((uint32_t*)from_ptrv(R_ESP)); + int slot = *((uint32_t*)from_ptrv(R_ESP+4)); + elfheader_t *h = (elfheader_t*)from_ptrv(addr); + Elf32_Rel * rel = (Elf32_Rel *)from_ptrv(h->jmprel + h->delta + slot); + Elf32_Sym *sym = &h->DynSym._32[ELF32_R_SYM(rel->r_info)]; + const char* symname = SymName32(h, sym); + snprintf(buff, 256, "%04d|PltResolver \"%s\"", tid, symname?symname:"???"); + } else { + snprintf(buff, 256, "%s", " ... "); + } + } else + if(strstr(s, "SDL_PollEvent")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%p)", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))); + pu8 = from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)); + post = 10; + } else if(strstr(s, "SDL_RWFromFile")==s || strstr(s, "SDL_RWFromFile")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\")", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, (char *)from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), (char *)from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + } else if(strstr(s, "SDL_WarpMouse")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%hd, %hd)", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, *(uint16_t*)from_ptr(R_ESP+4), *(uint16_t*)from_ptr(R_ESP+8)); + } else if(strstr(s, "glColor4f")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f, %f, %f)", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8), *(float*)from_ptr(R_ESP+12), *(float*)from_ptr(R_ESP+16)); + } else if(strstr(s, "glTexCoord2f")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f)", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8)); + } else if(strstr(s, "glVertex2f")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f)", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8)); + } else if(strstr(s, "glVertex3f")==s) { + snprintf(buff, 255, "%04d|%p: Calling %s(%f, %f, %f)", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, *(float*)from_ptr(R_ESP+4), *(float*)from_ptr(R_ESP+8), *(float*)from_ptr(R_ESP+12)); + } else if(strstr(s, "__open64")==s || strcmp(s, "open64")==0) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d, %d)", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, (char *)from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), *(int*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12)); + perr = 1; + } else if(!strcmp(s, "opendir")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\")", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, (char *)from_ptrv(*(ptr_t*)from_ptr(R_ESP+4))); + perr = 2; + } else if(strstr(s, "__open")==s || !strcmp(s, "open") || !strcmp(s, "my_open64")) { + tmp = from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d (,%d))", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, (tmp)?tmp:"(nil)", *(int*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12)); + perr = 1; + } else if(!strcmp(s, "shm_open")) { + tmp = from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d, %d)", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, (tmp)?tmp:"(nil)", *(int*)from_ptr(R_ESP+8), *(int*)from_ptr(R_ESP+12)); + perr = 1; + } else if(strcmp(s, "mkdir")==0) { + tmp = from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d)", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, (tmp)?tmp:"(nil)", *(int*)from_ptr(R_ESP+8)); + perr = 1; + } else if(!strcmp(s, "fopen")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\")", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, (char *)from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), (char *)from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + perr = 2; + } else if(!strcmp(s, "freopen")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\", %p)", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, (char *)from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), (char *)from_ptrv(*(ptr_t*)from_ptr(R_ESP+8)), from_ptrv(*(ptr_t*)from_ptr(R_ESP+12))); + perr = 2; + } else if(!strcmp(s, "fopen64")) { + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\")", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, (char *)from_ptrv(*(ptr_t*)from_ptr(R_ESP+4)), (char *)from_ptrv(*(ptr_t*)from_ptr(R_ESP+8))); + perr = 2; + } else if(!strcmp(s, "chdir")) { + pu32=(uint32_t*)from_ptrv(R_ESP+4); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\")", tid, from_ptrv(*(ptr_t*)from_ptr(R_ESP)), (char *)s, pu32?((pu32==(uint32_t*)1)?"/1/":(char*)pu32):"/0/"); + } else if(!strcmp(s, "poll")) { + pu32=from_ptrv(*(ptr_t*)from_ptrv(R_ESP+4)); + char tmp[50]; + char tmp2[50] = {0}; + uint32_t n = from_ptri(uint32_t, R_ESP+8); + for(int ii=0; iicontext->mutex_trace); + printf_log(LOG_NONE, "%s =>", buff); + mutex_unlock(&emu->context->mutex_trace); + } + w(emu, a); // some function never come back, so unlock the mutex first! + if(post) + switch(post) { + case 1: snprintf(buff2, 63, " [%d sec %d nsec]", pu32?pu32[0]:-1, pu32?pu32[1]:-1); + break; + case 2: snprintf(buff2, 63, "(%s)", R_EAX?((char*)from_ptr(R_EAX)):"nil"); + break; + case 3: snprintf(buff2, 63, "(%s)", pu32?((char*)pu32):"nil"); + break; + case 4: snprintf(buff2, 63, " (%f)", ST0.d); + break; + case 5: { + uint32_t* p = (uint32_t*)from_ptrv(R_EAX); + if(p) + snprintf(buff2, 63, " size=%dx%d, pitch=%d, pixels=%p", p[2], p[3], p[4], p+5); + else + snprintf(buff2, 63, "NULL Surface"); + } + break; + case 6: snprintf(buff2, 63, "(%S)", pu32?((wchar_t*)pu32):L"nil"); + break; + case 7: if(R_EAX) snprintf(buff2, 63, " (error=\"%s\")", strerror(R_EAX)); break; + case 8: if(!R_EAX) snprintf(buff2, 63, " [%p]", from_ptrv(*pu32)); break; + case 9: if(errno) snprintf(buff2, 63, " (errno=%d/\"%s\")", errno, strerror(errno)); else snprintf(buff2, 63, " (errno=0)"); break; + break; + case 10: if(R_EAX) + switch(*pu8) { + case 4: + snprintf(buff2, 63, " [type=%hhd, x=%hd, y=%hd, relx=%+hd, rely=%+hd]", *pu8, *(uint16_t*)(pu8+4), *(uint16_t*)(pu8+6), *(int16_t*)(pu8+8), *(int16_t*)(pu8+10)); + break; + default: + snprintf(buff2, 63, " [type=%hhd]", *pu8); + } + break; + case 11: snprintf(buff2, 63, " [%d / %d / %d /%d]", pu32[0], pu32[1], pu32[2], pu32[3]); + break; + case 12: if(R_EAX>0) { + char tmp[50]; + char tmp2[50] = {0}; + uint32_t n = from_ptri(uint32_t, R_ESP+8); + for(int ii=0; ii>16); + strncat(tmp2, tmp, 49); + } + snprintf(buff2, 63, "[%s]", tmp2); + } + case 13: if(R_EAX==0x25E) + snprintf(buff2, 63, "%s", "here"); + break; + case 14: snprintf(buff2, 63, " [%d]", *(int*)pu32); + break; + } + if(perr==1 && (S_EAX)<0) + snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno)); + else if(perr==2 && R_EAX==0) + snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno)); + else if(perr==3 && (S_EAX)==-1) + snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno)); + if(cycle_log) { + if(ret_fmt==1) + snprintf(buffret, 128, "%d%s%s", S_EAX, buff2, buff3); + else + snprintf(buffret, 128, "0x%X%s%s", R_EAX, buff2, buff3); + } else { + mutex_lock(&emu->context->mutex_trace); + if(ret_fmt==1) + printf_log(LOG_NONE, " return %d%s%s\n", S_EAX, buff2, buff3); + else + printf_log(LOG_NONE, " return 0x%X%s%s\n", R_EAX, buff2, buff3); + mutex_unlock(&emu->context->mutex_trace); + } + } else + w(emu, a); + } + return; + } + if(!box64_ignoreint3 && my_context->signals[SIGTRAP]) { + R_RIP = *addr; // update RIP + emit_signal(emu, SIGTRAP, NULL, 3); + } else { + printf_log(LOG_DEBUG, "%04d|Warning, ignoring unsupported Int 3 call @%p\n", GetTID(), (void*)R_RIP); + R_RIP = *addr; + } + //emu->quit = 1; +} diff --git a/src/emu/x86syscall.c b/src/emu/x86syscall.c index 1d28a989df0a90b99dd5398949390407249f818d..0ab60e4f58a244653eb3ea86711ec616feed9c33 100755 --- a/src/emu/x86syscall.c +++ b/src/emu/x86syscall.c @@ -127,7 +127,7 @@ static const scwrap_t syscallwrap[] = { //{ 185, __NR_capset, 2}, //{ 186, __NR_sigaltstack, 2 }, // neeed wrap or something? //{ 191, __NR_ugetrlimit, 2 }, -// { 192, __NR_mmap2, 6}, + //{ 192, __NR_mmap2, 6}, //{ 195, __NR_stat64, 2 }, // need proprer wrap because of structure size change //{ 196, __NR_lstat64, 2 }, // need proprer wrap because of structure size change //{ 197, __NR_fstat64, 2 }, // need proprer wrap because of structure size change @@ -266,7 +266,7 @@ void EXPORT x86Syscall(x64emu_t *emu) R_EAX = R_EBX; // faking the syscall here, we don't want to really terminate the thread now break; /*case 123: // SYS_modify_ldt - R_EAX = my_modify_ldt(emu, R_EBX, (thread_area_t*)(uintptr_t)R_ECX, R_EDX); + R_EAX = my32_modify_ldt(emu, R_EBX, (thread_area_t*)(uintptr_t)R_ECX, R_EDX); if(R_EAX==0xffffffff && errno>0) R_EAX = (uint32_t)-errno; break;*/ diff --git a/src/emu/x86syscall_32.c b/src/emu/x86syscall_32.c new file mode 100644 index 0000000000000000000000000000000000000000..ce2431e842cb3b13595095a9875bb24b46a24178 --- /dev/null +++ b/src/emu/x86syscall_32.c @@ -0,0 +1,630 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include + +#include /* For SYS_xxx definitions */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef __NR_socketcall +#include +#include +#endif +#include +#include +#include + +#include "debug.h" +#include "box64stack.h" +#include "x64emu.h" +#include "x64run.h" +#include "x64emu_private.h" +#include "x64trace.h" +#include "myalign32.h" +#include "box64context.h" +#include "callback.h" +#include "signals.h" +#include "x64tls.h" +#include "box32.h" +#include "converter32.h" + + +// Syscall table for x86_64 can be found +typedef struct scwrap_s { + uint32_t x86s; + int nats; + int nbpars; +} scwrap_t; + +static const scwrap_t syscallwrap[] = { + //{ 2, __NR_fork, 1 }, + //{ 3, __NR_read, 3 }, // wrapped so SA_RESTART can be handled by libc + //{ 4, __NR_write, 3 }, // same + //{ 5, __NR_open, 3 }, // flags need transformation + //{ 6, __NR_close, 1 }, // wrapped so SA_RESTART can be handled by libc + //{ 7, __NR_waitpid, 3 }, + //{ 10, __NR_unlink, 1 }, + //{ 12, __NR_chdir, 1 }, + //{ 13, __NR_time, 1 }, + //{ 15, __NR_chmod, 2 }, + //{ 19, __NR_lseek, 3 }, + //{ 20, __NR_getpid, 0 }, + //{ 24, __NR_getuid, 0 }, + //{ 33, __NR_access, 2 }, + //{ 37, __NR_kill, 2 }, + //{ 38, __NR_rename, 2 }, + //{ 39, __NR_mkdir, 2 }, + //{ 40, __NR_rmdir, 1 }, + //{ 41, __NR_dup, 1 }, + //{ 42, __NR_pipe, 1 }, + //{ 45, __NR_brk, 1 }, + //{ 47, __NR_getgid, 0 }, + //{ 49, __NR_geteuid, 0 }, + //{ 50, __NR_getegid, 0 }, + //{ 54, __NR_ioctl, 3 }, // should be wrapped to allow SA_RESTART handling by libc, but syscall is only 3 arguments, ioctl can be 5 + //{ 55, __NR_fcntl, 3 }, // wrapped to allow filter of F_SETFD + //{ 60, __NR_umask, 1 }, + //{ 63, __NR_dup2, 2 }, + //{ 64, __NR_getppid, 0 }, + //{ 66, __NR_setsid, 0 }, + //{ 75, __NR_setrlimit, 2 }, + //{ 76, __NR_getrlimit, 2 }, + //{ 77, __NR_getrusage, 2 }, + //{ 78, __NR_gettimeofday, 2 }, + //{ 83, __NR_symlink, 2 }, + //{ 82, __NR_select, 5 }, + //{ 85, __NR_readlink, 3 }, + //{ 90, __NR_old_mmap, 1 }, + //{ 91, __NR_munmap, 2 }, + //{ 94, __NR_fchmod, 2 }, + //{ 99, __NR_statfs, 2 }, + //{ 102, __NR_socketcall, 2 }, + //{ 104, __NR_setitimer, 3 }, + //{ 105, __NR_getitimer, 2 }, + //{ 106, __NR_newstat, 2 }, + //{ 106, __NR_stat, 2 }, + //{ 107, __NR_newlstat, 2 }, + //{ 107, __NR_lstat, 2 }, + //{ 108, __NR_newfstat, 2 }, + //{ 108, __NR_fstat, 2 }, + //{ 109, __NR_olduname, 1 }, + //{ 110, __NR_iopl, 1 }, + //{ 114, __NR_wait4, 4 }, //TODO: check struct rusage alignment + //{ 117, __NR_ipc, 6 }, + //{ 119, __NR_sigreturn, 0}, + //{ 120, __NR_clone, 5 }, // need works + //{ 122, __NR_uname, 1 }, + //{ 123, __NR_modify_ldt }, + //{ 125, __NR_mprotect, 3 }, + //{ 136, __NR_personality, 1 }, + //{ 140, __NR__llseek, 5 }, + //{ 141, __NR_getdents, 3 }, + //{ 142, __NR__newselect, 5 }, + //{ 143, __NR_flock, 2 }, + //{ 144, __NR_msync, 3 }, + //{ 145, __NR_readv, 3 }, + //{ 146, __NR_writev, 3 }, + //{ 148, __NR_fdatasync, 1 }, + //{ 149, __NR__sysctl, 1 }, // need wrapping? + //{ 156, __NR_sched_setscheduler, 3 }, + //{ 157, __NR_sched_getscheduler, 1 }, + //{ 158, __NR_sched_yield, 0 }, + //{ 162, __NR_nanosleep, 2 }, + //{ 164, __NR_setresuid, 3 }, + //{ 168, __NR_poll, 3 }, // wrapped to allow SA_RESTART wrapping by libc + //{ 172, __NR_prctl, 5 }, + //{ 173, __NR_rt_sigreturn, 0 }, + //{ 175, __NR_rt_sigprocmask, 4 }, + //{ 179, __NR_rt_sigsuspend, 2 }, + //{ 183, __NR_getcwd, 2 }, + //{ 184, __NR_capget, 2}, + //{ 185, __NR_capset, 2}, + //{ 186, __NR_sigaltstack, 2 }, // neeed wrap or something? + //{ 191, __NR_ugetrlimit, 2 }, + //{ 192, __NR_mmap2, 6}, + //{ 195, __NR_stat64, 2 }, // need proprer wrap because of structure size change + //{ 196, __NR_lstat64, 2 }, // need proprer wrap because of structure size change + //{ 197, __NR_fstat64, 2 }, // need proprer wrap because of structure size change + //{ 199, __NR_getuid32, 0 }, + //{ 200, __NR_getgid32, 0 }, + //{ 201, __NR_geteuid32, 0 }, + //{ 202, __NR_getegid32, 0 }, + //{ 208, __NR_setresuid32, 3 }, + //{ 209, __NR_getresuid32, 3 }, + //{ 210, __NR_setresgid32, 3 }, + //{ 211, __NR_getresgid32, 3 }, + //{ 220, __NR_getdents64, 3 }, + //{ 221, __NR_fcntl64, 3 }, + { 224, __NR_gettid, 0 }, + //{ 240, __NR_futex, 6 }, // needs wrapping for the optionnal timespec part + //{ 241, __NR_sched_setaffinity, 3 }, + //{ 242, __NR_sched_getaffinity, 3 }, + //{ 243, __NR_set_thread_area, 1 }, + //{ 252, __NR_exit_group, 1 }, + //{ 254, __NR_epoll_create, 1 }, + //{ 255, __NR_epoll_ctl, 4 }, + //{ 256, __NR_epoll_wait, 4 }, + //{ 265, __NR_clock_gettime, 2 }, + //{ 266, __NR_clock_getres, 2 }, + { 270, __NR_tgkill, 3 }, + //{ 271, __NR_utimes, 2 }, + //{ 291, __NR_inotify_init, 0}, + //{ 292, __NR_inotify_add_watch, 3}, + //{ 293, __NR_inotify_rm_watch, 2}, + //{ 311, __NR_set_robust_list, 2 }, + //{ 312, __NR_get_robust_list, 4 }, // need wrapping of 3rd arg + //{ 318, __NR_getcpu, 3}, + //{ 328, __NR_eventfd2, 2}, + //{ 329, __NR_epoll_create1, 1 }, + //{ 331, __NR_pipe2, 2}, + //{ 332, __NR_inotify_init1, 1}, + //{ 355, __NR_getrandom, 3 }, + //{ 356, __NR_memfd_create, 2}, + //{ 449, __NR_futex_waitv, 5}, +}; + +struct mmap_arg_struct { + ulong_t addr; + ulong_t len; + ulong_t prot; + ulong_t flags; + ulong_t fd; + ulong_t offset; +}; + +#undef st_atime +#undef st_ctime +#undef st_mtime + +struct x64_pt_regs { + long ebx; + long ecx; + long edx; + long esi; + long edi; + long ebp; + long eax; + int xds; + int xes; + int xfs; + int xgs; + long orig_eax; + long eip; + int xcs; + long eflags; + long esp; + int xss; +}; + +#ifndef __NR_olduname +struct oldold_utsname { + char sysname[9]; + char nodename[9]; + char release[9]; + char version[9]; + char machine[9]; +}; +#endif +struct old_utsname { + char sysname[65]; + char nodename[65]; + char release[65]; + char version[65]; + char machine[65]; +}; + +struct i386_user_desc { + unsigned int entry_number; + unsigned long base_addr; + unsigned int limit; + unsigned int seg_32bit:1; + unsigned int contents:2; + unsigned int read_exec_only:1; + unsigned int limit_in_pages:1; + unsigned int seg_not_present:1; + unsigned int useable:1; +}; + +struct i386_robust_list { + ptr_t next; // struct i386_robust_list * +}; +struct i386_robust_list_head { + struct i386_robust_list list; + long_t futex_offset; + ptr_t list_op_pending; // struct robust_list * +}; + +typedef struct i386_stack_s i386_stack_t; + +int32_t my_open(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mode); +int32_t my32_execve(x64emu_t* emu, const char* path, char* const argv[], char* const envp[]); +ssize_t my32_read(int fd, void* buf, size_t count); +void* my32_mmap64(x64emu_t* emu, void *addr, size_t length, int prot, int flags, int fd, int64_t offset); +int my32_munmap(x64emu_t* emu, void* addr, unsigned long length); +int my32_sigaltstack(x64emu_t* emu, const i386_stack_t* ss, i386_stack_t* oss); + +void EXPORT x86Syscall(x64emu_t *emu) +{ + uint32_t s = R_EAX; + printf_log(LOG_DEBUG, "%p: Calling 32bits syscall 0x%02X (%d) %p %p %p %p %p", (void*)R_RIP, s, s, (void*)(uintptr_t)R_EBX, (void*)(uintptr_t)R_ECX, (void*)(uintptr_t)R_EDX, (void*)(uintptr_t)R_ESI, (void*)(uintptr_t)R_EDI); + // check wrapper first + int cnt = sizeof(syscallwrap) / sizeof(scwrap_t); + void* tmp; + size_t tmps; + for (int i=0; iquit = 1; + return; + } + if(R_EAX==0xffffffff && errno>0) + R_EAX = (uint32_t)-errno; + printf_log(LOG_DEBUG, " => 0x%x\n", R_EAX); + return; + } + } + switch (s) { + case 1: // sys_exit + emu->quit = 1; + emu->exit = 1; + //R_EAX = syscall(__NR_exit, R_EBX); // the syscall should exit only current thread + R_EAX = R_EBX; // faking the syscall here, we don't want to really terminate the thread now + break; + case 3: // sys_read + S_EAX = to_long(my32_read((int)R_EBX, from_ptrv(R_ECX), from_ulong(R_EDX))); + break; + case 4: // sys_write + S_EAX = to_long(write((int)R_EBX, from_ptrv(R_ECX), from_ulong(R_EDX))); + break; + case 5: // sys_open + if(s==5) {printf_log(LOG_DEBUG, " => sys_open(\"%s\", %d, %d)", (char*)from_ptrv(R_EBX), of_convert32(R_ECX), R_EDX);}; + //S_EAX = open((void*)R_EBX, of_convert32(R_ECX), R_EDX); + S_EAX = my_open(emu, from_ptrv(R_EBX), of_convert32(R_ECX), R_EDX); + break; + case 6: // sys_close + S_EAX = close((int)R_EBX); + break; + case 90: // old_mmap + { + struct mmap_arg_struct *st = from_ptrv(R_EBX); + R_EAX = to_ptrv(my32_mmap64(emu, from_ptrv(st->addr), st->len, st->prot, st->flags, st->fd, st->offset)); + } + if(S_EAX==-1 && errno>0) + S_EAX = -errno; + break; + case 91: // munmap + S_EAX = my32_munmap(emu, from_ptrv(R_EBX), (unsigned long)R_ECX); + if(S_EAX==-1 && errno>0) + S_EAX = -errno; + break; + /*case 123: // SYS_modify_ldt + R_EAX = my32_modify_ldt(emu, R_EBX, (thread_area_t*)(uintptr_t)R_ECX, R_EDX); + if(R_EAX==0xffffffff && errno>0) + R_EAX = (uint32_t)-errno; + break;*/ + case 186: // sigaltstack + S_EAX = my32_sigaltstack(emu, from_ptrv(R_EBX), from_ptrv(R_ECX)); + if(S_EAX==-1 && errno>0) + S_EAX = -errno; + break; + case 192: // mmap2 + R_EAX = to_ptrv(my32_mmap64(emu, from_ptrv(R_EBX), (unsigned long)R_ECX, R_EDX, R_ESI, R_EDI, R_EBP)); + break; + case 240: // futex + { + struct_LL_t tspec; + int need_tspec = 1; + switch(R_ECX&FUTEX_CMD_MASK) { + case FUTEX_WAIT: + case FUTEX_WAIT_BITSET: + case FUTEX_LOCK_PI: + case FUTEX_LOCK_PI2: + case FUTEX_WAIT_REQUEUE_PI: + need_tspec = 1; + break; + case FUTEX_CMP_REQUEUE_PI: + case FUTEX_UNLOCK_PI: + case FUTEX_TRYLOCK_PI: + case FUTEX_WAKE_BITSET: + case FUTEX_WAKE_OP: + case FUTEX_REQUEUE: + case FUTEX_CMP_REQUEUE: + case FUTEX_FD: + case FUTEX_WAKE: + default: need_tspec = 0; + } + if(need_tspec && R_ESI) + from_struct_LL(&tspec, R_ESI); + else + need_tspec = 0; + S_EAX = syscall(__NR_futex, R_EBX, R_ECX, R_EDX, need_tspec?&tspec:from_ptrv(R_ESI), R_EDI, R_EBP); + if(S_EAX==-1 && errno>0) + R_EAX = (uint32_t)-errno; + } + break; + case 243: // set_thread_area + R_EAX = my_set_thread_area_32(emu, (thread_area_32_t*)(uintptr_t)R_EBX); + if(R_EAX==0xffffffff && errno>0) + R_EAX = (uint32_t)-errno; + break; + case 312: // get_robust_list + { + static struct i386_robust_list_head h; + ulong_t *arg2 = from_ptrv(R_EDX); + ptr_t* arg1 = from_ptrv(R_ECX); + tmp = arg1?(from_ptrv(*arg1)):NULL; + tmps = arg2?(from_ulong(*arg2)):0; + tmp = R_ECX?from_ptrv(*(ptr_t*)from_ptrv(R_ECX)):NULL; + tmps = R_EDX?from_ulong(*(ulong_t*)from_ptrv(R_EDX)):0; + R_EAX = syscall(__NR_get_robust_list, S_EBX, arg1?(&tmp):NULL, arg2?(&tmps):NULL); + if(!R_EAX) { + if(arg1) { + h.list.next = (*(void**)tmp==tmp)?to_ptrv(&h):to_ptrv(*(void**)tmp); // set head + h.futex_offset = to_long(((long*)tmp)[1]); + h.list_op_pending = to_ptrv(((void**)tmp)[2]); + *arg1 = to_ptrv(&h); // should wrap all the structures, and keep it alive... + } + if(arg2) *arg2 = to_ulong(tmps/2); // it's 2 times smaller in x86 + } else if(R_EAX==0xffffffff && errno>0) + R_EAX = (uint32_t)-errno; + } + break; + case 449: + #ifdef __NR_futex_waitv + if(box64_futex_waitv) + S_RAX = syscall(__NR_futex_waitv, R_EBX, R_ECX, R_EDX, R_ESI, R_EDI); + else + #endif + S_RAX = -ENOSYS; + break; + default: + printf_log(LOG_INFO, "Warning: Unsupported Syscall 0x%02Xh (%d)\n", s, s); + R_EAX = (uint32_t)-ENOSYS; + return; + } + printf_log(LOG_DEBUG, " => 0x%x\n", R_EAX); +} + +#ifdef BOX32 +#define stack(n) (b[(n)/4]) +#define i32(n) (int32_t)stack(n) +#define u32(n) (uint32_t)stack(n) +#define p(n) from_ptrv(stack(n)) + +uint32_t EXPORT my32_syscall(x64emu_t *emu, ptr_t* b) +{ + static uint64_t warned[10] = {0}; + uint32_t s = u32(0); + printf_log(LOG_DEBUG, "%p: Calling libc syscall 0x%02X (%d) %p %p %p %p %p\n", from_ptrv(R_EIP), s, s, from_ptrv(u32(4)), from_ptrv(u32(8)), from_ptrv(u32(12)), from_ptrv(u32(16)), from_ptrv(u32(20))); + // check wrapper first + int cnt = sizeof(syscallwrap) / sizeof(scwrap_t); + size_t tmps; + void* tmp; + int ret; + for (int i=0; iquit = 1; + return 0; + } + } + } + switch (s) { + case 1: // __NR_exit + emu->quit = 1; + return u32(4); // faking the syscall here, we don't want to really terminate the program now + case 3: // sys_read + return (uint32_t)to_long(my32_read(i32(4), p(8), u32(12))); + case 4: // sys_write + return (uint32_t)to_long(write(i32(4), p(8), u32(12))); + case 5: // sys_open + return my_open(emu, p(4), of_convert32(u32(8)), u32(12)); + case 6: // sys_close + return (uint32_t)close(i32(4)); + case 11: // execve + return (uint32_t)my32_execve(emu, p(4), p(8), p(12)); + case 91: // munmap + return (uint32_t)my32_munmap(emu, p(4), u32(8)); +#if 0 + case 120: // clone + // x86 raw syscall is long clone(unsigned long flags, void *stack, int *parent_tid, unsigned long tls, int *child_tid); + // so flags=u(4), stack=p(8), parent_tid=p(12), tls=p(16), child_tid=p(20) + if(p(8)) + { + void* stack_base = p(8); + int stack_size = 0; + if(!stack_base) { + // allocate a new stack... + int currstack = 0; + if((R_ESP>=(uintptr_t)emu->init_stack) && (R_ESP<=((uintptr_t)emu->init_stack+emu->size_stack))) + currstack = 1; + stack_size = (currstack)?emu->size_stack:(1024*1024); + stack_base = mmap(NULL, stack_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); + // copy value from old stack to new stack + if(currstack) + memcpy(stack_base, emu->init_stack, stack_size); + else { + int size_to_copy = (uintptr_t)emu->init_stack + emu->size_stack - (R_ESP); + memcpy(stack_base+stack_size-size_to_copy, (void*)R_ESP, size_to_copy); + } + } + x64emu_t * newemu = NewX86Emu(emu->context, R_EIP, (uintptr_t)stack_base, stack_size, (p(8))?0:1); + SetupX86Emu(newemu); + CloneEmu(newemu, emu); + Push32(newemu, 0); + PushExit(newemu); + void* mystack = NULL; + if(my32_context->stack_clone_used) { + mystack = malloc(1024*1024); // stack for own process... memory leak, but no practical way to remove it + } else { + if(!my32_context->stack_clone) + my32_context->stack_clone = malloc(1024*1024); + mystack = my32_context->stack_clone; + my32_context->stack_clone_used = 1; + } + // x86_64 raw clone is long clone(unsigned long flags, void *stack, int *parent_tid, int *child_tid, unsigned long tls); + long ret = clone(clone_fn, (void*)((uintptr_t)mystack+1024*1024), u32(4), newemu, p(12), p(16), p(20)); + return (uint32_t)ret; + } + else + return (uint32_t)syscall(__NR_clone, u32(4), p(8), p(12), p(16), p(20)); + break; + case 123: // SYS_modify_ldt + return my32_modify_ldt(emu, i32(4), (thread_area_t*)p(8), i32(12)); + case 125: // mprotect + return (uint32_t)my32_mprotect(emu, p(4), u32(8), i32(12)); + case 174: // sys_rt_sigaction + return (uint32_t)my32_sigaction(emu, i32(4), (x86_sigaction_t*)p(8), (x86_sigaction_t*)p(12)); +#endif + case 186: // sigaltstack + return my32_sigaltstack(emu, p(4), p(8)); + case 192: // mmap2 + return to_ptrv(my32_mmap64(emu, p(4), u32(8), i32(12), i32(16), i32(20), u32(24))); + case 240: // futex + { + struct_LL_t tspec; + int need_tspec = 1; + switch(u32(8)&FUTEX_CMD_MASK) { + case FUTEX_WAIT: + case FUTEX_WAIT_BITSET: + case FUTEX_LOCK_PI: + case FUTEX_LOCK_PI2: + case FUTEX_WAIT_REQUEUE_PI: + need_tspec = 1; + break; + case FUTEX_CMP_REQUEUE_PI: + case FUTEX_UNLOCK_PI: + case FUTEX_TRYLOCK_PI: + case FUTEX_WAKE_BITSET: + case FUTEX_WAKE_OP: + case FUTEX_REQUEUE: + case FUTEX_CMP_REQUEUE: + case FUTEX_FD: + case FUTEX_WAKE: + default: need_tspec = 0; + } + if(need_tspec && u32(16)) + from_struct_LL(&tspec, u32(16)); + else + need_tspec = 0; + return syscall(__NR_futex, p(4), i32(8), u32(12), need_tspec?(&tspec):p(16), p(20), u32(24)); + } + break; + case 243: // set_thread_area + return my_set_thread_area_32(emu, (thread_area_32_t*)p(4)); +#if 0 + case 254: // epoll_create + return my32_epoll_create(emu, i32(4)); + case 255: // epoll_ctl + return my32_epoll_ctl(emu, i32(4), i32(8), i32(12), p(16)); + case 256: // epoll_wait + return my32_epoll_wait(emu, i32(4), p(8), i32(12), i32(16)); + case 270: //_NR_tgkill + /*if(!u32(12))*/ { + //printf("tgkill(%u, %u, %u) => ", u32(4), u32(8), u32(12)); + uint32_t ret = (uint32_t)syscall(__NR_tgkill, u32(4), u32(8), u32(12)); + //printf("%u (errno=%d)\n", ret, (ret==(uint32_t)-1)?errno:0); + return ret; + }/* else { + printf_log(LOG_INFO, "Warning: ignoring libc Syscall tgkill (%u, %u, %u)\n", u32(4), u32(8), u32(12)); + }*/ + return 0; +#endif + case 312: // get_robust_list + { + // will wrap only head for now + static uint8_t i386_nothing[0x14] = {0}; // for faking steamcmd use of get_robust_list + static struct i386_robust_list_head h; + ulong_t *arg2 = p(12); + ptr_t* arg1 = p(8); + tmp = arg1?(from_ptrv(*arg1)):NULL; + tmps = arg2?(from_ulong(*arg2)):0; + ret = syscall(__NR_get_robust_list, u32(4), arg1?(&tmp):NULL, arg2?(&tmps):NULL); + if(!ret) { + if(box64_steamcmd || 1) { + h.list.next = to_ptrv(&h); + h.futex_offset = -0x14; + h.list_op_pending = 0; + *arg1 = to_ptrv(&h); + *arg2 = 12; + } else { + if(arg1) { + h.list.next = to_ptrv(((void**)tmp)[0]);//(*(void**)tmp==tmp)?to_ptrv(&h):to_ptrv(*(void**)tmp); // set head + h.futex_offset = to_long(((long*)tmp)[1]); + h.list_op_pending = to_ptrv(((void**)tmp)[2]); + *arg1 = to_ptrv(&h); // should wrap all the structures, and keep it alive... + } + if(arg2) *arg2 = to_ulong(tmps/2); // it's 2 times smaller in x86 + } + } + } + return ret; +#if 0 +#ifndef NOALIGN + case 329: // epoll_create1 + return my32_epoll_create1(emu, of_convert32(i32(4))); +#endif +#ifndef __NR_getrandom + case 355: // getrandom + return (uint32_t)my32_getrandom(emu, p(4), u32(8), u32(12)); +#endif +#ifndef __NR_memfd_create + case 356: // memfd_create + return (uint32_t)my32_memfd_create(emu, p(4), u32(8)); +#endif +#endif + case 449: + #ifdef __NR_futex_waitv + if(box64_futex_waitv) + return syscall(__NR_futex_waitv, u32(4), u32(8), u32(12), u32(16), u32(20)); + else + #endif + { + errno = ENOSYS; + return -1; + } + break; + default: + if((s>>6)>6]&(1<<(s&0x3f)))) { + printf_log(LOG_INFO, "Warning: Unsupported libc Syscall 0x%02X (%d)\n", s, s); + warned[s>>6] |= (1<<(s&0x3f)); + } + } else + printf_log(LOG_INFO, "Warning: Unsupported libc Syscall 0x%02X (%d)\n", s, s); + errno = ENOSYS; + return -1; + } + return 0; +} +#endif //BOX32 \ No newline at end of file diff --git a/src/emu/x87emu_private.c b/src/emu/x87emu_private.c index c54f80d58b6301c5b1fbf126358bcc3b45ff7e19..a463bc01f72bc937fca112b6b2d60dddeb68751d 100644 --- a/src/emu/x87emu_private.c +++ b/src/emu/x87emu_private.c @@ -255,7 +255,7 @@ void fpu_loadenv(x64emu_t* emu, char* p, int b16) emu->sw.x16 = *p16++; // tagword: 2bits*8 // tags... (only full = 0b11 / free = 0b00) - emu->fpu_tags = ~*(p16++); + emu->fpu_tags = *(p16++); // intruction pointer: 16bits // data (operand) pointer: 16bits // last opcode: 11bits save: 16bits restaured (1st and 2nd opcode only) @@ -264,8 +264,8 @@ void fpu_loadenv(x64emu_t* emu, char* p, int b16) emu->cw.x16 = *p32++; emu->sw.x16 = *p32++; // tagword: 2bits*8 - // tags... (only full = 0b11 / free = 0b00) - emu->fpu_tags = ~*(p32++); + // tags... (only free = 0b11 / full = 0b00) + emu->fpu_tags = *(p32++); // intruction pointer: 16bits // data (operand) pointer: 16bits // last opcode: 11bits save: 16bits restaured (1st and 2nd opcode only) @@ -282,14 +282,14 @@ void fpu_savenv(x64emu_t* emu, char* p, int b16) *p16++ = emu->sw.x16; // tagword: 2bits*8 // tags... - *p16++ = ~emu->fpu_tags; + *p16++ = emu->fpu_tags; } else { uint32_t* p32 = (uint32_t*)p; *p32++ = emu->cw.x16; *p32++ = emu->sw.x16; // tagword: 2bits*8 // tags... - *p32++ = ~emu->fpu_tags; + *p32++ = emu->fpu_tags; } // other stuff are not pushed.... @@ -311,8 +311,8 @@ typedef struct xsave32_s { uint32_t MxCsr; /* 018 */ uint32_t MxCsr_Mask; /* 01c */ sse_regs_t FloatRegisters[8];/* 020 */ // fpu/mmx are store in 128bits here - sse_regs_t XmmRegisters[16]; /* 0a0 */ - uint8_t Reserved4[96]; /* 1a0 */ + sse_regs_t XmmRegisters[8]; /* 0a0 */ + uint8_t Reserved4[56*4]; /* 120 */ } xsave32_t; typedef struct xsave64_s { uint16_t ControlWord; /* 000 */ @@ -354,12 +354,12 @@ void fpu_fxsave32(x64emu_t* emu, void* ed) for(int i=0; i<8; ++i) memcpy(&p->FloatRegisters[i].q[0], (immx[i], sizeof(mmx87_regs_t)); // copy SSE regs - for(int i=0; i<16; ++i) - memcpy(&p->XmmRegisters[i], &emu->xmm[i], 16); + memcpy(p->XmmRegisters, emu->xmm, 8*16); } void fpu_fxsave64(x64emu_t* emu, void* ed) { + // the subtelties of the REX.W are not handled in fxsave64/fxrstor64 xsave64_t *p = (xsave64_t*)ed; // should save flags & all int top = emu->top&7; @@ -381,8 +381,7 @@ void fpu_fxsave64(x64emu_t* emu, void* ed) for(int i=0; i<8; ++i) memcpy(&p->FloatRegisters[i].q[0], (immx[i], sizeof(mmx87_regs_t)); // copy SSE regs - for(int i=0; i<16; ++i) - memcpy(&p->XmmRegisters[i], &emu->xmm[i], 16); + memcpy(p->XmmRegisters, emu->xmm, 16*16); } void fpu_fxrstor32(x64emu_t* emu, void* ed) @@ -406,12 +405,12 @@ void fpu_fxrstor32(x64emu_t* emu, void* ed) for(int i=0; i<8; ++i) memcpy((immx[i], &p->FloatRegisters[i].q[0], sizeof(mmx87_regs_t)); // copy SSE regs - for(int i=0; i<16; ++i) - memcpy(&emu->xmm[i], &p->XmmRegisters[i], 16); + memcpy(emu->xmm, p->XmmRegisters, 8*16); } void fpu_fxrstor64(x64emu_t* emu, void* ed) { + // the subtelties of the REX.W are not handled in fxsave64/fxrstor64 xsave64_t *p = (xsave64_t*)ed; emu->cw.x16 = p->ControlWord; emu->sw.x16 = p->StatusWord; @@ -431,8 +430,7 @@ void fpu_fxrstor64(x64emu_t* emu, void* ed) for(int i=0; i<8; ++i) memcpy((immx[i], &p->FloatRegisters[i].q[0], sizeof(mmx87_regs_t)); // copy SSE regs - for(int i=0; i<16; ++i) - memcpy(&emu->xmm[i], &p->XmmRegisters[i], 16); + memcpy(emu->xmm, p->XmmRegisters, 16*16); } typedef struct xsaveheader_s { @@ -473,13 +471,11 @@ void fpu_xsave_mask(x64emu_t* emu, void* ed, int is32bits, uint64_t mask) } // copy SSE regs if(h->xstate_bv&0b10) { - for(int i=0; i<(is32bits?8:16); ++i) - memcpy(&p->XmmRegisters[i], &emu->xmm[i], 16); + memcpy(&p->XmmRegisters[0], &emu->xmm[0], 16*(is32bits?8:16)); } if(h->xstate_bv&0b100) { sse_regs_t* avx = (sse_regs_t*)(h+1); - for(int i=0; i<(is32bits?8:16); ++i) - memcpy(&avx[i], &emu->ymm[i], 16); + memcpy(&avx[0], &emu->ymm[0], 16*(is32bits?8:16)); } } @@ -525,20 +521,16 @@ void fpu_xrstor(x64emu_t* emu, void* ed, int is32bits) } if(to_restore&0b010) { // copy SSE regs - for(int i=0; i<(is32bits?8:16); ++i) - memcpy(&emu->xmm[i], &p->XmmRegisters[i], 16); + memcpy(&emu->xmm[0], &p->XmmRegisters[0], 16*(is32bits?8:16)); } else if(to_init&0b010) { - for(int i=0; i<(is32bits?8:16); ++i) - memset(&emu->xmm[i], 0, 16); + memset(&emu->xmm[0], 0, 16*(is32bits?8:16)); } if(to_restore&0b100) { // copy AVX upper part of regs sse_regs_t* avx = (sse_regs_t*)(h+1); - for(int i=0; i<(is32bits?8:16); ++i) - memcpy(&emu->ymm[i], &avx[i], 16); + memcpy(&emu->ymm[0], &avx[0], 16*(is32bits?8:16)); } else if(to_init&0b100) { - for(int i=0; i<(is32bits?8:16); ++i) - memset(&emu->ymm[i], 0, 16); + memset(&emu->ymm[0], 0, 16*(is32bits?8:16)); } } diff --git a/src/include/box32.h b/src/include/box32.h new file mode 100644 index 0000000000000000000000000000000000000000..cbf97767e37969a6e2e1844ada3dfcffc029caae --- /dev/null +++ b/src/include/box32.h @@ -0,0 +1,111 @@ +#ifndef __BOX32_64__H_ +#define __BOX32_64__H_ + +#include +#include + +#ifndef BOX32_DEF +#define BOX32_DEF +typedef uint32_t ptr_t; +typedef int32_t long_t; +typedef uint32_t ulong_t; +#endif + +#define TEST32 +#define TEST_ABORT + +static inline uintptr_t from_ptr(ptr_t p) { + return (uintptr_t)p; +} +static inline void* from_ptrv(ptr_t p) { + return (void*)(uintptr_t)p; +} +static inline long from_long(long_t l) { + return (long)l; +} +static inline unsigned long from_ulong(ulong_t l) { + return (unsigned long)l; +} +uintptr_t from_hash(ulong_t l); +uintptr_t from_hash_d(ulong_t l); +#ifdef TEST32 +#include "debug.h" + +static inline ptr_t to_ptr(uintptr_t p) { + if(p!=0xffffffffffffffffLL && (p>>32)) { + printf_log(LOG_NONE, "Warning, uintptr_t %p is not a 32bits value\n", (void*)p); + #ifdef TEST_ABORT + abort(); + #endif + } + return (ptr_t)p; +} +static inline ptr_t to_ptrv(void* p2) { + uintptr_t p = (uintptr_t)p2; + if(p!=0xffffffffffffffffLL && (p>>32)) { + printf_log(LOG_NONE, "Warning, pointer %p is not a 32bits value\n", p2); + #ifdef TEST_ABORT + abort(); + #endif + } + return (ptr_t)p; +} +static inline long_t to_long(long l) { + long_t ret = (long_t)l; + if(l!=ret) + printf_log(LOG_NONE, "Warning, long %ld is not a 32bits value\n", l); + return ret; +} +static inline ulong_t to_ulong(unsigned long l) { + if(l!=0xffffffffffffffffLL && (l>>32)) + printf_log(LOG_NONE, "Warning, ulong %p is not a 32bits value\n", (void*)l); + return (ulong_t)l; +} +#else //TEST32 +static inline ptr_t to_ptr(uintptr_t p) { + return (ptr_t)p; +} +static inline ptr_t to_ptrv(void* p) { + return (ptr_t)(uintptr_t)p; +} +static inline long_t to_long(long l) { + return (long_t)l; +} +static inline ulong_t to_ulong(unsigned long l) { + return (ulong_t)l; +} +#endif //TEST32 + +static inline ptr_t to_ptr_silent(uintptr_t p) { + return (ptr_t)p; +} +static inline ptr_t to_ptrv_silent(void* p) { + return (ptr_t)(uintptr_t)p; +} +// indirect l -> T +#define from_ptri(T, l) *(T*)from_ptr(l) +// indirect l -> void* +static inline void* from_ptriv(ptr_t l) { + return from_ptrv(from_ptri(ptr_t, l)); +} + +ulong_t to_hash(uintptr_t p); +ulong_t to_hash_d(uintptr_t p); +static inline ulong_t to_hashv(void* p) {return to_hash((uintptr_t)p);} +static inline ulong_t to_hashv_d(uintptr_t p) {return to_hash_d((uintptr_t)p);} + +void* from_locale(ptr_t l); +void* from_locale_d(ptr_t l); +ptr_t to_locale(void* p); +ptr_t to_locale_d(void* p); + +char* from_cstring(ptr_t p); +ptr_t to_cstring(char* p); +ptr_t to_cstring_d(char* p); + +void init_hash_helper(); +void fini_hash_helper(); + +typedef struct x86emu_s x86emu_t; + +#endif //__BOX32_64__H_ diff --git a/src/include/box32context.h b/src/include/box32context.h new file mode 100644 index 0000000000000000000000000000000000000000..fac7a6f7dedeadcdafd4aad2af168b69266e1fe6 --- /dev/null +++ b/src/include/box32context.h @@ -0,0 +1,7 @@ +#ifndef __BOX32CONTEXT_H_ +#define __BOX32CONTEXT_H_ + +#include "box32.h" +#include "box64context.h" + +#endif//__BOX32CONTEXT_H_ \ No newline at end of file diff --git a/src/include/box64context.h b/src/include/box64context.h index b870672954d2f88e714c8f7073bedde4a603fc79..ecf60f7fb391fd23de7f9de11592d01d49caa8c9 100644 --- a/src/include/box64context.h +++ b/src/include/box64context.h @@ -7,12 +7,19 @@ #ifdef DYNAREC #include "dynarec/native_lock.h" #endif +#ifndef BOX32_DEF +#define BOX32_DEF +typedef uint32_t ptr_t; +typedef int32_t long_t; +typedef uint32_t ulong_t; +#endif #ifdef DYNAREC // disabling for now, seems to have a negative impact on performances //#define USE_CUSTOM_MUTEX #endif + typedef struct elfheader_s elfheader_t; typedef struct cleanup_s cleanup_t; typedef struct x64emu_s x64emu_t; @@ -26,8 +33,9 @@ typedef struct kh_defaultversion_s kh_defaultversion_t; typedef struct kh_mapsymbols_s kh_mapsymbols_t; typedef struct library_s library_t; typedef struct linkmap_s linkmap_t; +typedef struct linkmap32_s linkmap32_t; typedef struct kh_threadstack_s kh_threadstack_t; -typedef struct rbtree rbtree; +typedef struct rbtree rbtree_t; typedef struct atfork_fnc_s { uintptr_t prepare; uintptr_t parent; @@ -97,9 +105,11 @@ typedef struct box64context_s { int argc; char** argv; + ptr_t argv32; int envc; char** envv; + ptr_t envv32; int orig_argc; char** orig_argv; @@ -162,7 +172,7 @@ typedef struct box64context_s { pthread_mutex_t mutex_bridge; #endif uintptr_t max_db_size; // the biggest (in x86_64 instructions bytes) built dynablock - rbtree* db_sizes; + rbtree_t* db_sizes; int trace_dynarec; pthread_mutex_t mutex_lock; // this is for the Test interpreter #if defined(__riscv) || defined(__loongarch64) @@ -174,7 +184,9 @@ typedef struct box64context_s { library_t *sdl1mixerlib; library_t *sdl2lib; library_t *sdl2mixerlib; + library_t *libx11; linkmap_t *linkmap; + linkmap32_t *linkmap32; void* sdl1allocrw; // SDL1 AllocRW/FreeRW function void* sdl1freerw; void* sdl2allocrw; // SDL2 AllocRW/FreeRW function @@ -255,6 +267,7 @@ int AddTLSPartition(box64context_t* context, int tlssize); // defined in fact in threads.c void thread_set_emu(x64emu_t* emu); +void thread_forget_emu(); x64emu_t* thread_get_emu(void); // unlock mutex that are locked by current thread (for signal handling). Return a mask of unlock mutex diff --git a/src/include/bridge.h b/src/include/bridge.h index a01a5b678651bddf7b17797e3ae93dc76a9257a0..8a7609390b20329033fcc43bc33f65a60dbcf1c5 100644 --- a/src/include/bridge.h +++ b/src/include/bridge.h @@ -16,6 +16,7 @@ uintptr_t AddCheckBridge(bridge_t* bridge, wrapper_t w, void* fnc, int N, const uintptr_t AddAutomaticBridge(bridge_t* bridge, wrapper_t w, void* fnc, int N, const char* name); void* GetNativeFnc(uintptr_t fnc); void* GetNativeFncOrFnc(uintptr_t fnc); +void* GetNativeOrAlt(void* fnc, void* alt); uintptr_t AddVSyscall(bridge_t* bridge, int num); diff --git a/src/include/custommem.h b/src/include/custommem.h index dda210533b20d822d2d1590b3e9c89ed7ef42577..d892079e7160b859c5c13d69bdaf7fa1ec83da4f 100644 --- a/src/include/custommem.h +++ b/src/include/custommem.h @@ -7,9 +7,16 @@ typedef struct box64context_s box64context_t; void* customMalloc(size_t size); +void* customMalloc32(size_t size); void* customCalloc(size_t n, size_t size); +void* customCalloc32(size_t n, size_t size); void* customRealloc(void* p, size_t size); +void* customRealloc32(void* p, size_t size); +void* customMemAligned(size_t align, size_t size); +void* customMemAligned32(size_t align, size_t size); void customFree(void* p); +void customFree32(void* p); +size_t customGetUsableSize(void* p); #define kcalloc customCalloc #define kmalloc customMalloc @@ -18,6 +25,10 @@ void customFree(void* p); #define ALIGN(p) (((p)+box64_pagesize-1)&~(box64_pagesize-1)) +#ifndef MAP_32BIT +#define MAP_32BIT 0x40 +#endif + #ifdef DYNAREC typedef struct dynablock_s dynablock_t; // custom protection flag to mark Page that are Write protected for Dynarec purpose @@ -89,6 +100,7 @@ void setProtection_elf(uintptr_t addr, size_t size, uint32_t prot); void freeProtection(uintptr_t addr, size_t size); void refreshProtection(uintptr_t addr); uint32_t getProtection(uintptr_t addr); +uint32_t getProtection_fast(uintptr_t addr); int getMmapped(uintptr_t addr); void loadProtectionFromMap(void); #ifdef DYNAREC @@ -102,6 +114,7 @@ void* find31bitBlockNearHint(void* hint, size_t size, uintptr_t mask); void* find47bitBlock(size_t size); void* find47bitBlockNearHint(void* hint, size_t size, uintptr_t mask); // mask can be 0 for default one (0xffff) void* find47bitBlockElf(size_t size, int mainbin, uintptr_t mask); +void* find31bitBlockElf(size_t size, int mainbin, uintptr_t mask); int isBlockFree(void* hint, size_t size); // unlock mutex that are locked by current thread (for signal handling). Return a mask of unlock mutex @@ -125,4 +138,6 @@ int checkInHotPage(uintptr_t addr); void* internal_mmap(void *addr, unsigned long length, int prot, int flags, int fd, ssize_t offset); int internal_munmap(void* addr, unsigned long length); +void reserveHighMem(); + #endif //__CUSTOM_MEM__H_ diff --git a/src/include/debug.h b/src/include/debug.h index 1e31b437201ec3513cda431fad52167e8097216c..09865dc4df29cb903c4b6c5a9299b38a58f3a0c5 100644 --- a/src/include/debug.h +++ b/src/include/debug.h @@ -16,6 +16,8 @@ extern int box64_ignoreint3; extern int box64_rdtsc; extern int box64_rdtsc_1ghz; extern uint8_t box64_rdtsc_shift; +extern int box64_is32bits; +extern int box64_x11sync; #ifdef DYNAREC extern int box64_dynarec_dump; extern int box64_dynarec_trace; @@ -36,6 +38,7 @@ extern int box64_dynarec_tbb; extern int box64_dynarec_wait; extern int box64_dynarec_missing; extern int box64_dynarec_aligned_atomics; +extern int box64_dynarec_nativeflags; #ifdef ARM64 extern int arm64_asimd; extern int arm64_aes; @@ -55,6 +58,7 @@ extern int rv64_zbb; extern int rv64_zbc; extern int rv64_zbs; extern int rv64_vector; +extern int rv64_xtheadvector; // rvv 1.0 or xtheadvector extern int rv64_vlen; extern int rv64_xtheadba; extern int rv64_xtheadbb; @@ -106,7 +110,9 @@ extern int allow_missing_libs; extern int box64_mapclean; extern int box64_prefer_wrapped; extern int box64_prefer_emulated; +extern int box64_wrap_egl; extern int box64_steam; +extern int box64_steamcmd; extern int box64_wine; extern int box64_musl; extern int box64_nopulse; // disabling the use of wrapped pulseaudio @@ -120,7 +126,7 @@ extern int box64_x11threads; extern int box64_x11glx; extern char* box64_libGL; extern uintptr_t fmod_smc_start, fmod_smc_end; // to handle libfmod (from Unreal) SMC (self modifying code) -extern uint32_t default_gs; +extern uint32_t default_gs, default_fs; extern int jit_gdb; // launch gdb when a segfault is trapped extern int box64_tcmalloc_minimal; // when using tcmalloc_minimal #define LOG_NONE 0 @@ -173,4 +179,30 @@ extern char* box_strdup(const char* s); extern char* box_realpath(const char* path, char* ret); #endif +//use actual_XXXX for internal memory that should be in 32bits space when box32 is active +//use box_XXX for internal memory that doesn't need anything special +#ifdef BOX32 +int isCustomAddr(void* p); +void* box32_calloc(size_t n, size_t s); +void* box32_malloc(size_t s); +void* box32_realloc(void* p, size_t s); +void box32_free(void* p); +void* box32_memalign(size_t align, size_t s); +size_t box32_malloc_usable_size(void* p); + +#define actual_calloc(A, B) (box64_is32bits?box32_calloc(A, B):box_calloc(A, B)) +#define actual_malloc(A) (box64_is32bits?box32_malloc(A):box_malloc(A)) +#define actual_realloc(A, B) (box64_is32bits?box32_realloc(A, B):box_realloc(A, B)) +#define actual_free(A) (box64_is32bits?box32_free(A):box_free(A)) +#define actual_memalign(A, B) (box64_is32bits?box32_memalign(A, B):box_memalign(A, B)) +#define actual_malloc_usable_size(A) (box64_is32bits?box32_malloc_usable_size(A):box_malloc_usable_size(A)) +#else +#define actual_calloc(A, B) box_calloc(A, B) +#define actual_malloc(A) box_malloc(A) +#define actual_realloc(A, B) box_realloc(A, B) +#define actual_free(A) box_free(A) +#define actual_memalign(A, B) box_memalign(A, B) +#define actual_malloc_usable_size(A) box_malloc_usable_size(A) +#endif + #endif //__DEBUG_H_ diff --git a/src/include/dynarec.h b/src/include/dynarec.h index bf72349ccdf8454e18714a1cb73a221dad916cf7..baebd72d1616f303507b9057042195747c43c31f 100644 --- a/src/include/dynarec.h +++ b/src/include/dynarec.h @@ -5,7 +5,6 @@ typedef struct x64emu_s x64emu_t; void DynaCall(x64emu_t* emu, uintptr_t addr); // try to use DynaRec... Fallback to EmuCall if no dynarec available -void x64test_init(); void x64test_step(x64emu_t* ref, uintptr_t ip); void x64test_check(x64emu_t* ref, uintptr_t ip); diff --git a/src/include/elfload_dump.h b/src/include/elfload_dump.h index ad2ecd713c7698015221fbef5d435c3a174fac20..848a2817b4e1061a0f74ecb8066a79d15f897290 100644 --- a/src/include/elfload_dump.h +++ b/src/include/elfload_dump.h @@ -3,23 +3,31 @@ typedef struct elfheader_s elfheader_t; -const char* DumpSection(Elf64_Shdr *s, char* SST); -const char* DumpDynamic(Elf64_Dyn *s); -const char* DumpPHEntry(Elf64_Phdr *e); -const char* DumpSym(elfheader_t *h, Elf64_Sym* sym, int version); -const char* DumpRelType(int t); -const char* SymName(elfheader_t *h, Elf64_Sym* sym); -const char* IdxSymName(elfheader_t *h, int sym); -void DumpMainHeader(Elf64_Ehdr *header, elfheader_t *h); -void DumpSymTab(elfheader_t *h); -void DumpDynamicSections(elfheader_t *h); +const char* SymName32(elfheader_t *h, Elf32_Sym* sym); +const char* SymName64(elfheader_t *h, Elf64_Sym* sym); +const char* DumpRelType32(int t); +const char* DumpRelType64(int t); +void DumpMainHeader32(Elf32_Ehdr *header, elfheader_t *h); +void DumpMainHeader64(Elf64_Ehdr *header, elfheader_t *h); +void DumpSymTab32(elfheader_t *h); +void DumpSymTab64(elfheader_t *h); +void DumpDynamicSections32(elfheader_t *h); +void DumpDynamicSections64(elfheader_t *h); void DumpDynamicNeeded(elfheader_t *h); void DumpDynamicRPath(elfheader_t *h); -void DumpDynSym(elfheader_t *h); -void DumpRelTable(elfheader_t *h, int cnt, Elf64_Rel *rel, const char* name); -void DumpRelATable(elfheader_t *h, int cnt, Elf64_Rela *rela, const char* name); -void DumpRelRTable(elfheader_t *h, int cnt, Elf64_Relr *relr, const char *name); +void DumpDynSym32(elfheader_t *h); +void DumpDynSym64(elfheader_t *h); +void DumpRelTable32(elfheader_t *h, int cnt, Elf32_Rel *rel, const char* name); +void DumpRelTable64(elfheader_t *h, int cnt, Elf64_Rel *rel, const char* name); +void DumpRelATable32(elfheader_t *h, int cnt, Elf32_Rela *rela, const char* name); +void DumpRelATable64(elfheader_t *h, int cnt, Elf64_Rela *rela, const char* name); +void DumpRelRTable32(elfheader_t *h, int cnt, Elf32_Relr *relr, const char *name); +void DumpRelRTable64(elfheader_t *h, int cnt, Elf64_Relr *relr, const char *name); void DumpBinary(char* p, int sz); +#ifndef SHT_CHECKSUM +#define SHT_CHECKSUM 0x6ffffff8 +#endif + #endif //ELFLOADER_DUMP_H \ No newline at end of file diff --git a/src/include/elfloader.h b/src/include/elfloader.h index 770709c8212e588240a52b9c0067cde6dd39729b..cec7195d8fe745e8d840e0e6b9912ff25a161865 100644 --- a/src/include/elfloader.h +++ b/src/include/elfloader.h @@ -45,7 +45,6 @@ int CalcLoadAddr(elfheader_t* head); int AllocLoadElfMemory(box64context_t* context, elfheader_t* head, int mainbin); void FreeElfMemory(elfheader_t* head); int isElfHasNeededVer(elfheader_t* head, const char* libname, elfheader_t* verneeded); -void GrabX64CopyMainElfReloc(elfheader_t* head); int RelocateElf(lib_t *maplib, lib_t* local_maplib, int bindnow, int deepbind, elfheader_t* head); int RelocateElfPlt(lib_t *maplib, lib_t* local_maplib, int bindnow, int deepbind, elfheader_t* head); void CalcStack(elfheader_t* h, uint64_t* stacksz, size_t* stackalign); @@ -91,7 +90,10 @@ int GetNeededVersionForLib(elfheader_t* h, const char* libname, const char* ver) void* ElfGetLocalSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *sz, const char* symname, int* ver, const char** vername, int local, int* veropt); void* ElfGetGlobalSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *sz, const char* symname, int* ver, const char** vername, int local, int* veropt); void* ElfGetWeakSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *sz, const char* symname, int* ver, const char** vername, int local, int* veropt); +void* ElfGetSymbolStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname, int* ver, const char** vername, int local, int* veropt); int ElfGetSymTabStartEnd(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname); +int ElfGetSymTabStartEnd32(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname); +int ElfGetSymTabStartEnd64(elfheader_t* head, uintptr_t *offs, uintptr_t *end, const char* symname); void* GetNativeSymbolUnversioned(void* lib, const char* name); diff --git a/src/include/globalsymbols.h b/src/include/globalsymbols.h index 6344d5b120c706835822288e534437bcb72d387f..bd840ed95be9c1918dadfb6d04c68798bd42cb2f 100644 --- a/src/include/globalsymbols.h +++ b/src/include/globalsymbols.h @@ -16,6 +16,16 @@ void my_updateGlobalTInfo(void); void my_checkGlobalOpt(void); void my_updateGlobalOpt(void); +#ifdef BOX32 +// NCurse / TInfo +void my32_checkGlobalTInfo(void); +void my32_updateGlobalTInfo(void); + +// getopt +void my32_checkGlobalOpt(void); +void my32_updateGlobalOpt(void); +#endif + // libxslt void my_checkGlobalXslt(void); void my_updateGlobalXslt(void); diff --git a/src/include/gltools.h b/src/include/gltools.h index 07bd74f78ea4a90cd2f1f3cbc403dd80b51e1990..94a245b092e33b0b026b97e866f7898611aec87c 100644 --- a/src/include/gltools.h +++ b/src/include/gltools.h @@ -9,4 +9,8 @@ void freeGLProcWrapper(box64context_t* context); void* getGLProcAddress(x64emu_t* emu, glprocaddress_t procaddr, const char* rname); +#ifdef BOX32 +void* getGLProcAddress32(x64emu_t* emu, glprocaddress_t procaddr, const char* rname); +#endif + #endif //__GL_TOOLS_H__ \ No newline at end of file diff --git a/src/include/gtkclass.h b/src/include/gtkclass.h index 9960d74fd1c666182c002608cc45a22beaa8e6a9..54fcb1ce5ab125d39f5e010652c12ef582c2a9c1 100644 --- a/src/include/gtkclass.h +++ b/src/include/gtkclass.h @@ -2104,6 +2104,40 @@ typedef struct my_GstAudioFilterClass_s { void* _gst_reserved[20]; } my_GstAudioFilterClass_t; +typedef struct my_GstBufferPool_s { + my_GstObject_t object; + int flushing; + void* priv; //GstBufferPoolPrivate + void* _gst_reserved[4]; +} my_GstBufferPool_t; + +typedef struct my_GstBufferPoolClass_s { + my_GstObjectClass_t object_class; + void* (*get_options) (void* pool); + int (*set_config) (void* pool, void* config); + int (*start) (void* pool); + int (*stop) (void* pool); + int (*acquire_buffer) (void* pool, void* buffer, void* params); + int (*alloc_buffer) (void* pool, void* buffer, void* params); + void (*reset_buffer) (void* pool, void* buffer); + void (*release_buffer) (void* pool, void* buffer); + void (*free_buffer) (void* pool, void* buffer); + void (*flush_start) (void* pool); + void (*flush_stop) (void* pool); + void* _gst_reserved[4 - 2]; +} my_GstBufferPoolClass_t; + +typedef struct my_GstVideoBufferPool_s +{ + my_GstBufferPool_t bufferpool; + void* priv; //GstVideoBufferPoolPrivate +} my_GstVideoBufferPool_t; + +typedef struct my_GstVideoBufferPoolClass_s +{ + my_GstBufferPoolClass_t parent; +} my_GstVideoBufferPoolClass_t; + typedef struct my_GDBusProxy_s { my_GObject_t parent; @@ -2262,6 +2296,8 @@ GTKCLASS(GstGLBaseSrc) \ GTKCLASS(GstAudioDecoder) \ GTKCLASS(GstVideoFilter) \ GTKCLASS(GstAudioFilter) \ +GTKCLASS(GstBufferPool) \ +GTKCLASS(GstVideoBufferPool) \ GTKIFACE(GstURIHandler) \ #define GTKCLASS(A) void Set##A##ID(size_t id); diff --git a/src/include/khash.h b/src/include/khash.h index 823757bf1d8a27c5fdf59caa1e10edf18f1bbbe3..80711c3d648a77dd86bdcbcd1eda1ede40879fe9 100644 --- a/src/include/khash.h +++ b/src/include/khash.h @@ -217,6 +217,22 @@ static const double __ac_HASH_UPPER = 0.77; h->size = h->n_occupied = 0; \ } \ } \ + SCOPE khint_t kh_hash_##name(khkey_t key) { \ + return __hash_func(key); \ + } \ + SCOPE khint_t kh_get_##name##_with_hash(const kh_##name##_t *h, khkey_t key, khint_t hash) { \ + if (h->n_buckets) { \ + khint_t k = hash, i, last, mask, step = 0; \ + mask = h->n_buckets - 1; \ + i = k & mask; \ + last = i; \ + while (!__ac_isempty(h->flags, i) && (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \ + i = (i + (++step)) & mask; \ + if (i == last) return h->n_buckets; \ + } \ + return __ac_iseither(h->flags, i)? h->n_buckets : i; \ + } else return 0; \ + } \ SCOPE khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key) \ { \ if (h->n_buckets) { \ @@ -462,6 +478,24 @@ static kh_inline khint_t __ac_Wang_hash(khint_t key) */ #define kh_put(name, h, k, r) kh_put_##name(h, k, r) +/*! @function + @abstract Hash a key. + @param name Name of the hash table [symbol] + @param key Key [type of keys] + @return Hash value [khint_t] + */ +#define kh_hash(name, key) kh_hash_##name(key) + +/*! @function + @abstract Retrieve a key from the hash table with a given hash value. + @param name Name of the hash table [symbol] + @param h Pointer to the hash table [khash_t(name)*] + @param k Key [type of keys] + @param hash Hash value [khint_t] + @return Iterator to the found element, or kh_end(h) if the element is absent [khint_t] + */ +#define kh_get_with_hash(name, h, k, hash) kh_get_##name##_with_hash(h, k, hash) + /*! @function @abstract Retrieve a key from the hash table. @param name Name of the hash table [symbol] diff --git a/src/include/librarian.h b/src/include/librarian.h index 74a94373cf29663eac318681ea77e3061534d22d..710c3d431fd2da99a7fc60bbd7e3655296126bc3 100644 --- a/src/include/librarian.h +++ b/src/include/librarian.h @@ -36,6 +36,7 @@ int GetGlobalNoWeakSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* st int GetLocalSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, uintptr_t* end, elfheader_t *self, int version, const char* vername, int veropt, void** elfsym); elfheader_t* GetGlobalSymbolElf(lib_t *maplib, const char* name, int version, const char* vername, int veropt); int IsGlobalNoWeakSymbolInNative(lib_t *maplib, const char* name, int version, const char* vername, int veropt); +int GetAnySymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, uintptr_t* end, int version, const char* vername, int veropt); int GetSymTabStartEnd(lib_t* maplib, const char* name, uintptr_t* start, uintptr_t* end); void MapLibRemoveLib(lib_t* maplib, library_t* lib); diff --git a/src/include/myalign32.h b/src/include/myalign32.h new file mode 100755 index 0000000000000000000000000000000000000000..b7d49cbd7edec50e906994ddb9cd15f040bd0bf7 --- /dev/null +++ b/src/include/myalign32.h @@ -0,0 +1,591 @@ +#ifndef __MY_ALIGN32__H_ +#define __MY_ALIGN32__H_ +#include +#include "box32.h" + +#define X64_VA_MAX_REG (6*8) +#define X64_VA_MAX_XMM ((6*8)+(8*16)) + +#define ALIGN64_16(A) (uint64_t*)((((uintptr_t)A)+15)&~15LL) + +#ifdef __x86_64__ +// x86_64, 6 64bits general regs and 16 or 8? 128bits float regs +/* +For reference, here is the x86_64 va_list structure +typedef struct { + unsigned int gp_offset; + unsigned int fp_offset; + void *overflow_arg_area; + void *reg_save_area; +} va_list[1]; +*/ +#define CREATE_SYSV_VALIST_32(A) \ + va_list sysv_varargs; \ + sysv_varargs->gp_offset=X64_VA_MAX_REG; \ + sysv_varargs->fp_offset=X64_VA_MAX_XMM; \ + sysv_varargs->reg_save_area=(A); \ + sysv_varargs->overflow_arg_area=A + +#define CONVERT_VALIST_32(A) \ + va_list sysv_varargs; \ + sysv_varargs->gp_offset=X64_VA_MAX_REG; \ + sysv_varargs->fp_offset=X64_VA_MAX_XMM; \ + sysv_varargs->reg_save_area=(A); \ + sysv_varargs->overflow_arg_area=A + + + +#elif defined(__aarch64__) +// aarch64: 8 64bits general regs and 8 128bits float regs +/* +va_list declared as +typedef struct va_list { + void * stack; // next stack param + void * gr_top; // end of GP arg reg save area + void * vr_top; // end of FP/SIMD arg reg save area + int gr_offs; // offset from gr_top to next GP register arg + int vr_offs; // offset from vr_top to next FP/SIMD register arg +} va_list; +*/ +#define CREATE_SYSV_VALIST_32(A) \ + va_list sysv_varargs; \ + sysv_varargs.__gr_offs=(8*8); \ + sysv_varargs.__vr_offs=(8*16); \ + sysv_varargs.__stack=(A); + +#define CONVERT_VALIST_32(A) \ + va_list sysv_varargs; \ + sysv_varargs.__gr_offs=(8*8); \ + sysv_varargs.__vr_offs=(8*16); \ + sysv_varargs.__stack=(A); + + +#elif defined(__loongarch64) || defined(__powerpc64__) || defined(__riscv) +#define CREATE_SYSV_VALIST_32(A) \ + va_list sysv_varargs = (va_list)A + +#define CREATE_VALIST_FROM_VALIST_32(VA, SCRATCH) \ + va_list sysv_varargs = (va_list)A + +#else +#error Unknown architecture! +#endif + +#define VARARGS_32 sysv_varargs +#define PREPARE_VALIST_32 CREATE_SYSV_VALIST_32(emu->scratch) +#define VARARGS_32_(A) sysv_varargs +#define PREPARE_VALIST_32_(A) CREATE_SYSV_VALIST_32(A) + +void myStackAlign32(const char* fmt, uint32_t* st, uint64_t* mystack); +size_t myStackAlignScanf32(const char* fmt, uint32_t* st, uint64_t* mystack, size_t nb_elem); // return the number of long/ptr_t conversion pending +void myStackAlignScanf32_final(const char* fmt, uint32_t* st, uint64_t* mystack, size_t nb_elem, int n); // convert the long/ptr_t scanf results +void myStackAlignGVariantNew32(const char* fmt, uint32_t* st, uint64_t* mystack); +size_t myStackAlignScanfW32(const char* fmt, uint32_t* st, uint64_t* mystack, size_t nb_elem); +void myStackAlignScanfW32_final(const char* fmt, uint32_t* st, uint64_t* mystack, size_t nb_elem, int n); +void myStackAlignW32(const char* fmt, uint32_t* st, uint64_t* mystack); + +void UnalignStat64_32(const void* source, void* dest); + +void UnalignStatFS_32(const void* source, void* dest); +void UnalignStatFS64_32(const void* source, void* dest); +#if 0 +void UnalignOggVorbis(void* dest, void* source); // Arm -> x86 +void AlignOggVorbis(void* dest, void* source); // x86 -> Arm + +void UnalignVorbisDspState(void* dest, void* source); // Arm -> x86 +void AlignVorbisDspState(void* dest, void* source); // x86 -> Arm + +void UnalignVorbisBlock(void* dest, void* source); // Arm -> x86 +void AlignVorbisBlock(void* dest, void* source); // x86 -> Arm +#endif +void UnalignEpollEvent32(void* dest, void* source, int nbr); // Arm -> x86 +void AlignEpollEvent32(void* dest, void* source, int nbr); // x86 -> Arm +#if 0 +void UnalignSmpegInfo(void* dest, void* source); // Arm -> x86 +void AlignSmpegInfo(void* dest, void* source); // x86 -> Arm +#endif +// stat64 is packed on i386, not on arm (and possibly other structures) +#undef st_atime +#undef st_atime_nsec +#undef st_mtime +#undef st_mtime_nsec +#undef st_ctime +#undef st_ctime_nsec +struct i386_stat64 { + uint64_t st_dev; + uint8_t __pad0[4]; + uint32_t __st_ino; + uint32_t st_mode; + uint32_t st_nlink; + uint32_t st_uid; + uint32_t st_gid; + uint64_t st_rdev; + uint8_t __pad3[4]; + int64_t st_size; + uint32_t st_blksize; + uint64_t st_blocks; + uint32_t st_atime; + uint32_t st_atime_nsec; + uint32_t st_mtime; + uint32_t st_mtime_nsec; + uint32_t st_ctime; + uint32_t st_ctime_nsec; + uint64_t st_ino; +} __attribute__((packed, aligned(4))); // important for this one + +struct i386_fsid { + int val[2]; +}; + +struct i386_statfs { + uint32_t f_type; + uint32_t f_bsize; + uint32_t f_blocks; + uint32_t f_bfree; + uint32_t f_bavail; + uint32_t f_files; + uint32_t f_ffree; + struct i386_fsid f_fsid; + uint32_t f_namelen; + uint32_t f_frsize; + uint32_t f_flags; + uint32_t f_spare[4]; +}; + +struct i386_statfs64 { + uint32_t f_type; + uint32_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + struct i386_fsid f_fsid; + uint32_t f_namelen; + uint32_t f_frsize; + uint32_t f_flags; + uint32_t f_spare[4]; +}; + +struct i386_statvfs64 { + ulong_t f_bsize; + ulong_t f_frsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + uint64_t f_favail; + ulong_t f_fsid; + int __f_unused; + ulong_t f_flag; + ulong_t f_namemax; + unsigned int f_type; + int __f_spare[5]; +}; + +struct i386_statvfs { + ulong_t f_bsize; + ulong_t f_frsize; + uint32_t f_blocks; + uint32_t f_bfree; + uint32_t f_bavail; + uint32_t f_files; + uint32_t f_ffree; + uint32_t f_favail; + ulong_t f_fsid; + int __f_unused; + ulong_t f_flag; + ulong_t f_namemax; + unsigned int f_type; + int __f_spare[5]; +}; + +void UnalignStatVFS_32(const void* source, void* dest); +void UnalignStatVFS64_32(const void* source, void* dest); + +struct i386_dirent +{ + ulong_t d_ino; + ulong_t d_off; + uint16_t d_reclen; + uint8_t d_type; + char d_name[256]; +}; +void UnalignDirent_32(const void* source, void* dest); + +#if 0 +typedef struct { + unsigned char *data; + int storage; + int fill; + int returned; + + int unsynced; + int headerbytes; + int bodybytes; +} ogg_sync_state; + +typedef struct { + unsigned char *body_data; /* bytes from packet bodies */ + long body_storage; /* storage elements allocated */ + long body_fill; /* elements stored; fill mark */ + long body_returned; /* elements of fill returned */ + + + int *lacing_vals; /* The values that will go to the segment table */ + int64_t *granule_vals; /* granulepos values for headers. Not compact + this way, but it is simple coupled to the + lacing fifo */ + long lacing_storage; + long lacing_fill; + long lacing_packet; + long lacing_returned; + + unsigned char header[282]; /* working space for header encode */ + int header_fill; + + int e_o_s; /* set when we have buffered the last packet in the + logical bitstream */ + int b_o_s; /* set after we've written the initial page + of a logical bitstream */ + long serialno; + long pageno; + int64_t packetno; /* sequence number for decode; the framing + knows where there's a hole in the data, + but we need coupling so that the codec + (which is in a separate abstraction + layer) also knows about the gap */ + int64_t granulepos; + +} ogg_stream_state; + +typedef struct vorbis_dsp_state { + int analysisp; + ptr_t vi; //vorbis_info + + ptr_t pcm; //float** + ptr_t pcmret; // float** + int pcm_storage; + int pcm_current; + int pcm_returned; + + int preextrapolate; + int eofflag; + + long lW; + long W; + long nW; + long centerW; + + int64_t granulepos; + int64_t sequence; + + int64_t glue_bits; + int64_t time_bits; + int64_t floor_bits; + int64_t res_bits; + + void *backend_state; +} vorbis_dsp_state; + +typedef struct { + long endbyte; + int endbit; + + unsigned char *buffer; + unsigned char *ptr; + long storage; +} oggpack_buffer; + +typedef struct vorbis_block { + /* necessary stream state for linking to the framing abstraction */ + float **pcm; /* this is a pointer into local storage */ + oggpack_buffer opb; + + long lW; + long W; + long nW; + int pcmend; + int mode; + + int eofflag; + int64_t granulepos; + int64_t sequence; + vorbis_dsp_state *vd; /* For read-only access of configuration */ + + /* local storage to avoid remallocing; it's up to the mapping to + structure it */ + void *localstore; + long localtop; + long localalloc; + long totaluse; + struct alloc_chain *reap; + + /* bitmetrics for the frame */ + long glue_bits; + long time_bits; + long floor_bits; + long res_bits; + + void *internal; + +} vorbis_block; + +typedef struct { + size_t (*read_func) (void *ptr, size_t size, size_t nmemb, void *datasource); + int (*seek_func) (void *datasource, int64_t offset, int whence); + int (*close_func) (void *datasource); + long (*tell_func) (void *datasource); +} ov_callbacks; + +typedef struct OggVorbis { + void *datasource; /* Pointer to a FILE *, etc. */ + int seekable; + int64_t offset; + int64_t end; + ogg_sync_state oy; + + /* If the FILE handle isn't seekable (eg, a pipe), only the current + stream appears */ + int links; + int64_t *offsets; + int64_t *dataoffsets; + long *serialnos; + int64_t *pcmlengths; /* overloaded to maintain binary + compatibility; x2 size, stores both + beginning and end values */ + void *vi; //vorbis_info + void *vc; //vorbis_comment + + /* Decoding working state local storage */ + int64_t pcm_offset; + int ready_state; + long current_serialno; + int current_link; + + double bittrack; + double samptrack; + + ogg_stream_state os; /* take physical pages, weld into a logical + stream of packets */ + vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */ + vorbis_block vb; /* local working space for packet->PCM decode */ + + ov_callbacks callbacks; + +} OggVorbis; + +typedef struct my_SMPEG_Info_s { + int has_audio; + int has_video; + int width; + int height; + int current_frame; + double current_fps; + char audio_string[80]; + int audio_current_frame; + uint32_t current_offset; + uint32_t total_size; + double current_time; + double total_time; +} my_SMPEG_Info_t; + +typedef struct __attribute__((packed)) x86_ftsent_s { + struct x86_ftsent_s *fts_cycle; + struct x86_ftsent_s *fts_parent; + struct x86_ftsent_s *fts_link; + long fts_number; + void *fts_pointer; + char *fts_accpath; + char *fts_path; + int fts_errno; + int fts_symfd; + uint16_t fts_pathlen; + uint16_t fts_namelen; + uintptr_t fts_ino; + uint64_t fts_dev; + uint32_t fts_nlink; + int16_t fts_level; + uint16_t fts_info; + uint16_t fts_flags; + uint16_t fts_instr; + struct stat *fts_statp; + char fts_name[1]; +} x86_ftsent_t; + +void UnalignFTSENT(void* dest, void* source); // Arm -> x86 +void AlignFTSENT(void* dest, void* source); // x86 -> Arm +#endif +typedef struct my_flock64_s { + uint16_t l_type; + uint16_t l_whence; + int64_t l_start; + int64_t l_len; + int l_pid; +} my_flock64_t; + +typedef struct __attribute__((packed, aligned(4))) x86_flock64_s { // alignment needed here to avoid 8bytes align before the start + uint16_t l_type; + uint16_t l_whence; + int64_t l_start; + int64_t l_len; + int l_pid; +} x86_flock64_t; + +void UnalignFlock64_32(void* dest, void* source); // Arm -> x86 +void AlignFlock64_32(void* dest, void* source); // x86 -> Arm + +typedef struct __attribute__((packed, aligned(4))) i386_flock_s +{ + short int l_type; + short int l_whence; + long_t l_start; + long_t l_len; + int l_pid; +} i386_flock_t; + +void UnalignFlock_32(void* dest, void* source); // Arm -> x86 +void AlignFlock_32(void* dest, void* source); // x86 -> Arm + +#if 0 +// defined in wrapperlibc.c +int of_convert(int); // x86->arm +int of_unconvert(int); // arm->x86 + +typedef struct my_GValue_s +{ + int g_type; + union { + int v_int; + int64_t v_int64; + uint64_t v_uint64; + float v_float; + double v_double; + void* v_pointer; + } data[2]; +} my_GValue_t; + +void alignNGValue(my_GValue_t* v, void* value, int n); +void unalignNGValue(void* value, my_GValue_t* v, int n); +#endif + +int of_convert32(int a); +int of_unconvert32(int a); + +struct i386_addrinfo +{ + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + uint32_t ai_addrlen; + ptr_t ai_addr; // struct sockaddr * + ptr_t ai_canonname; // char * + ptr_t ai_next; // struct addrinfo * +}; + +struct i386_hostent { + ptr_t h_name; // char * + ptr_t h_aliases; // char ** + int h_addrtype; + int h_length; + ptr_t h_addr_list;// char ** +}; + +struct i386_iovec +{ + ptr_t iov_base; // void * + ulong_t iov_len; +}; + +struct i386_msghdr +{ + ptr_t msg_name; // void * + uint32_t msg_namelen; + ptr_t msg_iov; // struct i386_iovec * + uint32_t msg_iovlen; + ptr_t msg_control; // void * + ulong_t msg_controllen; + int msg_flags; +} __attribute__((packed, aligned(4))); + +struct i386_cmsghdr +{ + ulong_t cmsg_len; + int cmsg_level; + int cmsg_type; +} __attribute__((packed, aligned(4))); + +void AlignIOV_32(void* dest, void* source); // x86 -> Native +void UnalignIOV_32(void* dest, void* source); // Native -> x86 + +void AlignMsgHdr_32(void* dest, void* dest_iov, void* dest_cmsg, void* source, int convert_control); // x86 -> Native +void UnalignMsgHdr_32(void* dest, void* source); // back to Native -> x86 + +struct i386_passwd +{ + ptr_t pw_name; // char* + ptr_t pw_passwd; // char* + __uid_t pw_uid; + __gid_t pw_gid; + ptr_t pw_gecos; // char* + ptr_t pw_dir; // char* + ptr_t pw_shell; // char* +} __attribute__((packed, aligned(4))); + +struct i386_group +{ + ptr_t gr_name; // char * + ptr_t gr_passwd; // char * + __gid_t gr_gid; + ptr_t gr_mem; // char ** +} __attribute__((packed, aligned(4))); + +typedef struct my_regex_s +{ + void* buffer; //struct re_dfa_t + size_t allocated; + size_t used; + unsigned long int syntax; + char* fastmap; + unsigned char* translate; + size_t re_nsub; + unsigned flags; + /* + unsigned can_be_null : 1; + unsigned regs_allocated : 2; + unsigned fastmap_accurate : 1; + unsigned no_sub : 1; + unsigned not_bol : 1; + unsigned not_eol : 1; + unsigned newline_anchor : 1; + */ +} my_regex_t; + +typedef struct my_regex_32_s +{ + ptr_t buffer; //struct re_dfa_t + ulong_t allocated; + ulong_t used; + ulong_t syntax; + ptr_t fastmap; //char* + ptr_t translate; //unsigned char* + ulong_t re_nsub; + unsigned flags; + /* + unsigned can_be_null : 1; + unsigned regs_allocated : 2; + unsigned fastmap_accurate : 1; + unsigned no_sub : 1; + unsigned not_bol : 1; + unsigned not_eol : 1; + unsigned newline_anchor : 1; + */ +} my_regex_32_t; + +void convert_regext_to_32(void* d, void* s); +void convert_regext_to_64(void* d, void* s); + + +#endif//__MY_ALIGN32__H_ \ No newline at end of file diff --git a/src/include/rbtree.h b/src/include/rbtree.h index c210d55de50fe9e29bcba8cd4da370084bbb4a6f..e2b684cb3c03e8f2896bfd496fd6c93d6ff7b72f 100644 --- a/src/include/rbtree.h +++ b/src/include/rbtree.h @@ -1,19 +1,17 @@ -#include - #ifndef RBTREE_H #define RBTREE_H -typedef struct rbtree rbtree; +#include -rbtree* init_rbtree(); -void delete_rbtree(rbtree *tree); +typedef struct rbtree rbtree_t; -uint32_t rb_get(rbtree *tree, uintptr_t addr); -int rb_get_end(rbtree* tree, uintptr_t addr, uint32_t* val, uintptr_t* end); -int rb_set(rbtree *tree, uintptr_t start, uintptr_t end, uint32_t data); -int rb_unset(rbtree *tree, uintptr_t start, uintptr_t end); -uintptr_t rb_get_righter(rbtree *tree); +rbtree_t* rbtree_init(const char* name); +void rbtree_delete(rbtree_t* tree); -void print_rbtree(const rbtree *tree); +uint32_t rb_get(rbtree_t* tree, uintptr_t addr); +int rb_get_end(rbtree_t* tree, uintptr_t addr, uint32_t* val, uintptr_t* end); +int rb_set(rbtree_t* tree, uintptr_t start, uintptr_t end, uint32_t data); +int rb_unset(rbtree_t* tree, uintptr_t start, uintptr_t end); +uintptr_t rb_get_righter(rbtree_t* tree); #endif // RBTREE_H diff --git a/src/include/regs.h b/src/include/regs.h index 3cfcdc5a0d947df0918e9a7dd0773c6c64de5be6..5b2a9c410127bac07c977b9e1a7d2d2fae8da431 100644 --- a/src/include/regs.h +++ b/src/include/regs.h @@ -319,6 +319,7 @@ typedef union { #define R_R13 emu->regs[_R13].q[0] #define R_R14 emu->regs[_R14].q[0] #define R_R15 emu->regs[_R15].q[0] +#define R_EIP emu->ip.dword[0] #define R_EAX emu->regs[_AX].dword[0] #define R_EBX emu->regs[_BX].dword[0] #define R_ECX emu->regs[_CX].dword[0] diff --git a/src/include/sdl1align32.h b/src/include/sdl1align32.h new file mode 100644 index 0000000000000000000000000000000000000000..83b0e7bb8cd7c3e838fe348d63a22a241104c69b --- /dev/null +++ b/src/include/sdl1align32.h @@ -0,0 +1,591 @@ +#ifndef __MY_SDL1ALIGN32_H_ +#define __MY_SDL1ALIGN32_H_ +#include +#include "box32.h" + +typedef struct my_SDL_Rect_s +{ + int16_t x; + int16_t y; + uint16_t w; + uint16_t h; +} my_SDL_Rect_t; + +typedef struct my_SDL_Color_s +{ + uint8_t r; + uint8_t g; + uint8_t b; + uint8_t unused; +} my_SDL_Color_t; + +typedef struct my_SDL_Palette_s +{ + int ncolors; + my_SDL_Color_t *colors; +} my_SDL_Palette_t; + +typedef struct my_SDL_PixelFormat_s +{ + my_SDL_Palette_t *palette; + uint8_t BitsPerPixel; + uint8_t BytesPerPixel; + uint8_t Rloss; + uint8_t Gloss; + uint8_t Bloss; + uint8_t Aloss; + uint8_t Rshift; + uint8_t Gshift; + uint8_t Bshift; + uint8_t Ashift; + uint32_t Rmask; + uint32_t Gmask; + uint32_t Bmask; + uint32_t Amask; + uint32_t colorkey; + uint8_t alpha; +} my_SDL_PixelFormat_t; + +typedef struct my_SDL_Surface_s +{ + uint32_t flags; + my_SDL_PixelFormat_t *format; + int w; + int h; + uint16_t pitch; + void *pixels; + int offset; + void* hwdata; //struct private_hwdata + my_SDL_Rect_t clip_rect; + uint32_t unused1; + uint32_t locked; + void *map; + unsigned int format_version; + int refcount; +} my_SDL_Surface_t; + +// x86 version (packed, 32bits pointers and long) + +typedef struct my_SDL_Rect_32_s +{ + int16_t x; + int16_t y; + uint16_t w; + uint16_t h; +} my_SDL_Rect_32_t; + +typedef struct my_SDL_Color_32_s +{ + uint8_t r; + uint8_t g; + uint8_t b; + uint8_t unused; +} my_SDL_Color_32_t; + +typedef struct my_SDL_Palette_32_s +{ + int ncolors; + ptr_t colors; // my_SDL_Color_t* +} my_SDL_Palette_32_t; + +typedef struct my_SDL_PixelFormat_32_s +{ + ptr_t palette; // my_SDL_Palette_t * + uint8_t BitsPerPixel; + uint8_t BytesPerPixel; + uint8_t Rloss; + uint8_t Gloss; + uint8_t Bloss; + uint8_t Aloss; + uint8_t Rshift; + uint8_t Gshift; + uint8_t Bshift; + uint8_t Ashift; + uint32_t Rmask; + uint32_t Gmask; + uint32_t Bmask; + uint32_t Amask; + uint32_t colorkey; + uint8_t alpha; +} my_SDL_PixelFormat_32_t; + +typedef struct my_SDL_Surface_32_s +{ + uint32_t flags; + ptr_t format; // my_SDL_PixelFormat_t * + int w; + int h; + uint16_t pitch; + uint16_t dummy; + ptr_t pixels; // void * + int offset; + ptr_t hwdata; //struct private_hwdata* + my_SDL_Rect_t clip_rect; + uint32_t unused1; + uint32_t locked; + ptr_t map; // void * + unsigned int format_version; + int refcount; +} my_SDL_Surface_32_t; + +void inplace_SDL_Surface_to_64(void* a); +void inplace_SDL_Surface_to_32(void* a); +void inplace_SDL_PixelFormat_to_64(void* a); +void inplace_SDL_PixelFormat_to_64_nopalette(void* a); +void inplace_SDL_PixelFormat_to_32(void* a); +void inplace_SDL_Palette_to_64(void* a); +void inplace_SDL_Palette_to_32(void* a); + +typedef struct my_SDL_keysym_s +{ + uint8_t scancode; + int sym; + int mod; + uint16_t unicode; +} my_SDL_keysym_t; + +typedef struct my_SDL_keysym_32_s +{ + uint8_t scancode; + int sym; + int mod; + uint16_t unicode; +} my_SDL_keysym_32_t; + + +typedef enum my_SDL_EventType_s +{ + SDL_NOEVENT, + SDL_ACTIVEEVENT, + SDL_KEYDOWN, + SDL_KEYUP, + SDL_MOUSEMOTION, + SDL_MOUSEBUTTONDOWN, + SDL_MOUSEBUTTONUP, + SDL_JOYAXISMOTION, + SDL_JOYBALLMOTION, + SDL_JOYHATMOTION, + SDL_JOYBUTTONDOWN, + SDL_JOYBUTTONUP, + SDL_QUIT, + SDL_SYSWMEVENT, + SDL_EVENT_RESERVEDA, + SDL_EVENT_RESERVEDB, + SDL_VIDEORESIZE, + SDL_VIDEOEXPOSE, + SDL_EVENT_RESERVED2, + SDL_EVENT_RESERVED3, + SDL_EVENT_RESERVED4, + SDL_EVENT_RESERVED5, + SDL_EVENT_RESERVED6, + SDL_EVENT_RESERVED7, + SDL_USEREVENT = 24, + SDL_NUMEVENTS = 32 +} my_SDL_EventType_t; + +typedef struct my_SDL_ActiveEvent_s +{ + uint8_t type; + uint8_t gain; + uint8_t state; +} my_SDL_ActiveEvent_t; + +typedef struct my_SDL_KeyboardEvent_s +{ + uint8_t type; + uint8_t which; + uint8_t state; + my_SDL_keysym_t keysym; +} my_SDL_KeyboardEvent_t; + +typedef struct my_SDL_MouseMotionEvent_s +{ + uint8_t type; + uint8_t which; + uint8_t state; + uint16_t x; + uint16_t y; + int16_t xrel; + int16_t yrel; +} my_SDL_MouseMotionEvent_t; + +typedef struct my_SDL_MouseButtonEvent_s +{ + uint8_t type; + uint8_t which; + uint8_t button; + uint8_t state; + uint16_t x; + uint16_t y; +} my_SDL_MouseButtonEvent_t; + +typedef struct my_SDL_JoyAxisEvent_s +{ + uint8_t type; + uint8_t which; + uint8_t axis; + int16_t value; +} my_SDL_JoyAxisEvent_t; + +typedef struct my_SDL_JoyBallEvent_s +{ + uint8_t type; + uint8_t which; + uint8_t ball; + int16_t xrel; + int16_t yrel; +} my_SDL_JoyBallEvent_t; + +typedef struct my_SDL_JoyHatEvent_s +{ + uint8_t type; + uint8_t which; + uint8_t hat; + uint8_t value; +} my_SDL_JoyHatEvent_t; + +typedef struct my_SDL_JoyButtonEvent_s +{ + uint8_t type; + uint8_t which; + uint8_t button; + uint8_t state; +} my_SDL_JoyButtonEvent_t; + +typedef struct my_SDL_ResizeEvent_s +{ + uint8_t type; + int w; + int h; +} my_SDL_ResizeEvent_t; + +typedef struct my_SDL_ExposeEvent_s +{ + uint8_t type; +} my_SDL_ExposeEvent_t; + +typedef struct my_SDL_QuitEvent_s +{ + uint8_t type; +} my_SDL_QuitEvent_t; + +typedef struct my_SDL_UserEvent_s +{ + uint8_t type; + int code; + void *data1; + void *data2; +} my_SDL_UserEvent_t; + +typedef struct my_SDL_version_s { + uint8_t major; + uint8_t minor; + uint8_t patch; +} my_SDL_version_t; + +typedef struct my_SDL_SysWMinfo_s { + my_SDL_version_t version; + int subsystem; + union { + struct { + void* display; + void* window; + void (*lock_func)(void); + void (*unlock_func)(void); + void* fswindow; + void* wmwindow; + void* gfxdisplay; + } x11; + } info; +} my_SDL_SysWMinfo_t; + +typedef union my_XEvent_s { + int Type; + long pad[24]; +} my_XEvent_t; + +typedef struct my_SDL_SysWMmsg_s +{ + my_SDL_version_t version; + int subsystem; + union { + my_XEvent_t xevent; + } event; +} my_SDL_SysWMmsg_t; + + +typedef struct my_SDL_SysWMEvent_s +{ + uint8_t type; + my_SDL_SysWMmsg_t *msg; +} my_SDL_SysWMEvent_t; + +typedef union my_SDL_Event_s +{ + uint8_t type; + my_SDL_ActiveEvent_t active; + my_SDL_KeyboardEvent_t key; + my_SDL_MouseMotionEvent_t motion; + my_SDL_MouseButtonEvent_t button; + my_SDL_JoyAxisEvent_t jaxis; + my_SDL_JoyBallEvent_t jball; + my_SDL_JoyHatEvent_t jhat; + my_SDL_JoyButtonEvent_t jbutton; + my_SDL_ResizeEvent_t resize; + my_SDL_ExposeEvent_t expose; + my_SDL_QuitEvent_t quit; + my_SDL_UserEvent_t user; + my_SDL_SysWMEvent_t syswm; +} my_SDL_Event_t; + +typedef struct my_SDL_ActiveEvent_32_s +{ + uint8_t type; + uint8_t gain; + uint8_t state; +} my_SDL_ActiveEvent_32_t; + +typedef struct my_SDL_KeyboardEvent_32_s +{ + uint8_t type; + uint8_t which; + uint8_t state; + my_SDL_keysym_32_t keysym; +} my_SDL_KeyboardEvent_32_t; + +typedef struct my_SDL_MouseMotionEvent_32_s +{ + uint8_t type; + uint8_t which; + uint8_t state; + uint16_t x; + uint16_t y; + int16_t xrel; + int16_t yrel; +} my_SDL_MouseMotionEvent_32_t; + +typedef struct my_SDL_MouseButtonEvent_32_s +{ + uint8_t type; + uint8_t which; + uint8_t button; + uint8_t state; + uint16_t x; + uint16_t y; +} my_SDL_MouseButtonEvent_32_t; + +typedef struct my_SDL_JoyAxisEvent_32_s +{ + uint8_t type; + uint8_t which; + uint8_t axis; + int16_t value; +} my_SDL_JoyAxisEvent_32_t; + +typedef struct my_SDL_JoyBallEvent_32_s +{ + uint8_t type; + uint8_t which; + uint8_t ball; + int16_t xrel; + int16_t yrel; +} my_SDL_JoyBallEvent_32_t; + +typedef struct my_SDL_JoyHatEvent_32_s +{ + uint8_t type; + uint8_t which; + uint8_t hat; + uint8_t value; +} my_SDL_JoyHatEvent_32_t; + +typedef struct my_SDL_JoyButtonEvent_32_s +{ + uint8_t type; + uint8_t which; + uint8_t button; + uint8_t state; +} my_SDL_JoyButtonEvent_32_t; + +typedef struct my_SDL_ResizeEvent_32_s +{ + uint8_t type; + int w; + int h; +} my_SDL_ResizeEvent_32_t; + +typedef struct my_SDL_ExposeEvent_32_s +{ + uint8_t type; +} my_SDL_ExposeEvent_32_t; + +typedef struct my_SDL_QuitEvent_32_s +{ + uint8_t type; +} my_SDL_QuitEvent_32_t; + +typedef struct my_SDL_UserEvent_32_s +{ + uint8_t type; + int code; + ptr_t data1; //void* + ptr_t data2; //void* +} my_SDL_UserEvent_32_t; + +typedef struct my_SDL_version_32_s { + uint8_t major; + uint8_t minor; + uint8_t patch; +} my_SDL_version_32_t; + +typedef struct my_SDL_SysWMinfo_32_s { + my_SDL_version_32_t version; + int subsystem; + union { + struct { + ptr_t display; //void* + ptr_t window; //void* + ptr_t lock_func;//void (*lock_func)(void); + ptr_t unlock_func;//void (*unlock_func)(void); + ptr_t fswindow; //void* + ptr_t wmwindow; //void* + ptr_t gfxdisplay; //void* + } x11; + } info; +} my_SDL_SysWMinfo_32_t; + +typedef union my_XEvent_32_s { + int Type; + long_t pad[24]; +} my_XEvent_32_t; + +typedef struct my_SDL_SysWMmsg_32_s +{ + my_SDL_version_32_t version; + int subsystem; + union { + my_XEvent_32_t xevent; + } event; +} my_SDL_SysWMmsg_32_t; + + +typedef struct my_SDL_SysWMEvent_32_s +{ + uint8_t type; + ptr_t msg; //my_SDL_SysWMmsg_t* +} my_SDL_SysWMEvent_32_t; + +typedef union my_SDL_Event_32_s +{ + uint8_t type; + my_SDL_ActiveEvent_32_t active; + my_SDL_KeyboardEvent_32_t key; + my_SDL_MouseMotionEvent_32_t motion; + my_SDL_MouseButtonEvent_32_t button; + my_SDL_JoyAxisEvent_32_t jaxis; + my_SDL_JoyBallEvent_32_t jball; + my_SDL_JoyHatEvent_32_t jhat; + my_SDL_JoyButtonEvent_32_t jbutton; + my_SDL_ResizeEvent_32_t resize; + my_SDL_ExposeEvent_32_t expose; + my_SDL_QuitEvent_32_t quit; + my_SDL_UserEvent_32_t user; + my_SDL_SysWMEvent_32_t syswm; +} my_SDL_Event_32_t; + + +void convert_SDL_Event_to_32(void* dst, const void* src); +void convert_SDL_Event_to_64(void* dst, const void* src); + +// simplified RWops +typedef struct my_SDL_RWops_s { + void* seek; //sdl1_seek + void* read; //sdl1_read + void* write; //sdl1_write + void* close; //sdl1_close + uint32_t type; + void* hidden[3]; // not converting hidden, just moving it +} my_SDL_RWops_t; + +typedef struct my_SDL_RWops_32_s { + ptr_t seek; //sdl1_seek + ptr_t read; //sdl1_read + ptr_t write; //sdl1_write + ptr_t close; //sdl1_close + uint32_t type; + void* hidden[3]; // not converting hidden, just moving it +} my_SDL_RWops_32_t; + +void inplace_SDL_RWops_to_64(void* a); +void inplace_SDL_RWops_to_32(void* a); + +typedef struct my_SDL_VideoInfo_s { + uint32_t hw_available:1; + uint32_t wm_available:1; + uint32_t UnusedBits1:6; + uint32_t UnusedBits2:1; + uint32_t blit_hw:1; + uint32_t blit_hw_CC:1; + uint32_t blit_hw_A:1; + uint32_t blit_sw:1; + uint32_t blit_sw_CC:1; + uint32_t blit_sw_A:1; + uint32_t blit_fill:1; + uint32_t UnusedBits3:16; + uint32_t video_mem; + my_SDL_PixelFormat_t *vfmt; + int current_w; + int current_h; +} my_SDL_VideoInfo_t; + +typedef struct my_SDL_VideoInfo_32_s { + uint32_t hw_available:1; + uint32_t wm_available:1; + uint32_t UnusedBits1:6; + uint32_t UnusedBits2:1; + uint32_t blit_hw:1; + uint32_t blit_hw_CC:1; + uint32_t blit_hw_A:1; + uint32_t blit_sw:1; + uint32_t blit_sw_CC:1; + uint32_t blit_sw_A:1; + uint32_t blit_fill:1; + uint32_t UnusedBits3:16; + uint32_t video_mem; + ptr_t vfmt; // my_SDL_PixelFormat_t * + int current_w; + int current_h; +} my_SDL_VideoInfo_32_t; + +typedef struct my_SDL_AudioCVT_s { + int needed; + uint16_t src_format; + uint16_t dest_format; + double rate_incr; + uint8_t *buf; + int len; + int len_cvt; + int len_mult; + double len_ratio; + void (*filters[10])(struct my_SDL_AudioCVT_s *cvt, uint16_t format); + int filter_index; +} my_SDL_AudioCVT_t; + +typedef struct my_SDL_AudioCVT_32_s { + int needed; + uint16_t src_format; + uint16_t dest_format; + double rate_incr; + ptr_t buf; //uint8_t * + int len; + int len_cvt; + int len_mult; + double len_ratio; + ptr_t filters[10]; //void (*filters[10])(struct my_SDL_AudioCVT_s *cvt, uint16_t format); + int filter_index; +} my_SDL_AudioCVT_32_t; + +void convert_AudioCVT_to_32(void* d, void* s); +void convert_AudioCVT_to_64(void* d, void* s); + +#endif//__MY_SDL1ALIGN32_H_ \ No newline at end of file diff --git a/src/include/sdl2align32.h b/src/include/sdl2align32.h new file mode 100644 index 0000000000000000000000000000000000000000..91f54ea2c7859b9615f12518a828fd6e6554bc0c --- /dev/null +++ b/src/include/sdl2align32.h @@ -0,0 +1,910 @@ +#ifndef __MY_SDL2ALIGN32_H_ +#define __MY_SDL2ALIGN32_H_ +#include +#include "box32.h" + +typedef struct my_SDL2_DisplayMode_s { + uint32_t format; + int w; + int h; + int refresh_rate; + void* driverdata; +} my_SDL2_DisplayMode_t; + +typedef struct my_SDL2_DisplayMode_32_s { + uint32_t format; + int w; + int h; + int refresh_rate; + ptr_t driverdata; +} my_SDL2_DisplayMode_32_t; + +typedef struct SDL2_CommonEvent_s { + uint32_t type; + uint32_t timestamp; +} my_SDL2_CommonEvent_t; + +typedef struct SDL2_DisplayEvent_s { + uint32_t type; + uint32_t timestamp; + uint32_t display; + uint8_t event; + uint8_t padding1; + uint8_t padding2; + uint8_t padding3; + int32_t data1; +} my_SDL2_DisplayEvent_t; + +typedef struct SDL2_WindowEvent_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + uint8_t event; + uint8_t padding1; + uint8_t padding2; + uint8_t padding3; + int32_t data1; + int32_t data2; +} my_SDL2_WindowEvent_t; + +typedef struct SDL2_Keysym_s { + int32_t scancode; + int32_t sym; + uint16_t mod; + uint32_t unused; +} my_SDL2_Keysym_t; + +typedef struct SDL2_KeyboardEvent_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + uint8_t state; + uint8_t repeat; + uint8_t padding2; + uint8_t padding3; + my_SDL2_Keysym_t keysym; +} my_SDL2_KeyboardEvent_t; + +typedef struct SDL2_TextEditingEvent_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + char text[32]; + int32_t start; + int32_t length; +} my_SDL2_TextEditingEvent_t; + + +typedef struct SDL2_TextEditingExtEvent_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + char* text; + int32_t start; + int32_t length; +} my_SDL2_TextEditingExtEvent_t; + +typedef struct SDL2_TextInputEvent_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + char text[32]; +} my_SDL2_TextInputEvent_t; + +typedef struct SDL2_MouseMotionEvent_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + uint32_t which; + uint32_t state; + int32_t x; + int32_t y; + int32_t xrel; + int32_t yrel; +} my_SDL2_MouseMotionEvent_t; + +typedef struct SDL2_MouseButtonEvent_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + uint32_t which; + uint8_t button; + uint8_t state; + uint8_t clicks; + uint8_t padding1; + int32_t x; + int32_t y; +} my_SDL2_MouseButtonEvent_t; + +typedef struct SDL2_MouseWheelEvent_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + uint32_t which; + int32_t x; + int32_t y; + uint32_t direction; + float preciseX; + float preciseY; + int32_t mouseX; + int32_t mouseY; +} my_SDL2_MouseWheelEvent_t; + +typedef struct SDL2_JoyAxisEvent_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + uint8_t axis; + uint8_t padding1; + uint8_t padding2; + uint8_t padding3; + int16_t value; + uint16_t padding4; +} my_SDL2_JoyAxisEvent_t; + + +typedef struct SDL2_JoyBallEvent_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + uint8_t ball; + uint8_t padding1; + uint8_t padding2; + uint8_t padding3; + int16_t xrel; + int16_t yrel; +} my_SDL2_JoyBallEvent_t; + +typedef struct SDL2_JoyHatEvent_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + uint8_t hat; + uint8_t value; + uint8_t padding1; + uint8_t padding2; +} my_SDL2_JoyHatEvent_t; + +typedef struct SDL2_JoyButtonEvent_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + uint8_t button; + uint8_t state; + uint8_t padding1; + uint8_t padding2; +} my_SDL2_JoyButtonEvent_t; + +typedef struct SDL2_JoyDeviceEvent_s { + uint32_t type; + uint32_t timestamp; + int32_t which; +} my_SDL2_JoyDeviceEvent_t; + + +typedef struct SDL2_JoyBatteryEvent_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + int32_t level; +} my_SDL2_JoyBatteryEvent_t; + +typedef struct SDL2_ControllerAxisEvent_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + uint8_t axis; + uint8_t padding1; + uint8_t padding2; + uint8_t padding3; + int16_t value; + uint16_t padding4; +} my_SDL2_ControllerAxisEvent_t; + + +typedef struct SDL2_ControllerButtonEvent_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + uint8_t button; + uint8_t state; + uint8_t padding1; + uint8_t padding2; +} my_SDL2_ControllerButtonEvent_t; + + +typedef struct SDL2_ControllerDeviceEvent_s { + uint32_t type; + uint32_t timestamp; + int32_t which; +} my_SDL2_ControllerDeviceEvent_t; + +typedef struct SDL2_ControllerTouchpadEvent_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + int32_t touchpad; + int32_t finger; + float x; + float y; + float pressure; +} my_SDL2_ControllerTouchpadEvent_t; + +typedef struct SDL2_ControllerSensorEvent_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + int32_t sensor; + float data[3]; + uint64_t timestamp_us; +} my_SDL2_ControllerSensorEvent_t; + +typedef struct SDL2_AudioDeviceEvent_s { + uint32_t type; + uint32_t timestamp; + uint32_t which; + uint8_t iscapture; + uint8_t padding1; + uint8_t padding2; + uint8_t padding3; +} my_SDL2_AudioDeviceEvent_t; + +typedef struct SDL2_TouchFingerEvent_s { + uint32_t type; + uint32_t timestamp; + int64_t touchId; + int64_t fingerId; + float x; + float y; + float dx; + float dy; + float pressure; + uint32_t windowID; +} my_SDL2_TouchFingerEvent_t; + +typedef struct SDL2_MultiGestureEvent_s { + uint32_t type; + uint32_t timestamp; + int64_t touchId; + float dTheta; + float dDist; + float x; + float y; + uint16_t numFingers; + uint16_t padding; +} my_SDL2_MultiGestureEvent_t; + + +typedef struct SDL2_DollarGestureEvent_s { + uint32_t type; + uint32_t timestamp; + int64_t touchId; + int64_t gestureId; + uint32_t numFingers; + float error; + float x; + float y; +} my_SDL2_DollarGestureEvent_t; + +typedef struct SDL2_DropEvent_s { + uint32_t type; + uint32_t timestamp; + char* file; + uint32_t windowID; +} my_SDL2_DropEvent_t; + +typedef struct SDL2_SensorEvent_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + float data[6]; + uint64_t timestamp_us; +} my_SDL2_SensorEvent_t; + + +typedef struct SDL2_QuitEvent_s { + uint32_t type; + uint32_t timestamp; +} my_SDL2_QuitEvent_t; + + +typedef struct SDL2_UserEvent_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + int32_t code; + void* data1; + void* data2; +} my_SDL2_UserEvent_t; + +typedef struct SDL2_SysWMEvent_s { + uint32_t type; + uint32_t timestamp; + void* msg; +} my_SDL2_SysWMEvent_t; + + +typedef union my_SDL2_Event_s { + uint32_t type; + my_SDL2_CommonEvent_t common; + my_SDL2_DisplayEvent_t display; + my_SDL2_WindowEvent_t window; + my_SDL2_KeyboardEvent_t key; + my_SDL2_TextEditingEvent_t edit; + my_SDL2_TextEditingExtEvent_t editExt; + my_SDL2_TextInputEvent_t text; + my_SDL2_MouseMotionEvent_t motion; + my_SDL2_MouseButtonEvent_t button; + my_SDL2_MouseWheelEvent_t wheel; + my_SDL2_JoyAxisEvent_t jaxis; + my_SDL2_JoyBallEvent_t jball; + my_SDL2_JoyHatEvent_t jhat; + my_SDL2_JoyButtonEvent_t jbutton; + my_SDL2_JoyDeviceEvent_t jdevice; + my_SDL2_JoyBatteryEvent_t jbattery; + my_SDL2_ControllerAxisEvent_t caxis; + my_SDL2_ControllerButtonEvent_t cbutton; + my_SDL2_ControllerDeviceEvent_t cdevice; + my_SDL2_ControllerTouchpadEvent_t ctouchpad; + my_SDL2_ControllerSensorEvent_t csensor; + my_SDL2_AudioDeviceEvent_t adevice; + my_SDL2_SensorEvent_t sensor; + my_SDL2_QuitEvent_t quit; + my_SDL2_UserEvent_t user; + my_SDL2_SysWMEvent_t syswm; + my_SDL2_TouchFingerEvent_t tfinger; + my_SDL2_MultiGestureEvent_t mgesture; + my_SDL2_DollarGestureEvent_t dgesture; + my_SDL2_DropEvent_t drop; +} my_SDL2_Event_t; + +typedef struct SDL2_CommonEvent_32_s { + uint32_t type; + uint32_t timestamp; +} my_SDL2_CommonEvent_32_t; + +typedef struct SDL2_DisplayEvent_32_s { + uint32_t type; + uint32_t timestamp; + uint32_t display; + uint8_t event; + uint8_t padding1; + uint8_t padding2; + uint8_t padding3; + int32_t data1; +} my_SDL2_DisplayEvent_32_t; + +typedef struct SDL2_WindowEvent_32_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + uint8_t event; + uint8_t padding1; + uint8_t padding2; + uint8_t padding3; + int32_t data1; + int32_t data2; +} my_SDL2_WindowEvent_32_t; + +typedef struct SDL2_Keysym_32_s { + int32_t scancode; + int32_t sym; + uint16_t mod; + uint32_t unused; +} my_SDL2_Keysym_32_t; + +typedef struct SDL2_KeyboardEvent_32_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + uint8_t state; + uint8_t repeat; + uint8_t padding2; + uint8_t padding3; + my_SDL2_Keysym_32_t keysym; +} my_SDL2_KeyboardEvent_32_t; + +typedef struct SDL2_TextEditingEvent_32_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + char text[32]; + int32_t start; + int32_t length; +} my_SDL2_TextEditingEvent_32_t; + + +typedef struct SDL2_TextEditingExtEvent_32_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + ptr_t text; //char* + int32_t start; + int32_t length; +} my_SDL2_TextEditingExtEvent_32_t; + +typedef struct SDL2_TextInputEvent_32_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + char text[32]; +} my_SDL2_TextInputEvent_32_t; + +typedef struct SDL2_MouseMotionEvent_32_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + uint32_t which; + uint32_t state; + int32_t x; + int32_t y; + int32_t xrel; + int32_t yrel; +} my_SDL2_MouseMotionEvent_32_t; + +typedef struct SDL2_MouseButtonEvent_32_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + uint32_t which; + uint8_t button; + uint8_t state; + uint8_t clicks; + uint8_t padding1; + int32_t x; + int32_t y; +} my_SDL2_MouseButtonEvent_32_t; + +typedef struct SDL2_MouseWheelEvent_32_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + uint32_t which; + int32_t x; + int32_t y; + uint32_t direction; + float preciseX; + float preciseY; + int32_t mouseX; + int32_t mouseY; +} my_SDL2_MouseWheelEvent_32_t; + +typedef struct SDL2_JoyAxisEvent_32_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + uint8_t axis; + uint8_t padding1; + uint8_t padding2; + uint8_t padding3; + int16_t value; + uint16_t padding4; +} my_SDL2_JoyAxisEvent_32_t; + + +typedef struct SDL2_JoyBallEvent_32_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + uint8_t ball; + uint8_t padding1; + uint8_t padding2; + uint8_t padding3; + int16_t xrel; + int16_t yrel; +} my_SDL2_JoyBallEvent_32_t; + +typedef struct SDL2_JoyHatEvent_32_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + uint8_t hat; + uint8_t value; + uint8_t padding1; + uint8_t padding2; +} my_SDL2_JoyHatEvent_32_t; + +typedef struct SDL2_JoyButtonEvent_32_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + uint8_t button; + uint8_t state; + uint8_t padding1; + uint8_t padding2; +} my_SDL2_JoyButtonEvent_32_t; + +typedef struct SDL2_JoyDeviceEvent_32_s { + uint32_t type; + uint32_t timestamp; + int32_t which; +} my_SDL2_JoyDeviceEvent_32_t; + + +typedef struct SDL2_JoyBatteryEvent_32_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + int32_t level; +} my_SDL2_JoyBatteryEvent_32_t; + +typedef struct SDL2_ControllerAxisEvent_32_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + uint8_t axis; + uint8_t padding1; + uint8_t padding2; + uint8_t padding3; + int16_t value; + uint16_t padding4; +} my_SDL2_ControllerAxisEvent_32_t; + + +typedef struct SDL2_ControllerButtonEvent_32_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + uint8_t button; + uint8_t state; + uint8_t padding1; + uint8_t padding2; +} my_SDL2_ControllerButtonEvent_32_t; + + +typedef struct SDL2_ControllerDeviceEvent_32_s { + uint32_t type; + uint32_t timestamp; + int32_t which; +} my_SDL2_ControllerDeviceEvent_32_t; + +typedef struct SDL2_ControllerTouchpadEvent_32_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + int32_t touchpad; + int32_t finger; + float x; + float y; + float pressure; +} my_SDL2_ControllerTouchpadEvent_32_t; + +typedef struct SDL2_ControllerSensorEvent_32_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + int32_t sensor; + float data[3]; + uint64_t timestamp_us; +} my_SDL2_ControllerSensorEvent_32_t; + +typedef struct SDL2_AudioDeviceEvent_32_s { + uint32_t type; + uint32_t timestamp; + uint32_t which; + uint8_t iscapture; + uint8_t padding1; + uint8_t padding2; + uint8_t padding3; +} my_SDL2_AudioDeviceEvent_32_t; + +typedef struct SDL2_TouchFingerEvent_32_s { + uint32_t type; + uint32_t timestamp; + int64_t touchId; + int64_t fingerId; + float x; + float y; + float dx; + float dy; + float pressure; + uint32_t windowID; +} my_SDL2_TouchFingerEvent_32_t; + +typedef struct SDL2_MultiGestureEvent_32_s { + uint32_t type; + uint32_t timestamp; + int64_t touchId; + float dTheta; + float dDist; + float x; + float y; + uint16_t numFingers; + uint16_t padding; +} my_SDL2_MultiGestureEvent_32_t; + + +typedef struct SDL2_DollarGestureEvent_32_s { + uint32_t type; + uint32_t timestamp; + int64_t touchId; + int64_t gestureId; + uint32_t numFingers; + float error; + float x; + float y; +} my_SDL2_DollarGestureEvent_32_t; + +typedef struct SDL2_DropEvent_32_s { + uint32_t type; + uint32_t timestamp; + ptr_t file; + uint32_t windowID; +} my_SDL2_DropEvent_32_t; + +typedef struct SDL2_SensorEvent_32_s { + uint32_t type; + uint32_t timestamp; + int32_t which; + float data[6]; + uint64_t timestamp_us; +} my_SDL2_SensorEvent_32_t; + + +typedef struct SDL2_QuitEvent_32_s { + uint32_t type; + uint32_t timestamp; +} my_SDL2_QuitEvent_32_t; + + +typedef struct SDL2_UserEvent_32_s { + uint32_t type; + uint32_t timestamp; + uint32_t windowID; + int32_t code; + ptr_t data1; + ptr_t data2; +} my_SDL2_UserEvent_32_t; + +typedef struct SDL2_SysWMEvent_32_s { + uint32_t type; + uint32_t timestamp; + ptr_t msg; +} my_SDL2_SysWMEvent_32_t; + + +typedef union my_SDL2_Event_32_s { + uint32_t type; + my_SDL2_CommonEvent_32_t common; + my_SDL2_DisplayEvent_32_t display; + my_SDL2_WindowEvent_32_t window; + my_SDL2_KeyboardEvent_32_t key; + my_SDL2_TextEditingEvent_32_t edit; + my_SDL2_TextEditingExtEvent_32_t editExt; + my_SDL2_TextInputEvent_32_t text; + my_SDL2_MouseMotionEvent_32_t motion; + my_SDL2_MouseButtonEvent_32_t button; + my_SDL2_MouseWheelEvent_32_t wheel; + my_SDL2_JoyAxisEvent_32_t jaxis; + my_SDL2_JoyBallEvent_32_t jball; + my_SDL2_JoyHatEvent_32_t jhat; + my_SDL2_JoyButtonEvent_32_t jbutton; + my_SDL2_JoyDeviceEvent_32_t jdevice; + my_SDL2_JoyBatteryEvent_32_t jbattery; + my_SDL2_ControllerAxisEvent_32_t caxis; + my_SDL2_ControllerButtonEvent_32_t cbutton; + my_SDL2_ControllerDeviceEvent_32_t cdevice; + my_SDL2_ControllerTouchpadEvent_32_t ctouchpad; + my_SDL2_ControllerSensorEvent_32_t csensor; + my_SDL2_AudioDeviceEvent_32_t adevice; + my_SDL2_SensorEvent_32_t sensor; + my_SDL2_QuitEvent_32_t quit; + my_SDL2_UserEvent_32_t user; + my_SDL2_SysWMEvent_32_t syswm; + my_SDL2_TouchFingerEvent_32_t tfinger; + my_SDL2_MultiGestureEvent_32_t mgesture; + my_SDL2_DollarGestureEvent_32_t dgesture; + my_SDL2_DropEvent_32_t drop; +} my_SDL2_Event_32_t; + +typedef enum SDL2_EventType { + SDL2_FIRSTEVENT = 0, + SDL2_QUIT = 0x100, + SDL2_APP_TERMINATING, + SDL2_APP_LOWMEMORY, + SDL2_APP_WILLENTERBACKGROUND, + SDL2_APP_DIDENTERBACKGROUND, + SDL2_APP_WILLENTERFOREGROUND, + SDL2_APP_DIDENTERFOREGROUND, + SDL2_LOCALECHANGED, + SDL2_DISPLAYEVENT = 0x150, + SDL2_WINDOWEVENT = 0x200, + SDL2_SYSWMEVENT, + SDL2_KEYDOWN = 0x300, + SDL2_KEYUP, + SDL2_TEXTEDITING, + SDL2_TEXTINPUT, + SDL2_KEYMAPCHANGED, + SDL2_TEXTEDITING_EXT, + SDL2_MOUSEMOTION = 0x400, + SDL2_MOUSEBUTTONDOWN, + SDL2_MOUSEBUTTONUP, + SDL2_MOUSEWHEEL, + SDL2_JOYAXISMOTION = 0x600, + SDL2_JOYBALLMOTION, + SDL2_JOYHATMOTION, + SDL2_JOYBUTTONDOWN, + SDL2_JOYBUTTONUP, + SDL2_JOYDEVICEADDED, + SDL2_JOYDEVICEREMOVED, + SDL2_JOYBATTERYUPDATED, + SDL2_CONTROLLERAXISMOTION = 0x650, + SDL2_CONTROLLERBUTTONDOWN, + SDL2_CONTROLLERBUTTONUP, + SDL2_CONTROLLERDEVICEADDED, + SDL2_CONTROLLERDEVICEREMOVED, + SDL2_CONTROLLERDEVICEREMAPPED, + SDL2_CONTROLLERTOUCHPADDOWN, + SDL2_CONTROLLERTOUCHPADMOTION, + SDL2_CONTROLLERTOUCHPADUP, + SDL2_CONTROLLERSENSORUPDATE, + SDL2_CONTROLLERUPDATECOMPLETE_RESERVED_FOR_SDL3, + SDL2_CONTROLLERSTEAMHANDLEUPDATED, + SDL2_FINGERDOWN = 0x700, + SDL2_FINGERUP, + SDL2_FINGERMOTION, + SDL2_DOLLARGESTURE = 0x800, + SDL2_DOLLARRECORD, + SDL2_MULTIGESTURE, + SDL2_CLIPBOARDUPDATE = 0x900, + SDL2_DROPFILE = 0x1000, + SDL2_DROPTEXT, + SDL2_DROPBEGIN, + SDL2_DROPCOMPLETE, + SDL2_AUDIODEVICEADDED = 0x1100, + SDL2_AUDIODEVICEREMOVED, + SDL2_SENSORUPDATE = 0x1200, + SDL2_RENDER_TARGETS_RESET = 0x2000, + SDL2_RENDER_DEVICE_RESET, + SDL2_POLLSENTINEL = 0x7F00, + SDL2_USEREVENT = 0x8000, + SDL2_LASTEVENT = 0xFFFF +} SDL2_EventType; + +typedef struct my_SDL2_Palette_s { + int ncolors; + void* colors; + uint32_t version; + int refcount; +} my_SDL2_Palette_t; + +typedef struct my_SDL2_PixelFormat_s { + uint32_t format; + my_SDL2_Palette_t* palette; + uint8_t BitsPerPixel; + uint8_t BytesPerPixel; + uint8_t padding[2]; + uint32_t Rmask; + uint32_t Gmask; + uint32_t Bmask; + uint32_t Amask; + uint8_t Rloss; + uint8_t Gloss; + uint8_t Bloss; + uint8_t Aloss; + uint8_t Rshift; + uint8_t Gshift; + uint8_t Bshift; + uint8_t Ashift; + int refcount; + struct my_SDL2_PixelFormat_s* next; +} my_SDL2_PixelFormat_t; + +typedef struct my_SDL2_Rect_s { + int x, y; + int w, h; +} my_SDL2_Rect_t; + +typedef struct my_SDL2_Surface_s { + uint32_t flags; + my_SDL2_PixelFormat_t* format; + int w, h; + int pitch; + void* pixels; + void* userdata; + int locked; + void* list_blitmap; + my_SDL2_Rect_t clip_rect; + void* map; + int refcount; +} my_SDL2_Surface_t; + +typedef struct my_SDL2_Palette_32_s { + int ncolors; + ptr_t colors; + uint32_t version; + int refcount; +} my_SDL2_Palette_32_t; + +typedef struct my_SDL2_PixelFormat_32_s { + uint32_t format; + ptr_t palette; + uint8_t BitsPerPixel; + uint8_t BytesPerPixel; + uint8_t padding[2]; + uint32_t Rmask; + uint32_t Gmask; + uint32_t Bmask; + uint32_t Amask; + uint8_t Rloss; + uint8_t Gloss; + uint8_t Bloss; + uint8_t Aloss; + uint8_t Rshift; + uint8_t Gshift; + uint8_t Bshift; + uint8_t Ashift; + int refcount; + ptr_t next; +} my_SDL2_PixelFormat_32_t; + +// used to mirror the pixelformat on x86 side, as the one in native side is a global static used by SDL2 and so cannot be inplace shrinked +typedef struct my_SDL2_PixelFormat_32_ext_s { + my_SDL2_PixelFormat_32_t fmt; + my_SDL2_PixelFormat_t* ref; + struct my_SDL2_PixelFormat_32_ext_s* next; +} my_SDL2_PixelFormat_32_ext_t; + +typedef struct my_SDL2_Rect_32_s { + int x, y; + int w, h; +} my_SDL2_Rect_32_t; + +typedef struct my_SDL2_Surface_32_s { + uint32_t flags; + ptr_t format; + int w, h; + int pitch; + ptr_t pixels; + ptr_t userdata; + int locked; + ptr_t list_blitmap; + my_SDL2_Rect_32_t clip_rect; + ptr_t map; + int refcount; +} my_SDL2_Surface_32_t; + +// simplified RWops +typedef struct my_SDL2_RWops_s { + void* size; + void* seek; + void* read; + void* write; + void* close; + uint32_t type; + void* hidden[3]; +} my_SDL2_RWops_t; + +typedef struct my_SDL2_RWops_32_s { + ptr_t size; + ptr_t seek; + ptr_t read; + ptr_t write; + ptr_t close; + uint32_t type; + ptr_t hidden[3]; // not converting hidden, just moving it +} my_SDL2_RWops_32_t; + +void inplace_SDL2_DisplayMode_to_64(void* a); +void inplace_SDL2_DisplayMode_to_32(void* a); +void convert_SDL2_DisplayMode_to_64(void* dst_, void* src_); +void convert_SDL2_DisplayMode_to_32(void* dst_, void* src_); + +void convert_SDL2_Event_to_64(void* dst_, const void* src_); +void convert_SDL2_Event_to_32(void* dst_, const void* src_); +void inplace_SDL2_Event_shrink(void* e); +void inplace_SDL2_Event_enlarge(void* e); + +void inplace_SDL2_Palette_to_32(void* a); +void inplace_SDL2_PixelFormat_to_32(void* a); +void* replace_SDL2_PixelFormat_to_32_ext(void* a); +void inplace_SDL2_Surface_to_32(void* a); +void inplace_SDL2_Palette_to_64(void* a); +void inplace_SDL2_PixelFormat_to_64(void* a); +void* replace_SDL2_PixelFormat_to_64_ext(void* a); +void inplace_SDL2_Surface_to_64(void* a); + +void inplace_SDL2_RWops_to_32(void* a); +void inplace_SDL2_RWops_to_64(void* a); + +#endif // __MY_SDL2ALIGN32_H_ \ No newline at end of file diff --git a/src/include/sdl2rwops.h b/src/include/sdl2rwops.h index 1b13c091364733f56c337dad4f60922551a7b360..bdc54a998d094222c7b19c7214f32279d7b0ccd3 100644 --- a/src/include/sdl2rwops.h +++ b/src/include/sdl2rwops.h @@ -2,6 +2,9 @@ #define __SDL2RWOPS_H__ typedef struct SDL2_RWops_s SDL2_RWops_t; // the actual SDL2 SDL_RWops +#ifdef BOX32 +typedef struct my_SDL2_RWops_32_s my_SDL2_RWops_32_t; +#endif typedef struct x64emu_s x64emu_t; typedef SDL2_RWops_t* (*sdl2_allocrw)(void); @@ -23,10 +26,14 @@ SDL2_RWops_t* AddNativeRW2(x64emu_t* emu, SDL2_RWops_t* ops); SDL2_RWops_t* RWNativeStart2(x64emu_t* emu, SDL2_RWops_t* ops); // put native RW functions, wrapping the emulated (callback style) ones if needed void RWNativeEnd2(SDL2_RWops_t* ops); // put emulated function back in place int isRWops(SDL2_RWops_t* ops); // 1 if ops seems to be a valid RWops, 0 if not +#ifdef BOX32 +int isRWops32(my_SDL2_RWops_32_t* ops); +#endif int64_t RWNativeSeek2(SDL2_RWops_t *ops, int64_t offset, int32_t whence); -uint32_t RWNativeRead2(SDL2_RWops_t* ops, void* ptr, uint32_t size, uint32_t maxnum); -int32_t RWNativeWrite2(SDL2_RWops_t *ops, const void *ptr, int32_t size, int32_t num); +int64_t RWNativeSize2(SDL2_RWops_t *ops); +size_t RWNativeRead2(SDL2_RWops_t* ops, void* ptr, size_t size, size_t maxnum); +size_t RWNativeWrite2(SDL2_RWops_t *ops, const void *ptr, size_t size, size_t num); int32_t RWNativeClose2(SDL2_RWops_t* ops); #endif diff --git a/src/include/signals.h b/src/include/signals.h index deda21f766c49fe0d0873f9f9b8796a96f796f5b..ef72f401a92ba8b8bedbacc9424f2a5e4f94f81c 100644 --- a/src/include/signals.h +++ b/src/include/signals.h @@ -24,6 +24,29 @@ typedef struct x64_sigaction_restorer_s { sigset_t sa_mask; } x64_sigaction_restorer_t; +#ifdef BOX32 +typedef struct __attribute__((packed)) i386_sigaction_s { + union { + ptr_t _sa_handler; // sighandler_t + ptr_t _sa_sigaction; //void (*_sa_sigaction)(int, siginfo_t *, void *); + } _u; + sigset_t sa_mask; + uint32_t sa_flags; + ptr_t sa_restorer; //void (*sa_restorer)(void); +} i386_sigaction_t; + +typedef struct __attribute__((packed)) i386_sigaction_restorer_s { + union { + ptr_t _sa_handler; //sighandler_t + ptr_t _sa_sigaction; //void (*_sa_sigaction)(int, siginfo_t *, void *); + } _u; + uint32_t sa_flags; + ptr_t sa_restorer; //void (*sa_restorer)(void); + sigset_t sa_mask; +} i386_sigaction_restorer_t; + +#endif + sighandler_t my_signal(x64emu_t* emu, int signum, sighandler_t handler); sighandler_t my___sysv_signal(x64emu_t* emu, int signum, sighandler_t handler); sighandler_t my_sysv_signal(x64emu_t* emu, int signum, sighandler_t handler); @@ -39,5 +62,6 @@ void fini_signal_helper(void); void emit_signal(x64emu_t* emu, int sig, void* addr, int code); void emit_interruption(x64emu_t* emu, int num, void* addr); void emit_div0(x64emu_t* emu, void* addr, int code); +void check_exec(x64emu_t* emu, uintptr_t addr); #endif //__SIGNALS_H__ diff --git a/src/include/threads.h b/src/include/threads.h index 8ed0e4c12c0f38342b389e3c959a95c51c9bd29d..7a77657f6f4b9d4769c90f2b0a4111c78db9b75b 100644 --- a/src/include/threads.h +++ b/src/include/threads.h @@ -4,11 +4,27 @@ typedef struct box64context_s box64context_t; typedef struct x64emu_s x64emu_t; +typedef struct emuthread_s { + uintptr_t fnc; + void* arg; + x64emu_t* emu; + int join; + int is32bits; + uintptr_t self; + ulong_t hself; + int cancel_cap, cancel_size; + void** cancels; +} emuthread_t; + void CleanStackSize(box64context_t* context); void init_pthread_helper(void); void fini_pthread_helper(box64context_t* context); void clean_current_emuthread(void); +#ifdef BOX32 +void init_pthread_helper_32(void); +void fini_pthread_helper_32(box64context_t* context); +#endif // prepare an "emuthread structure" in pet and return address of function pointer for a "thread creation routine" void* my_prepare_thread(x64emu_t *emu, void* f, void* arg, int ssize, void** pet); diff --git a/src/include/x64emu.h b/src/include/x64emu.h index 5591823b268f302a5ed33b540d812722204cd0b5..8c08a0c24db6cf5b816837ae7363911138c91089 100644 --- a/src/include/x64emu.h +++ b/src/include/x64emu.h @@ -25,7 +25,8 @@ void SetEDX(x64emu_t *emu, uint32_t v); void SetEDI(x64emu_t *emu, uint32_t v); void SetESI(x64emu_t *emu, uint32_t v); void SetEBP(x64emu_t *emu, uint32_t v); -//void SetESP(x64emu_t *emu, uint32_t v); +void SetESP(x64emu_t *emu, uint32_t v); +void SetEIP(x64emu_t *emu, uint32_t v); void SetRAX(x64emu_t *emu, uint64_t v); void SetRBX(x64emu_t *emu, uint64_t v); void SetRCX(x64emu_t *emu, uint64_t v); @@ -35,8 +36,8 @@ void SetRSI(x64emu_t *emu, uint64_t v); void SetRBP(x64emu_t *emu, uint64_t v); void SetRSP(x64emu_t *emu, uint64_t v); void SetRIP(x64emu_t *emu, uint64_t v); -//void SetFS(x64emu_t *emu, uint16_t v); -//uint16_t GetFS(x64emu_t *emu); +void SetFS(x64emu_t *emu, uint16_t v); +uint16_t GetFS(x64emu_t *emu); uint64_t GetRSP(x64emu_t *emu); uint64_t GetRBP(x64emu_t *emu); void ResetFlags(x64emu_t *emu); diff --git a/src/include/x64run.h b/src/include/x64run.h index b6c9e960c514d1a908619a4858301168bf5a8d53..9eed07c0d9a679b711fb5fda41f655e326185d5d 100644 --- a/src/include/x64run.h +++ b/src/include/x64run.h @@ -9,8 +9,11 @@ int RunTest(x64test_t *test); void DynaRun(x64emu_t *emu); uint32_t LibSyscall(x64emu_t *emu); -void PltResolver(x64emu_t* emu); -extern uintptr_t pltResolver; +void PltResolver64(x64emu_t* emu); +#ifdef BOX32 +void PltResolver32(x64emu_t* emu); +#endif +extern uintptr_t pltResolver64; int GetTID(void); #endif //__X64RUN_H_ \ No newline at end of file diff --git a/src/librarian/globalsymbols32.c b/src/librarian/globalsymbols32.c new file mode 100644 index 0000000000000000000000000000000000000000..b4c83682b1331d22359a01e9908595b09cdebcdd --- /dev/null +++ b/src/librarian/globalsymbols32.c @@ -0,0 +1,108 @@ +#define _GNU_SOURCE +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "callback.h" +#include "box32context.h" +#include "librarian.h" +#include "library.h" + +// workaround for Globals symbols + +#define GLOB(A, B, C) \ + if (GetGlobalNoWeakSymbolStartEnd(my_context->maplib, #A, &globoffs, &globend, -1, NULL, 0, NULL)) { \ + printf_log(LOG_DEBUG, "Global " #A " workaround, @%p <- %p\n", (void*)globoffs, &A); \ + memcpy((void*)globoffs, &A, C); \ + } \ + if (B && GetGlobalNoWeakSymbolStartEnd(my_context->maplib, #A, &globoffs, &globend, 2, B, 1, NULL)) { \ + printf_log(LOG_DEBUG, "Global " #A " workaround, @%p <- %p\n", (void*)globoffs, &A); \ + memcpy((void*)globoffs, &A, C); \ + } + +#define TOGLOB(A, B, C) \ + if (GetGlobalNoWeakSymbolStartEnd(my_context->maplib, #A, &globoffs, &globend, -1, NULL, 0, NULL)) { \ + printf_log(LOG_DEBUG, "Global " #A " workaround, @%p -> %p\n", (void*)globoffs, &A); \ + memcpy(&A, (void*)globoffs, C); \ + } \ + if (B && GetGlobalNoWeakSymbolStartEnd(my_context->maplib, #A, &globoffs, &globend, 2, B, 1, NULL)) { \ + printf_log(LOG_DEBUG, "Global " #A " workaround, @%p -> %p\n", (void*)globoffs, &A); \ + memcpy(&A, (void*)globoffs, C); \ + } + + +// **************** NCurses **************** +extern int COLS; +extern int LINES; +extern int TABSIZE; +extern void* curscr; +extern void* newscr; +extern void* stdscr; +extern void* acs_map[128]; +extern void* UP; +extern void* BC; +extern uint8_t PC; +extern uint16_t ospeed; +extern void* ttytype; + +void my32_checkGlobalTInfo() +{ + uintptr_t globoffs, globend; + GLOB(COLS, NULL, sizeof(int)) + GLOB(LINES, NULL, sizeof(int)) + GLOB(TABSIZE, NULL, sizeof(int)) + GLOB(curscr, NULL, sizeof(ptr_t)) + GLOB(newscr, NULL, sizeof(ptr_t)) + GLOB(stdscr, NULL, sizeof(ptr_t)) + GLOB(acs_map, NULL, sizeof(ptr_t)) + GLOB(UP, NULL, sizeof(ptr_t)) + GLOB(BC, NULL, sizeof(ptr_t)) + GLOB(PC, NULL, sizeof(uint8_t)) + GLOB(ospeed, NULL, sizeof(uint16_t)) + GLOB(ttytype, NULL, sizeof(ptr_t)) +} + +void my32_updateGlobalTInfo() +{ + uintptr_t globoffs, globend; + TOGLOB(COLS, NULL, sizeof(int)) + TOGLOB(LINES, NULL, sizeof(int)) + TOGLOB(TABSIZE, NULL, sizeof(int)) + TOGLOB(curscr, NULL, sizeof(ptr_t)) + TOGLOB(newscr, NULL, sizeof(ptr_t)) + TOGLOB(stdscr, NULL, sizeof(ptr_t)) + TOGLOB(acs_map, NULL, sizeof(ptr_t)) + TOGLOB(UP, NULL, sizeof(ptr_t)) + TOGLOB(BC, NULL, sizeof(ptr_t)) + TOGLOB(PC, NULL, sizeof(uint8_t)) + TOGLOB(ospeed, NULL, sizeof(uint16_t)) + TOGLOB(ttytype, NULL, sizeof(ptr_t)) +} + +// **************** getopts **************** +extern char *optarg; +extern int optind, opterr, optopt; + +void my32_updateGlobalOpt() +{ + uintptr_t globoffs, globend; + TOGLOB(optarg, "GLIBC_2.2.5", sizeof(ptr_t)); + TOGLOB(optind, "GLIBC_2.2.5", sizeof(int)); + TOGLOB(opterr, "GLIBC_2.2.5", sizeof(int)); + TOGLOB(optopt, "GLIBC_2.2.5", sizeof(int)); +} + +void my32_checkGlobalOpt() +{ + uintptr_t globoffs, globend; + GLOB(optarg, "GLIBC_2.2.5", sizeof(ptr_t)); + GLOB(optind, "GLIBC_2.2.5", sizeof(int)); + GLOB(opterr, "GLIBC_2.2.5", sizeof(int)); + GLOB(optopt, "GLIBC_2.2.5", sizeof(int)); +} diff --git a/src/librarian/librarian.c b/src/librarian/librarian.c index 56a0fffa61f7e21b475eb8a8d1d05ba4e21f5930..1d61aa2dfa1302e2a02d224bcb8eb9874c3e27b5 100644 --- a/src/librarian/librarian.c +++ b/src/librarian/librarian.c @@ -12,6 +12,9 @@ #include "x64emu.h" #include "box64context.h" #include "elfloader.h" +#ifdef BOX32 +#include "box32.h" +#endif #include "bridge.h" @@ -254,15 +257,31 @@ static int AddNeededLib_add(lib_t** maplib, int local, needed_libs_t* needed, in if (lib->type == LIB_EMULATED) { // Need to add library to the linkmap (put here so the link is ordered) - linkmap_t *lm = addLinkMapLib(lib); - if(!lm) { - // Crashed already - printf_dump(LOG_DEBUG, "Failure to add lib linkmap\n"); - return 1; + #ifdef BOX32 + if(box64_is32bits) { + linkmap32_t *lm = addLinkMapLib32(lib); + if(!lm) { + // Crashed already + printf_dump(LOG_DEBUG, "Failure to add lib linkmap\n"); + return 1; + } + lm->l_addr = (Elf32_Addr)to_ptrv(GetElfDelta(lib->e.elf)); + lm->l_name = to_ptrv(lib->name); + lm->l_ld = to_ptrv(GetDynamicSection(lib->e.elf)); + } else + #endif + { + linkmap_t *lm = addLinkMapLib(lib); + if(!lm) { + // Crashed already + printf_dump(LOG_DEBUG, "Failure to add lib linkmap\n"); + return 1; + } + lm->l_addr = (Elf64_Addr)GetElfDelta(lib->e.elf); + lm->l_name = lib->name; + lm->l_ld = GetDynamicSection(lib->e.elf); } - lm->l_addr = (Elf64_Addr)GetElfDelta(lib->e.elf); - lm->l_name = lib->name; - lm->l_ld = GetDynamicSection(lib->e.elf); + //TODO: it seems to never be removed! } IncRefCount(lib, emu); return 0; @@ -492,7 +511,7 @@ int GetGlobalSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, u if(GetGlobalSymbolStartEnd_internal(maplib, name, start, end, self, &version, &vername, &veropt, elfsym)) { if(start && end && *end==*start) { // object is of 0 sized, try to see an "_END" object of null size uintptr_t start2, end2; - char* buff = (char*)malloc(strlen(name) + strlen("_END") + 1); + char* buff = (char*)box_malloc(strlen(name) + strlen("_END") + 1); strcpy(buff, name); strcat(buff, "_END"); if(GetGlobalSymbolStartEnd_internal(maplib, buff, &start2, &end2, self, &version, &vername, &veropt, elfsym)) { @@ -565,7 +584,7 @@ int GetGlobalWeakSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* star if(GetGlobalWeakSymbolStartEnd_internal(maplib, name, start, end, self, &version, &vername, &veropt, elfsym)) { if(start && end && *end==*start) { // object is of 0 sized, try to see an "_END" object of null size uintptr_t start2, end2; - char* buff = (char*)malloc(strlen(name) + strlen("_END") + 1); + char* buff = (char*)box_malloc(strlen(name) + strlen("_END") + 1); strcpy(buff, name); strcat(buff, "_END"); if(GetGlobalWeakSymbolStartEnd_internal(maplib, buff, &start2, &end2, self, &version, &vername, &veropt, elfsym)) { @@ -703,16 +722,34 @@ int GetLocalSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, ui return 0; } -int GetSymTabStartEnd(lib_t* maplib, const char* name, uintptr_t* start, uintptr_t* end) +int GetAnySymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, uintptr_t* end, int version, const char* vername, int veropt) { if(!maplib) return 0; for(int i=0; ilibsz; ++i) { elfheader_t* h = GetElf(maplib->libraries[i]); - if(h && ElfGetSymTabStartEnd(h, start, end, name)) + if(h && ElfGetSymbolStartEnd(h, start, end, name, &version, &vername, 1, &veropt)) return 1; } return 0; + +} + +int GetSymTabStartEnd(lib_t* maplib, const char* name, uintptr_t* start, uintptr_t* end) +{ + if(!maplib) + return 0; + for(int i=0; ilibsz; ++i) { + elfheader_t* h = GetElf(maplib->libraries[i]); + if(box64_is32bits) { + if(h && ElfGetSymTabStartEnd32(h, start, end, name)) + return 1; + } else { + if(h && ElfGetSymTabStartEnd64(h, start, end, name)) + return 1; + } + } + return 0; } diff --git a/src/librarian/library.c b/src/librarian/library.c index 350a68a90589aa8b245147a44dd494fbf77c1e35..bf922d60b54aff047a985d152ddddd54e42ba016 100644 --- a/src/librarian/library.c +++ b/src/librarian/library.c @@ -40,6 +40,16 @@ #endif #undef GO +#ifdef BOX32 +#define GO(P, N) int wrapped##N##_init32(library_t* lib, box64context_t *box64); \ + void wrapped##N##_fini32(library_t* lib); +#ifdef STATICBUILD +#include "library_list_static_32.h" +#else +#include "library_list_32.h" +#endif +#undef GO +#endif #define GO(P, N) {P, wrapped##N##_init, wrapped##N##_fini}, wrappedlib_t wrappedlibs[] = { @@ -50,6 +60,17 @@ wrappedlib_t wrappedlibs[] = { #endif }; #undef GO +#define GO(P, N) {P, wrapped##N##_init32, wrapped##N##_fini32}, +wrappedlib_t wrappedlibs32[] = { +#ifdef BOX32 +#ifdef STATICBUILD +#include "library_list_static_32.h" +#else +#include "library_list_32.h" +#endif +#endif +}; +#undef GO KHASH_MAP_IMPL_STR(symbolmap, symbol1_t) KHASH_MAP_IMPL_STR(symbol2map, symbol2_t) @@ -154,6 +175,8 @@ int EmuLib_GetWeak(library_t* lib, const char* name, uintptr_t *offs, uintptr_t void* sym; if((sym = ElfGetWeakSymbolStartEnd(lib->e.elf, &start, &end, name, version, vername, local, veropt))) { + if(asked_size && asked_size!=end-start) + return 0; *offs = start; *sz = end-start; *weak = 1; @@ -192,6 +215,8 @@ int EmuLib_GetGlobal(library_t* lib, const char* name, uintptr_t *offs, uintptr_ void* sym; if((sym = ElfGetGlobalSymbolStartEnd(lib->e.elf, &start, &end, name, version, vername, local, veropt))) { + if(asked_size && asked_size!=end-start) + return 0; *offs = start; *sz = end-start; *weak = 0; @@ -211,6 +236,8 @@ int EmuLib_GetLocal(library_t* lib, const char* name, uintptr_t *offs, uintptr_t void* sym; if((sym = ElfGetLocalSymbolStartEnd(lib->e.elf, &start, &end, name, version, vername, local, veropt))) { + if(asked_size && asked_size!=end-start) + return 0; *offs = start; *sz = end-start; *weak = 0; @@ -232,10 +259,11 @@ int DummyLib_GetLocal(library_t* lib, const char* name, uintptr_t *offs, uintptr } static void initWrappedLib(library_t *lib, box64context_t* context) { - int nb = sizeof(wrappedlibs) / sizeof(wrappedlib_t); + int nb = (box64_is32bits?sizeof(wrappedlibs32):sizeof(wrappedlibs)) / sizeof(wrappedlib_t); for (int i=0; iname, wrappedlibs[i].name)==0) { - if(wrappedlibs[i].init(lib, context)) { + wrappedlib_t* w = box64_is32bits?(&wrappedlibs32[i]):(&wrappedlibs[i]); + if(strcmp(lib->name, w->name)==0) { + if(w->init(lib, context)) { // error! const char* error_str = dlerror(); if(error_str) // don't print the message if there is no error string from last error @@ -243,7 +271,7 @@ static void initWrappedLib(library_t *lib, box64context_t* context) { return; // non blocker... } printf_dump(LOG_INFO, "Using native(wrapped) %s\n", lib->name); - lib->fini = wrappedlibs[i].fini; + lib->fini = w->fini; lib->getglobal = WrappedLib_GetGlobal; lib->getweak = WrappedLib_GetWeak; lib->getlocal = WrappedLib_GetLocal; @@ -362,7 +390,7 @@ static void initEmulatedLib(const char* path, library_t *lib, box64context_t* co { char libname[MAX_PATH]; strcpy(libname, path); - int found = FileIsX64ELF(libname); + int found = box64_is32bits?FileIsX86ELF(libname):FileIsX64ELF(libname); if(found) if(loadEmulatedLib(libname, lib, context, verneeded)) return; @@ -371,14 +399,14 @@ static void initEmulatedLib(const char* path, library_t *lib, box64context_t* co { strcpy(libname, context->box64_ld_lib.paths[i]); strcat(libname, path); - if(FileIsX64ELF(libname)) + if(box64_is32bits?FileIsX86ELF(libname):FileIsX64ELF(libname)) if(loadEmulatedLib(libname, lib, context, verneeded)) return; // also try x86_64 variant strcpy(libname, context->box64_ld_lib.paths[i]); - strcat(libname, "x86_64/"); + strcat(libname, box64_is32bits?"i386/":"x86_64/"); strcat(libname, path); - if(FileIsX64ELF(libname)) + if(box64_is32bits?FileIsX86ELF(libname):FileIsX64ELF(libname)) if(loadEmulatedLib(libname, lib, context, verneeded)) return; } @@ -407,10 +435,17 @@ static const char* essential_libs[] = { "libxkbcommon-x11.so.0", "libpulse-simple.so.0", "libpulse.so.0", "libvulkan.so.1", "libvulkan.so", "ld-linux-x86-64.so.2", "crashhandler.so", "libtcmalloc_minimal.so.0", "libtcmalloc_minimal.so.4", "libanl.so.1" }; +static const char* essential_libs_egl[] = { + "libEGL.so", "libGLESv2.so" +}; static int isEssentialLib(const char* name) { for (unsigned int i=0; ipath)) ret=1; if(lib->type==LIB_EMULATED && lib->e.elf->path && !strcmp(lib->e.elf->path, rpath)) { @@ -789,7 +824,7 @@ static int getSymbolInDataMaps(library_t*lib, const char* name, int noweak, uint if(lib->w.altmy) strcpy(buff, lib->w.altmy); else - strcpy(buff, "my_"); + strcpy(buff, box64_is32bits?"my32_":"my_"); strcat(buff, name); #ifdef STATICBUILD symbol = (void*)kh_value(lib->w.mydatamap, k).addr; @@ -814,9 +849,10 @@ static int getSymbolInDataMaps(library_t*lib, const char* name, int noweak, uint } static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, uintptr_t *addr, uintptr_t *size, int* weak) { + const khint_t hash = kh_hash(symbolmap, name); void* symbol; // check in mysymbolmap - khint_t k = kh_get(symbolmap, lib->w.mysymbolmap, name); + khint_t k = kh_get_with_hash(symbolmap, lib->w.mysymbolmap, name, hash); if (k!=kh_end(lib->w.mysymbolmap)) { symbol1_t *s = &kh_value(lib->w.mysymbolmap, k); if(!s->resolved) { @@ -824,7 +860,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui if(lib->w.altmy) strcpy(buff, lib->w.altmy); else - strcpy(buff, "my_"); + strcpy(buff, box64_is32bits?"my32_":"my_"); strcat(buff, name); #ifdef STATICBUILD symbol = (void*)s->addr; @@ -844,7 +880,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui return 1; } // check in stsymbolmap (return struct...) - k = kh_get(symbolmap, lib->w.stsymbolmap, name); + k = kh_get_with_hash(symbolmap, lib->w.stsymbolmap, name, hash); if (k!=kh_end(lib->w.stsymbolmap)) { symbol1_t *s = &kh_value(lib->w.stsymbolmap, k); if(!s->resolved) { @@ -852,7 +888,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui if(lib->w.altmy) strcpy(buff, lib->w.altmy); else - strcpy(buff, "my_"); + strcpy(buff, box64_is32bits?"my32_":"my_"); strcat(buff, name); #ifdef STATICBUILD symbol = (void*)s->addr; @@ -863,7 +899,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui printf_log(LOG_NONE, "Warning, function %s not found\n", buff); return 0; } - s->addr = AddBridge(lib->w.bridge, s->w, symbol, sizeof(void*), name); + s->addr = AddBridge(lib->w.bridge, s->w, symbol, box64_is32bits?4:sizeof(void*), name); s->resolved = 1; } *addr = s->addr; @@ -872,7 +908,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui return 1; } // check in symbolmap - k = kh_get(symbolmap, lib->w.symbolmap, name); + k = kh_get_with_hash(symbolmap, lib->w.symbolmap, name, hash); if (k!=kh_end(lib->w.symbolmap)) { symbol1_t *s = &kh_value(lib->w.symbolmap, k); if(!s->resolved) { @@ -909,7 +945,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui } if(!noweak) { // check in wmysymbolmap - khint_t k = kh_get(symbolmap, lib->w.wmysymbolmap, name); + khint_t k = kh_get_with_hash(symbolmap, lib->w.wmysymbolmap, name, hash); if (k!=kh_end(lib->w.wmysymbolmap)) { symbol1_t *s = &kh_value(lib->w.wmysymbolmap, k); if(!s->resolved) { @@ -917,7 +953,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui if(lib->w.altmy) strcpy(buff, lib->w.altmy); else - strcpy(buff, "my_"); + strcpy(buff, box64_is32bits?"my32_":"my_"); strcat(buff, name); #ifdef STATICBUILD symbol = (void*)s->addr; @@ -936,7 +972,7 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui *weak = 1; return 1; } - k = kh_get(symbolmap, lib->w.wsymbolmap, name); + k = kh_get_with_hash(symbolmap, lib->w.wsymbolmap, name, hash); if (k!=kh_end(lib->w.wsymbolmap)) { symbol1_t *s = &kh_value(lib->w.wsymbolmap, k); if(!s->resolved) { @@ -973,7 +1009,9 @@ static int getSymbolInSymbolMaps(library_t*lib, const char* name, int noweak, ui } } // check in symbol2map - k = kh_get(symbol2map, lib->w.symbol2map, name); + // + // NOTE: symbol2map & symbolmap share the same hash function, so we can use the same hash + k = kh_get_with_hash(symbol2map, lib->w.symbol2map, name, hash); if (k!=kh_end(lib->w.symbol2map)) { symbol2_t *s = &kh_value(lib->w.symbol2map, k); if(!noweak || !s->weak) @@ -1074,6 +1112,64 @@ int GetDeepBind(library_t* lib) return lib->deepbind; } +#ifdef BOX32 +linkmap32_t* getLinkMapLib32(library_t* lib) +{ + linkmap32_t* lm = my_context->linkmap32; + while(lm) { + if(lm->l_lib == lib) + return lm; + lm = (linkmap32_t*)from_ptrv(lm->l_next); + } + return NULL; +} +linkmap32_t* getLinkMapElf32(elfheader_t* h) +{ + linkmap32_t* lm = my_context->linkmap32; + while(lm) { + if(lm->l_lib && lm->l_lib->type==LIB_EMULATED && lm->l_lib->e.elf == h) + return lm; + lm = (linkmap32_t*)from_ptrv(lm->l_next); + } + return NULL; +} +linkmap32_t* addLinkMapLib32(library_t* lib) +{ + if(!my_context->linkmap32) { + my_context->linkmap32 = (linkmap32_t*)box_calloc(1, sizeof(linkmap32_t)); + my_context->linkmap32->l_lib = lib; + return my_context->linkmap32; + } + linkmap32_t* lm = my_context->linkmap32; + while(lm->l_next) + lm = (linkmap32_t*)from_ptrv(lm->l_next); + lm->l_next = to_ptrv(box_calloc(1, sizeof(linkmap32_t))); + linkmap32_t* l_next = (linkmap32_t*)from_ptrv(lm->l_next); + l_next->l_lib = lib; + l_next->l_prev = to_ptrv(lm); + return l_next; +} +void removeLinkMapLib32(library_t* lib) +{ + linkmap32_t* lm = getLinkMapLib32(lib); + if(!lm) return; + if(lm->l_next) + ((linkmap32_t*)from_ptrv(lm->l_next))->l_prev = lm->l_prev; + if(lm->l_prev) + ((linkmap32_t*)from_ptrv(lm->l_prev))->l_next = lm->l_next; + box_free(lm); +} + +void AddMainElfToLinkmap32(elfheader_t* elf) +{ + linkmap32_t* lm = addLinkMapLib32(NULL); // main elf will have a null lib link + + lm->l_addr = (Elf32_Addr)to_ptrv(GetElfDelta(elf)); + lm->l_name = to_ptrv(my_context->fullpath); + lm->l_ld = to_ptrv(GetDynamicSection(elf)); +} +#endif + linkmap_t* getLinkMapLib(library_t* lib) { linkmap_t* lm = my_context->linkmap; @@ -1131,23 +1227,23 @@ void AddMainElfToLinkmap(elfheader_t* elf) needed_libs_t* new_neededlib(int n) { - needed_libs_t* ret = (needed_libs_t*)calloc(1, sizeof(needed_libs_t)); + needed_libs_t* ret = (needed_libs_t*)box_calloc(1, sizeof(needed_libs_t)); ret->cap = ret->size = n; ret->init_size = n; - ret->libs = (library_t**)calloc(n, sizeof(library_t*)); - ret->names = (char**)calloc(n, sizeof(char*)); + ret->libs = (library_t**)box_calloc(n, sizeof(library_t*)); + ret->names = (char**)box_calloc(n, sizeof(char*)); return ret; } void free_neededlib(needed_libs_t* needed) { if(!needed) return; - free(needed->libs); - free(needed->names); + box_free(needed->libs); + box_free(needed->names); needed->libs = NULL; needed->names = NULL; needed->cap = needed->size = 0; - free(needed); + box_free(needed); } void add1_neededlib(needed_libs_t* needed) { @@ -1156,8 +1252,8 @@ void add1_neededlib(needed_libs_t* needed) if(needed->size+1<=needed->cap) return; needed->cap = needed->size+1; - needed->libs = (library_t**)realloc(needed->libs, needed->cap*sizeof(library_t*)); - needed->names = (char**)realloc(needed->names, needed->cap*sizeof(char*)); + needed->libs = (library_t**)box_realloc(needed->libs, needed->cap*sizeof(library_t*)); + needed->names = (char**)box_realloc(needed->names, needed->cap*sizeof(char*)); needed->size++; needed->init_size++; } @@ -1172,8 +1268,8 @@ void add1lib_neededlib(needed_libs_t* needed, library_t* lib, const char* name) // add it if(needed->size==needed->cap) { needed->cap = needed->size+1; - needed->libs = (library_t**)realloc(needed->libs, needed->cap*sizeof(library_t*)); - needed->names = (char**)realloc(needed->names, needed->cap*sizeof(char*)); + needed->libs = (library_t**)box_realloc(needed->libs, needed->cap*sizeof(library_t*)); + needed->names = (char**)box_realloc(needed->names, needed->cap*sizeof(char*)); } needed->libs[needed->size] = lib; needed->names[needed->size] = (char*)name; @@ -1191,8 +1287,8 @@ void add1lib_neededlib_name(needed_libs_t* needed, library_t* lib, const char* n // add it if(needed->size==needed->cap) { needed->cap = needed->size+1; - needed->libs = (library_t**)realloc(needed->libs, needed->cap*sizeof(library_t*)); - needed->names = (char**)realloc(needed->names, needed->cap*sizeof(char*)); + needed->libs = (library_t**)box_realloc(needed->libs, needed->cap*sizeof(library_t*)); + needed->names = (char**)box_realloc(needed->names, needed->cap*sizeof(char*)); } needed->libs[needed->size] = lib; needed->names[needed->size] = (char*)name; @@ -1210,8 +1306,8 @@ void add1libref_neededlib(needed_libs_t* needed, library_t* lib) // add it if(needed->size==needed->cap) { needed->cap = needed->size+4; - needed->libs = (library_t**)realloc(needed->libs, needed->cap*sizeof(library_t*)); - needed->names = (char**)realloc(needed->names, needed->cap*sizeof(char*)); + needed->libs = (library_t**)box_realloc(needed->libs, needed->cap*sizeof(library_t*)); + needed->names = (char**)box_realloc(needed->names, needed->cap*sizeof(char*)); } needed->libs[needed->size] = lib; needed->names[needed->size] = (char*)lib->name; @@ -1222,12 +1318,12 @@ needed_libs_t* copy_neededlib(needed_libs_t* needed) { if(!needed) return NULL; - needed_libs_t* ret = (needed_libs_t*)calloc(1, sizeof(needed_libs_t)); + needed_libs_t* ret = (needed_libs_t*)box_calloc(1, sizeof(needed_libs_t)); ret->cap = needed->cap; ret->size = needed->size; ret->init_size = needed->init_size; - ret->libs = (library_t**)calloc(ret->cap, sizeof(library_t*)); - ret->names = (char**)calloc(ret->cap, sizeof(char*)); + ret->libs = (library_t**)box_calloc(ret->cap, sizeof(library_t*)); + ret->names = (char**)box_calloc(ret->cap, sizeof(char*)); memcpy(ret->libs, needed->libs, ret->size*sizeof(library_t*)); memcpy(ret->names, needed->names, ret->size*sizeof(char*)); return ret; diff --git a/src/librarian/library_private.h b/src/librarian/library_private.h index a13df4a07273366f0062387720de3465b4da4875..495ad000945c289c9c051abbba2b03d1e5658f10 100644 --- a/src/librarian/library_private.h +++ b/src/librarian/library_private.h @@ -133,11 +133,29 @@ typedef struct linkmap_s { library_t* l_lib; } linkmap_t; +#ifdef BOX32 +typedef struct linkmap32_s { + // actual struct link_map + Elf32_Addr l_addr; + ptr_t l_name; // char* + ptr_t l_ld; //Elf64_Dyn* + ptr_t l_next, l_prev; // struct linkmap32_s * + // custom + library_t* l_lib; + +} linkmap32_t; +#endif linkmap_t* getLinkMapLib(library_t* lib); linkmap_t* getLinkMapElf(elfheader_t* h); linkmap_t* addLinkMapLib(library_t* lib); void removeLinkMapLib(library_t* lib); +#ifdef BOX32 +linkmap32_t* getLinkMapLib32(library_t* lib); +linkmap32_t* getLinkMapElf32(elfheader_t* h); +linkmap32_t* addLinkMapLib32(library_t* lib); +void removeLinkMapLib32(library_t* lib); +#endif int FiniLibrary(library_t* lib, x64emu_t* emu); void Free1Library(library_t **lib, x64emu_t* emu); diff --git a/src/librarian/symbols.c b/src/librarian/symbols.c index d8cbdb31b2095a70ed0f34bdca59b264debaabf5..9ca6810ca4de2467b96c0eae2fe1feb37e5117e7 100644 --- a/src/librarian/symbols.c +++ b/src/librarian/symbols.c @@ -227,6 +227,7 @@ void AddUniqueSymbol(kh_mapsymbols_t *mapsymbols, const char* name, uintptr_t ad v->syms[idx].sym.offs = addr; v->syms[idx].sym.sz = sz; v->syms[idx].veropt = veropt; + printf_dump(LOG_DEBUG, " Adding unique %s (ver:%d/%s%s) with offert=%p sz=%d\n", name, ver, vername?vername:"(none)", veropt?" veropt":"", (void*)addr, sz); } int GetSymbolStartEnd(kh_mapsymbols_t* mapsymbols, const char* name, uintptr_t* start, uintptr_t* end, int ver, const char* vername, int local, int veropt) diff --git a/src/library_list.h b/src/library_list.h index 06765b599ab44e4fedf1f194b9ab9f68f7dc2371..93de39412079e09dca7d21b2059e49038c567cf9 100644 --- a/src/library_list.h +++ b/src/library_list.h @@ -13,6 +13,7 @@ GO("libOpenGL.so.0", libgl) GO("libGLU.so.1", libglu) GO("libGLX.so.0", libglx) GO("libGLX.so", libglx) +GO("libGLX_nvidia.so.0", libgl) GO("libGLESv2.so.2", glesv2) GO("libGLESv2.so", glesv2) GO("libX11.so.6", libx11) @@ -80,6 +81,7 @@ GO("libxcb-xkb.so.1", libxcbxkb) //GO("libxcb-present.so.0", libxcbpresent) GO("libXtst.so.6", libxtst) GO("libXt.so.6", libxt) +GO("libXaw.so.7", libxaw) GO("libXcomposite.so.1", libxcomposite) GO("libXdamage.so.1", libxdamage) GO("libXpresent.so.1", libxpresent) @@ -108,6 +110,7 @@ GO("libdbus-1.so.3", dbus) GO("libdecor-0.so.0", decor0) //GO("libiconv.so.2", iconv) GO("libdrm.so.2", libdrm) +GO("libdrm_amdgpu.so.1", libdrmamdgpu) GO("libexpat.so.1", expat) GO("libexpat.so", expat) GO("libcrypto.so.1", crypto) @@ -160,6 +163,7 @@ GO("libpango-1.0.so", pango) //GO("libnm-util.so.2", libnm) GO("libibus-1.0.so.5", libibus) GO("libfontconfig.so.1", fontconfig) +GO("libfontconfig.so", fontconfig) GO("libharfbuzz.so.0", libharfbuzz) GO("libbz2.so.1", bz2) GO("liblzma.so.5", lzma) @@ -250,7 +254,9 @@ GO("libicui18n.so.72", icui18n72) GO("libicuuc.so.73", icuuc73) GO("libicui18n.so.73", icui18n73) GO("libicuuc.so.74", icuuc74) +GO("libicuuc.so.75", icuuc75) GO("libicui18n.so.74", icui18n74) +GO("libicui18n.so.75", icui18n75) GO("libidn2.so.0", idn2) GO("libpam.so.0", pam) GO("libanl.so.1", anl) @@ -263,8 +269,9 @@ GO("libunistring.so.2", libunistring2) GO("libhogweed.so.6", libhogweed6) GO("libsqlite3.so.0", libsqlite3) GO("libtiff.so.5", libtiff5) +GO("libbrotlidec.so", brotlidec) +GO("libbrotlidec.so.1", brotlidec) -#ifdef ANDROID GO("libc.so", libc) GO("libm.so", libm) GO("libbsd.so", libbsd) @@ -288,8 +295,6 @@ GO("libXau.so", libxau) GO("libXxf86vm.so", libxxf86vm) GO("libXinerama.so", xinerama) GO("libXrandr.so", libxrandr) -GO("libxrandr.so", libxrandr) -GO("libXext.so", libxext) GO("libXfixes.so", libxfixes) GO("libXcursor.so", libxcursor) GO("libXrender.so", libxrender) @@ -297,10 +302,8 @@ GO("libXft.so", libxft) GO("libXi.so", libxi) GO("libXss.so", libxss) GO("libXpm.so", libxpm) -GO("libXau.so", libxau) GO("libXdmcp.so", libxdmcp) GO("libX11-xcb.so", libx11xcb) -GO("libxcb.so", libxcb) GO("libxcb-xfixes.so", libxcbxfixes) GO("libxcb-shape.so", libxcbshape) GO("libxcb-shm.so", libxcbshm) @@ -319,9 +322,9 @@ GO("libxcb-render.so", libxcbrender) GO("libxcb-sync.so", libxcbsync) GO("libxcb-xinerama.so", libxcbxinerama) GO("libxcb-xkb.so", libxcbxkb) -//GO("libxcb-present.so", libxcbpresent) GO("libXtst.so", libxtst) GO("libXt.so", libxt) +GO("libXaw.so", libxaw) GO("libXcomposite.so", libxcomposite) GO("libXdamage.so", libxdamage) GO("libXpresent.so", libxpresent) @@ -356,7 +359,6 @@ GO("libvorbis.so", libvorbis) GO("libogg.so", libogg) GO("libFLAC.so", flac) GO("libz.so", libz) -GO("libandroid-shmem.so", androidshmem) GO("libgobject-2.0.so", gobject2) GO("libglib-2.0.so", glib2) GO("libgtk-3.so", gtk3) @@ -367,7 +369,10 @@ GO("libgmodule-2.0.so", gmodule2) GO("libgtk-x11-2.0.so", gtkx112) GO("libgdk-x11-2.0.so", gdkx112) GO("libpangocairo-1.0.so", pangocairo) -#else +#ifdef ANDROID +GO("libandroid-shmem.so", androidshmem) +#endif + GO("libc.so.6", libc) GO("libm.so.6", libm) GO("libdl.so.2", libdl) @@ -383,7 +388,7 @@ GO("libgnutls.so.30", gnutls) GO("libmpg123.so.0", mpg123) //GO("libtiff.so.5", libtiff) GO("libxml2.so.2", xml2) -#endif + #ifdef TERMUX GO("libiconv.so", iconv) GO("libtermux-exec.so", termuxexec) @@ -393,4 +398,4 @@ GO("libandroid-support.so", androidsupport) GO("ld-linux-x86-64.so.2", ldlinux) //GO("libunwind.so.8", unwind) -GO("crashhandler.so", crashhandler) +//GO("crashhandler.so", crashhandler) diff --git a/src/library_list_32.h b/src/library_list_32.h new file mode 100644 index 0000000000000000000000000000000000000000..1500389df3d52cb8a7b9f3d24f1195a519427832 --- /dev/null +++ b/src/library_list_32.h @@ -0,0 +1,74 @@ +#ifndef GO +#error Nope +#endif + +GO("libpthread.so.0", libpthread) +GO("librt.so.1", librt) + +#ifdef ANDROID +GO("libc.so", libc) +GO("libm.so", libm) +GO("libdl.so", libdl) +#else +GO("libc.so.6", libc) +GO("libm.so.6", libm) +GO("libdl.so.2", libdl) +#endif + +GO("ld-linux.so.2", ldlinux) + +GO("libGL.so", libgl) +GO("libGL.so.1", libgl) +GO("libGLX_nvidia.so.0", libgl) +GO("libGLU.so.1", libglu) +GO("libSDL-1.2.so.0", sdl1) +GO("libSDL2-2.0.so.0", sdl2) +GO("libSDL2_image-2.0.so.0", sdl2image) +GO("libSDL2_image.so", sdl2image) +GO("libasound.so.2", libasound) +GO("libasound.so", libasound) +GO("libfreetype.so.6", freetype) +GO("libfontconfig.so.1", fontconfig) + +GO("libX11.so", libx11) +GO("libXext.so", libxext) +GO("libXfixes.so", libxfixes) +GO("libXrender.so", libxrender) +GO("libXcursor.so", libxcursor) +GO("libXcomposite.so", libxcomposite) +GO("libXi.so", libxi) +GO("libXrandr.so", libxrandr) +GO("libxrandr.so", libxrandr) +GO("libXss.so", libxss) +GO("libXxf86vm.so", libxxf86vm) +GO("libXinerama.so", xinerama) + +GO("libX11.so.6", libx11) +GO("libXext.so.6", libxext) +GO("libXfixes.so.3", libxfixes) +GO("libXrender.so.1", libxrender) +GO("libXcomposite.so.1", libxcomposite) +GO("libXcursor.so.1", libxcursor) +GO("libXi.so.6", libxi) +GO("libXrandr.so.2", libxrandr) +GO("libxrandr.so.2", libxrandr) +GO("libXss.so.1", libxss) +GO("libXxf86vm.so.1", libxxf86vm) +GO("libXinerama.so.1", xinerama) + +GO("libopenal.so.1", openal) +GO("libopenal.so.0", openal) +GO("libopenal.so", openal) +GO("openal.so", openal) + +GO("libexpat.so.1", expat) +GO("libexpat.so", expat) + +GO("libudev.so.0", udev0) +GO("libudev.so.1", udev1) +GO("libudev.so", udev1) +GO("libuuid.so.1", libuuid) + +GO("crashhandler.so", crashhandler) +GO("libtcmalloc_minimal.so.0", tcmallocminimal) +GO("libtcmalloc_minimal.so.4", tcmallocminimal) diff --git a/src/library_list_static_32.h b/src/library_list_static_32.h new file mode 100644 index 0000000000000000000000000000000000000000..525b5bef598ab4cc0983ec4170bfe5cd6f82156d --- /dev/null +++ b/src/library_list_static_32.h @@ -0,0 +1,10 @@ +#ifndef GO +#error Nope +#endif + +GO("libpthread.so.0", libpthread) +GO("librt.so.1", librt) +GO("libc.so.6", libc) +GO("libm.so.6", libm) +GO("libdl.so.2", libdl) +GO("ld-linux.so.2", ldlinux) diff --git a/src/libtools/auxval.c b/src/libtools/auxval.c index 789902dff70b6cfdce220f04fddbdb238d3f6970..1e4b60454b4b18b113ea077995cddc87ebc9a4b0 100644 --- a/src/libtools/auxval.c +++ b/src/libtools/auxval.c @@ -49,8 +49,25 @@ unsigned long real_getauxval(unsigned long type) return 0; } +#ifdef BOX32 +EXPORT unsigned long my32_getauxval(x64emu_t* emu, unsigned long type) +{ + ptr_t* p = (ptr_t*)emu->context->auxval_start; + while(*p) { + if(*p == type) + return p[1]; + p+=2; + } + return 0; +} +#endif + EXPORT unsigned long my_getauxval(x64emu_t* emu, unsigned long type) { + #ifdef BOX32 + if(box64_is32bits) + return my32_getauxval(emu, type); + #endif uintptr_t* p = emu->context->auxval_start; while(*p) { if(*p == type) diff --git a/src/libtools/libc_net32.c b/src/libtools/libc_net32.c new file mode 100644 index 0000000000000000000000000000000000000000..d625b3a753d77bd59e5f8a9bc2f53d7229ea42b3 --- /dev/null +++ b/src/libtools/libc_net32.c @@ -0,0 +1,301 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "box64stack.h" +#include "x64emu.h" +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "callback.h" +#include "librarian.h" +#include "emu/x64emu_private.h" +#include "box32context.h" +#include "myalign32.h" +#include "fileutils.h" +#include "globalsymbols.h" +#include "box32.h" +#include "converter32.h" + +EXPORT ssize_t my32_recvmsg(x64emu_t* emu, int socket, struct i386_msghdr* msg, int flags) +{ + struct iovec iov[msg->msg_iovlen]; + struct msghdr m; + uint8_t buff[msg->msg_controllen+256]; + AlignMsgHdr_32(&m, iov, buff, msg, 0); + ssize_t ret = recvmsg(socket, &m, flags); + UnalignMsgHdr_32(msg, &m); + return ret; +} + +EXPORT ssize_t my32_sendmsg(x64emu_t* emu, int socket, struct i386_msghdr* msg, int flags) +{ + struct iovec iov[msg->msg_iovlen]; + struct msghdr m; + uint8_t buff[msg->msg_controllen+256]; + AlignMsgHdr_32(&m, iov, buff, msg, 1); + ssize_t ret = sendmsg(socket, &m, flags); + UnalignMsgHdr_32(msg, &m); + return ret; +} + +EXPORT void* my32___cmsg_nxthdr(struct i386_msghdr* mhdr, struct i386_cmsghdr* cmsg) +{ + // simpler to redo, also, will be used internaly + if(cmsg->cmsg_len < sizeof(struct i386_cmsghdr)) + return NULL; + // compute next + cmsg = (struct i386_cmsghdr*)(((uintptr_t)cmsg) + ((cmsg->cmsg_len+3)&~3)); + // check it still inside limits + if((uintptr_t)(cmsg+1) > mhdr->msg_control+mhdr->msg_controllen) + return NULL; + if((uintptr_t)(cmsg)+cmsg->cmsg_len > mhdr->msg_control+mhdr->msg_controllen) + return NULL; + return cmsg; +} + +EXPORT int my32_getaddrinfo(x64emu_t* emu, void* node, void* service, struct i386_addrinfo* hints, ptr_t* res) +{ + struct addrinfo* hints_ = (struct addrinfo*)hints; // only first part is used, wich is identical + struct addrinfo* p = {0}; + int ret = getaddrinfo(node, service, hints_, &p); + if(!ret && p) { + // counting the number of "next" + struct addrinfo* p2 = p; + int idx = 0; + while(p2) {++idx; p2 = p2->ai_next;} + // doing the malloc! + void* r = actual_malloc(idx*sizeof(struct i386_addrinfo)+sizeof(void*)); + ptr_t p3 = to_ptrv(r); + *res = p3; + p2 = p; + for(int i=0; iai_flags = p2->ai_flags; + dest->ai_family = p2->ai_family; + dest->ai_socktype = p2->ai_socktype; + dest->ai_protocol = p2->ai_protocol; + dest->ai_addrlen = p2->ai_addrlen; + dest->ai_addr = to_ptrv(p2->ai_addr); + dest->ai_canonname = to_cstring(p2->ai_canonname); + p2 = p2->ai_next; + dest->ai_next = p2?p3:0; + } + } else + *res = 0; + return ret; +} + +EXPORT void my32_freeaddrinfo(x64emu_t* emu, void* a) { + if(!a) return; + void* orig = *(void**)(a+sizeof(struct i386_addrinfo)); + freeaddrinfo(orig); + actual_free(a); +} + +EXPORT void* my32_gethostbyname(x64emu_t* emu, const char* a) +{ + static struct i386_hostent ret = {0}; + static ptr_t strings[128] = {0}; + struct hostent* h = gethostbyname(a); + if(!h) return NULL; + // convert... + ret.h_name = to_cstring(h->h_name); + ret.h_addrtype = h->h_addrtype; + ret.h_length = h->h_length; + ptr_t s = to_ptrv(&strings); + int idx = 0; + ret.h_aliases = h->h_aliases?s:0; + if(h->h_aliases) { + char** p = h->h_aliases; + while(*p) { + strings[idx++] = to_cstring(*p); + ++p; + } + strings[idx++] = 0; + } + ret.h_addr_list = h->h_addr_list?to_ptrv(&strings[idx]):0; + if(h->h_addr_list) { + char** p = h->h_addr_list; + while(*p) { + strings[idx++] = to_ptrv(*p); + ++p; + } + strings[idx++] = 0; + } + // done + emu->libc_herr = h_errno; + return &ret; +} + +EXPORT int my32_gethostbyname_r(x64emu_t* emu, void* name, struct i386_hostent* ret, void* buff, size_t buflen, ptr_t* result, int* h_err) +{ + struct hostent ret_l = {0}; + struct hostent *result_l = NULL; + int r = gethostbyname_r(name, &ret_l, buff, buflen, &result_l, h_err); + if(!result_l) + *result = 0; + else + *result = to_ptrv(ret); + // convert result, all memory allocated should be in program space + if(result_l) { + ret->h_name = to_cstring(result_l->h_name); + ret->h_addrtype = result_l->h_addrtype; + ret->h_length = result_l->h_length; + int idx = 0; + ret->h_aliases = to_ptrv(result_l->h_aliases); + if(result_l->h_aliases) { + char** p = result_l->h_aliases; + ptr_t* strings = from_ptrv(ret->h_aliases); + while(*p) { + strings[idx++] = to_cstring(*p); + ++p; + } + strings[idx++] = 0; + } + ret->h_addr_list = to_ptrv(result_l->h_addr_list); + if(result_l->h_addr_list) { + char** p = result_l->h_addr_list; + ptr_t* strings = from_ptrv(ret->h_addr_list); + while(*p) { + strings[idx++] = to_ptrv(*p); + ++p; + } + strings[idx++] = 0; + } + } + return r; +} + +EXPORT int my32_gethostbyaddr_r(x64emu_t* emu, void* addr, uint32_t len, int type, struct i386_hostent* ret, void* buff, size_t buflen, ptr_t* result, int* h_err) +{ + struct hostent ret_l = {0}; + struct hostent *result_l = NULL; + int r = gethostbyaddr_r(addr, len, type, &ret_l, buff, buflen, &result_l, h_err); + if(!result_l) + *result = 0; + else + *result = to_ptrv(ret); + // convert result, all memory allocated should be in program space + if(result_l) { + ret->h_name = to_cstring(result_l->h_name); + ret->h_addrtype = result_l->h_addrtype; + ret->h_length = result_l->h_length; + int idx = 0; + ret->h_aliases = to_ptrv(result_l->h_aliases); + if(result_l->h_aliases) { + char** p = result_l->h_aliases; + ptr_t* strings = from_ptrv(ret->h_aliases); + while(*p) { + strings[idx++] = to_cstring(*p); + ++p; + } + strings[idx++] = 0; + } + ret->h_addr_list = to_ptrv(result_l->h_addr_list); + if(result_l->h_addr_list) { + char** p = result_l->h_addr_list; + ptr_t* strings = from_ptrv(ret->h_addr_list); + while(*p) { + strings[idx++] = to_ptrv(*p); + ++p; + } + strings[idx++] = 0; + } + } + return r; +} + +struct i386_ifaddrs +{ + ptr_t ifa_next; // struct ifaddrs * + ptr_t ifa_name; // char * + uint32_t ifa_flags; + ptr_t ifa_addr; // struct sockaddr * + ptr_t ifa_netmask;// struct sockaddr * + ptr_t ifa_ifu; // union of struct sockaddr + ptr_t ifa_data; // void * +}; + +EXPORT int my32_getifaddrs(x64emu_t* emu, void** res) +{ + int ret = getifaddrs((void*)res); + if(!ret) { + // convert the chained list of ifaddrs to i386 (narrowed) in place + struct ifaddrs* p = *res; + while(p) { + struct i386_ifaddrs *i386 = (struct i386_ifaddrs*)p; + struct ifaddrs* next = p->ifa_next; + i386->ifa_next = to_ptrv(p->ifa_next); + i386->ifa_name = to_cstring(p->ifa_name); + i386->ifa_flags = p->ifa_flags; + i386->ifa_addr = to_ptrv(p->ifa_addr); + i386->ifa_netmask = to_ptrv(p->ifa_netmask); + i386->ifa_ifu = (i386->ifa_flags&IFF_BROADCAST)?to_ptrv(p->ifa_broadaddr):to_ptrv(p->ifa_dstaddr); + i386->ifa_data = to_ptrv(p->ifa_data); + p = next; + } + } +} + +EXPORT void* my32___h_errno_location(x64emu_t* emu) +{ + // TODO: Find a better way to do this + // cannot use __thread as it makes the address not 32bits + emu->libc_herr = h_errno; + return &emu->libc_herr; +} + +struct protoent_32 +{ + ptr_t p_name; //char* + ptr_t p_aliases;// char** + int p_proto; +}; + +EXPORT void* my32_getprotobyname(x64emu_t* emu, void* name) +{ + static struct protoent_32 my_protoent = {0}; + static ptr_t strings[256]; + struct protoent *ret = getprotobyname(name); + if(!ret) + return NULL; + my_protoent.p_name = to_cstring(ret->p_name); + my_protoent.p_proto = ret->p_proto; + if(ret->p_aliases) { + my_protoent.p_aliases = to_ptrv(&strings); + int i = 0; + while(ret->p_aliases[i]) { + strings[i] = to_cstring(ret->p_aliases[i]); + ++i; + } + strings[i] = 0; + } else + my_protoent.p_aliases = 0; + + return &my_protoent; +} \ No newline at end of file diff --git a/src/libtools/my_x11_conv.c b/src/libtools/my_x11_conv.c new file mode 100644 index 0000000000000000000000000000000000000000..68875a341dc447f98ccf27c5981989d107b68b22 --- /dev/null +++ b/src/libtools/my_x11_conv.c @@ -0,0 +1,1001 @@ +#include +#include + +#include "debug.h" +#include "box32context.h" +#include "wrapper32.h" +#include "library.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "converter32.h" +#include "my_x11_defs.h" +#include "my_x11_defs_32.h" +#include "my_x11_conv.h" + +typedef struct Visuals_s { + my_Visual_t* _64; + my_Visual_32_t* _32; + int ref; // 0 is 64, 1 is 32 +} Visuals_t; +KHASH_MAP_INIT_INT(visuals, Visuals_t); + +#define N_DISPLAY 4 +my_XDisplay_t* my32_Displays_64[N_DISPLAY] = {0}; +struct my_XFreeFuncs_32 my32_free_funcs_32[N_DISPLAY] = {0}; +struct my_XLockPtrs_32 my32_lock_fns_32[N_DISPLAY] = {0}; +my_XDisplay_32_t my32_Displays_32[N_DISPLAY] = {0}; +kh_visuals_t* my32_Displays_Visuals[N_DISPLAY] = {0}; + +void* getDisplay(void* d) +{ + if(!d) return d; + for(int i=0; iext_data = to_ptrv(src->ext_data); + dst->display = to_ptrv(FindDisplay(src->display)); + dst->root = to_ulong(src->root); + dst->width = src->width; + dst->height = src->height; + dst->mwidth = src->mwidth; + dst->mheight = src->mheight; + dst->ndepths = src->ndepths; + dst->depths = to_ptrv(src->depths); + dst->root_depth = src->root_depth; + dst->root_visual = to_ptrv(src->root_visual); + dst->default_gc = to_ptrv(src->default_gc); + dst->cmap = to_ulong(src->cmap); + dst->white_pixel = to_ulong(src->white_pixel); + dst->black_pixel = to_ulong(src->black_pixel); + dst->max_maps = src->max_maps; + dst->min_maps = src->min_maps; + dst->backing_store = src->backing_store; + dst->save_unders = src->save_unders; + dst->root_input_mask = to_long(src->root_input_mask); +} + +void internal_convert_Visual_to_32(void* d, void* s) +{ + my_Visual_t* src = s; + my_Visual_32_t* dst = d; + dst->ext_data = to_ptrv(src->ext_data); + dst->visualid = to_ulong(src->visualid); + dst->c_class = src->c_class; + dst->red_mask = to_ulong(src->red_mask); + dst->green_mask = to_ulong(src->green_mask); + dst->blue_mask = to_ulong(src->blue_mask); + dst->bits_per_rgb = src->bits_per_rgb; + dst->map_entries = src->map_entries; +} +void internal_convert_Visual_to_64(void* d, void* s) +{ + my_Visual_32_t* src = s; + my_Visual_t* dst = d; + dst->map_entries = src->map_entries; + dst->bits_per_rgb = src->bits_per_rgb; + dst->blue_mask = from_ulong(src->blue_mask); + dst->green_mask = from_ulong(src->green_mask); + dst->red_mask = from_ulong(src->red_mask); + dst->c_class = src->c_class; + dst->visualid = from_ulong(src->visualid); + dst->ext_data = from_ptrv(src->ext_data); +} + +my_Visual_32_t* getVisual32(int N, my_Visual_t* a) +{ + if(!a) return NULL; + uint32_t key = a->visualid; + khint_t k = kh_get(visuals, my32_Displays_Visuals[N], key); + Visuals_t* ret = NULL; + if(k==kh_end(my32_Displays_Visuals[N])) { + int r; + k = kh_put(visuals, my32_Displays_Visuals[N], key, &r); + ret = &kh_value(my32_Displays_Visuals[N], k); + ret->_32 = calloc(1, sizeof(my_Visual_32_t)); + ret->_64 = a; + ret->ref = 0; + internal_convert_Visual_to_32(ret->_32, ret->_64); + } else + ret = &kh_value(my32_Displays_Visuals[N], k); + return ret->_32; +} +my_Visual_t* getVisual64(int N, my_Visual_32_t* a) +{ + if(!a) return NULL; + uint32_t key = a->visualid; + khint_t k = kh_get(visuals, my32_Displays_Visuals[N], key); + Visuals_t* ret = NULL; + if(k==kh_end(my32_Displays_Visuals[N])) { + int r; + k = kh_put(visuals, my32_Displays_Visuals[N], key, &r); + ret = &kh_value(my32_Displays_Visuals[N], k); + ret->_64 = calloc(1, sizeof(my_Visual_t)); + ret->_32 = a; + ret->ref = 1; + internal_convert_Visual_to_64(ret->_64, ret->_32); + } else + ret = &kh_value(my32_Displays_Visuals[N], k); + return ret->_64; +} + +void* convert_Visual_to_32(void* dpy, void* a) +{ + if(!dpy) return a; + for(int i=0; ilibx11) { + // the lib has not be loaded directly... need to open it! leaking the lib handle... + #ifdef ANDROID + my_dlopen(thread_get_emu(), "libX11.so", RTLD_NOW); + #else + my_dlopen(thread_get_emu(), "libX11.so.6", RTLD_NOW); + #endif + } + my_XDisplay_t* dpy = (my_XDisplay_t*)d; + // look for a free slot, or a display already there + my_XDisplay_32_t* ret = NULL; + struct my_XFreeFuncs_32 *free_funcs = NULL; + struct my_XLockPtrs_32 *lock_fns = NULL; + for(int i=0; ifree_funcs = to_ptrv(free_funcs); + lock_fns = &my32_lock_fns_32[i]; + ret->lock_fns = to_ptrv(lock_fns); + my32_Displays_Visuals[i] = kh_init(visuals); + } + } + if(!ret) { + printf_log(LOG_INFO, "BOX32: No more slot available for libX11 Display!"); + return d; + } + + bridge_t* system = my_context->libx11->w.bridge; + + // partial copy... + + #define GO(A, W)\ + if(dpy->A) \ + if(!CheckBridged(system, dpy->A)) \ + ret->A = AddCheckBridge(system, W, dpy->A, 0, #A); \ + + #define GO2(A, B, W) \ + if(dpy->A && dpy->A->B) \ + if(!CheckBridged(system, dpy->A->B)) \ + A->B = AddCheckBridge(system, W, dpy->A->B, 0, #B "_" #A); \ + + ret->vendor = to_cstring(dpy->vendor); + ret->fd = dpy->fd; + ret->conn_checker = dpy->conn_checker; + ret->proto_major_version = dpy->proto_major_version; + ret->proto_minor_version = dpy->proto_minor_version; + ret->resource_base = to_ulong(dpy->resource_base); + ret->resource_mask = to_ulong(dpy->resource_mask); + ret->resource_id = to_ulong(dpy->resource_id); + ret->xdefaults = to_cstring(dpy->xdefaults); + ret->resource_shift = dpy->resource_shift; + ret->byte_order = dpy->byte_order; + ret->bitmap_unit = dpy->bitmap_unit; + ret->bitmap_pad = dpy->bitmap_pad; + ret->bitmap_bit_order = dpy->bitmap_bit_order; + ret->display_name = to_cstring(dpy->display_name); + ret->default_screen = dpy->default_screen; + ret->nscreens = dpy->nscreens; + if(dpy->screens) { + my_Screen_32_t* screens = calloc(dpy->nscreens, sizeof(my_Screen_32_t)); + ret->screens = to_ptrv(screens); + for(int i=0; inscreens; ++i) { + convert_Screen_to_32(screens+i, dpy->screens+i); + screens[i].root_visual = to_ptrv(getVisual32(i, dpy->screens[i].root_visual)); + } + } else + ret->screens = 0; + + GO2(free_funcs, atoms, vFp_32) + GO2(free_funcs, modifiermap, iFp_32) + GO2(free_funcs, key_bindings, vFp_32) + GO2(free_funcs, context_db, vFp_32) + GO2(free_funcs, defaultCCCs, vFp_32) + GO2(free_funcs, clientCmaps, vFp_32) + GO2(free_funcs, intensityMaps, vFp_32) + GO2(free_funcs, im_filters, vFp_32) + GO2(free_funcs, xkb, vFp_32) + GO(resource_alloc, LFp_32) + GO(synchandler, iFp_32) + //TODO: ext_procs? + //TODO: event_vec? + //TODO: wire_vec? + //TODO: async_handlers? + GO2(lock_fns, lock_display, vFp_32) + GO2(lock_fns, unlock_display, vFp_32) + GO(idlist_alloc, vFppi_32) + //TODO: error_vec? + //TODO: flushes + //TODO: im_fd_info? + //TODO: conn_watchers + GO(savedsynchandler, iFp_32) + //TODO: generic_event_vec? + //TODO: generic_event_copy_vec? + + + #undef GO + #undef GO2 + + return ret; +} + +void delDisplay(void* d) +{ + for(int i=0; iref) free(v->_64); else free(v->_32)); + kh_destroy(visuals, my32_Displays_Visuals[i]); + my32_Displays_Visuals[i] = NULL; + return; + } + } +} + +void refreshDisplay(void* dpy) +{ + // update some of the values now that the screen is locked + my_XDisplay_t* src = dpy; + my_XDisplay_32_t* dst = FindDisplay(dpy); + // sync last request + dst->request = src->request; + // sync screens + if(dst->nscreens!=src->nscreens) { + my_Screen_32_t* screens = from_ptrv(dst->screens); + dst->nscreens = src->nscreens; + screens = realloc(screens, dst->nscreens*sizeof(my_Screen_32_t)); + dst->screens = to_ptrv(screens); + for(int i=0; inscreens; ++i) + convert_Screen_to_32(screens+i, src->screens+i); + } +} + +void convert_XWMints_to_64(void* d, void* s) +{ + my_XWMHints_t* dst = d; + my_XWMHints_32_t* src = s; + long flags = from_long(src->flags); + // reverse order + if(flags&XWMHint_WindowGroupHint) dst->window_group = from_ulong(src->window_group); + if(flags&XWMHint_IconMaskHint) dst->icon_mask = from_ulong(src->icon_mask); + if(flags&XWMHint_IconPositionHint) {dst->icon_y = src->icon_y; dst->icon_x = src->icon_x;} + if(flags&XWMHint_IconWindowHint) dst->icon_window = from_ulong(src->icon_window); + if(flags&XWMHint_IconPixmapHint) dst->icon_pixmap = from_ulong(src->icon_pixmap); + if(flags&XWMHint_StateHint) dst->initial_state = src->initial_state; + if(flags&XWMHint_InputHint) dst->input = src->input; + + dst->flags = flags; +} +void inplace_enlarge_wmhints(void* hints) +{ + if(!hints) return; + my_XWMHints_32_t* src = hints; + my_XWMHints_t* dst = hints; + long flags = from_long(src->flags); + // reverse order + if(flags&XWMHint_WindowGroupHint) dst->window_group = from_ulong(src->window_group); + if(flags&XWMHint_IconMaskHint) dst->icon_mask = from_ulong(src->icon_mask); + if(flags&XWMHint_IconPositionHint) {dst->icon_y = src->icon_y; dst->icon_x = src->icon_x;} + if(flags&XWMHint_IconWindowHint) dst->icon_window = from_ulong(src->icon_window); + if(flags&XWMHint_IconPixmapHint) dst->icon_pixmap = from_ulong(src->icon_pixmap); + if(flags&XWMHint_StateHint) dst->initial_state = src->initial_state; + if(flags&XWMHint_InputHint) dst->input = src->input; + + dst->flags = flags; +} +void inplace_shrink_wmhints(void* hints) +{ + if(!hints) return; + my_XWMHints_t* src = hints; + my_XWMHints_32_t* dst = hints; + long_t flags = to_long(src->flags); + // forward order + if(flags&XWMHint_InputHint) dst->input = src->input; + if(flags&XWMHint_StateHint) dst->initial_state = src->initial_state; + if(flags&XWMHint_IconPixmapHint) dst->icon_pixmap = to_ulong(src->icon_pixmap); + if(flags&XWMHint_IconWindowHint) dst->icon_window = to_ulong(src->icon_window); + if(flags&XWMHint_IconPositionHint) {dst->icon_y = src->icon_y; dst->icon_x = src->icon_x;} + if(flags&XWMHint_IconMaskHint) dst->icon_mask = to_ulong(src->icon_mask); + if(flags&XWMHint_WindowGroupHint) dst->window_group = to_ulong(src->window_group); + + dst->flags = flags; +} + +void convert_XSizeHints_to_64(void* d, void *s) +{ + //XSizeHints is a long flag and 17*int... + long flags = to_long(*(long_t*)s); + memcpy(d+8, s+4, 17*4); + *(long*)d = flags; +} +void inplace_enlarge_wmsizehints(void* hints) +{ + //XSizeHints is a long flag and 17*int... + long flags = to_long(*(long_t*)hints); + memmove(hints+8, hints+4, 17*4); + *(long*)hints = flags; +} +void inplace_shrink_wmsizehints(void* hints) +{ + //XSizeHints is a long flag and 17*int... + long_t flags = from_long(*(long*)hints); + memmove(hints+4, hints+8, 17*4); + *(long_t*)hints = flags; +} + +void convert_XWindowAttributes_to_32(void* dpy, void* d, void* s) +{ + my_XWindowAttributes_t* src = s; + my_XWindowAttributes_32_t* dst = d; + dst->x = src->x; + dst->y = src->y; + dst->width = src->width; + dst->height = src->height; + dst->border_width = src->border_width; + dst->depth = src->depth; + dst->visual = to_ptrv(convert_Visual_to_32(dpy, src->visual)); + dst->root = to_ulong(src->root); + dst->c_class = src->c_class; + dst->bit_gravity = src->bit_gravity; + dst->win_gravity = src->win_gravity; + dst->backing_store = src->backing_store; + dst->backing_planes = to_ulong(src->backing_planes); + dst->backing_pixel = to_ulong(src->backing_pixel); + dst->save_under = src->save_under; + dst->colormap = to_ulong(src->colormap); + dst->map_installed = src->map_installed; + dst->map_state = src->map_state; + dst->all_event_masks = to_long(src->all_event_masks); + dst->your_event_mask = to_long(src->your_event_mask); + dst->do_not_propagate_mask = to_long(src->do_not_propagate_mask); + dst->override_redirect = src->override_redirect; + dst->screen = to_ptrv(src->screen); +} + +void inplace_XModifierKeymap_shrink(void* a) +{ + my_XModifierKeymap_32_t *d = a; + my_XModifierKeymap_t* s = a; + + d->max_keypermod = s->max_keypermod; + d->modifiermap = to_ptrv(s->modifiermap); +} +void inplace_XModifierKeymap_enlarge(void* a) +{ + my_XModifierKeymap_t *d = a; + my_XModifierKeymap_32_t* s = a; + + d->modifiermap = from_ptrv(s->modifiermap); + d->max_keypermod = s->max_keypermod; +} + +void convert_XVisualInfo_to_32(void* dpy, my_XVisualInfo_32_t* dst, my_XVisualInfo_t* src) +{ + dst->visual = to_ptrv(convert_Visual_to_32(dpy, src->visual)); + dst->visualid = to_ulong(src->visualid); + dst->screen = src->screen; + dst->depth = src->depth; + dst->c_class = src->c_class; + dst->red_mask = to_ulong(src->red_mask); + dst->green_mask = to_ulong(src->green_mask); + dst->blue_mask = to_ulong(src->blue_mask); + dst->colormap_size = src->colormap_size; + dst->bits_per_rgb = src->bits_per_rgb; +} +void convert_XVisualInfo_to_64_novisual(void* dpy, my_XVisualInfo_t* dst, my_XVisualInfo_32_t* src) +{ + dst->bits_per_rgb = src->bits_per_rgb; + dst->colormap_size = src->colormap_size; + dst->blue_mask = from_ulong(src->blue_mask); + dst->green_mask = from_ulong(src->green_mask); + dst->red_mask = from_ulong(src->red_mask); + dst->c_class = src->c_class; + dst->depth = src->depth; + dst->screen = src->screen; + dst->visualid = from_ulong(src->visualid); + dst->visual = NULL; +} +void convert_XVisualInfo_to_64(void* dpy, my_XVisualInfo_t* dst, my_XVisualInfo_32_t* src) +{ + dst->bits_per_rgb = src->bits_per_rgb; + dst->colormap_size = src->colormap_size; + dst->blue_mask = from_ulong(src->blue_mask); + dst->green_mask = from_ulong(src->green_mask); + dst->red_mask = from_ulong(src->red_mask); + dst->c_class = src->c_class; + dst->depth = src->depth; + dst->screen = src->screen; + dst->visualid = from_ulong(src->visualid); + dst->visual = convert_Visual_to_64(dpy, from_ptrv(src->visual)); +} +void inplace_XVisualInfo_shrink(void* dpy, void *a) +{ + if(!a) return; + my_XVisualInfo_t *src = a; + my_XVisualInfo_32_t* dst = a; + + convert_XVisualInfo_to_32(dpy, dst, src); +} +void inplace_XVisualInfo_enlarge(void* dpy, void *a) +{ + if(!a) return; + my_XVisualInfo_32_t *src = a; + my_XVisualInfo_t* dst = a; + + convert_XVisualInfo_to_64(dpy, dst, src); +} + +void inplace_XdbeVisualInfo_shrink(void* a) +{ + if(!a) return; + my_XdbeVisualInfo_t *src = a; + my_XdbeVisualInfo_32_t* dst = a; + + dst->visual = to_ulong(src->visual); + dst->depth = src->depth; + dst->perflevel = src->perflevel; +} +void inplace_XdbeScreenVisualInfo_shrink(void* a) +{ + if(!a) return; + my_XdbeScreenVisualInfo_t *src = a; + my_XdbeScreenVisualInfo_32_t* dst = a; + + for(int i=0; icount; ++i) + inplace_XdbeVisualInfo_shrink(src->visinfo+i); + dst->count = src->count; + dst->visinfo = to_ptrv(src->visinfo); +} +void inplace_XdbeVisualInfo_enlarge(void* a) +{ + if(!a) return; + my_XdbeVisualInfo_32_t *src = a; + my_XdbeVisualInfo_t* dst = a; + + dst->perflevel = src->perflevel; + dst->depth = src->depth; + dst->visual = from_ulong(src->visual); +} +void inplace_XdbeScreenVisualInfo_enlarge(void* a) +{ + if(!a) return; + my_XdbeScreenVisualInfo_32_t *src = a; + my_XdbeScreenVisualInfo_t* dst = a; + + dst->visinfo = from_ptrv(src->visinfo); + dst->count = src->count; + for(int i=dst->count-1; i>=0; --i) + inplace_XdbeVisualInfo_enlarge(dst->visinfo+i); +} + +void inplace_XExtDisplayInfo_shrink(void* a) +{ + if(!a) return; + my_XExtDisplayInfo_t* src = a; + my_XExtDisplayInfo_32_t* dst = a; + + dst->next = to_ptrv(src->next); + dst->display = to_ptrv(getDisplay(src->display)); + dst->codes = to_ptrv(src->codes); + dst->data = to_ptrv(src->data); +} +void inplace_XExtDisplayInfo_enlarge(void* a) +{ + if(!a) return; + my_XExtDisplayInfo_32_t* src = a; + my_XExtDisplayInfo_t* dst = a; + + dst->data = from_ptrv(src->data); + dst->codes = from_ptrv(src->codes); + dst->display = FindDisplay(from_ptrv(src->display)); + dst->next = from_ptrv(src->next); +} + +void* inplace_XExtensionInfo_shrink(void* a) +{ + if(!a) return a; + my_XExtensionInfo_t* src = a; + my_XExtensionInfo_32_t* dst = a; + + my_XExtDisplayInfo_t* head = src->head; + while(head) { + my_XExtDisplayInfo_t* next = head->next; + inplace_XExtDisplayInfo_shrink(head); + head = next; + } + dst->head = to_ptrv(src->head); + dst->cur = to_ptrv(src->cur); + dst->ndisplays = src->ndisplays; + return a; +} +void* inplace_XExtensionInfo_enlarge(void* a) +{ + if(!a) return a; + my_XExtensionInfo_32_t* src = a; + my_XExtensionInfo_t* dst = a; + + dst->ndisplays = src->ndisplays; + dst->cur = from_ptrv(src->cur); + dst->head = from_ptrv(src->head); + my_XExtDisplayInfo_t* head = dst->head; + while(head) { + inplace_XExtDisplayInfo_enlarge(head); + head = head->next; + } + return a; +} + +void convert_XFontProp_to_32(my_XFontProp_32_t* dst, my_XFontProp_t* src) +{ + dst->name = to_ulong(src->name); + dst->card32 = to_ulong(src->card32); +} +void inplace_XFontProp_shrink(void* a) +{ + if(!a) return; + my_XFontProp_t* src = a; + my_XFontProp_32_t* dst = a; + convert_XFontProp_to_32(dst, src); +} +void convert_XFontProp_to_64(my_XFontProp_t* dst, my_XFontProp_32_t* src) +{ + dst->card32 = from_ulong(src->card32); + dst->name = from_ulong(src->name); +} +void inplace_XFontProp_enlarge(void* a) +{ + if(!a) return; + my_XFontProp_32_t* src = a; + my_XFontProp_t* dst = a; + convert_XFontProp_to_64(dst, src); +} +void inplace_XFontStruct_shrink(void* a) +{ + if(!a) return; + my_XFontStruct_t* src = a; + my_XFontStruct_32_t* dst = a; + + my_XFontProp_32_t* properties_s = (my_XFontProp_32_t*)src->properties; + for(int i=0; in_properties; ++i) + convert_XFontProp_to_32(properties_s+i, src->properties+i); + + dst->ext_data = to_ptrv(src->ext_data); + dst->fid = to_ulong(src->fid); + dst->direction = src->direction; + dst->min_char_or_byte2 = src->min_char_or_byte2; + dst->max_char_or_byte2 = src->max_char_or_byte2; + dst->min_byte1 = src->min_byte1; + dst->max_byte1 = src->max_byte1; + dst->all_chars_exist = src->all_chars_exist; + dst->default_char = src->default_char; + dst->n_properties = src->n_properties; + dst->properties = to_ptrv(src->properties); + memmove(&dst->min_bounds, &src->min_bounds, sizeof(dst->min_bounds)); + memmove(&dst->max_bounds, &src->max_bounds, sizeof(dst->max_bounds)); + dst->per_char = to_ptrv(src->per_char); + dst->ascent = src->ascent; + dst->descent = src->descent; +} +void inplace_XFontStruct_enlarge(void* a) +{ + if(!a) return; + my_XFontStruct_32_t* src = a; + my_XFontStruct_t* dst = a; + + dst->descent = src->descent; + dst->ascent = src->ascent; + dst->per_char = from_ptrv(src->per_char); + memmove(&dst->max_bounds, &src->max_bounds, sizeof(dst->max_bounds)); + memmove(&dst->min_bounds, &src->min_bounds, sizeof(dst->min_bounds)); + dst->properties = from_ptrv(src->properties); + dst->n_properties = src->n_properties; + dst->default_char = src->default_char; + dst->all_chars_exist = src->all_chars_exist; + dst->max_byte1 = src->max_byte1; + dst->min_byte1 = src->min_byte1; + dst->max_char_or_byte2 = src->max_char_or_byte2; + dst->min_char_or_byte2 = src->min_char_or_byte2; + dst->direction = src->direction; + dst->fid = from_ulong(src->fid); + dst->ext_data = from_ptrv(src->ext_data); + + my_XFontProp_32_t* properties_s = (my_XFontProp_32_t*)dst->properties; + for(int i=dst->n_properties-1; i>=0; --i) + convert_XFontProp_to_64(dst->properties+i, properties_s+i); +} + +void convert_XSetWindowAttributes_to_64(my_XSetWindowAttributes_t* dst, my_XSetWindowAttributes_32_t* src) +{ + dst->background_pixmap = from_ulong(src->background_pixmap); + dst->background_pixel = from_ulong(src->background_pixel); + dst->border_pixmap = from_ulong(src->border_pixmap); + dst->border_pixel = from_ulong(src->border_pixel); + dst->bit_gravity = src->bit_gravity; + dst->win_gravity = src->win_gravity; + dst->backing_store = from_ulong(src->backing_store); + dst->backing_planes = from_ulong(src->backing_planes); + dst->backing_pixel = src->backing_pixel; + dst->save_under = src->save_under; + dst->event_mask = from_long(src->event_mask); + dst->do_not_propagate_mask = from_long(src->do_not_propagate_mask); + dst->override_redirect = src->override_redirect; + dst->colormap = from_ulong(src->colormap); + dst->cursor = from_ulong(src->cursor); +} + +void* inplace_XImage_shrink(void* a) +{ + if(!a) return NULL; + WrapXImage(a, a); + return a; +} +void* inplace_XImage_enlarge(void* a) +{ + if(!a) return NULL; + UnwrapXImage(a, a); + return a; +} + +void convert_XRRModeInfo_to_32(void* d, const void* s) +{ + my_XRRModeInfo_32_t *dst = d; + const my_XRRModeInfo_t *src = s; + dst->id = to_ulong(src->id); + dst->width = src->width; + dst->height = src->height; + dst->dotClock = to_ulong(src->dotClock); + dst->hSyncStart = src->hSyncStart; + dst->hSyncEnd = src->hSyncEnd; + dst->hTotal = src->hTotal; + dst->hSkew = src->hSkew; + dst->vSyncStart = src->vSyncStart; + dst->vSyncEnd = src->vSyncEnd; + dst->vTotal = src->vTotal; + dst->name = to_ptrv(src->name); + dst->nameLength = src->nameLength; + dst->modeFlags = to_ulong(src->modeFlags); +} + +void convert_XRRModeInfo_to_64(void* d, const void* s) +{ + my_XRRModeInfo_t *dst = d; + const my_XRRModeInfo_32_t *src = s; + dst->modeFlags = from_ulong(src->modeFlags); + dst->nameLength = src->nameLength; + dst->name = from_ptrv(src->name); + dst->vTotal = src->vTotal; + dst->vSyncEnd = src->vSyncEnd; + dst->vSyncStart = src->vSyncStart; + dst->hSkew = src->hSkew; + dst->hTotal = src->hTotal; + dst->hSyncEnd = src->hSyncEnd; + dst->hSyncStart = src->hSyncStart; + dst->dotClock = from_ulong(src->dotClock); + dst->height = src->height; + dst->width = src->width; + dst->id = from_ulong(src->id); +} + +void inplace_XRRScreenResources_shrink(void* s) +{ + if(!s) return; + my_XRRScreenResources_32_t *dst = s; + my_XRRScreenResources_t *src = s; + // shrinking, so forward... + for(int i=0; incrtc; ++i) + ((XID_32*)src->crtcs)[i] = to_ulong(src->crtcs[i]); + for(int i=0; inoutput; ++i) + ((XID_32*)src->outputs)[i] = to_ulong(src->outputs[i]); + for(int i=0; inmode; ++i) + convert_XRRModeInfo_to_32(&((my_XRRModeInfo_32_t*)src->modes)[i], &src->modes[i]); + dst->timestamp = to_ulong(src->timestamp); + dst->configTimestamp = to_ulong(src->configTimestamp); + dst->ncrtc = src->ncrtc; + dst->crtcs = to_ptrv(src->crtcs); + dst->noutput = src->noutput; + dst->outputs = to_ptrv(src->outputs); + dst->nmode = src->nmode; + dst->modes = to_ptrv(src->modes); +} + +void inplace_XRRScreenResources_enlarge(void* s) +{ + if(!s) return; + my_XRRScreenResources_t *dst = s; + my_XRRScreenResources_32_t *src = s; + // enlarge, so backward... + int nmode = src->nmode; + int noutput = src->noutput; + int ncrtc = src->ncrtc; + dst->modes = from_ptrv(src->modes); + dst->nmode = src->nmode; + dst->outputs = from_ptrv(src->outputs); + dst->noutput = src->noutput; + dst->crtcs = from_ptrv(src->crtcs); + dst->ncrtc = src->ncrtc; + dst->configTimestamp = to_ulong(src->configTimestamp); + dst->timestamp = to_ulong(src->timestamp); + for(int i=nmode-1; i>=0; --i) + convert_XRRModeInfo_to_64(&dst->modes[i], &((my_XRRModeInfo_32_t*)dst->modes)[i]); + for(int i=noutput-1; i>=0; --i) + dst->outputs[i] = from_ulong(((XID_32*)dst->outputs)[i]); + for(int i=ncrtc-1; i>=0; --i) + dst->crtcs[i] = from_ulong(((XID_32*)dst->crtcs)[i]); +} + +void inplace_XRRCrtcInfo_shrink(void* s) +{ + if(!s) return; + my_XRRCrtcInfo_32_t *dst = s; + my_XRRCrtcInfo_t *src = s; + for(int i=0; inoutput; ++i) + ((XID_32*)src->outputs)[i] = to_ulong(src->outputs[i]); + for(int i=0; inpossible; ++i) + ((XID_32*)src->possible)[i] = to_ulong(src->possible[i]); + dst->timestamp = to_ulong(src->timestamp); + dst->x = src->x; + dst->y = src->y; + dst->width = src->width; + dst->height = src->height; + dst->mode = to_ulong(src->mode); + dst->rotation = src->rotation; + dst->noutput = src->noutput; + dst->outputs = to_ptrv(src->outputs); + dst->rotations = src->rotations; + dst->npossible = src->npossible; + dst->possible = to_ptrv(src->possible); +} + +void inplace_XRROutputInfo_shrink(void* s) +{ + if(!s) return; + my_XRROutputInfo_32_t *dst = s; + my_XRROutputInfo_t *src = s; + for(int i=0; incrtc; ++i) + ((XID_32*)src->crtcs)[i] = to_ulong(src->crtcs[i]); + for(int i=0; inclone; ++i) + ((XID_32*)src->clones)[i] = to_ulong(src->clones[i]); + for(int i=0; inmode; ++i) + ((XID_32*)src->modes)[i] = to_ulong(src->modes[i]); + dst->timestamp = to_ulong(src->timestamp); + dst->crtc = src->crtc; + dst->name = to_ptrv(src->name); + dst->nameLen = src->nameLen; + dst->mm_width = to_ulong(src->mm_width); + dst->mm_height = to_ulong(src->mm_height); + dst->connection = src->connection; + dst->subpixel_order = src->subpixel_order; + dst->ncrtc = src->ncrtc; + dst->crtcs = to_ptrv(src->crtcs); + dst->nclone = src->nclone; + dst->clones = to_ptrv(src->clones); + dst->nmode = src->nmode; + dst->npreferred = src->npreferred; + dst->modes = to_ptrv(src->modes); +} + +void inplace_XRRProviderInfo_shrink(void* a) +{ + if(!a) return; + my_XRRProviderInfo_32_t *dst = a; + my_XRRProviderInfo_t* src = a; + + for(int i=0; incrtcs; ++i) + ((ulong_t*)src->crtcs)[i] = to_ulong(src->crtcs[i]); + for(int i=0; inoutputs; ++i) + ((ulong_t*)src->outputs)[i] = to_ulong(src->outputs[i]); + for(int i=0; inassociatedproviders; ++i) + ((ulong_t*)src->associated_providers)[i] = to_ulong(src->associated_providers[i]); + dst->capabilities = src->capabilities; + dst->ncrtcs = src->ncrtcs; + dst->crtcs = to_ptrv(src->crtcs); + dst->noutputs = src->noutputs; + dst->outputs = to_ptrv(src->outputs); + dst->name = to_ptrv(src->name); + dst->nassociatedproviders = src->nassociatedproviders; + dst->associated_providers = to_ptrv(src->associated_providers); + dst->associated_capability = to_ptrv(src->associated_capability); + dst->nameLen = src->nameLen; +} +void inplace_XRRProviderInfo_enlarge(void* a) +{ + if(!a) return; + my_XRRProviderInfo_t *dst = a; + my_XRRProviderInfo_32_t* src = a; + + dst->nameLen = src->nameLen; + dst->associated_capability = from_ptrv(src->associated_capability); + dst->associated_providers = from_ptrv(src->associated_providers); + dst->nassociatedproviders = src->nassociatedproviders; + dst->name = from_ptrv(src->name); + dst->outputs = from_ptrv(src->outputs); + dst->noutputs = src->noutputs; + dst->crtcs = from_ptrv(src->crtcs); + dst->ncrtcs = src->ncrtcs; + dst->capabilities = src->capabilities; + for(int i=dst->ncrtcs-1; i>=0; --i) + dst->crtcs[i] = from_ulong(((ulong_t*)dst->crtcs)[i]); + for(int i=dst->noutputs-1; i>=0; --i) + dst->outputs[i] = from_ulong(((ulong_t*)dst->outputs)[i]); + for(int i=dst->nassociatedproviders-1; i>=0; --i) + dst->associated_providers[i] = from_ulong(((ulong_t*)dst->associated_providers)[i]); +} + +void inplace_XRRProviderResources_shrink(void* a) +{ + if(!a) return; + my_XRRProviderResources_32_t* dst = a; + my_XRRProviderResources_t* src = a; + + for(int i=0; inproviders; ++i) + ((ulong_t*)src->providers)[i] = to_ulong(src->providers[i]); + dst->timestamp = to_long(src->timestamp); + dst->nproviders = src->nproviders; + dst->providers = to_ptrv(src->providers); +} +void inplace_XRRProviderResources_enlarge(void* a) +{ + if(!a) return; + my_XRRProviderResources_t* dst = a; + my_XRRProviderResources_32_t* src = a; + + dst->timestamp = from_long(src->timestamp); + dst->nproviders = src->nproviders; + dst->providers = from_ptrv(src->providers); + for(int i=dst->nproviders-1; i>=0; --i) + dst->providers[i] = from_ulong(((ulong_t*)dst->providers)[i]); +} + +void* inplace_XRRPropertyInfo_shrink(void* a) +{ + if(!a) return NULL; + my_XRRPropertyInfo_t* src = a; + my_XRRPropertyInfo_32_t* dst = a; + + for(int i=0; inum_values; ++i) + ((long_t*)src->values)[i] = to_long(src->values[i]); + dst->pending = src->pending; + dst->range = src->range; + dst->immutable = src->immutable; + dst->num_values = src->num_values; + dst->values = to_ptrv(src->values); + + return a; +} + +void inplace_XIDeviceInfo_shrink(void* a, int n) +{ + if(!a || !n) return; + my_XIDeviceInfo_32_t* dst = a; + my_XIDeviceInfo_t* src = a; + + for(int i=0; ideviceid = src->deviceid; + dst->name = to_ptrv(src->name); + dst->use = src->use; + dst->attachment = src->attachment; + dst->enabled = src->enabled; + for(int j=0; jnum_classes; ++j) + ((ptr_t*)src->classes)[j] = to_ptrv(src->classes[j]); + dst->num_classes = src->num_classes; + dst->classes = to_ptrv(src->classes); + } + // mark last record, even on only 1 record, thos last 2 uint32_t are free + dst->deviceid = 0; + dst->name = 0; +} + +int inplace_XIDeviceInfo_enlarge(void* a) +{ + if(!a) return 0; + my_XIDeviceInfo_t* dst = a; + my_XIDeviceInfo_32_t* src = a; + int n = 0; + while(src[n].deviceid && src[n].name) ++n; + src+=n-1; + dst+=n-1; + for(int i=n-1; i>=0; --i, --src, --dst) { + dst->classes = from_ptrv(src->classes); + dst->num_classes = src->num_classes; + dst->enabled = src->enabled; + dst->attachment = src->attachment; + dst->use = src->use; + dst->name = from_ptrv(src->name); + dst->deviceid = src->deviceid; + for(int j=dst->num_classes-1; j>=0; --j) + dst->classes[j] = from_ptrv(((ptr_t*)dst->classes)[j]); + } + return n; +} + +void inplace_XDevice_shrink(void* a) +{ + if(!a) return; + my_XDevice_t* src = a; + my_XDevice_32_t* dst = a; + + dst->device_id = src->device_id; + dst->num_classes = src->num_classes; + dst->classes = to_ptrv(src->classes); +} +void inplace_XDevice_enlarge(void* a) +{ + if(!a) return; + my_XDevice_32_t* src = a; + my_XDevice_t* dst = a; + + dst->classes = from_ptrv(src->classes); + dst->num_classes = src->num_classes; + dst->device_id = src->device_id; +} + +void convert_XShmSegmentInfo_to_32(void* d, void* s) +{ + my_XShmSegmentInfo_t* src = s; + my_XShmSegmentInfo_32_t* dst = d; + dst->shmseg = to_ulong(src->shmseg); + dst->shmid = src->shmid; + dst->shmaddr = to_ptrv(src->shmaddr); + dst->readOnly = src->readOnly; +} +void convert_XShmSegmentInfo_to_64(void* d, void* s) +{ + my_XShmSegmentInfo_32_t* src = s; + my_XShmSegmentInfo_t* dst = d; + dst->readOnly = src->readOnly; + dst->shmaddr = from_ptrv(src->shmaddr); + dst->shmid = src->shmid; + dst->shmseg = from_ulong(src->shmseg); +} \ No newline at end of file diff --git a/src/libtools/my_x11_conv.h b/src/libtools/my_x11_conv.h new file mode 100644 index 0000000000000000000000000000000000000000..709f7cfe982f64c60e19516490e2ba07dcc0a759 --- /dev/null +++ b/src/libtools/my_x11_conv.h @@ -0,0 +1,100 @@ +#ifndef MY_X11_CONV +#define MY_X11_CONV +#include + +#include "box32.h" +#include "converter32.h" +#include "my_x11_defs.h" +#include "my_x11_defs_32.h" + +void convertXEvent(my_XEvent_32_t* dst, my_XEvent_t* src); +void unconvertXEvent(my_XEvent_t* dst, my_XEvent_32_t* src); +void convert_XErrorEvent_to_32(void* d, void* s); +void convert_XErrorEvent_to_64(void* d, void* s); + +// Add a new Native Display*, return a 32bits one +void* addDisplay(void* d); +// Find a Native Diplay* and return the 32bits one +void* FindDisplay(void* d); +// return the Native Display from a 32bits one +void* getDisplay(void* d); +// removed a 32bits Display and associated ressources +void delDisplay(void* d); +// refresh the 32bits from the 64bits version +void refreshDisplay(void* dpy); + +void convert_Screen_to_32(void* d, void* s); + +void* convert_Visual_to_32(void* dpy, void* a); +void* convert_Visual_to_64(void* dpy, void* a); + +void convert_XWMints_to_64(void* d, void* s); +void inplace_enlarge_wmhints(void* hints); +void inplace_shrink_wmhints(void* hints); +void convert_XSizeHints_to_64(void* d, void *s); +void inplace_enlarge_wmsizehints(void* hints); +void inplace_shrink_wmsizehints(void* hints); + +void convert_XWindowAttributes_to_32(void* dpy, void* d, void* s); + +void inplace_XModifierKeymap_shrink(void* a); +void inplace_XModifierKeymap_enlarge(void* a); + +void convert_XVisualInfo_to_32(void* dpy, my_XVisualInfo_32_t* dst, my_XVisualInfo_t* src); +void convert_XVisualInfo_to_64(void* dpy, my_XVisualInfo_t* dst, my_XVisualInfo_32_t* src); +void convert_XVisualInfo_to_64_novisual(void* dpy, my_XVisualInfo_t* dst, my_XVisualInfo_32_t* src); +void inplace_XVisualInfo_shrink(void* dpy, void *a); +void inplace_XVisualInfo_enlarge(void* dpy, void *a); + +void inplace_XdbeVisualInfo_shrink(void* a); +void inplace_XdbeScreenVisualInfo_shrink(void* a); +void inplace_XdbeVisualInfo_enlarge(void* a); +void inplace_XdbeScreenVisualInfo_enlarge(void* a); + +void inplace_XExtDisplayInfo_shrink(void* a); +void inplace_XExtDisplayInfo_enlarge(void* a); +void* inplace_XExtensionInfo_shrink(void* a); +void* inplace_XExtensionInfo_enlarge(void* a); + +void convert_XFontProp_to_32(my_XFontProp_32_t* dst, my_XFontProp_t* src); +void convert_XFontProp_to_64(my_XFontProp_t* dst, my_XFontProp_32_t* src); +void inplace_XFontProp_shrink(void* a); +void inplace_XFontProp_enlarge(void* a); +void inplace_XFontStruct_shrink(void* a); +void inplace_XFontStruct_enlarge(void* a); + +void convert_XSetWindowAttributes_to_64(my_XSetWindowAttributes_t* dst, my_XSetWindowAttributes_32_t* src); + +void WrapXImage(void* d, void* s); //define in wrappedx11.c because it contains callbacks +void UnwrapXImage(void* d, void* s); +void* inplace_XImage_shrink(void* a); +void* inplace_XImage_enlarge(void* a); + +void convert_XRRModeInfo_to_32(void* d, const void* s); +void convert_XRRModeInfo_to_64(void* d, const void* s); +void inplace_XRRScreenResources_shrink(void* s); +void inplace_XRRScreenResources_enlarge(void* s); +void inplace_XRRCrtcInfo_shrink(void* s); +void inplace_XRROutputInfo_shrink(void* s); +void inplace_XRRProviderInfo_shrink(void* a); +void inplace_XRRProviderInfo_enlarge(void* a); +void inplace_XRRProviderResources_shrink(void* a); +void inplace_XRRProviderResources_enlarge(void* a); +void* inplace_XRRPropertyInfo_shrink(void* a); + +void inplace_XIDeviceInfo_shrink(void* a, int n); +int inplace_XIDeviceInfo_enlarge(void* a); + +void inplace_XDevice_shrink(void* a); +void inplace_XDevice_enlarge(void* a); + +void register_XDevice_events(my_XDevice_t* a); +void unregister_XDevice_events(my_XDevice_t* a); +void register_XFixes_events(int event_base); +void unregister_XFixes_events(); +void register_XRandR_events(int event_base); +void unregister_XRandR_events(); + +void convert_XShmSegmentInfo_to_32(void* d, void* s); +void convert_XShmSegmentInfo_to_64(void* d, void* s); +#endif//MY_X11_CONV \ No newline at end of file diff --git a/src/libtools/my_x11_defs.h b/src/libtools/my_x11_defs.h new file mode 100644 index 0000000000000000000000000000000000000000..e422f8f3c26865374aed25f0f4035b0362f88886 --- /dev/null +++ b/src/libtools/my_x11_defs.h @@ -0,0 +1,1325 @@ +#ifndef MY_X11_DEFS +#define MY_X11_DEFS +#include + +typedef unsigned long XID; + +typedef struct XImageSave_s { + int anyEmu; + void* create; + void* destroy; + void* get; + void* put; + void* sub; + void* add; +} XImageSave_t; + +typedef struct ximage_s { + void*(*create_image)( + void* /* display */, + void* /* visual */, + uint32_t /* depth */, + int32_t /* format */, + int32_t /* offset */, + void* /* data */, + uint32_t /* width */, + uint32_t /* height */, + int32_t /* bitmap_pad */, + int32_t /* bytes_per_line */); + int32_t (*destroy_image) (void*); + uintptr_t (*get_pixel) (void*, int32_t, int32_t); + int32_t (*put_pixel) (void*, int32_t, int32_t, uintptr_t); + void*(*sub_image) (void*, int32_t, int32_t, uint32_t, uint32_t); //sub_image return a new XImage that need bridging => custom wrapper + int32_t (*add_pixel) (void*, intptr_t); +} ximage_t; + +typedef struct _XImage { + int32_t width, height; /* size of image */ + int32_t xoffset; /* number of pixels offset in X direction */ + int32_t format; /* XYBitmap, XYPixmap, ZPixmap */ + void* data; /* pointer to image data */ + int32_t byte_order; /* data byte order, LSBFirst, MSBFirst */ + int32_t bitmap_unit; /* quant. of scanline 8, 16, 32 */ + int32_t bitmap_bit_order; /* LSBFirst, MSBFirst */ + int32_t bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */ + int32_t depth; /* depth of image */ + int32_t bytes_per_line; /* accelarator to next line */ + int32_t bits_per_pixel; /* bits per pixel (ZPixmap) */ + uintptr_t red_mask; /* bits in z arrangment */ + uintptr_t green_mask; + uintptr_t blue_mask; + void* obdata; /* hook for the object routines to hang on */ + ximage_t f; + +} XImage; + +struct my_XFreeFuncs { + void* atoms; + void* modifiermap; + void* key_bindings; + void* context_db; + void* defaultCCCs; + void* clientCmaps; + void* intensityMaps; + void* im_filters; + void* xkb; +}; + +struct my_XExten { + struct my_XExten *next; + void* codes; // XExtCodes + void* create_GC; // CreateGCType + void* copy_GC; // CopyGCType + void* flush_GC; // FlushGCType + void* free_GC; // FreeGCType + void* create_Font; // CreateFontType + void* free_Font; // FreeFontType + void* close_display; // CloseDisplayType + void* error; // ErrorType + void* error_string; // ErrorStringType + char *name; + void* error_values; // PrintErrorType + void* before_flush; // BeforeFlushType + struct my_XExten *next_flush; +}; + +struct my_XInternalAsync { + struct my_XInternalAsync *next; + int (*handler)(void*, void*, char*, int, void*); + void* data; +}; + +struct my_XLockPtrs { + void (*lock_display)(void* dpy); + void (*unlock_display)(void *dpy); +}; + +struct my_XConnectionInfo { + int fd; + void* read_callback; // _XInternalConnectionProc + void* call_data; + void* *watch_data; + struct my_XConnectionInfo *next; +}; + +struct my_XConnWatchInfo { + void* fn; // XConnectionWatchProc + void* client_data; + struct _XConnWatchInfo *next; +}; + +typedef struct my_Visual_s { + void* ext_data; //XExtData* + XID visualid; + int c_class; + unsigned long red_mask, green_mask, blue_mask; + int bits_per_rgb; + int map_entries; +} my_Visual_t; + +typedef struct my_Screen_s { + void* ext_data; //XExtData * + struct my_XDisplay_s *display; + XID root; + int width, height; + int mwidth, mheight; + int ndepths; + void* depths; //Depth * + int root_depth; /* bits per pixel */ + my_Visual_t* root_visual; + void* default_gc; //GC == struct _XGC* + XID cmap; + unsigned long white_pixel; + unsigned long black_pixel; + int max_maps, min_maps; + int backing_store; + int save_unders; + long root_input_mask; +} my_Screen_t; + +typedef struct my_XDisplay_s +{ + void *ext_data; + struct my_XFreeFuncs *free_funcs; + int fd; + int conn_checker; + int proto_major_version; + int proto_minor_version; + char *vendor; + XID resource_base; + XID resource_mask; + XID resource_id; + int resource_shift; + XID (*resource_alloc)(void*); + int byte_order; + int bitmap_unit; + int bitmap_pad; + int bitmap_bit_order; + int nformats; + void *pixmap_format; + int vnumber; + int release; + void *head, *tail; + int qlen; + unsigned long last_request_read; + unsigned long request; + char *last_req; + char *buffer; + char *bufptr; + char *bufmax; + unsigned max_request_size; + void* *db; + int (*synchandler)(void*); + char *display_name; + int default_screen; + int nscreens; + my_Screen_t *screens; + unsigned long motion_buffer; + volatile unsigned long flags; + int min_keycode; + int max_keycode; + void *keysyms; + void *modifiermap; + int keysyms_per_keycode; + char *xdefaults; + char *scratch_buffer; + unsigned long scratch_length; + int ext_number; + struct my_XExten *ext_procs; + int (*event_vec[128])(void *, void *, void *); + int (*wire_vec[128])(void *, void *, void *); + XID lock_meaning; + void* lock; + struct my_XInternalAsync *async_handlers; + unsigned long bigreq_size; + struct my_XLockPtrs *lock_fns; + void (*idlist_alloc)(void *, void *, int); + void* key_bindings; + XID cursor_font; + void* *atoms; + unsigned int mode_switch; + unsigned int num_lock; + void* context_db; + int (**error_vec)(void*, void*, void*); + struct { + void* defaultCCCs; + void* clientCmaps; + void* perVisualIntensityMaps; + } cms; + void* im_filters; + void* qfree; + unsigned long next_event_serial_num; + struct my_XExten *flushes; + struct my_XConnectionInfo *im_fd_info; + int im_fd_length; + struct my_XConnWatchInfo *conn_watchers; + int watcher_count; + void* filedes; + int (*savedsynchandler)(void *); + XID resource_max; + int xcmisc_opcode; + void* *xkb_info; + void* *trans_conn; + void* *xcb; + unsigned int next_cookie; + int (*generic_event_vec[128])(void*, void*, void*); + int (*generic_event_copy_vec[128])(void*, void*, void*); + void *cookiejar; + unsigned long last_request_read_upper32bit; // 64bits only + unsigned long request_upper32bit; // 64bits only + void* error_threads; + void* exit_handler; + void* exit_handler_data; +} my_XDisplay_t; + +typedef struct my_XSetWindowAttributes_s { + XID background_pixmap; + unsigned long background_pixel; + XID border_pixmap; + unsigned long border_pixel; + int bit_gravity; + int win_gravity; + int backing_store; + unsigned long backing_planes; + unsigned long backing_pixel; + int save_under; + long event_mask; + long do_not_propagate_mask; + int override_redirect; + XID colormap; + XID cursor; +} my_XSetWindowAttributes_t; + +typedef struct my_XKeyEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + XID root; + XID subwindow; + unsigned long time; + int x, y; + int x_root, y_root; + unsigned int state; + unsigned int keycode; + int same_screen; +} my_XKeyEvent_t; +typedef my_XKeyEvent_t my_XKeyPressedEvent_t; +typedef my_XKeyEvent_t my_XKeyReleasedEvent_t; + +typedef struct my_XButtonEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + XID root; + XID subwindow; + unsigned long time; + int x, y; + int x_root, y_root; + unsigned int state; + unsigned int button; + int same_screen; +} my_XButtonEvent_t; +typedef my_XButtonEvent_t my_XButtonPressedEvent_t; +typedef my_XButtonEvent_t my_XButtonReleasedEvent_t; + +typedef struct my_XMotionEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + XID root; + XID subwindow; + unsigned long time; + int x, y; + int x_root, y_root; + unsigned int state; + char is_hint; + int same_screen; +} my_XMotionEvent_t; +typedef my_XMotionEvent_t my_XPointerMovedEvent_t; + +typedef struct my_XCrossingEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + XID root; + XID subwindow; + unsigned long time; + int x, y; + int x_root, y_root; + int mode; + int detail; + int same_screen; + int focus; + unsigned int state; +} my_XCrossingEvent_t; + +typedef my_XCrossingEvent_t my_XEnterWindowEvent_t; +typedef my_XCrossingEvent_t my_XLeaveWindowEvent_t; + +typedef struct my_XFocusChangeEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + int mode; + int detail; +} my_XFocusChangeEvent_t; +typedef my_XFocusChangeEvent_t my_XFocusInEvent_t; +typedef my_XFocusChangeEvent_t my_XFocusOutEvent_t; + +typedef struct my_XKeymapEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + char key_vector[32]; +} my_XKeymapEvent_t; + +typedef struct my_XExposeEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + int x, y; + int width, height; + int count; +} my_XExposeEvent_t; + +typedef struct my_XGraphicsExposeEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID drawable; + int x, y; + int width, height; + int count; + int major_code; + int minor_code; +} my_XGraphicsExposeEvent_t; + +typedef struct my_XNoExposeEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID drawable; + int major_code; + int minor_code; +} my_XNoExposeEvent_t; + +typedef struct my_XVisibilityEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + int state; +} my_XVisibilityEvent_t; + +typedef struct my_XCreateWindowEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID parent; + XID window; + int x, y; + int width, height; + int border_width; + int override_redirect; +} my_XCreateWindowEvent_t; + +typedef struct my_XDestroyWindowEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID event; + XID window; +} my_XDestroyWindowEvent_t; + +typedef struct my_XUnmapEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID event; + XID window; + int from_configure; +} my_XUnmapEvent_t; + +typedef struct my_XMapEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID event; + XID window; + int override_redirect; +} my_XMapEvent_t; + +typedef struct my_XMapRequestEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID parent; + XID window; +} my_XMapRequestEvent_t; + +typedef struct my_XReparentEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID event; + XID window; + XID parent; + int x, y; + int override_redirect; +} my_XReparentEvent_t; + +typedef struct my_XConfigureEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID event; + XID window; + int x, y; + int width, height; + int border_width; + XID above; + int override_redirect; +} my_XConfigureEvent_t; + +typedef struct my_XGravityEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID event; + XID window; + int x, y; +} my_XGravityEvent_t; + +typedef struct my_XResizeRequestEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + int width, height; +} my_XResizeRequestEvent_t; + +typedef struct my_XConfigureRequestEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID parent; + XID window; + int x, y; + int width, height; + int border_width; + XID above; + int detail; + unsigned long value_mask; +} my_XConfigureRequestEvent_t; + +typedef struct my_XCirculateEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID event; + XID window; + int place; +} my_XCirculateEvent_t; + +typedef struct my_XCirculateRequestEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID parent; + XID window; + int place; +} my_XCirculateRequestEvent_t; + +typedef struct my_XPropertyEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + XID atom; + unsigned long time; + int state; +} my_XPropertyEvent_t; + +typedef struct my_XSelectionClearEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + XID selection; + unsigned long time; +} my_XSelectionClearEvent_t; + +typedef struct my_XSelectionRequestEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID owner; + XID requestor; + XID selection; + XID target; + XID property; + unsigned long time; +} my_XSelectionRequestEvent_t; + +typedef struct my_XSelectionEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID requestor; + XID selection; + XID target; + XID property; + unsigned long time; +} my_XSelectionEvent_t; + +typedef struct my_XColormapEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + XID colormap; + int c_new; + int state; +} my_XColormapEvent_t; + +typedef struct my_XClientMessageEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + XID message_type; + int format; + union { + char b[20]; + short s[10]; + long l[5]; + } data; +} my_XClientMessageEvent_t; + +typedef struct my_XMappingEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; + int request; + int first_keycode; + int count; +} my_XMappingEvent_t; + +typedef struct my_XErrorEvent_s +{ + int type; + my_XDisplay_t *display; + XID resourceid; + unsigned long serial; + unsigned char error_code; + unsigned char request_code; + unsigned char minor_code; +} my_XErrorEvent_t; + +typedef struct my_XAnyEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + XID window; +} my_XAnyEvent_t; + +typedef struct my_XGenericEvent_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + int extension; + int evtype; +} my_XGenericEvent_t; + +typedef struct my_XGenericEventCookie_s +{ + int type; + unsigned long serial; + int send_event; + my_XDisplay_t *display; + int extension; + int evtype; + unsigned int cookie; + void *data; +} my_XGenericEventCookie_t; + +typedef union my_XEvent_s { + int type; + my_XAnyEvent_t xany; + my_XKeyEvent_t xkey; + my_XButtonEvent_t xbutton; + my_XMotionEvent_t xmotion; + my_XCrossingEvent_t xcrossing; + my_XFocusChangeEvent_t xfocus; + my_XExposeEvent_t xexpose; + my_XGraphicsExposeEvent_t xgraphicsexpose; + my_XNoExposeEvent_t xnoexpose; + my_XVisibilityEvent_t xvisibility; + my_XCreateWindowEvent_t xcreatewindow; + my_XDestroyWindowEvent_t xdestroywindow; + my_XUnmapEvent_t xunmap; + my_XMapEvent_t xmap; + my_XMapRequestEvent_t xmaprequest; + my_XReparentEvent_t xreparent; + my_XConfigureEvent_t xconfigure; + my_XGravityEvent_t xgravity; + my_XResizeRequestEvent_t xresizerequest; + my_XConfigureRequestEvent_t xconfigurerequest; + my_XCirculateEvent_t xcirculate; + my_XCirculateRequestEvent_t xcirculaterequest; + my_XPropertyEvent_t xproperty; + my_XSelectionClearEvent_t xselectionclear; + my_XSelectionRequestEvent_t xselectionrequest; + my_XSelectionEvent_t xselection; + my_XColormapEvent_t xcolormap; + my_XClientMessageEvent_t xclient; + my_XMappingEvent_t xmapping; + my_XErrorEvent_t xerror; + my_XKeymapEvent_t xkeymap; + my_XGenericEvent_t xgeneric; + my_XGenericEventCookie_t xcookie; + long pad[24]; +} my_XEvent_t; + +#define XEVT_KeyPress 2 +#define XEVT_KeyRelease 3 +#define XEVT_ButtonPress 4 +#define XEVT_ButtonRelease 5 +#define XEVT_MotionNotify 6 +#define XEVT_EnterNotify 7 +#define XEVT_LeaveNotify 8 +#define XEVT_FocusIn 9 +#define XEVT_FocusOut 10 +#define XEVT_KeymapNotify 11 +#define XEVT_Expose 12 +#define XEVT_GraphicsExpose 13 +#define XEVT_NoExpose 14 +#define XEVT_VisibilityNotify 15 +#define XEVT_CreateNotify 16 +#define XEVT_DestroyNotify 17 +#define XEVT_UnmapNotify 18 +#define XEVT_MapNotify 19 +#define XEVT_MapRequest 20 +#define XEVT_ReparentNotify 21 +#define XEVT_ConfigureNotify 22 +#define XEVT_ConfigureRequest 23 +#define XEVT_GravityNotify 24 +#define XEVT_ResizeRequest 25 +#define XEVT_CirculateNotify 26 +#define XEVT_CirculateRequest 27 +#define XEVT_PropertyNotify 28 +#define XEVT_SelectionClear 29 +#define XEVT_SelectionRequest 30 +#define XEVT_SelectionNotify 31 +#define XEVT_ColormapNotify 32 +#define XEVT_ClientMessage 33 +#define XEVT_MappingNotify 34 +#define XEVT_GenericEvent 35 + + +// WMHints +typedef struct my_XWMHints_s { + long flags; + int input; + int initial_state; + XID icon_pixmap; + XID icon_window; + int icon_x; + int icon_y; + XID icon_mask; + XID window_group; +} my_XWMHints_t; + +#define XWMHint_InputHint (1L << 0) +#define XWMHint_StateHint (1L << 1) +#define XWMHint_IconPixmapHint (1L << 2) +#define XWMHint_IconWindowHint (1L << 3) +#define XWMHint_IconPositionHint (1L << 4) +#define XWMHint_IconMaskHint (1L << 5) +#define XWMHint_WindowGroupHint (1L << 6) +#define XWMHint_XUrgencyHint (1L << 8) + +typedef struct my_XRRModeInfo_s { + XID id; + unsigned int width; + unsigned int height; + unsigned long dotClock; + unsigned int hSyncStart; + unsigned int hSyncEnd; + unsigned int hTotal; + unsigned int hSkew; + unsigned int vSyncStart; + unsigned int vSyncEnd; + unsigned int vTotal; + char *name; + unsigned int nameLength; + unsigned long modeFlags; +} my_XRRModeInfo_t; + + +typedef struct my_XRRScreenResources_s { + unsigned long timestamp; + unsigned long configTimestamp; + int ncrtc; + XID *crtcs; + int noutput; + XID *outputs; + int nmode; + my_XRRModeInfo_t *modes; +} my_XRRScreenResources_t; + +typedef struct my_XRRCrtcInfo_s { + unsigned long timestamp; + int x, y; + unsigned int width, height; + XID mode; + uint16_t rotation; + int noutput; + XID *outputs; + uint16_t rotations; + int npossible; + XID *possible; +} my_XRRCrtcInfo_t; + +typedef struct my_XRROutputInfo_s { + unsigned long timestamp; + XID crtc; + char *name; + int nameLen; + unsigned long mm_width; + unsigned long mm_height; + uint16_t connection; + uint16_t subpixel_order; + int ncrtc; + XID *crtcs; + int nclone; + XID *clones; + int nmode; + int npreferred; + XID *modes; +} my_XRROutputInfo_t; + +// Window Attribute +typedef struct my_XWindowAttributes_s { + int x, y; + int width, height; + int border_width; + int depth; + void* visual; //Visual* + XID root; + int c_class; + int bit_gravity; + int win_gravity; + int backing_store; + unsigned long backing_planes; + unsigned long backing_pixel; + int save_under; + XID colormap; + int map_installed; + int map_state; + long all_event_masks; + long your_event_mask; + long do_not_propagate_mask; + int override_redirect; + void* screen; //Screen* +} my_XWindowAttributes_t; + +typedef struct my_XVisualInfo_s { + my_Visual_t* visual; + unsigned long visualid; + int screen; + int depth; + int c_class; + unsigned long red_mask; + unsigned long green_mask; + unsigned long blue_mask; + int colormap_size; + int bits_per_rgb; +} my_XVisualInfo_t; + +typedef struct my_XModifierKeymap_s { + int max_keypermod; + uint8_t* modifiermap; +} my_XModifierKeymap_t; + + +typedef struct my_XdbeVisualInfo_s +{ + XID visual; + int depth; + int perflevel; +} my_XdbeVisualInfo_t; + +typedef struct my_XdbeScreenVisualInfo_s +{ + int count; + my_XdbeVisualInfo_t* visinfo; +} my_XdbeScreenVisualInfo_t; + +typedef struct my_XF86VidModeModeInfo_s +{ + unsigned int dotclock; + unsigned short hdisplay; + unsigned short hsyncstart; + unsigned short hsyncend; + unsigned short htotal; + unsigned short hskew; + unsigned short vdisplay; + unsigned short vsyncstart; + unsigned short vsyncend; + unsigned short vtotal; + unsigned int flags; + int privsize; + int* tc_private; +} my_XF86VidModeModeInfo_t; + +typedef struct my_XColor_s { + unsigned long pixel; + unsigned short red, green, blue; + char flags; + char pad; +} my_XColor_t; + +typedef struct my_XRRProviderInfo_s { + unsigned int capabilities; + int ncrtcs; + XID* crtcs; + int noutputs; + XID* outputs; + char* name; + int nassociatedproviders; + XID* associated_providers; + unsigned int* associated_capability; + int nameLen; +} my_XRRProviderInfo_t; + +typedef struct my_XRRProviderResources_t { + unsigned long timestamp; + int nproviders; + XID* providers; +} my_XRRProviderResources_t; + +typedef struct my_XIAnyClassInfo_s +{ + int type; + int sourceid; +} my_XIAnyClassInfo_t; + +typedef struct my_XIDeviceInfo_s +{ + int deviceid; + char* name; + int use; + int attachment; + int enabled; + int num_classes; + my_XIAnyClassInfo_t** classes; +} my_XIDeviceInfo_t; + +typedef struct my_XIEventMask_s { + int deviceid; + int mask_len; + unsigned char* mask; +} my_XIEventMask_t; + +typedef struct my_XInputClassInfo_s { + unsigned char input_class; + unsigned char event_type_base; +} my_XInputClassInfo_t; + +typedef struct my_XDevice_s { + XID device_id; + int num_classes; + my_XInputClassInfo_t* classes; +} my_XDevice_t; + +typedef struct my_XDeviceKeyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; //Display* + XID window; + XID deviceid; + XID root; + XID subwindow; + unsigned long time; + int x, y; + int x_root; + int y_root; + unsigned int state; + unsigned int keycode; + int same_screen; + unsigned int device_state; + unsigned char axes_count; + unsigned char first_axis; + int axis_data[6]; +} my_XDeviceKeyEvent_t; +typedef my_XDeviceKeyEvent_t my_XDeviceButtonEvent_t; +typedef struct my_XDeviceMotionEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; //Display* + XID window; + XID deviceid; + XID root; + XID subwindow; + unsigned long time; + int x, y; + int x_root; + int y_root; + unsigned int state; + char is_hint; + int same_screen; + unsigned int device_state; + unsigned char axes_count; + unsigned char first_axis; + int axis_data[6]; +} my_XDeviceMotionEvent_t; +typedef struct my_XDeviceFocusChangeEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; //Display* + XID window; + XID deviceid; + int mode; + int detail; + unsigned long time; +} my_XDeviceFocusChangeEvent_t; +typedef struct my_XProximityNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; //Display* + XID window; + XID deviceid; + XID root; + XID subwindow; + unsigned long time; + int x, y; + int x_root; + int y_root; + unsigned int state; + int same_screen; + unsigned int device_state; + unsigned char axes_count; + unsigned char first_axis; + int axis_data[6]; +} my_XProximityNotifyEvent_t; +typedef struct my_XDeviceStateNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; //Display* + XID window; + XID deviceid; + unsigned long time; + int num_classes; + char data[64]; +} my_XDeviceStateNotifyEvent_t; +typedef struct my_XDeviceMappingEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + XID deviceid; + unsigned long time; + int request; + int first_keycode; + int count; +} my_XDeviceMappingEvent_t; +typedef struct my_XChangeDeviceNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + XID deviceid; + unsigned long time; + int request; +} my_XChangeDeviceNotifyEvent_t; +typedef struct my_XDevicePresenceNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + unsigned long time; + int devchange; + XID deviceid; + XID control; +} my_XDevicePresenceNotifyEvent_t; +typedef struct my_XDevicePropertyNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + unsigned long time; + XID deviceid; + XID atom; + int state; +} my_XDevicePropertyNotifyEvent_t; + +typedef struct my_XFixesSelectionNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + int subtype; + XID owner; + XID selection; + unsigned long timestamp; + unsigned long selection_timestamp; +} my_XFixesSelectionNotifyEvent_t; +typedef struct my_XFixesCursorNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + int subtype; + unsigned long cursor_serial; + unsigned long timestamp; + XID cursor_name; +} my_XFixesCursorNotifyEvent_t; + +typedef struct my_XRRScreenChangeNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + XID root; + unsigned long timestamp; + unsigned long config_timestamp; + uint16_t size_index; + uint16_t subpixel_order; + uint16_t rotation; + int width; + int height; + int mwidth; + int mheight; +} my_XRRScreenChangeNotifyEvent_t; +typedef struct my_XRRNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + int subtype; +} my_XRRNotifyEvent_t; +typedef struct my_XRROutputChangeNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + int subtype; + XID output; + XID crtc; + XID mode; + uint16_t rotation; + uint16_t connection; + uint16_t subpixel_order; +} my_XRROutputChangeNotifyEvent_t; +typedef struct my_XRRCrtcChangeNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + int subtype; + XID crtc; + XID mode; + uint16_t rotation; + int x, y; + unsigned int width, height; +} my_XRRCrtcChangeNotifyEvent_t; +typedef struct my_XRROutputPropertyNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + int subtype; + XID output; + XID property; + unsigned long timestamp; + int state; +} my_XRROutputPropertyNotifyEvent_t; +typedef struct my_XRRProviderChangeNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + int subtype; + XID provider; + unsigned long timestamp; + unsigned int current_role; +} my_XRRProviderChangeNotifyEvent_t; +typedef struct my_XRRProviderPropertyNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + int subtype; + XID provider; + XID property; + unsigned long timestamp; + int state; +} my_XRRProviderPropertyNotifyEvent_t; +typedef struct my_XRRResourceChangeNotifyEvent_s +{ + int type; + unsigned long serial; + int send_event; + void* display; + XID window; + int subtype; + unsigned long timestamp; +} my_XRRResourceChangeNotifyEvent_t; + +typedef struct my_XcursorCursors_s { + void* dpy; //Display* + int ref; + int ncursor; + void* cursors; //Cursor* +} my_XcursorCursors_t; + +typedef struct my_XExtCodes_s { + int extension; + int major_opcode; + int first_event; + int first_error; +} my_XExtCodes_t; + +typedef struct my_XExtDisplayInfo_s { + struct my_XExtDisplayInfo_s *next; + void* display; //Didsplay* + my_XExtCodes_t *codes; + void* data; +} my_XExtDisplayInfo_t; + +typedef struct my_XExtensionInfo_s { + my_XExtDisplayInfo_t *head; + my_XExtDisplayInfo_t *cur; + int ndisplays; +} my_XExtensionInfo_t; + +typedef struct my_XCharStruct_s { + short lbearing; + short rbearing; + short width; + short ascent; + short descent; + unsigned short attributes; +} my_XCharStruct_t; + +typedef struct my_XFontProp_s { + XID name; + unsigned long card32; +} my_XFontProp_t; + +typedef struct my_XFontStruct_s { + void* ext_data; //XExtData* + XID fid; + unsigned direction; + unsigned min_char_or_byte2; + unsigned max_char_or_byte2; + unsigned min_byte1; + unsigned max_byte1; + int all_chars_exist; + unsigned default_char; + int n_properties; + my_XFontProp_t* properties; + my_XCharStruct_t min_bounds; + my_XCharStruct_t max_bounds; + my_XCharStruct_t* per_char; + int ascent; + int descent; +} my_XFontStruct_t; + +typedef struct my_XExtensionHooks_s { + int (*create_gc)(void* dpy, void* gc, my_XExtCodes_t* e); + int (*copy_gc)(void* dpy, void* gc, my_XExtCodes_t* e); + int (*flush_gc)(void* dpy, void* gc, my_XExtCodes_t* e); + int (*free_gc)(void* dpy, void* gc, my_XExtCodes_t* e); + int (*create_font)(void* dpy, my_XFontStruct_t* f, my_XExtCodes_t* e); + int (*free_font)(void* dpy, my_XFontStruct_t* f, my_XExtCodes_t* e); + int (*close_display)(void* dpy, my_XExtCodes_t* e); + int (*wire_to_event)(void* dpy, my_XEvent_t* evt, void* xEvent); + int (*event_to_wire)(void* dpy, my_XEvent_t* evt, void* xEvent); + int (*error)(void* dpy, void* xError, my_XExtCodes_t* e, int* n); + char*(*error_string)(void* dpy, int, my_XExtCodes_t* e, char* s, int n); +} my_XExtensionHooks_t; + +typedef struct my_XRRPropertyInfo_s { + int pending; + int range; + int immutable; + int num_values; + long* values; +} my_XRRPropertyInfo_t; + +typedef struct my_XShmSegmentInfo_s { + XID shmseg; + int shmid; + char* shmaddr; + int readOnly; +} my_XShmSegmentInfo_t; + +#endif//MY_X11_DEFS \ No newline at end of file diff --git a/src/libtools/my_x11_defs_32.h b/src/libtools/my_x11_defs_32.h new file mode 100644 index 0000000000000000000000000000000000000000..cbe78f75ff189e9362ba19f23bdbed0607f23074 --- /dev/null +++ b/src/libtools/my_x11_defs_32.h @@ -0,0 +1,1257 @@ +#ifndef MY_X11_DEFS_32 +#define MY_X11_DEFS_32 +#include +#include "box32.h" + +typedef ulong_t XID_32; + +typedef struct ximage_32_s { + ptr_t create_image; + ptr_t destroy_image; + ptr_t get_pixel; + ptr_t put_pixel; + ptr_t sub_image; + ptr_t add_pixel; +} ximage_32_t; + +typedef struct _XImage_32 { + int32_t width, height; + int32_t xoffset; + int32_t format; + ptr_t data; + int byte_order; + int bitmap_unit; + int bitmap_bit_order; + int bitmap_pad; + int depth; + int bytes_per_line; + int bits_per_pixel; + ulong_t red_mask; + ulong_t green_mask; + ulong_t blue_mask; + ptr_t obdata; + ximage_32_t f; +} XImage_32; + +struct my_XFreeFuncs_32 { + ptr_t atoms; // void* + ptr_t modifiermap; // void* + ptr_t key_bindings; // void* + ptr_t context_db; // void* + ptr_t defaultCCCs; // void* + ptr_t clientCmaps; // void* + ptr_t intensityMaps; // void* + ptr_t im_filters; // void* + ptr_t xkb; // void* +}; + +struct my_XExten_32 { + ptr_t next; //struct my_XExten * + ptr_t codes; // XExtCodes + ptr_t create_GC; // CreateGCType + ptr_t copy_GC; // CopyGCType + ptr_t flush_GC; // FlushGCType + ptr_t free_GC; // FreeGCType + ptr_t create_Font; // CreateFontType + ptr_t free_Font; // FreeFontType + ptr_t close_display; // CloseDisplayType + ptr_t error; // ErrorType + ptr_t error_string; // ErrorStringType + ptr_t name; //char* + ptr_t error_values; // PrintErrorType + ptr_t before_flush; // BeforeFlushType + ptr_t next_flush; //struct my_XExten * +}; + +struct my_XInternalAsync_32 { + ptr_t next; //struct my_XInternalAsync_32 * + ptr_t handler; //int (*handler)(void*, void*, char*, int, void*); + ptr_t data; //void* +}; + +struct my_XLockPtrs_32 { + ptr_t lock_display;// void (*lock_display)(void* dpy); + ptr_t unlock_display;// void (*unlock_display)(void *dpy); +}; + +struct my_XConnectionInfo_32 { + int fd; + ptr_t read_callback; // _XInternalConnectionProc + ptr_t call_data; + ptr_t watch_data; // void** + struct my_XConnectionInfo *next; +}; + +struct my_XConnWatchInfo_32 { + ptr_t fn; // XConnectionWatchProc + ptr_t client_data; + ptr_t next; //struct _XConnWatchInfo * +}; + +typedef struct my_Visual_32_s { + ptr_t ext_data; //XExtData* + XID_32 visualid; + int c_class; + ulong_t red_mask, green_mask, blue_mask; + int bits_per_rgb; + int map_entries; +} my_Visual_32_t; + +typedef struct my_Screen_32_s { + ptr_t ext_data; //XExtData * + ptr_t display; //struct my_XDisplay_s * + XID_32 root; + int width, height; + int mwidth, mheight; + int ndepths; + ptr_t depths; //Depth * + int root_depth; /* bits per pixel */ + ptr_t root_visual; //Visual * + ptr_t default_gc; //GC == struct _XGC* + XID_32 cmap; + ulong_t white_pixel; + ulong_t black_pixel; + int max_maps, min_maps; + int backing_store; + int save_unders; + long_t root_input_mask; +} my_Screen_32_t; + +typedef struct my_XDisplay_32_s +{ + ptr_t ext_data; //void * //offset = 0x00 + ptr_t free_funcs; //struct my_XFreeFuncs_32 * + int fd; + int conn_checker; + int proto_major_version; //offset = 0x10 + int proto_minor_version; + ptr_t vendor; //char * + XID_32 resource_base; + XID_32 resource_mask; // offset = 0x20 + XID_32 resource_id; + int resource_shift; + ptr_t resource_alloc;//XID_32 (*resource_alloc)(void*); + int byte_order; // offset = 0x30 + int bitmap_unit; + int bitmap_pad; + int bitmap_bit_order; + int nformats; //offset = 0x40 + ptr_t pixmap_format; //void * + int vnumber; + int release; + ptr_t head, tail; //ofsset = 0x50 + int qlen; + ulong_t last_request_read; + ulong_t request; //offset = 0x60 + ptr_t last_req; //char * + ptr_t buffer; //char * + ptr_t bufptr; //char * + ptr_t bufmax; //char * //offset = 0x70 + unsigned max_request_size; + ptr_t db; //void* * + ptr_t synchandler; //int (*synchandler)(void*); + ptr_t display_name;//char * //offset = 0x80 + int default_screen; + int nscreens; + ptr_t screens;//void * + ulong_t motion_buffer; //offset = 0x90 + volatile ulong_t flags; + int min_keycode; + int max_keycode; + ptr_t keysyms; //void * + ptr_t modifiermap; //void * + int keysyms_per_keycode; + ptr_t xdefaults; //char * + ptr_t scratch_buffer; //char * + ulong_t scratch_length; + int ext_number; + ptr_t ext_procs; //struct my_XExten * + ptr_t event_vec; //int (*event_vec[128])(void *, void *, void *); + ptr_t wire_vec; //int (*wire_vec[128])(void *, void *, void *); + XID_32 lock_meaning; + ptr_t lock; //void* + ptr_t async_handlers; //struct my_XInternalAsync * + ulong_t bigreq_size; + ptr_t lock_fns; //struct my_XLockPtrs * + ptr_t idlist_alloc; //void (*idlist_alloc)(void *, void *, int); + ptr_t key_bindings; //void* + XID_32 cursor_font; + ptr_t atoms; //void* * + unsigned int mode_switch; + unsigned int num_lock; + ptr_t context_db; //void* + ptr_t error_vec; //int (**error_vec)(void*, void*, void*); + struct { + ptr_t defaultCCCs; //void* + ptr_t clientCmaps; //void* + ptr_t perVisualIntensityMaps; //void* + } cms; + ptr_t im_filters; //void* + ptr_t qfree; //void* + ulong_t next_event_32_serial_num; + ptr_t flushes; //struct my_XExten * + ptr_t im_fd_info; //struct my_XConnectionInfo * + int im_fd_length; + ptr_t conn_watchers; //struct my_XConnWatchInfo * + int watcher_count; + ptr_t filedes; //void* + ptr_t savedsynchandler; //int (*savedsynchandler)(void *); + XID_32 resource_max; + int xcmisc_opcode; + ptr_t xkb_info; //void* * + ptr_t trans_conn; //void* * + ptr_t xcb; //void* * + unsigned int next_cookie; + ptr_t generic_event_vec[128]; //int (*generic_event_vec[128])(void*, void*, void*); + ptr_t generic_event_copy_vec[128]; //int (*generic_event_copy_vec[128])(void*, void*, void*); + ptr_t cookiejar; //void * + ptr_t error_threads; //void * + ptr_t exit_handler; //void * + ptr_t exit_handler_data; //void * +} my_XDisplay_32_t; + +typedef struct my_XSetWindowAttributes_32_s { + XID_32 background_pixmap; + ulong_t background_pixel; + XID_32 border_pixmap; + ulong_t border_pixel; + int bit_gravity; + int win_gravity; + int backing_store; + ulong_t backing_planes; + ulong_t backing_pixel; + int save_under; + long_t event_mask; + long_t do_not_propagate_mask; + int override_redirect; + XID_32 colormap; + XID_32 cursor; +} my_XSetWindowAttributes_32_t; + +// Events + +typedef struct my_XKeyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 root; + XID_32 subwindow; + ulong_t time; + int x, y; + int x_root, y_root; + unsigned int state; + unsigned int keycode; + int same_screen; +} my_XKeyEvent_32_t; +typedef my_XKeyEvent_32_t my_XKeyPressedEvent_32_t; +typedef my_XKeyEvent_32_t my_XKeyReleasedEvent_32_t; + +typedef struct my_XButtonEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 root; + XID_32 subwindow; + ulong_t time; + int x, y; + int x_root, y_root; + unsigned int state; + unsigned int button; + int same_screen; +} my_XButtonEvent_32_t; +typedef my_XButtonEvent_32_t my_XButtonPressedEvent_32_t; +typedef my_XButtonEvent_32_t my_XButtonReleasedEvent_32_t; + +typedef struct my_XMotionEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 root; + XID_32 subwindow; + ulong_t time; + int x, y; + int x_root, y_root; + unsigned int state; + char is_hint; + int same_screen; +} my_XMotionEvent_32_t; +typedef my_XMotionEvent_32_t my_XPointerMovedEvent_32_t; + +typedef struct my_XCrossingEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 root; + XID_32 subwindow; + ulong_t time; + int x, y; + int x_root, y_root; + int mode; + int detail; + int same_screen; + int focus; + unsigned int state; +} my_XCrossingEvent_32_t; + +typedef my_XCrossingEvent_32_t my_XEnterWindowEvent_32_t; +typedef my_XCrossingEvent_32_t my_XLeaveWindowEvent_32_t; + +typedef struct my_XFocusChangeEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + int mode; + int detail; +} my_XFocusChangeEvent_32_t; +typedef my_XFocusChangeEvent_32_t my_XFocusInEvent_32_t; +typedef my_XFocusChangeEvent_32_t my_XFocusOutEvent_32_t; + +typedef struct my_XKeymapEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + char key_vector[32]; +} my_XKeymapEvent_32_t; + +typedef struct my_XExposeEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + int x, y; + int width, height; + int count; +} my_XExposeEvent_32_t; + +typedef struct my_XGraphicsExposeEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 drawable; + int x, y; + int width, height; + int count; + int major_code; + int minor_code; +} my_XGraphicsExposeEvent_32_t; + +typedef struct my_XNoExposeEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 drawable; + int major_code; + int minor_code; +} my_XNoExposeEvent_32_t; + +typedef struct my_XVisibilityEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + int state; +} my_XVisibilityEvent_32_t; + +typedef struct my_XCreateWindowEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 parent; + XID_32 window; + int x, y; + int width, height; + int border_width; + int override_redirect; +} my_XCreateWindowEvent_32_t; + +typedef struct my_XDestroyWindowEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 event; + XID_32 window; +} my_XDestroyWindowEvent_32_t; + +typedef struct my_XUnmapEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 event; + XID_32 window; + int from_configure; +} my_XUnmapEvent_32_t; + +typedef struct my_XMapEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 event; + XID_32 window; + int override_redirect; +} my_XMapEvent_32_t; + +typedef struct my_XMapRequestEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 parent; + XID_32 window; +} my_XMapRequestEvent_32_t; + +typedef struct my_XReparentEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 event; + XID_32 window; + XID_32 parent; + int x, y; + int override_redirect; +} my_XReparentEvent_32_t; + +typedef struct my_XConfigureEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 event; + XID_32 window; + int x, y; + int width, height; + int border_width; + XID_32 above; + int override_redirect; +} my_XConfigureEvent_32_t; + +typedef struct my_XGravityEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 event; + XID_32 window; + int x, y; +} my_XGravityEvent_32_t; + +typedef struct my_XResizeRequestEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + int width, height; +} my_XResizeRequestEvent_32_t; + +typedef struct my_XConfigureRequestEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 parent; + XID_32 window; + int x, y; + int width, height; + int border_width; + XID_32 above; + int detail; + ulong_t value_mask; +} my_XConfigureRequestEvent_32_t; + +typedef struct my_XCirculateEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 event; + XID_32 window; + int place; +} my_XCirculateEvent_32_t; + +typedef struct my_XCirculateRequestEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 parent; + XID_32 window; + int place; +} my_XCirculateRequestEvent_32_t; + +typedef struct my_XPropertyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 atom; + ulong_t time; + int state; +} my_XPropertyEvent_32_t; + +typedef struct my_XSelectionClearEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 selection; + ulong_t time; +} my_XSelectionClearEvent_32_t; + +typedef struct my_XSelectionRequestEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 owner; + XID_32 requestor; + XID_32 selection; + XID_32 target; + XID_32 property; + ulong_t time; +} my_XSelectionRequestEvent_32_t; + +typedef struct my_XSelectionEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 requestor; + XID_32 selection; + XID_32 target; + XID_32 property; + ulong_t time; +} my_XSelectionEvent_32_t; + +typedef struct my_XColormapEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 colormap; + int c_new; + int state; +} my_XColormapEvent_32_t; + +typedef struct my_XClientMessageEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 message_type; + int format; + union { + char b[20]; + short s[10]; + long_t l[5]; + } data; +} my_XClientMessageEvent_32_t; + +typedef struct my_XMappingEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + int request; + int first_keycode; + int count; +} my_XMappingEvent_32_t; + +typedef struct my_XErrorEvent_32_s +{ + int type; + ptr_t display; //Display* + XID_32 resourceid; + ulong_t serial; + unsigned char error_code; + unsigned char request_code; + unsigned char minor_code; +} my_XErrorEvent_32_t; + +typedef struct my_XAnyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; +} my_XAnyEvent_32_t; + +typedef struct my_XGenericEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + int extension; + int evtype; +} my_XGenericEvent_32_t; + +typedef struct my_XGenericEventCookie_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + int extension; + int evtype; + unsigned int cookie; + ptr_t data; //void* +} my_XGenericEventCookie_32_t; + +typedef union my_XEvent_32_s { + int type; + my_XAnyEvent_32_t xany; + my_XKeyEvent_32_t xkey; + my_XButtonEvent_32_t xbutton; + my_XMotionEvent_32_t xmotion; + my_XCrossingEvent_32_t xcrossing; + my_XFocusChangeEvent_32_t xfocus; + my_XExposeEvent_32_t xexpose; + my_XGraphicsExposeEvent_32_t xgraphicsexpose; + my_XNoExposeEvent_32_t xnoexpose; + my_XVisibilityEvent_32_t xvisibility; + my_XCreateWindowEvent_32_t xcreatewindow; + my_XDestroyWindowEvent_32_t xdestroywindow; + my_XUnmapEvent_32_t xunmap; + my_XMapEvent_32_t xmap; + my_XMapRequestEvent_32_t xmaprequest; + my_XReparentEvent_32_t xreparent; + my_XConfigureEvent_32_t xconfigure; + my_XGravityEvent_32_t xgravity; + my_XResizeRequestEvent_32_t xresizerequest; + my_XConfigureRequestEvent_32_t xconfigurerequest; + my_XCirculateEvent_32_t xcirculate; + my_XCirculateRequestEvent_32_t xcirculaterequest; + my_XPropertyEvent_32_t xproperty; + my_XSelectionClearEvent_32_t xselectionclear; + my_XSelectionRequestEvent_32_t xselectionrequest; + my_XSelectionEvent_32_t xselection; + my_XColormapEvent_32_t xcolormap; + my_XClientMessageEvent_32_t xclient; + my_XMappingEvent_32_t xmapping; + my_XErrorEvent_32_t xerror; + my_XKeymapEvent_32_t xkeymap; + my_XGenericEvent_32_t xgeneric; + my_XGenericEventCookie_32_t xcookie; + long_t pad[24]; +} my_XEvent_32_t; + +// WMHints +typedef struct my_XWMHints_32_s { + long_t flags; + int input; + int initial_state; + XID_32 icon_pixmap; + XID_32 icon_window; + int icon_x; + int icon_y; + XID_32 icon_mask; + XID_32 window_group; +} my_XWMHints_32_t; + +typedef struct my_XRRModeInfo_32_s { + XID_32 id; + unsigned int width; + unsigned int height; + ulong_t dotClock; + unsigned int hSyncStart; + unsigned int hSyncEnd; + unsigned int hTotal; + unsigned int hSkew; + unsigned int vSyncStart; + unsigned int vSyncEnd; + unsigned int vTotal; + ptr_t name; //char* + unsigned int nameLength; + ulong_t modeFlags; +} my_XRRModeInfo_32_t; + + +typedef struct my_XRRScreenResources_32_s { + ulong_t timestamp; + ulong_t configTimestamp; + int ncrtc; + ptr_t crtcs; //XID_32* + int noutput; + ptr_t outputs; //XID_32* + int nmode; + ptr_t modes; //my_XRRModeInfo_32_t * +} my_XRRScreenResources_32_t; + +typedef struct my_XRRCrtcInfo_32_s { + ulong_t timestamp; + int x, y; + unsigned int width, height; + XID_32 mode; + uint16_t rotation; + int noutput; + ptr_t outputs; //XID_32* + uint16_t rotations; + int npossible; + ptr_t possible; //XID_32* +} my_XRRCrtcInfo_32_t; + +typedef struct my_XRROutputInfo_32_s { + ulong_t timestamp; + XID_32 crtc; + ptr_t name; //char* + int nameLen; + ulong_t mm_width; + ulong_t mm_height; + uint16_t connection; + uint16_t subpixel_order; + int ncrtc; + ptr_t crtcs; //XID_32* + int nclone; + ptr_t clones; //XID_32* + int nmode; + int npreferred; + ptr_t modes; //XID_32* +} my_XRROutputInfo_32_t; + +typedef struct my_XWindowAttributes_32_s { + int x, y; + int width, height; + int border_width; + int depth; + ptr_t visual; //Visual* + XID_32 root; + int c_class; + int bit_gravity; + int win_gravity; + int backing_store; + ulong_t backing_planes; + ulong_t backing_pixel; + int save_under; + XID_32 colormap; + int map_installed; + int map_state; + long_t all_event_masks; + long_t your_event_mask; + long_t do_not_propagate_mask; + int override_redirect; + ptr_t screen; //Screen* +} my_XWindowAttributes_32_t; + +typedef struct my_XVisualInfo_32_s { + ptr_t visual; //Visual* + ulong_t visualid; + int screen; + int depth; + int c_class; + ulong_t red_mask; + ulong_t green_mask; + ulong_t blue_mask; + int colormap_size; + int bits_per_rgb; +} my_XVisualInfo_32_t; + +typedef struct my_XModifierKeymap_32_s { + int max_keypermod; + ptr_t modifiermap; //uint8_t* +} my_XModifierKeymap_32_t; + +typedef struct my_XdbeVisualInfo_32_s +{ + XID_32 visual; + int depth; + int perflevel; +} my_XdbeVisualInfo_32_t; + +typedef struct my_XdbeScreenVisualInfo_32_s +{ + int count; + ptr_t visinfo; //my_XdbeVisualInfo_t* +} my_XdbeScreenVisualInfo_32_t; + +typedef struct my_XF86VidModeModeInfo_32_s +{ + unsigned int dotclock; + unsigned short hdisplay; + unsigned short hsyncstart; + unsigned short hsyncend; + unsigned short htotal; + unsigned short hskew; + unsigned short vdisplay; + unsigned short vsyncstart; + unsigned short vsyncend; + unsigned short vtotal; + unsigned int flags; + int privsize; + ptr_t tc_private; +} my_XF86VidModeModeInfo_32_t; + +typedef struct my_XColor_32_s { + ulong_t pixel; + unsigned short red, green, blue; + char flags; + char pad; +} my_XColor_32_t; + +typedef struct my_XRRProviderInfo_32_s { + unsigned int capabilities; + int ncrtcs; + ptr_t crtcs; //XID* + int noutputs; + ptr_t outputs; //XID* + ptr_t name; //char* + int nassociatedproviders; + ptr_t associated_providers; //XID* + ptr_t associated_capability; //unsigned int* + int nameLen; +} my_XRRProviderInfo_32_t; + +typedef struct my_XRRProviderResources_32_t { + ulong_t timestamp; + int nproviders; + ptr_t providers; //XID* +} my_XRRProviderResources_32_t; + +typedef struct my_XIAnyClassInfo_32_s +{ + int type; + int sourceid; +} my_XIAnyClassInfo_32_t; + +typedef struct my_XIDeviceInfo_32_s +{ + int deviceid; + ptr_t name; //char* + int use; + int attachment; + int enabled; + int num_classes; + ptr_t classes; //my_XIAnyClassInfo_t** +} my_XIDeviceInfo_32_t; + +typedef struct my_XIEventMask_32_s { + int deviceid; + int mask_len; + ptr_t mask; //unsigned char* +} my_XIEventMask_32_t; + +typedef struct my_XInputClassInfo_32_s { + unsigned char input_class; + unsigned char event_type_base; +} my_XInputClassInfo_32_t; + +typedef struct my_XDevice_32_s { + XID_32 device_id; + int num_classes; + ptr_t classes; //my_XInputClassInfo_t* +} my_XDevice_32_t; + +typedef struct my_XDeviceKeyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 deviceid; + XID_32 root; + XID_32 subwindow; + ulong_t time; + int x, y; + int x_root; + int y_root; + unsigned int state; + unsigned int keycode; + int same_screen; + unsigned int device_state; + unsigned char axes_count; + unsigned char first_axis; + int axis_data[6]; +} my_XDeviceKeyEvent_32_t; +typedef my_XDeviceKeyEvent_32_t my_XDeviceButtonEvent_32_t; +typedef struct my_XDeviceMotionEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 deviceid; + XID_32 root; + XID_32 subwindow; + ulong_t time; + int x, y; + int x_root; + int y_root; + unsigned int state; + char is_hint; + int same_screen; + unsigned int device_state; + unsigned char axes_count; + unsigned char first_axis; + int axis_data[6]; +} my_XDeviceMotionEvent_32_t; +typedef struct my_XDeviceFocusChangeEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 deviceid; + int mode; + int detail; + ulong_t time; +} my_XDeviceFocusChangeEvent_32_t; +typedef struct my_XProximityNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 deviceid; + XID_32 root; + XID_32 subwindow; + ulong_t time; + int x, y; + int x_root; + int y_root; + unsigned int state; + int same_screen; + unsigned int device_state; + unsigned char axes_count; + unsigned char first_axis; + int axis_data[6]; +} my_XProximityNotifyEvent_32_t; +typedef struct my_XDeviceStateNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; //Display* + XID_32 window; + XID_32 deviceid; + ulong_t time; + int num_classes; + char data[64]; +} my_XDeviceStateNotifyEvent_32_t; +typedef struct my_XDeviceMappingEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + XID_32 deviceid; + ulong_t time; + int request; + int first_keycode; + int count; +} my_XDeviceMappingEvent_32_t; +typedef struct my_XChangeDeviceNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + XID_32 deviceid; + ulong_t time; + int request; +} my_XChangeDeviceNotifyEvent_32_t; +typedef struct my_XDevicePresenceNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + ulong_t time; + int devchange; + XID_32 deviceid; + XID_32 control; +} my_XDevicePresenceNotifyEvent_32_t; +typedef struct my_XDevicePropertyNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + ulong_t time; + XID_32 deviceid; + XID_32 atom; + int state; +} my_XDevicePropertyNotifyEvent_32_t; +typedef struct my_XFixesSelectionNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + int subtype; + ulong_t selection_timestamp; + XID_32 owner; + XID_32 selection; + ulong_t timestamp; +} my_XFixesSelectionNotifyEvent_32_t; +typedef struct my_XFixesCursorNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + int subtype; + ulong_t cursor_serial; + ulong_t timestamp; + XID_32 cursor_name; +} my_XFixesCursorNotifyEvent_32_t; + +typedef struct my_XRRScreenChangeNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + XID_32 root; + ulong_t timestamp; + ulong_t config_timestamp; + uint16_t size_index; + uint16_t subpixel_order; + uint16_t rotation; + int width; + int height; + int mwidth; + int mheight; +} my_XRRScreenChangeNotifyEvent_32_t; +typedef struct my_XRRNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + int subtype; +} my_XRRNotifyEvent_32_t; +typedef struct my_XRROutputChangeNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + int subtype; + XID_32 output; + XID_32 crtc; + XID_32 mode; + uint16_t rotation; + uint16_t connection; + uint16_t subpixel_order; +} my_XRROutputChangeNotifyEvent_32_t; +typedef struct my_XRRCrtcChangeNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + int subtype; + XID_32 crtc; + XID_32 mode; + uint16_t rotation; + int x, y; + unsigned int width, height; +} my_XRRCrtcChangeNotifyEvent_32_t; +typedef struct my_XRROutputPropertyNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + int subtype; + XID_32 output; + XID_32 property; + ulong_t timestamp; + int state; +} my_XRROutputPropertyNotifyEvent_32_t; +typedef struct my_XRRProviderChangeNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + int subtype; + XID_32 provider; + ulong_t timestamp; + unsigned int current_role; +} my_XRRProviderChangeNotifyEvent_32_t; +typedef struct my_XRRProviderPropertyNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + int subtype; + XID_32 provider; + XID_32 property; + ulong_t timestamp; + int state; +} my_XRRProviderPropertyNotifyEvent_32_t; +typedef struct my_XRRResourceChangeNotifyEvent_32_s +{ + int type; + ulong_t serial; + int send_event; + ptr_t display; + XID_32 window; + int subtype; + ulong_t timestamp; +} my_XRRResourceChangeNotifyEvent_32_t; + +typedef struct my_XcursorCursors_32_s { + ptr_t dpy; //Display* + int ref; + int ncursor; + ptr_t cursors; //Cursor* +} my_XcursorCursors_32_t; + +typedef struct my_XExtCodes_32_s { + int extension; + int major_opcode; + int first_event; + int first_error; +} my_XExtCodes_32_t; + +typedef struct my_XExtDisplayInfo_32_s { + ptr_t next; //struct my_XExtDisplayInfo_s* + ptr_t display; //Didsplay* + ptr_t codes; //my_XExtCodes_t* + ptr_t data; //void* +} my_XExtDisplayInfo_32_t; + +typedef struct my_XExtensionInfo_32_s { + ptr_t head; //my_XExtDisplayInfo_t* + ptr_t cur; //my_XExtDisplayInfo_t* + int ndisplays; +} my_XExtensionInfo_32_t; + +typedef struct my_XCharStruct_32_t { + short lbearing; + short rbearing; + short width; + short ascent; + short descent; + unsigned short attributes; +} my_XCharStruct_32_t; + +typedef struct my_XFontProp_32_s { + XID_32 name; + ulong_t card32; +} my_XFontProp_32_t; + +typedef struct my_XFontStruct_32_s { + ptr_t ext_data; //XExtData* + XID_32 fid; + unsigned direction; + unsigned min_char_or_byte2; + unsigned max_char_or_byte2; + unsigned min_byte1; + unsigned max_byte1; + int all_chars_exist; + unsigned default_char; + int n_properties; + ptr_t properties; //my_XFontProp_t* + my_XCharStruct_32_t min_bounds; + my_XCharStruct_32_t max_bounds; + ptr_t per_char; //my_XCharStruct_t* + int ascent; + int descent; +} my_XFontStruct_32_t; + +typedef struct my_XExtensionHooks_32_s { + ptr_t create_gc; //int (*create_gc)(void* dpy, void* gc, my_XExtCodes_t* e); + ptr_t copy_gc; //int (*copy_gc)(void* dpy, void* gc, my_XExtCodes_t* e); + ptr_t flush_gc; //int (*flush_gc)(void* dpy, void* gc, my_XExtCodes_t* e); + ptr_t free_gc; //int (*free_gc)(void* dpy, void* gc, my_XExtCodes_t* e); + ptr_t create_font; //int (*create_font)(void* dpy, my_XFontStruct_t* f, my_XExtCodes_t* e); + ptr_t free_font; //int (*free_font)(void* dpy, my_XFontStruct_t* f, my_XExtCodes_t* e); + ptr_t close_display; //int (*close_display)(void* dpy, my_XExtCodes_t* e); + ptr_t wire_to_event; //int (*wire_to_event)(void* dpy, my_XEvent_t* evt, void* xEvent); + ptr_t event_to_wire; //int (*event_to_wire)(void* dpy, my_XEvent_t* evt, void* xEvent); + ptr_t error; //int (*error)(void* dpy, void* xError, my_XExtCodes_t* e, int* n); + ptr_t error_string; //char*(*error_string)(void* dpy, int, my_XExtCodes_t* e, char* s, int n); +} my_XExtensionHooks_32_t; + +typedef struct my_XRRPropertyInfo_32_s { + int pending; + int range; + int immutable; + int num_values; + ptr_t values; //long* +} my_XRRPropertyInfo_32_t; + +typedef struct my_XShmSegmentInfo_32_s { + XID_32 shmseg; + int shmid; + ptr_t shmaddr; + int readOnly; +} my_XShmSegmentInfo_32_t; + +#endif//MY_X11_DEFS_32 \ No newline at end of file diff --git a/src/libtools/my_x11_xevent.c b/src/libtools/my_x11_xevent.c new file mode 100644 index 0000000000000000000000000000000000000000..bd1bf97ffb2b9b25c2b5df5b968dd492bfd15738 --- /dev/null +++ b/src/libtools/my_x11_xevent.c @@ -0,0 +1,1353 @@ +#include +#include + +#include "debug.h" +#include "box32context.h" +#include "wrapper32.h" +#include "library.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "converter32.h" +#include "my_x11_defs.h" +#include "my_x11_defs_32.h" +#include "my_x11_conv.h" + +typedef void(*convertXEvent_to_32)(my_XEvent_32_t* dst, my_XEvent_t* src); +typedef void(*convertXEvent_to_64)(my_XEvent_t* dst, my_XEvent_32_t* src); + +typedef struct reg_event_s { + uint32_t event; + convertXEvent_to_32 to32; + convertXEvent_to_64 to64; +} reg_event_t; +typedef struct register_events_s { + void* id; + uint32_t start_event; + uint32_t end_event; + size_t n; + reg_event_t* events; + struct register_events_s* next; +} register_events_t; + +static register_events_t* register_events_head = NULL; + +void convertXEvent(my_XEvent_32_t* dst, my_XEvent_t* src) +{ + if(!src->type) { + // This is an XErrorEvent, and it's different! + dst->xerror.type = src->xerror.type; + dst->xerror.display = to_ptrv(FindDisplay(src->xerror.display)); + dst->xerror.resourceid = to_ulong(src->xerror.resourceid); + dst->xerror.serial = to_ulong(src->xerror.serial); + dst->xerror.error_code = src->xerror.error_code; + dst->xerror.request_code = src->xerror.request_code; + dst->xerror.minor_code = src->xerror.minor_code; + return; + } + // convert the XAnyEvent first, as it's a common set + int type = src->type; + dst->type = src->type; + dst->xany.serial = to_ulong(src->xany.serial); + dst->xany.send_event = src->xany.serial; + dst->xany.display = to_ptrv(FindDisplay(src->xany.display)); + if(type!=XEVT_GenericEvent) + dst->xany.window = to_ulong(src->xany.window); + switch(type) { + case XEVT_KeyPress: + case XEVT_KeyRelease: + dst->xkey.root = to_ulong(src->xkey.root); + dst->xkey.subwindow = to_ulong(src->xkey.subwindow); + dst->xkey.time = to_ulong(src->xkey.time); + dst->xkey.x = src->xkey.x; + dst->xkey.y = src->xkey.y; + dst->xkey.x_root = src->xkey.x_root; + dst->xkey.y_root = src->xkey.y_root; + dst->xkey.state = src->xkey.state; + dst->xkey.keycode = src->xkey.keycode; + dst->xkey.same_screen = src->xkey.same_screen; + break; + case XEVT_ButtonPress: + case XEVT_ButtonRelease: + dst->xbutton.root = to_ulong(src->xbutton.root); + dst->xbutton.subwindow = to_ulong(src->xbutton.subwindow); + dst->xbutton.time = to_ulong(src->xbutton.time); + dst->xbutton.x = src->xbutton.x; + dst->xbutton.y = src->xbutton.y; + dst->xbutton.x_root = src->xbutton.x_root; + dst->xbutton.y_root = src->xbutton.y_root; + dst->xbutton.state = src->xbutton.state; + dst->xbutton.button = src->xbutton.button; + dst->xbutton.same_screen = src->xbutton.same_screen; + break; + case XEVT_MotionNotify: + dst->xmotion.root = to_ulong(src->xmotion.root); + dst->xmotion.subwindow = to_ulong(src->xmotion.subwindow); + dst->xmotion.time = to_ulong(src->xmotion.time); + dst->xmotion.x = src->xmotion.x; + dst->xmotion.y = src->xmotion.y; + dst->xmotion.x_root = src->xmotion.x_root; + dst->xmotion.y_root = src->xmotion.y_root; + dst->xmotion.state = src->xmotion.state; + dst->xmotion.is_hint = src->xmotion.is_hint; + dst->xmotion.same_screen = src->xmotion.same_screen; + break; + case XEVT_EnterNotify: + case XEVT_LeaveNotify: + dst->xcrossing.root = to_ulong(src->xcrossing.root); + dst->xcrossing.subwindow = to_ulong(src->xcrossing.subwindow); + dst->xcrossing.time = to_ulong(src->xcrossing.time); + dst->xcrossing.x = src->xcrossing.x; + dst->xcrossing.y = src->xcrossing.y; + dst->xcrossing.x_root = src->xcrossing.x_root; + dst->xcrossing.y_root = src->xcrossing.y_root; + dst->xcrossing.mode = src->xcrossing.mode; + dst->xcrossing.detail = src->xcrossing.detail; + dst->xcrossing.same_screen = src->xcrossing.same_screen; + dst->xcrossing.focus = src->xcrossing.focus; + dst->xcrossing.state = src->xcrossing.state; + break; + case XEVT_FocusIn: + case XEVT_FocusOut: + dst->xfocus.mode = src->xfocus.mode; + dst->xfocus.detail = src->xfocus.detail; + break; + case XEVT_KeymapNotify: + memcpy(dst->xkeymap.key_vector, src->xkeymap.key_vector, 32); + break; + case XEVT_Expose: + dst->xexpose.x = src->xexpose.x; + dst->xexpose.y = src->xexpose.y; + dst->xexpose.width = src->xexpose.width; + dst->xexpose.height = src->xexpose.height; + dst->xexpose.count = src->xexpose.count; + break; + case XEVT_GraphicsExpose: + dst->xgraphicsexpose.x = src->xgraphicsexpose.x; + dst->xgraphicsexpose.y = src->xgraphicsexpose.y; + dst->xgraphicsexpose.width = src->xgraphicsexpose.width; + dst->xgraphicsexpose.height = src->xgraphicsexpose.height; + dst->xgraphicsexpose.count = src->xgraphicsexpose.count; + dst->xgraphicsexpose.major_code = src->xgraphicsexpose.major_code; + dst->xgraphicsexpose.minor_code = src->xgraphicsexpose.minor_code; + break; + case XEVT_NoExpose: + dst->xnoexpose.major_code = src->xnoexpose.major_code; + dst->xnoexpose.minor_code = src->xnoexpose.minor_code; + break; + case XEVT_VisibilityNotify: + dst->xvisibility.state = src->xvisibility.state; + break; + case XEVT_CreateNotify: + dst->xcreatewindow.window = to_ulong(src->xcreatewindow.window); + dst->xcreatewindow.x = src->xcreatewindow.x; + dst->xcreatewindow.y = src->xcreatewindow.y; + dst->xcreatewindow.width = src->xcreatewindow.width; + dst->xcreatewindow.height = src->xcreatewindow.height; + dst->xcreatewindow.border_width = src->xcreatewindow.border_width; + dst->xcreatewindow.override_redirect = src->xcreatewindow.override_redirect; + break; + case XEVT_DestroyNotify: + dst->xdestroywindow.window = to_ulong(src->xdestroywindow.window); + break; + case XEVT_UnmapNotify: + dst->xunmap.window = to_ulong(src->xunmap.window); + dst->xunmap.from_configure = src->xunmap.from_configure; + break; + case XEVT_MapNotify: + dst->xmap.window = to_ulong(src->xmap.window); + dst->xmap.override_redirect = src->xmap.override_redirect; + break; + case XEVT_MapRequest: + dst->xmaprequest.window = to_ulong(src->xmaprequest.window); + break; + case XEVT_ReparentNotify: + dst->xreparent.window = to_ulong(src->xreparent.window); + dst->xreparent.parent = to_ulong(src->xreparent.parent); + dst->xreparent.x = src->xreparent.x; + dst->xreparent.y = src->xreparent.y; + dst->xreparent.override_redirect = src->xreparent.override_redirect; + break; + case XEVT_ConfigureNotify: + dst->xconfigure.window = to_ulong(src->xconfigure.window); + dst->xconfigure.x = src->xconfigure.x; + dst->xconfigure.y = src->xconfigure.y; + dst->xconfigure.width = src->xconfigure.width; + dst->xconfigure.height = src->xconfigure.height; + dst->xconfigure.border_width = src->xconfigure.border_width; + dst->xconfigure.above = to_ulong(src->xconfigure.above); + dst->xconfigure.override_redirect = src->xconfigure.override_redirect; + break; + case XEVT_ConfigureRequest: + dst->xconfigurerequest.window = to_ulong(src->xconfigurerequest.window); + dst->xconfigurerequest.x = src->xconfigurerequest.x; + dst->xconfigurerequest.y = src->xconfigurerequest.y; + dst->xconfigurerequest.width = src->xconfigurerequest.width; + dst->xconfigurerequest.height = src->xconfigurerequest.height; + dst->xconfigurerequest.border_width = src->xconfigurerequest.border_width; + dst->xconfigurerequest.above = to_ulong(src->xconfigurerequest.above); + dst->xconfigurerequest.detail = src->xconfigurerequest.detail; + dst->xconfigurerequest.value_mask = to_ulong(src->xconfigurerequest.value_mask); + break; + case XEVT_GravityNotify: + dst->xgravity.window = to_ulong(src->xgravity.window); + dst->xgravity.x = src->xgravity.x; + dst->xgravity.y = src->xgravity.y; + break; + case XEVT_ResizeRequest: + dst->xresizerequest.width = src->xresizerequest.width; + dst->xresizerequest.height = src->xresizerequest.height; + break; + case XEVT_CirculateNotify: + dst->xcirculate.window = to_ulong(src->xcirculate.window); + dst->xcirculate.place = src->xcirculate.place; + break; + case XEVT_CirculateRequest: + dst->xcirculaterequest.window = to_ulong(src->xcirculaterequest.window); + dst->xcirculaterequest.place = src->xcirculaterequest.place; + break; + case XEVT_PropertyNotify: + dst->xproperty.atom = to_ulong(src->xproperty.atom); + dst->xproperty.time = to_ulong(src->xproperty.time); + dst->xproperty.state = src->xproperty.state; + break; + case XEVT_SelectionClear: + dst->xselectionclear.selection = to_ulong(src->xselectionclear.selection); + dst->xselectionclear.time = to_ulong(src->xselectionclear.time); + break; + case XEVT_SelectionRequest: + dst->xselectionrequest.requestor = to_ulong(src->xselectionrequest.requestor); + dst->xselectionrequest.selection = to_ulong(src->xselectionrequest.selection); + dst->xselectionrequest.target = to_ulong(src->xselectionrequest.target); + dst->xselectionrequest.property = to_ulong(src->xselectionrequest.property); + dst->xselectionrequest.time = to_ulong(src->xselectionrequest.time); + break; + case XEVT_SelectionNotify: + dst->xselection.selection = to_ulong(src->xselection.selection); + dst->xselection.target = to_ulong(src->xselection.target); + dst->xselection.property = to_ulong(src->xselection.property); + dst->xselection.time = to_ulong(src->xselection.time); + break; + case XEVT_ColormapNotify: + dst->xcolormap.colormap = to_ulong(src->xcolormap.colormap); + dst->xcolormap.c_new = src->xcolormap.c_new; + dst->xcolormap.state = src->xcolormap.state; + break; + case XEVT_ClientMessage: + dst->xclient.message_type = to_ulong(src->xclient.message_type); + dst->xclient.format = src->xclient.format; + if(src->xclient.format==32) + for(int i=0; i<5; ++i) { + if(((src->xclient.data.l[i]&0xffffffff80000000LL))==0xffffffff80000000LL) + dst->xclient.data.l[i] = to_ulong(src->xclient.data.l[i]&0xffffffff); // negative value... + else + dst->xclient.data.l[i] = to_ulong(src->xclient.data.l[i]); + } + else + memcpy(dst->xclient.data.b, src->xclient.data.b, 20); + break; + case XEVT_MappingNotify: + dst->xmapping.request = src->xmapping.request; + dst->xmapping.first_keycode = src->xmapping.first_keycode; + dst->xmapping.count = src->xmapping.count; + break; + case XEVT_GenericEvent: + dst->xcookie.extension = src->xcookie.extension; + dst->xcookie.evtype = src->xcookie.evtype; + dst->xcookie.cookie = src->xcookie.cookie; + dst->xcookie.data = to_ptrv_silent(src->xcookie.data); // in case data are not initialized + break; + default: { + register_events_t* head = register_events_head; + while(head) { + if(type>=head->start_event && type<=head->end_event) { + for(int i=0; in; ++i) + if(type==head->events[i].event) { + head->events[i].to32(dst, src); + return; + } + } + head = head->next; + } + printf_log(LOG_INFO, "Warning, unsupported 32bits XEvent type=%d\n", type); + } + } +} +void unconvertXEvent(my_XEvent_t* dst, my_XEvent_32_t* src) +{ + if(!src->type) { + // This is an XErrorEvent, and it's different! + dst->xerror.type = src->xerror.type; + dst->xerror.display = getDisplay(from_ptrv(src->xerror.display)); + dst->xerror.resourceid = from_ulong(src->xerror.resourceid); + dst->xerror.serial = from_ulong(src->xerror.serial); + dst->xerror.error_code = src->xerror.error_code; + dst->xerror.request_code = src->xerror.request_code; + dst->xerror.minor_code = src->xerror.minor_code; + return; + } + // convert the XAnyEvent first, as it's a common set + int type = src->type; + dst->type = src->type; + if(type!=XEVT_GenericEvent) + dst->xany.window = from_ulong(src->xany.window); + dst->xany.display = getDisplay(from_ptrv(src->xany.display)); + dst->xany.send_event = src->xany.serial; + dst->xany.serial = from_ulong(src->xany.serial); + switch(type) { + case XEVT_KeyPress: + case XEVT_KeyRelease: + dst->xkey.root = from_ulong(src->xkey.root); + dst->xkey.subwindow = from_ulong(src->xkey.subwindow); + dst->xkey.time = from_ulong(src->xkey.time); + dst->xkey.x = src->xkey.x; + dst->xkey.y = src->xkey.y; + dst->xkey.x_root = src->xkey.x_root; + dst->xkey.y_root = src->xkey.y_root; + dst->xkey.state = src->xkey.state; + dst->xkey.keycode = src->xkey.keycode; + dst->xkey.same_screen = src->xkey.same_screen; + break; + case XEVT_ButtonPress: + case XEVT_ButtonRelease: + dst->xbutton.root = from_ulong(src->xbutton.root); + dst->xbutton.subwindow = from_ulong(src->xbutton.subwindow); + dst->xbutton.time = from_ulong(src->xbutton.time); + dst->xbutton.x = src->xbutton.x; + dst->xbutton.y = src->xbutton.y; + dst->xbutton.x_root = src->xbutton.x_root; + dst->xbutton.y_root = src->xbutton.y_root; + dst->xbutton.state = src->xbutton.state; + dst->xbutton.button = src->xbutton.button; + dst->xbutton.same_screen = src->xbutton.same_screen; + break; + case XEVT_MotionNotify: + dst->xmotion.root = from_ulong(src->xmotion.root); + dst->xmotion.subwindow = from_ulong(src->xmotion.subwindow); + dst->xmotion.time = from_ulong(src->xmotion.time); + dst->xmotion.x = src->xmotion.x; + dst->xmotion.y = src->xmotion.y; + dst->xmotion.x_root = src->xmotion.x_root; + dst->xmotion.y_root = src->xmotion.y_root; + dst->xmotion.state = src->xmotion.state; + dst->xmotion.is_hint = src->xmotion.is_hint; + dst->xmotion.same_screen = src->xmotion.same_screen; + break; + case XEVT_EnterNotify: + case XEVT_LeaveNotify: + dst->xcrossing.root = from_ulong(src->xcrossing.root); + dst->xcrossing.subwindow = from_ulong(src->xcrossing.subwindow); + dst->xcrossing.time = from_ulong(src->xcrossing.time); + dst->xcrossing.x = src->xcrossing.x; + dst->xcrossing.y = src->xcrossing.y; + dst->xcrossing.x_root = src->xcrossing.x_root; + dst->xcrossing.y_root = src->xcrossing.y_root; + dst->xcrossing.mode = src->xcrossing.mode; + dst->xcrossing.detail = src->xcrossing.detail; + dst->xcrossing.same_screen = src->xcrossing.same_screen; + dst->xcrossing.focus = src->xcrossing.focus; + dst->xcrossing.state = src->xcrossing.state; + break; + case XEVT_FocusIn: + case XEVT_FocusOut: + dst->xfocus.mode = src->xfocus.mode; + dst->xfocus.detail = src->xfocus.detail; + break; + case XEVT_KeymapNotify: + memcpy(dst->xkeymap.key_vector, src->xkeymap.key_vector, 32); + break; + case XEVT_Expose: + dst->xexpose.x = src->xexpose.x; + dst->xexpose.y = src->xexpose.y; + dst->xexpose.width = src->xexpose.width; + dst->xexpose.height = src->xexpose.height; + dst->xexpose.count = src->xexpose.count; + break; + case XEVT_GraphicsExpose: + dst->xgraphicsexpose.x = src->xgraphicsexpose.x; + dst->xgraphicsexpose.y = src->xgraphicsexpose.y; + dst->xgraphicsexpose.width = src->xgraphicsexpose.width; + dst->xgraphicsexpose.height = src->xgraphicsexpose.height; + dst->xgraphicsexpose.count = src->xgraphicsexpose.count; + dst->xgraphicsexpose.major_code = src->xgraphicsexpose.major_code; + dst->xgraphicsexpose.minor_code = src->xgraphicsexpose.minor_code; + break; + case XEVT_NoExpose: + dst->xnoexpose.major_code = src->xnoexpose.major_code; + dst->xnoexpose.minor_code = src->xnoexpose.minor_code; + break; + case XEVT_VisibilityNotify: + dst->xvisibility.state = src->xvisibility.state; + break; + case XEVT_CreateNotify: + dst->xcreatewindow.window = from_ulong(src->xcreatewindow.window); + dst->xcreatewindow.x = src->xcreatewindow.x; + dst->xcreatewindow.y = src->xcreatewindow.y; + dst->xcreatewindow.width = src->xcreatewindow.width; + dst->xcreatewindow.height = src->xcreatewindow.height; + dst->xcreatewindow.border_width = src->xcreatewindow.border_width; + dst->xcreatewindow.override_redirect = src->xcreatewindow.override_redirect; + break; + case XEVT_DestroyNotify: + dst->xdestroywindow.window = from_ulong(src->xdestroywindow.window); + break; + case XEVT_UnmapNotify: + dst->xunmap.window = from_ulong(src->xunmap.window); + dst->xunmap.from_configure = src->xunmap.from_configure; + break; + case XEVT_MapNotify: + dst->xmap.window = from_ulong(src->xmap.window); + dst->xmap.override_redirect = src->xmap.override_redirect; + break; + case XEVT_MapRequest: + dst->xmaprequest.window = from_ulong(src->xmaprequest.window); + break; + case XEVT_ReparentNotify: + dst->xreparent.window = from_ulong(src->xreparent.window); + dst->xreparent.parent = from_ulong(src->xreparent.parent); + dst->xreparent.x = src->xreparent.x; + dst->xreparent.y = src->xreparent.y; + dst->xreparent.override_redirect = src->xreparent.override_redirect; + break; + case XEVT_ConfigureNotify: + dst->xconfigure.window = from_ulong(src->xconfigure.window); + dst->xconfigure.x = src->xconfigure.x; + dst->xconfigure.y = src->xconfigure.y; + dst->xconfigure.width = src->xconfigure.width; + dst->xconfigure.height = src->xconfigure.height; + dst->xconfigure.border_width = src->xconfigure.border_width; + dst->xconfigure.above = from_ulong(src->xconfigure.above); + dst->xconfigure.override_redirect = src->xconfigure.override_redirect; + break; + case XEVT_ConfigureRequest: + dst->xconfigurerequest.window = from_ulong(src->xconfigurerequest.window); + dst->xconfigurerequest.x = src->xconfigurerequest.x; + dst->xconfigurerequest.y = src->xconfigurerequest.y; + dst->xconfigurerequest.width = src->xconfigurerequest.width; + dst->xconfigurerequest.height = src->xconfigurerequest.height; + dst->xconfigurerequest.border_width = src->xconfigurerequest.border_width; + dst->xconfigurerequest.above = from_ulong(src->xconfigurerequest.above); + dst->xconfigurerequest.detail = src->xconfigurerequest.detail; + dst->xconfigurerequest.value_mask = from_ulong(src->xconfigurerequest.value_mask); + break; + case XEVT_GravityNotify: + dst->xgravity.window = from_ulong(src->xgravity.window); + dst->xgravity.x = src->xgravity.x; + dst->xgravity.y = src->xgravity.y; + break; + case XEVT_ResizeRequest: + dst->xresizerequest.width = src->xresizerequest.width; + dst->xresizerequest.height = src->xresizerequest.height; + break; + case XEVT_CirculateNotify: + dst->xcirculate.window = from_ulong(src->xcirculate.window); + dst->xcirculate.place = src->xcirculate.place; + break; + case XEVT_CirculateRequest: + dst->xcirculaterequest.window = from_ulong(src->xcirculaterequest.window); + dst->xcirculaterequest.place = src->xcirculaterequest.place; + break; + case XEVT_PropertyNotify: + dst->xproperty.atom = from_ulong(src->xproperty.atom); + dst->xproperty.time = from_ulong(src->xproperty.time); + dst->xproperty.state = src->xproperty.state; + break; + case XEVT_SelectionClear: + dst->xselectionclear.selection = from_ulong(src->xselectionclear.selection); + dst->xselectionclear.time = from_ulong(src->xselectionclear.time); + break; + case XEVT_SelectionRequest: + dst->xselectionrequest.requestor = from_ulong(src->xselectionrequest.requestor); + dst->xselectionrequest.selection = from_ulong(src->xselectionrequest.selection); + dst->xselectionrequest.target = from_ulong(src->xselectionrequest.target); + dst->xselectionrequest.property = from_ulong(src->xselectionrequest.property); + dst->xselectionrequest.time = from_ulong(src->xselectionrequest.time); + break; + case XEVT_SelectionNotify: + dst->xselection.selection = from_ulong(src->xselection.selection); + dst->xselection.target = from_ulong(src->xselection.target); + dst->xselection.property = from_ulong(src->xselection.property); + dst->xselection.time = from_ulong(src->xselection.time); + break; + case XEVT_ColormapNotify: + dst->xcolormap.colormap = from_ulong(src->xcolormap.colormap); + dst->xcolormap.c_new = src->xcolormap.c_new; + dst->xcolormap.state = src->xcolormap.state; + break; + case XEVT_ClientMessage: + dst->xclient.message_type = from_ulong(src->xclient.message_type); + dst->xclient.format = src->xclient.format; + if(src->xclient.format==32) + for(int i=0; i<5; ++i) dst->xclient.data.l[i] = from_ulong(src->xclient.data.l[i]); + else + memcpy(dst->xclient.data.b, src->xclient.data.b, 20); + break; + case XEVT_MappingNotify: + dst->xmapping.request = src->xmapping.request; + dst->xmapping.first_keycode = src->xmapping.first_keycode; + dst->xmapping.count = src->xmapping.count; + break; + case XEVT_GenericEvent: + dst->xcookie.extension = src->xcookie.extension; + dst->xcookie.evtype = src->xcookie.evtype; + dst->xcookie.cookie = src->xcookie.cookie; + dst->xcookie.data = from_ptrv(src->xcookie.data); + break; + + default: { + register_events_t* head = register_events_head; + while(head) { + if(type>=head->start_event && type<=head->end_event) { + for(int i=0; in; ++i) + if(type==head->events[i].event) { + head->events[i].to64(dst, src); + return; + } + } + head = head->next; + } + printf_log(LOG_INFO, "Warning, unsupported 32bits (un)XEvent type=%d\n", type); + } + } +} + +void convert_XErrorEvent_to_32(void* d, void* s) +{ + my_XErrorEvent_t* src = s; + my_XErrorEvent_32_t* dst = d; + dst->type = src->type; + dst->display = to_ptrv(FindDisplay(src->display)); + dst->resourceid = to_ulong(src->resourceid); + dst->serial = to_ulong(src->serial); + dst->error_code = src->error_code; + dst->request_code = src->request_code; + dst->minor_code = src->minor_code; +} +void convert_XErrorEvent_to_64(void* d, void* s) +{ + my_XErrorEvent_32_t* src = s; + my_XErrorEvent_t* dst = d; + dst->minor_code = src->minor_code; + dst->request_code = src->request_code; + dst->error_code = src->error_code; + dst->serial = from_ulong(src->serial); + dst->resourceid = from_ulong(src->resourceid); + dst->display = getDisplay(from_ptrv(src->display)); + dst->type = src->type; +} + +void convert_XDeviceKeyEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XDeviceKeyEvent_t* src = (my_XDeviceKeyEvent_t*)s; + my_XDeviceKeyEvent_32_t* dst = (my_XDeviceKeyEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + dst->deviceid = to_ulong(src->deviceid); + dst->root = to_ulong(src->root); + dst->subwindow = to_ulong(src->subwindow); + dst->time = to_ulong(src->time); + dst->x = src->x; + dst->y = src->y; + dst->x_root = src->x_root; + dst->y_root = src->y_root; + dst->state = src->state; + dst->keycode = src->keycode; + dst->same_screen = src->same_screen; + dst->device_state = src->device_state; + dst->axes_count = src->axes_count; + dst->first_axis = src->first_axis; + dst->axis_data[0] = src->axis_data[0]; + dst->axis_data[1] = src->axis_data[1]; + dst->axis_data[2] = src->axis_data[2]; + dst->axis_data[3] = src->axis_data[3]; + dst->axis_data[4] = src->axis_data[4]; + dst->axis_data[5] = src->axis_data[5]; +} +void convert_XDeviceKeyEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XDeviceKeyEvent_32_t* src = (my_XDeviceKeyEvent_32_t*)s; + my_XDeviceKeyEvent_t* dst = (my_XDeviceKeyEvent_t*)d; + + dst->axis_data[5] = src->axis_data[5]; + dst->axis_data[4] = src->axis_data[4]; + dst->axis_data[3] = src->axis_data[3]; + dst->axis_data[2] = src->axis_data[2]; + dst->axis_data[1] = src->axis_data[1]; + dst->axis_data[0] = src->axis_data[0]; + dst->first_axis = src->first_axis; + dst->axes_count = src->axes_count; + dst->device_state = src->device_state; + dst->same_screen = src->same_screen; + dst->keycode = src->keycode; + dst->state = src->state; + dst->y_root = src->y_root; + dst->x_root = src->x_root; + dst->y = src->y; + dst->x = src->x; + dst->time = from_ulong(src->time); + dst->subwindow = from_ulong(src->subwindow); + dst->root = from_ulong(src->root); + dst->deviceid = from_ulong(src->deviceid); + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} +void convert_XDeviceMotionEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XDeviceMotionEvent_t* src = (my_XDeviceMotionEvent_t*)s; + my_XDeviceMotionEvent_32_t* dst = (my_XDeviceMotionEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + dst->deviceid = to_ulong(src->deviceid); + dst->root = to_ulong(src->root); + dst->subwindow = to_ulong(src->subwindow); + dst->time = to_ulong(src->time); + dst->x = src->x; + dst->y = src->y; + dst->x_root = src->x_root; + dst->y_root = src->y_root; + dst->state = src->state; + dst->is_hint = src->is_hint; + dst->same_screen = src->same_screen; + dst->device_state = src->device_state; + dst->axes_count = src->axes_count; + dst->first_axis = src->first_axis; + dst->axis_data[0] = src->axis_data[0]; + dst->axis_data[1] = src->axis_data[1]; + dst->axis_data[2] = src->axis_data[2]; + dst->axis_data[3] = src->axis_data[3]; + dst->axis_data[4] = src->axis_data[4]; + dst->axis_data[5] = src->axis_data[5]; +} +void convert_XDeviceMotionEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XDeviceMotionEvent_32_t* src = (my_XDeviceMotionEvent_32_t*)s; + my_XDeviceMotionEvent_t* dst = (my_XDeviceMotionEvent_t*)d; + + dst->axis_data[5] = src->axis_data[5]; + dst->axis_data[4] = src->axis_data[4]; + dst->axis_data[3] = src->axis_data[3]; + dst->axis_data[2] = src->axis_data[2]; + dst->axis_data[1] = src->axis_data[1]; + dst->axis_data[0] = src->axis_data[0]; + dst->first_axis = src->first_axis; + dst->axes_count = src->axes_count; + dst->device_state = src->device_state; + dst->same_screen = src->same_screen; + dst->is_hint = src->is_hint; + dst->state = src->state; + dst->y_root = src->y_root; + dst->x_root = src->x_root; + dst->y = src->y; + dst->x = src->x; + dst->time = from_ulong(src->time); + dst->subwindow = from_ulong(src->subwindow); + dst->root = from_ulong(src->root); + dst->deviceid = from_ulong(src->deviceid); + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} +void convert_XDeviceFocusEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XDeviceFocusChangeEvent_t* src = (my_XDeviceFocusChangeEvent_t*)s; + my_XDeviceFocusChangeEvent_32_t* dst = (my_XDeviceFocusChangeEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + dst->deviceid = to_ulong(src->deviceid); + dst->mode = src->mode; + dst->detail = src->detail; + dst->time = to_ulong(src->time); +} +void convert_XDeviceFocusEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XDeviceFocusChangeEvent_32_t* src = (my_XDeviceFocusChangeEvent_32_t*)s; + my_XDeviceFocusChangeEvent_t* dst = (my_XDeviceFocusChangeEvent_t*)d; + + dst->time = from_ulong(src->time); + dst->detail = src->detail; + dst->mode = src->mode; + dst->deviceid = from_ulong(src->deviceid); + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} +void convert_XProximityNotifyEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XProximityNotifyEvent_t* src = (my_XProximityNotifyEvent_t*)s; + my_XProximityNotifyEvent_32_t* dst = (my_XProximityNotifyEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + dst->deviceid = to_ulong(src->deviceid); + dst->root = to_ulong(src->root); + dst->subwindow = to_ulong(src->subwindow); + dst->time = to_ulong(src->time); + dst->x = src->x; + dst->y = src->y; + dst->x_root = src->x_root; + dst->y_root = src->y_root; + dst->state = src->state; + dst->same_screen = src->same_screen; + dst->device_state = src->device_state; + dst->axes_count = src->axes_count; + dst->first_axis = src->first_axis; + dst->axis_data[0] = src->axis_data[0]; + dst->axis_data[1] = src->axis_data[1]; + dst->axis_data[2] = src->axis_data[2]; + dst->axis_data[3] = src->axis_data[3]; + dst->axis_data[4] = src->axis_data[4]; + dst->axis_data[5] = src->axis_data[5]; +} +void convert_XProximityNotifyEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XProximityNotifyEvent_32_t* src = (my_XProximityNotifyEvent_32_t*)s; + my_XProximityNotifyEvent_t* dst = (my_XProximityNotifyEvent_t*)d; + + dst->axis_data[5] = src->axis_data[5]; + dst->axis_data[4] = src->axis_data[4]; + dst->axis_data[3] = src->axis_data[3]; + dst->axis_data[2] = src->axis_data[2]; + dst->axis_data[1] = src->axis_data[1]; + dst->axis_data[0] = src->axis_data[0]; + dst->first_axis = src->first_axis; + dst->axes_count = src->axes_count; + dst->device_state = src->device_state; + dst->same_screen = src->same_screen; + dst->state = src->state; + dst->y_root = src->y_root; + dst->x_root = src->x_root; + dst->y = src->y; + dst->x = src->x; + dst->time = from_ulong(src->time); + dst->subwindow = from_ulong(src->subwindow); + dst->root = from_ulong(src->root); + dst->deviceid = from_ulong(src->deviceid); + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} +void convert_XDeviceStateNotifyEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XDeviceStateNotifyEvent_t* src = (my_XDeviceStateNotifyEvent_t*)s; + my_XDeviceStateNotifyEvent_32_t* dst = (my_XDeviceStateNotifyEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + dst->deviceid = to_ulong(src->deviceid); + dst->time = to_ulong(src->time); + memmove(dst->data, src->data, 64); +} +void convert_XDeviceStateNotifyEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XDeviceStateNotifyEvent_32_t* src = (my_XDeviceStateNotifyEvent_32_t*)s; + my_XDeviceStateNotifyEvent_t* dst = (my_XDeviceStateNotifyEvent_t*)d; + + memmove(dst->data, src->data, 64); + dst->time = from_ulong(src->time); + dst->deviceid = from_ulong(src->deviceid); + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} +void convert_XDeviceMappingEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XDeviceMappingEvent_t* src = (my_XDeviceMappingEvent_t*)s; + my_XDeviceMappingEvent_32_t* dst = (my_XDeviceMappingEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + dst->deviceid = to_ulong(src->deviceid); + dst->time = to_ulong(src->time); + dst->request = src->request; + dst->first_keycode = src->first_keycode; + dst->count = src->count; +} +void convert_XDeviceMappingEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XDeviceMappingEvent_32_t* src = (my_XDeviceMappingEvent_32_t*)s; + my_XDeviceMappingEvent_t* dst = (my_XDeviceMappingEvent_t*)d; + + dst->count = src->count; + dst->first_keycode = src->first_keycode; + dst->request = src->request; + dst->time = from_ulong(src->time); + dst->deviceid = from_ulong(src->deviceid); + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} +void convert_XChangeDeviceNotifyEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XChangeDeviceNotifyEvent_t* src = (my_XChangeDeviceNotifyEvent_t*)s; + my_XChangeDeviceNotifyEvent_32_t* dst = (my_XChangeDeviceNotifyEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + dst->deviceid = to_ulong(src->deviceid); + dst->time = to_ulong(src->time); + dst->request = src->request; +} +void convert_XChangeDeviceNotifyEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XChangeDeviceNotifyEvent_32_t* src = (my_XChangeDeviceNotifyEvent_32_t*)s; + my_XChangeDeviceNotifyEvent_t* dst = (my_XChangeDeviceNotifyEvent_t*)d; + + dst->request = src->request; + dst->time = from_ulong(src->time); + dst->deviceid = from_ulong(src->deviceid); + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} +void convert_XDevicePresenceNotifyEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XDevicePresenceNotifyEvent_t* src = (my_XDevicePresenceNotifyEvent_t*)s; + my_XDevicePresenceNotifyEvent_32_t* dst = (my_XDevicePresenceNotifyEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + dst->time = to_ulong(src->time); + dst->devchange = src->devchange; + dst->deviceid = to_ulong(src->deviceid); + dst->control = to_ulong(src->control); +} +void convert_XDevicePresenceNotifyEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XDevicePresenceNotifyEvent_32_t* src = (my_XDevicePresenceNotifyEvent_32_t*)s; + my_XDevicePresenceNotifyEvent_t* dst = (my_XDevicePresenceNotifyEvent_t*)d; + + dst->control = from_ulong(src->control); + dst->deviceid = from_ulong(src->deviceid); + dst->devchange = src->devchange; + dst->time = from_ulong(src->time); + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} +void convert_XDevicePropertyNotifyEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XDevicePropertyNotifyEvent_t* src = (my_XDevicePropertyNotifyEvent_t*)s; + my_XDevicePropertyNotifyEvent_32_t* dst = (my_XDevicePropertyNotifyEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + dst->time = to_ulong(src->time); + dst->deviceid = to_ulong(src->deviceid); + dst->atom = to_ulong(src->atom); + dst->state = src->state; +} +void convert_XDevicePropertyNotifyEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XDevicePropertyNotifyEvent_32_t* src = (my_XDevicePropertyNotifyEvent_32_t*)s; + my_XDevicePropertyNotifyEvent_t* dst = (my_XDevicePropertyNotifyEvent_t*)d; + + dst->state = src->state; + dst->atom = from_ulong(src->atom); + dst->deviceid = from_ulong(src->deviceid); + dst->time = from_ulong(src->time); + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} +void register_XDevice_events(my_XDevice_t* a) +{ + if(!a) return; + // search if device is already in list + register_events_t* head = register_events_head; + while(head) { + if(head->id == a) + return; // found, nothing to do.... + head = head->next; + } + // counts events + int n=0; + for(int i=0; inum_classes; ++i) + switch(a->classes[i].input_class) { + case 0: n+=2; break; //KeyClass + case 1: n+=2; break; //ButtonClass + case 2: n+=1; break; //ValuatorClass + case 5: n+=2; break; //FocusClass + case 4: n+=2; break; //ProximityClass + case 6: n+=4; break; //OtherClass + } + // check if there is something to notify + if(!n) return; + // create a new event list + register_events_t* events = box_malloc(sizeof(register_events_t)+n*sizeof(reg_event_t)); + events->id = a; + events->n = n; + events->events = (reg_event_t*)(events+1); + n = 0; + for(int i=0; inum_classes; ++i) { + switch(a->classes[i].input_class) { + case 0: //KeyClass + events->events[n].event = a->classes[i].event_type_base+0; + events->events[n].to32 = convert_XDeviceKeyEvent_to_32; + events->events[n].to64 = convert_XDeviceKeyEvent_to_64; + ++n; + events->events[n].event = a->classes[i].event_type_base+1; + events->events[n].to32 = convert_XDeviceKeyEvent_to_32; + events->events[n].to64 = convert_XDeviceKeyEvent_to_64; + ++n; + break; + case 1: //ButtonClass + events->events[n].event = a->classes[i].event_type_base+0; + events->events[n].to32 = convert_XDeviceKeyEvent_to_32; + events->events[n].to64 = convert_XDeviceKeyEvent_to_64; + ++n; + events->events[n].event = a->classes[i].event_type_base+1; + events->events[n].to32 = convert_XDeviceKeyEvent_to_32; + events->events[n].to64 = convert_XDeviceKeyEvent_to_64; + ++n; + break; + case 2: //ValuatorClass + events->events[n].event = a->classes[i].event_type_base+0; + events->events[n].to32 = convert_XDeviceMotionEvent_to_32; + events->events[n].to64 = convert_XDeviceMotionEvent_to_64; + ++n; + break; + case 5: //FocusClass + events->events[n].event = a->classes[i].event_type_base+0; + events->events[n].to32 = convert_XDeviceFocusEvent_to_32; + events->events[n].to64 = convert_XDeviceFocusEvent_to_64; + ++n; + events->events[n].event = a->classes[i].event_type_base+1; + events->events[n].to32 = convert_XDeviceFocusEvent_to_32; + events->events[n].to64 = convert_XDeviceFocusEvent_to_64; + ++n; + break; + case 4: //ProximityClass + events->events[n].event = a->classes[i].event_type_base+0; + events->events[n].to32 = convert_XProximityNotifyEvent_to_32; + events->events[n].to64 = convert_XProximityNotifyEvent_to_64; + ++n; + events->events[n].event = a->classes[i].event_type_base+1; + events->events[n].to32 = convert_XProximityNotifyEvent_to_32; + events->events[n].to64 = convert_XProximityNotifyEvent_to_64; + ++n; + break; + case 6: //OtherClass + events->events[n].event = a->classes[i].event_type_base+0; + events->events[n].to32 = convert_XDeviceStateNotifyEvent_to_32; + events->events[n].to64 = convert_XDeviceStateNotifyEvent_to_64; + ++n; + events->events[n].event = a->classes[i].event_type_base+1; + events->events[n].to32 = convert_XDeviceMappingEvent_to_32; + events->events[n].to64 = convert_XDeviceMappingEvent_to_64; + ++n; + events->events[n].event = a->classes[i].event_type_base+2; + events->events[n].to32 = convert_XChangeDeviceNotifyEvent_to_32; + events->events[n].to64 = convert_XChangeDeviceNotifyEvent_to_64; + ++n; + //+3 would be DeviceKeyStateNotify + //+4 wpuld be DeviceButtonStateNotify + //+5 would be DevicePresenceNotify + events->events[n].event = a->classes[i].event_type_base+6; + events->events[n].to32 = convert_XDevicePropertyNotifyEvent_to_32; + events->events[n].to64 = convert_XDevicePropertyNotifyEvent_to_64; + ++n; + break; + } + } + events->start_event = events->end_event = events->events[0].event; + for(int i=1; istart_event>events->events[i].event) events->start_event = events->events[i].event; + if(events->end_eventevents[i].event) events->end_event = events->events[i].event; + } + events->next = register_events_head; + register_events_head = events; +} +void unregister_XDevice_events(my_XDevice_t* a) +{ + if(!a) return; + register_events_t* prev = NULL; + register_events_t* head = register_events_head; + while(head) { + if(head->id == a) { + if(!prev) + register_events_head = head->next; + else + prev->next = head->next; + box_free(head); + return; + } + prev = head; + head = head->next; + } +} + +void convert_XFixesSelectionNotifyEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XFixesSelectionNotifyEvent_t* src = (my_XFixesSelectionNotifyEvent_t*)s; + my_XFixesSelectionNotifyEvent_32_t* dst = (my_XFixesSelectionNotifyEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + dst->subtype = src->subtype; + dst->owner = to_ulong(src->owner); + dst->selection = to_ulong(src->selection); + dst->timestamp = to_ulong(src->timestamp); + dst->selection_timestamp = to_ulong(src->selection_timestamp); +} +void convert_XFixesSelectionNotifyEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XFixesSelectionNotifyEvent_32_t* src = (my_XFixesSelectionNotifyEvent_32_t*)s; + my_XFixesSelectionNotifyEvent_t* dst = (my_XFixesSelectionNotifyEvent_t*)d; + + dst->selection_timestamp = from_ulong(src->selection_timestamp); + dst->timestamp = from_ulong(src->timestamp); + dst->selection = from_ulong(src->selection); + dst->owner = from_ulong(src->owner); + dst->subtype = src->subtype; + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} +void convert_XFixesCursorNotifyEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XFixesCursorNotifyEvent_t* src = (my_XFixesCursorNotifyEvent_t*)s; + my_XFixesCursorNotifyEvent_32_t* dst = (my_XFixesCursorNotifyEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + dst->subtype = src->subtype; + dst->cursor_serial = to_ulong(src->cursor_serial); + dst->timestamp = to_ulong(src->timestamp); + dst->cursor_name = to_ulong(src->cursor_name); +} +void convert_XFixesCursorNotifyEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XFixesCursorNotifyEvent_32_t* src = (my_XFixesCursorNotifyEvent_32_t*)s; + my_XFixesCursorNotifyEvent_t* dst = (my_XFixesCursorNotifyEvent_t*)d; + + dst->cursor_serial = from_ulong(src->cursor_serial); + dst->timestamp = from_ulong(src->timestamp); + dst->cursor_name = from_ulong(src->cursor_name); + dst->subtype = src->subtype; + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} + +void register_XFixes_events(int event_base) +{ + void* a = (void*)1LL; + // search if device is already in list + register_events_t* head = register_events_head; + while(head) { + if(head->id == a) + return; // found, nothing to do.... + head = head->next; + } + int n = 2; // 2 events to register! + // create a new event list + register_events_t* events = box_malloc(sizeof(register_events_t)+n*sizeof(reg_event_t)); + events->id = a; + events->n = n; + events->events = (reg_event_t*)(events+1); + + events->events[0].event = event_base+0; + events->events[0].to32 = convert_XFixesSelectionNotifyEvent_to_32; + events->events[0].to64 = convert_XFixesSelectionNotifyEvent_to_64; + events->events[1].event = event_base+1; + events->events[1].to32 = convert_XFixesCursorNotifyEvent_to_32; + events->events[1].to64 = convert_XFixesCursorNotifyEvent_to_64; + + events->start_event = events->end_event = events->events[0].event; + events->next = register_events_head; + register_events_head = events; +} +void unregister_XFixes_events() +{ + void* a = (void*)1LL; + register_events_t* prev = NULL; + register_events_t* head = register_events_head; + while(head) { + if(head->id == a) { + if(!prev) + register_events_head = head->next; + else + prev->next = head->next; + box_free(head); + return; + } + prev = head; + head = head->next; + } +} + +void convert_XRRScreenChangeNotifyEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XRRScreenChangeNotifyEvent_t* src = (my_XRRScreenChangeNotifyEvent_t*)s; + my_XRRScreenChangeNotifyEvent_32_t* dst = (my_XRRScreenChangeNotifyEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + dst->root = to_ulong(src->root); + dst->timestamp = to_ulong(src->timestamp); + dst->config_timestamp = to_ulong(src->config_timestamp); + dst->size_index = src->size_index; + dst->subpixel_order = src->subpixel_order; + dst->rotation = src->rotation; + dst->width = src->width; + dst->height = src->height; + dst->mwidth = src->mwidth; + dst->mheight = src->mheight; +} +void convert_XRRScreenChangeNotifyEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XRRScreenChangeNotifyEvent_32_t* src = (my_XRRScreenChangeNotifyEvent_32_t*)s; + my_XRRScreenChangeNotifyEvent_t* dst = (my_XRRScreenChangeNotifyEvent_t*)d; + + dst->mheight = src->mheight; + dst->mwidth = src->mwidth; + dst->height = src->height; + dst->width = src->width; + dst->rotation = src->rotation; + dst->subpixel_order = src->subpixel_order; + dst->size_index = src->size_index; + dst->config_timestamp = from_ulong(src->config_timestamp); + dst->timestamp = from_ulong(src->timestamp); + dst->root = from_ulong(src->root); + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} +void convert_XRRNotifyEvent_to_32(my_XEvent_32_t* d, my_XEvent_t* s) +{ + my_XRRNotifyEvent_t* src = (my_XRRNotifyEvent_t*)s; + my_XRRNotifyEvent_32_t* dst = (my_XRRNotifyEvent_32_t*)d; + + //dst->type = src->type; + //dst->serial = src->serial; + //dst->send_event = src->send_event; + //dst->display = src->display; + //dst->window = src->window; + int subtype = src->subtype; + dst->subtype = src->subtype; + switch (subtype) { + case 0: { + my_XRROutputChangeNotifyEvent_t* src = (my_XRROutputChangeNotifyEvent_t*)s; + my_XRROutputChangeNotifyEvent_32_t* dst = (my_XRROutputChangeNotifyEvent_32_t*)d; + dst->output = to_long(src->output); + dst->crtc = to_long(src->crtc); + dst->mode = to_long(src->mode); + dst->rotation = src->rotation; + dst->connection = src->connection; + dst->subpixel_order = src->subpixel_order; + } break; + case 1: { + my_XRRCrtcChangeNotifyEvent_t* src = (my_XRRCrtcChangeNotifyEvent_t*)s; + my_XRRCrtcChangeNotifyEvent_32_t* dst = (my_XRRCrtcChangeNotifyEvent_32_t*)d; + dst->crtc = to_ulong(src->crtc); + dst->mode = to_ulong(src->mode); + dst->rotation = src->rotation; + dst->x = src->x; + dst->y = src->y; + dst->width = src->width; + dst->height = src->height; + } break; + case 2: { + my_XRROutputPropertyNotifyEvent_t* src = (my_XRROutputPropertyNotifyEvent_t*)s; + my_XRROutputPropertyNotifyEvent_32_t* dst = (my_XRROutputPropertyNotifyEvent_32_t*)d; + dst->output = to_ulong(src->output); + dst->property = to_ulong(src->property); + dst->timestamp = to_ulong(src->timestamp); + dst->state = src->state; + } break; + case 3: { + my_XRRProviderChangeNotifyEvent_t* src = (my_XRRProviderChangeNotifyEvent_t*)s; + my_XRRProviderChangeNotifyEvent_32_t* dst = (my_XRRProviderChangeNotifyEvent_32_t*)d; + dst->provider = to_ulong(src->provider); + dst->timestamp = to_ulong(src->timestamp); + dst->current_role = src->current_role; + } break; + case 4: { + my_XRRProviderPropertyNotifyEvent_t* src = (my_XRRProviderPropertyNotifyEvent_t*)s; + my_XRRProviderPropertyNotifyEvent_32_t* dst = (my_XRRProviderPropertyNotifyEvent_32_t*)d; + dst->provider = to_ulong(src->provider); + dst->property = to_ulong(src->property); + dst->timestamp = to_ulong(src->timestamp); + dst->state = src->state; + } break; + case 5: { + my_XRRResourceChangeNotifyEvent_t* src = (my_XRRResourceChangeNotifyEvent_t*)s; + my_XRRResourceChangeNotifyEvent_32_t* dst = (my_XRRResourceChangeNotifyEvent_32_t*)d; + dst->timestamp = to_ulong(src->timestamp); + } break; + } +} +void convert_XRRNotifyEvent_to_64(my_XEvent_t* d, my_XEvent_32_t* s) +{ + my_XRRNotifyEvent_32_t* src = (my_XRRNotifyEvent_32_t*)s; + my_XRRNotifyEvent_t* dst = (my_XRRNotifyEvent_t*)d; + int subtype = src->subtype; + switch (subtype) { + case 0: { + my_XRROutputChangeNotifyEvent_32_t* src = (my_XRROutputChangeNotifyEvent_32_t*)s; + my_XRROutputChangeNotifyEvent_t* dst = (my_XRROutputChangeNotifyEvent_t*)d; + dst->output = from_long(src->output); + dst->crtc = from_long(src->crtc); + dst->mode = from_long(src->mode); + dst->rotation = src->rotation; + dst->connection = src->connection; + dst->subpixel_order = src->subpixel_order; + } break; + case 1: { + my_XRRCrtcChangeNotifyEvent_32_t* src = (my_XRRCrtcChangeNotifyEvent_32_t*)s; + my_XRRCrtcChangeNotifyEvent_t* dst = (my_XRRCrtcChangeNotifyEvent_t*)d; + dst->crtc = from_ulong(src->crtc); + dst->mode = from_ulong(src->mode); + dst->rotation = src->rotation; + dst->x = src->x; + dst->y = src->y; + dst->width = src->width; + dst->height = src->height; + } break; + case 2: { + my_XRROutputPropertyNotifyEvent_32_t* src = (my_XRROutputPropertyNotifyEvent_32_t*)s; + my_XRROutputPropertyNotifyEvent_t* dst = (my_XRROutputPropertyNotifyEvent_t*)d; + dst->output = from_ulong(src->output); + dst->property = from_ulong(src->property); + dst->timestamp = from_ulong(src->timestamp); + dst->state = src->state; + } break; + case 3: { + my_XRRProviderChangeNotifyEvent_32_t* src = (my_XRRProviderChangeNotifyEvent_32_t*)s; + my_XRRProviderChangeNotifyEvent_t* dst = (my_XRRProviderChangeNotifyEvent_t*)d; + dst->provider = from_ulong(src->provider); + dst->timestamp = from_ulong(src->timestamp); + dst->current_role = src->current_role; + } break; + case 4: { + my_XRRProviderPropertyNotifyEvent_32_t* src = (my_XRRProviderPropertyNotifyEvent_32_t*)s; + my_XRRProviderPropertyNotifyEvent_t* dst = (my_XRRProviderPropertyNotifyEvent_t*)d; + dst->provider = from_ulong(src->provider); + dst->property = from_ulong(src->property); + dst->timestamp = from_ulong(src->timestamp); + dst->state = src->state; + } break; + case 5: { + my_XRRResourceChangeNotifyEvent_32_t* src = (my_XRRResourceChangeNotifyEvent_32_t*)s; + my_XRRResourceChangeNotifyEvent_t* dst = (my_XRRResourceChangeNotifyEvent_t*)d; + dst->timestamp = from_ulong(src->timestamp); + } break; + } + dst->subtype = src->subtype; + //dst->window = src->window; + //dst->display = src->display; + //dst->send_event = src->send_event; + //dst->serial = src->serial; + //dst->type = src->type; +} + +void register_XRandR_events(int event_base) +{ + void* a = (void*)2LL; + // search if device is already in list + register_events_t* head = register_events_head; + while(head) { + if(head->id == a) + return; // found, nothing to do.... + head = head->next; + } + int n = 2; // 2 events to register!, but second one as 6+1 subtypes + // create a new event list + register_events_t* events = box_malloc(sizeof(register_events_t)+n*sizeof(reg_event_t)); + events->id = a; + events->n = n; + events->events = (reg_event_t*)(events+1); + + events->events[0].event = event_base+0; + events->events[0].to32 = convert_XRRScreenChangeNotifyEvent_to_32; + events->events[0].to64 = convert_XRRScreenChangeNotifyEvent_to_64; + events->events[1].event = event_base+1; + events->events[1].to32 = convert_XRRNotifyEvent_to_32; + events->events[1].to64 = convert_XRRNotifyEvent_to_64; + + events->start_event = events->events[0].event; + events->end_event = events->events[1].event; + events->next = register_events_head; + register_events_head = events; +} +void unregister_XRandR_events() +{ + void* a = (void*)2LL; + register_events_t* prev = NULL; + register_events_t* head = register_events_head; + while(head) { + if(head->id == a) { + if(!prev) + register_events_head = head->next; + else + prev->next = head->next; + box_free(head); + return; + } + prev = head; + head = head->next; + } +} diff --git a/src/libtools/myalign32.c b/src/libtools/myalign32.c new file mode 100755 index 0000000000000000000000000000000000000000..f38776b64dc833fce185fdcac3a508de0e108e4b --- /dev/null +++ b/src/libtools/myalign32.c @@ -0,0 +1,1604 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" +#include "debug.h" +#include "box32.h" + +void myStackAlign32(const char* fmt, uint32_t* st, uint64_t* mystack) +{ + if(!fmt) + return; + // loop... + const char* p = fmt; + int state = 0; + double d; + while(*p) + { + switch(state) { + case 0: + switch(*p) { + case '%': state = 1; ++p; break; + default: + ++p; + } + break; + case 1: // normal + case 2: // l + case 3: // ll + case 4: // L + switch(*p) { + case '%': state = 0; ++p; break; //%% = back to 0 + case 'l': ++state; if (state>3) state=3; ++p; break; + case 'z': state = 2; ++p; break; + case 'L': state = 4; ++p; break; + case 'a': + case 'A': + case 'e': + case 'E': + case 'g': + case 'G': + case 'F': + case 'f': state += 10; break; // float + case 'd': + case 'i': + case 'n': + case 'o': state += 20; break; // int + case 'x': + case 'X': + case 'u': state += 40; break; // uint + case 'h': ++p; break; // ignored... + case '\'': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case '+': + case '-': ++p; break; // formating, ignored + case 'm': state = 0; ++p; break; // no argument + case 'p': + case 'S': + case 's': state = 30; break; // pointers + case '$': ++p; break; // should issue a warning, it's not handled... + case '*': *(mystack++) = *(st++); ++p; break; // fetch an int in the stack.... + case ' ': state=0; ++p; break; + default: + state=20; // other stuff, put an int... + } + break; + case 11: //double + case 12: //%lg, still double + case 13: //%llg, still double + case 23: // 64bits int + case 43: // 64bits uint + *(uint64_t*)mystack = *(uint64_t*)st; + st+=2; mystack+=1; + state = 0; + ++p; + break; + case 22: // long int + *(int64_t*)mystack = from_long(*(long_t*)st); + st+=1; mystack+=1; + state = 0; + ++p; + break; + case 42: // long uint + *(uint64_t*)mystack = from_ulong(*(ulong_t*)st); + st+=1; mystack+=1; + state = 0; + ++p; + break; + case 14: //%LG long double + #ifdef HAVE_LD80BITS + memcpy(mystack, st, 10); + st+=3; mystack+=2; + #else + LD2D((void*)st, &d); + *(long double*)mystack = (long double)d; + st+=3; mystack+=2; + #endif + state = 0; + ++p; + break; + case 30: //pointer + *(uintptr_t*)mystack = from_ptr(*st); + st++; mystack+=1; + state = 0; + ++p; + break; + case 20: // fallback + case 21: + case 24: // normal int / pointer + case 40: + case 41: + *mystack = *st; + ++mystack; + ++st; + state = 0; + ++p; + break; + default: + // whattt? + state = 0; + } + } +} + +size_t myStackAlignScanf32(const char* fmt, uint32_t* st, uint64_t* mystack, size_t nb_elem) +{ + + if(!fmt) + return 0; + // loop... + const char* p = fmt; + size_t conv = 0; + int state = 0; + int ign = 0; + uint64_t* saved = mystack; + while(*p) + { + switch(state) { + case 0: + ign = 0; + switch(*p) { + case '%': state = 1; ++p; break; + default: + ++p; + } + break; + case 1: // normal + case 2: // l + case 3: // ll + case 4: // L + case 5: // z + switch(*p) { + case '%': state = 0; ++p; break; //%% = back to 0 + case 'l': ++state; if (state>3) state=3; ++p; break; + case 'L': state = 4; ++p; break; + case 'z': state = 5; ++p; break; + case 'a': + case 'A': + case 'e': + case 'E': + case 'g': + case 'G': + case 'F': + case 'f': state += 10; break; // float + case 'd': + case 'i': + case 'n': + case 'o': state += 20; break; // int + case 'u': + case 'x': + case 'X': state += 40; break; // usigned int + case 'h': ++p; break; // ignored... + case '\'': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case '#': + case '+': + case '-': ++p; break; // formating, ignored + case '[': state += 60; ++p; break; + case 'm': state = 0; ++p; break; // no argument + case 'p': state = 30; break; // pointers + case 'S': + case 's': state = 50; break; // string + case '$': ++p; break; // should issue a warning, it's not handled... + case '*': ign=1; ++p; break; // ignore arg + case ' ': state=0; ++p; break; + default: + state=20; // other stuff, put an int... + } + break; + case 22: // long uint + case 25: // size_t int + case 42: // long uint + case 45: + case 30: // pointer + if(!ign) { + ++conv; + saved[nb_elem-conv] = 0; + *mystack = (uintptr_t)&saved[nb_elem-conv]; + ++st; + ++mystack; + } + state = 0; + ++p; + break; + + case 11: //double + case 12: //%lg, still double + case 13: //%llg, still double + case 14: //%Lg long double + case 15: //%zg + case 20: // fallback + case 21: + case 23: // 64bits int + case 24: // normal int / pointer + case 40: + case 41: + case 43: + case 44: + case 50: + if(!ign) { + *mystack = *st; + ++st; + ++mystack; + } + state = 0; + ++p; + break; + case 61: + switch(*p) { + case ']': state = 50; break; + case '\\': ++p; if(*p) ++p; break; + default: ++p; break; + } + break; + default: + // whaaaat? + state = 0; + } + } + return conv; +} + +void myStackAlignScanf32_final(const char* fmt, uint32_t* st, uint64_t* mystack, size_t nb_elem, int n) +{ + + if(!fmt || n<=0) + return; + // loop... + const char* p = fmt; + size_t conv = 0; + int state = 0; + int ign = 0; + uint64_t* saved = mystack; + while(*p) + { + switch(state) { + case 0: + ign = 0; + switch(*p) { + case '%': state = 1; ++p; break; + default: + ++p; + } + break; + case 1: // normal + case 2: // l + case 3: // ll + case 4: // L + case 5: // z + switch(*p) { + case '%': state = 0; ++p; break; //%% = back to 0 + case 'l': ++state; if (state>3) state=3; ++p; break; + case 'L': state = 4; ++p; break; + case 'z': state = 5; ++p; break; + case 'a': + case 'A': + case 'e': + case 'E': + case 'g': + case 'G': + case 'F': + case 'f': state += 10; break; // float + case 'd': + case 'i': + case 'n': + case 'o': state += 20; break; // int + case 'u': + case 'x': + case 'X': state += 40; break; // usigned int + case 'h': ++p; break; // ignored... + case '\'': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case '#': + case '+': + case '-': ++p; break; // formating, ignored + case '[': state += 60; ++p; break; + case 'm': state = 0; ++p; break; // no argument + case 'p': state = 30; break; // pointers + case 'S': + case 's': state = 50; break; // strings + case '$': ++p; break; // should issue a warning, it's not handled... + case '*': ign=1; ++p; break; // ignore arg + case ' ': state=0; ++p; break; + default: + state=20; // other stuff, put an int... + } + break; + case 22: // long int + case 25: // size_t int + case 42: // long uint + case 45: + case 30: // pointer + if(!ign) { + ++conv; + if((state==22) || (state==25)) { + long_t* dst = from_ptrv(*st); + *dst = saved[nb_elem-conv]; // not using to_long on purpose + } else if(state==30) { + ptr_t* dst = from_ptrv(*st); + *dst = to_ptr(saved[nb_elem-conv]); + } else { + ulong_t* dst = from_ptrv(*st); + *dst = saved[nb_elem-conv]; //not using to to_ulong on pupose + } + ++st; + ++mystack; + if(!--n) return; + } + state = 0; + ++p; + break; + + case 11: //double + case 12: //%lg, still double + case 13: //%llg, still double + case 14: //%Lg long double + case 15: //%zg + case 20: // fallback + case 21: + case 23: // 64bits int + case 24: // normal int / pointer + case 40: + case 41: + case 43: + case 44: + case 50: + if(!ign) { + *mystack = *st; + ++st; + ++mystack; + } + state = 0; + ++p; + if(!--n) return; + break; + case 61: + switch(*p) { + case ']': state = 50; break; + case '\\': ++p; if(*p) ++p; break; + default: ++p; break; + } + break; + default: + // whaaaat? + state = 0; + } + } +} + +size_t myStackAlignScanfW32(const char* fmt, uint32_t* st, uint64_t* mystack, size_t nb_elem) +{ + + if(!fmt) + return 0; + // loop... + const wchar_t* p = (const wchar_t*)fmt; + int state = 0; + size_t conv = 0; + int ign = 0; + uint64_t* saved = mystack; + while(*p) + { + switch(state) { + case 0: + ign = 0; + switch(*p) { + case '%': state = 1; ++p; break; + default: + ++p; + } + break; + case 1: // normal + case 2: // l + case 3: // ll + case 4: // L + case 5: // z + switch(*p) { + case '%': state = 0; ++p; break; //%% = back to 0 + case 'l': ++state; if (state>3) state=3; ++p; break; + case 'L': state = 4; ++p; break; + case 'z': state = 5; ++p; break; + case 'a': + case 'A': + case 'e': + case 'E': + case 'g': + case 'G': + case 'F': + case 'f': state += 10; break; // float + case 'd': + case 'i': + case 'n': + case 'o': state += 20; break; // int + case 'u': + case 'x': + case 'X': state += 40; break; // usigned int + case 'h': ++p; break; // ignored... + case '\'': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case '#': + case '+': + case '-': ++p; break; // formating, ignored + case 'm': state = 0; ++p; break; // no argument + case 'p': state = 30; break; // pointers + case 'S': + case 's': state = 50; break; // strings + case '$': ++p; break; // should issue a warning, it's not handled... + case '*': ign=1; ++p; break; // ignore arg + case ' ': state=0; ++p; break; + default: + state=20; // other stuff, put an int... + } + break; + case 22: // long uint + case 25: // size_t int + case 42: // long uint + case 45: + case 30: // pointer + if(!ign) { + ++conv; + saved[nb_elem-conv] = 0; + *mystack = (uintptr_t)&saved[nb_elem-conv]; + ++st; + ++mystack; + } + state = 0; + ++p; + break; + + case 11: //double + case 12: //%lg, still double + case 13: //%llg, still double + case 14: //%Lg long double + case 15: //%zg + case 20: // fallback + case 21: + case 23: // 64bits int + case 24: // normal int / pointer + case 40: + case 41: + case 43: + case 44: + case 50: + if(!ign) { + *mystack = *st; + ++st; + ++mystack; + } + state = 0; + ++p; + break; + default: + // whaaaat? + state = 0; + } + } + return conv; +} + +void myStackAlignScanfW32_final(const char* fmt, uint32_t* st, uint64_t* mystack, size_t nb_elem, int n) +{ + + if(!fmt || n<=0) + return; + // loop... + const wchar_t* p = (const wchar_t*)fmt; + int state = 0; + size_t conv = 0; + int ign = 0; + uint64_t* saved = mystack; + while(*p) + { + switch(state) { + case 0: + ign = 0; + switch(*p) { + case '%': state = 1; ++p; break; + default: + ++p; + } + break; + case 1: // normal + case 2: // l + case 3: // ll + case 4: // L + case 5: // z + switch(*p) { + case '%': state = 0; ++p; break; //%% = back to 0 + case 'l': ++state; if (state>3) state=3; ++p; break; + case 'L': state = 4; ++p; break; + case 'z': state = 5; ++p; break; + case 'a': + case 'A': + case 'e': + case 'E': + case 'g': + case 'G': + case 'F': + case 'f': state += 10; break; // float + case 'd': + case 'i': + case 'n': + case 'o': state += 20; break; // int + case 'u': + case 'x': + case 'X': state += 40; break; // usigned int + case 'h': ++p; break; // ignored... + case '\'': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case '#': + case '+': + case '-': ++p; break; // formating, ignored + case 'm': state = 0; ++p; break; // no argument + case 'p': state = 30; break; // pointers + case 'S': + case 's': state = 50; break; // string + case '$': ++p; break; // should issue a warning, it's not handled... + case '*': ign=1; ++p; break; // ignore arg + case ' ': state=0; ++p; break; + default: + state=20; // other stuff, put an int... + } + break; + case 22: // long uint + case 25: // size_t int + case 42: // long uint + case 45: + case 30: // pointer + if(!ign) { + ++conv; + if(state==22 || state==0x25) { + int32_t* dst = from_ptrv(*st); + *dst = to_long(saved[nb_elem-conv]); + } else if(state==30) { + ptr_t* dst = from_ptrv(*st); + *dst = to_ptr(saved[nb_elem-conv]); + } else { + uint32_t* dst = from_ptrv(*st); + *dst = to_ulong(saved[nb_elem-conv]); + } + ++st; + ++mystack; + } + state = 0; + ++p; + if(!--n) return; + break; + + case 11: //double + case 12: //%lg, still double + case 13: //%llg, still double + case 14: //%Lg long double + case 15: //%zg + case 20: // fallback + case 21: + case 23: // 64bits int + case 24: // normal int / pointer + case 40: + case 41: + case 43: + case 44: + case 50: + if(!ign) { + *mystack = *st; + ++st; + ++mystack; + } + state = 0; + ++p; + if(!--n) return; + break; + default: + // whaaaat? + state = 0; + } + } +} + +void myStackAlignGVariantNew32(const char* fmt, uint32_t* st, uint64_t* mystack) +{ + if (!fmt) + return; + + const char *p = fmt; + int state = 0; + int inblocks = 0; + int tmp; + + do { + switch(state) { + case 0: // Nothing + switch(*p) { + case 'b': // gboolean + case 'y': // guchar + case 'n': // gint16 + case 'q': // guint16 + case 'i': // gint32 + case 'u': // guint32 + case 'h': // gint32 + case 's': // const gchar* + case 'o': + case 'g': + case 'v': // GVariant* + case '*': // GVariant* of any type + case '?': // GVariant* of basic type + case 'r': // GVariant* of tuple type + *mystack = *st; + ++mystack; + ++st; + break; + case 'x': // gint64 + case 't': // guint64 + case 'd': // gdouble + *(uint64_t*)mystack = *(uint64_t*)st; + st+=2; mystack+=1; + break; + case '{': + case '(': ++inblocks; break; + case '}': + case ')': --inblocks; break; + case 'a': state = 1; break; // GVariantBuilder* or GVariantIter** + case 'm': state = 2; break; // maybe types + case '@': state = 3; break; // GVariant* of type [type] + case '^': state = 4; break; // pointer value + case '&': break; // pointer: do nothing + } + break; + case 1: // Arrays + switch(*p) { + case '{': + case '(': ++tmp; break; + case '}': + case ')': --tmp; break; + } + if (*p == 'a') break; + if (tmp == 0) { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } + break; + case 2: // Maybe-types + switch(*p) { + case 'b': // gboolean + case 'y': // guchar + case 'n': // gint16 + case 'q': // guint16 + case 'i': // gint32 + case 'u': // guint32 + case 'h': // gint32 + case 'x': // gint64 + case 't': // guint64 + case 'd': // gdouble + case '{': + case '}': + case '(': + case ')': + // Add a gboolean or gboolean*, no char increment + *mystack = *st; + ++mystack; + ++st; + --p; + state = 0; + break; + case 'a': // GVariantBuilder* or GVariantIter** + case 's': // const gchar* + case 'o': + case 'g': + case 'v': // GVariant* + case '@': // GVariant* of type [type] + case '*': // GVariant* of any type + case '?': // GVariant* of basic type + case 'r': // GVariant* of tuple type + case '&': // pointer + case '^': // pointer value + // Just maybe-NULL + --p; + state = 0; + break; + + default: // Default to add a gboolean & reinit state? + *mystack = *st; + ++mystack; + ++st; + --p; + state = 0; + } + break; + case 3: // GVariant* + switch(*p) { + case '{': + case '(': ++tmp; break; + case '}': + case ')': --tmp; break; + case 'a': // GVariantBuilder* or GVariantIter** + do { ++p; } while(*p == 'a'); // Use next character which is not an array (array definition) + switch(*p) { + case '{': + case '(': ++tmp; break; + case '}': + case ')': --tmp; break; + } + break; + } + if (tmp == 0) { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } + break; + case 4: // ^ + if (*p == 'a') state = 5; + else if (*p == '&') state = 8; + else state = 0; //??? + break; + case 5: // ^a + if ((*p == 's') || (*p == 'o') || (*p == 'y')) { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } else if (*p == '&') state = 6; + else if (*p == 'a') state = 7; + else state = 0; //??? + break; + case 6: // ^a& + if ((*p == 's') || (*p == 'o')) { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } else if (*p == 'a') state = 7; + else state = 0; //??? + break; + case 7: // ^aa / ^a&a + if (*p == 'y') { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } else state = 0; //??? + case 8: // ^& + if (*p == 'a') state = 9; + else state = 0; //??? + case 9: // ^&a + if (*p == 'y') { + *mystack = *st; + ++mystack; + ++st; + state = 0; + } else state = 0; //??? + } + ++p; + } while (*p && (inblocks || state)); +} + +void myStackAlignW32(const char* fmt, uint32_t* st, uint64_t* mystack) +{ + // loop... + const wchar_t* p = (const wchar_t*)fmt; + int state = 0; + double d; + while(*p) + { + switch(state) { + case 0: + switch(*p) { + case '%': state = 1; ++p; break; + default: + ++p; + } + break; + case 1: // normal + case 2: // l + case 3: // ll + case 4: // L + switch(*p) { + case '%': state = 0; ++p; break; //%% = back to 0 + case 'l': ++state; if (state>3) state=3; ++p; break; + case 'z': state = 2; ++p; break; + case 'L': state = 4; ++p; break; + case 'a': + case 'A': + case 'e': + case 'E': + case 'g': + case 'G': + case 'F': + case 'f': state += 10; break; // float + case 'd': + case 'i': + case 'o': state += 20; break; // int + case 'x': + case 'X': + case 'u': state += 40; break; // uint + case 'h': ++p; break; // ignored... + case '\'': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case '+': + case '-': ++p; break; // formating, ignored + case 'm': state = 0; ++p; break; // no argument + case 'n': + case 'p': + case 'S': + case 's': state = 30; break; // pointers + case '$': ++p; break; // should issue a warning, it's not handled... + case '*': *(mystack++) = *(st++); ++p; break; // fetch an int in the stack.... + case ' ': state=0; ++p; break; + default: + state=20; // other stuff, put an int... + } + break; + case 11: //double + case 12: //%lg, still double + case 13: //%llg, still double + case 23: // 64bits int + case 43: // 64bits uint + *(uint64_t*)mystack = *(uint64_t*)st; + st+=2; mystack+=1; + state = 0; + ++p; + break; + case 22: // long int + *(int64_t*)mystack = from_long(*(long_t*)st); + st+=1; mystack+=1; + state = 0; + ++p; + break; + case 42: // long uint + *(uint64_t*)mystack = from_ulong(*(ulong_t*)st); + st+=1; mystack+=1; + state = 0; + ++p; + break; + case 14: //%LG long double + #ifdef HAVE_LD80BITS + memcpy(mystack, st, 10); + st+=3; mystack+=2; + #else + LD2D((void*)st, &d); + *(long double*)mystack = (long double)d; + st+=3; mystack+=2; + #endif + state = 0; + ++p; + break; + case 30: //pointer + *(uintptr_t*)mystack = from_ptr(*st); + st++; mystack+=1; + state = 0; + ++p; + break; + case 20: // fallback + case 21: + case 24: // normal int / pointer + case 40: + case 41: + *mystack = *st; + ++mystack; + ++st; + state = 0; + ++p; + break; + default: + // whattt? + state = 0; + } + } +} + + +#if 0 + +typedef struct __attribute__((packed, aligned(4))) { + unsigned char *body_data; + long body_storage; + long body_fill; + long body_returned; + + + int *lacing_vals; + int64_t *granule_vals; + long lacing_storage; + long lacing_fill; + long lacing_packet; + long lacing_returned; + + unsigned char header[282]; + int header_fill __attribute__ ((aligned (4))); + + int e_o_s; + int b_o_s; + long serialno; + long pageno; + int64_t packetno; + int64_t granulepos; + +} ogg_stream_state_x64; + +typedef struct __attribute__((packed, aligned(4))) vorbis_dsp_state_x64 { + int analysisp; + void *vi; //vorbis_info + + float **pcm; + float **pcmret; + int pcm_storage; + int pcm_current; + int pcm_returned; + + int preextrapolate; + int eofflag; + + long lW; + long W; + long nW; + long centerW; + + int64_t granulepos; + int64_t sequence; + + int64_t glue_bits; + int64_t time_bits; + int64_t floor_bits; + int64_t res_bits; + + void *backend_state; +} vorbis_dsp_state_x64; + +typedef struct __attribute__((packed, aligned(4))) { + long endbyte; + int endbit; + + unsigned char *buffer; + unsigned char *ptr; + long storage; +} oggpack_buffer_x64; + +typedef struct __attribute__((packed, aligned(4))) vorbis_block_x64 { + + float **pcm; + oggpack_buffer_x64 opb; + + long lW; + long W; + long nW; + int pcmend; + int mode; + + int eofflag; + int64_t granulepos; + int64_t sequence; + void *vd; + + void *localstore; + long localtop; + long localalloc; + long totaluse; + void *reap; + + long glue_bits; + long time_bits; + long floor_bits; + long res_bits; + + void *internal; + +} vorbis_block_x64; + +typedef struct __attribute__((packed, aligned(4))) OggVorbis_x64 { + void *datasource; /* Pointer to a FILE *, etc. */ + int seekable; + int64_t offset; + int64_t end; + ogg_sync_state oy; + + /* If the FILE handle isn't seekable (eg, a pipe), only the current + stream appears */ + int links; + int64_t *offsets; + int64_t *dataoffsets; + long *serialnos; + int64_t *pcmlengths; /* overloaded to maintain binary + compatibility; x2 size, stores both + beginning and end values */ + void *vi; //vorbis_info + void *vc; //vorbis_comment + + /* Decoding working state local storage */ + int64_t pcm_offset; + int ready_state; + long current_serialno; + int current_link; + + double bittrack; + double samptrack; + + ogg_stream_state_x64 os; /* take physical pages, weld into a logical + stream of packets */ + vorbis_dsp_state_x64 vd; /* central working state for the packet->PCM decoder */ + vorbis_block_x64 vb; /* local working space for packet->PCM decode */ + + ov_callbacks callbacks; + +} OggVorbis_x64; + +#define TRANSFERT \ +GO(datasource) \ +GO(seekable) \ +GO(offset) \ +GO(end) \ +GOM(oy, sizeof(ogg_sync_state)) \ +GO(links) \ +GO(offsets) \ +GO(dataoffsets) \ +GO(serialnos) \ +GO(pcmlengths) \ +GO(vi) \ +GO(vc) \ +GO(pcm_offset) \ +GO(ready_state) \ +GO(current_serialno) \ +GO(current_link) \ +GOM(bittrack, 16) \ +GO(os.body_data) \ +GO(os.body_storage) \ +GO(os.body_fill) \ +GO(os.body_returned) \ +GO(os.lacing_vals) \ +GO(os.granule_vals) \ +GO(os.lacing_storage) \ +GO(os.lacing_fill) \ +GO(os.lacing_packet) \ +GO(os.lacing_returned) \ +GOM(os.header, 282) \ +GO(os.header_fill) \ +GO(os.e_o_s) \ +GO(os.b_o_s) \ +GO(os.serialno) \ +GO(os.pageno) \ +GO(os.packetno) \ +GO(os.granulepos) \ +GO(vd.analysisp) \ +GO(vd.vi) \ +GO(vd.pcm) \ +GO(vd.pcmret) \ +GO(vd.pcm_storage) \ +GO(vd.pcm_current) \ +GO(vd.pcm_returned) \ +GO(vd.preextrapolate) \ +GO(vd.eofflag) \ +GO(vd.lW) \ +GO(vd.W) \ +GO(vd.nW) \ +GO(vd.centerW) \ +GO(vd.granulepos) \ +GO(vd.sequence) \ +GO(vd.glue_bits) \ +GO(vd.time_bits) \ +GO(vd.floor_bits) \ +GO(vd.res_bits) \ +GO(vd.backend_state) \ +GO(vb.pcm) \ +GO(vb.opb.endbyte) \ +GO(vb.opb.endbit) \ +GO(vb.opb.buffer) \ +GO(vb.opb.ptr) \ +GO(vb.opb.storage) \ +GO(vb.lW) \ +GO(vb.W) \ +GO(vb.nW) \ +GO(vb.pcmend) \ +GO(vb.mode) \ +GO(vb.eofflag) \ +GO(vb.granulepos) \ +GO(vb.sequence) \ +GO(vb.localstore) \ +GO(vb.localtop) \ +GO(vb.localalloc) \ +GO(vb.totaluse) \ +GO(vb.reap) \ +GO(vb.glue_bits) \ +GO(vb.time_bits) \ +GO(vb.floor_bits) \ +GO(vb.res_bits) \ +GO(vb.internal) \ +GOM(callbacks, sizeof(ov_callbacks)) + +void AlignOggVorbis(void* dest, void* source) +{ + // Arm -> x64 + OggVorbis_x64* src = (OggVorbis_x64*)source; + OggVorbis* dst = (OggVorbis*)dest; + + #define GO(A) dst->A = src->A; + #define GOM(A, S) memcpy(&dst->A, &src->A, S); + TRANSFERT + #undef GO + #undef GOM + dst->vb.vd = (src->vb.vd == &src->vd)?&dst->vd:(vorbis_dsp_state*)src->vb.vd; +} +void UnalignOggVorbis(void* dest, void* source) +{ + // x64 -> Arm + OggVorbis_x64* dst = (OggVorbis_x64*)dest; + OggVorbis* src = (OggVorbis*)source; + + #define GO(A) dst->A = src->A; + #define GOM(A, S) memcpy(&dst->A, &src->A, S); + TRANSFERT + #undef GO + #undef GOM + dst->vb.vd = (src->vb.vd == &src->vd)?&dst->vd:(vorbis_dsp_state_x64*)src->vb.vd; +} +#undef TRANSFERT + +#define TRANSFERT \ +GO(analysisp) \ +GO(vi) \ +GO(pcm) \ +GO(pcmret) \ +GO(pcm_storage) \ +GO(pcm_current) \ +GO(pcm_returned) \ +GO(preextrapolate) \ +GO(eofflag) \ +GO(lW) \ +GO(W) \ +GO(nW) \ +GO(centerW) \ +GO(granulepos) \ +GO(sequence) \ +GO(glue_bits) \ +GO(time_bits) \ +GO(floor_bits) \ +GO(res_bits) \ +GO(backend_state) + +void UnalignVorbisDspState(void* dest, void* source) +{ + // Arm -> x64 + #define GO(A) ((vorbis_dsp_state_x64*)dest)->A = ((vorbis_dsp_state*)source)->A; + #define GOM(A, S) memcpy(&((vorbis_dsp_state_x64*)dest)->A, &((vorbis_dsp_state*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +void AlignVorbisDspState(void* dest, void* source) +{ + // x64 -> Arm + #define GO(A) ((vorbis_dsp_state*)dest)->A = ((vorbis_dsp_state_x64*)source)->A; + #define GOM(A, S) memcpy(&((vorbis_dsp_state*)dest)->A, &((vorbis_dsp_state_x64*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +#undef TRANSFERT + +#define TRANSFERT \ +GO(pcm) \ +GO(opb.endbyte) \ +GO(opb.endbit) \ +GO(opb.buffer) \ +GO(opb.ptr) \ +GO(opb.storage) \ +GO(lW) \ +GO(W) \ +GO(nW) \ +GO(pcmend) \ +GO(mode) \ +GO(eofflag) \ +GO(granulepos) \ +GO(sequence) \ +GO(vd) \ +GO(localstore) \ +GO(localtop) \ +GO(localalloc) \ +GO(totaluse) \ +GO(reap) \ +GO(glue_bits) \ +GO(time_bits) \ +GO(floor_bits) \ +GO(res_bits) \ +GO(internal) + +void UnalignVorbisBlock(void* dest, void* source) +{ + // Arm -> x64 + #define GO(A) ((vorbis_block_x64*)dest)->A = ((vorbis_block*)source)->A; + #define GOM(A, S) memcpy(&((vorbis_block_x64*)dest)->A, &((vorbis_block*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +void AlignVorbisBlock(void* dest, void* source) +{ + // x64 -> Arm + #define GO(A) ((vorbis_block*)dest)->A = ((vorbis_block_x64*)source)->A; + #define GOM(A, S) memcpy(&((vorbis_block*)dest)->A, &((vorbis_block_x64*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} + +#undef TRANSFERT +#endif +typedef union __attribute__((packed, aligned(4))) i386_epoll_data { + ptr_t ptr; //void* + int fd; + uint32_t u32; + uint64_t u64; +} i386_epoll_data_t; + +struct __attribute__((packed, aligned(4))) i386_epoll_event { + uint32_t events; + i386_epoll_data_t data; +}; +// Arm -> i386 +void UnalignEpollEvent32(void* dest, void* source, int nbr) +{ + struct i386_epoll_event *i386_struct = (struct i386_epoll_event*)dest; + struct epoll_event *arm_struct = (struct epoll_event*)source; + while(nbr) { + i386_struct->events = arm_struct->events; + i386_struct->data.u64 = arm_struct->data.u64; + ++i386_struct; + ++arm_struct; + --nbr; + } +} + +// i386 -> Arm +void AlignEpollEvent32(void* dest, void* source, int nbr) +{ + struct i386_epoll_event *i386_struct = (struct i386_epoll_event*)source; + struct epoll_event *arm_struct = (struct epoll_event*)dest; + while(nbr) { + arm_struct->events = i386_struct->events; + arm_struct->data.u64 = i386_struct->data.u64; + ++i386_struct; + ++arm_struct; + --nbr; + } +} +#if 0 +typedef struct __attribute__((packed, aligned(4))) x64_SMPEG_Info_s { + int has_audio; + int has_video; + int width; + int height; + int current_frame; + double current_fps; + char audio_string[80]; + int audio_current_frame; + uint32_t current_offset; + uint32_t total_size; + double current_time; + double total_time; +} x64_SMPEG_Info_t; + +#define TRANSFERT \ +GO(has_audio) \ +GO(has_video) \ +GO(width) \ +GO(height) \ +GO(current_frame) \ +GO(current_fps) \ +GOM(audio_string, 80) \ +GO(audio_current_frame) \ +GO(current_offset) \ +GO(total_size) \ +GO(current_time) \ +GO(total_time) + + +// Arm -> x64 +void UnalignSmpegInfo(void* dest, void* source) +{ + #define GO(A) ((x64_SMPEG_Info_t*)dest)->A = ((my_SMPEG_Info_t*)source)->A; + #define GOM(A, S) memcpy(&((x64_SMPEG_Info_t*)dest)->A, &((my_SMPEG_Info_t*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +// x64 -> Arm +void AlignSmpegInfo(void* dest, void* source) +{ + #define GO(A) ((my_SMPEG_Info_t*)dest)->A = ((x64_SMPEG_Info_t*)source)->A; + #define GOM(A, S) memcpy(&((my_SMPEG_Info_t*)dest)->A, &((x64_SMPEG_Info_t*)source)->A, S); + TRANSFERT + #undef GO + #undef GOM +} +#undef TRANSFERT + +#define TRANSFERT \ +GOV(fts_cycle) \ +GOV(fts_parent) \ +GOV(fts_link) \ +GO(fts_number) \ +GO(fts_pointer) \ +GO(fts_accpath) \ +GO(fts_path) \ +GO(fts_errno) \ +GO(fts_symfd) \ +GO(fts_pathlen) \ +GO(fts_namelen) \ +GO(fts_ino) \ +GO(fts_dev) \ +GO(fts_nlink) \ +GO(fts_level) \ +GO(fts_info) \ +GO(fts_flags) \ +GO(fts_instr) \ +GO(fts_statp) \ +GOM(fts_name, sizeof(void*)) + +// Arm -> x64 +void UnalignFTSENT(void* dest, void* source) +{ + #define GO(A) ((x64_ftsent_t*)dest)->A = ((FTSENT*)source)->A; + #define GOV(A) ((x64_ftsent_t*)dest)->A = (void*)((FTSENT*)source)->A; + #define GOM(A, S) memcpy(&((x64_ftsent_t*)dest)->A, &((FTSENT*)source)->A, S); + TRANSFERT + #undef GO + #undef GOV + #undef GOM +} +// x64 -> Arm +void AlignFTSENT(void* dest, void* source) +{ + #define GO(A) ((FTSENT*)dest)->A = ((x64_ftsent_t*)source)->A; + #define GOV(A) ((FTSENT*)dest)->A = (void*)((x64_ftsent_t*)source)->A; + #define GOM(A, S) memcpy(&((FTSENT*)dest)->A, &((x64_ftsent_t*)source)->A, S); + TRANSFERT + #undef GO + #undef GOV + #undef GOM +} +#undef TRANSFERT + +void alignNGValue(my_GValue_t* v, void* value, int n) +{ + while(n) { + v->g_type = *(int*)value; + memcpy(v->data, value+4, 2*sizeof(double)); + ++v; + value+=4+2*sizeof(double); + --n; + } +} +void unalignNGValue(void* value, my_GValue_t* v, int n) +{ + while(n) { + *(int*)value = v->g_type; + memcpy(value+4, v->data, 2*sizeof(double)); + ++v; + value+=4+2*sizeof(double); + --n; + } +} +#endif + +// x86 -> Native +void AlignIOV_32(void* dest, void* source) +{ + struct iovec* d = dest; + struct i386_iovec* s = source; + + d->iov_base = from_ptrv(s->iov_base); + d->iov_len = s->iov_len; +} + +// Native -> x86 +void UnalignIOV_32(void* dest, void* source) +{ + struct iovec* s = source; + struct i386_iovec* d = dest; + + d->iov_base = to_ptrv(s->iov_base); + d->iov_len = s->iov_len; +} + +void* my32___cmsg_nxthdr(struct i386_msghdr* mhdr, struct i386_cmsghdr* cmsg); + +// x86 -> Native +void AlignMsgHdr_32(void* dest, void* dest_iov, void* dest_cmsg, void* source, int convert_control) +{ + struct iovec* iov = dest_iov; + struct msghdr* d = dest; + struct i386_msghdr* s = source; + struct i386_iovec* s_iov = from_ptrv(s->msg_iov); + + d->msg_name = from_ptrv(s->msg_name); + d->msg_namelen = s->msg_namelen; + d->msg_iov = iov; + // TODO: check if iovlen is too big + for(int i=0; imsg_iovlen; ++i) { + AlignIOV_32(d->msg_iov+i, s_iov+i); + } + d->msg_iovlen = s->msg_iovlen; + d->msg_controllen = s->msg_controllen; + if(convert_control) { + if(s->msg_control) { + d->msg_control = dest_cmsg; + struct i386_cmsghdr* cmsg = from_ptrv(s->msg_control); + struct cmsghdr* dcmsg = dest_cmsg; + while(cmsg) { + dcmsg->cmsg_len = from_ulong(cmsg->cmsg_len); + dcmsg->cmsg_level = cmsg->cmsg_level; + dcmsg->cmsg_type = cmsg->cmsg_type; + if(cmsg->cmsg_len) { + dcmsg->cmsg_len += 4; + memcpy(CMSG_DATA(dcmsg), cmsg+1, cmsg->cmsg_len-sizeof(struct i386_cmsghdr)); + d->msg_controllen += 4; + } + dcmsg = (struct cmsghdr*)(((uintptr_t)dcmsg) + ((dcmsg->cmsg_len+7)&~7)); + cmsg = my32___cmsg_nxthdr(s, cmsg); + } + } else + d->msg_control = NULL; + } else { + d->msg_control = (s->msg_control)?dest_cmsg:NULL; + if(d->msg_control) memset(d->msg_control, 0, d->msg_controllen); + } + d->msg_flags = s->msg_flags; +} + +void UnalignMsgHdr_32(void* dest, void* source) +{ + struct msghdr* s = source; + struct i386_msghdr* d = dest; + struct iovec* s_iov = s->msg_iov; + struct i386_iovec* d_iov = from_ptrv(d->msg_iov); + + d->msg_name = to_ptrv(s->msg_name); + d->msg_namelen = s->msg_namelen; + // TODO: check if iovlen is too big + for(int i=0; imsg_iovlen; ++i) { + UnalignIOV_32(d_iov+i, s_iov+i); + } + d->msg_iovlen = s->msg_iovlen; + d->msg_controllen = s->msg_controllen; + if(s->msg_control) { + struct i386_cmsghdr* dcmsg = from_ptrv(d->msg_control); + struct cmsghdr* scmsg = s->msg_control; + while(scmsg) { + dcmsg->cmsg_len = to_ulong(scmsg->cmsg_len); + dcmsg->cmsg_level = scmsg->cmsg_level; + dcmsg->cmsg_type = scmsg->cmsg_type; + if(dcmsg->cmsg_len) { + dcmsg->cmsg_len -= 4; + memcpy(dcmsg+1, CMSG_DATA(scmsg), dcmsg->cmsg_len-sizeof(struct i386_cmsghdr)); + d->msg_controllen -= 4; + } + (struct i386_cmsghdr*)(((uintptr_t)dcmsg) + ((dcmsg->cmsg_len+3)&~3)); + scmsg = CMSG_NXTHDR(s, scmsg); + } + } else + d->msg_control = 0; + d->msg_flags = s->msg_flags; +} + +#define TRANSFERT \ +GO(l_type) \ +GO(l_whence) \ +GO(l_start) \ +GO(l_len) \ +GO(l_pid) + +// Arm -> x86 +void UnalignFlock_32(void* dest, void* source) +{ + #define GO(A) ((i386_flock_t*)dest)->A = ((my_flock64_t*)source)->A; + TRANSFERT + #undef GO +} + +// x86 -> Arm +void AlignFlock_32(void* dest, void* source) +{ + #define GO(A) ((my_flock64_t*)dest)->A = ((i386_flock_t*)source)->A; + TRANSFERT + #undef GO +} +#undef TRANSFERT + +void convert_regext_to_32(void* d, void* s) +{ + my_regex_32_t* dst = d; + my_regex_t* src = s; + + dst->buffer = to_ptrv(src->buffer); + dst->allocated = to_ulong(src->allocated); + dst->used = to_ulong(src->used); + dst->syntax = to_ulong(src->syntax); + dst->fastmap = to_ptrv(src->fastmap); + dst->translate = to_ptrv(src->translate); + dst->re_nsub = to_ulong(src->re_nsub); + dst->flags = src->flags; +} + +void convert_regext_to_64(void* d, void* s) +{ + my_regex_t* dst = d; + my_regex_32_t* src = s; + + dst->buffer = from_ptrv(src->buffer); + dst->allocated = from_ulong(src->allocated); + dst->used = from_ulong(src->used); + dst->syntax = from_ulong(src->syntax); + dst->fastmap = from_ptrv(src->fastmap); + dst->translate = from_ptrv(src->translate); + dst->re_nsub = from_ulong(src->re_nsub); + dst->flags = src->flags; +} diff --git a/src/libtools/myalign64_32.c b/src/libtools/myalign64_32.c new file mode 100755 index 0000000000000000000000000000000000000000..326dc373795322185a6c6fd0f160e1c87f1bc5da --- /dev/null +++ b/src/libtools/myalign64_32.c @@ -0,0 +1,204 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" +#include "box32.h" + +void UnalignStat64_32(const void* source, void* dest) +{ + struct i386_stat64 *i386st = (struct i386_stat64*)dest; + struct stat *st = (struct stat*) source; + + memset(i386st->__pad0, 0, sizeof(i386st->__pad0)); + memset(i386st->__pad3, 0, sizeof(i386st->__pad3)); + i386st->st_dev = st->st_dev; + i386st->__st_ino = st->st_ino; + i386st->st_mode = st->st_mode; + i386st->st_nlink = st->st_nlink; + i386st->st_uid = st->st_uid; + i386st->st_gid = st->st_gid; + i386st->st_rdev = st->st_rdev; + i386st->st_size = st->st_size; + i386st->st_blksize = st->st_blksize; + i386st->st_blocks = st->st_blocks; + i386st->st_atime = st->st_atime; + i386st->st_atime_nsec = st->st_atime_nsec; + i386st->st_mtime = st->st_mtime; + i386st->st_mtime_nsec = st->st_mtime_nsec; + i386st->st_ctime = st->st_ctime; + i386st->st_ctime_nsec = st->st_ctime_nsec; + i386st->st_ino = st->st_ino; +} + +struct native_fsid { + int val[2]; +}; + +struct native_statfs64 { + uint32_t f_type; + uint32_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + struct native_fsid f_fsid; + uint32_t f_namelen; + uint32_t f_frsize; + uint32_t f_flags; + uint32_t f_spare[4]; +}; // f_flags is not always defined, but then f_spare is [5] in that case + +void UnalignStatFS64_32(const void* source, void* dest) +{ + struct i386_statfs64 *i386st = (struct i386_statfs64*)dest; + struct native_statfs64 *st = (struct native_statfs64*) source; + + i386st->f_type = st->f_type; + i386st->f_bsize = st->f_bsize; + i386st->f_blocks = st->f_blocks; + i386st->f_bfree = st->f_bfree; + i386st->f_bavail = st->f_bavail; + i386st->f_files = st->f_files; + i386st->f_ffree = st->f_ffree; + memcpy(&i386st->f_fsid, &st->f_fsid, sizeof(i386st->f_fsid)); + i386st->f_namelen = st->f_namelen; + i386st->f_frsize = st->f_frsize; + i386st->f_flags = st->f_flags; + i386st->f_spare[0] = st->f_spare[0]; + i386st->f_spare[1] = st->f_spare[1]; + i386st->f_spare[2] = st->f_spare[2]; + i386st->f_spare[3] = st->f_spare[3]; +} + +void UnalignStatFS_32(const void* source, void* dest) +{ + struct i386_statfs *i386st = (struct i386_statfs*)dest; + struct native_statfs64 *st = (struct native_statfs64*) source; + + i386st->f_type = st->f_type; + i386st->f_bsize = st->f_bsize; + i386st->f_blocks = st->f_blocks; + i386st->f_bfree = st->f_bfree; + i386st->f_bavail = st->f_bavail; + i386st->f_files = st->f_files; + i386st->f_ffree = st->f_ffree; + memcpy(&i386st->f_fsid, &st->f_fsid, sizeof(i386st->f_fsid)); + i386st->f_namelen = st->f_namelen; + i386st->f_frsize = st->f_frsize; + i386st->f_flags = st->f_flags; + i386st->f_spare[0] = st->f_spare[0]; + i386st->f_spare[1] = st->f_spare[1]; + i386st->f_spare[2] = st->f_spare[2]; + i386st->f_spare[3] = st->f_spare[3]; +} + +struct native_statvfs { + unsigned long int f_bsize; + unsigned long int f_frsize; +#ifndef ANDROID + __fsblkcnt64_t f_blocks; + __fsblkcnt64_t f_bfree; + __fsblkcnt64_t f_bavail; + __fsfilcnt64_t f_files; + __fsfilcnt64_t f_ffree; + __fsfilcnt64_t f_favail; +#else + fsblkcnt_t f_blocks; + fsblkcnt_t f_bfree; + fsblkcnt_t f_bavail; + fsblkcnt_t f_files; + fsblkcnt_t f_ffree; + fsblkcnt_t f_favail; +#endif + unsigned long int f_fsid; +#ifdef _STATVFSBUF_F_UNUSED + int __f_unused; +#endif + unsigned long int f_flag; + unsigned long int f_namemax; + unsigned int f_type; + int __f_spare[5]; +}; + +void UnalignStatVFS64_32(const void* source, void* dest) +{ + struct i386_statvfs64 *i386st = (struct i386_statvfs64*)dest; + struct native_statvfs *st = (struct native_statvfs*) source; + + i386st->f_bsize = st->f_bsize; + i386st->f_frsize = st->f_frsize; + i386st->f_blocks = st->f_blocks; + i386st->f_bfree = st->f_bfree; + i386st->f_bavail = st->f_bavail; + i386st->f_files = st->f_files; + i386st->f_ffree = st->f_ffree; + i386st->f_favail = st->f_favail; + i386st->f_fsid = st->f_fsid; + i386st->f_flag = st->f_flag; + i386st->f_namemax = st->f_namemax; + i386st->f_type = st->f_type; +} + +void UnalignStatVFS_32(const void* source, void* dest) +{ + struct i386_statvfs *i386st = (struct i386_statvfs*)dest; + struct native_statvfs *st = (struct native_statvfs*) source; + + i386st->f_bsize = st->f_bsize; + i386st->f_frsize = st->f_frsize; + i386st->f_blocks = st->f_blocks; + i386st->f_bfree = st->f_bfree; + i386st->f_bavail = st->f_bavail; + i386st->f_files = st->f_files; + i386st->f_ffree = st->f_ffree; + i386st->f_favail = st->f_favail; + i386st->f_fsid = st->f_fsid; + i386st->f_flag = st->f_flag; + i386st->f_namemax = st->f_namemax; + i386st->f_type = st->f_type; +} + +void UnalignDirent_32(const void* source, void* dest) +{ + struct i386_dirent* i386d = (struct i386_dirent*)dest; + struct dirent* d = (struct dirent*)source; + + i386d->d_ino = d->d_ino ^ (d->d_ino >> 32); + i386d->d_off = d->d_off; + i386d->d_reclen = d->d_reclen - 8; + i386d->d_type = d->d_type; + memcpy(i386d->d_name, d->d_name, d->d_reclen - (8+2+1)); +} + +#define TRANSFERT \ +GO(l_type) \ +GO(l_whence) \ +GO(l_start) \ +GO(l_len) \ +GO(l_pid) + +// Arm -> x86 +void UnalignFlock64_32(void* dest, void* source) +{ + #define GO(A) ((x86_flock64_t*)dest)->A = ((my_flock64_t*)source)->A; + TRANSFERT + #undef GO +} + +// x86 -> Arm +void AlignFlock64_32(void* dest, void* source) +{ + #define GO(A) ((my_flock64_t*)dest)->A = ((x86_flock64_t*)source)->A; + TRANSFERT + #undef GO +} +#undef TRANSFERT diff --git a/src/libtools/sdl1align32.c b/src/libtools/sdl1align32.c new file mode 100644 index 0000000000000000000000000000000000000000..c9c68a8a6ec124d991e2a0a5fcef1777635ef7d4 --- /dev/null +++ b/src/libtools/sdl1align32.c @@ -0,0 +1,311 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" +#include "debug.h" +#include "box32.h" +#include "sdl1align32.h" + + +void inplace_SDL_Palette_to_64(void* a) { + if(!a) return; + my_SDL_Palette_32_t* src = a; + my_SDL_Palette_t* dst = a; + dst->colors = from_ptrv(src->colors); +} +void inplace_SDL_Palette_to_32(void* a) { + if(!a) return; + my_SDL_Palette_t* src = a; + my_SDL_Palette_32_t* dst = a; + dst->colors = to_ptrv(src->colors); +} +void inplace_SDL_PixelFormat_to_64_nopalette(void* a) { + if(!a) return; + my_SDL_PixelFormat_32_t* src = a; + my_SDL_PixelFormat_t* dst = a; + memmove(&dst->BitsPerPixel, &src->BitsPerPixel, sizeof(my_SDL_PixelFormat_t)-offsetof(my_SDL_PixelFormat_t, BitsPerPixel)); + dst->palette = from_ptrv(src->palette); +} +void inplace_SDL_PixelFormat_to_64(void* a) { + if(!a) return; + my_SDL_PixelFormat_32_t* src = a; + my_SDL_PixelFormat_t* dst = a; + memmove(&dst->BitsPerPixel, &src->BitsPerPixel, sizeof(my_SDL_PixelFormat_t)-offsetof(my_SDL_PixelFormat_t, BitsPerPixel)); + dst->palette = from_ptrv(src->palette); + inplace_SDL_Palette_to_64(dst->palette); +} +void inplace_SDL_PixelFormat_to_32(void* a) { + if(!a) return; + my_SDL_PixelFormat_t* src = a; + my_SDL_PixelFormat_32_t* dst = a; + inplace_SDL_Palette_to_32(src->palette); + dst->palette = to_ptrv(src->palette); + memmove(&dst->BitsPerPixel, &src->BitsPerPixel, sizeof(my_SDL_PixelFormat_32_t)-offsetof(my_SDL_PixelFormat_32_t, BitsPerPixel)); +} + +void inplace_SDL_Surface_to_64(void* a) { + if(!a) return; + my_SDL_Surface_32_t* src = a; + my_SDL_Surface_t* dst = a; + dst->refcount = src->refcount; + dst->format_version = src->format_version; + dst->map = from_ptrv(src->map); + dst->locked = src->locked; + dst->unused1 = src->unused1; + memmove(&dst->clip_rect, &src->clip_rect, sizeof(dst->clip_rect)); + dst->hwdata = from_ptrv(src->hwdata); + dst->offset = src->offset; + dst->pixels = from_ptrv(src->pixels); + dst->pitch = src->pitch; + dst->h = src->h; + dst->w = src->w; + dst->format = from_ptrv(src->format); + inplace_SDL_PixelFormat_to_64(dst->format); +} +void inplace_SDL_Surface_to_32(void* a) { + if(!a) return; + my_SDL_Surface_t* src = a; + my_SDL_Surface_32_t* dst = a; + inplace_SDL_PixelFormat_to_32(src->format); + dst->format = to_ptrv(src->format); + dst->w = src->w; + dst->h = src->h; + dst->pitch = src->pitch; + dst->pixels = to_ptrv(src->pixels); + dst->offset = src->offset; + dst->hwdata = to_ptrv(src->hwdata); + memmove(&dst->clip_rect, &src->clip_rect, sizeof(dst->clip_rect)); + dst->unused1 = src->unused1; + dst->locked = src->locked; + dst->map = to_ptrv(src->map); + dst->format_version = src->format_version; + dst->refcount = src->refcount; +} + + +void convert_SDL_Event_to_32(void* dst_, const void* src_) +{ + if(!src_|| !dst_) return; + const my_SDL_Event_t *src = src_; + my_SDL_Event_32_t* dst = dst_; + dst->type = src->type; + switch(src->type) { + case SDL_ACTIVEEVENT: + dst->active.gain = src->active.gain; + dst->active.state = src->active.state; + break; + case SDL_KEYUP: + case SDL_KEYDOWN: + dst->key.keysym.mod = src->key.keysym.mod; + dst->key.keysym.scancode = src->key.keysym.scancode; + dst->key.keysym.sym = src->key.keysym.sym; + dst->key.keysym.unicode = src->key.keysym.unicode; + dst->key.state = src->key.state; + dst->key.which = dst->key.which; + break; + case SDL_MOUSEMOTION: + dst->motion.state = src->motion.state; + dst->motion.which = src->motion.which; + dst->motion.x = src->motion.x; + dst->motion.y = src->motion.y; + dst->motion.xrel = src->motion.xrel; + dst->motion.yrel = src->motion.yrel; + break; + case SDL_MOUSEBUTTONUP: + case SDL_MOUSEBUTTONDOWN: + dst->button.button = src->button.button; + dst->button.state = src->button.state; + dst->button.which = src->button.which; + dst->button.x = src->button.x; + dst->button.y = src->button.y; + break; + case SDL_JOYAXISMOTION: + dst->jaxis.axis = src->jaxis.axis; + dst->jaxis.value = src->jaxis.value; + dst->jaxis.which = src->jaxis.which; + break; + case SDL_JOYBALLMOTION: + dst->jball.ball = src->jball.ball; + dst->jball.which = src->jball.which; + dst->jball.xrel = src->jball.xrel; + dst->jball.yrel = src->jball.yrel; + break; + case SDL_JOYHATMOTION: + dst->jhat.hat = src->jhat.hat; + dst->jhat.value = src->jhat.value; + dst->jhat.which = src->jhat.which; + break; + case SDL_JOYBUTTONUP: + case SDL_JOYBUTTONDOWN: + dst->jbutton.button = src->jbutton.button; + dst->jbutton.state = src->jbutton.state; + dst->jbutton.which = src->jbutton.which; + break; + case SDL_VIDEORESIZE: + dst->resize.h = src->resize.h; + dst->resize.w = src->resize.w; + break; + case SDL_VIDEOEXPOSE: + case SDL_QUIT: + break; + case SDL_USEREVENT: + dst->user.code = src->user.code; + dst->user.data1 = to_ptrv(src->user.data1); + dst->user.data2 = to_ptrv(src->user.data2); + case SDL_SYSWMEVENT: + printf_log(LOG_NONE, "TODO: Convert SDL_SYSWMEVENT\n"); + abort(); + break; + default: + printf_log(LOG_INFO, "Warning, unsuported SDL1.2 event %d\n", src->type); + memcpy(dst, src, sizeof(my_SDL_Event_32_t)); + } +} +void convert_SDL_Event_to_64(void* dst_, const void* src_) +{ + if(!src_|| !dst_) return; + const my_SDL_Event_32_t *src = src_; + my_SDL_Event_t* dst = dst_; + dst->type = src->type; + switch(src->type) { + case SDL_ACTIVEEVENT: + dst->active.gain = src->active.gain; + dst->active.state = src->active.state; + break; + case SDL_KEYUP: + case SDL_KEYDOWN: + dst->key.keysym.mod = src->key.keysym.mod; + dst->key.keysym.scancode = src->key.keysym.scancode; + dst->key.keysym.sym = src->key.keysym.sym; + dst->key.keysym.unicode = src->key.keysym.unicode; + dst->key.state = src->key.state; + dst->key.which = dst->key.which; + break; + case SDL_MOUSEMOTION: + dst->motion.state = src->motion.state; + dst->motion.which = src->motion.which; + dst->motion.x = src->motion.x; + dst->motion.y = src->motion.y; + dst->motion.xrel = src->motion.xrel; + dst->motion.yrel = src->motion.yrel; + break; + case SDL_MOUSEBUTTONUP: + case SDL_MOUSEBUTTONDOWN: + dst->button.button = src->button.button; + dst->button.state = src->button.state; + dst->button.which = src->button.which; + dst->button.x = src->button.x; + dst->button.y = src->button.y; + break; + case SDL_JOYAXISMOTION: + dst->jaxis.axis = src->jaxis.axis; + dst->jaxis.value = src->jaxis.value; + dst->jaxis.which = src->jaxis.which; + break; + case SDL_JOYBALLMOTION: + dst->jball.ball = src->jball.ball; + dst->jball.which = src->jball.which; + dst->jball.xrel = src->jball.xrel; + dst->jball.yrel = src->jball.yrel; + break; + case SDL_JOYHATMOTION: + dst->jhat.hat = src->jhat.hat; + dst->jhat.value = src->jhat.value; + dst->jhat.which = src->jhat.which; + break; + case SDL_JOYBUTTONUP: + case SDL_JOYBUTTONDOWN: + dst->jbutton.button = src->jbutton.button; + dst->jbutton.state = src->jbutton.state; + dst->jbutton.which = src->jbutton.which; + break; + case SDL_VIDEORESIZE: + dst->resize.h = src->resize.h; + dst->resize.w = src->resize.w; + break; + case SDL_VIDEOEXPOSE: + case SDL_QUIT: + break; + case SDL_USEREVENT: + dst->user.code = src->user.code; + dst->user.data1 = from_ptrv(src->user.data1); + dst->user.data2 = from_ptrv(src->user.data2); + case SDL_SYSWMEVENT: + printf_log(LOG_NONE, "TODO: Convert SDL_SYSWMEVENT\n"); + abort(); + break; + default: + printf_log(LOG_INFO, "Warning, unsuported SDL1.2 (un)event %d\n", src->type); + memcpy(dst, src, sizeof(my_SDL_Event_32_t)); + } +} + +void inplace_SDL_RWops_to_64(void* a) +{ + if(!a) return; + my_SDL_RWops_32_t* src = a; + my_SDL_RWops_t* dst = a; + memmove(&dst->hidden, &src->hidden, sizeof(dst->hidden)); + dst->type = src->type; + dst->close = from_ptrv(src->close); + dst->write = from_ptrv(src->write); + dst->read = from_ptrv(src->read); + dst->seek = from_ptrv(src->seek); + +} +void inplace_SDL_RWops_to_32(void* a) +{ + if(!a) return; + my_SDL_RWops_t* src = a; + my_SDL_RWops_32_t* dst = a; + dst->seek = to_ptrv(src->seek); + dst->read = to_ptrv(src->read); + dst->write = to_ptrv(src->write); + dst->close = to_ptrv(src->close); + dst->type = src->type; + memmove(&dst->hidden, &src->hidden, sizeof(dst->hidden)); +} + +void convert_AudioCVT_to_32(void* d, void* s) +{ + my_SDL_AudioCVT_32_t* dst = d; + my_SDL_AudioCVT_t* src = s; + dst->needed = src->needed; + dst->src_format = src->src_format; + dst->dest_format = src->dest_format; + dst->rate_incr = src->rate_incr; + dst->buf = to_ptrv(src->buf); + dst->len = src->len; + dst->len_cvt = src->len_cvt; + dst->len_mult = src->len_mult; + dst->len_ratio = src->len_ratio; + for(int i=0; i<10; ++i) + dst->filters[i] = to_ptrv(src->filters[i]); + dst->filter_index = src->filter_index; +} +void convert_AudioCVT_to_64(void* d, void* s) +{ + my_SDL_AudioCVT_t* dst = d; + my_SDL_AudioCVT_32_t* src = s; + dst->needed = src->needed; + dst->src_format = src->src_format; + dst->dest_format = src->dest_format; + dst->rate_incr = src->rate_incr; + dst->buf = from_ptrv(src->buf); + dst->len = src->len; + dst->len_cvt = src->len_cvt; + dst->len_mult = src->len_mult; + dst->len_ratio = src->len_ratio; + for(int i=0; i<10; ++i) + dst->filters[i] = from_ptrv(src->filters[i]); + dst->filter_index = src->filter_index; +} diff --git a/src/libtools/sdl1rwops.c b/src/libtools/sdl1rwops.c index ec3f8abdb7c749e43004854fff20f806464ee6cf..baf6897bf4ac17b972270dd2c355cbc434f3c474 100644 --- a/src/libtools/sdl1rwops.c +++ b/src/libtools/sdl1rwops.c @@ -6,6 +6,10 @@ #include "sdl1rwops.h" #include "debug.h" #include "wrapper.h" +#ifdef BOX32 +#include "wrapper32.h" +#include "sdl1align32.h" +#endif #include "box64context.h" #include "x64run.h" #include "x64emu.h" @@ -51,21 +55,70 @@ typedef struct SDL1_RWops_s { } hidden; } SDL1_RWops_t; +#ifdef BOX32 +#define SUPER() \ + if (box64_is32bits) { \ + GO(seek, iFpii_32) \ + GO(read, iFppii_32) \ + GO(write, iFppii_32) \ + GO(close, iFp_32) \ + } else { \ + GO(seek, iFpii) \ + GO(read, iFppii) \ + GO(write, iFppii) \ + GO(close, iFp) \ + } +#else +#define SUPER() \ + GO(seek, iFpii) \ + GO(read, iFppii) \ + GO(write, iFppii) \ + GO(close, iFp) +#endif EXPORT int32_t my_native_seek(SDL1_RWops_t *context, int32_t offset, int32_t whence) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL_RWops_to_64(context); + int ret = context->hidden.my.orig->seek(context->hidden.my.orig, offset, whence); + inplace_SDL_RWops_to_32(context); + return ret; + } + #endif return context->hidden.my.orig->seek(context->hidden.my.orig, offset, whence); } EXPORT int32_t my_native_read(SDL1_RWops_t *context, void *ptr, int32_t size, int32_t maxnum) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL_RWops_to_64(context); + int ret = context->hidden.my.orig->read(context->hidden.my.orig, ptr, size, maxnum); + inplace_SDL_RWops_to_32(context); + return ret; + } + #endif return context->hidden.my.orig->read(context->hidden.my.orig, ptr, size, maxnum); } EXPORT int32_t my_native_write(SDL1_RWops_t *context, const void *ptr, int32_t size, int32_t num) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL_RWops_to_64(context); + int ret = context->hidden.my.orig->write(context->hidden.my.orig, ptr, size, num); + inplace_SDL_RWops_to_32(context); + return ret; + } + #endif return context->hidden.my.orig->write(context->hidden.my.orig, ptr, size, num); } EXPORT int32_t my_native_close(SDL1_RWops_t *context) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL_RWops_to_64(context); + } + #endif int32_t ret = context->hidden.my.orig->close(context->hidden.my.orig); context->hidden.my.custom_free(context); return ret; @@ -109,10 +162,7 @@ SDL1_RWops_t* AddNativeRW(x64emu_t* emu, SDL1_RWops_t* ops) fnc = AddCheckBridge(system, W, my_native_##A, 0, NULL); \ newrw->A = (sdl1_##A)fnc; - GO(seek, iFpii) - GO(read, iFppii) - GO(write, iFppii) - GO(close, iFp) + SUPER() #undef GO @@ -137,10 +187,7 @@ SDL1_RWops_t* RWNativeStart(x64emu_t* emu, SDL1_RWops_t* ops) #define GO(A, W) \ newrw->A = my_emulated_##A; - GO(seek, iFpii) - GO(read, iFppii) - GO(write, iFppii) - GO(close, iFp) + SUPER() #undef GO diff --git a/src/libtools/sdl2align32.c b/src/libtools/sdl2align32.c new file mode 100644 index 0000000000000000000000000000000000000000..2f90fdebb41a99d2538d66d672245d3701225340 --- /dev/null +++ b/src/libtools/sdl2align32.c @@ -0,0 +1,659 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" +#include "debug.h" +#include "box32.h" +#include "sdl2align32.h" + +void inplace_SDL2_DisplayMode_to_64(void* a) +{ + if (!a) return; + my_SDL2_DisplayMode_32_t* src = a; + my_SDL2_DisplayMode_t* dst = a; + dst->driverdata = from_ptrv(src->driverdata); +} + +void inplace_SDL2_DisplayMode_to_32(void* a) +{ + if (!a) return; + my_SDL2_DisplayMode_t* src = a; + my_SDL2_DisplayMode_32_t* dst = a; + dst->driverdata = to_ptrv(src->driverdata); +} + +void convert_SDL2_DisplayMode_to_32(void* dst_, void* src_) +{ + if (!src_ || !dst_) return; + my_SDL2_DisplayMode_t* src = src_; + my_SDL2_DisplayMode_32_t* dst = dst_; + dst->format = src->format; + dst->w = src->w; + dst->h = src->h; + dst->refresh_rate = src->refresh_rate; + dst->driverdata = to_ptrv(src->driverdata); +} + +void convert_SDL2_DisplayMode_to_64(void* dst_, void* src_) +{ + if (!src_ || !dst_) return; + my_SDL2_DisplayMode_32_t* src = src_; + my_SDL2_DisplayMode_t* dst = dst_; + dst->format = src->format; + dst->w = src->w; + dst->h = src->h; + dst->refresh_rate = src->refresh_rate; + dst->driverdata = from_ptrv(src->driverdata); +} + +void convert_SDL2_Event_to_64(void* dst_, const void* src_) +{ + // in reverse order so it can be done inplace... + if (!src_ || !dst_) return; + const my_SDL2_Event_32_t* src = src_; + my_SDL2_Event_t* dst = dst_; + switch (src->type) { + case SDL2_WINDOWEVENT: + dst->window.data2 = src->window.data2; + dst->window.data1 = src->window.data1; + dst->window.padding3 = src->window.padding3; + dst->window.padding2 = src->window.padding2; + dst->window.padding1 = src->window.padding1; + dst->window.event = src->window.event; + dst->window.windowID = src->window.windowID; + dst->window.timestamp = src->window.timestamp; + dst->window.type = src->window.type; + break; + case SDL2_MOUSEMOTION: + dst->motion.yrel = src->motion.yrel; + dst->motion.xrel = src->motion.xrel; + dst->motion.y = src->motion.y; + dst->motion.x = src->motion.x; + dst->motion.state = src->motion.state; + dst->motion.which = src->motion.which; + dst->motion.windowID = src->motion.windowID; + dst->motion.timestamp = src->motion.timestamp; + dst->motion.type = src->motion.type; + break; + case SDL2_MOUSEBUTTONDOWN: + case SDL2_MOUSEBUTTONUP: + dst->button.y = src->button.y; + dst->button.x = src->button.x; + dst->button.padding1 = src->button.padding1; + dst->button.clicks = src->button.clicks; + dst->button.state = src->button.state; + dst->button.button = src->button.button; + dst->button.which = src->button.which; + dst->button.windowID = src->button.windowID; + dst->button.timestamp = src->button.timestamp; + dst->button.type = src->button.type; + break; + case SDL2_AUDIODEVICEADDED: + case SDL2_AUDIODEVICEREMOVED: + dst->adevice.padding3 = src->adevice.padding3; + dst->adevice.padding2 = src->adevice.padding2; + dst->adevice.padding1 = src->adevice.padding1; + dst->adevice.iscapture = src->adevice.iscapture; + dst->adevice.which = src->adevice.which; + dst->adevice.timestamp = src->adevice.timestamp; + dst->adevice.type = src->adevice.type; + break; + case SDL2_KEYDOWN: + case SDL2_KEYUP: + dst->key.keysym.unused = src->key.keysym.unused; + dst->key.keysym.mod = src->key.keysym.mod; + dst->key.keysym.sym = src->key.keysym.sym; + dst->key.keysym.scancode = src->key.keysym.scancode; + dst->key.padding3 = src->key.padding3; + dst->key.padding2 = src->key.padding2; + dst->key.repeat = src->key.repeat; + dst->key.state = src->key.state; + dst->key.windowID = src->key.windowID; + dst->key.timestamp = src->key.timestamp; + dst->key.type = src->key.type; + break; + case SDL2_TEXTEDITING: + dst->edit.length = src->edit.length; + dst->edit.start = src->edit.start; + memcpy(dst->edit.text, src->edit.text, 32); + dst->edit.windowID = src->edit.windowID; + dst->edit.timestamp = src->edit.timestamp; + dst->edit.type = src->edit.type; + break; + case SDL2_TEXTINPUT: + memcpy(dst->text.text, src->text.text, 32); + dst->text.windowID = src->text.windowID; + dst->text.timestamp = src->text.timestamp; + dst->text.type = src->text.type; + break; + case SDL2_MOUSEWHEEL: + dst->wheel.mouseY = src->wheel.mouseY; + dst->wheel.mouseX = src->wheel.mouseX; + dst->wheel.preciseY = src->wheel.preciseY; + dst->wheel.preciseX = src->wheel.preciseX; + dst->wheel.direction = src->wheel.direction; + dst->wheel.y = src->wheel.y; + dst->wheel.x = src->wheel.x; + dst->wheel.which = src->wheel.which; + dst->wheel.windowID = src->wheel.windowID; + dst->wheel.timestamp = src->wheel.timestamp; + dst->wheel.type = src->wheel.type; + break; + case SDL2_POLLSENTINEL: + dst->common.timestamp = src->common.timestamp; + dst->common.type = src->common.type; + break; + case SDL2_DISPLAYEVENT: + dst->display.data1 = src->display.data1; + dst->display.padding3 = src->display.padding3; + dst->display.padding2 = src->display.padding2; + dst->display.padding1 = src->display.padding1; + dst->display.event = src->display.event; + dst->display.display = src->display.display; + dst->display.timestamp = src->display.timestamp; + dst->display.type = src->display.type; + break; + case SDL2_JOYDEVICEADDED: + dst->jdevice.which = src->jdevice.which; + dst->jdevice.timestamp = src->jdevice.timestamp; + dst->jdevice.type = src->jdevice.type; + break; + case SDL2_CONTROLLERDEVICEADDED: + dst->cdevice.which = src->cdevice.which; + dst->cdevice.timestamp = src->cdevice.timestamp; + dst->cdevice.type = src->cdevice.type; + break; + case SDL2_JOYAXISMOTION: + dst->jaxis.padding4 = src->jaxis.padding4; + dst->jaxis.value = src->jaxis.value; + dst->jaxis.padding3 = src->jaxis.padding3; + dst->jaxis.padding2 = src->jaxis.padding2; + dst->jaxis.padding1 = src->jaxis.padding1; + dst->jaxis.axis = src->jaxis.axis; + dst->jaxis.which = src->jaxis.which; + dst->jaxis.timestamp = src->jaxis.timestamp; + dst->jaxis.type = src->jaxis.type; + break; + case SDL2_CONTROLLERAXISMOTION: + dst->caxis.padding4 = src->caxis.padding4; + dst->caxis.value = src->caxis.value; + dst->caxis.padding3 = src->caxis.padding3; + dst->caxis.padding2 = src->caxis.padding2; + dst->caxis.padding1 = src->caxis.padding1; + dst->caxis.axis = src->caxis.axis; + dst->caxis.which = src->caxis.which; + dst->caxis.timestamp = src->caxis.timestamp; + dst->caxis.type = src->caxis.type; + break; + case SDL2_QUIT: + dst->quit.timestamp = src->quit.timestamp; + dst->quit.type = src->quit.type; + break; + case SDL2_CLIPBOARDUPDATE: + dst->common.timestamp = src->common.timestamp; + dst->common.type = src->common.type; + break; + case SDL2_JOYBUTTONDOWN: + case SDL2_JOYBUTTONUP: + dst->jbutton.type = src->jbutton.type; + dst->jbutton.timestamp = src->jbutton.timestamp; + dst->jbutton.which = src->jbutton.which; + dst->jbutton.button = src->jbutton.button; + dst->jbutton.state = src->jbutton.state; + dst->jbutton.padding1 = src->jbutton.padding1; + dst->jbutton.padding2 = src->jbutton.padding2; + break; + case SDL2_CONTROLLERBUTTONDOWN: + case SDL2_CONTROLLERBUTTONUP: + dst->cbutton.type = src->cbutton.type; + dst->cbutton.timestamp = src->cbutton.timestamp; + dst->cbutton.which = src->cbutton.which; + dst->cbutton.button = src->cbutton.button; + dst->cbutton.state = src->cbutton.state; + dst->cbutton.padding1 = src->cbutton.padding1; + dst->cbutton.padding2 = src->cbutton.padding2; + break; + case SDL2_SYSWMEVENT: + dst->syswm.type = src->syswm.type; + dst->syswm.timestamp = src->syswm.timestamp; + dst->syswm.msg = from_ptrv(src->syswm.msg); + break; + default: + printf_log(LOG_INFO, "Warning, unsuported SDL2 event %d\n", src->type); + if(dst_!=src_) + memmove(dst, src, sizeof(my_SDL2_Event_32_t)); + } +} +void convert_SDL2_Event_to_32(void* dst_, const void* src_) +{ + if (!src_ || !dst_) return; + const my_SDL2_Event_t* src = src_; + my_SDL2_Event_32_t* dst = dst_; + dst->type = src->type; + switch (src->type) { + case SDL2_WINDOWEVENT: + dst->window.type = src->window.type; + dst->window.timestamp = src->window.timestamp; + dst->window.windowID = src->window.windowID; + dst->window.event = src->window.event; + dst->window.padding1 = src->window.padding1; + dst->window.padding2 = src->window.padding2; + dst->window.padding3 = src->window.padding3; + dst->window.data1 = src->window.data1; + dst->window.data2 = src->window.data2; + break; + case SDL2_MOUSEMOTION: + dst->motion.type = src->motion.type; + dst->motion.timestamp = src->motion.timestamp; + dst->motion.windowID = src->motion.windowID; + dst->motion.which = src->motion.which; + dst->motion.state = src->motion.state; + dst->motion.x = src->motion.x; + dst->motion.y = src->motion.y; + dst->motion.xrel = src->motion.xrel; + dst->motion.yrel = src->motion.yrel; + break; + case SDL2_MOUSEBUTTONDOWN: + case SDL2_MOUSEBUTTONUP: + dst->button.type = src->button.type; + dst->button.timestamp = src->button.timestamp; + dst->button.windowID = src->button.windowID; + dst->button.which = src->button.which; + dst->button.button = src->button.button; + dst->button.state = src->button.state; + dst->button.clicks = src->button.clicks; + dst->button.padding1 = src->button.padding1; + dst->button.x = src->button.x; + dst->button.y = src->button.y; + break; + case SDL2_AUDIODEVICEADDED: + case SDL2_AUDIODEVICEREMOVED: + dst->adevice.type = src->adevice.type; + dst->adevice.timestamp = src->adevice.timestamp; + dst->adevice.which = src->adevice.which; + dst->adevice.iscapture = src->adevice.iscapture; + dst->adevice.padding1 = src->adevice.padding1; + dst->adevice.padding2 = src->adevice.padding2; + dst->adevice.padding3 = src->adevice.padding3; + break; + case SDL2_KEYDOWN: + case SDL2_KEYUP: + dst->key.type = src->key.type; + dst->key.timestamp = src->key.timestamp; + dst->key.windowID = src->key.windowID; + dst->key.state = src->key.state; + dst->key.repeat = src->key.repeat; + dst->key.padding2 = src->key.padding2; + dst->key.padding3 = src->key.padding3; + dst->key.keysym.scancode = src->key.keysym.scancode; + dst->key.keysym.sym = src->key.keysym.sym; + dst->key.keysym.mod = src->key.keysym.mod; + dst->key.keysym.unused = src->key.keysym.unused; + break; + case SDL2_TEXTEDITING: + dst->edit.type = src->edit.type; + dst->edit.timestamp = src->edit.timestamp; + dst->edit.windowID = src->edit.windowID; + memcpy(dst->edit.text, src->edit.text, 32); + dst->edit.start = src->edit.start; + dst->edit.length = src->edit.length; + break; + case SDL2_TEXTINPUT: + dst->text.type = src->text.type; + dst->text.timestamp = src->text.timestamp; + dst->text.windowID = src->text.windowID; + memcpy(dst->text.text, src->text.text, 32); + break; + case SDL2_MOUSEWHEEL: + dst->wheel.type = src->wheel.type; + dst->wheel.timestamp = src->wheel.timestamp; + dst->wheel.windowID = src->wheel.windowID; + dst->wheel.which = src->wheel.which; + dst->wheel.x = src->wheel.x; + dst->wheel.y = src->wheel.y; + dst->wheel.direction = src->wheel.direction; + dst->wheel.preciseX = src->wheel.preciseX; + dst->wheel.preciseY = src->wheel.preciseY; + dst->wheel.mouseX = src->wheel.mouseX; + dst->wheel.mouseY = src->wheel.mouseY; + break; + case SDL2_POLLSENTINEL: + dst->common.type = src->common.type; + dst->common.timestamp = src->common.timestamp; + break; + case SDL2_DISPLAYEVENT: + dst->display.type = src->display.type; + dst->display.timestamp = src->display.timestamp; + dst->display.display = src->display.display; + dst->display.event = src->display.event; + dst->display.padding1 = src->display.padding1; + dst->display.padding2 = src->display.padding2; + dst->display.padding3 = src->display.padding3; + dst->display.data1 = src->display.data1; + break; + case SDL2_JOYDEVICEADDED: + dst->jdevice.type = src->jdevice.type; + dst->jdevice.timestamp = src->jdevice.timestamp; + dst->jdevice.which = src->jdevice.which; + break; + case SDL2_CONTROLLERDEVICEADDED: + dst->cdevice.type = src->cdevice.type; + dst->cdevice.timestamp = src->cdevice.timestamp; + dst->cdevice.which = src->cdevice.which; + break; + case SDL2_JOYAXISMOTION: + dst->jaxis.type = src->jaxis.type; + dst->jaxis.timestamp = src->jaxis.timestamp; + dst->jaxis.which = src->jaxis.which; + dst->jaxis.axis = src->jaxis.axis; + dst->jaxis.padding1 = src->jaxis.padding1; + dst->jaxis.padding2 = src->jaxis.padding2; + dst->jaxis.padding3 = src->jaxis.padding3; + dst->jaxis.value = src->jaxis.value; + dst->jaxis.padding4 = src->jaxis.padding4; + break; + case SDL2_CONTROLLERAXISMOTION: + dst->caxis.type = src->caxis.type; + dst->caxis.timestamp = src->caxis.timestamp; + dst->caxis.which = src->caxis.which; + dst->caxis.axis = src->caxis.axis; + dst->caxis.padding1 = src->caxis.padding1; + dst->caxis.padding2 = src->caxis.padding2; + dst->caxis.padding3 = src->caxis.padding3; + dst->caxis.value = src->caxis.value; + dst->caxis.padding4 = src->caxis.padding4; + break; + case SDL2_QUIT: + dst->quit.type = src->quit.type; + dst->quit.timestamp = src->quit.timestamp; + break; + case SDL2_CLIPBOARDUPDATE: + dst->common.type = src->common.type; + dst->common.timestamp = src->common.timestamp; + break; + case SDL2_JOYBUTTONDOWN: + case SDL2_JOYBUTTONUP: + dst->jbutton.type = src->jbutton.type; + dst->jbutton.timestamp = src->jbutton.timestamp; + dst->jbutton.which = src->jbutton.which; + dst->jbutton.button = src->jbutton.button; + dst->jbutton.state = src->jbutton.state; + dst->jbutton.padding1 = src->jbutton.padding1; + dst->jbutton.padding2 = src->jbutton.padding2; + break; + case SDL2_CONTROLLERBUTTONDOWN: + case SDL2_CONTROLLERBUTTONUP: + dst->cbutton.type = src->cbutton.type; + dst->cbutton.timestamp = src->cbutton.timestamp; + dst->cbutton.which = src->cbutton.which; + dst->cbutton.button = src->cbutton.button; + dst->cbutton.state = src->cbutton.state; + dst->cbutton.padding1 = src->cbutton.padding1; + dst->cbutton.padding2 = src->cbutton.padding2; + break; + case SDL2_SYSWMEVENT: + dst->syswm.type = src->syswm.type; + dst->syswm.timestamp = src->syswm.timestamp; + dst->syswm.msg = to_ptrv_silent(src->syswm.msg); // msg would need translation probably! + break; + default: + printf_log(LOG_INFO, "Warning, unsuported SDL2 event %d\n", src->type); + if(dst_!=src_) + memmove(dst, src, sizeof(my_SDL2_Event_32_t)); + } +} + +void inplace_SDL2_Event_shrink(void* e) +{ + if(!e) return; + convert_SDL2_Event_to_32(e, e); +} +void inplace_SDL2_Event_enlarge(void* e) +{ + if(!e) return; + convert_SDL2_Event_to_64(e, e); +} + +void inplace_SDL2_Palette_to_32(void* a) +{ + if (!a) return; + my_SDL2_Palette_t* src = a; + my_SDL2_Palette_32_t* dst = a; + dst->ncolors = src->ncolors; + dst->colors = to_ptrv(src->colors); + dst->version = src->version; + dst->refcount = src->refcount; +} +#define SDL2_PIXELFORMAT_SIGN 0xBADC0FEE +void inplace_SDL2_PixelFormat_to_32(void* a) +{ + while (a) { + my_SDL2_PixelFormat_t* src = a; + my_SDL2_PixelFormat_32_t* dst = a; + if(*(uint32_t*)(dst+1) != SDL2_PIXELFORMAT_SIGN) { + dst->format = src->format; + inplace_SDL2_Palette_to_32(src->palette); + dst->palette = to_ptrv(src->palette); + dst->BitsPerPixel = src->BitsPerPixel; + dst->BytesPerPixel = src->BytesPerPixel; + dst->Rmask = src->Rmask; + dst->Gmask = src->Gmask; + dst->Bmask = src->Bmask; + dst->Amask = src->Amask; + dst->Rloss = src->Rloss; + dst->Gloss = src->Gloss; + dst->Bloss = src->Bloss; + dst->Aloss = src->Aloss; + dst->Rshift = src->Rshift; + dst->Gshift = src->Gshift; + dst->Bshift = src->Bshift; + dst->Ashift = src->Ashift; + dst->refcount = src->refcount; + a = (void*)src->next; + dst->next = to_ptrv(src->next); + // put a signature to avoid muultiple unpack because of the next handling + *(uint32_t*)(dst+1) = SDL2_PIXELFORMAT_SIGN; + } else a = from_ptrv(dst->next); + } +} + +// used to mirror the pixelformat on x86 side, as the one in native side is a global static used by SDL2 and so cannot be inplace shrinked +// TODO: the pixelformats are leaking. There is no mecanism to remove them +// test of refcount should be done when surface are removed to delete the format, in sync with SDL2 +static my_SDL2_PixelFormat_32_ext_t* pixelformat_head = NULL; + +static my_SDL2_PixelFormat_32_ext_t* find_pixelformat_ext(my_SDL2_PixelFormat_t* a) +{ + my_SDL2_PixelFormat_32_ext_t* head = pixelformat_head; + while(head) { + if(head->ref == a) + return head; + head = head->next; + } + return NULL; +} + +void* replace_SDL2_PixelFormat_to_32_ext(void* a) +{ + if(!a) return NULL; + my_SDL2_PixelFormat_t* src = a; + my_SDL2_PixelFormat_32_ext_t* dst = find_pixelformat_ext(src); + if(dst) return dst; + // create a new one + dst = calloc(1, sizeof(my_SDL2_PixelFormat_32_ext_t)+(src->palette?sizeof(my_SDL2_Palette_32_t):0)); // not using box_calloc as we want this to be 32bits + // copye the values + dst->ref = src; + dst->fmt.format = src->format; + if(src->palette) { + my_SDL2_Palette_32_t* pal = (void*)((uintptr_t)dst)+sizeof(my_SDL2_PixelFormat_32_ext_t); + dst->fmt.palette = to_ptrv(pal); + pal->ncolors = src->palette->ncolors; + pal->colors = to_ptrv(src->palette->colors); + pal->version = src->palette->version; + pal->refcount = src->palette->refcount; + } else dst->fmt.palette = 0; + dst->fmt.BitsPerPixel = src->BitsPerPixel; + dst->fmt.BytesPerPixel = src->BytesPerPixel; + dst->fmt.Rmask = src->Rmask; + dst->fmt.Gmask = src->Gmask; + dst->fmt.Bmask = src->Bmask; + dst->fmt.Amask = src->Amask; + dst->fmt.Rloss = src->Rloss; + dst->fmt.Gloss = src->Gloss; + dst->fmt.Bloss = src->Bloss; + dst->fmt.Aloss = src->Aloss; + dst->fmt.Rshift = src->Rshift; + dst->fmt.Gshift = src->Gshift; + dst->fmt.Bshift = src->Bshift; + dst->fmt.Ashift = src->Ashift; + dst->fmt.refcount = src->refcount; + dst->fmt.next = to_ptrv(src->next); + // insert at head and return the value + dst->next = pixelformat_head; + pixelformat_head = dst; + return dst; +} + +void* replace_SDL2_PixelFormat_to_64_ext(void* a) +{ + if(!a) return a; + my_SDL2_PixelFormat_32_ext_t* dst = a; + return dst->ref; +} + +void inplace_SDL2_Surface_to_32(void* a) +{ + if (!a) return; + my_SDL2_Surface_t* src = a; + my_SDL2_Surface_32_t* dst = a; + dst->flags = src->flags; + #if 0 + inplace_SDL2_PixelFormat_to_32(src->format); + dst->format = to_ptrv(src->format); + #else + dst->format = to_ptrv(replace_SDL2_PixelFormat_to_32_ext(src->format)); + #endif + dst->w = src->w; + dst->h = src->h; + dst->pitch = src->pitch; + dst->pixels = to_ptrv(src->pixels); + dst->userdata = to_ptrv(src->userdata); + dst->locked = src->locked; + dst->list_blitmap = to_ptrv(src->list_blitmap); + dst->clip_rect.x = src->clip_rect.x; + dst->clip_rect.y = src->clip_rect.y; + dst->clip_rect.w = src->clip_rect.w; + dst->clip_rect.h = src->clip_rect.h; + dst->map = to_ptrv(src->map); + dst->refcount = src->refcount; +} + + +void inplace_SDL2_Palette_to_64(void* a) +{ + if (!a) return; + my_SDL2_Palette_32_t* src = a; + my_SDL2_Palette_t* dst = a; + dst->refcount = src->refcount; + dst->version = src->version; + dst->colors = from_ptrv(src->colors); + dst->ncolors = src->ncolors; +} + +void inplace_SDL2_PixelFormat_to_64(void* a) +{ + while (a) { + my_SDL2_PixelFormat_32_t* src = a; + my_SDL2_PixelFormat_t* dst = a; + // check signatue + if(*(uint32_t*)(src+1) == SDL2_PIXELFORMAT_SIGN) { + uintptr_t p = (uintptr_t)(src->next); + a = (void*)p; + dst->next = from_ptrv(src->next); + dst->refcount = src->refcount; + dst->Ashift = src->Ashift; + dst->Bshift = src->Bshift; + dst->Gshift = src->Gshift; + dst->Rshift = src->Rshift; + dst->Aloss = src->Aloss; + dst->Bloss = src->Bloss; + dst->Gloss = src->Gloss; + dst->Rloss = src->Rloss; + dst->Amask = src->Amask; + dst->Bmask = src->Bmask; + dst->Gmask = src->Gmask; + dst->Rmask = src->Rmask; + dst->BytesPerPixel = src->BytesPerPixel; + dst->BitsPerPixel = src->BitsPerPixel; + p = (uintptr_t)(src->palette); + inplace_SDL2_Palette_to_64((void*)p); + dst->palette = from_ptrv(src->palette); + dst->format = src->format; + } else a = dst->next; // already 64bits! + } +} + +void inplace_SDL2_Surface_to_64(void* a) +{ + if (!a) return; + my_SDL2_Surface_32_t* src = a; + my_SDL2_Surface_t* dst = a; + dst->refcount = src->refcount; + dst->map = from_ptrv(src->map); + dst->clip_rect.h = src->clip_rect.h; + dst->clip_rect.w = src->clip_rect.w; + dst->clip_rect.y = src->clip_rect.y; + dst->clip_rect.x = src->clip_rect.x; + dst->list_blitmap = from_ptrv(src->list_blitmap); + dst->locked = src->locked; + dst->userdata = from_ptrv(src->userdata); + dst->pixels = from_ptrv(src->pixels); + dst->pitch = src->pitch; + dst->h = src->h; + dst->w = src->w; + #if 0 + uintptr_t p = (uintptr_t)(src->format); + inplace_SDL2_PixelFormat_to_64((void*)p); + dst->format = from_ptrv(src->format); + #else + dst->format = replace_SDL2_PixelFormat_to_64_ext(from_ptrv(src->format)); + #endif + dst->flags = src->flags; +} + +void inplace_SDL2_RWops_to_32(void* a) +{ + if (!a) return; + my_SDL2_RWops_t* src = a; + my_SDL2_RWops_32_t* dst = a; + dst->size = to_ptrv(src->size); + dst->seek = to_ptrv(src->seek); + dst->read = to_ptrv(src->read); + dst->write = to_ptrv(src->write); + dst->close = to_ptrv(src->close); + dst->type = src->type; + memmove(&dst->hidden, &src->hidden, sizeof(dst->hidden)); +} + +void inplace_SDL2_RWops_to_64(void* a) +{ + if(!a) return; + my_SDL2_RWops_32_t* src = a; + my_SDL2_RWops_t* dst = a; + memmove(&dst->hidden, &src->hidden, sizeof(dst->hidden)); + dst->type = src->type; + dst->close = from_ptrv(src->close); + dst->write = from_ptrv(src->write); + dst->read = from_ptrv(src->read); + dst->seek = from_ptrv(src->seek); + dst->size = from_ptrv(src->size); +} \ No newline at end of file diff --git a/src/libtools/sdl2rwops.c b/src/libtools/sdl2rwops.c index 1273d36c4130cd403579f3e57320b8bfce157151..41d7b2e8377f6799f43707d6135b1bb7e5e4c785 100644 --- a/src/libtools/sdl2rwops.c +++ b/src/libtools/sdl2rwops.c @@ -6,6 +6,10 @@ #include "sdl2rwops.h" #include "debug.h" #include "wrapper.h" +#ifdef BOX32 +#include "wrapper32.h" +#include "sdl2align32.h" +#endif #include "box64context.h" #include "x64run.h" #include "x64emu.h" @@ -19,8 +23,8 @@ typedef struct SDL2_RWops_s SDL2_RWops_t; typedef int64_t (*sdl2_size)(SDL2_RWops_t *context); typedef int64_t (*sdl2_seek)(SDL2_RWops_t *context, int64_t offset, int32_t whence); -typedef int32_t (*sdl2_read)(SDL2_RWops_t *context, void *ptr, int32_t size, int32_t maxnum); -typedef int32_t (*sdl2_write)(SDL2_RWops_t *context, const void *ptr, int32_t size, int32_t num); +typedef size_t (*sdl2_read)(SDL2_RWops_t *context, void *ptr, size_t size, size_t maxnum); +typedef size_t (*sdl2_write)(SDL2_RWops_t *context, const void *ptr, size_t size, size_t num); typedef int32_t (*sdl2_close)(SDL2_RWops_t *context); #define BOX64RW 0x79 // random signature value @@ -51,57 +55,162 @@ typedef struct SDL2_RWops_s { SDL2_RWops_t *orig; sdl2_freerw custom_free; } my; + #ifdef BOX32 + struct { + my_SDL2_RWops_32_t *orig; + sdl2_freerw custom_free; + } my32; + #endif } hidden; } SDL2_RWops_t; -#define SUPER() \ - GO(size, IFp) \ - GO(seek, IFpIi) \ - GO(read, iFppii) \ - GO(write, iFppii) \ - GO(close, iFp) +#ifdef BOX32 +#define SUPER() \ + if (box64_is32bits) { \ + GO(size, IFp_32) \ + GO(seek, IFpIi_32) \ + GO(read, iFppii_32) \ + GO(write, iFppii_32) \ + GO(close, iFp_32) \ + } else { \ + GO(size, IFp) \ + GO(seek, IFpIi) \ + GO(read, iFppii) \ + GO(write, iFppii) \ + GO(close, iFp) \ + } +#else +#define SUPER() \ + GO(size, IFp) \ + GO(seek, IFpIi) \ + GO(read, iFppii) \ + GO(write, iFppii) \ + GO(close, iFp) +#endif EXPORT int64_t my2_native_size(SDL2_RWops_t *context) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL2_RWops_to_64(context); + int64_t ret = context->hidden.my.orig->size(context->hidden.my.orig); + inplace_SDL2_RWops_to_32(context); + return ret; + } + #endif return context->hidden.my.orig->size(context->hidden.my.orig); } EXPORT int64_t my2_native_seek(SDL2_RWops_t *context, int64_t offset, int32_t whence) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL2_RWops_to_64(context); + int64_t ret = context->hidden.my.orig->seek(context->hidden.my.orig, offset, whence); + inplace_SDL2_RWops_to_32(context); + return ret; + } + #endif return context->hidden.my.orig->seek(context->hidden.my.orig, offset, whence); } -EXPORT int32_t my2_native_read(SDL2_RWops_t *context, void *ptr, int32_t size, int32_t maxnum) +EXPORT size_t my2_native_read(SDL2_RWops_t *context, void *ptr, size_t size, size_t maxnum) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL2_RWops_to_64(context); + size_t ret = context->hidden.my.orig->read(context->hidden.my.orig, ptr, size, maxnum); + inplace_SDL2_RWops_to_32(context); + return ret; + } + #endif return context->hidden.my.orig->read(context->hidden.my.orig, ptr, size, maxnum); } -EXPORT int32_t my2_native_write(SDL2_RWops_t *context, const void *ptr, int32_t size, int32_t num) +EXPORT size_t my2_native_write(SDL2_RWops_t *context, const void *ptr, size_t size, size_t num) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL2_RWops_to_64(context); + size_t ret = context->hidden.my.orig->write(context->hidden.my.orig, ptr, size, num); + inplace_SDL2_RWops_to_32(context); + return ret; + } + #endif return context->hidden.my.orig->write(context->hidden.my.orig, ptr, size, num); } EXPORT int32_t my2_native_close(SDL2_RWops_t *context) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL2_RWops_to_64(context); + } + #endif int32_t ret = context->hidden.my.orig->close(context->hidden.my.orig); context->hidden.my.custom_free(context); return ret; } EXPORT int64_t my2_emulated_size(SDL2_RWops_t *context) { + #ifdef BOX32 + if(box64_is32bits) { + if(GetNativeFnc(context->hidden.my32.orig->size) == my2_native_size) + return my2_native_size(context->hidden.my.orig); + uintptr_t f = context->hidden.my32.orig->size; + int64_t ret = (int64_t)RunFunctionFmt(f, "p", context->hidden.my32.orig); + return ret; + } + #endif return (int64_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->size, "p", context->hidden.my.orig); } EXPORT int64_t my2_emulated_seek(SDL2_RWops_t *context, int64_t offset, int32_t whence) { + #ifdef BOX32 + if(box64_is32bits) { + if(GetNativeFnc(context->hidden.my32.orig->seek) == my2_native_seek) + return my2_native_seek(context->hidden.my.orig, offset, whence); + uintptr_t f = context->hidden.my32.orig->seek; + int64_t ret = (int64_t)RunFunctionFmt(f, "pIi", context->hidden.my32.orig, offset, whence); + return ret; + } + #endif return (int64_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->seek, "pIi", context->hidden.my.orig, offset, whence); } -EXPORT int32_t my2_emulated_read(SDL2_RWops_t *context, void *ptr, int32_t size, int32_t maxnum) +EXPORT size_t my2_emulated_read(SDL2_RWops_t *context, void *ptr, size_t size, size_t maxnum) { - return (int32_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->read, "ppii", context->hidden.my.orig, ptr, size, maxnum); + #ifdef BOX32 + if(box64_is32bits) { + if(GetNativeFnc(context->hidden.my32.orig->read) == my2_native_read) + return my2_native_read(context->hidden.my.orig, ptr, size, maxnum); + uintptr_t f = context->hidden.my32.orig->read; + size_t ret = (size_t)RunFunctionFmt(f, "ppLL", context->hidden.my32.orig, ptr, size, maxnum); + return ret; + } + #endif + return (size_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->read, "ppLL", context->hidden.my.orig, ptr, size, maxnum); } -EXPORT int32_t my2_emulated_write(SDL2_RWops_t *context, const void *ptr, int32_t size, int32_t num) +EXPORT size_t my2_emulated_write(SDL2_RWops_t *context, const void *ptr, size_t size, size_t num) { - return (int32_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->write, "ppii", context->hidden.my.orig, ptr, size, num); + #ifdef BOX32 + if(box64_is32bits) { + if(GetNativeFnc(context->hidden.my32.orig->write) == my2_native_write) + return my2_native_write(context->hidden.my.orig, ptr, size, num); + uintptr_t f = context->hidden.my32.orig->write; + size_t ret = (size_t)RunFunctionFmt(f, "ppLL", context->hidden.my32.orig, ptr, size, num); + return ret; + } + #endif + return (size_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->write, "ppLL", context->hidden.my.orig, ptr, size, num); } EXPORT int32_t my2_emulated_close(SDL2_RWops_t *context) { - int ret = (int32_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->close, "p", context->hidden.my.orig); + int ret = 0; + #ifdef BOX32 + if(box64_is32bits) { + if(GetNativeFnc(context->hidden.my32.orig->close) == my2_native_close) + return my2_native_close(context->hidden.my.orig); + uintptr_t f = context->hidden.my32.orig->close; + ret = (size_t)RunFunctionFmt(f, "p", context->hidden.my32.orig); + } else + #endif + ret = (int32_t)RunFunctionFmt((uintptr_t)context->hidden.my.orig->close, "p", context->hidden.my.orig); context->hidden.my.custom_free(context); return ret; } @@ -213,16 +322,40 @@ int isRWops(SDL2_RWops_t* ops) return 0; return 1; } +#ifdef BOX32 +int isRWops32(my_SDL2_RWops_32_t* ops) +{ + if(!ops) + return 0; + #define GO(A, W) \ + if(!ops->A || (uintptr_t)ops->A < 0x1000) return 0; + + SUPER() + + #undef GO + // check if all then hidden content is just full of 0 + if(ops->hidden[0]==0 && ops->hidden[1]==0 && ops->hidden[2]==0) + return 0; + // check the type (not sure it's a good check here) + if (ops->type>5 && ops->type!=BOX64RW) + return 0; + return 1; +} +#endif int64_t RWNativeSeek2(SDL2_RWops_t *ops, int64_t offset, int32_t whence) { return ops->seek(ops, offset, whence); } -uint32_t RWNativeRead2(SDL2_RWops_t* ops, void* ptr, uint32_t size, uint32_t maxnum) +int64_t RWNativeSize2(SDL2_RWops_t *ops) +{ + return ops->size(ops); +} +size_t RWNativeRead2(SDL2_RWops_t* ops, void* ptr, size_t size, size_t maxnum) { return ops->read(ops, ptr, size, maxnum); } -int32_t RWNativeWrite2(SDL2_RWops_t *ops, const void *ptr, int32_t size, int32_t num) +size_t RWNativeWrite2(SDL2_RWops_t *ops, const void *ptr, size_t size, size_t num) { return ops->write(ops, ptr, size, num); } diff --git a/src/libtools/signal32.c b/src/libtools/signal32.c new file mode 100644 index 0000000000000000000000000000000000000000..7d92f91f1568a7ed2efc6510d14d5f497f652eb9 --- /dev/null +++ b/src/libtools/signal32.c @@ -0,0 +1,939 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef ANDROID +#include +#endif + +#include "box32context.h" +#include "debug.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "signals.h" +#include "box64stack.h" +#include "dynarec.h" +#include "callback.h" +#include "x64run.h" +#include "elfloader.h" +#include "threads.h" +#include "emu/x87emu_private.h" +#include "custommem.h" +#ifdef DYNAREC +#include "dynablock.h" +#include "../dynarec/dynablock_private.h" +#include "dynarec_native.h" +#endif + + +/* Definitions taken from the kernel headers. */ +enum +{ + I386_GS = 0, +# define I386_GS I386_GS + I386_FS, +# define I386_FS I386_FS + I386_ES, +# define I386_ES I386_ES + I386_DS, +# define I386_DS I386_DS + I386_EDI, +# define I386_EDI I386_EDI + I386_ESI, +# define I386_ESI I386_ESI + I386_EBP, +# define I386_EBP I386_EBP + I386_ESP, +# define I386_ESP I386_ESP + I386_EBX, +# define I386_EBX I386_EBX + I386_EDX, +# define I386_EDX I386_EDX + I386_ECX, +# define I386_ECX I386_ECX + I386_EAX, +# define I386_EAX I386_EAX + I386_TRAPNO, +# define I386_TRAPNO I386_TRAPNO + I386_ERR, +# define I386_ERR I386_ERR + I386_EIP, +# define I386_EIP I386_EIP + I386_CS, +# define I386_CS I386_CS + I386_EFL, +# define I386_EFL I386_EFL + I386_UESP, +# define I386_UESP I386_UESP + I386_SS +# define I386_SS I386_SS +}; + +typedef uint32_t i386_gregset_t[19]; +struct i386_fpreg +{ + uint16_t significand[4]; + uint16_t exponent; +}__attribute__((packed)); + +struct i386_fpxreg +{ + unsigned short significand[4]; + unsigned short exponent; + unsigned short padding[3]; +}__attribute__((packed)); + +struct i386_xmmreg +{ + uint32_t element[4]; +}__attribute__((packed)); + +struct i386_fpstate +{ + /* Regular FPU environment. */ + uint32_t cw; + uint32_t sw; + uint32_t tag; + uint32_t ipoff; + uint32_t cssel; + uint32_t dataoff; + uint32_t datasel; + struct i386_fpreg _st[8]; + uint32_t status_magic; + /* FXSR FPU environment. */ + uint32_t _fxsr_env[6]; + uint32_t mxcsr; + uint32_t reserved; + struct i386_fpxreg _fxsr_st[8]; + struct i386_xmmreg _xmm[8]; + uint32_t padding[56]; +}__attribute__((packed)); + +typedef struct i386_fpstate *i386_fpregset_t; + +static void save_fpreg(x64emu_t* emu, struct i386_fpstate* state) +{ + emu->sw.f.F87_TOP = emu->top&7; + state->sw = emu->sw.x16; + state->cw = emu->cw.x16; + // save SSE and MMX regs + fpu_fxsave32(emu, &state->_fxsr_env); +} +static void load_fpreg(x64emu_t* emu, struct i386_fpstate* state) +{ + // copy SSE and MMX regs + fpu_fxrstor32(emu, &state->_fxsr_env); + emu->cw.x16 = state->cw; + emu->sw.x16 = state->sw; + emu->top = emu->sw.f.F87_TOP&7; +} + +typedef struct + { + ptr_t ss_sp; + int ss_flags; + long_t ss_size; + } i386_stack_t; + +typedef struct x64_stack_s +{ + void *ss_sp; + int ss_flags; + size_t ss_size; +} x64_stack_t; + + +/* +another way to see the sigcontext +struct sigcontext +{ + unsigned short gs, __gsh; + unsigned short fs, __fsh; + unsigned short es, __esh; + unsigned short ds, __dsh; + unsigned long edi; + unsigned long esi; + unsigned long ebp; + unsigned long esp; + unsigned long ebx; + unsigned long edx; + unsigned long ecx; + unsigned long eax; + unsigned long trapno; + unsigned long err; + unsigned long eip; + unsigned short cs, __csh; + unsigned long eflags; + unsigned long esp_at_signal; + unsigned short ss, __ssh; + struct _fpstate * fpstate; + unsigned long oldmask; + unsigned long cr2; +}; +*/ +typedef struct + { + i386_gregset_t gregs; + ptr_t fpregs; //i386_fpregset_t + uint32_t oldmask; + uint32_t cr2; + } i386_mcontext_t; + +// /!\ signal sig_set is different than glibc __sig_set +#define _NSIG_WORDS (64 / 32) +typedef unsigned long i386_old_sigset_t; +typedef struct { + unsigned long sig[_NSIG_WORDS]; +} i386_sigset_t; + +struct i386_xsave_hdr_struct { + uint64_t xstate_bv; + uint64_t reserved1[2]; + uint64_t reserved2[5]; +}; + +struct i386_xstate { + /* + * Applications need to refer to fpstate through fpstate pointer + * in sigcontext. Not here directly. + */ + struct i386_fpstate fpstate; + struct i386_xsave_hdr_struct xsave_hdr; + /* new processor state extensions will go here */ +} __attribute__ ((aligned (64))); + +struct i386_xstate_cntxt { + ptr_t xstate; //struct i386_xstate *xstate; + uint32_t size; + uint32_t lmask; + uint32_t hmask; +}; + +typedef struct i386_ucontext_s +{ + uint32_t uc_flags; + ptr_t uc_link; //struct i386_ucontext_s *uc_link; + i386_stack_t uc_stack; + i386_mcontext_t uc_mcontext; + i386_sigset_t uc_sigmask; + /* Allow for uc_sigmask growth. Glibc uses a 1024-bit sigset_t. */ + int unused[32 - (sizeof (sigset_t) / sizeof (int))]; + //struct i386_xstate_cntxt uc_xstate; + struct i386_xstate xstate; +} i386_ucontext_t; + +typedef struct i386_sigframe_s { + ptr_t pretcode; // pointer to retcode + int sig; + i386_mcontext_t cpustate; + struct i386_xstate fpstate; + ptr_t extramask[64-1]; + char retcode[8]; +} i386_sigframe_t; + +struct kernel_sigaction { + void (*k_sa_handler) (int); + unsigned long sa_flags; + void (*sa_restorer) (void); + unsigned long sa_mask; + unsigned long sa_mask2; +}; +#ifdef DYNAREC +uintptr_t getX64Address(dynablock_t* db, uintptr_t arm_addr); +#endif + +x64_stack_t* sigstack_getstack(); +int my_sigaltstack(x64emu_t* emu, const x64_stack_t* ss, x64_stack_t* oss); +EXPORT int my32_sigaltstack(x64emu_t* emu, const i386_stack_t* ss, i386_stack_t* oss) +{ + x64_stack_t ss_ = {0}; + x64_stack_t oss_ = {0}; + if(ss) { + ss_.ss_flags = ss->ss_flags; + ss_.ss_sp = from_ptrv(ss->ss_sp); + ss_.ss_size = ss->ss_size; + } + int ret = my_sigaltstack(emu, ss?(&ss_):NULL, oss?(&oss_):NULL); + if(!ret && oss) { + oss->ss_flags = oss_.ss_flags; + oss->ss_sp = to_ptrv(oss_.ss_sp); + oss->ss_size = oss_.ss_size; + } + return ret; +} + + +uint32_t RunFunctionHandler32(int* exit, int dynarec, i386_ucontext_t* sigcontext, ptr_t fnc, int nargs, ...) +{ + if(fnc==0 || fnc==1) { + va_list va; + va_start (va, nargs); + int sig = va_arg(va, int); + va_end (va); + printf_log(LOG_NONE, "%04d|BOX32: Warning, calling Signal %d function handler %s\n", GetTID(), sig, fnc?"SIG_IGN":"SIG_DFL"); + if(fnc==0) { + printf_log(LOG_NONE, "Unhandled signal caught, aborting\n"); + abort(); + } + return 0; + } +#ifdef HAVE_TRACE + uintptr_t old_start = trace_start, old_end = trace_end; +#if 0 + trace_start = 0; trace_end = 1; // disabling trace, globably for now... +#endif +#endif +#ifndef USE_CUSTOM_MEM + // because a signal can interupt a malloc-like function + // Dynarec cannot be used in signal handling unless custom malloc is used + dynarec = 0; +#endif + + x64emu_t *emu = thread_get_emu(); + #ifdef DYNAREC + if(box64_dynarec_test) + emu->test.test = 0; + #endif + + /*SetFS(emu, default_fs);*/ + for (int i=0; i<6; ++i) + emu->segs_serial[i] = 0; + + int align = nargs&1; + + R_ESP -= nargs * sizeof(ptr_t); + + uint32_t *p = (uint32_t*)from_ptrv(R_ESP); + + va_list va; + va_start (va, nargs); + for (int i=0; iflags.quitonlongjmp; + emu->flags.quitonlongjmp = 2; + int old_cs = R_CS; + R_CS = 0x23; + + emu->eflags.x64 &= ~(1<flags.longjmp) + R_ESP+=nargs*sizeof(ptr_t); + + if(!emu->flags.longjmp && R_CS==0x23) + R_CS = old_cs; + + emu->flags.quitonlongjmp = oldquitonlongjmp; + + #ifdef DYNAREC + if(box64_dynarec_test) { + emu->test.test = 0; + emu->test.clean = 0; + } + #endif + + if(emu->flags.longjmp) { + // longjmp inside signal handler, lets grab all relevent value and do the actual longjmp in the signal handler + emu->flags.longjmp = 0; + if(sigcontext) { + sigcontext->uc_mcontext.gregs[I386_EAX] = R_EAX; + sigcontext->uc_mcontext.gregs[I386_ECX] = R_ECX; + sigcontext->uc_mcontext.gregs[I386_EDX] = R_EDX; + sigcontext->uc_mcontext.gregs[I386_EDI] = R_EDI; + sigcontext->uc_mcontext.gregs[I386_ESI] = R_ESI; + sigcontext->uc_mcontext.gregs[I386_EBP] = R_EBP; + sigcontext->uc_mcontext.gregs[I386_ESP] = R_ESP; + sigcontext->uc_mcontext.gregs[I386_EBX] = R_EBX; + sigcontext->uc_mcontext.gregs[I386_EIP] = R_EIP; + // flags + sigcontext->uc_mcontext.gregs[I386_EFL] = emu->eflags.x64; + // get segments + sigcontext->uc_mcontext.gregs[I386_CS] = R_CS; + sigcontext->uc_mcontext.gregs[I386_DS] = R_DS; + sigcontext->uc_mcontext.gregs[I386_ES] = R_ES; + sigcontext->uc_mcontext.gregs[I386_SS] = R_SS; + sigcontext->uc_mcontext.gregs[I386_FS] = R_FS; + sigcontext->uc_mcontext.gregs[I386_GS] = R_GS; + } else { + printf_log(LOG_NONE, "Warning, longjmp in signal but no sigcontext to change\n"); + } + } + if(exit) + *exit = emu->exit; + + uint32_t ret = R_EAX; + +#ifdef HAVE_TRACE + trace_start = old_start; trace_end = old_end; +#endif + + return ret; +} + +#define is_memprot_locked (1<<1) +#define is_dyndump_locked (1<<8) +void my_sigactionhandler_oldcode_32(int32_t sig, int simple, siginfo_t* info, void * ucntx, int* old_code, void* cur_db) +{ + int Locks = unlockMutex(); + int log_minimum = (box64_showsegv)?LOG_NONE:((sig==SIGSEGV && my_context->is_sigaction[sig])?LOG_DEBUG:LOG_INFO); + + printf_log(LOG_DEBUG, "Sigactionhanlder for signal #%d called (jump to %p/%s)\n", sig, (void*)my_context->signals[sig], GetNativeName((void*)my_context->signals[sig])); + + uintptr_t restorer = my_context->restorer[sig]; + // get that actual ESP first! + x64emu_t *emu = thread_get_emu(); + uintptr_t frame = R_RSP; +#if defined(DYNAREC) +#if defined(ARM64) + dynablock_t* db = (dynablock_t*)cur_db;//FindDynablockFromNativeAddress(pc); + ucontext_t *p = (ucontext_t *)ucntx; + void* pc = NULL; + if(p) { + pc = (void*)p->uc_mcontext.pc; + if(db) + frame = (uintptr_t)p->uc_mcontext.regs[10+_SP]; + } +#elif defined(LA64) + dynablock_t* db = (dynablock_t*)cur_db;//FindDynablockFromNativeAddress(pc); + ucontext_t *p = (ucontext_t *)ucntx; + void* pc = NULL; + if(p) { + pc = (void*)p->uc_mcontext.__pc; + if(db) + frame = (uintptr_t)p->uc_mcontext.__gregs[12+_SP]; + } +#elif defined(RV64) + dynablock_t* db = (dynablock_t*)cur_db;//FindDynablockFromNativeAddress(pc); + ucontext_t *p = (ucontext_t *)ucntx; + void* pc = NULL; + if(p) { + pc = (void*)p->uc_mcontext.__gregs[0]; + if(db) + frame = (uintptr_t)p->uc_mcontext.__gregs[16+_SP]; + } +#else +#error Unsupported architecture +#endif +#else + (void)ucntx; (void)cur_db; +#endif + // setup libc context stack frame, on caller stack + frame = frame&~15; + + // stack tracking + x64_stack_t *new_ss = my_context->onstack[sig]?sigstack_getstack():NULL; + int used_stack = 0; + if(new_ss) { + if(new_ss->ss_flags == SS_ONSTACK) { // already using it! + frame = ((uintptr_t)emu->regs[_SP].q[0] - 128) & ~0x0f; + } else { + frame = (uintptr_t)(((uintptr_t)new_ss->ss_sp + new_ss->ss_size - 16) & ~0x0f); + used_stack = 1; + new_ss->ss_flags = SS_ONSTACK; + } + } else { + frame -= 0x200; // redzone + } + + // TODO: do I need to really setup 2 stack frame? That doesn't seems right! + // setup stack frame + frame -= 512+64+16*16; + void* xstate = (void*)frame; + frame -= sizeof(siginfo_t); + siginfo_t* info2 = (siginfo_t*)frame; + memcpy(info2, info, sizeof(siginfo_t)); + // try to fill some sigcontext.... + frame -= sizeof(i386_ucontext_t); + i386_ucontext_t *sigcontext = (i386_ucontext_t*)frame; + // get general register + sigcontext->uc_mcontext.gregs[I386_EAX] = R_EAX; + sigcontext->uc_mcontext.gregs[I386_ECX] = R_ECX; + sigcontext->uc_mcontext.gregs[I386_EDX] = R_EDX; + sigcontext->uc_mcontext.gregs[I386_EDI] = R_EDI; + sigcontext->uc_mcontext.gregs[I386_ESI] = R_ESI; + sigcontext->uc_mcontext.gregs[I386_EBP] = R_EBP; + sigcontext->uc_mcontext.gregs[I386_ESP] = R_ESP; + sigcontext->uc_mcontext.gregs[I386_EBX] = R_EBX; + sigcontext->uc_mcontext.gregs[I386_EIP] = R_EIP;//emu->old_ip; // old_ip should be more accurate as the "current" IP, but it's not always up-to-date + // flags + sigcontext->uc_mcontext.gregs[I386_EFL] = emu->eflags.x64; + // get segments + sigcontext->uc_mcontext.gregs[I386_CS] = R_CS; + sigcontext->uc_mcontext.gregs[I386_DS] = R_DS; + sigcontext->uc_mcontext.gregs[I386_ES] = R_ES; + sigcontext->uc_mcontext.gregs[I386_SS] = R_SS; + sigcontext->uc_mcontext.gregs[I386_FS] = R_FS; + sigcontext->uc_mcontext.gregs[I386_GS] = R_GS; +#if defined(DYNAREC) +#if defined(ARM64) + if(db && p) { + sigcontext->uc_mcontext.gregs[I386_EAX] = p->uc_mcontext.regs[10]; + sigcontext->uc_mcontext.gregs[I386_ECX] = p->uc_mcontext.regs[11]; + sigcontext->uc_mcontext.gregs[I386_EDX] = p->uc_mcontext.regs[12]; + sigcontext->uc_mcontext.gregs[I386_EBX] = p->uc_mcontext.regs[13]; + sigcontext->uc_mcontext.gregs[I386_ESP] = p->uc_mcontext.regs[14]; + sigcontext->uc_mcontext.gregs[I386_EBP] = p->uc_mcontext.regs[15]; + sigcontext->uc_mcontext.gregs[I386_ESI] = p->uc_mcontext.regs[16]; + sigcontext->uc_mcontext.gregs[I386_EDI] = p->uc_mcontext.regs[17]; + sigcontext->uc_mcontext.gregs[I386_EIP] = getX64Address(db, (uintptr_t)pc); + } +#elif defined(LA64) + if(db && p) { + sigcontext->uc_mcontext.gregs[I386_EAX] = p->uc_mcontext.__gregs[12]; + sigcontext->uc_mcontext.gregs[I386_ECX] = p->uc_mcontext.__gregs[13]; + sigcontext->uc_mcontext.gregs[I386_EDX] = p->uc_mcontext.__gregs[14]; + sigcontext->uc_mcontext.gregs[I386_EBX] = p->uc_mcontext.__gregs[15]; + sigcontext->uc_mcontext.gregs[I386_ESP] = p->uc_mcontext.__gregs[16]; + sigcontext->uc_mcontext.gregs[I386_EBP] = p->uc_mcontext.__gregs[17]; + sigcontext->uc_mcontext.gregs[I386_ESI] = p->uc_mcontext.__gregs[18]; + sigcontext->uc_mcontext.gregs[I386_EDI] = p->uc_mcontext.__gregs[19]; + sigcontext->uc_mcontext.gregs[I386_EIP] = getX64Address(db, (uintptr_t)pc); + } +#elif defined(RV64) + if(db && p) { + sigcontext->uc_mcontext.gregs[I386_EAX] = p->uc_mcontext.__gregs[16]; + sigcontext->uc_mcontext.gregs[I386_ECX] = p->uc_mcontext.__gregs[17]; + sigcontext->uc_mcontext.gregs[I386_EDX] = p->uc_mcontext.__gregs[18]; + sigcontext->uc_mcontext.gregs[I386_EBX] = p->uc_mcontext.__gregs[19]; + sigcontext->uc_mcontext.gregs[I386_ESP] = p->uc_mcontext.__gregs[20]; + sigcontext->uc_mcontext.gregs[I386_EBP] = p->uc_mcontext.__gregs[21]; + sigcontext->uc_mcontext.gregs[I386_ESI] = p->uc_mcontext.__gregs[22]; + sigcontext->uc_mcontext.gregs[I386_EDI] = p->uc_mcontext.__gregs[23]; + sigcontext->uc_mcontext.gregs[I386_EIP] = getX64Address(db, (uintptr_t)pc); + } +#else +#error Unsupported architecture +#endif +#endif + // get FloatPoint status + sigcontext->uc_mcontext.fpregs = to_ptrv(xstate);//(struct x64_libc_fpstate*)&sigcontext->xstate; + fpu_xsave_mask(emu, xstate, 1, 0b111); + memcpy(&sigcontext->xstate, xstate, sizeof(sigcontext->xstate)); + ((struct i386_fpstate*)xstate)->status_magic = 0x46505853; // magic number to signal an XSTATE type of fpregs + // get signal mask + + if(new_ss) { + sigcontext->uc_stack.ss_sp = to_ptrv(new_ss->ss_sp); + sigcontext->uc_stack.ss_size = new_ss->ss_size; + sigcontext->uc_stack.ss_flags = new_ss->ss_flags; + } else + sigcontext->uc_stack.ss_flags = SS_DISABLE; + // Try to guess some X64_TRAPNO + /* + TRAP_x86_DIVIDE = 0, // Division by zero exception + TRAP_x86_TRCTRAP = 1, // Single-step exception + TRAP_x86_NMI = 2, // NMI interrupt + TRAP_x86_BPTFLT = 3, // Breakpoint exception + TRAP_x86_OFLOW = 4, // Overflow exception + TRAP_x86_BOUND = 5, // Bound range exception + TRAP_x86_PRIVINFLT = 6, // Invalid opcode exception + TRAP_x86_DNA = 7, // Device not available exception + TRAP_x86_DOUBLEFLT = 8, // Double fault exception + TRAP_x86_FPOPFLT = 9, // Coprocessor segment overrun + TRAP_x86_TSSFLT = 10, // Invalid TSS exception + TRAP_x86_SEGNPFLT = 11, // Segment not present exception + TRAP_x86_STKFLT = 12, // Stack fault + TRAP_x86_PROTFLT = 13, // General protection fault + TRAP_x86_PAGEFLT = 14, // Page fault + TRAP_x86_ARITHTRAP = 16, // Floating point exception + TRAP_x86_ALIGNFLT = 17, // Alignment check exception + TRAP_x86_MCHK = 18, // Machine check exception + TRAP_x86_CACHEFLT = 19 // SIMD exception (via SIGFPE) if CPU is SSE capable otherwise Cache flush exception (via SIGSEV) + */ + uint32_t prot = getProtection((uintptr_t)info->si_addr); + uint32_t real_prot = 0; + if(prot&PROT_READ) real_prot|=PROT_READ; + if(prot&PROT_WRITE) real_prot|=PROT_WRITE; + if(prot&PROT_EXEC) real_prot|=PROT_WRITE; + if(prot&PROT_DYNAREC) real_prot|=PROT_WRITE; + sigcontext->uc_mcontext.gregs[I386_ERR] = 0; + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 0; + if(sig==SIGBUS) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 17; + else if(sig==SIGSEGV) { + if((uintptr_t)info->si_addr == sigcontext->uc_mcontext.gregs[I386_EIP]) { + if(info->si_errno==0xbad0) { + //bad opcode + sigcontext->uc_mcontext.gregs[I386_ERR] = 0; + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 13; + info2->si_errno = 0; + } else if (info->si_errno==0xecec) { + // no excute bit on segment + sigcontext->uc_mcontext.gregs[I386_ERR] = (real_prot&PROT_READ)?16:1; // EXECUTE_FAULT & READ_FAULT + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 14; + info2->si_errno = 0; + }else { + sigcontext->uc_mcontext.gregs[I386_ERR] = (real_prot&PROT_READ)?16:1;//(info->si_errno==0x1234)?0:((info->si_errno==0xdead)?(0x2|(info->si_code<<3)):0x0010); // execution flag issue (probably), unless it's a #GP(0) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = (getMmapped((uintptr_t)info->si_addr))?14:13; + //sigcontext->uc_mcontext.gregs[I386_TRAPNO] = ((info->si_code==SEGV_ACCERR) || (info->si_errno==0x1234) || (info->si_errno==0xdead) || ((uintptr_t)info->si_addr==0))?13:14; + } + } else if(info->si_code==SEGV_ACCERR && !(prot&PROT_WRITE)) { + sigcontext->uc_mcontext.gregs[I386_ERR] = (real_prot&PROT_READ)?2:1;//0x0002; // write flag issue + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 14; + } else { + if((info->si_code!=SEGV_ACCERR) && labs((intptr_t)info->si_addr-(intptr_t)sigcontext->uc_mcontext.gregs[I386_ESP])<16) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 12; // stack overflow probably + else + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = (info->si_code == SEGV_ACCERR)?14:13; + //I386_ERR seems to be INT:8 CODE:8. So for write access segfault it's 0x0002 For a read it's 0x0004 (and 8 for exec). For an int 2d it could be 0x2D01 for example + sigcontext->uc_mcontext.gregs[I386_ERR] = 0x0001; // read error? + } + if(info->si_code == SEGV_ACCERR && old_code) + *old_code = -1; + if(info->si_errno==0x1234) { + info2->si_errno = 0; + } else if(info->si_errno==0xdead) { + // INT x + uint8_t int_n = info->si_code; + info2->si_errno = 0; + info2->si_code = info->si_code; + info2->si_addr = NULL; + // some special cases... + if(int_n==3) { + info2->si_signo = SIGTRAP; + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 3; + sigcontext->uc_mcontext.gregs[I386_ERR] = 0; + } else if(int_n==0x04) { + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 4; + sigcontext->uc_mcontext.gregs[I386_ERR] = 0; + } else if (int_n==0x29 || int_n==0x2c || int_n==0x2d) { + sigcontext->uc_mcontext.gregs[I386_ERR] = 0x02|(int_n<<3); + } else { + sigcontext->uc_mcontext.gregs[I386_ERR] = 0x0a|(int_n<<3); + } + } else if(info->si_errno==0xcafe) { + info2->si_errno = 0; + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 0; + info2->si_signo = SIGFPE; + } + } else if(sig==SIGFPE) { + if (info->si_code == FPE_INTOVF) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 4; + else + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 19; + } else if(sig==SIGILL) + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = 6; + else if(sig==SIGTRAP) { + info2->si_code = 128; + sigcontext->uc_mcontext.gregs[I386_TRAPNO] = info->si_code; + sigcontext->uc_mcontext.gregs[I386_ERR] = 0; + } + //TODO: SIGABRT generate what? + printf_log((sig==10)?LOG_DEBUG:log_minimum, "Signal %d: si_addr=%p, TRAPNO=%d, ERR=%d, RIP=%p\n", sig, (void*)info2->si_addr, sigcontext->uc_mcontext.gregs[I386_TRAPNO], sigcontext->uc_mcontext.gregs[I386_ERR],from_ptrv(sigcontext->uc_mcontext.gregs[I386_EIP])); + // call the signal handler + i386_ucontext_t sigcontext_copy = *sigcontext; + // save old value from emu + #define GO(A) uint32_t old_##A = R_##A + GO(EAX); + GO(EDI); + GO(ESI); + GO(EDX); + GO(ECX); + GO(EBP); + #undef GO + // set stack pointer + R_ESP = frame; + // set frame pointer + R_EBP = sigcontext->uc_mcontext.gregs[I386_EBP]; + + int exits = 0; + int ret; + int dynarec = 0; + #ifdef DYNAREC + if(sig!=SIGSEGV && !(Locks&is_dyndump_locked) && !(Locks&is_memprot_locked)) + dynarec = 1; + #endif + ret = RunFunctionHandler32(&exits, dynarec, sigcontext, my_context->signals[info2->si_signo], 3, info2->si_signo, info2, sigcontext); + // restore old value from emu + if(used_stack) // release stack + new_ss->ss_flags = 0; + #define GO(A) R_##A = old_##A + GO(EAX); + GO(EDI); + GO(ESI); + GO(EDX); + GO(ECX); + GO(EBP); + #undef GO + + if(memcmp(sigcontext, &sigcontext_copy, sizeof(i386_ucontext_t))) { + if(emu->jmpbuf) { + #define GO(R) emu->regs[_##R].q[0]=sigcontext->uc_mcontext.gregs[I386_E##R] + GO(AX); + GO(CX); + GO(DX); + GO(DI); + GO(SI); + GO(BP); + GO(SP); + GO(BX); + #undef GO + emu->ip.q[0]=sigcontext->uc_mcontext.gregs[I386_EIP]; + // flags + emu->eflags.x64=sigcontext->uc_mcontext.gregs[I386_EFL]; + // get segments + #define GO(S) if(emu->segs[_##S]!=sigcontext->uc_mcontext.gregs[I386_##S]) emu->segs[_##S]=sigcontext->uc_mcontext.gregs[I386_##S] + GO(CS); + GO(DS); + GO(ES); + GO(SS); + GO(GS); + GO(FS); + #undef GO + for(int i=0; i<6; ++i) + emu->segs_serial[i] = 0; + printf_log((sig==10)?LOG_DEBUG:log_minimum, "Context has been changed in Sigactionhanlder, doing siglongjmp to resume emu at %p, RSP=%p\n", (void*)R_RIP, (void*)R_RSP); + if(old_code) + *old_code = -1; // re-init the value to allow another segfault at the same place + //relockMutex(Locks); // do not relock mutex, because of the siglongjmp, whatever was running is canceled + #ifdef DYNAREC + if(Locks & is_dyndump_locked) + CancelBlock64(1); + #endif + #ifdef RV64 + emu->xSPSave = emu->old_savedsp; + #endif + #ifdef ANDROID + siglongjmp(*emu->jmpbuf, 1); + #else + siglongjmp(emu->jmpbuf, 1); + #endif + } + printf_log(LOG_INFO, "Warning, context has been changed in Sigactionhanlder%s\n", (sigcontext->uc_mcontext.gregs[I386_EIP]!=sigcontext_copy.uc_mcontext.gregs[I386_EIP])?" (EIP changed)":""); + } + // restore regs... + #define GO(R) R_##R=sigcontext->uc_mcontext.gregs[I386_##R] + GO(EAX); + GO(ECX); + GO(EDX); + GO(EDI); + GO(ESI); + GO(EBP); + GO(ESP); + GO(EBX); + #undef GO + emu->eflags.x64=sigcontext->uc_mcontext.gregs[I386_EFL]; + #define GO(R) R_##R=sigcontext->uc_mcontext.gregs[I386_##R] + GO(CS); + GO(DS); + GO(ES); + GO(SS); + GO(GS); + GO(FS); + #undef GO + + printf_log(LOG_DEBUG, "Sigactionhanlder main function returned (exit=%d, restorer=%p)\n", exits, (void*)restorer); + if(exits) { + //relockMutex(Locks); // the thread will exit, so no relock there + #ifdef DYNAREC + if(Locks & is_dyndump_locked) + CancelBlock64(1); + #endif + exit(ret); + } + if(restorer) + RunFunctionHandler32(&exits, 0, NULL, restorer, 0); + relockMutex(Locks); +} + +void my32_sigactionhandler(int32_t sig, siginfo_t* info, void * ucntx) +{ + #ifdef DYNAREC + ucontext_t *p = (ucontext_t *)ucntx; + #ifdef ARM64 + void * pc = (void*)p->uc_mcontext.pc; + #elif defined(LA64) + void * pc = (void*)p->uc_mcontext.__pc; + #elif defined(RV64) + void * pc = (void*)p->uc_mcontext.__gregs[0]; + #else + #error Unsupported architecture + #endif + dynablock_t* db = FindDynablockFromNativeAddress(pc); + #else + void* db = NULL; + #endif + + my_sigactionhandler_oldcode_32(sig, 0, info, ucntx, NULL, db); +} + + +EXPORT int my32_sigaction(x64emu_t* emu, int signum, const i386_sigaction_t *act, i386_sigaction_t *oldact) +{ + printf_log(LOG_DEBUG, "Sigaction(signum=%d, act=%p(f=%p, flags=0x%x), old=%p)\n", signum, act, act?from_ptrv(act->_u._sa_handler):NULL, act?act->sa_flags:0, oldact); + if(signum<0 || signum>MAX_SIGNAL) { + errno = EINVAL; + return -1; + } + + if(signum==SIGSEGV && emu->context->no_sigsegv) + return 0; + + if(signum==SIGILL && emu->context->no_sigill) + return 0; + struct sigaction newact = {0}; + struct sigaction old = {0}; + uintptr_t old_handler = my_context->signals[signum]; + if(act) { + newact.sa_mask = act->sa_mask; + newact.sa_flags = act->sa_flags&~0x04000000; // No sa_restorer... + if(act->sa_flags&0x04) { + my_context->signals[signum] = (uintptr_t)act->_u._sa_sigaction; + my_context->is_sigaction[signum] = 1; + if(act->_u._sa_handler!=0 && act->_u._sa_handler!=(ptr_t)1) { + newact.sa_sigaction = my32_sigactionhandler; + } else + newact.sa_sigaction = from_ptrv(act->_u._sa_sigaction); + } else { + my_context->signals[signum] = (uintptr_t)act->_u._sa_handler; + my_context->is_sigaction[signum] = 0; + if(act->_u._sa_handler!=0 && act->_u._sa_handler!=(ptr_t)1) { + newact.sa_flags|=0x04; + newact.sa_sigaction = my32_sigactionhandler; + } else + newact.sa_handler = from_ptrv(act->_u._sa_handler); + } + my_context->restorer[signum] = (act->sa_flags&0x04000000)?(uintptr_t)act->sa_restorer:0; + my_context->onstack[signum] = (act->sa_flags&SA_ONSTACK)?1:0; + } + int ret = 0; + if(signum!=SIGSEGV && signum!=SIGBUS && signum!=SIGILL && signum!=SIGABRT) + ret = sigaction(signum, act?&newact:NULL, oldact?&old:NULL); + if(oldact) { + oldact->sa_flags = old.sa_flags; + oldact->sa_mask = old.sa_mask; + if(old.sa_flags & 0x04) + oldact->_u._sa_sigaction = to_ptrv(old.sa_sigaction); //TODO should wrap... + else + oldact->_u._sa_handler = to_ptrv(old.sa_handler); //TODO should wrap... + if(oldact->_u._sa_sigaction == to_ptrv(my32_sigactionhandler) && old_handler) + oldact->_u._sa_sigaction = to_ptr(old_handler); + oldact->sa_restorer = 0; // no handling for now... + } + return ret; +} +EXPORT int my32___sigaction(x64emu_t* emu, int signum, const i386_sigaction_t *act, i386_sigaction_t *oldact) +__attribute__((alias("my32_sigaction"))); + +EXPORT int my32_getcontext(x64emu_t* emu, void* ucp) +{ +// printf_log(LOG_NONE, "Warning: call to partially implemented getcontext\n"); + i386_ucontext_t *u = (i386_ucontext_t*)ucp; + // stack traking + u->uc_stack.ss_sp = 0; + u->uc_stack.ss_size = 0; // this need to filled + // get general register + u->uc_mcontext.gregs[I386_EAX] = R_EAX; + u->uc_mcontext.gregs[I386_ECX] = R_ECX; + u->uc_mcontext.gregs[I386_EDX] = R_EDX; + u->uc_mcontext.gregs[I386_EDI] = R_EDI; + u->uc_mcontext.gregs[I386_ESI] = R_ESI; + u->uc_mcontext.gregs[I386_EBP] = R_EBP; + u->uc_mcontext.gregs[I386_EIP] = *(uint32_t*)from_ptrv(R_ESP); + u->uc_mcontext.gregs[I386_ESP] = R_ESP+4; + u->uc_mcontext.gregs[I386_EBX] = R_EBX; + // get segments + u->uc_mcontext.gregs[I386_GS] = R_GS; + u->uc_mcontext.gregs[I386_FS] = R_FS; + u->uc_mcontext.gregs[I386_ES] = R_ES; + u->uc_mcontext.gregs[I386_DS] = R_DS; + u->uc_mcontext.gregs[I386_CS] = R_CS; + u->uc_mcontext.gregs[I386_SS] = R_SS; + // get FloatPoint status + u->uc_mcontext.fpregs = to_ptrv(ucp + 236); // magic offset of fpregs in an actual i386 u_context + fpu_savenv(emu, from_ptrv(u->uc_mcontext.fpregs), 1); // it seems getcontext only save fpu env, not fpu regs + // get signal mask + sigprocmask(SIG_SETMASK, NULL, (sigset_t*)&u->uc_sigmask); + // ensure uc_link is properly initialized + u->uc_link = to_ptrv(emu->uc_link); + + return 0; +} + +EXPORT int my32_setcontext(x64emu_t* emu, void* ucp) +{ +// printf_log(LOG_NONE, "Warning: call to partially implemented setcontext\n"); + i386_ucontext_t *u = (i386_ucontext_t*)ucp; + // stack tracking + emu->init_stack = from_ptrv(u->uc_stack.ss_sp); + emu->size_stack = from_ulong(u->uc_stack.ss_size); + // set general register + R_EAX = u->uc_mcontext.gregs[I386_EAX]; + R_ECX = u->uc_mcontext.gregs[I386_ECX]; + R_EDX = u->uc_mcontext.gregs[I386_EDX]; + R_EDI = u->uc_mcontext.gregs[I386_EDI]; + R_ESI = u->uc_mcontext.gregs[I386_ESI]; + R_EBP = u->uc_mcontext.gregs[I386_EBP]; + R_EIP = u->uc_mcontext.gregs[I386_EIP]; + R_ESP = u->uc_mcontext.gregs[I386_ESP]; + R_EBX = u->uc_mcontext.gregs[I386_EBX]; + // get segments + R_GS = u->uc_mcontext.gregs[I386_GS]; + R_FS = u->uc_mcontext.gregs[I386_FS]; + R_ES = u->uc_mcontext.gregs[I386_ES]; + R_DS = u->uc_mcontext.gregs[I386_DS]; + R_CS = u->uc_mcontext.gregs[I386_CS]; + R_SS = u->uc_mcontext.gregs[I386_SS]; + // set FloatPoint status + fpu_loadenv(emu, from_ptrv(u->uc_mcontext.fpregs), 1); + // set signal mask + sigprocmask(SIG_SETMASK, (sigset_t*)&u->uc_sigmask, NULL); + // set uc_link + emu->uc_link = from_ptrv(u->uc_link); + errno = 0; + return R_EAX; +} + +EXPORT void my32_makecontext(x64emu_t* emu, void* ucp, void* fnc, int32_t argc, int32_t* argv) +{ +// printf_log(LOG_NONE, "Warning: call to unimplemented makecontext\n"); + i386_ucontext_t *u = (i386_ucontext_t*)ucp; + // setup stack + u->uc_mcontext.gregs[I386_ESP] = to_ptr(u->uc_stack.ss_sp + u->uc_stack.ss_size - 4); + // setup the function + u->uc_mcontext.gregs[I386_EIP] = to_ptrv(fnc); + // setup args + uint32_t* esp = (uint32_t*)from_ptr(u->uc_mcontext.gregs[I386_ESP]); + for (int i=0; iexit_bridge); + u->uc_mcontext.gregs[I386_ESP] = (uintptr_t)esp; +} + +EXPORT int my32_swapcontext(x64emu_t* emu, void* ucp1, void* ucp2) +{ +// printf_log(LOG_NONE, "Warning: call to unimplemented swapcontext\n"); + // grab current context in ucp1 + my32_getcontext(emu, ucp1); + // activate ucp2 + my32_setcontext(emu, ucp2); + return 0; +} diff --git a/src/libtools/signals.c b/src/libtools/signals.c index e58081c15cf270cef32e12a799cd042885203de6..329c5507f266dc01392e91ee99d9835ede5d83c0 100644 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -269,6 +269,10 @@ static void sigstack_key_alloc() { pthread_key_create(&sigstack_key, sigstack_destroy); } +x64_stack_t* sigstack_getstack() { + return (x64_stack_t*)pthread_getspecific(sigstack_key); +} + // this allow handling "safe" function that just abort if accessing a bad address static __thread JUMPBUFF signal_jmpbuf; #ifdef ANDROID @@ -282,7 +286,7 @@ static __thread int signal_jmpbuf_active = 0; //1<<1 is mutex_prot, 1<<8 is mutex_dyndump #define is_memprot_locked (1<<1) #define is_dyndump_locked (1<<8) -uint64_t RunFunctionHandler(int* exit, int dynarec, x64_ucontext_t* sigcontext, uintptr_t fnc, int nargs, ...) +uint64_t RunFunctionHandler(x64emu_t* emu, int* exit, int dynarec, x64_ucontext_t* sigcontext, uintptr_t fnc, int nargs, ...) { if(fnc==0 || fnc==1) { va_list va; @@ -307,8 +311,8 @@ uint64_t RunFunctionHandler(int* exit, int dynarec, x64_ucontext_t* sigcontext, // Dynarec cannot be used in signal handling unless custom malloc is used dynarec = 0; #endif - - x64emu_t *emu = thread_get_emu(); + if(!emu) + emu = thread_get_emu(); #ifdef DYNAREC if(box64_dynarec_test) emu->test.test = 0; @@ -478,13 +482,10 @@ uintptr_t getX64Address(dynablock_t* db, uintptr_t arm_addr) ++i; } while((db->instsize[i-1].x64==15) || (db->instsize[i-1].nat==15)); // if the opcode is a NOP on ARM side (so armsz==0), it cannot be an address to find - if(armsz) { - if((arm_addr>=armaddr) && (arm_addr<(armaddr+armsz))) - return x64addr; - armaddr+=armsz; - x64addr+=x64sz; - } else - x64addr+=x64sz; + if((arm_addr>=armaddr) && (arm_addr<(armaddr+armsz))) + return x64addr; + armaddr+=armsz; + x64addr+=x64sz; } while(db->instsize[i].x64 || db->instsize[i].nat); return x64addr; } @@ -923,15 +924,26 @@ int sigbus_specialcases(siginfo_t* info, void * ucntx, void* pc, void* _fpsimd) return 0; } -void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void * ucntx, int* old_code, void* cur_db) +#ifdef BOX32 +void my_sigactionhandler_oldcode_32(int32_t sig, int simple, siginfo_t* info, void * ucntx, int* old_code, void* cur_db); +#endif +void my_sigactionhandler_oldcode(x64emu_t* emu, int32_t sig, int simple, siginfo_t* info, void * ucntx, int* old_code, void* cur_db) { + #ifdef BOX32 + if(box64_is32bits) { + my_sigactionhandler_oldcode_32(sig, simple, info, ucntx, old_code, cur_db); + return; + } + #endif int Locks = unlockMutex(); + int log_minimum = (box64_showsegv)?LOG_NONE:LOG_DEBUG; printf_log(LOG_DEBUG, "Sigactionhanlder for signal #%d called (jump to %p/%s)\n", sig, (void*)my_context->signals[sig], GetNativeName((void*)my_context->signals[sig])); uintptr_t restorer = my_context->restorer[sig]; // get that actual ESP first! - x64emu_t *emu = thread_get_emu(); + if(!emu) + emu = thread_get_emu(); uintptr_t frame = R_RSP; #if defined(DYNAREC) #if defined(ARM64) @@ -1101,6 +1113,7 @@ void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void fpu_xsave_mask(emu, xstate, 0, 0b111); memcpy(&sigcontext->xstate, xstate, sizeof(sigcontext->xstate)); ((struct x64_fpstate*)xstate)->res[12] = 0x46505853; // magic number to signal an XSTATE type of fpregs + ((struct x64_fpstate*)xstate)->res[13] = 0; // offset to xstate after this? // get signal mask if(new_ss) { @@ -1132,22 +1145,42 @@ void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void TRAP_x86_CACHEFLT = 19 // SIMD exception (via SIGFPE) if CPU is SSE capable otherwise Cache flush exception (via SIGSEV) */ uint32_t prot = getProtection((uintptr_t)info->si_addr); + uint32_t real_prot = 0; + if(prot&PROT_READ) real_prot|=PROT_READ; + if(prot&PROT_WRITE) real_prot|=PROT_WRITE; + if(prot&PROT_EXEC) real_prot|=PROT_WRITE; + if(prot&PROT_DYNAREC) real_prot|=PROT_WRITE; + sigcontext->uc_mcontext.gregs[X64_ERR] = 0; + sigcontext->uc_mcontext.gregs[X64_TRAPNO] = 0; if(sig==SIGBUS) sigcontext->uc_mcontext.gregs[X64_TRAPNO] = 17; else if(sig==SIGSEGV) { if((uintptr_t)info->si_addr == sigcontext->uc_mcontext.gregs[X64_RIP]) { - sigcontext->uc_mcontext.gregs[X64_ERR] = (info->si_errno==0x1234)?0:((info->si_errno==0xdead)?(0x2|(info->si_code<<3)):0x0010); // execution flag issue (probably), unless it's a #GP(0) - sigcontext->uc_mcontext.gregs[X64_TRAPNO] = ((info->si_code==SEGV_ACCERR) || (info->si_errno==0x1234) || (info->si_errno==0xdead) || ((uintptr_t)info->si_addr==0))?13:14; + if(info->si_errno==0xbad0) { + //bad opcode + sigcontext->uc_mcontext.gregs[X64_ERR] = 0; + sigcontext->uc_mcontext.gregs[X64_TRAPNO] = 13; + info2->si_errno = 0; + } else if (info->si_errno==0xecec) { + // no excute bit on segment + sigcontext->uc_mcontext.gregs[X64_ERR] = (real_prot&PROT_READ)?16:1; // EXECUTE_FAULT & READ_FAULT + sigcontext->uc_mcontext.gregs[X64_TRAPNO] = (getMmapped((uintptr_t)info->si_addr))?14:13; + info2->si_errno = 0; + }else { + sigcontext->uc_mcontext.gregs[X64_ERR] = (real_prot&PROT_READ)?16:1;//(info->si_errno==0x1234)?0:((info->si_errno==0xdead)?(0x2|(info->si_code<<3)):0x0010); // execution flag issue (probably), unless it's a #GP(0) + sigcontext->uc_mcontext.gregs[X64_TRAPNO] = (getMmapped((uintptr_t)info->si_addr))?14:13; + //sigcontext->uc_mcontext.gregs[X64_TRAPNO] = ((info->si_code==SEGV_ACCERR) || (info->si_errno==0x1234) || (info->si_errno==0xdead) || ((uintptr_t)info->si_addr==0))?13:14; + } } else if(info->si_code==SEGV_ACCERR && !(prot&PROT_WRITE)) { - sigcontext->uc_mcontext.gregs[X64_ERR] = 0x0002; // write flag issue + sigcontext->uc_mcontext.gregs[X64_ERR] = (real_prot&PROT_READ)?2:1;//0x0002; // write flag issue sigcontext->uc_mcontext.gregs[X64_TRAPNO] = 14; } else { if((info->si_code!=SEGV_ACCERR) && labs((intptr_t)info->si_addr-(intptr_t)sigcontext->uc_mcontext.gregs[X64_RSP])<16) sigcontext->uc_mcontext.gregs[X64_TRAPNO] = 12; // stack overflow probably else - sigcontext->uc_mcontext.gregs[X64_TRAPNO] = (info->si_code == SEGV_ACCERR)?13:14; + sigcontext->uc_mcontext.gregs[X64_TRAPNO] = (info->si_code == SEGV_ACCERR)?14:13; //X64_ERR seems to be INT:8 CODE:8. So for write access segfault it's 0x0002 For a read it's 0x0004 (and 8 for exec). For an int 2d it could be 0x2D01 for example - sigcontext->uc_mcontext.gregs[X64_ERR] = 0x0004; // read error? there is no execute control in box64 anyway + sigcontext->uc_mcontext.gregs[X64_ERR] = 0x0001; // read error? } if(info->si_code == SEGV_ACCERR && old_code) *old_code = -1; @@ -1155,7 +1188,7 @@ void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void info2->si_errno = 0; } else if(info->si_errno==0xdead) { // INT x - uint8_t int_n = info2->si_code; + uint8_t int_n = info->si_code; info2->si_errno = 0; info2->si_code = info->si_code; info2->si_addr = NULL; @@ -1190,7 +1223,7 @@ void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void sigcontext->uc_mcontext.gregs[X64_ERR] = 0; } //TODO: SIGABRT generate what? - printf_log(LOG_DEBUG, "Signal %d: si_addr=%p, TRAPNO=%d, ERR=%d, RIP=%p\n", sig, (void*)info2->si_addr, sigcontext->uc_mcontext.gregs[X64_TRAPNO], sigcontext->uc_mcontext.gregs[X64_ERR],sigcontext->uc_mcontext.gregs[X64_RIP]); + printf_log((sig==10)?LOG_DEBUG:log_minimum, "Signal %d: si_addr=%p, TRAPNO=%d, ERR=%d, RIP=%p\n", sig, (void*)info2->si_addr, sigcontext->uc_mcontext.gregs[X64_TRAPNO], sigcontext->uc_mcontext.gregs[X64_ERR],sigcontext->uc_mcontext.gregs[X64_RIP]); // call the signal handler x64_ucontext_t sigcontext_copy = *sigcontext; // save old value from emu @@ -1216,7 +1249,7 @@ void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void if(sig!=SIGSEGV && !(Locks&is_dyndump_locked) && !(Locks&is_memprot_locked)) dynarec = 1; #endif - ret = RunFunctionHandler(&exits, dynarec, sigcontext, my_context->signals[info2->si_signo], 3, info2->si_signo, info2, sigcontext); + ret = RunFunctionHandler(emu, &exits, dynarec, sigcontext, my_context->signals[info2->si_signo], 3, info2->si_signo, info2, sigcontext); // restore old value from emu if(used_stack) // release stack new_ss->ss_flags = 0; @@ -1268,7 +1301,7 @@ void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void #undef GO for(int i=0; i<6; ++i) emu->segs_serial[i] = 0; - printf_log(LOG_DEBUG, "Context has been changed in Sigactionhanlder, doing siglongjmp to resume emu at %p, RSP=%p\n", (void*)R_RIP, (void*)R_RSP); + printf_log((sig==10)?LOG_DEBUG:log_minimum, "Context has been changed in Sigactionhanlder, doing siglongjmp to resume emu at %p, RSP=%p\n", (void*)R_RIP, (void*)R_RSP); if(old_code) *old_code = -1; // re-init the value to allow another segfault at the same place //relockMutex(Locks); // do not relock mutex, because of the siglongjmp, whatever was running is canceled @@ -1328,7 +1361,7 @@ void my_sigactionhandler_oldcode(int32_t sig, int simple, siginfo_t* info, void exit(ret); } if(restorer) - RunFunctionHandler(&exits, 0, NULL, restorer, 0); + RunFunctionHandler(emu, &exits, 0, NULL, restorer, 0); relockMutex(Locks); } @@ -1443,8 +1476,10 @@ void my_box64signalhandler(int32_t sig, siginfo_t* info, void * ucntx) static int repeated_count = 0; if(repeated_page == ((uintptr_t)addr&~(box64_pagesize-1))) { ++repeated_count; // Access eoor multiple time on same page, disable dynarec on this page a few time... - dynarec_log(LOG_DEBUG, "Detecting a Hotpage at %p (%d)\n", (void*)repeated_page, repeated_count); - SetHotPage(repeated_page); + if(repeated_count>1) { + dynarec_log(LOG_DEBUG, "Detecting a Hotpage at %p (%d)\n", (void*)repeated_page, repeated_count); + SetHotPage(repeated_page); + } } else { repeated_page = (uintptr_t)addr&~(box64_pagesize-1); repeated_count = 0; @@ -1834,8 +1869,8 @@ dynarec_log(/*LOG_DEBUG*/LOG_INFO, "Repeated SIGSEGV with Access error on %p for } if(sig==SIGILL) { printf_log(log_minimum, " opcode=%02X %02X %02X %02X %02X %02X %02X %02X (%02X %02X %02X %02X %02X)\n", ((uint8_t*)pc)[0], ((uint8_t*)pc)[1], ((uint8_t*)pc)[2], ((uint8_t*)pc)[3], ((uint8_t*)pc)[4], ((uint8_t*)pc)[5], ((uint8_t*)pc)[6], ((uint8_t*)pc)[7], ((uint8_t*)x64pc)[0], ((uint8_t*)x64pc)[1], ((uint8_t*)x64pc)[2], ((uint8_t*)x64pc)[3], ((uint8_t*)x64pc)[4]); - } else if(sig==SIGBUS) { - printf_log(log_minimum, " x86opcode=%02X %02X %02X %02X %02X %02X %02X %02X (opcode=%08x)\n", ((uint8_t*)x64pc)[0], ((uint8_t*)x64pc)[1], ((uint8_t*)x64pc)[2], ((uint8_t*)x64pc)[3], ((uint8_t*)x64pc)[4], ((uint8_t*)x64pc)[5], ((uint8_t*)x64pc)[6], ((uint8_t*)x64pc)[7], *(uint32_t*)pc); + } else if(sig==SIGBUS || (sig==SIGSEGV && (x64pc!=(uintptr_t)addr) && (pc!=addr))) { + printf_log(log_minimum, " %sopcode=%02X %02X %02X %02X %02X %02X %02X %02X (opcode=%08x)\n", (emu->segs[_CS]==0x23)?"x86":"x64", ((uint8_t*)x64pc)[0], ((uint8_t*)x64pc)[1], ((uint8_t*)x64pc)[2], ((uint8_t*)x64pc)[3], ((uint8_t*)x64pc)[4], ((uint8_t*)x64pc)[5], ((uint8_t*)x64pc)[6], ((uint8_t*)x64pc)[7], *(uint32_t*)pc); } else { printf_log(log_minimum, "\n"); } @@ -1843,7 +1878,7 @@ dynarec_log(/*LOG_DEBUG*/LOG_INFO, "Repeated SIGSEGV with Access error on %p for } relockMutex(Locks); if(my_context->signals[sig] && my_context->signals[sig]!=1) { - my_sigactionhandler_oldcode(sig, my_context->is_sigaction[sig]?0:1, info, ucntx, &old_code, db); + my_sigactionhandler_oldcode(emu, sig, my_context->is_sigaction[sig]?0:1, info, ucntx, &old_code, db); return; } // no handler (or double identical segfault) @@ -1853,6 +1888,40 @@ dynarec_log(/*LOG_DEBUG*/LOG_INFO, "Repeated SIGSEGV with Access error on %p for } } +#ifdef WINECE + +int (*host_signal_notify)(void*) = NULL; + +struct sigactionhandler_params +{ + int32_t sig; + siginfo_t* info; + void * ucntx; +}; + +void user_sigactionhandler(void* args) +{ + struct sigactionhandler_params* params = (struct sigactionhandler_params*)args; + #ifdef DYNAREC + ucontext_t *p = (ucontext_t *)params->ucntx; + #ifdef ARM64 + void * pc = (void*)p->uc_mcontext.pc; + #elif defined(LA464) + void * pc = (void*)p->uc_mcontext.__pc; + #elif defined(RV64) + void * pc = (void*)p->uc_mcontext.__gregs[0]; + #else + #error Unsupported architecture + #endif + dynablock_t* db = FindDynablockFromNativeAddress(pc); + #else + void* db = NULL; + #endif + + my_sigactionhandler_oldcode(NULL, params->sig, 0, params->info, params->ucntx, NULL, db); +} +#endif + void my_sigactionhandler(int32_t sig, siginfo_t* info, void * ucntx) { #ifdef DYNAREC @@ -1871,7 +1940,14 @@ void my_sigactionhandler(int32_t sig, siginfo_t* info, void * ucntx) void* db = NULL; #endif - my_sigactionhandler_oldcode(sig, 0, info, ucntx, NULL, db); + #ifndef WINECE + if(host_signal_notify) { + struct sigactionhandler_params params = { sig, info, ucntx }; + if (host_signal_notify(¶ms)) + return; + } + #endif + my_sigactionhandler_oldcode(NULL, sig, 0, info, ucntx, NULL, db); } #ifndef DYNAREC @@ -1884,6 +1960,13 @@ void emit_signal(x64emu_t* emu, int sig, void* addr, int code) info.si_signo = sig; info.si_errno = (sig==SIGSEGV)?0x1234:0; // Mark as a sign this is a #GP(0) (like privileged instruction) info.si_code = code; + if(sig==SIGSEGV && code==0xbad0) { + info.si_errno = 0xbad0; + info.si_code = 0; + } else if(sig==SIGSEGV && code==0xecec) { + info.si_errno = 0xecec; + info.si_code = SEGV_ACCERR; + } info.si_addr = addr; const char* x64name = NULL; const char* elfname = NULL; @@ -1892,13 +1975,37 @@ void emit_signal(x64emu_t* emu, int sig, void* addr, int code) elfheader_t* elf = FindElfAddress(my_context, R_RIP); if(elf) elfname = ElfName(elf); - printf_log(LOG_NONE, "Emit Signal %d at IP=%p(%s / %s) / addr=%p, code=%d\n", sig, (void*)R_RIP, x64name?x64name:"???", elfname?elfname:"?", addr, code); + printf_log(LOG_NONE, "Emit Signal %d at IP=%p(%s / %s) / addr=%p, code=0x%x\n", sig, (void*)R_RIP, x64name?x64name:"???", elfname?elfname:"?", addr, code); +print_cycle_log(LOG_INFO); +printf_log(LOG_NONE, DumpCPURegs(emu, R_RIP, emu->segs[_CS]==0x23)); +printf_log(LOG_NONE, "Emu Stack: %p 0x%lx%s\n", emu->init_stack, emu->size_stack, emu->stack2free?" owned":""); + //if(!elf) { + // FILE* f = fopen("/proc/self/maps", "r"); + // if(f) { + // char line[1024]; + // while(!feof(f)) { + // char* ret = fgets(line, sizeof(line), f); + // printf_log(LOG_NONE, "\t%s", ret); + // } + // fclose(f); + // } + //} if(sig==SIGILL) { uint8_t* mem = (uint8_t*)R_RIP; printf_log(LOG_NONE, "SIGILL: Opcode at ip is %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx\n", mem[0], mem[1], mem[2], mem[3], mem[4], mem[5]); } } - my_sigactionhandler_oldcode(sig, 0, &info, NULL, NULL, NULL); + my_sigactionhandler_oldcode(emu, sig, 0, &info, NULL, NULL, NULL); +} + +void check_exec(x64emu_t* emu, uintptr_t addr) +{ + if(box64_pagesize!=4096) + return; //disabling the test, 4K pagesize simlation isn't good enough for this + while((getProtection(addr)&(PROT_EXEC|PROT_READ))!=(PROT_EXEC|PROT_READ)) { + R_RIP = addr; // incase there is a slight difference + emit_signal(emu, SIGSEGV, (void*)addr, 0xecec); + } } void emit_interruption(x64emu_t* emu, int num, void* addr) @@ -1907,7 +2014,7 @@ void emit_interruption(x64emu_t* emu, int num, void* addr) info.si_signo = SIGSEGV; info.si_errno = 0xdead; info.si_code = num; - info.si_addr = addr; + info.si_addr = NULL;//addr; const char* x64name = NULL; const char* elfname = NULL; if(box64_log>LOG_INFO || box64_dynarec_dump || box64_showsegv) { @@ -1917,7 +2024,7 @@ void emit_interruption(x64emu_t* emu, int num, void* addr) elfname = ElfName(elf); printf_log(LOG_NONE, "Emit Interruption 0x%x at IP=%p(%s / %s) / addr=%p\n", num, (void*)R_RIP, x64name?x64name:"???", elfname?elfname:"?", addr); } - my_sigactionhandler_oldcode(SIGSEGV, 0, &info, NULL, NULL, NULL); + my_sigactionhandler_oldcode(emu, SIGSEGV, 0, &info, NULL, NULL, NULL); } void emit_div0(x64emu_t* emu, void* addr, int code) @@ -1936,7 +2043,7 @@ void emit_div0(x64emu_t* emu, void* addr, int code) elfname = ElfName(elf); printf_log(LOG_NONE, "Emit Divide by 0 at IP=%p(%s / %s) / addr=%p\n", (void*)R_RIP, x64name?x64name:"???", elfname?elfname:"?", addr); } - my_sigactionhandler_oldcode(SIGSEGV, 0, &info, NULL, NULL, NULL); + my_sigactionhandler_oldcode(emu, SIGSEGV, 0, &info, NULL, NULL, NULL); } EXPORT sighandler_t my_signal(x64emu_t* emu, int signum, sighandler_t handler) @@ -2179,12 +2286,14 @@ EXPORT int my_getcontext(x64emu_t* emu, void* ucp) // get segments u->uc_mcontext.gregs[X64_CSGSFS] = ((uint64_t)(R_CS)) | (((uint64_t)(R_GS))<<16) | (((uint64_t)(R_FS))<<32); // get FloatPoint status - u->uc_mcontext.fpregs = &u->xstate; - fpu_fxsave64(emu, &u->xstate); + u->uc_mcontext.fpregs = ucp + 408; + fpu_savenv(emu, (void*)u->uc_mcontext.fpregs, 1); + *(uint32_t*)(ucp + 432) = emu->mxcsr.x32; + // get signal mask sigprocmask(SIG_SETMASK, NULL, (sigset_t*)&u->uc_sigmask); // ensure uc_link is properly initialized - u->uc_link = emu->uc_link; + u->uc_link = (x64_ucontext_t*)emu->uc_link; return 0; } @@ -2219,7 +2328,8 @@ EXPORT int my_setcontext(x64emu_t* emu, void* ucp) R_GS = (u->uc_mcontext.gregs[X64_CSGSFS]>>16)&0xffff; R_FS = (u->uc_mcontext.gregs[X64_CSGSFS]>>32)&0xffff; // set FloatPoint status - fpu_fxrstor64(emu, &u->xstate); + fpu_loadenv(emu, (void*)u->uc_mcontext.fpregs, 1); + emu->mxcsr.x32 = *(uint32_t*)(ucp + 432); // set signal mask sigprocmask(SIG_SETMASK, (sigset_t*)&u->uc_sigmask, NULL); // set uc_link @@ -2229,7 +2339,7 @@ EXPORT int my_setcontext(x64emu_t* emu, void* ucp) return R_EAX; } -EXPORT int my_makecontext(x64emu_t* emu, void* ucp, void* fnc, int32_t argc, int64_t* argv) +EXPORT void my_makecontext(x64emu_t* emu, void* ucp, void* fnc, int32_t argc, int64_t* argv) { // printf_log(LOG_NONE, "Warning: call to unimplemented makecontext\n"); x64_ucontext_t *u = (x64_ucontext_t*)ucp; @@ -2265,8 +2375,6 @@ EXPORT int my_makecontext(x64emu_t* emu, void* ucp, void* fnc, int32_t argc, int --rsp; *rsp = my_context->exit_bridge; u->uc_mcontext.gregs[X64_RSP] = (uintptr_t)rsp; - - return 0; } EXPORT int my_swapcontext(x64emu_t* emu, void* ucp1, void* ucp2) diff --git a/src/libtools/static_threads.h b/src/libtools/static_threads.h index c0116d54270b5743eb620839958c6f0bff2777c2..0790798789f1914ae9c164425f592ff5793d2714 100644 --- a/src/libtools/static_threads.h +++ b/src/libtools/static_threads.h @@ -5,6 +5,7 @@ typedef struct x64_unwind_buff_s x64_unwind_buff_t; typedef union my_mutexattr_s my_mutexattr_t; typedef union my_barrierattr_s my_barrierattr_t; typedef union my_condattr_s my_condattr_t; +typedef struct pthread_cond_old_s pthread_cond_old_t; int my_pthread_atfork(x64emu_t *emu, void* prepare, void* parent, void* child); int my_pthread_attr_destroy(x64emu_t* emu, void* attr); int my_pthread_attr_getstack(x64emu_t* emu, void* attr, void** stackaddr, size_t* stacksize); @@ -85,6 +86,16 @@ void my__pthread_cleanup_push_defer(x64emu_t* emu, void* buffer, void* routine, void my__pthread_cleanup_push(x64emu_t* emu, void* buffer, void* routine, void* arg); void my__pthread_cleanup_pop_restore(x64emu_t* emu, void* buffer, int exec); void my__pthread_cleanup_pop(x64emu_t* emu, void* buffer, int exec); +int my_pthread_cond_broadcast_old(x64emu_t* emu, pthread_cond_old_t* cond); +int my_pthread_cond_destroy_old(x64emu_t* emu, pthread_cond_old_t* cond); +int my_pthread_cond_init_old(x64emu_t* emu, pthread_cond_old_t* cond, void* attr); +int my_pthread_cond_signal_old(x64emu_t* emu, pthread_cond_old_t* cond); +int my_pthread_cond_timedwait_old(x64emu_t* emu, pthread_cond_old_t* cond, void* mutex, void* abstime); +int my_pthread_cond_wait_old(x64emu_t* emu, pthread_cond_old_t* cond, void* mutex); +int my_pthread_getaffinity_np_old(x64emu_t* emu, pthread_t thread, void* cpuset); +int my_pthread_setaffinity_np_old(x64emu_t* emu, pthread_t thread, void* cpuset); +int my_pthread_attr_setaffinity_np_old(x64emu_t* emu, pthread_attr_t* attr, void* cpuset); + extern int __pthread_mutexattr_destroy(pthread_mutexattr_t *attr); extern int __pthread_mutexattr_init(pthread_mutexattr_t *attr); diff --git a/src/libtools/threads.c b/src/libtools/threads.c index 074068c04ca0f12ef679f4146da2b43ab3c17cb4..142d97b59509099e02e5f6c96e7a7eb7b39812b0 100644 --- a/src/libtools/threads.c +++ b/src/libtools/threads.c @@ -29,6 +29,9 @@ #include "dynablock.h" #include "dynarec/native_lock.h" #endif +#ifdef BOX32 +#include "box32.h" +#endif //void _pthread_cleanup_push_defer(void* buffer, void* routine, void* arg); // declare hidden functions //void _pthread_cleanup_pop_restore(void* buffer, int exec); @@ -124,30 +127,19 @@ int GetStackSize(x64emu_t* emu, uintptr_t attr, void** stack, size_t* stacksize) void my_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val); -typedef struct emuthread_s { - uintptr_t fnc; - void* arg; - x64emu_t* emu; - int cancel_cap, cancel_size; - x64_unwind_buff_t **cancels; -} emuthread_t; - static pthread_key_t thread_key; -static void emuthread_destroy(void* p) +void emuthread_destroy(void* p) { emuthread_t *et = (emuthread_t*)p; if(!et) return; - // check tlsdata - /*void* ptr; - if (my_context && (ptr = pthread_getspecific(my_context->tlskey)) != NULL) - free_tlsdatasize(ptr);*/ - // free x64emu - if(et) { - FreeX64Emu(&et->emu); - box_free(et); - } + #ifdef BOX32 + if(et->is32bits && !et->join && et->fnc) + to_hash_d(et->self); + #endif + FreeX64Emu(&et->emu); + box_free(et); } static void emuthread_cancel(void* p) @@ -158,19 +150,26 @@ static void emuthread_cancel(void* p) // check cancels threads for(int i=et->cancel_size-1; i>=0; --i) { et->emu->flags.quitonlongjmp = 0; - my_longjmp(et->emu, et->cancels[i]->__cancel_jmp_buf, 1); + my_longjmp(et->emu, ((x64_unwind_buff_t*)et->cancels[i])->__cancel_jmp_buf, 1); DynaRun(et->emu); // will return after a __pthread_unwind_next() } + #ifdef BOX32 + /*if(box64_is32bits) + to_hash_d(et->self);*/ // not removing hash for old pthread_t + #endif box_free(et->cancels); et->cancels=NULL; et->cancel_size = et->cancel_cap = 0; } - +void thread_forget_emu() +{ + pthread_setspecific(thread_key, NULL); +} void thread_set_emu(x64emu_t* emu) { emuthread_t *et = (emuthread_t*)pthread_getspecific(thread_key); if(!emu) { - if(et) box_free(et); + if(et) emuthread_destroy(et); pthread_setspecific(thread_key, NULL); return; } @@ -182,6 +181,13 @@ void thread_set_emu(x64emu_t* emu) } et->emu = emu; et->emu->type = EMUTYPE_MAIN; + #ifdef BOX32 + if(box64_is32bits) { + et->is32bits = 1; + et->self = (uintptr_t)pthread_self(); + et->hself = to_hash(et->self); + } + #endif pthread_setspecific(thread_key, et); } @@ -211,6 +217,16 @@ x64emu_t* thread_get_emu() return et->emu; } +emuthread_t* thread_get_et() +{ + return (emuthread_t*)pthread_getspecific(thread_key); +} + +void thread_set_et(emuthread_t* et) +{ + pthread_setspecific(thread_key, et); +} + static void* pthread_routine(void* p) { // free current emuthread if it exist @@ -233,8 +249,7 @@ static void* pthread_routine(void* p) Push64(emu, 0); // PUSH BP R_RBP = R_RSP; // MOV BP, SP R_RSP -= 64; // Guard zone - if(R_RSP&0x8) // align if needed (shouldn't be) - R_RSP-=8; + R_RSP &= ~15LL; PushExit(emu); R_RIP = et->fnc; R_RDI = (uintptr_t)et->arg; @@ -269,19 +284,19 @@ EXPORT int my_pthread_attr_destroy(x64emu_t* emu, void* attr) EXPORT int my_pthread_attr_getstack(x64emu_t* emu, void* attr, void** stackaddr, size_t* stacksize) { PTHREAD_ATTR_ALIGN(attr); - int ret = pthread_attr_getstack(PTHREAD_ATTR(attr), stackaddr, stacksize); - // no need to unalign, it's const for attr - if (ret==0) - GetStackSize(emu, (uintptr_t)attr, stackaddr, stacksize); + int ret = 0; + if(!GetStackSize(emu, (uintptr_t)attr, stackaddr, stacksize)) + ret = pthread_attr_getstack(PTHREAD_ATTR(attr), stackaddr, stacksize); +printf_log(LOG_INFO, "pthread_attr_getstack gives (%d) %p 0x%zx\n", ret, *stackaddr, *stacksize); return ret; } EXPORT int my_pthread_attr_setstack(x64emu_t* emu, void* attr, void* stackaddr, size_t stacksize) { - if(!emu->context->stacksizes) { - emu->context->stacksizes = kh_init(threadstack); + if(!my_context->stacksizes) { + my_context->stacksizes = kh_init(threadstack); } - AddStackSize(emu->context->stacksizes, (uintptr_t)attr, stackaddr, stacksize); + AddStackSize(my_context->stacksizes, (uintptr_t)attr, stackaddr, stacksize); //Don't call actual setstack... //return pthread_attr_setstack(attr, stackaddr, stacksize); PTHREAD_ATTR_ALIGN(attr); @@ -341,20 +356,25 @@ EXPORT int my_pthread_attr_getscope(x64emu_t* emu, pthread_attr_t* attr, int* sc PTHREAD_ATTR_ALIGN(attr); return pthread_attr_getscope(PTHREAD_ATTR(attr), scope); } -EXPORT int my_pthread_attr_getstackaddr(x64emu_t* emu, pthread_attr_t* attr, void* addr) +EXPORT int my_pthread_attr_getstackaddr(x64emu_t* emu, pthread_attr_t* attr, void** addr) { (void)emu; size_t size; PTHREAD_ATTR_ALIGN(attr); - return pthread_attr_getstack(PTHREAD_ATTR(attr), addr, &size); - //return pthread_attr_getstackaddr(getAlignedAttr(attr), addr); + int ret = 0; + if(!GetStackSize(emu, (uintptr_t)attr, addr, &size )) + ret = pthread_attr_getstack(PTHREAD_ATTR(attr), addr, &size); +printf_log(LOG_INFO, "pthread_attr_getstackaddr gives %p\n", *addr); + return ret; } EXPORT int my_pthread_attr_getstacksize(x64emu_t* emu, pthread_attr_t* attr, size_t* size) { (void)emu; void* addr; PTHREAD_ATTR_ALIGN(attr); - int ret = pthread_attr_getstack(PTHREAD_ATTR(attr), &addr, size); + int ret = 0; + if(!GetStackSize(emu, (uintptr_t)attr, &addr, size )) + ret = pthread_attr_getstack(PTHREAD_ATTR(attr), &addr, size); if(!*size) *size = 2*1024*1024; //return pthread_attr_getstacksize(getAlignedAttr(attr), size); @@ -377,6 +397,10 @@ EXPORT int my_pthread_attr_setaffinity_np(x64emu_t* emu, pthread_attr_t* attr, s PTHREAD_ATTR_UNALIGN(attr); return ret; } +EXPORT int my_pthread_attr_setaffinity_np_old(x64emu_t* emu, pthread_attr_t* attr, void* cpuset) +{ + return my_pthread_attr_setaffinity_np(emu, attr, 128, cpuset); +} #endif EXPORT int my_pthread_attr_setdetachstate(x64emu_t* emu, pthread_attr_t* attr, int state) { @@ -451,6 +475,7 @@ EXPORT int my_pthread_getattr_np(x64emu_t* emu, pthread_t thread_id, pthread_att } void* stack = emu->init_stack; size_t sz = emu->size_stack; +printf_log(LOG_INFO, "pthread_getattr_np called for self, stack=%p, sz=%lx\n", stack, sz); if (!sz) { // get default stack size pthread_attr_t attr; @@ -778,6 +803,11 @@ EXPORT int my_pthread_getaffinity_np(x64emu_t* emu, pthread_t thread, size_t cpu return ret; } +EXPORT int my_pthread_getaffinity_np_old(x64emu_t* emu, pthread_t thread, void* cpuset) +{ + return my_pthread_getaffinity_np(emu, thread, 128, cpuset); +} + EXPORT int my_pthread_setaffinity_np(x64emu_t* emu, pthread_t thread, size_t cpusetsize, void* cpuset) { @@ -789,6 +819,10 @@ EXPORT int my_pthread_setaffinity_np(x64emu_t* emu, pthread_t thread, size_t cpu return ret; } +EXPORT int my_pthread_setaffinity_np_old(x64emu_t* emu, pthread_t thread, void* cpuset) +{ + return my_pthread_setaffinity_np(emu, thread, 128, cpuset); +} #endif //EXPORT int my_pthread_attr_setaffinity_np(x64emu_t* emu, void* attr, uint32_t cpusetsize, void* cpuset) @@ -1045,6 +1079,68 @@ EXPORT int my_pthread_cond_broadcast(x64emu_t* emu, pthread_cond_t *pc) } #endif +typedef struct pthread_cond_old_s { + pthread_cond_t* cond; +} pthread_cond_old_t; + +static pthread_cond_t* get_cond(pthread_cond_old_t* cond) { + if(!cond->cond) { + pthread_cond_t* newcond = box_calloc(1, sizeof(pthread_cond_t)); + #ifdef DYNAREC + if(native_lock_storeifnull(&cond->cond, newcond)) + box_free(newcond); + #else + static pthread_mutex_t mutex_cond = PTHREAD_MUTEX_INITIALIZER; + pthread_mutex_lock(&mutex_cond); + if(!cond->cond) + cond->cond = newcond; + else + box_free(newcond); + #endif + } + return cond->cond; +} + +EXPORT int my_pthread_cond_broadcast_old(x64emu_t* emu, pthread_cond_old_t* cond) +{ + (void)emu; + pthread_cond_t * c = get_cond(cond); + return pthread_cond_broadcast(c); +} +EXPORT int my_pthread_cond_destroy_old(x64emu_t* emu, pthread_cond_old_t* cond) +{ + (void)emu; + pthread_cond_t * c = get_cond(cond); + int ret = pthread_cond_destroy(c); + box_free(cond->cond); + return ret; +} +EXPORT int my_pthread_cond_init_old(x64emu_t* emu, pthread_cond_old_t* cond, void* attr) +{ + (void)emu; + pthread_cond_t *c = get_cond(cond); + return pthread_cond_init(c, (const pthread_condattr_t*)attr); +} +EXPORT int my_pthread_cond_signal_old(x64emu_t* emu, pthread_cond_old_t* cond) +{ + (void)emu; + pthread_cond_t * c = get_cond(cond); + return pthread_cond_signal(c); +} +EXPORT int my_pthread_cond_timedwait_old(x64emu_t* emu, pthread_cond_old_t* cond, void* mutex, void* abstime) +{ + (void)emu; + pthread_cond_t * c = get_cond(cond); + return pthread_cond_timedwait(c, mutex, (const struct timespec*)abstime); + #undef T +} +EXPORT int my_pthread_cond_wait_old(x64emu_t* emu, pthread_cond_old_t* cond, void* mutex) +{ + (void)emu; + pthread_cond_t * c = get_cond(cond); + return pthread_cond_wait(c, mutex); +} + typedef union my_barrierattr_s { int x86; pthread_barrierattr_t nat; @@ -1097,6 +1193,10 @@ EXPORT int my_pthread_barrier_init(x64emu_t* emu, pthread_barrier_t* bar, my_bar void init_pthread_helper() { + #ifdef BOX32 + if(box64_is32bits) + init_pthread_helper_32(); + #endif real_pthread_cleanup_push_defer = (vFppp_t)dlsym(NULL, "_pthread_cleanup_push_defer"); real_pthread_cleanup_pop_restore = (vFpi_t)dlsym(NULL, "_pthread_cleanup_pop_restore"); real_pthread_cond_clockwait = (iFppip_t)dlsym(NULL, "pthread_cond_clockwait"); @@ -1109,6 +1209,8 @@ void init_pthread_helper() real_phtread_kill_old = (iFli_t)dlvsym(NULL, "pthread_kill", buff); } } + if(!real_phtread_kill_old) + real_phtread_kill_old = (iFli_t)dlvsym(NULL, "pthread_kill", "GLIBC_2.2.5"); if(!real_phtread_kill_old) { printf_log(LOG_INFO, "Warning, older then 2.34 pthread_kill not found, using current one\n"); real_phtread_kill_old = (iFli_t)pthread_kill; @@ -1129,6 +1231,10 @@ void clean_current_emuthread() void fini_pthread_helper(box64context_t* context) { + #ifdef BOX32 + if(box64_is32bits) + fini_pthread_helper_32(context); + #endif CleanStackSize(context); clean_current_emuthread(); } diff --git a/src/libtools/threads32.c b/src/libtools/threads32.c new file mode 100755 index 0000000000000000000000000000000000000000..067a48614f43b73ccfe39e787dbfd33d510927c5 --- /dev/null +++ b/src/libtools/threads32.c @@ -0,0 +1,978 @@ +// __USE_UNIX98 is needed for sttype / gettype definition +#define __USE_UNIX98 +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include + +#include "debug.h" +#include "box32context.h" +#include "threads.h" +#include "emu/x64emu_private.h" +#include "tools/bridge_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "custommem.h" +#include "khash.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec.h" +#include "bridge.h" +#ifdef DYNAREC +#include "dynablock.h" +#endif + +#ifndef MAP_32BIT +#define MAP_32BIT 0x40 +#endif + +typedef void (*vFppp_t)(void*, void*, void*); +typedef void (*vFpi_t)(void*, int); +typedef int (*iFLi_t)(unsigned long, int); +//starting with glibc 2.34+, those 2 functions are in libc.so as versionned symbol only +// So use dlsym to get the symbol unversionned, as simple link will not work. +static vFppp_t real_pthread_cleanup_push_defer = NULL; +static vFpi_t real_pthread_cleanup_pop_restore = NULL; +// with glibc 2.34+, pthread_kill changed behaviour and might break some program, so using old version if possible +// it will be pthread_kill@GLIBC_2.0+, need to be found, while it's GLIBC_2.0 on i386 +static iFLi_t real_phtread_kill_old = NULL; +// those function can be used simply +void _pthread_cleanup_push(void* buffer, void* routine, void* arg); // declare hidden functions +void _pthread_cleanup_pop(void* buffer, int exec); + +typedef struct threadstack_s { + void* stack; + size_t stacksize; +} threadstack_t; + +// longjmp / setjmp +typedef struct jump_buff_i386_s { + uint32_t save_ebx; + uint32_t save_esi; + uint32_t save_edi; + uint32_t save_ebp; + uint32_t save_esp; + uint32_t save_eip; +} jump_buff_i386_t; + +// sigset_t should have the same size on 32bits and 64bits machine (64bits) +typedef struct __attribute__((packed, aligned(4))) __jmp_buf_tag_s { + jump_buff_i386_t __jmpbuf; + int __mask_was_saved; + sigset_t __saved_mask; +} __jmp_buf_tag_t; + +typedef struct i386_unwind_buff_s { + struct { + jump_buff_i386_t __cancel_jmp_buf; + int __mask_was_saved; + } __cancel_jmp_buf[1]; + ptr_t __pad[2]; + ptr_t __pad3; +} __attribute__((packed, aligned(4))) i386_unwind_buff_t; + +// those are define in thread.c +emuthread_t* thread_get_et(); +void thread_set_et(emuthread_t* et); +void emuthread_destroy(void* p); + +static pthread_attr_t* get_attr(void* attr); +static void del_attr(void* attr); + +typedef void(*vFv_t)(); + +KHASH_MAP_INIT_INT(threadstack, threadstack_t) +#ifndef ANDROID +KHASH_MAP_INIT_INT(cancelthread, __pthread_unwind_buf_t*) +#endif + +void CleanStackSize(box64context_t* context); +void FreeStackSize(kh_threadstack_t* map, uintptr_t attr); +void AddStackSize(kh_threadstack_t* map, uintptr_t attr, void* stack, size_t stacksize); +int GetStackSize(x64emu_t* emu, uintptr_t attr, void** stack, size_t* stacksize); + +void my32_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val); + +static void emuthread_cancel(void* p) +{ + emuthread_t *et = (emuthread_t*)p; + if(!et) + return; + // check cancels threads + for(int i=et->cancel_size-1; i>=0; --i) { + et->emu->flags.quitonlongjmp = 0; + my32_longjmp(et->emu, ((i386_unwind_buff_t*)et->cancels[i])->__cancel_jmp_buf, 1); + DynaRun(et->emu); // will return after a __pthread_unwind_next() + } + box_free(et->cancels); + et->cancels=NULL; + et->cancel_size = et->cancel_cap = 0; +} + +static void* pthread_routine(void* p) +{ + // free current emuthread if it exist + { + void* t = thread_get_et(); + if(t) { + // not sure how this could happens + printf_log(LOG_INFO, "Clean of an existing ET for Thread %04d\n", GetTID()); + emuthread_destroy(t); + } + } + // call the function + emuthread_t *et = (emuthread_t*)p; + thread_set_et(et); + et->emu->type = EMUTYPE_MAIN; + et->self = (uintptr_t)pthread_self(); + et->hself = to_hash(et->self); + // setup callstack and run... + x64emu_t* emu = et->emu; + Push_32(emu, 0); // PUSH 0 (backtrace marker: return address is 0) + Push_32(emu, 0); // PUSH BP + R_EBP = R_ESP; // MOV BP, SP + R_ESP -= 32; // guard area + R_ESP &=~15; + R_ESP -= 3*4; // prepare alignment + Push_32(emu, to_ptrv(et->arg)); + PushExit_32(emu); + R_EIP = to_ptr(et->fnc); + pthread_cleanup_push(emuthread_cancel, p); + DynaRun(et->emu); + pthread_cleanup_pop(0); + void* ret = from_ptrv(R_EAX); + return ret; +} + +EXPORT int my32_pthread_attr_destroy(x64emu_t* emu, void* attr) +{ + if(emu->context->stacksizes) + FreeStackSize(emu->context->stacksizes, (uintptr_t)attr); + int ret = pthread_attr_destroy(get_attr(attr)); + del_attr(attr); + return ret; +} + +EXPORT int my32_pthread_attr_getstack(x64emu_t* emu, void* attr, void** stackaddr, size_t* stacksize) +{ + int ret = pthread_attr_getstack(get_attr(attr), stackaddr, stacksize); + if (ret==0) + GetStackSize(emu, (uintptr_t)attr, stackaddr, stacksize); + return ret; +} + +EXPORT int my32_pthread_attr_setstack(x64emu_t* emu, void* attr, void* stackaddr, size_t stacksize) +{ + if(!emu->context->stacksizes) { + emu->context->stacksizes = kh_init(threadstack); + } + AddStackSize(emu->context->stacksizes, (uintptr_t)attr, stackaddr, stacksize); + //Don't call actual setstack... + //return pthread_attr_setstack(attr, stackaddr, stacksize); + return pthread_attr_setstacksize(get_attr(attr), stacksize); +} + +EXPORT int my32_pthread_create(x64emu_t *emu, void* t, void* attr, void* start_routine, void* arg) +{ + int stacksize = 2*1024*1024; //default stack size is 2Mo + void* attr_stack; + size_t attr_stacksize; + int own; + void* stack; + + if(attr) { + size_t stsize; + if(pthread_attr_getstacksize(get_attr(attr), &stsize)==0) + stacksize = stsize; + if(stacksize<512*1024) // emu and all needs some stack space, don't go too low + pthread_attr_setstacksize(get_attr(attr), 512*1024); + } + if(GetStackSize(emu, (uintptr_t)attr, &attr_stack, &attr_stacksize)) + { + stack = attr_stack; + stacksize = attr_stacksize; + own = 0; + } else { + //stack = malloc(stacksize); + stack = mmap64(NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN|MAP_32BIT, -1, 0); + own = 1; + } + + emuthread_t *et = (emuthread_t*)box_calloc(1, sizeof(emuthread_t)); + x64emu_t *emuthread = NewX64Emu(my_context, (uintptr_t)start_routine, (uintptr_t)stack, stacksize, own); + SetupX64Emu(emuthread, emu); + et->emu = emuthread; + et->fnc = (uintptr_t)start_routine; + et->arg = arg; + if(!attr) + et->join = 1; + else { + int j; + pthread_attr_getdetachstate(get_attr(attr), &j); + if(j==PTHREAD_CREATE_JOINABLE) + et->join = 1; + else + et->join = 0; + } + #ifdef DYNAREC + if(box64_dynarec) { + // pre-creation of the JIT code for the entry point of the thread + dynablock_t *current = NULL; + DBGetBlock(emu, (uintptr_t)start_routine, 1, 1); + } + #endif + // create thread + return pthread_create((pthread_t*)t, get_attr(attr), + pthread_routine, et); +} + +EXPORT int my32_pthread_detach(x64emu_t* emu, pthread_t p) +{ + if(pthread_equal(p ,pthread_self())) { + emuthread_t *et = (emuthread_t*)thread_get_et(); + et->join = 0; + } + return pthread_detach(p); +} + +void* my32_prepare_thread(x64emu_t *emu, void* f, void* arg, int ssize, void** pet) +{ + int stacksize = (ssize)?ssize:(2*1024*1024); //default stack size is 2Mo + //void* stack = malloc(stacksize); + void* stack = mmap64(NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN|MAP_32BIT, -1, 0); + emuthread_t *et = (emuthread_t*)box_calloc(1, sizeof(emuthread_t)); + x64emu_t *emuthread = NewX64Emu(emu->context, (uintptr_t)f, (uintptr_t)stack, stacksize, 1); + SetupX64Emu(emuthread, emu); + et->emu = emuthread; + et->fnc = (uintptr_t)f; + et->arg = arg; + #ifdef DYNAREC + if(box64_dynarec) { + // pre-creation of the JIT code for the entry point of the thread + dynablock_t *current = NULL; + DBGetBlock(emu, (uintptr_t)f, 1, 1); + } + #endif + *pet = et; + return pthread_routine; +} + +void my32_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val); + +EXPORT void my32___pthread_register_cancel(x64emu_t* emu, i386_unwind_buff_t* buff) +{ + buff = (i386_unwind_buff_t*)from_ptr(R_EAX); // param is in fact on register + emuthread_t *et = (emuthread_t*)thread_get_et(); + if(et->cancel_cap == et->cancel_size) { + et->cancel_cap+=8; + et->cancels = box_realloc(et->cancels, sizeof(i386_unwind_buff_t*)*et->cancel_cap); + } + et->cancels[et->cancel_size++] = buff; +} + +EXPORT void my32___pthread_unregister_cancel(x64emu_t* emu, i386_unwind_buff_t* buff) +{ + emuthread_t *et = (emuthread_t*)thread_get_et(); + for (int i=et->cancel_size-1; i>=0; --i) { + if(et->cancels[i] == buff) { + if(i!=et->cancel_size-1) + memmove(et->cancels+i, et->cancels+i+1, sizeof(i386_unwind_buff_t*)*(et->cancel_size-i-1)); + et->cancel_size--; + } + } +} + +#define X86_RWLOCK_SIZE 32 +EXPORT int my32_pthread_rwlock_init(void* rdlock, void* attr) +{ + // the structure is bigger, but the "active" part should be the same size, so just save/restoore the padding at init + uint8_t buff[sizeof(pthread_rwlock_t)]; + if(rdlock && sizeof(pthread_rwlock_t)>X86_RWLOCK_SIZE) { + memcpy(buff, rdlock+32, sizeof(pthread_rwlock_t)-X86_RWLOCK_SIZE); + } + int ret = pthread_rwlock_init(rdlock, attr); + memcpy(rdlock+32, buff, sizeof(pthread_rwlock_t)-X86_RWLOCK_SIZE); + return ret; +} +EXPORT int my32___pthread_rwlock_init(void*, void*) __attribute__((alias("my32_pthread_rwlock_init"))); + +EXPORT int my32_pthread_rwlock_destroy(void* rdlock) +{ + // the structure is bigger, but the "active" part should be the same size, so just save/restoore the padding at init + uint8_t buff[sizeof(pthread_rwlock_t)]; + if(rdlock && sizeof(pthread_rwlock_t)>X86_RWLOCK_SIZE) { + memcpy(buff, rdlock+32, sizeof(pthread_rwlock_t)-X86_RWLOCK_SIZE); + } + int ret = pthread_rwlock_destroy(rdlock); + memcpy(rdlock+32, buff, sizeof(pthread_rwlock_t)-X86_RWLOCK_SIZE); + return ret; +} + +EXPORT void my32___pthread_unwind_next(x64emu_t* emu, void* p) +{ + emu->quit = 1; +} + +KHASH_MAP_INIT_INT(once, int) + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) \ +GO(5) \ +GO(6) \ +GO(7) \ +GO(8) \ +GO(9) \ +GO(10) \ +GO(11) \ +GO(12) \ +GO(13) \ +GO(14) \ +GO(15) \ +GO(16) \ +GO(17) \ +GO(18) \ +GO(19) \ +GO(20) \ +GO(21) \ +GO(22) \ +GO(23) \ +GO(24) \ +GO(25) \ +GO(26) \ +GO(27) \ +GO(28) \ +GO(29) + +// cleanup_routine +#define GO(A) \ +static uintptr_t my32_cleanup_routine_fct_##A = 0; \ +static void my32_cleanup_routine_##A(void* a) \ +{ \ + RunFunctionFmt(my32_cleanup_routine_fct_##A, "p", to_ptrv(a)); \ +} +SUPER() +#undef GO +static void* findcleanup_routineFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_cleanup_routine_fct_##A == (uintptr_t)fct) return my32_cleanup_routine_##A; + SUPER() + #undef GO + #define GO(A) if(my32_cleanup_routine_fct_##A == 0) {my32_cleanup_routine_fct_##A = (uintptr_t)fct; return my32_cleanup_routine_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for pthread cleanup_routine callback\n"); + return NULL; +} + +// key_destructor +#define GO(A) \ +static uintptr_t my32_key_destructor_fct_##A = 0; \ +static void my32_key_destructor_##A(void* a) \ +{ \ + RunFunctionFmt(my32_key_destructor_fct_##A, "p", to_ptrv(a)); \ +} +SUPER() +#undef GO +static void* findkey_destructorFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_key_destructor_fct_##A == (uintptr_t)fct) return my32_key_destructor_##A; + SUPER() + #undef GO + #define GO(A) if(my32_key_destructor_fct_##A == 0) {my32_key_destructor_fct_##A = (uintptr_t)fct; return my32_key_destructor_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for pthread key_destructor callback\n"); + return NULL; +} + +#undef SUPER + + +int EXPORT my32_pthread_once(x64emu_t* emu, int* once, void* cb) +{ + if(*once) // quick test first + return 0; + // slow test now + #ifdef DYNAREC + int old = native_lock_xchg_d(once, 1); + #else + int old = *once; // outside of the mutex in case once is badly formed + pthread_mutex_lock(&my_context->mutex_lock); + old = *once; + *once = 1; + pthread_mutex_unlock(&my_context->mutex_lock); + #endif + if(old) + return 0; + // make some room and align R_RSP before doing the call (maybe it would be simpler to just use Callback functions) + Push_32(emu, R_EBP); // push rbp + R_EBP = R_ESP; // mov rbp, rsp + R_ESP -= 0x200; + R_ESP &= ~63LL; + DynaCall(emu, (uintptr_t)cb); + R_ESP = R_EBP; // mov rsp, rbp + R_EBP = Pop32(emu); // pop rbp + return 0; +} +EXPORT int my32___pthread_once(x64emu_t* emu, void* once, void* cb) __attribute__((alias("my32_pthread_once"))); + +EXPORT int my32_pthread_key_create(x64emu_t* emu, void* key, void* dtor) +{ + return pthread_key_create(key, findkey_destructorFct(dtor)); +} +EXPORT int my32___pthread_key_create(x64emu_t* emu, void* key, void* dtor) __attribute__((alias("my32_pthread_key_create"))); + +// phtread_cond_init with null attr seems to only write 1 (NULL) dword on x64, while it's 48 bytes on ARM. +// Not sure why as sizeof(pthread_cond_init) is 48 on both platform... But Neverwinter Night init seems to rely on that +// What about cond that are statically initialized? +// Note, this is is a versionned function (the pthread_cond_*), and this seems to correspond to an old behaviour + +KHASH_MAP_INIT_INT(mapcond, pthread_cond_t*); + +// should all access to that map be behind a mutex? +kh_mapcond_t *mapcond = NULL; + +static pthread_cond_t* add_cond(void* cond) +{ + mutex_lock(&my_context->mutex_thread); + khint_t k; + int ret; + pthread_cond_t *c; + k = kh_put(mapcond, mapcond, (uintptr_t)cond, &ret); + if(!ret) + c = kh_value(mapcond, k); // already there... reinit an existing one? + else + c = kh_value(mapcond, k) = (pthread_cond_t*)box_calloc(1, sizeof(pthread_cond_t)); + //*(ptr_t*)cond = to_ptrv(cond); + mutex_unlock(&my_context->mutex_thread); + return c; +} +static pthread_cond_t* get_cond(void* cond) +{ + pthread_cond_t* ret; + int r; + mutex_lock(&my_context->mutex_thread); + khint_t k = kh_get(mapcond, mapcond, *(uintptr_t*)cond); + if(k==kh_end(mapcond)) { + khint_t k = kh_get(mapcond, mapcond, (uintptr_t)cond); + if(k==kh_end(mapcond)) { + printf_log(LOG_DEBUG, "BOX32: Note: phtread_cond not found, create a new empty one\n"); + ret = (pthread_cond_t*)box_calloc(1, sizeof(pthread_cond_t)); + k = kh_put(mapcond, mapcond, (uintptr_t)cond, &r); + kh_value(mapcond, k) = ret; + //*(ptr_t*)cond = to_ptrv(cond); + pthread_cond_init(ret, NULL); + } else + ret = kh_value(mapcond, k); + } else + ret = kh_value(mapcond, k); + mutex_unlock(&my_context->mutex_thread); + return ret; +} +static void del_cond(void* cond) +{ + if(!mapcond) + return; + mutex_lock(&my_context->mutex_thread); + khint_t k = kh_get(mapcond, mapcond, *(uintptr_t*)cond); + if(k!=kh_end(mapcond)) { + box_free(kh_value(mapcond, k)); + kh_del(mapcond, mapcond, k); + } + mutex_unlock(&my_context->mutex_thread); +} + +typedef struct __attribute__((packed, aligned(4))) pthread_cond_2_0_s { + ptr_t cond; // pthread_cond_t* +} pthread_cond_2_0_t; + +static pthread_cond_t* get_cond_old(pthread_cond_2_0_t* cond) { + if(!cond->cond) { + ptr_t newcond = to_ptrv(box_calloc(1, sizeof(pthread_cond_t))); + #ifdef DYNAREC + if(native_lock_storeifnull_d(&cond->cond, newcond)) + box_free(from_ptrv(newcond)); + #else + static pthread_mutex_t mutex_cond = PTHREAD_MUTEX_INITIALIZER; + pthread_mutex_lock(&mutex_cond); + if(!cond->cond) + cond->cond = newcond; + else + box_free(from_ptrv(newcond)); + #endif + } + return from_ptrv(cond->cond); +} + +pthread_mutex_t* getAlignedMutex(pthread_mutex_t* m); + +EXPORT int my32_pthread_cond_broadcast(x64emu_t* emu, void* cond) +{ + pthread_cond_t * c = get_cond(cond); + return pthread_cond_broadcast(c); +} +EXPORT int my32_pthread_cond_broadcast_old(x64emu_t* emu, pthread_cond_2_0_t* cond) +{ + pthread_cond_t * c = get_cond_old(cond); + return pthread_cond_broadcast(c); +} + +EXPORT int my32_pthread_cond_destroy(x64emu_t* emu, void* cond) +{ + pthread_cond_t * c = get_cond(cond); + int ret = pthread_cond_destroy(c); + if(c!=cond) del_cond(cond); + return ret; +} +EXPORT int my32_pthread_cond_destroy_old(x64emu_t* emu, pthread_cond_2_0_t* cond) +{ + pthread_cond_t * c = get_cond_old(cond); + int ret = pthread_cond_destroy(c); + box_free(from_ptrv(cond->cond)); + return ret; +} + +EXPORT int my32_pthread_cond_init(x64emu_t* emu, void* cond, void* attr) +{ + pthread_cond_t *c = add_cond(cond); + return pthread_cond_init(c, (const pthread_condattr_t*)attr); +} +EXPORT int my32_pthread_cond_init_old(x64emu_t* emu, void* cond, pthread_cond_2_0_t* attr) +{ + pthread_cond_t *c = get_cond_old(cond); + return pthread_cond_init(c, (const pthread_condattr_t*)attr); +} + +EXPORT int my32_pthread_cond_signal(x64emu_t* emu, void* cond) +{ + pthread_cond_t * c = get_cond(cond); + return pthread_cond_signal(c); +} +EXPORT int my32_pthread_cond_signal_old(x64emu_t* emu, pthread_cond_2_0_t* cond) +{ + pthread_cond_t * c = get_cond_old(cond); + return pthread_cond_signal(c); +} + +EXPORT int my32_pthread_cond_timedwait_old(x64emu_t* emu, pthread_cond_2_0_t* cond, void* mutex, void* abstime) +{ + pthread_cond_t * c = get_cond_old(cond); + return pthread_cond_timedwait(c, getAlignedMutex((pthread_mutex_t*)mutex), (const struct timespec*)abstime); +} +EXPORT int my32_pthread_cond_wait_old(x64emu_t* emu, pthread_cond_2_0_t* cond, void* mutex) +{ + pthread_cond_t * c = get_cond_old(cond); + return pthread_cond_wait(c, getAlignedMutex((pthread_mutex_t*)mutex)); +} + +EXPORT int my32_pthread_cond_timedwait(x64emu_t* emu, void* cond, void* mutex, void* abstime) +{ + pthread_cond_t * c = get_cond(cond); + return pthread_cond_timedwait(c, getAlignedMutex((pthread_mutex_t*)mutex), (const struct timespec*)abstime); +} +EXPORT int my32_pthread_cond_wait(x64emu_t* emu, void* cond, void* mutex) +{ + pthread_cond_t * c = get_cond(cond); + return pthread_cond_wait(c, getAlignedMutex((pthread_mutex_t*)mutex)); +} + +EXPORT int my32_pthread_mutexattr_setkind_np(x64emu_t* emu, void* t, int kind) +{ + // does "kind" needs some type of translation? + return pthread_mutexattr_settype(t, kind); +} + +// pthread_attr_t on x86 is 36 bytes +static uint64_t ATTR_SIGN = 0xA055E10CDE98LL; // random signature +typedef struct my32_x86_attr_s { + uint64_t sign; + pthread_attr_t* attr; +} my32_x86_attr_t; + +static pthread_attr_t* get_attr(void* attr) +{ + if(!attr) + return NULL; + my32_x86_attr_t* my32_attr = (my32_x86_attr_t*)attr; + if(my32_attr->sign!=ATTR_SIGN) { + my32_attr->attr = (pthread_attr_t*)box_calloc(1, sizeof(pthread_attr_t)); + my32_attr->sign = ATTR_SIGN; + } + return my32_attr->attr; +} +static void del_attr(void* attr) +{ + if(!attr) + return; + my32_x86_attr_t* my32_attr = (my32_x86_attr_t*)attr; + if(my32_attr->sign==ATTR_SIGN) { + my32_attr->sign = 0; + box_free(my32_attr->attr); + } +} + +EXPORT int my32_pthread_attr_init(x64emu_t* emu, void* attr) +{ + return pthread_attr_init(get_attr(attr)); +} + +EXPORT int my32_pthread_getattr_np(x64emu_t* emu, uintptr_t th, void* attr) +{ + return pthread_getattr_np(th, get_attr(attr)); +} + +EXPORT int my32_pthread_attr_getdetachstate(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getdetachstate(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getguardsize(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getguardsize(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getinheritsched(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getinheritsched(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getschedparam(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getschedparam(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getschedpolicy(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getschedpolicy(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getscope(x64emu_t* emu, void* attr, void* p) +{ + return pthread_attr_getscope(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_getstackaddr(x64emu_t* emu, void* attr, ptr_t* p) +{ + size_t size; + void* pp; + int ret = pthread_attr_getstack(get_attr(attr), &pp, &size); + *p = to_ptrv(pp); + return ret; +} +EXPORT int my32_pthread_attr_getstacksize(x64emu_t* emu, void* attr, ulong_t* p) +{ + size_t size; + void* pp; + int ret = pthread_attr_getstack(get_attr(attr), &pp, &size); + *p = to_ulong(size); + return ret; +} +EXPORT int my32_pthread_attr_setdetachstate(x64emu_t* emu, void* attr, int p) +{ + return pthread_attr_setdetachstate(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_setguardsize(x64emu_t* emu, void* attr, size_t p) +{ + return pthread_attr_setguardsize(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_setinheritsched(x64emu_t* emu, void* attr, int p) +{ + return pthread_attr_setinheritsched(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_setschedparam(x64emu_t* emu, void* attr, void* param) +{ + int policy; + pthread_attr_getschedpolicy(get_attr(attr), &policy); + int pmin = sched_get_priority_min(policy); + int pmax = sched_get_priority_max(policy); + if(param) { + int p = *(int*)param; + if(p>=pmin && p<=pmax) + return pthread_attr_setschedparam(get_attr(attr), param); + } + printf_log(LOG_INFO, "Warning, call to pthread_attr_setschedparam(%p, %p[%d]) ignored\n", attr, param, param?(*(int*)param):-1); + return 0; // faking success +} +EXPORT int my32_pthread_attr_setschedpolicy(x64emu_t* emu, void* attr, int p) +{ + return pthread_attr_setschedpolicy(get_attr(attr), p); +} +EXPORT int my32_pthread_attr_setstackaddr(x64emu_t* emu, void* attr, void* p) +{ + size_t size = 2*1024*1024; + void* pp; + pthread_attr_getstack(get_attr(attr), &pp, &size); + return pthread_attr_setstack(get_attr(attr), p, size); +} +EXPORT int my32_pthread_attr_setstacksize(x64emu_t* emu, void* attr, size_t p) +{ + // PTHREAD_STACK_MIN on x86 might be lower than the current platform... + if(p>=0xc000 && p0x1000) { + // probably old version of the function, that didn't have cpusetsize.... + cpuset = from_ptrv(cpusetsize); + cpusetsize = sizeof(cpu_set_t); + } + + int ret = pthread_getaffinity_np(thread, cpusetsize, cpuset); + if(ret<0) { + printf_log(LOG_INFO, "Warning, pthread_getaffinity_np(%p, %d, %p) errored, with errno=%d\n", (void*)thread, cpusetsize, cpuset, errno); + } + + return ret; +} + +EXPORT int my32_pthread_setaffinity_np(x64emu_t* emu, pthread_t thread, int cpusetsize, void* cpuset) +{ + if(cpusetsize>0x1000) { + // probably old version of the function, that didn't have cpusetsize.... + cpuset = from_ptrv(cpusetsize); + cpusetsize = sizeof(cpu_set_t); + } + + int ret = pthread_setaffinity_np(thread, cpusetsize, cpuset); + if(ret<0) { + printf_log(LOG_INFO, "Warning, pthread_setaffinity_np(%p, %d, %p) errored, with errno=%d\n", (void*)thread, cpusetsize, cpuset, errno); + } + + return ret; +} + +EXPORT int my32_pthread_attr_setaffinity_np(x64emu_t* emu, void* attr, uint32_t cpusetsize, void* cpuset) +{ + if(cpusetsize>0x1000) { + // probably old version of the function, that didn't have cpusetsize.... + cpuset = from_ptrv(cpusetsize); + cpusetsize = sizeof(cpu_set_t); + } + + int ret = pthread_attr_setaffinity_np(attr, cpusetsize, cpuset); + if(ret<0) { + printf_log(LOG_INFO, "Warning, pthread_attr_setaffinity_np(%p, %d, %p) errored, with errno=%d\n", attr, cpusetsize, cpuset, errno); + } + + return ret; +} +#endif + +EXPORT int my32_pthread_kill_old(x64emu_t* emu, void* thread, int sig) +{ + // check for old "is everything ok?" + if((thread==NULL) && (sig==0)) + return real_phtread_kill_old(pthread_self(), 0); + return real_phtread_kill_old((pthread_t)thread, sig); +} + +//EXPORT void my32_pthread_exit(x64emu_t* emu, void* retval) +//{ +// emu->quit = 1; // to be safe +// pthread_exit(retval); +//} + +// TODO: find a better way for mutex. It should be possible to use the actual mutex most of the time, especially for simple ones +// Having the mutex table behind a mutex is far from ideal! + +typedef struct fake_pthread_mutext_s { + int __lock; + unsigned int __count; + int __owner; + int i386__kind; + int __kind; + ptr_t real_mutex; +} fakse_phtread_mutex_t; +#define KIND_SIGN 0xbad000 +pthread_mutex_t* createNewMutex() +{ + pthread_mutex_t* ret = (pthread_mutex_t*)box_calloc(1, sizeof(pthread_mutex_t)); + return ret; +} +// init = 0: just get the mutex +// init = 1: get the mutex and init it with optione attr (attr will disallow native mutex) +pthread_mutex_t* getAlignedMutex(pthread_mutex_t* m) +{ + fakse_phtread_mutex_t* fake = (fakse_phtread_mutex_t*)m; + if(fake->__kind==0) { + return m; // type 0 can fit... + } + if(fake->__kind==KIND_SIGN) + return from_ptrv(fake->real_mutex); + // this should not appens! + printf_log(LOG_NONE, "BOX32: Warning, fallback on alligned mutex %p\n", m); + fake->real_mutex = to_ptrv(createNewMutex()); + return from_ptrv(fake->real_mutex); +} +EXPORT int my32_pthread_mutex_destroy(pthread_mutex_t *m) +{ + fakse_phtread_mutex_t* fake = (fakse_phtread_mutex_t*)m; + if(fake->__kind==0) { + //TODO: check if that save/restore is actually needed + uint8_t saved[sizeof(pthread_mutex_t)]; + memcpy(saved, fake+1, sizeof(pthread_mutex_t)-24); + int ret = pthread_mutex_destroy(m); + memcpy(fake+1, saved, sizeof(pthread_mutex_t)-24); + return ret; + } + if(fake->__kind!=KIND_SIGN) { + printf_log(LOG_NONE, "BOX32: Warning, fallback on alligned mutex %p\n", m); + errno = EINVAL; + return -1; + } + pthread_mutex_t *n = from_ptrv(fake->real_mutex); + int ret = pthread_mutex_destroy(n); + box_free(n); + fake->__kind = fake->i386__kind = -1; + return ret; +} + +EXPORT int my32_pthread_mutexattr_init(x64emu_t* emu, pthread_mutexattr_t* att) +{ + // mutexattr is 4 bytes on x86, but 8 on 64bits platforms... + uint32_t save = att?(((uint32_t*)att)[1]):0; + int ret = pthread_mutexattr_init(att); + if(att) ((uint32_t*)att)[1] = save; + return ret; +} + +EXPORT int my32___pthread_mutex_destroy(pthread_mutex_t *m) __attribute__((alias("my32_pthread_mutex_destroy"))); + +EXPORT int my32_pthread_mutex_init(pthread_mutex_t *m, pthread_mutexattr_t *att) +{ + fakse_phtread_mutex_t* fake = (fakse_phtread_mutex_t*)m; + if(fake->__kind==0 && !att) { + fake->__lock = 0; + fake->__count = 0; + fake->i386__kind = 0; + fake->__owner = 0; + return 0; + } + if(fake->__kind==KIND_SIGN) + return pthread_mutex_init(from_ptrv(fake->real_mutex), att); + fake->__lock = 0; + fake->__count = 0; + fake->__kind = KIND_SIGN; + fake->real_mutex = to_ptrv(createNewMutex()); + int ret = pthread_mutex_init(from_ptrv(fake->real_mutex), att); + fake->i386__kind = ((struct __pthread_mutex_s*)from_ptrv(fake->real_mutex))->__kind; + return ret; +} +EXPORT int my32___pthread_mutex_init(pthread_mutex_t *m, pthread_mutexattr_t *att) __attribute__((alias("my32_pthread_mutex_init"))); + +EXPORT int my32_pthread_mutex_lock(pthread_mutex_t *m) +{ + return pthread_mutex_lock(getAlignedMutex(m)); +} +EXPORT int my32___pthread_mutex_lock(pthread_mutex_t *m) __attribute__((alias("my32_pthread_mutex_lock"))); + +EXPORT int my32_pthread_mutex_timedlock(pthread_mutex_t *m, const struct timespec * t) +{ + return pthread_mutex_timedlock(getAlignedMutex(m), t); +} + +EXPORT int my32_pthread_mutex_trylock(pthread_mutex_t *m) +{ + return pthread_mutex_trylock(getAlignedMutex(m)); +} +EXPORT int my32___pthread_mutex_trylock(pthread_mutex_t *m) __attribute__((alias("my32_pthread_mutex_trylock"))); + +EXPORT int my32_pthread_mutex_unlock(pthread_mutex_t *m) +{ + return pthread_mutex_unlock(getAlignedMutex(m)); +} +EXPORT int my32___pthread_mutex_unlock(pthread_mutex_t *m) __attribute__((alias("my32_pthread_mutex_unlock"))); + +static int done = 0; +void init_pthread_helper_32() +{ + if(done) + return; + done = 1; + real_pthread_cleanup_push_defer = (vFppp_t)dlsym(NULL, "_pthread_cleanup_push_defer"); + real_pthread_cleanup_pop_restore = (vFpi_t)dlsym(NULL, "_pthread_cleanup_pop_restore"); + + // search for older symbol for pthread_kill + { + char buff[50]; + for(int i=0; i<34 && !real_phtread_kill_old; ++i) { + snprintf(buff, 50, "GLIBC_2.%d", i); + real_phtread_kill_old = (iFLi_t)dlvsym(NULL, "pthread_kill", buff); + } + } + if(!real_phtread_kill_old) { + printf_log(LOG_INFO, "Warning, older than 2.34 pthread_kill not found, using current one\n"); + real_phtread_kill_old = (iFLi_t)pthread_kill; + } + + mapcond = kh_init(mapcond); +} + +void clean_current_emuthread_32() +{ + emuthread_t *et = (emuthread_t*)thread_get_et(); + if(et) { + emuthread_destroy(et); + thread_set_et(NULL); + } +} + +void fini_pthread_helper_32(box64context_t* context) +{ + if(!done) + return; + done = 0; + //CleanStackSize(context); + pthread_cond_t *cond; + kh_foreach_value(mapcond, cond, + pthread_cond_destroy(cond); + box_free(cond); + ); + kh_destroy(mapcond, mapcond); + mapcond = NULL; + + clean_current_emuthread_32(); +} diff --git a/src/mallochook.c b/src/mallochook.c index 4c636dd4132afc2d956c401d7c83b35051dc33f6..474972eee23e26b5f8a951459fd4310224e2f1ac 100644 --- a/src/mallochook.c +++ b/src/mallochook.c @@ -182,13 +182,64 @@ SUPER() #undef GO2 #undef GO +#ifdef BOX32 +int isCustomAddr(void* p); +#define SPACE32 (void*)0x100000000LL +void* box32_calloc(size_t n, size_t s) +{ + void* ret = box_calloc(n, s); + if(retbox64_pagesize) s-=box64_pagesize; else s=0;} memcpy(ret, p, s); @@ -233,23 +284,28 @@ EXPORT void* realloc(void* p, size_t s) } return ret; } - return box_realloc(p, s); + return actual_realloc(p, s); } -EXPORT void* aligned_alloc(size_t align, size_t size) +EXPORT void* memalign(size_t align, size_t size) { if(malloc_hack_2 && ALLOC && real_aligned_alloc) { return (void*)RunFunctionFmt(real_aligned_alloc, "LL", align, size); } - return box_memalign(align, size); + if(box64_is32bits && align==4) + align = sizeof(void*); + return actual_memalign(align, size); } -EXPORT void* memalign(size_t align, size_t size) +EXPORT void* aligned_alloc(size_t align, size_t size) { if(malloc_hack_2 && ALLOC && real_aligned_alloc) { return (void*)RunFunctionFmt(real_aligned_alloc, "LL", align, size); } - return box_memalign(align, size); + if(box64_is32bits && align==4) { + return memalign(align, size); + } + return actual_memalign(align, size); } EXPORT int posix_memalign(void** p, size_t align, size_t size) @@ -257,9 +313,11 @@ EXPORT int posix_memalign(void** p, size_t align, size_t size) if(malloc_hack_2 && ALLOC && real_posix_memalign) { return RunFunctionFmt(real_posix_memalign, "pLL", p, align, size); } - if(align%sizeof(void*) || pot(align)!=align) + if(box64_is32bits && align==4) + align = sizeof(void*); + if((align%sizeof(void*)) || (pot(align)!=align)) return EINVAL; - void* ret = box_memalign(align, size); + void* ret = actual_memalign(align, size); if(!ret) return ENOMEM; *p = ret; @@ -271,7 +329,7 @@ EXPORT void* valloc(size_t size) if(malloc_hack_2 && ALLOC && real_valloc) { return (void*)RunFunctionFmt(real_valloc, "L", size); } - return box_memalign(box64_pagesize, size); + return actual_memalign(box64_pagesize, size); } EXPORT void* pvalloc(size_t size) @@ -279,7 +337,7 @@ EXPORT void* pvalloc(size_t size) if(malloc_hack_2 && ALLOC && real_pvalloc) { return (void*)RunFunctionFmt(real_pvalloc, "L", size); } - return box_memalign(box64_pagesize, (size+box64_pagesize-1)&~(box64_pagesize-1)); + return actual_memalign(box64_pagesize, (size+box64_pagesize-1)&~(box64_pagesize-1)); } EXPORT void cfree(void* p) @@ -293,7 +351,7 @@ EXPORT void cfree(void* p) return; } } - box_free(p); + actual_free(p); } EXPORT size_t malloc_usable_size(void* p) @@ -302,7 +360,7 @@ EXPORT size_t malloc_usable_size(void* p) if(getMmapped((uintptr_t)p)) return RunFunctionFmt(real_malloc_usable_size, "p", p); } - return box_malloc_usable_size(p); + return actual_malloc_usable_size(p); } EXPORT void* my__Znwm(size_t sz) //operator new(size_t) @@ -310,7 +368,7 @@ EXPORT void* my__Znwm(size_t sz) //operator new(size_t) if(malloc_hack_2 && real__Znwm) { return (void*)RunFunctionFmt(real__Znwm, "L", sz); } - return box_malloc(sz); + return actual_malloc(sz); } EXPORT void* my__ZnwmRKSt9nothrow_t(size_t sz, void* p) //operator new(size_t, std::nothrow_t const&) @@ -318,7 +376,7 @@ EXPORT void* my__ZnwmRKSt9nothrow_t(size_t sz, void* p) //operator new(size_t, if(malloc_hack_2 && real__ZnwmRKSt9nothrow_t) { return (void*)RunFunctionFmt(real__ZnwmRKSt9nothrow_t, "Lp", sz, p); } - return box_malloc(sz); + return actual_malloc(sz); } EXPORT void* my__Znam(size_t sz) //operator new[](size_t) @@ -326,7 +384,7 @@ EXPORT void* my__Znam(size_t sz) //operator new[](size_t) if(malloc_hack_2 && real__Znam) { return (void*)RunFunctionFmt(real__Znam, "L", sz); } - return box_malloc(sz); + return actual_malloc(sz); } EXPORT void* my__ZnamRKSt9nothrow_t(size_t sz, void* p) //operator new[](size_t, std::nothrow_t const&) @@ -334,7 +392,7 @@ EXPORT void* my__ZnamRKSt9nothrow_t(size_t sz, void* p) //operator new[](size_ if(malloc_hack_2 && real__ZnamRKSt9nothrow_t) { return (void*)RunFunctionFmt(real__ZnamRKSt9nothrow_t, "Lp", sz, p); } - return box_malloc(sz); + return actual_malloc(sz); } @@ -349,7 +407,7 @@ EXPORT void my__ZdaPv(void* p) //operator delete[](void*) return; } } - box_free(p); + actual_free(p); } EXPORT void my__ZdaPvm(void* p, size_t sz) //operator delete[](void*, size_t) @@ -363,7 +421,7 @@ EXPORT void my__ZdaPvm(void* p, size_t sz) //operator delete[](void*, size_t) return; } } - box_free(p); + actual_free(p); } EXPORT void my__ZdaPvmSt11align_val_t(void* p, size_t sz, size_t align) //operator delete[](void*, unsigned long, std::align_val_t) @@ -377,7 +435,7 @@ EXPORT void my__ZdaPvmSt11align_val_t(void* p, size_t sz, size_t align) //oper return; } } - box_free(p); + actual_free(p); } EXPORT void my__ZdlPv(void* p) //operator delete(void*) @@ -391,7 +449,7 @@ EXPORT void my__ZdlPv(void* p) //operator delete(void*) return; } } - box_free(p); + actual_free(p); } EXPORT void my__ZdlPvm(void* p, size_t sz) //operator delete(void*, size_t) @@ -405,7 +463,7 @@ EXPORT void my__ZdlPvm(void* p, size_t sz) //operator delete(void*, size_t) return; } } - box_free(p); + actual_free(p); } EXPORT void* my__ZnwmSt11align_val_t(size_t sz, size_t align) //// operator new(unsigned long, std::align_val_t) @@ -413,7 +471,7 @@ EXPORT void* my__ZnwmSt11align_val_t(size_t sz, size_t align) //// operator new if(malloc_hack_2 && real__ZnwmSt11align_val_t) { return (void*)RunFunctionFmt(real__ZnwmSt11align_val_t, "LL", sz, align); } - return box_memalign(align, sz); + return actual_memalign(align, sz); } EXPORT void* my__ZnwmSt11align_val_tRKSt9nothrow_t(size_t sz, size_t align, void* p) //// operator new(unsigned long, std::align_val_t, std::nothrow_t const&) @@ -421,7 +479,7 @@ EXPORT void* my__ZnwmSt11align_val_tRKSt9nothrow_t(size_t sz, size_t align, void if(malloc_hack_2 && real__ZnwmSt11align_val_tRKSt9nothrow_t) { return (void*)RunFunctionFmt(real__ZnwmSt11align_val_tRKSt9nothrow_t, "LLp", sz, align, p); } - return box_memalign(align, sz); + return actual_memalign(align, sz); } EXPORT void* my__ZnamSt11align_val_t(size_t sz, size_t align) //// operator new[](unsigned long, std::align_val_t) @@ -429,7 +487,7 @@ EXPORT void* my__ZnamSt11align_val_t(size_t sz, size_t align) //// operator new if(malloc_hack_2 && real__ZnamSt11align_val_t) { return (void*)RunFunctionFmt(real__ZnamSt11align_val_t, "LL", sz, align); } - return box_memalign(align, sz); + return actual_memalign(align, sz); } EXPORT void* my__ZnamSt11align_val_tRKSt9nothrow_t(size_t sz, size_t align, void* p) //// operator new[](unsigned long, std::align_val_t, std::nothrow_t const&) @@ -437,7 +495,7 @@ EXPORT void* my__ZnamSt11align_val_tRKSt9nothrow_t(size_t sz, size_t align, void if(malloc_hack_2 && real__ZnamSt11align_val_tRKSt9nothrow_t) { return (void*)RunFunctionFmt(real__ZnamSt11align_val_tRKSt9nothrow_t, "LLp", sz, align, p); } - return box_memalign(align, sz); + return actual_memalign(align, sz); } EXPORT void my__ZdlPvRKSt9nothrow_t(void* p, void* n) //operator delete(void*, std::nothrow_t const&) @@ -451,7 +509,7 @@ EXPORT void my__ZdlPvRKSt9nothrow_t(void* p, void* n) //operator delete(void*, return; } } - box_free(p); + actual_free(p); } EXPORT void my__ZdaPvSt11align_val_tRKSt9nothrow_t(void* p, size_t align, void* n) //operator delete[](void*, std::align_val_t, std::nothrow_t const&) @@ -466,7 +524,7 @@ EXPORT void my__ZdaPvSt11align_val_tRKSt9nothrow_t(void* p, size_t align, void* return; } } - box_free(p); + actual_free(p); } EXPORT void my__ZdlPvmSt11align_val_t(void* p, size_t sz, size_t align) //operator delete(void*, unsigned long, std::align_val_t) @@ -480,7 +538,7 @@ EXPORT void my__ZdlPvmSt11align_val_t(void* p, size_t sz, size_t align) //oper return; } } - box_free(p); + actual_free(p); } EXPORT void my__ZdaPvRKSt9nothrow_t(void* p, void* n) //operator delete[](void*, std::nothrow_t const&) @@ -494,7 +552,7 @@ EXPORT void my__ZdaPvRKSt9nothrow_t(void* p, void* n) //operator delete[](void return; } } - box_free(p); + actual_free(p); } EXPORT void my__ZdaPvSt11align_val_t(void* p, size_t align) //operator delete[](void*, std::align_val_t) @@ -508,7 +566,7 @@ EXPORT void my__ZdaPvSt11align_val_t(void* p, size_t align) //operator delete[ return; } } - box_free(p); + actual_free(p); } EXPORT void my__ZdlPvSt11align_val_t(void* p, size_t align) //operator delete(void*, std::align_val_t) @@ -522,7 +580,7 @@ EXPORT void my__ZdlPvSt11align_val_t(void* p, size_t align) //operator delete( return; } } - box_free(p); + actual_free(p); } EXPORT void my__ZdlPvSt11align_val_tRKSt9nothrow_t(void* p, size_t align, void* n) //operator delete(void*, std::align_val_t, std::nothrow_t const&) @@ -536,92 +594,92 @@ EXPORT void my__ZdlPvSt11align_val_tRKSt9nothrow_t(void* p, size_t align, void* return; } } - box_free(p); + actual_free(p); } EXPORT void* my_tc_calloc(size_t n, size_t s) { - return box_calloc(n, s); + return actual_calloc(n, s); } EXPORT void my_tc_cfree(void* p) { - box_free(p); + actual_free(p); } EXPORT void my_tc_delete(void* p) { - box_free(p); + actual_free(p); } EXPORT void my_tc_deletearray(void* p) { - box_free(p); + actual_free(p); } EXPORT void my_tc_deletearray_nothrow(void* p, void* n) { - box_free(p); + actual_free(p); } EXPORT void my_tc_delete_nothrow(void* p, void* n) { - box_free(p); + actual_free(p); } EXPORT void my_tc_free(void* p) { - box_free(p); + actual_free(p); } EXPORT void* my_tc_malloc(size_t s) { - return box_calloc(1, s); + return actual_calloc(1, s); } EXPORT size_t my_tc_malloc_size(void* p) { - return box_malloc_usable_size(p); + return actual_malloc_usable_size(p); } EXPORT void* my_tc_new(size_t s) { - return box_calloc(1, s); + return actual_calloc(1, s); } EXPORT void* my_tc_new_nothrow(size_t s, void* n) { - return box_calloc(1, s); + return actual_calloc(1, s); } EXPORT void* my_tc_newarray(size_t s) { - return box_calloc(1, s); + return actual_calloc(1, s); } EXPORT void* my_tc_newarray_nothrow(size_t s, void* n) { - return box_calloc(1, s); + return actual_calloc(1, s); } EXPORT void* my_tc_pvalloc(size_t size) { - return box_memalign(box64_pagesize, (size+box64_pagesize-1)&~(box64_pagesize-1)); + return actual_memalign(box64_pagesize, (size+box64_pagesize-1)&~(box64_pagesize-1)); } EXPORT void* my_tc_valloc(size_t size) { - return box_memalign(box64_pagesize, size); + return actual_memalign(box64_pagesize, size); } EXPORT void* my_tc_memalign(size_t align, size_t size) { - return box_memalign(align, size); + return actual_memalign(align, size); } EXPORT void* my_tc_malloc_skip_new_handler_weak(size_t s) { - return box_calloc(1, s); + return actual_calloc(1, s); } EXPORT int my_tc_mallocopt(int param, int value) @@ -646,13 +704,13 @@ EXPORT int my_tc_set_new_mode(int mode) */ EXPORT void* my_tc_malloc_skip_new_handler(size_t s) { - return box_calloc(1, s); + return actual_calloc(1, s); } EXPORT void* my_tc_mallinfo(void* p) { // ignored, returning null stuffs - memset(p, 0, sizeof(size_t)*10); + memset(p, 0, (box64_is32bits?sizeof(ptr_t):sizeof(size_t))*10); return p; } @@ -660,7 +718,7 @@ EXPORT int my_tc_posix_memalign(void** p, size_t align, size_t size) { if(align%sizeof(void*) || pot(align)!=align) return EINVAL; - void* ret = box_memalign(align, size); + void* ret = actual_memalign(align, size); if(!ret) return ENOMEM; *p = ret; @@ -669,7 +727,7 @@ EXPORT int my_tc_posix_memalign(void** p, size_t align, size_t size) EXPORT void* my_tc_realloc(void* p, size_t s) { - return box_realloc(p, s); + return actual_realloc(p, s); } /* EXPORT int my_tc_version(int i) @@ -685,34 +743,34 @@ EXPORT void* my_safer_scalable_aligned_realloc(void* p, size_t size, size_t alig return NULL; } if(align <= 8) - return box_realloc(p, size); - size_t old_size = box_malloc_usable_size(p); + return actual_realloc(p, size); + size_t old_size = actual_malloc_usable_size(p); if(old_size>=size) return p; - void* new_p = box_memalign(align, size); + void* new_p = actual_memalign(align, size); memcpy(new_p, p, (old_size=size) return p; - void* new_p = box_memalign(align, size); + void* new_p = actual_memalign(align, size); memcpy(new_p, p, (old_sizenumSymTab; ++i) { - int type = ELF64_ST_TYPE(h->SymTab[i].st_info); - int sz = ELF64_ST_TYPE(h->SymTab[i].st_size); - if(type==STT_FUNC && sz) { - const char * symname = h->StrTab+h->SymTab[i].st_name; + int type = ELF64_ST_TYPE(h->SymTab._64[i].st_info); + int sz = ELF64_ST_TYPE(h->SymTab._64[i].st_size); + if((type==STT_FUNC) && sz && (h->SymTab._64[i].st_shndx!=0 && h->SymTab._64[i].st_shndx<=65521)) { + const char * symname = h->StrTab+h->SymTab._64[i].st_name; #define GO(A, B) if(!strcmp(symname, #A)) ++hooked; else if(!strcmp(symname, "__libc_" #A)) ++hooked; #define GO2(A, B) SUPER() @@ -790,14 +852,14 @@ void checkHookedSymbols(elfheader_t* h) } if(hooked<2) { for (size_t i=0; inumDynSym && hooked<2; ++i) { - const char * symname = h->DynStr+h->DynSym[i].st_name; - int bind = ELF64_ST_BIND(h->DynSym[i].st_info); - int type = ELF64_ST_TYPE(h->DynSym[i].st_info); - int vis = h->DynSym[i].st_other&0x3; + const char * symname = h->DynStr+h->DynSym._64[i].st_name; + int bind = ELF64_ST_BIND(h->DynSym._64[i].st_info); + int type = ELF64_ST_TYPE(h->DynSym._64[i].st_info); + int vis = h->DynSym._64[i].st_other&0x3; if((type==STT_FUNC) - && (vis==STV_DEFAULT || vis==STV_PROTECTED) && (h->DynSym[i].st_shndx!=0 && h->DynSym[i].st_shndx<=65521)) { - uintptr_t offs = h->DynSym[i].st_value + h->delta; - size_t sz = h->DynSym[i].st_size; + && (vis==STV_DEFAULT || vis==STV_PROTECTED) && (h->DynSym._64[i].st_shndx!=0 && h->DynSym._64[i].st_shndx<=65521)) { + uintptr_t offs = h->DynSym._64[i].st_value + h->delta; + size_t sz = h->DynSym._64[i].st_size; if(bind!=STB_LOCAL && bind!=STB_WEAK && sz>=sizeof(reloc_jmp_t)) { #define GO(A, B) if(!strcmp(symname, #A)) ++hooked; else if(!strcmp(symname, "__libc_" #A)) ++hooked; #define GO2(A, B) @@ -814,11 +876,11 @@ void checkHookedSymbols(elfheader_t* h) printf_log(LOG_INFO, "Redirecting overridden malloc%s from %s function for %s\n", malloc_hack_2?" with hack":"", hooked_symtab?"symtab":"dynsym", ElfName(h)); if(hooked_symtab) { for (size_t i=0; inumSymTab; ++i) { - int type = ELF64_ST_TYPE(h->SymTab[i].st_info); + int type = ELF64_ST_TYPE(h->SymTab._64[i].st_info); if(type==STT_FUNC) { - const char * symname = h->StrTab+h->SymTab[i].st_name; - uintptr_t offs = h->SymTab[i].st_value + h->delta; - size_t sz = h->SymTab[i].st_size; + const char * symname = h->StrTab+h->SymTab._64[i].st_name; + uintptr_t offs = h->SymTab._64[i].st_value + h->delta; + size_t sz = h->SymTab._64[i].st_size; #define GO(A, B) if(!strcmp(symname, "__libc_" #A)) {uintptr_t alt = AddCheckBridge(my_context->system, B, A, 0, #A); printf_log(LOG_DEBUG, "Redirecting %s function from %p (%s)\n", symname, (void*)offs, ElfName(h)); addRelocJmp((void*)offs, (void*)alt, sz, "__libc_" #A, h, NULL);} #define GO2(A, B) SUPER() @@ -833,14 +895,14 @@ void checkHookedSymbols(elfheader_t* h) } } else { for (size_t i=0; inumDynSym; ++i) { - const char * symname = h->DynStr+h->DynSym[i].st_name; - int bind = ELF64_ST_BIND(h->DynSym[i].st_info); - int type = ELF64_ST_TYPE(h->DynSym[i].st_info); - int vis = h->DynSym[i].st_other&0x3; + const char * symname = h->DynStr+h->DynSym._64[i].st_name; + int bind = ELF64_ST_BIND(h->DynSym._64[i].st_info); + int type = ELF64_ST_TYPE(h->DynSym._64[i].st_info); + int vis = h->DynSym._64[i].st_other&0x3; if((type==STT_FUNC) - && (vis==STV_DEFAULT || vis==STV_PROTECTED) && (h->DynSym[i].st_shndx!=0 && h->DynSym[i].st_shndx<=65521)) { - uintptr_t offs = h->DynSym[i].st_value + h->delta; - size_t sz = h->DynSym[i].st_size; + && (vis==STV_DEFAULT || vis==STV_PROTECTED) && (h->DynSym._64[i].st_shndx!=0 && h->DynSym._64[i].st_shndx<=65521)) { + uintptr_t offs = h->DynSym._64[i].st_value + h->delta; + size_t sz = h->DynSym._64[i].st_size; if(bind!=STB_LOCAL && bind!=STB_WEAK) { #define GO(A, B) if(!strcmp(symname, "__libc_" #A)) {uintptr_t alt = AddCheckBridge(my_context->system, B, A, 0, #A); printf_log(LOG_DEBUG, "Redirecting %s function from %p (%s)\n", symname, (void*)offs, ElfName(h)); addRelocJmp((void*)offs, (void*)alt, sz, "__libc_" #A, h, NULL);} #define GO2(A, B) diff --git a/src/rv64detect.c b/src/rv64detect.c index 01f36fcc5e223e252d5be2cb098b48210cbfed26..b0664b05c951ef76c98552526c0b8c4d2c637139 100644 --- a/src/rv64detect.c +++ b/src/rv64detect.c @@ -68,12 +68,18 @@ void RV64_Detect_Function() BR(xRA); rv64_zbs = Check(my_block); - // Test Vector v1.0 with CSRR zero, vcsr block = (uint32_t*)my_block; - CSRRS(xZR, xZR, 0x00f); + CSRRS(xZR, xZR, 0xc22 /* vlenb */); BR(xRA); rv64_vector = Check(my_block); + if (rv64_vector) { + block = (uint32_t*)my_block; + CSRRS(xZR, xZR, 0x00f /* vcsr */); // vcsr does not exists in xtheadvector + BR(xRA); + rv64_xtheadvector = !Check(my_block); + } + if (rv64_vector) { int vlenb = 0; asm volatile("csrr %0, 0xc22" : "=r"(vlenb)); diff --git a/src/steam.c b/src/steam.c index 52461a310a25e0b8c34124f10b16571cbcaf04f5..c32de63bd094d4ea7768418b67450d7d549474f1 100644 --- a/src/steam.c +++ b/src/steam.c @@ -39,13 +39,13 @@ void pressure_vessel(int argc, const char** argv, int nextarg, const char* prog) if(is_usr) { // transform RESSURE_VESSEL_APP_LD_LIBRARY_PATH to BOX86_ / BOX64_ LD_LIBRARY_PATH char tmp[strlen(argv[nextarg])+150]; - strcpy(tmp, "BOX86_LD_LIBRARY_PATH=/lib/box86:/usr/lib/box86:/lib/i386-linux-gnu:/usr/lib/i386-linux-gnu:/usr/lib/i686-pc-linux-gnu:/usr/lib32:"); + strcpy(tmp, "BOX86_LD_LIBRARY_PATH=/lib/box86:/usr/lib/box86:/lib/i386-linux-gnu:/usr/lib/i386-linux-gnu:/usr/lib/box64-i386-linux-gnu:/usr/lib/i686-pc-linux-gnu:/usr/lib32:"); strcat(tmp, argv[nextarg]+strlen("--env-if-host=STEAM_RUNTIME_LIBRARY_PATH=")); char *p = strchr(tmp, '='); *p ='\0'; ++p; setenv(tmp, p, 1); printf_log(LOG_DEBUG, "setenv(%s, %s, 1)\n", tmp, p); - strcpy(tmp, "BOX64_LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:"); + strcpy(tmp, "BOX64_LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/box64-x86_64-linux-gnu:"); strcat(tmp, argv[nextarg]+strlen("--env-if-host=STEAM_RUNTIME_LIBRARY_PATH=")); p = strchr(tmp, '='); *p ='\0'; ++p; @@ -137,10 +137,11 @@ void pressure_vessel(int argc, const char** argv, int nextarg, const char* prog) my_context = NewBox64Context(argc - nextarg); int x86 = my_context->box86path?FileIsX86ELF(argv[nextarg]):0; int x64 = my_context->box64path?FileIsX64ELF(argv[nextarg]):0; + int sh = my_context->bashpath?FileIsShell(argv[nextarg]):0; // create the new argv array const char** newargv = (const char**)box_calloc((argc-nextarg)+1+((x86 || x64)?1:0), sizeof(char*)); - if(x86 || x64) { - newargv[0] = x64?my_context->box64path:my_context->box86path; + if(x86 || x64 || sh) { + newargv[0] = x86?my_context->box86path:my_context->box64path; printf_log(LOG_DEBUG, "argv[%d]=\"%s\"\n", 0, newargv[0]); for(int i=nextarg; i +#include +#include +#include +#include + +#include "box64stack.h" +#include "box64context.h" +#include "elfloader.h" +#include "debug.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "auxval.h" +#include "custommem.h" +#include "box32.h" + +static void PushString32(x64emu_t *emu, const char* s) +{ + int sz = strlen(s) + 1; + // round to 4 bytes boundary + R_ESP -= sz; + memcpy(from_ptrv(R_ESP), s, sz); +} + +static void Push32_32(x64emu_t *emu, uint32_t v) +{ + R_ESP -= 4; + *((uint32_t*)from_ptr(R_ESP)) = v; +} + + +EXPORTDYN +void SetupInitialStack32(x64emu_t *emu) +{ + // start with 0 + Push32_32(emu, 0); + // push program executed + PushString32(emu, emu->context->argv[0]); + uintptr_t p_arg0 = from_ptr(R_ESP); + // push envs + uintptr_t p_envv[emu->context->envc]; + for (int i=emu->context->envc-1; i>=0; --i) { + PushString32(emu, emu->context->envv[i]); + p_envv[i] = from_ptr(R_ESP); + } + // push args, also, free the argv[] string and point to the one in the main stack + uintptr_t p_argv[emu->context->argc]; + for (int i=emu->context->argc-1; i>=0; --i) { + PushString32(emu, emu->context->argv[i]); + p_argv[i] = R_ESP; + box_free(emu->context->argv[i]); + emu->context->argv[i] = (char*)p_argv[i]; + } + // align + uintptr_t tmp = from_ptr(R_ESP)&~(emu->context->stackalign-1); + memset((void*)tmp, 0, from_ptr(R_ESP)-tmp); + R_ESP=to_ptr(tmp); + + // push some AuxVector stuffs + PushString32(emu, "i686"); + uintptr_t p_i686 = from_ptr(R_ESP); + uintptr_t p_random = real_getauxval(25); + if(!p_random) { + for (int i=0; i<4; ++i) + Push32_32(emu, random()); + p_random = from_ptr(R_ESP); + } + // align + tmp = (R_ESP)&~(emu->context->stackalign-1); + memset((void*)tmp, 0, from_ptr(R_ESP)-tmp); + R_ESP=tmp; + + // push the AuxVector themselves + /* + 00: 00000000 + 03: 08048034 + 04: 00000020 + 05: 0000000b + 06: 00001000 + 07: f7fc0000 + 08: 00000000 + 09: 08049060 + 11: 000003e8 + 12: 000003e8 + 13: 000003e8 + 14: 000003e8 + 15: ffd8aa5b/i686 + 16: bfebfbff + 17: 00000064 + 23: 00000000 + 25: ffd8aa4b + 26: 00000000 + 31: ffd8bfeb/./testAuxVec + 32: f7fbfb40 + 33: f7fbf000 + */ + Push32_32(emu, 0); Push32_32(emu, 0); //AT_NULL(0)=0 + //Push32_32(emu, ); Push32_32(emu, 3); //AT_PHDR(3)=address of the PH of the executable + //Push32_32(emu, ); Push32_32(emu, 4); //AT_PHENT(4)=size of PH entry + //Push32_32(emu, ); Push32_32(emu, 5); //AT_PHNUM(5)=number of elf headers + Push32_32(emu, box64_pagesize); Push32_32(emu, 6); //AT_PAGESZ(6) + //Push32_32(emu, real_getauxval(7)); Push32_32(emu, 7); //AT_BASE(7)=ld-2.27.so start (in memory) + Push32_32(emu, 0); Push32_32(emu, 8); //AT_FLAGS(8)=0 + Push32_32(emu, R_EIP); Push32_32(emu, 9); //AT_ENTRY(9)=entrypoint + Push32_32(emu, from_ulong(real_getauxval(11))); Push32_32(emu, 11); //AT_UID(11) + Push32_32(emu, from_ulong(real_getauxval(12))); Push32_32(emu, 12); //AT_EUID(12) + Push32_32(emu, from_ulong(real_getauxval(13))); Push32_32(emu, 13); //AT_GID(13) + Push32_32(emu, from_ulong(real_getauxval(14))); Push32_32(emu, 14); //AT_EGID(14) + Push32_32(emu, p_i686); Push32_32(emu, 15); //AT_PLATFORM(15)=&"i686" + // Push HWCAP: + // FPU: 1<<0 ; VME: 1<<1 ; DE : 1<<2 ; PSE: 1<<3 ; TSC: 1<<4 ; MSR: 1<<5 ; PAE: 1<<6 ; MCE: 1<<7 + // CX8: 1<<8 ; APIC:1<<9 ; SEP: 1<<11; MTRR:1<<12; PGE: 1<<13; MCA: 1<<14; CMOV:1<<15 + // FCMOV:1<<16; MMX: 1<<23 + // OSFXR:1<<24; XMM: 1<<25;XMM2: 1<<26; AMD3D:1<<31 + Push32_32(emu, (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<8) | (1<<15) | (1<<16) | (1<<23) | (1<<25) | (1<<26)); + Push32_32(emu, 16); //AT_HWCAP(16)=... + //Push32_32(emu, sysconf(_SC_CLK_TCK)); Push32_32(emu, 17); //AT_CLKTCK(17)=times() frequency + Push32_32(emu, from_ulong(real_getauxval(23))); Push32_32(emu, 23); //AT_SECURE(23) + Push32_32(emu, p_random); Push32_32(emu, 25); //AT_RANDOM(25)=p_random + Push32_32(emu, 0); Push32_32(emu, 26); //AT_HWCAP2(26)=0 + Push32_32(emu, p_arg0); Push32_32(emu, 31); //AT_EXECFN(31)=p_arg0 + Push32_32(emu, emu->context->vsyscall); Push32_32(emu, 32); //AT_SYSINFO(32)=vsyscall + //Push32_32(emu, ); Push32_32(emu, 33); //AT_SYSINFO_EHDR(33)=address of vDSO + if(!emu->context->auxval_start) // store auxval start if needed + emu->context->auxval_start = (uintptr_t*)from_ptr(R_ESP); + + // push nil / envs / nil / args / argc + Push32_32(emu, 0); + for (int i=emu->context->envc-1; i>=0; --i) + Push32_32(emu, to_ptr(p_envv[i])); + emu->context->envv32 = R_ESP; + Push32_32(emu, 0); + for (int i=emu->context->argc-1; i>=0; --i) + Push32_32(emu, to_ptr(p_argv[i])); + emu->context->argv32 = R_ESP; + Push32_32(emu, emu->context->argc); +} diff --git a/src/tools/box64stack.c b/src/tools/box64stack.c index 7be31b4de37b36381d47c6e3edf224ab10478f89..9036bda477c6f1e5d28aeaec71a9bf8675e0c577 100644 --- a/src/tools/box64stack.c +++ b/src/tools/box64stack.c @@ -22,7 +22,7 @@ int CalcStackSize(box64context_t *context) CalcStack(context->elfs[i], &context->stacksz, &context->stackalign); //if (posix_memalign((void**)&context->stack, context->stackalign, context->stacksz)) { - context->stack = internal_mmap(NULL, context->stacksz, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); + context->stack = mmap(NULL, context->stacksz, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); if (context->stack==(void*)-1) { printf_log(LOG_NONE, "Cannot allocate aligned memory (0x%lx/0x%zx) for stack\n", context->stacksz, context->stackalign); return 1; @@ -42,9 +42,19 @@ void PushString(x64emu_t *emu, const char* s) memcpy((void*)R_RSP, s, sz); } +void SetupInitialStack32(x64emu_t *emu) +#ifndef BOX32 + { } +#else + ; +#endif EXPORTDYN void SetupInitialStack(x64emu_t *emu) { + if(box64_is32bits) { + SetupInitialStack32(emu); + return; + } // start with 0 Push64(emu, 0); // push program executed diff --git a/src/tools/bridge.c b/src/tools/bridge.c index 1c5bde9979cb0bb6245bc8287f1b15db27698f60..23b3a728da0cfec5752b3f1e2034ab99b0089e44 100644 --- a/src/tools/bridge.c +++ b/src/tools/bridge.c @@ -155,22 +155,22 @@ uintptr_t AddAutomaticBridge(bridge_t* bridge, wrapper_t w, void* fnc, int N, co return ret; } -void* GetNativeFnc(uintptr_t fnc) +void* GetNativeOrAlt(void* fnc, void* alt) { if(!fnc) return NULL; // check if function exist in some loaded lib - if(!FindElfAddress(my_context, fnc)) { + if(!FindElfAddress(my_context, (uintptr_t)fnc)) { Dl_info info; - if(dladdr((void*)fnc, &info)) - return (void*)fnc; + if(dladdr(fnc, &info)) + return fnc; } - if(!getProtection(fnc)) - return NULL; + if(!getProtection((uintptr_t)fnc)) + return alt; // check if it's an indirect jump #define PK(a) *(uint8_t*)(fnc+a) #define PK32(a) *(uint32_t*)(fnc+a) if(PK(0)==0xff && PK(1)==0x25) { // "absolute" jump, maybe the GOT (it's a RIP+relative in fact) - uintptr_t a1 = fnc+6+(PK32(2)); // need to add a check to see if the address is from the GOT ! + uintptr_t a1 = (uintptr_t)fnc+6+(PK32(2)); // need to add a check to see if the address is from the GOT ! a1 = *(uintptr_t*)a1; if(a1 && a1>0x10000) { a1 = (uintptr_t)GetNativeFnc(a1); @@ -183,10 +183,13 @@ void* GetNativeFnc(uintptr_t fnc) // check if bridge exist onebridge_t *b = (onebridge_t*)fnc; if(b->CC != 0xCC || b->S!='S' || b->C!='C' || (b->C3!=0xC3 && b->C3!=0xC2)) - return NULL; // not a bridge?! + return alt; // not a bridge?! return (void*)b->f; } - +void* GetNativeFnc(uintptr_t fnc) +{ + return GetNativeOrAlt((void*)fnc, NULL); +} void* GetNativeFncOrFnc(uintptr_t fnc) { onebridge_t *b = (onebridge_t*)fnc; diff --git a/src/tools/callback.c b/src/tools/callback.c index 341a554d59a2aaa382c5ba060fcad5673f4d6d8a..3c58bc6edde4490ab62f620f6d8159ee287e59ab 100644 --- a/src/tools/callback.c +++ b/src/tools/callback.c @@ -12,43 +12,74 @@ #include "box64context.h" #include "box64stack.h" #include "dynarec.h" +#ifdef BOX32 +#include "box32.h" +#endif EXPORTDYN uint64_t RunFunction(uintptr_t fnc, int nargs, ...) { x64emu_t *emu = thread_get_emu(); - int align = (nargs>6)?(((nargs-6)&1)):0; - int stackn = align + ((nargs>6)?(nargs-6):0); - - Push64(emu, R_RBP); // push rbp - R_RBP = R_RSP; // mov rbp, rsp + #ifdef BOX32 + if(box64_is32bits) { + Push_32(emu, R_RBP); // push ebp + R_RBP = R_ESP; // mov ebp, esp - R_RSP -= stackn*sizeof(void*); // need to push in reverse order + R_ESP -= nargs*4+(4-(nargs&3))*4; // need to push in reverse order - uint64_t *p = (uint64_t*)R_RSP; + ptr_t *p = (ptr_t*)from_ptrv(R_ESP); - va_list va; - va_start (va, nargs); - for (int i=0; iregs[nn[i]].q[0] = va_arg(va, uint64_t); - } else { - *p = va_arg(va, uint64_t); + va_list va; + va_start (va, nargs); + for (int i=0; i6)?(((nargs-6)&1)):0; + int stackn = align + ((nargs>6)?(nargs-6):0); + + Push64(emu, R_RBP); // push rbp + R_RBP = R_RSP; // mov rbp, rsp + + R_RSP -= stackn*sizeof(void*); // need to push in reverse order + + uint64_t *p = (uint64_t*)R_RSP; + + va_list va; + va_start (va, nargs); + for (int i=0; iregs[nn[i]].q[0] = va_arg(va, uint64_t); + } else { + *p = va_arg(va, uint64_t); + p++; + } + } + va_end (va); } - va_end (va); uintptr_t oldip = R_RIP; DynaCall(emu, fnc); if(oldip==R_RIP) { - R_RSP = R_RBP; // mov rsp, rbp - R_RBP = Pop64(emu); // pop rbp + #ifdef BOX32 + if(box64_is32bits) { + R_RSP = R_EBP; // mov esp, ebp + R_EBP = Pop_32(emu); // pop ebp + } + #endif + { + R_RSP = R_RBP; // mov rsp, rbp + R_RBP = Pop64(emu); // pop rbp + } } - uint64_t ret = R_RAX; + uint64_t ret = box64_is32bits?((uint64_t)R_EAX | ((uint64_t)R_EDX)<<32):R_RAX; return ret; } @@ -61,6 +92,27 @@ uint64_t RunFunctionFmt(uintptr_t fnc, const char* fmt, ...) int ni = 0; int ndf = 0; for (int i=0; fmt[i]; ++i) { + #ifdef BOX32 + if(box64_is32bits) + switch(fmt[i]) { + case 'd': + case 'I': + case 'U': nargs+=2; break; + case 'p': + case 'L': + case 'l': + case 'f': + case 'i': + case 'u': + case 'w': + case 'W': + case 'c': + case 'C': ++nargs; break; + default: + ++nargs; break; + } + else + #endif switch(fmt[i]) { case 'f': case 'd': if(ndf<8) ++ndf; else ++nargs; break; @@ -83,63 +135,117 @@ uint64_t RunFunctionFmt(uintptr_t fnc, const char* fmt, ...) ndf = 0; int align = nargs&1; int stackn = align + nargs; + int sizeof_ptr = sizeof(void*); + #ifdef BOX32 + if(box64_is32bits) { + Push_32(emu, R_EBP); // push ebp + R_RBP = R_ESP; // mov ebp, esp + sizeof_ptr = sizeof(ptr_t); + align = (4-(nargs&3))&3; + } else + #endif + { + Push64(emu, R_RBP); // push rbp + R_RBP = R_RSP; // mov rbp, rsp + } - Push64(emu, R_RBP); // push rbp - R_RBP = R_RSP; // mov rbp, rsp - - R_RSP -= stackn*sizeof(void*); // need to push in reverse order - - uint64_t *p = (uint64_t*)R_RSP; - - static const int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9}; - #define GO(c, A, B, B2, C) case c: if(ni<6) emu->regs[nn[ni++]].A[0] = C va_arg(va, B2); else {*p = 0; *((B*)p) = va_arg(va, B2); ++p;}; break; - va_list va; - va_start (va, fmt); - for (int i=0; fmt[i]; ++i) { - switch(fmt[i]) { - case 'f': if(ndf<8) - emu->xmm[ndf++].f[0] = va_arg(va, double); // float are promoted to double in ... - else { - *p = 0; - *((float*)p) = va_arg(va, double); - ++p; - } - break; - case 'd': if(ndf<8) - emu->xmm[ndf++].d[0] = va_arg(va, double); - else { - *((double*)p) = va_arg(va, double); - ++p; - } - break; - GO('p', q, void*, void*, (uintptr_t)) - GO('i', sdword, int, int, ) - GO('u', dword, uint32_t, uint32_t, ) - GO('I', sq, int64_t, int64_t, ) - GO('U', q, uint64_t, uint64_t, ) - GO('L', q, uint64_t, uint64_t, ) - GO('l', sq, int64_t, int64_t, ) - GO('w', sword, int16_t, int, ) - GO('W', word, uint16_t, int, ) - GO('c', sbyte, int8_t, int, ) - GO('C', byte, uint8_t, int, ) - default: - printf_log(LOG_NONE, "Error, unhandled arg %d: '%c' in RunFunctionFmt\n", i, fmt[i]); - if(ni<6) emu->regs[nn[ni++]].q[0] = va_arg(va, uint64_t); else {*p = va_arg(va, uint64_t); ++p;}; - break; + R_RSP -= stackn*sizeof_ptr; // need to push in reverse order + + #ifdef BOX32 + if(box64_is32bits) { + ptr_t *p = (ptr_t*)from_ptrv(R_ESP); + + #define GO(c, B, B2, N) case c: *((B*)p) = va_arg(va, B2); p+=N; break + va_list va; + va_start (va, fmt); + for (int i=0; fmt[i]; ++i) { + switch(fmt[i]) { + GO('f', float, double, 1); + GO('d', double, double, 2); + case 'p': *((ptr_t*)p) = to_ptrv(va_arg(va, void*)); p+=1; break; + GO('i', int, int, 1); + GO('u', uint32_t, uint32_t, 1); + GO('I', int64_t, int64_t, 2); + GO('U', uint64_t, uint64_t, 2); + GO('L', uint32_t, uint64_t, 1); // long are 64bits on 64bits system + GO('l', int32_t, int64_t, 1); // but 32bits on 32bits system + GO('w', int16_t, int, 1); + GO('W', uint16_t, int, 1); + GO('c', int8_t, int, 1); + GO('C', uint8_t, int, 1); + default: + printf_log(LOG_NONE, "Error, unhandled arg %d: '%c' in RunFunctionFmt\n", i, fmt[i]); + *p = va_arg(va, uint32_t); + ++p; + break; + } } + #undef GO + va_end (va); + } else + #endif + { + uint64_t *p = (uint64_t*)R_RSP; + + static const int nn[] = {_DI, _SI, _DX, _CX, _R8, _R9}; + #define GO(c, A, B, B2, C) case c: if(ni<6) emu->regs[nn[ni++]].A[0] = C va_arg(va, B2); else {*p = 0; *((B*)p) = va_arg(va, B2); ++p;}; break; + va_list va; + va_start (va, fmt); + for (int i=0; fmt[i]; ++i) { + switch(fmt[i]) { + case 'f': if(ndf<8) + emu->xmm[ndf++].f[0] = va_arg(va, double); // float are promoted to double in ... + else { + *p = 0; + *((float*)p) = va_arg(va, double); + ++p; + } + break; + case 'd': if(ndf<8) + emu->xmm[ndf++].d[0] = va_arg(va, double); + else { + *((double*)p) = va_arg(va, double); + ++p; + } + break; + GO('p', q, void*, void*, (uintptr_t)) + GO('i', sdword, int, int, ) + GO('u', dword, uint32_t, uint32_t, ) + GO('I', sq, int64_t, int64_t, ) + GO('U', q, uint64_t, uint64_t, ) + GO('L', q, uint64_t, uint64_t, ) + GO('l', sq, int64_t, int64_t, ) + GO('w', sword, int16_t, int, ) + GO('W', word, uint16_t, int, ) + GO('c', sbyte, int8_t, int, ) + GO('C', byte, uint8_t, int, ) + default: + printf_log(LOG_NONE, "Error, unhandled arg %d: '%c' in RunFunctionFmt\n", i, fmt[i]); + if(ni<6) emu->regs[nn[ni++]].q[0] = va_arg(va, uint64_t); else {*p = va_arg(va, uint64_t); ++p;}; + break; + } + } + #undef GO + va_end (va); } - va_end (va); uintptr_t oldip = R_RIP; DynaCall(emu, fnc); if(oldip==R_RIP) { - R_RSP = R_RBP; // mov rsp, rbp - R_RBP = Pop64(emu); // pop rbp + #ifdef BOX32 + if(box64_is32bits) { + R_RSP = R_EBP; // mov esp, ebp + R_RBP = Pop_32(emu); // pop ebp + } else + #endif + { + R_RSP = R_RBP; // mov rsp, rbp + R_RBP = Pop64(emu); // pop rbp + } } - uint64_t ret = R_RAX; + uint64_t ret = box64_is32bits?((uint64_t)R_EAX | ((uint64_t)R_EDX)<<32):R_RAX; return ret; } @@ -148,6 +254,10 @@ EXPORTDYN uint64_t RunSafeFunction(uintptr_t fnc, int nargs, ...) { x64emu_t * emu = thread_get_emu(); + if(box64_is32bits) { + printf_log(LOG_NONE, "Calling RunSafeFunction in 32bits\n"); + abort(); + } int align = (nargs>6)?(((nargs-6)&1)):0; int stackn = align + ((nargs>6)?(nargs-6):0); @@ -222,28 +332,48 @@ uint64_t RunSafeFunction(uintptr_t fnc, int nargs, ...) EXPORTDYN uint64_t RunFunctionWithEmu(x64emu_t *emu, int QuitOnLongJump, uintptr_t fnc, int nargs, ...) { - int align = (nargs>6)?(((nargs-6)&1)):0; - int stackn = align + ((nargs>6)?(nargs-6):0); + #ifdef BOX32 + if(box64_is32bits) { + Push_32(emu, R_RBP); // push ebp + R_RBP = R_ESP; // mov ebp, esp - Push64(emu, R_RBP); // push rbp - R_RBP = R_RSP; // mov rbp, rsp + R_ESP -= nargs*4 + ((4-(nargs&3))&3)*4; // need to push in reverse order - R_RSP -= stackn*sizeof(void*); // need to push in reverse order - - uint64_t *p = (uint64_t*)R_RSP; + ptr_t *p = (ptr_t*)from_ptrv(R_ESP); - va_list va; - va_start (va, nargs); - for (int i=0; iregs[nn[i]].q[0] = va_arg(va, uint64_t); - } else { - *p = va_arg(va, uint64_t); + va_list va; + va_start (va, nargs); + for (int i=0; i6)?(((nargs-6)&1)):0; + int stackn = align + ((nargs>6)?(nargs-6):0); + + Push64(emu, R_RBP); // push rbp + R_RBP = R_RSP; // mov rbp, rsp + + R_RSP -= stackn*sizeof(void*); // need to push in reverse order + + uint64_t *p = (uint64_t*)R_RSP; + + va_list va; + va_start (va, nargs); + for (int i=0; iregs[nn[i]].q[0] = va_arg(va, uint64_t); + } else { + *p = va_arg(va, uint64_t); + p++; + } + } + va_end (va); } - va_end (va); uintptr_t oldip = R_RIP; int old_quit = emu->quit; @@ -256,20 +386,29 @@ uint64_t RunFunctionWithEmu(x64emu_t *emu, int QuitOnLongJump, uintptr_t fnc, in if(oldip==R_RIP) { R_RSP = R_RBP; // restore stack only if EIP is the one expected (else, it means return value is not the one expected) - R_RBP = Pop64(emu); //Pop EBP + #ifdef BOX32 + if(box64_is32bits) + R_RBP = Pop_32(emu); //Pop EBP + else + #endif + R_RBP = Pop64(emu); //Pop EBP } emu->quit = old_quit; emu->flags.quitonlongjmp = oldlong; - return R_RAX; + return box64_is32bits?((uint64_t)R_EAX | ((uint64_t)R_EDX)<<32):R_RAX;; } EXPORTDYN uint64_t RunFunctionWindows(uintptr_t fnc, int nargs, ...) { x64emu_t *emu = thread_get_emu(); + if(box64_is32bits) { + printf_log(LOG_NONE, "Calling RunFunctionWindows in 32bits\n"); + abort(); + } int align = (nargs>4)?(((nargs-4)&1)):0; int stackn = align + ((nargs>4)?(nargs-4):0); diff --git a/src/tools/gtkclass.c b/src/tools/gtkclass.c index 34d1803f25c6f50234ef8bb401d48d4b9bc810f2..639a2333a905b895f1f091e94fe10b55f0f97651 100644 --- a/src/tools/gtkclass.c +++ b/src/tools/gtkclass.c @@ -4460,6 +4460,108 @@ static void bridgeGstAudioFilterInstance(my_GstAudioFilter_t* class) { bridgeGstBaseTransformInstance(&class->parent); } +// ----- GstBufferPoolClass ------ +// wrapper x86 -> natives of callbacks +WRAPPER(GstBufferPool, get_options, void*,(void* pool), "p", pool); +WRAPPER(GstBufferPool, set_config, int ,(void* pool, void* config), "pp", pool, config); +WRAPPER(GstBufferPool, start, int ,(void* pool), "p", pool); +WRAPPER(GstBufferPool, stop, int ,(void* pool), "p", pool); +WRAPPER(GstBufferPool, acquire_buffer, int ,(void* pool, void* buffer, void* params), "ppp", pool, buffer, params); +WRAPPER(GstBufferPool, alloc_buffer, int ,(void* pool, void* buffer, void* params), "ppp", pool, buffer, params); +WRAPPER(GstBufferPool, reset_buffer, void ,(void* pool, void* buffer), "pp", pool, buffer); +WRAPPER(GstBufferPool, release_buffer, void ,(void* pool, void* buffer), "pp", pool, buffer); +WRAPPER(GstBufferPool, free_buffer, void ,(void* pool, void* buffer), "pp", pool, buffer); +WRAPPER(GstBufferPool, flush_start, void ,(void* pool), "p", pool); +WRAPPER(GstBufferPool, flush_stop, void ,(void* pool), "p", pool); + +#define SUPERGO() \ + GO(get_options, pFp); \ + GO(set_config, iFpp); \ + GO(start, iFp); \ + GO(stop, iFp); \ + GO(acquire_buffer, iFppp); \ + GO(alloc_buffer, iFppp); \ + GO(reset_buffer, vFpp); \ + GO(release_buffer, vFpp); \ + GO(free_buffer, vFpp); \ + GO(flush_start, vFp); \ + GO(flush_stop, vFp); \ + +// wrap (so bridge all calls, just in case) +static void wrapGstBufferPoolClass(my_GstBufferPoolClass_t* class) +{ + wrapGstObjectClass(&class->object_class); + #define GO(A, W) class->A = reverse_##A##_GstBufferPool (W, class->A) + SUPERGO() + #undef GO +} +// unwrap (and use callback if not a native call anymore) +static void unwrapGstBufferPoolClass(my_GstBufferPoolClass_t* class) +{ + unwrapGstObjectClass(&class->object_class); + #define GO(A, W) class->A = find_##A##_GstBufferPool (class->A) + SUPERGO() + #undef GO +} +// autobridge +static void bridgeGstBufferPoolClass(my_GstBufferPoolClass_t* class) +{ + bridgeGstObjectClass(&class->object_class); + #define GO(A, W) autobridge_##A##_GstBufferPool (W, class->A) + SUPERGO() + #undef GO +} +#undef SUPERGO + +static void unwrapGstBufferPoolInstance(my_GstBufferPool_t* class) +{ + unwrapGstObjectInstance(&class->object); +} +// autobridge +static void bridgeGstBufferPoolInstance(my_GstBufferPool_t* class) +{ + bridgeGstObjectInstance(&class->object); +} +// ----- GstVideoBufferPoolClass ------ +// wrapper x86 -> natives of callbacks + +#define SUPERGO() \ + +// wrap (so bridge all calls, just in case) +static void wrapGstVideoBufferPoolClass(my_GstVideoBufferPoolClass_t* class) +{ + wrapGstBufferPoolClass(&class->parent); + #define GO(A, W) class->A = reverse_##A##_GstVideoBufferPool (W, class->A) + SUPERGO() + #undef GO +} +// unwrap (and use callback if not a native call anymore) +static void unwrapGstVideoBufferPoolClass(my_GstVideoBufferPoolClass_t* class) +{ + unwrapGstBufferPoolClass(&class->parent); + #define GO(A, W) class->A = find_##A##_GstVideoBufferPool (class->A) + SUPERGO() + #undef GO +} +// autobridge +static void bridgeGstVideoBufferPoolClass(my_GstVideoBufferPoolClass_t* class) +{ + bridgeGstBufferPoolClass(&class->parent); + #define GO(A, W) autobridge_##A##_GstBufferPool (W, class->A) + SUPERGO() + #undef GO +} +#undef SUPERGO + +static void unwrapGstVideoBufferPoolInstance(my_GstVideoBufferPool_t* class) +{ + unwrapGstBufferPoolInstance(&class->bufferpool); +} +// autobridge +static void bridgeGstVideoBufferPoolInstance(my_GstVideoBufferPool_t* class) +{ + bridgeGstBufferPoolInstance(&class->bufferpool); +} // ----- GDBusProxyClass ------ // wrapper x86 -> natives of callbacks WRAPPER(GDBusProxy, g_properties_changed, void, (void* proxy, void* changed_properties, const char* const* invalidated_properties), "ppp", proxy, changed_properties, invalidated_properties); @@ -5449,6 +5551,7 @@ my_GtkTypeInfo_t* findFreeGtkTypeInfo(my_GtkTypeInfo_t* fcts, size_t parent) fct_gtk_base_class_init_##A = (uintptr_t)fcts->base_class_init_func; \ return &my_gtktypeinfo_##A; \ } + SUPER() #undef GO printf_log(LOG_NONE, "Warning, no more slot for GtkTypeInfo callback\n"); diff --git a/src/tools/rbtree.c b/src/tools/rbtree.c index 257a404f479dcb40f84fcaa2ec8a89c45c3847f9..32fb440fcb56a0a020b33afca3109b1a31c5431a 100644 --- a/src/tools/rbtree.c +++ b/src/tools/rbtree.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -18,6 +19,8 @@ #endif #endif +static void rbtree_print(const rbtree_t* tree); + typedef struct rbnode { struct rbnode *left, *right, *parent; uintptr_t start, end; @@ -25,25 +28,28 @@ typedef struct rbnode { uint8_t meta; } rbnode; -typedef struct rbtree { +struct rbtree { rbnode *root; - int is_unstable; -} rbtree; + const char* name; + bool is_unstable; +}; -rbtree* init_rbtree() { - rbtree* tree = rbtreeMalloc(sizeof(rbtree)); +rbtree_t* rbtree_init(const char* name) { + rbtree_t* tree = rbtreeMalloc(sizeof(rbtree_t)); tree->root = NULL; - tree->is_unstable = 0; + tree->is_unstable = false; + tree->name = name?name:"(rbtree)"; return tree; } -void delete_rbnode(rbnode *root) { +static inline void delete_rbnode(rbnode *root) { if (!root) return; delete_rbnode(root->left); delete_rbnode(root->right); rbtreeFree(root); } -void delete_rbtree(rbtree *tree) { + +void rbtree_delete(rbtree_t *tree) { delete_rbnode(tree->root); rbtreeFree(tree); } @@ -52,7 +58,7 @@ void delete_rbtree(rbtree *tree) { #define IS_BLACK 0x2 // Make sure prev is either the rightmost node before start or the leftmost range after start -int add_range_next_to(rbtree *tree, rbnode *prev, uintptr_t start, uintptr_t end, uint32_t data) { +static int add_range_next_to(rbtree_t *tree, rbnode *prev, uintptr_t start, uintptr_t end, uint32_t data) { // printf("Adding %lX-%lX:%hhX next to %p\n", start, end, data, prev); rbnode *node = rbtreeMalloc(sizeof(*node)); if (!node) return -1; @@ -65,13 +71,13 @@ int add_range_next_to(rbtree *tree, rbnode *prev, uintptr_t start, uintptr_t end if (tree->is_unstable) { printf_log(LOG_NONE, "Warning, unstable Red-Black tree; trying to add a node anyways\n"); } - tree->is_unstable = 1; + tree->is_unstable = true; if (!tree->root) { node->parent = NULL; node->meta = IS_BLACK; tree->root = node; - tree->is_unstable = 0; + tree->is_unstable = false; return 0; } @@ -88,15 +94,15 @@ int add_range_next_to(rbtree *tree, rbnode *prev, uintptr_t start, uintptr_t end if (!node->parent) { node->meta = IS_BLACK; tree->root = node; - tree->is_unstable = 0; + tree->is_unstable = false; return 0; } if (node->parent->meta & IS_BLACK) { - tree->is_unstable = 0; + tree->is_unstable = false; return 0; } if (!node->parent->parent) { - tree->is_unstable = 0; + tree->is_unstable = false; return 0; // Cannot happen as the root is black, unless the tree is unstable } if (node->parent->meta & IS_LEFT) { @@ -157,7 +163,7 @@ int add_range_next_to(rbtree *tree, rbnode *prev, uintptr_t start, uintptr_t end z->left->parent = z; } if (!y->parent) tree->root = y; - tree->is_unstable = 0; + tree->is_unstable = false; return 0; } } else { @@ -218,15 +224,16 @@ int add_range_next_to(rbtree *tree, rbnode *prev, uintptr_t start, uintptr_t end z->right->parent = z; } if (!y->parent) tree->root = y; - tree->is_unstable = 0; + tree->is_unstable = false; return 0; } } } - tree->is_unstable = 0; + tree->is_unstable = false; return -1; // unreachable } -int add_range(rbtree *tree, uintptr_t start, uintptr_t end, uint32_t data) { + +static int add_range(rbtree_t *tree, uintptr_t start, uintptr_t end, uint32_t data) { // printf("add_range\n"); rbnode *cur = tree->root, *prev = NULL; while (cur) { @@ -237,7 +244,7 @@ int add_range(rbtree *tree, uintptr_t start, uintptr_t end, uint32_t data) { return add_range_next_to(tree, prev, start, end, data); } -rbnode *find_addr(rbtree *tree, uintptr_t addr) { +static rbnode *find_addr(rbtree_t *tree, uintptr_t addr) { rbnode *node = tree->root; while (node) { if ((node->start <= addr) && (node->end > addr)) return node; @@ -248,12 +255,12 @@ rbnode *find_addr(rbtree *tree, uintptr_t addr) { } // node must be a valid node in the tree -int remove_node(rbtree *tree, rbnode *node) { -// printf("Removing %p\n", node); print_rbtree(tree); fflush(stdout); +static int remove_node(rbtree_t *tree, rbnode *node) { +// printf("Removing %p\n", node); rbtree_print(tree); fflush(stdout); if (tree->is_unstable) { printf_log(LOG_NONE, "Warning, unstable Red-Black tree; trying to add a node anyways\n"); } - tree->is_unstable = 1; + tree->is_unstable = true; if (node->left && node->right) { // Swap node and its successor @@ -299,7 +306,7 @@ int remove_node(rbtree *tree, rbnode *node) { if (!parent) { tree->root = child; child->meta |= IS_BLACK; // Needs to be an or - tree->is_unstable = 0; + tree->is_unstable = false; return 0; } else if (node->meta & IS_LEFT) { child->meta |= IS_LEFT; @@ -312,7 +319,7 @@ int remove_node(rbtree *tree, rbnode *node) { if (!parent) { tree->root = NULL; rbtreeFree(node); - tree->is_unstable = 0; + tree->is_unstable = false; return 0; } else if (node->meta & IS_LEFT) { parent->left = NULL; @@ -323,7 +330,7 @@ int remove_node(rbtree *tree, rbnode *node) { // Node has been removed, now to fix the tree if (!(node->meta & IS_BLACK)) { rbtreeFree(node); - tree->is_unstable = 0; + tree->is_unstable = false; return 0; } rbtreeFree(node); @@ -392,7 +399,7 @@ int remove_node(rbtree *tree, rbnode *node) { } if (!y->parent) tree->root = y; node->right->meta |= IS_BLACK; - tree->is_unstable = 0; + tree->is_unstable = false; return 0; } } else if (!node->left || (node->left->meta & IS_BLACK)) { // case2_l: @@ -486,7 +493,7 @@ int remove_node(rbtree *tree, rbnode *node) { } if (!y->parent) tree->root = y; node->left->meta |= IS_BLACK; - tree->is_unstable = 0; + tree->is_unstable = false; return 0; } } else if (!node->right || (node->right->meta & IS_BLACK)) { // case2_r: @@ -524,19 +531,11 @@ int remove_node(rbtree *tree, rbnode *node) { } if (child) child->meta |= IS_BLACK; - tree->is_unstable = 0; + tree->is_unstable = false; return 0; } -rbnode *first_node(rbtree *tree) { - rbnode *node = tree->root, *prev = node; - while (node) { - prev = node; - node = node->left; - } - return prev; -} -rbnode *pred_node(rbnode *node) { +static rbnode *pred_node(rbnode *node) { if (!node) return NULL; if (node->left) { node = node->left; @@ -547,7 +546,8 @@ rbnode *pred_node(rbnode *node) { return node->parent; } } -rbnode *succ_node(rbnode *node) { + +static rbnode *succ_node(rbnode *node) { if (!node) return NULL; if (node->right) { node = node->right; @@ -559,13 +559,13 @@ rbnode *succ_node(rbnode *node) { } } -uint32_t rb_get(rbtree *tree, uintptr_t addr) { +uint32_t rb_get(rbtree_t *tree, uintptr_t addr) { rbnode *node = find_addr(tree, addr); if (node) return node->data; else return 0; } -int rb_get_end(rbtree* tree, uintptr_t addr, uint32_t* val, uintptr_t* end) { +int rb_get_end(rbtree_t* tree, uintptr_t addr, uint32_t* val, uintptr_t* end) { rbnode *node = tree->root, *next = NULL; while (node) { if ((node->start <= addr) && (node->end > addr)) { @@ -589,9 +589,9 @@ int rb_get_end(rbtree* tree, uintptr_t addr, uint32_t* val, uintptr_t* end) { return 0; } -int rb_set(rbtree *tree, uintptr_t start, uintptr_t end, uint32_t data) { -// printf("rb_set( "); print_rbtree(tree); printf(" , 0x%lX, 0x%lX, %hhu);\n", start, end, data); fflush(stdout); -dynarec_log(LOG_DEBUG, "set 0x%lX, 0x%lX, 0x%x\n", start, end, data); +int rb_set(rbtree_t *tree, uintptr_t start, uintptr_t end, uint32_t data) { +// printf("rb_set( "); rbtree_print(tree); printf(" , 0x%lX, 0x%lX, %hhu);\n", start, end, data); fflush(stdout); +dynarec_log(LOG_DEBUG, "set %s: 0x%lX, 0x%lX, 0x%x\n", tree->name, start, end, data); if (!tree->root) { return add_range(tree, start, end, data); } @@ -722,9 +722,9 @@ dynarec_log(LOG_DEBUG, "set 0x%lX, 0x%lX, 0x%x\n", start, end, data); return add_range_next_to(tree, last->left ? pred_node(last) : last, start, end, data); } -int rb_unset(rbtree *tree, uintptr_t start, uintptr_t end) { -// printf("rb_unset( "); print_rbtree(tree); printf(" , 0x%lX, 0x%lX);\n", start, end); fflush(stdout); -dynarec_log(LOG_DEBUG, "rb_unset(tree, 0x%lX, 0x%lX);\n", start, end); +int rb_unset(rbtree_t *tree, uintptr_t start, uintptr_t end) { +// printf("rb_unset( "); rbtree_print(tree); printf(" , 0x%lX, 0x%lX);\n", start, end); fflush(stdout); +dynarec_log(LOG_DEBUG, "unset: %s 0x%lX, 0x%lX);\n", tree->name, start, end); if (!tree->root) return 0; rbnode *node = tree->root, *prev = NULL, *next = NULL; @@ -782,9 +782,9 @@ dynarec_log(LOG_DEBUG, "rb_unset(tree, 0x%lX, 0x%lX);\n", start, end); return 0; } -uintptr_t rb_get_righter(rbtree* tree) +uintptr_t rb_get_righter(rbtree_t* tree) { -dynarec_log(LOG_DEBUG, "rb_get_righter(tree);\n"); +dynarec_log(LOG_DEBUG, "rb_get_righter(%s);\n", tree->name); if (!tree->root) return 0; rbnode *node = tree->root; @@ -797,7 +797,7 @@ dynarec_log(LOG_DEBUG, "rb_get_righter(tree);\n"); } #include -void print_rbnode(const rbnode *node, unsigned depth, uintptr_t minstart, uintptr_t maxend, unsigned *bdepth) { +static void print_rbnode(const rbnode *node, unsigned depth, uintptr_t minstart, uintptr_t maxend, unsigned *bdepth) { if (!node) { if (!*bdepth || *bdepth == depth + 1) { *bdepth = depth + 1; @@ -838,7 +838,8 @@ void print_rbnode(const rbnode *node, unsigned depth, uintptr_t minstart, uintpt } printf(")"); } -void print_rbtree(const rbtree *tree) { + +static void rbtree_print(const rbtree_t *tree) { if (!tree) { printf("\n"); return; @@ -858,58 +859,58 @@ void print_rbtree(const rbtree *tree) { #ifdef RBTREE_TEST int main() { - rbtree* tree = init_rbtree(); - print_rbtree(tree); fflush(stdout); + rbtree_t* tree = rbtree_init("test"); + rbtree_print(tree); fflush(stdout); /*int ret; ret = rb_set(tree, 0x43, 0x44, 0x01); - printf("%d; ", ret); print_rbtree(tree); fflush(stdout); + printf("%d; ", ret); rbtree_print(tree); fflush(stdout); ret = rb_set(tree, 0x42, 0x43, 0x01); - printf("%d; ", ret); print_rbtree(tree); fflush(stdout); + printf("%d; ", ret); rbtree_print(tree); fflush(stdout); ret = rb_set(tree, 0x41, 0x42, 0x01); - printf("%d; ", ret); print_rbtree(tree); fflush(stdout); + printf("%d; ", ret); rbtree_print(tree); fflush(stdout); ret = rb_set(tree, 0x40, 0x41, 0x01); - printf("%d; ", ret); print_rbtree(tree); fflush(stdout); + printf("%d; ", ret); rbtree_print(tree); fflush(stdout); ret = rb_set(tree, 0x20, 0x40, 0x03); - printf("%d; ", ret); print_rbtree(tree); fflush(stdout); + printf("%d; ", ret); rbtree_print(tree); fflush(stdout); ret = rb_set(tree, 0x10, 0x20, 0x01); - printf("%d; ", ret); print_rbtree(tree); fflush(stdout); + printf("%d; ", ret); rbtree_print(tree); fflush(stdout); uint32_t val = rb_get(tree, 0x33); printf("0x33 has attribute %hhu\n", val); fflush(stdout);*/ /* rbnode *node = find_addr(tree, 0x33); printf("0x33 is at %p: ", node); print_rbnode(node, 0); printf("\n"); fflush(stdout); ret = remove_node(tree, node); - printf("%d; ", ret); print_rbtree(tree); fflush(stdout); + printf("%d; ", ret); rbtree_print(tree); fflush(stdout); node = find_addr(tree, 0x20); printf("0x20 is at %p\n", node); node = find_addr(tree, 0x1F); printf("0x1F is at %p: ", node); print_rbnode(node, 0); printf("\n"); fflush(stdout); ret = remove_node(tree, node); - printf("%d; ", ret); print_rbtree(tree); fflush(stdout); */ + printf("%d; ", ret); rbtree_print(tree); fflush(stdout); */ /* ret = rb_set(tree, 0x15, 0x42, 0x00); - printf("%d; ", ret); print_rbtree(tree); fflush(stdout); */ + printf("%d; ", ret); rbtree_print(tree); fflush(stdout); */ /*rb_unset(tree, 0x15, 0x42); - print_rbtree(tree); fflush(stdout);*/ + rbtree_print(tree); fflush(stdout);*/ - // tree->root = node27; print_rbtree(tree); fflush(stdout); - // rb_set(tree, 2, 3, 1); print_rbtree(tree); fflush(stdout); - // add_range_next_to(tree, node24, 0x0E7000, 0x0E8000, 69); print_rbtree(tree); fflush(stdout); - // print_rbtree(tree); fflush(stdout); + // tree->root = node27; rbtree_print(tree); fflush(stdout); + // rb_set(tree, 2, 3, 1); rbtree_print(tree); fflush(stdout); + // add_range_next_to(tree, node24, 0x0E7000, 0x0E8000, 69); rbtree_print(tree); fflush(stdout); + // rbtree_print(tree); fflush(stdout); // uint32_t val = rb_get(tree, 0x11003000); // printf("0x11003000 has attribute %hhu\n", val); fflush(stdout); - // remove_node(tree, node0); print_rbtree(tree); fflush(stdout); - // add_range_next_to(tree, node1, 0x0E7000, 0x0E8000, 69); print_rbtree(tree); fflush(stdout); + // remove_node(tree, node0); rbtree_print(tree); fflush(stdout); + // add_range_next_to(tree, node1, 0x0E7000, 0x0E8000, 69); rbtree_print(tree); fflush(stdout); rb_set(tree, 0x130000, 0x140000, 7); - print_rbtree(tree); fflush(stdout); + rbtree_print(tree); fflush(stdout); rb_set(tree, 0x141000, 0x142000, 135); - print_rbtree(tree); fflush(stdout); + rbtree_print(tree); fflush(stdout); rb_set(tree, 0x140000, 0x141000, 135); - print_rbtree(tree); fflush(stdout); + rbtree_print(tree); fflush(stdout); rb_set(tree, 0x140000, 0x141000, 7); - print_rbtree(tree); fflush(stdout); + rbtree_print(tree); fflush(stdout); rb_set(tree, 0x140000, 0x141000, 135); - print_rbtree(tree); fflush(stdout); + rbtree_print(tree); fflush(stdout); uint32_t val = rb_get(tree, 0x141994); printf("0x141994 has attribute %hhu\n", val); fflush(stdout); - delete_rbtree(tree); + rbtree_delete(tree); } #endif diff --git a/src/tools/rcfile.c b/src/tools/rcfile.c index b105fa656fc88a864a91bea21564ecc615079250..1c23dda173e58bf0ca348c022ffd6488cb7eec7f 100644 --- a/src/tools/rcfile.c +++ b/src/tools/rcfile.c @@ -95,6 +95,7 @@ ENTRYSTRING_(BOX64_EMULATED_LIBS, emulated_libs) \ ENTRYBOOL(BOX64_ALLOWMISSINGLIBS, allow_missing_libs) \ ENTRYBOOL(BOX64_PREFER_WRAPPED, box64_prefer_wrapped) \ ENTRYBOOL(BOX64_PREFER_EMULATED, box64_prefer_emulated) \ +ENTRYBOOL(BOX64_WRAP_EGl, box64_wrap_egl) \ ENTRYBOOL(BOX64_CRASHHANDLER, box64_dummy_crashhandler) \ ENTRYBOOL(BOX64_NOPULSE, box64_nopulse) \ ENTRYBOOL(BOX64_NOGTK, box64_nogtk) \ @@ -123,6 +124,8 @@ ENTRYSTRING_(BOX64_ENV1, new_env1) \ ENTRYSTRING_(BOX64_ENV2, new_env2) \ ENTRYSTRING_(BOX64_ENV3, new_env3) \ ENTRYSTRING_(BOX64_ENV4, new_env4) \ +ENTRYSTRING_(BOX64_ARGS, new_args) \ +ENTRYSTRING_(BOX64_INSERT_ARGS, insert_args) \ ENTRYBOOL(BOX64_RESERVE_HIGH, new_reserve_high) \ #ifdef HAVE_TRACE @@ -156,7 +159,7 @@ ENTRYINT(BOX64_DYNAREC_STRONGMEM, box64_dynarec_strongmem, 0, 4, 3) \ ENTRYBOOL(BOX64_DYNAREC_X87DOUBLE, box64_dynarec_x87double) \ ENTRYBOOL(BOX64_DYNAREC_DIV0, box64_dynarec_div0) \ ENTRYBOOL(BOX64_DYNAREC_FASTNAN, box64_dynarec_fastnan) \ -ENTRYBOOL(BOX64_DYNAREC_FASTROUND, box64_dynarec_fastround) \ +ENTRYINT(BOX64_DYNAREC_FASTROUND, box64_dynarec_fastround, 0, 2, 2) \ ENTRYINT(BOX64_DYNAREC_SAFEFLAGS, box64_dynarec_safeflags, 0, 2, 2) \ ENTRYBOOL(BOX64_DYNAREC_CALLRET, box64_dynarec_callret) \ ENTRYBOOL(BOX64_DYNAREC_BLEEDING_EDGE, box64_dynarec_bleeding_edge) \ @@ -165,6 +168,7 @@ ENTRYBOOL(BOX64_DYNAREC_TBB, box64_dynarec_tbb) \ IGNORE(BOX64_DYNAREC_HOTPAGE) \ IGNORE(BOX64_DYNAREC_FASTPAGE) \ ENTRYBOOL(BOX64_DYNAREC_ALIGNED_ATOMICS, box64_dynarec_aligned_atomics) \ +ENTRYBOOL(BOX64_DYNAREC_NATIVEFLAGS, box64_dynarec_nativeflags) \ ENTRYBOOL(BOX64_DYNAREC_WAIT, box64_dynarec_wait) \ ENTRYSTRING_(BOX64_NODYNAREC, box64_nodynarec) \ ENTRYSTRING_(BOX64_DYNAREC_TEST, box64_dynarec_test) \ @@ -190,6 +194,7 @@ IGNORE(BOX64_DYNAREC_TBB) \ IGNORE(BOX64_DYNAREC_HOTPAGE) \ IGNORE(BOX64_DYNAREC_FASTPAGE) \ IGNORE(BOX64_DYNAREC_ALIGNED_ATOMICS) \ +IGNORE(BOX64_DYNAREC_NATIVEFLAGS) \ IGNORE(BOX64_DYNAREC_WAIT) \ IGNORE(BOX64_NODYNAREC) \ IGNORE(BOX64_DYNAREC_TEST) \ @@ -290,9 +295,9 @@ static void clearParam(my_params_t* param) #define CENTRYBOOL(NAME, name) #define ENTRYINT(NAME, name, minval, maxval, bits) #define ENTRYINTPOS(NAME, name) - #define ENTRYSTRING(NAME, name) free(param->name); - #define ENTRYSTRING_(NAME, name) free(param->name); - #define ENTRYDSTRING(NAME, name) free(param->name); + #define ENTRYSTRING(NAME, name) box_free(param->name); + #define ENTRYSTRING_(NAME, name) box_free(param->name); + #define ENTRYDSTRING(NAME, name) box_free(param->name); #define ENTRYADDR(NAME, name) #define ENTRYULONG(NAME, name) SUPER() @@ -395,7 +400,7 @@ void LoadRCFile(const char* filename) decor = 1; // prepare a new entry memset(¤t_param, 0, sizeof(current_param)); - free(current_name); + box_free(current_name); current_name = LowerCase(line+decor); *(strchr(current_name, ']')+1-decor) = '\0'; trimString(current_name); @@ -429,7 +434,7 @@ void LoadRCFile(const char* filename) #define ENTRYSTRING(NAME, name) \ else if(!strcmp(key, #NAME)) { \ current_param.is_##name##_present = 1; \ - if(current_param.name) free(current_param.name); \ + if(current_param.name) box_free(current_param.name);\ current_param.name = box_strdup(val); \ } #define ENTRYSTRING_(NAME, name) ENTRYSTRING(NAME, name) @@ -473,9 +478,9 @@ void LoadRCFile(const char* filename) // last entry to be pushed too if(current_name) { addParam(current_name, ¤t_param, (decor==2)); - free(current_name); + box_free(current_name); } - free(line); + box_free(line); fclose(f); printf_log(LOG_INFO, "Params database has %d entries\n", kh_size(params)); } @@ -490,7 +495,7 @@ void DeleteParams() // need to free duplicated strings kh_foreach_value_ref(params, p, clearParam(p)); const char* key; - kh_foreach_key(params, key, free((void*)key)); + kh_foreach_key(params, key, box_free((void*)key)); // free the hash itself kh_destroy(params, params); params = NULL; @@ -499,7 +504,9 @@ void DeleteParams() extern int ftrace_has_pid; extern FILE* ftrace; extern char* ftrace_name; -void openFTrace(const char* newtrace); +extern char* box64_new_args; +extern char* box64_insert_args; +void openFTrace(const char* newtrace, int reopen); void addNewEnvVar(const char* s); void AddNewLibs(const char* libs); void computeRDTSC(); @@ -521,7 +528,7 @@ void ApplyParams(const char* name) { if(!name || !params) return; - if(!strcmp(name, old_name)) { + if(!strcasecmp(name, old_name)) { return; } strncpy(old_name, name, 255); @@ -535,7 +542,7 @@ void ApplyParams(const char* name) if(strstr(lname, k2)) internal_ApplyParams(name, param); ) - free(lname); + box_free(lname); } if(k1 == kh_end(params)) return; @@ -560,7 +567,7 @@ void internal_ApplyParams(const char* name, const my_params_t* param) { #define ENTRYINTPOS(NAME, name) if(param->is_##name##_present) {name = param->name; printf_log(LOG_INFO, "Applying %s=%d\n", #NAME, param->name);} #define ENTRYSTRING(NAME, name) if(param->is_##name##_present) {name = param->name; printf_log(LOG_INFO, "Applying %s=%s\n", #NAME, param->name);} #define ENTRYSTRING_(NAME, name) - #define ENTRYDSTRING(NAME, name) if(param->is_##name##_present) {if(name) free(name); name = box_strdup(param->name); printf_log(LOG_INFO, "Applying %s=%s\n", #NAME, param->name);} + #define ENTRYDSTRING(NAME, name) if(param->is_##name##_present) {if(name) box_free(name); name = box_strdup(param->name); printf_log(LOG_INFO, "Applying %s=%s\n", #NAME, param->name);} #define ENTRYADDR(NAME, name) if(param->is_##name##_present) {name = param->name; printf_log(LOG_INFO, "Applying %s=%zd\n", #NAME, param->name);} #define ENTRYULONG(NAME, name) if(param->is_##name##_present) {name = param->name; printf_log(LOG_INFO, "Applying %s=%lld\n", #NAME, param->name);} SUPER() @@ -618,7 +625,7 @@ void internal_ApplyParams(const char* name, const my_params_t* param) { if(ftrace_name) { fclose(ftrace); } - openFTrace(param->trace_file); + openFTrace(param->trace_file, 0); } if(param->is_emulated_libs_present) { AppendList(&my_context->box64_emulated_libs, param->emulated_libs, 0); @@ -647,9 +654,21 @@ void internal_ApplyParams(const char* name, const my_params_t* param) { addNewEnvVar(param->new_env4); printf_log(LOG_INFO, "Applying %s=%s\n", "BOX64_ENV4", param->new_env4); } + if(param->is_new_args_present) { + printf_log(LOG_INFO, "Adding \"%s\" arguments to command line\n", param->new_args); + if(box64_new_args) + box_free(box64_new_args); + box64_new_args = box_strdup(param->new_args); + } + if(param->is_insert_args_present) { + printf_log(LOG_INFO, "Adding \"%s\" arguments to command line\n", param->insert_args); + if(box64_insert_args) + box_free(box64_insert_args); + box64_insert_args = box_strdup(param->insert_args); + } if(param->is_bash_present && FileIsX64ELF(param->bash)) { if(my_context->bashpath) - free(my_context->bashpath); + box_free(my_context->bashpath); my_context->bashpath = box_strdup(param->bash); printf_log(LOG_INFO, "Applying %s=%s\n", "BOX64_BASH", param->bash); } @@ -708,6 +727,7 @@ void internal_ApplyParams(const char* name, const my_params_t* param) { box64_dynarec_test_start = 0x0; box64_dynarec_test_end = 0x0; if(box64_dynarec_test>2) box64_dynarec_test = 0; + printf_log(LOG_INFO, "Appling BOX64_DYNAREC_TEST=%d\n", box64_dynarec_test); } else { int ok = 0; if(sscanf(param->box64_dynarec_test, "0x%lX-0x%lX", &no_start, &no_end)==2) diff --git a/src/tools/wine_tools.c b/src/tools/wine_tools.c index 1716823b535828d0fc765bd4b238ef6ec2736bea..32106154025b134ce22e2fc2c7be976056c96b82 100644 --- a/src/tools/wine_tools.c +++ b/src/tools/wine_tools.c @@ -15,7 +15,14 @@ typedef struct wine_prereserve_s void* addr; size_t size; } wine_prereserve_t; - +#ifdef BOX32 +typedef struct wine_prereserve_32_s +{ + ptr_t addr; + ulong_t size; +} wine_prereserve_32_t; +#include "box32.h" +#endif // only the prereseve argument is reserved, not the other zone that wine-preloader reserve static wine_prereserve_t my_wine_reserve[] = {{(void*)0x00010000, 0x00008000}, {(void*)0x00110000, 0x30000000}, {(void*)0x7f000000, 0x03000000}, {0, 0}, {0, 0}}; @@ -57,6 +64,15 @@ static void add_no_overlap(void* addr, size_t size) my_wine_reserve[idx].size = size; } +static void remove_prereserve(int idx) +{ + while(my_wine_reserve[idx].size) { + my_wine_reserve[idx].addr = my_wine_reserve[idx+1].addr; + my_wine_reserve[idx].size = my_wine_reserve[idx+1].size; + ++idx; + } +} + void wine_prereserve(const char* reserve) { init_custommem_helper(my_context); @@ -70,12 +86,14 @@ void wine_prereserve(const char* reserve) int idx = 0; while(my_wine_reserve[idx].addr && my_wine_reserve[idx].size) { void* ret = NULL; - if(!isBlockFree(my_wine_reserve[idx].addr, my_wine_reserve[idx].size) && ((ret=mmap(my_wine_reserve[idx].addr, my_wine_reserve[idx].size, 0, MAP_ANONYMOUS|MAP_NORESERVE, -1, 0))==my_wine_reserve[idx].addr)) { - printf_log(LOG_NONE, "Warning, prereserve of %p:0x%lx is not free\n", my_wine_reserve[idx].addr, my_wine_reserve[idx].size); + int isfree = isBlockFree(my_wine_reserve[idx].addr, my_wine_reserve[idx].size); + if(isfree) ret=mmap(my_wine_reserve[idx].addr, my_wine_reserve[idx].size, 0, MAP_FIXED|MAP_PRIVATE|MAP_ANON|MAP_NORESERVE, -1, 0); else ret = NULL; + if(!isfree || (ret!=my_wine_reserve[idx].addr)) { + if(addr>=(void*)0x10000LL) + printf_log(LOG_NONE, "Warning, prereserve of %p:0x%lx is not free\n", my_wine_reserve[idx].addr, my_wine_reserve[idx].size); if(ret) munmap(ret, my_wine_reserve[idx].size); - my_wine_reserve[idx].addr = NULL; - my_wine_reserve[idx].size = 0; + remove_prereserve(idx); } else { setProtection_mmap((uintptr_t)my_wine_reserve[idx].addr, my_wine_reserve[idx].size, 0); printf_log(/*LOG_DEBUG*/LOG_INFO, "WINE prereserve of %p:0x%lx done\n", my_wine_reserve[idx].addr, my_wine_reserve[idx].size); @@ -90,17 +108,27 @@ void* get_wine_prereserve() { if(!wine_preloaded) wine_prereserve(NULL); - return (void*)my_wine_reserve; + #ifdef BOX32 + if(box64_is32bits) { + static wine_prereserve_32_t my_wine_reserve_32[5]; + for(int i=0; i<5; ++i) { + my_wine_reserve_32[i].addr = to_ptrv(my_wine_reserve[i].addr); + my_wine_reserve_32[i].size = to_ulong(my_wine_reserve[i].size); + } + return &my_wine_reserve_32; + } else + #endif + return &my_wine_reserve; } extern int box64_quit; -int isAddrInPrereserve(uintptr_t addr) +int isAddrInPrereserve(uintptr_t addr, size_t len) { if(!wine_preloaded || box64_quit) return 0; int idx = 0; while(my_wine_reserve[idx].addr && my_wine_reserve[idx].size) { - if(addr>=(uintptr_t)my_wine_reserve[idx].addr && addr<((uintptr_t)my_wine_reserve[idx].addr+my_wine_reserve[idx].size)) + if((addr>=(uintptr_t)my_wine_reserve[idx].addr) && (addr+len)<((uintptr_t)my_wine_reserve[idx].addr+my_wine_reserve[idx].size)) return 1; ++idx; } diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index 3e3b72f833ef6c9c5ef7987c9952888fdd2a76de..2d6f1010c5e4d12228db6380c307d6257093338b 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -15,6 +15,7 @@ #() vFS #() vFb #() cFv +#() cFc #() cFi #() cFu #() cFf @@ -22,13 +23,13 @@ #() wFp #() iFE #() iFv +#() iFc #() iFw #() iFi #() iFI #() iFC #() iFW #() iFu -#() iFU #() iFf #() iFd #() iFD @@ -37,7 +38,6 @@ #() iFp #() iFO #() iFS -#() iFP #() iFb #() IFv #() IFi @@ -45,11 +45,12 @@ #() IFf #() IFd #() IFp +#() IFS #() CFv #() CFi -#() CFC #() CFW #() CFu +#() CFU #() CFl #() CFL #() CFp @@ -60,12 +61,14 @@ #() uFv #() uFi #() uFu +#() uFU #() uFd -#() uFl #() uFL #() uFp +#() uFS #() uFb #() UFv +#() UFi #() UFu #() UFp #() fFi @@ -77,12 +80,16 @@ #() dFd #() dFL #() dFp +#() DFD +#() DFY #() lFE #() lFv #() lFi #() lFu +#() lFD #() lFl #() lFp +#() lFS #() LFv #() LFi #() LFu @@ -102,12 +109,16 @@ #() pFL #() pFp #() pFV +#() pFS #() pFA #() pFb +#() SFv #() HFi #() HFp +#() HFH #() xFx #() XFX +#() YFY #() vWp #() iWp #() uWp @@ -117,19 +128,19 @@ #() vFcc #() vFww #() vFii +#() vFiI #() vFiW #() vFiu #() vFiU #() vFif #() vFid -#() vFil -#() vFiL #() vFip #() vFWW #() vFWp #() vFuc #() vFuw #() vFui +#() vFuI #() vFuC #() vFuW #() vFuu @@ -139,7 +150,7 @@ #() vFul #() vFuL #() vFup -#() vFUi +#() vFUu #() vFfi #() vFfC #() vFff @@ -162,9 +173,10 @@ #() vFpl #() vFpL #() vFpp -#() vFpV #() vFpS +#() vFpA #() vFSi +#() vFSp #() vFbi #() vFbu #() vFbU @@ -182,8 +194,8 @@ #() iFiI #() iFiC #() iFiu +#() iFiU #() iFil -#() iFiL #() iFip #() iFiS #() iFui @@ -209,14 +221,17 @@ #() iFpl #() iFpL #() iFpp +#() iFpV #() iFpO +#() iFpS +#() iFpA #() iFSi -#() IFEi +#() iFSp #() IFEf #() IFEd +#() IFED #() IFEp #() IFip -#() IFII #() IFpi #() IFpu #() IFpd @@ -226,7 +241,7 @@ #() CFui #() CFuW #() CFuu -#() CFuL +#() CFuU #() CFpi #() CFpu #() CFpL @@ -235,12 +250,11 @@ #() WFpp #() uFEp #() uFii -#() uFiu -#() uFip +#() uFiS #() uFui #() uFuu #() uFup -#() uFuM +#() uFuS #() uFpw #() uFpi #() uFpC @@ -252,6 +266,7 @@ #() uFpp #() uFbu #() UFEp +#() UFii #() UFuu #() UFUp #() UFpi @@ -278,23 +293,26 @@ #() dFpu #() dFpd #() dFpp +#() DFiD #() DFDi #() DFDD #() DFDp #() DFpp #() lFEi #() lFii +#() lFiL #() lFip #() lFui +#() lFDD #() lFll #() lFpi +#() lFpu #() lFpd #() lFpl +#() lFpL #() lFpp #() LFEL #() LFEp -#() LFii -#() LFuu #() LFUp #() LFLi #() LFLL @@ -320,11 +338,12 @@ #() pFli #() pFll #() pFlp +#() pFLc #() pFLi -#() pFLC #() pFLu #() pFLL #() pFLp +#() pFpc #() pFpi #() pFpC #() pFpW @@ -338,12 +357,14 @@ #() pFbC #() pFbu #() pFbp +#() SFip +#() SFpp #() HFII #() HFll #() HFpi -#() HFpp #() xFxx #() XFXX +#() YFYY #() iWpi #() iWpu #() iWpf @@ -361,16 +382,16 @@ #() vFiii #() vFiif #() vFiip +#() vFiII #() vFiui #() vFiuu -#() vFiuU #() vFiup +#() vFiUU #() vFiff #() vFidd #() vFilu #() vFill #() vFilp -#() vFiLL #() vFipi #() vFipu #() vFipL @@ -380,13 +401,13 @@ #() vFucc #() vFuww #() vFuii +#() vFuiI #() vFuiu #() vFuiU #() vFuif #() vFuid -#() vFuil -#() vFuiL #() vFuip +#() vFuII #() vFuWW #() vFuui #() vFuuC @@ -394,14 +415,13 @@ #() vFuuU #() vFuuf #() vFuud -#() vFuuL #() vFuup +#() vFuUU #() vFuff #() vFufp #() vFudd #() vFull #() vFulp -#() vFuLL #() vFuLp #() vFupu #() vFupp @@ -409,6 +429,7 @@ #() vFfpp #() vFddd #() vFdpp +#() vFDpp #() vFlii #() vFlip #() vFllp @@ -416,6 +437,7 @@ #() vFLup #() vFLpL #() vFLpp +#() vFpww #() vFpic #() vFpii #() vFpiI @@ -426,13 +448,16 @@ #() vFpid #() vFpiL #() vFpip +#() vFpiS #() vFpui #() vFpuI +#() vFpuC #() vFpuW #() vFpuu #() vFpuU #() vFpuf #() vFpud +#() vFpul #() vFpuL #() vFpup #() vFpUi @@ -459,6 +484,8 @@ #() vFppL #() vFppp #() vFppV +#() vFpHi +#() vFSpL #() cFpdp #() wFppp #() iFEiw @@ -466,7 +493,6 @@ #() iFEWW #() iFEup #() iFEUU -#() iFELp #() iFEpi #() iFEpU #() iFEpL @@ -483,6 +509,7 @@ #() iFiil #() iFiip #() iFiiO +#() iFiII #() iFiCC #() iFiui #() iFiuu @@ -512,6 +539,7 @@ #() iFupp #() iFfff #() iFLip +#() iFLpL #() iFLpp #() iFpwp #() iFpii @@ -524,7 +552,6 @@ #() iFpil #() iFpiL #() iFpip -#() iFpIi #() iFpII #() iFpCp #() iFpWp @@ -560,9 +587,16 @@ #() iFppl #() iFppL #() iFppp +#() iFpOi #() iFpOu -#() iFpOM +#() iFpSu +#() iFpSp +#() iFSIi +#() iFSli +#() iFSpi #() iFSpL +#() iFSpp +#() iFSpA #() iFbpp #() IFiIi #() IFpIi @@ -570,9 +604,10 @@ #() IFppI #() IFSIi #() CFipp +#() CFuUu #() CFuff -#() CFuLu #() CFppp +#() WFpip #() WFppp #() uFEpW #() uFEpu @@ -589,6 +624,7 @@ #() uFufp #() uFupu #() uFupp +#() uFuNN #() uFpii #() uFpiu #() uFpip @@ -599,10 +635,12 @@ #() uFpWp #() uFpui #() uFpuu +#() uFpuU #() uFpuL #() uFpup #() uFpfu #() uFpli +#() uFplu #() uFpLu #() uFpLL #() uFpLp @@ -610,6 +648,7 @@ #() uFppu #() uFppL #() uFppp +#() uFbCu #() uFbWW #() uFbWu #() uFbuC @@ -636,21 +675,27 @@ #() dFppu #() dFppd #() dFppp +#() DFDDD #() DFppi #() DFppp +#() lFiIL #() lFili -#() lFilL #() lFipi #() lFipL #() lFlll +#() lFpup #() lFpli #() lFpLu +#() lFpLd +#() lFpLL #() lFpLp #() lFppi #() lFppu #() lFppL #() lFppp +#() lFppS #() lFSpl +#() LFEpp #() LFEpA #() LFipL #() LFuui @@ -660,10 +705,13 @@ #() LFLpu #() LFLpL #() LFpii +#() LFpip #() LFpCi +#() LFpWp #() LFpuL #() LFpup #() LFpLi +#() LFpLC #() LFpLL #() LFpLp #() LFppi @@ -675,7 +723,6 @@ #() pFEip #() pFEiV #() pFEup -#() pFEuV #() pFEpi #() pFEpu #() pFEpp @@ -711,26 +758,27 @@ #() pFLLp #() pFLpi #() pFLpp +#() pFpcU #() pFpii #() pFpiu #() pFpid #() pFpil #() pFpiL #() pFpip +#() pFpiS #() pFpCi -#() pFpCu #() pFpWi #() pFpWW #() pFpWp #() pFpui #() pFpuu -#() pFpuL +#() pFpuf #() pFpup #() pFpUi #() pFpUu #() pFpdu #() pFpdd -#() pFplC +#() pFplc #() pFplu #() pFpll #() pFplp @@ -738,17 +786,19 @@ #() pFpLu #() pFpLL #() pFpLp +#() pFppc #() pFppi #() pFppI -#() pFppC #() pFppu #() pFppU #() pFppf +#() pFppd #() pFppl #() pFppL #() pFppp +#() pFppS #() pFppA -#() pFpOM +#() pFpSp #() pFpbi #() pFSpl #() pFbCC @@ -758,6 +808,9 @@ #() pFbpi #() pFbpu #() pFbpp +#() SFEpp +#() SFpLp +#() SFppS #() vWpup #() iWEip #() iWEpp @@ -770,16 +823,17 @@ #() iWppp #() uWpui #() uWpup -#() vFEiip #() vFEipp #() vFEipV #() vFEipA #() vFELLp #() vFEpii #() vFEpip -#() vFEpiA #() vFEpup +#() vFEpuV +#() vFEpuA #() vFEpUp +#() vFEpLp #() vFEppp #() vFEppV #() vFEppA @@ -790,17 +844,17 @@ #() vFiiCp #() vFiill #() vFiipV +#() vFiIII #() vFiuip #() vFiuuu #() vFiulp #() vFiupV +#() vFiUUU #() vFifff #() vFiddd #() vFilip -#() vFilll #() vFilpu #() vFilpp -#() vFiLLL #() vFipii #() vFipup #() vFipll @@ -811,21 +865,21 @@ #() vFuccc #() vFuwww #() vFuiii -#() vFuiiu #() vFuiip +#() vFuiII #() vFuiui #() vFuiuC #() vFuiuu #() vFuiup +#() vFuiUU #() vFuifi #() vFuiff #() vFuidd -#() vFuill #() vFuilp -#() vFuiLL #() vFuipi #() vFuipu #() vFuipp +#() vFuIII #() vFuWWW #() vFuuii #() vFuuiu @@ -839,24 +893,21 @@ #() vFuuud #() vFuuul #() vFuuup +#() vFuuUl #() vFuuff #() vFuuli -#() vFuulp -#() vFuuLl #() vFuupi #() vFuupp +#() vFuUui +#() vFuUup +#() vFuUUU #() vFufff #() vFuddd -#() vFuluL +#() vFuluU #() vFullC -#() vFulll #() vFullp -#() vFulpi #() vFulpu #() vFulpp -#() vFuLui -#() vFuLup -#() vFuLLL #() vFupii #() vFuppi #() vFuppu @@ -866,17 +917,17 @@ #() vFllii #() vFLuui #() vFLppi +#() vFpwwu #() vFpiii #() vFpiiu #() vFpiid #() vFpiip #() vFpiui -#() vFpiuu #() vFpiuL #() vFpiup #() vFpiUu #() vFpiUU -#() vFpifi +#() vFpiLu #() vFpipi #() vFpipu #() vFpipp @@ -902,10 +953,13 @@ #() vFpddu #() vFpddd #() vFplll +#() vFpllL #() vFplpp #() vFpLii #() vFpLuu #() vFpLLL +#() vFpLLp +#() vFpLpi #() vFpLpu #() vFpLpL #() vFpLpp @@ -932,6 +986,8 @@ #() vFpppl #() vFpppL #() vFpppp +#() vFHHpi +#() cFpiii #() cFpipp #() iFEiip #() iFEiiN @@ -956,34 +1012,39 @@ #() iFEppp #() iFEppV #() iFEppA -#() iFEpOu +#() iFEpON +#() iFESpV +#() iFESpA #() iFwwww #() iFwppp #() iFiiii #() iFiiiu #() iFiiip #() iFiiiN +#() iFiiII #() iFiiui #() iFiill #() iFiipi #() iFiipp +#() iFiIIi +#() iFiIIu #() iFiWii #() iFiuwp #() iFiuup #() iFiupp #() iFilli -#() iFillu #() iFiLpL #() iFipii #() iFipip #() iFipWp #() iFipui -#() iFipuL +#() iFipuU #() iFipLi #() iFipLu #() iFipLp #() iFippi #() iFippu +#() iFippl #() iFippL #() iFippp #() iFipON @@ -992,6 +1053,7 @@ #() iFuWWp #() iFuuuu #() iFuupi +#() iFuupu #() iFuupp #() iFupup #() iFupLp @@ -1003,6 +1065,7 @@ #() iFpwww #() iFpwpp #() iFpiii +#() iFpiiC #() iFpiiu #() iFpiid #() iFpiiL @@ -1011,16 +1074,18 @@ #() iFpiuL #() iFpiup #() iFpiUp +#() iFpili #() iFpild +#() iFpiLL #() iFpipi #() iFpipu #() iFpipL #() iFpipp #() iFpipV -#() iFpIip #() iFpCCC #() iFpCpi #() iFpCpp +#() iFpWWW #() iFpWWu #() iFpWpp #() iFpuwp @@ -1033,6 +1098,8 @@ #() iFpuuL #() iFpuup #() iFpuUp +#() iFpufp +#() iFpuLi #() iFpuLL #() iFpuLp #() iFpupi @@ -1044,17 +1111,20 @@ #() iFpupV #() iFpUip #() iFpUup +#() iFpUUu #() iFpUUU #() iFpULp #() iFpUpp #() iFpdip #() iFplii #() iFplip +#() iFpllp #() iFplpi #() iFplpp #() iFpLii #() iFpLiL #() iFpLip +#() iFpLui #() iFpLuu #() iFpLup #() iFpLlp @@ -1062,6 +1132,7 @@ #() iFpLLL #() iFpLLp #() iFpLpi +#() iFpLpu #() iFpLpf #() iFpLpd #() iFpLpD @@ -1086,6 +1157,8 @@ #() iFpplL #() iFpplp #() iFppLi +#() iFppLu +#() iFppLl #() iFppLL #() iFppLp #() iFpppi @@ -1093,16 +1166,16 @@ #() iFpppu #() iFpppL #() iFpppp +#() iFpONN +#() iFSpii +#() iFSpiL #() iFbupp #() IFEpIi -#() IFipUI -#() IFipUp #() IFpIip #() IFppii #() IFppip #() IFSIii #() CFuuff -#() CFpiii #() CFpLLi #() CFppip #() CFbupp @@ -1114,24 +1187,29 @@ #() uFiiuu #() uFifff #() uFuuuu +#() uFuppd +#() uFLppp #() uFpiip #() uFpipu #() uFpipL #() uFpipp #() uFpCCC -#() uFpuip #() uFpuup #() uFpupi #() uFpupu #() uFpupp #() uFpubp +#() uFplup +#() uFppii #() uFppiu #() uFppip #() uFppuu +#() uFppup #() uFpplp #() uFppLp #() uFpppi #() uFpppu +#() uFpppd #() uFpppL #() uFpppp #() uFbipp @@ -1151,6 +1229,7 @@ #() lFEppp #() lFiiLu #() lFiipL +#() lFipiI #() lFipil #() lFipLi #() lFipLI @@ -1163,10 +1242,15 @@ #() lFpilp #() lFpuip #() lFplip +#() lFplup +#() lFplpi #() lFplpp #() lFpLpp #() lFppii #() lFppip +#() lFppiS +#() lFpplp +#() lFppLp #() lFpppL #() lFpppp #() LFEppL @@ -1178,7 +1262,10 @@ #() LFpCii #() LFpupL #() LFpLCL +#() LFpLuu #() LFpLLp +#() LFpLLS +#() LFpLpi #() LFpLpL #() LFpLpp #() LFppii @@ -1196,7 +1283,8 @@ #() pFELpA #() pFEpii #() pFEpip -#() pFEpuL +#() pFEpiV +#() pFEpCL #() pFEppi #() pFEppp #() pFEppV @@ -1206,17 +1294,19 @@ #() pFiiup #() pFiiLp #() pFiipi +#() pFiipp #() pFiIIi #() pFillu -#() pFipii #() pFipip #() pFippi #() pFippu +#() pFippl #() pFippL #() pFippp #() pFuuii #() pFuuip #() pFuuuu +#() pFuddd #() pFullu #() pFupii #() pFuppp @@ -1235,6 +1325,7 @@ #() pFpiuu #() pFpiLi #() pFpiLL +#() pFpipc #() pFpipi #() pFpipd #() pFpipL @@ -1268,6 +1359,7 @@ #() pFppiu #() pFppiL #() pFppip +#() pFppiS #() pFppCp #() pFppWp #() pFppuu @@ -1283,6 +1375,7 @@ #() pFpppu #() pFpppL #() pFpppp +#() pFpONN #() pFpbii #() pFSppi #() pFbCuW @@ -1318,8 +1411,8 @@ #() vFEpipA #() vFEpuup #() vFEpuuV +#() vFEpuuA #() vFEpupp -#() vFEpupA #() vFEpLLp #() vFEppip #() vFEppiV @@ -1334,19 +1427,18 @@ #() vFiiuup #() vFiillu #() vFiilll -#() vFiipii #() vFiipll +#() vFiIIII #() vFiuiip #() vFiuipi #() vFiuuuu #() vFiulpp +#() vFiUUUU #() vFiffff #() vFidddd #() vFilill #() vFilipi #() vFilipl -#() vFillll -#() vFiLLLL #() vFipipu #() vFipipp #() vFipupi @@ -1358,6 +1450,7 @@ #() vFuiiCp #() vFuiiup #() vFuiill +#() vFuiIII #() vFuiuii #() vFuiuip #() vFuiuCi @@ -1365,20 +1458,19 @@ #() vFuiuuu #() vFuiuup #() vFuiupi +#() vFuiUUU #() vFuifff #() vFuiddd -#() vFuilll -#() vFuiLLL #() vFuipii #() vFuipip #() vFuipup #() vFuippp +#() vFuIIII #() vFuCCCC #() vFuCuip #() vFuCuup #() vFuWWWW #() vFuuiii -#() vFuuiiu #() vFuuiip #() vFuuiui #() vFuuiuu @@ -1400,12 +1492,10 @@ #() vFuullp #() vFuupii #() vFuuppu +#() vFuUUUU #() vFuffff #() vFudddd -#() vFulill -#() vFullll #() vFullpu -#() vFuLLLL #() vFupiii #() vFupupi #() vFupupp @@ -1418,6 +1508,7 @@ #() vFluipp #() vFLpppi #() vFLpppp +#() vFpwwWW #() vFpiiii #() vFpiiiI #() vFpiiiu @@ -1434,6 +1525,7 @@ #() vFpiUUp #() vFpilpp #() vFpipii +#() vFpipiu #() vFpippi #() vFpippp #() vFpuiip @@ -1456,13 +1548,19 @@ #() vFpddii #() vFpdddd #() vFpddpp +#() vFpliip #() vFpluul #() vFplppp +#() vFpLiii +#() vFpLiiL #() vFpLLLL #() vFpLLpp #() vFpLpiL +#() vFpLppi +#() vFppiic #() vFppiii #() vFppiiu +#() vFppiiL #() vFppiip #() vFppiui #() vFppiup @@ -1502,7 +1600,6 @@ #() iFEiipA #() iFEipip #() iFEippi -#() iFEippL #() iFEippp #() iFEpiii #() iFEpipi @@ -1515,8 +1612,8 @@ #() iFEpLpA #() iFEppii #() iFEppip -#() iFEppiV #() iFEppiA +#() iFEppup #() iFEpplp #() iFEpppi #() iFEpppL @@ -1526,12 +1623,12 @@ #() iFiiipu #() iFiiipp #() iFiiupp +#() iFiippp #() iFiuuuu #() iFiuuup -#() iFiuLip +#() iFiuUip #() iFillLL #() iFipiii -#() iFipiup #() iFipipi #() iFipipu #() iFipuip @@ -1542,7 +1639,9 @@ #() iFippLp #() iFipppi #() iFipppp +#() iFuiuup #() iFuuupp +#() iFuupid #() iFuppLp #() iFLppip #() iFLpppp @@ -1559,13 +1658,17 @@ #() iFpiIip #() iFpiuwp #() iFpiuuu +#() iFpiuLi #() iFpiUUU +#() iFpiLip +#() iFpiLuu #() iFpipii #() iFpipiu #() iFpipiL #() iFpipip #() iFpippi #() iFpippW +#() iFpippL #() iFpippp #() iFpCCCC #() iFpCupp @@ -1574,19 +1677,21 @@ #() iFpuipi #() iFpuipp #() iFpuuip -#() iFpuuui #() iFpuuup #() iFpuuLL #() iFpuuLp #() iFpuupp #() iFpulup #() iFpulpp +#() iFpuLup #() iFpuLpL #() iFpuLpp #() iFpupui #() iFpupuu #() iFpupuU #() iFpupup +#() iFpupLu +#() iFpuppu #() iFpuppL #() iFpuppp #() iFpUiUi @@ -1596,10 +1701,11 @@ #() iFpLiup #() iFpLilp #() iFpLiLi +#() iFpLipi +#() iFpLuLi #() iFpLlpp #() iFpLLii #() iFpLLup -#() iFpLLpp #() iFpLpii #() iFpLpiL #() iFpLpuL @@ -1608,6 +1714,7 @@ #() iFpLppi #() iFpLppL #() iFpLppp +#() iFppiii #() iFppiiu #() iFppiiL #() iFppiip @@ -1617,6 +1724,7 @@ #() iFppiLL #() iFppipi #() iFppipu +#() iFppipl #() iFppipp #() iFppuwp #() iFppuip @@ -1629,32 +1737,40 @@ #() iFpplii #() iFppllp #() iFpplpp +#() iFppLiL #() iFppLup +#() iFppLLi #() iFppLpi #() iFppLpL #() iFppLpp #() iFpppii #() iFpppip #() iFpppui +#() iFpppuu #() iFpppup #() iFpppUi #() iFpppLi +#() iFpppLu #() iFpppLL #() iFpppLp #() iFppppi #() iFppppu +#() iFppppd #() iFppppl #() iFppppL #() iFppppp +#() iFpSipp +#() iFpSuif +#() iFSppLp #() IFppIII #() uFEippp #() uFEpipp -#() uFEppuu +#() uFEpupp #() uFEpppp #() uFEpppV #() uFiuuuu #() uFiuppi -#() uFipipp +#() uFipupp #() uFipLpp #() uFuiiii #() uFLpppL @@ -1669,15 +1785,20 @@ #() uFppuup #() uFppupp #() uFpplip +#() uFpplpp #() uFppLpp +#() uFpppip #() uFppppL #() uFppppp #() uFbCuuu #() uFbCuup #() uFbuuWW #() uFbuuup -#() UFuiiii +#() UFuiCiu +#() lFEippL #() lFEuipp +#() lFEppLL +#() lFipiIi #() lFipili #() lFipLli #() lFipLlL @@ -1686,29 +1807,31 @@ #() lFpuipC #() lFpuuLL #() lFppupp -#() lFppllp #() lFppLpL #() lFppLpp -#() LFELppi +#() LFELppu +#() LFEppLL #() LFEpppp -#() LFuiCiu +#() LFuuuuu #() LFLpppL #() LFpuipp -#() LFpuppi +#() LFpuupi #() LFpLuuu #() LFpLLLp #() LFpLpuu +#() LFpLpLp #() LFpLppL #() LFpLppp #() LFppLLp #() LFppLpL #() LFpppii +#() LFppppi #() LFppppp +#() pFEuipV +#() pFEuipA #() pFEpiii #() pFEpipL #() pFEpipp -#() pFEpipV -#() pFEpipA #() pFEpupp #() pFEpUpp #() pFEpLpp @@ -1721,7 +1844,7 @@ #() pFEpppV #() pFEpppA #() pFiiiii -#() pFiiipL +#() pFiiupL #() pFipipL #() pFipipp #() pFuiiiu @@ -1746,6 +1869,7 @@ #() pFpiuup #() pFpiupp #() pFpiLip +#() pFpipii #() pFpipip #() pFpipup #() pFpippi @@ -1764,6 +1888,7 @@ #() pFpdddd #() pFplppp #() pFpLiii +#() pFpLipp #() pFpLLip #() pFpLLLp #() pFpLpii @@ -1775,6 +1900,7 @@ #() pFppiup #() pFppipi #() pFppipp +#() pFppCip #() pFppWpp #() pFppuip #() pFppuuu @@ -1821,11 +1947,10 @@ #() vFEpippp #() vFEpuipp #() vFEpuipV +#() vFEpuipA #() vFEpupup #() vFEpuppp #() vFEpLLpp -#() vFEppipV -#() vFEppipA #() vFEppupp #() vFEpppLp #() vFEppppp @@ -1833,36 +1958,35 @@ #() vFiiiuil #() vFiiilpi #() vFiiuilp +#() vFiipupV #() vFiffiff #() vFiddidd #() vFilipli #() vFiliplu -#() vFillill #() vFipiplp #() vFCCCCff #() vFuiiiii #() vFuiiiip #() vFuiiuii #() vFuiiuup +#() vFuiIIII #() vFuiuiii #() vFuiuiiC #() vFuiuiil #() vFuiuiip #() vFuiuiuu -#() vFuiuiuL +#() vFuiuiuU #() vFuiuCip #() vFuiuuip #() vFuiuuuu #() vFuiupii #() vFuiupiu +#() vFuiUUUU #() vFuiffff #() vFuidddd -#() vFuillll -#() vFuiLLLL #() vFuipiup #() vFuCuuip #() vFuuiiii -#() vFuuiiiu #() vFuuiuii #() vFuuiuil #() vFuuiuip @@ -1888,8 +2012,7 @@ #() vFuffiip #() vFufffff #() vFuddiip -#() vFullill -#() vFulluLC +#() vFulluUC #() vFupiiii #() vFupupip #() vFuppppu @@ -1898,15 +2021,17 @@ #() vFffffff #() vFdddddd #() vFdddppp +#() vFpwwllc #() vFpiiiii #() vFpiiipp #() vFpiiuuu +#() vFpiilli #() vFpiippi #() vFpiippp #() vFpiUuup +#() vFpiLppi #() vFpipipp #() vFpipipV -#() vFpipppi #() vFpipppp #() vFpuiiii #() vFpuiiiu @@ -1929,11 +2054,15 @@ #() vFpdddii #() vFpddddd #() vFpddddp +#() vFpLiiii +#() vFpLiiiL +#() vFpLiipi +#() vFpLLLLu #() vFpLpLLL +#() vFpLpppi #() vFppiiii -#() vFppiiip +#() vFppiiiu #() vFppiiuu -#() vFppiipi #() vFppiipp #() vFppilpp #() vFppipLp @@ -1958,8 +2087,11 @@ #() vFpppiui #() vFpppiff #() vFpppipu +#() vFpppipp #() vFpppuii +#() vFpppuip #() vFpppuuu +#() vFpppuup #() vFpppLpp #() vFppppii #() vFppppLp @@ -1972,6 +2104,7 @@ #() iFEiippi #() iFEiippp #() iFEiLLLL +#() iFEipiup #() iFEippLp #() iFElpppp #() iFEpiipp @@ -1979,14 +2112,17 @@ #() iFEpilpV #() iFEpippi #() iFEpIppp +#() iFEpuipp #() iFEpuppp #() iFEpUppp +#() iFEppupp #() iFEppppi #() iFEppppp -#() iFiiiiip #() iFiiiipp #() iFiiiuwp #() iFiWiipi +#() iFiuuuup +#() iFiuuppp #() iFiuUuUu #() iFilpppp #() iFiLpppi @@ -1997,6 +2133,9 @@ #() iFipuppp #() iFipppLp #() iFippppp +#() iFuiiuup +#() iFupupLp +#() iFupLpLp #() iFdipppL #() iFDipppL #() iFlpippp @@ -2008,6 +2147,7 @@ #() iFpiiuii #() iFpiiuui #() iFpiiupp +#() iFpiiLip #() iFpiipip #() iFpiippp #() iFpiCCpu @@ -2020,12 +2160,14 @@ #() iFpipLpp #() iFpippip #() iFpippup +#() iFpipppu #() iFpipppp #() iFpCiipp #() iFpCpipu #() iFpWipip #() iFpWpppp #() iFpuiCpp +#() iFpuiLpp #() iFpuippp #() iFpuuuuu #() iFpuuuup @@ -2034,10 +2176,12 @@ #() iFpuuLpp #() iFpuupuu #() iFpuuppp +#() iFpuLuLu #() iFpuLLpp -#() iFpupuui +#() iFpupupp #() iFpupLpL #() iFpupLpp +#() iFpupppp #() iFpUiipp #() iFpUuuLp #() iFpUUUup @@ -2050,9 +2194,12 @@ #() iFpLuipp #() iFpLuupp #() iFpLupip +#() iFpLLLLu #() iFpLLLLL +#() iFpLLLLp #() iFpLLppp #() iFpLpipi +#() iFpLpLui #() iFpLppii #() iFpLpppL #() iFpLpppp @@ -2060,6 +2207,7 @@ #() iFppiiip #() iFppiipi #() iFppiipp +#() iFppiuii #() iFppiupp #() iFppilpp #() iFppipii @@ -2070,42 +2218,54 @@ #() iFppippp #() iFppIppp #() iFppuiii +#() iFppuipp #() iFppuIII +#() iFppuupL #() iFppuupp +#() iFppulup +#() iFppulll #() iFppuLpp #() iFppupip +#() iFppuppu #() iFppuppp #() iFppdidd #() iFpplupp #() iFpplppi +#() iFppLiWL #() iFppLupp #() iFppLLiL #() iFppLLup #() iFppLLpp #() iFppLpLp #() iFppLppp -#() iFpppiuu +#() iFpppiup #() iFpppipi #() iFpppipu #() iFpppipp #() iFpppuii +#() iFpppuuu #() iFpppuup #() iFpppupu #() iFpppupp #() iFpppLpp -#() iFppppii #() iFppppiu #() iFppppip +#() iFppppui +#() iFppppuu #() iFppppup #() iFppppLp #() iFpppppi +#() iFpppppu #() iFpppppL #() iFpppppp +#() iFpppppS #() uFEiippp #() uFEiuppp +#() uFEpippi #() uFEpippp #() uFEpCppp #() uFEpuppp +#() uFipuppp #() uFuuuuuu #() uFupuufp #() uFuppppp @@ -2118,9 +2278,9 @@ #() uFpuuppp #() uFpupupu #() uFpupppp -#() uFppippp #() uFppuuup #() uFppuupu +#() uFppLpLp #() uFppLppL #() uFpppppi #() uFpppppp @@ -2135,19 +2295,21 @@ #() lFipLpLL #() lFpipill #() lFpuuLLp -#() lFpplllp +#() lFpluuic #() lFppLipp #() lFpppLpp -#() LFEupppp -#() LFELpppi +#() LFEuuppp +#() LFELpppu #() LFEpippp -#() LFEppppi +#() LFEppppu #() LFpipipi #() LFpLippp #() LFpLLLLL #() LFppLLpL #() LFppLpLL #() LFSpLiip +#() pFELpppV +#() pFELpApp #() pFEpiupp #() pFEpippp #() pFEpuipp @@ -2159,8 +2321,6 @@ #() pFEpppLp #() pFEppppi #() pFEppppp -#() pFEppppV -#() pFEppApp #() pFiiiiii #() pFiiiiid #() pFipippp @@ -2174,18 +2334,24 @@ #() pFuuppuu #() pFuppppp #() pFdddddd +#() pFLppppp #() pFpiiiiu #() pFpiiipp #() pFpiiCCC #() pFpiiuup +#() pFpiipip +#() pFpiippp #() pFpiUUUU +#() pFpipipL #() pFpipipp +#() pFpipuii #() pFpippip #() pFpipppp #() pFpuiiip #() pFpuuuuu #() pFpuuupu #() pFpupuui +#() pFpupuup #() pFpuppip #() pFpupppp #() pFplpppp @@ -2195,6 +2361,7 @@ #() pFpLppip #() pFpLppup #() pFppiiii +#() pFppiiup #() pFppiipp #() pFppiCCC #() pFppiupp @@ -2228,9 +2395,9 @@ #() iWpuiiii #() iWpppppi #() iWpppppu -#() vFEpiiipp -#() vFEpipppp #() vFEpuipuV +#() vFEpuuipp +#() vFEpupppp #() vFEppippp #() vFEpppLpp #() vFEppppup @@ -2252,7 +2419,7 @@ #() vFuiuiiii #() vFuiuiiiC #() vFuiuiiip -#() vFuiuiiuL +#() vFuiuiiuU #() vFuiuCiuu #() vFuiupiiu #() vFuiupuip @@ -2271,7 +2438,6 @@ #() vFuuipppp #() vFuuuiiii #() vFuuuiiCp -#() vFuuuiuii #() vFuuuiuil #() vFuuuiupi #() vFuuuuuuu @@ -2286,21 +2452,21 @@ #() vFuuppppp #() vFuffffff #() vFudddddd -#() vFlipuiip #() vFlliiiip #() vFLpuLpLp #() vFpiiiipp #() vFpiiliip #() vFpiiLiip #() vFpiipCpp -#() vFpiipppp -#() vFpipipii +#() vFpipipiu #() vFpippppu #() vFpuiippp +#() vFpuipppp #() vFpuuuuuu #() vFpuuUUuu #() vFpuupupu #() vFpuupppp +#() vFpupiiiu #() vFpupuuup #() vFpupppui #() vFpUiUiup @@ -2309,11 +2475,17 @@ #() vFpfffppp #() vFpddiidd #() vFpdddddd +#() vFplilppp +#() vFpLiiiLi +#() vFpLiiipi +#() vFpLiiuui #() vFpLiLiLp +#() vFpLLiiip +#() vFpLLuuuu #() vFpLpiipi +#() vFpLppipi +#() vFppcuupp #() vFppiiiii -#() vFppiiiip -#() vFppiiipi #() vFppiipii #() vFppiipuu #() vFppiippp @@ -2322,9 +2494,10 @@ #() vFppipiip #() vFppipipp #() vFppipppp -#() vFppCuupp #() vFppuiiip +#() vFppuuuii #() vFppuupii +#() vFppupipp #() vFppUuupp #() vFppddddu #() vFppddpiu @@ -2336,40 +2509,43 @@ #() vFpppiipp #() vFpppiupi #() vFpppippi -#() vFpppuuuu #() vFpppffff #() vFppppiip #() vFppppiui -#() vFppppipi #() vFpppppip #() vFppppppu #() vFppppppp +#() cFppppppp +#() iFElppppp #() iFEpupppp #() iFEpUuppp #() iFEpLiLpp #() iFEpLiLpV +#() iFEpLpiiL #() iFEppuppp -#() iFEppLpIi -#() iFEpppiiu +#() iFEppLpIu #() iFEpppLpp #() iFEpppppL #() iFEpppppp -#() iFiiiiiip +#() iFiupuuup +#() iFiupuppp #() iFipupupi #() iFippuIup #() iFipppppp +#() iFuiiiuup +#() iFuippLpp #() iFpiiiiii #() iFpiiiuwp #() iFpiiiuup -#() iFpiiuuiu #() iFpiipppp #() iFpiuiipp +#() iFpiuuuiu #() iFpiuLiii #() iFpiupppp +#() iFpiLipip #() iFpiLuupp #() iFpiLuppp #() iFpipiiip -#() iFpipipip #() iFpipippp #() iFpippLpp #() iFpippppW @@ -2381,7 +2557,6 @@ #() iFpuiCuCp #() iFpuiuupp #() iFpupiLpL -#() iFpupuuui #() iFpupuupp #() iFpupupui #() iFpuppppp @@ -2393,8 +2568,11 @@ #() iFpLpiiii #() iFpLpiiuu #() iFpLpiipi +#() iFpLpLuLi #() iFpLpLpip +#() iFpLpLpLp #() iFpLppiii +#() iFpLppiip #() iFppiiiip #() iFppiiuup #() iFppiiLll @@ -2410,28 +2588,33 @@ #() iFppuippp #() iFppuuppp #() iFppupupp +#() iFppupppp #() iFppliupp #() iFppLiipp +#() iFppLiWwL #() iFppLippp #() iFppLuuii +#() iFppLLLLu #() iFppLpppp -#() iFpppiiuu #() iFpppiiup -#() iFpppiuwu #() iFpppippi #() iFpppippp #() iFpppuiii +#() iFpppuupu +#() iFpppulup #() iFpppLppp #() iFppppilp #() iFppppipp #() iFppppIip +#() iFppppupu #() iFppppdpu #() iFpppppip #() iFpppppLp +#() iFppppppi #() iFppppppu #() iFppppppp #() uFEiipppp -#() uFEpiippp +#() uFEpiuppp #() uFEpuuppp #() uFEpppppp #() uFiiiuuuu @@ -2442,6 +2625,7 @@ #() uFpuupppp #() uFppiuppi #() uFppiuppp +#() uFppuiupu #() uFppuuuup #() uFppppppp #() uFbCuuuuu @@ -2451,9 +2635,11 @@ #() LFEpppppu #() LFpLLuupp #() LFpLLppuu +#() LFpLppuuu #() pFEpupppp +#() pFEpLiiiI #() pFEpLiiil -#() pFEppuipp +#() pFEppLipp #() pFEppppip #() pFEpppppi #() pFifffppp @@ -2465,7 +2651,10 @@ #() pFpiiiiid #() pFpiiippp #() pFpiiUdii +#() pFpiipipp +#() pFpiiplui #() pFpiipppp +#() pFpipiupp #() pFpipippp #() pFpWppWpp #() pFpuLpipp @@ -2480,24 +2669,24 @@ #() pFpLppLLi #() pFppiiipp #() pFppiiCCC +#() pFppiipup #() pFppiippp #() pFppipipp #() pFppipLpp +#() pFppuipii #() pFppuippp #() pFppuuupp -#() pFppuuppp #() pFppuLLip #() pFppupuuu #() pFppliuip #() pFpplipup -#() pFppLipip #() pFppLLiLi +#() pFppLLppp #() pFpppccci #() pFpppiiii #() pFpppCCCi #() pFpppuipp #() pFpppuuui -#() pFpppuupp #() pFpppupii #() pFpppupup #() pFpppuppp @@ -2506,8 +2695,7 @@ #() pFpppllli #() pFpppLLLi #() pFppppiii -#() pFppppuuu -#() pFpppppuu +#() pFppppiip #() pFppppppu #() pFppppppp #() pFbCuwwWW @@ -2521,10 +2709,10 @@ #() iWpuuuppu #() iWpupuufu #() iWpppuppp -#() vFEiippppV -#() vFEiupippp -#() vFEipAippp -#() vFEppipppp +#() vFELippppV +#() vFELupippp +#() vFELpAippp +#() vFEppupppp #() vFEppLippp #() vFEppLpLpp #() vFEpppippp @@ -2543,8 +2731,8 @@ #() vFuiiipiup #() vFuiuiiiii #() vFuiuiiiip -#() vFuiuiiiuL -#() vFuiuiiCuL +#() vFuiuiiiuU +#() vFuiuiiCuU #() vFuiuiuuuu #() vFuCCCCfff #() vFuuiiiiiC @@ -2565,18 +2753,20 @@ #() vFpiiiiiip #() vFpiiiipii #() vFpiUuupup -#() vFpippiiuu -#() vFpippiipi +#() vFpiLLiipi +#() vFpiLpiiuu #() vFpuiULipp #() vFpudddddd #() vFpuppippp #() vFpuppLLLL #() vFpUiUiupi #() vFpUuuUUUu +#() vFpliicppp +#() vFpLiiiLii +#() vFpLLLiipi #() vFpLpLpLpp #() vFpLppiipi #() vFppiiiiii -#() vFppiiipii #() vFppipipiu #() vFppipppui #() vFppippppi @@ -2586,12 +2776,14 @@ #() vFppuppiiu #() vFpplppppi #() vFpplppppp +#() vFppLLiipi #() vFppLpLpLp +#() vFpppiipui #() vFpppipppu #() vFpppuiiii #() vFpppLpppp -#() vFppppiipi #() vFpppppuuu +#() vFppppppui #() vFpppppppp #() iFEuipuupp #() iFEpippppp @@ -2602,33 +2794,37 @@ #() iFEppppLpp #() iFEpppppuu #() iFEppppppp -#() iFiiiiiiip #() iFiiupiupi #() iFiuuCCuup #() iFiuuuupip #() iFipippppp +#() iFuiiiiuup #() iFuuuuuuuu +#() iFupipppip #() iFdiippppL #() iFpiiiuuup #() iFpipiipip -#() iFpippuuii +#() iFpippuuui #() iFpippuupp #() iFpCCWWpWu #() iFpWCuWCuu #() iFpuiipppp #() iFpuippLpp -#() iFpuuiiiii +#() iFpuuiiuuu #() iFpuuipppp #() iFpuuupupu #() iFpuupuupp #() iFpuuppiip #() iFpuuppppp +#() iFpuLLLppL +#() iFpupupuup #() iFpupppppp #() iFpUuuLpUu #() iFpduuulul #() iFpLLiippp #() iFpLLLiipi #() iFpLLppppp +#() iFpLpiLpLp #() iFpLpipppp #() iFpLpLpLpp #() iFpLppLpip @@ -2636,26 +2832,30 @@ #() iFpLpppppp #() iFppiiipip #() iFppillppp -#() iFppippppp +#() iFppipiipi #() iFppIIIppp #() iFppuiiuuu #() iFppuuuuuu #() iFppuppppp +#() iFppLpLpLi #() iFpppiiipi #() iFpppiiipp #() iFpppipipi #() iFppppiiup +#() iFppppiipp #() iFppppippp +#() iFppppuplu #() iFpppppupp #() iFppppppii +#() iFppppppuu #() iFpppppppi #() iFpppppppp #() iFbWWipppp #() iFbupppWWu #() CFuiifpppp -#() uFEipipppp -#() uFEpiupppp -#() uFEppipppp +#() uFEipupppp +#() uFEpuuuppp +#() uFEppupppp #() uFEpppuppp #() uFEppppppp #() uFuipppppp @@ -2670,12 +2870,12 @@ #() uFbCuuuCup #() uFbWWWWWWp #() LFELpupupu -#() LFEpiupppp +#() LFEpuuuppp #() LFpLpuuLLu #() pFEiplllpp #() pFEipLLLpp #() pFEpiuCppp -#() pFEppLiiip +#() pFEppLiiup #() pFEpppuipV #() pFEpppppiV #() pFEppppppi @@ -2688,7 +2888,7 @@ #() pFpiiiiiuu #() pFpiiuuupp #() pFpiUdiiUi -#() pFpipiiiip +#() pFpipiuiip #() pFpuuuuupp #() pFpuuuupup #() pFpupLLLpp @@ -2717,8 +2917,8 @@ #() vFEpippippV #() vFEpippippA #() vFEpuuuippp -#() vFEppiipppp -#() vFEpppiippp +#() vFEppuipppp +#() vFEpppuippp #() vFEpppLLpLp #() vFEppppippp #() vFiiiiiiiii @@ -2732,7 +2932,7 @@ #() vFuiiiiiuip #() vFuiiiiiuup #() vFuiuiiiiip -#() vFuiuiiiCuL +#() vFuiuiiiCuU #() vFuiupuffup #() vFuuiiiiiii #() vFuuiiiiiiC @@ -2746,19 +2946,19 @@ #() vFffCCCCfff #() vFddddddddd #() vFpiuippppi +#() vFpiLLpiipi +#() vFpiLpLiipi #() vFpipiuiipp -#() vFpipppiipi #() vFpuuuuuuuu +#() vFpLiiipiii #() vFpLpLpLLpp #() vFpLpppippp #() vFppiiiiiii #() vFppiiiiipi #() vFppiiiiupi -#() vFppiiipiii #() vFppiupiiii -#() vFppippDpDC +#() vFppippDpDc #() vFppipppiii -#() vFppipppiip #() vFppuippiip #() vFppuuiiiii #() vFppuuiiiiu @@ -2772,24 +2972,27 @@ #() vFpppiiiiii #() vFpppffffff #() vFppppipiip -#() vFpppppippp #() iFEpiiiiipi #() iFEppuppppp -#() iFEpppipppp +#() iFEpppupppp #() iFEppplPPPP #() iFEpppppupp #() iFEppppppuu #() iFEppPPPPPP -#() iFiiiiiiiip -#() iFiiiipiiip #() iFipiipippi +#() iFuiiuuiiip +#() iFuiiupiiup +#() iFuuppuuppu #() iFdddpppppp +#() iFpiLiiipip +#() iFpiLLLiiip #() iFpipippppi -#() iFpipLpiiip #() iFpuuuuuuuu +#() iFpuuuuuupp #() iFpuuuuduup #() iFpuuuLiiip #() iFpuuuLpppp +#() iFpuuppupuu #() iFpduuuLuLp #() iFpLiuiiLLL #() iFpLLiiuuii @@ -2798,14 +3001,14 @@ #() iFpLpppupup #() iFpLppppppp #() iFppiiiiiii +#() iFppipiiipi #() iFppippippp #() iFppuLLpupp #() iFppuppuuuu #() iFppupppupp +#() iFppLiipiiL #() iFppLpiuppp #() iFpppiiipip -#() iFpppiiuuii -#() iFpppiipiiu #() iFpppippipi #() iFpppLLLupp #() iFpppLppupp @@ -2814,7 +3017,7 @@ #() iFppppppupp #() iFppppppppu #() iFppppppppp -#() uFEipippppp +#() uFEipuppppp #() uFEpppufppp #() uFuulpiuiuf #() uFpuupuppuu @@ -2823,8 +3026,9 @@ #() lFpppipiipp #() lFpppippppp #() LFEppppppii +#() LFpLiiiiiip #() LFpLiiuuuLL -#() pFEppiiuuLi +#() pFEpLiiuuLi #() pFEppuippuu #() pFEpppppiiV #() pFEpppppppi @@ -2833,8 +3037,7 @@ #() pFpiiiiuuuu #() pFpLpLLipui #() pFpLppLLiLi -#() pFppiiiiiip -#() pFppipppppp +#() pFppupppppp #() pFpppiiiiii #() pFpppuipppp #() pFpppppiipp @@ -2848,9 +3051,9 @@ #() iWpiuuupipu #() iWpuiuuipip #() iWppppupiii -#() vFEiippppppp -#() vFEpippppppp -#() vFEpppiipppp +#() vFEiuppppppp +#() vFEpuppppppp +#() vFEpppuipppp #() vFEpppLuLpLp #() vFiiiiiiiiii #() vFiiiiiiiiiu @@ -2873,10 +3076,8 @@ #() vFffffffffff #() vFpiuippppip #() vFpuupuuuuuu -#() vFppiiiiiiii -#() vFppiiiiipip #() vFppiiiiupip -#() vFppiippppii +#() vFppipipippi #() vFppuipppiip #() vFppuuuiiiii #() vFppuuuuuuuu @@ -2890,15 +3091,17 @@ #() iFEpiiiiippp #() iFEpupppLppL #() iFEppppppipp -#() iFiiiiiiiiip -#() iFpiipiiipip -#() iFpippddiidd +#() iFuiiiuuiiip +#() iFpiiLiiipip +#() iFpiLLiiipip +#() iFpiLLdduudd #() iFpCuWCCCCup #() iFpuuLiuiiLL #() iFpLLpiiuuii #() iFpLpLUUUUpL -#() iFppuuiiiiii -#() iFppuuiiuupi +#() iFppuuiiuuuu +#() iFppLLiiLWpi +#() iFppLpLLpLpp #() iFppLpLpLLpp #() iFpppiiipipi #() iFpppLLipppp @@ -2908,7 +3111,7 @@ #() uFpddpippppp #() uFpppppppppp #() lFpLppdddddd -#() pFEiippppppp +#() pFEiuppppppp #() pFEpiiiiiipp #() pFEpippppppp #() pFpupLLLLLpp @@ -2929,7 +3132,6 @@ #() vFEppLpLpLLpp #() vFiiiiillliip #() vFiiiiilllilp -#() vFuiiiiiiiiip #() vFuiiiiiiiuip #() vFuiiiiiiiuup #() vFuiiiillliip @@ -2939,11 +3141,13 @@ #() vFuuffiiffiip #() vFuufffffffff #() vFuuddiiddiip +#() vFuUuuuuuuuuu #() vFuffffffffff -#() vFuLuuuuuuuuu -#() vFLufffffffff -#() vFpipipiipiii -#() vFpipppiiiipi +#() vFUufffffffff +#() vFpiiiiiiiiuu +#() vFpiLLpiiiipi +#() vFpiLpLiiiipi +#() vFpipipiipiiu #() vFpupuuupupup #() vFppiiiiiiiii #() vFppiiiiipiii @@ -2957,24 +3161,27 @@ #() vFppupppuiiii #() vFppppppppppp #() iFEiipppppppp +#() iFEpLppiiiiuu #() iFEppLpLpLLpp -#() iFEpppipppppp -#() iFEppppiiiiuu +#() iFEpppupppppp #() iFEpppppppppp -#() iFiiiiiiiiiip -#() iFpiippiiipip +#() iFuiiiiuuiiip +#() iFuppipipippi +#() iFpiiLLiiipip #() iFpippupppppp #() iFpuppppppppp #() iFpLipiiiippp #() iFpLLpiiuuiiL #() iFppippipppip +#() iFppuupLiupii #() iFppuppLLpupp #() iFpppiiuuiiuu +#() iFpppippppppp #() iFpppppiiuupp -#() uFEpLiupppLuV -#() uFEpLippppLup -#() uFEpLippppLuA -#() uFEppppppippp +#() uFEpLuupppLuV +#() uFEpLuppppLup +#() uFEpLuppppLuA +#() uFEppppppuppp #() uFppppppppppp #() pFEpipppppppi #() pFEppiiLpppip @@ -2984,58 +3191,58 @@ #() iWEpuipuppppp #() iWEpuuiiuippu #() iWEpuuuuuiipp -#() vFuiiiiiiiiuLC +#() vFuiiiiiiiiuUC #() vFuiiiiiiiuuip -#() vFuuiiiiiiiiui #() vFuuiiiiiiiiuu #() vFuuiiiiiiiuip #() vFuuiiiiiiiuup #() vFuuuuuuuuuuuu #() vFffffffffffff -#() vFpipppiiiipii -#() vFpippppiiiipi +#() vFpiLLpiiiipii +#() vFpiLLpLiiiipi +#() vFpiLpLiiiipui #() vFpupppppppppp +#() vFpLiiuuuiupLp #() vFppiiiiddddii -#() vFppiiuuuiupup #() vFppiipppiiiii #() vFppuuppuiiiii #() vFppuupppiiiiu -#() vFpppiiiiiiiii #() vFpppiiiiiiuii #() vFpppppppppppp -#() iFEpppippppppp -#() iFEppppiiiiuui -#() iFpipllipppppp -#() iFpipppppppppp +#() iFEpLppiiiiuui +#() iFEpppuppppppp +#() iFpiLlliLppppp +#() iFpiLppppppppp #() iFpCCCWCWCCCWp #() iFpLLlliLppppp -#() iFpppllipppppp +#() iFpLpuuLpLpppL +#() iFpLpppppppppp +#() iFppLlliLppppp #() iFpppppppppppp -#() pFEppiiuuuipii +#() LFpLiiuuuiupLp +#() pFEpLiiuuLipii #() pFEppppppppppp #() pFWWiCCCCiipup -#() pFppiiuuuiupLp #() pFppippLLLiLpp #() pFppuuppppuppp #() pFpppppppppppp #() pFbCuuWWwwCCup #() pFbuuuWWWWWWWW -#() vFEpppppppiippp +#() vFEpppppppuippp #() vFuiiiiiiiiiuup #() vFuuuuuuuuuuuuu +#() vFuUuuuuuuuuuuu #() vFuffffffffffff -#() vFuLuuuuuuuuuuu -#() vFpipppiiiiiiuu +#() vFpiLLLiiiiiiuu #() vFpippppppppppp -#() vFpuppppppppppp -#() vFppiiiiiiiiiii +#() vFpLppppppppppp #() vFppiiiiiiuiuii #() vFppuuppiiiiuii #() vFppuupppuiiiii #() vFppppppppppppp #() iFddddpppddpppp #() iFpippuuuiipppp -#() iFpupiiiipppppp +#() iFpLLlliiLppppp #() iFppppppLLLLupp #() uFippuuuulllipp #() uFpppppuupppppp @@ -3061,13 +3268,15 @@ #() vFppppppppppppppp #() pFpuiippppppppppp #() pFppipppppppppppp +#() pFppupppppppppppp #() pFppppppppppppppp #() vFpppppppppppppppp #() iFpppppppppppppppp +#() pFpipppppppppppppp #() pFppipipipipipipip +#() pFppupupupupupupup #() pFpppppppppppppppp #() pFbuuWWWWWWwwCCCuu -#() vFuuuiiiiiuiiiiilll #() vFuuuuiiiiuuiiiiiii #() vFppiiiiddddiiiiiuu #() vFpppuppiipppuUUUpi @@ -3082,46 +3291,28 @@ #() vFpiiiiiiiiiiiiiiiiii #() uFbWWWCCCCCCCCWCCCCCC #() pFiiiippppppppppppppp -#() pFpippppppppppppppppp +#() pFppppppppppppppppppp #() pFpupupppppppppppppppp #() iFpppppppppppppppppppppp #() uFippuuuuiiiiuuiiiiiiiipp #() vFpppppppppppppppppppppppp #() pFpupuupppppppppppppppppppp #() iFpppppppppppppppppppppppppppppppppp -#defined(HAVE_LD80BITS) DFD -#defined(HAVE_LD80BITS) DFY -#defined(HAVE_LD80BITS) lFD -#defined(HAVE_LD80BITS) YFY -#defined(HAVE_LD80BITS) IFED -#defined(HAVE_LD80BITS) DFiD -#defined(HAVE_LD80BITS) lFDD -#defined(HAVE_LD80BITS) YFYY -#defined(HAVE_LD80BITS) vFDpp -#defined(HAVE_LD80BITS) DFDDD -#!defined(HAVE_LD80BITS) KFK -#!defined(HAVE_LD80BITS) KFy -#!defined(HAVE_LD80BITS) lFK -#!defined(HAVE_LD80BITS) yFy -#!defined(HAVE_LD80BITS) IFEK -#!defined(HAVE_LD80BITS) KFiK -#!defined(HAVE_LD80BITS) KFKK -#!defined(HAVE_LD80BITS) KFKp -#!defined(HAVE_LD80BITS) lFKK -#!defined(HAVE_LD80BITS) yFyy -#!defined(HAVE_LD80BITS) vFKpp -#!defined(HAVE_LD80BITS) KFKKK #defined(NOALIGN) iFipiip +#!defined(NOALIGN) iFELp #!defined(NOALIGN) iFEppu #!defined(NOALIGN) iFEiiip #!defined(NOALIGN) iFEipii #!defined(NOALIGN) iFEipiip +#!defined(STATICBUILD) lFiN #!defined(STATICBUILD) iFlip #!defined(STATICBUILD) iFLLi -#!defined(STATICBUILD) iFLLiW +#!defined(STATICBUILD) iFLLii +#!defined(STATICBUILD) WFpLLu #!defined(STATICBUILD) iFEipup #!defined(STATICBUILD) iFEiipup #!defined(STATICBUILD) iFpipppL +#!defined(STATICBUILD) lFpLpdddddd #() vFEv -> vFE #() iFEv -> iFE #() lFEv -> lFE @@ -3148,6 +3339,11 @@ wrappedatspi: - pFppp: - atspi_event_listener_new wrappedayatanaappindicator3: +wrappedbrotlidec: +- pFppp: + - BrotliDecoderCreateInstance +- vFpppp: + - BrotliDecoderSetMetadataCallbacks wrappedbz2: - iFp: - BZ2_bzCompressEnd @@ -3222,10 +3418,11 @@ wrappedcrypto3: - CRYPTO_set_locking_callback - pFp: - OPENSSL_sk_new + - X509V3_EXT_get - vFpp: - - X509_STORE_CTX_set_verify_cb -- pFpp: - OPENSSL_sk_pop_free + - X509_STORE_CTX_set_verify_cb + - X509_STORE_set_verify_cb - vFppp: - EVP_MD_do_all_provided - iFppp: @@ -3239,11 +3436,14 @@ wrappedcrypto3: - pFpppp: - ASN1_d2i_bio - PEM_read_DHparams + - PEM_read_bio_DHparams - PEM_read_bio_DSAPrivateKey - PEM_read_bio_DSA_PUBKEY - PEM_read_bio_ECPrivateKey - PEM_read_bio_EC_PUBKEY - PEM_read_bio_PKCS7 + - PEM_read_bio_PUBKEY + - PEM_read_bio_PrivateKey - PEM_read_bio_RSAPrivateKey - PEM_read_bio_RSA_PUBKEY - PEM_read_bio_X509 @@ -3258,6 +3458,8 @@ wrappedcrypto3: - iFppppipp: - PEM_write_bio_DSAPrivateKey - PEM_write_bio_ECPrivateKey + - PEM_write_bio_PrivateKey + - PEM_write_bio_PrivateKey_traditional - PEM_write_bio_RSAPrivateKey wrappedcurl: - iFpup: @@ -3265,6 +3467,8 @@ wrappedcurl: - uFpup: - curl_easy_setopt - curl_share_setopt +- iFlppppp: + - curl_global_init_mem wrappedd3dadapter9: - pWp: - D3DAdapter9GetProc @@ -3416,12 +3620,8 @@ wrappedgdk3: - gdk_event_handler_set - gdk_window_add_filter - gdk_window_remove_filter -- iFiipp: - - gdk_input_add - uFippp: - gdk_threads_add_idle_full -- iFiippp: - - gdk_input_add_full - uFiuppp: - gdk_threads_add_timeout_full wrappedgdkpixbuf2: @@ -3467,55 +3667,54 @@ wrappedgio2: - vFpippp: - g_async_initable_init_async - vFpuipV: - - g_task_return_new_error -- vFppipV: - g_simple_async_result_set_error -- vFppipA: + - g_task_return_new_error +- vFpuipA: - g_simple_async_result_set_error_va -- pFppppV: +- pFLpppV: - g_initable_new -- pFppApp: +- pFLpApp: - g_initable_new_valist -- vFpipppp: +- vFpupppp: - g_dbus_connection_new_for_address -- vFiippppV: +- vFLippppV: - g_async_initable_new_async -- vFiupippp: +- vFLupippp: - g_async_initable_newv_async -- vFipAippp: +- vFLpAippp: - g_async_initable_new_valist_async -- vFppipppp: +- vFppupppp: - g_dbus_connection_new - vFppLippp: - g_input_stream_read_async - vFpppuipV: - g_simple_async_report_error_in_idle -- uFipipppp: +- uFipupppp: - g_bus_watch_name -- uFppipppp: +- uFppupppp: - g_bus_own_name_on_connection - g_bus_watch_name_on_connection - uFppppppp: - g_dbus_connection_register_object - pFpppuipV: - g_simple_async_result_new_error -- vFppiipppp: +- vFppuipppp: - g_dbus_connection_send_message_with_reply -- vFpppiippp: +- vFpppuippp: - g_dbus_proxy_call -- uFipippppp: +- uFipuppppp: - g_bus_own_name -- vFiippppppp: +- vFiuppppppp: - g_dbus_proxy_new_for_bus -- vFpippppppp: +- vFpuppppppp: - g_dbus_proxy_new -- vFpppiipppp: +- vFpppuipppp: - g_dbus_proxy_call_with_unix_fd_list -- pFiippppppp: +- pFiuppppppp: - g_dbus_object_manager_client_new_for_bus_sync -- uFppppppippp: +- uFppppppuppp: - g_dbus_connection_signal_subscribe -- vFpppppppiippp: +- vFpppppppuippp: - g_dbus_connection_call wrappedglesv2: wrappedglib2: @@ -3582,6 +3781,7 @@ wrappedglib2: - g_ptr_array_foreach - g_ptr_array_sort_with_data - g_queue_foreach + - g_slist_foreach - g_static_private_set - vFppV: - g_string_append_printf @@ -3615,7 +3815,6 @@ wrappedglib2: - g_once_impl - g_queue_find_custom - g_slist_find_custom - - g_slist_foreach - g_slist_insert_sorted - g_slist_sort_with_data - g_thread_new @@ -3637,16 +3836,16 @@ wrappedglib2: - uFippp: - g_idle_add_full - uFpipp: - - g_io_add_watch - g_log_set_handler -- pFpipp: - - g_markup_parse_context_new -- pFpipV: +- uFpupp: + - g_io_add_watch +- pFuipV: - g_error_new -- pFpipA: +- pFuipA: - g_error_new_valist - pFpupp: - g_datalist_id_dup_data + - g_markup_parse_context_new - pFpLpp: - g_bytes_new_with_free_func - pFppip: @@ -3658,7 +3857,7 @@ wrappedglib2: - g_thread_try_new - vFpiLpp: - g_qsort_with_data -- vFppipV: +- vFpuipV: - g_set_error - uFiippp: - g_child_watch_add_full @@ -3667,21 +3866,21 @@ wrappedglib2: - g_timeout_add_seconds_full - pFppppp: - g_option_group_new -- vFpiiipp: +- vFpuuipp: - g_node_traverse - iFpupppp: - g_datalist_id_replace_data -- uFpiippp: +- uFpiuppp: - g_io_add_watch_full -- pFppuipp: +- pFppLipp: - g_variant_new_from_data -- pFppLiiip: +- pFppLiiup: - g_thread_create_full -- iFpppipppp: +- iFpppupppp: - g_spawn_async -- iFpppipppppp: +- iFpppupppppp: - g_spawn_sync -- iFpppippppppp: +- iFpppuppppppp: - g_spawn_async_with_pipes wrappedgmodule2: wrappedgmp: @@ -3702,21 +3901,21 @@ wrappedgobject2: - g_type_class_peek_parent - vFpp: - g_closure_set_marshal -- iFpp: +- LFpp: - g_param_type_register_static - pFpp: - g_value_array_sort -- vFiip: - - g_value_register_transform_func - vFLLp: - g_type_add_interface_static + - g_value_register_transform_func - vFpup: - g_object_class_install_properties +- vFpLp: + - g_signal_override_class_handler - vFppp: - g_closure_add_finalize_notifier - g_closure_remove_finalize_notifier - g_object_weak_ref - - g_signal_override_class_handler - vFppV: - g_object_get - g_object_set @@ -3737,36 +3936,36 @@ wrappedgobject2: - g_object_connect - vFpuuV: - g_signal_emit +- vFpuuA: + - g_signal_emit_valist - vFpupp: + - g_object_set_qdata_full - g_param_spec_set_qdata_full -- vFpupA: - - g_signal_emit_valist - vFpppp: - g_object_set_data_full - - g_object_set_qdata_full -- LFLppi: +- LFLppu: - g_type_register_static -- LFupppp: +- LFuuppp: - g_signal_add_emission_hook -- LFLpppi: +- LFLpppu: - g_type_register_fundamental -- LFppppi: +- LFppppu: - g_signal_connect_object - LFpppppu: - g_signal_connect_data -- uFpiupppp: +- uFpuuuppp: - g_signal_handlers_block_matched - g_signal_handlers_disconnect_matched - g_signal_handlers_unblock_matched - LFLpupupu: - g_type_register_static_simple -- LFpiupppp: +- LFpuuuppp: - g_signal_handler_find -- uFpLiupppLuV: +- uFpLuupppLuV: - g_signal_new -- uFpLippppLup: +- uFpLuppppLup: - g_signal_newv -- uFpLippppLuA: +- uFpLuppppLuA: - g_signal_new_valist wrappedgomp: - vFppuu: @@ -3911,20 +4110,20 @@ wrappedgthread2: - g_thread_init - g_thread_init_with_errorcheck_mutexes wrappedgtk3: -- pFi: - - gtk_type_class - vFpp: - gtk_builder_connect_signals - gtk_init +- vFpV: + - gtk_style_context_get_style - vFpA: - gtk_style_context_get_style_valist -- iFLp: - - gtk_type_unique - iFpp: - gtk_init_check -- pFuV: +- pFiV: - gtk_tree_store_new -- vFpiA: +- vFpuV: + - gtk_style_context_get +- vFpuA: - gtk_style_context_get_valist - vFppp: - gtk_builder_connect_signals_full @@ -3936,19 +4135,16 @@ wrappedgtk3: - gtk_dialog_add_buttons - gtk_message_dialog_format_secondary_markup - gtk_message_dialog_format_secondary_text - - gtk_style_context_get - gtk_tree_store_set - gtk_widget_style_get - vFppA: - gtk_tree_store_set_valist -- uFupp: - - gtk_timeout_add - vFppiV: - gtk_list_store_insert_with_values - vFpppi: - gtk_enumerate_printers - vFpppp: - - gtk_object_set_data_full + - gtk_list_box_set_header_func - gtk_print_job_send - gtk_stock_set_translate_func - gtk_tree_sortable_set_default_sort_func @@ -3969,20 +4165,6 @@ wrappedgtk3: - gtk_init_with_args - vFpppppuu: - gtk_menu_popup -- pFppppppi: - - gtk_toolbar_insert_stock -- pFppppppp: - - gtk_toolbar_append_item - - gtk_toolbar_prepend_item -- LFppppppii: - - gtk_signal_connect_full -- pFpppppppi: - - gtk_toolbar_insert_item -- pFpippppppp: - - gtk_toolbar_append_element - - gtk_toolbar_prepend_element -- pFpipppppppi: - - gtk_toolbar_insert_element wrappedgtkx112: - fFp: - gtk_spin_button_get_value_as_float @@ -3994,6 +4176,8 @@ wrappedgtkx112: - iFpp: - gtk_init_check - gtk_type_unique +- uFpp: + - gtk_key_snooper_install - pFiV: - gtk_list_store_new - gtk_tree_store_new @@ -4080,12 +4264,14 @@ wrappedicui18n67: wrappedicui18n72: wrappedicui18n73: wrappedicui18n74: +wrappedicui18n75: wrappedicuuc64: wrappedicuuc66: wrappedicuuc67: wrappedicuuc72: wrappedicuuc73: wrappedicuuc74: +wrappedicuuc75: wrappedidn2: wrappedkrb5: - iFppppppipp: @@ -4104,8 +4290,16 @@ wrappedlibasound: - iFp: - snd_dlclose - snd_lib_error_set_handler +- pFp: + - snd_mixer_class_get_compare + - snd_mixer_class_get_event - vFpp: - snd_mixer_elem_set_callback +- iFpp: + - snd_mixer_class_set_compare + - snd_mixer_class_set_event + - snd_mixer_class_set_private_free + - snd_mixer_set_compare - pFppp: - snd_dlsym - iFpipp: @@ -4114,6 +4308,10 @@ wrappedlibasound: - snd_async_add_pcm_handler - pFpipL: - snd_dlopen +- iFpuipp: + - snd_mixer_elem_new +- iFppupp: + - snd_pcm_hook_add wrappedlibbsd: wrappedlibc: - vFv: @@ -4125,12 +4323,14 @@ wrappedlibc: - vFp: - _ITM_deregisterTMCloneTable - __cxa_finalize + - qemu_host_direct_call - iFv: - fork - vfork - iFi: - iopl - iFp: + - __libc_dlclose - _setjmp - atexit - getcontext @@ -4139,12 +4339,11 @@ wrappedlibc: - setjmp - stime - uname -- IFi: - - sysconf - lFv: - syscall - lFi: - __sysconf + - sysconf - LFL: - getauxval - pFp: @@ -4167,6 +4366,9 @@ wrappedlibc: - vFpV: - warn - warnx +- vFpA: + - vwarn + - vwarnx - iFip: - fstat - fstat64 @@ -4195,12 +4397,15 @@ wrappedlibc: - execle - execlp - printf + - scanf - wprintf + - wscanf - iFpA: - __isoc99_vscanf - vprintf - vscanf - vwprintf + - vwscanf - iFSp: - _IO_file_stat - pFip: @@ -4210,17 +4415,22 @@ wrappedlibc: - sigset - sysv_signal - pFpi: + - __libc_dlopen_mode - backtrace_symbols - pFpp: + - __libc_dlsym - __realpath_chk + - realpath +- SFpp: - fopen - fopen64 - - realpath - vFipV: - err - errx - syslog - vFipA: + - verr + - verrx - vsyslog - vFpii: - backtrace_symbols_fd @@ -4258,36 +4468,41 @@ wrappedlibc: - __vfprintf_chk - __vsscanf - execve + - execvpe - iFppV: - __asprintf - - __isoc23_fscanf - __isoc23_sscanf - __isoc99_fscanf - __isoc99_sscanf - __isoc99_swscanf - asprintf - - fprintf - - fscanf - - fwprintf - sprintf - sscanf - swscanf - iFppA: + - __isoc23_vsscanf - __isoc99_vfscanf - __isoc99_vsscanf - __isoc99_vswscanf - obstack_vprintf - vasprintf - - vfprintf - - vfscanf - - vfwprintf - vsprintf - vsscanf - vswscanf -- iFpOu: +- iFpON: - __open - open - open64 +- iFSpV: + - __isoc23_fscanf + - fprintf + - fscanf + - fwprintf +- iFSpA: + - vfprintf + - vfscanf + - vfwprintf + - vfwscanf - lFipV: - __wprintf_chk - lFppL: @@ -4306,10 +4521,13 @@ wrappedlibc: - fopencookie - vFiipV: - __syslog_chk + - error - vFiipA: - __vsyslog_chk - vFpLLp: - qsort +- vFppiV: + - makecontext - vFpppp: - __libc_init - iFiiip: @@ -4327,8 +4545,6 @@ wrappedlibc: - iFippi: - fstatat - fstatat64 -- iFippL: - - readlinkat - iFpipp: - __vasprintf_chk - glob @@ -4349,15 +4565,17 @@ wrappedlibc: - vswprintf - iFppii: - nftw64 -- iFppiV: - - makecontext - iFpppp: - __register_atfork - __vsprintf_chk - scandir - scandir64 +- lFippL: + - readlinkat - lFuipp: - ptrace +- lFppLL: + - __readlink_chk - vFpLLpp: - qsort_r - iFiipup: @@ -4369,16 +4587,18 @@ wrappedlibc: - prctl - iFipiip: - epoll_pwait +- iFipiup: + - statx - iFipppp: - getopt_long - getopt_long_only - scandirat +- iFpiipp: + - _obstack_begin - iFpilpV: - __sprintf_chk - iFpuppp: - __vswprintf_chk -- iFpLLpp: - - _obstack_begin - pFpLLiN: - mremap - pFppLLp: @@ -4386,6 +4606,8 @@ wrappedlibc: - pFpppLp: - lfind - lsearch +- vFiipupV: + - error_at_line - iFpLiLpp: - __vsnprintf_chk - iFpLiLpV: @@ -4394,9 +4616,10 @@ wrappedlibc: - iFpppppp: - posix_spawn - posix_spawnp +- pFpLiiiI: + - mmap64 - pFpLiiil: - mmap - - mmap64 - iFpippppp: - __libc_start_main - iFppipppp: @@ -4431,6 +4654,7 @@ wrappedlibdl: wrappedlibdrm: - vFpV: - drmMsg +wrappedlibdrmamdgpu: wrappedlibegl: - pFp: - eglGetProcAddress @@ -4473,7 +4697,7 @@ wrappedlibgl: - vFppp: - eglSetBlobCacheFuncsANDROID wrappedlibglu: -- vFpip: +- vFpup: - gluNurbsCallback - gluQuadricCallback - gluTessCallback @@ -4596,8 +4820,6 @@ wrappedlibm: - llrint - IFD: - llrintl -- IFK: - - llrintl - fFf: - __acosf_finite - __acoshf_finite @@ -4630,8 +4852,6 @@ wrappedlibm: - rint - DFD: - pow10l -- KFK: - - pow10l - fFff: - __atan2f_finite - __fmodf_finite @@ -4744,8 +4964,11 @@ wrappedlibpthread: - pthread_barrierattr_destroy - pthread_barrierattr_init - pthread_cond_broadcast + - pthread_cond_broadcast@GLIBC_2.2.5 - pthread_cond_destroy + - pthread_cond_destroy@GLIBC_2.2.5 - pthread_cond_signal + - pthread_cond_signal@GLIBC_2.2.5 - pthread_condattr_destroy - pthread_condattr_init - pthread_getattr_default_np @@ -4788,13 +5011,17 @@ wrappedlibpthread: - pthread_attr_getscope - pthread_attr_getstackaddr - pthread_attr_getstacksize + - pthread_attr_setaffinity_np@GLIBC_2.3.3 - pthread_attr_setschedparam - pthread_attr_setstackaddr - pthread_barrierattr_getpshared - pthread_cond_init + - pthread_cond_init@GLIBC_2.2.5 - pthread_cond_wait + - pthread_cond_wait@GLIBC_2.2.5 - pthread_condattr_getclock - pthread_condattr_getpshared + - pthread_getaffinity_np@GLIBC_2.3.3 - pthread_key_create - pthread_mutex_init - pthread_mutexattr_getkind_np @@ -4802,6 +5029,7 @@ wrappedlibpthread: - pthread_mutexattr_getrobust - pthread_mutexattr_gettype - pthread_once + - pthread_setaffinity_np@GLIBC_2.3.3 - vFppp: - _pthread_cleanup_push - _pthread_cleanup_push_defer @@ -4818,6 +5046,7 @@ wrappedlibpthread: - pthread_atfork - pthread_attr_getstack - pthread_cond_timedwait + - pthread_cond_timedwait@GLIBC_2.2.5 - iFppip: - pthread_cond_clockwait - iFpppp: @@ -4883,12 +5112,25 @@ wrappedlibssl3: - SSL_CTX_get_verify_callback - SSL_get_verify_callback - vFpp: + - SSL_CTX_sess_set_new_cb - SSL_CTX_set_client_cert_cb + - SSL_CTX_set_cookie_generate_cb + - SSL_CTX_set_cookie_verify_cb - SSL_CTX_set_default_passwd_cb - SSL_CTX_set_keylog_callback - SSL_CTX_set_msg_callback + - SSL_set_info_callback - SSL_set_msg_callback - SSL_set_psk_client_callback + - SSL_set_psk_server_callback + - SSL_set_psk_use_session_callback +- iFpp: + - BIO_meth_set_create + - BIO_meth_set_ctrl + - BIO_meth_set_destroy + - BIO_meth_set_puts + - BIO_meth_set_read + - BIO_meth_set_write - vFpip: - SSL_CTX_set_verify - SSL_set_verify @@ -4911,6 +5153,8 @@ wrappedlibtinfo6: - tputs wrappedlibunistring2: wrappedlibusb1: +- vFp: + - libusb_free_transfer - iFp: - libusb_cancel_transfer - libusb_submit_transfer @@ -4931,9 +5175,12 @@ wrappedlibvdpau: - vdp_device_create_x11 wrappedlibvorbis: wrappedlibx11: +- vFp: + - XcmsFreeCCC - iFp: - XDestroyImage - XInitImage + - _XInitImageFuncPtrs - pFp: - XOpenDisplay - XSetErrorHandler @@ -4950,15 +5197,16 @@ wrappedlibx11: - XCreateIC - XSetICValues - XSetIMValues +- vFppp: + - XRemoveConnectionWatch - iFppp: - XAddConnectionWatch - - XRemoveConnectionWatch - pFpip: - XESetCloseDisplay - XESetError - XESetEventToWire - XESetWireToEvent -- pFpuL: +- pFpCL: - _XGetRequest - iFpppp: - XCheckIfEvent @@ -4969,18 +5217,19 @@ wrappedlibx11: - iFpppppp: - XRegisterIMInstantiateCallback - XUnregisterIMInstantiateCallback -- pFppiiuuLi: +- pFpLiiuuLi: - XGetImage -- iFppppiiiiuu: +- iFpLppiiiiuu: - XPutImage - pFppuiipuuii: - XCreateImage -- pFppiiuuuipii: +- pFpLiiuuLipii: - XGetSubImage wrappedlibx11xcb: - pFp: - XGetXCBConnection wrappedlibxau: +wrappedlibxaw: wrappedlibxcb: - vFp: - xcb_disconnect @@ -5013,16 +5262,18 @@ wrappedlibxdmcp: wrappedlibxext: - pFp: - XSetExtensionErrorHandler -- iFpppiiu: +- iFpLpiiL: - XShmGetImage - pFppppip: - XextAddDisplay - pFppuippuu: - XShmCreateImage -- iFppppiiiiuui: +- iFpLppiiiiuui: - XShmPutImage wrappedlibxfixes: wrappedlibxft: +- pFpiV: + - XftFontOpen wrappedlibxi: wrappedlibxmu: wrappedlibxpm: @@ -5206,7 +5457,7 @@ wrappedpulse: - pa_stream_prebuf - pa_stream_trigger - pa_stream_update_timing_info -- iFppip: +- iFppup: - pa_context_connect - iFpppV: - pa_proplist_setf @@ -5237,9 +5488,6 @@ wrappedpulse: - pa_stream_set_name - pFpiupp: - pa_ext_device_restore_read_formats -- pFpippp: - - pa_context_proplist_update - - pa_stream_proplist_update - pFpuipp: - pa_context_set_sink_input_mute - pa_context_set_sink_mute_by_index @@ -5248,17 +5496,19 @@ wrappedpulse: - pa_context_move_sink_input_by_index - pa_context_move_source_output_by_index - pFpuppp: + - pa_context_proplist_update - pa_context_set_card_profile_by_index - pa_context_set_sink_input_volume - pa_context_set_sink_port_by_index - pa_context_set_sink_volume_by_index - pa_context_set_source_port_by_index - pa_context_set_source_volume_by_index + - pa_stream_proplist_update - pFppppp: - pa_context_load_module - pa_context_set_sink_port_by_name - pa_context_set_source_volume_by_name -- iFppLpIi: +- iFppLpIu: - pa_stream_write - pFpiuCppp: - pa_ext_device_restore_save_formats @@ -5483,12 +5733,12 @@ wrappedsdl2: - SDL_vsnprintf - iFpLpV: - SDL_snprintf -- uFppuu: +- LFppLL: - SDL_RWread - SDL_RWwrite - vFGpppp: - SDL_GetJoystickGUIDInfo -- iFpippi: +- uFpippi: - SDL_OpenAudioDevice - pFpippp: - SDL_LoadWAV_RW @@ -5782,6 +6032,8 @@ wrappedvulkan: - vFpuuuupupup: - vkCmdPipelineBarrier wrappedwaylandclient: +- vFp: + - wl_log_set_handler_client - iFppp: - wl_proxy_add_listener wrappedwaylandcursor: diff --git a/src/wrapped/generated/wrappedaluredefs.h b/src/wrapped/generated/wrappedaluredefs.h index 25481ebd1872bc933af9188f129a999d4d75d7ac..94cae86a37896ec68cef6a458495e3c16cbb43fb 100644 --- a/src/wrapped/generated/wrappedaluredefs.h +++ b/src/wrapped/generated/wrappedaluredefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedalureDEFS_H_ #define __wrappedalureDEFS_H_ diff --git a/src/wrapped/generated/wrappedaluretypes.h b/src/wrapped/generated/wrappedaluretypes.h index 6026c995f5a1695e19ce771b2afa9bbb4a67fbc9..37f019c775d92d0d698b3c499b4800370abaaafc 100644 --- a/src/wrapped/generated/wrappedaluretypes.h +++ b/src/wrapped/generated/wrappedaluretypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedalureTYPES_H_ #define __wrappedalureTYPES_H_ diff --git a/src/wrapped/generated/wrappedalureundefs.h b/src/wrapped/generated/wrappedalureundefs.h index 35d18761a4c23c261f03fb60b27cd7be04258e04..da553f714c37c2c86ec7bbe071a183b7a099bc52 100644 --- a/src/wrapped/generated/wrappedalureundefs.h +++ b/src/wrapped/generated/wrappedalureundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedalureUNDEFS_H_ #define __wrappedalureUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedalutdefs.h b/src/wrapped/generated/wrappedalutdefs.h index 932f9b40f29391f6d59c8127ef1dd1bdfb7c1723..130b8e49f4687ded9e677fddeba2bc9e80cf99df 100644 --- a/src/wrapped/generated/wrappedalutdefs.h +++ b/src/wrapped/generated/wrappedalutdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedalutDEFS_H_ #define __wrappedalutDEFS_H_ diff --git a/src/wrapped/generated/wrappedaluttypes.h b/src/wrapped/generated/wrappedaluttypes.h index fd59c671a6a5cbf63a509bb1d74a62c8cd192b79..8855b71de17616d718155663c3342522ad29bad0 100644 --- a/src/wrapped/generated/wrappedaluttypes.h +++ b/src/wrapped/generated/wrappedaluttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedalutTYPES_H_ #define __wrappedalutTYPES_H_ diff --git a/src/wrapped/generated/wrappedalutundefs.h b/src/wrapped/generated/wrappedalutundefs.h index 837ffbd35e9c52939dc85822c42058b6a1acfcd2..da95bce52070f1dbe8f0ced8b155680aab135bd3 100644 --- a/src/wrapped/generated/wrappedalutundefs.h +++ b/src/wrapped/generated/wrappedalutundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedalutUNDEFS_H_ #define __wrappedalutUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedanldefs.h b/src/wrapped/generated/wrappedanldefs.h index 6c72df2898e98326cad5ff5f2470c375146f4dd2..caa9133606c413bb92f1810599bd6d1e4e443b2f 100644 --- a/src/wrapped/generated/wrappedanldefs.h +++ b/src/wrapped/generated/wrappedanldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedanlDEFS_H_ #define __wrappedanlDEFS_H_ diff --git a/src/wrapped/generated/wrappedanltypes.h b/src/wrapped/generated/wrappedanltypes.h index 4c56eb37501797c7107a24f1e968f8cfc76b3b9d..9c9f067991032b4486fe03680f3ba5df470c7a07 100644 --- a/src/wrapped/generated/wrappedanltypes.h +++ b/src/wrapped/generated/wrappedanltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedanlTYPES_H_ #define __wrappedanlTYPES_H_ diff --git a/src/wrapped/generated/wrappedanlundefs.h b/src/wrapped/generated/wrappedanlundefs.h index ed0ba39f330e08ac367429695b4a46487cc2c5c9..1bf3eb6833b70c6bbeb1a2beac1e08d78f8bc5e4 100644 --- a/src/wrapped/generated/wrappedanlundefs.h +++ b/src/wrapped/generated/wrappedanlundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedanlUNDEFS_H_ #define __wrappedanlUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedatkbridgedefs.h b/src/wrapped/generated/wrappedatkbridgedefs.h index a7aa9e4f3902807721b1b3e67f77d09f1a9b4e9f..7df73b43777eac1e19ada0dea4e8b200ccb0c392 100644 --- a/src/wrapped/generated/wrappedatkbridgedefs.h +++ b/src/wrapped/generated/wrappedatkbridgedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedatkbridgeDEFS_H_ #define __wrappedatkbridgeDEFS_H_ diff --git a/src/wrapped/generated/wrappedatkbridgetypes.h b/src/wrapped/generated/wrappedatkbridgetypes.h index fc55a5e431fb8e8eea81c6b36200de0b02072b3c..b8eb2120af27153a3164b6ea2939aed2a2f08324 100644 --- a/src/wrapped/generated/wrappedatkbridgetypes.h +++ b/src/wrapped/generated/wrappedatkbridgetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedatkbridgeTYPES_H_ #define __wrappedatkbridgeTYPES_H_ diff --git a/src/wrapped/generated/wrappedatkbridgeundefs.h b/src/wrapped/generated/wrappedatkbridgeundefs.h index 2549ad2e6a4a6625f13525246416b3e1b2cc54f5..c10bb75b78eda38caa86e212d1a60e97a9ecea97 100644 --- a/src/wrapped/generated/wrappedatkbridgeundefs.h +++ b/src/wrapped/generated/wrappedatkbridgeundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedatkbridgeUNDEFS_H_ #define __wrappedatkbridgeUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedatkdefs.h b/src/wrapped/generated/wrappedatkdefs.h index e5408284a1718600323d0a7050cde7598dcc1451..7d51b10a363f18b8bc26c6539aa7f9f3e55efe59 100644 --- a/src/wrapped/generated/wrappedatkdefs.h +++ b/src/wrapped/generated/wrappedatkdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedatkDEFS_H_ #define __wrappedatkDEFS_H_ diff --git a/src/wrapped/generated/wrappedatktypes.h b/src/wrapped/generated/wrappedatktypes.h index 98cae437b021ebedaed7ca92e720f65839232c84..d10f509f263d34535cbcf5adadfce8ad102c8e7a 100644 --- a/src/wrapped/generated/wrappedatktypes.h +++ b/src/wrapped/generated/wrappedatktypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedatkTYPES_H_ #define __wrappedatkTYPES_H_ diff --git a/src/wrapped/generated/wrappedatkundefs.h b/src/wrapped/generated/wrappedatkundefs.h index c100ca473c3a413f2199c692848cd6f1f07d6fa2..da71e6c17d2c00ab7233765ce46ba5d881c64dfe 100644 --- a/src/wrapped/generated/wrappedatkundefs.h +++ b/src/wrapped/generated/wrappedatkundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedatkUNDEFS_H_ #define __wrappedatkUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedatomicdefs.h b/src/wrapped/generated/wrappedatomicdefs.h index 7c0be63851ad96cc6a546d24ab5df1e29c291fea..0f15196b4f882c9cffdb8ab5adb11a240d155328 100644 --- a/src/wrapped/generated/wrappedatomicdefs.h +++ b/src/wrapped/generated/wrappedatomicdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedatomicDEFS_H_ #define __wrappedatomicDEFS_H_ diff --git a/src/wrapped/generated/wrappedatomictypes.h b/src/wrapped/generated/wrappedatomictypes.h index b7ef8829fdcb419e768610de63c38eadd9d3704c..747b21b837e4b46975e2635c65f231eb5236e08b 100644 --- a/src/wrapped/generated/wrappedatomictypes.h +++ b/src/wrapped/generated/wrappedatomictypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedatomicTYPES_H_ #define __wrappedatomicTYPES_H_ diff --git a/src/wrapped/generated/wrappedatomicundefs.h b/src/wrapped/generated/wrappedatomicundefs.h index 6a71a44582097385af93af1afcd2b536198b6783..e9e38ab4e4e48137cc93826798a2f239fa580366 100644 --- a/src/wrapped/generated/wrappedatomicundefs.h +++ b/src/wrapped/generated/wrappedatomicundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedatomicUNDEFS_H_ #define __wrappedatomicUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedatspidefs.h b/src/wrapped/generated/wrappedatspidefs.h index d798384727eef21f5c6f84b0cdd8ea18d41fc0a2..a7e6c3389e8b11818e6419baa9676983faaf78ff 100644 --- a/src/wrapped/generated/wrappedatspidefs.h +++ b/src/wrapped/generated/wrappedatspidefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedatspiDEFS_H_ #define __wrappedatspiDEFS_H_ diff --git a/src/wrapped/generated/wrappedatspitypes.h b/src/wrapped/generated/wrappedatspitypes.h index 0293ae9234589f9f79b53840d88c0f9a28bfd126..502d883a355834c834a874678ea94b7e988358c8 100644 --- a/src/wrapped/generated/wrappedatspitypes.h +++ b/src/wrapped/generated/wrappedatspitypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedatspiTYPES_H_ #define __wrappedatspiTYPES_H_ diff --git a/src/wrapped/generated/wrappedatspiundefs.h b/src/wrapped/generated/wrappedatspiundefs.h index 216cda26edc098165d88e0b83e0edab266cf4388..b9d5978fdcdc098582442a201f7d0e30af14a799 100644 --- a/src/wrapped/generated/wrappedatspiundefs.h +++ b/src/wrapped/generated/wrappedatspiundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedatspiUNDEFS_H_ #define __wrappedatspiUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedayatanaappindicator3defs.h b/src/wrapped/generated/wrappedayatanaappindicator3defs.h index f5a970d29decfb7c7b1ff53f409fc4e1dd7a5304..76c9fa954ee6de74f6f1eca848d77d4977ee1e14 100644 --- a/src/wrapped/generated/wrappedayatanaappindicator3defs.h +++ b/src/wrapped/generated/wrappedayatanaappindicator3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedayatanaappindicator3DEFS_H_ #define __wrappedayatanaappindicator3DEFS_H_ diff --git a/src/wrapped/generated/wrappedayatanaappindicator3types.h b/src/wrapped/generated/wrappedayatanaappindicator3types.h index ac9dfa4c0604b00695be7a7a85845c71e8540deb..41b064024d5261b676174d1a64a0ac4bb1bf3cc3 100644 --- a/src/wrapped/generated/wrappedayatanaappindicator3types.h +++ b/src/wrapped/generated/wrappedayatanaappindicator3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedayatanaappindicator3TYPES_H_ #define __wrappedayatanaappindicator3TYPES_H_ diff --git a/src/wrapped/generated/wrappedayatanaappindicator3undefs.h b/src/wrapped/generated/wrappedayatanaappindicator3undefs.h index 35c9f4e9fe3a6cb7d812d2bda95b1fa23f583859..a4c4ff01b1a48fe9dd6bb6a7b98041a0d718ce2e 100644 --- a/src/wrapped/generated/wrappedayatanaappindicator3undefs.h +++ b/src/wrapped/generated/wrappedayatanaappindicator3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedayatanaappindicator3UNDEFS_H_ #define __wrappedayatanaappindicator3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedbrotlidecdefs.h b/src/wrapped/generated/wrappedbrotlidecdefs.h new file mode 100644 index 0000000000000000000000000000000000000000..bb881c9b710b9d3aea43904f987405af2d47d6dd --- /dev/null +++ b/src/wrapped/generated/wrappedbrotlidecdefs.h @@ -0,0 +1,8 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedbrotlidecDEFS_H_ +#define __wrappedbrotlidecDEFS_H_ + + +#endif // __wrappedbrotlidecDEFS_H_ diff --git a/src/wrapped/generated/wrappedbrotlidectypes.h b/src/wrapped/generated/wrappedbrotlidectypes.h new file mode 100644 index 0000000000000000000000000000000000000000..eb0d15606b7bf8549d40838cbe8c7e715cc7124b --- /dev/null +++ b/src/wrapped/generated/wrappedbrotlidectypes.h @@ -0,0 +1,21 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedbrotlidecTYPES_H_ +#define __wrappedbrotlidecTYPES_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void* (*pFppp_t)(void*, void*, void*); +typedef void (*vFpppp_t)(void*, void*, void*, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(BrotliDecoderCreateInstance, pFppp_t) \ + GO(BrotliDecoderSetMetadataCallbacks, vFpppp_t) + +#endif // __wrappedbrotlidecTYPES_H_ diff --git a/src/wrapped/generated/wrappedbrotlidecundefs.h b/src/wrapped/generated/wrappedbrotlidecundefs.h new file mode 100644 index 0000000000000000000000000000000000000000..96a27eaf5deab8eb09011ca217f60bc1b35c5140 --- /dev/null +++ b/src/wrapped/generated/wrappedbrotlidecundefs.h @@ -0,0 +1,8 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedbrotlidecUNDEFS_H_ +#define __wrappedbrotlidecUNDEFS_H_ + + +#endif // __wrappedbrotlidecUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedbz2defs.h b/src/wrapped/generated/wrappedbz2defs.h index 7a94209b03974a87db7be7f63e519ea4a53bd437..20a6c6769898c2fad3a9e70e75082153ed5f69ee 100644 --- a/src/wrapped/generated/wrappedbz2defs.h +++ b/src/wrapped/generated/wrappedbz2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedbz2DEFS_H_ #define __wrappedbz2DEFS_H_ diff --git a/src/wrapped/generated/wrappedbz2types.h b/src/wrapped/generated/wrappedbz2types.h index cad85bc7a1b0447140a04f681e2168b3e5eae524..181ea24fed8d82e4a3c6d14c3715dc87c9da094f 100644 --- a/src/wrapped/generated/wrappedbz2types.h +++ b/src/wrapped/generated/wrappedbz2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedbz2TYPES_H_ #define __wrappedbz2TYPES_H_ diff --git a/src/wrapped/generated/wrappedbz2undefs.h b/src/wrapped/generated/wrappedbz2undefs.h index 0285da9d78cadc7001b6ce610d01cfacd84459d2..e3da4b47acb63ccb8b29757b552445e9bd1eb8e2 100644 --- a/src/wrapped/generated/wrappedbz2undefs.h +++ b/src/wrapped/generated/wrappedbz2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedbz2UNDEFS_H_ #define __wrappedbz2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcairodefs.h b/src/wrapped/generated/wrappedcairodefs.h index 3146a809b5880de0b463f07b9685936ff99aa14d..bc83dc9f59ed445edab2191b0d8b54a523e9a595 100644 --- a/src/wrapped/generated/wrappedcairodefs.h +++ b/src/wrapped/generated/wrappedcairodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcairoDEFS_H_ #define __wrappedcairoDEFS_H_ diff --git a/src/wrapped/generated/wrappedcairogobjectdefs.h b/src/wrapped/generated/wrappedcairogobjectdefs.h index 950015a2a56fce891b59739a13c4a4a82cf16de3..840f4e22172e9d8aad814fadae1e6c7cbc08af83 100644 --- a/src/wrapped/generated/wrappedcairogobjectdefs.h +++ b/src/wrapped/generated/wrappedcairogobjectdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcairogobjectDEFS_H_ #define __wrappedcairogobjectDEFS_H_ diff --git a/src/wrapped/generated/wrappedcairogobjecttypes.h b/src/wrapped/generated/wrappedcairogobjecttypes.h index a7e969bdc10f56602a38958bbf30a8636bb0ffd5..92764c6fb3378dd2054ca0598b545ad349ae1f3c 100644 --- a/src/wrapped/generated/wrappedcairogobjecttypes.h +++ b/src/wrapped/generated/wrappedcairogobjecttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcairogobjectTYPES_H_ #define __wrappedcairogobjectTYPES_H_ diff --git a/src/wrapped/generated/wrappedcairogobjectundefs.h b/src/wrapped/generated/wrappedcairogobjectundefs.h index 4f3da1b532df71ea912bfb6316eb47ae71e155e6..f53571587452f1b50bc88bcf33673caf48810a50 100644 --- a/src/wrapped/generated/wrappedcairogobjectundefs.h +++ b/src/wrapped/generated/wrappedcairogobjectundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcairogobjectUNDEFS_H_ #define __wrappedcairogobjectUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcairotypes.h b/src/wrapped/generated/wrappedcairotypes.h index 4020471b853e75dcf6118ace294deb4f5cc7ee48..dfce402b5e9a5f49a0d91b2d446bbb63303dd8ba 100644 --- a/src/wrapped/generated/wrappedcairotypes.h +++ b/src/wrapped/generated/wrappedcairotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcairoTYPES_H_ #define __wrappedcairoTYPES_H_ diff --git a/src/wrapped/generated/wrappedcairoundefs.h b/src/wrapped/generated/wrappedcairoundefs.h index a3042b43ecff6a85b78dd9788fdbf50bfedf103a..d1ccf9dbabf072e3c03ccf162813e5c6996d0be7 100644 --- a/src/wrapped/generated/wrappedcairoundefs.h +++ b/src/wrapped/generated/wrappedcairoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcairoUNDEFS_H_ #define __wrappedcairoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcapdefs.h b/src/wrapped/generated/wrappedcapdefs.h index 57c78f122bd49c30e645a46bdf5ea819ef429da0..ff39e35d87daca53b2c1605f877fabc980f688ac 100644 --- a/src/wrapped/generated/wrappedcapdefs.h +++ b/src/wrapped/generated/wrappedcapdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcapDEFS_H_ #define __wrappedcapDEFS_H_ diff --git a/src/wrapped/generated/wrappedcaptypes.h b/src/wrapped/generated/wrappedcaptypes.h index 3d18ce3978fefa85dd29a40ae331f79fca8e3510..7000e5d7ecf87aa4d795b76296817af4f7fc6ce5 100644 --- a/src/wrapped/generated/wrappedcaptypes.h +++ b/src/wrapped/generated/wrappedcaptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcapTYPES_H_ #define __wrappedcapTYPES_H_ diff --git a/src/wrapped/generated/wrappedcapundefs.h b/src/wrapped/generated/wrappedcapundefs.h index 87967b4aa3599470dc19a27427e0a00fc8845062..0d8530958ff2fb688f85f866c2553a9464c08113 100644 --- a/src/wrapped/generated/wrappedcapundefs.h +++ b/src/wrapped/generated/wrappedcapundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcapUNDEFS_H_ #define __wrappedcapUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcrashhandlerdefs.h b/src/wrapped/generated/wrappedcrashhandlerdefs.h index 36c4d36ca50e4ee2f78f356b8f37bc351a9b43fe..c53fc60a9877304df408c5e4e9ba436553cb62fe 100644 --- a/src/wrapped/generated/wrappedcrashhandlerdefs.h +++ b/src/wrapped/generated/wrappedcrashhandlerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcrashhandlerDEFS_H_ #define __wrappedcrashhandlerDEFS_H_ diff --git a/src/wrapped/generated/wrappedcrashhandlertypes.h b/src/wrapped/generated/wrappedcrashhandlertypes.h index 2acab70278b29780ecf7bdb8982df58065d170c6..a066ac3923dc25b3798b2d949437830f1bb00bf5 100644 --- a/src/wrapped/generated/wrappedcrashhandlertypes.h +++ b/src/wrapped/generated/wrappedcrashhandlertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcrashhandlerTYPES_H_ #define __wrappedcrashhandlerTYPES_H_ diff --git a/src/wrapped/generated/wrappedcrashhandlerundefs.h b/src/wrapped/generated/wrappedcrashhandlerundefs.h index 3fb6554de80d2b7e49db1edabcc2226c00546eb3..7864ff169d24e211d1686ca8493d1feb8db5d571 100644 --- a/src/wrapped/generated/wrappedcrashhandlerundefs.h +++ b/src/wrapped/generated/wrappedcrashhandlerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcrashhandlerUNDEFS_H_ #define __wrappedcrashhandlerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcrypto3defs.h b/src/wrapped/generated/wrappedcrypto3defs.h index c6874fbfc299feba9854d4ca12dfe9f1610da767..3605a0f322a3bb23b3b806d9beaeb1baf66a8514 100644 --- a/src/wrapped/generated/wrappedcrypto3defs.h +++ b/src/wrapped/generated/wrappedcrypto3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcrypto3DEFS_H_ #define __wrappedcrypto3DEFS_H_ diff --git a/src/wrapped/generated/wrappedcrypto3types.h b/src/wrapped/generated/wrappedcrypto3types.h index 175bea567d0326cd72d76d129161d81a74061514..79fe61bb78212912fcb7bd41c3f1409999206a4b 100644 --- a/src/wrapped/generated/wrappedcrypto3types.h +++ b/src/wrapped/generated/wrappedcrypto3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcrypto3TYPES_H_ #define __wrappedcrypto3TYPES_H_ @@ -14,7 +14,6 @@ typedef void (*vFp_t)(void*); typedef void* (*pFp_t)(void*); typedef void (*vFpp_t)(void*, void*); -typedef void* (*pFpp_t)(void*, void*); typedef void (*vFppp_t)(void*, void*, void*); typedef int32_t (*iFppp_t)(void*, void*, void*); typedef int32_t (*iFppV_t)(void*, void*, ...); @@ -29,8 +28,10 @@ typedef int32_t (*iFppppipp_t)(void*, void*, void*, void*, int32_t, void*, void* GO(CRYPTO_set_id_callback, vFp_t) \ GO(CRYPTO_set_locking_callback, vFp_t) \ GO(OPENSSL_sk_new, pFp_t) \ + GO(X509V3_EXT_get, pFp_t) \ + GO(OPENSSL_sk_pop_free, vFpp_t) \ GO(X509_STORE_CTX_set_verify_cb, vFpp_t) \ - GO(OPENSSL_sk_pop_free, pFpp_t) \ + GO(X509_STORE_set_verify_cb, vFpp_t) \ GO(EVP_MD_do_all_provided, vFppp_t) \ GO(ASN1_i2d_bio, iFppp_t) \ GO(BIO_printf, iFppV_t) \ @@ -38,11 +39,14 @@ typedef int32_t (*iFppppipp_t)(void*, void*, void*, void*, int32_t, void*, void* GO(ERR_vset_error, vFiipA_t) \ GO(ASN1_d2i_bio, pFpppp_t) \ GO(PEM_read_DHparams, pFpppp_t) \ + GO(PEM_read_bio_DHparams, pFpppp_t) \ GO(PEM_read_bio_DSAPrivateKey, pFpppp_t) \ GO(PEM_read_bio_DSA_PUBKEY, pFpppp_t) \ GO(PEM_read_bio_ECPrivateKey, pFpppp_t) \ GO(PEM_read_bio_EC_PUBKEY, pFpppp_t) \ GO(PEM_read_bio_PKCS7, pFpppp_t) \ + GO(PEM_read_bio_PUBKEY, pFpppp_t) \ + GO(PEM_read_bio_PrivateKey, pFpppp_t) \ GO(PEM_read_bio_RSAPrivateKey, pFpppp_t) \ GO(PEM_read_bio_RSA_PUBKEY, pFpppp_t) \ GO(PEM_read_bio_X509, pFpppp_t) \ @@ -54,6 +58,8 @@ typedef int32_t (*iFppppipp_t)(void*, void*, void*, void*, int32_t, void*, void* GO(ENGINE_ctrl_cmd, iFpplppi_t) \ GO(PEM_write_bio_DSAPrivateKey, iFppppipp_t) \ GO(PEM_write_bio_ECPrivateKey, iFppppipp_t) \ + GO(PEM_write_bio_PrivateKey, iFppppipp_t) \ + GO(PEM_write_bio_PrivateKey_traditional, iFppppipp_t) \ GO(PEM_write_bio_RSAPrivateKey, iFppppipp_t) #endif // __wrappedcrypto3TYPES_H_ diff --git a/src/wrapped/generated/wrappedcrypto3undefs.h b/src/wrapped/generated/wrappedcrypto3undefs.h index 1e82efc00f577f2574219982c6fa04762e12291d..7466aec3d285eac84f0e6f507cdc5dcb33a3ce50 100644 --- a/src/wrapped/generated/wrappedcrypto3undefs.h +++ b/src/wrapped/generated/wrappedcrypto3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcrypto3UNDEFS_H_ #define __wrappedcrypto3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcryptodefs.h b/src/wrapped/generated/wrappedcryptodefs.h index 2a2f3c2c96ffac8cba0f7d056f874a4c30ab539d..a00c96cd465b6c0a95068af97ed335962f3aa9e6 100644 --- a/src/wrapped/generated/wrappedcryptodefs.h +++ b/src/wrapped/generated/wrappedcryptodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcryptoDEFS_H_ #define __wrappedcryptoDEFS_H_ diff --git a/src/wrapped/generated/wrappedcryptotypes.h b/src/wrapped/generated/wrappedcryptotypes.h index 6a9de7b45e8213720654dd8b978ec33d9615c07c..f686a0a30f6384b0edeff63fcdbcaf21a870d3e5 100644 --- a/src/wrapped/generated/wrappedcryptotypes.h +++ b/src/wrapped/generated/wrappedcryptotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcryptoTYPES_H_ #define __wrappedcryptoTYPES_H_ diff --git a/src/wrapped/generated/wrappedcryptoundefs.h b/src/wrapped/generated/wrappedcryptoundefs.h index 0604af4f0720db09555c8df8f70a38d9211e8b5a..fb82dc729aa82975431c1b334237161d8ea568ef 100644 --- a/src/wrapped/generated/wrappedcryptoundefs.h +++ b/src/wrapped/generated/wrappedcryptoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcryptoUNDEFS_H_ #define __wrappedcryptoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedcurldefs.h b/src/wrapped/generated/wrappedcurldefs.h index 6e2dd59c010d926b59a797c52ffe04ea49faa31f..c7710c9247b85a7f53a7a6ffa540d77a3a65c694 100644 --- a/src/wrapped/generated/wrappedcurldefs.h +++ b/src/wrapped/generated/wrappedcurldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcurlDEFS_H_ #define __wrappedcurlDEFS_H_ diff --git a/src/wrapped/generated/wrappedcurltypes.h b/src/wrapped/generated/wrappedcurltypes.h index 145009e566804e2e4097676e6f1ae08843af05eb..9870bb08190ba77e9d9249ca777c162dedad5882 100644 --- a/src/wrapped/generated/wrappedcurltypes.h +++ b/src/wrapped/generated/wrappedcurltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcurlTYPES_H_ #define __wrappedcurlTYPES_H_ @@ -13,10 +13,12 @@ typedef int32_t (*iFpup_t)(void*, uint32_t, void*); typedef uint32_t (*uFpup_t)(void*, uint32_t, void*); +typedef int32_t (*iFlppppp_t)(intptr_t, void*, void*, void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ GO(curl_multi_setopt, iFpup_t) \ GO(curl_easy_setopt, uFpup_t) \ - GO(curl_share_setopt, uFpup_t) + GO(curl_share_setopt, uFpup_t) \ + GO(curl_global_init_mem, iFlppppp_t) #endif // __wrappedcurlTYPES_H_ diff --git a/src/wrapped/generated/wrappedcurlundefs.h b/src/wrapped/generated/wrappedcurlundefs.h index 1b785a421b2170acaa0ad43c7c9565a609cba702..0cb85ae919b9aba631c5012d732e66655634a84e 100644 --- a/src/wrapped/generated/wrappedcurlundefs.h +++ b/src/wrapped/generated/wrappedcurlundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedcurlUNDEFS_H_ #define __wrappedcurlUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedd3dadapter9defs.h b/src/wrapped/generated/wrappedd3dadapter9defs.h index 80a0f1b57fe7cf41fd17b327218e5709e9adfbcb..23e9cc2d2e597b3e272082d7d1ffc77a8e66644e 100644 --- a/src/wrapped/generated/wrappedd3dadapter9defs.h +++ b/src/wrapped/generated/wrappedd3dadapter9defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedd3dadapter9DEFS_H_ #define __wrappedd3dadapter9DEFS_H_ diff --git a/src/wrapped/generated/wrappedd3dadapter9types.h b/src/wrapped/generated/wrappedd3dadapter9types.h index c09cdf39d66e3e9ac771ae2f9f0d6cd1cc36aa8f..8ba7c7227ab2457292f1cdc31c51f8883ab1e1af 100644 --- a/src/wrapped/generated/wrappedd3dadapter9types.h +++ b/src/wrapped/generated/wrappedd3dadapter9types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedd3dadapter9TYPES_H_ #define __wrappedd3dadapter9TYPES_H_ diff --git a/src/wrapped/generated/wrappedd3dadapter9undefs.h b/src/wrapped/generated/wrappedd3dadapter9undefs.h index d6dd2ebfa73b8899fb0544a7472b16a4181dfbc1..55b45c235ae47855148cf4d78c8504efc034b0e1 100644 --- a/src/wrapped/generated/wrappedd3dadapter9undefs.h +++ b/src/wrapped/generated/wrappedd3dadapter9undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedd3dadapter9UNDEFS_H_ #define __wrappedd3dadapter9UNDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusdefs.h b/src/wrapped/generated/wrappeddbusdefs.h index 28ece645c0cac10203139c4d5a236d5ecb068612..40b80fc0e519b6341086117205fd5c64611993d2 100644 --- a/src/wrapped/generated/wrappeddbusdefs.h +++ b/src/wrapped/generated/wrappeddbusdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappeddbusDEFS_H_ #define __wrappeddbusDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusglib1defs.h b/src/wrapped/generated/wrappeddbusglib1defs.h index bf9d1ef1abcd47e7b4ced1f13e06b0f72dc75d21..5077cda56ff67236d97383bd70212ab15689e680 100644 --- a/src/wrapped/generated/wrappeddbusglib1defs.h +++ b/src/wrapped/generated/wrappeddbusglib1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappeddbusglib1DEFS_H_ #define __wrappeddbusglib1DEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusglib1types.h b/src/wrapped/generated/wrappeddbusglib1types.h index a6b57cf2e2e90a86fb49eb0f7db5de08d60d63c5..b22ac16bbe5e527193735fa29f389773ce6f0c1a 100644 --- a/src/wrapped/generated/wrappeddbusglib1types.h +++ b/src/wrapped/generated/wrappeddbusglib1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappeddbusglib1TYPES_H_ #define __wrappeddbusglib1TYPES_H_ diff --git a/src/wrapped/generated/wrappeddbusglib1undefs.h b/src/wrapped/generated/wrappeddbusglib1undefs.h index c77048c05a5541ca471e0b488716a277a08e1156..c6faa23049b03b33fef642788f37ddf42851f436 100644 --- a/src/wrapped/generated/wrappeddbusglib1undefs.h +++ b/src/wrapped/generated/wrappeddbusglib1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappeddbusglib1UNDEFS_H_ #define __wrappeddbusglib1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusmenuglibdefs.h b/src/wrapped/generated/wrappeddbusmenuglibdefs.h index e8e738c4c7b27e559c5ab14e1c6c036f6c7a0d11..97c93335b76f7d372d2087a9f7a5156382fe7085 100644 --- a/src/wrapped/generated/wrappeddbusmenuglibdefs.h +++ b/src/wrapped/generated/wrappeddbusmenuglibdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappeddbusmenuglibDEFS_H_ #define __wrappeddbusmenuglibDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbusmenuglibtypes.h b/src/wrapped/generated/wrappeddbusmenuglibtypes.h index c795e242c5d83f16d1b9e12d32e3b295b0e7d71d..e3349cded591eb9ffda3e4dacdb8664149576b7a 100644 --- a/src/wrapped/generated/wrappeddbusmenuglibtypes.h +++ b/src/wrapped/generated/wrappeddbusmenuglibtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappeddbusmenuglibTYPES_H_ #define __wrappeddbusmenuglibTYPES_H_ diff --git a/src/wrapped/generated/wrappeddbusmenuglibundefs.h b/src/wrapped/generated/wrappeddbusmenuglibundefs.h index 93f1f9623d505d94722e816087dc4c9107d53824..3d4f7b483507561a54a3accc900ae1edee4358ed 100644 --- a/src/wrapped/generated/wrappeddbusmenuglibundefs.h +++ b/src/wrapped/generated/wrappeddbusmenuglibundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappeddbusmenuglibUNDEFS_H_ #define __wrappeddbusmenuglibUNDEFS_H_ diff --git a/src/wrapped/generated/wrappeddbustypes.h b/src/wrapped/generated/wrappeddbustypes.h index c19729f2bb418917f5cbd84df5b0874690f87489..282e5445a28ea1dbf2ffb976ec010b966f816de6 100644 --- a/src/wrapped/generated/wrappeddbustypes.h +++ b/src/wrapped/generated/wrappeddbustypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappeddbusTYPES_H_ #define __wrappeddbusTYPES_H_ diff --git a/src/wrapped/generated/wrappeddbusundefs.h b/src/wrapped/generated/wrappeddbusundefs.h index e0e5f799bf860c59ef56e4d83f2ba1b59f299b40..536cd21c9ca8c388b01f776772e5934f55cde4c9 100644 --- a/src/wrapped/generated/wrappeddbusundefs.h +++ b/src/wrapped/generated/wrappeddbusundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappeddbusUNDEFS_H_ #define __wrappeddbusUNDEFS_H_ diff --git a/src/wrapped/generated/wrappeddecor0defs.h b/src/wrapped/generated/wrappeddecor0defs.h index 3f8696fda01f8c6b1b4803e1c2cc68cf0a948c97..a235edaa09891aa80ea0c72bebb8702ee5f7a208 100644 --- a/src/wrapped/generated/wrappeddecor0defs.h +++ b/src/wrapped/generated/wrappeddecor0defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappeddecor0DEFS_H_ #define __wrappeddecor0DEFS_H_ diff --git a/src/wrapped/generated/wrappeddecor0types.h b/src/wrapped/generated/wrappeddecor0types.h index 6fa92b9e8c664336c372ec3c596be5c77a193a48..2c28e733cc4e031ebbfdc0f0d5095ca289e8cfb0 100644 --- a/src/wrapped/generated/wrappeddecor0types.h +++ b/src/wrapped/generated/wrappeddecor0types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappeddecor0TYPES_H_ #define __wrappeddecor0TYPES_H_ diff --git a/src/wrapped/generated/wrappeddecor0undefs.h b/src/wrapped/generated/wrappeddecor0undefs.h index 8d7a76f2d3186635c71353eb816280f72b51e323..d76a1f490be30b57a6794cf1cfa809e51466ad3c 100644 --- a/src/wrapped/generated/wrappeddecor0undefs.h +++ b/src/wrapped/generated/wrappeddecor0undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappeddecor0UNDEFS_H_ #define __wrappeddecor0UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedevent21defs.h b/src/wrapped/generated/wrappedevent21defs.h index 8a79789fbba85d2cf364c214de19252f8ea5c283..9a3b98685e82f143066db5a4e45fa0219ff5e73f 100644 --- a/src/wrapped/generated/wrappedevent21defs.h +++ b/src/wrapped/generated/wrappedevent21defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedevent21DEFS_H_ #define __wrappedevent21DEFS_H_ diff --git a/src/wrapped/generated/wrappedevent21types.h b/src/wrapped/generated/wrappedevent21types.h index dcee212e9d1eed5ab76867c9a37164ea5ae31894..ff50e7eef5714e3d6295fd66719f7e9331a4ff18 100644 --- a/src/wrapped/generated/wrappedevent21types.h +++ b/src/wrapped/generated/wrappedevent21types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedevent21TYPES_H_ #define __wrappedevent21TYPES_H_ diff --git a/src/wrapped/generated/wrappedevent21undefs.h b/src/wrapped/generated/wrappedevent21undefs.h index e0cd3b7cf0edd6ffaf92083d7577010e99473e5c..6932f585d3e2f1ede07a804ceb38c5f985091f12 100644 --- a/src/wrapped/generated/wrappedevent21undefs.h +++ b/src/wrapped/generated/wrappedevent21undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedevent21UNDEFS_H_ #define __wrappedevent21UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedexpatdefs.h b/src/wrapped/generated/wrappedexpatdefs.h index c142fbd93480ca1bca2ada97fc878cc04ef83ef0..b3eb55f9658260cb1936e52a56ade7304bb09398 100644 --- a/src/wrapped/generated/wrappedexpatdefs.h +++ b/src/wrapped/generated/wrappedexpatdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedexpatDEFS_H_ #define __wrappedexpatDEFS_H_ diff --git a/src/wrapped/generated/wrappedexpattypes.h b/src/wrapped/generated/wrappedexpattypes.h index 958436dc78ae7ea6e71d3945cc04680a2c8627a8..2832d13f52d42ec379a2147d5e851f3349086524 100644 --- a/src/wrapped/generated/wrappedexpattypes.h +++ b/src/wrapped/generated/wrappedexpattypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedexpatTYPES_H_ #define __wrappedexpatTYPES_H_ diff --git a/src/wrapped/generated/wrappedexpatundefs.h b/src/wrapped/generated/wrappedexpatundefs.h index 7c0e0b442b44bed40404bd95b135683beb477f3f..c4cb64dd669d51bf853ecbdfc147bc480545ec1b 100644 --- a/src/wrapped/generated/wrappedexpatundefs.h +++ b/src/wrapped/generated/wrappedexpatundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedexpatUNDEFS_H_ #define __wrappedexpatUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedfaudiodefs.h b/src/wrapped/generated/wrappedfaudiodefs.h index 6e118b8b3afe51aa23c8b273fbfaf6b1f1059e57..39006dbdb8313d7297efcc62db3697739c231102 100644 --- a/src/wrapped/generated/wrappedfaudiodefs.h +++ b/src/wrapped/generated/wrappedfaudiodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedfaudioDEFS_H_ #define __wrappedfaudioDEFS_H_ diff --git a/src/wrapped/generated/wrappedfaudiotypes.h b/src/wrapped/generated/wrappedfaudiotypes.h index 1676f6f24b338f08a66d3cfb8b820d95cd1e4655..1512ffc8f77db9126b9fc41096b298c14189b4ba 100644 --- a/src/wrapped/generated/wrappedfaudiotypes.h +++ b/src/wrapped/generated/wrappedfaudiotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedfaudioTYPES_H_ #define __wrappedfaudioTYPES_H_ diff --git a/src/wrapped/generated/wrappedfaudioundefs.h b/src/wrapped/generated/wrappedfaudioundefs.h index f5e9c2afa155178c771407f967d56a790d95723a..46c993f8ac098b16f0fc670f3399a92c6df285df 100644 --- a/src/wrapped/generated/wrappedfaudioundefs.h +++ b/src/wrapped/generated/wrappedfaudioundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedfaudioUNDEFS_H_ #define __wrappedfaudioUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedflacdefs.h b/src/wrapped/generated/wrappedflacdefs.h index 752417ca2371ec0bf15a745c844826cbac65dfec..557fb9e2b2fb9653017efe95b27d2f3c08842f6b 100644 --- a/src/wrapped/generated/wrappedflacdefs.h +++ b/src/wrapped/generated/wrappedflacdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedflacDEFS_H_ #define __wrappedflacDEFS_H_ diff --git a/src/wrapped/generated/wrappedflactypes.h b/src/wrapped/generated/wrappedflactypes.h index 17fcd7a4d0dc56e2a60282745e8ac9fc0c1ad212..1cf20bf3583979fceb70cd1848d2534edd5c2d38 100644 --- a/src/wrapped/generated/wrappedflactypes.h +++ b/src/wrapped/generated/wrappedflactypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedflacTYPES_H_ #define __wrappedflacTYPES_H_ diff --git a/src/wrapped/generated/wrappedflacundefs.h b/src/wrapped/generated/wrappedflacundefs.h index c4ea018215bd163578809e4fdf446296c1d5e734..151151870d62acc13c273e80cb3cc3953dd67095 100644 --- a/src/wrapped/generated/wrappedflacundefs.h +++ b/src/wrapped/generated/wrappedflacundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedflacUNDEFS_H_ #define __wrappedflacUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedfontconfigdefs.h b/src/wrapped/generated/wrappedfontconfigdefs.h index db507edca5f1db9f14df9b0bec2935fe7bf124a8..e3cc2fa4f0ac2cf8db9d922132effb375e7e25f0 100644 --- a/src/wrapped/generated/wrappedfontconfigdefs.h +++ b/src/wrapped/generated/wrappedfontconfigdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedfontconfigDEFS_H_ #define __wrappedfontconfigDEFS_H_ diff --git a/src/wrapped/generated/wrappedfontconfigtypes.h b/src/wrapped/generated/wrappedfontconfigtypes.h index f3e8d29d0274803cfdcde96ff1d806d827491b18..b71b99daef86527a654e3d77846d5609af8dfced 100644 --- a/src/wrapped/generated/wrappedfontconfigtypes.h +++ b/src/wrapped/generated/wrappedfontconfigtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedfontconfigTYPES_H_ #define __wrappedfontconfigTYPES_H_ diff --git a/src/wrapped/generated/wrappedfontconfigundefs.h b/src/wrapped/generated/wrappedfontconfigundefs.h index 4bdce179eb1c48ac0b6b9835671846176fd76a72..d43b1a137817b4424f5c3fb59514e5d62c2e632e 100644 --- a/src/wrapped/generated/wrappedfontconfigundefs.h +++ b/src/wrapped/generated/wrappedfontconfigundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedfontconfigUNDEFS_H_ #define __wrappedfontconfigUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedfreebl3defs.h b/src/wrapped/generated/wrappedfreebl3defs.h index 33db283d4d51a288be2582f27dd65f190045a173..0e30490c11ee2d6efaec8532c4b0f0c2d552beeb 100644 --- a/src/wrapped/generated/wrappedfreebl3defs.h +++ b/src/wrapped/generated/wrappedfreebl3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedfreebl3DEFS_H_ #define __wrappedfreebl3DEFS_H_ diff --git a/src/wrapped/generated/wrappedfreebl3types.h b/src/wrapped/generated/wrappedfreebl3types.h index 8468e9c5ac35fc1113bbc416087c2ea40e5e99e3..5fc65d615f2028b76d1167e4d9f75c30f32c450c 100644 --- a/src/wrapped/generated/wrappedfreebl3types.h +++ b/src/wrapped/generated/wrappedfreebl3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedfreebl3TYPES_H_ #define __wrappedfreebl3TYPES_H_ diff --git a/src/wrapped/generated/wrappedfreebl3undefs.h b/src/wrapped/generated/wrappedfreebl3undefs.h index 88b22d7de82af73a6ba28db6dcb1714174f14f8a..a83bffb969386cfb3a432dde6cfbaf56b8f898f1 100644 --- a/src/wrapped/generated/wrappedfreebl3undefs.h +++ b/src/wrapped/generated/wrappedfreebl3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedfreebl3UNDEFS_H_ #define __wrappedfreebl3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedfreetypedefs.h b/src/wrapped/generated/wrappedfreetypedefs.h index fc2eb27daac8548db3f8bf4146abd6f043f89059..eeded90281cc3f5e1f4ad01c7347a42d15684b63 100644 --- a/src/wrapped/generated/wrappedfreetypedefs.h +++ b/src/wrapped/generated/wrappedfreetypedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedfreetypeDEFS_H_ #define __wrappedfreetypeDEFS_H_ diff --git a/src/wrapped/generated/wrappedfreetypetypes.h b/src/wrapped/generated/wrappedfreetypetypes.h index eb85cbb9004f579acca514dd5fbe92c5d71a488e..d3a4e09284a38748e72345630782b322d28b2660 100644 --- a/src/wrapped/generated/wrappedfreetypetypes.h +++ b/src/wrapped/generated/wrappedfreetypetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedfreetypeTYPES_H_ #define __wrappedfreetypeTYPES_H_ diff --git a/src/wrapped/generated/wrappedfreetypeundefs.h b/src/wrapped/generated/wrappedfreetypeundefs.h index 6b477c39affc215ce94884d38bebe9b29070c0bb..09df4b90f931ab60c84d3d22e97ebad36c609313 100644 --- a/src/wrapped/generated/wrappedfreetypeundefs.h +++ b/src/wrapped/generated/wrappedfreetypeundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedfreetypeUNDEFS_H_ #define __wrappedfreetypeUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgbmdefs.h b/src/wrapped/generated/wrappedgbmdefs.h index 7e23883144b7200479ca58ecc89c4996bffd0a9d..d4befd2b7598f32bcaacb7408371e1c532b07c62 100644 --- a/src/wrapped/generated/wrappedgbmdefs.h +++ b/src/wrapped/generated/wrappedgbmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgbmDEFS_H_ #define __wrappedgbmDEFS_H_ diff --git a/src/wrapped/generated/wrappedgbmtypes.h b/src/wrapped/generated/wrappedgbmtypes.h index c45641fba80e203883ddaed5f53cd3d140c3f549..4fc6b7b29b31d9aa66167254fdd262346e2c7319 100644 --- a/src/wrapped/generated/wrappedgbmtypes.h +++ b/src/wrapped/generated/wrappedgbmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgbmTYPES_H_ #define __wrappedgbmTYPES_H_ diff --git a/src/wrapped/generated/wrappedgbmundefs.h b/src/wrapped/generated/wrappedgbmundefs.h index 9f4e891b9e736abfa2ecf6a585f24a0272f84e24..29af4dfe32efb71191477847af531ff2c087cf83 100644 --- a/src/wrapped/generated/wrappedgbmundefs.h +++ b/src/wrapped/generated/wrappedgbmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgbmUNDEFS_H_ #define __wrappedgbmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgconf2defs.h b/src/wrapped/generated/wrappedgconf2defs.h index 56cf7acd9d4b402cb9030ea61f4474caaf78ce70..3d409e1543a9be3630b1bf2b7679536c8a824c49 100644 --- a/src/wrapped/generated/wrappedgconf2defs.h +++ b/src/wrapped/generated/wrappedgconf2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgconf2DEFS_H_ #define __wrappedgconf2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgconf2types.h b/src/wrapped/generated/wrappedgconf2types.h index 356c6518b3244c5b35ae98cc7f88c9fc63f5906a..0f7196335d66e22fe7a667e805c40ec7bdbd4f4e 100644 --- a/src/wrapped/generated/wrappedgconf2types.h +++ b/src/wrapped/generated/wrappedgconf2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgconf2TYPES_H_ #define __wrappedgconf2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgconf2undefs.h b/src/wrapped/generated/wrappedgconf2undefs.h index 806ab5b1d9791fc932a3d99d6a653d3e4eeb5b45..1a4dbd9d219611f5a4ccafd81611f1dd4c605882 100644 --- a/src/wrapped/generated/wrappedgconf2undefs.h +++ b/src/wrapped/generated/wrappedgconf2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgconf2UNDEFS_H_ #define __wrappedgconf2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgcryptdefs.h b/src/wrapped/generated/wrappedgcryptdefs.h index 47ea49ca4edd74133aebb1443e6474ee9c15a024..8f42d5bf9f6a6d9457582cbe8571dcf01868d698 100644 --- a/src/wrapped/generated/wrappedgcryptdefs.h +++ b/src/wrapped/generated/wrappedgcryptdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgcryptDEFS_H_ #define __wrappedgcryptDEFS_H_ diff --git a/src/wrapped/generated/wrappedgcrypttypes.h b/src/wrapped/generated/wrappedgcrypttypes.h index 07785d69677c11f35e300ce53493c5bd027ca67c..eecb06bf8fc0748247613f4e286b67d3d0d81094 100644 --- a/src/wrapped/generated/wrappedgcrypttypes.h +++ b/src/wrapped/generated/wrappedgcrypttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgcryptTYPES_H_ #define __wrappedgcryptTYPES_H_ diff --git a/src/wrapped/generated/wrappedgcryptundefs.h b/src/wrapped/generated/wrappedgcryptundefs.h index 69c2e6f386cc2842dc1882f24a79c31d6b20e018..f648a21bbe0e40cc2bc57273aa9e5694c075cc1f 100644 --- a/src/wrapped/generated/wrappedgcryptundefs.h +++ b/src/wrapped/generated/wrappedgcryptundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgcryptUNDEFS_H_ #define __wrappedgcryptUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgdk3defs.h b/src/wrapped/generated/wrappedgdk3defs.h index 2d2c754e6f89fbae3c635803c3088b77bed27047..9731b46252cef8f8bd8bf917ad3d8a01bfa144a0 100644 --- a/src/wrapped/generated/wrappedgdk3defs.h +++ b/src/wrapped/generated/wrappedgdk3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgdk3DEFS_H_ #define __wrappedgdk3DEFS_H_ diff --git a/src/wrapped/generated/wrappedgdk3types.h b/src/wrapped/generated/wrappedgdk3types.h index 9fef4666306b668d9579065587d9b58ea2be7d4f..bd2f42b844713a3ef53131e0087f77d11f291a00 100644 --- a/src/wrapped/generated/wrappedgdk3types.h +++ b/src/wrapped/generated/wrappedgdk3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgdk3TYPES_H_ #define __wrappedgdk3TYPES_H_ @@ -15,9 +15,7 @@ typedef void (*vFpp_t)(void*, void*); typedef int32_t (*iFpp_t)(void*, void*); typedef uint32_t (*uFpp_t)(void*, void*); typedef void (*vFppp_t)(void*, void*, void*); -typedef int32_t (*iFiipp_t)(int32_t, int32_t, void*, void*); typedef uint32_t (*uFippp_t)(int32_t, void*, void*, void*); -typedef int32_t (*iFiippp_t)(int32_t, int32_t, void*, void*, void*); typedef uint32_t (*uFiuppp_t)(int32_t, uint32_t, void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ @@ -28,9 +26,7 @@ typedef uint32_t (*uFiuppp_t)(int32_t, uint32_t, void*, void*, void*); GO(gdk_event_handler_set, vFppp_t) \ GO(gdk_window_add_filter, vFppp_t) \ GO(gdk_window_remove_filter, vFppp_t) \ - GO(gdk_input_add, iFiipp_t) \ GO(gdk_threads_add_idle_full, uFippp_t) \ - GO(gdk_input_add_full, iFiippp_t) \ GO(gdk_threads_add_timeout_full, uFiuppp_t) #endif // __wrappedgdk3TYPES_H_ diff --git a/src/wrapped/generated/wrappedgdk3undefs.h b/src/wrapped/generated/wrappedgdk3undefs.h index 2b636c1e86b1bdcf0f91db24a5edf4b7059792f6..7757c8ae5f274f0569c8389caedc6e33b4e910bd 100644 --- a/src/wrapped/generated/wrappedgdk3undefs.h +++ b/src/wrapped/generated/wrappedgdk3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgdk3UNDEFS_H_ #define __wrappedgdk3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgdkpixbuf2defs.h b/src/wrapped/generated/wrappedgdkpixbuf2defs.h index b0f2a7e1aedd7e3cee7b2e056a626550cedf3bb5..20da87dc04e03e7340b3bca282d027b58e16aef7 100644 --- a/src/wrapped/generated/wrappedgdkpixbuf2defs.h +++ b/src/wrapped/generated/wrappedgdkpixbuf2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgdkpixbuf2DEFS_H_ #define __wrappedgdkpixbuf2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgdkpixbuf2types.h b/src/wrapped/generated/wrappedgdkpixbuf2types.h index 57e0d38f16f0b1d21bdfe1681ab3f848dd614689..4185ffd03e65a9a7da0d3077811393b0247f0187 100644 --- a/src/wrapped/generated/wrappedgdkpixbuf2types.h +++ b/src/wrapped/generated/wrappedgdkpixbuf2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgdkpixbuf2TYPES_H_ #define __wrappedgdkpixbuf2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgdkpixbuf2undefs.h b/src/wrapped/generated/wrappedgdkpixbuf2undefs.h index 0a6750f0248c4fca940f7c5806596f638de42c58..e00631bf52ab0db4fda17ed254f74b886e196a6b 100644 --- a/src/wrapped/generated/wrappedgdkpixbuf2undefs.h +++ b/src/wrapped/generated/wrappedgdkpixbuf2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgdkpixbuf2UNDEFS_H_ #define __wrappedgdkpixbuf2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgdkx112defs.h b/src/wrapped/generated/wrappedgdkx112defs.h index bd31682484af3c390e57ecbe7800f4eb1bd587e9..f3fcc43e402224d7ce6a2269dd636ede32538e31 100644 --- a/src/wrapped/generated/wrappedgdkx112defs.h +++ b/src/wrapped/generated/wrappedgdkx112defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgdkx112DEFS_H_ #define __wrappedgdkx112DEFS_H_ diff --git a/src/wrapped/generated/wrappedgdkx112types.h b/src/wrapped/generated/wrappedgdkx112types.h index 4b36cbf4032e58d2bf0685122cf2d8fbbda691d4..dd919ba897b2cf2452653c5f701dc2ba1d8ba1f9 100644 --- a/src/wrapped/generated/wrappedgdkx112types.h +++ b/src/wrapped/generated/wrappedgdkx112types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgdkx112TYPES_H_ #define __wrappedgdkx112TYPES_H_ diff --git a/src/wrapped/generated/wrappedgdkx112undefs.h b/src/wrapped/generated/wrappedgdkx112undefs.h index 308cf824ad237506407a34d718bb1db7cb37b531..b37efd5dd6d27379ebaba1963a1491ff3b447ca5 100644 --- a/src/wrapped/generated/wrappedgdkx112undefs.h +++ b/src/wrapped/generated/wrappedgdkx112undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgdkx112UNDEFS_H_ #define __wrappedgdkx112UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgio2defs.h b/src/wrapped/generated/wrappedgio2defs.h index c9fad231ca7584bc37a4be91757469261dd7a685..a196dd44cbbd550b325a5af2fc833f35b1f76ec9 100644 --- a/src/wrapped/generated/wrappedgio2defs.h +++ b/src/wrapped/generated/wrappedgio2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgio2DEFS_H_ #define __wrappedgio2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgio2types.h b/src/wrapped/generated/wrappedgio2types.h index 00790100d8bc553ddf7ac8929f12ecb94dccaf8c..403ce7ebf286e304f8c2bfd5a667b14e8ab9b539 100644 --- a/src/wrapped/generated/wrappedgio2types.h +++ b/src/wrapped/generated/wrappedgio2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgio2TYPES_H_ #define __wrappedgio2TYPES_H_ @@ -20,30 +20,29 @@ typedef uintptr_t (*LFpppp_t)(void*, void*, void*, void*); typedef void* (*pFpppp_t)(void*, void*, void*, void*); typedef void (*vFpippp_t)(void*, int32_t, void*, void*, void*); typedef void (*vFpuipV_t)(void*, uint32_t, int32_t, void*, ...); -typedef void (*vFppipV_t)(void*, void*, int32_t, void*, ...); -typedef void (*vFppipA_t)(void*, void*, int32_t, void*, va_list); -typedef void* (*pFppppV_t)(void*, void*, void*, void*, ...); -typedef void* (*pFppApp_t)(void*, void*, va_list, void*, void*); -typedef void (*vFpipppp_t)(void*, int32_t, void*, void*, void*, void*); -typedef void (*vFiippppV_t)(int32_t, int32_t, void*, void*, void*, void*, ...); -typedef void (*vFiupippp_t)(int32_t, uint32_t, void*, int32_t, void*, void*, void*); -typedef void (*vFipAippp_t)(int32_t, void*, va_list, int32_t, void*, void*, void*); -typedef void (*vFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void*); +typedef void (*vFpuipA_t)(void*, uint32_t, int32_t, void*, va_list); +typedef void* (*pFLpppV_t)(uintptr_t, void*, void*, void*, ...); +typedef void* (*pFLpApp_t)(uintptr_t, void*, va_list, void*, void*); +typedef void (*vFpupppp_t)(void*, uint32_t, void*, void*, void*, void*); +typedef void (*vFLippppV_t)(uintptr_t, int32_t, void*, void*, void*, void*, ...); +typedef void (*vFLupippp_t)(uintptr_t, uint32_t, void*, int32_t, void*, void*, void*); +typedef void (*vFLpAippp_t)(uintptr_t, void*, va_list, int32_t, void*, void*, void*); +typedef void (*vFppupppp_t)(void*, void*, uint32_t, void*, void*, void*, void*); typedef void (*vFppLippp_t)(void*, void*, uintptr_t, int32_t, void*, void*, void*); typedef void (*vFpppuipV_t)(void*, void*, void*, uint32_t, int32_t, void*, ...); -typedef uint32_t (*uFipipppp_t)(int32_t, void*, int32_t, void*, void*, void*, void*); -typedef uint32_t (*uFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void*); +typedef uint32_t (*uFipupppp_t)(int32_t, void*, uint32_t, void*, void*, void*, void*); +typedef uint32_t (*uFppupppp_t)(void*, void*, uint32_t, void*, void*, void*, void*); typedef uint32_t (*uFppppppp_t)(void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFpppuipV_t)(void*, void*, void*, uint32_t, int32_t, void*, ...); -typedef void (*vFppiipppp_t)(void*, void*, int32_t, int32_t, void*, void*, void*, void*); -typedef void (*vFpppiippp_t)(void*, void*, void*, int32_t, int32_t, void*, void*, void*); -typedef uint32_t (*uFipippppp_t)(int32_t, void*, int32_t, void*, void*, void*, void*, void*); -typedef void (*vFiippppppp_t)(int32_t, int32_t, void*, void*, void*, void*, void*, void*, void*); -typedef void (*vFpippppppp_t)(void*, int32_t, void*, void*, void*, void*, void*, void*, void*); -typedef void (*vFpppiipppp_t)(void*, void*, void*, int32_t, int32_t, void*, void*, void*, void*); -typedef void* (*pFiippppppp_t)(int32_t, int32_t, void*, void*, void*, void*, void*, void*, void*); -typedef uint32_t (*uFppppppippp_t)(void*, void*, void*, void*, void*, void*, int32_t, void*, void*, void*); -typedef void (*vFpppppppiippp_t)(void*, void*, void*, void*, void*, void*, void*, int32_t, int32_t, void*, void*, void*); +typedef void (*vFppuipppp_t)(void*, void*, uint32_t, int32_t, void*, void*, void*, void*); +typedef void (*vFpppuippp_t)(void*, void*, void*, uint32_t, int32_t, void*, void*, void*); +typedef uint32_t (*uFipuppppp_t)(int32_t, void*, uint32_t, void*, void*, void*, void*, void*); +typedef void (*vFiuppppppp_t)(int32_t, uint32_t, void*, void*, void*, void*, void*, void*, void*); +typedef void (*vFpuppppppp_t)(void*, uint32_t, void*, void*, void*, void*, void*, void*, void*); +typedef void (*vFpppuipppp_t)(void*, void*, void*, uint32_t, int32_t, void*, void*, void*, void*); +typedef void* (*pFiuppppppp_t)(int32_t, uint32_t, void*, void*, void*, void*, void*, void*, void*); +typedef uint32_t (*uFppppppuppp_t)(void*, void*, void*, void*, void*, void*, uint32_t, void*, void*, void*); +typedef void (*vFpppppppuippp_t)(void*, void*, void*, void*, void*, void*, void*, uint32_t, int32_t, void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ GO(g_simple_async_result_set_op_res_gpointer, vFppp_t) \ @@ -61,31 +60,31 @@ typedef void (*vFpppppppiippp_t)(void*, void*, void*, void*, void*, void*, void* GO(g_simple_async_result_new_take_error, pFpppp_t) \ GO(g_task_new, pFpppp_t) \ GO(g_async_initable_init_async, vFpippp_t) \ + GO(g_simple_async_result_set_error, vFpuipV_t) \ GO(g_task_return_new_error, vFpuipV_t) \ - GO(g_simple_async_result_set_error, vFppipV_t) \ - GO(g_simple_async_result_set_error_va, vFppipA_t) \ - GO(g_initable_new, pFppppV_t) \ - GO(g_initable_new_valist, pFppApp_t) \ - GO(g_dbus_connection_new_for_address, vFpipppp_t) \ - GO(g_async_initable_new_async, vFiippppV_t) \ - GO(g_async_initable_newv_async, vFiupippp_t) \ - GO(g_async_initable_new_valist_async, vFipAippp_t) \ - GO(g_dbus_connection_new, vFppipppp_t) \ + GO(g_simple_async_result_set_error_va, vFpuipA_t) \ + GO(g_initable_new, pFLpppV_t) \ + GO(g_initable_new_valist, pFLpApp_t) \ + GO(g_dbus_connection_new_for_address, vFpupppp_t) \ + GO(g_async_initable_new_async, vFLippppV_t) \ + GO(g_async_initable_newv_async, vFLupippp_t) \ + GO(g_async_initable_new_valist_async, vFLpAippp_t) \ + GO(g_dbus_connection_new, vFppupppp_t) \ GO(g_input_stream_read_async, vFppLippp_t) \ GO(g_simple_async_report_error_in_idle, vFpppuipV_t) \ - GO(g_bus_watch_name, uFipipppp_t) \ - GO(g_bus_own_name_on_connection, uFppipppp_t) \ - GO(g_bus_watch_name_on_connection, uFppipppp_t) \ + GO(g_bus_watch_name, uFipupppp_t) \ + GO(g_bus_own_name_on_connection, uFppupppp_t) \ + GO(g_bus_watch_name_on_connection, uFppupppp_t) \ GO(g_dbus_connection_register_object, uFppppppp_t) \ GO(g_simple_async_result_new_error, pFpppuipV_t) \ - GO(g_dbus_connection_send_message_with_reply, vFppiipppp_t) \ - GO(g_dbus_proxy_call, vFpppiippp_t) \ - GO(g_bus_own_name, uFipippppp_t) \ - GO(g_dbus_proxy_new_for_bus, vFiippppppp_t) \ - GO(g_dbus_proxy_new, vFpippppppp_t) \ - GO(g_dbus_proxy_call_with_unix_fd_list, vFpppiipppp_t) \ - GO(g_dbus_object_manager_client_new_for_bus_sync, pFiippppppp_t) \ - GO(g_dbus_connection_signal_subscribe, uFppppppippp_t) \ - GO(g_dbus_connection_call, vFpppppppiippp_t) + GO(g_dbus_connection_send_message_with_reply, vFppuipppp_t) \ + GO(g_dbus_proxy_call, vFpppuippp_t) \ + GO(g_bus_own_name, uFipuppppp_t) \ + GO(g_dbus_proxy_new_for_bus, vFiuppppppp_t) \ + GO(g_dbus_proxy_new, vFpuppppppp_t) \ + GO(g_dbus_proxy_call_with_unix_fd_list, vFpppuipppp_t) \ + GO(g_dbus_object_manager_client_new_for_bus_sync, pFiuppppppp_t) \ + GO(g_dbus_connection_signal_subscribe, uFppppppuppp_t) \ + GO(g_dbus_connection_call, vFpppppppuippp_t) #endif // __wrappedgio2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgio2undefs.h b/src/wrapped/generated/wrappedgio2undefs.h index f14e77aa01e8750dcd864e9543b4e59148cf2917..04e69f01227b6b1a28a7ba108adf7d43cf58c84f 100644 --- a/src/wrapped/generated/wrappedgio2undefs.h +++ b/src/wrapped/generated/wrappedgio2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgio2UNDEFS_H_ #define __wrappedgio2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedglesv2defs.h b/src/wrapped/generated/wrappedglesv2defs.h index 26d20e5aa099d022d07ae6222a2a434b3c86fc4a..1ee910c67ca49f466fc11652e75804f8a40714d8 100644 --- a/src/wrapped/generated/wrappedglesv2defs.h +++ b/src/wrapped/generated/wrappedglesv2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedglesv2DEFS_H_ #define __wrappedglesv2DEFS_H_ diff --git a/src/wrapped/generated/wrappedglesv2types.h b/src/wrapped/generated/wrappedglesv2types.h index 586fe02bf1eb5b671272533b6910b441abae3293..38f4729ac43ac7ad6526ca81077f883ed0c577d0 100644 --- a/src/wrapped/generated/wrappedglesv2types.h +++ b/src/wrapped/generated/wrappedglesv2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedglesv2TYPES_H_ #define __wrappedglesv2TYPES_H_ diff --git a/src/wrapped/generated/wrappedglesv2undefs.h b/src/wrapped/generated/wrappedglesv2undefs.h index 9362f423791c95af4672cda5e14f545b360bf845..ebd85e82058d9564a077f1df34eae47748353e98 100644 --- a/src/wrapped/generated/wrappedglesv2undefs.h +++ b/src/wrapped/generated/wrappedglesv2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedglesv2UNDEFS_H_ #define __wrappedglesv2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedglib2defs.h b/src/wrapped/generated/wrappedglib2defs.h index e203aa2b516112548e84b00555052de8e0d83f25..b23f3d8ead31b0dad4f226e5e49bd353d3208a87 100644 --- a/src/wrapped/generated/wrappedglib2defs.h +++ b/src/wrapped/generated/wrappedglib2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedglib2DEFS_H_ #define __wrappedglib2DEFS_H_ diff --git a/src/wrapped/generated/wrappedglib2types.h b/src/wrapped/generated/wrappedglib2types.h index fc81f779a8f2864fc7ba3c3cc16b8ded3f55df1f..69a770b80d8491656142d95ed6233dff2831b3cb 100644 --- a/src/wrapped/generated/wrappedglib2types.h +++ b/src/wrapped/generated/wrappedglib2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedglib2TYPES_H_ #define __wrappedglib2TYPES_H_ @@ -43,26 +43,26 @@ typedef int32_t (*iFpLpV_t)(void*, uintptr_t, void*, ...); typedef int32_t (*iFpLpA_t)(void*, uintptr_t, void*, va_list); typedef uint32_t (*uFippp_t)(int32_t, void*, void*, void*); typedef uint32_t (*uFpipp_t)(void*, int32_t, void*, void*); -typedef void* (*pFpipp_t)(void*, int32_t, void*, void*); -typedef void* (*pFpipV_t)(void*, int32_t, void*, ...); -typedef void* (*pFpipA_t)(void*, int32_t, void*, va_list); +typedef uint32_t (*uFpupp_t)(void*, uint32_t, void*, void*); +typedef void* (*pFuipV_t)(uint32_t, int32_t, void*, ...); +typedef void* (*pFuipA_t)(uint32_t, int32_t, void*, va_list); typedef void* (*pFpupp_t)(void*, uint32_t, void*, void*); typedef void* (*pFpLpp_t)(void*, uintptr_t, void*, void*); typedef void* (*pFppip_t)(void*, void*, int32_t, void*); typedef void* (*pFpppp_t)(void*, void*, void*, void*); typedef void (*vFpiLpp_t)(void*, int32_t, uintptr_t, void*, void*); -typedef void (*vFppipV_t)(void*, void*, int32_t, void*, ...); +typedef void (*vFpuipV_t)(void*, uint32_t, int32_t, void*, ...); typedef uint32_t (*uFiippp_t)(int32_t, int32_t, void*, void*, void*); typedef uint32_t (*uFiuppp_t)(int32_t, uint32_t, void*, void*, void*); typedef void* (*pFppppp_t)(void*, void*, void*, void*, void*); -typedef void (*vFpiiipp_t)(void*, int32_t, int32_t, int32_t, void*, void*); +typedef void (*vFpuuipp_t)(void*, uint32_t, uint32_t, int32_t, void*, void*); typedef int32_t (*iFpupppp_t)(void*, uint32_t, void*, void*, void*, void*); -typedef uint32_t (*uFpiippp_t)(void*, int32_t, int32_t, void*, void*, void*); -typedef void* (*pFppuipp_t)(void*, void*, uint32_t, int32_t, void*, void*); -typedef void* (*pFppLiiip_t)(void*, void*, uintptr_t, int32_t, int32_t, int32_t, void*); -typedef int32_t (*iFpppipppp_t)(void*, void*, void*, int32_t, void*, void*, void*, void*); -typedef int32_t (*iFpppipppppp_t)(void*, void*, void*, int32_t, void*, void*, void*, void*, void*, void*); -typedef int32_t (*iFpppippppppp_t)(void*, void*, void*, int32_t, void*, void*, void*, void*, void*, void*, void*); +typedef uint32_t (*uFpiuppp_t)(void*, int32_t, uint32_t, void*, void*, void*); +typedef void* (*pFppLipp_t)(void*, void*, uintptr_t, int32_t, void*, void*); +typedef void* (*pFppLiiup_t)(void*, void*, uintptr_t, int32_t, int32_t, uint32_t, void*); +typedef int32_t (*iFpppupppp_t)(void*, void*, void*, uint32_t, void*, void*, void*, void*); +typedef int32_t (*iFpppupppppp_t)(void*, void*, void*, uint32_t, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFpppuppppppp_t)(void*, void*, void*, uint32_t, void*, void*, void*, void*, void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ GO(g_atexit, vFp_t) \ @@ -113,6 +113,7 @@ typedef int32_t (*iFpppippppppp_t)(void*, void*, void*, int32_t, void*, void*, v GO(g_ptr_array_foreach, vFppp_t) \ GO(g_ptr_array_sort_with_data, vFppp_t) \ GO(g_queue_foreach, vFppp_t) \ + GO(g_slist_foreach, vFppp_t) \ GO(g_static_private_set, vFppp_t) \ GO(g_string_append_printf, vFppV_t) \ GO(g_string_printf, vFppV_t) \ @@ -138,7 +139,6 @@ typedef int32_t (*iFpppippppppp_t)(void*, void*, void*, int32_t, void*, void*, v GO(g_once_impl, pFppp_t) \ GO(g_queue_find_custom, pFppp_t) \ GO(g_slist_find_custom, pFppp_t) \ - GO(g_slist_foreach, pFppp_t) \ GO(g_slist_insert_sorted, pFppp_t) \ GO(g_slist_sort_with_data, pFppp_t) \ GO(g_thread_new, pFppp_t) \ @@ -151,12 +151,12 @@ typedef int32_t (*iFpppippppppp_t)(void*, void*, void*, int32_t, void*, void*, v GO(g_snprintf, iFpLpV_t) \ GO(g_vsnprintf, iFpLpA_t) \ GO(g_idle_add_full, uFippp_t) \ - GO(g_io_add_watch, uFpipp_t) \ GO(g_log_set_handler, uFpipp_t) \ - GO(g_markup_parse_context_new, pFpipp_t) \ - GO(g_error_new, pFpipV_t) \ - GO(g_error_new_valist, pFpipA_t) \ + GO(g_io_add_watch, uFpupp_t) \ + GO(g_error_new, pFuipV_t) \ + GO(g_error_new_valist, pFuipA_t) \ GO(g_datalist_id_dup_data, pFpupp_t) \ + GO(g_markup_parse_context_new, pFpupp_t) \ GO(g_bytes_new_with_free_func, pFpLpp_t) \ GO(g_thread_create, pFppip_t) \ GO(g_hash_table_new_full, pFpppp_t) \ @@ -164,18 +164,18 @@ typedef int32_t (*iFpppippppppp_t)(void*, void*, void*, int32_t, void*, void*, v GO(g_slist_insert_sorted_with_data, pFpppp_t) \ GO(g_thread_try_new, pFpppp_t) \ GO(g_qsort_with_data, vFpiLpp_t) \ - GO(g_set_error, vFppipV_t) \ + GO(g_set_error, vFpuipV_t) \ GO(g_child_watch_add_full, uFiippp_t) \ GO(g_timeout_add_full, uFiuppp_t) \ GO(g_timeout_add_seconds_full, uFiuppp_t) \ GO(g_option_group_new, pFppppp_t) \ - GO(g_node_traverse, vFpiiipp_t) \ + GO(g_node_traverse, vFpuuipp_t) \ GO(g_datalist_id_replace_data, iFpupppp_t) \ - GO(g_io_add_watch_full, uFpiippp_t) \ - GO(g_variant_new_from_data, pFppuipp_t) \ - GO(g_thread_create_full, pFppLiiip_t) \ - GO(g_spawn_async, iFpppipppp_t) \ - GO(g_spawn_sync, iFpppipppppp_t) \ - GO(g_spawn_async_with_pipes, iFpppippppppp_t) + GO(g_io_add_watch_full, uFpiuppp_t) \ + GO(g_variant_new_from_data, pFppLipp_t) \ + GO(g_thread_create_full, pFppLiiup_t) \ + GO(g_spawn_async, iFpppupppp_t) \ + GO(g_spawn_sync, iFpppupppppp_t) \ + GO(g_spawn_async_with_pipes, iFpppuppppppp_t) #endif // __wrappedglib2TYPES_H_ diff --git a/src/wrapped/generated/wrappedglib2undefs.h b/src/wrapped/generated/wrappedglib2undefs.h index f6d5f4370f5a1a4920cba61242937e6991737b5a..0e16c27e6f4fcc89ff0e0bfaebc2488b61661e50 100644 --- a/src/wrapped/generated/wrappedglib2undefs.h +++ b/src/wrapped/generated/wrappedglib2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedglib2UNDEFS_H_ #define __wrappedglib2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgmodule2defs.h b/src/wrapped/generated/wrappedgmodule2defs.h index 297d418b256a9aaf5d12a041a9806490f0e617e8..0d45da1dc01d8905ed05518a4ab153d15bbfb5c8 100644 --- a/src/wrapped/generated/wrappedgmodule2defs.h +++ b/src/wrapped/generated/wrappedgmodule2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgmodule2DEFS_H_ #define __wrappedgmodule2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgmodule2types.h b/src/wrapped/generated/wrappedgmodule2types.h index 96576d222657b8cfd6a72213515cd40da1af44da..05767a2568b4742a55ebb2530f8d6ca44b0655cc 100644 --- a/src/wrapped/generated/wrappedgmodule2types.h +++ b/src/wrapped/generated/wrappedgmodule2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgmodule2TYPES_H_ #define __wrappedgmodule2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgmodule2undefs.h b/src/wrapped/generated/wrappedgmodule2undefs.h index 3776199495e449a9091a65d9e225039d96fc1f1c..9da4fb64f4fee42798157ede61ed9586a1cfa9d4 100644 --- a/src/wrapped/generated/wrappedgmodule2undefs.h +++ b/src/wrapped/generated/wrappedgmodule2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgmodule2UNDEFS_H_ #define __wrappedgmodule2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgmpdefs.h b/src/wrapped/generated/wrappedgmpdefs.h index 48916e6b3b13520c9f6103cd581d960b4f0c7159..184ee4b60e6c760e9e5a506c72aeaaa9b412da72 100644 --- a/src/wrapped/generated/wrappedgmpdefs.h +++ b/src/wrapped/generated/wrappedgmpdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgmpDEFS_H_ #define __wrappedgmpDEFS_H_ diff --git a/src/wrapped/generated/wrappedgmptypes.h b/src/wrapped/generated/wrappedgmptypes.h index c7a54de030488a6627446c8427e18ae621137d8f..3de8f2f0a645cd7f9b926f80e3135822eecf31f9 100644 --- a/src/wrapped/generated/wrappedgmptypes.h +++ b/src/wrapped/generated/wrappedgmptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgmpTYPES_H_ #define __wrappedgmpTYPES_H_ diff --git a/src/wrapped/generated/wrappedgmpundefs.h b/src/wrapped/generated/wrappedgmpundefs.h index 514a6c0948253eaf1bff198f0d17086ca9cb14ad..c5dee4a6e50cb12cf11b42ac695e06c9b6b9440a 100644 --- a/src/wrapped/generated/wrappedgmpundefs.h +++ b/src/wrapped/generated/wrappedgmpundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgmpUNDEFS_H_ #define __wrappedgmpUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgnutlsdefs.h b/src/wrapped/generated/wrappedgnutlsdefs.h index c717849057c207c136efa8ed8df3207eb64dbc55..03223011e255a57a1622dae81b161570b8c88c77 100644 --- a/src/wrapped/generated/wrappedgnutlsdefs.h +++ b/src/wrapped/generated/wrappedgnutlsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgnutlsDEFS_H_ #define __wrappedgnutlsDEFS_H_ diff --git a/src/wrapped/generated/wrappedgnutlstypes.h b/src/wrapped/generated/wrappedgnutlstypes.h index 37272839704887797b9b6378de7c150dd5d8e1b4..954f8c4c108c86b8894d5d5affeeebe998fec93b 100644 --- a/src/wrapped/generated/wrappedgnutlstypes.h +++ b/src/wrapped/generated/wrappedgnutlstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgnutlsTYPES_H_ #define __wrappedgnutlsTYPES_H_ diff --git a/src/wrapped/generated/wrappedgnutlsundefs.h b/src/wrapped/generated/wrappedgnutlsundefs.h index 8ab689c78f191752d2ffbf40844d6fd07c0f8272..2fbca25b2a923a6e187b769a01d734b8ac360136 100644 --- a/src/wrapped/generated/wrappedgnutlsundefs.h +++ b/src/wrapped/generated/wrappedgnutlsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgnutlsUNDEFS_H_ #define __wrappedgnutlsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgobject2defs.h b/src/wrapped/generated/wrappedgobject2defs.h index 0f36947b8ddae2b362c4c8397e514a3568665bcf..bfea81cf8115af0edc25ec84f09dcbeb732b4e71 100644 --- a/src/wrapped/generated/wrappedgobject2defs.h +++ b/src/wrapped/generated/wrappedgobject2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgobject2DEFS_H_ #define __wrappedgobject2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgobject2types.h b/src/wrapped/generated/wrappedgobject2types.h index d7a8f665f9cb534cff4ddf0fa280518b3bcfdb85..54038c97a516d131ee112863a64ff98de89cb9c9 100644 --- a/src/wrapped/generated/wrappedgobject2types.h +++ b/src/wrapped/generated/wrappedgobject2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgobject2TYPES_H_ #define __wrappedgobject2TYPES_H_ @@ -14,11 +14,11 @@ typedef void* (*pFL_t)(uintptr_t); typedef void* (*pFp_t)(void*); typedef void (*vFpp_t)(void*, void*); -typedef int32_t (*iFpp_t)(void*, void*); +typedef uintptr_t (*LFpp_t)(void*, void*); typedef void* (*pFpp_t)(void*, void*); -typedef void (*vFiip_t)(int32_t, int32_t, void*); typedef void (*vFLLp_t)(uintptr_t, uintptr_t, void*); typedef void (*vFpup_t)(void*, uint32_t, void*); +typedef void (*vFpLp_t)(void*, uintptr_t, void*); typedef void (*vFppp_t)(void*, void*, void*); typedef void (*vFppV_t)(void*, void*, ...); typedef void (*vFppA_t)(void*, void*, va_list); @@ -28,34 +28,34 @@ typedef void* (*pFLpA_t)(uintptr_t, void*, va_list); typedef void* (*pFppp_t)(void*, void*, void*); typedef void* (*pFppV_t)(void*, void*, ...); typedef void (*vFpuuV_t)(void*, uint32_t, uint32_t, ...); +typedef void (*vFpuuA_t)(void*, uint32_t, uint32_t, va_list); typedef void (*vFpupp_t)(void*, uint32_t, void*, void*); -typedef void (*vFpupA_t)(void*, uint32_t, void*, va_list); typedef void (*vFpppp_t)(void*, void*, void*, void*); -typedef uintptr_t (*LFLppi_t)(uintptr_t, void*, void*, int32_t); -typedef uintptr_t (*LFupppp_t)(uint32_t, void*, void*, void*, void*); -typedef uintptr_t (*LFLpppi_t)(uintptr_t, void*, void*, void*, int32_t); -typedef uintptr_t (*LFppppi_t)(void*, void*, void*, void*, int32_t); +typedef uintptr_t (*LFLppu_t)(uintptr_t, void*, void*, uint32_t); +typedef uintptr_t (*LFuuppp_t)(uint32_t, uint32_t, void*, void*, void*); +typedef uintptr_t (*LFLpppu_t)(uintptr_t, void*, void*, void*, uint32_t); +typedef uintptr_t (*LFppppu_t)(void*, void*, void*, void*, uint32_t); typedef uintptr_t (*LFpppppu_t)(void*, void*, void*, void*, void*, uint32_t); -typedef uint32_t (*uFpiupppp_t)(void*, int32_t, uint32_t, void*, void*, void*, void*); +typedef uint32_t (*uFpuuuppp_t)(void*, uint32_t, uint32_t, uint32_t, void*, void*, void*); typedef uintptr_t (*LFLpupupu_t)(uintptr_t, void*, uint32_t, void*, uint32_t, void*, uint32_t); -typedef uintptr_t (*LFpiupppp_t)(void*, int32_t, uint32_t, void*, void*, void*, void*); -typedef uint32_t (*uFpLiupppLuV_t)(void*, uintptr_t, int32_t, uint32_t, void*, void*, void*, uintptr_t, uint32_t, ...); -typedef uint32_t (*uFpLippppLup_t)(void*, uintptr_t, int32_t, void*, void*, void*, void*, uintptr_t, uint32_t, void*); -typedef uint32_t (*uFpLippppLuA_t)(void*, uintptr_t, int32_t, void*, void*, void*, void*, uintptr_t, uint32_t, va_list); +typedef uintptr_t (*LFpuuuppp_t)(void*, uint32_t, uint32_t, uint32_t, void*, void*, void*); +typedef uint32_t (*uFpLuupppLuV_t)(void*, uintptr_t, uint32_t, uint32_t, void*, void*, void*, uintptr_t, uint32_t, ...); +typedef uint32_t (*uFpLuppppLup_t)(void*, uintptr_t, uint32_t, void*, void*, void*, void*, uintptr_t, uint32_t, void*); +typedef uint32_t (*uFpLuppppLuA_t)(void*, uintptr_t, uint32_t, void*, void*, void*, void*, uintptr_t, uint32_t, va_list); #define SUPER() ADDED_FUNCTIONS() \ GO(g_type_value_table_peek, pFL_t) \ GO(g_type_class_peek_parent, pFp_t) \ GO(g_closure_set_marshal, vFpp_t) \ - GO(g_param_type_register_static, iFpp_t) \ + GO(g_param_type_register_static, LFpp_t) \ GO(g_value_array_sort, pFpp_t) \ - GO(g_value_register_transform_func, vFiip_t) \ GO(g_type_add_interface_static, vFLLp_t) \ + GO(g_value_register_transform_func, vFLLp_t) \ GO(g_object_class_install_properties, vFpup_t) \ + GO(g_signal_override_class_handler, vFpLp_t) \ GO(g_closure_add_finalize_notifier, vFppp_t) \ GO(g_closure_remove_finalize_notifier, vFppp_t) \ GO(g_object_weak_ref, vFppp_t) \ - GO(g_signal_override_class_handler, vFppp_t) \ GO(g_object_get, vFppV_t) \ GO(g_object_set, vFppV_t) \ GO(g_object_get_valist, vFppA_t) \ @@ -68,22 +68,22 @@ typedef uint32_t (*uFpLippppLuA_t)(void*, uintptr_t, int32_t, void*, void*, void GO(g_value_array_sort_with_data, pFppp_t) \ GO(g_object_connect, pFppV_t) \ GO(g_signal_emit, vFpuuV_t) \ + GO(g_signal_emit_valist, vFpuuA_t) \ + GO(g_object_set_qdata_full, vFpupp_t) \ GO(g_param_spec_set_qdata_full, vFpupp_t) \ - GO(g_signal_emit_valist, vFpupA_t) \ GO(g_object_set_data_full, vFpppp_t) \ - GO(g_object_set_qdata_full, vFpppp_t) \ - GO(g_type_register_static, LFLppi_t) \ - GO(g_signal_add_emission_hook, LFupppp_t) \ - GO(g_type_register_fundamental, LFLpppi_t) \ - GO(g_signal_connect_object, LFppppi_t) \ + GO(g_type_register_static, LFLppu_t) \ + GO(g_signal_add_emission_hook, LFuuppp_t) \ + GO(g_type_register_fundamental, LFLpppu_t) \ + GO(g_signal_connect_object, LFppppu_t) \ GO(g_signal_connect_data, LFpppppu_t) \ - GO(g_signal_handlers_block_matched, uFpiupppp_t) \ - GO(g_signal_handlers_disconnect_matched, uFpiupppp_t) \ - GO(g_signal_handlers_unblock_matched, uFpiupppp_t) \ + GO(g_signal_handlers_block_matched, uFpuuuppp_t) \ + GO(g_signal_handlers_disconnect_matched, uFpuuuppp_t) \ + GO(g_signal_handlers_unblock_matched, uFpuuuppp_t) \ GO(g_type_register_static_simple, LFLpupupu_t) \ - GO(g_signal_handler_find, LFpiupppp_t) \ - GO(g_signal_new, uFpLiupppLuV_t) \ - GO(g_signal_newv, uFpLippppLup_t) \ - GO(g_signal_new_valist, uFpLippppLuA_t) + GO(g_signal_handler_find, LFpuuuppp_t) \ + GO(g_signal_new, uFpLuupppLuV_t) \ + GO(g_signal_newv, uFpLuppppLup_t) \ + GO(g_signal_new_valist, uFpLuppppLuA_t) #endif // __wrappedgobject2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgobject2undefs.h b/src/wrapped/generated/wrappedgobject2undefs.h index 5b5b37b93f6dba2dda949c34a1c55a2e50ce6ac3..cfb9388c2c37736c4fc0f6f08e8970979c0f4aec 100644 --- a/src/wrapped/generated/wrappedgobject2undefs.h +++ b/src/wrapped/generated/wrappedgobject2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgobject2UNDEFS_H_ #define __wrappedgobject2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgompdefs.h b/src/wrapped/generated/wrappedgompdefs.h index 5618a4d10935386cc6b3b53c009995264750d5b3..a72dd908b38d8c3123b0ba9e9ed1e4518aca4e31 100644 --- a/src/wrapped/generated/wrappedgompdefs.h +++ b/src/wrapped/generated/wrappedgompdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgompDEFS_H_ #define __wrappedgompDEFS_H_ diff --git a/src/wrapped/generated/wrappedgomptypes.h b/src/wrapped/generated/wrappedgomptypes.h index 4b0d4c019e5687aa4cf094247066912a0b76ef15..c3d6bac87a3c361ff8d0f867b587555c1bf11d08 100644 --- a/src/wrapped/generated/wrappedgomptypes.h +++ b/src/wrapped/generated/wrappedgomptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgompTYPES_H_ #define __wrappedgompTYPES_H_ diff --git a/src/wrapped/generated/wrappedgompundefs.h b/src/wrapped/generated/wrappedgompundefs.h index ae3271f1c11154a6ea0d79e6339888bc25ebcea1..3612971c0eff452df3295eb1e6aaf4b1c1ca853f 100644 --- a/src/wrapped/generated/wrappedgompundefs.h +++ b/src/wrapped/generated/wrappedgompundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgompUNDEFS_H_ #define __wrappedgompUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgssapidefs.h b/src/wrapped/generated/wrappedgssapidefs.h index 85b82b8e3246e2ddb2c6609944610dd398f54140..bac34921824c513cf36d344f593ad0213c30b70b 100644 --- a/src/wrapped/generated/wrappedgssapidefs.h +++ b/src/wrapped/generated/wrappedgssapidefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgssapiDEFS_H_ #define __wrappedgssapiDEFS_H_ diff --git a/src/wrapped/generated/wrappedgssapikrb5defs.h b/src/wrapped/generated/wrappedgssapikrb5defs.h index 423cee1307ee9afd253f8c4744d8fc91f6bb18fc..f5ac4b078842fdcf69f413489e08a175e5b0223d 100644 --- a/src/wrapped/generated/wrappedgssapikrb5defs.h +++ b/src/wrapped/generated/wrappedgssapikrb5defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgssapikrb5DEFS_H_ #define __wrappedgssapikrb5DEFS_H_ diff --git a/src/wrapped/generated/wrappedgssapikrb5types.h b/src/wrapped/generated/wrappedgssapikrb5types.h index 2f2c3cd54e7d3f383b51cc433cfd9817cf03c2e9..d417f9c0e4588d18e301d5caa6291778af630222 100644 --- a/src/wrapped/generated/wrappedgssapikrb5types.h +++ b/src/wrapped/generated/wrappedgssapikrb5types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgssapikrb5TYPES_H_ #define __wrappedgssapikrb5TYPES_H_ diff --git a/src/wrapped/generated/wrappedgssapikrb5undefs.h b/src/wrapped/generated/wrappedgssapikrb5undefs.h index a2be1c3eff1d130c9df3bff1ef69cf1ff253191f..4debe2c19965c901aeb0f5524f57d6d3c60b4fce 100644 --- a/src/wrapped/generated/wrappedgssapikrb5undefs.h +++ b/src/wrapped/generated/wrappedgssapikrb5undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgssapikrb5UNDEFS_H_ #define __wrappedgssapikrb5UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgssapitypes.h b/src/wrapped/generated/wrappedgssapitypes.h index 3d4ee9fefe222c262aac1a38a65bd254a2d09418..1f0af0943c5caf7ee0b8966eff020a25d90b5149 100644 --- a/src/wrapped/generated/wrappedgssapitypes.h +++ b/src/wrapped/generated/wrappedgssapitypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgssapiTYPES_H_ #define __wrappedgssapiTYPES_H_ diff --git a/src/wrapped/generated/wrappedgssapiundefs.h b/src/wrapped/generated/wrappedgssapiundefs.h index c5512ffcbe66bbf4a8e79554812ca6103d5b5724..91a2c66fd98a039fbd388a0095f21405970e6116 100644 --- a/src/wrapped/generated/wrappedgssapiundefs.h +++ b/src/wrapped/generated/wrappedgssapiundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgssapiUNDEFS_H_ #define __wrappedgssapiUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstallocatorsdefs.h b/src/wrapped/generated/wrappedgstallocatorsdefs.h index c45e3cf85bbbebad0eeadc9fd5151fd9d4a850ab..c070db7b96f3ef1a09ee4c865b155bf5a59ceb31 100644 --- a/src/wrapped/generated/wrappedgstallocatorsdefs.h +++ b/src/wrapped/generated/wrappedgstallocatorsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstallocatorsDEFS_H_ #define __wrappedgstallocatorsDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstallocatorstypes.h b/src/wrapped/generated/wrappedgstallocatorstypes.h index a98a8a1d98b082140961756c3614763449c50ad4..6a73c9790b8aa2bddd1c8492f064529799ebf8ec 100644 --- a/src/wrapped/generated/wrappedgstallocatorstypes.h +++ b/src/wrapped/generated/wrappedgstallocatorstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstallocatorsTYPES_H_ #define __wrappedgstallocatorsTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstallocatorsundefs.h b/src/wrapped/generated/wrappedgstallocatorsundefs.h index c672c705a072528aeb8f35aac1627d5f2aaa4f90..365d51a21d5af4bb1b2f5aa06a7408d219463cf2 100644 --- a/src/wrapped/generated/wrappedgstallocatorsundefs.h +++ b/src/wrapped/generated/wrappedgstallocatorsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstallocatorsUNDEFS_H_ #define __wrappedgstallocatorsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstappdefs.h b/src/wrapped/generated/wrappedgstappdefs.h index 35f3ab34d18fb6e18cca05a97c0b98f575ab5542..22e3de0283cdfebbcaffb6358af7f53c2d500717 100644 --- a/src/wrapped/generated/wrappedgstappdefs.h +++ b/src/wrapped/generated/wrappedgstappdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstappDEFS_H_ #define __wrappedgstappDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstapptypes.h b/src/wrapped/generated/wrappedgstapptypes.h index 4ffbaf8149e491274fee182b4300d7522b66ca1f..90a8ce42ed460b497623c8e3c93a0160d277efaa 100644 --- a/src/wrapped/generated/wrappedgstapptypes.h +++ b/src/wrapped/generated/wrappedgstapptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstappTYPES_H_ #define __wrappedgstappTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstappundefs.h b/src/wrapped/generated/wrappedgstappundefs.h index ce6a01f5ba765ce140de72868bce13a9c670d1cb..33a5b664e433689b79bc297d8a21e5575d419cfc 100644 --- a/src/wrapped/generated/wrappedgstappundefs.h +++ b/src/wrapped/generated/wrappedgstappundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstappUNDEFS_H_ #define __wrappedgstappUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstaudiodefs.h b/src/wrapped/generated/wrappedgstaudiodefs.h index 1cb16ea133cd522bb6c00b3da739e282a9b4af6f..f6fe5107c35192bbd878b74ab1039c9565a954a8 100644 --- a/src/wrapped/generated/wrappedgstaudiodefs.h +++ b/src/wrapped/generated/wrappedgstaudiodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstaudioDEFS_H_ #define __wrappedgstaudioDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstaudiotypes.h b/src/wrapped/generated/wrappedgstaudiotypes.h index 82d46cc1b28115b1da0b92581fc6668550f54485..d502314b39c1e01b93f8c6bc25ced6f02669b896 100644 --- a/src/wrapped/generated/wrappedgstaudiotypes.h +++ b/src/wrapped/generated/wrappedgstaudiotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstaudioTYPES_H_ #define __wrappedgstaudioTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstaudioundefs.h b/src/wrapped/generated/wrappedgstaudioundefs.h index fb81b07a3d9de3c163186c3a076209dc43b16b1c..a738b42b0e6f7bf1926a5fcbf7cbdcaeab2f3d90 100644 --- a/src/wrapped/generated/wrappedgstaudioundefs.h +++ b/src/wrapped/generated/wrappedgstaudioundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstaudioUNDEFS_H_ #define __wrappedgstaudioUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstbasedefs.h b/src/wrapped/generated/wrappedgstbasedefs.h index d9a16ee4f53f087c0c2cdc27b80a7ff95efe9b87..71614d20cf6cb59453d997e6099f298707574ebd 100644 --- a/src/wrapped/generated/wrappedgstbasedefs.h +++ b/src/wrapped/generated/wrappedgstbasedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstbaseDEFS_H_ #define __wrappedgstbaseDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstbasetypes.h b/src/wrapped/generated/wrappedgstbasetypes.h index 4c306231d17010ce43204b3bc14bfd9f3ad85410..6759f70adc912f66f34a7cf29336d96d95ef509f 100644 --- a/src/wrapped/generated/wrappedgstbasetypes.h +++ b/src/wrapped/generated/wrappedgstbasetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstbaseTYPES_H_ #define __wrappedgstbaseTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstbaseundefs.h b/src/wrapped/generated/wrappedgstbaseundefs.h index 0547e9fced559d498c5ab08e9eaf870a0999da55..7fe43ad0ab4adc2429dc540087a742fc940234c1 100644 --- a/src/wrapped/generated/wrappedgstbaseundefs.h +++ b/src/wrapped/generated/wrappedgstbaseundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstbaseUNDEFS_H_ #define __wrappedgstbaseUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstcheckdefs.h b/src/wrapped/generated/wrappedgstcheckdefs.h index 150a1b51fdabe1d16f8f54241215346b7eeb25a7..8efafdf3ec9bc090d670294c54e897f252e41a46 100644 --- a/src/wrapped/generated/wrappedgstcheckdefs.h +++ b/src/wrapped/generated/wrappedgstcheckdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstcheckDEFS_H_ #define __wrappedgstcheckDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstchecktypes.h b/src/wrapped/generated/wrappedgstchecktypes.h index 5769e178527a6c0781264eb3c58bb7c571fe1061..8e38fe0804bfd8a1c5b724771eb7ab0af390064e 100644 --- a/src/wrapped/generated/wrappedgstchecktypes.h +++ b/src/wrapped/generated/wrappedgstchecktypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstcheckTYPES_H_ #define __wrappedgstcheckTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstcheckundefs.h b/src/wrapped/generated/wrappedgstcheckundefs.h index 29f89b9ef0ba73619c62edb5d2e0f8aaa82efda4..1fd7c5ff3c6ce04bda3bcc1c83daa7609a790a34 100644 --- a/src/wrapped/generated/wrappedgstcheckundefs.h +++ b/src/wrapped/generated/wrappedgstcheckundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstcheckUNDEFS_H_ #define __wrappedgstcheckUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstcontrollerdefs.h b/src/wrapped/generated/wrappedgstcontrollerdefs.h index 639be35a4d9e5f1185ed7dc8abb1fe6b2bacf276..c2bb62701e8b7e49f9e6304fddc7d6d979bc8a10 100644 --- a/src/wrapped/generated/wrappedgstcontrollerdefs.h +++ b/src/wrapped/generated/wrappedgstcontrollerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstcontrollerDEFS_H_ #define __wrappedgstcontrollerDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstcontrollertypes.h b/src/wrapped/generated/wrappedgstcontrollertypes.h index b52da4a27827f58bdef77f0fc8c6735d20615c82..ef5b1b408e20782b2d325597b1833552e2ac5f4d 100644 --- a/src/wrapped/generated/wrappedgstcontrollertypes.h +++ b/src/wrapped/generated/wrappedgstcontrollertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstcontrollerTYPES_H_ #define __wrappedgstcontrollerTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstcontrollerundefs.h b/src/wrapped/generated/wrappedgstcontrollerundefs.h index 342d086123f1d25cb2992f167b49cc2faee813ae..b1e57994af2b14c9b7b38df30bd82c0cbbd20dd1 100644 --- a/src/wrapped/generated/wrappedgstcontrollerundefs.h +++ b/src/wrapped/generated/wrappedgstcontrollerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstcontrollerUNDEFS_H_ #define __wrappedgstcontrollerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstfftdefs.h b/src/wrapped/generated/wrappedgstfftdefs.h index 8e45f8ec634c1a2cf7b07d129709975bf5787cc2..bf900b3807541cd4483f54b5a598f297260462a8 100644 --- a/src/wrapped/generated/wrappedgstfftdefs.h +++ b/src/wrapped/generated/wrappedgstfftdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstfftDEFS_H_ #define __wrappedgstfftDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstffttypes.h b/src/wrapped/generated/wrappedgstffttypes.h index 1628daeb947a432f7aba12edd9aab4290840e7bb..1f1a0b462f3ee89cfe52065fafd714056ea7cc35 100644 --- a/src/wrapped/generated/wrappedgstffttypes.h +++ b/src/wrapped/generated/wrappedgstffttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstfftTYPES_H_ #define __wrappedgstfftTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstfftundefs.h b/src/wrapped/generated/wrappedgstfftundefs.h index 26a688a8345b2dacf6fa66a07f7c9f6d599cf48f..48e2f8dbc2125e996d296a09e5544f344106b71b 100644 --- a/src/wrapped/generated/wrappedgstfftundefs.h +++ b/src/wrapped/generated/wrappedgstfftundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstfftUNDEFS_H_ #define __wrappedgstfftUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstgldefs.h b/src/wrapped/generated/wrappedgstgldefs.h index 255450f644f8a1a6353fe482266707a619eaf881..39e0cb40a0dd898848b896a5b99c2a1fe85deaa9 100644 --- a/src/wrapped/generated/wrappedgstgldefs.h +++ b/src/wrapped/generated/wrappedgstgldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstglDEFS_H_ #define __wrappedgstglDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstgltypes.h b/src/wrapped/generated/wrappedgstgltypes.h index e8013056fffc46299ec483b65cc40fff10247e14..a1e8e722356fffeba941a74162f6bd434c495f60 100644 --- a/src/wrapped/generated/wrappedgstgltypes.h +++ b/src/wrapped/generated/wrappedgstgltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstglTYPES_H_ #define __wrappedgstglTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstglundefs.h b/src/wrapped/generated/wrappedgstglundefs.h index 05db81ca534c97f8e8078a3227e496be9083bc55..8aedfc23fcf4559852d06ba24be71ddc1f67fc83 100644 --- a/src/wrapped/generated/wrappedgstglundefs.h +++ b/src/wrapped/generated/wrappedgstglundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstglUNDEFS_H_ #define __wrappedgstglUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstnetdefs.h b/src/wrapped/generated/wrappedgstnetdefs.h index 50e7548404b67e385d9bd0ac3521db9b28f3ad3b..2cc6ed930d64c520ec807a6a94ae7fdffa4cfe57 100644 --- a/src/wrapped/generated/wrappedgstnetdefs.h +++ b/src/wrapped/generated/wrappedgstnetdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstnetDEFS_H_ #define __wrappedgstnetDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstnettypes.h b/src/wrapped/generated/wrappedgstnettypes.h index a4f1dbbcf5bae5f0834771803fa845f8617c866c..33d83b78138e5c70b40f01eda04dd474cb723010 100644 --- a/src/wrapped/generated/wrappedgstnettypes.h +++ b/src/wrapped/generated/wrappedgstnettypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstnetTYPES_H_ #define __wrappedgstnetTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstnetundefs.h b/src/wrapped/generated/wrappedgstnetundefs.h index 3af737a49643923090b69964b0c1eb096fed97b8..2eaeaeae3d19108a50cfdda2021f59d64b4be4b9 100644 --- a/src/wrapped/generated/wrappedgstnetundefs.h +++ b/src/wrapped/generated/wrappedgstnetundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstnetUNDEFS_H_ #define __wrappedgstnetUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstpbutilsdefs.h b/src/wrapped/generated/wrappedgstpbutilsdefs.h index 6451ec6529483c684acb75887a66b64bb77a0104..9829b8091e3c48b726b0778db9e8ef97c8cf9d98 100644 --- a/src/wrapped/generated/wrappedgstpbutilsdefs.h +++ b/src/wrapped/generated/wrappedgstpbutilsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstpbutilsDEFS_H_ #define __wrappedgstpbutilsDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstpbutilstypes.h b/src/wrapped/generated/wrappedgstpbutilstypes.h index ec08b7dcb1f9aa4b3d435e6780a0a9c39590ac51..f175773da148e0c4c057e262afa60058cd078694 100644 --- a/src/wrapped/generated/wrappedgstpbutilstypes.h +++ b/src/wrapped/generated/wrappedgstpbutilstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstpbutilsTYPES_H_ #define __wrappedgstpbutilsTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstpbutilsundefs.h b/src/wrapped/generated/wrappedgstpbutilsundefs.h index c4e5fb34e101d7312fd2ee762318bedc0e2582be..7be31cf35e38d3d93a19770a08db3db7d6c6ba25 100644 --- a/src/wrapped/generated/wrappedgstpbutilsundefs.h +++ b/src/wrapped/generated/wrappedgstpbutilsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstpbutilsUNDEFS_H_ #define __wrappedgstpbutilsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstreamerdefs.h b/src/wrapped/generated/wrappedgstreamerdefs.h index 6b6714e0e90f264670a3ecd911fcb316a12bdffc..8b3734b9630b2cd44a68ce0033e24735f62ddb03 100644 --- a/src/wrapped/generated/wrappedgstreamerdefs.h +++ b/src/wrapped/generated/wrappedgstreamerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstreamerDEFS_H_ #define __wrappedgstreamerDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstreamertypes.h b/src/wrapped/generated/wrappedgstreamertypes.h index 939f702e5d1b661ef24a41d5b0fe420978a2fa3c..735eced975e770f6650ed1e61ff2ab531bc2aa98 100644 --- a/src/wrapped/generated/wrappedgstreamertypes.h +++ b/src/wrapped/generated/wrappedgstreamertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstreamerTYPES_H_ #define __wrappedgstreamerTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstreamerundefs.h b/src/wrapped/generated/wrappedgstreamerundefs.h index 207c97a0be5f60be87ecaaf8ea0c5fe8afae380e..611f0f27e561d14425d099fdbffe23ebe9e2fc57 100644 --- a/src/wrapped/generated/wrappedgstreamerundefs.h +++ b/src/wrapped/generated/wrappedgstreamerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstreamerUNDEFS_H_ #define __wrappedgstreamerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstriffdefs.h b/src/wrapped/generated/wrappedgstriffdefs.h index 81e814b502e7d76b6f1f353cbd3629ac4f284d8c..205fec9a5d764ff47ccf669d3a815f6e6b5e52d7 100644 --- a/src/wrapped/generated/wrappedgstriffdefs.h +++ b/src/wrapped/generated/wrappedgstriffdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstriffDEFS_H_ #define __wrappedgstriffDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrifftypes.h b/src/wrapped/generated/wrappedgstrifftypes.h index 8799c1e03e9248b5e1a03e138883f329700843dd..f22d7507659b90e36a6ca231e3caedb49264a51b 100644 --- a/src/wrapped/generated/wrappedgstrifftypes.h +++ b/src/wrapped/generated/wrappedgstrifftypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstriffTYPES_H_ #define __wrappedgstriffTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstriffundefs.h b/src/wrapped/generated/wrappedgstriffundefs.h index ddb6cb9e1e8e1be96ad590bb283a9da703f2369f..cafeaf936e99617ca1200342e0270f829496e68b 100644 --- a/src/wrapped/generated/wrappedgstriffundefs.h +++ b/src/wrapped/generated/wrappedgstriffundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstriffUNDEFS_H_ #define __wrappedgstriffUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrtpdefs.h b/src/wrapped/generated/wrappedgstrtpdefs.h index 871d7f6eea5a3d1e129495261d6b2dc3bd0d67e2..6465b2ba23ef3473fc6f16e397f2eb6c73947573 100644 --- a/src/wrapped/generated/wrappedgstrtpdefs.h +++ b/src/wrapped/generated/wrappedgstrtpdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstrtpDEFS_H_ #define __wrappedgstrtpDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrtptypes.h b/src/wrapped/generated/wrappedgstrtptypes.h index 54af171f7caf483e8b489243bb51b349c6f9ae6e..cb182b372869a23662f965f07532aab8f72d2069 100644 --- a/src/wrapped/generated/wrappedgstrtptypes.h +++ b/src/wrapped/generated/wrappedgstrtptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstrtpTYPES_H_ #define __wrappedgstrtpTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstrtpundefs.h b/src/wrapped/generated/wrappedgstrtpundefs.h index 09ae5a3bafc746822cf2f96c47bf1f94782e9f0c..0850aff19a477072be109c5a3744cd12eac89c3f 100644 --- a/src/wrapped/generated/wrappedgstrtpundefs.h +++ b/src/wrapped/generated/wrappedgstrtpundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstrtpUNDEFS_H_ #define __wrappedgstrtpUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrtspdefs.h b/src/wrapped/generated/wrappedgstrtspdefs.h index cf9cd01a90c925161e594036b7455649a5cb9d1d..2537d65b3427d1c57335a254f659a4f9fbf651c2 100644 --- a/src/wrapped/generated/wrappedgstrtspdefs.h +++ b/src/wrapped/generated/wrappedgstrtspdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstrtspDEFS_H_ #define __wrappedgstrtspDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstrtsptypes.h b/src/wrapped/generated/wrappedgstrtsptypes.h index c5ec4e6e480d21ef76e32b46286a12f773d97cbe..5a5a80f2e0691a9b9f0908e2185cd87bf410206a 100644 --- a/src/wrapped/generated/wrappedgstrtsptypes.h +++ b/src/wrapped/generated/wrappedgstrtsptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstrtspTYPES_H_ #define __wrappedgstrtspTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstrtspundefs.h b/src/wrapped/generated/wrappedgstrtspundefs.h index b40cba5adaca1b1d28782f12fb144270ee2df3d3..8be69925729b777b1cb890a9d99cc2ebc4fe11fd 100644 --- a/src/wrapped/generated/wrappedgstrtspundefs.h +++ b/src/wrapped/generated/wrappedgstrtspundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstrtspUNDEFS_H_ #define __wrappedgstrtspUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstsdpdefs.h b/src/wrapped/generated/wrappedgstsdpdefs.h index 1d7b9f42d335703a9a56dc791124d5fbeae2b5e5..6c8422823b3d94fc309ccbfd38595faf3d0e1998 100644 --- a/src/wrapped/generated/wrappedgstsdpdefs.h +++ b/src/wrapped/generated/wrappedgstsdpdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstsdpDEFS_H_ #define __wrappedgstsdpDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstsdptypes.h b/src/wrapped/generated/wrappedgstsdptypes.h index 8d256835ec50b6956f6f00d449445ba553e8324b..6c6d2931bc0c0ebbe036b8b5cf612ea998539c43 100644 --- a/src/wrapped/generated/wrappedgstsdptypes.h +++ b/src/wrapped/generated/wrappedgstsdptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstsdpTYPES_H_ #define __wrappedgstsdpTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstsdpundefs.h b/src/wrapped/generated/wrappedgstsdpundefs.h index 01e5b544d340402a2f295bb4c0a01ad62ffdef31..490e1c6906571b3eb47baaf18b0d96acd9bc38f7 100644 --- a/src/wrapped/generated/wrappedgstsdpundefs.h +++ b/src/wrapped/generated/wrappedgstsdpundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstsdpUNDEFS_H_ #define __wrappedgstsdpUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgsttagdefs.h b/src/wrapped/generated/wrappedgsttagdefs.h index f9e4019e9a3420f8dfa565ab6db3fa3eff8e9b4a..c29650b51b2f8a6c714d9743c8d0e380feeaa770 100644 --- a/src/wrapped/generated/wrappedgsttagdefs.h +++ b/src/wrapped/generated/wrappedgsttagdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgsttagDEFS_H_ #define __wrappedgsttagDEFS_H_ diff --git a/src/wrapped/generated/wrappedgsttagtypes.h b/src/wrapped/generated/wrappedgsttagtypes.h index 32da78565c1ff49d42e7d76323473d01d5bee6d9..91bb8f0db1b4a150eae56c0150f62b495ec6cc8e 100644 --- a/src/wrapped/generated/wrappedgsttagtypes.h +++ b/src/wrapped/generated/wrappedgsttagtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgsttagTYPES_H_ #define __wrappedgsttagTYPES_H_ diff --git a/src/wrapped/generated/wrappedgsttagundefs.h b/src/wrapped/generated/wrappedgsttagundefs.h index 7b71d720bcf4d49c52c66f04037f57b8cc72807e..8e7ede45a2b6ec801b18479d11407bdb0c2061bd 100644 --- a/src/wrapped/generated/wrappedgsttagundefs.h +++ b/src/wrapped/generated/wrappedgsttagundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgsttagUNDEFS_H_ #define __wrappedgsttagUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstvideodefs.h b/src/wrapped/generated/wrappedgstvideodefs.h index 58d61cb05013815a18e985fccab3b48e447f15a8..90b34ccf51b864c64dcbd46b0e5b3c4430485c39 100644 --- a/src/wrapped/generated/wrappedgstvideodefs.h +++ b/src/wrapped/generated/wrappedgstvideodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstvideoDEFS_H_ #define __wrappedgstvideoDEFS_H_ diff --git a/src/wrapped/generated/wrappedgstvideotypes.h b/src/wrapped/generated/wrappedgstvideotypes.h index 33bc624152ea99550e8986292f278d90fc0ed8ae..19e99fbdbd3334d29f8f85dbe516174143a800c5 100644 --- a/src/wrapped/generated/wrappedgstvideotypes.h +++ b/src/wrapped/generated/wrappedgstvideotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstvideoTYPES_H_ #define __wrappedgstvideoTYPES_H_ diff --git a/src/wrapped/generated/wrappedgstvideoundefs.h b/src/wrapped/generated/wrappedgstvideoundefs.h index cfe937333da56191676ada65102c4cd63581c06e..b0a6fd2845f829a835585cfb0c0f4ba868a1de79 100644 --- a/src/wrapped/generated/wrappedgstvideoundefs.h +++ b/src/wrapped/generated/wrappedgstvideoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgstvideoUNDEFS_H_ #define __wrappedgstvideoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgthread2defs.h b/src/wrapped/generated/wrappedgthread2defs.h index 745d0049c5071e74001422804a3fc0a63eb6d4df..9a0ae87003f16140f755f602eb91c05baa4407b4 100644 --- a/src/wrapped/generated/wrappedgthread2defs.h +++ b/src/wrapped/generated/wrappedgthread2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgthread2DEFS_H_ #define __wrappedgthread2DEFS_H_ diff --git a/src/wrapped/generated/wrappedgthread2types.h b/src/wrapped/generated/wrappedgthread2types.h index 104fab88fbcd1f970572da238911242589d24aa7..e7abc5619d4ebbac4d33ffcbd7a713660371e38d 100644 --- a/src/wrapped/generated/wrappedgthread2types.h +++ b/src/wrapped/generated/wrappedgthread2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgthread2TYPES_H_ #define __wrappedgthread2TYPES_H_ diff --git a/src/wrapped/generated/wrappedgthread2undefs.h b/src/wrapped/generated/wrappedgthread2undefs.h index 486f8801b44d06780385c84bb303f06e1570bbce..77d45cbaee8cff8285217f6a34cf9adc52b61384 100644 --- a/src/wrapped/generated/wrappedgthread2undefs.h +++ b/src/wrapped/generated/wrappedgthread2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgthread2UNDEFS_H_ #define __wrappedgthread2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgtk3defs.h b/src/wrapped/generated/wrappedgtk3defs.h index de33868c8050482983276ee2ee38ab599b748ecd..d03f49a97cf179a1e8627682bcd7d5c5032b8640 100644 --- a/src/wrapped/generated/wrappedgtk3defs.h +++ b/src/wrapped/generated/wrappedgtk3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgtk3DEFS_H_ #define __wrappedgtk3DEFS_H_ diff --git a/src/wrapped/generated/wrappedgtk3types.h b/src/wrapped/generated/wrappedgtk3types.h index 93850e0f0678dd4abc1de0741a740194bf05d9e1..b7961e8f6f29d2482d9e733ffdd9612f2afdd01c 100644 --- a/src/wrapped/generated/wrappedgtk3types.h +++ b/src/wrapped/generated/wrappedgtk3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgtk3TYPES_H_ #define __wrappedgtk3TYPES_H_ @@ -11,17 +11,16 @@ #define ADDED_FUNCTIONS() #endif -typedef void* (*pFi_t)(int32_t); typedef void (*vFpp_t)(void*, void*); +typedef void (*vFpV_t)(void*, ...); typedef void (*vFpA_t)(void*, va_list); -typedef int32_t (*iFLp_t)(uintptr_t, void*); typedef int32_t (*iFpp_t)(void*, void*); -typedef void* (*pFuV_t)(uint32_t, ...); -typedef void (*vFpiA_t)(void*, int32_t, va_list); +typedef void* (*pFiV_t)(int32_t, ...); +typedef void (*vFpuV_t)(void*, uint32_t, ...); +typedef void (*vFpuA_t)(void*, uint32_t, va_list); typedef void (*vFppp_t)(void*, void*, void*); typedef void (*vFppV_t)(void*, void*, ...); typedef void (*vFppA_t)(void*, void*, va_list); -typedef uint32_t (*uFupp_t)(uint32_t, void*, void*); typedef void (*vFppiV_t)(void*, void*, int32_t, ...); typedef void (*vFpppi_t)(void*, void*, void*, int32_t); typedef void (*vFpppp_t)(void*, void*, void*, void*); @@ -32,22 +31,16 @@ typedef void (*vFppppp_t)(void*, void*, void*, void*, void*); typedef int32_t (*iFppuppp_t)(void*, void*, uint32_t, void*, void*, void*); typedef int32_t (*iFpppppp_t)(void*, void*, void*, void*, void*, void*); typedef void (*vFpppppuu_t)(void*, void*, void*, void*, void*, uint32_t, uint32_t); -typedef void* (*pFppppppi_t)(void*, void*, void*, void*, void*, void*, int32_t); -typedef void* (*pFppppppp_t)(void*, void*, void*, void*, void*, void*, void*); -typedef uintptr_t (*LFppppppii_t)(void*, void*, void*, void*, void*, void*, int32_t, int32_t); -typedef void* (*pFpppppppi_t)(void*, void*, void*, void*, void*, void*, void*, int32_t); -typedef void* (*pFpippppppp_t)(void*, int32_t, void*, void*, void*, void*, void*, void*, void*); -typedef void* (*pFpipppppppi_t)(void*, int32_t, void*, void*, void*, void*, void*, void*, void*, int32_t); #define SUPER() ADDED_FUNCTIONS() \ - GO(gtk_type_class, pFi_t) \ GO(gtk_builder_connect_signals, vFpp_t) \ GO(gtk_init, vFpp_t) \ + GO(gtk_style_context_get_style, vFpV_t) \ GO(gtk_style_context_get_style_valist, vFpA_t) \ - GO(gtk_type_unique, iFLp_t) \ GO(gtk_init_check, iFpp_t) \ - GO(gtk_tree_store_new, pFuV_t) \ - GO(gtk_style_context_get_valist, vFpiA_t) \ + GO(gtk_tree_store_new, pFiV_t) \ + GO(gtk_style_context_get, vFpuV_t) \ + GO(gtk_style_context_get_valist, vFpuA_t) \ GO(gtk_builder_connect_signals_full, vFppp_t) \ GO(gtk_clipboard_request_text, vFppp_t) \ GO(gtk_container_forall, vFppp_t) \ @@ -56,14 +49,12 @@ typedef void* (*pFpipppppppi_t)(void*, int32_t, void*, void*, void*, void*, void GO(gtk_dialog_add_buttons, vFppV_t) \ GO(gtk_message_dialog_format_secondary_markup, vFppV_t) \ GO(gtk_message_dialog_format_secondary_text, vFppV_t) \ - GO(gtk_style_context_get, vFppV_t) \ GO(gtk_tree_store_set, vFppV_t) \ GO(gtk_widget_style_get, vFppV_t) \ GO(gtk_tree_store_set_valist, vFppA_t) \ - GO(gtk_timeout_add, uFupp_t) \ GO(gtk_list_store_insert_with_values, vFppiV_t) \ GO(gtk_enumerate_printers, vFpppi_t) \ - GO(gtk_object_set_data_full, vFpppp_t) \ + GO(gtk_list_box_set_header_func, vFpppp_t) \ GO(gtk_print_job_send, vFpppp_t) \ GO(gtk_stock_set_translate_func, vFpppp_t) \ GO(gtk_tree_sortable_set_default_sort_func, vFpppp_t) \ @@ -76,14 +67,6 @@ typedef void* (*pFpipppppppi_t)(void*, int32_t, void*, void*, void*, void*, void GO(gtk_clipboard_set_with_data, iFppuppp_t) \ GO(gtk_clipboard_set_with_owner, iFppuppp_t) \ GO(gtk_init_with_args, iFpppppp_t) \ - GO(gtk_menu_popup, vFpppppuu_t) \ - GO(gtk_toolbar_insert_stock, pFppppppi_t) \ - GO(gtk_toolbar_append_item, pFppppppp_t) \ - GO(gtk_toolbar_prepend_item, pFppppppp_t) \ - GO(gtk_signal_connect_full, LFppppppii_t) \ - GO(gtk_toolbar_insert_item, pFpppppppi_t) \ - GO(gtk_toolbar_append_element, pFpippppppp_t) \ - GO(gtk_toolbar_prepend_element, pFpippppppp_t) \ - GO(gtk_toolbar_insert_element, pFpipppppppi_t) + GO(gtk_menu_popup, vFpppppuu_t) #endif // __wrappedgtk3TYPES_H_ diff --git a/src/wrapped/generated/wrappedgtk3undefs.h b/src/wrapped/generated/wrappedgtk3undefs.h index 763ac0e141cd6358b0c6eaec1214a9a58602c33e..ca6e015571e863adc15527fa41135343b37e0ced 100644 --- a/src/wrapped/generated/wrappedgtk3undefs.h +++ b/src/wrapped/generated/wrappedgtk3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgtk3UNDEFS_H_ #define __wrappedgtk3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedgtkx112defs.h b/src/wrapped/generated/wrappedgtkx112defs.h index b23e2b332bb1fc83fb79e548d75bee8c33db5409..2bd669265dcf140314a779d636a741cf6dc26d2e 100644 --- a/src/wrapped/generated/wrappedgtkx112defs.h +++ b/src/wrapped/generated/wrappedgtkx112defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgtkx112DEFS_H_ #define __wrappedgtkx112DEFS_H_ diff --git a/src/wrapped/generated/wrappedgtkx112types.h b/src/wrapped/generated/wrappedgtkx112types.h index 34566285ce824fc73ff311f8b13e3d5ba03205f8..1fea124f928e4e705961ddf90ebaf4d661f00cf6 100644 --- a/src/wrapped/generated/wrappedgtkx112types.h +++ b/src/wrapped/generated/wrappedgtkx112types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgtkx112TYPES_H_ #define __wrappedgtkx112TYPES_H_ @@ -15,6 +15,7 @@ typedef float (*fFp_t)(void*); typedef void* (*pFi_t)(int32_t); typedef void (*vFpp_t)(void*, void*); typedef int32_t (*iFpp_t)(void*, void*); +typedef uint32_t (*uFpp_t)(void*, void*); typedef void* (*pFiV_t)(int32_t, ...); typedef void* (*pFpi_t)(void*, int32_t); typedef void (*vFppp_t)(void*, void*, void*); @@ -51,6 +52,7 @@ typedef void* (*pFpipppppppi_t)(void*, int32_t, void*, void*, void*, void*, void GO(gtk_init, vFpp_t) \ GO(gtk_init_check, iFpp_t) \ GO(gtk_type_unique, iFpp_t) \ + GO(gtk_key_snooper_install, uFpp_t) \ GO(gtk_list_store_new, pFiV_t) \ GO(gtk_tree_store_new, pFiV_t) \ GO(gtk_type_check_object_cast, pFpi_t) \ diff --git a/src/wrapped/generated/wrappedgtkx112undefs.h b/src/wrapped/generated/wrappedgtkx112undefs.h index 4f05b24da997703bba4d83cce382ef8b9b039937..bcf8520fad89d3a05e2aaafd7463d13042c30b36 100644 --- a/src/wrapped/generated/wrappedgtkx112undefs.h +++ b/src/wrapped/generated/wrappedgtkx112undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedgtkx112UNDEFS_H_ #define __wrappedgtkx112UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n64defs.h b/src/wrapped/generated/wrappedicui18n64defs.h index 18689c5ea690ee4a999fdd8ca2f9fc744f9e3054..9b1cf4a74a2648439674d21534b4f09e4039c81e 100644 --- a/src/wrapped/generated/wrappedicui18n64defs.h +++ b/src/wrapped/generated/wrappedicui18n64defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n64DEFS_H_ #define __wrappedicui18n64DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n64types.h b/src/wrapped/generated/wrappedicui18n64types.h index 849a17651cfac9056d752eba7fa92b84745b331d..aa9667f95047cc80303797ad9dd87bbdefc0537d 100644 --- a/src/wrapped/generated/wrappedicui18n64types.h +++ b/src/wrapped/generated/wrappedicui18n64types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n64TYPES_H_ #define __wrappedicui18n64TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n64undefs.h b/src/wrapped/generated/wrappedicui18n64undefs.h index 2613c2de5b343149a9505e6f92f5b3f3870151a4..a4494ef0adcee47b14b68acd95448fb172fabd3b 100644 --- a/src/wrapped/generated/wrappedicui18n64undefs.h +++ b/src/wrapped/generated/wrappedicui18n64undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n64UNDEFS_H_ #define __wrappedicui18n64UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n66defs.h b/src/wrapped/generated/wrappedicui18n66defs.h index 62c4ec87f799b7600fd5698b55a8f014cba31ffd..75b24917e8748ee9135631b697182b8f663eb503 100644 --- a/src/wrapped/generated/wrappedicui18n66defs.h +++ b/src/wrapped/generated/wrappedicui18n66defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n66DEFS_H_ #define __wrappedicui18n66DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n66types.h b/src/wrapped/generated/wrappedicui18n66types.h index c3aaa0c19317c4dd65a5190a0ffb6e59ccb4aed9..45a33d918bc4d0b8dab4c1684b97ac029bb46751 100644 --- a/src/wrapped/generated/wrappedicui18n66types.h +++ b/src/wrapped/generated/wrappedicui18n66types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n66TYPES_H_ #define __wrappedicui18n66TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n66undefs.h b/src/wrapped/generated/wrappedicui18n66undefs.h index 8c75e9317ee44c350dd3cfad14497f0ce8f174bb..9c12fef3c3c1411b49bfb166fa5800d1a63a80d8 100644 --- a/src/wrapped/generated/wrappedicui18n66undefs.h +++ b/src/wrapped/generated/wrappedicui18n66undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n66UNDEFS_H_ #define __wrappedicui18n66UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n67defs.h b/src/wrapped/generated/wrappedicui18n67defs.h index 91fd2a6dfd89ce9f3ec66fc8e23b6bc4c8576e02..ffb1aed6e5577e338454199ca35f7ea00aa32270 100644 --- a/src/wrapped/generated/wrappedicui18n67defs.h +++ b/src/wrapped/generated/wrappedicui18n67defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n67DEFS_H_ #define __wrappedicui18n67DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n67types.h b/src/wrapped/generated/wrappedicui18n67types.h index f387e62095416a92d282e91da0820abd5487f199..ac1778bb29e17d0e4ce7393c9275fd5b850ae192 100644 --- a/src/wrapped/generated/wrappedicui18n67types.h +++ b/src/wrapped/generated/wrappedicui18n67types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n67TYPES_H_ #define __wrappedicui18n67TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n67undefs.h b/src/wrapped/generated/wrappedicui18n67undefs.h index 04164f9227d9365e2eb81719aec2cdbf5cbd5d1b..d9ad3f87fc7d61c8771cfd00c187a0fa204edb8a 100644 --- a/src/wrapped/generated/wrappedicui18n67undefs.h +++ b/src/wrapped/generated/wrappedicui18n67undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n67UNDEFS_H_ #define __wrappedicui18n67UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n72defs.h b/src/wrapped/generated/wrappedicui18n72defs.h index f065b4cb6539972234fb60cdd56b2da79929cb0f..ac3aede6d51650b7b9da730b56dd3953957e3bc1 100644 --- a/src/wrapped/generated/wrappedicui18n72defs.h +++ b/src/wrapped/generated/wrappedicui18n72defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n72DEFS_H_ #define __wrappedicui18n72DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n72types.h b/src/wrapped/generated/wrappedicui18n72types.h index ba6a2e7a8f727330372b46b9c00630b03caff164..b44554f25428a405dc02b89d7bb0989b5dc604e0 100644 --- a/src/wrapped/generated/wrappedicui18n72types.h +++ b/src/wrapped/generated/wrappedicui18n72types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n72TYPES_H_ #define __wrappedicui18n72TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n72undefs.h b/src/wrapped/generated/wrappedicui18n72undefs.h index fa3d7f9e6ca15ed51a8923d3774589f8cd64563c..afa1d2580bdf65e600a90c20869a8cbd73cab307 100644 --- a/src/wrapped/generated/wrappedicui18n72undefs.h +++ b/src/wrapped/generated/wrappedicui18n72undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n72UNDEFS_H_ #define __wrappedicui18n72UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n73defs.h b/src/wrapped/generated/wrappedicui18n73defs.h index 7dd420e85f6fe5eb47a605599f0b35d8fdfd9fe4..454ea27e1456e42d78bf1318e871d5c0323c5e1c 100644 --- a/src/wrapped/generated/wrappedicui18n73defs.h +++ b/src/wrapped/generated/wrappedicui18n73defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n73DEFS_H_ #define __wrappedicui18n73DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n73types.h b/src/wrapped/generated/wrappedicui18n73types.h index a532595e46a352da04521daf87b0de5b81b43805..de0a8ced1f0dc4b1cd5029894f90743895dbda17 100644 --- a/src/wrapped/generated/wrappedicui18n73types.h +++ b/src/wrapped/generated/wrappedicui18n73types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n73TYPES_H_ #define __wrappedicui18n73TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n73undefs.h b/src/wrapped/generated/wrappedicui18n73undefs.h index af936d3794e301455bf92993c6285bc30a188635..9be74741db619ed88e26600f82ddd7dc61375e78 100644 --- a/src/wrapped/generated/wrappedicui18n73undefs.h +++ b/src/wrapped/generated/wrappedicui18n73undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n73UNDEFS_H_ #define __wrappedicui18n73UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n74defs.h b/src/wrapped/generated/wrappedicui18n74defs.h index 9d35caa02d15577e03b385186712abc748200ce0..2e8c0f50951547d0d53c183229fc1cbb8f01db60 100644 --- a/src/wrapped/generated/wrappedicui18n74defs.h +++ b/src/wrapped/generated/wrappedicui18n74defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n74DEFS_H_ #define __wrappedicui18n74DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n74types.h b/src/wrapped/generated/wrappedicui18n74types.h index c7ab0d493053cf73d8f39419082fa5989fa30142..f3164cf39631cb24ff7a205e59b16aa65f8b4e19 100644 --- a/src/wrapped/generated/wrappedicui18n74types.h +++ b/src/wrapped/generated/wrappedicui18n74types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n74TYPES_H_ #define __wrappedicui18n74TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n74undefs.h b/src/wrapped/generated/wrappedicui18n74undefs.h index 6165885f6f96a22e11b4ff3788896c985932964e..9a57528c8f286e9a629284b1cfb1a54f47487a64 100644 --- a/src/wrapped/generated/wrappedicui18n74undefs.h +++ b/src/wrapped/generated/wrappedicui18n74undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicui18n74UNDEFS_H_ #define __wrappedicui18n74UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n75defs.h b/src/wrapped/generated/wrappedicui18n75defs.h new file mode 100644 index 0000000000000000000000000000000000000000..3d4d206d29ede3ccad864c62b80939f75bf1119b --- /dev/null +++ b/src/wrapped/generated/wrappedicui18n75defs.h @@ -0,0 +1,8 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedicui18n75DEFS_H_ +#define __wrappedicui18n75DEFS_H_ + + +#endif // __wrappedicui18n75DEFS_H_ diff --git a/src/wrapped/generated/wrappedicui18n75types.h b/src/wrapped/generated/wrappedicui18n75types.h new file mode 100644 index 0000000000000000000000000000000000000000..433404f3d764ac56aa8bb0c80d946b90d5d7a11a --- /dev/null +++ b/src/wrapped/generated/wrappedicui18n75types.h @@ -0,0 +1,17 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedicui18n75TYPES_H_ +#define __wrappedicui18n75TYPES_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedicui18n75TYPES_H_ diff --git a/src/wrapped/generated/wrappedicui18n75undefs.h b/src/wrapped/generated/wrappedicui18n75undefs.h new file mode 100644 index 0000000000000000000000000000000000000000..5830e855e96abf31959c648aa9768ce4f2721c24 --- /dev/null +++ b/src/wrapped/generated/wrappedicui18n75undefs.h @@ -0,0 +1,8 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedicui18n75UNDEFS_H_ +#define __wrappedicui18n75UNDEFS_H_ + + +#endif // __wrappedicui18n75UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc64defs.h b/src/wrapped/generated/wrappedicuuc64defs.h index b0e5e183faa59aef4d5a963ccb81999430841b51..d3235f6a659da1009687bdec9e3b2956c668f871 100644 --- a/src/wrapped/generated/wrappedicuuc64defs.h +++ b/src/wrapped/generated/wrappedicuuc64defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc64DEFS_H_ #define __wrappedicuuc64DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc64types.h b/src/wrapped/generated/wrappedicuuc64types.h index afad3be7f205fa389515dfec12d970ed02185324..01a3522c5f6df249bb0f995a839292185b6932d9 100644 --- a/src/wrapped/generated/wrappedicuuc64types.h +++ b/src/wrapped/generated/wrappedicuuc64types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc64TYPES_H_ #define __wrappedicuuc64TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc64undefs.h b/src/wrapped/generated/wrappedicuuc64undefs.h index 8405e07d6fb29679dfa05a1aaae32ca05a365955..8d7947070992ed9b34a80ab871d77a8790356513 100644 --- a/src/wrapped/generated/wrappedicuuc64undefs.h +++ b/src/wrapped/generated/wrappedicuuc64undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc64UNDEFS_H_ #define __wrappedicuuc64UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc66defs.h b/src/wrapped/generated/wrappedicuuc66defs.h index 5236e32331365f5643f3a90f8526e1f3d3790017..ffc5cfa69f169e4613db1e0f9ce90a7a32fa06e6 100644 --- a/src/wrapped/generated/wrappedicuuc66defs.h +++ b/src/wrapped/generated/wrappedicuuc66defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc66DEFS_H_ #define __wrappedicuuc66DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc66types.h b/src/wrapped/generated/wrappedicuuc66types.h index 050fe4193c870c383d543798a4bd48de3943382b..59bc1d239f3b51f40f965c9b0cec1844327d7ec5 100644 --- a/src/wrapped/generated/wrappedicuuc66types.h +++ b/src/wrapped/generated/wrappedicuuc66types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc66TYPES_H_ #define __wrappedicuuc66TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc66undefs.h b/src/wrapped/generated/wrappedicuuc66undefs.h index 97cf2dbe147f8d0c638f994c80d92528e387b42d..3b2773b1665e63ef38e8d9d58c661a96ac7f21f1 100644 --- a/src/wrapped/generated/wrappedicuuc66undefs.h +++ b/src/wrapped/generated/wrappedicuuc66undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc66UNDEFS_H_ #define __wrappedicuuc66UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc67defs.h b/src/wrapped/generated/wrappedicuuc67defs.h index 96e34f1cb0c22cfce1f6247c48dbcada8762b708..9eaa6814c2850e9044160346bbafb6d01854a450 100644 --- a/src/wrapped/generated/wrappedicuuc67defs.h +++ b/src/wrapped/generated/wrappedicuuc67defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc67DEFS_H_ #define __wrappedicuuc67DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc67types.h b/src/wrapped/generated/wrappedicuuc67types.h index 508d920f6d3bb3feb81798382a6bba58fde21ff4..c80f64997c645d82464e72dfbb5fba502ecc8c7b 100644 --- a/src/wrapped/generated/wrappedicuuc67types.h +++ b/src/wrapped/generated/wrappedicuuc67types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc67TYPES_H_ #define __wrappedicuuc67TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc67undefs.h b/src/wrapped/generated/wrappedicuuc67undefs.h index e6043cd63c183b215826371c7eb3c1d81e8a2dfb..60eb67e07136069fba4410cded9d790457e0ce01 100644 --- a/src/wrapped/generated/wrappedicuuc67undefs.h +++ b/src/wrapped/generated/wrappedicuuc67undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc67UNDEFS_H_ #define __wrappedicuuc67UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc72defs.h b/src/wrapped/generated/wrappedicuuc72defs.h index 8a512ca512f3c204ea28d0863bf656c05c113199..f5b556d4fae20abaf0ebaac3eb8a66b1e7d45297 100644 --- a/src/wrapped/generated/wrappedicuuc72defs.h +++ b/src/wrapped/generated/wrappedicuuc72defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc72DEFS_H_ #define __wrappedicuuc72DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc72types.h b/src/wrapped/generated/wrappedicuuc72types.h index ff28ecfdfb5452cef9844197060ec3e6e37f1e04..4c9faa3a0abfd841aa10d085326d33f3ea186976 100644 --- a/src/wrapped/generated/wrappedicuuc72types.h +++ b/src/wrapped/generated/wrappedicuuc72types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc72TYPES_H_ #define __wrappedicuuc72TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc72undefs.h b/src/wrapped/generated/wrappedicuuc72undefs.h index 82b2e329bd875e6ef2f5ad722ed0fd643c69d6ce..7e591b41a195289f08c3158c3e0150f24a9da81a 100644 --- a/src/wrapped/generated/wrappedicuuc72undefs.h +++ b/src/wrapped/generated/wrappedicuuc72undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc72UNDEFS_H_ #define __wrappedicuuc72UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc73defs.h b/src/wrapped/generated/wrappedicuuc73defs.h index 93b84b08e4425da9ae6f1ee19ed197f8643e997d..05f24ade8a62235823bc99a1d123c22312b844f0 100644 --- a/src/wrapped/generated/wrappedicuuc73defs.h +++ b/src/wrapped/generated/wrappedicuuc73defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc73DEFS_H_ #define __wrappedicuuc73DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc73types.h b/src/wrapped/generated/wrappedicuuc73types.h index e6859dd4b9f2471978877c7188f80a42789174af..fd4b4f28a766538d12601aaf5654a78e7893ce26 100644 --- a/src/wrapped/generated/wrappedicuuc73types.h +++ b/src/wrapped/generated/wrappedicuuc73types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc73TYPES_H_ #define __wrappedicuuc73TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc73undefs.h b/src/wrapped/generated/wrappedicuuc73undefs.h index 8fa45188957d596be6d5f617e246a1a1963768e6..4cf26869afaa2b5183bc6d96aa7bcc9611472c7d 100644 --- a/src/wrapped/generated/wrappedicuuc73undefs.h +++ b/src/wrapped/generated/wrappedicuuc73undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc73UNDEFS_H_ #define __wrappedicuuc73UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc74defs.h b/src/wrapped/generated/wrappedicuuc74defs.h index b8dc6163592897c85f97cae80cbf1416ca0eadca..0dbd9f3b419cf893de1ea217280477c79164f85b 100644 --- a/src/wrapped/generated/wrappedicuuc74defs.h +++ b/src/wrapped/generated/wrappedicuuc74defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc74DEFS_H_ #define __wrappedicuuc74DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc74types.h b/src/wrapped/generated/wrappedicuuc74types.h index 4998e102600bd39127553a46e54792e6e88518a4..590a58f7a98fd344ac58cde74dcc66b9f84ca732 100644 --- a/src/wrapped/generated/wrappedicuuc74types.h +++ b/src/wrapped/generated/wrappedicuuc74types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc74TYPES_H_ #define __wrappedicuuc74TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc74undefs.h b/src/wrapped/generated/wrappedicuuc74undefs.h index 43d685d0ec9a7f573f119a4e736d1fcf0ca46fbc..e80f11df4b951d9054aebff760861112208a67e4 100644 --- a/src/wrapped/generated/wrappedicuuc74undefs.h +++ b/src/wrapped/generated/wrappedicuuc74undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedicuuc74UNDEFS_H_ #define __wrappedicuuc74UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc75defs.h b/src/wrapped/generated/wrappedicuuc75defs.h new file mode 100644 index 0000000000000000000000000000000000000000..31f87d07a78386150c4e94d3d4385b30bd7fbed6 --- /dev/null +++ b/src/wrapped/generated/wrappedicuuc75defs.h @@ -0,0 +1,8 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedicuuc75DEFS_H_ +#define __wrappedicuuc75DEFS_H_ + + +#endif // __wrappedicuuc75DEFS_H_ diff --git a/src/wrapped/generated/wrappedicuuc75types.h b/src/wrapped/generated/wrappedicuuc75types.h new file mode 100644 index 0000000000000000000000000000000000000000..12ff538c451b95cdeb17ff56b4c704ebaf9cb0bd --- /dev/null +++ b/src/wrapped/generated/wrappedicuuc75types.h @@ -0,0 +1,17 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedicuuc75TYPES_H_ +#define __wrappedicuuc75TYPES_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedicuuc75TYPES_H_ diff --git a/src/wrapped/generated/wrappedicuuc75undefs.h b/src/wrapped/generated/wrappedicuuc75undefs.h new file mode 100644 index 0000000000000000000000000000000000000000..65935f2ff124cde4f3747a8a43a649ab65963125 --- /dev/null +++ b/src/wrapped/generated/wrappedicuuc75undefs.h @@ -0,0 +1,8 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedicuuc75UNDEFS_H_ +#define __wrappedicuuc75UNDEFS_H_ + + +#endif // __wrappedicuuc75UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedidn2defs.h b/src/wrapped/generated/wrappedidn2defs.h index 4177a4af2be5461808d244bee983c5ded834464c..69ac6215a18ccac878fda9652d9efdccabef5371 100644 --- a/src/wrapped/generated/wrappedidn2defs.h +++ b/src/wrapped/generated/wrappedidn2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedidn2DEFS_H_ #define __wrappedidn2DEFS_H_ diff --git a/src/wrapped/generated/wrappedidn2types.h b/src/wrapped/generated/wrappedidn2types.h index e67e4dee2863163760fa6d2a68ed50f24cf2d87a..d37fc6018b9eaf40be544164128d62eb45814d5a 100644 --- a/src/wrapped/generated/wrappedidn2types.h +++ b/src/wrapped/generated/wrappedidn2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedidn2TYPES_H_ #define __wrappedidn2TYPES_H_ diff --git a/src/wrapped/generated/wrappedidn2undefs.h b/src/wrapped/generated/wrappedidn2undefs.h index 77a2eb8c68477278943a815ca06791760ea6b840..4d7b5c486292c98f78234212b3057e403d5ea357 100644 --- a/src/wrapped/generated/wrappedidn2undefs.h +++ b/src/wrapped/generated/wrappedidn2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedidn2UNDEFS_H_ #define __wrappedidn2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedkrb5defs.h b/src/wrapped/generated/wrappedkrb5defs.h index 1480b7a583758be26088954fb5fddcc5585a9e7d..4d9ebac0a27a5a017aa22660684d32c5840eadbd 100644 --- a/src/wrapped/generated/wrappedkrb5defs.h +++ b/src/wrapped/generated/wrappedkrb5defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedkrb5DEFS_H_ #define __wrappedkrb5DEFS_H_ diff --git a/src/wrapped/generated/wrappedkrb5types.h b/src/wrapped/generated/wrappedkrb5types.h index 5e8fb3765e8a873c0f44f89cf231ecb465a61330..2a2d233386f883386991419e10f4c3cf17377f02 100644 --- a/src/wrapped/generated/wrappedkrb5types.h +++ b/src/wrapped/generated/wrappedkrb5types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedkrb5TYPES_H_ #define __wrappedkrb5TYPES_H_ diff --git a/src/wrapped/generated/wrappedkrb5undefs.h b/src/wrapped/generated/wrappedkrb5undefs.h index 555d016b1e765272fa8023e5b89b7b9045337d10..ac742d8c26c1777a4e46c6272391163960e0021f 100644 --- a/src/wrapped/generated/wrappedkrb5undefs.h +++ b/src/wrapped/generated/wrappedkrb5undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedkrb5UNDEFS_H_ #define __wrappedkrb5UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlberdefs.h b/src/wrapped/generated/wrappedlberdefs.h index c82f05789956d04ce35eae5bb35a45bfce14c2e6..b73ca62fe09dbb8ea848d008518b791900738e16 100644 --- a/src/wrapped/generated/wrappedlberdefs.h +++ b/src/wrapped/generated/wrappedlberdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlberDEFS_H_ #define __wrappedlberDEFS_H_ diff --git a/src/wrapped/generated/wrappedlbertypes.h b/src/wrapped/generated/wrappedlbertypes.h index 4e0ffd665a8c4497a8b2b735e8d16e25f9c86b66..9416fb0715a94cf0dbd31a333268a43b8f3734d5 100644 --- a/src/wrapped/generated/wrappedlbertypes.h +++ b/src/wrapped/generated/wrappedlbertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlberTYPES_H_ #define __wrappedlberTYPES_H_ diff --git a/src/wrapped/generated/wrappedlberundefs.h b/src/wrapped/generated/wrappedlberundefs.h index 02a61ea175de8df956c85f9df5ed309c293512fe..53e83026705dab4ca83e95be28f0b45b969071b1 100644 --- a/src/wrapped/generated/wrappedlberundefs.h +++ b/src/wrapped/generated/wrappedlberundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlberUNDEFS_H_ #define __wrappedlberUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlcms2defs.h b/src/wrapped/generated/wrappedlcms2defs.h index 01abe076849ace977e42522fde9ed42078ee815f..0b5b9ff7889505cb6d5af821ac762ef2cd4e6d40 100644 --- a/src/wrapped/generated/wrappedlcms2defs.h +++ b/src/wrapped/generated/wrappedlcms2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlcms2DEFS_H_ #define __wrappedlcms2DEFS_H_ diff --git a/src/wrapped/generated/wrappedlcms2types.h b/src/wrapped/generated/wrappedlcms2types.h index 9fdd10bff31b72d832342dcb5ae48410f624bd28..5b8058cbecab83626328292b8efdd79764f3d848 100644 --- a/src/wrapped/generated/wrappedlcms2types.h +++ b/src/wrapped/generated/wrappedlcms2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlcms2TYPES_H_ #define __wrappedlcms2TYPES_H_ diff --git a/src/wrapped/generated/wrappedlcms2undefs.h b/src/wrapped/generated/wrappedlcms2undefs.h index 890088f03de6236fe23af3e90e99e30a4500097b..e6a248bce9b7d6259e2df947ca5caf81aa573bce 100644 --- a/src/wrapped/generated/wrappedlcms2undefs.h +++ b/src/wrapped/generated/wrappedlcms2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlcms2UNDEFS_H_ #define __wrappedlcms2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedldaprdefs.h b/src/wrapped/generated/wrappedldaprdefs.h index 0b42b5cd7e1b9ac6d08ab8118d452c71af4908a3..3225a14982b8bda5cc182947240d029f2ba974a5 100644 --- a/src/wrapped/generated/wrappedldaprdefs.h +++ b/src/wrapped/generated/wrappedldaprdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedldaprDEFS_H_ #define __wrappedldaprDEFS_H_ diff --git a/src/wrapped/generated/wrappedldaprtypes.h b/src/wrapped/generated/wrappedldaprtypes.h index 8cb0a7c7f1a995337efa356ea7ef15bdd39b9d40..bbdf39ae420af116ec1593c49ed7cc0eedf9ee9f 100644 --- a/src/wrapped/generated/wrappedldaprtypes.h +++ b/src/wrapped/generated/wrappedldaprtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedldaprTYPES_H_ #define __wrappedldaprTYPES_H_ diff --git a/src/wrapped/generated/wrappedldaprundefs.h b/src/wrapped/generated/wrappedldaprundefs.h index 1c09ce3896e92e611f2922fa6a0b86d2cf9e0323..3b534e7b9eb0c9a9e13999327da6a4f42457aff5 100644 --- a/src/wrapped/generated/wrappedldaprundefs.h +++ b/src/wrapped/generated/wrappedldaprundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedldaprUNDEFS_H_ #define __wrappedldaprUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedldlinuxdefs.h b/src/wrapped/generated/wrappedldlinuxdefs.h index d7bf282ce50756e098df3aab6336595c5db984af..4e269c18e56d5d1d6a369cc80521f7454190964c 100644 --- a/src/wrapped/generated/wrappedldlinuxdefs.h +++ b/src/wrapped/generated/wrappedldlinuxdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedldlinuxDEFS_H_ #define __wrappedldlinuxDEFS_H_ diff --git a/src/wrapped/generated/wrappedldlinuxtypes.h b/src/wrapped/generated/wrappedldlinuxtypes.h index cd8e90954f20b1c0a9e9d082084c838581012c30..050bf2b0d40dd0b155855d2340b793babc474e00 100644 --- a/src/wrapped/generated/wrappedldlinuxtypes.h +++ b/src/wrapped/generated/wrappedldlinuxtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedldlinuxTYPES_H_ #define __wrappedldlinuxTYPES_H_ diff --git a/src/wrapped/generated/wrappedldlinuxundefs.h b/src/wrapped/generated/wrappedldlinuxundefs.h index 2d70d2acd4329a04432110f7c7a4e26548249061..5b32bf916633620ea10f79d3f98856d1d0473312 100644 --- a/src/wrapped/generated/wrappedldlinuxundefs.h +++ b/src/wrapped/generated/wrappedldlinuxundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedldlinuxUNDEFS_H_ #define __wrappedldlinuxUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibasounddefs.h b/src/wrapped/generated/wrappedlibasounddefs.h index 0c3d0af1c4480ec91abb719570bde783fd44fae6..215e27722de6ce7131699daf5655883aecef6b9c 100644 --- a/src/wrapped/generated/wrappedlibasounddefs.h +++ b/src/wrapped/generated/wrappedlibasounddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibasoundDEFS_H_ #define __wrappedlibasoundDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibasoundtypes.h b/src/wrapped/generated/wrappedlibasoundtypes.h index cbea784611be134c6aa03dbffba914fe22b51ec9..1140e702c48660cd53a146323437a9a1dc1edac0 100644 --- a/src/wrapped/generated/wrappedlibasoundtypes.h +++ b/src/wrapped/generated/wrappedlibasoundtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibasoundTYPES_H_ #define __wrappedlibasoundTYPES_H_ @@ -12,19 +12,31 @@ #endif typedef int32_t (*iFp_t)(void*); +typedef void* (*pFp_t)(void*); typedef void (*vFpp_t)(void*, void*); +typedef int32_t (*iFpp_t)(void*, void*); typedef void* (*pFppp_t)(void*, void*, void*); typedef int32_t (*iFpipp_t)(void*, int32_t, void*, void*); typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); typedef void* (*pFpipL_t)(void*, int32_t, void*, uintptr_t); +typedef int32_t (*iFpuipp_t)(void*, uint32_t, int32_t, void*, void*); +typedef int32_t (*iFppupp_t)(void*, void*, uint32_t, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ GO(snd_dlclose, iFp_t) \ GO(snd_lib_error_set_handler, iFp_t) \ + GO(snd_mixer_class_get_compare, pFp_t) \ + GO(snd_mixer_class_get_event, pFp_t) \ GO(snd_mixer_elem_set_callback, vFpp_t) \ + GO(snd_mixer_class_set_compare, iFpp_t) \ + GO(snd_mixer_class_set_event, iFpp_t) \ + GO(snd_mixer_class_set_private_free, iFpp_t) \ + GO(snd_mixer_set_compare, iFpp_t) \ GO(snd_dlsym, pFppp_t) \ GO(snd_async_add_handler, iFpipp_t) \ GO(snd_async_add_pcm_handler, iFpppp_t) \ - GO(snd_dlopen, pFpipL_t) + GO(snd_dlopen, pFpipL_t) \ + GO(snd_mixer_elem_new, iFpuipp_t) \ + GO(snd_pcm_hook_add, iFppupp_t) #endif // __wrappedlibasoundTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibasoundundefs.h b/src/wrapped/generated/wrappedlibasoundundefs.h index b43a3e1f4fcc1e417c78eb07a25a90df6db2e396..2bb813b61ddcc547852f3d3c758814f7e18ac803 100644 --- a/src/wrapped/generated/wrappedlibasoundundefs.h +++ b/src/wrapped/generated/wrappedlibasoundundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibasoundUNDEFS_H_ #define __wrappedlibasoundUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibbsddefs.h b/src/wrapped/generated/wrappedlibbsddefs.h index 6104bfc267d0be917345969041cf3b0968bc9d8c..c106ff2b8c1a4cce7ca1afa7f24afc863761ffd8 100644 --- a/src/wrapped/generated/wrappedlibbsddefs.h +++ b/src/wrapped/generated/wrappedlibbsddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibbsdDEFS_H_ #define __wrappedlibbsdDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibbsdtypes.h b/src/wrapped/generated/wrappedlibbsdtypes.h index b007845abb42a979b38dc3f5c828a8d6a88a1bc5..12d78b532f9deaa0ed1972ad1c3d03924bd1caa7 100644 --- a/src/wrapped/generated/wrappedlibbsdtypes.h +++ b/src/wrapped/generated/wrappedlibbsdtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibbsdTYPES_H_ #define __wrappedlibbsdTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibbsdundefs.h b/src/wrapped/generated/wrappedlibbsdundefs.h index 6f22a93e7271efa0df699a475e80be55f9dc637b..fbfc82a828f09830026424b2372075c3e9c00d63 100644 --- a/src/wrapped/generated/wrappedlibbsdundefs.h +++ b/src/wrapped/generated/wrappedlibbsdundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibbsdUNDEFS_H_ #define __wrappedlibbsdUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcdefs.h b/src/wrapped/generated/wrappedlibcdefs.h index 9b1434a06f2e58991fc70f5ce6a520bd017e1a64..b922336cc2eaf4e097d5dfe07bff6b0021ff651c 100644 --- a/src/wrapped/generated/wrappedlibcdefs.h +++ b/src/wrapped/generated/wrappedlibcdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibcDEFS_H_ #define __wrappedlibcDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcmusldefs.h b/src/wrapped/generated/wrappedlibcmusldefs.h index 44699686c78e00a3927bff0f737d35f20b9e1bb0..24cf6e79b626aaf520b2a631c2adcedb6b7e13bf 100644 --- a/src/wrapped/generated/wrappedlibcmusldefs.h +++ b/src/wrapped/generated/wrappedlibcmusldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibcmuslDEFS_H_ #define __wrappedlibcmuslDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcmusltypes.h b/src/wrapped/generated/wrappedlibcmusltypes.h index dc4ac245b9a6e3f540e7961a26ec8a3c14794af8..a9694513a5e06e5599dadd3af3bd942080fc0a7c 100644 --- a/src/wrapped/generated/wrappedlibcmusltypes.h +++ b/src/wrapped/generated/wrappedlibcmusltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibcmuslTYPES_H_ #define __wrappedlibcmuslTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibcmuslundefs.h b/src/wrapped/generated/wrappedlibcmuslundefs.h index 71ff2c0e4ec5d24014113ea9bf19011a0f6bdc39..007cbc84bebed4fb2f3eb4491ee35341b8da2566 100644 --- a/src/wrapped/generated/wrappedlibcmuslundefs.h +++ b/src/wrapped/generated/wrappedlibcmuslundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibcmuslUNDEFS_H_ #define __wrappedlibcmuslUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcryptdefs.h b/src/wrapped/generated/wrappedlibcryptdefs.h index fc002b3bc4947c8aba0dcac3728d93117d984ccd..fc90426e033f97e883f84cdfb6c2d85ecfb62287 100644 --- a/src/wrapped/generated/wrappedlibcryptdefs.h +++ b/src/wrapped/generated/wrappedlibcryptdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibcryptDEFS_H_ #define __wrappedlibcryptDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcrypttypes.h b/src/wrapped/generated/wrappedlibcrypttypes.h index 41047145dbc85e008284fd3e9bf0d89e176d66b2..acca40fdc733e4933149a2485dc2fff49d57291d 100644 --- a/src/wrapped/generated/wrappedlibcrypttypes.h +++ b/src/wrapped/generated/wrappedlibcrypttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibcryptTYPES_H_ #define __wrappedlibcryptTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibcryptundefs.h b/src/wrapped/generated/wrappedlibcryptundefs.h index 4f5de633717792a1c42b5e683fee37ee82ee961a..61a3ee098f3672e2d3cea64090a9e6ca436c87fa 100644 --- a/src/wrapped/generated/wrappedlibcryptundefs.h +++ b/src/wrapped/generated/wrappedlibcryptundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibcryptUNDEFS_H_ #define __wrappedlibcryptUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibctypes.h b/src/wrapped/generated/wrappedlibctypes.h index a9b5dbb1e45af1aa4ee6da5095ce18e7953ca15a..4163d6038dd74eb0ccda233891b684eec9503680 100644 --- a/src/wrapped/generated/wrappedlibctypes.h +++ b/src/wrapped/generated/wrappedlibctypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibcTYPES_H_ #define __wrappedlibcTYPES_H_ @@ -17,7 +17,6 @@ typedef void (*vFp_t)(void*); typedef int32_t (*iFv_t)(void); typedef int32_t (*iFi_t)(int32_t); typedef int32_t (*iFp_t)(void*); -typedef int64_t (*IFi_t)(int32_t); typedef intptr_t (*lFv_t)(void); typedef intptr_t (*lFi_t)(int32_t); typedef uintptr_t (*LFL_t)(uintptr_t); @@ -26,6 +25,7 @@ typedef void (*vFpi_t)(void*, int32_t); typedef void (*vFpu_t)(void*, uint32_t); typedef void (*vFpp_t)(void*, void*); typedef void (*vFpV_t)(void*, ...); +typedef void (*vFpA_t)(void*, va_list); typedef int32_t (*iFip_t)(int32_t, void*); typedef int32_t (*iFup_t)(uint32_t, void*); typedef int32_t (*iFpi_t)(void*, int32_t); @@ -37,6 +37,7 @@ typedef int32_t (*iFSp_t)(void*, void*); typedef void* (*pFip_t)(int32_t, void*); typedef void* (*pFpi_t)(void*, int32_t); typedef void* (*pFpp_t)(void*, void*); +typedef void* (*SFpp_t)(void*, void*); typedef void (*vFipV_t)(int32_t, void*, ...); typedef void (*vFipA_t)(int32_t, void*, va_list); typedef void (*vFpii_t)(void*, int32_t, int32_t); @@ -51,7 +52,9 @@ typedef int32_t (*iFppi_t)(void*, void*, int32_t); typedef int32_t (*iFppp_t)(void*, void*, void*); typedef int32_t (*iFppV_t)(void*, void*, ...); typedef int32_t (*iFppA_t)(void*, void*, va_list); -typedef int32_t (*iFpOu_t)(void*, int32_t, uint32_t); +typedef int32_t (*iFpON_t)(void*, int32_t, ...); +typedef int32_t (*iFSpV_t)(void*, void*, ...); +typedef int32_t (*iFSpA_t)(void*, void*, va_list); typedef intptr_t (*lFipV_t)(int32_t, void*, ...); typedef intptr_t (*lFppL_t)(void*, void*, uintptr_t); typedef uintptr_t (*LFppL_t)(void*, void*, uintptr_t); @@ -61,6 +64,7 @@ typedef void* (*pFppV_t)(void*, void*, ...); typedef void (*vFiipV_t)(int32_t, int32_t, void*, ...); typedef void (*vFiipA_t)(int32_t, int32_t, void*, va_list); typedef void (*vFpLLp_t)(void*, uintptr_t, uintptr_t, void*); +typedef void (*vFppiV_t)(void*, void*, int32_t, ...); typedef void (*vFpppp_t)(void*, void*, void*, void*); typedef int32_t (*iFiiip_t)(int32_t, int32_t, int32_t, void*); typedef int32_t (*iFiiiN_t)(int32_t, int32_t, int32_t, ...); @@ -69,31 +73,34 @@ typedef int32_t (*iFiipA_t)(int32_t, int32_t, void*, va_list); typedef int32_t (*iFipii_t)(int32_t, void*, int32_t, int32_t); typedef int32_t (*iFipup_t)(int32_t, void*, uint32_t, void*); typedef int32_t (*iFippi_t)(int32_t, void*, void*, int32_t); -typedef int32_t (*iFippL_t)(int32_t, void*, void*, uintptr_t); typedef int32_t (*iFpipp_t)(void*, int32_t, void*, void*); typedef int32_t (*iFpipV_t)(void*, int32_t, void*, ...); typedef int32_t (*iFpipA_t)(void*, int32_t, void*, va_list); typedef int32_t (*iFpLpV_t)(void*, uintptr_t, void*, ...); typedef int32_t (*iFpLpA_t)(void*, uintptr_t, void*, va_list); typedef int32_t (*iFppii_t)(void*, void*, int32_t, int32_t); -typedef int32_t (*iFppiV_t)(void*, void*, int32_t, ...); typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); +typedef intptr_t (*lFippL_t)(int32_t, void*, void*, uintptr_t); typedef intptr_t (*lFuipp_t)(uint32_t, int32_t, void*, void*); +typedef intptr_t (*lFppLL_t)(void*, void*, uintptr_t, uintptr_t); typedef void (*vFpLLpp_t)(void*, uintptr_t, uintptr_t, void*, void*); typedef int32_t (*iFiipup_t)(int32_t, int32_t, void*, uint32_t, void*); typedef int32_t (*iFiippi_t)(int32_t, int32_t, void*, void*, int32_t); typedef int32_t (*iFiLLLL_t)(int32_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); typedef int32_t (*iFipiip_t)(int32_t, void*, int32_t, int32_t, void*); +typedef int32_t (*iFipiup_t)(int32_t, void*, int32_t, uint32_t, void*); typedef int32_t (*iFipppp_t)(int32_t, void*, void*, void*, void*); +typedef int32_t (*iFpiipp_t)(void*, int32_t, int32_t, void*, void*); typedef int32_t (*iFpilpV_t)(void*, int32_t, intptr_t, void*, ...); typedef int32_t (*iFpuppp_t)(void*, uint32_t, void*, void*, void*); -typedef int32_t (*iFpLLpp_t)(void*, uintptr_t, uintptr_t, void*, void*); typedef void* (*pFpLLiN_t)(void*, uintptr_t, uintptr_t, int32_t, ...); typedef void* (*pFppLLp_t)(void*, void*, uintptr_t, uintptr_t, void*); typedef void* (*pFpppLp_t)(void*, void*, void*, uintptr_t, void*); +typedef void (*vFiipupV_t)(int32_t, int32_t, void*, uint32_t, void*, ...); typedef int32_t (*iFpLiLpp_t)(void*, uintptr_t, int32_t, uintptr_t, void*, void*); typedef int32_t (*iFpLiLpV_t)(void*, uintptr_t, int32_t, uintptr_t, void*, ...); typedef int32_t (*iFpppppp_t)(void*, void*, void*, void*, void*, void*); +typedef void* (*pFpLiiiI_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int64_t); typedef void* (*pFpLiiil_t)(void*, uintptr_t, int32_t, int32_t, int32_t, intptr_t); typedef int32_t (*iFpippppp_t)(void*, int32_t, void*, void*, void*, void*, void*); typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void*); @@ -105,9 +112,11 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(exit, vFi_t) \ GO(_ITM_deregisterTMCloneTable, vFp_t) \ GO(__cxa_finalize, vFp_t) \ + GO(qemu_host_direct_call, vFp_t) \ GO(fork, iFv_t) \ GO(vfork, iFv_t) \ GO(iopl, iFi_t) \ + GO(__libc_dlclose, iFp_t) \ GO(_setjmp, iFp_t) \ GO(atexit, iFp_t) \ GO(getcontext, iFp_t) \ @@ -116,9 +125,9 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(setjmp, iFp_t) \ GO(stime, iFp_t) \ GO(uname, iFp_t) \ - GO(sysconf, IFi_t) \ GO(syscall, lFv_t) \ GO(__sysconf, lFi_t) \ + GO(sysconf, lFi_t) \ GO(getauxval, LFL_t) \ GO(__deregister_frame_info, pFp_t) \ GO(mallinfo, pFp_t) \ @@ -135,6 +144,8 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(twalk, vFpp_t) \ GO(warn, vFpV_t) \ GO(warnx, vFpV_t) \ + GO(vwarn, vFpA_t) \ + GO(vwarnx, vFpA_t) \ GO(fstat, iFip_t) \ GO(fstat64, iFip_t) \ GO(setrlimit, iFup_t) \ @@ -157,25 +168,32 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(execle, iFpV_t) \ GO(execlp, iFpV_t) \ GO(printf, iFpV_t) \ + GO(scanf, iFpV_t) \ GO(wprintf, iFpV_t) \ + GO(wscanf, iFpV_t) \ GO(__isoc99_vscanf, iFpA_t) \ GO(vprintf, iFpA_t) \ GO(vscanf, iFpA_t) \ GO(vwprintf, iFpA_t) \ + GO(vwscanf, iFpA_t) \ GO(_IO_file_stat, iFSp_t) \ GO(__sysv_signal, pFip_t) \ GO(bsd_signal, pFip_t) \ GO(signal, pFip_t) \ GO(sigset, pFip_t) \ GO(sysv_signal, pFip_t) \ + GO(__libc_dlopen_mode, pFpi_t) \ GO(backtrace_symbols, pFpi_t) \ + GO(__libc_dlsym, pFpp_t) \ GO(__realpath_chk, pFpp_t) \ - GO(fopen, pFpp_t) \ - GO(fopen64, pFpp_t) \ GO(realpath, pFpp_t) \ + GO(fopen, SFpp_t) \ + GO(fopen64, SFpp_t) \ GO(err, vFipV_t) \ GO(errx, vFipV_t) \ GO(syslog, vFipV_t) \ + GO(verr, vFipA_t) \ + GO(verrx, vFipA_t) \ GO(vsyslog, vFipA_t) \ GO(backtrace_symbols_fd, vFpii_t) \ GO(_ITM_addUserCommitAction, vFpup_t) \ @@ -203,33 +221,36 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(__vfprintf_chk, iFppp_t) \ GO(__vsscanf, iFppp_t) \ GO(execve, iFppp_t) \ + GO(execvpe, iFppp_t) \ GO(__asprintf, iFppV_t) \ - GO(__isoc23_fscanf, iFppV_t) \ GO(__isoc23_sscanf, iFppV_t) \ GO(__isoc99_fscanf, iFppV_t) \ GO(__isoc99_sscanf, iFppV_t) \ GO(__isoc99_swscanf, iFppV_t) \ GO(asprintf, iFppV_t) \ - GO(fprintf, iFppV_t) \ - GO(fscanf, iFppV_t) \ - GO(fwprintf, iFppV_t) \ GO(sprintf, iFppV_t) \ GO(sscanf, iFppV_t) \ GO(swscanf, iFppV_t) \ + GO(__isoc23_vsscanf, iFppA_t) \ GO(__isoc99_vfscanf, iFppA_t) \ GO(__isoc99_vsscanf, iFppA_t) \ GO(__isoc99_vswscanf, iFppA_t) \ GO(obstack_vprintf, iFppA_t) \ GO(vasprintf, iFppA_t) \ - GO(vfprintf, iFppA_t) \ - GO(vfscanf, iFppA_t) \ - GO(vfwprintf, iFppA_t) \ GO(vsprintf, iFppA_t) \ GO(vsscanf, iFppA_t) \ GO(vswscanf, iFppA_t) \ - GO(__open, iFpOu_t) \ - GO(open, iFpOu_t) \ - GO(open64, iFpOu_t) \ + GO(__open, iFpON_t) \ + GO(open, iFpON_t) \ + GO(open64, iFpON_t) \ + GO(__isoc23_fscanf, iFSpV_t) \ + GO(fprintf, iFSpV_t) \ + GO(fscanf, iFSpV_t) \ + GO(fwprintf, iFSpV_t) \ + GO(vfprintf, iFSpA_t) \ + GO(vfscanf, iFSpA_t) \ + GO(vfwprintf, iFSpA_t) \ + GO(vfwscanf, iFSpA_t) \ GO(__wprintf_chk, lFipV_t) \ GO(readlink, lFppL_t) \ GO(strlcat, LFppL_t) \ @@ -241,8 +262,10 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(tsearch, pFppp_t) \ GO(fopencookie, pFppV_t) \ GO(__syslog_chk, vFiipV_t) \ + GO(error, vFiipV_t) \ GO(__vsyslog_chk, vFiipA_t) \ GO(qsort, vFpLLp_t) \ + GO(makecontext, vFppiV_t) \ GO(__libc_init, vFpppp_t) \ GO(epoll_ctl, iFiiip_t) \ GO(semctl, iFiiiN_t) \ @@ -252,7 +275,6 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(__xmknod, iFipup_t) \ GO(fstatat, iFippi_t) \ GO(fstatat64, iFippi_t) \ - GO(readlinkat, iFippL_t) \ GO(__vasprintf_chk, iFpipp_t) \ GO(glob, iFpipp_t) \ GO(glob64, iFpipp_t) \ @@ -267,35 +289,38 @@ typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void* GO(vsnprintf, iFpLpA_t) \ GO(vswprintf, iFpLpA_t) \ GO(nftw64, iFppii_t) \ - GO(makecontext, iFppiV_t) \ GO(__register_atfork, iFpppp_t) \ GO(__vsprintf_chk, iFpppp_t) \ GO(scandir, iFpppp_t) \ GO(scandir64, iFpppp_t) \ + GO(readlinkat, lFippL_t) \ GO(ptrace, lFuipp_t) \ + GO(__readlink_chk, lFppLL_t) \ GO(qsort_r, vFpLLpp_t) \ GO(__xmknodat, iFiipup_t) \ GO(__fxstatat, iFiippi_t) \ GO(__fxstatat64, iFiippi_t) \ GO(prctl, iFiLLLL_t) \ GO(epoll_pwait, iFipiip_t) \ + GO(statx, iFipiup_t) \ GO(getopt_long, iFipppp_t) \ GO(getopt_long_only, iFipppp_t) \ GO(scandirat, iFipppp_t) \ + GO(_obstack_begin, iFpiipp_t) \ GO(__sprintf_chk, iFpilpV_t) \ GO(__vswprintf_chk, iFpuppp_t) \ - GO(_obstack_begin, iFpLLpp_t) \ GO(mremap, pFpLLiN_t) \ GO(bsearch, pFppLLp_t) \ GO(lfind, pFpppLp_t) \ GO(lsearch, pFpppLp_t) \ + GO(error_at_line, vFiipupV_t) \ GO(__vsnprintf_chk, iFpLiLpp_t) \ GO(__snprintf_chk, iFpLiLpV_t) \ GO(__swprintf_chk, iFpLiLpV_t) \ GO(posix_spawn, iFpppppp_t) \ GO(posix_spawnp, iFpppppp_t) \ + GO(mmap64, pFpLiiiI_t) \ GO(mmap, pFpLiiil_t) \ - GO(mmap64, pFpLiiil_t) \ GO(__libc_start_main, iFpippppp_t) \ GO(clone, iFppipppp_t) diff --git a/src/wrapped/generated/wrappedlibcundefs.h b/src/wrapped/generated/wrappedlibcundefs.h index 9fef32637b9a408fac83f4c80a742b339933cf9a..c581167a3296a551a104151bc6d63947c1991190 100644 --- a/src/wrapped/generated/wrappedlibcundefs.h +++ b/src/wrapped/generated/wrappedlibcundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibcUNDEFS_H_ #define __wrappedlibcUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcupsdefs.h b/src/wrapped/generated/wrappedlibcupsdefs.h index 34019153bd503f1b82c9afe6d84422c89d468566..c0578a9ad9cd59ab407eb3f279737d6bd7bcd112 100644 --- a/src/wrapped/generated/wrappedlibcupsdefs.h +++ b/src/wrapped/generated/wrappedlibcupsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibcupsDEFS_H_ #define __wrappedlibcupsDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibcupstypes.h b/src/wrapped/generated/wrappedlibcupstypes.h index f17b8fc04a6a8e314ee3310c5119d41739044b3f..92ece55d372d522991cbbcada695b69215297184 100644 --- a/src/wrapped/generated/wrappedlibcupstypes.h +++ b/src/wrapped/generated/wrappedlibcupstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibcupsTYPES_H_ #define __wrappedlibcupsTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibcupsundefs.h b/src/wrapped/generated/wrappedlibcupsundefs.h index be8baf834fe5fbb4ad2b87907b1b353a9c96e6f1..67f2ee971174566c309067432fb734d849a9224e 100644 --- a/src/wrapped/generated/wrappedlibcupsundefs.h +++ b/src/wrapped/generated/wrappedlibcupsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibcupsUNDEFS_H_ #define __wrappedlibcupsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdldefs.h b/src/wrapped/generated/wrappedlibdldefs.h index 75844c4a7e9ea54daf28f8e7049d9c271f54ddb7..2098a7f7d2150b89a0774cf5716288cc5d7797ad 100644 --- a/src/wrapped/generated/wrappedlibdldefs.h +++ b/src/wrapped/generated/wrappedlibdldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibdlDEFS_H_ #define __wrappedlibdlDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdltypes.h b/src/wrapped/generated/wrappedlibdltypes.h index a2535e0a2ffb40b5d93fe7f7040b0c007c6f9198..7cccfa95912bb8dcb44e05334e1a1cb9c0fd1c44 100644 --- a/src/wrapped/generated/wrappedlibdltypes.h +++ b/src/wrapped/generated/wrappedlibdltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibdlTYPES_H_ #define __wrappedlibdlTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibdlundefs.h b/src/wrapped/generated/wrappedlibdlundefs.h index f09b463077dca43a8c3a22a137ab7aa4e24594ca..ca22a9b1ee60911a0e7164ea7e5d960ca4394377 100644 --- a/src/wrapped/generated/wrappedlibdlundefs.h +++ b/src/wrapped/generated/wrappedlibdlundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibdlUNDEFS_H_ #define __wrappedlibdlUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdrmamdgpudefs.h b/src/wrapped/generated/wrappedlibdrmamdgpudefs.h new file mode 100644 index 0000000000000000000000000000000000000000..d1d6e30e32c99aa0781a9990820fc21374e8eb9b --- /dev/null +++ b/src/wrapped/generated/wrappedlibdrmamdgpudefs.h @@ -0,0 +1,8 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedlibdrmamdgpuDEFS_H_ +#define __wrappedlibdrmamdgpuDEFS_H_ + + +#endif // __wrappedlibdrmamdgpuDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdrmamdgputypes.h b/src/wrapped/generated/wrappedlibdrmamdgputypes.h new file mode 100644 index 0000000000000000000000000000000000000000..1463383cc7f320d0a91a54bcb48b919a7fbde0df --- /dev/null +++ b/src/wrapped/generated/wrappedlibdrmamdgputypes.h @@ -0,0 +1,17 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedlibdrmamdgpuTYPES_H_ +#define __wrappedlibdrmamdgpuTYPES_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedlibdrmamdgpuTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibdrmamdgpuundefs.h b/src/wrapped/generated/wrappedlibdrmamdgpuundefs.h new file mode 100644 index 0000000000000000000000000000000000000000..532dcef429df1d50a54197b2cac1d981efe5d8e4 --- /dev/null +++ b/src/wrapped/generated/wrappedlibdrmamdgpuundefs.h @@ -0,0 +1,8 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedlibdrmamdgpuUNDEFS_H_ +#define __wrappedlibdrmamdgpuUNDEFS_H_ + + +#endif // __wrappedlibdrmamdgpuUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdrmdefs.h b/src/wrapped/generated/wrappedlibdrmdefs.h index a94ebd047ad6ced596cbac85a9b31c9c861097dd..0412cc02403cbe9ee1ed90ad5451b273fc0d842a 100644 --- a/src/wrapped/generated/wrappedlibdrmdefs.h +++ b/src/wrapped/generated/wrappedlibdrmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibdrmDEFS_H_ #define __wrappedlibdrmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibdrmtypes.h b/src/wrapped/generated/wrappedlibdrmtypes.h index 8c583cb2922b40a2af557fbb08224778b1cdc135..101f41060d14de84dff923476f256c0ab50fb18c 100644 --- a/src/wrapped/generated/wrappedlibdrmtypes.h +++ b/src/wrapped/generated/wrappedlibdrmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibdrmTYPES_H_ #define __wrappedlibdrmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibdrmundefs.h b/src/wrapped/generated/wrappedlibdrmundefs.h index b52bd362912685be4666e1ea0d6e5e8ce57d2b63..e2d695e7ccd297d9ce1f498b6179c5766f1d3a45 100644 --- a/src/wrapped/generated/wrappedlibdrmundefs.h +++ b/src/wrapped/generated/wrappedlibdrmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibdrmUNDEFS_H_ #define __wrappedlibdrmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibegldefs.h b/src/wrapped/generated/wrappedlibegldefs.h index f52e5d2e1e15971c7227f4ffdd1f93018a7f1ae6..7e62db776b9ca16a7b9b797e68f5469d7cf5dfe0 100644 --- a/src/wrapped/generated/wrappedlibegldefs.h +++ b/src/wrapped/generated/wrappedlibegldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibeglDEFS_H_ #define __wrappedlibeglDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibegltypes.h b/src/wrapped/generated/wrappedlibegltypes.h index 9488b9b4d6ab6e9f5121cd0cd8c9b8ee25df5f48..a80dafd1158656dae914ee659d2356b7274c8981 100644 --- a/src/wrapped/generated/wrappedlibegltypes.h +++ b/src/wrapped/generated/wrappedlibegltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibeglTYPES_H_ #define __wrappedlibeglTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibeglundefs.h b/src/wrapped/generated/wrappedlibeglundefs.h index 7364e25e737d5c4fae370c9c0c366229e496b901..22429e2633fd9a97baa09c0990b893bbf24547a0 100644 --- a/src/wrapped/generated/wrappedlibeglundefs.h +++ b/src/wrapped/generated/wrappedlibeglundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibeglUNDEFS_H_ #define __wrappedlibeglUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformdefs.h b/src/wrapped/generated/wrappedlibformdefs.h index 30a2e5233701f8986137f03d2f457daaf9369e63..510aabdb1e92a906a90f1c3b8af20e06da5eb357 100644 --- a/src/wrapped/generated/wrappedlibformdefs.h +++ b/src/wrapped/generated/wrappedlibformdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibformDEFS_H_ #define __wrappedlibformDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformtypes.h b/src/wrapped/generated/wrappedlibformtypes.h index 2718dd4d516be922d0bfcc176df0de8b5367c567..811f2a97c0958905c2ee62a153ce89b9a92b9379 100644 --- a/src/wrapped/generated/wrappedlibformtypes.h +++ b/src/wrapped/generated/wrappedlibformtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibformTYPES_H_ #define __wrappedlibformTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibformundefs.h b/src/wrapped/generated/wrappedlibformundefs.h index 3c54fd758406366102b22f6da30e557527121570..9d213c57ea21fe4b4c313c31cc085d43cffec953 100644 --- a/src/wrapped/generated/wrappedlibformundefs.h +++ b/src/wrapped/generated/wrappedlibformundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibformUNDEFS_H_ #define __wrappedlibformUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformw6defs.h b/src/wrapped/generated/wrappedlibformw6defs.h index 1458ae449a8f74ed2e7b3284dd7ebf26bf027606..e19f3c6633c29d3667418a5dd6dad5aed914dae3 100644 --- a/src/wrapped/generated/wrappedlibformw6defs.h +++ b/src/wrapped/generated/wrappedlibformw6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibformw6DEFS_H_ #define __wrappedlibformw6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformw6types.h b/src/wrapped/generated/wrappedlibformw6types.h index 682d248aa2d70b43c7b874240707feea8209b85c..177cdf7d7cd9273e3dab4368db8517535443c2e8 100644 --- a/src/wrapped/generated/wrappedlibformw6types.h +++ b/src/wrapped/generated/wrappedlibformw6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibformw6TYPES_H_ #define __wrappedlibformw6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibformw6undefs.h b/src/wrapped/generated/wrappedlibformw6undefs.h index 4866960fed857b78999812985718319c3586d6b4..a7acb9033fc53da7033ff8a1202e96ecb5420ada 100644 --- a/src/wrapped/generated/wrappedlibformw6undefs.h +++ b/src/wrapped/generated/wrappedlibformw6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibformw6UNDEFS_H_ #define __wrappedlibformw6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformwdefs.h b/src/wrapped/generated/wrappedlibformwdefs.h index 55a007b7d271d1e6d78a1f871f367cda8f52471b..1091fb0c62b5d069397ddb3a0647a040b43eadb0 100644 --- a/src/wrapped/generated/wrappedlibformwdefs.h +++ b/src/wrapped/generated/wrappedlibformwdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibformwDEFS_H_ #define __wrappedlibformwDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibformwtypes.h b/src/wrapped/generated/wrappedlibformwtypes.h index 19d8d750817e369e2e6df19fbb74379540c34645..bfbef2dcd26c68d6c2c6c8cb5fc82e08db673fab 100644 --- a/src/wrapped/generated/wrappedlibformwtypes.h +++ b/src/wrapped/generated/wrappedlibformwtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibformwTYPES_H_ #define __wrappedlibformwTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibformwundefs.h b/src/wrapped/generated/wrappedlibformwundefs.h index 35926a4a3aacf5a45ec96d7e8a17b84cd8cf69f0..d1f8021e2beed333394d58cf7ce77625c08a12e4 100644 --- a/src/wrapped/generated/wrappedlibformwundefs.h +++ b/src/wrapped/generated/wrappedlibformwundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibformwUNDEFS_H_ #define __wrappedlibformwUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibfusedefs.h b/src/wrapped/generated/wrappedlibfusedefs.h index d42e7a230239e808428977dd9da8bd9fbe0a891a..6a87e05707b1c66b5e047459334e5cc941b3e527 100644 --- a/src/wrapped/generated/wrappedlibfusedefs.h +++ b/src/wrapped/generated/wrappedlibfusedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibfuseDEFS_H_ #define __wrappedlibfuseDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibfusetypes.h b/src/wrapped/generated/wrappedlibfusetypes.h index 342a308d9cacb297977db1306ee0a1c660f70dba..ec69eb2ce7d523775ee0026f470c1a7ffa112e71 100644 --- a/src/wrapped/generated/wrappedlibfusetypes.h +++ b/src/wrapped/generated/wrappedlibfusetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibfuseTYPES_H_ #define __wrappedlibfuseTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibfuseundefs.h b/src/wrapped/generated/wrappedlibfuseundefs.h index 4f194898a594e64de3bcf9459f2e535c878f7e70..f1cd21d22b0582b5dee16d8f1bba8004a07146ee 100644 --- a/src/wrapped/generated/wrappedlibfuseundefs.h +++ b/src/wrapped/generated/wrappedlibfuseundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibfuseUNDEFS_H_ #define __wrappedlibfuseUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibgldefs.h b/src/wrapped/generated/wrappedlibgldefs.h index 4caba6db773cd80d1009c47cd33e1238b009503f..720e3c9a321463e49be2f7d71f446d830ae8bb2a 100644 --- a/src/wrapped/generated/wrappedlibgldefs.h +++ b/src/wrapped/generated/wrappedlibgldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibglDEFS_H_ #define __wrappedlibglDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibgltypes.h b/src/wrapped/generated/wrappedlibgltypes.h index e9d484573a7cd7bbceb9e129147d43bb844b77af..4a9d4fcf87acf3a2de1c73a9b780b4f9198ad27a 100644 --- a/src/wrapped/generated/wrappedlibgltypes.h +++ b/src/wrapped/generated/wrappedlibgltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibglTYPES_H_ #define __wrappedlibglTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibgludefs.h b/src/wrapped/generated/wrappedlibgludefs.h index f365ac3eff5973dd89edfb80e96303fc7cccf6c2..0f594155a995f67df1545ef163cddeacc371be0c 100644 --- a/src/wrapped/generated/wrappedlibgludefs.h +++ b/src/wrapped/generated/wrappedlibgludefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibgluDEFS_H_ #define __wrappedlibgluDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibglundefs.h b/src/wrapped/generated/wrappedlibglundefs.h index bca71608fd8bc014565ec258aca09a6f95431995..d36e9fa10988cb4a4d33ec2915cdc0a230c579f1 100644 --- a/src/wrapped/generated/wrappedlibglundefs.h +++ b/src/wrapped/generated/wrappedlibglundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibglUNDEFS_H_ #define __wrappedlibglUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibglutypes.h b/src/wrapped/generated/wrappedlibglutypes.h index ec000dda13b089477d57c81307ed220668ccbc13..1974b67a9bf7cecea844e9994c6f8bbc9c56ae84 100644 --- a/src/wrapped/generated/wrappedlibglutypes.h +++ b/src/wrapped/generated/wrappedlibglutypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibgluTYPES_H_ #define __wrappedlibgluTYPES_H_ @@ -11,11 +11,11 @@ #define ADDED_FUNCTIONS() #endif -typedef void (*vFpip_t)(void*, int32_t, void*); +typedef void (*vFpup_t)(void*, uint32_t, void*); #define SUPER() ADDED_FUNCTIONS() \ - GO(gluNurbsCallback, vFpip_t) \ - GO(gluQuadricCallback, vFpip_t) \ - GO(gluTessCallback, vFpip_t) + GO(gluNurbsCallback, vFpup_t) \ + GO(gluQuadricCallback, vFpup_t) \ + GO(gluTessCallback, vFpup_t) #endif // __wrappedlibgluTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibgluundefs.h b/src/wrapped/generated/wrappedlibgluundefs.h index acf380427e3c5ebe35ba8df2ada457ad81ff3847..453f399a38be242e41142cb161145f444be7e9c7 100644 --- a/src/wrapped/generated/wrappedlibgluundefs.h +++ b/src/wrapped/generated/wrappedlibgluundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibgluUNDEFS_H_ #define __wrappedlibgluUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibglxdefs.h b/src/wrapped/generated/wrappedlibglxdefs.h index 1e947e9a6194379135ee6968c1b5030d716e3c80..a9f9a0484d02a0b0b8bf0110e24ee11d5e708968 100644 --- a/src/wrapped/generated/wrappedlibglxdefs.h +++ b/src/wrapped/generated/wrappedlibglxdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibglxDEFS_H_ #define __wrappedlibglxDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibglxtypes.h b/src/wrapped/generated/wrappedlibglxtypes.h index bfa19bae0b54a4f8f9d4d355a37affe8ab29ea22..591e6342a4a35e44c5422c012925387baf0d6f06 100644 --- a/src/wrapped/generated/wrappedlibglxtypes.h +++ b/src/wrapped/generated/wrappedlibglxtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibglxTYPES_H_ #define __wrappedlibglxTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibglxundefs.h b/src/wrapped/generated/wrappedlibglxundefs.h index 3c140b5ddeef25ab32e17ce3339311a33df5e605..13021e9b1a6a0f734dad1c346a5c2e5fb19eb4b5 100644 --- a/src/wrapped/generated/wrappedlibglxundefs.h +++ b/src/wrapped/generated/wrappedlibglxundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibglxUNDEFS_H_ #define __wrappedlibglxUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibharfbuzzdefs.h b/src/wrapped/generated/wrappedlibharfbuzzdefs.h index c463b59d8ea13edea28cbe95a12929a1ed8c0305..5b299ea7d588c3577f6e71a4d34bd99bbe88b85c 100644 --- a/src/wrapped/generated/wrappedlibharfbuzzdefs.h +++ b/src/wrapped/generated/wrappedlibharfbuzzdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibharfbuzzDEFS_H_ #define __wrappedlibharfbuzzDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibharfbuzztypes.h b/src/wrapped/generated/wrappedlibharfbuzztypes.h index b6ccb20591bef6ace3af42363ebc6dae48dc76be..5df4058c1bad764d273fbefbfccaecbd466988e1 100644 --- a/src/wrapped/generated/wrappedlibharfbuzztypes.h +++ b/src/wrapped/generated/wrappedlibharfbuzztypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibharfbuzzTYPES_H_ #define __wrappedlibharfbuzzTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibharfbuzzundefs.h b/src/wrapped/generated/wrappedlibharfbuzzundefs.h index 05caf5af918011c5f9c6e44358893e68a6768b1c..6f4b7a5898f18f50f42b2a7142a58972c6005fed 100644 --- a/src/wrapped/generated/wrappedlibharfbuzzundefs.h +++ b/src/wrapped/generated/wrappedlibharfbuzzundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibharfbuzzUNDEFS_H_ #define __wrappedlibharfbuzzUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibhogweed6defs.h b/src/wrapped/generated/wrappedlibhogweed6defs.h index 6693e71b7868bc7469e0a23c3c36381e206275c7..2928c29e759d75b0b15a71281d1d7b9b8ce02a12 100644 --- a/src/wrapped/generated/wrappedlibhogweed6defs.h +++ b/src/wrapped/generated/wrappedlibhogweed6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibhogweed6DEFS_H_ #define __wrappedlibhogweed6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibhogweed6types.h b/src/wrapped/generated/wrappedlibhogweed6types.h index 60fc71594392482000476e471a6c579a5a7bacf4..3177957bbc53b902e032d1b8c48403a8c57cb61f 100644 --- a/src/wrapped/generated/wrappedlibhogweed6types.h +++ b/src/wrapped/generated/wrappedlibhogweed6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibhogweed6TYPES_H_ #define __wrappedlibhogweed6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibhogweed6undefs.h b/src/wrapped/generated/wrappedlibhogweed6undefs.h index d83b11c37011bef60a6a46c9b27432f60d26e1b5..11605645a2c7c0f76df413d21b5e1f4d9a631206 100644 --- a/src/wrapped/generated/wrappedlibhogweed6undefs.h +++ b/src/wrapped/generated/wrappedlibhogweed6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibhogweed6UNDEFS_H_ #define __wrappedlibhogweed6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibibusdefs.h b/src/wrapped/generated/wrappedlibibusdefs.h index 353351f780db9b46d3cb804402f32edd56396ba1..7dfbce2825e555ad0bd92323a2d49cc9042151ae 100644 --- a/src/wrapped/generated/wrappedlibibusdefs.h +++ b/src/wrapped/generated/wrappedlibibusdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibibusDEFS_H_ #define __wrappedlibibusDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibibustypes.h b/src/wrapped/generated/wrappedlibibustypes.h index 23612c70c26a2f46447eae500894307584acbfa1..f24cfb1df4b71ec4551662293d0e0b27f6b00585 100644 --- a/src/wrapped/generated/wrappedlibibustypes.h +++ b/src/wrapped/generated/wrappedlibibustypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibibusTYPES_H_ #define __wrappedlibibusTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibibusundefs.h b/src/wrapped/generated/wrappedlibibusundefs.h index 3bc6269b10154a35fd6aa1a3e0c4f3cebcd209aa..aebde4cab45d112f4471e222447fb63eb5d3d023 100644 --- a/src/wrapped/generated/wrappedlibibusundefs.h +++ b/src/wrapped/generated/wrappedlibibusundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibibusUNDEFS_H_ #define __wrappedlibibusUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibicedefs.h b/src/wrapped/generated/wrappedlibicedefs.h index 6ee5a387d66407621fcf303129b7749519728593..ad2051ac5161f6f36bcbe9c9f1f339f7ac369ba8 100644 --- a/src/wrapped/generated/wrappedlibicedefs.h +++ b/src/wrapped/generated/wrappedlibicedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibiceDEFS_H_ #define __wrappedlibiceDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibicetypes.h b/src/wrapped/generated/wrappedlibicetypes.h index 111f9be5f5a4af7cc63d382e0432e2fc6d0e16a6..83acbf40baa70e8c0b08b9af2754e320ff8ccc3d 100644 --- a/src/wrapped/generated/wrappedlibicetypes.h +++ b/src/wrapped/generated/wrappedlibicetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibiceTYPES_H_ #define __wrappedlibiceTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibiceundefs.h b/src/wrapped/generated/wrappedlibiceundefs.h index 052cabfdf00a8aa7fdf87977278dd3ab84e1038c..037a0cd75aa53332fc106095f72bd3f3ec0bff88 100644 --- a/src/wrapped/generated/wrappedlibiceundefs.h +++ b/src/wrapped/generated/wrappedlibiceundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibiceUNDEFS_H_ #define __wrappedlibiceUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibmdefs.h b/src/wrapped/generated/wrappedlibmdefs.h index 6afe3229be44bdf4f31ddc2993a1c72777c780c3..92833d28779cdd9acb347ffc77994865adfd12aa 100644 --- a/src/wrapped/generated/wrappedlibmdefs.h +++ b/src/wrapped/generated/wrappedlibmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibmDEFS_H_ #define __wrappedlibmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibmtypes.h b/src/wrapped/generated/wrappedlibmtypes.h index b31e0cbcfecf3a8078db42163d4604a066857d86..07b683a98be845baea17119b87545cb08b45adfe 100644 --- a/src/wrapped/generated/wrappedlibmtypes.h +++ b/src/wrapped/generated/wrappedlibmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibmTYPES_H_ #define __wrappedlibmTYPES_H_ @@ -17,15 +17,19 @@ typedef int32_t (*iFf_t)(float); typedef int32_t (*iFd_t)(double); typedef int64_t (*IFf_t)(float); typedef int64_t (*IFd_t)(double); -typedef int64_t (*IFD_t)(long double); -typedef int64_t (*IFK_t)(double); typedef float (*fFf_t)(float); typedef double (*dFd_t)(double); -typedef long double (*DFD_t)(long double); -typedef double (*KFK_t)(double); typedef float (*fFff_t)(float, float); typedef double (*dFdd_t)(double, double); +#ifdef HAVE_LD80BITS +typedef int64_t (*IFD_t)(long double); +typedef long double (*DFD_t)(long double); +#else // HAVE_LD80BITS +typedef int64_t (*IFD_t)(double); +typedef double (*DFD_t)(double); +#endif + #define SUPER() ADDED_FUNCTIONS() \ GO(fegetround, iFv_t) \ GO(fesetround, iFi_t) \ @@ -34,7 +38,6 @@ typedef double (*dFdd_t)(double, double); GO(llrintf, IFf_t) \ GO(llrint, IFd_t) \ GO(llrintl, IFD_t) \ - GO(llrintl, IFK_t) \ GO(__acosf_finite, fFf_t) \ GO(__acoshf_finite, fFf_t) \ GO(__asinf_finite, fFf_t) \ @@ -64,7 +67,6 @@ typedef double (*dFdd_t)(double, double); GO(pow10, dFd_t) \ GO(rint, dFd_t) \ GO(pow10l, DFD_t) \ - GO(pow10l, KFK_t) \ GO(__atan2f_finite, fFff_t) \ GO(__fmodf_finite, fFff_t) \ GO(__hypotf_finite, fFff_t) \ diff --git a/src/wrapped/generated/wrappedlibmundefs.h b/src/wrapped/generated/wrappedlibmundefs.h index 66b487b9f3837083c40d68ce46adf57ebb9fc91c..582ac8ecb69e185d12acbaa91dcd23da2dec6915 100644 --- a/src/wrapped/generated/wrappedlibmundefs.h +++ b/src/wrapped/generated/wrappedlibmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibmUNDEFS_H_ #define __wrappedlibmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncurses6defs.h b/src/wrapped/generated/wrappedlibncurses6defs.h index 0d07108bcfe9d7bd5b3fe2102cb96770bfcd428d..7a9e36288c3d28d91dce66fd11ceeb5b606255f8 100644 --- a/src/wrapped/generated/wrappedlibncurses6defs.h +++ b/src/wrapped/generated/wrappedlibncurses6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibncurses6DEFS_H_ #define __wrappedlibncurses6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncurses6types.h b/src/wrapped/generated/wrappedlibncurses6types.h index 9594091ec176fed37d52ec51b94c3df222cdcc15..e961b9f96f06c0251fc0a63b5ef020b3c653f1a0 100644 --- a/src/wrapped/generated/wrappedlibncurses6types.h +++ b/src/wrapped/generated/wrappedlibncurses6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibncurses6TYPES_H_ #define __wrappedlibncurses6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibncurses6undefs.h b/src/wrapped/generated/wrappedlibncurses6undefs.h index 17cb535a4c6c86abfd78ec467ec07ff25df115fc..3a8ca219e458433489ecb15ecdd632a59681257c 100644 --- a/src/wrapped/generated/wrappedlibncurses6undefs.h +++ b/src/wrapped/generated/wrappedlibncurses6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibncurses6UNDEFS_H_ #define __wrappedlibncurses6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncursesdefs.h b/src/wrapped/generated/wrappedlibncursesdefs.h index 3f1e5084c4d4665b2acf553ddc43b0f0b8f9e630..3b3d329ec19f3d451005a4d9968161311b5283fc 100644 --- a/src/wrapped/generated/wrappedlibncursesdefs.h +++ b/src/wrapped/generated/wrappedlibncursesdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibncursesDEFS_H_ #define __wrappedlibncursesDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncursestypes.h b/src/wrapped/generated/wrappedlibncursestypes.h index 08e551de310b470dcfe84ccb83747b906a56a31a..1620968ff739f1f062bf320659ad9b3e1d03fb6b 100644 --- a/src/wrapped/generated/wrappedlibncursestypes.h +++ b/src/wrapped/generated/wrappedlibncursestypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibncursesTYPES_H_ #define __wrappedlibncursesTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibncursesundefs.h b/src/wrapped/generated/wrappedlibncursesundefs.h index ee39f268bc27792b995d8ae8f56e496b88e73f80..efef166ca5f2072f92404e86f766eccacec6826e 100644 --- a/src/wrapped/generated/wrappedlibncursesundefs.h +++ b/src/wrapped/generated/wrappedlibncursesundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibncursesUNDEFS_H_ #define __wrappedlibncursesUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncursesw6defs.h b/src/wrapped/generated/wrappedlibncursesw6defs.h index 70f1a06a8f6e5a67050283391b93c0f26bf14b91..51077b485d7af8f4a0bd156b94c2a7f3d5de7003 100644 --- a/src/wrapped/generated/wrappedlibncursesw6defs.h +++ b/src/wrapped/generated/wrappedlibncursesw6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibncursesw6DEFS_H_ #define __wrappedlibncursesw6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncursesw6types.h b/src/wrapped/generated/wrappedlibncursesw6types.h index 275961ec74d7b661ebcf2a01f243d3bbe48ef510..8fece8fb6c2df29b98e88092c28c2ed3f02e5b61 100644 --- a/src/wrapped/generated/wrappedlibncursesw6types.h +++ b/src/wrapped/generated/wrappedlibncursesw6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibncursesw6TYPES_H_ #define __wrappedlibncursesw6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibncursesw6undefs.h b/src/wrapped/generated/wrappedlibncursesw6undefs.h index 2207fbb6effe07c0300556f568559c909a4cf824..d2867bcd7d74ab3e6993e034c384d7892bf4acc6 100644 --- a/src/wrapped/generated/wrappedlibncursesw6undefs.h +++ b/src/wrapped/generated/wrappedlibncursesw6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibncursesw6UNDEFS_H_ #define __wrappedlibncursesw6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncurseswdefs.h b/src/wrapped/generated/wrappedlibncurseswdefs.h index 59c3a163d7c9989978c9aa34d0bdccdc2abebb3f..66abc817dbbf5ebe9296447e1530ee8e50713b4a 100644 --- a/src/wrapped/generated/wrappedlibncurseswdefs.h +++ b/src/wrapped/generated/wrappedlibncurseswdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibncurseswDEFS_H_ #define __wrappedlibncurseswDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibncurseswtypes.h b/src/wrapped/generated/wrappedlibncurseswtypes.h index 77ea4371c5240430e99380811dc272d8f42aa3ec..577e1d8d5cb75c152e11f48e844406a09bfc0dcd 100644 --- a/src/wrapped/generated/wrappedlibncurseswtypes.h +++ b/src/wrapped/generated/wrappedlibncurseswtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibncurseswTYPES_H_ #define __wrappedlibncurseswTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibncurseswundefs.h b/src/wrapped/generated/wrappedlibncurseswundefs.h index 5dc4f3588364d64c600a6ae98afe7e21a7091c9e..b146e9d6375db4779d9bda83471f53c35bc515fc 100644 --- a/src/wrapped/generated/wrappedlibncurseswundefs.h +++ b/src/wrapped/generated/wrappedlibncurseswundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibncurseswUNDEFS_H_ #define __wrappedlibncurseswUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibnettle8defs.h b/src/wrapped/generated/wrappedlibnettle8defs.h index 4b2b000446e32f2a826747d0d1ec15cdb3112ce9..962f793e84e4633218e95a11bea84264829e8af5 100644 --- a/src/wrapped/generated/wrappedlibnettle8defs.h +++ b/src/wrapped/generated/wrappedlibnettle8defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibnettle8DEFS_H_ #define __wrappedlibnettle8DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibnettle8types.h b/src/wrapped/generated/wrappedlibnettle8types.h index d99fbea89c6743b9429debf4af5aaea468977994..c87a7cb1d04d50b1d9083f933c16fb29d199b506 100644 --- a/src/wrapped/generated/wrappedlibnettle8types.h +++ b/src/wrapped/generated/wrappedlibnettle8types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibnettle8TYPES_H_ #define __wrappedlibnettle8TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibnettle8undefs.h b/src/wrapped/generated/wrappedlibnettle8undefs.h index 6f345ec341118fe5f4adec59f66242e657803206..ab536f79360f656182a71ffb5bd069bf7670dd9c 100644 --- a/src/wrapped/generated/wrappedlibnettle8undefs.h +++ b/src/wrapped/generated/wrappedlibnettle8undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibnettle8UNDEFS_H_ #define __wrappedlibnettle8UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibnumadefs.h b/src/wrapped/generated/wrappedlibnumadefs.h index dbbf945fb8141fa6783eeba7936d9d54dcb863c4..65b86439c4ce810f32c24a1104b5d4d32a84991f 100644 --- a/src/wrapped/generated/wrappedlibnumadefs.h +++ b/src/wrapped/generated/wrappedlibnumadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibnumaDEFS_H_ #define __wrappedlibnumaDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibnumatypes.h b/src/wrapped/generated/wrappedlibnumatypes.h index 722c2aaf34477688f53398766d94f4647f051bdc..c8ad7168475f6fa943027e6ba6d2f9de0929ffaf 100644 --- a/src/wrapped/generated/wrappedlibnumatypes.h +++ b/src/wrapped/generated/wrappedlibnumatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibnumaTYPES_H_ #define __wrappedlibnumaTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibnumaundefs.h b/src/wrapped/generated/wrappedlibnumaundefs.h index 37f78933471b1f22c852f189505a0349df66ad3c..6f282aeae47539e4ae170e1bed14edd3b2157bf6 100644 --- a/src/wrapped/generated/wrappedlibnumaundefs.h +++ b/src/wrapped/generated/wrappedlibnumaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibnumaUNDEFS_H_ #define __wrappedlibnumaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedliboggdefs.h b/src/wrapped/generated/wrappedliboggdefs.h index f890dfbfdaedda80ca6e158aa7e86ee5a3bb2a1b..3db8701eadacf470e24f7ec8581f005c4131f89d 100644 --- a/src/wrapped/generated/wrappedliboggdefs.h +++ b/src/wrapped/generated/wrappedliboggdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedliboggDEFS_H_ #define __wrappedliboggDEFS_H_ diff --git a/src/wrapped/generated/wrappedliboggtypes.h b/src/wrapped/generated/wrappedliboggtypes.h index 6ed06122d1ae3b5123f91c1d4b3b1340f37f2ed2..921fe55188340483ea703d168ddbf4f65b0ae8ce 100644 --- a/src/wrapped/generated/wrappedliboggtypes.h +++ b/src/wrapped/generated/wrappedliboggtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedliboggTYPES_H_ #define __wrappedliboggTYPES_H_ diff --git a/src/wrapped/generated/wrappedliboggundefs.h b/src/wrapped/generated/wrappedliboggundefs.h index d62105c271783f94e2e390150ca28916b2493df9..65e3f5402508424abbbb3518ccce901740a6a1d6 100644 --- a/src/wrapped/generated/wrappedliboggundefs.h +++ b/src/wrapped/generated/wrappedliboggundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedliboggUNDEFS_H_ #define __wrappedliboggUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpaneldefs.h b/src/wrapped/generated/wrappedlibpaneldefs.h index 05a0b2fa33b301dc83670a0e1e1f9a37400173e0..9ff7887a6563cd53a02dc22bebc73e15b9eb0c19 100644 --- a/src/wrapped/generated/wrappedlibpaneldefs.h +++ b/src/wrapped/generated/wrappedlibpaneldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibpanelDEFS_H_ #define __wrappedlibpanelDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpaneltypes.h b/src/wrapped/generated/wrappedlibpaneltypes.h index 6f55da2c3c770eed71bcf9938a9c4e9d6d9f6459..89fb144bb96133908ff4ea17d444ae632172ae4b 100644 --- a/src/wrapped/generated/wrappedlibpaneltypes.h +++ b/src/wrapped/generated/wrappedlibpaneltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibpanelTYPES_H_ #define __wrappedlibpanelTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibpanelundefs.h b/src/wrapped/generated/wrappedlibpanelundefs.h index 7725e7b2efccaf7f17edb78fb60819031bcafded..4ac9d964ca3923590c61b7633c98a49b2ea298a9 100644 --- a/src/wrapped/generated/wrappedlibpanelundefs.h +++ b/src/wrapped/generated/wrappedlibpanelundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibpanelUNDEFS_H_ #define __wrappedlibpanelUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpcidefs.h b/src/wrapped/generated/wrappedlibpcidefs.h index cb277a05dd5ced205038f7b722943988379048b5..5dca330976b75085e78aec26379e802a7ed76bc8 100644 --- a/src/wrapped/generated/wrappedlibpcidefs.h +++ b/src/wrapped/generated/wrappedlibpcidefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibpciDEFS_H_ #define __wrappedlibpciDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpcitypes.h b/src/wrapped/generated/wrappedlibpcitypes.h index 5c78181f04c0fc256d69aa343937ace080c89932..4d34fb56f14ab403c9ae939c028ad41277c62970 100644 --- a/src/wrapped/generated/wrappedlibpcitypes.h +++ b/src/wrapped/generated/wrappedlibpcitypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibpciTYPES_H_ #define __wrappedlibpciTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibpciundefs.h b/src/wrapped/generated/wrappedlibpciundefs.h index 88b3e89b541be5eb03e21f77b5d2edc093eebd0f..3698a1ccb47f133ce90e6e46d7ea252d58017468 100644 --- a/src/wrapped/generated/wrappedlibpciundefs.h +++ b/src/wrapped/generated/wrappedlibpciundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibpciUNDEFS_H_ #define __wrappedlibpciUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpcredefs.h b/src/wrapped/generated/wrappedlibpcredefs.h index aebe1a8cb76c64169a154bfcad4a273c96d14288..d37d27f9f4f492e5311b3da554ca05b0bbd38e70 100644 --- a/src/wrapped/generated/wrappedlibpcredefs.h +++ b/src/wrapped/generated/wrappedlibpcredefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibpcreDEFS_H_ #define __wrappedlibpcreDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpcretypes.h b/src/wrapped/generated/wrappedlibpcretypes.h index 379b86f44865af026797dcb7aed0bc600b05e1e8..f4444bef7a97aed6891a1f6eeb9736524954ed89 100644 --- a/src/wrapped/generated/wrappedlibpcretypes.h +++ b/src/wrapped/generated/wrappedlibpcretypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibpcreTYPES_H_ #define __wrappedlibpcreTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibpcreundefs.h b/src/wrapped/generated/wrappedlibpcreundefs.h index d25656d88232ca4eafdaa78a97f2a7c1de0b384d..1d7982fbd02a3861132995fa6cada71ac221ab1a 100644 --- a/src/wrapped/generated/wrappedlibpcreundefs.h +++ b/src/wrapped/generated/wrappedlibpcreundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibpcreUNDEFS_H_ #define __wrappedlibpcreUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpthreaddefs.h b/src/wrapped/generated/wrappedlibpthreaddefs.h index c45f1077e56de7db165af97c2ed943f5f2f6868f..f8aee87795f0c90a59c8715389f673ae8b403d67 100644 --- a/src/wrapped/generated/wrappedlibpthreaddefs.h +++ b/src/wrapped/generated/wrappedlibpthreaddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibpthreadDEFS_H_ #define __wrappedlibpthreadDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibpthreadtypes.h b/src/wrapped/generated/wrappedlibpthreadtypes.h index c9e5b1066f21680a0668134c427abaf84e2948be..2620f07e38a2cea6b05e9c3006b5a89193dc8d14 100644 --- a/src/wrapped/generated/wrappedlibpthreadtypes.h +++ b/src/wrapped/generated/wrappedlibpthreadtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibpthreadTYPES_H_ #define __wrappedlibpthreadTYPES_H_ @@ -39,8 +39,11 @@ typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); GO(pthread_barrierattr_destroy, iFp_t) \ GO(pthread_barrierattr_init, iFp_t) \ GO(pthread_cond_broadcast, iFp_t) \ + GO(pthread_cond_broadcast@GLIBC_2.2.5, iFp_t) \ GO(pthread_cond_destroy, iFp_t) \ + GO(pthread_cond_destroy@GLIBC_2.2.5, iFp_t) \ GO(pthread_cond_signal, iFp_t) \ + GO(pthread_cond_signal@GLIBC_2.2.5, iFp_t) \ GO(pthread_condattr_destroy, iFp_t) \ GO(pthread_condattr_init, iFp_t) \ GO(pthread_getattr_default_np, iFp_t) \ @@ -78,13 +81,17 @@ typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); GO(pthread_attr_getscope, iFpp_t) \ GO(pthread_attr_getstackaddr, iFpp_t) \ GO(pthread_attr_getstacksize, iFpp_t) \ + GO(pthread_attr_setaffinity_np@GLIBC_2.3.3, iFpp_t) \ GO(pthread_attr_setschedparam, iFpp_t) \ GO(pthread_attr_setstackaddr, iFpp_t) \ GO(pthread_barrierattr_getpshared, iFpp_t) \ GO(pthread_cond_init, iFpp_t) \ + GO(pthread_cond_init@GLIBC_2.2.5, iFpp_t) \ GO(pthread_cond_wait, iFpp_t) \ + GO(pthread_cond_wait@GLIBC_2.2.5, iFpp_t) \ GO(pthread_condattr_getclock, iFpp_t) \ GO(pthread_condattr_getpshared, iFpp_t) \ + GO(pthread_getaffinity_np@GLIBC_2.3.3, iFpp_t) \ GO(pthread_key_create, iFpp_t) \ GO(pthread_mutex_init, iFpp_t) \ GO(pthread_mutexattr_getkind_np, iFpp_t) \ @@ -92,6 +99,7 @@ typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); GO(pthread_mutexattr_getrobust, iFpp_t) \ GO(pthread_mutexattr_gettype, iFpp_t) \ GO(pthread_once, iFpp_t) \ + GO(pthread_setaffinity_np@GLIBC_2.3.3, iFpp_t) \ GO(_pthread_cleanup_push, vFppp_t) \ GO(_pthread_cleanup_push_defer, vFppp_t) \ GO(pthread_attr_setaffinity_np, iFpLp_t) \ @@ -103,6 +111,7 @@ typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); GO(pthread_atfork, iFppp_t) \ GO(pthread_attr_getstack, iFppp_t) \ GO(pthread_cond_timedwait, iFppp_t) \ + GO(pthread_cond_timedwait@GLIBC_2.2.5, iFppp_t) \ GO(pthread_cond_clockwait, iFppip_t) \ GO(pthread_create, iFpppp_t) diff --git a/src/wrapped/generated/wrappedlibpthreadundefs.h b/src/wrapped/generated/wrappedlibpthreadundefs.h index a54b5c82ee017d048cfc916b3ce6e2fca17cd375..6d80e3a50aecdb4abf68331f6f860c79eba6ebb6 100644 --- a/src/wrapped/generated/wrappedlibpthreadundefs.h +++ b/src/wrapped/generated/wrappedlibpthreadundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibpthreadUNDEFS_H_ #define __wrappedlibpthreadUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibresolvdefs.h b/src/wrapped/generated/wrappedlibresolvdefs.h index 5ccf7db3b236ed292a5d4ecad8896f7406adb263..a8e2963f00395a32b8bd54dde33e64b6f3bb8fdc 100644 --- a/src/wrapped/generated/wrappedlibresolvdefs.h +++ b/src/wrapped/generated/wrappedlibresolvdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibresolvDEFS_H_ #define __wrappedlibresolvDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibresolvtypes.h b/src/wrapped/generated/wrappedlibresolvtypes.h index 74f7c2565aeae25b992629a7b3b81f7b6ccc35fc..fe08db544064898bd05e75aec5d8a687b1ad8c17 100644 --- a/src/wrapped/generated/wrappedlibresolvtypes.h +++ b/src/wrapped/generated/wrappedlibresolvtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibresolvTYPES_H_ #define __wrappedlibresolvTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibresolvundefs.h b/src/wrapped/generated/wrappedlibresolvundefs.h index 964f358598c480f4a28eb85ac30833a6d2322531..aa1b91a9e64db31d83ad07d862bdc657c8415337 100644 --- a/src/wrapped/generated/wrappedlibresolvundefs.h +++ b/src/wrapped/generated/wrappedlibresolvundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibresolvUNDEFS_H_ #define __wrappedlibresolvUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibrtdefs.h b/src/wrapped/generated/wrappedlibrtdefs.h index 959c4e2f3d9f07648df7f2d57b9d51ca78a42505..75fb991007d0ac9b778b52fc872d97725da6437a 100644 --- a/src/wrapped/generated/wrappedlibrtdefs.h +++ b/src/wrapped/generated/wrappedlibrtdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibrtDEFS_H_ #define __wrappedlibrtDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibrttypes.h b/src/wrapped/generated/wrappedlibrttypes.h index bf1b3fd40b9cdfaa1fdd3645d8715687dbb5f53f..301f709927d5c4bd0bc0df72d74bf2ab88f90466 100644 --- a/src/wrapped/generated/wrappedlibrttypes.h +++ b/src/wrapped/generated/wrappedlibrttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibrtTYPES_H_ #define __wrappedlibrtTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibrtundefs.h b/src/wrapped/generated/wrappedlibrtundefs.h index 86a1a4e94531ffb4a17ae92d0e582ac93cffc08e..5901bccb57cf667789365cf16821d74da4598977 100644 --- a/src/wrapped/generated/wrappedlibrtundefs.h +++ b/src/wrapped/generated/wrappedlibrtundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibrtUNDEFS_H_ #define __wrappedlibrtUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsmdefs.h b/src/wrapped/generated/wrappedlibsmdefs.h index 6260b394008ab2ba6897cd21e535925f12ff1aeb..2fb561366a38ab2e48f75ddcd76406dfc47fd823 100644 --- a/src/wrapped/generated/wrappedlibsmdefs.h +++ b/src/wrapped/generated/wrappedlibsmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibsmDEFS_H_ #define __wrappedlibsmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsmtypes.h b/src/wrapped/generated/wrappedlibsmtypes.h index 0eef2429dfcda38cd70544a978fa10c279eb4220..65cc4d63cdcc599749a33f9414e9cf815d2a960c 100644 --- a/src/wrapped/generated/wrappedlibsmtypes.h +++ b/src/wrapped/generated/wrappedlibsmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibsmTYPES_H_ #define __wrappedlibsmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibsmundefs.h b/src/wrapped/generated/wrappedlibsmundefs.h index 174f1ec5c06be0d9bc5826478a8cfdb5cf3ac3b0..974bc0fc71fbb4f34d856bd040b057d58e724680 100644 --- a/src/wrapped/generated/wrappedlibsmundefs.h +++ b/src/wrapped/generated/wrappedlibsmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibsmUNDEFS_H_ #define __wrappedlibsmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsndfiledefs.h b/src/wrapped/generated/wrappedlibsndfiledefs.h index 32e25ee061efdc32fd0e2e3adc178d4960af5a1b..394daebb56dd5b0811fb695ab74730cd21e4df53 100644 --- a/src/wrapped/generated/wrappedlibsndfiledefs.h +++ b/src/wrapped/generated/wrappedlibsndfiledefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibsndfileDEFS_H_ #define __wrappedlibsndfileDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsndfiletypes.h b/src/wrapped/generated/wrappedlibsndfiletypes.h index 5d45b7880f5acae9078d9d864362472825da86fb..60090824eeb3ecc716d5bb97ad112e83dbf31171 100644 --- a/src/wrapped/generated/wrappedlibsndfiletypes.h +++ b/src/wrapped/generated/wrappedlibsndfiletypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibsndfileTYPES_H_ #define __wrappedlibsndfileTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibsndfileundefs.h b/src/wrapped/generated/wrappedlibsndfileundefs.h index 887c9b28ee7fc9085172844f82f7a1a8d3be063d..cbd5367a6522cf13fe93708f6c4a1d31250c1502 100644 --- a/src/wrapped/generated/wrappedlibsndfileundefs.h +++ b/src/wrapped/generated/wrappedlibsndfileundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibsndfileUNDEFS_H_ #define __wrappedlibsndfileUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsqlite3defs.h b/src/wrapped/generated/wrappedlibsqlite3defs.h index 95e690c65c1decbb1094f4ad6b10d2c998c0609a..7356c039b50f6a390bc520d59705b0b2d231bd6e 100644 --- a/src/wrapped/generated/wrappedlibsqlite3defs.h +++ b/src/wrapped/generated/wrappedlibsqlite3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibsqlite3DEFS_H_ #define __wrappedlibsqlite3DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibsqlite3types.h b/src/wrapped/generated/wrappedlibsqlite3types.h index b36662f691d23fa089b9d980e2450815d94a90a8..ddf07c9e52c49c8d9f3d9328f8af371407901eaf 100644 --- a/src/wrapped/generated/wrappedlibsqlite3types.h +++ b/src/wrapped/generated/wrappedlibsqlite3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibsqlite3TYPES_H_ #define __wrappedlibsqlite3TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibsqlite3undefs.h b/src/wrapped/generated/wrappedlibsqlite3undefs.h index 39570fed7b2ea09b6914419652f6a5f9c899db7e..2de4e848dd8099163851c8b0345f8174e51f7b68 100644 --- a/src/wrapped/generated/wrappedlibsqlite3undefs.h +++ b/src/wrapped/generated/wrappedlibsqlite3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibsqlite3UNDEFS_H_ #define __wrappedlibsqlite3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssh2defs.h b/src/wrapped/generated/wrappedlibssh2defs.h index 96ef86f34655bb3d4bed1bfe9392af999182e4ed..d4a36e6edbcbcd6dc03ee6f2159d3d0670f417b5 100644 --- a/src/wrapped/generated/wrappedlibssh2defs.h +++ b/src/wrapped/generated/wrappedlibssh2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibssh2DEFS_H_ #define __wrappedlibssh2DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssh2types.h b/src/wrapped/generated/wrappedlibssh2types.h index 3363c6c8930984939bc5661cdf22935d0430da21..4e8b306ee30a8ad3ff70b37abd65ff15d52c623d 100644 --- a/src/wrapped/generated/wrappedlibssh2types.h +++ b/src/wrapped/generated/wrappedlibssh2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibssh2TYPES_H_ #define __wrappedlibssh2TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibssh2undefs.h b/src/wrapped/generated/wrappedlibssh2undefs.h index 8c1109578e460e965a72a38907d06f8800c234e3..6675d37881687ade69ccd113793af28cc796003f 100644 --- a/src/wrapped/generated/wrappedlibssh2undefs.h +++ b/src/wrapped/generated/wrappedlibssh2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibssh2UNDEFS_H_ #define __wrappedlibssh2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssl3defs.h b/src/wrapped/generated/wrappedlibssl3defs.h index 0f2f7478c2b2311d4149d15519c318e288775bd3..46f6b05d97e20bbf372432ba9afdcf8ed4befdd2 100644 --- a/src/wrapped/generated/wrappedlibssl3defs.h +++ b/src/wrapped/generated/wrappedlibssl3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibssl3DEFS_H_ #define __wrappedlibssl3DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssl3types.h b/src/wrapped/generated/wrappedlibssl3types.h index ec7350572ba42ec79e2ac9ddd05a2fa58b58e822..ca4d878488face2cdd40e7b934cafa7b188c4e6b 100644 --- a/src/wrapped/generated/wrappedlibssl3types.h +++ b/src/wrapped/generated/wrappedlibssl3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibssl3TYPES_H_ #define __wrappedlibssl3TYPES_H_ @@ -13,6 +13,7 @@ typedef void* (*pFp_t)(void*); typedef void (*vFpp_t)(void*, void*); +typedef int32_t (*iFpp_t)(void*, void*); typedef void (*vFpip_t)(void*, int32_t, void*); typedef void (*vFppp_t)(void*, void*, void*); typedef intptr_t (*lFpip_t)(void*, int32_t, void*); @@ -22,12 +23,24 @@ typedef int32_t (*iFlpppp_t)(intptr_t, void*, void*, void*, void*); GO(SSL_CTX_get_default_passwd_cb, pFp_t) \ GO(SSL_CTX_get_verify_callback, pFp_t) \ GO(SSL_get_verify_callback, pFp_t) \ + GO(SSL_CTX_sess_set_new_cb, vFpp_t) \ GO(SSL_CTX_set_client_cert_cb, vFpp_t) \ + GO(SSL_CTX_set_cookie_generate_cb, vFpp_t) \ + GO(SSL_CTX_set_cookie_verify_cb, vFpp_t) \ GO(SSL_CTX_set_default_passwd_cb, vFpp_t) \ GO(SSL_CTX_set_keylog_callback, vFpp_t) \ GO(SSL_CTX_set_msg_callback, vFpp_t) \ + GO(SSL_set_info_callback, vFpp_t) \ GO(SSL_set_msg_callback, vFpp_t) \ GO(SSL_set_psk_client_callback, vFpp_t) \ + GO(SSL_set_psk_server_callback, vFpp_t) \ + GO(SSL_set_psk_use_session_callback, vFpp_t) \ + GO(BIO_meth_set_create, iFpp_t) \ + GO(BIO_meth_set_ctrl, iFpp_t) \ + GO(BIO_meth_set_destroy, iFpp_t) \ + GO(BIO_meth_set_puts, iFpp_t) \ + GO(BIO_meth_set_read, iFpp_t) \ + GO(BIO_meth_set_write, iFpp_t) \ GO(SSL_CTX_set_verify, vFpip_t) \ GO(SSL_set_verify, vFpip_t) \ GO(SSL_CTX_set_alpn_select_cb, vFppp_t) \ diff --git a/src/wrapped/generated/wrappedlibssl3undefs.h b/src/wrapped/generated/wrappedlibssl3undefs.h index 5c86c5e0449cb06fd7f9bafedea0ebd2add90de3..a1a25caed2dd3378ce2a0d768f88b27b75f38612 100644 --- a/src/wrapped/generated/wrappedlibssl3undefs.h +++ b/src/wrapped/generated/wrappedlibssl3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibssl3UNDEFS_H_ #define __wrappedlibssl3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssldefs.h b/src/wrapped/generated/wrappedlibssldefs.h index 55eceb3820d862ec7443b8c4135cd93df743a595..8e2162cfe048f7d7942a7cc8da21ad7b3ebbe96d 100644 --- a/src/wrapped/generated/wrappedlibssldefs.h +++ b/src/wrapped/generated/wrappedlibssldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibsslDEFS_H_ #define __wrappedlibsslDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibssltypes.h b/src/wrapped/generated/wrappedlibssltypes.h index d6d337f99e8595999562485d36b5d9a896ff1f8f..5c67186b6c02f53ebd8ea29d41d0f671a27c24ca 100644 --- a/src/wrapped/generated/wrappedlibssltypes.h +++ b/src/wrapped/generated/wrappedlibssltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibsslTYPES_H_ #define __wrappedlibsslTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibsslundefs.h b/src/wrapped/generated/wrappedlibsslundefs.h index 12278260a8ce0370a1f3994d9d9bcd5f7967257c..414522e15209482921b29d1c23d5375a3f24c76f 100644 --- a/src/wrapped/generated/wrappedlibsslundefs.h +++ b/src/wrapped/generated/wrappedlibsslundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibsslUNDEFS_H_ #define __wrappedlibsslUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtasn1defs.h b/src/wrapped/generated/wrappedlibtasn1defs.h index 6a4d7bdc9b031bb78f2ab31614c07af636543e9b..da7fd02fc877219f85ddba0e9ebb28eec435cb3e 100644 --- a/src/wrapped/generated/wrappedlibtasn1defs.h +++ b/src/wrapped/generated/wrappedlibtasn1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibtasn1DEFS_H_ #define __wrappedlibtasn1DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtasn1types.h b/src/wrapped/generated/wrappedlibtasn1types.h index 02a76bb5bed9c4a2f77234ed51b20ed20d0b7fcf..91ef0f42838d682b6f2caf2cba2be49676f4f26c 100644 --- a/src/wrapped/generated/wrappedlibtasn1types.h +++ b/src/wrapped/generated/wrappedlibtasn1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibtasn1TYPES_H_ #define __wrappedlibtasn1TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibtasn1undefs.h b/src/wrapped/generated/wrappedlibtasn1undefs.h index 0e9c168125fb1471b70fcac6aeb6fb8ce859f2cf..575667bfc45e0bcd1981e7d8659e4a7029d8560f 100644 --- a/src/wrapped/generated/wrappedlibtasn1undefs.h +++ b/src/wrapped/generated/wrappedlibtasn1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibtasn1UNDEFS_H_ #define __wrappedlibtasn1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtiff5defs.h b/src/wrapped/generated/wrappedlibtiff5defs.h index 6e9af05de9de510af8afbe616da80da4dcdbbb08..d2cbfdbf8e52a05a91823760397d8d0b34e808d0 100644 --- a/src/wrapped/generated/wrappedlibtiff5defs.h +++ b/src/wrapped/generated/wrappedlibtiff5defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibtiff5DEFS_H_ #define __wrappedlibtiff5DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtiff5types.h b/src/wrapped/generated/wrappedlibtiff5types.h index eb9f8ad76e5576412ff4bea72267dfcbd010555a..b414406f0f210d04e5f2afae63f7dececede8994 100644 --- a/src/wrapped/generated/wrappedlibtiff5types.h +++ b/src/wrapped/generated/wrappedlibtiff5types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibtiff5TYPES_H_ #define __wrappedlibtiff5TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibtiff5undefs.h b/src/wrapped/generated/wrappedlibtiff5undefs.h index ced3df315b1f1aae39cecfd0a636f2d5439b497d..0e30e23f7abbc3c5a9a5f17fbbbc2a71716a02c0 100644 --- a/src/wrapped/generated/wrappedlibtiff5undefs.h +++ b/src/wrapped/generated/wrappedlibtiff5undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibtiff5UNDEFS_H_ #define __wrappedlibtiff5UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtinfo6defs.h b/src/wrapped/generated/wrappedlibtinfo6defs.h index 72facfae72c85c22b71523b7fa405fcd6e8deef7..3c4e51fef38a16178db245cc23e36456abdd559a 100644 --- a/src/wrapped/generated/wrappedlibtinfo6defs.h +++ b/src/wrapped/generated/wrappedlibtinfo6defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibtinfo6DEFS_H_ #define __wrappedlibtinfo6DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtinfo6types.h b/src/wrapped/generated/wrappedlibtinfo6types.h index e195221bb4fd8a09c2892066e6d35baa5bcd4c47..818cbf2d617d178035374a3ae6087896c13f9e83 100644 --- a/src/wrapped/generated/wrappedlibtinfo6types.h +++ b/src/wrapped/generated/wrappedlibtinfo6types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibtinfo6TYPES_H_ #define __wrappedlibtinfo6TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibtinfo6undefs.h b/src/wrapped/generated/wrappedlibtinfo6undefs.h index cf063debe9eb3a4b91d5f472d70aefb1aa9dca96..45af4bac0ca19fe19fa5c3b2b90da74c84bc7efe 100644 --- a/src/wrapped/generated/wrappedlibtinfo6undefs.h +++ b/src/wrapped/generated/wrappedlibtinfo6undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibtinfo6UNDEFS_H_ #define __wrappedlibtinfo6UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtinfodefs.h b/src/wrapped/generated/wrappedlibtinfodefs.h index a04196f370a05611c64d2f38fdc9c0d2115243db..e2be6489acfd4b607b92d2d496df35170f09d177 100644 --- a/src/wrapped/generated/wrappedlibtinfodefs.h +++ b/src/wrapped/generated/wrappedlibtinfodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibtinfoDEFS_H_ #define __wrappedlibtinfoDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibtinfotypes.h b/src/wrapped/generated/wrappedlibtinfotypes.h index e2762449e5ac20b4a7fc53905d988c360d215961..13a5f801563def96ae31ea96bd6bcc8a71b163f2 100644 --- a/src/wrapped/generated/wrappedlibtinfotypes.h +++ b/src/wrapped/generated/wrappedlibtinfotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibtinfoTYPES_H_ #define __wrappedlibtinfoTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibtinfoundefs.h b/src/wrapped/generated/wrappedlibtinfoundefs.h index 0321595803616b17230d983682f45aca21c38718..f9e63c67ef9a9860fed6093a6724c0ce21aded3f 100644 --- a/src/wrapped/generated/wrappedlibtinfoundefs.h +++ b/src/wrapped/generated/wrappedlibtinfoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibtinfoUNDEFS_H_ #define __wrappedlibtinfoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibunistring2defs.h b/src/wrapped/generated/wrappedlibunistring2defs.h index 52044144c7830e87d0c1e1f8e52f6e53b8907a9e..15848c90e173d939615d2550cff57f86fe8a7b74 100644 --- a/src/wrapped/generated/wrappedlibunistring2defs.h +++ b/src/wrapped/generated/wrappedlibunistring2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibunistring2DEFS_H_ #define __wrappedlibunistring2DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibunistring2types.h b/src/wrapped/generated/wrappedlibunistring2types.h index 25a30d9ebba6cfd6933a9049c47938babe6a4ee8..f62b0291f0be41422d010fd51da225c5f4f7cb02 100644 --- a/src/wrapped/generated/wrappedlibunistring2types.h +++ b/src/wrapped/generated/wrappedlibunistring2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibunistring2TYPES_H_ #define __wrappedlibunistring2TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibunistring2undefs.h b/src/wrapped/generated/wrappedlibunistring2undefs.h index 88de83f155697782af64d74a1b44dab44dea78c6..ca0248889e991fc8bf085084c7d77570b911c3ee 100644 --- a/src/wrapped/generated/wrappedlibunistring2undefs.h +++ b/src/wrapped/generated/wrappedlibunistring2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibunistring2UNDEFS_H_ #define __wrappedlibunistring2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibusb1defs.h b/src/wrapped/generated/wrappedlibusb1defs.h index 9da71f8ac9cae398d8d6baa8e756270189cec913..6e026874bdc5388457de89622f043394fe9645d9 100644 --- a/src/wrapped/generated/wrappedlibusb1defs.h +++ b/src/wrapped/generated/wrappedlibusb1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibusb1DEFS_H_ #define __wrappedlibusb1DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibusb1types.h b/src/wrapped/generated/wrappedlibusb1types.h index 9155c25b7136bc38e070d36ba5ad380a8969b68a..19e07b65b394a46fb363da52727405694b313840 100644 --- a/src/wrapped/generated/wrappedlibusb1types.h +++ b/src/wrapped/generated/wrappedlibusb1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibusb1TYPES_H_ #define __wrappedlibusb1TYPES_H_ @@ -11,11 +11,13 @@ #define ADDED_FUNCTIONS() #endif +typedef void (*vFp_t)(void*); typedef int32_t (*iFp_t)(void*); typedef void* (*pFi_t)(int32_t); typedef int32_t (*iFpiiiiippp_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t, void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ + GO(libusb_free_transfer, vFp_t) \ GO(libusb_cancel_transfer, iFp_t) \ GO(libusb_submit_transfer, iFp_t) \ GO(libusb_alloc_transfer, pFi_t) \ diff --git a/src/wrapped/generated/wrappedlibusb1undefs.h b/src/wrapped/generated/wrappedlibusb1undefs.h index 99ee492fed12131b793519144e54e1fe8fc5db8e..5481ef8522adf39b2176a1351a03305145847f17 100644 --- a/src/wrapped/generated/wrappedlibusb1undefs.h +++ b/src/wrapped/generated/wrappedlibusb1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibusb1UNDEFS_H_ #define __wrappedlibusb1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibuuiddefs.h b/src/wrapped/generated/wrappedlibuuiddefs.h index c20d4b6350a5dc66471fd7e90d0bfff6e2ab20de..1198ca129db19af90a48f56c0f0cf51586fa1006 100644 --- a/src/wrapped/generated/wrappedlibuuiddefs.h +++ b/src/wrapped/generated/wrappedlibuuiddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibuuidDEFS_H_ #define __wrappedlibuuidDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibuuidtypes.h b/src/wrapped/generated/wrappedlibuuidtypes.h index a39b43d1abbbff123536461e266538f48fa08782..b8c28647fc0a1f30e113e1e3927749845e9304a3 100644 --- a/src/wrapped/generated/wrappedlibuuidtypes.h +++ b/src/wrapped/generated/wrappedlibuuidtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibuuidTYPES_H_ #define __wrappedlibuuidTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibuuidundefs.h b/src/wrapped/generated/wrappedlibuuidundefs.h index e705970052293c1d55cec97bb82517728224181b..e1e4720907386617caf82c0776fe9c6b2a682405 100644 --- a/src/wrapped/generated/wrappedlibuuidundefs.h +++ b/src/wrapped/generated/wrappedlibuuidundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibuuidUNDEFS_H_ #define __wrappedlibuuidUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvadefs.h b/src/wrapped/generated/wrappedlibvadefs.h index 40decd84ae3d1fd888454829e6fc9936456947f5..d5c99fda4e5404594636576d84c91e5e88636b45 100644 --- a/src/wrapped/generated/wrappedlibvadefs.h +++ b/src/wrapped/generated/wrappedlibvadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvaDEFS_H_ #define __wrappedlibvaDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvadrmdefs.h b/src/wrapped/generated/wrappedlibvadrmdefs.h index 359d70632dc10160509a520b4ee3d4f09f86e585..f102ff5a9a0af73d6a22792b5c17795ec31368b7 100644 --- a/src/wrapped/generated/wrappedlibvadrmdefs.h +++ b/src/wrapped/generated/wrappedlibvadrmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvadrmDEFS_H_ #define __wrappedlibvadrmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvadrmtypes.h b/src/wrapped/generated/wrappedlibvadrmtypes.h index b1d9979b65c5adad0fb82e3e4c19ca7970a18156..84975040b8c34554d79297810f57a88211392316 100644 --- a/src/wrapped/generated/wrappedlibvadrmtypes.h +++ b/src/wrapped/generated/wrappedlibvadrmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvadrmTYPES_H_ #define __wrappedlibvadrmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvadrmundefs.h b/src/wrapped/generated/wrappedlibvadrmundefs.h index a729302d69fb05b384ff68c9026c33d2825a561c..5655e59157fec50bc84f8768905ab422fe5b105b 100644 --- a/src/wrapped/generated/wrappedlibvadrmundefs.h +++ b/src/wrapped/generated/wrappedlibvadrmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvadrmUNDEFS_H_ #define __wrappedlibvadrmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvatypes.h b/src/wrapped/generated/wrappedlibvatypes.h index 3eac0367d077a57bcd9e4babd8bc25c8dcccb48a..4bd02993567f5ddba5c0b47884f73cd8f25531cc 100644 --- a/src/wrapped/generated/wrappedlibvatypes.h +++ b/src/wrapped/generated/wrappedlibvatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvaTYPES_H_ #define __wrappedlibvaTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvaundefs.h b/src/wrapped/generated/wrappedlibvaundefs.h index ed6dde192bdb850cc7232ebd53d8336f5a2d02e8..dc1df60c55a61090ab8a07b0b7b7320fc5bce4bb 100644 --- a/src/wrapped/generated/wrappedlibvaundefs.h +++ b/src/wrapped/generated/wrappedlibvaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvaUNDEFS_H_ #define __wrappedlibvaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvawaylanddefs.h b/src/wrapped/generated/wrappedlibvawaylanddefs.h index 02a7e4b15cf6902b004b7b9fa5c6c654add835a1..4c7f6ff99f07c47e30ac287a9a18177c1ab781d1 100644 --- a/src/wrapped/generated/wrappedlibvawaylanddefs.h +++ b/src/wrapped/generated/wrappedlibvawaylanddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvawaylandDEFS_H_ #define __wrappedlibvawaylandDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvawaylandtypes.h b/src/wrapped/generated/wrappedlibvawaylandtypes.h index 96e1861e59a04e66949af085b1aca589f6b60d51..dd867e5a52806d4fb7ce6fa9252123df75891300 100644 --- a/src/wrapped/generated/wrappedlibvawaylandtypes.h +++ b/src/wrapped/generated/wrappedlibvawaylandtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvawaylandTYPES_H_ #define __wrappedlibvawaylandTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvawaylandundefs.h b/src/wrapped/generated/wrappedlibvawaylandundefs.h index 62a23ae0e9b885c1709d3515d74bd8dca85642b5..f6e6709106cf8b6890ff330d568a114c32c4283f 100644 --- a/src/wrapped/generated/wrappedlibvawaylandundefs.h +++ b/src/wrapped/generated/wrappedlibvawaylandundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvawaylandUNDEFS_H_ #define __wrappedlibvawaylandUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvax11defs.h b/src/wrapped/generated/wrappedlibvax11defs.h index afa9f011162aa277ed03abfceb8fdace6c1d5110..faec3084fdcfa67ea868ed7f8faafc4a3b78cad6 100644 --- a/src/wrapped/generated/wrappedlibvax11defs.h +++ b/src/wrapped/generated/wrappedlibvax11defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvax11DEFS_H_ #define __wrappedlibvax11DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvax11types.h b/src/wrapped/generated/wrappedlibvax11types.h index 118aad9bd6fc9de7413368ffea752e56ea24edba..467c73da98016ce4078fa97509e1ed925be9c37f 100644 --- a/src/wrapped/generated/wrappedlibvax11types.h +++ b/src/wrapped/generated/wrappedlibvax11types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvax11TYPES_H_ #define __wrappedlibvax11TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvax11undefs.h b/src/wrapped/generated/wrappedlibvax11undefs.h index 265614f6df057e40461ea5231eed7ca425a80c77..e4107ddb961e792e58d34d50a5cee5168f4c2d50 100644 --- a/src/wrapped/generated/wrappedlibvax11undefs.h +++ b/src/wrapped/generated/wrappedlibvax11undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvax11UNDEFS_H_ #define __wrappedlibvax11UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvdpaudefs.h b/src/wrapped/generated/wrappedlibvdpaudefs.h index 5a073777b92dd0b5961c63fe44501f0240b1eb38..8aa78ac9ef78735966a1bae5cae1622ae7926e28 100644 --- a/src/wrapped/generated/wrappedlibvdpaudefs.h +++ b/src/wrapped/generated/wrappedlibvdpaudefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvdpauDEFS_H_ #define __wrappedlibvdpauDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvdpautypes.h b/src/wrapped/generated/wrappedlibvdpautypes.h index 8c04102336582554d8e1bd1e6125c70ac56bc557..d7e7c13bc11a7e2960a6b50c7ef150e5fe97fd69 100644 --- a/src/wrapped/generated/wrappedlibvdpautypes.h +++ b/src/wrapped/generated/wrappedlibvdpautypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvdpauTYPES_H_ #define __wrappedlibvdpauTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvdpauundefs.h b/src/wrapped/generated/wrappedlibvdpauundefs.h index 3f7baa67ad26172c60d9a95042fd0eb7a5118bb7..b25bf8b850736385f7c09d4ff3743f652fe3170e 100644 --- a/src/wrapped/generated/wrappedlibvdpauundefs.h +++ b/src/wrapped/generated/wrappedlibvdpauundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvdpauUNDEFS_H_ #define __wrappedlibvdpauUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvorbisdefs.h b/src/wrapped/generated/wrappedlibvorbisdefs.h index 73d6d3feae80bc4fcc3a3bdbb8dff3ba6d05a781..26ce50445f6df62ee90546e2d471abda650a84bf 100644 --- a/src/wrapped/generated/wrappedlibvorbisdefs.h +++ b/src/wrapped/generated/wrappedlibvorbisdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvorbisDEFS_H_ #define __wrappedlibvorbisDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibvorbistypes.h b/src/wrapped/generated/wrappedlibvorbistypes.h index b90ae75ccb6f53777c0c6d602f127c584cd35bfb..a649736bea79873073c4ac9c37c7c774498cb14f 100644 --- a/src/wrapped/generated/wrappedlibvorbistypes.h +++ b/src/wrapped/generated/wrappedlibvorbistypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvorbisTYPES_H_ #define __wrappedlibvorbisTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibvorbisundefs.h b/src/wrapped/generated/wrappedlibvorbisundefs.h index 75f1028bb0c6db2c49076b2e02c183b987403210..4a13ae259f4db867a13f808c6a2c2608792a7a08 100644 --- a/src/wrapped/generated/wrappedlibvorbisundefs.h +++ b/src/wrapped/generated/wrappedlibvorbisundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibvorbisUNDEFS_H_ #define __wrappedlibvorbisUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibx11defs.h b/src/wrapped/generated/wrappedlibx11defs.h index 9c6afd1fa82b4cdd695409e2cc6406d6005c3c66..b5a50ae4b79d93198c997f4343d9ecd9040fcc6a 100644 --- a/src/wrapped/generated/wrappedlibx11defs.h +++ b/src/wrapped/generated/wrappedlibx11defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibx11DEFS_H_ #define __wrappedlibx11DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibx11types.h b/src/wrapped/generated/wrappedlibx11types.h index f712ce534a01c340a2b376345831f00857a42cc5..15ab5a8d0dad88bcea0b653b9a2aca0c9d0f6b89 100644 --- a/src/wrapped/generated/wrappedlibx11types.h +++ b/src/wrapped/generated/wrappedlibx11types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibx11TYPES_H_ #define __wrappedlibx11TYPES_H_ @@ -11,6 +11,7 @@ #define ADDED_FUNCTIONS() #endif +typedef void (*vFp_t)(void*); typedef int32_t (*iFp_t)(void*); typedef void* (*pFp_t)(void*); typedef void (*vFpp_t)(void*, void*); @@ -18,20 +19,23 @@ typedef void* (*pFiV_t)(int32_t, ...); typedef void* (*pFpi_t)(void*, int32_t); typedef void* (*pFpp_t)(void*, void*); typedef void* (*pFpV_t)(void*, ...); +typedef void (*vFppp_t)(void*, void*, void*); typedef int32_t (*iFppp_t)(void*, void*, void*); typedef void* (*pFpip_t)(void*, int32_t, void*); -typedef void* (*pFpuL_t)(void*, uint32_t, uintptr_t); +typedef void* (*pFpCL_t)(void*, uint8_t, uintptr_t); typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); typedef int32_t (*iFppppp_t)(void*, void*, void*, void*, void*); typedef int32_t (*iFpppppp_t)(void*, void*, void*, void*, void*, void*); -typedef void* (*pFppiiuuLi_t)(void*, void*, int32_t, int32_t, uint32_t, uint32_t, uintptr_t, int32_t); -typedef int32_t (*iFppppiiiiuu_t)(void*, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); +typedef void* (*pFpLiiuuLi_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uintptr_t, int32_t); +typedef int32_t (*iFpLppiiiiuu_t)(void*, uintptr_t, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); typedef void* (*pFppuiipuuii_t)(void*, void*, uint32_t, int32_t, int32_t, void*, uint32_t, uint32_t, int32_t, int32_t); -typedef void* (*pFppiiuuuipii_t)(void*, void*, int32_t, int32_t, uint32_t, uint32_t, uint32_t, int32_t, void*, int32_t, int32_t); +typedef void* (*pFpLiiuuLipii_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uintptr_t, int32_t, void*, int32_t, int32_t); #define SUPER() ADDED_FUNCTIONS() \ + GO(XcmsFreeCCC, vFp_t) \ GO(XDestroyImage, iFp_t) \ GO(XInitImage, iFp_t) \ + GO(_XInitImageFuncPtrs, iFp_t) \ GO(XOpenDisplay, pFp_t) \ GO(XSetErrorHandler, pFp_t) \ GO(XSetIOErrorHandler, pFp_t) \ @@ -42,22 +46,22 @@ typedef void* (*pFppiiuuuipii_t)(void*, void*, int32_t, int32_t, uint32_t, uint3 GO(XCreateIC, pFpV_t) \ GO(XSetICValues, pFpV_t) \ GO(XSetIMValues, pFpV_t) \ + GO(XRemoveConnectionWatch, vFppp_t) \ GO(XAddConnectionWatch, iFppp_t) \ - GO(XRemoveConnectionWatch, iFppp_t) \ GO(XESetCloseDisplay, pFpip_t) \ GO(XESetError, pFpip_t) \ GO(XESetEventToWire, pFpip_t) \ GO(XESetWireToEvent, pFpip_t) \ - GO(_XGetRequest, pFpuL_t) \ + GO(_XGetRequest, pFpCL_t) \ GO(XCheckIfEvent, iFpppp_t) \ GO(XIfEvent, iFpppp_t) \ GO(XPeekIfEvent, iFpppp_t) \ GO(XQueryExtension, iFppppp_t) \ GO(XRegisterIMInstantiateCallback, iFpppppp_t) \ GO(XUnregisterIMInstantiateCallback, iFpppppp_t) \ - GO(XGetImage, pFppiiuuLi_t) \ - GO(XPutImage, iFppppiiiiuu_t) \ + GO(XGetImage, pFpLiiuuLi_t) \ + GO(XPutImage, iFpLppiiiiuu_t) \ GO(XCreateImage, pFppuiipuuii_t) \ - GO(XGetSubImage, pFppiiuuuipii_t) + GO(XGetSubImage, pFpLiiuuLipii_t) #endif // __wrappedlibx11TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibx11undefs.h b/src/wrapped/generated/wrappedlibx11undefs.h index 4fe5929e97a39c6bb13454f3dd443713069b4f1b..0d95b8fa0e500805a2f526af741c4a8e9e3a8c3f 100644 --- a/src/wrapped/generated/wrappedlibx11undefs.h +++ b/src/wrapped/generated/wrappedlibx11undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibx11UNDEFS_H_ #define __wrappedlibx11UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibx11xcbdefs.h b/src/wrapped/generated/wrappedlibx11xcbdefs.h index ffa5c2d99182313a893b3104d15cfa4747a9cf78..5bd394f67e7d2ff167d4adb1038637cbb8c682d9 100644 --- a/src/wrapped/generated/wrappedlibx11xcbdefs.h +++ b/src/wrapped/generated/wrappedlibx11xcbdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibx11xcbDEFS_H_ #define __wrappedlibx11xcbDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibx11xcbtypes.h b/src/wrapped/generated/wrappedlibx11xcbtypes.h index 0e534c64f7e003654de8202078142f29188adcfd..90320e2f91caeb648ff97fe5df0075bd74bbcd3e 100644 --- a/src/wrapped/generated/wrappedlibx11xcbtypes.h +++ b/src/wrapped/generated/wrappedlibx11xcbtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibx11xcbTYPES_H_ #define __wrappedlibx11xcbTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibx11xcbundefs.h b/src/wrapped/generated/wrappedlibx11xcbundefs.h index ed02c5923e7e16724750301bff15817d30cc6f5a..27fa701e681a55cf700b55bf68541634b956cefe 100644 --- a/src/wrapped/generated/wrappedlibx11xcbundefs.h +++ b/src/wrapped/generated/wrappedlibx11xcbundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibx11xcbUNDEFS_H_ #define __wrappedlibx11xcbUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxaudefs.h b/src/wrapped/generated/wrappedlibxaudefs.h index 293e44876802eb51afde2b73b9765954aece3d4a..8d0be0efa98bd484a5757aaa5b477ae63010a49d 100644 --- a/src/wrapped/generated/wrappedlibxaudefs.h +++ b/src/wrapped/generated/wrappedlibxaudefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxauDEFS_H_ #define __wrappedlibxauDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxautypes.h b/src/wrapped/generated/wrappedlibxautypes.h index a19e2da680e2b358a83e4d40ab37d20aa963fdc1..6804781faa2631c7db378b09792c445bec4cc031 100644 --- a/src/wrapped/generated/wrappedlibxautypes.h +++ b/src/wrapped/generated/wrappedlibxautypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxauTYPES_H_ #define __wrappedlibxauTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxauundefs.h b/src/wrapped/generated/wrappedlibxauundefs.h index 27c78c60e2c4f4e0582fe9e5630df2d3ebc023eb..da445e3b1d72c76adb3b59c9c15bac008ea6e472 100644 --- a/src/wrapped/generated/wrappedlibxauundefs.h +++ b/src/wrapped/generated/wrappedlibxauundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxauUNDEFS_H_ #define __wrappedlibxauUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxawdefs.h b/src/wrapped/generated/wrappedlibxawdefs.h new file mode 100644 index 0000000000000000000000000000000000000000..f1d514ffb573331a5ae3946165608a3264f8727e --- /dev/null +++ b/src/wrapped/generated/wrappedlibxawdefs.h @@ -0,0 +1,8 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedlibxawDEFS_H_ +#define __wrappedlibxawDEFS_H_ + + +#endif // __wrappedlibxawDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxawtypes.h b/src/wrapped/generated/wrappedlibxawtypes.h new file mode 100644 index 0000000000000000000000000000000000000000..372df77d7b12fa020558be541a9d3fd05906282d --- /dev/null +++ b/src/wrapped/generated/wrappedlibxawtypes.h @@ -0,0 +1,17 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedlibxawTYPES_H_ +#define __wrappedlibxawTYPES_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedlibxawTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxawundefs.h b/src/wrapped/generated/wrappedlibxawundefs.h new file mode 100644 index 0000000000000000000000000000000000000000..c43d8479adb137553516e716b8437cb5dfd94425 --- /dev/null +++ b/src/wrapped/generated/wrappedlibxawundefs.h @@ -0,0 +1,8 @@ +/******************************************************************* + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * + *******************************************************************/ +#ifndef __wrappedlibxawUNDEFS_H_ +#define __wrappedlibxawUNDEFS_H_ + + +#endif // __wrappedlibxawUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbcursordefs.h b/src/wrapped/generated/wrappedlibxcbcursordefs.h index 7db154a51a1c495fbe43c966802aa21e7420fc08..e257fe9ae4045fb2a716b60d4e24bce40de447a0 100644 --- a/src/wrapped/generated/wrappedlibxcbcursordefs.h +++ b/src/wrapped/generated/wrappedlibxcbcursordefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbcursorDEFS_H_ #define __wrappedlibxcbcursorDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbcursortypes.h b/src/wrapped/generated/wrappedlibxcbcursortypes.h index e2dfeddb803c93b2d68d084dc1ac3f37edcac74a..3185891c9732e60ccab6e4146b3dd283b8f22524 100644 --- a/src/wrapped/generated/wrappedlibxcbcursortypes.h +++ b/src/wrapped/generated/wrappedlibxcbcursortypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbcursorTYPES_H_ #define __wrappedlibxcbcursorTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbcursorundefs.h b/src/wrapped/generated/wrappedlibxcbcursorundefs.h index d85e57f907497436dd9f51e2d78ab35fb9490560..10579510796788ab124a4020bf7d2d9e6c453c58 100644 --- a/src/wrapped/generated/wrappedlibxcbcursorundefs.h +++ b/src/wrapped/generated/wrappedlibxcbcursorundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbcursorUNDEFS_H_ #define __wrappedlibxcbcursorUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdefs.h b/src/wrapped/generated/wrappedlibxcbdefs.h index 62930d683a138b28e56ad739534921fdf8119c72..ea4d317ab65dbc3be7ea118801d12f282f2b94f7 100644 --- a/src/wrapped/generated/wrappedlibxcbdefs.h +++ b/src/wrapped/generated/wrappedlibxcbdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbDEFS_H_ #define __wrappedlibxcbDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri2defs.h b/src/wrapped/generated/wrappedlibxcbdri2defs.h index a0914c45a7503cd13bf32b3cc421e75226439589..5599d971aa6b5513a5395d1bb45ea3590c0575e2 100644 --- a/src/wrapped/generated/wrappedlibxcbdri2defs.h +++ b/src/wrapped/generated/wrappedlibxcbdri2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbdri2DEFS_H_ #define __wrappedlibxcbdri2DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri2types.h b/src/wrapped/generated/wrappedlibxcbdri2types.h index e483d4553838efae66698bd291cfbfda245d7a85..85237fedc71d56103e84408a241d3ae0bb8f583d 100644 --- a/src/wrapped/generated/wrappedlibxcbdri2types.h +++ b/src/wrapped/generated/wrappedlibxcbdri2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbdri2TYPES_H_ #define __wrappedlibxcbdri2TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri2undefs.h b/src/wrapped/generated/wrappedlibxcbdri2undefs.h index 39e96e07b1645afc0d72062e2c39818b317c7237..0c8f219d50860fee4b36779c98aabf0212e7b598 100644 --- a/src/wrapped/generated/wrappedlibxcbdri2undefs.h +++ b/src/wrapped/generated/wrappedlibxcbdri2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbdri2UNDEFS_H_ #define __wrappedlibxcbdri2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri3defs.h b/src/wrapped/generated/wrappedlibxcbdri3defs.h index 2a1d6aa612f2e395435ba102c552b9f466622517..2ee1c8d400a1c05daee1c88ceafd1d1aa794ec22 100644 --- a/src/wrapped/generated/wrappedlibxcbdri3defs.h +++ b/src/wrapped/generated/wrappedlibxcbdri3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbdri3DEFS_H_ #define __wrappedlibxcbdri3DEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri3types.h b/src/wrapped/generated/wrappedlibxcbdri3types.h index c3928807feca0a51ce6e067f02a0b8c7b411d450..225486eae8e6dc9bc987ec325a4605be95f013ca 100644 --- a/src/wrapped/generated/wrappedlibxcbdri3types.h +++ b/src/wrapped/generated/wrappedlibxcbdri3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbdri3TYPES_H_ #define __wrappedlibxcbdri3TYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbdri3undefs.h b/src/wrapped/generated/wrappedlibxcbdri3undefs.h index f28e6dbb4657e17b86864f41cb81e694348745af..753ce0c34b374fdb192d6b7a09c1ab7895224e34 100644 --- a/src/wrapped/generated/wrappedlibxcbdri3undefs.h +++ b/src/wrapped/generated/wrappedlibxcbdri3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbdri3UNDEFS_H_ #define __wrappedlibxcbdri3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbglxdefs.h b/src/wrapped/generated/wrappedlibxcbglxdefs.h index 892bafebf19850862a2704afad4273af34608e8d..75e846b067eedeb4b7f4d2e4d60a88ca1463a4a6 100644 --- a/src/wrapped/generated/wrappedlibxcbglxdefs.h +++ b/src/wrapped/generated/wrappedlibxcbglxdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbglxDEFS_H_ #define __wrappedlibxcbglxDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbglxtypes.h b/src/wrapped/generated/wrappedlibxcbglxtypes.h index fba2309c9cd37e31d81e335e3b42d6e2dc1acd5f..8863c67a9fdb7e06ae0c952462152df517fe9bca 100644 --- a/src/wrapped/generated/wrappedlibxcbglxtypes.h +++ b/src/wrapped/generated/wrappedlibxcbglxtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbglxTYPES_H_ #define __wrappedlibxcbglxTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbglxundefs.h b/src/wrapped/generated/wrappedlibxcbglxundefs.h index 03aa022edc58161b988fd3e128d133e60858e4f6..5cc2817651ff52a915b13e33110c6d9ff799fbb3 100644 --- a/src/wrapped/generated/wrappedlibxcbglxundefs.h +++ b/src/wrapped/generated/wrappedlibxcbglxundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbglxUNDEFS_H_ #define __wrappedlibxcbglxUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbicccmdefs.h b/src/wrapped/generated/wrappedlibxcbicccmdefs.h index 553bf71cb16432b809dbac2988d948b89e7f43b3..7bbaeb62ddbec254028f56eba1ff28829f302478 100644 --- a/src/wrapped/generated/wrappedlibxcbicccmdefs.h +++ b/src/wrapped/generated/wrappedlibxcbicccmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbicccmDEFS_H_ #define __wrappedlibxcbicccmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbicccmtypes.h b/src/wrapped/generated/wrappedlibxcbicccmtypes.h index baeff95c6d1cab172f258cce23030e72d1d61227..43cc9bb7eb34d3ee65ad488ad55be426b0754db7 100644 --- a/src/wrapped/generated/wrappedlibxcbicccmtypes.h +++ b/src/wrapped/generated/wrappedlibxcbicccmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbicccmTYPES_H_ #define __wrappedlibxcbicccmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbicccmundefs.h b/src/wrapped/generated/wrappedlibxcbicccmundefs.h index 85117de9f22819cd40fe904cbae30e2250826565..0b859ad1980c5c4a3df9958a00e5568de6365830 100644 --- a/src/wrapped/generated/wrappedlibxcbicccmundefs.h +++ b/src/wrapped/generated/wrappedlibxcbicccmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbicccmUNDEFS_H_ #define __wrappedlibxcbicccmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbimagedefs.h b/src/wrapped/generated/wrappedlibxcbimagedefs.h index 851c2f0246c202aca65772504ab417afaab815b7..440fd11e9b863f972366a549acba6def2f738a9a 100644 --- a/src/wrapped/generated/wrappedlibxcbimagedefs.h +++ b/src/wrapped/generated/wrappedlibxcbimagedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbimageDEFS_H_ #define __wrappedlibxcbimageDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbimagetypes.h b/src/wrapped/generated/wrappedlibxcbimagetypes.h index cde1840e361e6e504737c7e76cc5d348a78884fd..c3aeb02e872b380b97fb034d6b85fbc8aef17b75 100644 --- a/src/wrapped/generated/wrappedlibxcbimagetypes.h +++ b/src/wrapped/generated/wrappedlibxcbimagetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbimageTYPES_H_ #define __wrappedlibxcbimageTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbimageundefs.h b/src/wrapped/generated/wrappedlibxcbimageundefs.h index bbcba65f2b2c0c0293827770dec40f58cccc53e5..f1f9e6e6633005ba0a426feea27e5d0a9156b723 100644 --- a/src/wrapped/generated/wrappedlibxcbimageundefs.h +++ b/src/wrapped/generated/wrappedlibxcbimageundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbimageUNDEFS_H_ #define __wrappedlibxcbimageUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbkeysymsdefs.h b/src/wrapped/generated/wrappedlibxcbkeysymsdefs.h index dacaad5a0c175743224a5245bf9446b193e361c9..1f7cd646ca326fd7e7af5036a4871663e3f5c4ea 100644 --- a/src/wrapped/generated/wrappedlibxcbkeysymsdefs.h +++ b/src/wrapped/generated/wrappedlibxcbkeysymsdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbkeysymsDEFS_H_ #define __wrappedlibxcbkeysymsDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbkeysymstypes.h b/src/wrapped/generated/wrappedlibxcbkeysymstypes.h index e2772cc2a4edac9de0d0571d1d3553aaa53927f3..95bff65e677c75e40672b39774644d2bde820bfa 100644 --- a/src/wrapped/generated/wrappedlibxcbkeysymstypes.h +++ b/src/wrapped/generated/wrappedlibxcbkeysymstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbkeysymsTYPES_H_ #define __wrappedlibxcbkeysymsTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbkeysymsundefs.h b/src/wrapped/generated/wrappedlibxcbkeysymsundefs.h index 28e2aba8cf7ae0f8e8b42934c2024eb6d8f2061c..2d3cdf1cbda575a95e32b2dff449d14995d685da 100644 --- a/src/wrapped/generated/wrappedlibxcbkeysymsundefs.h +++ b/src/wrapped/generated/wrappedlibxcbkeysymsundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbkeysymsUNDEFS_H_ #define __wrappedlibxcbkeysymsUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbpresentdefs.h b/src/wrapped/generated/wrappedlibxcbpresentdefs.h index bc8a3af828c9da4b19419e314509961ada053361..9f61f10c2e9fadb803f4f5272daef200767a7c19 100644 --- a/src/wrapped/generated/wrappedlibxcbpresentdefs.h +++ b/src/wrapped/generated/wrappedlibxcbpresentdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbpresentDEFS_H_ #define __wrappedlibxcbpresentDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbpresenttypes.h b/src/wrapped/generated/wrappedlibxcbpresenttypes.h index 23250753bb8a46afb5715864fcacbf000257c60e..900620c6105e57fc8ba8f48f1466d7bf74c01b5e 100644 --- a/src/wrapped/generated/wrappedlibxcbpresenttypes.h +++ b/src/wrapped/generated/wrappedlibxcbpresenttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbpresentTYPES_H_ #define __wrappedlibxcbpresentTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbpresentundefs.h b/src/wrapped/generated/wrappedlibxcbpresentundefs.h index 0443c7a88044395745c1188a11ecfda322dbfa87..0d92fe168ee3df866dc6d5937532dd199ef016c1 100644 --- a/src/wrapped/generated/wrappedlibxcbpresentundefs.h +++ b/src/wrapped/generated/wrappedlibxcbpresentundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbpresentUNDEFS_H_ #define __wrappedlibxcbpresentUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrandrdefs.h b/src/wrapped/generated/wrappedlibxcbrandrdefs.h index 9b44fc0613361ee8b9faa60564615da68e0147a9..3dc72c5c6d312fa7971fd7d8d44b965bd238270b 100644 --- a/src/wrapped/generated/wrappedlibxcbrandrdefs.h +++ b/src/wrapped/generated/wrappedlibxcbrandrdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbrandrDEFS_H_ #define __wrappedlibxcbrandrDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrandrtypes.h b/src/wrapped/generated/wrappedlibxcbrandrtypes.h index dad5eee190f797fb2230e606b8490a164c53d050..fb61dd4b5930e1a8fb521c6cbe7e01b4ba3359df 100644 --- a/src/wrapped/generated/wrappedlibxcbrandrtypes.h +++ b/src/wrapped/generated/wrappedlibxcbrandrtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbrandrTYPES_H_ #define __wrappedlibxcbrandrTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrandrundefs.h b/src/wrapped/generated/wrappedlibxcbrandrundefs.h index 5c329360348e967e1cc5bcc11f51db4fdc8e8ca0..5c0f99efbee351fcd48eb5f5cbefc67c7e50e328 100644 --- a/src/wrapped/generated/wrappedlibxcbrandrundefs.h +++ b/src/wrapped/generated/wrappedlibxcbrandrundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbrandrUNDEFS_H_ #define __wrappedlibxcbrandrUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderdefs.h b/src/wrapped/generated/wrappedlibxcbrenderdefs.h index da0f873689e812ec105a5991e92d720d7ccb7ad6..25d161508aa87c50e9b639d4e72835a43ad41e57 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderdefs.h +++ b/src/wrapped/generated/wrappedlibxcbrenderdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbrenderDEFS_H_ #define __wrappedlibxcbrenderDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrendertypes.h b/src/wrapped/generated/wrappedlibxcbrendertypes.h index 750fd61637fe85ef872663078481f59bddfe4bbd..c0f48635b97112c7247fd34ee6918dc9f8562690 100644 --- a/src/wrapped/generated/wrappedlibxcbrendertypes.h +++ b/src/wrapped/generated/wrappedlibxcbrendertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbrenderTYPES_H_ #define __wrappedlibxcbrenderTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderundefs.h b/src/wrapped/generated/wrappedlibxcbrenderundefs.h index 2a14ad1bc12205a7cef6059b87a9c7caf12c50a8..e0527b8cce23dee7b98445313177d46b3f4d5a41 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderundefs.h +++ b/src/wrapped/generated/wrappedlibxcbrenderundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbrenderUNDEFS_H_ #define __wrappedlibxcbrenderUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderutildefs.h b/src/wrapped/generated/wrappedlibxcbrenderutildefs.h index 5270f1f776c5e548487abdb4a5f9c50b384762d5..fcf11b782e889ff2acfb31bcf7887456afd3568d 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderutildefs.h +++ b/src/wrapped/generated/wrappedlibxcbrenderutildefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbrenderutilDEFS_H_ #define __wrappedlibxcbrenderutilDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderutiltypes.h b/src/wrapped/generated/wrappedlibxcbrenderutiltypes.h index 2ce0dd81a209a49231d732413b81a140a3a26bfb..46139f51806bd7aa4db9de539d371dbef8f9618f 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderutiltypes.h +++ b/src/wrapped/generated/wrappedlibxcbrenderutiltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbrenderutilTYPES_H_ #define __wrappedlibxcbrenderutilTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbrenderutilundefs.h b/src/wrapped/generated/wrappedlibxcbrenderutilundefs.h index 3b556168ea3972f93920ee557b2d92419c5f5a19..a0d725c41e94dfe00c88a137cfdf7391e4a11c04 100644 --- a/src/wrapped/generated/wrappedlibxcbrenderutilundefs.h +++ b/src/wrapped/generated/wrappedlibxcbrenderutilundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbrenderutilUNDEFS_H_ #define __wrappedlibxcbrenderutilUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshapedefs.h b/src/wrapped/generated/wrappedlibxcbshapedefs.h index 23f5ccb65031df3457f0d2f7d1f48abb1d74a492..bd6d5e13ecbf87e38f9fdcd55e0a491427683f66 100644 --- a/src/wrapped/generated/wrappedlibxcbshapedefs.h +++ b/src/wrapped/generated/wrappedlibxcbshapedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbshapeDEFS_H_ #define __wrappedlibxcbshapeDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshapetypes.h b/src/wrapped/generated/wrappedlibxcbshapetypes.h index c794e0bea016ad2ff93a2f6054422425a9bd4c82..78d0c1864edd4c81a026a761cf827992392a5fc2 100644 --- a/src/wrapped/generated/wrappedlibxcbshapetypes.h +++ b/src/wrapped/generated/wrappedlibxcbshapetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbshapeTYPES_H_ #define __wrappedlibxcbshapeTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshapeundefs.h b/src/wrapped/generated/wrappedlibxcbshapeundefs.h index 1ec642f0e5976c9ec1819e531b6cce6bfe6edda0..2e299ad24afee15d472325e326551219d34ccf94 100644 --- a/src/wrapped/generated/wrappedlibxcbshapeundefs.h +++ b/src/wrapped/generated/wrappedlibxcbshapeundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbshapeUNDEFS_H_ #define __wrappedlibxcbshapeUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshmdefs.h b/src/wrapped/generated/wrappedlibxcbshmdefs.h index 584c4710b5ea78288ae085c67938c24806d8f2bf..8aaf4fb2ec3ef1b22d1414fc0e25c2d008ef5322 100644 --- a/src/wrapped/generated/wrappedlibxcbshmdefs.h +++ b/src/wrapped/generated/wrappedlibxcbshmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbshmDEFS_H_ #define __wrappedlibxcbshmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshmtypes.h b/src/wrapped/generated/wrappedlibxcbshmtypes.h index 82a85b4a1ddbcc8a7c310329da2b7d8ee7821721..8249f92d90182976703df986bc819cc1f1dec6e6 100644 --- a/src/wrapped/generated/wrappedlibxcbshmtypes.h +++ b/src/wrapped/generated/wrappedlibxcbshmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbshmTYPES_H_ #define __wrappedlibxcbshmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbshmundefs.h b/src/wrapped/generated/wrappedlibxcbshmundefs.h index eccdb49e498e0960dfdc405fc3e973e25852086f..0b56dd8a2ca25472f3b3ef95cc6f2d29a1e24c09 100644 --- a/src/wrapped/generated/wrappedlibxcbshmundefs.h +++ b/src/wrapped/generated/wrappedlibxcbshmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbshmUNDEFS_H_ #define __wrappedlibxcbshmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbsyncdefs.h b/src/wrapped/generated/wrappedlibxcbsyncdefs.h index 91787f30d39a8f975c306600ae894fddbbd767bf..ac406e316f7a565ac914ce493fd96d0e4129c881 100644 --- a/src/wrapped/generated/wrappedlibxcbsyncdefs.h +++ b/src/wrapped/generated/wrappedlibxcbsyncdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbsyncDEFS_H_ #define __wrappedlibxcbsyncDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbsynctypes.h b/src/wrapped/generated/wrappedlibxcbsynctypes.h index ef4d5445c99c4cc7ca80b9e07dc5eaa2d7423224..17e9e645c7c23bf53aec5ed59eb0d7933092d853 100644 --- a/src/wrapped/generated/wrappedlibxcbsynctypes.h +++ b/src/wrapped/generated/wrappedlibxcbsynctypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbsyncTYPES_H_ #define __wrappedlibxcbsyncTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbsyncundefs.h b/src/wrapped/generated/wrappedlibxcbsyncundefs.h index 14b58ac82b281f4e7b8c25c14b450abcbe42afbe..2d23ea517d2048e3cb2dafac3b822024a5f3b2aa 100644 --- a/src/wrapped/generated/wrappedlibxcbsyncundefs.h +++ b/src/wrapped/generated/wrappedlibxcbsyncundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbsyncUNDEFS_H_ #define __wrappedlibxcbsyncUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbtypes.h b/src/wrapped/generated/wrappedlibxcbtypes.h index 61e03f249f9284dc8d2e3728f8646fbf44b88282..9fd1c529b201249192bfedad13c7ad44fbf15972 100644 --- a/src/wrapped/generated/wrappedlibxcbtypes.h +++ b/src/wrapped/generated/wrappedlibxcbtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbTYPES_H_ #define __wrappedlibxcbTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbundefs.h b/src/wrapped/generated/wrappedlibxcbundefs.h index 679ee1613a13b3fafaa69f698a19ec67d55bbbe7..29c92e79c4c913270d1e08a67e0e8067fd61c2f7 100644 --- a/src/wrapped/generated/wrappedlibxcbundefs.h +++ b/src/wrapped/generated/wrappedlibxcbundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbUNDEFS_H_ #define __wrappedlibxcbUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbutildefs.h b/src/wrapped/generated/wrappedlibxcbutildefs.h index 5eaeeaaae9b1c23582f377a13c443198b3c28be1..4731171432763dfe677ebe549cc32ddff38ee5c2 100644 --- a/src/wrapped/generated/wrappedlibxcbutildefs.h +++ b/src/wrapped/generated/wrappedlibxcbutildefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbutilDEFS_H_ #define __wrappedlibxcbutilDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbutiltypes.h b/src/wrapped/generated/wrappedlibxcbutiltypes.h index 5d9e643787da6f61baa04dedbe1908e1c14ff34d..c94d824804154f0c55ff6cfc532c3b13bd7eb597 100644 --- a/src/wrapped/generated/wrappedlibxcbutiltypes.h +++ b/src/wrapped/generated/wrappedlibxcbutiltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbutilTYPES_H_ #define __wrappedlibxcbutilTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbutilundefs.h b/src/wrapped/generated/wrappedlibxcbutilundefs.h index d1776c6ed833f4cdf31e8c44107a6baf8de214f0..ef834286f41846475c26a350939442591d20c9f7 100644 --- a/src/wrapped/generated/wrappedlibxcbutilundefs.h +++ b/src/wrapped/generated/wrappedlibxcbutilundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbutilUNDEFS_H_ #define __wrappedlibxcbutilUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxfixesdefs.h b/src/wrapped/generated/wrappedlibxcbxfixesdefs.h index 580a33eb992f1d8dde35007f67dced9123f2dcba..871468f911746a21455f2885681a51aeb45f9054 100644 --- a/src/wrapped/generated/wrappedlibxcbxfixesdefs.h +++ b/src/wrapped/generated/wrappedlibxcbxfixesdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxfixesDEFS_H_ #define __wrappedlibxcbxfixesDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxfixestypes.h b/src/wrapped/generated/wrappedlibxcbxfixestypes.h index 4bcc978023f0d8344908441af05579f4f3d2e149..96f02630e4559a0bc05846dab593b1132d7a310e 100644 --- a/src/wrapped/generated/wrappedlibxcbxfixestypes.h +++ b/src/wrapped/generated/wrappedlibxcbxfixestypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxfixesTYPES_H_ #define __wrappedlibxcbxfixesTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxfixesundefs.h b/src/wrapped/generated/wrappedlibxcbxfixesundefs.h index 9976a6874e81376974d4fe5cd00e604cba8af87b..90553b863fff1b14532d78e61333f09d3149f977 100644 --- a/src/wrapped/generated/wrappedlibxcbxfixesundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxfixesundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxfixesUNDEFS_H_ #define __wrappedlibxcbxfixesUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxineramadefs.h b/src/wrapped/generated/wrappedlibxcbxineramadefs.h index ad2731096e3243054fba83d64123a684fa935822..4b816c82efcf94d5a5197744400dca185c9abaf9 100644 --- a/src/wrapped/generated/wrappedlibxcbxineramadefs.h +++ b/src/wrapped/generated/wrappedlibxcbxineramadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxineramaDEFS_H_ #define __wrappedlibxcbxineramaDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxineramatypes.h b/src/wrapped/generated/wrappedlibxcbxineramatypes.h index 98d9667e97c61ef56e8c1868adc7d2a750341811..c0fba444a4573c997a0fd1c1138a185cdb79e727 100644 --- a/src/wrapped/generated/wrappedlibxcbxineramatypes.h +++ b/src/wrapped/generated/wrappedlibxcbxineramatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxineramaTYPES_H_ #define __wrappedlibxcbxineramaTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxineramaundefs.h b/src/wrapped/generated/wrappedlibxcbxineramaundefs.h index 70103e11885b9a7bc25c38d64d557c183ea5f90b..905e4418920ca3ae9cb5d8b003dc5e91e472d136 100644 --- a/src/wrapped/generated/wrappedlibxcbxineramaundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxineramaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxineramaUNDEFS_H_ #define __wrappedlibxcbxineramaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxinputdefs.h b/src/wrapped/generated/wrappedlibxcbxinputdefs.h index 0811efbe70b9a3e6e8415351881ad8c0b2369923..a5c14f6d3a0f603033abe90491039d239155c186 100644 --- a/src/wrapped/generated/wrappedlibxcbxinputdefs.h +++ b/src/wrapped/generated/wrappedlibxcbxinputdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxinputDEFS_H_ #define __wrappedlibxcbxinputDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxinputtypes.h b/src/wrapped/generated/wrappedlibxcbxinputtypes.h index 366fe68c0ae8169fcb9c0d2b5781f08994b951c0..e5560c80de167667d822c718940feadfde0bc533 100644 --- a/src/wrapped/generated/wrappedlibxcbxinputtypes.h +++ b/src/wrapped/generated/wrappedlibxcbxinputtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxinputTYPES_H_ #define __wrappedlibxcbxinputTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxinputundefs.h b/src/wrapped/generated/wrappedlibxcbxinputundefs.h index 8e638afa550bbba3e23d80074c753f647f957841..8fb5cba78a02a601c57c4325978f15e8e57a738b 100644 --- a/src/wrapped/generated/wrappedlibxcbxinputundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxinputundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxinputUNDEFS_H_ #define __wrappedlibxcbxinputUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxkbdefs.h b/src/wrapped/generated/wrappedlibxcbxkbdefs.h index 21f98e204e18f0149f46b2e221894944cda6abaa..76e89fe9d83fc5017fa4fd1e75d21e63e19d0e2d 100644 --- a/src/wrapped/generated/wrappedlibxcbxkbdefs.h +++ b/src/wrapped/generated/wrappedlibxcbxkbdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxkbDEFS_H_ #define __wrappedlibxcbxkbDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxkbtypes.h b/src/wrapped/generated/wrappedlibxcbxkbtypes.h index cb2f33bd0a7028cff45b31c7d0d18dc517bad965..d6baf00c47582a230962032142ac43acb3e7f11f 100644 --- a/src/wrapped/generated/wrappedlibxcbxkbtypes.h +++ b/src/wrapped/generated/wrappedlibxcbxkbtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxkbTYPES_H_ #define __wrappedlibxcbxkbTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxkbundefs.h b/src/wrapped/generated/wrappedlibxcbxkbundefs.h index 7fa787a453271e895561367af7f514cc917048fd..b400456486d156b441314a2f3e72d10c96c18567 100644 --- a/src/wrapped/generated/wrappedlibxcbxkbundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxkbundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxkbUNDEFS_H_ #define __wrappedlibxcbxkbUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxtestdefs.h b/src/wrapped/generated/wrappedlibxcbxtestdefs.h index a68e8d860c5de46bcb9132a07f7bfd26404fff44..5ceabea284d219d851f85a46bd04c306162ef766 100644 --- a/src/wrapped/generated/wrappedlibxcbxtestdefs.h +++ b/src/wrapped/generated/wrappedlibxcbxtestdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxtestDEFS_H_ #define __wrappedlibxcbxtestDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxtesttypes.h b/src/wrapped/generated/wrappedlibxcbxtesttypes.h index 3583dd74b93e20edca6d5e79afe96635ebd1354b..10d071e02378e0096a741ca24d1f26837e233a3a 100644 --- a/src/wrapped/generated/wrappedlibxcbxtesttypes.h +++ b/src/wrapped/generated/wrappedlibxcbxtesttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxtestTYPES_H_ #define __wrappedlibxcbxtestTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcbxtestundefs.h b/src/wrapped/generated/wrappedlibxcbxtestundefs.h index 552c01ad20d16e1030bcb4d33c8f8167b9925590..1a5b8fd047f3f22a86ecb5da445be92e03be9bc2 100644 --- a/src/wrapped/generated/wrappedlibxcbxtestundefs.h +++ b/src/wrapped/generated/wrappedlibxcbxtestundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcbxtestUNDEFS_H_ #define __wrappedlibxcbxtestUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcompositedefs.h b/src/wrapped/generated/wrappedlibxcompositedefs.h index 4228a448c6c59728e844ae49daee923fc62eedb4..7b03014ed733f6836efeb871f30985cb402e2937 100644 --- a/src/wrapped/generated/wrappedlibxcompositedefs.h +++ b/src/wrapped/generated/wrappedlibxcompositedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcompositeDEFS_H_ #define __wrappedlibxcompositeDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcompositetypes.h b/src/wrapped/generated/wrappedlibxcompositetypes.h index 0cda0e120fd8751b3b917696f9b694901052e3c3..ac90a93a2d7495c73474d0b0c041c98f3cdcf41d 100644 --- a/src/wrapped/generated/wrappedlibxcompositetypes.h +++ b/src/wrapped/generated/wrappedlibxcompositetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcompositeTYPES_H_ #define __wrappedlibxcompositeTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcompositeundefs.h b/src/wrapped/generated/wrappedlibxcompositeundefs.h index 98be8e6212fce91eb22edd055895fe34e4581900..2b26075dead7dfb1f3a97a893bd647b4cce0ca5d 100644 --- a/src/wrapped/generated/wrappedlibxcompositeundefs.h +++ b/src/wrapped/generated/wrappedlibxcompositeundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcompositeUNDEFS_H_ #define __wrappedlibxcompositeUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcursordefs.h b/src/wrapped/generated/wrappedlibxcursordefs.h index 1394578d15b0da47b8b63e0473aae8ac9c3e57a3..6cb216ebec833fe0beefbe240b4e69e4acb1d7c4 100644 --- a/src/wrapped/generated/wrappedlibxcursordefs.h +++ b/src/wrapped/generated/wrappedlibxcursordefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcursorDEFS_H_ #define __wrappedlibxcursorDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxcursortypes.h b/src/wrapped/generated/wrappedlibxcursortypes.h index cb21afd2658b08ab5823bfcd0c4664f6a674ac04..7794adcf481e1d1fc67ea7fc5743e48bd7837cd2 100644 --- a/src/wrapped/generated/wrappedlibxcursortypes.h +++ b/src/wrapped/generated/wrappedlibxcursortypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcursorTYPES_H_ #define __wrappedlibxcursorTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxcursorundefs.h b/src/wrapped/generated/wrappedlibxcursorundefs.h index e64c250313fa7ddd194b47ee99b6de1699df2099..5a72d7bcb7798111bdc8c14f9581e39437c620b7 100644 --- a/src/wrapped/generated/wrappedlibxcursorundefs.h +++ b/src/wrapped/generated/wrappedlibxcursorundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxcursorUNDEFS_H_ #define __wrappedlibxcursorUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxdamagedefs.h b/src/wrapped/generated/wrappedlibxdamagedefs.h index f9ffdd4e9f1866194218d566a1fc8092fff885af..f26532076be4630407d903a10150359da4d5190d 100644 --- a/src/wrapped/generated/wrappedlibxdamagedefs.h +++ b/src/wrapped/generated/wrappedlibxdamagedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxdamageDEFS_H_ #define __wrappedlibxdamageDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxdamagetypes.h b/src/wrapped/generated/wrappedlibxdamagetypes.h index 4aa79cfc6a17055e9f940ef12458d4490d81521f..26b5c376c92888c5d1bd30324916ca91ad7749cc 100644 --- a/src/wrapped/generated/wrappedlibxdamagetypes.h +++ b/src/wrapped/generated/wrappedlibxdamagetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxdamageTYPES_H_ #define __wrappedlibxdamageTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxdamageundefs.h b/src/wrapped/generated/wrappedlibxdamageundefs.h index 3a0c70eb61d7b7aee02770d43d09f45dc6a720fc..7770fca6db1a511a215daa55da6db41877049e9d 100644 --- a/src/wrapped/generated/wrappedlibxdamageundefs.h +++ b/src/wrapped/generated/wrappedlibxdamageundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxdamageUNDEFS_H_ #define __wrappedlibxdamageUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxdmcpdefs.h b/src/wrapped/generated/wrappedlibxdmcpdefs.h index df3bff9b9ea3bb3aafaf42bc03900d4d6aed7cb7..68521d3d18b5e580dc8ce3afe95f92fb96c6fe04 100644 --- a/src/wrapped/generated/wrappedlibxdmcpdefs.h +++ b/src/wrapped/generated/wrappedlibxdmcpdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxdmcpDEFS_H_ #define __wrappedlibxdmcpDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxdmcptypes.h b/src/wrapped/generated/wrappedlibxdmcptypes.h index fec3d45d7050b1e985ac50d916e5b45a27fd6b12..ab62a58634a939356afbd73ecfccf24119323f3a 100644 --- a/src/wrapped/generated/wrappedlibxdmcptypes.h +++ b/src/wrapped/generated/wrappedlibxdmcptypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxdmcpTYPES_H_ #define __wrappedlibxdmcpTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxdmcpundefs.h b/src/wrapped/generated/wrappedlibxdmcpundefs.h index 9158ebe667b37015f605fd1c39eef44e96fb5151..91d2443aca780e6211f0d6100d3a620a6f563ec2 100644 --- a/src/wrapped/generated/wrappedlibxdmcpundefs.h +++ b/src/wrapped/generated/wrappedlibxdmcpundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxdmcpUNDEFS_H_ #define __wrappedlibxdmcpUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxextdefs.h b/src/wrapped/generated/wrappedlibxextdefs.h index f10ce9b7d23264f236400c1ad72431adc233a427..c667f298936235ecdacc89dd7db4552bd48bef37 100644 --- a/src/wrapped/generated/wrappedlibxextdefs.h +++ b/src/wrapped/generated/wrappedlibxextdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxextDEFS_H_ #define __wrappedlibxextDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxexttypes.h b/src/wrapped/generated/wrappedlibxexttypes.h index 75f71c1dd67866264a013f28b14af3c247a440e5..1f8f010e0b049eb1027d3077d4069cf817d78a0e 100644 --- a/src/wrapped/generated/wrappedlibxexttypes.h +++ b/src/wrapped/generated/wrappedlibxexttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxextTYPES_H_ #define __wrappedlibxextTYPES_H_ @@ -12,16 +12,16 @@ #endif typedef void* (*pFp_t)(void*); -typedef int32_t (*iFpppiiu_t)(void*, void*, void*, int32_t, int32_t, uint32_t); +typedef int32_t (*iFpLpiiL_t)(void*, uintptr_t, void*, int32_t, int32_t, uintptr_t); typedef void* (*pFppppip_t)(void*, void*, void*, void*, int32_t, void*); typedef void* (*pFppuippuu_t)(void*, void*, uint32_t, int32_t, void*, void*, uint32_t, uint32_t); -typedef int32_t (*iFppppiiiiuui_t)(void*, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t); +typedef int32_t (*iFpLppiiiiuui_t)(void*, uintptr_t, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t); #define SUPER() ADDED_FUNCTIONS() \ GO(XSetExtensionErrorHandler, pFp_t) \ - GO(XShmGetImage, iFpppiiu_t) \ + GO(XShmGetImage, iFpLpiiL_t) \ GO(XextAddDisplay, pFppppip_t) \ GO(XShmCreateImage, pFppuippuu_t) \ - GO(XShmPutImage, iFppppiiiiuui_t) + GO(XShmPutImage, iFpLppiiiiuui_t) #endif // __wrappedlibxextTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxextundefs.h b/src/wrapped/generated/wrappedlibxextundefs.h index f80c8e0297ac141d2a11b4bc56237f8d922c342a..90b6af9918c07e0305bca5f507748f3dd9330fad 100644 --- a/src/wrapped/generated/wrappedlibxextundefs.h +++ b/src/wrapped/generated/wrappedlibxextundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxextUNDEFS_H_ #define __wrappedlibxextUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxfixesdefs.h b/src/wrapped/generated/wrappedlibxfixesdefs.h index 71736ae8180b361ea55335702396642091fa414a..3e5a616755d4962cc67cf120dcab6451257eec77 100644 --- a/src/wrapped/generated/wrappedlibxfixesdefs.h +++ b/src/wrapped/generated/wrappedlibxfixesdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxfixesDEFS_H_ #define __wrappedlibxfixesDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxfixestypes.h b/src/wrapped/generated/wrappedlibxfixestypes.h index 38ebb612d6c4d3fa744cea8907ad28dca46ca28f..81f9e308bb0d96e1eea7c87e6704082d7812dacf 100644 --- a/src/wrapped/generated/wrappedlibxfixestypes.h +++ b/src/wrapped/generated/wrappedlibxfixestypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxfixesTYPES_H_ #define __wrappedlibxfixesTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxfixesundefs.h b/src/wrapped/generated/wrappedlibxfixesundefs.h index a6c33724a5c54c43ca5a2002988c460da2f97416..35adee2561f033586cad7965d8cbb66ecc6cbb7b 100644 --- a/src/wrapped/generated/wrappedlibxfixesundefs.h +++ b/src/wrapped/generated/wrappedlibxfixesundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxfixesUNDEFS_H_ #define __wrappedlibxfixesUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxftdefs.h b/src/wrapped/generated/wrappedlibxftdefs.h index bce3a592fae54c9f1301e43f82c9fd462caa1c9c..2943352e680385241cab993d1167400dfb2b45c5 100644 --- a/src/wrapped/generated/wrappedlibxftdefs.h +++ b/src/wrapped/generated/wrappedlibxftdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxftDEFS_H_ #define __wrappedlibxftDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxfttypes.h b/src/wrapped/generated/wrappedlibxfttypes.h index f2a1391ad10fa6e4eb477dfa708dc080ccd0da2e..dbd1a0a00b2c37a58ff9effe65f08c1295ac6ccd 100644 --- a/src/wrapped/generated/wrappedlibxfttypes.h +++ b/src/wrapped/generated/wrappedlibxfttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxftTYPES_H_ #define __wrappedlibxftTYPES_H_ @@ -11,7 +11,9 @@ #define ADDED_FUNCTIONS() #endif +typedef void* (*pFpiV_t)(void*, int32_t, ...); -#define SUPER() ADDED_FUNCTIONS() +#define SUPER() ADDED_FUNCTIONS() \ + GO(XftFontOpen, pFpiV_t) #endif // __wrappedlibxftTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxftundefs.h b/src/wrapped/generated/wrappedlibxftundefs.h index 04b418cfc0468e3b61890a6ce6533ef339edf1bc..375b6ba24a695f515e321b6c212f05c963add0fb 100644 --- a/src/wrapped/generated/wrappedlibxftundefs.h +++ b/src/wrapped/generated/wrappedlibxftundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxftUNDEFS_H_ #define __wrappedlibxftUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxidefs.h b/src/wrapped/generated/wrappedlibxidefs.h index 685eb51a492fe2594d63f3ae446a17a615708abf..aa1a595d9bd64935638b4cf36c9e6f26745c9071 100644 --- a/src/wrapped/generated/wrappedlibxidefs.h +++ b/src/wrapped/generated/wrappedlibxidefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxiDEFS_H_ #define __wrappedlibxiDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxitypes.h b/src/wrapped/generated/wrappedlibxitypes.h index fc4bcdd70f70575c4e11c166da9cf9315e1752c2..a27c19400779c9e1cca6b2f2d8948e0937c0fbd2 100644 --- a/src/wrapped/generated/wrappedlibxitypes.h +++ b/src/wrapped/generated/wrappedlibxitypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxiTYPES_H_ #define __wrappedlibxiTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxiundefs.h b/src/wrapped/generated/wrappedlibxiundefs.h index 0278ade64dd569e75c91abb264dea263994982e9..884a66d75c29f9234b77a35a455cf92eadf99f59 100644 --- a/src/wrapped/generated/wrappedlibxiundefs.h +++ b/src/wrapped/generated/wrappedlibxiundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxiUNDEFS_H_ #define __wrappedlibxiUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxmudefs.h b/src/wrapped/generated/wrappedlibxmudefs.h index 22d0c80332adb47cad588ecf5ac07a49d98788ac..af7764a3e7cec15860f80b08a61c2a41d5b508ee 100644 --- a/src/wrapped/generated/wrappedlibxmudefs.h +++ b/src/wrapped/generated/wrappedlibxmudefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxmuDEFS_H_ #define __wrappedlibxmuDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxmutypes.h b/src/wrapped/generated/wrappedlibxmutypes.h index 4661c307fbb82b6aeb30a9c11f479db39d49ae66..901cee9e43865b33316fc61b00f83fff448eccfa 100644 --- a/src/wrapped/generated/wrappedlibxmutypes.h +++ b/src/wrapped/generated/wrappedlibxmutypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxmuTYPES_H_ #define __wrappedlibxmuTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxmuundefs.h b/src/wrapped/generated/wrappedlibxmuundefs.h index 9539c36cac0506d76eb2e1c3898d6094bafecadd..bc9bec0b79683edb9154504252191d6b3a9f1222 100644 --- a/src/wrapped/generated/wrappedlibxmuundefs.h +++ b/src/wrapped/generated/wrappedlibxmuundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxmuUNDEFS_H_ #define __wrappedlibxmuUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxpmdefs.h b/src/wrapped/generated/wrappedlibxpmdefs.h index df70f671896fd651ebe37dc30d7622c77c209052..52d2ede81d327cc4d35b85857ea1fd7f69fa9520 100644 --- a/src/wrapped/generated/wrappedlibxpmdefs.h +++ b/src/wrapped/generated/wrappedlibxpmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxpmDEFS_H_ #define __wrappedlibxpmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxpmtypes.h b/src/wrapped/generated/wrappedlibxpmtypes.h index d2e9f2c40f2a0bd9db6defb67924dbc80f5e8cdd..a370a37cf4ed405bcdfe8bfa4cf89692ae2e5287 100644 --- a/src/wrapped/generated/wrappedlibxpmtypes.h +++ b/src/wrapped/generated/wrappedlibxpmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxpmTYPES_H_ #define __wrappedlibxpmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxpmundefs.h b/src/wrapped/generated/wrappedlibxpmundefs.h index 895939f15aa224359562c242287ee20c2e151697..cb9e6817f2233a30a7da0652687ba1d59ca9ee20 100644 --- a/src/wrapped/generated/wrappedlibxpmundefs.h +++ b/src/wrapped/generated/wrappedlibxpmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxpmUNDEFS_H_ #define __wrappedlibxpmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxpresentdefs.h b/src/wrapped/generated/wrappedlibxpresentdefs.h index de654739d39fb2d73259736c86cdc83da5add413..06799a8250a9d9a6fc792f836b5f2cbd0b72e08f 100644 --- a/src/wrapped/generated/wrappedlibxpresentdefs.h +++ b/src/wrapped/generated/wrappedlibxpresentdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxpresentDEFS_H_ #define __wrappedlibxpresentDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxpresenttypes.h b/src/wrapped/generated/wrappedlibxpresenttypes.h index b5cc524349f52595d77c66eca018e7e27140a42a..4a9ae077fb8f5736c89eb2558df32a0be579abc6 100644 --- a/src/wrapped/generated/wrappedlibxpresenttypes.h +++ b/src/wrapped/generated/wrappedlibxpresenttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxpresentTYPES_H_ #define __wrappedlibxpresentTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxpresentundefs.h b/src/wrapped/generated/wrappedlibxpresentundefs.h index c22f0993a85793822bbff6ed876d5a8b73bc1d89..ed53e756de0e6566f8fb2b612ae2dc4e5d2615c7 100644 --- a/src/wrapped/generated/wrappedlibxpresentundefs.h +++ b/src/wrapped/generated/wrappedlibxpresentundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxpresentUNDEFS_H_ #define __wrappedlibxpresentUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxrandrdefs.h b/src/wrapped/generated/wrappedlibxrandrdefs.h index 1f94ada8201b80af18172d0fce04e9bb511cde5b..941ebbb96dd2d3944647840130a5f80660484704 100644 --- a/src/wrapped/generated/wrappedlibxrandrdefs.h +++ b/src/wrapped/generated/wrappedlibxrandrdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxrandrDEFS_H_ #define __wrappedlibxrandrDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxrandrtypes.h b/src/wrapped/generated/wrappedlibxrandrtypes.h index d50c72ff988ef788977eca58b566b0ef54e07132..d20d3ac6ceb3126e81fb8d39b280c7e92040ad9d 100644 --- a/src/wrapped/generated/wrappedlibxrandrtypes.h +++ b/src/wrapped/generated/wrappedlibxrandrtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxrandrTYPES_H_ #define __wrappedlibxrandrTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxrandrundefs.h b/src/wrapped/generated/wrappedlibxrandrundefs.h index f353738f5cf8c4a272b455c693207fd549e05c26..92ec07791dc0588d2ee44f8d00a95a64a746db02 100644 --- a/src/wrapped/generated/wrappedlibxrandrundefs.h +++ b/src/wrapped/generated/wrappedlibxrandrundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxrandrUNDEFS_H_ #define __wrappedlibxrandrUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxrenderdefs.h b/src/wrapped/generated/wrappedlibxrenderdefs.h index d4360e47d2bfb821210f05a5abbad20d481c48a1..dcb8725a0576e015b8736a06ad9ef4f217cf3363 100644 --- a/src/wrapped/generated/wrappedlibxrenderdefs.h +++ b/src/wrapped/generated/wrappedlibxrenderdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxrenderDEFS_H_ #define __wrappedlibxrenderDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxrendertypes.h b/src/wrapped/generated/wrappedlibxrendertypes.h index 3cc990698727f852a147721fba08c3c4ac542ce3..fcb42e1859957722b223e2d672f9beadb3710816 100644 --- a/src/wrapped/generated/wrappedlibxrendertypes.h +++ b/src/wrapped/generated/wrappedlibxrendertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxrenderTYPES_H_ #define __wrappedlibxrenderTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxrenderundefs.h b/src/wrapped/generated/wrappedlibxrenderundefs.h index 23a53a4c5ec0aa5f284691ef8cd0cb648821eb77..56f3f392c85cc08b4ff2ae0743f95722bad9b57d 100644 --- a/src/wrapped/generated/wrappedlibxrenderundefs.h +++ b/src/wrapped/generated/wrappedlibxrenderundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxrenderUNDEFS_H_ #define __wrappedlibxrenderUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxssdefs.h b/src/wrapped/generated/wrappedlibxssdefs.h index b9eb4edb918a90547c863003ad85d24645393791..086b22e3fb2368f324eed8de2a0018d56d1d82ee 100644 --- a/src/wrapped/generated/wrappedlibxssdefs.h +++ b/src/wrapped/generated/wrappedlibxssdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxssDEFS_H_ #define __wrappedlibxssDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxsstypes.h b/src/wrapped/generated/wrappedlibxsstypes.h index a7e0e2555924b84f642922bd6d8b305fa92674ac..fc6868061264880cb03be67135ed5c3869126a11 100644 --- a/src/wrapped/generated/wrappedlibxsstypes.h +++ b/src/wrapped/generated/wrappedlibxsstypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxssTYPES_H_ #define __wrappedlibxssTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxssundefs.h b/src/wrapped/generated/wrappedlibxssundefs.h index 0fd1e9491c4d2b7f061e514fc44022eb7a442241..abfccde9ee0a83aca7505a39962bce2b4cedd8c4 100644 --- a/src/wrapped/generated/wrappedlibxssundefs.h +++ b/src/wrapped/generated/wrappedlibxssundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxssUNDEFS_H_ #define __wrappedlibxssUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxtdefs.h b/src/wrapped/generated/wrappedlibxtdefs.h index 60eff6d3c4305743772698c6397fe4e18df21f15..696cd3efcf4e865c902abd025d8e32a1ed3f1292 100644 --- a/src/wrapped/generated/wrappedlibxtdefs.h +++ b/src/wrapped/generated/wrappedlibxtdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxtDEFS_H_ #define __wrappedlibxtDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxtstdefs.h b/src/wrapped/generated/wrappedlibxtstdefs.h index fa195cba51ee5331e08f38a081524e178d22251b..0dd3b78fd764bdc02f8bc2e4e06bca734717a0c4 100644 --- a/src/wrapped/generated/wrappedlibxtstdefs.h +++ b/src/wrapped/generated/wrappedlibxtstdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxtstDEFS_H_ #define __wrappedlibxtstDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxtsttypes.h b/src/wrapped/generated/wrappedlibxtsttypes.h index f7cac5a2f95c47ec7efaef4fdc40324c4d7c1c93..5c29898af3b8322cc85182a93de8f7ebf4f1b7f9 100644 --- a/src/wrapped/generated/wrappedlibxtsttypes.h +++ b/src/wrapped/generated/wrappedlibxtsttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxtstTYPES_H_ #define __wrappedlibxtstTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxtstundefs.h b/src/wrapped/generated/wrappedlibxtstundefs.h index 2e5eec46c13422ec075c9bd49285a0a9d41180bb..1595dea2a2663c89564b972fa1f7e26b2ecc370a 100644 --- a/src/wrapped/generated/wrappedlibxtstundefs.h +++ b/src/wrapped/generated/wrappedlibxtstundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxtstUNDEFS_H_ #define __wrappedlibxtstUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxttypes.h b/src/wrapped/generated/wrappedlibxttypes.h index bfa25435a8d0186ece22ff121f83fae5716a71f8..67e1f0b3c22f8460e605295e94bec29f24cf6877 100644 --- a/src/wrapped/generated/wrappedlibxttypes.h +++ b/src/wrapped/generated/wrappedlibxttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxtTYPES_H_ #define __wrappedlibxtTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxtundefs.h b/src/wrapped/generated/wrappedlibxtundefs.h index 04d8349d0fae2f2f7cf6cbbc89aa60b6a2664aef..30215473a42e1ee838420d2acec3f9c791b24d73 100644 --- a/src/wrapped/generated/wrappedlibxtundefs.h +++ b/src/wrapped/generated/wrappedlibxtundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxtUNDEFS_H_ #define __wrappedlibxtUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxxf86vmdefs.h b/src/wrapped/generated/wrappedlibxxf86vmdefs.h index 04dc51399af01526141665758ac82ef5b16d9e15..29cb8c24c950ea8bb4cfe6f8012eec82d5073b2a 100644 --- a/src/wrapped/generated/wrappedlibxxf86vmdefs.h +++ b/src/wrapped/generated/wrappedlibxxf86vmdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxxf86vmDEFS_H_ #define __wrappedlibxxf86vmDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibxxf86vmtypes.h b/src/wrapped/generated/wrappedlibxxf86vmtypes.h index fb1b4ee45518c6c895f5443ddf157f54366eb30c..b94e3a993eab67058425d34329076b9c73fc3f1b 100644 --- a/src/wrapped/generated/wrappedlibxxf86vmtypes.h +++ b/src/wrapped/generated/wrappedlibxxf86vmtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxxf86vmTYPES_H_ #define __wrappedlibxxf86vmTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibxxf86vmundefs.h b/src/wrapped/generated/wrappedlibxxf86vmundefs.h index 836a2db46ecb1c7cc6847b2ddfe9659b139f8e9f..729021318aa928bafd086e33833df15f51ab031f 100644 --- a/src/wrapped/generated/wrappedlibxxf86vmundefs.h +++ b/src/wrapped/generated/wrappedlibxxf86vmundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibxxf86vmUNDEFS_H_ #define __wrappedlibxxf86vmUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibzdefs.h b/src/wrapped/generated/wrappedlibzdefs.h index 8d486b8137c33e5faa593655c4235829f443d57b..3de31bb4b21a3dc136e9a6282f5cd765ed13bdeb 100644 --- a/src/wrapped/generated/wrappedlibzdefs.h +++ b/src/wrapped/generated/wrappedlibzdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibzDEFS_H_ #define __wrappedlibzDEFS_H_ diff --git a/src/wrapped/generated/wrappedlibztypes.h b/src/wrapped/generated/wrappedlibztypes.h index 49e8dc90faec7f0e7305bb1f7d352c873185204a..7bfb8f0a1b4fa1642f8b1300e610f8462bcbb298 100644 --- a/src/wrapped/generated/wrappedlibztypes.h +++ b/src/wrapped/generated/wrappedlibztypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibzTYPES_H_ #define __wrappedlibzTYPES_H_ diff --git a/src/wrapped/generated/wrappedlibzundefs.h b/src/wrapped/generated/wrappedlibzundefs.h index 727087854eefd8a40f473f040a5a4a9f2cca20f9..232d73e9e8eda5bcfd86b4d8b159eae7b86b31ea 100644 --- a/src/wrapped/generated/wrappedlibzundefs.h +++ b/src/wrapped/generated/wrappedlibzundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlibzUNDEFS_H_ #define __wrappedlibzUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedlzmadefs.h b/src/wrapped/generated/wrappedlzmadefs.h index 7d2830d1786ed54548c07a96c64a7ed871b427b5..e495d383f3f89c712ed98f4359381e9f0e27def1 100644 --- a/src/wrapped/generated/wrappedlzmadefs.h +++ b/src/wrapped/generated/wrappedlzmadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlzmaDEFS_H_ #define __wrappedlzmaDEFS_H_ diff --git a/src/wrapped/generated/wrappedlzmatypes.h b/src/wrapped/generated/wrappedlzmatypes.h index da923ef2d0c011e14890948a58b26b8b0b23a566..3f866e3993224a6a15eef8951dba69943f896fe1 100644 --- a/src/wrapped/generated/wrappedlzmatypes.h +++ b/src/wrapped/generated/wrappedlzmatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlzmaTYPES_H_ #define __wrappedlzmaTYPES_H_ diff --git a/src/wrapped/generated/wrappedlzmaundefs.h b/src/wrapped/generated/wrappedlzmaundefs.h index c50459a957214bf4a7c8badf3dc578d07cd438a4..a808c47a422f003379a3cc62eb996a978abdadc5 100644 --- a/src/wrapped/generated/wrappedlzmaundefs.h +++ b/src/wrapped/generated/wrappedlzmaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedlzmaUNDEFS_H_ #define __wrappedlzmaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedmpg123defs.h b/src/wrapped/generated/wrappedmpg123defs.h index 0a797a11421e971918974b2b05d4888676def9cf..f6b58ee57e3c66a7a9b5cba7dd286fa3f2f19950 100644 --- a/src/wrapped/generated/wrappedmpg123defs.h +++ b/src/wrapped/generated/wrappedmpg123defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedmpg123DEFS_H_ #define __wrappedmpg123DEFS_H_ diff --git a/src/wrapped/generated/wrappedmpg123types.h b/src/wrapped/generated/wrappedmpg123types.h index 6f65c02f704ea01d2c3b30a3ee9aaeed14509558..66531b35c2aa4a56d327f8bd86a50efcf6b38e7d 100644 --- a/src/wrapped/generated/wrappedmpg123types.h +++ b/src/wrapped/generated/wrappedmpg123types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedmpg123TYPES_H_ #define __wrappedmpg123TYPES_H_ diff --git a/src/wrapped/generated/wrappedmpg123undefs.h b/src/wrapped/generated/wrappedmpg123undefs.h index f243812bcbbe41ac1e6776d0023b84c4e69aad1b..eb043605b94bdf20a307558423c824c2224b65ee 100644 --- a/src/wrapped/generated/wrappedmpg123undefs.h +++ b/src/wrapped/generated/wrappedmpg123undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedmpg123UNDEFS_H_ #define __wrappedmpg123UNDEFS_H_ diff --git a/src/wrapped/generated/wrappednotifydefs.h b/src/wrapped/generated/wrappednotifydefs.h index 57f999436221db0081bcaf1b8f7e9d8d497cdf53..30b567b5ded22ffdbdef396f912d519e858fe6db 100644 --- a/src/wrapped/generated/wrappednotifydefs.h +++ b/src/wrapped/generated/wrappednotifydefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednotifyDEFS_H_ #define __wrappednotifyDEFS_H_ diff --git a/src/wrapped/generated/wrappednotifytypes.h b/src/wrapped/generated/wrappednotifytypes.h index 4c470cba8a23798f3d7b4a3ed945ebfb73f0f9ec..81ef938e7ad61246f1f4c590aa16ac2c27e5c9aa 100644 --- a/src/wrapped/generated/wrappednotifytypes.h +++ b/src/wrapped/generated/wrappednotifytypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednotifyTYPES_H_ #define __wrappednotifyTYPES_H_ diff --git a/src/wrapped/generated/wrappednotifyundefs.h b/src/wrapped/generated/wrappednotifyundefs.h index b9e8effbb98df46520057e363e30ca1e3a6bd135..001700aba6eac8f4e2247be017a3a3c8adea6bd5 100644 --- a/src/wrapped/generated/wrappednotifyundefs.h +++ b/src/wrapped/generated/wrappednotifyundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednotifyUNDEFS_H_ #define __wrappednotifyUNDEFS_H_ diff --git a/src/wrapped/generated/wrappednsldefs.h b/src/wrapped/generated/wrappednsldefs.h index ba88d8a3152cefbafcdc16e89754647bac926902..52dd453c75b31368b9d452ef15243ae0c65107dd 100644 --- a/src/wrapped/generated/wrappednsldefs.h +++ b/src/wrapped/generated/wrappednsldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednslDEFS_H_ #define __wrappednslDEFS_H_ diff --git a/src/wrapped/generated/wrappednsltypes.h b/src/wrapped/generated/wrappednsltypes.h index 12a6ff941797eafbe5f48a327d27e79e9c184f99..2525458f7f722b8af0281725ee8ab97d46e92c07 100644 --- a/src/wrapped/generated/wrappednsltypes.h +++ b/src/wrapped/generated/wrappednsltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednslTYPES_H_ #define __wrappednslTYPES_H_ diff --git a/src/wrapped/generated/wrappednslundefs.h b/src/wrapped/generated/wrappednslundefs.h index a0380d7b841bdbf3485e78ef712b19320a7f66dc..f305bceecba99e435d46a113ed17a6b240bdfcdd 100644 --- a/src/wrapped/generated/wrappednslundefs.h +++ b/src/wrapped/generated/wrappednslundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednslUNDEFS_H_ #define __wrappednslUNDEFS_H_ diff --git a/src/wrapped/generated/wrappednspr4defs.h b/src/wrapped/generated/wrappednspr4defs.h index fe8445a6b68ee3a2d5ef4a15f5ad327e35d0371b..da12a2f8aff5abdbc58f36379b81003fa764040c 100644 --- a/src/wrapped/generated/wrappednspr4defs.h +++ b/src/wrapped/generated/wrappednspr4defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednspr4DEFS_H_ #define __wrappednspr4DEFS_H_ diff --git a/src/wrapped/generated/wrappednspr4types.h b/src/wrapped/generated/wrappednspr4types.h index d61c83f168ea17d22f2364b0890377c456d49974..3b3378c02af34136ead061a2b599047c8a124772 100644 --- a/src/wrapped/generated/wrappednspr4types.h +++ b/src/wrapped/generated/wrappednspr4types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednspr4TYPES_H_ #define __wrappednspr4TYPES_H_ diff --git a/src/wrapped/generated/wrappednspr4undefs.h b/src/wrapped/generated/wrappednspr4undefs.h index 39cb34c4a6b34583b50a9fda828eaabecc6bb2d2..a414249bc5103be461bf18375864242af11786e6 100644 --- a/src/wrapped/generated/wrappednspr4undefs.h +++ b/src/wrapped/generated/wrappednspr4undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednspr4UNDEFS_H_ #define __wrappednspr4UNDEFS_H_ diff --git a/src/wrapped/generated/wrappednss3defs.h b/src/wrapped/generated/wrappednss3defs.h index 7df348cb38e4680c69a445ef9639eb1ab3c3fba3..d6fdcba0a2222ebb5367e9e9d87c580bcaec2e04 100644 --- a/src/wrapped/generated/wrappednss3defs.h +++ b/src/wrapped/generated/wrappednss3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednss3DEFS_H_ #define __wrappednss3DEFS_H_ diff --git a/src/wrapped/generated/wrappednss3types.h b/src/wrapped/generated/wrappednss3types.h index cdc8a8754766d59883f4cdbff0f536fc3bc050c3..145982bafb3bc67abf16135f80fc609357090e80 100644 --- a/src/wrapped/generated/wrappednss3types.h +++ b/src/wrapped/generated/wrappednss3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednss3TYPES_H_ #define __wrappednss3TYPES_H_ diff --git a/src/wrapped/generated/wrappednss3undefs.h b/src/wrapped/generated/wrappednss3undefs.h index 19e156eb3a71490094842b00605bc1c0dd6c9719..233223acba17f2f80d88a49826c76dd14004bbc6 100644 --- a/src/wrapped/generated/wrappednss3undefs.h +++ b/src/wrapped/generated/wrappednss3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednss3UNDEFS_H_ #define __wrappednss3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappednssutil3defs.h b/src/wrapped/generated/wrappednssutil3defs.h index bcaf6bc009b238dae8d10bbb9684590c162029f9..90462fa8d055e6f92247cfdfc84a07b468d38e59 100644 --- a/src/wrapped/generated/wrappednssutil3defs.h +++ b/src/wrapped/generated/wrappednssutil3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednssutil3DEFS_H_ #define __wrappednssutil3DEFS_H_ diff --git a/src/wrapped/generated/wrappednssutil3types.h b/src/wrapped/generated/wrappednssutil3types.h index 4e0b0e48748d8d54da1a352cf694cdf1144c0919..f2837acec6ba3e80b4f4ad52f5db5746e0ecf1d9 100644 --- a/src/wrapped/generated/wrappednssutil3types.h +++ b/src/wrapped/generated/wrappednssutil3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednssutil3TYPES_H_ #define __wrappednssutil3TYPES_H_ diff --git a/src/wrapped/generated/wrappednssutil3undefs.h b/src/wrapped/generated/wrappednssutil3undefs.h index c5d687e0792c23f45ac1f90361f127633f68cce5..13ee91d35536c1ee088a1279219ec56e3779fb8c 100644 --- a/src/wrapped/generated/wrappednssutil3undefs.h +++ b/src/wrapped/generated/wrappednssutil3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappednssutil3UNDEFS_H_ #define __wrappednssutil3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedopenaldefs.h b/src/wrapped/generated/wrappedopenaldefs.h index f49934b99fdaf0b9660f6ba86df862affe5661ca..868cbde1c22feb8a14cd7930842e678cb65b0d60 100644 --- a/src/wrapped/generated/wrappedopenaldefs.h +++ b/src/wrapped/generated/wrappedopenaldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedopenalDEFS_H_ #define __wrappedopenalDEFS_H_ diff --git a/src/wrapped/generated/wrappedopenaltypes.h b/src/wrapped/generated/wrappedopenaltypes.h index 1bd88ca32a78589a2f6e55e0e54deb1ba5e492ca..472713e81bf80d0a99ff9b8dcff6b0912c203559 100644 --- a/src/wrapped/generated/wrappedopenaltypes.h +++ b/src/wrapped/generated/wrappedopenaltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedopenalTYPES_H_ #define __wrappedopenalTYPES_H_ diff --git a/src/wrapped/generated/wrappedopenalundefs.h b/src/wrapped/generated/wrappedopenalundefs.h index 020eec6530bf36be6e93702e705b7c57573c1a18..36b3885954d16aaf5b6a8ce2c1c6a49c5c185367 100644 --- a/src/wrapped/generated/wrappedopenalundefs.h +++ b/src/wrapped/generated/wrappedopenalundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedopenalUNDEFS_H_ #define __wrappedopenalUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedopencldefs.h b/src/wrapped/generated/wrappedopencldefs.h index 2536f0ff676ca763972074b980312ea13a9cda87..8cda823fb32b8653ff37d8ace28459c938935c66 100644 --- a/src/wrapped/generated/wrappedopencldefs.h +++ b/src/wrapped/generated/wrappedopencldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedopenclDEFS_H_ #define __wrappedopenclDEFS_H_ diff --git a/src/wrapped/generated/wrappedopencltypes.h b/src/wrapped/generated/wrappedopencltypes.h index f631b04bdb8cb2df32418a3d83991073330b4410..9df31339e5ccd73bbd505c9440ab946a930d34ad 100644 --- a/src/wrapped/generated/wrappedopencltypes.h +++ b/src/wrapped/generated/wrappedopencltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedopenclTYPES_H_ #define __wrappedopenclTYPES_H_ diff --git a/src/wrapped/generated/wrappedopenclundefs.h b/src/wrapped/generated/wrappedopenclundefs.h index 282406b5f8402d5c3cf7e1e5ed38830e4638be68..60dfef6efa3340c2684628418ad4ac95c8e3b1f0 100644 --- a/src/wrapped/generated/wrappedopenclundefs.h +++ b/src/wrapped/generated/wrappedopenclundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedopenclUNDEFS_H_ #define __wrappedopenclUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedp11kitdefs.h b/src/wrapped/generated/wrappedp11kitdefs.h index ec4bd05c664e1ade6acc923999a456d966e9d1ab..ce47e22ab56250ab596fecc0f3dcb0079a2bc0b3 100644 --- a/src/wrapped/generated/wrappedp11kitdefs.h +++ b/src/wrapped/generated/wrappedp11kitdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedp11kitDEFS_H_ #define __wrappedp11kitDEFS_H_ diff --git a/src/wrapped/generated/wrappedp11kittypes.h b/src/wrapped/generated/wrappedp11kittypes.h index 46e988c8977c18ff5113fb510fc777f587a3eed7..903fdf7ca6479268ef385071817a92f610cf62e9 100644 --- a/src/wrapped/generated/wrappedp11kittypes.h +++ b/src/wrapped/generated/wrappedp11kittypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedp11kitTYPES_H_ #define __wrappedp11kitTYPES_H_ diff --git a/src/wrapped/generated/wrappedp11kitundefs.h b/src/wrapped/generated/wrappedp11kitundefs.h index 38b4ca53a6cea6258decd899d28bc0e05bfbe917..4729e6028a88ad5fbd4a9b1d7985f3d96cc9fae6 100644 --- a/src/wrapped/generated/wrappedp11kitundefs.h +++ b/src/wrapped/generated/wrappedp11kitundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedp11kitUNDEFS_H_ #define __wrappedp11kitUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpamdefs.h b/src/wrapped/generated/wrappedpamdefs.h index 31a659b914895cbc3e14d2b373a08b5a9c2c3a12..332c6a2b57005d3807c74a8d119018ab5c179ce1 100644 --- a/src/wrapped/generated/wrappedpamdefs.h +++ b/src/wrapped/generated/wrappedpamdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpamDEFS_H_ #define __wrappedpamDEFS_H_ diff --git a/src/wrapped/generated/wrappedpamtypes.h b/src/wrapped/generated/wrappedpamtypes.h index 98b7782e70ae79f5737ad8018ac3def2db0f3bab..557ad7ee19aa1a82aac09fd59121671c64626522 100644 --- a/src/wrapped/generated/wrappedpamtypes.h +++ b/src/wrapped/generated/wrappedpamtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpamTYPES_H_ #define __wrappedpamTYPES_H_ diff --git a/src/wrapped/generated/wrappedpamundefs.h b/src/wrapped/generated/wrappedpamundefs.h index 092a7b6799e0f6ccbf66c207ecfa7e69201a46bd..84ce3742d22c694c53196c8ce402bffb3e822bee 100644 --- a/src/wrapped/generated/wrappedpamundefs.h +++ b/src/wrapped/generated/wrappedpamundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpamUNDEFS_H_ #define __wrappedpamUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangocairodefs.h b/src/wrapped/generated/wrappedpangocairodefs.h index b552e7f5c6c7ff4332c24f2ee3f74634d0d9d13f..3e67aa997522d772d9364bada99aba81535d2f66 100644 --- a/src/wrapped/generated/wrappedpangocairodefs.h +++ b/src/wrapped/generated/wrappedpangocairodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpangocairoDEFS_H_ #define __wrappedpangocairoDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangocairotypes.h b/src/wrapped/generated/wrappedpangocairotypes.h index c2462c1ba049dad6f049e6f86e19bbd6d5d9a67f..7e327abc626822e7e7330e7cc1e3124c9dec7440 100644 --- a/src/wrapped/generated/wrappedpangocairotypes.h +++ b/src/wrapped/generated/wrappedpangocairotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpangocairoTYPES_H_ #define __wrappedpangocairoTYPES_H_ diff --git a/src/wrapped/generated/wrappedpangocairoundefs.h b/src/wrapped/generated/wrappedpangocairoundefs.h index 40d338a037e8fc457c8e8f91729e82eab0771fc5..28a391317fa57d98a27b3ad2bd9e0916e29ecf48 100644 --- a/src/wrapped/generated/wrappedpangocairoundefs.h +++ b/src/wrapped/generated/wrappedpangocairoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpangocairoUNDEFS_H_ #define __wrappedpangocairoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangodefs.h b/src/wrapped/generated/wrappedpangodefs.h index a7e8d0c1783900d38a8029fac392ed39a6a63d88..dd8a03a4e237b76a25448c1bfbfc3d77685de27f 100644 --- a/src/wrapped/generated/wrappedpangodefs.h +++ b/src/wrapped/generated/wrappedpangodefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpangoDEFS_H_ #define __wrappedpangoDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangoft2defs.h b/src/wrapped/generated/wrappedpangoft2defs.h index c987b41f4bb30f26b29d67d7d27bd7583a87eeb0..46e13c7736ccb51a2d0bd9b9876e5654645c755b 100644 --- a/src/wrapped/generated/wrappedpangoft2defs.h +++ b/src/wrapped/generated/wrappedpangoft2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpangoft2DEFS_H_ #define __wrappedpangoft2DEFS_H_ diff --git a/src/wrapped/generated/wrappedpangoft2types.h b/src/wrapped/generated/wrappedpangoft2types.h index 616fc38aef4d4d3b4558ebcebd74f95b25005926..16698f9559626e5821072a916b8f3e4aa22d6dd2 100644 --- a/src/wrapped/generated/wrappedpangoft2types.h +++ b/src/wrapped/generated/wrappedpangoft2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpangoft2TYPES_H_ #define __wrappedpangoft2TYPES_H_ diff --git a/src/wrapped/generated/wrappedpangoft2undefs.h b/src/wrapped/generated/wrappedpangoft2undefs.h index 941a16a709e0259b3f1f253ac42a8a621a935ae8..26b14fc0fed4b6a79e0de8a6c17bee9dfd6715dd 100644 --- a/src/wrapped/generated/wrappedpangoft2undefs.h +++ b/src/wrapped/generated/wrappedpangoft2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpangoft2UNDEFS_H_ #define __wrappedpangoft2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpangotypes.h b/src/wrapped/generated/wrappedpangotypes.h index d874436c6ec2bf6094e0017eeef25e9c61a9ad3d..9291930d2493c91e9f6046efe7b5c29831ef20fa 100644 --- a/src/wrapped/generated/wrappedpangotypes.h +++ b/src/wrapped/generated/wrappedpangotypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpangoTYPES_H_ #define __wrappedpangoTYPES_H_ diff --git a/src/wrapped/generated/wrappedpangoundefs.h b/src/wrapped/generated/wrappedpangoundefs.h index ffe11184ba7f3b9795c83f5ed0bea320b9aead50..e83454961b5fafad15230d778c56e92278cfb918 100644 --- a/src/wrapped/generated/wrappedpangoundefs.h +++ b/src/wrapped/generated/wrappedpangoundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpangoUNDEFS_H_ #define __wrappedpangoUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedplc4defs.h b/src/wrapped/generated/wrappedplc4defs.h index ba22678ec081ea93b46d3a145865267cc118e411..23f509ab8934e17d8f165e331f753b79ee8643d7 100644 --- a/src/wrapped/generated/wrappedplc4defs.h +++ b/src/wrapped/generated/wrappedplc4defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedplc4DEFS_H_ #define __wrappedplc4DEFS_H_ diff --git a/src/wrapped/generated/wrappedplc4types.h b/src/wrapped/generated/wrappedplc4types.h index 5ca8ff942b7d637257ffc139f6518a457030f173..78beecb5beed626076dda7f3d75b932181ec4620 100644 --- a/src/wrapped/generated/wrappedplc4types.h +++ b/src/wrapped/generated/wrappedplc4types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedplc4TYPES_H_ #define __wrappedplc4TYPES_H_ diff --git a/src/wrapped/generated/wrappedplc4undefs.h b/src/wrapped/generated/wrappedplc4undefs.h index 3da2719b706f08b49c75e72fb8a52f537c9ee91d..45c451795530d8294630b65c0ddfc745e17736d9 100644 --- a/src/wrapped/generated/wrappedplc4undefs.h +++ b/src/wrapped/generated/wrappedplc4undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedplc4UNDEFS_H_ #define __wrappedplc4UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedplds4defs.h b/src/wrapped/generated/wrappedplds4defs.h index c0620741f38a91ee7f967226986d047fa129f298..9ae8a0e4b9eccd77573e7a1ebd66af95abe3bbfe 100644 --- a/src/wrapped/generated/wrappedplds4defs.h +++ b/src/wrapped/generated/wrappedplds4defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedplds4DEFS_H_ #define __wrappedplds4DEFS_H_ diff --git a/src/wrapped/generated/wrappedplds4types.h b/src/wrapped/generated/wrappedplds4types.h index aaf83eb97e9efeb565758d2091cebbb4ea00d1ea..f477b1229eadbf86fad52f9fd01c571863b4518b 100644 --- a/src/wrapped/generated/wrappedplds4types.h +++ b/src/wrapped/generated/wrappedplds4types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedplds4TYPES_H_ #define __wrappedplds4TYPES_H_ diff --git a/src/wrapped/generated/wrappedplds4undefs.h b/src/wrapped/generated/wrappedplds4undefs.h index 9d0868f9d5c0840c8d4f9e19e3f2bf515266142d..390b99b46f64dfcda06c2e56d81aec95b9fbffd8 100644 --- a/src/wrapped/generated/wrappedplds4undefs.h +++ b/src/wrapped/generated/wrappedplds4undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedplds4UNDEFS_H_ #define __wrappedplds4UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpng16defs.h b/src/wrapped/generated/wrappedpng16defs.h index 11d1e26ab7daf1857681b0a6bd67b93919cfed63..171aaf7778d63c848b03d7d6226036ce01957078 100644 --- a/src/wrapped/generated/wrappedpng16defs.h +++ b/src/wrapped/generated/wrappedpng16defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpng16DEFS_H_ #define __wrappedpng16DEFS_H_ diff --git a/src/wrapped/generated/wrappedpng16types.h b/src/wrapped/generated/wrappedpng16types.h index 367c19e4ed08abfc8fb5e0081a03a3d5a90e6f17..ce3592913a38af62eaca794977e914b6a9e62bb6 100644 --- a/src/wrapped/generated/wrappedpng16types.h +++ b/src/wrapped/generated/wrappedpng16types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpng16TYPES_H_ #define __wrappedpng16TYPES_H_ diff --git a/src/wrapped/generated/wrappedpng16undefs.h b/src/wrapped/generated/wrappedpng16undefs.h index bbe212454fc65da1994cb9f83ca2873501606564..fc3ba8ed632cfde0c0ca86638cb66554a97be067 100644 --- a/src/wrapped/generated/wrappedpng16undefs.h +++ b/src/wrapped/generated/wrappedpng16undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpng16UNDEFS_H_ #define __wrappedpng16UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpsl5defs.h b/src/wrapped/generated/wrappedpsl5defs.h index 274c347d7fa0fb617c4f034ef35cabe93b0f48cd..972155d42c3bcbc0a601a5139f260e57183a252d 100644 --- a/src/wrapped/generated/wrappedpsl5defs.h +++ b/src/wrapped/generated/wrappedpsl5defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpsl5DEFS_H_ #define __wrappedpsl5DEFS_H_ diff --git a/src/wrapped/generated/wrappedpsl5types.h b/src/wrapped/generated/wrappedpsl5types.h index 44310fa38d525d26989cd13667e2b2d2e2524407..ee5c361b378ca7ca0e17d6a30b452a26a16cf426 100644 --- a/src/wrapped/generated/wrappedpsl5types.h +++ b/src/wrapped/generated/wrappedpsl5types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpsl5TYPES_H_ #define __wrappedpsl5TYPES_H_ diff --git a/src/wrapped/generated/wrappedpsl5undefs.h b/src/wrapped/generated/wrappedpsl5undefs.h index 0db6f2e044319ad29480a3c3f5b64f2e2ccfe3bc..4617e7802875f40dd457880b87a676a33a57c417 100644 --- a/src/wrapped/generated/wrappedpsl5undefs.h +++ b/src/wrapped/generated/wrappedpsl5undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpsl5UNDEFS_H_ #define __wrappedpsl5UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsedefs.h b/src/wrapped/generated/wrappedpulsedefs.h index 1562e319a52ba3f515131c890209670239e1c26d..37622af6dc7c80e6c34ad66c8cccc7f754f787ea 100644 --- a/src/wrapped/generated/wrappedpulsedefs.h +++ b/src/wrapped/generated/wrappedpulsedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpulseDEFS_H_ #define __wrappedpulseDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsemainloopglibdefs.h b/src/wrapped/generated/wrappedpulsemainloopglibdefs.h index 41195f931716c30105bf76f3b6c49803d94d3d63..90a230ed5c038223a4877699dc1c9db6b54359de 100644 --- a/src/wrapped/generated/wrappedpulsemainloopglibdefs.h +++ b/src/wrapped/generated/wrappedpulsemainloopglibdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpulsemainloopglibDEFS_H_ #define __wrappedpulsemainloopglibDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsemainloopglibtypes.h b/src/wrapped/generated/wrappedpulsemainloopglibtypes.h index f5d96cf070c863e9c1e063e1bf886bbcad1e13eb..48da75a1a5f5dc01e24ede203552f19c32f3cdfd 100644 --- a/src/wrapped/generated/wrappedpulsemainloopglibtypes.h +++ b/src/wrapped/generated/wrappedpulsemainloopglibtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpulsemainloopglibTYPES_H_ #define __wrappedpulsemainloopglibTYPES_H_ diff --git a/src/wrapped/generated/wrappedpulsemainloopglibundefs.h b/src/wrapped/generated/wrappedpulsemainloopglibundefs.h index d70aa31e87020b705388bafe09c676a7ab69b60f..3a7c8565edf3821c317e6b7b7952dffdaf27119b 100644 --- a/src/wrapped/generated/wrappedpulsemainloopglibundefs.h +++ b/src/wrapped/generated/wrappedpulsemainloopglibundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpulsemainloopglibUNDEFS_H_ #define __wrappedpulsemainloopglibUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsesimpledefs.h b/src/wrapped/generated/wrappedpulsesimpledefs.h index 30e5fbe7712e24eddae8135f8c4705211cda0abf..236d7fcaced168456e980e33a9c41ad3f7bde5f3 100644 --- a/src/wrapped/generated/wrappedpulsesimpledefs.h +++ b/src/wrapped/generated/wrappedpulsesimpledefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpulsesimpleDEFS_H_ #define __wrappedpulsesimpleDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsesimpletypes.h b/src/wrapped/generated/wrappedpulsesimpletypes.h index 2a463851479da9002d5b70b426736e2328d1efc6..a4279dd9eeaa7dc0d68d11e360571a125a796101 100644 --- a/src/wrapped/generated/wrappedpulsesimpletypes.h +++ b/src/wrapped/generated/wrappedpulsesimpletypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpulsesimpleTYPES_H_ #define __wrappedpulsesimpleTYPES_H_ diff --git a/src/wrapped/generated/wrappedpulsesimpleundefs.h b/src/wrapped/generated/wrappedpulsesimpleundefs.h index 03614239dcb44cd55994c5f76f4bdc1ea3962ff2..3115337e7a1279702c95f3eab6f1544079efdd70 100644 --- a/src/wrapped/generated/wrappedpulsesimpleundefs.h +++ b/src/wrapped/generated/wrappedpulsesimpleundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpulsesimpleUNDEFS_H_ #define __wrappedpulsesimpleUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedpulsetypes.h b/src/wrapped/generated/wrappedpulsetypes.h index e3ed948fec12d9afbb26422ab8ac0d3da66d457f..85e688e4b96f4fb3c2bec35e5dc31f05e1778b3d 100644 --- a/src/wrapped/generated/wrappedpulsetypes.h +++ b/src/wrapped/generated/wrappedpulsetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpulseTYPES_H_ #define __wrappedpulseTYPES_H_ @@ -19,19 +19,18 @@ typedef void* (*pFpp_t)(void*, void*); typedef void (*vFppp_t)(void*, void*, void*); typedef void* (*pFipp_t)(int32_t, void*, void*); typedef void* (*pFppp_t)(void*, void*, void*); -typedef int32_t (*iFppip_t)(void*, void*, int32_t, void*); +typedef int32_t (*iFppup_t)(void*, void*, uint32_t, void*); typedef int32_t (*iFpppV_t)(void*, void*, void*, ...); typedef void* (*pFpipp_t)(void*, int32_t, void*, void*); typedef void* (*pFpupp_t)(void*, uint32_t, void*, void*); typedef void* (*pFpUpp_t)(void*, uint64_t, void*, void*); typedef void* (*pFpppp_t)(void*, void*, void*, void*); typedef void* (*pFpiupp_t)(void*, int32_t, uint32_t, void*, void*); -typedef void* (*pFpippp_t)(void*, int32_t, void*, void*, void*); typedef void* (*pFpuipp_t)(void*, uint32_t, int32_t, void*, void*); typedef void* (*pFpuupp_t)(void*, uint32_t, uint32_t, void*, void*); typedef void* (*pFpuppp_t)(void*, uint32_t, void*, void*, void*); typedef void* (*pFppppp_t)(void*, void*, void*, void*, void*); -typedef int32_t (*iFppLpIi_t)(void*, void*, uintptr_t, void*, int64_t, int32_t); +typedef int32_t (*iFppLpIu_t)(void*, void*, uintptr_t, void*, int64_t, uint32_t); typedef void* (*pFpiuCppp_t)(void*, int32_t, uint32_t, uint8_t, void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ @@ -77,7 +76,7 @@ typedef void* (*pFpiuCppp_t)(void*, int32_t, uint32_t, uint8_t, void*, void*, vo GO(pa_stream_prebuf, pFppp_t) \ GO(pa_stream_trigger, pFppp_t) \ GO(pa_stream_update_timing_info, pFppp_t) \ - GO(pa_context_connect, iFppip_t) \ + GO(pa_context_connect, iFppup_t) \ GO(pa_proplist_setf, iFpppV_t) \ GO(pa_ext_device_restore_subscribe, pFpipp_t) \ GO(pa_stream_cork, pFpipp_t) \ @@ -101,23 +100,23 @@ typedef void* (*pFpiuCppp_t)(void*, int32_t, uint32_t, uint8_t, void*, void*, vo GO(pa_stream_set_buffer_attr, pFpppp_t) \ GO(pa_stream_set_name, pFpppp_t) \ GO(pa_ext_device_restore_read_formats, pFpiupp_t) \ - GO(pa_context_proplist_update, pFpippp_t) \ - GO(pa_stream_proplist_update, pFpippp_t) \ GO(pa_context_set_sink_input_mute, pFpuipp_t) \ GO(pa_context_set_sink_mute_by_index, pFpuipp_t) \ GO(pa_context_set_source_mute_by_index, pFpuipp_t) \ GO(pa_context_move_sink_input_by_index, pFpuupp_t) \ GO(pa_context_move_source_output_by_index, pFpuupp_t) \ + GO(pa_context_proplist_update, pFpuppp_t) \ GO(pa_context_set_card_profile_by_index, pFpuppp_t) \ GO(pa_context_set_sink_input_volume, pFpuppp_t) \ GO(pa_context_set_sink_port_by_index, pFpuppp_t) \ GO(pa_context_set_sink_volume_by_index, pFpuppp_t) \ GO(pa_context_set_source_port_by_index, pFpuppp_t) \ GO(pa_context_set_source_volume_by_index, pFpuppp_t) \ + GO(pa_stream_proplist_update, pFpuppp_t) \ GO(pa_context_load_module, pFppppp_t) \ GO(pa_context_set_sink_port_by_name, pFppppp_t) \ GO(pa_context_set_source_volume_by_name, pFppppp_t) \ - GO(pa_stream_write, iFppLpIi_t) \ + GO(pa_stream_write, iFppLpIu_t) \ GO(pa_ext_device_restore_save_formats, pFpiuCppp_t) #endif // __wrappedpulseTYPES_H_ diff --git a/src/wrapped/generated/wrappedpulseundefs.h b/src/wrapped/generated/wrappedpulseundefs.h index 4472c935f4f110642c70926780bed9b41f34cbba..32a49236c380e727d6e9ea9a7e681df7ba31ed9f 100644 --- a/src/wrapped/generated/wrappedpulseundefs.h +++ b/src/wrapped/generated/wrappedpulseundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedpulseUNDEFS_H_ #define __wrappedpulseUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1defs.h b/src/wrapped/generated/wrappedsdl1defs.h index a3219d5ebf3b79b9848a8695d22cd387055e2894..6eb096259ca57b7cd297ceed4dc9669dc5c5b4ac 100644 --- a/src/wrapped/generated/wrappedsdl1defs.h +++ b/src/wrapped/generated/wrappedsdl1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1DEFS_H_ #define __wrappedsdl1DEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1imagedefs.h b/src/wrapped/generated/wrappedsdl1imagedefs.h index e7c981443a78068d2a93a5751089a3effeb7299f..1ff80fdfecca32ca1ba13a69e2c66daf04e7d3a1 100644 --- a/src/wrapped/generated/wrappedsdl1imagedefs.h +++ b/src/wrapped/generated/wrappedsdl1imagedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1imageDEFS_H_ #define __wrappedsdl1imageDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1imagetypes.h b/src/wrapped/generated/wrappedsdl1imagetypes.h index 27a2fb0b2fee3e1873556f64262474d024ce4882..e8f4c5ffb3cdbd04200af981e3297c050cd0e00a 100644 --- a/src/wrapped/generated/wrappedsdl1imagetypes.h +++ b/src/wrapped/generated/wrappedsdl1imagetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1imageTYPES_H_ #define __wrappedsdl1imageTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1imageundefs.h b/src/wrapped/generated/wrappedsdl1imageundefs.h index 8588d27864a3bbf011904b489dfd777f3b9ce8e7..bf9962b52f6c9ba3daaa36b75c2a35734dadb0b1 100644 --- a/src/wrapped/generated/wrappedsdl1imageundefs.h +++ b/src/wrapped/generated/wrappedsdl1imageundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1imageUNDEFS_H_ #define __wrappedsdl1imageUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1mixerdefs.h b/src/wrapped/generated/wrappedsdl1mixerdefs.h index c1ee043d3e41421e2a13583881605b68c4e55fbe..83cd00c2c6352d14d29bd2cf8080ba6e76e92c12 100644 --- a/src/wrapped/generated/wrappedsdl1mixerdefs.h +++ b/src/wrapped/generated/wrappedsdl1mixerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1mixerDEFS_H_ #define __wrappedsdl1mixerDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1mixertypes.h b/src/wrapped/generated/wrappedsdl1mixertypes.h index 3998e3d0810d39f0ad88a38374949e0484b7d1a7..e9470820de7068451af07790c265be4f84f6f5d3 100644 --- a/src/wrapped/generated/wrappedsdl1mixertypes.h +++ b/src/wrapped/generated/wrappedsdl1mixertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1mixerTYPES_H_ #define __wrappedsdl1mixerTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1mixerundefs.h b/src/wrapped/generated/wrappedsdl1mixerundefs.h index f943ef6343d43fe20d284baea141e1a9e19aec17..14db636c7f840179c8747fb3068c6dc6f181acd3 100644 --- a/src/wrapped/generated/wrappedsdl1mixerundefs.h +++ b/src/wrapped/generated/wrappedsdl1mixerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1mixerUNDEFS_H_ #define __wrappedsdl1mixerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1netdefs.h b/src/wrapped/generated/wrappedsdl1netdefs.h index 8bef12a54bfae454524e6bd8eb94c5a6b07b5409..eeec8282bb5253d49af40633c2063088bc1f8df3 100644 --- a/src/wrapped/generated/wrappedsdl1netdefs.h +++ b/src/wrapped/generated/wrappedsdl1netdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1netDEFS_H_ #define __wrappedsdl1netDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1nettypes.h b/src/wrapped/generated/wrappedsdl1nettypes.h index df143a1e8eb4be5a1557199f03e8366327aa0aa2..8b83dcd785fd9cf12d0615931ae0fc4ec21f81f0 100644 --- a/src/wrapped/generated/wrappedsdl1nettypes.h +++ b/src/wrapped/generated/wrappedsdl1nettypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1netTYPES_H_ #define __wrappedsdl1netTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1netundefs.h b/src/wrapped/generated/wrappedsdl1netundefs.h index e2492ddb730b7daf30ab3d80fba507008686f8c1..7e1a9565a5e188bf1f6ebf74246763145db934ea 100644 --- a/src/wrapped/generated/wrappedsdl1netundefs.h +++ b/src/wrapped/generated/wrappedsdl1netundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1netUNDEFS_H_ #define __wrappedsdl1netUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1sounddefs.h b/src/wrapped/generated/wrappedsdl1sounddefs.h index eb8bfa2d5483c6ad5ef69044141b65ddcc5a55bf..0f0079eb951d05ba839f61cb8b5be6ce7f1ed6d7 100644 --- a/src/wrapped/generated/wrappedsdl1sounddefs.h +++ b/src/wrapped/generated/wrappedsdl1sounddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1soundDEFS_H_ #define __wrappedsdl1soundDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1soundtypes.h b/src/wrapped/generated/wrappedsdl1soundtypes.h index a093993fddefd41a41189139bb43672a01151dad..68c2ed9c7701b5a7e1add72aff0b2977d23f796c 100644 --- a/src/wrapped/generated/wrappedsdl1soundtypes.h +++ b/src/wrapped/generated/wrappedsdl1soundtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1soundTYPES_H_ #define __wrappedsdl1soundTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1soundundefs.h b/src/wrapped/generated/wrappedsdl1soundundefs.h index 86a4a1906fa1814089fb9384f56c7a12ab5ea659..5f8059279fdf0f79483af5ef196b3df1ca59a667 100644 --- a/src/wrapped/generated/wrappedsdl1soundundefs.h +++ b/src/wrapped/generated/wrappedsdl1soundundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1soundUNDEFS_H_ #define __wrappedsdl1soundUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1ttfdefs.h b/src/wrapped/generated/wrappedsdl1ttfdefs.h index 431c62744b5e44eda2804d7f5206ea57e831aab3..aa75e75d24c02b37270301b9a3255722a802900a 100644 --- a/src/wrapped/generated/wrappedsdl1ttfdefs.h +++ b/src/wrapped/generated/wrappedsdl1ttfdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1ttfDEFS_H_ #define __wrappedsdl1ttfDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1ttftypes.h b/src/wrapped/generated/wrappedsdl1ttftypes.h index 7ce6d58bdffb0eae9a13eb1a0bff3dbdbbe2fa57..045efb3beb1350988b42145dd9a5bcd450ec2fca 100644 --- a/src/wrapped/generated/wrappedsdl1ttftypes.h +++ b/src/wrapped/generated/wrappedsdl1ttftypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1ttfTYPES_H_ #define __wrappedsdl1ttfTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1ttfundefs.h b/src/wrapped/generated/wrappedsdl1ttfundefs.h index 3643349f2b044b836e88501a9d6e565a707a09bb..287a468acf31fd1f5bd756f65e6d394622df50fa 100644 --- a/src/wrapped/generated/wrappedsdl1ttfundefs.h +++ b/src/wrapped/generated/wrappedsdl1ttfundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1ttfUNDEFS_H_ #define __wrappedsdl1ttfUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl1types.h b/src/wrapped/generated/wrappedsdl1types.h index 495676220a09342c1ed21ccf42b35bbacfb90d15..19d685af96bf3b9546d8e4b2a7ad638a4de0e6cd 100644 --- a/src/wrapped/generated/wrappedsdl1types.h +++ b/src/wrapped/generated/wrappedsdl1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1TYPES_H_ #define __wrappedsdl1TYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl1undefs.h b/src/wrapped/generated/wrappedsdl1undefs.h index 6a49a255b6caba174d7f739c40167449ba8150a2..3349aed82ec52f795d18270b96085791291b3139 100644 --- a/src/wrapped/generated/wrappedsdl1undefs.h +++ b/src/wrapped/generated/wrappedsdl1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl1UNDEFS_H_ #define __wrappedsdl1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2defs.h b/src/wrapped/generated/wrappedsdl2defs.h index b9a45cf15f98429ff45d60bb5680de555b77bde6..7cc713e64b908e7d1c3bb167ba7b40f8b9d00419 100644 --- a/src/wrapped/generated/wrappedsdl2defs.h +++ b/src/wrapped/generated/wrappedsdl2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2DEFS_H_ #define __wrappedsdl2DEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2imagedefs.h b/src/wrapped/generated/wrappedsdl2imagedefs.h index fd8334fa25f1e668e2ae0af0a9faf3740824d619..dd8e14d6c4a6ffb190b28160f3fc66fb8913103f 100644 --- a/src/wrapped/generated/wrappedsdl2imagedefs.h +++ b/src/wrapped/generated/wrappedsdl2imagedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2imageDEFS_H_ #define __wrappedsdl2imageDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2imagetypes.h b/src/wrapped/generated/wrappedsdl2imagetypes.h index a7c3b66b55a8da35a19db05fc1c38d3f77cd125a..7f15d8c6024d3b51c4ef9075ed5193966f24ef2e 100644 --- a/src/wrapped/generated/wrappedsdl2imagetypes.h +++ b/src/wrapped/generated/wrappedsdl2imagetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2imageTYPES_H_ #define __wrappedsdl2imageTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2imageundefs.h b/src/wrapped/generated/wrappedsdl2imageundefs.h index b4b175e5dc5f4604d1d9d758e4dd48f6415481be..fb9a4efb0546f363dc52ced2873ff4cbf7d6d2b5 100644 --- a/src/wrapped/generated/wrappedsdl2imageundefs.h +++ b/src/wrapped/generated/wrappedsdl2imageundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2imageUNDEFS_H_ #define __wrappedsdl2imageUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2mixerdefs.h b/src/wrapped/generated/wrappedsdl2mixerdefs.h index 1f3a729c5ac46b47e8c507ff477df5329a2539d3..481ff875e3a36dfdd025da4c35ab26acda40c3d7 100644 --- a/src/wrapped/generated/wrappedsdl2mixerdefs.h +++ b/src/wrapped/generated/wrappedsdl2mixerdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2mixerDEFS_H_ #define __wrappedsdl2mixerDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2mixertypes.h b/src/wrapped/generated/wrappedsdl2mixertypes.h index d48871c223d7041ef2d38ee83bafbefca3672b18..ff917c7d595e1951d8e0b2d9feb52f801810c97d 100644 --- a/src/wrapped/generated/wrappedsdl2mixertypes.h +++ b/src/wrapped/generated/wrappedsdl2mixertypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2mixerTYPES_H_ #define __wrappedsdl2mixerTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2mixerundefs.h b/src/wrapped/generated/wrappedsdl2mixerundefs.h index 15074b609c7c7f8a4718b015da9d3b08eab84cbc..f82a34d18d191e085b66dc4f7396070d07caebc6 100644 --- a/src/wrapped/generated/wrappedsdl2mixerundefs.h +++ b/src/wrapped/generated/wrappedsdl2mixerundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2mixerUNDEFS_H_ #define __wrappedsdl2mixerUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2netdefs.h b/src/wrapped/generated/wrappedsdl2netdefs.h index 8b2cc63af9466399cc234a2b6f52d830a8aeedb6..8c480fe88c73644e11d214f04f310256e9036558 100644 --- a/src/wrapped/generated/wrappedsdl2netdefs.h +++ b/src/wrapped/generated/wrappedsdl2netdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2netDEFS_H_ #define __wrappedsdl2netDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2nettypes.h b/src/wrapped/generated/wrappedsdl2nettypes.h index 58ebd6381ee2077b972c12f49a806ddaaf21fb84..3c798e474dcd96cf911ac042a672aa3c6ab10cb7 100644 --- a/src/wrapped/generated/wrappedsdl2nettypes.h +++ b/src/wrapped/generated/wrappedsdl2nettypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2netTYPES_H_ #define __wrappedsdl2netTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2netundefs.h b/src/wrapped/generated/wrappedsdl2netundefs.h index 81e16b3683806d6854d6d61e6cc1fa75e4be6726..a6875d69adb98ddf636320d68cdee4baf24b4902 100644 --- a/src/wrapped/generated/wrappedsdl2netundefs.h +++ b/src/wrapped/generated/wrappedsdl2netundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2netUNDEFS_H_ #define __wrappedsdl2netUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2ttfdefs.h b/src/wrapped/generated/wrappedsdl2ttfdefs.h index bb8ffb6453e421a9de3e6233f7c4da3d2542e5be..d475f91e057aa822d91a65b8830f6d6ca7ec4c60 100644 --- a/src/wrapped/generated/wrappedsdl2ttfdefs.h +++ b/src/wrapped/generated/wrappedsdl2ttfdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2ttfDEFS_H_ #define __wrappedsdl2ttfDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2ttftypes.h b/src/wrapped/generated/wrappedsdl2ttftypes.h index 6d4e02b9226f5d82023d14cbd74d50e05119043a..a144a0494285d6ab5bd464995372f51cd62da02f 100644 --- a/src/wrapped/generated/wrappedsdl2ttftypes.h +++ b/src/wrapped/generated/wrappedsdl2ttftypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2ttfTYPES_H_ #define __wrappedsdl2ttfTYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2ttfundefs.h b/src/wrapped/generated/wrappedsdl2ttfundefs.h index 0ff8e537175d9f58a9ad2b59e9bbc2db703db612..fbf21d8d735549c5b26adf10d9738a491970a949 100644 --- a/src/wrapped/generated/wrappedsdl2ttfundefs.h +++ b/src/wrapped/generated/wrappedsdl2ttfundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2ttfUNDEFS_H_ #define __wrappedsdl2ttfUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsdl2types.h b/src/wrapped/generated/wrappedsdl2types.h index 8386e99930685405998f99f58b44fdbab1484f1d..104f6bcd167f370b0026f9699e8a0ed5f00bc3ab 100644 --- a/src/wrapped/generated/wrappedsdl2types.h +++ b/src/wrapped/generated/wrappedsdl2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2TYPES_H_ #define __wrappedsdl2TYPES_H_ @@ -44,9 +44,9 @@ typedef void* (*pFppp_t)(void*, void*, void*); typedef void (*vFpuup_t)(void*, uint32_t, uint32_t, void*); typedef int32_t (*iFpLpp_t)(void*, uintptr_t, void*, void*); typedef int32_t (*iFpLpV_t)(void*, uintptr_t, void*, ...); -typedef uint32_t (*uFppuu_t)(void*, void*, uint32_t, uint32_t); +typedef uintptr_t (*LFppLL_t)(void*, void*, uintptr_t, uintptr_t); typedef void (*vFGpppp_t)(SDL_JoystickGUID, void*, void*, void*, void*); -typedef int32_t (*iFpippi_t)(void*, int32_t, void*, void*, int32_t); +typedef uint32_t (*uFpippi_t)(void*, int32_t, void*, void*, int32_t); typedef void* (*pFpippp_t)(void*, int32_t, void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ @@ -127,10 +127,10 @@ typedef void* (*pFpippp_t)(void*, int32_t, void*, void*, void*); GO(SDL_qsort, vFpuup_t) \ GO(SDL_vsnprintf, iFpLpp_t) \ GO(SDL_snprintf, iFpLpV_t) \ - GO(SDL_RWread, uFppuu_t) \ - GO(SDL_RWwrite, uFppuu_t) \ + GO(SDL_RWread, LFppLL_t) \ + GO(SDL_RWwrite, LFppLL_t) \ GO(SDL_GetJoystickGUIDInfo, vFGpppp_t) \ - GO(SDL_OpenAudioDevice, iFpippi_t) \ + GO(SDL_OpenAudioDevice, uFpippi_t) \ GO(SDL_LoadWAV_RW, pFpippp_t) #endif // __wrappedsdl2TYPES_H_ diff --git a/src/wrapped/generated/wrappedsdl2undefs.h b/src/wrapped/generated/wrappedsdl2undefs.h index e27f5aeeb8f6d01dd3c5c9d2e972847f073526f3..84bdd733cea01217107589ec1297cf58f0032855 100644 --- a/src/wrapped/generated/wrappedsdl2undefs.h +++ b/src/wrapped/generated/wrappedsdl2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsdl2UNDEFS_H_ #define __wrappedsdl2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsecret1defs.h b/src/wrapped/generated/wrappedsecret1defs.h index d71edbccf778d947449e7c3990a032f2eb15346d..4b67d4a42e793052d27d4ee2a533c44e6a10b12d 100644 --- a/src/wrapped/generated/wrappedsecret1defs.h +++ b/src/wrapped/generated/wrappedsecret1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsecret1DEFS_H_ #define __wrappedsecret1DEFS_H_ diff --git a/src/wrapped/generated/wrappedsecret1types.h b/src/wrapped/generated/wrappedsecret1types.h index f9a322295642c31a863e8787fc5e864efe62ca31..39b76d478b97ff26c436987f90ef5eada7852363 100644 --- a/src/wrapped/generated/wrappedsecret1types.h +++ b/src/wrapped/generated/wrappedsecret1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsecret1TYPES_H_ #define __wrappedsecret1TYPES_H_ diff --git a/src/wrapped/generated/wrappedsecret1undefs.h b/src/wrapped/generated/wrappedsecret1undefs.h index 1ca2fefec27f19223760b8588d781f2ad10627f4..ce98b0990cad0766d77e3faac25cfe2e35aa8862 100644 --- a/src/wrapped/generated/wrappedsecret1undefs.h +++ b/src/wrapped/generated/wrappedsecret1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsecret1UNDEFS_H_ #define __wrappedsecret1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedselinuxdefs.h b/src/wrapped/generated/wrappedselinuxdefs.h index bc11a1019cda93e622179f5cc02e64a29d52eb37..ccdccc336cc755ac779eba274be3e01b1d07fe29 100644 --- a/src/wrapped/generated/wrappedselinuxdefs.h +++ b/src/wrapped/generated/wrappedselinuxdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedselinuxDEFS_H_ #define __wrappedselinuxDEFS_H_ diff --git a/src/wrapped/generated/wrappedselinuxtypes.h b/src/wrapped/generated/wrappedselinuxtypes.h index b79ee17303754421f44ad7d915ea87f740eda2e8..a9cc381b27ffb67749928d31273a4f370415c629 100644 --- a/src/wrapped/generated/wrappedselinuxtypes.h +++ b/src/wrapped/generated/wrappedselinuxtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedselinuxTYPES_H_ #define __wrappedselinuxTYPES_H_ diff --git a/src/wrapped/generated/wrappedselinuxundefs.h b/src/wrapped/generated/wrappedselinuxundefs.h index 8562c7db42308cf3e4c4def3b943ec6b055a67fb..c39713202547839a61eefa7b2206e445d4c9c08f 100644 --- a/src/wrapped/generated/wrappedselinuxundefs.h +++ b/src/wrapped/generated/wrappedselinuxundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedselinuxUNDEFS_H_ #define __wrappedselinuxUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsmime3defs.h b/src/wrapped/generated/wrappedsmime3defs.h index 7f730ae2bf49eadcc990a1f7de4a7d9737a3fcbf..a05f343583a7a711d8e30a747d7c9de6ea8c9418 100644 --- a/src/wrapped/generated/wrappedsmime3defs.h +++ b/src/wrapped/generated/wrappedsmime3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsmime3DEFS_H_ #define __wrappedsmime3DEFS_H_ diff --git a/src/wrapped/generated/wrappedsmime3types.h b/src/wrapped/generated/wrappedsmime3types.h index 6d382ecc5c659ff95f1daf20ecd5c38d344a3a5a..7aed484caa9c0f517071685a97759c8e26bb7634 100644 --- a/src/wrapped/generated/wrappedsmime3types.h +++ b/src/wrapped/generated/wrappedsmime3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsmime3TYPES_H_ #define __wrappedsmime3TYPES_H_ diff --git a/src/wrapped/generated/wrappedsmime3undefs.h b/src/wrapped/generated/wrappedsmime3undefs.h index 9e4d66a77c382c6533bf55a05969d24d56384327..98bcdf47eacb71b42297cca1899dc657b30d8992 100644 --- a/src/wrapped/generated/wrappedsmime3undefs.h +++ b/src/wrapped/generated/wrappedsmime3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsmime3UNDEFS_H_ #define __wrappedsmime3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsmpeg2defs.h b/src/wrapped/generated/wrappedsmpeg2defs.h index 87313f8bf37d78ed25ec1f68a627c4578b2b27b6..83a882eca4f0c973658947a1860c162d02475d75 100644 --- a/src/wrapped/generated/wrappedsmpeg2defs.h +++ b/src/wrapped/generated/wrappedsmpeg2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsmpeg2DEFS_H_ #define __wrappedsmpeg2DEFS_H_ diff --git a/src/wrapped/generated/wrappedsmpeg2types.h b/src/wrapped/generated/wrappedsmpeg2types.h index e9cb40d7e82a5d8477fcce47928563eb99107d03..ce20d4448402c1a0d0a58e671d2b271acbf37d39 100644 --- a/src/wrapped/generated/wrappedsmpeg2types.h +++ b/src/wrapped/generated/wrappedsmpeg2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsmpeg2TYPES_H_ #define __wrappedsmpeg2TYPES_H_ diff --git a/src/wrapped/generated/wrappedsmpeg2undefs.h b/src/wrapped/generated/wrappedsmpeg2undefs.h index 962f137dbaee38e4a68fb62f5219fc90d58f31d0..21b8e65e92771efa99f1db25b4a44ae7c307ec0a 100644 --- a/src/wrapped/generated/wrappedsmpeg2undefs.h +++ b/src/wrapped/generated/wrappedsmpeg2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsmpeg2UNDEFS_H_ #define __wrappedsmpeg2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsmpegdefs.h b/src/wrapped/generated/wrappedsmpegdefs.h index 2c6beebc1ce56133bf293dc205cd9e463a98d01a..8203dd0950e6f73c7c8ff53160d3d591d864a92c 100644 --- a/src/wrapped/generated/wrappedsmpegdefs.h +++ b/src/wrapped/generated/wrappedsmpegdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsmpegDEFS_H_ #define __wrappedsmpegDEFS_H_ diff --git a/src/wrapped/generated/wrappedsmpegtypes.h b/src/wrapped/generated/wrappedsmpegtypes.h index 15d7494d2078f5ddab9b5dca393d8eb671dac51a..64980bff8df1ef0d2ab3720890a68416de50d149 100644 --- a/src/wrapped/generated/wrappedsmpegtypes.h +++ b/src/wrapped/generated/wrappedsmpegtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsmpegTYPES_H_ #define __wrappedsmpegTYPES_H_ diff --git a/src/wrapped/generated/wrappedsmpegundefs.h b/src/wrapped/generated/wrappedsmpegundefs.h index d7682a7d7b68e75439d61f7c9aef91a8e8c00c86..30a449d3943e5d2d3c4dc94232024ea151ec2b87 100644 --- a/src/wrapped/generated/wrappedsmpegundefs.h +++ b/src/wrapped/generated/wrappedsmpegundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsmpegUNDEFS_H_ #define __wrappedsmpegUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedsoftokn3defs.h b/src/wrapped/generated/wrappedsoftokn3defs.h index 8c8fa0eefad073e2ef9a3179298ca2b757ae13ee..c0a689700db10bda0886326f3d918ef1c122556c 100644 --- a/src/wrapped/generated/wrappedsoftokn3defs.h +++ b/src/wrapped/generated/wrappedsoftokn3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsoftokn3DEFS_H_ #define __wrappedsoftokn3DEFS_H_ diff --git a/src/wrapped/generated/wrappedsoftokn3types.h b/src/wrapped/generated/wrappedsoftokn3types.h index 1cc54de9058eb12010e93f1682c595a0a0482b9b..7a22aafc81d261ec975eee4a70067bcdc1d4f11e 100644 --- a/src/wrapped/generated/wrappedsoftokn3types.h +++ b/src/wrapped/generated/wrappedsoftokn3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsoftokn3TYPES_H_ #define __wrappedsoftokn3TYPES_H_ diff --git a/src/wrapped/generated/wrappedsoftokn3undefs.h b/src/wrapped/generated/wrappedsoftokn3undefs.h index 2566450bdeb07c600d62046dc255df19dec640ee..95d6a27e6d77cdd5f3a42de7b7e789428d573424 100644 --- a/src/wrapped/generated/wrappedsoftokn3undefs.h +++ b/src/wrapped/generated/wrappedsoftokn3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedsoftokn3UNDEFS_H_ #define __wrappedsoftokn3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedssl3defs.h b/src/wrapped/generated/wrappedssl3defs.h index ae087e0a67422e14e7e6c7a614c70ddd1722c69f..aa14b6cabfe4b3f902129ae6457339f1266a1b57 100644 --- a/src/wrapped/generated/wrappedssl3defs.h +++ b/src/wrapped/generated/wrappedssl3defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedssl3DEFS_H_ #define __wrappedssl3DEFS_H_ diff --git a/src/wrapped/generated/wrappedssl3types.h b/src/wrapped/generated/wrappedssl3types.h index 1927a23092260c836fe76debbcc9a59efc7c4a18..1a58a91306d54b02c8581168efa8b67430634d76 100644 --- a/src/wrapped/generated/wrappedssl3types.h +++ b/src/wrapped/generated/wrappedssl3types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedssl3TYPES_H_ #define __wrappedssl3TYPES_H_ diff --git a/src/wrapped/generated/wrappedssl3undefs.h b/src/wrapped/generated/wrappedssl3undefs.h index 16eb9faab4ab7726f31aa10165966e3bf230005f..500a82aa730d2de51dd12c405e843b587a96ff1d 100644 --- a/src/wrapped/generated/wrappedssl3undefs.h +++ b/src/wrapped/generated/wrappedssl3undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedssl3UNDEFS_H_ #define __wrappedssl3UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbbinddefs.h b/src/wrapped/generated/wrappedtbbbinddefs.h index aba756fb85c313d53b87e0842822ad37f0ba9871..6d336c7f5f1e8714e413cfbb37453f0e361ea155 100644 --- a/src/wrapped/generated/wrappedtbbbinddefs.h +++ b/src/wrapped/generated/wrappedtbbbinddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedtbbbindDEFS_H_ #define __wrappedtbbbindDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbbindtypes.h b/src/wrapped/generated/wrappedtbbbindtypes.h index c898ebce805fec8cf19de8752c935d15e2a7c3f5..176e1447fa5d03dcb3dc1a9f1a086ff921edc64c 100644 --- a/src/wrapped/generated/wrappedtbbbindtypes.h +++ b/src/wrapped/generated/wrappedtbbbindtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedtbbbindTYPES_H_ #define __wrappedtbbbindTYPES_H_ diff --git a/src/wrapped/generated/wrappedtbbbindundefs.h b/src/wrapped/generated/wrappedtbbbindundefs.h index 408e8fb0d57e47127321324286b0cbed816a709f..a5896a9f9a280992e2b5253fce3b90d2da221003 100644 --- a/src/wrapped/generated/wrappedtbbbindundefs.h +++ b/src/wrapped/generated/wrappedtbbbindundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedtbbbindUNDEFS_H_ #define __wrappedtbbbindUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocdefs.h b/src/wrapped/generated/wrappedtbbmallocdefs.h index b0fe962a6a6c78bd22fc2625fe85c2796a61d744..1539535d1065a46fd59483b4a91ab306814622e5 100644 --- a/src/wrapped/generated/wrappedtbbmallocdefs.h +++ b/src/wrapped/generated/wrappedtbbmallocdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedtbbmallocDEFS_H_ #define __wrappedtbbmallocDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocproxydefs.h b/src/wrapped/generated/wrappedtbbmallocproxydefs.h index fab8b48a48eb404a48bbae7e7a9ab44812a11178..626a4e725f561736699872f87c21000169027267 100644 --- a/src/wrapped/generated/wrappedtbbmallocproxydefs.h +++ b/src/wrapped/generated/wrappedtbbmallocproxydefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedtbbmallocproxyDEFS_H_ #define __wrappedtbbmallocproxyDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocproxytypes.h b/src/wrapped/generated/wrappedtbbmallocproxytypes.h index 661340a093c61f977063f6d49f86c2acead1485b..5bdb00cf57ea83f1c5160d2cbb9cc6e4fb48212d 100644 --- a/src/wrapped/generated/wrappedtbbmallocproxytypes.h +++ b/src/wrapped/generated/wrappedtbbmallocproxytypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedtbbmallocproxyTYPES_H_ #define __wrappedtbbmallocproxyTYPES_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocproxyundefs.h b/src/wrapped/generated/wrappedtbbmallocproxyundefs.h index ed68ff0e07af52181b0b0bfc0efc4fefd203f5f4..b97ec12b807a7ac027e90b688840f7f85a3848cd 100644 --- a/src/wrapped/generated/wrappedtbbmallocproxyundefs.h +++ b/src/wrapped/generated/wrappedtbbmallocproxyundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedtbbmallocproxyUNDEFS_H_ #define __wrappedtbbmallocproxyUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedtbbmalloctypes.h b/src/wrapped/generated/wrappedtbbmalloctypes.h index caec388b410ba745a959cb8d58727e764afed650..f49391168f799dfdbfa609cd3932422488ca996e 100644 --- a/src/wrapped/generated/wrappedtbbmalloctypes.h +++ b/src/wrapped/generated/wrappedtbbmalloctypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedtbbmallocTYPES_H_ #define __wrappedtbbmallocTYPES_H_ diff --git a/src/wrapped/generated/wrappedtbbmallocundefs.h b/src/wrapped/generated/wrappedtbbmallocundefs.h index 0e22b278c9ea421dd828e5610a4e146dc23b704b..95f8d3902c3e7dc7af181c86fa5d5b899a84829d 100644 --- a/src/wrapped/generated/wrappedtbbmallocundefs.h +++ b/src/wrapped/generated/wrappedtbbmallocundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedtbbmallocUNDEFS_H_ #define __wrappedtbbmallocUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedtcmallocminimaldefs.h b/src/wrapped/generated/wrappedtcmallocminimaldefs.h index c22b54d07b27e33fa3b6a6c04d70a5e6ee02f282..8b582ee1d55a42422419d62873a98da8f450fc06 100644 --- a/src/wrapped/generated/wrappedtcmallocminimaldefs.h +++ b/src/wrapped/generated/wrappedtcmallocminimaldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedtcmallocminimalDEFS_H_ #define __wrappedtcmallocminimalDEFS_H_ diff --git a/src/wrapped/generated/wrappedtcmallocminimaltypes.h b/src/wrapped/generated/wrappedtcmallocminimaltypes.h index 52e03b2d8c803a5fa89abe5183694bcd428d76c3..79b277a05b536166c91ff717fb0a8f46d0623919 100644 --- a/src/wrapped/generated/wrappedtcmallocminimaltypes.h +++ b/src/wrapped/generated/wrappedtcmallocminimaltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedtcmallocminimalTYPES_H_ #define __wrappedtcmallocminimalTYPES_H_ diff --git a/src/wrapped/generated/wrappedtcmallocminimalundefs.h b/src/wrapped/generated/wrappedtcmallocminimalundefs.h index 2dc85a79b1a56c969f4a9b5b8f3ec007d9837104..4721477d50f73ca7e15e887b13ec0c4b913354c0 100644 --- a/src/wrapped/generated/wrappedtcmallocminimalundefs.h +++ b/src/wrapped/generated/wrappedtcmallocminimalundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedtcmallocminimalUNDEFS_H_ #define __wrappedtcmallocminimalUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedudev0defs.h b/src/wrapped/generated/wrappedudev0defs.h index 23e9251e5b36ebb410c992a28d5a035c2fbb7d3a..f0acdad13989b677f45cec742212b6bbe6c03394 100644 --- a/src/wrapped/generated/wrappedudev0defs.h +++ b/src/wrapped/generated/wrappedudev0defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedudev0DEFS_H_ #define __wrappedudev0DEFS_H_ diff --git a/src/wrapped/generated/wrappedudev0types.h b/src/wrapped/generated/wrappedudev0types.h index 9226453bed020fd3d8e6aaf7331030764057aa9a..29a1ee6504f02c5c2f66b38007130a9c54103904 100644 --- a/src/wrapped/generated/wrappedudev0types.h +++ b/src/wrapped/generated/wrappedudev0types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedudev0TYPES_H_ #define __wrappedudev0TYPES_H_ diff --git a/src/wrapped/generated/wrappedudev0undefs.h b/src/wrapped/generated/wrappedudev0undefs.h index ca9b005cacdb35f37bcf666b03c1fa4ac6acd571..1d78416f881e8f0980627e7fc6227dc137212d18 100644 --- a/src/wrapped/generated/wrappedudev0undefs.h +++ b/src/wrapped/generated/wrappedudev0undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedudev0UNDEFS_H_ #define __wrappedudev0UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedudev1defs.h b/src/wrapped/generated/wrappedudev1defs.h index 040be66a5138cf03b4dabd4f9f689f2a921aee4c..ce80fedc541a34ca99295550f6d50d87d58cbe32 100644 --- a/src/wrapped/generated/wrappedudev1defs.h +++ b/src/wrapped/generated/wrappedudev1defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedudev1DEFS_H_ #define __wrappedudev1DEFS_H_ diff --git a/src/wrapped/generated/wrappedudev1types.h b/src/wrapped/generated/wrappedudev1types.h index 7d1681bf4122efbafabbcf7a30c84ed6bf6ac094..c406d44ff31a74a38794972be79d97b5633a7363 100644 --- a/src/wrapped/generated/wrappedudev1types.h +++ b/src/wrapped/generated/wrappedudev1types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedudev1TYPES_H_ #define __wrappedudev1TYPES_H_ diff --git a/src/wrapped/generated/wrappedudev1undefs.h b/src/wrapped/generated/wrappedudev1undefs.h index 814025c74a353205575c02c1ff93e065754e28e9..901da5cbf132bd532cdbddef110b6dcac0e3e4ce 100644 --- a/src/wrapped/generated/wrappedudev1undefs.h +++ b/src/wrapped/generated/wrappedudev1undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedudev1UNDEFS_H_ #define __wrappedudev1UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedunwinddefs.h b/src/wrapped/generated/wrappedunwinddefs.h index 6b5b16e68f396e13d19e3cfef4c84f2c9549cf85..9e046f00d68f44094d1ddc134f289486d6c75b3a 100644 --- a/src/wrapped/generated/wrappedunwinddefs.h +++ b/src/wrapped/generated/wrappedunwinddefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedunwindDEFS_H_ #define __wrappedunwindDEFS_H_ diff --git a/src/wrapped/generated/wrappedunwindtypes.h b/src/wrapped/generated/wrappedunwindtypes.h index 78977ea65e4581efea9c443cb734450992e9b7fa..4732295b7339f3f21da05e1804d5cf80d320a60c 100644 --- a/src/wrapped/generated/wrappedunwindtypes.h +++ b/src/wrapped/generated/wrappedunwindtypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedunwindTYPES_H_ #define __wrappedunwindTYPES_H_ diff --git a/src/wrapped/generated/wrappedunwindundefs.h b/src/wrapped/generated/wrappedunwindundefs.h index 13d2afbb05f79116da1c7f77bde7abca02d61a51..caff7a15f68de624a92da1f4342c715f9e5b7256 100644 --- a/src/wrapped/generated/wrappedunwindundefs.h +++ b/src/wrapped/generated/wrappedunwindundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedunwindUNDEFS_H_ #define __wrappedunwindUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedutildefs.h b/src/wrapped/generated/wrappedutildefs.h index 14920bc05b28ddc59e095d103b28bffab855e76b..2b9155c8e1245ce4feb685330b9e6bea053b289d 100644 --- a/src/wrapped/generated/wrappedutildefs.h +++ b/src/wrapped/generated/wrappedutildefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedutilDEFS_H_ #define __wrappedutilDEFS_H_ diff --git a/src/wrapped/generated/wrappedutiltypes.h b/src/wrapped/generated/wrappedutiltypes.h index 8b4627679beb8481fcdd590ed3f6581590a9e3de..f39c7841112f8b113dae489537113952cb15bce2 100644 --- a/src/wrapped/generated/wrappedutiltypes.h +++ b/src/wrapped/generated/wrappedutiltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedutilTYPES_H_ #define __wrappedutilTYPES_H_ diff --git a/src/wrapped/generated/wrappedutilundefs.h b/src/wrapped/generated/wrappedutilundefs.h index 69632e8d70384feddb1bcbcc6efc128db1808693..79af0d5d34cc17db8608415522f5fe274206eb82 100644 --- a/src/wrapped/generated/wrappedutilundefs.h +++ b/src/wrapped/generated/wrappedutilundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedutilUNDEFS_H_ #define __wrappedutilUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedvorbisfiledefs.h b/src/wrapped/generated/wrappedvorbisfiledefs.h index 50057e6dd529a5d1264e6c1f69a982a9ac5ab860..3a1c07615b6887f0d24063c98aa9c20c628b5c2e 100644 --- a/src/wrapped/generated/wrappedvorbisfiledefs.h +++ b/src/wrapped/generated/wrappedvorbisfiledefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedvorbisfileDEFS_H_ #define __wrappedvorbisfileDEFS_H_ diff --git a/src/wrapped/generated/wrappedvorbisfiletypes.h b/src/wrapped/generated/wrappedvorbisfiletypes.h index 1533cbaca339a7a2ad7dada6a448e13555961f94..6abe43d26f69536f17179c33cc0eaee385363a59 100644 --- a/src/wrapped/generated/wrappedvorbisfiletypes.h +++ b/src/wrapped/generated/wrappedvorbisfiletypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedvorbisfileTYPES_H_ #define __wrappedvorbisfileTYPES_H_ diff --git a/src/wrapped/generated/wrappedvorbisfileundefs.h b/src/wrapped/generated/wrappedvorbisfileundefs.h index 329c731ddfc99979b825039feaafed869ef532f4..37bccc19a75b3d3f824ee92b1564aa5bc56222cb 100644 --- a/src/wrapped/generated/wrappedvorbisfileundefs.h +++ b/src/wrapped/generated/wrappedvorbisfileundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedvorbisfileUNDEFS_H_ #define __wrappedvorbisfileUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedvulkandefs.h b/src/wrapped/generated/wrappedvulkandefs.h index f976c2da79f2fdeaae634ba1502753c6299e5038..40b9d57dd2f35f849ff90d87fc6f014c73aae94e 100644 --- a/src/wrapped/generated/wrappedvulkandefs.h +++ b/src/wrapped/generated/wrappedvulkandefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedvulkanDEFS_H_ #define __wrappedvulkanDEFS_H_ diff --git a/src/wrapped/generated/wrappedvulkantypes.h b/src/wrapped/generated/wrappedvulkantypes.h index fd78439107153c849ff9f1e27cc66a6f87b88398..76fabe63d34e700d75cd44eb850adc92094f0acc 100644 --- a/src/wrapped/generated/wrappedvulkantypes.h +++ b/src/wrapped/generated/wrappedvulkantypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedvulkanTYPES_H_ #define __wrappedvulkanTYPES_H_ diff --git a/src/wrapped/generated/wrappedvulkanundefs.h b/src/wrapped/generated/wrappedvulkanundefs.h index a43e9a6d8663559dfede6536af09a77f01b4f9c2..2ab1691d1bc5d8f7c8a0d45d7c4803c617088ccd 100644 --- a/src/wrapped/generated/wrappedvulkanundefs.h +++ b/src/wrapped/generated/wrappedvulkanundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedvulkanUNDEFS_H_ #define __wrappedvulkanUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandclientdefs.h b/src/wrapped/generated/wrappedwaylandclientdefs.h index b1aa284ea584f1b4dfc4a708cb5a44c6a7b29a04..e0ecdae7db3da6b3d748bc3f14260ac65b976892 100644 --- a/src/wrapped/generated/wrappedwaylandclientdefs.h +++ b/src/wrapped/generated/wrappedwaylandclientdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedwaylandclientDEFS_H_ #define __wrappedwaylandclientDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandclienttypes.h b/src/wrapped/generated/wrappedwaylandclienttypes.h index fe0f4d8e05b110a66210134c4597ab6d084d307a..5cb4ca70094d099437a61d06d1b87e034792e50c 100644 --- a/src/wrapped/generated/wrappedwaylandclienttypes.h +++ b/src/wrapped/generated/wrappedwaylandclienttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedwaylandclientTYPES_H_ #define __wrappedwaylandclientTYPES_H_ @@ -11,9 +11,11 @@ #define ADDED_FUNCTIONS() #endif +typedef void (*vFp_t)(void*); typedef int32_t (*iFppp_t)(void*, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ + GO(wl_log_set_handler_client, vFp_t) \ GO(wl_proxy_add_listener, iFppp_t) #endif // __wrappedwaylandclientTYPES_H_ diff --git a/src/wrapped/generated/wrappedwaylandclientundefs.h b/src/wrapped/generated/wrappedwaylandclientundefs.h index 3848289a3a33936e20418f509dacaef3b03011d7..ae10ea43e9202870e6437dc1bebdc8a230a63000 100644 --- a/src/wrapped/generated/wrappedwaylandclientundefs.h +++ b/src/wrapped/generated/wrappedwaylandclientundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedwaylandclientUNDEFS_H_ #define __wrappedwaylandclientUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandcursordefs.h b/src/wrapped/generated/wrappedwaylandcursordefs.h index 0a3c0aef75a7267f977472392d8c6383c540771a..469aaf7006c68710af61876bdff3be7e1d1adad4 100644 --- a/src/wrapped/generated/wrappedwaylandcursordefs.h +++ b/src/wrapped/generated/wrappedwaylandcursordefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedwaylandcursorDEFS_H_ #define __wrappedwaylandcursorDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandcursortypes.h b/src/wrapped/generated/wrappedwaylandcursortypes.h index b04183af7ce5441cbb3a3f106b881d6a4840f856..2a70e76152ae98cbdc8f1a50902564b881df33ef 100644 --- a/src/wrapped/generated/wrappedwaylandcursortypes.h +++ b/src/wrapped/generated/wrappedwaylandcursortypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedwaylandcursorTYPES_H_ #define __wrappedwaylandcursorTYPES_H_ diff --git a/src/wrapped/generated/wrappedwaylandcursorundefs.h b/src/wrapped/generated/wrappedwaylandcursorundefs.h index 88cfda9fffe303a08938e33e6198c47331771d82..a34f307f089a1d436bf387d068b8f75748302925 100644 --- a/src/wrapped/generated/wrappedwaylandcursorundefs.h +++ b/src/wrapped/generated/wrappedwaylandcursorundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedwaylandcursorUNDEFS_H_ #define __wrappedwaylandcursorUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandegldefs.h b/src/wrapped/generated/wrappedwaylandegldefs.h index 7887ffc1edbb2d8f86a9e57ae3467363b3b21fe6..76dd43d40142d59339237324fe18bde3e54be0e1 100644 --- a/src/wrapped/generated/wrappedwaylandegldefs.h +++ b/src/wrapped/generated/wrappedwaylandegldefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedwaylandeglDEFS_H_ #define __wrappedwaylandeglDEFS_H_ diff --git a/src/wrapped/generated/wrappedwaylandegltypes.h b/src/wrapped/generated/wrappedwaylandegltypes.h index 91c5de4d255d4cb5aabbce9441b5bb461001e8c5..e7cd616044428cae63e688bdd3df22ce5b01b0a4 100644 --- a/src/wrapped/generated/wrappedwaylandegltypes.h +++ b/src/wrapped/generated/wrappedwaylandegltypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedwaylandeglTYPES_H_ #define __wrappedwaylandeglTYPES_H_ diff --git a/src/wrapped/generated/wrappedwaylandeglundefs.h b/src/wrapped/generated/wrappedwaylandeglundefs.h index 84f92a373d3ab541809c9c7aef8e4b9d4ecb7b38..c6b0f9ee71b56abcc9e22821ec8b0bf2010c4c46 100644 --- a/src/wrapped/generated/wrappedwaylandeglundefs.h +++ b/src/wrapped/generated/wrappedwaylandeglundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedwaylandeglUNDEFS_H_ #define __wrappedwaylandeglUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxineramadefs.h b/src/wrapped/generated/wrappedxineramadefs.h index 5d869c98c762c56524954b7d90bc3da7fb1e0723..0dfb1535287eb577260d6c81b14bb1429ffcf0cc 100644 --- a/src/wrapped/generated/wrappedxineramadefs.h +++ b/src/wrapped/generated/wrappedxineramadefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxineramaDEFS_H_ #define __wrappedxineramaDEFS_H_ diff --git a/src/wrapped/generated/wrappedxineramatypes.h b/src/wrapped/generated/wrappedxineramatypes.h index 111c7e7e65f86e3d62d8f2e36725eae48e099cf4..25353ee73719d4d22492da94ec332a8e115714fa 100644 --- a/src/wrapped/generated/wrappedxineramatypes.h +++ b/src/wrapped/generated/wrappedxineramatypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxineramaTYPES_H_ #define __wrappedxineramaTYPES_H_ diff --git a/src/wrapped/generated/wrappedxineramaundefs.h b/src/wrapped/generated/wrappedxineramaundefs.h index 8c55ca09d9d62f528c51724880277454ef6e8819..6411982092494fac0b39a46318264d22d76fedf4 100644 --- a/src/wrapped/generated/wrappedxineramaundefs.h +++ b/src/wrapped/generated/wrappedxineramaundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxineramaUNDEFS_H_ #define __wrappedxineramaUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbcommondefs.h b/src/wrapped/generated/wrappedxkbcommondefs.h index 692dd5ca605f657cdb6c80324c559e814b4e63f2..e21e77d5f15b14b919882ab857491e6b7baad56d 100644 --- a/src/wrapped/generated/wrappedxkbcommondefs.h +++ b/src/wrapped/generated/wrappedxkbcommondefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxkbcommonDEFS_H_ #define __wrappedxkbcommonDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbcommontypes.h b/src/wrapped/generated/wrappedxkbcommontypes.h index 8ed4d900a6744958352278ab6cdd4c67aa11c0ba..c7a3470cb16728b8296763d156316156b95e6c9c 100644 --- a/src/wrapped/generated/wrappedxkbcommontypes.h +++ b/src/wrapped/generated/wrappedxkbcommontypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxkbcommonTYPES_H_ #define __wrappedxkbcommonTYPES_H_ diff --git a/src/wrapped/generated/wrappedxkbcommonundefs.h b/src/wrapped/generated/wrappedxkbcommonundefs.h index 50f35582b3dfbcc96061ce9d37d18ed10bf7699f..7f2c03c35457ca67406510a3563e18fcd9fe9590 100644 --- a/src/wrapped/generated/wrappedxkbcommonundefs.h +++ b/src/wrapped/generated/wrappedxkbcommonundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxkbcommonUNDEFS_H_ #define __wrappedxkbcommonUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbcommonx11defs.h b/src/wrapped/generated/wrappedxkbcommonx11defs.h index d182bec98c34363aa221735aa00de80ed57378d0..d5592909b7439f4b06304de172adec4caaede926 100644 --- a/src/wrapped/generated/wrappedxkbcommonx11defs.h +++ b/src/wrapped/generated/wrappedxkbcommonx11defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxkbcommonx11DEFS_H_ #define __wrappedxkbcommonx11DEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbcommonx11types.h b/src/wrapped/generated/wrappedxkbcommonx11types.h index 790d388e43e82c47e41d1ae123580efd4284d3ab..1e2dde7c0b97744ee9d4d2a8cd9947ca7b87c5a2 100644 --- a/src/wrapped/generated/wrappedxkbcommonx11types.h +++ b/src/wrapped/generated/wrappedxkbcommonx11types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxkbcommonx11TYPES_H_ #define __wrappedxkbcommonx11TYPES_H_ diff --git a/src/wrapped/generated/wrappedxkbcommonx11undefs.h b/src/wrapped/generated/wrappedxkbcommonx11undefs.h index 3d21600a2a1ccf55e13e4d5ebe473678d7f193b8..cfe4f523d81f802ccded6f91c5498104e6e0f1ea 100644 --- a/src/wrapped/generated/wrappedxkbcommonx11undefs.h +++ b/src/wrapped/generated/wrappedxkbcommonx11undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxkbcommonx11UNDEFS_H_ #define __wrappedxkbcommonx11UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbregistrydefs.h b/src/wrapped/generated/wrappedxkbregistrydefs.h index 2a054780a58467288154ed7d790b8b467103045f..540388b9df45014803f302af22af750d6d552467 100644 --- a/src/wrapped/generated/wrappedxkbregistrydefs.h +++ b/src/wrapped/generated/wrappedxkbregistrydefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxkbregistryDEFS_H_ #define __wrappedxkbregistryDEFS_H_ diff --git a/src/wrapped/generated/wrappedxkbregistrytypes.h b/src/wrapped/generated/wrappedxkbregistrytypes.h index 51cfef34de3f2f222da1ad4afb6fd8e93c72e850..30ca62d085ac35f739f3a5af3492332c65a0b72d 100644 --- a/src/wrapped/generated/wrappedxkbregistrytypes.h +++ b/src/wrapped/generated/wrappedxkbregistrytypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxkbregistryTYPES_H_ #define __wrappedxkbregistryTYPES_H_ diff --git a/src/wrapped/generated/wrappedxkbregistryundefs.h b/src/wrapped/generated/wrappedxkbregistryundefs.h index f106d4af8588f4eb445f551eb81ee1cc2130275e..bca52282b799117f3c14406dc7e8a2e52b8a599c 100644 --- a/src/wrapped/generated/wrappedxkbregistryundefs.h +++ b/src/wrapped/generated/wrappedxkbregistryundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxkbregistryUNDEFS_H_ #define __wrappedxkbregistryUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxml2defs.h b/src/wrapped/generated/wrappedxml2defs.h index 9e06efca5f199bf56f06b67057278ff3dd335a7e..1595085eaaa6570af92f9b9fb8712819d04faee2 100644 --- a/src/wrapped/generated/wrappedxml2defs.h +++ b/src/wrapped/generated/wrappedxml2defs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxml2DEFS_H_ #define __wrappedxml2DEFS_H_ diff --git a/src/wrapped/generated/wrappedxml2types.h b/src/wrapped/generated/wrappedxml2types.h index bed5ff5928ee3f4c843be155659d03db3e41984c..f52aeea3cefb607153fa759df5b6afb266054859 100644 --- a/src/wrapped/generated/wrappedxml2types.h +++ b/src/wrapped/generated/wrappedxml2types.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxml2TYPES_H_ #define __wrappedxml2TYPES_H_ diff --git a/src/wrapped/generated/wrappedxml2undefs.h b/src/wrapped/generated/wrappedxml2undefs.h index cb9cbb731fa6f3b6c2c2b8dd11d546835a68c236..8eb151fa41413981a5c73a055d34d573001d7e3b 100644 --- a/src/wrapped/generated/wrappedxml2undefs.h +++ b/src/wrapped/generated/wrappedxml2undefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxml2UNDEFS_H_ #define __wrappedxml2UNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxshmfencedefs.h b/src/wrapped/generated/wrappedxshmfencedefs.h index 38ffbde4af2e20ab784a49dd67295e07da2fb21a..422a7f4ec0ab9b87670949b7d723bac8f9c11853 100644 --- a/src/wrapped/generated/wrappedxshmfencedefs.h +++ b/src/wrapped/generated/wrappedxshmfencedefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxshmfenceDEFS_H_ #define __wrappedxshmfenceDEFS_H_ diff --git a/src/wrapped/generated/wrappedxshmfencetypes.h b/src/wrapped/generated/wrappedxshmfencetypes.h index 01c92a212df668dc13497112196be371274e70cd..4d3515a03439470f27003ba2e73edf097fe0ee18 100644 --- a/src/wrapped/generated/wrappedxshmfencetypes.h +++ b/src/wrapped/generated/wrappedxshmfencetypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxshmfenceTYPES_H_ #define __wrappedxshmfenceTYPES_H_ diff --git a/src/wrapped/generated/wrappedxshmfenceundefs.h b/src/wrapped/generated/wrappedxshmfenceundefs.h index 57603fd9fa7a651dded4e40857da7a6ba25db883..fa4aee658f30f71692e5c6193480765dcc7490f0 100644 --- a/src/wrapped/generated/wrappedxshmfenceundefs.h +++ b/src/wrapped/generated/wrappedxshmfenceundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxshmfenceUNDEFS_H_ #define __wrappedxshmfenceUNDEFS_H_ diff --git a/src/wrapped/generated/wrappedxsltdefs.h b/src/wrapped/generated/wrappedxsltdefs.h index bc87e3607142d0c1603ac2002d4e25dcee8e05b4..9a56a571ea7622880b3dbf248441b6bbe8adbf79 100644 --- a/src/wrapped/generated/wrappedxsltdefs.h +++ b/src/wrapped/generated/wrappedxsltdefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxsltDEFS_H_ #define __wrappedxsltDEFS_H_ diff --git a/src/wrapped/generated/wrappedxslttypes.h b/src/wrapped/generated/wrappedxslttypes.h index c96a36463d12fee12ff543d5fb99bb27f72d134d..d67f30a4bd9da5139ef14e679fe4f793292ec76c 100644 --- a/src/wrapped/generated/wrappedxslttypes.h +++ b/src/wrapped/generated/wrappedxslttypes.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxsltTYPES_H_ #define __wrappedxsltTYPES_H_ diff --git a/src/wrapped/generated/wrappedxsltundefs.h b/src/wrapped/generated/wrappedxsltundefs.h index 057facc4338eec9b6792265d0b99003e05567bd5..ee58560abb4a1d84ebef6a801f5e001538b17331 100644 --- a/src/wrapped/generated/wrappedxsltundefs.h +++ b/src/wrapped/generated/wrappedxsltundefs.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __wrappedxsltUNDEFS_H_ #define __wrappedxsltUNDEFS_H_ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 19cb117efd29e2e4cf69875c6fbee1334de37341..2a53b674c17669e8e2af1f8c067c331f3e9de3c6 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #include #include @@ -30,6 +30,19 @@ static void* io_convert(void* v) return v; } +static void* io_convert_back(void* v) +{ + if(!v) + return v; + if(v == stdin) + return my__IO_2_1_stdin_; + if(v == stdout) + return my__IO_2_1_stdout_; + if(v == stderr) + return my__IO_2_1_stderr_; + return v; +} + #define ST0val ST0.d int of_convert(int); @@ -53,6 +66,7 @@ typedef void (*vFp_t)(void*); typedef void (*vFS_t)(void*); typedef void (*vFb_t)(void*); typedef int8_t (*cFv_t)(void); +typedef int8_t (*cFc_t)(int8_t); typedef int8_t (*cFi_t)(int32_t); typedef int8_t (*cFu_t)(uint32_t); typedef int8_t (*cFf_t)(float); @@ -60,22 +74,20 @@ typedef int8_t (*cFp_t)(void*); typedef int16_t (*wFp_t)(void*); typedef int32_t (*iFE_t)(x64emu_t*); typedef int32_t (*iFv_t)(void); +typedef int32_t (*iFc_t)(int8_t); typedef int32_t (*iFw_t)(int16_t); typedef int32_t (*iFi_t)(int32_t); typedef int32_t (*iFI_t)(int64_t); typedef int32_t (*iFC_t)(uint8_t); typedef int32_t (*iFW_t)(uint16_t); typedef int32_t (*iFu_t)(uint32_t); -typedef int32_t (*iFU_t)(uint64_t); typedef int32_t (*iFf_t)(float); typedef int32_t (*iFd_t)(double); -typedef int32_t (*iFD_t)(long double); typedef int32_t (*iFl_t)(intptr_t); typedef int32_t (*iFL_t)(uintptr_t); typedef int32_t (*iFp_t)(void*); typedef int32_t (*iFO_t)(int32_t); typedef int32_t (*iFS_t)(void*); -typedef int32_t (*iFP_t)(void*); typedef int32_t (*iFb_t)(void*); typedef int64_t (*IFv_t)(void); typedef int64_t (*IFi_t)(int32_t); @@ -83,11 +95,12 @@ typedef int64_t (*IFI_t)(int64_t); typedef int64_t (*IFf_t)(float); typedef int64_t (*IFd_t)(double); typedef int64_t (*IFp_t)(void*); +typedef int64_t (*IFS_t)(void*); typedef uint8_t (*CFv_t)(void); typedef uint8_t (*CFi_t)(int32_t); -typedef uint8_t (*CFC_t)(uint8_t); typedef uint8_t (*CFW_t)(uint16_t); typedef uint8_t (*CFu_t)(uint32_t); +typedef uint8_t (*CFU_t)(uint64_t); typedef uint8_t (*CFl_t)(intptr_t); typedef uint8_t (*CFL_t)(uintptr_t); typedef uint8_t (*CFp_t)(void*); @@ -98,12 +111,14 @@ typedef uint16_t (*WFp_t)(void*); typedef uint32_t (*uFv_t)(void); typedef uint32_t (*uFi_t)(int32_t); typedef uint32_t (*uFu_t)(uint32_t); +typedef uint32_t (*uFU_t)(uint64_t); typedef uint32_t (*uFd_t)(double); -typedef uint32_t (*uFl_t)(intptr_t); typedef uint32_t (*uFL_t)(uintptr_t); typedef uint32_t (*uFp_t)(void*); +typedef uint32_t (*uFS_t)(void*); typedef uint32_t (*uFb_t)(void*); typedef uint64_t (*UFv_t)(void); +typedef uint64_t (*UFi_t)(int32_t); typedef uint64_t (*UFu_t)(uint32_t); typedef uint64_t (*UFp_t)(void*); typedef float (*fFi_t)(int32_t); @@ -121,6 +136,7 @@ typedef intptr_t (*lFi_t)(int32_t); typedef intptr_t (*lFu_t)(uint32_t); typedef intptr_t (*lFl_t)(intptr_t); typedef intptr_t (*lFp_t)(void*); +typedef intptr_t (*lFS_t)(void*); typedef uintptr_t (*LFv_t)(void); typedef uintptr_t (*LFi_t)(int32_t); typedef uintptr_t (*LFu_t)(uint32_t); @@ -140,10 +156,13 @@ typedef void* (*pFl_t)(intptr_t); typedef void* (*pFL_t)(uintptr_t); typedef void* (*pFp_t)(void*); typedef void* (*pFV_t)(void*); +typedef void* (*pFS_t)(void*); typedef void* (*pFA_t)(void*); typedef void* (*pFb_t)(void*); +typedef void* (*SFv_t)(void); typedef unsigned __int128 (*HFi_t)(int32_t); typedef unsigned __int128 (*HFp_t)(void*); +typedef unsigned __int128 (*HFH_t)(unsigned __int128); typedef complexf_t (*xFx_t)(complexf_t); typedef complex_t (*XFX_t)(complex_t); typedef void (*vWp_t)(void*); @@ -155,19 +174,19 @@ typedef void (*vFEp_t)(x64emu_t*, void*); typedef void (*vFcc_t)(int8_t, int8_t); typedef void (*vFww_t)(int16_t, int16_t); typedef void (*vFii_t)(int32_t, int32_t); +typedef void (*vFiI_t)(int32_t, int64_t); typedef void (*vFiW_t)(int32_t, uint16_t); typedef void (*vFiu_t)(int32_t, uint32_t); typedef void (*vFiU_t)(int32_t, uint64_t); typedef void (*vFif_t)(int32_t, float); typedef void (*vFid_t)(int32_t, double); -typedef void (*vFil_t)(int32_t, intptr_t); -typedef void (*vFiL_t)(int32_t, uintptr_t); typedef void (*vFip_t)(int32_t, void*); typedef void (*vFWW_t)(uint16_t, uint16_t); typedef void (*vFWp_t)(uint16_t, void*); typedef void (*vFuc_t)(uint32_t, int8_t); typedef void (*vFuw_t)(uint32_t, int16_t); typedef void (*vFui_t)(uint32_t, int32_t); +typedef void (*vFuI_t)(uint32_t, int64_t); typedef void (*vFuC_t)(uint32_t, uint8_t); typedef void (*vFuW_t)(uint32_t, uint16_t); typedef void (*vFuu_t)(uint32_t, uint32_t); @@ -177,7 +196,7 @@ typedef void (*vFud_t)(uint32_t, double); typedef void (*vFul_t)(uint32_t, intptr_t); typedef void (*vFuL_t)(uint32_t, uintptr_t); typedef void (*vFup_t)(uint32_t, void*); -typedef void (*vFUi_t)(uint64_t, int32_t); +typedef void (*vFUu_t)(uint64_t, uint32_t); typedef void (*vFfi_t)(float, int32_t); typedef void (*vFfC_t)(float, uint8_t); typedef void (*vFff_t)(float, float); @@ -200,9 +219,10 @@ typedef void (*vFpd_t)(void*, double); typedef void (*vFpl_t)(void*, intptr_t); typedef void (*vFpL_t)(void*, uintptr_t); typedef void (*vFpp_t)(void*, void*); -typedef void (*vFpV_t)(void*, void*); typedef void (*vFpS_t)(void*, void*); +typedef void (*vFpA_t)(void*, void*); typedef void (*vFSi_t)(void*, int32_t); +typedef void (*vFSp_t)(void*, void*); typedef void (*vFbi_t)(void*, int32_t); typedef void (*vFbu_t)(void*, uint32_t); typedef void (*vFbU_t)(void*, uint64_t); @@ -220,8 +240,8 @@ typedef int32_t (*iFii_t)(int32_t, int32_t); typedef int32_t (*iFiI_t)(int32_t, int64_t); typedef int32_t (*iFiC_t)(int32_t, uint8_t); typedef int32_t (*iFiu_t)(int32_t, uint32_t); +typedef int32_t (*iFiU_t)(int32_t, uint64_t); typedef int32_t (*iFil_t)(int32_t, intptr_t); -typedef int32_t (*iFiL_t)(int32_t, uintptr_t); typedef int32_t (*iFip_t)(int32_t, void*); typedef int32_t (*iFiS_t)(int32_t, void*); typedef int32_t (*iFui_t)(uint32_t, int32_t); @@ -247,14 +267,16 @@ typedef int32_t (*iFpd_t)(void*, double); typedef int32_t (*iFpl_t)(void*, intptr_t); typedef int32_t (*iFpL_t)(void*, uintptr_t); typedef int32_t (*iFpp_t)(void*, void*); +typedef int32_t (*iFpV_t)(void*, void*); typedef int32_t (*iFpO_t)(void*, int32_t); +typedef int32_t (*iFpS_t)(void*, void*); +typedef int32_t (*iFpA_t)(void*, void*); typedef int32_t (*iFSi_t)(void*, int32_t); -typedef int64_t (*IFEi_t)(x64emu_t*, int32_t); +typedef int32_t (*iFSp_t)(void*, void*); typedef int64_t (*IFEf_t)(x64emu_t*, float); typedef int64_t (*IFEd_t)(x64emu_t*, double); typedef int64_t (*IFEp_t)(x64emu_t*, void*); typedef int64_t (*IFip_t)(int32_t, void*); -typedef int64_t (*IFII_t)(int64_t, int64_t); typedef int64_t (*IFpi_t)(void*, int32_t); typedef int64_t (*IFpu_t)(void*, uint32_t); typedef int64_t (*IFpd_t)(void*, double); @@ -264,7 +286,7 @@ typedef uint8_t (*CFCi_t)(uint8_t, int32_t); typedef uint8_t (*CFui_t)(uint32_t, int32_t); typedef uint8_t (*CFuW_t)(uint32_t, uint16_t); typedef uint8_t (*CFuu_t)(uint32_t, uint32_t); -typedef uint8_t (*CFuL_t)(uint32_t, uintptr_t); +typedef uint8_t (*CFuU_t)(uint32_t, uint64_t); typedef uint8_t (*CFpi_t)(void*, int32_t); typedef uint8_t (*CFpu_t)(void*, uint32_t); typedef uint8_t (*CFpL_t)(void*, uintptr_t); @@ -273,12 +295,11 @@ typedef uint16_t (*WFpi_t)(void*, int32_t); typedef uint16_t (*WFpp_t)(void*, void*); typedef uint32_t (*uFEp_t)(x64emu_t*, void*); typedef uint32_t (*uFii_t)(int32_t, int32_t); -typedef uint32_t (*uFiu_t)(int32_t, uint32_t); -typedef uint32_t (*uFip_t)(int32_t, void*); +typedef uint32_t (*uFiS_t)(int32_t, void*); typedef uint32_t (*uFui_t)(uint32_t, int32_t); typedef uint32_t (*uFuu_t)(uint32_t, uint32_t); typedef uint32_t (*uFup_t)(uint32_t, void*); -typedef uint32_t (*uFuM_t)(uint32_t, ...); +typedef uint32_t (*uFuS_t)(uint32_t, void*); typedef uint32_t (*uFpw_t)(void*, int16_t); typedef uint32_t (*uFpi_t)(void*, int32_t); typedef uint32_t (*uFpC_t)(void*, uint8_t); @@ -290,6 +311,7 @@ typedef uint32_t (*uFpL_t)(void*, uintptr_t); typedef uint32_t (*uFpp_t)(void*, void*); typedef uint32_t (*uFbu_t)(void*, uint32_t); typedef uint64_t (*UFEp_t)(x64emu_t*, void*); +typedef uint64_t (*UFii_t)(int32_t, int32_t); typedef uint64_t (*UFuu_t)(uint32_t, uint32_t); typedef uint64_t (*UFUp_t)(uint64_t, void*); typedef uint64_t (*UFpi_t)(void*, int32_t); @@ -300,7 +322,6 @@ typedef float (*fFEp_t)(x64emu_t*, void*); typedef float (*fFif_t)(int32_t, float); typedef float (*fFfi_t)(float, int32_t); typedef float (*fFff_t)(float, float); -typedef float (*fFfD_t)(float, long double); typedef float (*fFfp_t)(float, void*); typedef float (*fFpu_t)(void*, uint32_t); typedef float (*fFpp_t)(void*, void*); @@ -309,30 +330,26 @@ typedef double (*dFEd_t)(x64emu_t*, double); typedef double (*dFid_t)(int32_t, double); typedef double (*dFdi_t)(double, int32_t); typedef double (*dFdd_t)(double, double); -typedef double (*dFdD_t)(double, long double); typedef double (*dFdp_t)(double, void*); typedef double (*dFll_t)(intptr_t, intptr_t); typedef double (*dFpi_t)(void*, int32_t); typedef double (*dFpu_t)(void*, uint32_t); typedef double (*dFpd_t)(void*, double); typedef double (*dFpp_t)(void*, void*); -typedef long double (*DFDi_t)(long double, int32_t); -typedef long double (*DFDD_t)(long double, long double); -typedef long double (*DFDp_t)(long double, void*); -typedef long double (*DFpp_t)(void*, void*); typedef intptr_t (*lFEi_t)(x64emu_t*, int32_t); typedef intptr_t (*lFii_t)(int32_t, int32_t); +typedef intptr_t (*lFiL_t)(int32_t, uintptr_t); typedef intptr_t (*lFip_t)(int32_t, void*); typedef intptr_t (*lFui_t)(uint32_t, int32_t); typedef intptr_t (*lFll_t)(intptr_t, intptr_t); typedef intptr_t (*lFpi_t)(void*, int32_t); +typedef intptr_t (*lFpu_t)(void*, uint32_t); typedef intptr_t (*lFpd_t)(void*, double); typedef intptr_t (*lFpl_t)(void*, intptr_t); +typedef intptr_t (*lFpL_t)(void*, uintptr_t); typedef intptr_t (*lFpp_t)(void*, void*); typedef uintptr_t (*LFEL_t)(x64emu_t*, uintptr_t); typedef uintptr_t (*LFEp_t)(x64emu_t*, void*); -typedef uintptr_t (*LFii_t)(int32_t, int32_t); -typedef uintptr_t (*LFuu_t)(uint32_t, uint32_t); typedef uintptr_t (*LFUp_t)(uint64_t, void*); typedef uintptr_t (*LFLi_t)(uintptr_t, int32_t); typedef uintptr_t (*LFLL_t)(uintptr_t, uintptr_t); @@ -358,11 +375,12 @@ typedef void* (*pFdd_t)(double, double); typedef void* (*pFli_t)(intptr_t, int32_t); typedef void* (*pFll_t)(intptr_t, intptr_t); typedef void* (*pFlp_t)(intptr_t, void*); +typedef void* (*pFLc_t)(uintptr_t, int8_t); typedef void* (*pFLi_t)(uintptr_t, int32_t); -typedef void* (*pFLC_t)(uintptr_t, uint8_t); typedef void* (*pFLu_t)(uintptr_t, uint32_t); typedef void* (*pFLL_t)(uintptr_t, uintptr_t); typedef void* (*pFLp_t)(uintptr_t, void*); +typedef void* (*pFpc_t)(void*, int8_t); typedef void* (*pFpi_t)(void*, int32_t); typedef void* (*pFpC_t)(void*, uint8_t); typedef void* (*pFpW_t)(void*, uint16_t); @@ -376,10 +394,11 @@ typedef void* (*pFSi_t)(void*, int32_t); typedef void* (*pFbC_t)(void*, uint8_t); typedef void* (*pFbu_t)(void*, uint32_t); typedef void* (*pFbp_t)(void*, void*); +typedef void* (*SFip_t)(int32_t, void*); +typedef void* (*SFpp_t)(void*, void*); typedef unsigned __int128 (*HFII_t)(int64_t, int64_t); typedef unsigned __int128 (*HFll_t)(intptr_t, intptr_t); typedef unsigned __int128 (*HFpi_t)(void*, int32_t); -typedef unsigned __int128 (*HFpp_t)(void*, void*); typedef complexf_t (*xFxx_t)(complexf_t, complexf_t); typedef complex_t (*XFXX_t)(complex_t, complex_t); typedef int32_t (*iWpi_t)(void*, int32_t); @@ -399,16 +418,16 @@ typedef void (*vFwww_t)(int16_t, int16_t, int16_t); typedef void (*vFiii_t)(int32_t, int32_t, int32_t); typedef void (*vFiif_t)(int32_t, int32_t, float); typedef void (*vFiip_t)(int32_t, int32_t, void*); +typedef void (*vFiII_t)(int32_t, int64_t, int64_t); typedef void (*vFiui_t)(int32_t, uint32_t, int32_t); typedef void (*vFiuu_t)(int32_t, uint32_t, uint32_t); -typedef void (*vFiuU_t)(int32_t, uint32_t, uint64_t); typedef void (*vFiup_t)(int32_t, uint32_t, void*); +typedef void (*vFiUU_t)(int32_t, uint64_t, uint64_t); typedef void (*vFiff_t)(int32_t, float, float); typedef void (*vFidd_t)(int32_t, double, double); typedef void (*vFilu_t)(int32_t, intptr_t, uint32_t); typedef void (*vFill_t)(int32_t, intptr_t, intptr_t); typedef void (*vFilp_t)(int32_t, intptr_t, void*); -typedef void (*vFiLL_t)(int32_t, uintptr_t, uintptr_t); typedef void (*vFipi_t)(int32_t, void*, int32_t); typedef void (*vFipu_t)(int32_t, void*, uint32_t); typedef void (*vFipL_t)(int32_t, void*, uintptr_t); @@ -418,13 +437,13 @@ typedef void (*vFWWW_t)(uint16_t, uint16_t, uint16_t); typedef void (*vFucc_t)(uint32_t, int8_t, int8_t); typedef void (*vFuww_t)(uint32_t, int16_t, int16_t); typedef void (*vFuii_t)(uint32_t, int32_t, int32_t); +typedef void (*vFuiI_t)(uint32_t, int32_t, int64_t); typedef void (*vFuiu_t)(uint32_t, int32_t, uint32_t); typedef void (*vFuiU_t)(uint32_t, int32_t, uint64_t); typedef void (*vFuif_t)(uint32_t, int32_t, float); typedef void (*vFuid_t)(uint32_t, int32_t, double); -typedef void (*vFuil_t)(uint32_t, int32_t, intptr_t); -typedef void (*vFuiL_t)(uint32_t, int32_t, uintptr_t); typedef void (*vFuip_t)(uint32_t, int32_t, void*); +typedef void (*vFuII_t)(uint32_t, int64_t, int64_t); typedef void (*vFuWW_t)(uint32_t, uint16_t, uint16_t); typedef void (*vFuui_t)(uint32_t, uint32_t, int32_t); typedef void (*vFuuC_t)(uint32_t, uint32_t, uint8_t); @@ -432,14 +451,13 @@ typedef void (*vFuuu_t)(uint32_t, uint32_t, uint32_t); typedef void (*vFuuU_t)(uint32_t, uint32_t, uint64_t); typedef void (*vFuuf_t)(uint32_t, uint32_t, float); typedef void (*vFuud_t)(uint32_t, uint32_t, double); -typedef void (*vFuuL_t)(uint32_t, uint32_t, uintptr_t); typedef void (*vFuup_t)(uint32_t, uint32_t, void*); +typedef void (*vFuUU_t)(uint32_t, uint64_t, uint64_t); typedef void (*vFuff_t)(uint32_t, float, float); typedef void (*vFufp_t)(uint32_t, float, void*); typedef void (*vFudd_t)(uint32_t, double, double); typedef void (*vFull_t)(uint32_t, intptr_t, intptr_t); typedef void (*vFulp_t)(uint32_t, intptr_t, void*); -typedef void (*vFuLL_t)(uint32_t, uintptr_t, uintptr_t); typedef void (*vFuLp_t)(uint32_t, uintptr_t, void*); typedef void (*vFupu_t)(uint32_t, void*, uint32_t); typedef void (*vFupp_t)(uint32_t, void*, void*); @@ -454,6 +472,7 @@ typedef void (*vFlpp_t)(intptr_t, void*, void*); typedef void (*vFLup_t)(uintptr_t, uint32_t, void*); typedef void (*vFLpL_t)(uintptr_t, void*, uintptr_t); typedef void (*vFLpp_t)(uintptr_t, void*, void*); +typedef void (*vFpww_t)(void*, int16_t, int16_t); typedef void (*vFpic_t)(void*, int32_t, int8_t); typedef void (*vFpii_t)(void*, int32_t, int32_t); typedef void (*vFpiI_t)(void*, int32_t, int64_t); @@ -464,13 +483,16 @@ typedef void (*vFpif_t)(void*, int32_t, float); typedef void (*vFpid_t)(void*, int32_t, double); typedef void (*vFpiL_t)(void*, int32_t, uintptr_t); typedef void (*vFpip_t)(void*, int32_t, void*); +typedef void (*vFpiS_t)(void*, int32_t, void*); typedef void (*vFpui_t)(void*, uint32_t, int32_t); typedef void (*vFpuI_t)(void*, uint32_t, int64_t); +typedef void (*vFpuC_t)(void*, uint32_t, uint8_t); typedef void (*vFpuW_t)(void*, uint32_t, uint16_t); typedef void (*vFpuu_t)(void*, uint32_t, uint32_t); typedef void (*vFpuU_t)(void*, uint32_t, uint64_t); typedef void (*vFpuf_t)(void*, uint32_t, float); typedef void (*vFpud_t)(void*, uint32_t, double); +typedef void (*vFpul_t)(void*, uint32_t, intptr_t); typedef void (*vFpuL_t)(void*, uint32_t, uintptr_t); typedef void (*vFpup_t)(void*, uint32_t, void*); typedef void (*vFpUi_t)(void*, uint64_t, int32_t); @@ -497,6 +519,8 @@ typedef void (*vFppl_t)(void*, void*, intptr_t); typedef void (*vFppL_t)(void*, void*, uintptr_t); typedef void (*vFppp_t)(void*, void*, void*); typedef void (*vFppV_t)(void*, void*, void*); +typedef void (*vFpHi_t)(void*, unsigned __int128, int32_t); +typedef void (*vFSpL_t)(void*, void*, uintptr_t); typedef int8_t (*cFpdp_t)(void*, double, void*); typedef int16_t (*wFppp_t)(void*, void*, void*); typedef int32_t (*iFEiw_t)(x64emu_t*, int32_t, int16_t); @@ -504,7 +528,6 @@ typedef int32_t (*iFEip_t)(x64emu_t*, int32_t, void*); typedef int32_t (*iFEWW_t)(x64emu_t*, uint16_t, uint16_t); typedef int32_t (*iFEup_t)(x64emu_t*, uint32_t, void*); typedef int32_t (*iFEUU_t)(x64emu_t*, uint64_t, uint64_t); -typedef int32_t (*iFELp_t)(x64emu_t*, uintptr_t, void*); typedef int32_t (*iFEpi_t)(x64emu_t*, void*, int32_t); typedef int32_t (*iFEpU_t)(x64emu_t*, void*, uint64_t); typedef int32_t (*iFEpL_t)(x64emu_t*, void*, uintptr_t); @@ -521,6 +544,7 @@ typedef int32_t (*iFiiu_t)(int32_t, int32_t, uint32_t); typedef int32_t (*iFiil_t)(int32_t, int32_t, intptr_t); typedef int32_t (*iFiip_t)(int32_t, int32_t, void*); typedef int32_t (*iFiiO_t)(int32_t, int32_t, int32_t); +typedef int32_t (*iFiII_t)(int32_t, int64_t, int64_t); typedef int32_t (*iFiCC_t)(int32_t, uint8_t, uint8_t); typedef int32_t (*iFiui_t)(int32_t, uint32_t, int32_t); typedef int32_t (*iFiuu_t)(int32_t, uint32_t, uint32_t); @@ -550,6 +574,7 @@ typedef int32_t (*iFupL_t)(uint32_t, void*, uintptr_t); typedef int32_t (*iFupp_t)(uint32_t, void*, void*); typedef int32_t (*iFfff_t)(float, float, float); typedef int32_t (*iFLip_t)(uintptr_t, int32_t, void*); +typedef int32_t (*iFLpL_t)(uintptr_t, void*, uintptr_t); typedef int32_t (*iFLpp_t)(uintptr_t, void*, void*); typedef int32_t (*iFpwp_t)(void*, int16_t, void*); typedef int32_t (*iFpii_t)(void*, int32_t, int32_t); @@ -562,7 +587,6 @@ typedef int32_t (*iFpid_t)(void*, int32_t, double); typedef int32_t (*iFpil_t)(void*, int32_t, intptr_t); typedef int32_t (*iFpiL_t)(void*, int32_t, uintptr_t); typedef int32_t (*iFpip_t)(void*, int32_t, void*); -typedef int32_t (*iFpIi_t)(void*, int64_t, int32_t); typedef int32_t (*iFpII_t)(void*, int64_t, int64_t); typedef int32_t (*iFpCp_t)(void*, uint8_t, void*); typedef int32_t (*iFpWp_t)(void*, uint16_t, void*); @@ -598,9 +622,16 @@ typedef int32_t (*iFppd_t)(void*, void*, double); typedef int32_t (*iFppl_t)(void*, void*, intptr_t); typedef int32_t (*iFppL_t)(void*, void*, uintptr_t); typedef int32_t (*iFppp_t)(void*, void*, void*); +typedef int32_t (*iFpOi_t)(void*, int32_t, int32_t); typedef int32_t (*iFpOu_t)(void*, int32_t, uint32_t); -typedef int32_t (*iFpOM_t)(void*, int32_t, ...); +typedef int32_t (*iFpSu_t)(void*, void*, uint32_t); +typedef int32_t (*iFpSp_t)(void*, void*, void*); +typedef int32_t (*iFSIi_t)(void*, int64_t, int32_t); +typedef int32_t (*iFSli_t)(void*, intptr_t, int32_t); +typedef int32_t (*iFSpi_t)(void*, void*, int32_t); typedef int32_t (*iFSpL_t)(void*, void*, uintptr_t); +typedef int32_t (*iFSpp_t)(void*, void*, void*); +typedef int32_t (*iFSpA_t)(void*, void*, void*); typedef int32_t (*iFbpp_t)(void*, void*, void*); typedef int64_t (*IFiIi_t)(int32_t, int64_t, int32_t); typedef int64_t (*IFpIi_t)(void*, int64_t, int32_t); @@ -608,9 +639,10 @@ typedef int64_t (*IFppi_t)(void*, void*, int32_t); typedef int64_t (*IFppI_t)(void*, void*, int64_t); typedef int64_t (*IFSIi_t)(void*, int64_t, int32_t); typedef uint8_t (*CFipp_t)(int32_t, void*, void*); +typedef uint8_t (*CFuUu_t)(uint32_t, uint64_t, uint32_t); typedef uint8_t (*CFuff_t)(uint32_t, float, float); -typedef uint8_t (*CFuLu_t)(uint32_t, uintptr_t, uint32_t); typedef uint8_t (*CFppp_t)(void*, void*, void*); +typedef uint16_t (*WFpip_t)(void*, int32_t, void*); typedef uint16_t (*WFppp_t)(void*, void*, void*); typedef uint32_t (*uFEpW_t)(x64emu_t*, void*, uint16_t); typedef uint32_t (*uFEpu_t)(x64emu_t*, void*, uint32_t); @@ -627,6 +659,7 @@ typedef uint32_t (*uFuup_t)(uint32_t, uint32_t, void*); typedef uint32_t (*uFufp_t)(uint32_t, float, void*); typedef uint32_t (*uFupu_t)(uint32_t, void*, uint32_t); typedef uint32_t (*uFupp_t)(uint32_t, void*, void*); +typedef uint32_t (*uFuNN_t)(uint32_t, ...); typedef uint32_t (*uFpii_t)(void*, int32_t, int32_t); typedef uint32_t (*uFpiu_t)(void*, int32_t, uint32_t); typedef uint32_t (*uFpip_t)(void*, int32_t, void*); @@ -637,10 +670,12 @@ typedef uint32_t (*uFpWf_t)(void*, uint16_t, float); typedef uint32_t (*uFpWp_t)(void*, uint16_t, void*); typedef uint32_t (*uFpui_t)(void*, uint32_t, int32_t); typedef uint32_t (*uFpuu_t)(void*, uint32_t, uint32_t); +typedef uint32_t (*uFpuU_t)(void*, uint32_t, uint64_t); typedef uint32_t (*uFpuL_t)(void*, uint32_t, uintptr_t); typedef uint32_t (*uFpup_t)(void*, uint32_t, void*); typedef uint32_t (*uFpfu_t)(void*, float, uint32_t); typedef uint32_t (*uFpli_t)(void*, intptr_t, int32_t); +typedef uint32_t (*uFplu_t)(void*, intptr_t, uint32_t); typedef uint32_t (*uFpLu_t)(void*, uintptr_t, uint32_t); typedef uint32_t (*uFpLL_t)(void*, uintptr_t, uintptr_t); typedef uint32_t (*uFpLp_t)(void*, uintptr_t, void*); @@ -648,6 +683,7 @@ typedef uint32_t (*uFppi_t)(void*, void*, int32_t); typedef uint32_t (*uFppu_t)(void*, void*, uint32_t); typedef uint32_t (*uFppL_t)(void*, void*, uintptr_t); typedef uint32_t (*uFppp_t)(void*, void*, void*); +typedef uint32_t (*uFbCu_t)(void*, uint8_t, uint32_t); typedef uint32_t (*uFbWW_t)(void*, uint16_t, uint16_t); typedef uint32_t (*uFbWu_t)(void*, uint16_t, uint32_t); typedef uint32_t (*uFbuC_t)(void*, uint32_t, uint8_t); @@ -674,21 +710,24 @@ typedef double (*dFppi_t)(void*, void*, int32_t); typedef double (*dFppu_t)(void*, void*, uint32_t); typedef double (*dFppd_t)(void*, void*, double); typedef double (*dFppp_t)(void*, void*, void*); -typedef long double (*DFppi_t)(void*, void*, int32_t); -typedef long double (*DFppp_t)(void*, void*, void*); +typedef intptr_t (*lFiIL_t)(int32_t, int64_t, uintptr_t); typedef intptr_t (*lFili_t)(int32_t, intptr_t, int32_t); -typedef intptr_t (*lFilL_t)(int32_t, intptr_t, uintptr_t); typedef intptr_t (*lFipi_t)(int32_t, void*, int32_t); typedef intptr_t (*lFipL_t)(int32_t, void*, uintptr_t); typedef intptr_t (*lFlll_t)(intptr_t, intptr_t, intptr_t); +typedef intptr_t (*lFpup_t)(void*, uint32_t, void*); typedef intptr_t (*lFpli_t)(void*, intptr_t, int32_t); typedef intptr_t (*lFpLu_t)(void*, uintptr_t, uint32_t); +typedef intptr_t (*lFpLd_t)(void*, uintptr_t, double); +typedef intptr_t (*lFpLL_t)(void*, uintptr_t, uintptr_t); typedef intptr_t (*lFpLp_t)(void*, uintptr_t, void*); typedef intptr_t (*lFppi_t)(void*, void*, int32_t); typedef intptr_t (*lFppu_t)(void*, void*, uint32_t); typedef intptr_t (*lFppL_t)(void*, void*, uintptr_t); typedef intptr_t (*lFppp_t)(void*, void*, void*); +typedef intptr_t (*lFppS_t)(void*, void*, void*); typedef intptr_t (*lFSpl_t)(void*, void*, intptr_t); +typedef uintptr_t (*LFEpp_t)(x64emu_t*, void*, void*); typedef uintptr_t (*LFEpA_t)(x64emu_t*, void*, void*); typedef uintptr_t (*LFipL_t)(int32_t, void*, uintptr_t); typedef uintptr_t (*LFuui_t)(uint32_t, uint32_t, int32_t); @@ -698,10 +737,13 @@ typedef uintptr_t (*LFLLL_t)(uintptr_t, uintptr_t, uintptr_t); typedef uintptr_t (*LFLpu_t)(uintptr_t, void*, uint32_t); typedef uintptr_t (*LFLpL_t)(uintptr_t, void*, uintptr_t); typedef uintptr_t (*LFpii_t)(void*, int32_t, int32_t); +typedef uintptr_t (*LFpip_t)(void*, int32_t, void*); typedef uintptr_t (*LFpCi_t)(void*, uint8_t, int32_t); +typedef uintptr_t (*LFpWp_t)(void*, uint16_t, void*); typedef uintptr_t (*LFpuL_t)(void*, uint32_t, uintptr_t); typedef uintptr_t (*LFpup_t)(void*, uint32_t, void*); typedef uintptr_t (*LFpLi_t)(void*, uintptr_t, int32_t); +typedef uintptr_t (*LFpLC_t)(void*, uintptr_t, uint8_t); typedef uintptr_t (*LFpLL_t)(void*, uintptr_t, uintptr_t); typedef uintptr_t (*LFpLp_t)(void*, uintptr_t, void*); typedef uintptr_t (*LFppi_t)(void*, void*, int32_t); @@ -713,7 +755,6 @@ typedef uintptr_t (*LFSpL_t)(void*, void*, uintptr_t); typedef void* (*pFEip_t)(x64emu_t*, int32_t, void*); typedef void* (*pFEiV_t)(x64emu_t*, int32_t, void*); typedef void* (*pFEup_t)(x64emu_t*, uint32_t, void*); -typedef void* (*pFEuV_t)(x64emu_t*, uint32_t, void*); typedef void* (*pFEpi_t)(x64emu_t*, void*, int32_t); typedef void* (*pFEpu_t)(x64emu_t*, void*, uint32_t); typedef void* (*pFEpp_t)(x64emu_t*, void*, void*); @@ -743,32 +784,32 @@ typedef void* (*pFdip_t)(double, int32_t, void*); typedef void* (*pFdUU_t)(double, uint64_t, uint64_t); typedef void* (*pFddi_t)(double, double, int32_t); typedef void* (*pFddd_t)(double, double, double); -typedef void* (*pFDip_t)(long double, int32_t, void*); typedef void* (*pFlpi_t)(intptr_t, void*, int32_t); typedef void* (*pFLup_t)(uintptr_t, uint32_t, void*); typedef void* (*pFLLp_t)(uintptr_t, uintptr_t, void*); typedef void* (*pFLpi_t)(uintptr_t, void*, int32_t); typedef void* (*pFLpp_t)(uintptr_t, void*, void*); +typedef void* (*pFpcU_t)(void*, int8_t, uint64_t); typedef void* (*pFpii_t)(void*, int32_t, int32_t); typedef void* (*pFpiu_t)(void*, int32_t, uint32_t); typedef void* (*pFpid_t)(void*, int32_t, double); typedef void* (*pFpil_t)(void*, int32_t, intptr_t); typedef void* (*pFpiL_t)(void*, int32_t, uintptr_t); typedef void* (*pFpip_t)(void*, int32_t, void*); +typedef void* (*pFpiS_t)(void*, int32_t, void*); typedef void* (*pFpCi_t)(void*, uint8_t, int32_t); -typedef void* (*pFpCu_t)(void*, uint8_t, uint32_t); typedef void* (*pFpWi_t)(void*, uint16_t, int32_t); typedef void* (*pFpWW_t)(void*, uint16_t, uint16_t); typedef void* (*pFpWp_t)(void*, uint16_t, void*); typedef void* (*pFpui_t)(void*, uint32_t, int32_t); typedef void* (*pFpuu_t)(void*, uint32_t, uint32_t); -typedef void* (*pFpuL_t)(void*, uint32_t, uintptr_t); +typedef void* (*pFpuf_t)(void*, uint32_t, float); typedef void* (*pFpup_t)(void*, uint32_t, void*); typedef void* (*pFpUi_t)(void*, uint64_t, int32_t); typedef void* (*pFpUu_t)(void*, uint64_t, uint32_t); typedef void* (*pFpdu_t)(void*, double, uint32_t); typedef void* (*pFpdd_t)(void*, double, double); -typedef void* (*pFplC_t)(void*, intptr_t, uint8_t); +typedef void* (*pFplc_t)(void*, intptr_t, int8_t); typedef void* (*pFplu_t)(void*, intptr_t, uint32_t); typedef void* (*pFpll_t)(void*, intptr_t, intptr_t); typedef void* (*pFplp_t)(void*, intptr_t, void*); @@ -776,17 +817,19 @@ typedef void* (*pFpLi_t)(void*, uintptr_t, int32_t); typedef void* (*pFpLu_t)(void*, uintptr_t, uint32_t); typedef void* (*pFpLL_t)(void*, uintptr_t, uintptr_t); typedef void* (*pFpLp_t)(void*, uintptr_t, void*); +typedef void* (*pFppc_t)(void*, void*, int8_t); typedef void* (*pFppi_t)(void*, void*, int32_t); typedef void* (*pFppI_t)(void*, void*, int64_t); -typedef void* (*pFppC_t)(void*, void*, uint8_t); typedef void* (*pFppu_t)(void*, void*, uint32_t); typedef void* (*pFppU_t)(void*, void*, uint64_t); typedef void* (*pFppf_t)(void*, void*, float); +typedef void* (*pFppd_t)(void*, void*, double); typedef void* (*pFppl_t)(void*, void*, intptr_t); typedef void* (*pFppL_t)(void*, void*, uintptr_t); typedef void* (*pFppp_t)(void*, void*, void*); +typedef void* (*pFppS_t)(void*, void*, void*); typedef void* (*pFppA_t)(void*, void*, void*); -typedef void* (*pFpOM_t)(void*, int32_t, ...); +typedef void* (*pFpSp_t)(void*, void*, void*); typedef void* (*pFpbi_t)(void*, void*, int32_t); typedef void* (*pFSpl_t)(void*, void*, intptr_t); typedef void* (*pFbCC_t)(void*, uint8_t, uint8_t); @@ -796,6 +839,9 @@ typedef void* (*pFbUp_t)(void*, uint64_t, void*); typedef void* (*pFbpi_t)(void*, void*, int32_t); typedef void* (*pFbpu_t)(void*, void*, uint32_t); typedef void* (*pFbpp_t)(void*, void*, void*); +typedef void* (*SFEpp_t)(x64emu_t*, void*, void*); +typedef void* (*SFpLp_t)(void*, uintptr_t, void*); +typedef void* (*SFppS_t)(void*, void*, void*); typedef void (*vWpup_t)(void*, uint32_t, void*); typedef int32_t (*iWEip_t)(x64emu_t*, int32_t, void*); typedef int32_t (*iWEpp_t)(x64emu_t*, void*, void*); @@ -808,16 +854,17 @@ typedef int32_t (*iWppu_t)(void*, void*, uint32_t); typedef int32_t (*iWppp_t)(void*, void*, void*); typedef uint32_t (*uWpui_t)(void*, uint32_t, int32_t); typedef uint32_t (*uWpup_t)(void*, uint32_t, void*); -typedef void (*vFEiip_t)(x64emu_t*, int32_t, int32_t, void*); typedef void (*vFEipp_t)(x64emu_t*, int32_t, void*, void*); typedef void (*vFEipV_t)(x64emu_t*, int32_t, void*, void*); typedef void (*vFEipA_t)(x64emu_t*, int32_t, void*, void*); typedef void (*vFELLp_t)(x64emu_t*, uintptr_t, uintptr_t, void*); typedef void (*vFEpii_t)(x64emu_t*, void*, int32_t, int32_t); typedef void (*vFEpip_t)(x64emu_t*, void*, int32_t, void*); -typedef void (*vFEpiA_t)(x64emu_t*, void*, int32_t, void*); typedef void (*vFEpup_t)(x64emu_t*, void*, uint32_t, void*); +typedef void (*vFEpuV_t)(x64emu_t*, void*, uint32_t, void*); +typedef void (*vFEpuA_t)(x64emu_t*, void*, uint32_t, void*); typedef void (*vFEpUp_t)(x64emu_t*, void*, uint64_t, void*); +typedef void (*vFEpLp_t)(x64emu_t*, void*, uintptr_t, void*); typedef void (*vFEppp_t)(x64emu_t*, void*, void*, void*); typedef void (*vFEppV_t)(x64emu_t*, void*, void*, void*); typedef void (*vFEppA_t)(x64emu_t*, void*, void*, void*); @@ -828,17 +875,17 @@ typedef void (*vFiiip_t)(int32_t, int32_t, int32_t, void*); typedef void (*vFiiCp_t)(int32_t, int32_t, uint8_t, void*); typedef void (*vFiill_t)(int32_t, int32_t, intptr_t, intptr_t); typedef void (*vFiipV_t)(int32_t, int32_t, void*, void*); +typedef void (*vFiIII_t)(int32_t, int64_t, int64_t, int64_t); typedef void (*vFiuip_t)(int32_t, uint32_t, int32_t, void*); typedef void (*vFiuuu_t)(int32_t, uint32_t, uint32_t, uint32_t); typedef void (*vFiulp_t)(int32_t, uint32_t, intptr_t, void*); typedef void (*vFiupV_t)(int32_t, uint32_t, void*, void*); +typedef void (*vFiUUU_t)(int32_t, uint64_t, uint64_t, uint64_t); typedef void (*vFifff_t)(int32_t, float, float, float); typedef void (*vFiddd_t)(int32_t, double, double, double); typedef void (*vFilip_t)(int32_t, intptr_t, int32_t, void*); -typedef void (*vFilll_t)(int32_t, intptr_t, intptr_t, intptr_t); typedef void (*vFilpu_t)(int32_t, intptr_t, void*, uint32_t); typedef void (*vFilpp_t)(int32_t, intptr_t, void*, void*); -typedef void (*vFiLLL_t)(int32_t, uintptr_t, uintptr_t, uintptr_t); typedef void (*vFipii_t)(int32_t, void*, int32_t, int32_t); typedef void (*vFipup_t)(int32_t, void*, uint32_t, void*); typedef void (*vFipll_t)(int32_t, void*, intptr_t, intptr_t); @@ -849,21 +896,21 @@ typedef void (*vFWWWW_t)(uint16_t, uint16_t, uint16_t, uint16_t); typedef void (*vFuccc_t)(uint32_t, int8_t, int8_t, int8_t); typedef void (*vFuwww_t)(uint32_t, int16_t, int16_t, int16_t); typedef void (*vFuiii_t)(uint32_t, int32_t, int32_t, int32_t); -typedef void (*vFuiiu_t)(uint32_t, int32_t, int32_t, uint32_t); typedef void (*vFuiip_t)(uint32_t, int32_t, int32_t, void*); +typedef void (*vFuiII_t)(uint32_t, int32_t, int64_t, int64_t); typedef void (*vFuiui_t)(uint32_t, int32_t, uint32_t, int32_t); typedef void (*vFuiuC_t)(uint32_t, int32_t, uint32_t, uint8_t); typedef void (*vFuiuu_t)(uint32_t, int32_t, uint32_t, uint32_t); typedef void (*vFuiup_t)(uint32_t, int32_t, uint32_t, void*); +typedef void (*vFuiUU_t)(uint32_t, int32_t, uint64_t, uint64_t); typedef void (*vFuifi_t)(uint32_t, int32_t, float, int32_t); typedef void (*vFuiff_t)(uint32_t, int32_t, float, float); typedef void (*vFuidd_t)(uint32_t, int32_t, double, double); -typedef void (*vFuill_t)(uint32_t, int32_t, intptr_t, intptr_t); typedef void (*vFuilp_t)(uint32_t, int32_t, intptr_t, void*); -typedef void (*vFuiLL_t)(uint32_t, int32_t, uintptr_t, uintptr_t); typedef void (*vFuipi_t)(uint32_t, int32_t, void*, int32_t); typedef void (*vFuipu_t)(uint32_t, int32_t, void*, uint32_t); typedef void (*vFuipp_t)(uint32_t, int32_t, void*, void*); +typedef void (*vFuIII_t)(uint32_t, int64_t, int64_t, int64_t); typedef void (*vFuWWW_t)(uint32_t, uint16_t, uint16_t, uint16_t); typedef void (*vFuuii_t)(uint32_t, uint32_t, int32_t, int32_t); typedef void (*vFuuiu_t)(uint32_t, uint32_t, int32_t, uint32_t); @@ -877,24 +924,21 @@ typedef void (*vFuuuf_t)(uint32_t, uint32_t, uint32_t, float); typedef void (*vFuuud_t)(uint32_t, uint32_t, uint32_t, double); typedef void (*vFuuul_t)(uint32_t, uint32_t, uint32_t, intptr_t); typedef void (*vFuuup_t)(uint32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuUl_t)(uint32_t, uint32_t, uint64_t, intptr_t); typedef void (*vFuuff_t)(uint32_t, uint32_t, float, float); typedef void (*vFuuli_t)(uint32_t, uint32_t, intptr_t, int32_t); -typedef void (*vFuulp_t)(uint32_t, uint32_t, intptr_t, void*); -typedef void (*vFuuLl_t)(uint32_t, uint32_t, uintptr_t, intptr_t); typedef void (*vFuupi_t)(uint32_t, uint32_t, void*, int32_t); typedef void (*vFuupp_t)(uint32_t, uint32_t, void*, void*); +typedef void (*vFuUui_t)(uint32_t, uint64_t, uint32_t, int32_t); +typedef void (*vFuUup_t)(uint32_t, uint64_t, uint32_t, void*); +typedef void (*vFuUUU_t)(uint32_t, uint64_t, uint64_t, uint64_t); typedef void (*vFufff_t)(uint32_t, float, float, float); typedef void (*vFuddd_t)(uint32_t, double, double, double); -typedef void (*vFuluL_t)(uint32_t, intptr_t, uint32_t, uintptr_t); +typedef void (*vFuluU_t)(uint32_t, intptr_t, uint32_t, uint64_t); typedef void (*vFullC_t)(uint32_t, intptr_t, intptr_t, uint8_t); -typedef void (*vFulll_t)(uint32_t, intptr_t, intptr_t, intptr_t); typedef void (*vFullp_t)(uint32_t, intptr_t, intptr_t, void*); -typedef void (*vFulpi_t)(uint32_t, intptr_t, void*, int32_t); typedef void (*vFulpu_t)(uint32_t, intptr_t, void*, uint32_t); typedef void (*vFulpp_t)(uint32_t, intptr_t, void*, void*); -typedef void (*vFuLui_t)(uint32_t, uintptr_t, uint32_t, int32_t); -typedef void (*vFuLup_t)(uint32_t, uintptr_t, uint32_t, void*); -typedef void (*vFuLLL_t)(uint32_t, uintptr_t, uintptr_t, uintptr_t); typedef void (*vFupii_t)(uint32_t, void*, int32_t, int32_t); typedef void (*vFuppi_t)(uint32_t, void*, void*, int32_t); typedef void (*vFuppu_t)(uint32_t, void*, void*, uint32_t); @@ -904,17 +948,17 @@ typedef void (*vFdddd_t)(double, double, double, double); typedef void (*vFllii_t)(intptr_t, intptr_t, int32_t, int32_t); typedef void (*vFLuui_t)(uintptr_t, uint32_t, uint32_t, int32_t); typedef void (*vFLppi_t)(uintptr_t, void*, void*, int32_t); +typedef void (*vFpwwu_t)(void*, int16_t, int16_t, uint32_t); typedef void (*vFpiii_t)(void*, int32_t, int32_t, int32_t); typedef void (*vFpiiu_t)(void*, int32_t, int32_t, uint32_t); typedef void (*vFpiid_t)(void*, int32_t, int32_t, double); typedef void (*vFpiip_t)(void*, int32_t, int32_t, void*); typedef void (*vFpiui_t)(void*, int32_t, uint32_t, int32_t); -typedef void (*vFpiuu_t)(void*, int32_t, uint32_t, uint32_t); typedef void (*vFpiuL_t)(void*, int32_t, uint32_t, uintptr_t); typedef void (*vFpiup_t)(void*, int32_t, uint32_t, void*); typedef void (*vFpiUu_t)(void*, int32_t, uint64_t, uint32_t); typedef void (*vFpiUU_t)(void*, int32_t, uint64_t, uint64_t); -typedef void (*vFpifi_t)(void*, int32_t, float, int32_t); +typedef void (*vFpiLu_t)(void*, int32_t, uintptr_t, uint32_t); typedef void (*vFpipi_t)(void*, int32_t, void*, int32_t); typedef void (*vFpipu_t)(void*, int32_t, void*, uint32_t); typedef void (*vFpipp_t)(void*, int32_t, void*, void*); @@ -940,10 +984,13 @@ typedef void (*vFpdup_t)(void*, double, uint32_t, void*); typedef void (*vFpddu_t)(void*, double, double, uint32_t); typedef void (*vFpddd_t)(void*, double, double, double); typedef void (*vFplll_t)(void*, intptr_t, intptr_t, intptr_t); +typedef void (*vFpllL_t)(void*, intptr_t, intptr_t, uintptr_t); typedef void (*vFplpp_t)(void*, intptr_t, void*, void*); typedef void (*vFpLii_t)(void*, uintptr_t, int32_t, int32_t); typedef void (*vFpLuu_t)(void*, uintptr_t, uint32_t, uint32_t); typedef void (*vFpLLL_t)(void*, uintptr_t, uintptr_t, uintptr_t); +typedef void (*vFpLLp_t)(void*, uintptr_t, uintptr_t, void*); +typedef void (*vFpLpi_t)(void*, uintptr_t, void*, int32_t); typedef void (*vFpLpu_t)(void*, uintptr_t, void*, uint32_t); typedef void (*vFpLpL_t)(void*, uintptr_t, void*, uintptr_t); typedef void (*vFpLpp_t)(void*, uintptr_t, void*, void*); @@ -970,6 +1017,8 @@ typedef void (*vFpppd_t)(void*, void*, void*, double); typedef void (*vFpppl_t)(void*, void*, void*, intptr_t); typedef void (*vFpppL_t)(void*, void*, void*, uintptr_t); typedef void (*vFpppp_t)(void*, void*, void*, void*); +typedef void (*vFHHpi_t)(unsigned __int128, unsigned __int128, void*, int32_t); +typedef int8_t (*cFpiii_t)(void*, int32_t, int32_t, int32_t); typedef int8_t (*cFpipp_t)(void*, int32_t, void*, void*); typedef int32_t (*iFEiip_t)(x64emu_t*, int32_t, int32_t, void*); typedef int32_t (*iFEiiN_t)(x64emu_t*, int32_t, int32_t, ...); @@ -994,34 +1043,39 @@ typedef int32_t (*iFEppL_t)(x64emu_t*, void*, void*, uintptr_t); typedef int32_t (*iFEppp_t)(x64emu_t*, void*, void*, void*); typedef int32_t (*iFEppV_t)(x64emu_t*, void*, void*, void*); typedef int32_t (*iFEppA_t)(x64emu_t*, void*, void*, void*); -typedef int32_t (*iFEpOu_t)(x64emu_t*, void*, int32_t, uint32_t); +typedef int32_t (*iFEpON_t)(x64emu_t*, void*, int32_t, ...); +typedef int32_t (*iFESpV_t)(x64emu_t*, void*, void*, void*); +typedef int32_t (*iFESpA_t)(x64emu_t*, void*, void*, void*); typedef int32_t (*iFwwww_t)(int16_t, int16_t, int16_t, int16_t); typedef int32_t (*iFwppp_t)(int16_t, void*, void*, void*); typedef int32_t (*iFiiii_t)(int32_t, int32_t, int32_t, int32_t); typedef int32_t (*iFiiiu_t)(int32_t, int32_t, int32_t, uint32_t); typedef int32_t (*iFiiip_t)(int32_t, int32_t, int32_t, void*); typedef int32_t (*iFiiiN_t)(int32_t, int32_t, int32_t, ...); +typedef int32_t (*iFiiII_t)(int32_t, int32_t, int64_t, int64_t); typedef int32_t (*iFiiui_t)(int32_t, int32_t, uint32_t, int32_t); typedef int32_t (*iFiill_t)(int32_t, int32_t, intptr_t, intptr_t); typedef int32_t (*iFiipi_t)(int32_t, int32_t, void*, int32_t); typedef int32_t (*iFiipp_t)(int32_t, int32_t, void*, void*); +typedef int32_t (*iFiIIi_t)(int32_t, int64_t, int64_t, int32_t); +typedef int32_t (*iFiIIu_t)(int32_t, int64_t, int64_t, uint32_t); typedef int32_t (*iFiWii_t)(int32_t, uint16_t, int32_t, int32_t); typedef int32_t (*iFiuwp_t)(int32_t, uint32_t, int16_t, void*); typedef int32_t (*iFiuup_t)(int32_t, uint32_t, uint32_t, void*); typedef int32_t (*iFiupp_t)(int32_t, uint32_t, void*, void*); typedef int32_t (*iFilli_t)(int32_t, intptr_t, intptr_t, int32_t); -typedef int32_t (*iFillu_t)(int32_t, intptr_t, intptr_t, uint32_t); typedef int32_t (*iFiLpL_t)(int32_t, uintptr_t, void*, uintptr_t); typedef int32_t (*iFipii_t)(int32_t, void*, int32_t, int32_t); typedef int32_t (*iFipip_t)(int32_t, void*, int32_t, void*); typedef int32_t (*iFipWp_t)(int32_t, void*, uint16_t, void*); typedef int32_t (*iFipui_t)(int32_t, void*, uint32_t, int32_t); -typedef int32_t (*iFipuL_t)(int32_t, void*, uint32_t, uintptr_t); +typedef int32_t (*iFipuU_t)(int32_t, void*, uint32_t, uint64_t); typedef int32_t (*iFipLi_t)(int32_t, void*, uintptr_t, int32_t); typedef int32_t (*iFipLu_t)(int32_t, void*, uintptr_t, uint32_t); typedef int32_t (*iFipLp_t)(int32_t, void*, uintptr_t, void*); typedef int32_t (*iFippi_t)(int32_t, void*, void*, int32_t); typedef int32_t (*iFippu_t)(int32_t, void*, void*, uint32_t); +typedef int32_t (*iFippl_t)(int32_t, void*, void*, intptr_t); typedef int32_t (*iFippL_t)(int32_t, void*, void*, uintptr_t); typedef int32_t (*iFippp_t)(int32_t, void*, void*, void*); typedef int32_t (*iFipON_t)(int32_t, void*, int32_t, ...); @@ -1030,6 +1084,7 @@ typedef int32_t (*iFuipp_t)(uint32_t, int32_t, void*, void*); typedef int32_t (*iFuWWp_t)(uint32_t, uint16_t, uint16_t, void*); typedef int32_t (*iFuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t); typedef int32_t (*iFuupi_t)(uint32_t, uint32_t, void*, int32_t); +typedef int32_t (*iFuupu_t)(uint32_t, uint32_t, void*, uint32_t); typedef int32_t (*iFuupp_t)(uint32_t, uint32_t, void*, void*); typedef int32_t (*iFupup_t)(uint32_t, void*, uint32_t, void*); typedef int32_t (*iFupLp_t)(uint32_t, void*, uintptr_t, void*); @@ -1041,6 +1096,7 @@ typedef int32_t (*iFLppp_t)(uintptr_t, void*, void*, void*); typedef int32_t (*iFpwww_t)(void*, int16_t, int16_t, int16_t); typedef int32_t (*iFpwpp_t)(void*, int16_t, void*, void*); typedef int32_t (*iFpiii_t)(void*, int32_t, int32_t, int32_t); +typedef int32_t (*iFpiiC_t)(void*, int32_t, int32_t, uint8_t); typedef int32_t (*iFpiiu_t)(void*, int32_t, int32_t, uint32_t); typedef int32_t (*iFpiid_t)(void*, int32_t, int32_t, double); typedef int32_t (*iFpiiL_t)(void*, int32_t, int32_t, uintptr_t); @@ -1049,16 +1105,18 @@ typedef int32_t (*iFpiuu_t)(void*, int32_t, uint32_t, uint32_t); typedef int32_t (*iFpiuL_t)(void*, int32_t, uint32_t, uintptr_t); typedef int32_t (*iFpiup_t)(void*, int32_t, uint32_t, void*); typedef int32_t (*iFpiUp_t)(void*, int32_t, uint64_t, void*); +typedef int32_t (*iFpili_t)(void*, int32_t, intptr_t, int32_t); typedef int32_t (*iFpild_t)(void*, int32_t, intptr_t, double); +typedef int32_t (*iFpiLL_t)(void*, int32_t, uintptr_t, uintptr_t); typedef int32_t (*iFpipi_t)(void*, int32_t, void*, int32_t); typedef int32_t (*iFpipu_t)(void*, int32_t, void*, uint32_t); typedef int32_t (*iFpipL_t)(void*, int32_t, void*, uintptr_t); typedef int32_t (*iFpipp_t)(void*, int32_t, void*, void*); typedef int32_t (*iFpipV_t)(void*, int32_t, void*, void*); -typedef int32_t (*iFpIip_t)(void*, int64_t, int32_t, void*); typedef int32_t (*iFpCCC_t)(void*, uint8_t, uint8_t, uint8_t); typedef int32_t (*iFpCpi_t)(void*, uint8_t, void*, int32_t); typedef int32_t (*iFpCpp_t)(void*, uint8_t, void*, void*); +typedef int32_t (*iFpWWW_t)(void*, uint16_t, uint16_t, uint16_t); typedef int32_t (*iFpWWu_t)(void*, uint16_t, uint16_t, uint32_t); typedef int32_t (*iFpWpp_t)(void*, uint16_t, void*, void*); typedef int32_t (*iFpuwp_t)(void*, uint32_t, int16_t, void*); @@ -1071,6 +1129,8 @@ typedef int32_t (*iFpuul_t)(void*, uint32_t, uint32_t, intptr_t); typedef int32_t (*iFpuuL_t)(void*, uint32_t, uint32_t, uintptr_t); typedef int32_t (*iFpuup_t)(void*, uint32_t, uint32_t, void*); typedef int32_t (*iFpuUp_t)(void*, uint32_t, uint64_t, void*); +typedef int32_t (*iFpufp_t)(void*, uint32_t, float, void*); +typedef int32_t (*iFpuLi_t)(void*, uint32_t, uintptr_t, int32_t); typedef int32_t (*iFpuLL_t)(void*, uint32_t, uintptr_t, uintptr_t); typedef int32_t (*iFpuLp_t)(void*, uint32_t, uintptr_t, void*); typedef int32_t (*iFpupi_t)(void*, uint32_t, void*, int32_t); @@ -1082,17 +1142,20 @@ typedef int32_t (*iFpupp_t)(void*, uint32_t, void*, void*); typedef int32_t (*iFpupV_t)(void*, uint32_t, void*, void*); typedef int32_t (*iFpUip_t)(void*, uint64_t, int32_t, void*); typedef int32_t (*iFpUup_t)(void*, uint64_t, uint32_t, void*); +typedef int32_t (*iFpUUu_t)(void*, uint64_t, uint64_t, uint32_t); typedef int32_t (*iFpUUU_t)(void*, uint64_t, uint64_t, uint64_t); typedef int32_t (*iFpULp_t)(void*, uint64_t, uintptr_t, void*); typedef int32_t (*iFpUpp_t)(void*, uint64_t, void*, void*); typedef int32_t (*iFpdip_t)(void*, double, int32_t, void*); typedef int32_t (*iFplii_t)(void*, intptr_t, int32_t, int32_t); typedef int32_t (*iFplip_t)(void*, intptr_t, int32_t, void*); +typedef int32_t (*iFpllp_t)(void*, intptr_t, intptr_t, void*); typedef int32_t (*iFplpi_t)(void*, intptr_t, void*, int32_t); typedef int32_t (*iFplpp_t)(void*, intptr_t, void*, void*); typedef int32_t (*iFpLii_t)(void*, uintptr_t, int32_t, int32_t); typedef int32_t (*iFpLiL_t)(void*, uintptr_t, int32_t, uintptr_t); typedef int32_t (*iFpLip_t)(void*, uintptr_t, int32_t, void*); +typedef int32_t (*iFpLui_t)(void*, uintptr_t, uint32_t, int32_t); typedef int32_t (*iFpLuu_t)(void*, uintptr_t, uint32_t, uint32_t); typedef int32_t (*iFpLup_t)(void*, uintptr_t, uint32_t, void*); typedef int32_t (*iFpLlp_t)(void*, uintptr_t, intptr_t, void*); @@ -1100,9 +1163,9 @@ typedef int32_t (*iFpLLu_t)(void*, uintptr_t, uintptr_t, uint32_t); typedef int32_t (*iFpLLL_t)(void*, uintptr_t, uintptr_t, uintptr_t); typedef int32_t (*iFpLLp_t)(void*, uintptr_t, uintptr_t, void*); typedef int32_t (*iFpLpi_t)(void*, uintptr_t, void*, int32_t); +typedef int32_t (*iFpLpu_t)(void*, uintptr_t, void*, uint32_t); typedef int32_t (*iFpLpf_t)(void*, uintptr_t, void*, float); typedef int32_t (*iFpLpd_t)(void*, uintptr_t, void*, double); -typedef int32_t (*iFpLpD_t)(void*, uintptr_t, void*, long double); typedef int32_t (*iFpLpL_t)(void*, uintptr_t, void*, uintptr_t); typedef int32_t (*iFpLpp_t)(void*, uintptr_t, void*, void*); typedef int32_t (*iFppii_t)(void*, void*, int32_t, int32_t); @@ -1124,6 +1187,8 @@ typedef int32_t (*iFppll_t)(void*, void*, intptr_t, intptr_t); typedef int32_t (*iFpplL_t)(void*, void*, intptr_t, uintptr_t); typedef int32_t (*iFpplp_t)(void*, void*, intptr_t, void*); typedef int32_t (*iFppLi_t)(void*, void*, uintptr_t, int32_t); +typedef int32_t (*iFppLu_t)(void*, void*, uintptr_t, uint32_t); +typedef int32_t (*iFppLl_t)(void*, void*, uintptr_t, intptr_t); typedef int32_t (*iFppLL_t)(void*, void*, uintptr_t, uintptr_t); typedef int32_t (*iFppLp_t)(void*, void*, uintptr_t, void*); typedef int32_t (*iFpppi_t)(void*, void*, void*, int32_t); @@ -1131,16 +1196,16 @@ typedef int32_t (*iFpppC_t)(void*, void*, void*, uint8_t); typedef int32_t (*iFpppu_t)(void*, void*, void*, uint32_t); typedef int32_t (*iFpppL_t)(void*, void*, void*, uintptr_t); typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); +typedef int32_t (*iFpONN_t)(void*, int32_t, ...); +typedef int32_t (*iFSpii_t)(void*, void*, int32_t, int32_t); +typedef int32_t (*iFSpiL_t)(void*, void*, int32_t, uintptr_t); typedef int32_t (*iFbupp_t)(void*, uint32_t, void*, void*); typedef int64_t (*IFEpIi_t)(x64emu_t*, void*, int64_t, int32_t); -typedef int64_t (*IFipUI_t)(int32_t, void*, uint64_t, int64_t); -typedef int64_t (*IFipUp_t)(int32_t, void*, uint64_t, void*); typedef int64_t (*IFpIip_t)(void*, int64_t, int32_t, void*); typedef int64_t (*IFppii_t)(void*, void*, int32_t, int32_t); typedef int64_t (*IFppip_t)(void*, void*, int32_t, void*); typedef int64_t (*IFSIii_t)(void*, int64_t, int32_t, int32_t); typedef uint8_t (*CFuuff_t)(uint32_t, uint32_t, float, float); -typedef uint8_t (*CFpiii_t)(void*, int32_t, int32_t, int32_t); typedef uint8_t (*CFpLLi_t)(void*, uintptr_t, uintptr_t, int32_t); typedef uint8_t (*CFppip_t)(void*, void*, int32_t, void*); typedef uint8_t (*CFbupp_t)(void*, uint32_t, void*, void*); @@ -1152,24 +1217,29 @@ typedef uint32_t (*uFiiii_t)(int32_t, int32_t, int32_t, int32_t); typedef uint32_t (*uFiiuu_t)(int32_t, int32_t, uint32_t, uint32_t); typedef uint32_t (*uFifff_t)(int32_t, float, float, float); typedef uint32_t (*uFuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t); +typedef uint32_t (*uFuppd_t)(uint32_t, void*, void*, double); +typedef uint32_t (*uFLppp_t)(uintptr_t, void*, void*, void*); typedef uint32_t (*uFpiip_t)(void*, int32_t, int32_t, void*); typedef uint32_t (*uFpipu_t)(void*, int32_t, void*, uint32_t); typedef uint32_t (*uFpipL_t)(void*, int32_t, void*, uintptr_t); typedef uint32_t (*uFpipp_t)(void*, int32_t, void*, void*); typedef uint32_t (*uFpCCC_t)(void*, uint8_t, uint8_t, uint8_t); -typedef uint32_t (*uFpuip_t)(void*, uint32_t, int32_t, void*); typedef uint32_t (*uFpuup_t)(void*, uint32_t, uint32_t, void*); typedef uint32_t (*uFpupi_t)(void*, uint32_t, void*, int32_t); typedef uint32_t (*uFpupu_t)(void*, uint32_t, void*, uint32_t); typedef uint32_t (*uFpupp_t)(void*, uint32_t, void*, void*); typedef uint32_t (*uFpubp_t)(void*, uint32_t, void*, void*); +typedef uint32_t (*uFplup_t)(void*, intptr_t, uint32_t, void*); +typedef uint32_t (*uFppii_t)(void*, void*, int32_t, int32_t); typedef uint32_t (*uFppiu_t)(void*, void*, int32_t, uint32_t); typedef uint32_t (*uFppip_t)(void*, void*, int32_t, void*); typedef uint32_t (*uFppuu_t)(void*, void*, uint32_t, uint32_t); +typedef uint32_t (*uFppup_t)(void*, void*, uint32_t, void*); typedef uint32_t (*uFpplp_t)(void*, void*, intptr_t, void*); typedef uint32_t (*uFppLp_t)(void*, void*, uintptr_t, void*); typedef uint32_t (*uFpppi_t)(void*, void*, void*, int32_t); typedef uint32_t (*uFpppu_t)(void*, void*, void*, uint32_t); +typedef uint32_t (*uFpppd_t)(void*, void*, void*, double); typedef uint32_t (*uFpppL_t)(void*, void*, void*, uintptr_t); typedef uint32_t (*uFpppp_t)(void*, void*, void*, void*); typedef uint32_t (*uFbipp_t)(void*, int32_t, void*, void*); @@ -1189,6 +1259,7 @@ typedef intptr_t (*lFEppL_t)(x64emu_t*, void*, void*, uintptr_t); typedef intptr_t (*lFEppp_t)(x64emu_t*, void*, void*, void*); typedef intptr_t (*lFiiLu_t)(int32_t, int32_t, uintptr_t, uint32_t); typedef intptr_t (*lFiipL_t)(int32_t, int32_t, void*, uintptr_t); +typedef intptr_t (*lFipiI_t)(int32_t, void*, int32_t, int64_t); typedef intptr_t (*lFipil_t)(int32_t, void*, int32_t, intptr_t); typedef intptr_t (*lFipLi_t)(int32_t, void*, uintptr_t, int32_t); typedef intptr_t (*lFipLI_t)(int32_t, void*, uintptr_t, int64_t); @@ -1201,10 +1272,15 @@ typedef intptr_t (*lFpili_t)(void*, int32_t, intptr_t, int32_t); typedef intptr_t (*lFpilp_t)(void*, int32_t, intptr_t, void*); typedef intptr_t (*lFpuip_t)(void*, uint32_t, int32_t, void*); typedef intptr_t (*lFplip_t)(void*, intptr_t, int32_t, void*); +typedef intptr_t (*lFplup_t)(void*, intptr_t, uint32_t, void*); +typedef intptr_t (*lFplpi_t)(void*, intptr_t, void*, int32_t); typedef intptr_t (*lFplpp_t)(void*, intptr_t, void*, void*); typedef intptr_t (*lFpLpp_t)(void*, uintptr_t, void*, void*); typedef intptr_t (*lFppii_t)(void*, void*, int32_t, int32_t); typedef intptr_t (*lFppip_t)(void*, void*, int32_t, void*); +typedef intptr_t (*lFppiS_t)(void*, void*, int32_t, void*); +typedef intptr_t (*lFpplp_t)(void*, void*, intptr_t, void*); +typedef intptr_t (*lFppLp_t)(void*, void*, uintptr_t, void*); typedef intptr_t (*lFpppL_t)(void*, void*, void*, uintptr_t); typedef intptr_t (*lFpppp_t)(void*, void*, void*, void*); typedef uintptr_t (*LFEppL_t)(x64emu_t*, void*, void*, uintptr_t); @@ -1216,7 +1292,10 @@ typedef uintptr_t (*LFuipL_t)(uint32_t, int32_t, void*, uintptr_t); typedef uintptr_t (*LFpCii_t)(void*, uint8_t, int32_t, int32_t); typedef uintptr_t (*LFpupL_t)(void*, uint32_t, void*, uintptr_t); typedef uintptr_t (*LFpLCL_t)(void*, uintptr_t, uint8_t, uintptr_t); +typedef uintptr_t (*LFpLuu_t)(void*, uintptr_t, uint32_t, uint32_t); typedef uintptr_t (*LFpLLp_t)(void*, uintptr_t, uintptr_t, void*); +typedef uintptr_t (*LFpLLS_t)(void*, uintptr_t, uintptr_t, void*); +typedef uintptr_t (*LFpLpi_t)(void*, uintptr_t, void*, int32_t); typedef uintptr_t (*LFpLpL_t)(void*, uintptr_t, void*, uintptr_t); typedef uintptr_t (*LFpLpp_t)(void*, uintptr_t, void*, void*); typedef uintptr_t (*LFppii_t)(void*, void*, int32_t, int32_t); @@ -1234,7 +1313,8 @@ typedef void* (*pFELpV_t)(x64emu_t*, uintptr_t, void*, void*); typedef void* (*pFELpA_t)(x64emu_t*, uintptr_t, void*, void*); typedef void* (*pFEpii_t)(x64emu_t*, void*, int32_t, int32_t); typedef void* (*pFEpip_t)(x64emu_t*, void*, int32_t, void*); -typedef void* (*pFEpuL_t)(x64emu_t*, void*, uint32_t, uintptr_t); +typedef void* (*pFEpiV_t)(x64emu_t*, void*, int32_t, void*); +typedef void* (*pFEpCL_t)(x64emu_t*, void*, uint8_t, uintptr_t); typedef void* (*pFEppi_t)(x64emu_t*, void*, void*, int32_t); typedef void* (*pFEppp_t)(x64emu_t*, void*, void*, void*); typedef void* (*pFEppV_t)(x64emu_t*, void*, void*, void*); @@ -1244,24 +1324,25 @@ typedef void* (*pFiiuu_t)(int32_t, int32_t, uint32_t, uint32_t); typedef void* (*pFiiup_t)(int32_t, int32_t, uint32_t, void*); typedef void* (*pFiiLp_t)(int32_t, int32_t, uintptr_t, void*); typedef void* (*pFiipi_t)(int32_t, int32_t, void*, int32_t); +typedef void* (*pFiipp_t)(int32_t, int32_t, void*, void*); typedef void* (*pFiIIi_t)(int32_t, int64_t, int64_t, int32_t); typedef void* (*pFillu_t)(int32_t, intptr_t, intptr_t, uint32_t); -typedef void* (*pFipii_t)(int32_t, void*, int32_t, int32_t); typedef void* (*pFipip_t)(int32_t, void*, int32_t, void*); typedef void* (*pFippi_t)(int32_t, void*, void*, int32_t); typedef void* (*pFippu_t)(int32_t, void*, void*, uint32_t); +typedef void* (*pFippl_t)(int32_t, void*, void*, intptr_t); typedef void* (*pFippL_t)(int32_t, void*, void*, uintptr_t); typedef void* (*pFippp_t)(int32_t, void*, void*, void*); typedef void* (*pFuuii_t)(uint32_t, uint32_t, int32_t, int32_t); typedef void* (*pFuuip_t)(uint32_t, uint32_t, int32_t, void*); typedef void* (*pFuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t); +typedef void* (*pFuddd_t)(uint32_t, double, double, double); typedef void* (*pFullu_t)(uint32_t, intptr_t, intptr_t, uint32_t); typedef void* (*pFupii_t)(uint32_t, void*, int32_t, int32_t); typedef void* (*pFuppp_t)(uint32_t, void*, void*, void*); typedef void* (*pFffff_t)(float, float, float, float); typedef void* (*pFdipp_t)(double, int32_t, void*, void*); typedef void* (*pFdddd_t)(double, double, double, double); -typedef void* (*pFDipp_t)(long double, int32_t, void*, void*); typedef void* (*pFlfff_t)(intptr_t, float, float, float); typedef void* (*pFLiip_t)(uintptr_t, int32_t, int32_t, void*); typedef void* (*pFLLup_t)(uintptr_t, uintptr_t, uint32_t, void*); @@ -1273,6 +1354,7 @@ typedef void* (*pFpiip_t)(void*, int32_t, int32_t, void*); typedef void* (*pFpiuu_t)(void*, int32_t, uint32_t, uint32_t); typedef void* (*pFpiLi_t)(void*, int32_t, uintptr_t, int32_t); typedef void* (*pFpiLL_t)(void*, int32_t, uintptr_t, uintptr_t); +typedef void* (*pFpipc_t)(void*, int32_t, void*, int8_t); typedef void* (*pFpipi_t)(void*, int32_t, void*, int32_t); typedef void* (*pFpipd_t)(void*, int32_t, void*, double); typedef void* (*pFpipL_t)(void*, int32_t, void*, uintptr_t); @@ -1306,6 +1388,7 @@ typedef void* (*pFppii_t)(void*, void*, int32_t, int32_t); typedef void* (*pFppiu_t)(void*, void*, int32_t, uint32_t); typedef void* (*pFppiL_t)(void*, void*, int32_t, uintptr_t); typedef void* (*pFppip_t)(void*, void*, int32_t, void*); +typedef void* (*pFppiS_t)(void*, void*, int32_t, void*); typedef void* (*pFppCp_t)(void*, void*, uint8_t, void*); typedef void* (*pFppWp_t)(void*, void*, uint16_t, void*); typedef void* (*pFppuu_t)(void*, void*, uint32_t, uint32_t); @@ -1321,6 +1404,7 @@ typedef void* (*pFpppi_t)(void*, void*, void*, int32_t); typedef void* (*pFpppu_t)(void*, void*, void*, uint32_t); typedef void* (*pFpppL_t)(void*, void*, void*, uintptr_t); typedef void* (*pFpppp_t)(void*, void*, void*, void*); +typedef void* (*pFpONN_t)(void*, int32_t, ...); typedef void* (*pFpbii_t)(void*, void*, int32_t, int32_t); typedef void* (*pFSppi_t)(void*, void*, void*, int32_t); typedef void* (*pFbCuW_t)(void*, uint8_t, uint32_t, uint16_t); @@ -1356,8 +1440,8 @@ typedef void (*vFEpipV_t)(x64emu_t*, void*, int32_t, void*, void*); typedef void (*vFEpipA_t)(x64emu_t*, void*, int32_t, void*, void*); typedef void (*vFEpuup_t)(x64emu_t*, void*, uint32_t, uint32_t, void*); typedef void (*vFEpuuV_t)(x64emu_t*, void*, uint32_t, uint32_t, void*); +typedef void (*vFEpuuA_t)(x64emu_t*, void*, uint32_t, uint32_t, void*); typedef void (*vFEpupp_t)(x64emu_t*, void*, uint32_t, void*, void*); -typedef void (*vFEpupA_t)(x64emu_t*, void*, uint32_t, void*, void*); typedef void (*vFEpLLp_t)(x64emu_t*, void*, uintptr_t, uintptr_t, void*); typedef void (*vFEppip_t)(x64emu_t*, void*, void*, int32_t, void*); typedef void (*vFEppiV_t)(x64emu_t*, void*, void*, int32_t, void*); @@ -1372,19 +1456,18 @@ typedef void (*vFiiuii_t)(int32_t, int32_t, uint32_t, int32_t, int32_t); typedef void (*vFiiuup_t)(int32_t, int32_t, uint32_t, uint32_t, void*); typedef void (*vFiillu_t)(int32_t, int32_t, intptr_t, intptr_t, uint32_t); typedef void (*vFiilll_t)(int32_t, int32_t, intptr_t, intptr_t, intptr_t); -typedef void (*vFiipii_t)(int32_t, int32_t, void*, int32_t, int32_t); typedef void (*vFiipll_t)(int32_t, int32_t, void*, intptr_t, intptr_t); +typedef void (*vFiIIII_t)(int32_t, int64_t, int64_t, int64_t, int64_t); typedef void (*vFiuiip_t)(int32_t, uint32_t, int32_t, int32_t, void*); typedef void (*vFiuipi_t)(int32_t, uint32_t, int32_t, void*, int32_t); typedef void (*vFiuuuu_t)(int32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef void (*vFiulpp_t)(int32_t, uint32_t, intptr_t, void*, void*); +typedef void (*vFiUUUU_t)(int32_t, uint64_t, uint64_t, uint64_t, uint64_t); typedef void (*vFiffff_t)(int32_t, float, float, float, float); typedef void (*vFidddd_t)(int32_t, double, double, double, double); typedef void (*vFilill_t)(int32_t, intptr_t, int32_t, intptr_t, intptr_t); typedef void (*vFilipi_t)(int32_t, intptr_t, int32_t, void*, int32_t); typedef void (*vFilipl_t)(int32_t, intptr_t, int32_t, void*, intptr_t); -typedef void (*vFillll_t)(int32_t, intptr_t, intptr_t, intptr_t, intptr_t); -typedef void (*vFiLLLL_t)(int32_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); typedef void (*vFipipu_t)(int32_t, void*, int32_t, void*, uint32_t); typedef void (*vFipipp_t)(int32_t, void*, int32_t, void*, void*); typedef void (*vFipupi_t)(int32_t, void*, uint32_t, void*, int32_t); @@ -1396,6 +1479,7 @@ typedef void (*vFuiiip_t)(uint32_t, int32_t, int32_t, int32_t, void*); typedef void (*vFuiiCp_t)(uint32_t, int32_t, int32_t, uint8_t, void*); typedef void (*vFuiiup_t)(uint32_t, int32_t, int32_t, uint32_t, void*); typedef void (*vFuiill_t)(uint32_t, int32_t, int32_t, intptr_t, intptr_t); +typedef void (*vFuiIII_t)(uint32_t, int32_t, int64_t, int64_t, int64_t); typedef void (*vFuiuii_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t); typedef void (*vFuiuip_t)(uint32_t, int32_t, uint32_t, int32_t, void*); typedef void (*vFuiuCi_t)(uint32_t, int32_t, uint32_t, uint8_t, int32_t); @@ -1403,20 +1487,19 @@ typedef void (*vFuiuCu_t)(uint32_t, int32_t, uint32_t, uint8_t, uint32_t); typedef void (*vFuiuuu_t)(uint32_t, int32_t, uint32_t, uint32_t, uint32_t); typedef void (*vFuiuup_t)(uint32_t, int32_t, uint32_t, uint32_t, void*); typedef void (*vFuiupi_t)(uint32_t, int32_t, uint32_t, void*, int32_t); +typedef void (*vFuiUUU_t)(uint32_t, int32_t, uint64_t, uint64_t, uint64_t); typedef void (*vFuifff_t)(uint32_t, int32_t, float, float, float); typedef void (*vFuiddd_t)(uint32_t, int32_t, double, double, double); -typedef void (*vFuilll_t)(uint32_t, int32_t, intptr_t, intptr_t, intptr_t); -typedef void (*vFuiLLL_t)(uint32_t, int32_t, uintptr_t, uintptr_t, uintptr_t); typedef void (*vFuipii_t)(uint32_t, int32_t, void*, int32_t, int32_t); typedef void (*vFuipip_t)(uint32_t, int32_t, void*, int32_t, void*); typedef void (*vFuipup_t)(uint32_t, int32_t, void*, uint32_t, void*); typedef void (*vFuippp_t)(uint32_t, int32_t, void*, void*, void*); +typedef void (*vFuIIII_t)(uint32_t, int64_t, int64_t, int64_t, int64_t); typedef void (*vFuCCCC_t)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t); typedef void (*vFuCuip_t)(uint32_t, uint8_t, uint32_t, int32_t, void*); typedef void (*vFuCuup_t)(uint32_t, uint8_t, uint32_t, uint32_t, void*); typedef void (*vFuWWWW_t)(uint32_t, uint16_t, uint16_t, uint16_t, uint16_t); typedef void (*vFuuiii_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t); -typedef void (*vFuuiiu_t)(uint32_t, uint32_t, int32_t, int32_t, uint32_t); typedef void (*vFuuiip_t)(uint32_t, uint32_t, int32_t, int32_t, void*); typedef void (*vFuuiui_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t); typedef void (*vFuuiuu_t)(uint32_t, uint32_t, int32_t, uint32_t, uint32_t); @@ -1438,12 +1521,10 @@ typedef void (*vFuulll_t)(uint32_t, uint32_t, intptr_t, intptr_t, intptr_t); typedef void (*vFuullp_t)(uint32_t, uint32_t, intptr_t, intptr_t, void*); typedef void (*vFuupii_t)(uint32_t, uint32_t, void*, int32_t, int32_t); typedef void (*vFuuppu_t)(uint32_t, uint32_t, void*, void*, uint32_t); +typedef void (*vFuUUUU_t)(uint32_t, uint64_t, uint64_t, uint64_t, uint64_t); typedef void (*vFuffff_t)(uint32_t, float, float, float, float); typedef void (*vFudddd_t)(uint32_t, double, double, double, double); -typedef void (*vFulill_t)(uint32_t, intptr_t, int32_t, intptr_t, intptr_t); -typedef void (*vFullll_t)(uint32_t, intptr_t, intptr_t, intptr_t, intptr_t); typedef void (*vFullpu_t)(uint32_t, intptr_t, intptr_t, void*, uint32_t); -typedef void (*vFuLLLL_t)(uint32_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); typedef void (*vFupiii_t)(uint32_t, void*, int32_t, int32_t, int32_t); typedef void (*vFupupi_t)(uint32_t, void*, uint32_t, void*, int32_t); typedef void (*vFupupp_t)(uint32_t, void*, uint32_t, void*, void*); @@ -1456,6 +1537,7 @@ typedef void (*vFddddp_t)(double, double, double, double, void*); typedef void (*vFluipp_t)(intptr_t, uint32_t, int32_t, void*, void*); typedef void (*vFLpppi_t)(uintptr_t, void*, void*, void*, int32_t); typedef void (*vFLpppp_t)(uintptr_t, void*, void*, void*, void*); +typedef void (*vFpwwWW_t)(void*, int16_t, int16_t, uint16_t, uint16_t); typedef void (*vFpiiii_t)(void*, int32_t, int32_t, int32_t, int32_t); typedef void (*vFpiiiI_t)(void*, int32_t, int32_t, int32_t, int64_t); typedef void (*vFpiiiu_t)(void*, int32_t, int32_t, int32_t, uint32_t); @@ -1472,6 +1554,7 @@ typedef void (*vFpiUUu_t)(void*, int32_t, uint64_t, uint64_t, uint32_t); typedef void (*vFpiUUp_t)(void*, int32_t, uint64_t, uint64_t, void*); typedef void (*vFpilpp_t)(void*, int32_t, intptr_t, void*, void*); typedef void (*vFpipii_t)(void*, int32_t, void*, int32_t, int32_t); +typedef void (*vFpipiu_t)(void*, int32_t, void*, int32_t, uint32_t); typedef void (*vFpippi_t)(void*, int32_t, void*, void*, int32_t); typedef void (*vFpippp_t)(void*, int32_t, void*, void*, void*); typedef void (*vFpuiip_t)(void*, uint32_t, int32_t, int32_t, void*); @@ -1494,13 +1577,19 @@ typedef void (*vFpdiII_t)(void*, double, int32_t, int64_t, int64_t); typedef void (*vFpddii_t)(void*, double, double, int32_t, int32_t); typedef void (*vFpdddd_t)(void*, double, double, double, double); typedef void (*vFpddpp_t)(void*, double, double, void*, void*); +typedef void (*vFpliip_t)(void*, intptr_t, int32_t, int32_t, void*); typedef void (*vFpluul_t)(void*, intptr_t, uint32_t, uint32_t, intptr_t); typedef void (*vFplppp_t)(void*, intptr_t, void*, void*, void*); +typedef void (*vFpLiii_t)(void*, uintptr_t, int32_t, int32_t, int32_t); +typedef void (*vFpLiiL_t)(void*, uintptr_t, int32_t, int32_t, uintptr_t); typedef void (*vFpLLLL_t)(void*, uintptr_t, uintptr_t, uintptr_t, uintptr_t); typedef void (*vFpLLpp_t)(void*, uintptr_t, uintptr_t, void*, void*); typedef void (*vFpLpiL_t)(void*, uintptr_t, void*, int32_t, uintptr_t); +typedef void (*vFpLppi_t)(void*, uintptr_t, void*, void*, int32_t); +typedef void (*vFppiic_t)(void*, void*, int32_t, int32_t, int8_t); typedef void (*vFppiii_t)(void*, void*, int32_t, int32_t, int32_t); typedef void (*vFppiiu_t)(void*, void*, int32_t, int32_t, uint32_t); +typedef void (*vFppiiL_t)(void*, void*, int32_t, int32_t, uintptr_t); typedef void (*vFppiip_t)(void*, void*, int32_t, int32_t, void*); typedef void (*vFppiui_t)(void*, void*, int32_t, uint32_t, int32_t); typedef void (*vFppiup_t)(void*, void*, int32_t, uint32_t, void*); @@ -1540,7 +1629,6 @@ typedef int32_t (*iFEiipV_t)(x64emu_t*, int32_t, int32_t, void*, void*); typedef int32_t (*iFEiipA_t)(x64emu_t*, int32_t, int32_t, void*, void*); typedef int32_t (*iFEipip_t)(x64emu_t*, int32_t, void*, int32_t, void*); typedef int32_t (*iFEippi_t)(x64emu_t*, int32_t, void*, void*, int32_t); -typedef int32_t (*iFEippL_t)(x64emu_t*, int32_t, void*, void*, uintptr_t); typedef int32_t (*iFEippp_t)(x64emu_t*, int32_t, void*, void*, void*); typedef int32_t (*iFEpiii_t)(x64emu_t*, void*, int32_t, int32_t, int32_t); typedef int32_t (*iFEpipi_t)(x64emu_t*, void*, int32_t, void*, int32_t); @@ -1553,8 +1641,8 @@ typedef int32_t (*iFEpLpV_t)(x64emu_t*, void*, uintptr_t, void*, void*); typedef int32_t (*iFEpLpA_t)(x64emu_t*, void*, uintptr_t, void*, void*); typedef int32_t (*iFEppii_t)(x64emu_t*, void*, void*, int32_t, int32_t); typedef int32_t (*iFEppip_t)(x64emu_t*, void*, void*, int32_t, void*); -typedef int32_t (*iFEppiV_t)(x64emu_t*, void*, void*, int32_t, void*); typedef int32_t (*iFEppiA_t)(x64emu_t*, void*, void*, int32_t, void*); +typedef int32_t (*iFEppup_t)(x64emu_t*, void*, void*, uint32_t, void*); typedef int32_t (*iFEpplp_t)(x64emu_t*, void*, void*, intptr_t, void*); typedef int32_t (*iFEpppi_t)(x64emu_t*, void*, void*, void*, int32_t); typedef int32_t (*iFEpppL_t)(x64emu_t*, void*, void*, void*, uintptr_t); @@ -1564,12 +1652,12 @@ typedef int32_t (*iFEpppA_t)(x64emu_t*, void*, void*, void*, void*); typedef int32_t (*iFiiipu_t)(int32_t, int32_t, int32_t, void*, uint32_t); typedef int32_t (*iFiiipp_t)(int32_t, int32_t, int32_t, void*, void*); typedef int32_t (*iFiiupp_t)(int32_t, int32_t, uint32_t, void*, void*); +typedef int32_t (*iFiippp_t)(int32_t, int32_t, void*, void*, void*); typedef int32_t (*iFiuuuu_t)(int32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef int32_t (*iFiuuup_t)(int32_t, uint32_t, uint32_t, uint32_t, void*); -typedef int32_t (*iFiuLip_t)(int32_t, uint32_t, uintptr_t, int32_t, void*); +typedef int32_t (*iFiuUip_t)(int32_t, uint32_t, uint64_t, int32_t, void*); typedef int32_t (*iFillLL_t)(int32_t, intptr_t, intptr_t, uintptr_t, uintptr_t); typedef int32_t (*iFipiii_t)(int32_t, void*, int32_t, int32_t, int32_t); -typedef int32_t (*iFipiup_t)(int32_t, void*, int32_t, uint32_t, void*); typedef int32_t (*iFipipi_t)(int32_t, void*, int32_t, void*, int32_t); typedef int32_t (*iFipipu_t)(int32_t, void*, int32_t, void*, uint32_t); typedef int32_t (*iFipuip_t)(int32_t, void*, uint32_t, int32_t, void*); @@ -1580,7 +1668,9 @@ typedef int32_t (*iFippLi_t)(int32_t, void*, void*, uintptr_t, int32_t); typedef int32_t (*iFippLp_t)(int32_t, void*, void*, uintptr_t, void*); typedef int32_t (*iFipppi_t)(int32_t, void*, void*, void*, int32_t); typedef int32_t (*iFipppp_t)(int32_t, void*, void*, void*, void*); +typedef int32_t (*iFuiuup_t)(uint32_t, int32_t, uint32_t, uint32_t, void*); typedef int32_t (*iFuuupp_t)(uint32_t, uint32_t, uint32_t, void*, void*); +typedef int32_t (*iFuupid_t)(uint32_t, uint32_t, void*, int32_t, double); typedef int32_t (*iFuppLp_t)(uint32_t, void*, void*, uintptr_t, void*); typedef int32_t (*iFLppip_t)(uintptr_t, void*, void*, int32_t, void*); typedef int32_t (*iFLpppp_t)(uintptr_t, void*, void*, void*, void*); @@ -1597,13 +1687,17 @@ typedef int32_t (*iFpiipp_t)(void*, int32_t, int32_t, void*, void*); typedef int32_t (*iFpiIip_t)(void*, int32_t, int64_t, int32_t, void*); typedef int32_t (*iFpiuwp_t)(void*, int32_t, uint32_t, int16_t, void*); typedef int32_t (*iFpiuuu_t)(void*, int32_t, uint32_t, uint32_t, uint32_t); +typedef int32_t (*iFpiuLi_t)(void*, int32_t, uint32_t, uintptr_t, int32_t); typedef int32_t (*iFpiUUU_t)(void*, int32_t, uint64_t, uint64_t, uint64_t); +typedef int32_t (*iFpiLip_t)(void*, int32_t, uintptr_t, int32_t, void*); +typedef int32_t (*iFpiLuu_t)(void*, int32_t, uintptr_t, uint32_t, uint32_t); typedef int32_t (*iFpipii_t)(void*, int32_t, void*, int32_t, int32_t); typedef int32_t (*iFpipiu_t)(void*, int32_t, void*, int32_t, uint32_t); typedef int32_t (*iFpipiL_t)(void*, int32_t, void*, int32_t, uintptr_t); typedef int32_t (*iFpipip_t)(void*, int32_t, void*, int32_t, void*); typedef int32_t (*iFpippi_t)(void*, int32_t, void*, void*, int32_t); typedef int32_t (*iFpippW_t)(void*, int32_t, void*, void*, uint16_t); +typedef int32_t (*iFpippL_t)(void*, int32_t, void*, void*, uintptr_t); typedef int32_t (*iFpippp_t)(void*, int32_t, void*, void*, void*); typedef int32_t (*iFpCCCC_t)(void*, uint8_t, uint8_t, uint8_t, uint8_t); typedef int32_t (*iFpCupp_t)(void*, uint8_t, uint32_t, void*, void*); @@ -1612,19 +1706,21 @@ typedef int32_t (*iFpuill_t)(void*, uint32_t, int32_t, intptr_t, intptr_t); typedef int32_t (*iFpuipi_t)(void*, uint32_t, int32_t, void*, int32_t); typedef int32_t (*iFpuipp_t)(void*, uint32_t, int32_t, void*, void*); typedef int32_t (*iFpuuip_t)(void*, uint32_t, uint32_t, int32_t, void*); -typedef int32_t (*iFpuuui_t)(void*, uint32_t, uint32_t, uint32_t, int32_t); typedef int32_t (*iFpuuup_t)(void*, uint32_t, uint32_t, uint32_t, void*); typedef int32_t (*iFpuuLL_t)(void*, uint32_t, uint32_t, uintptr_t, uintptr_t); typedef int32_t (*iFpuuLp_t)(void*, uint32_t, uint32_t, uintptr_t, void*); typedef int32_t (*iFpuupp_t)(void*, uint32_t, uint32_t, void*, void*); typedef int32_t (*iFpulup_t)(void*, uint32_t, intptr_t, uint32_t, void*); typedef int32_t (*iFpulpp_t)(void*, uint32_t, intptr_t, void*, void*); +typedef int32_t (*iFpuLup_t)(void*, uint32_t, uintptr_t, uint32_t, void*); typedef int32_t (*iFpuLpL_t)(void*, uint32_t, uintptr_t, void*, uintptr_t); typedef int32_t (*iFpuLpp_t)(void*, uint32_t, uintptr_t, void*, void*); typedef int32_t (*iFpupui_t)(void*, uint32_t, void*, uint32_t, int32_t); typedef int32_t (*iFpupuu_t)(void*, uint32_t, void*, uint32_t, uint32_t); typedef int32_t (*iFpupuU_t)(void*, uint32_t, void*, uint32_t, uint64_t); typedef int32_t (*iFpupup_t)(void*, uint32_t, void*, uint32_t, void*); +typedef int32_t (*iFpupLu_t)(void*, uint32_t, void*, uintptr_t, uint32_t); +typedef int32_t (*iFpuppu_t)(void*, uint32_t, void*, void*, uint32_t); typedef int32_t (*iFpuppL_t)(void*, uint32_t, void*, void*, uintptr_t); typedef int32_t (*iFpuppp_t)(void*, uint32_t, void*, void*, void*); typedef int32_t (*iFpUiUi_t)(void*, uint64_t, int32_t, uint64_t, int32_t); @@ -1634,10 +1730,11 @@ typedef int32_t (*iFplluu_t)(void*, intptr_t, intptr_t, uint32_t, uint32_t); typedef int32_t (*iFpLiup_t)(void*, uintptr_t, int32_t, uint32_t, void*); typedef int32_t (*iFpLilp_t)(void*, uintptr_t, int32_t, intptr_t, void*); typedef int32_t (*iFpLiLi_t)(void*, uintptr_t, int32_t, uintptr_t, int32_t); +typedef int32_t (*iFpLipi_t)(void*, uintptr_t, int32_t, void*, int32_t); +typedef int32_t (*iFpLuLi_t)(void*, uintptr_t, uint32_t, uintptr_t, int32_t); typedef int32_t (*iFpLlpp_t)(void*, uintptr_t, intptr_t, void*, void*); typedef int32_t (*iFpLLii_t)(void*, uintptr_t, uintptr_t, int32_t, int32_t); typedef int32_t (*iFpLLup_t)(void*, uintptr_t, uintptr_t, uint32_t, void*); -typedef int32_t (*iFpLLpp_t)(void*, uintptr_t, uintptr_t, void*, void*); typedef int32_t (*iFpLpii_t)(void*, uintptr_t, void*, int32_t, int32_t); typedef int32_t (*iFpLpiL_t)(void*, uintptr_t, void*, int32_t, uintptr_t); typedef int32_t (*iFpLpuL_t)(void*, uintptr_t, void*, uint32_t, uintptr_t); @@ -1646,6 +1743,7 @@ typedef int32_t (*iFpLpLi_t)(void*, uintptr_t, void*, uintptr_t, int32_t); typedef int32_t (*iFpLppi_t)(void*, uintptr_t, void*, void*, int32_t); typedef int32_t (*iFpLppL_t)(void*, uintptr_t, void*, void*, uintptr_t); typedef int32_t (*iFpLppp_t)(void*, uintptr_t, void*, void*, void*); +typedef int32_t (*iFppiii_t)(void*, void*, int32_t, int32_t, int32_t); typedef int32_t (*iFppiiu_t)(void*, void*, int32_t, int32_t, uint32_t); typedef int32_t (*iFppiiL_t)(void*, void*, int32_t, int32_t, uintptr_t); typedef int32_t (*iFppiip_t)(void*, void*, int32_t, int32_t, void*); @@ -1655,6 +1753,7 @@ typedef int32_t (*iFppiLi_t)(void*, void*, int32_t, uintptr_t, int32_t); typedef int32_t (*iFppiLL_t)(void*, void*, int32_t, uintptr_t, uintptr_t); typedef int32_t (*iFppipi_t)(void*, void*, int32_t, void*, int32_t); typedef int32_t (*iFppipu_t)(void*, void*, int32_t, void*, uint32_t); +typedef int32_t (*iFppipl_t)(void*, void*, int32_t, void*, intptr_t); typedef int32_t (*iFppipp_t)(void*, void*, int32_t, void*, void*); typedef int32_t (*iFppuwp_t)(void*, void*, uint32_t, int16_t, void*); typedef int32_t (*iFppuip_t)(void*, void*, uint32_t, int32_t, void*); @@ -1667,32 +1766,40 @@ typedef int32_t (*iFppUup_t)(void*, void*, uint64_t, uint32_t, void*); typedef int32_t (*iFpplii_t)(void*, void*, intptr_t, int32_t, int32_t); typedef int32_t (*iFppllp_t)(void*, void*, intptr_t, intptr_t, void*); typedef int32_t (*iFpplpp_t)(void*, void*, intptr_t, void*, void*); +typedef int32_t (*iFppLiL_t)(void*, void*, uintptr_t, int32_t, uintptr_t); typedef int32_t (*iFppLup_t)(void*, void*, uintptr_t, uint32_t, void*); +typedef int32_t (*iFppLLi_t)(void*, void*, uintptr_t, uintptr_t, int32_t); typedef int32_t (*iFppLpi_t)(void*, void*, uintptr_t, void*, int32_t); typedef int32_t (*iFppLpL_t)(void*, void*, uintptr_t, void*, uintptr_t); typedef int32_t (*iFppLpp_t)(void*, void*, uintptr_t, void*, void*); typedef int32_t (*iFpppii_t)(void*, void*, void*, int32_t, int32_t); typedef int32_t (*iFpppip_t)(void*, void*, void*, int32_t, void*); typedef int32_t (*iFpppui_t)(void*, void*, void*, uint32_t, int32_t); +typedef int32_t (*iFpppuu_t)(void*, void*, void*, uint32_t, uint32_t); typedef int32_t (*iFpppup_t)(void*, void*, void*, uint32_t, void*); typedef int32_t (*iFpppUi_t)(void*, void*, void*, uint64_t, int32_t); typedef int32_t (*iFpppLi_t)(void*, void*, void*, uintptr_t, int32_t); +typedef int32_t (*iFpppLu_t)(void*, void*, void*, uintptr_t, uint32_t); typedef int32_t (*iFpppLL_t)(void*, void*, void*, uintptr_t, uintptr_t); typedef int32_t (*iFpppLp_t)(void*, void*, void*, uintptr_t, void*); typedef int32_t (*iFppppi_t)(void*, void*, void*, void*, int32_t); typedef int32_t (*iFppppu_t)(void*, void*, void*, void*, uint32_t); +typedef int32_t (*iFppppd_t)(void*, void*, void*, void*, double); typedef int32_t (*iFppppl_t)(void*, void*, void*, void*, intptr_t); typedef int32_t (*iFppppL_t)(void*, void*, void*, void*, uintptr_t); typedef int32_t (*iFppppp_t)(void*, void*, void*, void*, void*); +typedef int32_t (*iFpSipp_t)(void*, void*, int32_t, void*, void*); +typedef int32_t (*iFpSuif_t)(void*, void*, uint32_t, int32_t, float); +typedef int32_t (*iFSppLp_t)(void*, void*, void*, uintptr_t, void*); typedef int64_t (*IFppIII_t)(void*, void*, int64_t, int64_t, int64_t); typedef uint32_t (*uFEippp_t)(x64emu_t*, int32_t, void*, void*, void*); typedef uint32_t (*uFEpipp_t)(x64emu_t*, void*, int32_t, void*, void*); -typedef uint32_t (*uFEppuu_t)(x64emu_t*, void*, void*, uint32_t, uint32_t); +typedef uint32_t (*uFEpupp_t)(x64emu_t*, void*, uint32_t, void*, void*); typedef uint32_t (*uFEpppp_t)(x64emu_t*, void*, void*, void*, void*); typedef uint32_t (*uFEpppV_t)(x64emu_t*, void*, void*, void*, void*); typedef uint32_t (*uFiuuuu_t)(int32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef uint32_t (*uFiuppi_t)(int32_t, uint32_t, void*, void*, int32_t); -typedef uint32_t (*uFipipp_t)(int32_t, void*, int32_t, void*, void*); +typedef uint32_t (*uFipupp_t)(int32_t, void*, uint32_t, void*, void*); typedef uint32_t (*uFipLpp_t)(int32_t, void*, uintptr_t, void*, void*); typedef uint32_t (*uFuiiii_t)(uint32_t, int32_t, int32_t, int32_t, int32_t); typedef uint32_t (*uFLpppL_t)(uintptr_t, void*, void*, void*, uintptr_t); @@ -1707,15 +1814,20 @@ typedef uint32_t (*uFppipp_t)(void*, void*, int32_t, void*, void*); typedef uint32_t (*uFppuup_t)(void*, void*, uint32_t, uint32_t, void*); typedef uint32_t (*uFppupp_t)(void*, void*, uint32_t, void*, void*); typedef uint32_t (*uFpplip_t)(void*, void*, intptr_t, int32_t, void*); +typedef uint32_t (*uFpplpp_t)(void*, void*, intptr_t, void*, void*); typedef uint32_t (*uFppLpp_t)(void*, void*, uintptr_t, void*, void*); +typedef uint32_t (*uFpppip_t)(void*, void*, void*, int32_t, void*); typedef uint32_t (*uFppppL_t)(void*, void*, void*, void*, uintptr_t); typedef uint32_t (*uFppppp_t)(void*, void*, void*, void*, void*); typedef uint32_t (*uFbCuuu_t)(void*, uint8_t, uint32_t, uint32_t, uint32_t); typedef uint32_t (*uFbCuup_t)(void*, uint8_t, uint32_t, uint32_t, void*); typedef uint32_t (*uFbuuWW_t)(void*, uint32_t, uint32_t, uint16_t, uint16_t); typedef uint32_t (*uFbuuup_t)(void*, uint32_t, uint32_t, uint32_t, void*); -typedef uint64_t (*UFuiiii_t)(uint32_t, int32_t, int32_t, int32_t, int32_t); +typedef uint64_t (*UFuiCiu_t)(uint32_t, int32_t, uint8_t, int32_t, uint32_t); +typedef intptr_t (*lFEippL_t)(x64emu_t*, int32_t, void*, void*, uintptr_t); typedef intptr_t (*lFEuipp_t)(x64emu_t*, uint32_t, int32_t, void*, void*); +typedef intptr_t (*lFEppLL_t)(x64emu_t*, void*, void*, uintptr_t, uintptr_t); +typedef intptr_t (*lFipiIi_t)(int32_t, void*, int32_t, int64_t, int32_t); typedef intptr_t (*lFipili_t)(int32_t, void*, int32_t, intptr_t, int32_t); typedef intptr_t (*lFipLli_t)(int32_t, void*, uintptr_t, intptr_t, int32_t); typedef intptr_t (*lFipLlL_t)(int32_t, void*, uintptr_t, intptr_t, uintptr_t); @@ -1724,29 +1836,31 @@ typedef intptr_t (*lFipLpp_t)(int32_t, void*, uintptr_t, void*, void*); typedef intptr_t (*lFpuipC_t)(void*, uint32_t, int32_t, void*, uint8_t); typedef intptr_t (*lFpuuLL_t)(void*, uint32_t, uint32_t, uintptr_t, uintptr_t); typedef intptr_t (*lFppupp_t)(void*, void*, uint32_t, void*, void*); -typedef intptr_t (*lFppllp_t)(void*, void*, intptr_t, intptr_t, void*); typedef intptr_t (*lFppLpL_t)(void*, void*, uintptr_t, void*, uintptr_t); typedef intptr_t (*lFppLpp_t)(void*, void*, uintptr_t, void*, void*); -typedef uintptr_t (*LFELppi_t)(x64emu_t*, uintptr_t, void*, void*, int32_t); +typedef uintptr_t (*LFELppu_t)(x64emu_t*, uintptr_t, void*, void*, uint32_t); +typedef uintptr_t (*LFEppLL_t)(x64emu_t*, void*, void*, uintptr_t, uintptr_t); typedef uintptr_t (*LFEpppp_t)(x64emu_t*, void*, void*, void*, void*); -typedef uintptr_t (*LFuiCiu_t)(uint32_t, int32_t, uint8_t, int32_t, uint32_t); +typedef uintptr_t (*LFuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef uintptr_t (*LFLpppL_t)(uintptr_t, void*, void*, void*, uintptr_t); typedef uintptr_t (*LFpuipp_t)(void*, uint32_t, int32_t, void*, void*); -typedef uintptr_t (*LFpuppi_t)(void*, uint32_t, void*, void*, int32_t); +typedef uintptr_t (*LFpuupi_t)(void*, uint32_t, uint32_t, void*, int32_t); typedef uintptr_t (*LFpLuuu_t)(void*, uintptr_t, uint32_t, uint32_t, uint32_t); typedef uintptr_t (*LFpLLLp_t)(void*, uintptr_t, uintptr_t, uintptr_t, void*); typedef uintptr_t (*LFpLpuu_t)(void*, uintptr_t, void*, uint32_t, uint32_t); +typedef uintptr_t (*LFpLpLp_t)(void*, uintptr_t, void*, uintptr_t, void*); typedef uintptr_t (*LFpLppL_t)(void*, uintptr_t, void*, void*, uintptr_t); typedef uintptr_t (*LFpLppp_t)(void*, uintptr_t, void*, void*, void*); typedef uintptr_t (*LFppLLp_t)(void*, void*, uintptr_t, uintptr_t, void*); typedef uintptr_t (*LFppLpL_t)(void*, void*, uintptr_t, void*, uintptr_t); typedef uintptr_t (*LFpppii_t)(void*, void*, void*, int32_t, int32_t); +typedef uintptr_t (*LFppppi_t)(void*, void*, void*, void*, int32_t); typedef uintptr_t (*LFppppp_t)(void*, void*, void*, void*, void*); +typedef void* (*pFEuipV_t)(x64emu_t*, uint32_t, int32_t, void*, void*); +typedef void* (*pFEuipA_t)(x64emu_t*, uint32_t, int32_t, void*, void*); typedef void* (*pFEpiii_t)(x64emu_t*, void*, int32_t, int32_t, int32_t); typedef void* (*pFEpipL_t)(x64emu_t*, void*, int32_t, void*, uintptr_t); typedef void* (*pFEpipp_t)(x64emu_t*, void*, int32_t, void*, void*); -typedef void* (*pFEpipV_t)(x64emu_t*, void*, int32_t, void*, void*); -typedef void* (*pFEpipA_t)(x64emu_t*, void*, int32_t, void*, void*); typedef void* (*pFEpupp_t)(x64emu_t*, void*, uint32_t, void*, void*); typedef void* (*pFEpUpp_t)(x64emu_t*, void*, uint64_t, void*, void*); typedef void* (*pFEpLpp_t)(x64emu_t*, void*, uintptr_t, void*, void*); @@ -1759,7 +1873,7 @@ typedef void* (*pFEpppp_t)(x64emu_t*, void*, void*, void*, void*); typedef void* (*pFEpppV_t)(x64emu_t*, void*, void*, void*, void*); typedef void* (*pFEpppA_t)(x64emu_t*, void*, void*, void*, void*); typedef void* (*pFiiiii_t)(int32_t, int32_t, int32_t, int32_t, int32_t); -typedef void* (*pFiiipL_t)(int32_t, int32_t, int32_t, void*, uintptr_t); +typedef void* (*pFiiupL_t)(int32_t, int32_t, uint32_t, void*, uintptr_t); typedef void* (*pFipipL_t)(int32_t, void*, int32_t, void*, uintptr_t); typedef void* (*pFipipp_t)(int32_t, void*, int32_t, void*, void*); typedef void* (*pFuiiiu_t)(uint32_t, int32_t, int32_t, int32_t, uint32_t); @@ -1784,6 +1898,7 @@ typedef void* (*pFpiuuu_t)(void*, int32_t, uint32_t, uint32_t, uint32_t); typedef void* (*pFpiuup_t)(void*, int32_t, uint32_t, uint32_t, void*); typedef void* (*pFpiupp_t)(void*, int32_t, uint32_t, void*, void*); typedef void* (*pFpiLip_t)(void*, int32_t, uintptr_t, int32_t, void*); +typedef void* (*pFpipii_t)(void*, int32_t, void*, int32_t, int32_t); typedef void* (*pFpipip_t)(void*, int32_t, void*, int32_t, void*); typedef void* (*pFpipup_t)(void*, int32_t, void*, uint32_t, void*); typedef void* (*pFpippi_t)(void*, int32_t, void*, void*, int32_t); @@ -1802,6 +1917,7 @@ typedef void* (*pFpfffi_t)(void*, float, float, float, int32_t); typedef void* (*pFpdddd_t)(void*, double, double, double, double); typedef void* (*pFplppp_t)(void*, intptr_t, void*, void*, void*); typedef void* (*pFpLiii_t)(void*, uintptr_t, int32_t, int32_t, int32_t); +typedef void* (*pFpLipp_t)(void*, uintptr_t, int32_t, void*, void*); typedef void* (*pFpLLip_t)(void*, uintptr_t, uintptr_t, int32_t, void*); typedef void* (*pFpLLLp_t)(void*, uintptr_t, uintptr_t, uintptr_t, void*); typedef void* (*pFpLpii_t)(void*, uintptr_t, void*, int32_t, int32_t); @@ -1813,6 +1929,7 @@ typedef void* (*pFppiip_t)(void*, void*, int32_t, int32_t, void*); typedef void* (*pFppiup_t)(void*, void*, int32_t, uint32_t, void*); typedef void* (*pFppipi_t)(void*, void*, int32_t, void*, int32_t); typedef void* (*pFppipp_t)(void*, void*, int32_t, void*, void*); +typedef void* (*pFppCip_t)(void*, void*, uint8_t, int32_t, void*); typedef void* (*pFppWpp_t)(void*, void*, uint16_t, void*, void*); typedef void* (*pFppuip_t)(void*, void*, uint32_t, int32_t, void*); typedef void* (*pFppuuu_t)(void*, void*, uint32_t, uint32_t, uint32_t); @@ -1859,11 +1976,10 @@ typedef void (*vFEpiLpp_t)(x64emu_t*, void*, int32_t, uintptr_t, void*, void*); typedef void (*vFEpippp_t)(x64emu_t*, void*, int32_t, void*, void*, void*); typedef void (*vFEpuipp_t)(x64emu_t*, void*, uint32_t, int32_t, void*, void*); typedef void (*vFEpuipV_t)(x64emu_t*, void*, uint32_t, int32_t, void*, void*); +typedef void (*vFEpuipA_t)(x64emu_t*, void*, uint32_t, int32_t, void*, void*); typedef void (*vFEpupup_t)(x64emu_t*, void*, uint32_t, void*, uint32_t, void*); typedef void (*vFEpuppp_t)(x64emu_t*, void*, uint32_t, void*, void*, void*); typedef void (*vFEpLLpp_t)(x64emu_t*, void*, uintptr_t, uintptr_t, void*, void*); -typedef void (*vFEppipV_t)(x64emu_t*, void*, void*, int32_t, void*, void*); -typedef void (*vFEppipA_t)(x64emu_t*, void*, void*, int32_t, void*, void*); typedef void (*vFEppupp_t)(x64emu_t*, void*, void*, uint32_t, void*, void*); typedef void (*vFEpppLp_t)(x64emu_t*, void*, void*, void*, uintptr_t, void*); typedef void (*vFEppppp_t)(x64emu_t*, void*, void*, void*, void*, void*); @@ -1871,36 +1987,35 @@ typedef void (*vFiiiiii_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t) typedef void (*vFiiiuil_t)(int32_t, int32_t, int32_t, uint32_t, int32_t, intptr_t); typedef void (*vFiiilpi_t)(int32_t, int32_t, int32_t, intptr_t, void*, int32_t); typedef void (*vFiiuilp_t)(int32_t, int32_t, uint32_t, int32_t, intptr_t, void*); +typedef void (*vFiipupV_t)(int32_t, int32_t, void*, uint32_t, void*, void*); typedef void (*vFiffiff_t)(int32_t, float, float, int32_t, float, float); typedef void (*vFiddidd_t)(int32_t, double, double, int32_t, double, double); typedef void (*vFilipli_t)(int32_t, intptr_t, int32_t, void*, intptr_t, int32_t); typedef void (*vFiliplu_t)(int32_t, intptr_t, int32_t, void*, intptr_t, uint32_t); -typedef void (*vFillill_t)(int32_t, intptr_t, intptr_t, int32_t, intptr_t, intptr_t); typedef void (*vFipiplp_t)(int32_t, void*, int32_t, void*, intptr_t, void*); typedef void (*vFCCCCff_t)(uint8_t, uint8_t, uint8_t, uint8_t, float, float); typedef void (*vFuiiiii_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFuiiiip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, void*); typedef void (*vFuiiuii_t)(uint32_t, int32_t, int32_t, uint32_t, int32_t, int32_t); typedef void (*vFuiiuup_t)(uint32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuiIIII_t)(uint32_t, int32_t, int64_t, int64_t, int64_t, int64_t); typedef void (*vFuiuiii_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t); typedef void (*vFuiuiiC_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, uint8_t); typedef void (*vFuiuiil_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, intptr_t); typedef void (*vFuiuiip_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, void*); typedef void (*vFuiuiuu_t)(uint32_t, int32_t, uint32_t, int32_t, uint32_t, uint32_t); -typedef void (*vFuiuiuL_t)(uint32_t, int32_t, uint32_t, int32_t, uint32_t, uintptr_t); +typedef void (*vFuiuiuU_t)(uint32_t, int32_t, uint32_t, int32_t, uint32_t, uint64_t); typedef void (*vFuiuCip_t)(uint32_t, int32_t, uint32_t, uint8_t, int32_t, void*); typedef void (*vFuiuuip_t)(uint32_t, int32_t, uint32_t, uint32_t, int32_t, void*); typedef void (*vFuiuuuu_t)(uint32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef void (*vFuiupii_t)(uint32_t, int32_t, uint32_t, void*, int32_t, int32_t); typedef void (*vFuiupiu_t)(uint32_t, int32_t, uint32_t, void*, int32_t, uint32_t); +typedef void (*vFuiUUUU_t)(uint32_t, int32_t, uint64_t, uint64_t, uint64_t, uint64_t); typedef void (*vFuiffff_t)(uint32_t, int32_t, float, float, float, float); typedef void (*vFuidddd_t)(uint32_t, int32_t, double, double, double, double); -typedef void (*vFuillll_t)(uint32_t, int32_t, intptr_t, intptr_t, intptr_t, intptr_t); -typedef void (*vFuiLLLL_t)(uint32_t, int32_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); typedef void (*vFuipiup_t)(uint32_t, int32_t, void*, int32_t, uint32_t, void*); typedef void (*vFuCuuip_t)(uint32_t, uint8_t, uint32_t, uint32_t, int32_t, void*); typedef void (*vFuuiiii_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t); -typedef void (*vFuuiiiu_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, uint32_t); typedef void (*vFuuiuii_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, int32_t); typedef void (*vFuuiuil_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, intptr_t); typedef void (*vFuuiuip_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, void*); @@ -1926,8 +2041,7 @@ typedef void (*vFuuplii_t)(uint32_t, uint32_t, void*, intptr_t, int32_t, int32_t typedef void (*vFuffiip_t)(uint32_t, float, float, int32_t, int32_t, void*); typedef void (*vFufffff_t)(uint32_t, float, float, float, float, float); typedef void (*vFuddiip_t)(uint32_t, double, double, int32_t, int32_t, void*); -typedef void (*vFullill_t)(uint32_t, intptr_t, intptr_t, int32_t, intptr_t, intptr_t); -typedef void (*vFulluLC_t)(uint32_t, intptr_t, intptr_t, uint32_t, uintptr_t, uint8_t); +typedef void (*vFulluUC_t)(uint32_t, intptr_t, intptr_t, uint32_t, uint64_t, uint8_t); typedef void (*vFupiiii_t)(uint32_t, void*, int32_t, int32_t, int32_t, int32_t); typedef void (*vFupupip_t)(uint32_t, void*, uint32_t, void*, int32_t, void*); typedef void (*vFuppppu_t)(uint32_t, void*, void*, void*, void*, uint32_t); @@ -1936,15 +2050,17 @@ typedef void (*vFUUpppp_t)(uint64_t, uint64_t, void*, void*, void*, void*); typedef void (*vFffffff_t)(float, float, float, float, float, float); typedef void (*vFdddddd_t)(double, double, double, double, double, double); typedef void (*vFdddppp_t)(double, double, double, void*, void*, void*); +typedef void (*vFpwwllc_t)(void*, int16_t, int16_t, intptr_t, intptr_t, int8_t); typedef void (*vFpiiiii_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFpiiipp_t)(void*, int32_t, int32_t, int32_t, void*, void*); typedef void (*vFpiiuuu_t)(void*, int32_t, int32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFpiilli_t)(void*, int32_t, int32_t, intptr_t, intptr_t, int32_t); typedef void (*vFpiippi_t)(void*, int32_t, int32_t, void*, void*, int32_t); typedef void (*vFpiippp_t)(void*, int32_t, int32_t, void*, void*, void*); typedef void (*vFpiUuup_t)(void*, int32_t, uint64_t, uint32_t, uint32_t, void*); +typedef void (*vFpiLppi_t)(void*, int32_t, uintptr_t, void*, void*, int32_t); typedef void (*vFpipipp_t)(void*, int32_t, void*, int32_t, void*, void*); typedef void (*vFpipipV_t)(void*, int32_t, void*, int32_t, void*, void*); -typedef void (*vFpipppi_t)(void*, int32_t, void*, void*, void*, int32_t); typedef void (*vFpipppp_t)(void*, int32_t, void*, void*, void*, void*); typedef void (*vFpuiiii_t)(void*, uint32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFpuiiiu_t)(void*, uint32_t, int32_t, int32_t, int32_t, uint32_t); @@ -1967,11 +2083,15 @@ typedef void (*vFpUUiup_t)(void*, uint64_t, uint64_t, int32_t, uint32_t, void*); typedef void (*vFpdddii_t)(void*, double, double, double, int32_t, int32_t); typedef void (*vFpddddd_t)(void*, double, double, double, double, double); typedef void (*vFpddddp_t)(void*, double, double, double, double, void*); +typedef void (*vFpLiiii_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFpLiiiL_t)(void*, uintptr_t, int32_t, int32_t, int32_t, uintptr_t); +typedef void (*vFpLiipi_t)(void*, uintptr_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFpLLLLu_t)(void*, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uint32_t); typedef void (*vFpLpLLL_t)(void*, uintptr_t, void*, uintptr_t, uintptr_t, uintptr_t); +typedef void (*vFpLpppi_t)(void*, uintptr_t, void*, void*, void*, int32_t); typedef void (*vFppiiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t); -typedef void (*vFppiiip_t)(void*, void*, int32_t, int32_t, int32_t, void*); +typedef void (*vFppiiiu_t)(void*, void*, int32_t, int32_t, int32_t, uint32_t); typedef void (*vFppiiuu_t)(void*, void*, int32_t, int32_t, uint32_t, uint32_t); -typedef void (*vFppiipi_t)(void*, void*, int32_t, int32_t, void*, int32_t); typedef void (*vFppiipp_t)(void*, void*, int32_t, int32_t, void*, void*); typedef void (*vFppilpp_t)(void*, void*, int32_t, intptr_t, void*, void*); typedef void (*vFppipLp_t)(void*, void*, int32_t, void*, uintptr_t, void*); @@ -1996,8 +2116,11 @@ typedef void (*vFpppiip_t)(void*, void*, void*, int32_t, int32_t, void*); typedef void (*vFpppiui_t)(void*, void*, void*, int32_t, uint32_t, int32_t); typedef void (*vFpppiff_t)(void*, void*, void*, int32_t, float, float); typedef void (*vFpppipu_t)(void*, void*, void*, int32_t, void*, uint32_t); +typedef void (*vFpppipp_t)(void*, void*, void*, int32_t, void*, void*); typedef void (*vFpppuii_t)(void*, void*, void*, uint32_t, int32_t, int32_t); +typedef void (*vFpppuip_t)(void*, void*, void*, uint32_t, int32_t, void*); typedef void (*vFpppuuu_t)(void*, void*, void*, uint32_t, uint32_t, uint32_t); +typedef void (*vFpppuup_t)(void*, void*, void*, uint32_t, uint32_t, void*); typedef void (*vFpppLpp_t)(void*, void*, void*, uintptr_t, void*, void*); typedef void (*vFppppii_t)(void*, void*, void*, void*, int32_t, int32_t); typedef void (*vFppppLp_t)(void*, void*, void*, void*, uintptr_t, void*); @@ -2010,6 +2133,7 @@ typedef int8_t (*cFppLppi_t)(void*, void*, uintptr_t, void*, void*, int32_t); typedef int32_t (*iFEiippi_t)(x64emu_t*, int32_t, int32_t, void*, void*, int32_t); typedef int32_t (*iFEiippp_t)(x64emu_t*, int32_t, int32_t, void*, void*, void*); typedef int32_t (*iFEiLLLL_t)(x64emu_t*, int32_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); +typedef int32_t (*iFEipiup_t)(x64emu_t*, int32_t, void*, int32_t, uint32_t, void*); typedef int32_t (*iFEippLp_t)(x64emu_t*, int32_t, void*, void*, uintptr_t, void*); typedef int32_t (*iFElpppp_t)(x64emu_t*, intptr_t, void*, void*, void*, void*); typedef int32_t (*iFEpiipp_t)(x64emu_t*, void*, int32_t, int32_t, void*, void*); @@ -2017,14 +2141,17 @@ typedef int32_t (*iFEpiipV_t)(x64emu_t*, void*, int32_t, int32_t, void*, void*); typedef int32_t (*iFEpilpV_t)(x64emu_t*, void*, int32_t, intptr_t, void*, void*); typedef int32_t (*iFEpippi_t)(x64emu_t*, void*, int32_t, void*, void*, int32_t); typedef int32_t (*iFEpIppp_t)(x64emu_t*, void*, int64_t, void*, void*, void*); +typedef int32_t (*iFEpuipp_t)(x64emu_t*, void*, uint32_t, int32_t, void*, void*); typedef int32_t (*iFEpuppp_t)(x64emu_t*, void*, uint32_t, void*, void*, void*); typedef int32_t (*iFEpUppp_t)(x64emu_t*, void*, uint64_t, void*, void*, void*); +typedef int32_t (*iFEppupp_t)(x64emu_t*, void*, void*, uint32_t, void*, void*); typedef int32_t (*iFEppppi_t)(x64emu_t*, void*, void*, void*, void*, int32_t); typedef int32_t (*iFEppppp_t)(x64emu_t*, void*, void*, void*, void*, void*); -typedef int32_t (*iFiiiiip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, void*); typedef int32_t (*iFiiiipp_t)(int32_t, int32_t, int32_t, int32_t, void*, void*); typedef int32_t (*iFiiiuwp_t)(int32_t, int32_t, int32_t, uint32_t, int16_t, void*); typedef int32_t (*iFiWiipi_t)(int32_t, uint16_t, int32_t, int32_t, void*, int32_t); +typedef int32_t (*iFiuuuup_t)(int32_t, uint32_t, uint32_t, uint32_t, uint32_t, void*); +typedef int32_t (*iFiuuppp_t)(int32_t, uint32_t, uint32_t, void*, void*, void*); typedef int32_t (*iFiuUuUu_t)(int32_t, uint32_t, uint64_t, uint32_t, uint64_t, uint32_t); typedef int32_t (*iFilpppp_t)(int32_t, intptr_t, void*, void*, void*, void*); typedef int32_t (*iFiLpppi_t)(int32_t, uintptr_t, void*, void*, void*, int32_t); @@ -2035,8 +2162,10 @@ typedef int32_t (*iFipupup_t)(int32_t, void*, uint32_t, void*, uint32_t, void*); typedef int32_t (*iFipuppp_t)(int32_t, void*, uint32_t, void*, void*, void*); typedef int32_t (*iFipppLp_t)(int32_t, void*, void*, void*, uintptr_t, void*); typedef int32_t (*iFippppp_t)(int32_t, void*, void*, void*, void*, void*); +typedef int32_t (*iFuiiuup_t)(uint32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef int32_t (*iFupupLp_t)(uint32_t, void*, uint32_t, void*, uintptr_t, void*); +typedef int32_t (*iFupLpLp_t)(uint32_t, void*, uintptr_t, void*, uintptr_t, void*); typedef int32_t (*iFdipppL_t)(double, int32_t, void*, void*, void*, uintptr_t); -typedef int32_t (*iFDipppL_t)(long double, int32_t, void*, void*, void*, uintptr_t); typedef int32_t (*iFlpippp_t)(intptr_t, void*, int32_t, void*, void*, void*); typedef int32_t (*iFLpppii_t)(uintptr_t, void*, void*, void*, int32_t, int32_t); typedef int32_t (*iFpiiiii_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t); @@ -2046,6 +2175,7 @@ typedef int32_t (*iFpiiipp_t)(void*, int32_t, int32_t, int32_t, void*, void*); typedef int32_t (*iFpiiuii_t)(void*, int32_t, int32_t, uint32_t, int32_t, int32_t); typedef int32_t (*iFpiiuui_t)(void*, int32_t, int32_t, uint32_t, uint32_t, int32_t); typedef int32_t (*iFpiiupp_t)(void*, int32_t, int32_t, uint32_t, void*, void*); +typedef int32_t (*iFpiiLip_t)(void*, int32_t, int32_t, uintptr_t, int32_t, void*); typedef int32_t (*iFpiipip_t)(void*, int32_t, int32_t, void*, int32_t, void*); typedef int32_t (*iFpiippp_t)(void*, int32_t, int32_t, void*, void*, void*); typedef int32_t (*iFpiCCpu_t)(void*, int32_t, uint8_t, uint8_t, void*, uint32_t); @@ -2058,12 +2188,14 @@ typedef int32_t (*iFpipupp_t)(void*, int32_t, void*, uint32_t, void*, void*); typedef int32_t (*iFpipLpp_t)(void*, int32_t, void*, uintptr_t, void*, void*); typedef int32_t (*iFpippip_t)(void*, int32_t, void*, void*, int32_t, void*); typedef int32_t (*iFpippup_t)(void*, int32_t, void*, void*, uint32_t, void*); +typedef int32_t (*iFpipppu_t)(void*, int32_t, void*, void*, void*, uint32_t); typedef int32_t (*iFpipppp_t)(void*, int32_t, void*, void*, void*, void*); typedef int32_t (*iFpCiipp_t)(void*, uint8_t, int32_t, int32_t, void*, void*); typedef int32_t (*iFpCpipu_t)(void*, uint8_t, void*, int32_t, void*, uint32_t); typedef int32_t (*iFpWipip_t)(void*, uint16_t, int32_t, void*, int32_t, void*); typedef int32_t (*iFpWpppp_t)(void*, uint16_t, void*, void*, void*, void*); typedef int32_t (*iFpuiCpp_t)(void*, uint32_t, int32_t, uint8_t, void*, void*); +typedef int32_t (*iFpuiLpp_t)(void*, uint32_t, int32_t, uintptr_t, void*, void*); typedef int32_t (*iFpuippp_t)(void*, uint32_t, int32_t, void*, void*, void*); typedef int32_t (*iFpuuuuu_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef int32_t (*iFpuuuup_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t, void*); @@ -2072,10 +2204,12 @@ typedef int32_t (*iFpuuupp_t)(void*, uint32_t, uint32_t, uint32_t, void*, void*) typedef int32_t (*iFpuuLpp_t)(void*, uint32_t, uint32_t, uintptr_t, void*, void*); typedef int32_t (*iFpuupuu_t)(void*, uint32_t, uint32_t, void*, uint32_t, uint32_t); typedef int32_t (*iFpuuppp_t)(void*, uint32_t, uint32_t, void*, void*, void*); +typedef int32_t (*iFpuLuLu_t)(void*, uint32_t, uintptr_t, uint32_t, uintptr_t, uint32_t); typedef int32_t (*iFpuLLpp_t)(void*, uint32_t, uintptr_t, uintptr_t, void*, void*); -typedef int32_t (*iFpupuui_t)(void*, uint32_t, void*, uint32_t, uint32_t, int32_t); +typedef int32_t (*iFpupupp_t)(void*, uint32_t, void*, uint32_t, void*, void*); typedef int32_t (*iFpupLpL_t)(void*, uint32_t, void*, uintptr_t, void*, uintptr_t); typedef int32_t (*iFpupLpp_t)(void*, uint32_t, void*, uintptr_t, void*, void*); +typedef int32_t (*iFpupppp_t)(void*, uint32_t, void*, void*, void*, void*); typedef int32_t (*iFpUiipp_t)(void*, uint64_t, int32_t, int32_t, void*, void*); typedef int32_t (*iFpUuuLp_t)(void*, uint64_t, uint32_t, uint32_t, uintptr_t, void*); typedef int32_t (*iFpUUUup_t)(void*, uint64_t, uint64_t, uint64_t, uint32_t, void*); @@ -2088,9 +2222,12 @@ typedef int32_t (*iFpLipLu_t)(void*, uintptr_t, int32_t, void*, uintptr_t, uint3 typedef int32_t (*iFpLuipp_t)(void*, uintptr_t, uint32_t, int32_t, void*, void*); typedef int32_t (*iFpLuupp_t)(void*, uintptr_t, uint32_t, uint32_t, void*, void*); typedef int32_t (*iFpLupip_t)(void*, uintptr_t, uint32_t, void*, int32_t, void*); +typedef int32_t (*iFpLLLLu_t)(void*, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uint32_t); typedef int32_t (*iFpLLLLL_t)(void*, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); +typedef int32_t (*iFpLLLLp_t)(void*, uintptr_t, uintptr_t, uintptr_t, uintptr_t, void*); typedef int32_t (*iFpLLppp_t)(void*, uintptr_t, uintptr_t, void*, void*, void*); typedef int32_t (*iFpLpipi_t)(void*, uintptr_t, void*, int32_t, void*, int32_t); +typedef int32_t (*iFpLpLui_t)(void*, uintptr_t, void*, uintptr_t, uint32_t, int32_t); typedef int32_t (*iFpLppii_t)(void*, uintptr_t, void*, void*, int32_t, int32_t); typedef int32_t (*iFpLpppL_t)(void*, uintptr_t, void*, void*, void*, uintptr_t); typedef int32_t (*iFpLpppp_t)(void*, uintptr_t, void*, void*, void*, void*); @@ -2098,6 +2235,7 @@ typedef int32_t (*iFppiiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t); typedef int32_t (*iFppiiip_t)(void*, void*, int32_t, int32_t, int32_t, void*); typedef int32_t (*iFppiipi_t)(void*, void*, int32_t, int32_t, void*, int32_t); typedef int32_t (*iFppiipp_t)(void*, void*, int32_t, int32_t, void*, void*); +typedef int32_t (*iFppiuii_t)(void*, void*, int32_t, uint32_t, int32_t, int32_t); typedef int32_t (*iFppiupp_t)(void*, void*, int32_t, uint32_t, void*, void*); typedef int32_t (*iFppilpp_t)(void*, void*, int32_t, intptr_t, void*, void*); typedef int32_t (*iFppipii_t)(void*, void*, int32_t, void*, int32_t, int32_t); @@ -2108,42 +2246,54 @@ typedef int32_t (*iFppippu_t)(void*, void*, int32_t, void*, void*, uint32_t); typedef int32_t (*iFppippp_t)(void*, void*, int32_t, void*, void*, void*); typedef int32_t (*iFppIppp_t)(void*, void*, int64_t, void*, void*, void*); typedef int32_t (*iFppuiii_t)(void*, void*, uint32_t, int32_t, int32_t, int32_t); +typedef int32_t (*iFppuipp_t)(void*, void*, uint32_t, int32_t, void*, void*); typedef int32_t (*iFppuIII_t)(void*, void*, uint32_t, int64_t, int64_t, int64_t); +typedef int32_t (*iFppuupL_t)(void*, void*, uint32_t, uint32_t, void*, uintptr_t); typedef int32_t (*iFppuupp_t)(void*, void*, uint32_t, uint32_t, void*, void*); +typedef int32_t (*iFppulup_t)(void*, void*, uint32_t, intptr_t, uint32_t, void*); +typedef int32_t (*iFppulll_t)(void*, void*, uint32_t, intptr_t, intptr_t, intptr_t); typedef int32_t (*iFppuLpp_t)(void*, void*, uint32_t, uintptr_t, void*, void*); typedef int32_t (*iFppupip_t)(void*, void*, uint32_t, void*, int32_t, void*); +typedef int32_t (*iFppuppu_t)(void*, void*, uint32_t, void*, void*, uint32_t); typedef int32_t (*iFppuppp_t)(void*, void*, uint32_t, void*, void*, void*); typedef int32_t (*iFppdidd_t)(void*, void*, double, int32_t, double, double); typedef int32_t (*iFpplupp_t)(void*, void*, intptr_t, uint32_t, void*, void*); typedef int32_t (*iFpplppi_t)(void*, void*, intptr_t, void*, void*, int32_t); +typedef int32_t (*iFppLiWL_t)(void*, void*, uintptr_t, int32_t, uint16_t, uintptr_t); typedef int32_t (*iFppLupp_t)(void*, void*, uintptr_t, uint32_t, void*, void*); typedef int32_t (*iFppLLiL_t)(void*, void*, uintptr_t, uintptr_t, int32_t, uintptr_t); typedef int32_t (*iFppLLup_t)(void*, void*, uintptr_t, uintptr_t, uint32_t, void*); typedef int32_t (*iFppLLpp_t)(void*, void*, uintptr_t, uintptr_t, void*, void*); typedef int32_t (*iFppLpLp_t)(void*, void*, uintptr_t, void*, uintptr_t, void*); typedef int32_t (*iFppLppp_t)(void*, void*, uintptr_t, void*, void*, void*); -typedef int32_t (*iFpppiuu_t)(void*, void*, void*, int32_t, uint32_t, uint32_t); +typedef int32_t (*iFpppiup_t)(void*, void*, void*, int32_t, uint32_t, void*); typedef int32_t (*iFpppipi_t)(void*, void*, void*, int32_t, void*, int32_t); typedef int32_t (*iFpppipu_t)(void*, void*, void*, int32_t, void*, uint32_t); typedef int32_t (*iFpppipp_t)(void*, void*, void*, int32_t, void*, void*); typedef int32_t (*iFpppuii_t)(void*, void*, void*, uint32_t, int32_t, int32_t); +typedef int32_t (*iFpppuuu_t)(void*, void*, void*, uint32_t, uint32_t, uint32_t); typedef int32_t (*iFpppuup_t)(void*, void*, void*, uint32_t, uint32_t, void*); typedef int32_t (*iFpppupu_t)(void*, void*, void*, uint32_t, void*, uint32_t); typedef int32_t (*iFpppupp_t)(void*, void*, void*, uint32_t, void*, void*); typedef int32_t (*iFpppLpp_t)(void*, void*, void*, uintptr_t, void*, void*); -typedef int32_t (*iFppppii_t)(void*, void*, void*, void*, int32_t, int32_t); typedef int32_t (*iFppppiu_t)(void*, void*, void*, void*, int32_t, uint32_t); typedef int32_t (*iFppppip_t)(void*, void*, void*, void*, int32_t, void*); +typedef int32_t (*iFppppui_t)(void*, void*, void*, void*, uint32_t, int32_t); +typedef int32_t (*iFppppuu_t)(void*, void*, void*, void*, uint32_t, uint32_t); typedef int32_t (*iFppppup_t)(void*, void*, void*, void*, uint32_t, void*); typedef int32_t (*iFppppLp_t)(void*, void*, void*, void*, uintptr_t, void*); typedef int32_t (*iFpppppi_t)(void*, void*, void*, void*, void*, int32_t); +typedef int32_t (*iFpppppu_t)(void*, void*, void*, void*, void*, uint32_t); typedef int32_t (*iFpppppL_t)(void*, void*, void*, void*, void*, uintptr_t); typedef int32_t (*iFpppppp_t)(void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFpppppS_t)(void*, void*, void*, void*, void*, void*); typedef uint32_t (*uFEiippp_t)(x64emu_t*, int32_t, int32_t, void*, void*, void*); typedef uint32_t (*uFEiuppp_t)(x64emu_t*, int32_t, uint32_t, void*, void*, void*); +typedef uint32_t (*uFEpippi_t)(x64emu_t*, void*, int32_t, void*, void*, int32_t); typedef uint32_t (*uFEpippp_t)(x64emu_t*, void*, int32_t, void*, void*, void*); typedef uint32_t (*uFEpCppp_t)(x64emu_t*, void*, uint8_t, void*, void*, void*); typedef uint32_t (*uFEpuppp_t)(x64emu_t*, void*, uint32_t, void*, void*, void*); +typedef uint32_t (*uFipuppp_t)(int32_t, void*, uint32_t, void*, void*, void*); typedef uint32_t (*uFuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef uint32_t (*uFupuufp_t)(uint32_t, void*, uint32_t, uint32_t, float, void*); typedef uint32_t (*uFuppppp_t)(uint32_t, void*, void*, void*, void*, void*); @@ -2156,9 +2306,9 @@ typedef uint32_t (*uFpuuupp_t)(void*, uint32_t, uint32_t, uint32_t, void*, void* typedef uint32_t (*uFpuuppp_t)(void*, uint32_t, uint32_t, void*, void*, void*); typedef uint32_t (*uFpupupu_t)(void*, uint32_t, void*, uint32_t, void*, uint32_t); typedef uint32_t (*uFpupppp_t)(void*, uint32_t, void*, void*, void*, void*); -typedef uint32_t (*uFppippp_t)(void*, void*, int32_t, void*, void*, void*); typedef uint32_t (*uFppuuup_t)(void*, void*, uint32_t, uint32_t, uint32_t, void*); typedef uint32_t (*uFppuupu_t)(void*, void*, uint32_t, uint32_t, void*, uint32_t); +typedef uint32_t (*uFppLpLp_t)(void*, void*, uintptr_t, void*, uintptr_t, void*); typedef uint32_t (*uFppLppL_t)(void*, void*, uintptr_t, void*, void*, uintptr_t); typedef uint32_t (*uFpppppi_t)(void*, void*, void*, void*, void*, int32_t); typedef uint32_t (*uFpppppp_t)(void*, void*, void*, void*, void*, void*); @@ -2173,19 +2323,21 @@ typedef intptr_t (*lFipLipp_t)(int32_t, void*, uintptr_t, int32_t, void*, void*) typedef intptr_t (*lFipLpLL_t)(int32_t, void*, uintptr_t, void*, uintptr_t, uintptr_t); typedef intptr_t (*lFpipill_t)(void*, int32_t, void*, int32_t, intptr_t, intptr_t); typedef intptr_t (*lFpuuLLp_t)(void*, uint32_t, uint32_t, uintptr_t, uintptr_t, void*); -typedef intptr_t (*lFpplllp_t)(void*, void*, intptr_t, intptr_t, intptr_t, void*); +typedef intptr_t (*lFpluuic_t)(void*, intptr_t, uint32_t, uint32_t, int32_t, int8_t); typedef intptr_t (*lFppLipp_t)(void*, void*, uintptr_t, int32_t, void*, void*); typedef intptr_t (*lFpppLpp_t)(void*, void*, void*, uintptr_t, void*, void*); -typedef uintptr_t (*LFEupppp_t)(x64emu_t*, uint32_t, void*, void*, void*, void*); -typedef uintptr_t (*LFELpppi_t)(x64emu_t*, uintptr_t, void*, void*, void*, int32_t); +typedef uintptr_t (*LFEuuppp_t)(x64emu_t*, uint32_t, uint32_t, void*, void*, void*); +typedef uintptr_t (*LFELpppu_t)(x64emu_t*, uintptr_t, void*, void*, void*, uint32_t); typedef uintptr_t (*LFEpippp_t)(x64emu_t*, void*, int32_t, void*, void*, void*); -typedef uintptr_t (*LFEppppi_t)(x64emu_t*, void*, void*, void*, void*, int32_t); +typedef uintptr_t (*LFEppppu_t)(x64emu_t*, void*, void*, void*, void*, uint32_t); typedef uintptr_t (*LFpipipi_t)(void*, int32_t, void*, int32_t, void*, int32_t); typedef uintptr_t (*LFpLippp_t)(void*, uintptr_t, int32_t, void*, void*, void*); typedef uintptr_t (*LFpLLLLL_t)(void*, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); typedef uintptr_t (*LFppLLpL_t)(void*, void*, uintptr_t, uintptr_t, void*, uintptr_t); typedef uintptr_t (*LFppLpLL_t)(void*, void*, uintptr_t, void*, uintptr_t, uintptr_t); typedef uintptr_t (*LFSpLiip_t)(void*, void*, uintptr_t, int32_t, int32_t, void*); +typedef void* (*pFELpppV_t)(x64emu_t*, uintptr_t, void*, void*, void*, void*); +typedef void* (*pFELpApp_t)(x64emu_t*, uintptr_t, void*, void*, void*, void*); typedef void* (*pFEpiupp_t)(x64emu_t*, void*, int32_t, uint32_t, void*, void*); typedef void* (*pFEpippp_t)(x64emu_t*, void*, int32_t, void*, void*, void*); typedef void* (*pFEpuipp_t)(x64emu_t*, void*, uint32_t, int32_t, void*, void*); @@ -2197,8 +2349,6 @@ typedef void* (*pFEppLLp_t)(x64emu_t*, void*, void*, uintptr_t, uintptr_t, void* typedef void* (*pFEpppLp_t)(x64emu_t*, void*, void*, void*, uintptr_t, void*); typedef void* (*pFEppppi_t)(x64emu_t*, void*, void*, void*, void*, int32_t); typedef void* (*pFEppppp_t)(x64emu_t*, void*, void*, void*, void*, void*); -typedef void* (*pFEppppV_t)(x64emu_t*, void*, void*, void*, void*, void*); -typedef void* (*pFEppApp_t)(x64emu_t*, void*, void*, void*, void*, void*); typedef void* (*pFiiiiii_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void* (*pFiiiiid_t)(int32_t, int32_t, int32_t, int32_t, int32_t, double); typedef void* (*pFipippp_t)(int32_t, void*, int32_t, void*, void*, void*); @@ -2212,18 +2362,24 @@ typedef void* (*pFuuuuup_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, vo typedef void* (*pFuuppuu_t)(uint32_t, uint32_t, void*, void*, uint32_t, uint32_t); typedef void* (*pFuppppp_t)(uint32_t, void*, void*, void*, void*, void*); typedef void* (*pFdddddd_t)(double, double, double, double, double, double); +typedef void* (*pFLppppp_t)(uintptr_t, void*, void*, void*, void*, void*); typedef void* (*pFpiiiiu_t)(void*, int32_t, int32_t, int32_t, int32_t, uint32_t); typedef void* (*pFpiiipp_t)(void*, int32_t, int32_t, int32_t, void*, void*); typedef void* (*pFpiiCCC_t)(void*, int32_t, int32_t, uint8_t, uint8_t, uint8_t); typedef void* (*pFpiiuup_t)(void*, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void* (*pFpiipip_t)(void*, int32_t, int32_t, void*, int32_t, void*); +typedef void* (*pFpiippp_t)(void*, int32_t, int32_t, void*, void*, void*); typedef void* (*pFpiUUUU_t)(void*, int32_t, uint64_t, uint64_t, uint64_t, uint64_t); +typedef void* (*pFpipipL_t)(void*, int32_t, void*, int32_t, void*, uintptr_t); typedef void* (*pFpipipp_t)(void*, int32_t, void*, int32_t, void*, void*); +typedef void* (*pFpipuii_t)(void*, int32_t, void*, uint32_t, int32_t, int32_t); typedef void* (*pFpippip_t)(void*, int32_t, void*, void*, int32_t, void*); typedef void* (*pFpipppp_t)(void*, int32_t, void*, void*, void*, void*); typedef void* (*pFpuiiip_t)(void*, uint32_t, int32_t, int32_t, int32_t, void*); typedef void* (*pFpuuuuu_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef void* (*pFpuuupu_t)(void*, uint32_t, uint32_t, uint32_t, void*, uint32_t); typedef void* (*pFpupuui_t)(void*, uint32_t, void*, uint32_t, uint32_t, int32_t); +typedef void* (*pFpupuup_t)(void*, uint32_t, void*, uint32_t, uint32_t, void*); typedef void* (*pFpuppip_t)(void*, uint32_t, void*, void*, int32_t, void*); typedef void* (*pFpupppp_t)(void*, uint32_t, void*, void*, void*, void*); typedef void* (*pFplpppp_t)(void*, intptr_t, void*, void*, void*, void*); @@ -2233,6 +2389,7 @@ typedef void* (*pFpLppii_t)(void*, uintptr_t, void*, void*, int32_t, int32_t); typedef void* (*pFpLppip_t)(void*, uintptr_t, void*, void*, int32_t, void*); typedef void* (*pFpLppup_t)(void*, uintptr_t, void*, void*, uint32_t, void*); typedef void* (*pFppiiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t); +typedef void* (*pFppiiup_t)(void*, void*, int32_t, int32_t, uint32_t, void*); typedef void* (*pFppiipp_t)(void*, void*, int32_t, int32_t, void*, void*); typedef void* (*pFppiCCC_t)(void*, void*, int32_t, uint8_t, uint8_t, uint8_t); typedef void* (*pFppiupp_t)(void*, void*, int32_t, uint32_t, void*, void*); @@ -2266,9 +2423,9 @@ typedef int32_t (*iWpiuppu_t)(void*, int32_t, uint32_t, void*, void*, uint32_t); typedef int32_t (*iWpuiiii_t)(void*, uint32_t, int32_t, int32_t, int32_t, int32_t); typedef int32_t (*iWpppppi_t)(void*, void*, void*, void*, void*, int32_t); typedef int32_t (*iWpppppu_t)(void*, void*, void*, void*, void*, uint32_t); -typedef void (*vFEpiiipp_t)(x64emu_t*, void*, int32_t, int32_t, int32_t, void*, void*); -typedef void (*vFEpipppp_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*); typedef void (*vFEpuipuV_t)(x64emu_t*, void*, uint32_t, int32_t, void*, uint32_t, void*); +typedef void (*vFEpuuipp_t)(x64emu_t*, void*, uint32_t, uint32_t, int32_t, void*, void*); +typedef void (*vFEpupppp_t)(x64emu_t*, void*, uint32_t, void*, void*, void*, void*); typedef void (*vFEppippp_t)(x64emu_t*, void*, void*, int32_t, void*, void*, void*); typedef void (*vFEpppLpp_t)(x64emu_t*, void*, void*, void*, uintptr_t, void*, void*); typedef void (*vFEppppup_t)(x64emu_t*, void*, void*, void*, void*, uint32_t, void*); @@ -2290,7 +2447,7 @@ typedef void (*vFuiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, uint32_t, uint3 typedef void (*vFuiuiiii_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFuiuiiiC_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, uint8_t); typedef void (*vFuiuiiip_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, void*); -typedef void (*vFuiuiiuL_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, uint32_t, uintptr_t); +typedef void (*vFuiuiiuU_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, uint32_t, uint64_t); typedef void (*vFuiuCiuu_t)(uint32_t, int32_t, uint32_t, uint8_t, int32_t, uint32_t, uint32_t); typedef void (*vFuiupiiu_t)(uint32_t, int32_t, uint32_t, void*, int32_t, int32_t, uint32_t); typedef void (*vFuiupuip_t)(uint32_t, int32_t, uint32_t, void*, uint32_t, int32_t, void*); @@ -2309,7 +2466,6 @@ typedef void (*vFuuiuiiC_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, int3 typedef void (*vFuuipppp_t)(uint32_t, uint32_t, int32_t, void*, void*, void*, void*); typedef void (*vFuuuiiii_t)(uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFuuuiiCp_t)(uint32_t, uint32_t, uint32_t, int32_t, int32_t, uint8_t, void*); -typedef void (*vFuuuiuii_t)(uint32_t, uint32_t, uint32_t, int32_t, uint32_t, int32_t, int32_t); typedef void (*vFuuuiuil_t)(uint32_t, uint32_t, uint32_t, int32_t, uint32_t, int32_t, intptr_t); typedef void (*vFuuuiupi_t)(uint32_t, uint32_t, uint32_t, int32_t, uint32_t, void*, int32_t); typedef void (*vFuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); @@ -2324,21 +2480,21 @@ typedef void (*vFuuppppu_t)(uint32_t, uint32_t, void*, void*, void*, void*, uint typedef void (*vFuuppppp_t)(uint32_t, uint32_t, void*, void*, void*, void*, void*); typedef void (*vFuffffff_t)(uint32_t, float, float, float, float, float, float); typedef void (*vFudddddd_t)(uint32_t, double, double, double, double, double, double); -typedef void (*vFlipuiip_t)(intptr_t, int32_t, void*, uint32_t, int32_t, int32_t, void*); typedef void (*vFlliiiip_t)(intptr_t, intptr_t, int32_t, int32_t, int32_t, int32_t, void*); typedef void (*vFLpuLpLp_t)(uintptr_t, void*, uint32_t, uintptr_t, void*, uintptr_t, void*); typedef void (*vFpiiiipp_t)(void*, int32_t, int32_t, int32_t, int32_t, void*, void*); typedef void (*vFpiiliip_t)(void*, int32_t, int32_t, intptr_t, int32_t, int32_t, void*); typedef void (*vFpiiLiip_t)(void*, int32_t, int32_t, uintptr_t, int32_t, int32_t, void*); typedef void (*vFpiipCpp_t)(void*, int32_t, int32_t, void*, uint8_t, void*, void*); -typedef void (*vFpiipppp_t)(void*, int32_t, int32_t, void*, void*, void*, void*); -typedef void (*vFpipipii_t)(void*, int32_t, void*, int32_t, void*, int32_t, int32_t); +typedef void (*vFpipipiu_t)(void*, int32_t, void*, int32_t, void*, int32_t, uint32_t); typedef void (*vFpippppu_t)(void*, int32_t, void*, void*, void*, void*, uint32_t); typedef void (*vFpuiippp_t)(void*, uint32_t, int32_t, int32_t, void*, void*, void*); +typedef void (*vFpuipppp_t)(void*, uint32_t, int32_t, void*, void*, void*, void*); typedef void (*vFpuuuuuu_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef void (*vFpuuUUuu_t)(void*, uint32_t, uint32_t, uint64_t, uint64_t, uint32_t, uint32_t); typedef void (*vFpuupupu_t)(void*, uint32_t, uint32_t, void*, uint32_t, void*, uint32_t); typedef void (*vFpuupppp_t)(void*, uint32_t, uint32_t, void*, void*, void*, void*); +typedef void (*vFpupiiiu_t)(void*, uint32_t, void*, int32_t, int32_t, int32_t, uint32_t); typedef void (*vFpupuuup_t)(void*, uint32_t, void*, uint32_t, uint32_t, uint32_t, void*); typedef void (*vFpupppui_t)(void*, uint32_t, void*, void*, void*, uint32_t, int32_t); typedef void (*vFpUiUiup_t)(void*, uint64_t, int32_t, uint64_t, int32_t, uint32_t, void*); @@ -2347,11 +2503,17 @@ typedef void (*vFpUUUUuu_t)(void*, uint64_t, uint64_t, uint64_t, uint64_t, uint3 typedef void (*vFpfffppp_t)(void*, float, float, float, void*, void*, void*); typedef void (*vFpddiidd_t)(void*, double, double, int32_t, int32_t, double, double); typedef void (*vFpdddddd_t)(void*, double, double, double, double, double, double); +typedef void (*vFplilppp_t)(void*, intptr_t, int32_t, intptr_t, void*, void*, void*); +typedef void (*vFpLiiiLi_t)(void*, uintptr_t, int32_t, int32_t, int32_t, uintptr_t, int32_t); +typedef void (*vFpLiiipi_t)(void*, uintptr_t, int32_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFpLiiuui_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, int32_t); typedef void (*vFpLiLiLp_t)(void*, uintptr_t, int32_t, uintptr_t, int32_t, uintptr_t, void*); +typedef void (*vFpLLiiip_t)(void*, uintptr_t, uintptr_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFpLLuuuu_t)(void*, uintptr_t, uintptr_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef void (*vFpLpiipi_t)(void*, uintptr_t, void*, int32_t, int32_t, void*, int32_t); +typedef void (*vFpLppipi_t)(void*, uintptr_t, void*, void*, int32_t, void*, int32_t); +typedef void (*vFppcuupp_t)(void*, void*, int8_t, uint32_t, uint32_t, void*, void*); typedef void (*vFppiiiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t); -typedef void (*vFppiiiip_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, void*); -typedef void (*vFppiiipi_t)(void*, void*, int32_t, int32_t, int32_t, void*, int32_t); typedef void (*vFppiipii_t)(void*, void*, int32_t, int32_t, void*, int32_t, int32_t); typedef void (*vFppiipuu_t)(void*, void*, int32_t, int32_t, void*, uint32_t, uint32_t); typedef void (*vFppiippp_t)(void*, void*, int32_t, int32_t, void*, void*, void*); @@ -2360,9 +2522,10 @@ typedef void (*vFppiLiLp_t)(void*, void*, int32_t, uintptr_t, int32_t, uintptr_t typedef void (*vFppipiip_t)(void*, void*, int32_t, void*, int32_t, int32_t, void*); typedef void (*vFppipipp_t)(void*, void*, int32_t, void*, int32_t, void*, void*); typedef void (*vFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void*); -typedef void (*vFppCuupp_t)(void*, void*, uint8_t, uint32_t, uint32_t, void*, void*); typedef void (*vFppuiiip_t)(void*, void*, uint32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFppuuuii_t)(void*, void*, uint32_t, uint32_t, uint32_t, int32_t, int32_t); typedef void (*vFppuupii_t)(void*, void*, uint32_t, uint32_t, void*, int32_t, int32_t); +typedef void (*vFppupipp_t)(void*, void*, uint32_t, void*, int32_t, void*, void*); typedef void (*vFppUuupp_t)(void*, void*, uint64_t, uint32_t, uint32_t, void*, void*); typedef void (*vFppddddu_t)(void*, void*, double, double, double, double, uint32_t); typedef void (*vFppddpiu_t)(void*, void*, double, double, void*, int32_t, uint32_t); @@ -2374,40 +2537,43 @@ typedef void (*vFpppiipi_t)(void*, void*, void*, int32_t, int32_t, void*, int32_ typedef void (*vFpppiipp_t)(void*, void*, void*, int32_t, int32_t, void*, void*); typedef void (*vFpppiupi_t)(void*, void*, void*, int32_t, uint32_t, void*, int32_t); typedef void (*vFpppippi_t)(void*, void*, void*, int32_t, void*, void*, int32_t); -typedef void (*vFpppuuuu_t)(void*, void*, void*, uint32_t, uint32_t, uint32_t, uint32_t); typedef void (*vFpppffff_t)(void*, void*, void*, float, float, float, float); typedef void (*vFppppiip_t)(void*, void*, void*, void*, int32_t, int32_t, void*); typedef void (*vFppppiui_t)(void*, void*, void*, void*, int32_t, uint32_t, int32_t); -typedef void (*vFppppipi_t)(void*, void*, void*, void*, int32_t, void*, int32_t); typedef void (*vFpppppip_t)(void*, void*, void*, void*, void*, int32_t, void*); typedef void (*vFppppppu_t)(void*, void*, void*, void*, void*, void*, uint32_t); typedef void (*vFppppppp_t)(void*, void*, void*, void*, void*, void*, void*); +typedef int8_t (*cFppppppp_t)(void*, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFElppppp_t)(x64emu_t*, intptr_t, void*, void*, void*, void*, void*); typedef int32_t (*iFEpupppp_t)(x64emu_t*, void*, uint32_t, void*, void*, void*, void*); typedef int32_t (*iFEpUuppp_t)(x64emu_t*, void*, uint64_t, uint32_t, void*, void*, void*); typedef int32_t (*iFEpLiLpp_t)(x64emu_t*, void*, uintptr_t, int32_t, uintptr_t, void*, void*); typedef int32_t (*iFEpLiLpV_t)(x64emu_t*, void*, uintptr_t, int32_t, uintptr_t, void*, void*); +typedef int32_t (*iFEpLpiiL_t)(x64emu_t*, void*, uintptr_t, void*, int32_t, int32_t, uintptr_t); typedef int32_t (*iFEppuppp_t)(x64emu_t*, void*, void*, uint32_t, void*, void*, void*); -typedef int32_t (*iFEppLpIi_t)(x64emu_t*, void*, void*, uintptr_t, void*, int64_t, int32_t); -typedef int32_t (*iFEpppiiu_t)(x64emu_t*, void*, void*, void*, int32_t, int32_t, uint32_t); +typedef int32_t (*iFEppLpIu_t)(x64emu_t*, void*, void*, uintptr_t, void*, int64_t, uint32_t); typedef int32_t (*iFEpppLpp_t)(x64emu_t*, void*, void*, void*, uintptr_t, void*, void*); typedef int32_t (*iFEpppppL_t)(x64emu_t*, void*, void*, void*, void*, void*, uintptr_t); typedef int32_t (*iFEpppppp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*); -typedef int32_t (*iFiiiiiip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); +typedef int32_t (*iFiupuuup_t)(int32_t, uint32_t, void*, uint32_t, uint32_t, uint32_t, void*); +typedef int32_t (*iFiupuppp_t)(int32_t, uint32_t, void*, uint32_t, void*, void*, void*); typedef int32_t (*iFipupupi_t)(int32_t, void*, uint32_t, void*, uint32_t, void*, int32_t); typedef int32_t (*iFippuIup_t)(int32_t, void*, void*, uint32_t, int64_t, uint32_t, void*); typedef int32_t (*iFipppppp_t)(int32_t, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFuiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef int32_t (*iFuippLpp_t)(uint32_t, int32_t, void*, void*, uintptr_t, void*, void*); typedef int32_t (*iFpiiiiii_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef int32_t (*iFpiiiuwp_t)(void*, int32_t, int32_t, int32_t, uint32_t, int16_t, void*); typedef int32_t (*iFpiiiuup_t)(void*, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); -typedef int32_t (*iFpiiuuiu_t)(void*, int32_t, int32_t, uint32_t, uint32_t, int32_t, uint32_t); typedef int32_t (*iFpiipppp_t)(void*, int32_t, int32_t, void*, void*, void*, void*); typedef int32_t (*iFpiuiipp_t)(void*, int32_t, uint32_t, int32_t, int32_t, void*, void*); +typedef int32_t (*iFpiuuuiu_t)(void*, int32_t, uint32_t, uint32_t, uint32_t, int32_t, uint32_t); typedef int32_t (*iFpiuLiii_t)(void*, int32_t, uint32_t, uintptr_t, int32_t, int32_t, int32_t); typedef int32_t (*iFpiupppp_t)(void*, int32_t, uint32_t, void*, void*, void*, void*); +typedef int32_t (*iFpiLipip_t)(void*, int32_t, uintptr_t, int32_t, void*, int32_t, void*); typedef int32_t (*iFpiLuupp_t)(void*, int32_t, uintptr_t, uint32_t, uint32_t, void*, void*); typedef int32_t (*iFpiLuppp_t)(void*, int32_t, uintptr_t, uint32_t, void*, void*, void*); typedef int32_t (*iFpipiiip_t)(void*, int32_t, void*, int32_t, int32_t, int32_t, void*); -typedef int32_t (*iFpipipip_t)(void*, int32_t, void*, int32_t, void*, int32_t, void*); typedef int32_t (*iFpipippp_t)(void*, int32_t, void*, int32_t, void*, void*, void*); typedef int32_t (*iFpippLpp_t)(void*, int32_t, void*, void*, uintptr_t, void*, void*); typedef int32_t (*iFpippppW_t)(void*, int32_t, void*, void*, void*, void*, uint16_t); @@ -2419,7 +2585,6 @@ typedef int32_t (*iFpWppppp_t)(void*, uint16_t, void*, void*, void*, void*, void typedef int32_t (*iFpuiCuCp_t)(void*, uint32_t, int32_t, uint8_t, uint32_t, uint8_t, void*); typedef int32_t (*iFpuiuupp_t)(void*, uint32_t, int32_t, uint32_t, uint32_t, void*, void*); typedef int32_t (*iFpupiLpL_t)(void*, uint32_t, void*, int32_t, uintptr_t, void*, uintptr_t); -typedef int32_t (*iFpupuuui_t)(void*, uint32_t, void*, uint32_t, uint32_t, uint32_t, int32_t); typedef int32_t (*iFpupuupp_t)(void*, uint32_t, void*, uint32_t, uint32_t, void*, void*); typedef int32_t (*iFpupupui_t)(void*, uint32_t, void*, uint32_t, void*, uint32_t, int32_t); typedef int32_t (*iFpuppppp_t)(void*, uint32_t, void*, void*, void*, void*, void*); @@ -2431,8 +2596,11 @@ typedef int32_t (*iFpLipupu_t)(void*, uintptr_t, int32_t, void*, uint32_t, void* typedef int32_t (*iFpLpiiii_t)(void*, uintptr_t, void*, int32_t, int32_t, int32_t, int32_t); typedef int32_t (*iFpLpiiuu_t)(void*, uintptr_t, void*, int32_t, int32_t, uint32_t, uint32_t); typedef int32_t (*iFpLpiipi_t)(void*, uintptr_t, void*, int32_t, int32_t, void*, int32_t); +typedef int32_t (*iFpLpLuLi_t)(void*, uintptr_t, void*, uintptr_t, uint32_t, uintptr_t, int32_t); typedef int32_t (*iFpLpLpip_t)(void*, uintptr_t, void*, uintptr_t, void*, int32_t, void*); +typedef int32_t (*iFpLpLpLp_t)(void*, uintptr_t, void*, uintptr_t, void*, uintptr_t, void*); typedef int32_t (*iFpLppiii_t)(void*, uintptr_t, void*, void*, int32_t, int32_t, int32_t); +typedef int32_t (*iFpLppiip_t)(void*, uintptr_t, void*, void*, int32_t, int32_t, void*); typedef int32_t (*iFppiiiip_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, void*); typedef int32_t (*iFppiiuup_t)(void*, void*, int32_t, int32_t, uint32_t, uint32_t, void*); typedef int32_t (*iFppiiLll_t)(void*, void*, int32_t, int32_t, uintptr_t, intptr_t, intptr_t); @@ -2448,28 +2616,33 @@ typedef int32_t (*iFppuipiL_t)(void*, void*, uint32_t, int32_t, void*, int32_t, typedef int32_t (*iFppuippp_t)(void*, void*, uint32_t, int32_t, void*, void*, void*); typedef int32_t (*iFppuuppp_t)(void*, void*, uint32_t, uint32_t, void*, void*, void*); typedef int32_t (*iFppupupp_t)(void*, void*, uint32_t, void*, uint32_t, void*, void*); +typedef int32_t (*iFppupppp_t)(void*, void*, uint32_t, void*, void*, void*, void*); typedef int32_t (*iFppliupp_t)(void*, void*, intptr_t, int32_t, uint32_t, void*, void*); typedef int32_t (*iFppLiipp_t)(void*, void*, uintptr_t, int32_t, int32_t, void*, void*); +typedef int32_t (*iFppLiWwL_t)(void*, void*, uintptr_t, int32_t, uint16_t, int16_t, uintptr_t); typedef int32_t (*iFppLippp_t)(void*, void*, uintptr_t, int32_t, void*, void*, void*); typedef int32_t (*iFppLuuii_t)(void*, void*, uintptr_t, uint32_t, uint32_t, int32_t, int32_t); +typedef int32_t (*iFppLLLLu_t)(void*, void*, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uint32_t); typedef int32_t (*iFppLpppp_t)(void*, void*, uintptr_t, void*, void*, void*, void*); -typedef int32_t (*iFpppiiuu_t)(void*, void*, void*, int32_t, int32_t, uint32_t, uint32_t); typedef int32_t (*iFpppiiup_t)(void*, void*, void*, int32_t, int32_t, uint32_t, void*); -typedef int32_t (*iFpppiuwu_t)(void*, void*, void*, int32_t, uint32_t, int16_t, uint32_t); typedef int32_t (*iFpppippi_t)(void*, void*, void*, int32_t, void*, void*, int32_t); typedef int32_t (*iFpppippp_t)(void*, void*, void*, int32_t, void*, void*, void*); typedef int32_t (*iFpppuiii_t)(void*, void*, void*, uint32_t, int32_t, int32_t, int32_t); +typedef int32_t (*iFpppuupu_t)(void*, void*, void*, uint32_t, uint32_t, void*, uint32_t); +typedef int32_t (*iFpppulup_t)(void*, void*, void*, uint32_t, intptr_t, uint32_t, void*); typedef int32_t (*iFpppLppp_t)(void*, void*, void*, uintptr_t, void*, void*, void*); typedef int32_t (*iFppppilp_t)(void*, void*, void*, void*, int32_t, intptr_t, void*); typedef int32_t (*iFppppipp_t)(void*, void*, void*, void*, int32_t, void*, void*); typedef int32_t (*iFppppIip_t)(void*, void*, void*, void*, int64_t, int32_t, void*); +typedef int32_t (*iFppppupu_t)(void*, void*, void*, void*, uint32_t, void*, uint32_t); typedef int32_t (*iFppppdpu_t)(void*, void*, void*, void*, double, void*, uint32_t); typedef int32_t (*iFpppppip_t)(void*, void*, void*, void*, void*, int32_t, void*); typedef int32_t (*iFpppppLp_t)(void*, void*, void*, void*, void*, uintptr_t, void*); +typedef int32_t (*iFppppppi_t)(void*, void*, void*, void*, void*, void*, int32_t); typedef int32_t (*iFppppppu_t)(void*, void*, void*, void*, void*, void*, uint32_t); typedef int32_t (*iFppppppp_t)(void*, void*, void*, void*, void*, void*, void*); typedef uint32_t (*uFEiipppp_t)(x64emu_t*, int32_t, int32_t, void*, void*, void*, void*); -typedef uint32_t (*uFEpiippp_t)(x64emu_t*, void*, int32_t, int32_t, void*, void*, void*); +typedef uint32_t (*uFEpiuppp_t)(x64emu_t*, void*, int32_t, uint32_t, void*, void*, void*); typedef uint32_t (*uFEpuuppp_t)(x64emu_t*, void*, uint32_t, uint32_t, void*, void*, void*); typedef uint32_t (*uFEpppppp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*); typedef uint32_t (*uFiiiuuuu_t)(int32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); @@ -2480,6 +2653,7 @@ typedef uint32_t (*uFpuuuppp_t)(void*, uint32_t, uint32_t, uint32_t, void*, void typedef uint32_t (*uFpuupppp_t)(void*, uint32_t, uint32_t, void*, void*, void*, void*); typedef uint32_t (*uFppiuppi_t)(void*, void*, int32_t, uint32_t, void*, void*, int32_t); typedef uint32_t (*uFppiuppp_t)(void*, void*, int32_t, uint32_t, void*, void*, void*); +typedef uint32_t (*uFppuiupu_t)(void*, void*, uint32_t, int32_t, uint32_t, void*, uint32_t); typedef uint32_t (*uFppuuuup_t)(void*, void*, uint32_t, uint32_t, uint32_t, uint32_t, void*); typedef uint32_t (*uFppppppp_t)(void*, void*, void*, void*, void*, void*, void*); typedef uint32_t (*uFbCuuuuu_t)(void*, uint8_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); @@ -2489,9 +2663,11 @@ typedef uintptr_t (*LFEppLppU_t)(x64emu_t*, void*, void*, uintptr_t, void*, void typedef uintptr_t (*LFEpppppu_t)(x64emu_t*, void*, void*, void*, void*, void*, uint32_t); typedef uintptr_t (*LFpLLuupp_t)(void*, uintptr_t, uintptr_t, uint32_t, uint32_t, void*, void*); typedef uintptr_t (*LFpLLppuu_t)(void*, uintptr_t, uintptr_t, void*, void*, uint32_t, uint32_t); +typedef uintptr_t (*LFpLppuuu_t)(void*, uintptr_t, void*, void*, uint32_t, uint32_t, uint32_t); typedef void* (*pFEpupppp_t)(x64emu_t*, void*, uint32_t, void*, void*, void*, void*); +typedef void* (*pFEpLiiiI_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, int64_t); typedef void* (*pFEpLiiil_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, intptr_t); -typedef void* (*pFEppuipp_t)(x64emu_t*, void*, void*, uint32_t, int32_t, void*, void*); +typedef void* (*pFEppLipp_t)(x64emu_t*, void*, void*, uintptr_t, int32_t, void*, void*); typedef void* (*pFEppppip_t)(x64emu_t*, void*, void*, void*, void*, int32_t, void*); typedef void* (*pFEpppppi_t)(x64emu_t*, void*, void*, void*, void*, void*, int32_t); typedef void* (*pFifffppp_t)(int32_t, float, float, float, void*, void*, void*); @@ -2503,7 +2679,10 @@ typedef void* (*pFdiiiIiI_t)(double, int32_t, int32_t, int32_t, int64_t, int32_t typedef void* (*pFpiiiiid_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t, double); typedef void* (*pFpiiippp_t)(void*, int32_t, int32_t, int32_t, void*, void*, void*); typedef void* (*pFpiiUdii_t)(void*, int32_t, int32_t, uint64_t, double, int32_t, int32_t); +typedef void* (*pFpiipipp_t)(void*, int32_t, int32_t, void*, int32_t, void*, void*); +typedef void* (*pFpiiplui_t)(void*, int32_t, int32_t, void*, intptr_t, uint32_t, int32_t); typedef void* (*pFpiipppp_t)(void*, int32_t, int32_t, void*, void*, void*, void*); +typedef void* (*pFpipiupp_t)(void*, int32_t, void*, int32_t, uint32_t, void*, void*); typedef void* (*pFpipippp_t)(void*, int32_t, void*, int32_t, void*, void*, void*); typedef void* (*pFpWppWpp_t)(void*, uint16_t, void*, void*, uint16_t, void*, void*); typedef void* (*pFpuLpipp_t)(void*, uint32_t, uintptr_t, void*, int32_t, void*, void*); @@ -2518,24 +2697,24 @@ typedef void* (*pFpLppiip_t)(void*, uintptr_t, void*, void*, int32_t, int32_t, v typedef void* (*pFpLppLLi_t)(void*, uintptr_t, void*, void*, uintptr_t, uintptr_t, int32_t); typedef void* (*pFppiiipp_t)(void*, void*, int32_t, int32_t, int32_t, void*, void*); typedef void* (*pFppiiCCC_t)(void*, void*, int32_t, int32_t, uint8_t, uint8_t, uint8_t); +typedef void* (*pFppiipup_t)(void*, void*, int32_t, int32_t, void*, uint32_t, void*); typedef void* (*pFppiippp_t)(void*, void*, int32_t, int32_t, void*, void*, void*); typedef void* (*pFppipipp_t)(void*, void*, int32_t, void*, int32_t, void*, void*); typedef void* (*pFppipLpp_t)(void*, void*, int32_t, void*, uintptr_t, void*, void*); +typedef void* (*pFppuipii_t)(void*, void*, uint32_t, int32_t, void*, int32_t, int32_t); typedef void* (*pFppuippp_t)(void*, void*, uint32_t, int32_t, void*, void*, void*); typedef void* (*pFppuuupp_t)(void*, void*, uint32_t, uint32_t, uint32_t, void*, void*); -typedef void* (*pFppuuppp_t)(void*, void*, uint32_t, uint32_t, void*, void*, void*); typedef void* (*pFppuLLip_t)(void*, void*, uint32_t, uintptr_t, uintptr_t, int32_t, void*); typedef void* (*pFppupuuu_t)(void*, void*, uint32_t, void*, uint32_t, uint32_t, uint32_t); typedef void* (*pFppliuip_t)(void*, void*, intptr_t, int32_t, uint32_t, int32_t, void*); typedef void* (*pFpplipup_t)(void*, void*, intptr_t, int32_t, void*, uint32_t, void*); -typedef void* (*pFppLipip_t)(void*, void*, uintptr_t, int32_t, void*, int32_t, void*); typedef void* (*pFppLLiLi_t)(void*, void*, uintptr_t, uintptr_t, int32_t, uintptr_t, int32_t); +typedef void* (*pFppLLppp_t)(void*, void*, uintptr_t, uintptr_t, void*, void*, void*); typedef void* (*pFpppccci_t)(void*, void*, void*, int8_t, int8_t, int8_t, int32_t); typedef void* (*pFpppiiii_t)(void*, void*, void*, int32_t, int32_t, int32_t, int32_t); typedef void* (*pFpppCCCi_t)(void*, void*, void*, uint8_t, uint8_t, uint8_t, int32_t); typedef void* (*pFpppuipp_t)(void*, void*, void*, uint32_t, int32_t, void*, void*); typedef void* (*pFpppuuui_t)(void*, void*, void*, uint32_t, uint32_t, uint32_t, int32_t); -typedef void* (*pFpppuupp_t)(void*, void*, void*, uint32_t, uint32_t, void*, void*); typedef void* (*pFpppupii_t)(void*, void*, void*, uint32_t, void*, int32_t, int32_t); typedef void* (*pFpppupup_t)(void*, void*, void*, uint32_t, void*, uint32_t, void*); typedef void* (*pFpppuppp_t)(void*, void*, void*, uint32_t, void*, void*, void*); @@ -2544,8 +2723,7 @@ typedef void* (*pFpppdddi_t)(void*, void*, void*, double, double, double, int32_ typedef void* (*pFpppllli_t)(void*, void*, void*, intptr_t, intptr_t, intptr_t, int32_t); typedef void* (*pFpppLLLi_t)(void*, void*, void*, uintptr_t, uintptr_t, uintptr_t, int32_t); typedef void* (*pFppppiii_t)(void*, void*, void*, void*, int32_t, int32_t, int32_t); -typedef void* (*pFppppuuu_t)(void*, void*, void*, void*, uint32_t, uint32_t, uint32_t); -typedef void* (*pFpppppuu_t)(void*, void*, void*, void*, void*, uint32_t, uint32_t); +typedef void* (*pFppppiip_t)(void*, void*, void*, void*, int32_t, int32_t, void*); typedef void* (*pFppppppu_t)(void*, void*, void*, void*, void*, void*, uint32_t); typedef void* (*pFppppppp_t)(void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFbCuwwWW_t)(void*, uint8_t, uint32_t, int16_t, int16_t, uint16_t, uint16_t); @@ -2559,10 +2737,10 @@ typedef int32_t (*iWpuipupp_t)(void*, uint32_t, int32_t, void*, uint32_t, void*, typedef int32_t (*iWpuuuppu_t)(void*, uint32_t, uint32_t, uint32_t, void*, void*, uint32_t); typedef int32_t (*iWpupuufu_t)(void*, uint32_t, void*, uint32_t, uint32_t, float, uint32_t); typedef int32_t (*iWpppuppp_t)(void*, void*, void*, uint32_t, void*, void*, void*); -typedef void (*vFEiippppV_t)(x64emu_t*, int32_t, int32_t, void*, void*, void*, void*, void*); -typedef void (*vFEiupippp_t)(x64emu_t*, int32_t, uint32_t, void*, int32_t, void*, void*, void*); -typedef void (*vFEipAippp_t)(x64emu_t*, int32_t, void*, void*, int32_t, void*, void*, void*); -typedef void (*vFEppipppp_t)(x64emu_t*, void*, void*, int32_t, void*, void*, void*, void*); +typedef void (*vFELippppV_t)(x64emu_t*, uintptr_t, int32_t, void*, void*, void*, void*, void*); +typedef void (*vFELupippp_t)(x64emu_t*, uintptr_t, uint32_t, void*, int32_t, void*, void*, void*); +typedef void (*vFELpAippp_t)(x64emu_t*, uintptr_t, void*, void*, int32_t, void*, void*, void*); +typedef void (*vFEppupppp_t)(x64emu_t*, void*, void*, uint32_t, void*, void*, void*, void*); typedef void (*vFEppLippp_t)(x64emu_t*, void*, void*, uintptr_t, int32_t, void*, void*, void*); typedef void (*vFEppLpLpp_t)(x64emu_t*, void*, void*, uintptr_t, void*, uintptr_t, void*, void*); typedef void (*vFEpppippp_t)(x64emu_t*, void*, void*, void*, int32_t, void*, void*, void*); @@ -2581,8 +2759,8 @@ typedef void (*vFuiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, uint3 typedef void (*vFuiiipiup_t)(uint32_t, int32_t, int32_t, int32_t, void*, int32_t, uint32_t, void*); typedef void (*vFuiuiiiii_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFuiuiiiip_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, void*); -typedef void (*vFuiuiiiuL_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, uint32_t, uintptr_t); -typedef void (*vFuiuiiCuL_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, uint8_t, uint32_t, uintptr_t); +typedef void (*vFuiuiiiuU_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, uint32_t, uint64_t); +typedef void (*vFuiuiiCuU_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, uint8_t, uint32_t, uint64_t); typedef void (*vFuiuiuuuu_t)(uint32_t, int32_t, uint32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef void (*vFuCCCCfff_t)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t, float, float, float); typedef void (*vFuuiiiiiC_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint8_t); @@ -2603,18 +2781,20 @@ typedef void (*vFpiiiiiii_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t, typedef void (*vFpiiiiiip_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); typedef void (*vFpiiiipii_t)(void*, int32_t, int32_t, int32_t, int32_t, void*, int32_t, int32_t); typedef void (*vFpiUuupup_t)(void*, int32_t, uint64_t, uint32_t, uint32_t, void*, uint32_t, void*); -typedef void (*vFpippiiuu_t)(void*, int32_t, void*, void*, int32_t, int32_t, uint32_t, uint32_t); -typedef void (*vFpippiipi_t)(void*, int32_t, void*, void*, int32_t, int32_t, void*, int32_t); +typedef void (*vFpiLLiipi_t)(void*, int32_t, uintptr_t, uintptr_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFpiLpiiuu_t)(void*, int32_t, uintptr_t, void*, int32_t, int32_t, uint32_t, uint32_t); typedef void (*vFpuiULipp_t)(void*, uint32_t, int32_t, uint64_t, uintptr_t, int32_t, void*, void*); typedef void (*vFpudddddd_t)(void*, uint32_t, double, double, double, double, double, double); typedef void (*vFpuppippp_t)(void*, uint32_t, void*, void*, int32_t, void*, void*, void*); typedef void (*vFpuppLLLL_t)(void*, uint32_t, void*, void*, uintptr_t, uintptr_t, uintptr_t, uintptr_t); typedef void (*vFpUiUiupi_t)(void*, uint64_t, int32_t, uint64_t, int32_t, uint32_t, void*, int32_t); typedef void (*vFpUuuUUUu_t)(void*, uint64_t, uint32_t, uint32_t, uint64_t, uint64_t, uint64_t, uint32_t); +typedef void (*vFpliicppp_t)(void*, intptr_t, int32_t, int32_t, int8_t, void*, void*, void*); +typedef void (*vFpLiiiLii_t)(void*, uintptr_t, int32_t, int32_t, int32_t, uintptr_t, int32_t, int32_t); +typedef void (*vFpLLLiipi_t)(void*, uintptr_t, uintptr_t, uintptr_t, int32_t, int32_t, void*, int32_t); typedef void (*vFpLpLpLpp_t)(void*, uintptr_t, void*, uintptr_t, void*, uintptr_t, void*, void*); typedef void (*vFpLppiipi_t)(void*, uintptr_t, void*, void*, int32_t, int32_t, void*, int32_t); typedef void (*vFppiiiiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); -typedef void (*vFppiiipii_t)(void*, void*, int32_t, int32_t, int32_t, void*, int32_t, int32_t); typedef void (*vFppipipiu_t)(void*, void*, int32_t, void*, int32_t, void*, int32_t, uint32_t); typedef void (*vFppipppui_t)(void*, void*, int32_t, void*, void*, void*, uint32_t, int32_t); typedef void (*vFppippppi_t)(void*, void*, int32_t, void*, void*, void*, void*, int32_t); @@ -2624,12 +2804,14 @@ typedef void (*vFppuppiii_t)(void*, void*, uint32_t, void*, void*, int32_t, int3 typedef void (*vFppuppiiu_t)(void*, void*, uint32_t, void*, void*, int32_t, int32_t, uint32_t); typedef void (*vFpplppppi_t)(void*, void*, intptr_t, void*, void*, void*, void*, int32_t); typedef void (*vFpplppppp_t)(void*, void*, intptr_t, void*, void*, void*, void*, void*); +typedef void (*vFppLLiipi_t)(void*, void*, uintptr_t, uintptr_t, int32_t, int32_t, void*, int32_t); typedef void (*vFppLpLpLp_t)(void*, void*, uintptr_t, void*, uintptr_t, void*, uintptr_t, void*); +typedef void (*vFpppiipui_t)(void*, void*, void*, int32_t, int32_t, void*, uint32_t, int32_t); typedef void (*vFpppipppu_t)(void*, void*, void*, int32_t, void*, void*, void*, uint32_t); typedef void (*vFpppuiiii_t)(void*, void*, void*, uint32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFpppLpppp_t)(void*, void*, void*, uintptr_t, void*, void*, void*, void*); -typedef void (*vFppppiipi_t)(void*, void*, void*, void*, int32_t, int32_t, void*, int32_t); typedef void (*vFpppppuuu_t)(void*, void*, void*, void*, void*, uint32_t, uint32_t, uint32_t); +typedef void (*vFppppppui_t)(void*, void*, void*, void*, void*, void*, uint32_t, int32_t); typedef void (*vFpppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFEuipuupp_t)(x64emu_t*, uint32_t, int32_t, void*, uint32_t, uint32_t, void*, void*); typedef int32_t (*iFEpippppp_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*, void*); @@ -2640,33 +2822,37 @@ typedef int32_t (*iFEppppipp_t)(x64emu_t*, void*, void*, void*, void*, int32_t, typedef int32_t (*iFEppppLpp_t)(x64emu_t*, void*, void*, void*, void*, uintptr_t, void*, void*); typedef int32_t (*iFEpppppuu_t)(x64emu_t*, void*, void*, void*, void*, void*, uint32_t, uint32_t); typedef int32_t (*iFEppppppp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, void*); -typedef int32_t (*iFiiiiiiip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); typedef int32_t (*iFiiupiupi_t)(int32_t, int32_t, uint32_t, void*, int32_t, uint32_t, void*, int32_t); typedef int32_t (*iFiuuCCuup_t)(int32_t, uint32_t, uint32_t, uint8_t, uint8_t, uint32_t, uint32_t, void*); typedef int32_t (*iFiuuuupip_t)(int32_t, uint32_t, uint32_t, uint32_t, uint32_t, void*, int32_t, void*); typedef int32_t (*iFipippppp_t)(int32_t, void*, int32_t, void*, void*, void*, void*, void*); +typedef int32_t (*iFuiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); typedef int32_t (*iFuuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef int32_t (*iFupipppip_t)(uint32_t, void*, int32_t, void*, void*, void*, int32_t, void*); typedef int32_t (*iFdiippppL_t)(double, int32_t, int32_t, void*, void*, void*, void*, uintptr_t); typedef int32_t (*iFpiiiuuup_t)(void*, int32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, void*); typedef int32_t (*iFpipiipip_t)(void*, int32_t, void*, int32_t, int32_t, void*, int32_t, void*); -typedef int32_t (*iFpippuuii_t)(void*, int32_t, void*, void*, uint32_t, uint32_t, int32_t, int32_t); +typedef int32_t (*iFpippuuui_t)(void*, int32_t, void*, void*, uint32_t, uint32_t, uint32_t, int32_t); typedef int32_t (*iFpippuupp_t)(void*, int32_t, void*, void*, uint32_t, uint32_t, void*, void*); typedef int32_t (*iFpCCWWpWu_t)(void*, uint8_t, uint8_t, uint16_t, uint16_t, void*, uint16_t, uint32_t); typedef int32_t (*iFpWCuWCuu_t)(void*, uint16_t, uint8_t, uint32_t, uint16_t, uint8_t, uint32_t, uint32_t); typedef int32_t (*iFpuiipppp_t)(void*, uint32_t, int32_t, int32_t, void*, void*, void*, void*); typedef int32_t (*iFpuippLpp_t)(void*, uint32_t, int32_t, void*, void*, uintptr_t, void*, void*); -typedef int32_t (*iFpuuiiiii_t)(void*, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef int32_t (*iFpuuiiuuu_t)(void*, uint32_t, uint32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t); typedef int32_t (*iFpuuipppp_t)(void*, uint32_t, uint32_t, int32_t, void*, void*, void*, void*); typedef int32_t (*iFpuuupupu_t)(void*, uint32_t, uint32_t, uint32_t, void*, uint32_t, void*, uint32_t); typedef int32_t (*iFpuupuupp_t)(void*, uint32_t, uint32_t, void*, uint32_t, uint32_t, void*, void*); typedef int32_t (*iFpuuppiip_t)(void*, uint32_t, uint32_t, void*, void*, int32_t, int32_t, void*); typedef int32_t (*iFpuuppppp_t)(void*, uint32_t, uint32_t, void*, void*, void*, void*, void*); +typedef int32_t (*iFpuLLLppL_t)(void*, uint32_t, uintptr_t, uintptr_t, uintptr_t, void*, void*, uintptr_t); +typedef int32_t (*iFpupupuup_t)(void*, uint32_t, void*, uint32_t, void*, uint32_t, uint32_t, void*); typedef int32_t (*iFpupppppp_t)(void*, uint32_t, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFpUuuLpUu_t)(void*, uint64_t, uint32_t, uint32_t, uintptr_t, void*, uint64_t, uint32_t); typedef int32_t (*iFpduuulul_t)(void*, double, uint32_t, uint32_t, uint32_t, intptr_t, uint32_t, intptr_t); typedef int32_t (*iFpLLiippp_t)(void*, uintptr_t, uintptr_t, int32_t, int32_t, void*, void*, void*); typedef int32_t (*iFpLLLiipi_t)(void*, uintptr_t, uintptr_t, uintptr_t, int32_t, int32_t, void*, int32_t); typedef int32_t (*iFpLLppppp_t)(void*, uintptr_t, uintptr_t, void*, void*, void*, void*, void*); +typedef int32_t (*iFpLpiLpLp_t)(void*, uintptr_t, void*, int32_t, uintptr_t, void*, uintptr_t, void*); typedef int32_t (*iFpLpipppp_t)(void*, uintptr_t, void*, int32_t, void*, void*, void*, void*); typedef int32_t (*iFpLpLpLpp_t)(void*, uintptr_t, void*, uintptr_t, void*, uintptr_t, void*, void*); typedef int32_t (*iFpLppLpip_t)(void*, uintptr_t, void*, void*, uintptr_t, void*, int32_t, void*); @@ -2674,26 +2860,30 @@ typedef int32_t (*iFpLpppupu_t)(void*, uintptr_t, void*, void*, void*, uint32_t, typedef int32_t (*iFpLpppppp_t)(void*, uintptr_t, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFppiiipip_t)(void*, void*, int32_t, int32_t, int32_t, void*, int32_t, void*); typedef int32_t (*iFppillppp_t)(void*, void*, int32_t, intptr_t, intptr_t, void*, void*, void*); -typedef int32_t (*iFppippppp_t)(void*, void*, int32_t, void*, void*, void*, void*, void*); +typedef int32_t (*iFppipiipi_t)(void*, void*, int32_t, void*, int32_t, int32_t, void*, int32_t); typedef int32_t (*iFppIIIppp_t)(void*, void*, int64_t, int64_t, int64_t, void*, void*, void*); typedef int32_t (*iFppuiiuuu_t)(void*, void*, uint32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t); typedef int32_t (*iFppuuuuuu_t)(void*, void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef int32_t (*iFppuppppp_t)(void*, void*, uint32_t, void*, void*, void*, void*, void*); +typedef int32_t (*iFppLpLpLi_t)(void*, void*, uintptr_t, void*, uintptr_t, void*, uintptr_t, int32_t); typedef int32_t (*iFpppiiipi_t)(void*, void*, void*, int32_t, int32_t, int32_t, void*, int32_t); typedef int32_t (*iFpppiiipp_t)(void*, void*, void*, int32_t, int32_t, int32_t, void*, void*); typedef int32_t (*iFpppipipi_t)(void*, void*, void*, int32_t, void*, int32_t, void*, int32_t); typedef int32_t (*iFppppiiup_t)(void*, void*, void*, void*, int32_t, int32_t, uint32_t, void*); +typedef int32_t (*iFppppiipp_t)(void*, void*, void*, void*, int32_t, int32_t, void*, void*); typedef int32_t (*iFppppippp_t)(void*, void*, void*, void*, int32_t, void*, void*, void*); +typedef int32_t (*iFppppuplu_t)(void*, void*, void*, void*, uint32_t, void*, intptr_t, uint32_t); typedef int32_t (*iFpppppupp_t)(void*, void*, void*, void*, void*, uint32_t, void*, void*); typedef int32_t (*iFppppppii_t)(void*, void*, void*, void*, void*, void*, int32_t, int32_t); +typedef int32_t (*iFppppppuu_t)(void*, void*, void*, void*, void*, void*, uint32_t, uint32_t); typedef int32_t (*iFpppppppi_t)(void*, void*, void*, void*, void*, void*, void*, int32_t); typedef int32_t (*iFpppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFbWWipppp_t)(void*, uint16_t, uint16_t, int32_t, void*, void*, void*, void*); typedef int32_t (*iFbupppWWu_t)(void*, uint32_t, void*, void*, void*, uint16_t, uint16_t, uint32_t); typedef uint8_t (*CFuiifpppp_t)(uint32_t, int32_t, int32_t, float, void*, void*, void*, void*); -typedef uint32_t (*uFEipipppp_t)(x64emu_t*, int32_t, void*, int32_t, void*, void*, void*, void*); -typedef uint32_t (*uFEpiupppp_t)(x64emu_t*, void*, int32_t, uint32_t, void*, void*, void*, void*); -typedef uint32_t (*uFEppipppp_t)(x64emu_t*, void*, void*, int32_t, void*, void*, void*, void*); +typedef uint32_t (*uFEipupppp_t)(x64emu_t*, int32_t, void*, uint32_t, void*, void*, void*, void*); +typedef uint32_t (*uFEpuuuppp_t)(x64emu_t*, void*, uint32_t, uint32_t, uint32_t, void*, void*, void*); +typedef uint32_t (*uFEppupppp_t)(x64emu_t*, void*, void*, uint32_t, void*, void*, void*, void*); typedef uint32_t (*uFEpppuppp_t)(x64emu_t*, void*, void*, void*, uint32_t, void*, void*, void*); typedef uint32_t (*uFEppppppp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, void*); typedef uint32_t (*uFuipppppp_t)(uint32_t, int32_t, void*, void*, void*, void*, void*, void*); @@ -2708,12 +2898,12 @@ typedef uint32_t (*uFpppppupp_t)(void*, void*, void*, void*, void*, uint32_t, vo typedef uint32_t (*uFbCuuuCup_t)(void*, uint8_t, uint32_t, uint32_t, uint32_t, uint8_t, uint32_t, void*); typedef uint32_t (*uFbWWWWWWp_t)(void*, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, void*); typedef uintptr_t (*LFELpupupu_t)(x64emu_t*, uintptr_t, void*, uint32_t, void*, uint32_t, void*, uint32_t); -typedef uintptr_t (*LFEpiupppp_t)(x64emu_t*, void*, int32_t, uint32_t, void*, void*, void*, void*); +typedef uintptr_t (*LFEpuuuppp_t)(x64emu_t*, void*, uint32_t, uint32_t, uint32_t, void*, void*, void*); typedef uintptr_t (*LFpLpuuLLu_t)(void*, uintptr_t, void*, uint32_t, uint32_t, uintptr_t, uintptr_t, uint32_t); typedef void* (*pFEiplllpp_t)(x64emu_t*, int32_t, void*, intptr_t, intptr_t, intptr_t, void*, void*); typedef void* (*pFEipLLLpp_t)(x64emu_t*, int32_t, void*, uintptr_t, uintptr_t, uintptr_t, void*, void*); typedef void* (*pFEpiuCppp_t)(x64emu_t*, void*, int32_t, uint32_t, uint8_t, void*, void*, void*); -typedef void* (*pFEppLiiip_t)(x64emu_t*, void*, void*, uintptr_t, int32_t, int32_t, int32_t, void*); +typedef void* (*pFEppLiiup_t)(x64emu_t*, void*, void*, uintptr_t, int32_t, int32_t, uint32_t, void*); typedef void* (*pFEpppuipV_t)(x64emu_t*, void*, void*, void*, uint32_t, int32_t, void*, void*); typedef void* (*pFEpppppiV_t)(x64emu_t*, void*, void*, void*, void*, void*, int32_t, void*); typedef void* (*pFEppppppi_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, int32_t); @@ -2726,7 +2916,7 @@ typedef void* (*pFuupupipp_t)(uint32_t, uint32_t, void*, uint32_t, void*, int32_ typedef void* (*pFpiiiiiuu_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); typedef void* (*pFpiiuuupp_t)(void*, int32_t, int32_t, uint32_t, uint32_t, uint32_t, void*, void*); typedef void* (*pFpiUdiiUi_t)(void*, int32_t, uint64_t, double, int32_t, int32_t, uint64_t, int32_t); -typedef void* (*pFpipiiiip_t)(void*, int32_t, void*, int32_t, int32_t, int32_t, int32_t, void*); +typedef void* (*pFpipiuiip_t)(void*, int32_t, void*, int32_t, uint32_t, int32_t, int32_t, void*); typedef void* (*pFpuuuuupp_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, void*, void*); typedef void* (*pFpuuuupup_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t, void*, uint32_t, void*); typedef void* (*pFpupLLLpp_t)(void*, uint32_t, void*, uintptr_t, uintptr_t, uintptr_t, void*, void*); @@ -2755,8 +2945,8 @@ typedef void (*vFEpiiiuipp_t)(x64emu_t*, void*, int32_t, int32_t, int32_t, uint3 typedef void (*vFEpippippV_t)(x64emu_t*, void*, int32_t, void*, void*, int32_t, void*, void*, void*); typedef void (*vFEpippippA_t)(x64emu_t*, void*, int32_t, void*, void*, int32_t, void*, void*, void*); typedef void (*vFEpuuuippp_t)(x64emu_t*, void*, uint32_t, uint32_t, uint32_t, int32_t, void*, void*, void*); -typedef void (*vFEppiipppp_t)(x64emu_t*, void*, void*, int32_t, int32_t, void*, void*, void*, void*); -typedef void (*vFEpppiippp_t)(x64emu_t*, void*, void*, void*, int32_t, int32_t, void*, void*, void*); +typedef void (*vFEppuipppp_t)(x64emu_t*, void*, void*, uint32_t, int32_t, void*, void*, void*, void*); +typedef void (*vFEpppuippp_t)(x64emu_t*, void*, void*, void*, uint32_t, int32_t, void*, void*, void*); typedef void (*vFEpppLLpLp_t)(x64emu_t*, void*, void*, void*, uintptr_t, uintptr_t, void*, uintptr_t, void*); typedef void (*vFEppppippp_t)(x64emu_t*, void*, void*, void*, void*, int32_t, void*, void*, void*); typedef void (*vFiiiiiiiii_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); @@ -2770,7 +2960,7 @@ typedef void (*vFuiiiiiiiC_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int3 typedef void (*vFuiiiiiuip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, void*); typedef void (*vFuiiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); typedef void (*vFuiuiiiiip_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); -typedef void (*vFuiuiiiCuL_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, uint8_t, uint32_t, uintptr_t); +typedef void (*vFuiuiiiCuU_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, uint8_t, uint32_t, uint64_t); typedef void (*vFuiupuffup_t)(uint32_t, int32_t, uint32_t, void*, uint32_t, float, float, uint32_t, void*); typedef void (*vFuuiiiiiii_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFuuiiiiiiC_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint8_t); @@ -2784,19 +2974,18 @@ typedef void (*vFuffffffff_t)(uint32_t, float, float, float, float, float, float typedef void (*vFffCCCCfff_t)(float, float, uint8_t, uint8_t, uint8_t, uint8_t, float, float, float); typedef void (*vFddddddddd_t)(double, double, double, double, double, double, double, double, double); typedef void (*vFpiuippppi_t)(void*, int32_t, uint32_t, int32_t, void*, void*, void*, void*, int32_t); +typedef void (*vFpiLLpiipi_t)(void*, int32_t, uintptr_t, uintptr_t, void*, int32_t, int32_t, void*, int32_t); +typedef void (*vFpiLpLiipi_t)(void*, int32_t, uintptr_t, void*, uintptr_t, int32_t, int32_t, void*, int32_t); typedef void (*vFpipiuiipp_t)(void*, int32_t, void*, int32_t, uint32_t, int32_t, int32_t, void*, void*); -typedef void (*vFpipppiipi_t)(void*, int32_t, void*, void*, void*, int32_t, int32_t, void*, int32_t); typedef void (*vFpuuuuuuuu_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFpLiiipiii_t)(void*, uintptr_t, int32_t, int32_t, int32_t, void*, int32_t, int32_t, int32_t); typedef void (*vFpLpLpLLpp_t)(void*, uintptr_t, void*, uintptr_t, void*, uintptr_t, uintptr_t, void*, void*); typedef void (*vFpLpppippp_t)(void*, uintptr_t, void*, void*, void*, int32_t, void*, void*, void*); typedef void (*vFppiiiiiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFppiiiiipi_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, void*, int32_t); typedef void (*vFppiiiiupi_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, void*, int32_t); -typedef void (*vFppiiipiii_t)(void*, void*, int32_t, int32_t, int32_t, void*, int32_t, int32_t, int32_t); typedef void (*vFppiupiiii_t)(void*, void*, int32_t, uint32_t, void*, int32_t, int32_t, int32_t, int32_t); -typedef void (*vFppippDpDC_t)(void*, void*, int32_t, void*, void*, long double, void*, long double, uint8_t); typedef void (*vFppipppiii_t)(void*, void*, int32_t, void*, void*, void*, int32_t, int32_t, int32_t); -typedef void (*vFppipppiip_t)(void*, void*, int32_t, void*, void*, void*, int32_t, int32_t, void*); typedef void (*vFppuippiip_t)(void*, void*, uint32_t, int32_t, void*, void*, int32_t, int32_t, void*); typedef void (*vFppuuiiiii_t)(void*, void*, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFppuuiiiiu_t)(void*, void*, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t); @@ -2810,24 +2999,27 @@ typedef void (*vFpplpppppi_t)(void*, void*, intptr_t, void*, void*, void*, void* typedef void (*vFpppiiiiii_t)(void*, void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFpppffffff_t)(void*, void*, void*, float, float, float, float, float, float); typedef void (*vFppppipiip_t)(void*, void*, void*, void*, int32_t, void*, int32_t, int32_t, void*); -typedef void (*vFpppppippp_t)(void*, void*, void*, void*, void*, int32_t, void*, void*, void*); typedef int32_t (*iFEpiiiiipi_t)(x64emu_t*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, void*, int32_t); typedef int32_t (*iFEppuppppp_t)(x64emu_t*, void*, void*, uint32_t, void*, void*, void*, void*, void*); -typedef int32_t (*iFEpppipppp_t)(x64emu_t*, void*, void*, void*, int32_t, void*, void*, void*, void*); +typedef int32_t (*iFEpppupppp_t)(x64emu_t*, void*, void*, void*, uint32_t, void*, void*, void*, void*); typedef int32_t (*iFEppplPPPP_t)(x64emu_t*, void*, void*, void*, intptr_t, void*, void*, void*, void*); typedef int32_t (*iFEpppppupp_t)(x64emu_t*, void*, void*, void*, void*, void*, uint32_t, void*, void*); typedef int32_t (*iFEppppppuu_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, uint32_t, uint32_t); typedef int32_t (*iFEppPPPPPP_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, void*, void*); -typedef int32_t (*iFiiiiiiiip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); -typedef int32_t (*iFiiiipiiip_t)(int32_t, int32_t, int32_t, int32_t, void*, int32_t, int32_t, int32_t, void*); typedef int32_t (*iFipiipippi_t)(int32_t, void*, int32_t, int32_t, void*, int32_t, void*, void*, int32_t); +typedef int32_t (*iFuiiuuiiip_t)(uint32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, void*); +typedef int32_t (*iFuiiupiiup_t)(uint32_t, int32_t, int32_t, uint32_t, void*, int32_t, int32_t, uint32_t, void*); +typedef int32_t (*iFuuppuuppu_t)(uint32_t, uint32_t, void*, void*, uint32_t, uint32_t, void*, void*, uint32_t); typedef int32_t (*iFdddpppppp_t)(double, double, double, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFpiLiiipip_t)(void*, int32_t, uintptr_t, int32_t, int32_t, int32_t, void*, int32_t, void*); +typedef int32_t (*iFpiLLLiiip_t)(void*, int32_t, uintptr_t, uintptr_t, uintptr_t, int32_t, int32_t, int32_t, void*); typedef int32_t (*iFpipippppi_t)(void*, int32_t, void*, int32_t, void*, void*, void*, void*, int32_t); -typedef int32_t (*iFpipLpiiip_t)(void*, int32_t, void*, uintptr_t, void*, int32_t, int32_t, int32_t, void*); typedef int32_t (*iFpuuuuuuuu_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef int32_t (*iFpuuuuuupp_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, void*, void*); typedef int32_t (*iFpuuuuduup_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t, double, uint32_t, uint32_t, void*); typedef int32_t (*iFpuuuLiiip_t)(void*, uint32_t, uint32_t, uint32_t, uintptr_t, int32_t, int32_t, int32_t, void*); typedef int32_t (*iFpuuuLpppp_t)(void*, uint32_t, uint32_t, uint32_t, uintptr_t, void*, void*, void*, void*); +typedef int32_t (*iFpuuppupuu_t)(void*, uint32_t, uint32_t, void*, void*, uint32_t, void*, uint32_t, uint32_t); typedef int32_t (*iFpduuuLuLp_t)(void*, double, uint32_t, uint32_t, uint32_t, uintptr_t, uint32_t, uintptr_t, void*); typedef int32_t (*iFpLiuiiLLL_t)(void*, uintptr_t, int32_t, uint32_t, int32_t, int32_t, uintptr_t, uintptr_t, uintptr_t); typedef int32_t (*iFpLLiiuuii_t)(void*, uintptr_t, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t); @@ -2836,14 +3028,14 @@ typedef int32_t (*iFpLpLpLLpp_t)(void*, uintptr_t, void*, uintptr_t, void*, uint typedef int32_t (*iFpLpppupup_t)(void*, uintptr_t, void*, void*, void*, uint32_t, void*, uint32_t, void*); typedef int32_t (*iFpLppppppp_t)(void*, uintptr_t, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFppiiiiiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef int32_t (*iFppipiiipi_t)(void*, void*, int32_t, void*, int32_t, int32_t, int32_t, void*, int32_t); typedef int32_t (*iFppippippp_t)(void*, void*, int32_t, void*, void*, int32_t, void*, void*, void*); typedef int32_t (*iFppuLLpupp_t)(void*, void*, uint32_t, uintptr_t, uintptr_t, void*, uint32_t, void*, void*); typedef int32_t (*iFppuppuuuu_t)(void*, void*, uint32_t, void*, void*, uint32_t, uint32_t, uint32_t, uint32_t); typedef int32_t (*iFppupppupp_t)(void*, void*, uint32_t, void*, void*, void*, uint32_t, void*, void*); +typedef int32_t (*iFppLiipiiL_t)(void*, void*, uintptr_t, int32_t, int32_t, void*, int32_t, int32_t, uintptr_t); typedef int32_t (*iFppLpiuppp_t)(void*, void*, uintptr_t, void*, int32_t, uint32_t, void*, void*, void*); typedef int32_t (*iFpppiiipip_t)(void*, void*, void*, int32_t, int32_t, int32_t, void*, int32_t, void*); -typedef int32_t (*iFpppiiuuii_t)(void*, void*, void*, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t); -typedef int32_t (*iFpppiipiiu_t)(void*, void*, void*, int32_t, int32_t, void*, int32_t, int32_t, uint32_t); typedef int32_t (*iFpppippipi_t)(void*, void*, void*, int32_t, void*, void*, int32_t, void*, int32_t); typedef int32_t (*iFpppLLLupp_t)(void*, void*, void*, uintptr_t, uintptr_t, uintptr_t, uint32_t, void*, void*); typedef int32_t (*iFpppLppupp_t)(void*, void*, void*, uintptr_t, void*, void*, uint32_t, void*, void*); @@ -2852,7 +3044,7 @@ typedef int32_t (*iFpppppLupp_t)(void*, void*, void*, void*, void*, uintptr_t, u typedef int32_t (*iFppppppupp_t)(void*, void*, void*, void*, void*, void*, uint32_t, void*, void*); typedef int32_t (*iFppppppppu_t)(void*, void*, void*, void*, void*, void*, void*, void*, uint32_t); typedef int32_t (*iFppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*); -typedef uint32_t (*uFEipippppp_t)(x64emu_t*, int32_t, void*, int32_t, void*, void*, void*, void*, void*); +typedef uint32_t (*uFEipuppppp_t)(x64emu_t*, int32_t, void*, uint32_t, void*, void*, void*, void*, void*); typedef uint32_t (*uFEpppufppp_t)(x64emu_t*, void*, void*, void*, uint32_t, float, void*, void*, void*); typedef uint32_t (*uFuulpiuiuf_t)(uint32_t, uint32_t, intptr_t, void*, int32_t, uint32_t, int32_t, uint32_t, float); typedef uint32_t (*uFpuupuppuu_t)(void*, uint32_t, uint32_t, void*, uint32_t, void*, void*, uint32_t, uint32_t); @@ -2861,8 +3053,9 @@ typedef uint32_t (*uFppppppppp_t)(void*, void*, void*, void*, void*, void*, void typedef intptr_t (*lFpppipiipp_t)(void*, void*, void*, int32_t, void*, int32_t, int32_t, void*, void*); typedef intptr_t (*lFpppippppp_t)(void*, void*, void*, int32_t, void*, void*, void*, void*, void*); typedef uintptr_t (*LFEppppppii_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, int32_t, int32_t); +typedef uintptr_t (*LFpLiiiiiip_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); typedef uintptr_t (*LFpLiiuuuLL_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, uintptr_t, uintptr_t); -typedef void* (*pFEppiiuuLi_t)(x64emu_t*, void*, void*, int32_t, int32_t, uint32_t, uint32_t, uintptr_t, int32_t); +typedef void* (*pFEpLiiuuLi_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uintptr_t, int32_t); typedef void* (*pFEppuippuu_t)(x64emu_t*, void*, void*, uint32_t, int32_t, void*, void*, uint32_t, uint32_t); typedef void* (*pFEpppppiiV_t)(x64emu_t*, void*, void*, void*, void*, void*, int32_t, int32_t, void*); typedef void* (*pFEpppppppi_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, void*, int32_t); @@ -2871,8 +3064,7 @@ typedef void* (*pFuupuuuuuu_t)(uint32_t, uint32_t, void*, uint32_t, uint32_t, ui typedef void* (*pFpiiiiuuuu_t)(void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef void* (*pFpLpLLipui_t)(void*, uintptr_t, void*, uintptr_t, uintptr_t, int32_t, void*, uint32_t, int32_t); typedef void* (*pFpLppLLiLi_t)(void*, uintptr_t, void*, void*, uintptr_t, uintptr_t, int32_t, uintptr_t, int32_t); -typedef void* (*pFppiiiiiip_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); -typedef void* (*pFppipppppp_t)(void*, void*, int32_t, void*, void*, void*, void*, void*, void*); +typedef void* (*pFppupppppp_t)(void*, void*, uint32_t, void*, void*, void*, void*, void*, void*); typedef void* (*pFpppiiiiii_t)(void*, void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void* (*pFpppuipppp_t)(void*, void*, void*, uint32_t, int32_t, void*, void*, void*, void*); typedef void* (*pFpppppiipp_t)(void*, void*, void*, void*, void*, int32_t, int32_t, void*, void*); @@ -2886,9 +3078,9 @@ typedef int32_t (*iWEpuuuiipp_t)(x64emu_t*, void*, uint32_t, uint32_t, uint32_t, typedef int32_t (*iWpiuuupipu_t)(void*, int32_t, uint32_t, uint32_t, uint32_t, void*, int32_t, void*, uint32_t); typedef int32_t (*iWpuiuuipip_t)(void*, uint32_t, int32_t, uint32_t, uint32_t, int32_t, void*, int32_t, void*); typedef int32_t (*iWppppupiii_t)(void*, void*, void*, void*, uint32_t, void*, int32_t, int32_t, int32_t); -typedef void (*vFEiippppppp_t)(x64emu_t*, int32_t, int32_t, void*, void*, void*, void*, void*, void*, void*); -typedef void (*vFEpippppppp_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*, void*, void*, void*); -typedef void (*vFEpppiipppp_t)(x64emu_t*, void*, void*, void*, int32_t, int32_t, void*, void*, void*, void*); +typedef void (*vFEiuppppppp_t)(x64emu_t*, int32_t, uint32_t, void*, void*, void*, void*, void*, void*, void*); +typedef void (*vFEpuppppppp_t)(x64emu_t*, void*, uint32_t, void*, void*, void*, void*, void*, void*, void*); +typedef void (*vFEpppuipppp_t)(x64emu_t*, void*, void*, void*, uint32_t, int32_t, void*, void*, void*, void*); typedef void (*vFEpppLuLpLp_t)(x64emu_t*, void*, void*, void*, uintptr_t, uint32_t, uintptr_t, void*, uintptr_t, void*); typedef void (*vFiiiiiiiiii_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFiiiiiiiiiu_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t); @@ -2911,10 +3103,8 @@ typedef void (*vFuddiiddiip_t)(uint32_t, double, double, int32_t, int32_t, doubl typedef void (*vFffffffffff_t)(float, float, float, float, float, float, float, float, float, float); typedef void (*vFpiuippppip_t)(void*, int32_t, uint32_t, int32_t, void*, void*, void*, void*, int32_t, void*); typedef void (*vFpuupuuuuuu_t)(void*, uint32_t, uint32_t, void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); -typedef void (*vFppiiiiiiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); -typedef void (*vFppiiiiipip_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, void*, int32_t, void*); typedef void (*vFppiiiiupip_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, void*, int32_t, void*); -typedef void (*vFppiippppii_t)(void*, void*, int32_t, int32_t, void*, void*, void*, void*, int32_t, int32_t); +typedef void (*vFppipipippi_t)(void*, void*, int32_t, void*, int32_t, void*, int32_t, void*, void*, int32_t); typedef void (*vFppuipppiip_t)(void*, void*, uint32_t, int32_t, void*, void*, void*, int32_t, int32_t, void*); typedef void (*vFppuuuiiiii_t)(void*, void*, uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFppuuuuuuuu_t)(void*, void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); @@ -2928,15 +3118,17 @@ typedef void (*vFpppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, typedef int32_t (*iFEpiiiiippp_t)(x64emu_t*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, void*, void*, void*); typedef int32_t (*iFEpupppLppL_t)(x64emu_t*, void*, uint32_t, void*, void*, void*, uintptr_t, void*, void*, uintptr_t); typedef int32_t (*iFEppppppipp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, int32_t, void*, void*); -typedef int32_t (*iFiiiiiiiiip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); -typedef int32_t (*iFpiipiiipip_t)(void*, int32_t, int32_t, void*, int32_t, int32_t, int32_t, void*, int32_t, void*); -typedef int32_t (*iFpippddiidd_t)(void*, int32_t, void*, void*, double, double, int32_t, int32_t, double, double); +typedef int32_t (*iFuiiiuuiiip_t)(uint32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, void*); +typedef int32_t (*iFpiiLiiipip_t)(void*, int32_t, int32_t, uintptr_t, int32_t, int32_t, int32_t, void*, int32_t, void*); +typedef int32_t (*iFpiLLiiipip_t)(void*, int32_t, uintptr_t, uintptr_t, int32_t, int32_t, int32_t, void*, int32_t, void*); +typedef int32_t (*iFpiLLdduudd_t)(void*, int32_t, uintptr_t, uintptr_t, double, double, uint32_t, uint32_t, double, double); typedef int32_t (*iFpCuWCCCCup_t)(void*, uint8_t, uint32_t, uint16_t, uint8_t, uint8_t, uint8_t, uint8_t, uint32_t, void*); typedef int32_t (*iFpuuLiuiiLL_t)(void*, uint32_t, uint32_t, uintptr_t, int32_t, uint32_t, int32_t, int32_t, uintptr_t, uintptr_t); typedef int32_t (*iFpLLpiiuuii_t)(void*, uintptr_t, uintptr_t, void*, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t); typedef int32_t (*iFpLpLUUUUpL_t)(void*, uintptr_t, void*, uintptr_t, uint64_t, uint64_t, uint64_t, uint64_t, void*, uintptr_t); -typedef int32_t (*iFppuuiiiiii_t)(void*, void*, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); -typedef int32_t (*iFppuuiiuupi_t)(void*, void*, uint32_t, uint32_t, int32_t, int32_t, uint32_t, uint32_t, void*, int32_t); +typedef int32_t (*iFppuuiiuuuu_t)(void*, void*, uint32_t, uint32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef int32_t (*iFppLLiiLWpi_t)(void*, void*, uintptr_t, uintptr_t, int32_t, int32_t, uintptr_t, uint16_t, void*, int32_t); +typedef int32_t (*iFppLpLLpLpp_t)(void*, void*, uintptr_t, void*, uintptr_t, uintptr_t, void*, uintptr_t, void*, void*); typedef int32_t (*iFppLpLpLLpp_t)(void*, void*, uintptr_t, void*, uintptr_t, void*, uintptr_t, uintptr_t, void*, void*); typedef int32_t (*iFpppiiipipi_t)(void*, void*, void*, int32_t, int32_t, int32_t, void*, int32_t, void*, int32_t); typedef int32_t (*iFpppLLipppp_t)(void*, void*, void*, uintptr_t, uintptr_t, int32_t, void*, void*, void*, void*); @@ -2946,7 +3138,7 @@ typedef int32_t (*iFpppppppppu_t)(void*, void*, void*, void*, void*, void*, void typedef uint32_t (*uFpddpippppp_t)(void*, double, double, void*, int32_t, void*, void*, void*, void*, void*); typedef uint32_t (*uFpppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef intptr_t (*lFpLppdddddd_t)(void*, uintptr_t, void*, void*, double, double, double, double, double, double); -typedef void* (*pFEiippppppp_t)(x64emu_t*, int32_t, int32_t, void*, void*, void*, void*, void*, void*, void*); +typedef void* (*pFEiuppppppp_t)(x64emu_t*, int32_t, uint32_t, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFEpiiiiiipp_t)(x64emu_t*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*, void*); typedef void* (*pFEpippppppp_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFpupLLLLLpp_t)(void*, uint32_t, void*, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, void*, void*); @@ -2967,7 +3159,6 @@ typedef void (*vFEpuuuupupup_t)(x64emu_t*, void*, uint32_t, uint32_t, uint32_t, typedef void (*vFEppLpLpLLpp_t)(x64emu_t*, void*, void*, uintptr_t, void*, uintptr_t, void*, uintptr_t, uintptr_t, void*, void*); typedef void (*vFiiiiillliip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, intptr_t, intptr_t, intptr_t, int32_t, int32_t, void*); typedef void (*vFiiiiilllilp_t)(int32_t, int32_t, int32_t, int32_t, int32_t, intptr_t, intptr_t, intptr_t, int32_t, intptr_t, void*); -typedef void (*vFuiiiiiiiiip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); typedef void (*vFuiiiiiiiuip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, void*); typedef void (*vFuiiiiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); typedef void (*vFuiiiillliip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, intptr_t, intptr_t, intptr_t, int32_t, int32_t, void*); @@ -2977,11 +3168,13 @@ typedef void (*vFuuupupppppp_t)(uint32_t, uint32_t, uint32_t, void*, uint32_t, v typedef void (*vFuuffiiffiip_t)(uint32_t, uint32_t, float, float, int32_t, int32_t, float, float, int32_t, int32_t, void*); typedef void (*vFuufffffffff_t)(uint32_t, uint32_t, float, float, float, float, float, float, float, float, float); typedef void (*vFuuddiiddiip_t)(uint32_t, uint32_t, double, double, int32_t, int32_t, double, double, int32_t, int32_t, void*); +typedef void (*vFuUuuuuuuuuu_t)(uint32_t, uint64_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef void (*vFuffffffffff_t)(uint32_t, float, float, float, float, float, float, float, float, float, float); -typedef void (*vFuLuuuuuuuuu_t)(uint32_t, uintptr_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); -typedef void (*vFLufffffffff_t)(uintptr_t, uint32_t, float, float, float, float, float, float, float, float, float); -typedef void (*vFpipipiipiii_t)(void*, int32_t, void*, int32_t, void*, int32_t, int32_t, void*, int32_t, int32_t, int32_t); -typedef void (*vFpipppiiiipi_t)(void*, int32_t, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFUufffffffff_t)(uint64_t, uint32_t, float, float, float, float, float, float, float, float, float); +typedef void (*vFpiiiiiiiiuu_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); +typedef void (*vFpiLLpiiiipi_t)(void*, int32_t, uintptr_t, uintptr_t, void*, int32_t, int32_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFpiLpLiiiipi_t)(void*, int32_t, uintptr_t, void*, uintptr_t, int32_t, int32_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFpipipiipiiu_t)(void*, int32_t, void*, int32_t, void*, int32_t, int32_t, void*, int32_t, int32_t, uint32_t); typedef void (*vFpupuuupupup_t)(void*, uint32_t, void*, uint32_t, uint32_t, uint32_t, void*, uint32_t, void*, uint32_t, void*); typedef void (*vFppiiiiiiiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFppiiiiipiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, void*, int32_t, int32_t, int32_t); @@ -2995,24 +3188,27 @@ typedef void (*vFppupipiuuuu_t)(void*, void*, uint32_t, void*, int32_t, void*, i typedef void (*vFppupppuiiii_t)(void*, void*, uint32_t, void*, void*, void*, uint32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFEiipppppppp_t)(x64emu_t*, int32_t, int32_t, void*, void*, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFEpLppiiiiuu_t)(x64emu_t*, void*, uintptr_t, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); typedef int32_t (*iFEppLpLpLLpp_t)(x64emu_t*, void*, void*, uintptr_t, void*, uintptr_t, void*, uintptr_t, uintptr_t, void*, void*); -typedef int32_t (*iFEpppipppppp_t)(x64emu_t*, void*, void*, void*, int32_t, void*, void*, void*, void*, void*, void*); -typedef int32_t (*iFEppppiiiiuu_t)(x64emu_t*, void*, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); +typedef int32_t (*iFEpppupppppp_t)(x64emu_t*, void*, void*, void*, uint32_t, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFEpppppppppp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); -typedef int32_t (*iFiiiiiiiiiip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); -typedef int32_t (*iFpiippiiipip_t)(void*, int32_t, int32_t, void*, void*, int32_t, int32_t, int32_t, void*, int32_t, void*); +typedef int32_t (*iFuiiiiuuiiip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, void*); +typedef int32_t (*iFuppipipippi_t)(uint32_t, void*, void*, int32_t, void*, int32_t, void*, int32_t, void*, void*, int32_t); +typedef int32_t (*iFpiiLLiiipip_t)(void*, int32_t, int32_t, uintptr_t, uintptr_t, int32_t, int32_t, int32_t, void*, int32_t, void*); typedef int32_t (*iFpippupppppp_t)(void*, int32_t, void*, void*, uint32_t, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFpuppppppppp_t)(void*, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFpLipiiiippp_t)(void*, uintptr_t, int32_t, void*, int32_t, int32_t, int32_t, int32_t, void*, void*, void*); typedef int32_t (*iFpLLpiiuuiiL_t)(void*, uintptr_t, uintptr_t, void*, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, uintptr_t); typedef int32_t (*iFppippipppip_t)(void*, void*, int32_t, void*, void*, int32_t, void*, void*, void*, int32_t, void*); +typedef int32_t (*iFppuupLiupii_t)(void*, void*, uint32_t, uint32_t, void*, uintptr_t, int32_t, uint32_t, void*, int32_t, int32_t); typedef int32_t (*iFppuppLLpupp_t)(void*, void*, uint32_t, void*, void*, uintptr_t, uintptr_t, void*, uint32_t, void*, void*); typedef int32_t (*iFpppiiuuiiuu_t)(void*, void*, void*, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, uint32_t, uint32_t); +typedef int32_t (*iFpppippppppp_t)(void*, void*, void*, int32_t, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFpppppiiuupp_t)(void*, void*, void*, void*, void*, int32_t, int32_t, uint32_t, uint32_t, void*, void*); -typedef uint32_t (*uFEpLiupppLuV_t)(x64emu_t*, void*, uintptr_t, int32_t, uint32_t, void*, void*, void*, uintptr_t, uint32_t, void*); -typedef uint32_t (*uFEpLippppLup_t)(x64emu_t*, void*, uintptr_t, int32_t, void*, void*, void*, void*, uintptr_t, uint32_t, void*); -typedef uint32_t (*uFEpLippppLuA_t)(x64emu_t*, void*, uintptr_t, int32_t, void*, void*, void*, void*, uintptr_t, uint32_t, void*); -typedef uint32_t (*uFEppppppippp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, int32_t, void*, void*, void*); +typedef uint32_t (*uFEpLuupppLuV_t)(x64emu_t*, void*, uintptr_t, uint32_t, uint32_t, void*, void*, void*, uintptr_t, uint32_t, void*); +typedef uint32_t (*uFEpLuppppLup_t)(x64emu_t*, void*, uintptr_t, uint32_t, void*, void*, void*, void*, uintptr_t, uint32_t, void*); +typedef uint32_t (*uFEpLuppppLuA_t)(x64emu_t*, void*, uintptr_t, uint32_t, void*, void*, void*, void*, uintptr_t, uint32_t, void*); +typedef uint32_t (*uFEppppppuppp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, uint32_t, void*, void*, void*); typedef uint32_t (*uFppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFEpipppppppi_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*, void*, void*, void*, int32_t); typedef void* (*pFEppiiLpppip_t)(x64emu_t*, void*, void*, int32_t, int32_t, uintptr_t, void*, void*, void*, int32_t, void*); @@ -3022,58 +3218,58 @@ typedef void* (*pFppppppppppp_t)(void*, void*, void*, void*, void*, void*, void* typedef int32_t (*iWEpuipuppppp_t)(x64emu_t*, void*, uint32_t, int32_t, void*, uint32_t, void*, void*, void*, void*, void*); typedef int32_t (*iWEpuuiiuippu_t)(x64emu_t*, void*, uint32_t, uint32_t, int32_t, int32_t, uint32_t, int32_t, void*, void*, uint32_t); typedef int32_t (*iWEpuuuuuiipp_t)(x64emu_t*, void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, int32_t, int32_t, void*, void*); -typedef void (*vFuiiiiiiiiuLC_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uintptr_t, uint8_t); +typedef void (*vFuiiiiiiiiuUC_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint64_t, uint8_t); typedef void (*vFuiiiiiiiuuip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, void*); -typedef void (*vFuuiiiiiiiiui_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t); typedef void (*vFuuiiiiiiiiuu_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); typedef void (*vFuuiiiiiiiuip_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, void*); typedef void (*vFuuiiiiiiiuup_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); typedef void (*vFuuuuuuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef void (*vFffffffffffff_t)(float, float, float, float, float, float, float, float, float, float, float, float); -typedef void (*vFpipppiiiipii_t)(void*, int32_t, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, void*, int32_t, int32_t); -typedef void (*vFpippppiiiipi_t)(void*, int32_t, void*, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFpiLLpiiiipii_t)(void*, int32_t, uintptr_t, uintptr_t, void*, int32_t, int32_t, int32_t, int32_t, void*, int32_t, int32_t); +typedef void (*vFpiLLpLiiiipi_t)(void*, int32_t, uintptr_t, uintptr_t, void*, uintptr_t, int32_t, int32_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFpiLpLiiiipui_t)(void*, int32_t, uintptr_t, void*, uintptr_t, int32_t, int32_t, int32_t, int32_t, void*, uint32_t, int32_t); typedef void (*vFpupppppppppp_t)(void*, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); +typedef void (*vFpLiiuuuiupLp_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, int32_t, uint32_t, void*, uintptr_t, void*); typedef void (*vFppiiiiddddii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, double, double, double, double, int32_t, int32_t); -typedef void (*vFppiiuuuiupup_t)(void*, void*, int32_t, int32_t, uint32_t, uint32_t, uint32_t, int32_t, uint32_t, void*, uint32_t, void*); typedef void (*vFppiipppiiiii_t)(void*, void*, int32_t, int32_t, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFppuuppuiiiii_t)(void*, void*, uint32_t, uint32_t, void*, void*, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFppuupppiiiiu_t)(void*, void*, uint32_t, uint32_t, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t); -typedef void (*vFpppiiiiiiiii_t)(void*, void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFpppiiiiiiuii_t)(void*, void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, int32_t); typedef void (*vFpppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); -typedef int32_t (*iFEpppippppppp_t)(x64emu_t*, void*, void*, void*, int32_t, void*, void*, void*, void*, void*, void*, void*); -typedef int32_t (*iFEppppiiiiuui_t)(x64emu_t*, void*, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t); -typedef int32_t (*iFpipllipppppp_t)(void*, int32_t, void*, intptr_t, intptr_t, int32_t, void*, void*, void*, void*, void*, void*); -typedef int32_t (*iFpipppppppppp_t)(void*, int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFEpLppiiiiuui_t)(x64emu_t*, void*, uintptr_t, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t); +typedef int32_t (*iFEpppuppppppp_t)(x64emu_t*, void*, void*, void*, uint32_t, void*, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFpiLlliLppppp_t)(void*, int32_t, uintptr_t, intptr_t, intptr_t, int32_t, uintptr_t, void*, void*, void*, void*, void*); +typedef int32_t (*iFpiLppppppppp_t)(void*, int32_t, uintptr_t, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFpCCCWCWCCCWp_t)(void*, uint8_t, uint8_t, uint8_t, uint16_t, uint8_t, uint16_t, uint8_t, uint8_t, uint8_t, uint16_t, void*); typedef int32_t (*iFpLLlliLppppp_t)(void*, uintptr_t, uintptr_t, intptr_t, intptr_t, int32_t, uintptr_t, void*, void*, void*, void*, void*); -typedef int32_t (*iFpppllipppppp_t)(void*, void*, void*, intptr_t, intptr_t, int32_t, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFpLpuuLpLpppL_t)(void*, uintptr_t, void*, uint32_t, uint32_t, uintptr_t, void*, uintptr_t, void*, void*, void*, uintptr_t); +typedef int32_t (*iFpLpppppppppp_t)(void*, uintptr_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFppLlliLppppp_t)(void*, void*, uintptr_t, intptr_t, intptr_t, int32_t, uintptr_t, void*, void*, void*, void*, void*); typedef int32_t (*iFpppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); -typedef void* (*pFEppiiuuuipii_t)(x64emu_t*, void*, void*, int32_t, int32_t, uint32_t, uint32_t, uint32_t, int32_t, void*, int32_t, int32_t); +typedef uintptr_t (*LFpLiiuuuiupLp_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, int32_t, uint32_t, void*, uintptr_t, void*); +typedef void* (*pFEpLiiuuLipii_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uintptr_t, int32_t, void*, int32_t, int32_t); typedef void* (*pFEppppppppppp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFWWiCCCCiipup_t)(uint16_t, uint16_t, int32_t, uint8_t, uint8_t, uint8_t, uint8_t, int32_t, int32_t, void*, uint32_t, void*); -typedef void* (*pFppiiuuuiupLp_t)(void*, void*, int32_t, int32_t, uint32_t, uint32_t, uint32_t, int32_t, uint32_t, void*, uintptr_t, void*); typedef void* (*pFppippLLLiLpp_t)(void*, void*, int32_t, void*, void*, uintptr_t, uintptr_t, uintptr_t, int32_t, uintptr_t, void*, void*); typedef void* (*pFppuuppppuppp_t)(void*, void*, uint32_t, uint32_t, void*, void*, void*, void*, uint32_t, void*, void*, void*); typedef void* (*pFpppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFbCuuWWwwCCup_t)(void*, uint8_t, uint32_t, uint32_t, uint16_t, uint16_t, int16_t, int16_t, uint8_t, uint8_t, uint32_t, void*); typedef void* (*pFbuuuWWWWWWWW_t)(void*, uint32_t, uint32_t, uint32_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t); -typedef void (*vFEpppppppiippp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, void*, int32_t, int32_t, void*, void*, void*); +typedef void (*vFEpppppppuippp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*, void*, uint32_t, int32_t, void*, void*, void*); typedef void (*vFuiiiiiiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); typedef void (*vFuuuuuuuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuUuuuuuuuuuuu_t)(uint32_t, uint64_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef void (*vFuffffffffffff_t)(uint32_t, float, float, float, float, float, float, float, float, float, float, float, float); -typedef void (*vFuLuuuuuuuuuuu_t)(uint32_t, uintptr_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); -typedef void (*vFpipppiiiiiiuu_t)(void*, int32_t, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); +typedef void (*vFpiLLLiiiiiiuu_t)(void*, int32_t, uintptr_t, uintptr_t, uintptr_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); typedef void (*vFpippppppppppp_t)(void*, int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); -typedef void (*vFpuppppppppppp_t)(void*, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); -typedef void (*vFppiiiiiiiiiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFpLppppppppppp_t)(void*, uintptr_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void (*vFppiiiiiiuiuii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, uint32_t, int32_t, int32_t); typedef void (*vFppuuppiiiiuii_t)(void*, void*, uint32_t, uint32_t, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, int32_t); typedef void (*vFppuupppuiiiii_t)(void*, void*, uint32_t, uint32_t, void*, void*, void*, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFddddpppddpppp_t)(double, double, double, double, void*, void*, void*, double, double, void*, void*, void*, void*); typedef int32_t (*iFpippuuuiipppp_t)(void*, int32_t, void*, void*, uint32_t, uint32_t, uint32_t, int32_t, int32_t, void*, void*, void*, void*); -typedef int32_t (*iFpupiiiipppppp_t)(void*, uint32_t, void*, int32_t, int32_t, int32_t, int32_t, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFpLLlliiLppppp_t)(void*, uintptr_t, uintptr_t, intptr_t, intptr_t, int32_t, int32_t, uintptr_t, void*, void*, void*, void*, void*); typedef int32_t (*iFppppppLLLLupp_t)(void*, void*, void*, void*, void*, void*, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uint32_t, void*, void*); typedef uint32_t (*uFippuuuulllipp_t)(int32_t, void*, void*, uint32_t, uint32_t, uint32_t, uint32_t, intptr_t, intptr_t, intptr_t, int32_t, void*, void*); typedef uint32_t (*uFpppppuupppppp_t)(void*, void*, void*, void*, void*, uint32_t, uint32_t, void*, void*, void*, void*, void*, void*); @@ -3099,13 +3295,15 @@ typedef void (*vFpppippppppppppp_t)(void*, void*, void*, int32_t, void*, void*, typedef void (*vFppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFpuiippppppppppp_t)(void*, uint32_t, int32_t, int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFppipppppppppppp_t)(void*, void*, int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); +typedef void* (*pFppupppppppppppp_t)(void*, void*, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void (*vFpppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFpppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); +typedef void* (*pFpipppppppppppppp_t)(void*, int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFppipipipipipipip_t)(void*, void*, int32_t, void*, int32_t, void*, int32_t, void*, int32_t, void*, int32_t, void*, int32_t, void*, int32_t, void*); +typedef void* (*pFppupupupupupupup_t)(void*, void*, uint32_t, void*, uint32_t, void*, uint32_t, void*, uint32_t, void*, uint32_t, void*, uint32_t, void*, uint32_t, void*); typedef void* (*pFpppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFbuuWWWWWWwwCCCuu_t)(void*, uint32_t, uint32_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, uint16_t, int16_t, int16_t, uint8_t, uint8_t, uint8_t, uint32_t, uint32_t); -typedef void (*vFuuuiiiiiuiiiiilll_t)(uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, intptr_t, intptr_t, intptr_t); typedef void (*vFuuuuiiiiuuiiiiiii_t)(uint32_t, uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef void (*vFppiiiiddddiiiiiuu_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, double, double, double, double, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); typedef void (*vFpppuppiipppuUUUpi_t)(void*, void*, void*, uint32_t, void*, void*, int32_t, int32_t, void*, void*, void*, uint32_t, uint64_t, uint64_t, uint64_t, void*, int32_t); @@ -3120,7 +3318,7 @@ typedef void* (*pFpupppppppppppppppp_t)(void*, uint32_t, void*, void*, void*, vo typedef void (*vFpiiiiiiiiiiiiiiiiii_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef uint32_t (*uFbWWWCCCCCCCCWCCCCCC_t)(void*, uint16_t, uint16_t, uint16_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint16_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t); typedef void* (*pFiiiippppppppppppppp_t)(int32_t, int32_t, int32_t, int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); -typedef void* (*pFpippppppppppppppppp_t)(void*, int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); +typedef void* (*pFppppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFpupupppppppppppppppp_t)(void*, uint32_t, void*, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFpppppppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef uint32_t (*uFippuuuuiiiiuuiiiiiiiipp_t)(int32_t, void*, void*, uint32_t, uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*, void*); @@ -3128,32 +3326,56 @@ typedef void (*vFpppppppppppppppppppppppp_t)(void*, void*, void*, void*, void*, typedef void* (*pFpupuupppppppppppppppppppp_t)(void*, uint32_t, void*, uint32_t, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFpppppppppppppppppppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); -#if defined(HAVE_LD80BITS) +#ifdef HAVE_LD80BITS +typedef int32_t (*iFD_t)(long double); typedef long double (*DFD_t)(long double); typedef long double (*DFY_t)(complexl_t); typedef intptr_t (*lFD_t)(long double); typedef complexl_t (*YFY_t)(complexl_t); typedef int64_t (*IFED_t)(x64emu_t*, long double); +typedef float (*fFfD_t)(float, long double); +typedef double (*dFdD_t)(double, long double); typedef long double (*DFiD_t)(int32_t, long double); +typedef long double (*DFDi_t)(long double, int32_t); +typedef long double (*DFDD_t)(long double, long double); +typedef long double (*DFDp_t)(long double, void*); +typedef long double (*DFpp_t)(void*, void*); typedef intptr_t (*lFDD_t)(long double, long double); typedef complexl_t (*YFYY_t)(complexl_t, complexl_t); typedef void (*vFDpp_t)(long double, void*, void*); typedef long double (*DFDDD_t)(long double, long double, long double); -#endif - -#if !defined(HAVE_LD80BITS) -typedef double (*KFK_t)(double); -typedef double (*KFy_t)(complex_t); -typedef intptr_t (*lFK_t)(double); -typedef complex_t (*yFy_t)(complex_t); -typedef int64_t (*IFEK_t)(x64emu_t*, double); -typedef double (*KFiK_t)(int32_t, double); -typedef double (*KFKK_t)(double, double); -typedef double (*KFKp_t)(double, void*); -typedef intptr_t (*lFKK_t)(double, double); -typedef complex_t (*yFyy_t)(complex_t, complex_t); -typedef void (*vFKpp_t)(double, void*, void*); -typedef double (*KFKKK_t)(double, double, double); +typedef long double (*DFppi_t)(void*, void*, int32_t); +typedef long double (*DFppp_t)(void*, void*, void*); +typedef void* (*pFDip_t)(long double, int32_t, void*); +typedef int32_t (*iFpLpD_t)(void*, uintptr_t, void*, long double); +typedef void* (*pFDipp_t)(long double, int32_t, void*, void*); +typedef int32_t (*iFDipppL_t)(long double, int32_t, void*, void*, void*, uintptr_t); +typedef void (*vFppippDpDc_t)(void*, void*, int32_t, void*, void*, long double, void*, long double, int8_t); +#else // HAVE_LD80BITS +typedef int32_t (*iFD_t)(double); +typedef double (*DFD_t)(double); +typedef double (*DFY_t)(complex_t); +typedef intptr_t (*lFD_t)(double); +typedef complex_t (*YFY_t)(complex_t); +typedef int64_t (*IFED_t)(x64emu_t*, double); +typedef float (*fFfD_t)(float, double); +typedef double (*dFdD_t)(double, double); +typedef double (*DFiD_t)(int32_t, double); +typedef double (*DFDi_t)(double, int32_t); +typedef double (*DFDD_t)(double, double); +typedef double (*DFDp_t)(double, void*); +typedef double (*DFpp_t)(void*, void*); +typedef intptr_t (*lFDD_t)(double, double); +typedef complex_t (*YFYY_t)(complex_t, complex_t); +typedef void (*vFDpp_t)(double, void*, void*); +typedef double (*DFDDD_t)(double, double, double); +typedef double (*DFppi_t)(void*, void*, int32_t); +typedef double (*DFppp_t)(void*, void*, void*); +typedef void* (*pFDip_t)(double, int32_t, void*); +typedef int32_t (*iFpLpD_t)(void*, uintptr_t, void*, double); +typedef void* (*pFDipp_t)(double, int32_t, void*, void*); +typedef int32_t (*iFDipppL_t)(double, int32_t, void*, void*, void*, uintptr_t); +typedef void (*vFppippDpDc_t)(void*, void*, int32_t, void*, void*, double, void*, double, int8_t); #endif #if defined(NOALIGN) @@ -3161,6 +3383,7 @@ typedef int32_t (*iFipiip_t)(int32_t, void*, int32_t, int32_t, void*); #endif #if !defined(NOALIGN) +typedef int32_t (*iFELp_t)(x64emu_t*, uintptr_t, void*); typedef int32_t (*iFEppu_t)(x64emu_t*, void*, void*, uint32_t); typedef int32_t (*iFEiiip_t)(x64emu_t*, int32_t, int32_t, int32_t, void*); typedef int32_t (*iFEipii_t)(x64emu_t*, int32_t, void*, int32_t, int32_t); @@ -3168,12 +3391,15 @@ typedef int32_t (*iFEipiip_t)(x64emu_t*, int32_t, void*, int32_t, int32_t, void* #endif #if !defined(STATICBUILD) +typedef intptr_t (*lFiN_t)(int32_t, ...); typedef int32_t (*iFlip_t)(intptr_t, int32_t, void*); typedef int32_t (*iFLLi_t)(uintptr_t, uintptr_t, int32_t); -typedef int32_t (*iFLLiW_t)(uintptr_t, uintptr_t, int32_t, uint16_t); +typedef int32_t (*iFLLii_t)(uintptr_t, uintptr_t, int32_t, int32_t); +typedef uint16_t (*WFpLLu_t)(void*, uintptr_t, uintptr_t, uint32_t); typedef int32_t (*iFEipup_t)(x64emu_t*, int32_t, void*, uint32_t, void*); typedef int32_t (*iFEiipup_t)(x64emu_t*, int32_t, int32_t, void*, uint32_t, void*); typedef int32_t (*iFpipppL_t)(void*, int32_t, void*, void*, void*, uintptr_t); +typedef intptr_t (*lFpLpdddddd_t)(void*, uintptr_t, void*, double, double, double, double, double, double); #endif void vFE(x64emu_t *emu, uintptr_t fcn) { vFE_t fn = (vFE_t)fcn; fn(emu); } @@ -3192,42 +3418,42 @@ void vFL(x64emu_t *emu, uintptr_t fcn) { vFL_t fn = (vFL_t)fcn; fn((uintptr_t)R_ void vFp(x64emu_t *emu, uintptr_t fcn) { vFp_t fn = (vFp_t)fcn; fn((void*)R_RDI); } void vFS(x64emu_t *emu, uintptr_t fcn) { vFS_t fn = (vFS_t)fcn; fn(io_convert((void*)R_RDI)); } void vFb(x64emu_t *emu, uintptr_t fcn) { vFb_t fn = (vFb_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); fn(aligned_xcb); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } -void cFv(x64emu_t *emu, uintptr_t fcn) { cFv_t fn = (cFv_t)fcn; R_RAX=fn(); } -void cFi(x64emu_t *emu, uintptr_t fcn) { cFi_t fn = (cFi_t)fcn; R_RAX=fn((int32_t)R_RDI); } -void cFu(x64emu_t *emu, uintptr_t fcn) { cFu_t fn = (cFu_t)fcn; R_RAX=fn((uint32_t)R_RDI); } -void cFf(x64emu_t *emu, uintptr_t fcn) { cFf_t fn = (cFf_t)fcn; R_RAX=fn(emu->xmm[0].f[0]); } -void cFp(x64emu_t *emu, uintptr_t fcn) { cFp_t fn = (cFp_t)fcn; R_RAX=fn((void*)R_RDI); } -void wFp(x64emu_t *emu, uintptr_t fcn) { wFp_t fn = (wFp_t)fcn; R_RAX=fn((void*)R_RDI); } -void iFE(x64emu_t *emu, uintptr_t fcn) { iFE_t fn = (iFE_t)fcn; R_RAX=(int32_t)fn(emu); } -void iFv(x64emu_t *emu, uintptr_t fcn) { iFv_t fn = (iFv_t)fcn; R_RAX=(int32_t)fn(); } -void iFw(x64emu_t *emu, uintptr_t fcn) { iFw_t fn = (iFw_t)fcn; R_RAX=(int32_t)fn((int16_t)R_RDI); } -void iFi(x64emu_t *emu, uintptr_t fcn) { iFi_t fn = (iFi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI); } -void iFI(x64emu_t *emu, uintptr_t fcn) { iFI_t fn = (iFI_t)fcn; R_RAX=(int32_t)fn((int64_t)R_RDI); } -void iFC(x64emu_t *emu, uintptr_t fcn) { iFC_t fn = (iFC_t)fcn; R_RAX=(int32_t)fn((uint8_t)R_RDI); } -void iFW(x64emu_t *emu, uintptr_t fcn) { iFW_t fn = (iFW_t)fcn; R_RAX=(int32_t)fn((uint16_t)R_RDI); } -void iFu(x64emu_t *emu, uintptr_t fcn) { iFu_t fn = (iFu_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI); } -void iFU(x64emu_t *emu, uintptr_t fcn) { iFU_t fn = (iFU_t)fcn; R_RAX=(int32_t)fn((uint64_t)R_RDI); } -void iFf(x64emu_t *emu, uintptr_t fcn) { iFf_t fn = (iFf_t)fcn; R_RAX=(int32_t)fn(emu->xmm[0].f[0]); } -void iFd(x64emu_t *emu, uintptr_t fcn) { iFd_t fn = (iFd_t)fcn; R_RAX=(int32_t)fn(emu->xmm[0].d[0]); } -void iFD(x64emu_t *emu, uintptr_t fcn) { iFD_t fn = (iFD_t)fcn; R_RAX=(int32_t)fn(LD2localLD((void*)(R_RSP + 8))); } -void iFl(x64emu_t *emu, uintptr_t fcn) { iFl_t fn = (iFl_t)fcn; R_RAX=(int32_t)fn((intptr_t)R_RDI); } -void iFL(x64emu_t *emu, uintptr_t fcn) { iFL_t fn = (iFL_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI); } -void iFp(x64emu_t *emu, uintptr_t fcn) { iFp_t fn = (iFp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI); } -void iFO(x64emu_t *emu, uintptr_t fcn) { iFO_t fn = (iFO_t)fcn; R_RAX=(int32_t)fn(of_convert((int32_t)R_RDI)); } -void iFS(x64emu_t *emu, uintptr_t fcn) { iFS_t fn = (iFS_t)fcn; R_RAX=(int32_t)fn(io_convert((void*)R_RDI)); } -void iFP(x64emu_t *emu, uintptr_t fcn) { iFP_t fn = (iFP_t)fcn; R_RAX=(int32_t)fn(*(void**)(R_RSP + 8)); } -void iFb(x64emu_t *emu, uintptr_t fcn) { iFb_t fn = (iFb_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(int32_t)fn(aligned_xcb); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } -void IFv(x64emu_t *emu, uintptr_t fcn) { IFv_t fn = (IFv_t)fcn; R_RAX=(int64_t)fn(); } -void IFi(x64emu_t *emu, uintptr_t fcn) { IFi_t fn = (IFi_t)fcn; R_RAX=(int64_t)fn((int32_t)R_RDI); } -void IFI(x64emu_t *emu, uintptr_t fcn) { IFI_t fn = (IFI_t)fcn; R_RAX=(int64_t)fn((int64_t)R_RDI); } -void IFf(x64emu_t *emu, uintptr_t fcn) { IFf_t fn = (IFf_t)fcn; R_RAX=(int64_t)fn(emu->xmm[0].f[0]); } -void IFd(x64emu_t *emu, uintptr_t fcn) { IFd_t fn = (IFd_t)fcn; R_RAX=(int64_t)fn(emu->xmm[0].d[0]); } -void IFp(x64emu_t *emu, uintptr_t fcn) { IFp_t fn = (IFp_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI); } +void cFv(x64emu_t *emu, uintptr_t fcn) { cFv_t fn = (cFv_t)fcn; R_RAX=(uint8_t)fn(); } +void cFc(x64emu_t *emu, uintptr_t fcn) { cFc_t fn = (cFc_t)fcn; R_RAX=(uint8_t)fn((int8_t)R_RDI); } +void cFi(x64emu_t *emu, uintptr_t fcn) { cFi_t fn = (cFi_t)fcn; R_RAX=(uint8_t)fn((int32_t)R_RDI); } +void cFu(x64emu_t *emu, uintptr_t fcn) { cFu_t fn = (cFu_t)fcn; R_RAX=(uint8_t)fn((uint32_t)R_RDI); } +void cFf(x64emu_t *emu, uintptr_t fcn) { cFf_t fn = (cFf_t)fcn; R_RAX=(uint8_t)fn(emu->xmm[0].f[0]); } +void cFp(x64emu_t *emu, uintptr_t fcn) { cFp_t fn = (cFp_t)fcn; R_RAX=(uint8_t)fn((void*)R_RDI); } +void wFp(x64emu_t *emu, uintptr_t fcn) { wFp_t fn = (wFp_t)fcn; R_RAX=(uint16_t)fn((void*)R_RDI); } +void iFE(x64emu_t *emu, uintptr_t fcn) { iFE_t fn = (iFE_t)fcn; R_RAX=(uint32_t)fn(emu); } +void iFv(x64emu_t *emu, uintptr_t fcn) { iFv_t fn = (iFv_t)fcn; R_RAX=(uint32_t)fn(); } +void iFc(x64emu_t *emu, uintptr_t fcn) { iFc_t fn = (iFc_t)fcn; R_RAX=(uint32_t)fn((int8_t)R_RDI); } +void iFw(x64emu_t *emu, uintptr_t fcn) { iFw_t fn = (iFw_t)fcn; R_RAX=(uint32_t)fn((int16_t)R_RDI); } +void iFi(x64emu_t *emu, uintptr_t fcn) { iFi_t fn = (iFi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI); } +void iFI(x64emu_t *emu, uintptr_t fcn) { iFI_t fn = (iFI_t)fcn; R_RAX=(uint32_t)fn((int64_t)R_RDI); } +void iFC(x64emu_t *emu, uintptr_t fcn) { iFC_t fn = (iFC_t)fcn; R_RAX=(uint32_t)fn((uint8_t)R_RDI); } +void iFW(x64emu_t *emu, uintptr_t fcn) { iFW_t fn = (iFW_t)fcn; R_RAX=(uint32_t)fn((uint16_t)R_RDI); } +void iFu(x64emu_t *emu, uintptr_t fcn) { iFu_t fn = (iFu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI); } +void iFf(x64emu_t *emu, uintptr_t fcn) { iFf_t fn = (iFf_t)fcn; R_RAX=(uint32_t)fn(emu->xmm[0].f[0]); } +void iFd(x64emu_t *emu, uintptr_t fcn) { iFd_t fn = (iFd_t)fcn; R_RAX=(uint32_t)fn(emu->xmm[0].d[0]); } +void iFl(x64emu_t *emu, uintptr_t fcn) { iFl_t fn = (iFl_t)fcn; R_RAX=(uint32_t)fn((intptr_t)R_RDI); } +void iFL(x64emu_t *emu, uintptr_t fcn) { iFL_t fn = (iFL_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI); } +void iFp(x64emu_t *emu, uintptr_t fcn) { iFp_t fn = (iFp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI); } +void iFO(x64emu_t *emu, uintptr_t fcn) { iFO_t fn = (iFO_t)fcn; R_RAX=(uint32_t)fn(of_convert((int32_t)R_RDI)); } +void iFS(x64emu_t *emu, uintptr_t fcn) { iFS_t fn = (iFS_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI)); } +void iFb(x64emu_t *emu, uintptr_t fcn) { iFb_t fn = (iFb_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } +void IFv(x64emu_t *emu, uintptr_t fcn) { IFv_t fn = (IFv_t)fcn; S_RAX=(int64_t)fn(); } +void IFi(x64emu_t *emu, uintptr_t fcn) { IFi_t fn = (IFi_t)fcn; S_RAX=(int64_t)fn((int32_t)R_RDI); } +void IFI(x64emu_t *emu, uintptr_t fcn) { IFI_t fn = (IFI_t)fcn; S_RAX=(int64_t)fn((int64_t)R_RDI); } +void IFf(x64emu_t *emu, uintptr_t fcn) { IFf_t fn = (IFf_t)fcn; S_RAX=(int64_t)fn(emu->xmm[0].f[0]); } +void IFd(x64emu_t *emu, uintptr_t fcn) { IFd_t fn = (IFd_t)fcn; S_RAX=(int64_t)fn(emu->xmm[0].d[0]); } +void IFp(x64emu_t *emu, uintptr_t fcn) { IFp_t fn = (IFp_t)fcn; S_RAX=(int64_t)fn((void*)R_RDI); } +void IFS(x64emu_t *emu, uintptr_t fcn) { IFS_t fn = (IFS_t)fcn; S_RAX=(int64_t)fn(io_convert((void*)R_RDI)); } void CFv(x64emu_t *emu, uintptr_t fcn) { CFv_t fn = (CFv_t)fcn; R_RAX=(unsigned char)fn(); } void CFi(x64emu_t *emu, uintptr_t fcn) { CFi_t fn = (CFi_t)fcn; R_RAX=(unsigned char)fn((int32_t)R_RDI); } -void CFC(x64emu_t *emu, uintptr_t fcn) { CFC_t fn = (CFC_t)fcn; R_RAX=(unsigned char)fn((uint8_t)R_RDI); } void CFW(x64emu_t *emu, uintptr_t fcn) { CFW_t fn = (CFW_t)fcn; R_RAX=(unsigned char)fn((uint16_t)R_RDI); } void CFu(x64emu_t *emu, uintptr_t fcn) { CFu_t fn = (CFu_t)fcn; R_RAX=(unsigned char)fn((uint32_t)R_RDI); } +void CFU(x64emu_t *emu, uintptr_t fcn) { CFU_t fn = (CFU_t)fcn; R_RAX=(unsigned char)fn((uint64_t)R_RDI); } void CFl(x64emu_t *emu, uintptr_t fcn) { CFl_t fn = (CFl_t)fcn; R_RAX=(unsigned char)fn((intptr_t)R_RDI); } void CFL(x64emu_t *emu, uintptr_t fcn) { CFL_t fn = (CFL_t)fcn; R_RAX=(unsigned char)fn((uintptr_t)R_RDI); } void CFp(x64emu_t *emu, uintptr_t fcn) { CFp_t fn = (CFp_t)fcn; R_RAX=(unsigned char)fn((void*)R_RDI); } @@ -3238,12 +3464,14 @@ void WFp(x64emu_t *emu, uintptr_t fcn) { WFp_t fn = (WFp_t)fcn; R_RAX=(unsigned void uFv(x64emu_t *emu, uintptr_t fcn) { uFv_t fn = (uFv_t)fcn; R_RAX=(uint32_t)fn(); } void uFi(x64emu_t *emu, uintptr_t fcn) { uFi_t fn = (uFi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI); } void uFu(x64emu_t *emu, uintptr_t fcn) { uFu_t fn = (uFu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI); } +void uFU(x64emu_t *emu, uintptr_t fcn) { uFU_t fn = (uFU_t)fcn; R_RAX=(uint32_t)fn((uint64_t)R_RDI); } void uFd(x64emu_t *emu, uintptr_t fcn) { uFd_t fn = (uFd_t)fcn; R_RAX=(uint32_t)fn(emu->xmm[0].d[0]); } -void uFl(x64emu_t *emu, uintptr_t fcn) { uFl_t fn = (uFl_t)fcn; R_RAX=(uint32_t)fn((intptr_t)R_RDI); } void uFL(x64emu_t *emu, uintptr_t fcn) { uFL_t fn = (uFL_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI); } void uFp(x64emu_t *emu, uintptr_t fcn) { uFp_t fn = (uFp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI); } +void uFS(x64emu_t *emu, uintptr_t fcn) { uFS_t fn = (uFS_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI)); } void uFb(x64emu_t *emu, uintptr_t fcn) { uFb_t fn = (uFb_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void UFv(x64emu_t *emu, uintptr_t fcn) { UFv_t fn = (UFv_t)fcn; R_RAX=fn(); } +void UFi(x64emu_t *emu, uintptr_t fcn) { UFi_t fn = (UFi_t)fcn; R_RAX=fn((int32_t)R_RDI); } void UFu(x64emu_t *emu, uintptr_t fcn) { UFu_t fn = (UFu_t)fcn; R_RAX=fn((uint32_t)R_RDI); } void UFp(x64emu_t *emu, uintptr_t fcn) { UFp_t fn = (UFp_t)fcn; R_RAX=fn((void*)R_RDI); } void fFi(x64emu_t *emu, uintptr_t fcn) { fFi_t fn = (fFi_t)fcn; emu->xmm[0].f[0]=fn((int32_t)R_RDI); } @@ -3261,6 +3489,7 @@ void lFi(x64emu_t *emu, uintptr_t fcn) { lFi_t fn = (lFi_t)fcn; R_RAX=(intptr_t) void lFu(x64emu_t *emu, uintptr_t fcn) { lFu_t fn = (lFu_t)fcn; R_RAX=(intptr_t)fn((uint32_t)R_RDI); } void lFl(x64emu_t *emu, uintptr_t fcn) { lFl_t fn = (lFl_t)fcn; R_RAX=(intptr_t)fn((intptr_t)R_RDI); } void lFp(x64emu_t *emu, uintptr_t fcn) { lFp_t fn = (lFp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI); } +void lFS(x64emu_t *emu, uintptr_t fcn) { lFS_t fn = (lFS_t)fcn; R_RAX=(intptr_t)fn(io_convert((void*)R_RDI)); } void LFv(x64emu_t *emu, uintptr_t fcn) { LFv_t fn = (LFv_t)fcn; R_RAX=(uintptr_t)fn(); } void LFi(x64emu_t *emu, uintptr_t fcn) { LFi_t fn = (LFi_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI); } void LFu(x64emu_t *emu, uintptr_t fcn) { LFu_t fn = (LFu_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI); } @@ -3280,10 +3509,13 @@ void pFl(x64emu_t *emu, uintptr_t fcn) { pFl_t fn = (pFl_t)fcn; R_RAX=(uintptr_t void pFL(x64emu_t *emu, uintptr_t fcn) { pFL_t fn = (pFL_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI); } void pFp(x64emu_t *emu, uintptr_t fcn) { pFp_t fn = (pFp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI); } void pFV(x64emu_t *emu, uintptr_t fcn) { pFV_t fn = (pFV_t)fcn; R_RAX=(uintptr_t)fn((void*)(R_RSP + 8)); } +void pFS(x64emu_t *emu, uintptr_t fcn) { pFS_t fn = (pFS_t)fcn; R_RAX=(uintptr_t)fn(io_convert((void*)R_RDI)); } void pFA(x64emu_t *emu, uintptr_t fcn) { pFA_t fn = (pFA_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI); } void pFb(x64emu_t *emu, uintptr_t fcn) { pFb_t fn = (pFb_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } +void SFv(x64emu_t *emu, uintptr_t fcn) { SFv_t fn = (SFv_t)fcn; R_RAX=(uintptr_t)io_convert_back(fn()); } void HFi(x64emu_t *emu, uintptr_t fcn) { HFi_t fn = (HFi_t)fcn; unsigned __int128 u128 = fn((int32_t)R_RDI); R_RAX=(u128&0xFFFFFFFFFFFFFFFFL); R_RDX=(u128>>64)&0xFFFFFFFFFFFFFFFFL; } void HFp(x64emu_t *emu, uintptr_t fcn) { HFp_t fn = (HFp_t)fcn; unsigned __int128 u128 = fn((void*)R_RDI); R_RAX=(u128&0xFFFFFFFFFFFFFFFFL); R_RDX=(u128>>64)&0xFFFFFFFFFFFFFFFFL; } +void HFH(x64emu_t *emu, uintptr_t fcn) { HFH_t fn = (HFH_t)fcn; unsigned __int128 u128 = fn((unsigned __int128)R_RDI + ((unsigned __int128)R_RSI << 64)); R_RAX=(u128&0xFFFFFFFFFFFFFFFFL); R_RDX=(u128>>64)&0xFFFFFFFFFFFFFFFFL; } void xFx(x64emu_t *emu, uintptr_t fcn) { xFx_t fn = (xFx_t)fcn; from_complexf(emu, fn(to_complexf(emu, 0))); } void XFX(x64emu_t *emu, uintptr_t fcn) { XFX_t fn = (XFX_t)fcn; from_complex(emu, fn(to_complex(emu, 0))); } void vWp(x64emu_t *emu, uintptr_t fcn) { vWp_t fn = (vWp_t)fcn; fn((void*)R_RCX); } @@ -3295,19 +3527,19 @@ void vFEp(x64emu_t *emu, uintptr_t fcn) { vFEp_t fn = (vFEp_t)fcn; fn(emu, (void void vFcc(x64emu_t *emu, uintptr_t fcn) { vFcc_t fn = (vFcc_t)fcn; fn((int8_t)R_RDI, (int8_t)R_RSI); } void vFww(x64emu_t *emu, uintptr_t fcn) { vFww_t fn = (vFww_t)fcn; fn((int16_t)R_RDI, (int16_t)R_RSI); } void vFii(x64emu_t *emu, uintptr_t fcn) { vFii_t fn = (vFii_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI); } +void vFiI(x64emu_t *emu, uintptr_t fcn) { vFiI_t fn = (vFiI_t)fcn; fn((int32_t)R_RDI, (int64_t)R_RSI); } void vFiW(x64emu_t *emu, uintptr_t fcn) { vFiW_t fn = (vFiW_t)fcn; fn((int32_t)R_RDI, (uint16_t)R_RSI); } void vFiu(x64emu_t *emu, uintptr_t fcn) { vFiu_t fn = (vFiu_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI); } void vFiU(x64emu_t *emu, uintptr_t fcn) { vFiU_t fn = (vFiU_t)fcn; fn((int32_t)R_RDI, (uint64_t)R_RSI); } void vFif(x64emu_t *emu, uintptr_t fcn) { vFif_t fn = (vFif_t)fcn; fn((int32_t)R_RDI, emu->xmm[0].f[0]); } void vFid(x64emu_t *emu, uintptr_t fcn) { vFid_t fn = (vFid_t)fcn; fn((int32_t)R_RDI, emu->xmm[0].d[0]); } -void vFil(x64emu_t *emu, uintptr_t fcn) { vFil_t fn = (vFil_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI); } -void vFiL(x64emu_t *emu, uintptr_t fcn) { vFiL_t fn = (vFiL_t)fcn; fn((int32_t)R_RDI, (uintptr_t)R_RSI); } void vFip(x64emu_t *emu, uintptr_t fcn) { vFip_t fn = (vFip_t)fcn; fn((int32_t)R_RDI, (void*)R_RSI); } void vFWW(x64emu_t *emu, uintptr_t fcn) { vFWW_t fn = (vFWW_t)fcn; fn((uint16_t)R_RDI, (uint16_t)R_RSI); } void vFWp(x64emu_t *emu, uintptr_t fcn) { vFWp_t fn = (vFWp_t)fcn; fn((uint16_t)R_RDI, (void*)R_RSI); } void vFuc(x64emu_t *emu, uintptr_t fcn) { vFuc_t fn = (vFuc_t)fcn; fn((uint32_t)R_RDI, (int8_t)R_RSI); } void vFuw(x64emu_t *emu, uintptr_t fcn) { vFuw_t fn = (vFuw_t)fcn; fn((uint32_t)R_RDI, (int16_t)R_RSI); } void vFui(x64emu_t *emu, uintptr_t fcn) { vFui_t fn = (vFui_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI); } +void vFuI(x64emu_t *emu, uintptr_t fcn) { vFuI_t fn = (vFuI_t)fcn; fn((uint32_t)R_RDI, (int64_t)R_RSI); } void vFuC(x64emu_t *emu, uintptr_t fcn) { vFuC_t fn = (vFuC_t)fcn; fn((uint32_t)R_RDI, (uint8_t)R_RSI); } void vFuW(x64emu_t *emu, uintptr_t fcn) { vFuW_t fn = (vFuW_t)fcn; fn((uint32_t)R_RDI, (uint16_t)R_RSI); } void vFuu(x64emu_t *emu, uintptr_t fcn) { vFuu_t fn = (vFuu_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI); } @@ -3317,7 +3549,7 @@ void vFud(x64emu_t *emu, uintptr_t fcn) { vFud_t fn = (vFud_t)fcn; fn((uint32_t) void vFul(x64emu_t *emu, uintptr_t fcn) { vFul_t fn = (vFul_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI); } void vFuL(x64emu_t *emu, uintptr_t fcn) { vFuL_t fn = (vFuL_t)fcn; fn((uint32_t)R_RDI, (uintptr_t)R_RSI); } void vFup(x64emu_t *emu, uintptr_t fcn) { vFup_t fn = (vFup_t)fcn; fn((uint32_t)R_RDI, (void*)R_RSI); } -void vFUi(x64emu_t *emu, uintptr_t fcn) { vFUi_t fn = (vFUi_t)fcn; fn((uint64_t)R_RDI, (int32_t)R_RSI); } +void vFUu(x64emu_t *emu, uintptr_t fcn) { vFUu_t fn = (vFUu_t)fcn; fn((uint64_t)R_RDI, (uint32_t)R_RSI); } void vFfi(x64emu_t *emu, uintptr_t fcn) { vFfi_t fn = (vFfi_t)fcn; fn(emu->xmm[0].f[0], (int32_t)R_RDI); } void vFfC(x64emu_t *emu, uintptr_t fcn) { vFfC_t fn = (vFfC_t)fcn; fn(emu->xmm[0].f[0], (uint8_t)R_RDI); } void vFff(x64emu_t *emu, uintptr_t fcn) { vFff_t fn = (vFff_t)fcn; fn(emu->xmm[0].f[0], emu->xmm[1].f[0]); } @@ -3340,71 +3572,74 @@ void vFpd(x64emu_t *emu, uintptr_t fcn) { vFpd_t fn = (vFpd_t)fcn; fn((void*)R_R void vFpl(x64emu_t *emu, uintptr_t fcn) { vFpl_t fn = (vFpl_t)fcn; fn((void*)R_RDI, (intptr_t)R_RSI); } void vFpL(x64emu_t *emu, uintptr_t fcn) { vFpL_t fn = (vFpL_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI); } void vFpp(x64emu_t *emu, uintptr_t fcn) { vFpp_t fn = (vFpp_t)fcn; fn((void*)R_RDI, (void*)R_RSI); } -void vFpV(x64emu_t *emu, uintptr_t fcn) { vFpV_t fn = (vFpV_t)fcn; fn((void*)R_RDI, (void*)(R_RSP + 8)); } void vFpS(x64emu_t *emu, uintptr_t fcn) { vFpS_t fn = (vFpS_t)fcn; fn((void*)R_RDI, io_convert((void*)R_RSI)); } +void vFpA(x64emu_t *emu, uintptr_t fcn) { vFpA_t fn = (vFpA_t)fcn; fn((void*)R_RDI, (void*)R_RSI); } void vFSi(x64emu_t *emu, uintptr_t fcn) { vFSi_t fn = (vFSi_t)fcn; fn(io_convert((void*)R_RDI), (int32_t)R_RSI); } +void vFSp(x64emu_t *emu, uintptr_t fcn) { vFSp_t fn = (vFSp_t)fcn; fn(io_convert((void*)R_RDI), (void*)R_RSI); } void vFbi(x64emu_t *emu, uintptr_t fcn) { vFbi_t fn = (vFbi_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); fn(aligned_xcb, (int32_t)R_RSI); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void vFbu(x64emu_t *emu, uintptr_t fcn) { vFbu_t fn = (vFbu_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); fn(aligned_xcb, (uint32_t)R_RSI); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void vFbU(x64emu_t *emu, uintptr_t fcn) { vFbU_t fn = (vFbU_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); fn(aligned_xcb, (uint64_t)R_RSI); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void vFbp(x64emu_t *emu, uintptr_t fcn) { vFbp_t fn = (vFbp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); fn(aligned_xcb, (void*)R_RSI); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } -void cFpi(x64emu_t *emu, uintptr_t fcn) { cFpi_t fn = (cFpi_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI); } -void cFpp(x64emu_t *emu, uintptr_t fcn) { cFpp_t fn = (cFpp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI); } -void wFpi(x64emu_t *emu, uintptr_t fcn) { wFpi_t fn = (wFpi_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI); } -void iFEi(x64emu_t *emu, uintptr_t fcn) { iFEi_t fn = (iFEi_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI); } -void iFEf(x64emu_t *emu, uintptr_t fcn) { iFEf_t fn = (iFEf_t)fcn; R_RAX=(int32_t)fn(emu, emu->xmm[0].f[0]); } -void iFEd(x64emu_t *emu, uintptr_t fcn) { iFEd_t fn = (iFEd_t)fcn; R_RAX=(int32_t)fn(emu, emu->xmm[0].d[0]); } -void iFEL(x64emu_t *emu, uintptr_t fcn) { iFEL_t fn = (iFEL_t)fcn; R_RAX=(int32_t)fn(emu, (uintptr_t)R_RDI); } -void iFEp(x64emu_t *emu, uintptr_t fcn) { iFEp_t fn = (iFEp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI); } -void iFwp(x64emu_t *emu, uintptr_t fcn) { iFwp_t fn = (iFwp_t)fcn; R_RAX=(int32_t)fn((int16_t)R_RDI, (void*)R_RSI); } -void iFii(x64emu_t *emu, uintptr_t fcn) { iFii_t fn = (iFii_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI); } -void iFiI(x64emu_t *emu, uintptr_t fcn) { iFiI_t fn = (iFiI_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int64_t)R_RSI); } -void iFiC(x64emu_t *emu, uintptr_t fcn) { iFiC_t fn = (iFiC_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint8_t)R_RSI); } -void iFiu(x64emu_t *emu, uintptr_t fcn) { iFiu_t fn = (iFiu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI); } -void iFil(x64emu_t *emu, uintptr_t fcn) { iFil_t fn = (iFil_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI); } -void iFiL(x64emu_t *emu, uintptr_t fcn) { iFiL_t fn = (iFiL_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uintptr_t)R_RSI); } -void iFip(x64emu_t *emu, uintptr_t fcn) { iFip_t fn = (iFip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI); } -void iFiS(x64emu_t *emu, uintptr_t fcn) { iFiS_t fn = (iFiS_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, io_convert((void*)R_RSI)); } -void iFui(x64emu_t *emu, uintptr_t fcn) { iFui_t fn = (iFui_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI); } -void iFuu(x64emu_t *emu, uintptr_t fcn) { iFuu_t fn = (iFuu_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI); } -void iFuL(x64emu_t *emu, uintptr_t fcn) { iFuL_t fn = (iFuL_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uintptr_t)R_RSI); } -void iFup(x64emu_t *emu, uintptr_t fcn) { iFup_t fn = (iFup_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (void*)R_RSI); } -void iFUp(x64emu_t *emu, uintptr_t fcn) { iFUp_t fn = (iFUp_t)fcn; R_RAX=(int32_t)fn((uint64_t)R_RDI, (void*)R_RSI); } -void iFli(x64emu_t *emu, uintptr_t fcn) { iFli_t fn = (iFli_t)fcn; R_RAX=(int32_t)fn((intptr_t)R_RDI, (int32_t)R_RSI); } -void iFlp(x64emu_t *emu, uintptr_t fcn) { iFlp_t fn = (iFlp_t)fcn; R_RAX=(int32_t)fn((intptr_t)R_RDI, (void*)R_RSI); } -void iFLi(x64emu_t *emu, uintptr_t fcn) { iFLi_t fn = (iFLi_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (int32_t)R_RSI); } -void iFLu(x64emu_t *emu, uintptr_t fcn) { iFLu_t fn = (iFLu_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (uint32_t)R_RSI); } -void iFLL(x64emu_t *emu, uintptr_t fcn) { iFLL_t fn = (iFLL_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (uintptr_t)R_RSI); } -void iFLp(x64emu_t *emu, uintptr_t fcn) { iFLp_t fn = (iFLp_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (void*)R_RSI); } -void iFpw(x64emu_t *emu, uintptr_t fcn) { iFpw_t fn = (iFpw_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int16_t)R_RSI); } -void iFpi(x64emu_t *emu, uintptr_t fcn) { iFpi_t fn = (iFpi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI); } -void iFpI(x64emu_t *emu, uintptr_t fcn) { iFpI_t fn = (iFpI_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int64_t)R_RSI); } -void iFpC(x64emu_t *emu, uintptr_t fcn) { iFpC_t fn = (iFpC_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI); } -void iFpW(x64emu_t *emu, uintptr_t fcn) { iFpW_t fn = (iFpW_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint16_t)R_RSI); } -void iFpu(x64emu_t *emu, uintptr_t fcn) { iFpu_t fn = (iFpu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI); } -void iFpU(x64emu_t *emu, uintptr_t fcn) { iFpU_t fn = (iFpU_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI); } -void iFpf(x64emu_t *emu, uintptr_t fcn) { iFpf_t fn = (iFpf_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, emu->xmm[0].f[0]); } -void iFpd(x64emu_t *emu, uintptr_t fcn) { iFpd_t fn = (iFpd_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, emu->xmm[0].d[0]); } -void iFpl(x64emu_t *emu, uintptr_t fcn) { iFpl_t fn = (iFpl_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (intptr_t)R_RSI); } -void iFpL(x64emu_t *emu, uintptr_t fcn) { iFpL_t fn = (iFpL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI); } -void iFpp(x64emu_t *emu, uintptr_t fcn) { iFpp_t fn = (iFpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI); } -void iFpO(x64emu_t *emu, uintptr_t fcn) { iFpO_t fn = (iFpO_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, of_convert((int32_t)R_RSI)); } -void iFSi(x64emu_t *emu, uintptr_t fcn) { iFSi_t fn = (iFSi_t)fcn; R_RAX=(int32_t)fn(io_convert((void*)R_RDI), (int32_t)R_RSI); } -void IFEi(x64emu_t *emu, uintptr_t fcn) { IFEi_t fn = (IFEi_t)fcn; R_RAX=(int64_t)fn(emu, (int32_t)R_RDI); } -void IFEf(x64emu_t *emu, uintptr_t fcn) { IFEf_t fn = (IFEf_t)fcn; R_RAX=(int64_t)fn(emu, emu->xmm[0].f[0]); } -void IFEd(x64emu_t *emu, uintptr_t fcn) { IFEd_t fn = (IFEd_t)fcn; R_RAX=(int64_t)fn(emu, emu->xmm[0].d[0]); } -void IFEp(x64emu_t *emu, uintptr_t fcn) { IFEp_t fn = (IFEp_t)fcn; R_RAX=(int64_t)fn(emu, (void*)R_RDI); } -void IFip(x64emu_t *emu, uintptr_t fcn) { IFip_t fn = (IFip_t)fcn; R_RAX=(int64_t)fn((int32_t)R_RDI, (void*)R_RSI); } -void IFII(x64emu_t *emu, uintptr_t fcn) { IFII_t fn = (IFII_t)fcn; R_RAX=(int64_t)fn((int64_t)R_RDI, (int64_t)R_RSI); } -void IFpi(x64emu_t *emu, uintptr_t fcn) { IFpi_t fn = (IFpi_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (int32_t)R_RSI); } -void IFpu(x64emu_t *emu, uintptr_t fcn) { IFpu_t fn = (IFpu_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (uint32_t)R_RSI); } -void IFpd(x64emu_t *emu, uintptr_t fcn) { IFpd_t fn = (IFpd_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, emu->xmm[0].d[0]); } -void IFpp(x64emu_t *emu, uintptr_t fcn) { IFpp_t fn = (IFpp_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI); } +void cFpi(x64emu_t *emu, uintptr_t fcn) { cFpi_t fn = (cFpi_t)fcn; R_RAX=(uint8_t)fn((void*)R_RDI, (int32_t)R_RSI); } +void cFpp(x64emu_t *emu, uintptr_t fcn) { cFpp_t fn = (cFpp_t)fcn; R_RAX=(uint8_t)fn((void*)R_RDI, (void*)R_RSI); } +void wFpi(x64emu_t *emu, uintptr_t fcn) { wFpi_t fn = (wFpi_t)fcn; R_RAX=(uint16_t)fn((void*)R_RDI, (int32_t)R_RSI); } +void iFEi(x64emu_t *emu, uintptr_t fcn) { iFEi_t fn = (iFEi_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI); } +void iFEf(x64emu_t *emu, uintptr_t fcn) { iFEf_t fn = (iFEf_t)fcn; R_RAX=(uint32_t)fn(emu, emu->xmm[0].f[0]); } +void iFEd(x64emu_t *emu, uintptr_t fcn) { iFEd_t fn = (iFEd_t)fcn; R_RAX=(uint32_t)fn(emu, emu->xmm[0].d[0]); } +void iFEL(x64emu_t *emu, uintptr_t fcn) { iFEL_t fn = (iFEL_t)fcn; R_RAX=(uint32_t)fn(emu, (uintptr_t)R_RDI); } +void iFEp(x64emu_t *emu, uintptr_t fcn) { iFEp_t fn = (iFEp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI); } +void iFwp(x64emu_t *emu, uintptr_t fcn) { iFwp_t fn = (iFwp_t)fcn; R_RAX=(uint32_t)fn((int16_t)R_RDI, (void*)R_RSI); } +void iFii(x64emu_t *emu, uintptr_t fcn) { iFii_t fn = (iFii_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI); } +void iFiI(x64emu_t *emu, uintptr_t fcn) { iFiI_t fn = (iFiI_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int64_t)R_RSI); } +void iFiC(x64emu_t *emu, uintptr_t fcn) { iFiC_t fn = (iFiC_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint8_t)R_RSI); } +void iFiu(x64emu_t *emu, uintptr_t fcn) { iFiu_t fn = (iFiu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI); } +void iFiU(x64emu_t *emu, uintptr_t fcn) { iFiU_t fn = (iFiU_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint64_t)R_RSI); } +void iFil(x64emu_t *emu, uintptr_t fcn) { iFil_t fn = (iFil_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI); } +void iFip(x64emu_t *emu, uintptr_t fcn) { iFip_t fn = (iFip_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI); } +void iFiS(x64emu_t *emu, uintptr_t fcn) { iFiS_t fn = (iFiS_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, io_convert((void*)R_RSI)); } +void iFui(x64emu_t *emu, uintptr_t fcn) { iFui_t fn = (iFui_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI); } +void iFuu(x64emu_t *emu, uintptr_t fcn) { iFuu_t fn = (iFuu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI); } +void iFuL(x64emu_t *emu, uintptr_t fcn) { iFuL_t fn = (iFuL_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uintptr_t)R_RSI); } +void iFup(x64emu_t *emu, uintptr_t fcn) { iFup_t fn = (iFup_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI); } +void iFUp(x64emu_t *emu, uintptr_t fcn) { iFUp_t fn = (iFUp_t)fcn; R_RAX=(uint32_t)fn((uint64_t)R_RDI, (void*)R_RSI); } +void iFli(x64emu_t *emu, uintptr_t fcn) { iFli_t fn = (iFli_t)fcn; R_RAX=(uint32_t)fn((intptr_t)R_RDI, (int32_t)R_RSI); } +void iFlp(x64emu_t *emu, uintptr_t fcn) { iFlp_t fn = (iFlp_t)fcn; R_RAX=(uint32_t)fn((intptr_t)R_RDI, (void*)R_RSI); } +void iFLi(x64emu_t *emu, uintptr_t fcn) { iFLi_t fn = (iFLi_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (int32_t)R_RSI); } +void iFLu(x64emu_t *emu, uintptr_t fcn) { iFLu_t fn = (iFLu_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (uint32_t)R_RSI); } +void iFLL(x64emu_t *emu, uintptr_t fcn) { iFLL_t fn = (iFLL_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (uintptr_t)R_RSI); } +void iFLp(x64emu_t *emu, uintptr_t fcn) { iFLp_t fn = (iFLp_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (void*)R_RSI); } +void iFpw(x64emu_t *emu, uintptr_t fcn) { iFpw_t fn = (iFpw_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int16_t)R_RSI); } +void iFpi(x64emu_t *emu, uintptr_t fcn) { iFpi_t fn = (iFpi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI); } +void iFpI(x64emu_t *emu, uintptr_t fcn) { iFpI_t fn = (iFpI_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int64_t)R_RSI); } +void iFpC(x64emu_t *emu, uintptr_t fcn) { iFpC_t fn = (iFpC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI); } +void iFpW(x64emu_t *emu, uintptr_t fcn) { iFpW_t fn = (iFpW_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint16_t)R_RSI); } +void iFpu(x64emu_t *emu, uintptr_t fcn) { iFpu_t fn = (iFpu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI); } +void iFpU(x64emu_t *emu, uintptr_t fcn) { iFpU_t fn = (iFpU_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI); } +void iFpf(x64emu_t *emu, uintptr_t fcn) { iFpf_t fn = (iFpf_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, emu->xmm[0].f[0]); } +void iFpd(x64emu_t *emu, uintptr_t fcn) { iFpd_t fn = (iFpd_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, emu->xmm[0].d[0]); } +void iFpl(x64emu_t *emu, uintptr_t fcn) { iFpl_t fn = (iFpl_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI); } +void iFpL(x64emu_t *emu, uintptr_t fcn) { iFpL_t fn = (iFpL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI); } +void iFpp(x64emu_t *emu, uintptr_t fcn) { iFpp_t fn = (iFpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI); } +void iFpV(x64emu_t *emu, uintptr_t fcn) { iFpV_t fn = (iFpV_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)(R_RSP + 8)); } +void iFpO(x64emu_t *emu, uintptr_t fcn) { iFpO_t fn = (iFpO_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, of_convert((int32_t)R_RSI)); } +void iFpS(x64emu_t *emu, uintptr_t fcn) { iFpS_t fn = (iFpS_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, io_convert((void*)R_RSI)); } +void iFpA(x64emu_t *emu, uintptr_t fcn) { iFpA_t fn = (iFpA_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI); } +void iFSi(x64emu_t *emu, uintptr_t fcn) { iFSi_t fn = (iFSi_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI), (int32_t)R_RSI); } +void iFSp(x64emu_t *emu, uintptr_t fcn) { iFSp_t fn = (iFSp_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI), (void*)R_RSI); } +void IFEf(x64emu_t *emu, uintptr_t fcn) { IFEf_t fn = (IFEf_t)fcn; S_RAX=(int64_t)fn(emu, emu->xmm[0].f[0]); } +void IFEd(x64emu_t *emu, uintptr_t fcn) { IFEd_t fn = (IFEd_t)fcn; S_RAX=(int64_t)fn(emu, emu->xmm[0].d[0]); } +void IFEp(x64emu_t *emu, uintptr_t fcn) { IFEp_t fn = (IFEp_t)fcn; S_RAX=(int64_t)fn(emu, (void*)R_RDI); } +void IFip(x64emu_t *emu, uintptr_t fcn) { IFip_t fn = (IFip_t)fcn; S_RAX=(int64_t)fn((int32_t)R_RDI, (void*)R_RSI); } +void IFpi(x64emu_t *emu, uintptr_t fcn) { IFpi_t fn = (IFpi_t)fcn; S_RAX=(int64_t)fn((void*)R_RDI, (int32_t)R_RSI); } +void IFpu(x64emu_t *emu, uintptr_t fcn) { IFpu_t fn = (IFpu_t)fcn; S_RAX=(int64_t)fn((void*)R_RDI, (uint32_t)R_RSI); } +void IFpd(x64emu_t *emu, uintptr_t fcn) { IFpd_t fn = (IFpd_t)fcn; S_RAX=(int64_t)fn((void*)R_RDI, emu->xmm[0].d[0]); } +void IFpp(x64emu_t *emu, uintptr_t fcn) { IFpp_t fn = (IFpp_t)fcn; S_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI); } void CFip(x64emu_t *emu, uintptr_t fcn) { CFip_t fn = (CFip_t)fcn; R_RAX=(unsigned char)fn((int32_t)R_RDI, (void*)R_RSI); } void CFCi(x64emu_t *emu, uintptr_t fcn) { CFCi_t fn = (CFCi_t)fcn; R_RAX=(unsigned char)fn((uint8_t)R_RDI, (int32_t)R_RSI); } void CFui(x64emu_t *emu, uintptr_t fcn) { CFui_t fn = (CFui_t)fcn; R_RAX=(unsigned char)fn((uint32_t)R_RDI, (int32_t)R_RSI); } void CFuW(x64emu_t *emu, uintptr_t fcn) { CFuW_t fn = (CFuW_t)fcn; R_RAX=(unsigned char)fn((uint32_t)R_RDI, (uint16_t)R_RSI); } void CFuu(x64emu_t *emu, uintptr_t fcn) { CFuu_t fn = (CFuu_t)fcn; R_RAX=(unsigned char)fn((uint32_t)R_RDI, (uint32_t)R_RSI); } -void CFuL(x64emu_t *emu, uintptr_t fcn) { CFuL_t fn = (CFuL_t)fcn; R_RAX=(unsigned char)fn((uint32_t)R_RDI, (uintptr_t)R_RSI); } +void CFuU(x64emu_t *emu, uintptr_t fcn) { CFuU_t fn = (CFuU_t)fcn; R_RAX=(unsigned char)fn((uint32_t)R_RDI, (uint64_t)R_RSI); } void CFpi(x64emu_t *emu, uintptr_t fcn) { CFpi_t fn = (CFpi_t)fcn; R_RAX=(unsigned char)fn((void*)R_RDI, (int32_t)R_RSI); } void CFpu(x64emu_t *emu, uintptr_t fcn) { CFpu_t fn = (CFpu_t)fcn; R_RAX=(unsigned char)fn((void*)R_RDI, (uint32_t)R_RSI); } void CFpL(x64emu_t *emu, uintptr_t fcn) { CFpL_t fn = (CFpL_t)fcn; R_RAX=(unsigned char)fn((void*)R_RDI, (uintptr_t)R_RSI); } @@ -3413,12 +3648,11 @@ void WFpi(x64emu_t *emu, uintptr_t fcn) { WFpi_t fn = (WFpi_t)fcn; R_RAX=(unsign void WFpp(x64emu_t *emu, uintptr_t fcn) { WFpp_t fn = (WFpp_t)fcn; R_RAX=(unsigned short)fn((void*)R_RDI, (void*)R_RSI); } void uFEp(x64emu_t *emu, uintptr_t fcn) { uFEp_t fn = (uFEp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI); } void uFii(x64emu_t *emu, uintptr_t fcn) { uFii_t fn = (uFii_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI); } -void uFiu(x64emu_t *emu, uintptr_t fcn) { uFiu_t fn = (uFiu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI); } -void uFip(x64emu_t *emu, uintptr_t fcn) { uFip_t fn = (uFip_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI); } +void uFiS(x64emu_t *emu, uintptr_t fcn) { uFiS_t fn = (uFiS_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, io_convert((void*)R_RSI)); } void uFui(x64emu_t *emu, uintptr_t fcn) { uFui_t fn = (uFui_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI); } void uFuu(x64emu_t *emu, uintptr_t fcn) { uFuu_t fn = (uFuu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI); } void uFup(x64emu_t *emu, uintptr_t fcn) { uFup_t fn = (uFup_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI); } -void uFuM(x64emu_t *emu, uintptr_t fcn) { uFuM_t fn = (uFuM_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void uFuS(x64emu_t *emu, uintptr_t fcn) { uFuS_t fn = (uFuS_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, io_convert((void*)R_RSI)); } void uFpw(x64emu_t *emu, uintptr_t fcn) { uFpw_t fn = (uFpw_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int16_t)R_RSI); } void uFpi(x64emu_t *emu, uintptr_t fcn) { uFpi_t fn = (uFpi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI); } void uFpC(x64emu_t *emu, uintptr_t fcn) { uFpC_t fn = (uFpC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI); } @@ -3430,6 +3664,7 @@ void uFpL(x64emu_t *emu, uintptr_t fcn) { uFpL_t fn = (uFpL_t)fcn; R_RAX=(uint32 void uFpp(x64emu_t *emu, uintptr_t fcn) { uFpp_t fn = (uFpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI); } void uFbu(x64emu_t *emu, uintptr_t fcn) { uFbu_t fn = (uFbu_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint32_t)R_RSI); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void UFEp(x64emu_t *emu, uintptr_t fcn) { UFEp_t fn = (UFEp_t)fcn; R_RAX=fn(emu, (void*)R_RDI); } +void UFii(x64emu_t *emu, uintptr_t fcn) { UFii_t fn = (UFii_t)fcn; R_RAX=fn((int32_t)R_RDI, (int32_t)R_RSI); } void UFuu(x64emu_t *emu, uintptr_t fcn) { UFuu_t fn = (UFuu_t)fcn; R_RAX=fn((uint32_t)R_RDI, (uint32_t)R_RSI); } void UFUp(x64emu_t *emu, uintptr_t fcn) { UFUp_t fn = (UFUp_t)fcn; R_RAX=fn((uint64_t)R_RDI, (void*)R_RSI); } void UFpi(x64emu_t *emu, uintptr_t fcn) { UFpi_t fn = (UFpi_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI); } @@ -3440,7 +3675,6 @@ void fFEp(x64emu_t *emu, uintptr_t fcn) { fFEp_t fn = (fFEp_t)fcn; emu->xmm[0].f void fFif(x64emu_t *emu, uintptr_t fcn) { fFif_t fn = (fFif_t)fcn; emu->xmm[0].f[0]=fn((int32_t)R_RDI, emu->xmm[0].f[0]); } void fFfi(x64emu_t *emu, uintptr_t fcn) { fFfi_t fn = (fFfi_t)fcn; emu->xmm[0].f[0]=fn(emu->xmm[0].f[0], (int32_t)R_RDI); } void fFff(x64emu_t *emu, uintptr_t fcn) { fFff_t fn = (fFff_t)fcn; emu->xmm[0].f[0]=fn(emu->xmm[0].f[0], emu->xmm[1].f[0]); } -void fFfD(x64emu_t *emu, uintptr_t fcn) { fFfD_t fn = (fFfD_t)fcn; emu->xmm[0].f[0]=fn(emu->xmm[0].f[0], LD2localLD((void*)(R_RSP + 8))); } void fFfp(x64emu_t *emu, uintptr_t fcn) { fFfp_t fn = (fFfp_t)fcn; emu->xmm[0].f[0]=fn(emu->xmm[0].f[0], (void*)R_RDI); } void fFpu(x64emu_t *emu, uintptr_t fcn) { fFpu_t fn = (fFpu_t)fcn; emu->xmm[0].f[0]=fn((void*)R_RDI, (uint32_t)R_RSI); } void fFpp(x64emu_t *emu, uintptr_t fcn) { fFpp_t fn = (fFpp_t)fcn; emu->xmm[0].f[0]=fn((void*)R_RDI, (void*)R_RSI); } @@ -3449,30 +3683,26 @@ void dFEd(x64emu_t *emu, uintptr_t fcn) { dFEd_t fn = (dFEd_t)fcn; emu->xmm[0].d void dFid(x64emu_t *emu, uintptr_t fcn) { dFid_t fn = (dFid_t)fcn; emu->xmm[0].d[0]=fn((int32_t)R_RDI, emu->xmm[0].d[0]); } void dFdi(x64emu_t *emu, uintptr_t fcn) { dFdi_t fn = (dFdi_t)fcn; emu->xmm[0].d[0]=fn(emu->xmm[0].d[0], (int32_t)R_RDI); } void dFdd(x64emu_t *emu, uintptr_t fcn) { dFdd_t fn = (dFdd_t)fcn; emu->xmm[0].d[0]=fn(emu->xmm[0].d[0], emu->xmm[1].d[0]); } -void dFdD(x64emu_t *emu, uintptr_t fcn) { dFdD_t fn = (dFdD_t)fcn; emu->xmm[0].d[0]=fn(emu->xmm[0].d[0], LD2localLD((void*)(R_RSP + 8))); } void dFdp(x64emu_t *emu, uintptr_t fcn) { dFdp_t fn = (dFdp_t)fcn; emu->xmm[0].d[0]=fn(emu->xmm[0].d[0], (void*)R_RDI); } void dFll(x64emu_t *emu, uintptr_t fcn) { dFll_t fn = (dFll_t)fcn; emu->xmm[0].d[0]=fn((intptr_t)R_RDI, (intptr_t)R_RSI); } void dFpi(x64emu_t *emu, uintptr_t fcn) { dFpi_t fn = (dFpi_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (int32_t)R_RSI); } void dFpu(x64emu_t *emu, uintptr_t fcn) { dFpu_t fn = (dFpu_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (uint32_t)R_RSI); } void dFpd(x64emu_t *emu, uintptr_t fcn) { dFpd_t fn = (dFpd_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, emu->xmm[0].d[0]); } void dFpp(x64emu_t *emu, uintptr_t fcn) { dFpp_t fn = (dFpp_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (void*)R_RSI); } -void DFDi(x64emu_t *emu, uintptr_t fcn) { DFDi_t fn = (DFDi_t)fcn; long double ld=fn(LD2localLD((void*)(R_RSP + 8)), (int32_t)R_RDI); fpu_do_push(emu); ST0val = ld; } -void DFDD(x64emu_t *emu, uintptr_t fcn) { DFDD_t fn = (DFDD_t)fcn; long double ld=fn(LD2localLD((void*)(R_RSP + 8)), LD2localLD((void*)(R_RSP + 24))); fpu_do_push(emu); ST0val = ld; } -void DFDp(x64emu_t *emu, uintptr_t fcn) { DFDp_t fn = (DFDp_t)fcn; long double ld=fn(LD2localLD((void*)(R_RSP + 8)), (void*)R_RDI); fpu_do_push(emu); ST0val = ld; } -void DFpp(x64emu_t *emu, uintptr_t fcn) { DFpp_t fn = (DFpp_t)fcn; long double ld=fn((void*)R_RDI, (void*)R_RSI); fpu_do_push(emu); ST0val = ld; } void lFEi(x64emu_t *emu, uintptr_t fcn) { lFEi_t fn = (lFEi_t)fcn; R_RAX=(intptr_t)fn(emu, (int32_t)R_RDI); } void lFii(x64emu_t *emu, uintptr_t fcn) { lFii_t fn = (lFii_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI); } +void lFiL(x64emu_t *emu, uintptr_t fcn) { lFiL_t fn = (lFiL_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (uintptr_t)R_RSI); } void lFip(x64emu_t *emu, uintptr_t fcn) { lFip_t fn = (lFip_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI); } void lFui(x64emu_t *emu, uintptr_t fcn) { lFui_t fn = (lFui_t)fcn; R_RAX=(intptr_t)fn((uint32_t)R_RDI, (int32_t)R_RSI); } void lFll(x64emu_t *emu, uintptr_t fcn) { lFll_t fn = (lFll_t)fcn; R_RAX=(intptr_t)fn((intptr_t)R_RDI, (intptr_t)R_RSI); } void lFpi(x64emu_t *emu, uintptr_t fcn) { lFpi_t fn = (lFpi_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (int32_t)R_RSI); } +void lFpu(x64emu_t *emu, uintptr_t fcn) { lFpu_t fn = (lFpu_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uint32_t)R_RSI); } void lFpd(x64emu_t *emu, uintptr_t fcn) { lFpd_t fn = (lFpd_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, emu->xmm[0].d[0]); } void lFpl(x64emu_t *emu, uintptr_t fcn) { lFpl_t fn = (lFpl_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (intptr_t)R_RSI); } +void lFpL(x64emu_t *emu, uintptr_t fcn) { lFpL_t fn = (lFpL_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI); } void lFpp(x64emu_t *emu, uintptr_t fcn) { lFpp_t fn = (lFpp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI); } void LFEL(x64emu_t *emu, uintptr_t fcn) { LFEL_t fn = (LFEL_t)fcn; R_RAX=(uintptr_t)fn(emu, (uintptr_t)R_RDI); } void LFEp(x64emu_t *emu, uintptr_t fcn) { LFEp_t fn = (LFEp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI); } -void LFii(x64emu_t *emu, uintptr_t fcn) { LFii_t fn = (LFii_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI); } -void LFuu(x64emu_t *emu, uintptr_t fcn) { LFuu_t fn = (LFuu_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI); } void LFUp(x64emu_t *emu, uintptr_t fcn) { LFUp_t fn = (LFUp_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (void*)R_RSI); } void LFLi(x64emu_t *emu, uintptr_t fcn) { LFLi_t fn = (LFLi_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (int32_t)R_RSI); } void LFLL(x64emu_t *emu, uintptr_t fcn) { LFLL_t fn = (LFLL_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (uintptr_t)R_RSI); } @@ -3498,11 +3728,12 @@ void pFdd(x64emu_t *emu, uintptr_t fcn) { pFdd_t fn = (pFdd_t)fcn; R_RAX=(uintpt void pFli(x64emu_t *emu, uintptr_t fcn) { pFli_t fn = (pFli_t)fcn; R_RAX=(uintptr_t)fn((intptr_t)R_RDI, (int32_t)R_RSI); } void pFll(x64emu_t *emu, uintptr_t fcn) { pFll_t fn = (pFll_t)fcn; R_RAX=(uintptr_t)fn((intptr_t)R_RDI, (intptr_t)R_RSI); } void pFlp(x64emu_t *emu, uintptr_t fcn) { pFlp_t fn = (pFlp_t)fcn; R_RAX=(uintptr_t)fn((intptr_t)R_RDI, (void*)R_RSI); } +void pFLc(x64emu_t *emu, uintptr_t fcn) { pFLc_t fn = (pFLc_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (int8_t)R_RSI); } void pFLi(x64emu_t *emu, uintptr_t fcn) { pFLi_t fn = (pFLi_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (int32_t)R_RSI); } -void pFLC(x64emu_t *emu, uintptr_t fcn) { pFLC_t fn = (pFLC_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (uint8_t)R_RSI); } void pFLu(x64emu_t *emu, uintptr_t fcn) { pFLu_t fn = (pFLu_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (uint32_t)R_RSI); } void pFLL(x64emu_t *emu, uintptr_t fcn) { pFLL_t fn = (pFLL_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (uintptr_t)R_RSI); } void pFLp(x64emu_t *emu, uintptr_t fcn) { pFLp_t fn = (pFLp_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (void*)R_RSI); } +void pFpc(x64emu_t *emu, uintptr_t fcn) { pFpc_t fn = (pFpc_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int8_t)R_RSI); } void pFpi(x64emu_t *emu, uintptr_t fcn) { pFpi_t fn = (pFpi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI); } void pFpC(x64emu_t *emu, uintptr_t fcn) { pFpC_t fn = (pFpC_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI); } void pFpW(x64emu_t *emu, uintptr_t fcn) { pFpW_t fn = (pFpW_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint16_t)R_RSI); } @@ -3516,10 +3747,11 @@ void pFSi(x64emu_t *emu, uintptr_t fcn) { pFSi_t fn = (pFSi_t)fcn; R_RAX=(uintpt void pFbC(x64emu_t *emu, uintptr_t fcn) { pFbC_t fn = (pFbC_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (uint8_t)R_RSI); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void pFbu(x64emu_t *emu, uintptr_t fcn) { pFbu_t fn = (pFbu_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (uint32_t)R_RSI); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void pFbp(x64emu_t *emu, uintptr_t fcn) { pFbp_t fn = (pFbp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (void*)R_RSI); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } +void SFip(x64emu_t *emu, uintptr_t fcn) { SFip_t fn = (SFip_t)fcn; R_RAX=(uintptr_t)io_convert_back(fn((int32_t)R_RDI, (void*)R_RSI)); } +void SFpp(x64emu_t *emu, uintptr_t fcn) { SFpp_t fn = (SFpp_t)fcn; R_RAX=(uintptr_t)io_convert_back(fn((void*)R_RDI, (void*)R_RSI)); } void HFII(x64emu_t *emu, uintptr_t fcn) { HFII_t fn = (HFII_t)fcn; unsigned __int128 u128 = fn((int64_t)R_RDI, (int64_t)R_RSI); R_RAX=(u128&0xFFFFFFFFFFFFFFFFL); R_RDX=(u128>>64)&0xFFFFFFFFFFFFFFFFL; } void HFll(x64emu_t *emu, uintptr_t fcn) { HFll_t fn = (HFll_t)fcn; unsigned __int128 u128 = fn((intptr_t)R_RDI, (intptr_t)R_RSI); R_RAX=(u128&0xFFFFFFFFFFFFFFFFL); R_RDX=(u128>>64)&0xFFFFFFFFFFFFFFFFL; } void HFpi(x64emu_t *emu, uintptr_t fcn) { HFpi_t fn = (HFpi_t)fcn; unsigned __int128 u128 = fn((void*)R_RDI, (int32_t)R_RSI); R_RAX=(u128&0xFFFFFFFFFFFFFFFFL); R_RDX=(u128>>64)&0xFFFFFFFFFFFFFFFFL; } -void HFpp(x64emu_t *emu, uintptr_t fcn) { HFpp_t fn = (HFpp_t)fcn; unsigned __int128 u128 = fn((void*)R_RDI, (void*)R_RSI); R_RAX=(u128&0xFFFFFFFFFFFFFFFFL); R_RDX=(u128>>64)&0xFFFFFFFFFFFFFFFFL; } void xFxx(x64emu_t *emu, uintptr_t fcn) { xFxx_t fn = (xFxx_t)fcn; from_complexf(emu, fn(to_complexf(emu, 0), to_complexf(emu, 1))); } void XFXX(x64emu_t *emu, uintptr_t fcn) { XFXX_t fn = (XFXX_t)fcn; from_complex(emu, fn(to_complex(emu, 0), to_complex(emu, 2))); } void iWpi(x64emu_t *emu, uintptr_t fcn) { iWpi_t fn = (iWpi_t)fcn; R_RAX=(int32_t)fn((void*)R_RCX, (int32_t)R_RDX); } @@ -3539,16 +3771,16 @@ void vFwww(x64emu_t *emu, uintptr_t fcn) { vFwww_t fn = (vFwww_t)fcn; fn((int16_ void vFiii(x64emu_t *emu, uintptr_t fcn) { vFiii_t fn = (vFiii_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } void vFiif(x64emu_t *emu, uintptr_t fcn) { vFiif_t fn = (vFiif_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, emu->xmm[0].f[0]); } void vFiip(x64emu_t *emu, uintptr_t fcn) { vFiip_t fn = (vFiip_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void vFiII(x64emu_t *emu, uintptr_t fcn) { vFiII_t fn = (vFiII_t)fcn; fn((int32_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX); } void vFiui(x64emu_t *emu, uintptr_t fcn) { vFiui_t fn = (vFiui_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } void vFiuu(x64emu_t *emu, uintptr_t fcn) { vFiuu_t fn = (vFiuu_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX); } -void vFiuU(x64emu_t *emu, uintptr_t fcn) { vFiuU_t fn = (vFiuU_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint64_t)R_RDX); } void vFiup(x64emu_t *emu, uintptr_t fcn) { vFiup_t fn = (vFiup_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } +void vFiUU(x64emu_t *emu, uintptr_t fcn) { vFiUU_t fn = (vFiUU_t)fcn; fn((int32_t)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX); } void vFiff(x64emu_t *emu, uintptr_t fcn) { vFiff_t fn = (vFiff_t)fcn; fn((int32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0]); } void vFidd(x64emu_t *emu, uintptr_t fcn) { vFidd_t fn = (vFidd_t)fcn; fn((int32_t)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0]); } void vFilu(x64emu_t *emu, uintptr_t fcn) { vFilu_t fn = (vFilu_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (uint32_t)R_RDX); } void vFill(x64emu_t *emu, uintptr_t fcn) { vFill_t fn = (vFill_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX); } void vFilp(x64emu_t *emu, uintptr_t fcn) { vFilp_t fn = (vFilp_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (void*)R_RDX); } -void vFiLL(x64emu_t *emu, uintptr_t fcn) { vFiLL_t fn = (vFiLL_t)fcn; fn((int32_t)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); } void vFipi(x64emu_t *emu, uintptr_t fcn) { vFipi_t fn = (vFipi_t)fcn; fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void vFipu(x64emu_t *emu, uintptr_t fcn) { vFipu_t fn = (vFipu_t)fcn; fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } void vFipL(x64emu_t *emu, uintptr_t fcn) { vFipL_t fn = (vFipL_t)fcn; fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } @@ -3558,13 +3790,13 @@ void vFWWW(x64emu_t *emu, uintptr_t fcn) { vFWWW_t fn = (vFWWW_t)fcn; fn((uint16 void vFucc(x64emu_t *emu, uintptr_t fcn) { vFucc_t fn = (vFucc_t)fcn; fn((uint32_t)R_RDI, (int8_t)R_RSI, (int8_t)R_RDX); } void vFuww(x64emu_t *emu, uintptr_t fcn) { vFuww_t fn = (vFuww_t)fcn; fn((uint32_t)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX); } void vFuii(x64emu_t *emu, uintptr_t fcn) { vFuii_t fn = (vFuii_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } +void vFuiI(x64emu_t *emu, uintptr_t fcn) { vFuiI_t fn = (vFuiI_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int64_t)R_RDX); } void vFuiu(x64emu_t *emu, uintptr_t fcn) { vFuiu_t fn = (vFuiu_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX); } void vFuiU(x64emu_t *emu, uintptr_t fcn) { vFuiU_t fn = (vFuiU_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX); } void vFuif(x64emu_t *emu, uintptr_t fcn) { vFuif_t fn = (vFuif_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, emu->xmm[0].f[0]); } void vFuid(x64emu_t *emu, uintptr_t fcn) { vFuid_t fn = (vFuid_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, emu->xmm[0].d[0]); } -void vFuil(x64emu_t *emu, uintptr_t fcn) { vFuil_t fn = (vFuil_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX); } -void vFuiL(x64emu_t *emu, uintptr_t fcn) { vFuiL_t fn = (vFuiL_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX); } void vFuip(x64emu_t *emu, uintptr_t fcn) { vFuip_t fn = (vFuip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void vFuII(x64emu_t *emu, uintptr_t fcn) { vFuII_t fn = (vFuII_t)fcn; fn((uint32_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX); } void vFuWW(x64emu_t *emu, uintptr_t fcn) { vFuWW_t fn = (vFuWW_t)fcn; fn((uint32_t)R_RDI, (uint16_t)R_RSI, (uint16_t)R_RDX); } void vFuui(x64emu_t *emu, uintptr_t fcn) { vFuui_t fn = (vFuui_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } void vFuuC(x64emu_t *emu, uintptr_t fcn) { vFuuC_t fn = (vFuuC_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint8_t)R_RDX); } @@ -3572,14 +3804,13 @@ void vFuuu(x64emu_t *emu, uintptr_t fcn) { vFuuu_t fn = (vFuuu_t)fcn; fn((uint32 void vFuuU(x64emu_t *emu, uintptr_t fcn) { vFuuU_t fn = (vFuuU_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint64_t)R_RDX); } void vFuuf(x64emu_t *emu, uintptr_t fcn) { vFuuf_t fn = (vFuuf_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, emu->xmm[0].f[0]); } void vFuud(x64emu_t *emu, uintptr_t fcn) { vFuud_t fn = (vFuud_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, emu->xmm[0].d[0]); } -void vFuuL(x64emu_t *emu, uintptr_t fcn) { vFuuL_t fn = (vFuuL_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX); } void vFuup(x64emu_t *emu, uintptr_t fcn) { vFuup_t fn = (vFuup_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } +void vFuUU(x64emu_t *emu, uintptr_t fcn) { vFuUU_t fn = (vFuUU_t)fcn; fn((uint32_t)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX); } void vFuff(x64emu_t *emu, uintptr_t fcn) { vFuff_t fn = (vFuff_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0]); } void vFufp(x64emu_t *emu, uintptr_t fcn) { vFufp_t fn = (vFufp_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].f[0], (void*)R_RSI); } void vFudd(x64emu_t *emu, uintptr_t fcn) { vFudd_t fn = (vFudd_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0]); } void vFull(x64emu_t *emu, uintptr_t fcn) { vFull_t fn = (vFull_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX); } void vFulp(x64emu_t *emu, uintptr_t fcn) { vFulp_t fn = (vFulp_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (void*)R_RDX); } -void vFuLL(x64emu_t *emu, uintptr_t fcn) { vFuLL_t fn = (vFuLL_t)fcn; fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); } void vFuLp(x64emu_t *emu, uintptr_t fcn) { vFuLp_t fn = (vFuLp_t)fcn; fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } void vFupu(x64emu_t *emu, uintptr_t fcn) { vFupu_t fn = (vFupu_t)fcn; fn((uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } void vFupp(x64emu_t *emu, uintptr_t fcn) { vFupp_t fn = (vFupp_t)fcn; fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } @@ -3594,6 +3825,7 @@ void vFlpp(x64emu_t *emu, uintptr_t fcn) { vFlpp_t fn = (vFlpp_t)fcn; fn((intptr void vFLup(x64emu_t *emu, uintptr_t fcn) { vFLup_t fn = (vFLup_t)fcn; fn((uintptr_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } void vFLpL(x64emu_t *emu, uintptr_t fcn) { vFLpL_t fn = (vFLpL_t)fcn; fn((uintptr_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void vFLpp(x64emu_t *emu, uintptr_t fcn) { vFLpp_t fn = (vFLpp_t)fcn; fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void vFpww(x64emu_t *emu, uintptr_t fcn) { vFpww_t fn = (vFpww_t)fcn; fn((void*)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX); } void vFpic(x64emu_t *emu, uintptr_t fcn) { vFpic_t fn = (vFpic_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int8_t)R_RDX); } void vFpii(x64emu_t *emu, uintptr_t fcn) { vFpii_t fn = (vFpii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } void vFpiI(x64emu_t *emu, uintptr_t fcn) { vFpiI_t fn = (vFpiI_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int64_t)R_RDX); } @@ -3604,13 +3836,16 @@ void vFpif(x64emu_t *emu, uintptr_t fcn) { vFpif_t fn = (vFpif_t)fcn; fn((void*) void vFpid(x64emu_t *emu, uintptr_t fcn) { vFpid_t fn = (vFpid_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, emu->xmm[0].d[0]); } void vFpiL(x64emu_t *emu, uintptr_t fcn) { vFpiL_t fn = (vFpiL_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX); } void vFpip(x64emu_t *emu, uintptr_t fcn) { vFpip_t fn = (vFpip_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void vFpiS(x64emu_t *emu, uintptr_t fcn) { vFpiS_t fn = (vFpiS_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, io_convert((void*)R_RDX)); } void vFpui(x64emu_t *emu, uintptr_t fcn) { vFpui_t fn = (vFpui_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } void vFpuI(x64emu_t *emu, uintptr_t fcn) { vFpuI_t fn = (vFpuI_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (int64_t)R_RDX); } +void vFpuC(x64emu_t *emu, uintptr_t fcn) { vFpuC_t fn = (vFpuC_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (uint8_t)R_RDX); } void vFpuW(x64emu_t *emu, uintptr_t fcn) { vFpuW_t fn = (vFpuW_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (uint16_t)R_RDX); } void vFpuu(x64emu_t *emu, uintptr_t fcn) { vFpuu_t fn = (vFpuu_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX); } void vFpuU(x64emu_t *emu, uintptr_t fcn) { vFpuU_t fn = (vFpuU_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (uint64_t)R_RDX); } void vFpuf(x64emu_t *emu, uintptr_t fcn) { vFpuf_t fn = (vFpuf_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, emu->xmm[0].f[0]); } void vFpud(x64emu_t *emu, uintptr_t fcn) { vFpud_t fn = (vFpud_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, emu->xmm[0].d[0]); } +void vFpul(x64emu_t *emu, uintptr_t fcn) { vFpul_t fn = (vFpul_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX); } void vFpuL(x64emu_t *emu, uintptr_t fcn) { vFpuL_t fn = (vFpuL_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX); } void vFpup(x64emu_t *emu, uintptr_t fcn) { vFpup_t fn = (vFpup_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } void vFpUi(x64emu_t *emu, uintptr_t fcn) { vFpUi_t fn = (vFpUi_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (int32_t)R_RDX); } @@ -3637,120 +3872,130 @@ void vFppl(x64emu_t *emu, uintptr_t fcn) { vFppl_t fn = (vFppl_t)fcn; fn((void*) void vFppL(x64emu_t *emu, uintptr_t fcn) { vFppL_t fn = (vFppL_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void vFppp(x64emu_t *emu, uintptr_t fcn) { vFppp_t fn = (vFppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } void vFppV(x64emu_t *emu, uintptr_t fcn) { vFppV_t fn = (vFppV_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); } -void cFpdp(x64emu_t *emu, uintptr_t fcn) { cFpdp_t fn = (cFpdp_t)fcn; R_RAX=fn((void*)R_RDI, emu->xmm[0].d[0], (void*)R_RSI); } -void wFppp(x64emu_t *emu, uintptr_t fcn) { wFppp_t fn = (wFppp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void iFEiw(x64emu_t *emu, uintptr_t fcn) { iFEiw_t fn = (iFEiw_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int16_t)R_RSI); } -void iFEip(x64emu_t *emu, uintptr_t fcn) { iFEip_t fn = (iFEip_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI); } -void iFEWW(x64emu_t *emu, uintptr_t fcn) { iFEWW_t fn = (iFEWW_t)fcn; R_RAX=(int32_t)fn(emu, (uint16_t)R_RDI, (uint16_t)R_RSI); } -void iFEup(x64emu_t *emu, uintptr_t fcn) { iFEup_t fn = (iFEup_t)fcn; R_RAX=(int32_t)fn(emu, (uint32_t)R_RDI, (void*)R_RSI); } -void iFEUU(x64emu_t *emu, uintptr_t fcn) { iFEUU_t fn = (iFEUU_t)fcn; R_RAX=(int32_t)fn(emu, (uint64_t)R_RDI, (uint64_t)R_RSI); } -void iFELp(x64emu_t *emu, uintptr_t fcn) { iFELp_t fn = (iFELp_t)fcn; R_RAX=(int32_t)fn(emu, (uintptr_t)R_RDI, (void*)R_RSI); } -void iFEpi(x64emu_t *emu, uintptr_t fcn) { iFEpi_t fn = (iFEpi_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI); } -void iFEpU(x64emu_t *emu, uintptr_t fcn) { iFEpU_t fn = (iFEpU_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI); } -void iFEpL(x64emu_t *emu, uintptr_t fcn) { iFEpL_t fn = (iFEpL_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI); } -void iFEpp(x64emu_t *emu, uintptr_t fcn) { iFEpp_t fn = (iFEpp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI); } -void iFEpV(x64emu_t *emu, uintptr_t fcn) { iFEpV_t fn = (iFEpV_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)(R_RSP + 8)); } -void iFEpA(x64emu_t *emu, uintptr_t fcn) { iFEpA_t fn = (iFEpA_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI); } -void iFESp(x64emu_t *emu, uintptr_t fcn) { iFESp_t fn = (iFESp_t)fcn; R_RAX=(int32_t)fn(emu, io_convert((void*)R_RDI), (void*)R_RSI); } -void iFwww(x64emu_t *emu, uintptr_t fcn) { iFwww_t fn = (iFwww_t)fcn; R_RAX=(int32_t)fn((int16_t)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX); } -void iFwpp(x64emu_t *emu, uintptr_t fcn) { iFwpp_t fn = (iFwpp_t)fcn; R_RAX=(int32_t)fn((int16_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void iFiwC(x64emu_t *emu, uintptr_t fcn) { iFiwC_t fn = (iFiwC_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int16_t)R_RSI, (uint8_t)R_RDX); } -void iFiii(x64emu_t *emu, uintptr_t fcn) { iFiii_t fn = (iFiii_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } -void iFiiI(x64emu_t *emu, uintptr_t fcn) { iFiiI_t fn = (iFiiI_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int64_t)R_RDX); } -void iFiiu(x64emu_t *emu, uintptr_t fcn) { iFiiu_t fn = (iFiiu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX); } -void iFiil(x64emu_t *emu, uintptr_t fcn) { iFiil_t fn = (iFiil_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX); } -void iFiip(x64emu_t *emu, uintptr_t fcn) { iFiip_t fn = (iFiip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } -void iFiiO(x64emu_t *emu, uintptr_t fcn) { iFiiO_t fn = (iFiiO_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, of_convert((int32_t)R_RDX)); } -void iFiCC(x64emu_t *emu, uintptr_t fcn) { iFiCC_t fn = (iFiCC_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX); } -void iFiui(x64emu_t *emu, uintptr_t fcn) { iFiui_t fn = (iFiui_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } -void iFiuu(x64emu_t *emu, uintptr_t fcn) { iFiuu_t fn = (iFiuu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX); } -void iFiup(x64emu_t *emu, uintptr_t fcn) { iFiup_t fn = (iFiup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } -void iFill(x64emu_t *emu, uintptr_t fcn) { iFill_t fn = (iFill_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX); } -void iFilp(x64emu_t *emu, uintptr_t fcn) { iFilp_t fn = (iFilp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (void*)R_RDX); } -void iFiLi(x64emu_t *emu, uintptr_t fcn) { iFiLi_t fn = (iFiLi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX); } -void iFiLp(x64emu_t *emu, uintptr_t fcn) { iFiLp_t fn = (iFiLp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } -void iFiLN(x64emu_t *emu, uintptr_t fcn) { iFiLN_t fn = (iFiLN_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } -void iFipi(x64emu_t *emu, uintptr_t fcn) { iFipi_t fn = (iFipi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } -void iFipu(x64emu_t *emu, uintptr_t fcn) { iFipu_t fn = (iFipu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } -void iFipL(x64emu_t *emu, uintptr_t fcn) { iFipL_t fn = (iFipL_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } -void iFipp(x64emu_t *emu, uintptr_t fcn) { iFipp_t fn = (iFipp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void iFipO(x64emu_t *emu, uintptr_t fcn) { iFipO_t fn = (iFipO_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, of_convert((int32_t)R_RDX)); } -void iFCuW(x64emu_t *emu, uintptr_t fcn) { iFCuW_t fn = (iFCuW_t)fcn; R_RAX=(int32_t)fn((uint8_t)R_RDI, (uint32_t)R_RSI, (uint16_t)R_RDX); } -void iFuwp(x64emu_t *emu, uintptr_t fcn) { iFuwp_t fn = (iFuwp_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (int16_t)R_RSI, (void*)R_RDX); } -void iFuip(x64emu_t *emu, uintptr_t fcn) { iFuip_t fn = (iFuip_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } -void iFuWp(x64emu_t *emu, uintptr_t fcn) { iFuWp_t fn = (iFuWp_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uint16_t)R_RSI, (void*)R_RDX); } -void iFuui(x64emu_t *emu, uintptr_t fcn) { iFuui_t fn = (iFuui_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } -void iFuuu(x64emu_t *emu, uintptr_t fcn) { iFuuu_t fn = (iFuuu_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX); } -void iFuup(x64emu_t *emu, uintptr_t fcn) { iFuup_t fn = (iFuup_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } -void iFuLL(x64emu_t *emu, uintptr_t fcn) { iFuLL_t fn = (iFuLL_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); } -void iFuLp(x64emu_t *emu, uintptr_t fcn) { iFuLp_t fn = (iFuLp_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } -void iFupi(x64emu_t *emu, uintptr_t fcn) { iFupi_t fn = (iFupi_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } -void iFupu(x64emu_t *emu, uintptr_t fcn) { iFupu_t fn = (iFupu_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } -void iFupL(x64emu_t *emu, uintptr_t fcn) { iFupL_t fn = (iFupL_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } -void iFupp(x64emu_t *emu, uintptr_t fcn) { iFupp_t fn = (iFupp_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void iFfff(x64emu_t *emu, uintptr_t fcn) { iFfff_t fn = (iFfff_t)fcn; R_RAX=(int32_t)fn(emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0]); } -void iFLip(x64emu_t *emu, uintptr_t fcn) { iFLip_t fn = (iFLip_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } -void iFLpp(x64emu_t *emu, uintptr_t fcn) { iFLpp_t fn = (iFLpp_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void iFpwp(x64emu_t *emu, uintptr_t fcn) { iFpwp_t fn = (iFpwp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int16_t)R_RSI, (void*)R_RDX); } -void iFpii(x64emu_t *emu, uintptr_t fcn) { iFpii_t fn = (iFpii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } -void iFpiI(x64emu_t *emu, uintptr_t fcn) { iFpiI_t fn = (iFpiI_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int64_t)R_RDX); } -void iFpiC(x64emu_t *emu, uintptr_t fcn) { iFpiC_t fn = (iFpiC_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint8_t)R_RDX); } -void iFpiW(x64emu_t *emu, uintptr_t fcn) { iFpiW_t fn = (iFpiW_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint16_t)R_RDX); } -void iFpiu(x64emu_t *emu, uintptr_t fcn) { iFpiu_t fn = (iFpiu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX); } -void iFpiU(x64emu_t *emu, uintptr_t fcn) { iFpiU_t fn = (iFpiU_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX); } -void iFpid(x64emu_t *emu, uintptr_t fcn) { iFpid_t fn = (iFpid_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, emu->xmm[0].d[0]); } -void iFpil(x64emu_t *emu, uintptr_t fcn) { iFpil_t fn = (iFpil_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX); } -void iFpiL(x64emu_t *emu, uintptr_t fcn) { iFpiL_t fn = (iFpiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX); } -void iFpip(x64emu_t *emu, uintptr_t fcn) { iFpip_t fn = (iFpip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } -void iFpIi(x64emu_t *emu, uintptr_t fcn) { iFpIi_t fn = (iFpIi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int64_t)R_RSI, (int32_t)R_RDX); } -void iFpII(x64emu_t *emu, uintptr_t fcn) { iFpII_t fn = (iFpII_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX); } -void iFpCp(x64emu_t *emu, uintptr_t fcn) { iFpCp_t fn = (iFpCp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (void*)R_RDX); } -void iFpWp(x64emu_t *emu, uintptr_t fcn) { iFpWp_t fn = (iFpWp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX); } -void iFpui(x64emu_t *emu, uintptr_t fcn) { iFpui_t fn = (iFpui_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } -void iFpuC(x64emu_t *emu, uintptr_t fcn) { iFpuC_t fn = (iFpuC_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint8_t)R_RDX); } -void iFpuu(x64emu_t *emu, uintptr_t fcn) { iFpuu_t fn = (iFpuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX); } -void iFpuU(x64emu_t *emu, uintptr_t fcn) { iFpuU_t fn = (iFpuU_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint64_t)R_RDX); } -void iFpul(x64emu_t *emu, uintptr_t fcn) { iFpul_t fn = (iFpul_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX); } -void iFpuL(x64emu_t *emu, uintptr_t fcn) { iFpuL_t fn = (iFpuL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX); } -void iFpup(x64emu_t *emu, uintptr_t fcn) { iFpup_t fn = (iFpup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } -void iFpUu(x64emu_t *emu, uintptr_t fcn) { iFpUu_t fn = (iFpUu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX); } -void iFpUU(x64emu_t *emu, uintptr_t fcn) { iFpUU_t fn = (iFpUU_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX); } -void iFpUp(x64emu_t *emu, uintptr_t fcn) { iFpUp_t fn = (iFpUp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX); } -void iFpfu(x64emu_t *emu, uintptr_t fcn) { iFpfu_t fn = (iFpfu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, emu->xmm[0].f[0], (uint32_t)R_RSI); } -void iFpff(x64emu_t *emu, uintptr_t fcn) { iFpff_t fn = (iFpff_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0]); } -void iFpdd(x64emu_t *emu, uintptr_t fcn) { iFpdd_t fn = (iFpdd_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0]); } -void iFpli(x64emu_t *emu, uintptr_t fcn) { iFpli_t fn = (iFpli_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX); } -void iFpll(x64emu_t *emu, uintptr_t fcn) { iFpll_t fn = (iFpll_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX); } -void iFplp(x64emu_t *emu, uintptr_t fcn) { iFplp_t fn = (iFplp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX); } -void iFpLi(x64emu_t *emu, uintptr_t fcn) { iFpLi_t fn = (iFpLi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX); } -void iFpLu(x64emu_t *emu, uintptr_t fcn) { iFpLu_t fn = (iFpLu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX); } -void iFpLl(x64emu_t *emu, uintptr_t fcn) { iFpLl_t fn = (iFpLl_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (intptr_t)R_RDX); } -void iFpLL(x64emu_t *emu, uintptr_t fcn) { iFpLL_t fn = (iFpLL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); } -void iFpLp(x64emu_t *emu, uintptr_t fcn) { iFpLp_t fn = (iFpLp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } -void iFppc(x64emu_t *emu, uintptr_t fcn) { iFppc_t fn = (iFppc_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int8_t)R_RDX); } -void iFppi(x64emu_t *emu, uintptr_t fcn) { iFppi_t fn = (iFppi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } -void iFppI(x64emu_t *emu, uintptr_t fcn) { iFppI_t fn = (iFppI_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX); } -void iFppC(x64emu_t *emu, uintptr_t fcn) { iFppC_t fn = (iFppC_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint8_t)R_RDX); } -void iFppW(x64emu_t *emu, uintptr_t fcn) { iFppW_t fn = (iFppW_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint16_t)R_RDX); } -void iFppu(x64emu_t *emu, uintptr_t fcn) { iFppu_t fn = (iFppu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } -void iFppU(x64emu_t *emu, uintptr_t fcn) { iFppU_t fn = (iFppU_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX); } -void iFppd(x64emu_t *emu, uintptr_t fcn) { iFppd_t fn = (iFppd_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0]); } -void iFppl(x64emu_t *emu, uintptr_t fcn) { iFppl_t fn = (iFppl_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX); } -void iFppL(x64emu_t *emu, uintptr_t fcn) { iFppL_t fn = (iFppL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } -void iFppp(x64emu_t *emu, uintptr_t fcn) { iFppp_t fn = (iFppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void iFpOu(x64emu_t *emu, uintptr_t fcn) { iFpOu_t fn = (iFpOu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, of_convert((int32_t)R_RSI), (uint32_t)R_RDX); } -void iFpOM(x64emu_t *emu, uintptr_t fcn) { iFpOM_t fn = (iFpOM_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, of_convert((int32_t)R_RSI), (void*)R_RDX, (void*)R_RCX); } -void iFSpL(x64emu_t *emu, uintptr_t fcn) { iFSpL_t fn = (iFSpL_t)fcn; R_RAX=(int32_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (uintptr_t)R_RDX); } -void iFbpp(x64emu_t *emu, uintptr_t fcn) { iFbpp_t fn = (iFbpp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(int32_t)fn(aligned_xcb, (void*)R_RSI, (void*)R_RDX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } -void IFiIi(x64emu_t *emu, uintptr_t fcn) { IFiIi_t fn = (IFiIi_t)fcn; R_RAX=(int64_t)fn((int32_t)R_RDI, (int64_t)R_RSI, (int32_t)R_RDX); } -void IFpIi(x64emu_t *emu, uintptr_t fcn) { IFpIi_t fn = (IFpIi_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (int64_t)R_RSI, (int32_t)R_RDX); } -void IFppi(x64emu_t *emu, uintptr_t fcn) { IFppi_t fn = (IFppi_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } -void IFppI(x64emu_t *emu, uintptr_t fcn) { IFppI_t fn = (IFppI_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX); } -void IFSIi(x64emu_t *emu, uintptr_t fcn) { IFSIi_t fn = (IFSIi_t)fcn; R_RAX=(int64_t)fn(io_convert((void*)R_RDI), (int64_t)R_RSI, (int32_t)R_RDX); } +void vFpHi(x64emu_t *emu, uintptr_t fcn) { vFpHi_t fn = (vFpHi_t)fcn; fn((void*)R_RDI, (unsigned __int128)R_RSI + ((unsigned __int128)R_RDX << 64), (int32_t)R_RCX); } +void vFSpL(x64emu_t *emu, uintptr_t fcn) { vFSpL_t fn = (vFSpL_t)fcn; fn(io_convert((void*)R_RDI), (void*)R_RSI, (uintptr_t)R_RDX); } +void cFpdp(x64emu_t *emu, uintptr_t fcn) { cFpdp_t fn = (cFpdp_t)fcn; R_RAX=(uint8_t)fn((void*)R_RDI, emu->xmm[0].d[0], (void*)R_RSI); } +void wFppp(x64emu_t *emu, uintptr_t fcn) { wFppp_t fn = (wFppp_t)fcn; R_RAX=(uint16_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFEiw(x64emu_t *emu, uintptr_t fcn) { iFEiw_t fn = (iFEiw_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int16_t)R_RSI); } +void iFEip(x64emu_t *emu, uintptr_t fcn) { iFEip_t fn = (iFEip_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI); } +void iFEWW(x64emu_t *emu, uintptr_t fcn) { iFEWW_t fn = (iFEWW_t)fcn; R_RAX=(uint32_t)fn(emu, (uint16_t)R_RDI, (uint16_t)R_RSI); } +void iFEup(x64emu_t *emu, uintptr_t fcn) { iFEup_t fn = (iFEup_t)fcn; R_RAX=(uint32_t)fn(emu, (uint32_t)R_RDI, (void*)R_RSI); } +void iFEUU(x64emu_t *emu, uintptr_t fcn) { iFEUU_t fn = (iFEUU_t)fcn; R_RAX=(uint32_t)fn(emu, (uint64_t)R_RDI, (uint64_t)R_RSI); } +void iFEpi(x64emu_t *emu, uintptr_t fcn) { iFEpi_t fn = (iFEpi_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI); } +void iFEpU(x64emu_t *emu, uintptr_t fcn) { iFEpU_t fn = (iFEpU_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI); } +void iFEpL(x64emu_t *emu, uintptr_t fcn) { iFEpL_t fn = (iFEpL_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI); } +void iFEpp(x64emu_t *emu, uintptr_t fcn) { iFEpp_t fn = (iFEpp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI); } +void iFEpV(x64emu_t *emu, uintptr_t fcn) { iFEpV_t fn = (iFEpV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)(R_RSP + 8)); } +void iFEpA(x64emu_t *emu, uintptr_t fcn) { iFEpA_t fn = (iFEpA_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI); } +void iFESp(x64emu_t *emu, uintptr_t fcn) { iFESp_t fn = (iFESp_t)fcn; R_RAX=(uint32_t)fn(emu, io_convert((void*)R_RDI), (void*)R_RSI); } +void iFwww(x64emu_t *emu, uintptr_t fcn) { iFwww_t fn = (iFwww_t)fcn; R_RAX=(uint32_t)fn((int16_t)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX); } +void iFwpp(x64emu_t *emu, uintptr_t fcn) { iFwpp_t fn = (iFwpp_t)fcn; R_RAX=(uint32_t)fn((int16_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFiwC(x64emu_t *emu, uintptr_t fcn) { iFiwC_t fn = (iFiwC_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int16_t)R_RSI, (uint8_t)R_RDX); } +void iFiii(x64emu_t *emu, uintptr_t fcn) { iFiii_t fn = (iFiii_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } +void iFiiI(x64emu_t *emu, uintptr_t fcn) { iFiiI_t fn = (iFiiI_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int64_t)R_RDX); } +void iFiiu(x64emu_t *emu, uintptr_t fcn) { iFiiu_t fn = (iFiiu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX); } +void iFiil(x64emu_t *emu, uintptr_t fcn) { iFiil_t fn = (iFiil_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX); } +void iFiip(x64emu_t *emu, uintptr_t fcn) { iFiip_t fn = (iFiip_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void iFiiO(x64emu_t *emu, uintptr_t fcn) { iFiiO_t fn = (iFiiO_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, of_convert((int32_t)R_RDX)); } +void iFiII(x64emu_t *emu, uintptr_t fcn) { iFiII_t fn = (iFiII_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX); } +void iFiCC(x64emu_t *emu, uintptr_t fcn) { iFiCC_t fn = (iFiCC_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX); } +void iFiui(x64emu_t *emu, uintptr_t fcn) { iFiui_t fn = (iFiui_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } +void iFiuu(x64emu_t *emu, uintptr_t fcn) { iFiuu_t fn = (iFiuu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX); } +void iFiup(x64emu_t *emu, uintptr_t fcn) { iFiup_t fn = (iFiup_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } +void iFill(x64emu_t *emu, uintptr_t fcn) { iFill_t fn = (iFill_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX); } +void iFilp(x64emu_t *emu, uintptr_t fcn) { iFilp_t fn = (iFilp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (void*)R_RDX); } +void iFiLi(x64emu_t *emu, uintptr_t fcn) { iFiLi_t fn = (iFiLi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX); } +void iFiLp(x64emu_t *emu, uintptr_t fcn) { iFiLp_t fn = (iFiLp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } +void iFiLN(x64emu_t *emu, uintptr_t fcn) { iFiLN_t fn = (iFiLN_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } +void iFipi(x64emu_t *emu, uintptr_t fcn) { iFipi_t fn = (iFipi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } +void iFipu(x64emu_t *emu, uintptr_t fcn) { iFipu_t fn = (iFipu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } +void iFipL(x64emu_t *emu, uintptr_t fcn) { iFipL_t fn = (iFipL_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } +void iFipp(x64emu_t *emu, uintptr_t fcn) { iFipp_t fn = (iFipp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFipO(x64emu_t *emu, uintptr_t fcn) { iFipO_t fn = (iFipO_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, of_convert((int32_t)R_RDX)); } +void iFCuW(x64emu_t *emu, uintptr_t fcn) { iFCuW_t fn = (iFCuW_t)fcn; R_RAX=(uint32_t)fn((uint8_t)R_RDI, (uint32_t)R_RSI, (uint16_t)R_RDX); } +void iFuwp(x64emu_t *emu, uintptr_t fcn) { iFuwp_t fn = (iFuwp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int16_t)R_RSI, (void*)R_RDX); } +void iFuip(x64emu_t *emu, uintptr_t fcn) { iFuip_t fn = (iFuip_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void iFuWp(x64emu_t *emu, uintptr_t fcn) { iFuWp_t fn = (iFuWp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint16_t)R_RSI, (void*)R_RDX); } +void iFuui(x64emu_t *emu, uintptr_t fcn) { iFuui_t fn = (iFuui_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } +void iFuuu(x64emu_t *emu, uintptr_t fcn) { iFuuu_t fn = (iFuuu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX); } +void iFuup(x64emu_t *emu, uintptr_t fcn) { iFuup_t fn = (iFuup_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } +void iFuLL(x64emu_t *emu, uintptr_t fcn) { iFuLL_t fn = (iFuLL_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); } +void iFuLp(x64emu_t *emu, uintptr_t fcn) { iFuLp_t fn = (iFuLp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } +void iFupi(x64emu_t *emu, uintptr_t fcn) { iFupi_t fn = (iFupi_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } +void iFupu(x64emu_t *emu, uintptr_t fcn) { iFupu_t fn = (iFupu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } +void iFupL(x64emu_t *emu, uintptr_t fcn) { iFupL_t fn = (iFupL_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } +void iFupp(x64emu_t *emu, uintptr_t fcn) { iFupp_t fn = (iFupp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFfff(x64emu_t *emu, uintptr_t fcn) { iFfff_t fn = (iFfff_t)fcn; R_RAX=(uint32_t)fn(emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0]); } +void iFLip(x64emu_t *emu, uintptr_t fcn) { iFLip_t fn = (iFLip_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void iFLpL(x64emu_t *emu, uintptr_t fcn) { iFLpL_t fn = (iFLpL_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } +void iFLpp(x64emu_t *emu, uintptr_t fcn) { iFLpp_t fn = (iFLpp_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFpwp(x64emu_t *emu, uintptr_t fcn) { iFpwp_t fn = (iFpwp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int16_t)R_RSI, (void*)R_RDX); } +void iFpii(x64emu_t *emu, uintptr_t fcn) { iFpii_t fn = (iFpii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } +void iFpiI(x64emu_t *emu, uintptr_t fcn) { iFpiI_t fn = (iFpiI_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int64_t)R_RDX); } +void iFpiC(x64emu_t *emu, uintptr_t fcn) { iFpiC_t fn = (iFpiC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint8_t)R_RDX); } +void iFpiW(x64emu_t *emu, uintptr_t fcn) { iFpiW_t fn = (iFpiW_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint16_t)R_RDX); } +void iFpiu(x64emu_t *emu, uintptr_t fcn) { iFpiu_t fn = (iFpiu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX); } +void iFpiU(x64emu_t *emu, uintptr_t fcn) { iFpiU_t fn = (iFpiU_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX); } +void iFpid(x64emu_t *emu, uintptr_t fcn) { iFpid_t fn = (iFpid_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, emu->xmm[0].d[0]); } +void iFpil(x64emu_t *emu, uintptr_t fcn) { iFpil_t fn = (iFpil_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX); } +void iFpiL(x64emu_t *emu, uintptr_t fcn) { iFpiL_t fn = (iFpiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX); } +void iFpip(x64emu_t *emu, uintptr_t fcn) { iFpip_t fn = (iFpip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void iFpII(x64emu_t *emu, uintptr_t fcn) { iFpII_t fn = (iFpII_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX); } +void iFpCp(x64emu_t *emu, uintptr_t fcn) { iFpCp_t fn = (iFpCp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (void*)R_RDX); } +void iFpWp(x64emu_t *emu, uintptr_t fcn) { iFpWp_t fn = (iFpWp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX); } +void iFpui(x64emu_t *emu, uintptr_t fcn) { iFpui_t fn = (iFpui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } +void iFpuC(x64emu_t *emu, uintptr_t fcn) { iFpuC_t fn = (iFpuC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint8_t)R_RDX); } +void iFpuu(x64emu_t *emu, uintptr_t fcn) { iFpuu_t fn = (iFpuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX); } +void iFpuU(x64emu_t *emu, uintptr_t fcn) { iFpuU_t fn = (iFpuU_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint64_t)R_RDX); } +void iFpul(x64emu_t *emu, uintptr_t fcn) { iFpul_t fn = (iFpul_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX); } +void iFpuL(x64emu_t *emu, uintptr_t fcn) { iFpuL_t fn = (iFpuL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX); } +void iFpup(x64emu_t *emu, uintptr_t fcn) { iFpup_t fn = (iFpup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } +void iFpUu(x64emu_t *emu, uintptr_t fcn) { iFpUu_t fn = (iFpUu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX); } +void iFpUU(x64emu_t *emu, uintptr_t fcn) { iFpUU_t fn = (iFpUU_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX); } +void iFpUp(x64emu_t *emu, uintptr_t fcn) { iFpUp_t fn = (iFpUp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX); } +void iFpfu(x64emu_t *emu, uintptr_t fcn) { iFpfu_t fn = (iFpfu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, emu->xmm[0].f[0], (uint32_t)R_RSI); } +void iFpff(x64emu_t *emu, uintptr_t fcn) { iFpff_t fn = (iFpff_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0]); } +void iFpdd(x64emu_t *emu, uintptr_t fcn) { iFpdd_t fn = (iFpdd_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0]); } +void iFpli(x64emu_t *emu, uintptr_t fcn) { iFpli_t fn = (iFpli_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX); } +void iFpll(x64emu_t *emu, uintptr_t fcn) { iFpll_t fn = (iFpll_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX); } +void iFplp(x64emu_t *emu, uintptr_t fcn) { iFplp_t fn = (iFplp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX); } +void iFpLi(x64emu_t *emu, uintptr_t fcn) { iFpLi_t fn = (iFpLi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX); } +void iFpLu(x64emu_t *emu, uintptr_t fcn) { iFpLu_t fn = (iFpLu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX); } +void iFpLl(x64emu_t *emu, uintptr_t fcn) { iFpLl_t fn = (iFpLl_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (intptr_t)R_RDX); } +void iFpLL(x64emu_t *emu, uintptr_t fcn) { iFpLL_t fn = (iFpLL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); } +void iFpLp(x64emu_t *emu, uintptr_t fcn) { iFpLp_t fn = (iFpLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } +void iFppc(x64emu_t *emu, uintptr_t fcn) { iFppc_t fn = (iFppc_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int8_t)R_RDX); } +void iFppi(x64emu_t *emu, uintptr_t fcn) { iFppi_t fn = (iFppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } +void iFppI(x64emu_t *emu, uintptr_t fcn) { iFppI_t fn = (iFppI_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX); } +void iFppC(x64emu_t *emu, uintptr_t fcn) { iFppC_t fn = (iFppC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint8_t)R_RDX); } +void iFppW(x64emu_t *emu, uintptr_t fcn) { iFppW_t fn = (iFppW_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint16_t)R_RDX); } +void iFppu(x64emu_t *emu, uintptr_t fcn) { iFppu_t fn = (iFppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } +void iFppU(x64emu_t *emu, uintptr_t fcn) { iFppU_t fn = (iFppU_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX); } +void iFppd(x64emu_t *emu, uintptr_t fcn) { iFppd_t fn = (iFppd_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0]); } +void iFppl(x64emu_t *emu, uintptr_t fcn) { iFppl_t fn = (iFppl_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX); } +void iFppL(x64emu_t *emu, uintptr_t fcn) { iFppL_t fn = (iFppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } +void iFppp(x64emu_t *emu, uintptr_t fcn) { iFppp_t fn = (iFppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFpOi(x64emu_t *emu, uintptr_t fcn) { iFpOi_t fn = (iFpOi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, of_convert((int32_t)R_RSI), (int32_t)R_RDX); } +void iFpOu(x64emu_t *emu, uintptr_t fcn) { iFpOu_t fn = (iFpOu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, of_convert((int32_t)R_RSI), (uint32_t)R_RDX); } +void iFpSu(x64emu_t *emu, uintptr_t fcn) { iFpSu_t fn = (iFpSu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, io_convert((void*)R_RSI), (uint32_t)R_RDX); } +void iFpSp(x64emu_t *emu, uintptr_t fcn) { iFpSp_t fn = (iFpSp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, io_convert((void*)R_RSI), (void*)R_RDX); } +void iFSIi(x64emu_t *emu, uintptr_t fcn) { iFSIi_t fn = (iFSIi_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI), (int64_t)R_RSI, (int32_t)R_RDX); } +void iFSli(x64emu_t *emu, uintptr_t fcn) { iFSli_t fn = (iFSli_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI), (intptr_t)R_RSI, (int32_t)R_RDX); } +void iFSpi(x64emu_t *emu, uintptr_t fcn) { iFSpi_t fn = (iFSpi_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (int32_t)R_RDX); } +void iFSpL(x64emu_t *emu, uintptr_t fcn) { iFSpL_t fn = (iFSpL_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (uintptr_t)R_RDX); } +void iFSpp(x64emu_t *emu, uintptr_t fcn) { iFSpp_t fn = (iFSpp_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (void*)R_RDX); } +void iFSpA(x64emu_t *emu, uintptr_t fcn) { iFSpA_t fn = (iFSpA_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (void*)R_RDX); } +void iFbpp(x64emu_t *emu, uintptr_t fcn) { iFbpp_t fn = (iFbpp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (void*)R_RSI, (void*)R_RDX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } +void IFiIi(x64emu_t *emu, uintptr_t fcn) { IFiIi_t fn = (IFiIi_t)fcn; S_RAX=(int64_t)fn((int32_t)R_RDI, (int64_t)R_RSI, (int32_t)R_RDX); } +void IFpIi(x64emu_t *emu, uintptr_t fcn) { IFpIi_t fn = (IFpIi_t)fcn; S_RAX=(int64_t)fn((void*)R_RDI, (int64_t)R_RSI, (int32_t)R_RDX); } +void IFppi(x64emu_t *emu, uintptr_t fcn) { IFppi_t fn = (IFppi_t)fcn; S_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } +void IFppI(x64emu_t *emu, uintptr_t fcn) { IFppI_t fn = (IFppI_t)fcn; S_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX); } +void IFSIi(x64emu_t *emu, uintptr_t fcn) { IFSIi_t fn = (IFSIi_t)fcn; S_RAX=(int64_t)fn(io_convert((void*)R_RDI), (int64_t)R_RSI, (int32_t)R_RDX); } void CFipp(x64emu_t *emu, uintptr_t fcn) { CFipp_t fn = (CFipp_t)fcn; R_RAX=(unsigned char)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void CFuUu(x64emu_t *emu, uintptr_t fcn) { CFuUu_t fn = (CFuUu_t)fcn; R_RAX=(unsigned char)fn((uint32_t)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX); } void CFuff(x64emu_t *emu, uintptr_t fcn) { CFuff_t fn = (CFuff_t)fcn; R_RAX=(unsigned char)fn((uint32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0]); } -void CFuLu(x64emu_t *emu, uintptr_t fcn) { CFuLu_t fn = (CFuLu_t)fcn; R_RAX=(unsigned char)fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX); } void CFppp(x64emu_t *emu, uintptr_t fcn) { CFppp_t fn = (CFppp_t)fcn; R_RAX=(unsigned char)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void WFpip(x64emu_t *emu, uintptr_t fcn) { WFpip_t fn = (WFpip_t)fcn; R_RAX=(unsigned short)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } void WFppp(x64emu_t *emu, uintptr_t fcn) { WFppp_t fn = (WFppp_t)fcn; R_RAX=(unsigned short)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } void uFEpW(x64emu_t *emu, uintptr_t fcn) { uFEpW_t fn = (uFEpW_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint16_t)R_RSI); } void uFEpu(x64emu_t *emu, uintptr_t fcn) { uFEpu_t fn = (uFEpu_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI); } @@ -3767,6 +4012,7 @@ void uFuup(x64emu_t *emu, uintptr_t fcn) { uFuup_t fn = (uFuup_t)fcn; R_RAX=(uin void uFufp(x64emu_t *emu, uintptr_t fcn) { uFufp_t fn = (uFufp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, emu->xmm[0].f[0], (void*)R_RSI); } void uFupu(x64emu_t *emu, uintptr_t fcn) { uFupu_t fn = (uFupu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } void uFupp(x64emu_t *emu, uintptr_t fcn) { uFupp_t fn = (uFupp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void uFuNN(x64emu_t *emu, uintptr_t fcn) { uFuNN_t fn = (uFuNN_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } void uFpii(x64emu_t *emu, uintptr_t fcn) { uFpii_t fn = (uFpii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } void uFpiu(x64emu_t *emu, uintptr_t fcn) { uFpiu_t fn = (uFpiu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX); } void uFpip(x64emu_t *emu, uintptr_t fcn) { uFpip_t fn = (uFpip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } @@ -3777,10 +4023,12 @@ void uFpWf(x64emu_t *emu, uintptr_t fcn) { uFpWf_t fn = (uFpWf_t)fcn; R_RAX=(uin void uFpWp(x64emu_t *emu, uintptr_t fcn) { uFpWp_t fn = (uFpWp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX); } void uFpui(x64emu_t *emu, uintptr_t fcn) { uFpui_t fn = (uFpui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } void uFpuu(x64emu_t *emu, uintptr_t fcn) { uFpuu_t fn = (uFpuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX); } +void uFpuU(x64emu_t *emu, uintptr_t fcn) { uFpuU_t fn = (uFpuU_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint64_t)R_RDX); } void uFpuL(x64emu_t *emu, uintptr_t fcn) { uFpuL_t fn = (uFpuL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX); } void uFpup(x64emu_t *emu, uintptr_t fcn) { uFpup_t fn = (uFpup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } void uFpfu(x64emu_t *emu, uintptr_t fcn) { uFpfu_t fn = (uFpfu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, emu->xmm[0].f[0], (uint32_t)R_RSI); } void uFpli(x64emu_t *emu, uintptr_t fcn) { uFpli_t fn = (uFpli_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX); } +void uFplu(x64emu_t *emu, uintptr_t fcn) { uFplu_t fn = (uFplu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (uint32_t)R_RDX); } void uFpLu(x64emu_t *emu, uintptr_t fcn) { uFpLu_t fn = (uFpLu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX); } void uFpLL(x64emu_t *emu, uintptr_t fcn) { uFpLL_t fn = (uFpLL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); } void uFpLp(x64emu_t *emu, uintptr_t fcn) { uFpLp_t fn = (uFpLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } @@ -3788,6 +4036,7 @@ void uFppi(x64emu_t *emu, uintptr_t fcn) { uFppi_t fn = (uFppi_t)fcn; R_RAX=(uin void uFppu(x64emu_t *emu, uintptr_t fcn) { uFppu_t fn = (uFppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } void uFppL(x64emu_t *emu, uintptr_t fcn) { uFppL_t fn = (uFppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void uFppp(x64emu_t *emu, uintptr_t fcn) { uFppp_t fn = (uFppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void uFbCu(x64emu_t *emu, uintptr_t fcn) { uFbCu_t fn = (uFbCu_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint8_t)R_RSI, (uint32_t)R_RDX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void uFbWW(x64emu_t *emu, uintptr_t fcn) { uFbWW_t fn = (uFbWW_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint16_t)R_RSI, (uint16_t)R_RDX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void uFbWu(x64emu_t *emu, uintptr_t fcn) { uFbWu_t fn = (uFbWu_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint16_t)R_RSI, (uint32_t)R_RDX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void uFbuC(x64emu_t *emu, uintptr_t fcn) { uFbuC_t fn = (uFbuC_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint32_t)R_RSI, (uint8_t)R_RDX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } @@ -3814,21 +4063,24 @@ void dFppi(x64emu_t *emu, uintptr_t fcn) { dFppi_t fn = (dFppi_t)fcn; emu->xmm[0 void dFppu(x64emu_t *emu, uintptr_t fcn) { dFppu_t fn = (dFppu_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } void dFppd(x64emu_t *emu, uintptr_t fcn) { dFppd_t fn = (dFppd_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0]); } void dFppp(x64emu_t *emu, uintptr_t fcn) { dFppp_t fn = (dFppp_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void DFppi(x64emu_t *emu, uintptr_t fcn) { DFppi_t fn = (DFppi_t)fcn; long double ld=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); fpu_do_push(emu); ST0val = ld; } -void DFppp(x64emu_t *emu, uintptr_t fcn) { DFppp_t fn = (DFppp_t)fcn; long double ld=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); fpu_do_push(emu); ST0val = ld; } +void lFiIL(x64emu_t *emu, uintptr_t fcn) { lFiIL_t fn = (lFiIL_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (int64_t)R_RSI, (uintptr_t)R_RDX); } void lFili(x64emu_t *emu, uintptr_t fcn) { lFili_t fn = (lFili_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX); } -void lFilL(x64emu_t *emu, uintptr_t fcn) { lFilL_t fn = (lFilL_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (uintptr_t)R_RDX); } void lFipi(x64emu_t *emu, uintptr_t fcn) { lFipi_t fn = (lFipi_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void lFipL(x64emu_t *emu, uintptr_t fcn) { lFipL_t fn = (lFipL_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void lFlll(x64emu_t *emu, uintptr_t fcn) { lFlll_t fn = (lFlll_t)fcn; R_RAX=(intptr_t)fn((intptr_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX); } +void lFpup(x64emu_t *emu, uintptr_t fcn) { lFpup_t fn = (lFpup_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } void lFpli(x64emu_t *emu, uintptr_t fcn) { lFpli_t fn = (lFpli_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX); } void lFpLu(x64emu_t *emu, uintptr_t fcn) { lFpLu_t fn = (lFpLu_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX); } +void lFpLd(x64emu_t *emu, uintptr_t fcn) { lFpLd_t fn = (lFpLd_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, emu->xmm[0].d[0]); } +void lFpLL(x64emu_t *emu, uintptr_t fcn) { lFpLL_t fn = (lFpLL_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); } void lFpLp(x64emu_t *emu, uintptr_t fcn) { lFpLp_t fn = (lFpLp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } void lFppi(x64emu_t *emu, uintptr_t fcn) { lFppi_t fn = (lFppi_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void lFppu(x64emu_t *emu, uintptr_t fcn) { lFppu_t fn = (lFppu_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } void lFppL(x64emu_t *emu, uintptr_t fcn) { lFppL_t fn = (lFppL_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void lFppp(x64emu_t *emu, uintptr_t fcn) { lFppp_t fn = (lFppp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void lFppS(x64emu_t *emu, uintptr_t fcn) { lFppS_t fn = (lFppS_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, io_convert((void*)R_RDX)); } void lFSpl(x64emu_t *emu, uintptr_t fcn) { lFSpl_t fn = (lFSpl_t)fcn; R_RAX=(intptr_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (intptr_t)R_RDX); } +void LFEpp(x64emu_t *emu, uintptr_t fcn) { LFEpp_t fn = (LFEpp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI); } void LFEpA(x64emu_t *emu, uintptr_t fcn) { LFEpA_t fn = (LFEpA_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI); } void LFipL(x64emu_t *emu, uintptr_t fcn) { LFipL_t fn = (LFipL_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void LFuui(x64emu_t *emu, uintptr_t fcn) { LFuui_t fn = (LFuui_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } @@ -3838,10 +4090,13 @@ void LFLLL(x64emu_t *emu, uintptr_t fcn) { LFLLL_t fn = (LFLLL_t)fcn; R_RAX=(uin void LFLpu(x64emu_t *emu, uintptr_t fcn) { LFLpu_t fn = (LFLpu_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } void LFLpL(x64emu_t *emu, uintptr_t fcn) { LFLpL_t fn = (LFLpL_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void LFpii(x64emu_t *emu, uintptr_t fcn) { LFpii_t fn = (LFpii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } +void LFpip(x64emu_t *emu, uintptr_t fcn) { LFpip_t fn = (LFpip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } void LFpCi(x64emu_t *emu, uintptr_t fcn) { LFpCi_t fn = (LFpCi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (int32_t)R_RDX); } +void LFpWp(x64emu_t *emu, uintptr_t fcn) { LFpWp_t fn = (LFpWp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX); } void LFpuL(x64emu_t *emu, uintptr_t fcn) { LFpuL_t fn = (LFpuL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX); } void LFpup(x64emu_t *emu, uintptr_t fcn) { LFpup_t fn = (LFpup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } void LFpLi(x64emu_t *emu, uintptr_t fcn) { LFpLi_t fn = (LFpLi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX); } +void LFpLC(x64emu_t *emu, uintptr_t fcn) { LFpLC_t fn = (LFpLC_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint8_t)R_RDX); } void LFpLL(x64emu_t *emu, uintptr_t fcn) { LFpLL_t fn = (LFpLL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); } void LFpLp(x64emu_t *emu, uintptr_t fcn) { LFpLp_t fn = (LFpLp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } void LFppi(x64emu_t *emu, uintptr_t fcn) { LFppi_t fn = (LFppi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } @@ -3853,7 +4108,6 @@ void LFSpL(x64emu_t *emu, uintptr_t fcn) { LFSpL_t fn = (LFSpL_t)fcn; R_RAX=(uin void pFEip(x64emu_t *emu, uintptr_t fcn) { pFEip_t fn = (pFEip_t)fcn; R_RAX=(uintptr_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI); } void pFEiV(x64emu_t *emu, uintptr_t fcn) { pFEiV_t fn = (pFEiV_t)fcn; R_RAX=(uintptr_t)fn(emu, (int32_t)R_RDI, (void*)(R_RSP + 8)); } void pFEup(x64emu_t *emu, uintptr_t fcn) { pFEup_t fn = (pFEup_t)fcn; R_RAX=(uintptr_t)fn(emu, (uint32_t)R_RDI, (void*)R_RSI); } -void pFEuV(x64emu_t *emu, uintptr_t fcn) { pFEuV_t fn = (pFEuV_t)fcn; R_RAX=(uintptr_t)fn(emu, (uint32_t)R_RDI, (void*)(R_RSP + 8)); } void pFEpi(x64emu_t *emu, uintptr_t fcn) { pFEpi_t fn = (pFEpi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI); } void pFEpu(x64emu_t *emu, uintptr_t fcn) { pFEpu_t fn = (pFEpu_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI); } void pFEpp(x64emu_t *emu, uintptr_t fcn) { pFEpp_t fn = (pFEpp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI); } @@ -3883,32 +4137,32 @@ void pFdip(x64emu_t *emu, uintptr_t fcn) { pFdip_t fn = (pFdip_t)fcn; R_RAX=(uin void pFdUU(x64emu_t *emu, uintptr_t fcn) { pFdUU_t fn = (pFdUU_t)fcn; R_RAX=(uintptr_t)fn(emu->xmm[0].d[0], (uint64_t)R_RDI, (uint64_t)R_RSI); } void pFddi(x64emu_t *emu, uintptr_t fcn) { pFddi_t fn = (pFddi_t)fcn; R_RAX=(uintptr_t)fn(emu->xmm[0].d[0], emu->xmm[1].d[0], (int32_t)R_RDI); } void pFddd(x64emu_t *emu, uintptr_t fcn) { pFddd_t fn = (pFddd_t)fcn; R_RAX=(uintptr_t)fn(emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0]); } -void pFDip(x64emu_t *emu, uintptr_t fcn) { pFDip_t fn = (pFDip_t)fcn; R_RAX=(uintptr_t)fn(LD2localLD((void*)(R_RSP + 8)), (int32_t)R_RDI, (void*)R_RSI); } void pFlpi(x64emu_t *emu, uintptr_t fcn) { pFlpi_t fn = (pFlpi_t)fcn; R_RAX=(uintptr_t)fn((intptr_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void pFLup(x64emu_t *emu, uintptr_t fcn) { pFLup_t fn = (pFLup_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } void pFLLp(x64emu_t *emu, uintptr_t fcn) { pFLLp_t fn = (pFLLp_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } void pFLpi(x64emu_t *emu, uintptr_t fcn) { pFLpi_t fn = (pFLpi_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void pFLpp(x64emu_t *emu, uintptr_t fcn) { pFLpp_t fn = (pFLpp_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void pFpcU(x64emu_t *emu, uintptr_t fcn) { pFpcU_t fn = (pFpcU_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int8_t)R_RSI, (uint64_t)R_RDX); } void pFpii(x64emu_t *emu, uintptr_t fcn) { pFpii_t fn = (pFpii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } void pFpiu(x64emu_t *emu, uintptr_t fcn) { pFpiu_t fn = (pFpiu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX); } void pFpid(x64emu_t *emu, uintptr_t fcn) { pFpid_t fn = (pFpid_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, emu->xmm[0].d[0]); } void pFpil(x64emu_t *emu, uintptr_t fcn) { pFpil_t fn = (pFpil_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX); } void pFpiL(x64emu_t *emu, uintptr_t fcn) { pFpiL_t fn = (pFpiL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX); } void pFpip(x64emu_t *emu, uintptr_t fcn) { pFpip_t fn = (pFpip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void pFpiS(x64emu_t *emu, uintptr_t fcn) { pFpiS_t fn = (pFpiS_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, io_convert((void*)R_RDX)); } void pFpCi(x64emu_t *emu, uintptr_t fcn) { pFpCi_t fn = (pFpCi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (int32_t)R_RDX); } -void pFpCu(x64emu_t *emu, uintptr_t fcn) { pFpCu_t fn = (pFpCu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint32_t)R_RDX); } void pFpWi(x64emu_t *emu, uintptr_t fcn) { pFpWi_t fn = (pFpWi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint16_t)R_RSI, (int32_t)R_RDX); } void pFpWW(x64emu_t *emu, uintptr_t fcn) { pFpWW_t fn = (pFpWW_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint16_t)R_RSI, (uint16_t)R_RDX); } void pFpWp(x64emu_t *emu, uintptr_t fcn) { pFpWp_t fn = (pFpWp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX); } void pFpui(x64emu_t *emu, uintptr_t fcn) { pFpui_t fn = (pFpui_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } void pFpuu(x64emu_t *emu, uintptr_t fcn) { pFpuu_t fn = (pFpuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX); } -void pFpuL(x64emu_t *emu, uintptr_t fcn) { pFpuL_t fn = (pFpuL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX); } +void pFpuf(x64emu_t *emu, uintptr_t fcn) { pFpuf_t fn = (pFpuf_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, emu->xmm[0].f[0]); } void pFpup(x64emu_t *emu, uintptr_t fcn) { pFpup_t fn = (pFpup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } void pFpUi(x64emu_t *emu, uintptr_t fcn) { pFpUi_t fn = (pFpUi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint64_t)R_RSI, (int32_t)R_RDX); } void pFpUu(x64emu_t *emu, uintptr_t fcn) { pFpUu_t fn = (pFpUu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX); } void pFpdu(x64emu_t *emu, uintptr_t fcn) { pFpdu_t fn = (pFpdu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, emu->xmm[0].d[0], (uint32_t)R_RSI); } void pFpdd(x64emu_t *emu, uintptr_t fcn) { pFpdd_t fn = (pFpdd_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0]); } -void pFplC(x64emu_t *emu, uintptr_t fcn) { pFplC_t fn = (pFplC_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (uint8_t)R_RDX); } +void pFplc(x64emu_t *emu, uintptr_t fcn) { pFplc_t fn = (pFplc_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (int8_t)R_RDX); } void pFplu(x64emu_t *emu, uintptr_t fcn) { pFplu_t fn = (pFplu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (uint32_t)R_RDX); } void pFpll(x64emu_t *emu, uintptr_t fcn) { pFpll_t fn = (pFpll_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX); } void pFplp(x64emu_t *emu, uintptr_t fcn) { pFplp_t fn = (pFplp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX); } @@ -3916,17 +4170,19 @@ void pFpLi(x64emu_t *emu, uintptr_t fcn) { pFpLi_t fn = (pFpLi_t)fcn; R_RAX=(uin void pFpLu(x64emu_t *emu, uintptr_t fcn) { pFpLu_t fn = (pFpLu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX); } void pFpLL(x64emu_t *emu, uintptr_t fcn) { pFpLL_t fn = (pFpLL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); } void pFpLp(x64emu_t *emu, uintptr_t fcn) { pFpLp_t fn = (pFpLp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } +void pFppc(x64emu_t *emu, uintptr_t fcn) { pFppc_t fn = (pFppc_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int8_t)R_RDX); } void pFppi(x64emu_t *emu, uintptr_t fcn) { pFppi_t fn = (pFppi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void pFppI(x64emu_t *emu, uintptr_t fcn) { pFppI_t fn = (pFppI_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX); } -void pFppC(x64emu_t *emu, uintptr_t fcn) { pFppC_t fn = (pFppC_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint8_t)R_RDX); } void pFppu(x64emu_t *emu, uintptr_t fcn) { pFppu_t fn = (pFppu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } void pFppU(x64emu_t *emu, uintptr_t fcn) { pFppU_t fn = (pFppU_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX); } void pFppf(x64emu_t *emu, uintptr_t fcn) { pFppf_t fn = (pFppf_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].f[0]); } +void pFppd(x64emu_t *emu, uintptr_t fcn) { pFppd_t fn = (pFppd_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0]); } void pFppl(x64emu_t *emu, uintptr_t fcn) { pFppl_t fn = (pFppl_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX); } void pFppL(x64emu_t *emu, uintptr_t fcn) { pFppL_t fn = (pFppL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void pFppp(x64emu_t *emu, uintptr_t fcn) { pFppp_t fn = (pFppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void pFppS(x64emu_t *emu, uintptr_t fcn) { pFppS_t fn = (pFppS_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, io_convert((void*)R_RDX)); } void pFppA(x64emu_t *emu, uintptr_t fcn) { pFppA_t fn = (pFppA_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void pFpOM(x64emu_t *emu, uintptr_t fcn) { pFpOM_t fn = (pFpOM_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, of_convert((int32_t)R_RSI), (void*)R_RDX, (void*)R_RCX); } +void pFpSp(x64emu_t *emu, uintptr_t fcn) { pFpSp_t fn = (pFpSp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, io_convert((void*)R_RSI), (void*)R_RDX); } void pFpbi(x64emu_t *emu, uintptr_t fcn) { pFpbi_t fn = (pFpbi_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RSI); R_RAX=(uintptr_t)fn((void*)R_RDI, aligned_xcb, (int32_t)R_RDX); unalign_xcb_connection(aligned_xcb, (void*)R_RSI); } void pFSpl(x64emu_t *emu, uintptr_t fcn) { pFSpl_t fn = (pFSpl_t)fcn; R_RAX=(uintptr_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (intptr_t)R_RDX); } void pFbCC(x64emu_t *emu, uintptr_t fcn) { pFbCC_t fn = (pFbCC_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (uint8_t)R_RSI, (uint8_t)R_RDX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } @@ -3936,6 +4192,9 @@ void pFbUp(x64emu_t *emu, uintptr_t fcn) { pFbUp_t fn = (pFbUp_t)fcn; void *alig void pFbpi(x64emu_t *emu, uintptr_t fcn) { pFbpi_t fn = (pFbpi_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (void*)R_RSI, (int32_t)R_RDX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void pFbpu(x64emu_t *emu, uintptr_t fcn) { pFbpu_t fn = (pFbpu_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (void*)R_RSI, (uint32_t)R_RDX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void pFbpp(x64emu_t *emu, uintptr_t fcn) { pFbpp_t fn = (pFbpp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (void*)R_RSI, (void*)R_RDX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } +void SFEpp(x64emu_t *emu, uintptr_t fcn) { SFEpp_t fn = (SFEpp_t)fcn; R_RAX=(uintptr_t)io_convert_back(fn(emu, (void*)R_RDI, (void*)R_RSI)); } +void SFpLp(x64emu_t *emu, uintptr_t fcn) { SFpLp_t fn = (SFpLp_t)fcn; R_RAX=(uintptr_t)io_convert_back(fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX)); } +void SFppS(x64emu_t *emu, uintptr_t fcn) { SFppS_t fn = (SFppS_t)fcn; R_RAX=(uintptr_t)io_convert_back(fn((void*)R_RDI, (void*)R_RSI, io_convert((void*)R_RDX))); } void vWpup(x64emu_t *emu, uintptr_t fcn) { vWpup_t fn = (vWpup_t)fcn; fn((void*)R_RCX, (uint32_t)R_RDX, (void*)R_R8); } void iWEip(x64emu_t *emu, uintptr_t fcn) { iWEip_t fn = (iWEip_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RCX, (void*)R_RDX); } void iWEpp(x64emu_t *emu, uintptr_t fcn) { iWEpp_t fn = (iWEpp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RCX, (void*)R_RDX); } @@ -3948,16 +4207,17 @@ void iWppu(x64emu_t *emu, uintptr_t fcn) { iWppu_t fn = (iWppu_t)fcn; R_RAX=(int void iWppp(x64emu_t *emu, uintptr_t fcn) { iWppp_t fn = (iWppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RCX, (void*)R_RDX, (void*)R_R8); } void uWpui(x64emu_t *emu, uintptr_t fcn) { uWpui_t fn = (uWpui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RCX, (uint32_t)R_RDX, (int32_t)R_R8); } void uWpup(x64emu_t *emu, uintptr_t fcn) { uWpup_t fn = (uWpup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RCX, (uint32_t)R_RDX, (void*)R_R8); } -void vFEiip(x64emu_t *emu, uintptr_t fcn) { vFEiip_t fn = (vFEiip_t)fcn; fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } void vFEipp(x64emu_t *emu, uintptr_t fcn) { vFEipp_t fn = (vFEipp_t)fcn; fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } void vFEipV(x64emu_t *emu, uintptr_t fcn) { vFEipV_t fn = (vFEipV_t)fcn; fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); } void vFEipA(x64emu_t *emu, uintptr_t fcn) { vFEipA_t fn = (vFEipA_t)fcn; fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } void vFELLp(x64emu_t *emu, uintptr_t fcn) { vFELLp_t fn = (vFELLp_t)fcn; fn(emu, (uintptr_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } void vFEpii(x64emu_t *emu, uintptr_t fcn) { vFEpii_t fn = (vFEpii_t)fcn; fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } void vFEpip(x64emu_t *emu, uintptr_t fcn) { vFEpip_t fn = (vFEpip_t)fcn; fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } -void vFEpiA(x64emu_t *emu, uintptr_t fcn) { vFEpiA_t fn = (vFEpiA_t)fcn; fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } void vFEpup(x64emu_t *emu, uintptr_t fcn) { vFEpup_t fn = (vFEpup_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } +void vFEpuV(x64emu_t *emu, uintptr_t fcn) { vFEpuV_t fn = (vFEpuV_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)(R_RSP + 8)); } +void vFEpuA(x64emu_t *emu, uintptr_t fcn) { vFEpuA_t fn = (vFEpuA_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } void vFEpUp(x64emu_t *emu, uintptr_t fcn) { vFEpUp_t fn = (vFEpUp_t)fcn; fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX); } +void vFEpLp(x64emu_t *emu, uintptr_t fcn) { vFEpLp_t fn = (vFEpLp_t)fcn; fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } void vFEppp(x64emu_t *emu, uintptr_t fcn) { vFEppp_t fn = (vFEppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } void vFEppV(x64emu_t *emu, uintptr_t fcn) { vFEppV_t fn = (vFEppV_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); } void vFEppA(x64emu_t *emu, uintptr_t fcn) { vFEppA_t fn = (vFEppA_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } @@ -3968,17 +4228,17 @@ void vFiiip(x64emu_t *emu, uintptr_t fcn) { vFiiip_t fn = (vFiiip_t)fcn; fn((int void vFiiCp(x64emu_t *emu, uintptr_t fcn) { vFiiCp_t fn = (vFiiCp_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (uint8_t)R_RDX, (void*)R_RCX); } void vFiill(x64emu_t *emu, uintptr_t fcn) { vFiill_t fn = (vFiill_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX); } void vFiipV(x64emu_t *emu, uintptr_t fcn) { vFiipV_t fn = (vFiipV_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void vFiIII(x64emu_t *emu, uintptr_t fcn) { vFiIII_t fn = (vFiIII_t)fcn; fn((int32_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); } void vFiuip(x64emu_t *emu, uintptr_t fcn) { vFiuip_t fn = (vFiuip_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void vFiuuu(x64emu_t *emu, uintptr_t fcn) { vFiuuu_t fn = (vFiuuu_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } void vFiulp(x64emu_t *emu, uintptr_t fcn) { vFiulp_t fn = (vFiulp_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } void vFiupV(x64emu_t *emu, uintptr_t fcn) { vFiupV_t fn = (vFiupV_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void vFiUUU(x64emu_t *emu, uintptr_t fcn) { vFiUUU_t fn = (vFiUUU_t)fcn; fn((int32_t)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX); } void vFifff(x64emu_t *emu, uintptr_t fcn) { vFifff_t fn = (vFifff_t)fcn; fn((int32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0]); } void vFiddd(x64emu_t *emu, uintptr_t fcn) { vFiddd_t fn = (vFiddd_t)fcn; fn((int32_t)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0]); } void vFilip(x64emu_t *emu, uintptr_t fcn) { vFilip_t fn = (vFilip_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void vFilll(x64emu_t *emu, uintptr_t fcn) { vFilll_t fn = (vFilll_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX); } void vFilpu(x64emu_t *emu, uintptr_t fcn) { vFilpu_t fn = (vFilpu_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } void vFilpp(x64emu_t *emu, uintptr_t fcn) { vFilpp_t fn = (vFilpp_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void vFiLLL(x64emu_t *emu, uintptr_t fcn) { vFiLLL_t fn = (vFiLLL_t)fcn; fn((int32_t)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } void vFipii(x64emu_t *emu, uintptr_t fcn) { vFipii_t fn = (vFipii_t)fcn; fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void vFipup(x64emu_t *emu, uintptr_t fcn) { vFipup_t fn = (vFipup_t)fcn; fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } void vFipll(x64emu_t *emu, uintptr_t fcn) { vFipll_t fn = (vFipll_t)fcn; fn((int32_t)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX); } @@ -3989,21 +4249,21 @@ void vFWWWW(x64emu_t *emu, uintptr_t fcn) { vFWWWW_t fn = (vFWWWW_t)fcn; fn((uin void vFuccc(x64emu_t *emu, uintptr_t fcn) { vFuccc_t fn = (vFuccc_t)fcn; fn((uint32_t)R_RDI, (int8_t)R_RSI, (int8_t)R_RDX, (int8_t)R_RCX); } void vFuwww(x64emu_t *emu, uintptr_t fcn) { vFuwww_t fn = (vFuwww_t)fcn; fn((uint32_t)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX, (int16_t)R_RCX); } void vFuiii(x64emu_t *emu, uintptr_t fcn) { vFuiii_t fn = (vFuiii_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void vFuiiu(x64emu_t *emu, uintptr_t fcn) { vFuiiu_t fn = (vFuiiu_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } void vFuiip(x64emu_t *emu, uintptr_t fcn) { vFuiip_t fn = (vFuiip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void vFuiII(x64emu_t *emu, uintptr_t fcn) { vFuiII_t fn = (vFuiII_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); } void vFuiui(x64emu_t *emu, uintptr_t fcn) { vFuiui_t fn = (vFuiui_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } void vFuiuC(x64emu_t *emu, uintptr_t fcn) { vFuiuC_t fn = (vFuiuC_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint8_t)R_RCX); } void vFuiuu(x64emu_t *emu, uintptr_t fcn) { vFuiuu_t fn = (vFuiuu_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } void vFuiup(x64emu_t *emu, uintptr_t fcn) { vFuiup_t fn = (vFuiup_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void vFuiUU(x64emu_t *emu, uintptr_t fcn) { vFuiUU_t fn = (vFuiUU_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX); } void vFuifi(x64emu_t *emu, uintptr_t fcn) { vFuifi_t fn = (vFuifi_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, emu->xmm[0].f[0], (int32_t)R_RDX); } void vFuiff(x64emu_t *emu, uintptr_t fcn) { vFuiff_t fn = (vFuiff_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, emu->xmm[0].f[0], emu->xmm[1].f[0]); } void vFuidd(x64emu_t *emu, uintptr_t fcn) { vFuidd_t fn = (vFuidd_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0]); } -void vFuill(x64emu_t *emu, uintptr_t fcn) { vFuill_t fn = (vFuill_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX); } void vFuilp(x64emu_t *emu, uintptr_t fcn) { vFuilp_t fn = (vFuilp_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } -void vFuiLL(x64emu_t *emu, uintptr_t fcn) { vFuiLL_t fn = (vFuiLL_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } void vFuipi(x64emu_t *emu, uintptr_t fcn) { vFuipi_t fn = (vFuipi_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void vFuipu(x64emu_t *emu, uintptr_t fcn) { vFuipu_t fn = (vFuipu_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } void vFuipp(x64emu_t *emu, uintptr_t fcn) { vFuipp_t fn = (vFuipp_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void vFuIII(x64emu_t *emu, uintptr_t fcn) { vFuIII_t fn = (vFuIII_t)fcn; fn((uint32_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); } void vFuWWW(x64emu_t *emu, uintptr_t fcn) { vFuWWW_t fn = (vFuWWW_t)fcn; fn((uint32_t)R_RDI, (uint16_t)R_RSI, (uint16_t)R_RDX, (uint16_t)R_RCX); } void vFuuii(x64emu_t *emu, uintptr_t fcn) { vFuuii_t fn = (vFuuii_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void vFuuiu(x64emu_t *emu, uintptr_t fcn) { vFuuiu_t fn = (vFuuiu_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } @@ -4017,24 +4277,21 @@ void vFuuuf(x64emu_t *emu, uintptr_t fcn) { vFuuuf_t fn = (vFuuuf_t)fcn; fn((uin void vFuuud(x64emu_t *emu, uintptr_t fcn) { vFuuud_t fn = (vFuuud_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, emu->xmm[0].d[0]); } void vFuuul(x64emu_t *emu, uintptr_t fcn) { vFuuul_t fn = (vFuuul_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (intptr_t)R_RCX); } void vFuuup(x64emu_t *emu, uintptr_t fcn) { vFuuup_t fn = (vFuuup_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void vFuuUl(x64emu_t *emu, uintptr_t fcn) { vFuuUl_t fn = (vFuuUl_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint64_t)R_RDX, (intptr_t)R_RCX); } void vFuuff(x64emu_t *emu, uintptr_t fcn) { vFuuff_t fn = (vFuuff_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, emu->xmm[0].f[0], emu->xmm[1].f[0]); } void vFuuli(x64emu_t *emu, uintptr_t fcn) { vFuuli_t fn = (vFuuli_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX); } -void vFuulp(x64emu_t *emu, uintptr_t fcn) { vFuulp_t fn = (vFuulp_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } -void vFuuLl(x64emu_t *emu, uintptr_t fcn) { vFuuLl_t fn = (vFuuLl_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (intptr_t)R_RCX); } void vFuupi(x64emu_t *emu, uintptr_t fcn) { vFuupi_t fn = (vFuupi_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void vFuupp(x64emu_t *emu, uintptr_t fcn) { vFuupp_t fn = (vFuupp_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void vFuUui(x64emu_t *emu, uintptr_t fcn) { vFuUui_t fn = (vFuUui_t)fcn; fn((uint32_t)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } +void vFuUup(x64emu_t *emu, uintptr_t fcn) { vFuUup_t fn = (vFuUup_t)fcn; fn((uint32_t)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void vFuUUU(x64emu_t *emu, uintptr_t fcn) { vFuUUU_t fn = (vFuUUU_t)fcn; fn((uint32_t)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX); } void vFufff(x64emu_t *emu, uintptr_t fcn) { vFufff_t fn = (vFufff_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0]); } void vFuddd(x64emu_t *emu, uintptr_t fcn) { vFuddd_t fn = (vFuddd_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0]); } -void vFuluL(x64emu_t *emu, uintptr_t fcn) { vFuluL_t fn = (vFuluL_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX); } +void vFuluU(x64emu_t *emu, uintptr_t fcn) { vFuluU_t fn = (vFuluU_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (uint32_t)R_RDX, (uint64_t)R_RCX); } void vFullC(x64emu_t *emu, uintptr_t fcn) { vFullC_t fn = (vFullC_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uint8_t)R_RCX); } -void vFulll(x64emu_t *emu, uintptr_t fcn) { vFulll_t fn = (vFulll_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX); } void vFullp(x64emu_t *emu, uintptr_t fcn) { vFullp_t fn = (vFullp_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } -void vFulpi(x64emu_t *emu, uintptr_t fcn) { vFulpi_t fn = (vFulpi_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void vFulpu(x64emu_t *emu, uintptr_t fcn) { vFulpu_t fn = (vFulpu_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } void vFulpp(x64emu_t *emu, uintptr_t fcn) { vFulpp_t fn = (vFulpp_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void vFuLui(x64emu_t *emu, uintptr_t fcn) { vFuLui_t fn = (vFuLui_t)fcn; fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } -void vFuLup(x64emu_t *emu, uintptr_t fcn) { vFuLup_t fn = (vFuLup_t)fcn; fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } -void vFuLLL(x64emu_t *emu, uintptr_t fcn) { vFuLLL_t fn = (vFuLLL_t)fcn; fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } void vFupii(x64emu_t *emu, uintptr_t fcn) { vFupii_t fn = (vFupii_t)fcn; fn((uint32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void vFuppi(x64emu_t *emu, uintptr_t fcn) { vFuppi_t fn = (vFuppi_t)fcn; fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void vFuppu(x64emu_t *emu, uintptr_t fcn) { vFuppu_t fn = (vFuppu_t)fcn; fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } @@ -4044,17 +4301,17 @@ void vFdddd(x64emu_t *emu, uintptr_t fcn) { vFdddd_t fn = (vFdddd_t)fcn; fn(emu- void vFllii(x64emu_t *emu, uintptr_t fcn) { vFllii_t fn = (vFllii_t)fcn; fn((intptr_t)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void vFLuui(x64emu_t *emu, uintptr_t fcn) { vFLuui_t fn = (vFLuui_t)fcn; fn((uintptr_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } void vFLppi(x64emu_t *emu, uintptr_t fcn) { vFLppi_t fn = (vFLppi_t)fcn; fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void vFpwwu(x64emu_t *emu, uintptr_t fcn) { vFpwwu_t fn = (vFpwwu_t)fcn; fn((void*)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX, (uint32_t)R_RCX); } void vFpiii(x64emu_t *emu, uintptr_t fcn) { vFpiii_t fn = (vFpiii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void vFpiiu(x64emu_t *emu, uintptr_t fcn) { vFpiiu_t fn = (vFpiiu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } void vFpiid(x64emu_t *emu, uintptr_t fcn) { vFpiid_t fn = (vFpiid_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, emu->xmm[0].d[0]); } void vFpiip(x64emu_t *emu, uintptr_t fcn) { vFpiip_t fn = (vFpiip_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void vFpiui(x64emu_t *emu, uintptr_t fcn) { vFpiui_t fn = (vFpiui_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } -void vFpiuu(x64emu_t *emu, uintptr_t fcn) { vFpiuu_t fn = (vFpiuu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } void vFpiuL(x64emu_t *emu, uintptr_t fcn) { vFpiuL_t fn = (vFpiuL_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX); } void vFpiup(x64emu_t *emu, uintptr_t fcn) { vFpiup_t fn = (vFpiup_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } void vFpiUu(x64emu_t *emu, uintptr_t fcn) { vFpiUu_t fn = (vFpiUu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (uint32_t)R_RCX); } void vFpiUU(x64emu_t *emu, uintptr_t fcn) { vFpiUU_t fn = (vFpiUU_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX); } -void vFpifi(x64emu_t *emu, uintptr_t fcn) { vFpifi_t fn = (vFpifi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, emu->xmm[0].f[0], (int32_t)R_RDX); } +void vFpiLu(x64emu_t *emu, uintptr_t fcn) { vFpiLu_t fn = (vFpiLu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX); } void vFpipi(x64emu_t *emu, uintptr_t fcn) { vFpipi_t fn = (vFpipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void vFpipu(x64emu_t *emu, uintptr_t fcn) { vFpipu_t fn = (vFpipu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } void vFpipp(x64emu_t *emu, uintptr_t fcn) { vFpipp_t fn = (vFpipp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } @@ -4080,10 +4337,13 @@ void vFpdup(x64emu_t *emu, uintptr_t fcn) { vFpdup_t fn = (vFpdup_t)fcn; fn((voi void vFpddu(x64emu_t *emu, uintptr_t fcn) { vFpddu_t fn = (vFpddu_t)fcn; fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], (uint32_t)R_RSI); } void vFpddd(x64emu_t *emu, uintptr_t fcn) { vFpddd_t fn = (vFpddd_t)fcn; fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0]); } void vFplll(x64emu_t *emu, uintptr_t fcn) { vFplll_t fn = (vFplll_t)fcn; fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX); } +void vFpllL(x64emu_t *emu, uintptr_t fcn) { vFpllL_t fn = (vFpllL_t)fcn; fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uintptr_t)R_RCX); } void vFplpp(x64emu_t *emu, uintptr_t fcn) { vFplpp_t fn = (vFplpp_t)fcn; fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void vFpLii(x64emu_t *emu, uintptr_t fcn) { vFpLii_t fn = (vFpLii_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void vFpLuu(x64emu_t *emu, uintptr_t fcn) { vFpLuu_t fn = (vFpLuu_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } void vFpLLL(x64emu_t *emu, uintptr_t fcn) { vFpLLL_t fn = (vFpLLL_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } +void vFpLLp(x64emu_t *emu, uintptr_t fcn) { vFpLLp_t fn = (vFpLLp_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } +void vFpLpi(x64emu_t *emu, uintptr_t fcn) { vFpLpi_t fn = (vFpLpi_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void vFpLpu(x64emu_t *emu, uintptr_t fcn) { vFpLpu_t fn = (vFpLpu_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } void vFpLpL(x64emu_t *emu, uintptr_t fcn) { vFpLpL_t fn = (vFpLpL_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void vFpLpp(x64emu_t *emu, uintptr_t fcn) { vFpLpp_t fn = (vFpLpp_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } @@ -4110,177 +4370,195 @@ void vFpppd(x64emu_t *emu, uintptr_t fcn) { vFpppd_t fn = (vFpppd_t)fcn; fn((voi void vFpppl(x64emu_t *emu, uintptr_t fcn) { vFpppl_t fn = (vFpppl_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (intptr_t)R_RCX); } void vFpppL(x64emu_t *emu, uintptr_t fcn) { vFpppL_t fn = (vFpppL_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void vFpppp(x64emu_t *emu, uintptr_t fcn) { vFpppp_t fn = (vFpppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void cFpipp(x64emu_t *emu, uintptr_t fcn) { cFpipp_t fn = (cFpipp_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFEiip(x64emu_t *emu, uintptr_t fcn) { iFEiip_t fn = (iFEiip_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } -void iFEiiN(x64emu_t *emu, uintptr_t fcn) { iFEiiN_t fn = (iFEiiN_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } -void iFEipp(x64emu_t *emu, uintptr_t fcn) { iFEipp_t fn = (iFEipp_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void iFEipV(x64emu_t *emu, uintptr_t fcn) { iFEipV_t fn = (iFEipV_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); } -void iFEipA(x64emu_t *emu, uintptr_t fcn) { iFEipA_t fn = (iFEipA_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void iFEupu(x64emu_t *emu, uintptr_t fcn) { iFEupu_t fn = (iFEupu_t)fcn; R_RAX=(int32_t)fn(emu, (uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } -void iFEupp(x64emu_t *emu, uintptr_t fcn) { iFEupp_t fn = (iFEupp_t)fcn; R_RAX=(int32_t)fn(emu, (uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void iFEpii(x64emu_t *emu, uintptr_t fcn) { iFEpii_t fn = (iFEpii_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } -void iFEpip(x64emu_t *emu, uintptr_t fcn) { iFEpip_t fn = (iFEpip_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } -void iFEpiV(x64emu_t *emu, uintptr_t fcn) { iFEpiV_t fn = (iFEpiV_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)(R_RSP + 8)); } -void iFEpiA(x64emu_t *emu, uintptr_t fcn) { iFEpiA_t fn = (iFEpiA_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } -void iFEpui(x64emu_t *emu, uintptr_t fcn) { iFEpui_t fn = (iFEpui_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } -void iFEpup(x64emu_t *emu, uintptr_t fcn) { iFEpup_t fn = (iFEpup_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } -void iFEpUi(x64emu_t *emu, uintptr_t fcn) { iFEpUi_t fn = (iFEpUi_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (int32_t)R_RDX); } -void iFEpUp(x64emu_t *emu, uintptr_t fcn) { iFEpUp_t fn = (iFEpUp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX); } -void iFEpLi(x64emu_t *emu, uintptr_t fcn) { iFEpLi_t fn = (iFEpLi_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX); } -void iFEpLp(x64emu_t *emu, uintptr_t fcn) { iFEpLp_t fn = (iFEpLp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } -void iFEppi(x64emu_t *emu, uintptr_t fcn) { iFEppi_t fn = (iFEppi_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } -void iFEppd(x64emu_t *emu, uintptr_t fcn) { iFEppd_t fn = (iFEppd_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0]); } -void iFEppL(x64emu_t *emu, uintptr_t fcn) { iFEppL_t fn = (iFEppL_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } -void iFEppp(x64emu_t *emu, uintptr_t fcn) { iFEppp_t fn = (iFEppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void iFEppV(x64emu_t *emu, uintptr_t fcn) { iFEppV_t fn = (iFEppV_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); } -void iFEppA(x64emu_t *emu, uintptr_t fcn) { iFEppA_t fn = (iFEppA_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } -void iFEpOu(x64emu_t *emu, uintptr_t fcn) { iFEpOu_t fn = (iFEpOu_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, of_convert((int32_t)R_RSI), (uint32_t)R_RDX); } -void iFwwww(x64emu_t *emu, uintptr_t fcn) { iFwwww_t fn = (iFwwww_t)fcn; R_RAX=(int32_t)fn((int16_t)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX, (int16_t)R_RCX); } -void iFwppp(x64emu_t *emu, uintptr_t fcn) { iFwppp_t fn = (iFwppp_t)fcn; R_RAX=(int32_t)fn((int16_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFiiii(x64emu_t *emu, uintptr_t fcn) { iFiiii_t fn = (iFiiii_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void iFiiiu(x64emu_t *emu, uintptr_t fcn) { iFiiiu_t fn = (iFiiiu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } -void iFiiip(x64emu_t *emu, uintptr_t fcn) { iFiiip_t fn = (iFiiip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFiiiN(x64emu_t *emu, uintptr_t fcn) { iFiiiN_t fn = (iFiiiN_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFiiui(x64emu_t *emu, uintptr_t fcn) { iFiiui_t fn = (iFiiui_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } -void iFiill(x64emu_t *emu, uintptr_t fcn) { iFiill_t fn = (iFiill_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX); } -void iFiipi(x64emu_t *emu, uintptr_t fcn) { iFiipi_t fn = (iFiipi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFiipp(x64emu_t *emu, uintptr_t fcn) { iFiipp_t fn = (iFiipp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFiWii(x64emu_t *emu, uintptr_t fcn) { iFiWii_t fn = (iFiWii_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint16_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void iFiuwp(x64emu_t *emu, uintptr_t fcn) { iFiuwp_t fn = (iFiuwp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (int16_t)R_RDX, (void*)R_RCX); } -void iFiuup(x64emu_t *emu, uintptr_t fcn) { iFiuup_t fn = (iFiuup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } -void iFiupp(x64emu_t *emu, uintptr_t fcn) { iFiupp_t fn = (iFiupp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFilli(x64emu_t *emu, uintptr_t fcn) { iFilli_t fn = (iFilli_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX); } -void iFillu(x64emu_t *emu, uintptr_t fcn) { iFillu_t fn = (iFillu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uint32_t)R_RCX); } -void iFiLpL(x64emu_t *emu, uintptr_t fcn) { iFiLpL_t fn = (iFiLpL_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } -void iFipii(x64emu_t *emu, uintptr_t fcn) { iFipii_t fn = (iFipii_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void iFipip(x64emu_t *emu, uintptr_t fcn) { iFipip_t fn = (iFipip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFipWp(x64emu_t *emu, uintptr_t fcn) { iFipWp_t fn = (iFipWp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint16_t)R_RDX, (void*)R_RCX); } -void iFipui(x64emu_t *emu, uintptr_t fcn) { iFipui_t fn = (iFipui_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } -void iFipuL(x64emu_t *emu, uintptr_t fcn) { iFipuL_t fn = (iFipuL_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX); } -void iFipLi(x64emu_t *emu, uintptr_t fcn) { iFipLi_t fn = (iFipLi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX); } -void iFipLu(x64emu_t *emu, uintptr_t fcn) { iFipLu_t fn = (iFipLu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX); } -void iFipLp(x64emu_t *emu, uintptr_t fcn) { iFipLp_t fn = (iFipLp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } -void iFippi(x64emu_t *emu, uintptr_t fcn) { iFippi_t fn = (iFippi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFippu(x64emu_t *emu, uintptr_t fcn) { iFippu_t fn = (iFippu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } -void iFippL(x64emu_t *emu, uintptr_t fcn) { iFippL_t fn = (iFippL_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } -void iFippp(x64emu_t *emu, uintptr_t fcn) { iFippp_t fn = (iFippp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFipON(x64emu_t *emu, uintptr_t fcn) { iFipON_t fn = (iFipON_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, of_convert((int32_t)R_RDX), (void*)R_RCX); } -void iFuiup(x64emu_t *emu, uintptr_t fcn) { iFuiup_t fn = (iFuiup_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } -void iFuipp(x64emu_t *emu, uintptr_t fcn) { iFuipp_t fn = (iFuipp_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFuWWp(x64emu_t *emu, uintptr_t fcn) { iFuWWp_t fn = (iFuWWp_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uint16_t)R_RSI, (uint16_t)R_RDX, (void*)R_RCX); } -void iFuuuu(x64emu_t *emu, uintptr_t fcn) { iFuuuu_t fn = (iFuuuu_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } -void iFuupi(x64emu_t *emu, uintptr_t fcn) { iFuupi_t fn = (iFuupi_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFuupp(x64emu_t *emu, uintptr_t fcn) { iFuupp_t fn = (iFuupp_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFupup(x64emu_t *emu, uintptr_t fcn) { iFupup_t fn = (iFupup_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } -void iFupLp(x64emu_t *emu, uintptr_t fcn) { iFupLp_t fn = (iFupLp_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } -void iFuppi(x64emu_t *emu, uintptr_t fcn) { iFuppi_t fn = (iFuppi_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFuppu(x64emu_t *emu, uintptr_t fcn) { iFuppu_t fn = (iFuppu_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } -void iFuppp(x64emu_t *emu, uintptr_t fcn) { iFuppp_t fn = (iFuppp_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFLpLp(x64emu_t *emu, uintptr_t fcn) { iFLpLp_t fn = (iFLpLp_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } -void iFLppp(x64emu_t *emu, uintptr_t fcn) { iFLppp_t fn = (iFLppp_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFpwww(x64emu_t *emu, uintptr_t fcn) { iFpwww_t fn = (iFpwww_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX, (int16_t)R_RCX); } -void iFpwpp(x64emu_t *emu, uintptr_t fcn) { iFpwpp_t fn = (iFpwpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int16_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFpiii(x64emu_t *emu, uintptr_t fcn) { iFpiii_t fn = (iFpiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void iFpiiu(x64emu_t *emu, uintptr_t fcn) { iFpiiu_t fn = (iFpiiu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } -void iFpiid(x64emu_t *emu, uintptr_t fcn) { iFpiid_t fn = (iFpiid_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, emu->xmm[0].d[0]); } -void iFpiiL(x64emu_t *emu, uintptr_t fcn) { iFpiiL_t fn = (iFpiiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX); } -void iFpiip(x64emu_t *emu, uintptr_t fcn) { iFpiip_t fn = (iFpiip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFpiuu(x64emu_t *emu, uintptr_t fcn) { iFpiuu_t fn = (iFpiuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } -void iFpiuL(x64emu_t *emu, uintptr_t fcn) { iFpiuL_t fn = (iFpiuL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX); } -void iFpiup(x64emu_t *emu, uintptr_t fcn) { iFpiup_t fn = (iFpiup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } -void iFpiUp(x64emu_t *emu, uintptr_t fcn) { iFpiUp_t fn = (iFpiUp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (void*)R_RCX); } -void iFpild(x64emu_t *emu, uintptr_t fcn) { iFpild_t fn = (iFpild_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, emu->xmm[0].d[0]); } -void iFpipi(x64emu_t *emu, uintptr_t fcn) { iFpipi_t fn = (iFpipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFpipu(x64emu_t *emu, uintptr_t fcn) { iFpipu_t fn = (iFpipu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } -void iFpipL(x64emu_t *emu, uintptr_t fcn) { iFpipL_t fn = (iFpipL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } -void iFpipp(x64emu_t *emu, uintptr_t fcn) { iFpipp_t fn = (iFpipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFpipV(x64emu_t *emu, uintptr_t fcn) { iFpipV_t fn = (iFpipV_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } -void iFpIip(x64emu_t *emu, uintptr_t fcn) { iFpIip_t fn = (iFpIip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int64_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFpCCC(x64emu_t *emu, uintptr_t fcn) { iFpCCC_t fn = (iFpCCC_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX); } -void iFpCpi(x64emu_t *emu, uintptr_t fcn) { iFpCpi_t fn = (iFpCpi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFpCpp(x64emu_t *emu, uintptr_t fcn) { iFpCpp_t fn = (iFpCpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFpWWu(x64emu_t *emu, uintptr_t fcn) { iFpWWu_t fn = (iFpWWu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (uint16_t)R_RDX, (uint32_t)R_RCX); } -void iFpWpp(x64emu_t *emu, uintptr_t fcn) { iFpWpp_t fn = (iFpWpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFpuwp(x64emu_t *emu, uintptr_t fcn) { iFpuwp_t fn = (iFpuwp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int16_t)R_RDX, (void*)R_RCX); } -void iFpuii(x64emu_t *emu, uintptr_t fcn) { iFpuii_t fn = (iFpuii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void iFpuiL(x64emu_t *emu, uintptr_t fcn) { iFpuiL_t fn = (iFpuiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX); } -void iFpuip(x64emu_t *emu, uintptr_t fcn) { iFpuip_t fn = (iFpuip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFpuui(x64emu_t *emu, uintptr_t fcn) { iFpuui_t fn = (iFpuui_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } -void iFpuuu(x64emu_t *emu, uintptr_t fcn) { iFpuuu_t fn = (iFpuuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } -void iFpuul(x64emu_t *emu, uintptr_t fcn) { iFpuul_t fn = (iFpuul_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (intptr_t)R_RCX); } -void iFpuuL(x64emu_t *emu, uintptr_t fcn) { iFpuuL_t fn = (iFpuuL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX); } -void iFpuup(x64emu_t *emu, uintptr_t fcn) { iFpuup_t fn = (iFpuup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } -void iFpuUp(x64emu_t *emu, uintptr_t fcn) { iFpuUp_t fn = (iFpuUp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint64_t)R_RDX, (void*)R_RCX); } -void iFpuLL(x64emu_t *emu, uintptr_t fcn) { iFpuLL_t fn = (iFpuLL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } -void iFpuLp(x64emu_t *emu, uintptr_t fcn) { iFpuLp_t fn = (iFpuLp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } -void iFpupi(x64emu_t *emu, uintptr_t fcn) { iFpupi_t fn = (iFpupi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFpupC(x64emu_t *emu, uintptr_t fcn) { iFpupC_t fn = (iFpupC_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint8_t)R_RCX); } -void iFpupu(x64emu_t *emu, uintptr_t fcn) { iFpupu_t fn = (iFpupu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } -void iFpupU(x64emu_t *emu, uintptr_t fcn) { iFpupU_t fn = (iFpupU_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint64_t)R_RCX); } -void iFpupL(x64emu_t *emu, uintptr_t fcn) { iFpupL_t fn = (iFpupL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } -void iFpupp(x64emu_t *emu, uintptr_t fcn) { iFpupp_t fn = (iFpupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFpupV(x64emu_t *emu, uintptr_t fcn) { iFpupV_t fn = (iFpupV_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } -void iFpUip(x64emu_t *emu, uintptr_t fcn) { iFpUip_t fn = (iFpUip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFpUup(x64emu_t *emu, uintptr_t fcn) { iFpUup_t fn = (iFpUup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } -void iFpUUU(x64emu_t *emu, uintptr_t fcn) { iFpUUU_t fn = (iFpUUU_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX); } -void iFpULp(x64emu_t *emu, uintptr_t fcn) { iFpULp_t fn = (iFpULp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } -void iFpUpp(x64emu_t *emu, uintptr_t fcn) { iFpUpp_t fn = (iFpUpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFpdip(x64emu_t *emu, uintptr_t fcn) { iFpdip_t fn = (iFpdip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, emu->xmm[0].d[0], (int32_t)R_RSI, (void*)R_RDX); } -void iFplii(x64emu_t *emu, uintptr_t fcn) { iFplii_t fn = (iFplii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void iFplip(x64emu_t *emu, uintptr_t fcn) { iFplip_t fn = (iFplip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFplpi(x64emu_t *emu, uintptr_t fcn) { iFplpi_t fn = (iFplpi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFplpp(x64emu_t *emu, uintptr_t fcn) { iFplpp_t fn = (iFplpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFpLii(x64emu_t *emu, uintptr_t fcn) { iFpLii_t fn = (iFpLii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void iFpLiL(x64emu_t *emu, uintptr_t fcn) { iFpLiL_t fn = (iFpLiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX); } -void iFpLip(x64emu_t *emu, uintptr_t fcn) { iFpLip_t fn = (iFpLip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFpLuu(x64emu_t *emu, uintptr_t fcn) { iFpLuu_t fn = (iFpLuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } -void iFpLup(x64emu_t *emu, uintptr_t fcn) { iFpLup_t fn = (iFpLup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } -void iFpLlp(x64emu_t *emu, uintptr_t fcn) { iFpLlp_t fn = (iFpLlp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } -void iFpLLu(x64emu_t *emu, uintptr_t fcn) { iFpLLu_t fn = (iFpLLu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX); } -void iFpLLL(x64emu_t *emu, uintptr_t fcn) { iFpLLL_t fn = (iFpLLL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } -void iFpLLp(x64emu_t *emu, uintptr_t fcn) { iFpLLp_t fn = (iFpLLp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } -void iFpLpi(x64emu_t *emu, uintptr_t fcn) { iFpLpi_t fn = (iFpLpi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFpLpf(x64emu_t *emu, uintptr_t fcn) { iFpLpf_t fn = (iFpLpf_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, emu->xmm[0].f[0]); } -void iFpLpd(x64emu_t *emu, uintptr_t fcn) { iFpLpd_t fn = (iFpLpd_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, emu->xmm[0].d[0]); } -void iFpLpD(x64emu_t *emu, uintptr_t fcn) { iFpLpD_t fn = (iFpLpD_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, LD2localLD((void*)(R_RSP + 8))); } -void iFpLpL(x64emu_t *emu, uintptr_t fcn) { iFpLpL_t fn = (iFpLpL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } -void iFpLpp(x64emu_t *emu, uintptr_t fcn) { iFpLpp_t fn = (iFpLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFppii(x64emu_t *emu, uintptr_t fcn) { iFppii_t fn = (iFppii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void iFppiu(x64emu_t *emu, uintptr_t fcn) { iFppiu_t fn = (iFppiu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } -void iFppiU(x64emu_t *emu, uintptr_t fcn) { iFppiU_t fn = (iFppiU_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint64_t)R_RCX); } -void iFppiL(x64emu_t *emu, uintptr_t fcn) { iFppiL_t fn = (iFppiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX); } -void iFppip(x64emu_t *emu, uintptr_t fcn) { iFppip_t fn = (iFppip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFppIL(x64emu_t *emu, uintptr_t fcn) { iFppIL_t fn = (iFppIL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (uintptr_t)R_RCX); } -void iFppCC(x64emu_t *emu, uintptr_t fcn) { iFppCC_t fn = (iFppCC_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX); } -void iFppuw(x64emu_t *emu, uintptr_t fcn) { iFppuw_t fn = (iFppuw_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int16_t)R_RCX); } -void iFppui(x64emu_t *emu, uintptr_t fcn) { iFppui_t fn = (iFppui_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } -void iFppuu(x64emu_t *emu, uintptr_t fcn) { iFppuu_t fn = (iFppuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } -void iFppuL(x64emu_t *emu, uintptr_t fcn) { iFppuL_t fn = (iFppuL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX); } -void iFppup(x64emu_t *emu, uintptr_t fcn) { iFppup_t fn = (iFppup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } -void iFppdd(x64emu_t *emu, uintptr_t fcn) { iFppdd_t fn = (iFppdd_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0]); } -void iFppdp(x64emu_t *emu, uintptr_t fcn) { iFppdp_t fn = (iFppdp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], (void*)R_RDX); } -void iFppli(x64emu_t *emu, uintptr_t fcn) { iFppli_t fn = (iFppli_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX); } -void iFppll(x64emu_t *emu, uintptr_t fcn) { iFppll_t fn = (iFppll_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX); } -void iFpplL(x64emu_t *emu, uintptr_t fcn) { iFpplL_t fn = (iFpplL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (uintptr_t)R_RCX); } -void iFpplp(x64emu_t *emu, uintptr_t fcn) { iFpplp_t fn = (iFpplp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } -void iFppLi(x64emu_t *emu, uintptr_t fcn) { iFppLi_t fn = (iFppLi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX); } -void iFppLL(x64emu_t *emu, uintptr_t fcn) { iFppLL_t fn = (iFppLL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } -void iFppLp(x64emu_t *emu, uintptr_t fcn) { iFppLp_t fn = (iFppLp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } -void iFpppi(x64emu_t *emu, uintptr_t fcn) { iFpppi_t fn = (iFpppi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFpppC(x64emu_t *emu, uintptr_t fcn) { iFpppC_t fn = (iFpppC_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint8_t)R_RCX); } -void iFpppu(x64emu_t *emu, uintptr_t fcn) { iFpppu_t fn = (iFpppu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } -void iFpppL(x64emu_t *emu, uintptr_t fcn) { iFpppL_t fn = (iFpppL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } -void iFpppp(x64emu_t *emu, uintptr_t fcn) { iFpppp_t fn = (iFpppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFbupp(x64emu_t *emu, uintptr_t fcn) { iFbupp_t fn = (iFbupp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(int32_t)fn(aligned_xcb, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } -void IFEpIi(x64emu_t *emu, uintptr_t fcn) { IFEpIi_t fn = (IFEpIi_t)fcn; R_RAX=(int64_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (int32_t)R_RDX); } -void IFipUI(x64emu_t *emu, uintptr_t fcn) { IFipUI_t fn = (IFipUI_t)fcn; R_RAX=(int64_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (int64_t)R_RCX); } -void IFipUp(x64emu_t *emu, uintptr_t fcn) { IFipUp_t fn = (IFipUp_t)fcn; R_RAX=(int64_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (void*)R_RCX); } -void IFpIip(x64emu_t *emu, uintptr_t fcn) { IFpIip_t fn = (IFpIip_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (int64_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void IFppii(x64emu_t *emu, uintptr_t fcn) { IFppii_t fn = (IFppii_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void IFppip(x64emu_t *emu, uintptr_t fcn) { IFppip_t fn = (IFppip_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void IFSIii(x64emu_t *emu, uintptr_t fcn) { IFSIii_t fn = (IFSIii_t)fcn; R_RAX=(int64_t)fn(io_convert((void*)R_RDI), (int64_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void vFHHpi(x64emu_t *emu, uintptr_t fcn) { vFHHpi_t fn = (vFHHpi_t)fcn; fn((unsigned __int128)R_RDI + ((unsigned __int128)R_RSI << 64), (unsigned __int128)R_RDX + ((unsigned __int128)R_RCX << 64), (void*)R_R8, (int32_t)R_R9); } +void cFpiii(x64emu_t *emu, uintptr_t fcn) { cFpiii_t fn = (cFpiii_t)fcn; R_RAX=(uint8_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void cFpipp(x64emu_t *emu, uintptr_t fcn) { cFpipp_t fn = (cFpipp_t)fcn; R_RAX=(uint8_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFEiip(x64emu_t *emu, uintptr_t fcn) { iFEiip_t fn = (iFEiip_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void iFEiiN(x64emu_t *emu, uintptr_t fcn) { iFEiiN_t fn = (iFEiiN_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void iFEipp(x64emu_t *emu, uintptr_t fcn) { iFEipp_t fn = (iFEipp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFEipV(x64emu_t *emu, uintptr_t fcn) { iFEipV_t fn = (iFEipV_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); } +void iFEipA(x64emu_t *emu, uintptr_t fcn) { iFEipA_t fn = (iFEipA_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFEupu(x64emu_t *emu, uintptr_t fcn) { iFEupu_t fn = (iFEupu_t)fcn; R_RAX=(uint32_t)fn(emu, (uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } +void iFEupp(x64emu_t *emu, uintptr_t fcn) { iFEupp_t fn = (iFEupp_t)fcn; R_RAX=(uint32_t)fn(emu, (uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFEpii(x64emu_t *emu, uintptr_t fcn) { iFEpii_t fn = (iFEpii_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } +void iFEpip(x64emu_t *emu, uintptr_t fcn) { iFEpip_t fn = (iFEpip_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void iFEpiV(x64emu_t *emu, uintptr_t fcn) { iFEpiV_t fn = (iFEpiV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)(R_RSP + 8)); } +void iFEpiA(x64emu_t *emu, uintptr_t fcn) { iFEpiA_t fn = (iFEpiA_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void iFEpui(x64emu_t *emu, uintptr_t fcn) { iFEpui_t fn = (iFEpui_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX); } +void iFEpup(x64emu_t *emu, uintptr_t fcn) { iFEpup_t fn = (iFEpup_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } +void iFEpUi(x64emu_t *emu, uintptr_t fcn) { iFEpUi_t fn = (iFEpUi_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (int32_t)R_RDX); } +void iFEpUp(x64emu_t *emu, uintptr_t fcn) { iFEpUp_t fn = (iFEpUp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX); } +void iFEpLi(x64emu_t *emu, uintptr_t fcn) { iFEpLi_t fn = (iFEpLi_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX); } +void iFEpLp(x64emu_t *emu, uintptr_t fcn) { iFEpLp_t fn = (iFEpLp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } +void iFEppi(x64emu_t *emu, uintptr_t fcn) { iFEppi_t fn = (iFEppi_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } +void iFEppd(x64emu_t *emu, uintptr_t fcn) { iFEppd_t fn = (iFEppd_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0]); } +void iFEppL(x64emu_t *emu, uintptr_t fcn) { iFEppL_t fn = (iFEppL_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } +void iFEppp(x64emu_t *emu, uintptr_t fcn) { iFEppp_t fn = (iFEppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFEppV(x64emu_t *emu, uintptr_t fcn) { iFEppV_t fn = (iFEppV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); } +void iFEppA(x64emu_t *emu, uintptr_t fcn) { iFEppA_t fn = (iFEppA_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFEpON(x64emu_t *emu, uintptr_t fcn) { iFEpON_t fn = (iFEpON_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, of_convert((int32_t)R_RSI), (void*)R_RDX); } +void iFESpV(x64emu_t *emu, uintptr_t fcn) { iFESpV_t fn = (iFESpV_t)fcn; R_RAX=(uint32_t)fn(emu, io_convert((void*)R_RDI), (void*)R_RSI, (void*)(R_RSP + 8)); } +void iFESpA(x64emu_t *emu, uintptr_t fcn) { iFESpA_t fn = (iFESpA_t)fcn; R_RAX=(uint32_t)fn(emu, io_convert((void*)R_RDI), (void*)R_RSI, (void*)R_RDX); } +void iFwwww(x64emu_t *emu, uintptr_t fcn) { iFwwww_t fn = (iFwwww_t)fcn; R_RAX=(uint32_t)fn((int16_t)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX, (int16_t)R_RCX); } +void iFwppp(x64emu_t *emu, uintptr_t fcn) { iFwppp_t fn = (iFwppp_t)fcn; R_RAX=(uint32_t)fn((int16_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFiiii(x64emu_t *emu, uintptr_t fcn) { iFiiii_t fn = (iFiiii_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void iFiiiu(x64emu_t *emu, uintptr_t fcn) { iFiiiu_t fn = (iFiiiu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } +void iFiiip(x64emu_t *emu, uintptr_t fcn) { iFiiip_t fn = (iFiiip_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFiiiN(x64emu_t *emu, uintptr_t fcn) { iFiiiN_t fn = (iFiiiN_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFiiII(x64emu_t *emu, uintptr_t fcn) { iFiiII_t fn = (iFiiII_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX); } +void iFiiui(x64emu_t *emu, uintptr_t fcn) { iFiiui_t fn = (iFiiui_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } +void iFiill(x64emu_t *emu, uintptr_t fcn) { iFiill_t fn = (iFiill_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX); } +void iFiipi(x64emu_t *emu, uintptr_t fcn) { iFiipi_t fn = (iFiipi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFiipp(x64emu_t *emu, uintptr_t fcn) { iFiipp_t fn = (iFiipp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFiIIi(x64emu_t *emu, uintptr_t fcn) { iFiIIi_t fn = (iFiIIi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int32_t)R_RCX); } +void iFiIIu(x64emu_t *emu, uintptr_t fcn) { iFiIIu_t fn = (iFiIIu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (uint32_t)R_RCX); } +void iFiWii(x64emu_t *emu, uintptr_t fcn) { iFiWii_t fn = (iFiWii_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint16_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void iFiuwp(x64emu_t *emu, uintptr_t fcn) { iFiuwp_t fn = (iFiuwp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (int16_t)R_RDX, (void*)R_RCX); } +void iFiuup(x64emu_t *emu, uintptr_t fcn) { iFiuup_t fn = (iFiuup_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void iFiupp(x64emu_t *emu, uintptr_t fcn) { iFiupp_t fn = (iFiupp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFilli(x64emu_t *emu, uintptr_t fcn) { iFilli_t fn = (iFilli_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX); } +void iFiLpL(x64emu_t *emu, uintptr_t fcn) { iFiLpL_t fn = (iFiLpL_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } +void iFipii(x64emu_t *emu, uintptr_t fcn) { iFipii_t fn = (iFipii_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void iFipip(x64emu_t *emu, uintptr_t fcn) { iFipip_t fn = (iFipip_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFipWp(x64emu_t *emu, uintptr_t fcn) { iFipWp_t fn = (iFipWp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint16_t)R_RDX, (void*)R_RCX); } +void iFipui(x64emu_t *emu, uintptr_t fcn) { iFipui_t fn = (iFipui_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } +void iFipuU(x64emu_t *emu, uintptr_t fcn) { iFipuU_t fn = (iFipuU_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint64_t)R_RCX); } +void iFipLi(x64emu_t *emu, uintptr_t fcn) { iFipLi_t fn = (iFipLi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX); } +void iFipLu(x64emu_t *emu, uintptr_t fcn) { iFipLu_t fn = (iFipLu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX); } +void iFipLp(x64emu_t *emu, uintptr_t fcn) { iFipLp_t fn = (iFipLp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } +void iFippi(x64emu_t *emu, uintptr_t fcn) { iFippi_t fn = (iFippi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFippu(x64emu_t *emu, uintptr_t fcn) { iFippu_t fn = (iFippu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } +void iFippl(x64emu_t *emu, uintptr_t fcn) { iFippl_t fn = (iFippl_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (intptr_t)R_RCX); } +void iFippL(x64emu_t *emu, uintptr_t fcn) { iFippL_t fn = (iFippL_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } +void iFippp(x64emu_t *emu, uintptr_t fcn) { iFippp_t fn = (iFippp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFipON(x64emu_t *emu, uintptr_t fcn) { iFipON_t fn = (iFipON_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, of_convert((int32_t)R_RDX), (void*)R_RCX); } +void iFuiup(x64emu_t *emu, uintptr_t fcn) { iFuiup_t fn = (iFuiup_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void iFuipp(x64emu_t *emu, uintptr_t fcn) { iFuipp_t fn = (iFuipp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFuWWp(x64emu_t *emu, uintptr_t fcn) { iFuWWp_t fn = (iFuWWp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint16_t)R_RSI, (uint16_t)R_RDX, (void*)R_RCX); } +void iFuuuu(x64emu_t *emu, uintptr_t fcn) { iFuuuu_t fn = (iFuuuu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } +void iFuupi(x64emu_t *emu, uintptr_t fcn) { iFuupi_t fn = (iFuupi_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFuupu(x64emu_t *emu, uintptr_t fcn) { iFuupu_t fn = (iFuupu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } +void iFuupp(x64emu_t *emu, uintptr_t fcn) { iFuupp_t fn = (iFuupp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFupup(x64emu_t *emu, uintptr_t fcn) { iFupup_t fn = (iFupup_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void iFupLp(x64emu_t *emu, uintptr_t fcn) { iFupLp_t fn = (iFupLp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } +void iFuppi(x64emu_t *emu, uintptr_t fcn) { iFuppi_t fn = (iFuppi_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFuppu(x64emu_t *emu, uintptr_t fcn) { iFuppu_t fn = (iFuppu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } +void iFuppp(x64emu_t *emu, uintptr_t fcn) { iFuppp_t fn = (iFuppp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFLpLp(x64emu_t *emu, uintptr_t fcn) { iFLpLp_t fn = (iFLpLp_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } +void iFLppp(x64emu_t *emu, uintptr_t fcn) { iFLppp_t fn = (iFLppp_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFpwww(x64emu_t *emu, uintptr_t fcn) { iFpwww_t fn = (iFpwww_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX, (int16_t)R_RCX); } +void iFpwpp(x64emu_t *emu, uintptr_t fcn) { iFpwpp_t fn = (iFpwpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int16_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFpiii(x64emu_t *emu, uintptr_t fcn) { iFpiii_t fn = (iFpiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void iFpiiC(x64emu_t *emu, uintptr_t fcn) { iFpiiC_t fn = (iFpiiC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint8_t)R_RCX); } +void iFpiiu(x64emu_t *emu, uintptr_t fcn) { iFpiiu_t fn = (iFpiiu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } +void iFpiid(x64emu_t *emu, uintptr_t fcn) { iFpiid_t fn = (iFpiid_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, emu->xmm[0].d[0]); } +void iFpiiL(x64emu_t *emu, uintptr_t fcn) { iFpiiL_t fn = (iFpiiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX); } +void iFpiip(x64emu_t *emu, uintptr_t fcn) { iFpiip_t fn = (iFpiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFpiuu(x64emu_t *emu, uintptr_t fcn) { iFpiuu_t fn = (iFpiuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } +void iFpiuL(x64emu_t *emu, uintptr_t fcn) { iFpiuL_t fn = (iFpiuL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX); } +void iFpiup(x64emu_t *emu, uintptr_t fcn) { iFpiup_t fn = (iFpiup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void iFpiUp(x64emu_t *emu, uintptr_t fcn) { iFpiUp_t fn = (iFpiUp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (void*)R_RCX); } +void iFpili(x64emu_t *emu, uintptr_t fcn) { iFpili_t fn = (iFpili_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX); } +void iFpild(x64emu_t *emu, uintptr_t fcn) { iFpild_t fn = (iFpild_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, emu->xmm[0].d[0]); } +void iFpiLL(x64emu_t *emu, uintptr_t fcn) { iFpiLL_t fn = (iFpiLL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } +void iFpipi(x64emu_t *emu, uintptr_t fcn) { iFpipi_t fn = (iFpipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFpipu(x64emu_t *emu, uintptr_t fcn) { iFpipu_t fn = (iFpipu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } +void iFpipL(x64emu_t *emu, uintptr_t fcn) { iFpipL_t fn = (iFpipL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } +void iFpipp(x64emu_t *emu, uintptr_t fcn) { iFpipp_t fn = (iFpipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFpipV(x64emu_t *emu, uintptr_t fcn) { iFpipV_t fn = (iFpipV_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void iFpCCC(x64emu_t *emu, uintptr_t fcn) { iFpCCC_t fn = (iFpCCC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX); } +void iFpCpi(x64emu_t *emu, uintptr_t fcn) { iFpCpi_t fn = (iFpCpi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFpCpp(x64emu_t *emu, uintptr_t fcn) { iFpCpp_t fn = (iFpCpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFpWWW(x64emu_t *emu, uintptr_t fcn) { iFpWWW_t fn = (iFpWWW_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (uint16_t)R_RDX, (uint16_t)R_RCX); } +void iFpWWu(x64emu_t *emu, uintptr_t fcn) { iFpWWu_t fn = (iFpWWu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (uint16_t)R_RDX, (uint32_t)R_RCX); } +void iFpWpp(x64emu_t *emu, uintptr_t fcn) { iFpWpp_t fn = (iFpWpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFpuwp(x64emu_t *emu, uintptr_t fcn) { iFpuwp_t fn = (iFpuwp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int16_t)R_RDX, (void*)R_RCX); } +void iFpuii(x64emu_t *emu, uintptr_t fcn) { iFpuii_t fn = (iFpuii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void iFpuiL(x64emu_t *emu, uintptr_t fcn) { iFpuiL_t fn = (iFpuiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX); } +void iFpuip(x64emu_t *emu, uintptr_t fcn) { iFpuip_t fn = (iFpuip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFpuui(x64emu_t *emu, uintptr_t fcn) { iFpuui_t fn = (iFpuui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } +void iFpuuu(x64emu_t *emu, uintptr_t fcn) { iFpuuu_t fn = (iFpuuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } +void iFpuul(x64emu_t *emu, uintptr_t fcn) { iFpuul_t fn = (iFpuul_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (intptr_t)R_RCX); } +void iFpuuL(x64emu_t *emu, uintptr_t fcn) { iFpuuL_t fn = (iFpuuL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX); } +void iFpuup(x64emu_t *emu, uintptr_t fcn) { iFpuup_t fn = (iFpuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void iFpuUp(x64emu_t *emu, uintptr_t fcn) { iFpuUp_t fn = (iFpuUp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint64_t)R_RDX, (void*)R_RCX); } +void iFpufp(x64emu_t *emu, uintptr_t fcn) { iFpufp_t fn = (iFpufp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, emu->xmm[0].f[0], (void*)R_RDX); } +void iFpuLi(x64emu_t *emu, uintptr_t fcn) { iFpuLi_t fn = (iFpuLi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX); } +void iFpuLL(x64emu_t *emu, uintptr_t fcn) { iFpuLL_t fn = (iFpuLL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } +void iFpuLp(x64emu_t *emu, uintptr_t fcn) { iFpuLp_t fn = (iFpuLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } +void iFpupi(x64emu_t *emu, uintptr_t fcn) { iFpupi_t fn = (iFpupi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFpupC(x64emu_t *emu, uintptr_t fcn) { iFpupC_t fn = (iFpupC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint8_t)R_RCX); } +void iFpupu(x64emu_t *emu, uintptr_t fcn) { iFpupu_t fn = (iFpupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } +void iFpupU(x64emu_t *emu, uintptr_t fcn) { iFpupU_t fn = (iFpupU_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint64_t)R_RCX); } +void iFpupL(x64emu_t *emu, uintptr_t fcn) { iFpupL_t fn = (iFpupL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } +void iFpupp(x64emu_t *emu, uintptr_t fcn) { iFpupp_t fn = (iFpupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFpupV(x64emu_t *emu, uintptr_t fcn) { iFpupV_t fn = (iFpupV_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void iFpUip(x64emu_t *emu, uintptr_t fcn) { iFpUip_t fn = (iFpUip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFpUup(x64emu_t *emu, uintptr_t fcn) { iFpUup_t fn = (iFpUup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void iFpUUu(x64emu_t *emu, uintptr_t fcn) { iFpUUu_t fn = (iFpUUu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint32_t)R_RCX); } +void iFpUUU(x64emu_t *emu, uintptr_t fcn) { iFpUUU_t fn = (iFpUUU_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX); } +void iFpULp(x64emu_t *emu, uintptr_t fcn) { iFpULp_t fn = (iFpULp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } +void iFpUpp(x64emu_t *emu, uintptr_t fcn) { iFpUpp_t fn = (iFpUpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFpdip(x64emu_t *emu, uintptr_t fcn) { iFpdip_t fn = (iFpdip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, emu->xmm[0].d[0], (int32_t)R_RSI, (void*)R_RDX); } +void iFplii(x64emu_t *emu, uintptr_t fcn) { iFplii_t fn = (iFplii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void iFplip(x64emu_t *emu, uintptr_t fcn) { iFplip_t fn = (iFplip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFpllp(x64emu_t *emu, uintptr_t fcn) { iFpllp_t fn = (iFpllp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } +void iFplpi(x64emu_t *emu, uintptr_t fcn) { iFplpi_t fn = (iFplpi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFplpp(x64emu_t *emu, uintptr_t fcn) { iFplpp_t fn = (iFplpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFpLii(x64emu_t *emu, uintptr_t fcn) { iFpLii_t fn = (iFpLii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void iFpLiL(x64emu_t *emu, uintptr_t fcn) { iFpLiL_t fn = (iFpLiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX); } +void iFpLip(x64emu_t *emu, uintptr_t fcn) { iFpLip_t fn = (iFpLip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFpLui(x64emu_t *emu, uintptr_t fcn) { iFpLui_t fn = (iFpLui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } +void iFpLuu(x64emu_t *emu, uintptr_t fcn) { iFpLuu_t fn = (iFpLuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } +void iFpLup(x64emu_t *emu, uintptr_t fcn) { iFpLup_t fn = (iFpLup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void iFpLlp(x64emu_t *emu, uintptr_t fcn) { iFpLlp_t fn = (iFpLlp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } +void iFpLLu(x64emu_t *emu, uintptr_t fcn) { iFpLLu_t fn = (iFpLLu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX); } +void iFpLLL(x64emu_t *emu, uintptr_t fcn) { iFpLLL_t fn = (iFpLLL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } +void iFpLLp(x64emu_t *emu, uintptr_t fcn) { iFpLLp_t fn = (iFpLLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } +void iFpLpi(x64emu_t *emu, uintptr_t fcn) { iFpLpi_t fn = (iFpLpi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFpLpu(x64emu_t *emu, uintptr_t fcn) { iFpLpu_t fn = (iFpLpu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } +void iFpLpf(x64emu_t *emu, uintptr_t fcn) { iFpLpf_t fn = (iFpLpf_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, emu->xmm[0].f[0]); } +void iFpLpd(x64emu_t *emu, uintptr_t fcn) { iFpLpd_t fn = (iFpLpd_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, emu->xmm[0].d[0]); } +void iFpLpL(x64emu_t *emu, uintptr_t fcn) { iFpLpL_t fn = (iFpLpL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } +void iFpLpp(x64emu_t *emu, uintptr_t fcn) { iFpLpp_t fn = (iFpLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFppii(x64emu_t *emu, uintptr_t fcn) { iFppii_t fn = (iFppii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void iFppiu(x64emu_t *emu, uintptr_t fcn) { iFppiu_t fn = (iFppiu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } +void iFppiU(x64emu_t *emu, uintptr_t fcn) { iFppiU_t fn = (iFppiU_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint64_t)R_RCX); } +void iFppiL(x64emu_t *emu, uintptr_t fcn) { iFppiL_t fn = (iFppiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX); } +void iFppip(x64emu_t *emu, uintptr_t fcn) { iFppip_t fn = (iFppip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFppIL(x64emu_t *emu, uintptr_t fcn) { iFppIL_t fn = (iFppIL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (uintptr_t)R_RCX); } +void iFppCC(x64emu_t *emu, uintptr_t fcn) { iFppCC_t fn = (iFppCC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX); } +void iFppuw(x64emu_t *emu, uintptr_t fcn) { iFppuw_t fn = (iFppuw_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int16_t)R_RCX); } +void iFppui(x64emu_t *emu, uintptr_t fcn) { iFppui_t fn = (iFppui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } +void iFppuu(x64emu_t *emu, uintptr_t fcn) { iFppuu_t fn = (iFppuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } +void iFppuL(x64emu_t *emu, uintptr_t fcn) { iFppuL_t fn = (iFppuL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX); } +void iFppup(x64emu_t *emu, uintptr_t fcn) { iFppup_t fn = (iFppup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void iFppdd(x64emu_t *emu, uintptr_t fcn) { iFppdd_t fn = (iFppdd_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0]); } +void iFppdp(x64emu_t *emu, uintptr_t fcn) { iFppdp_t fn = (iFppdp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], (void*)R_RDX); } +void iFppli(x64emu_t *emu, uintptr_t fcn) { iFppli_t fn = (iFppli_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX); } +void iFppll(x64emu_t *emu, uintptr_t fcn) { iFppll_t fn = (iFppll_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX); } +void iFpplL(x64emu_t *emu, uintptr_t fcn) { iFpplL_t fn = (iFpplL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (uintptr_t)R_RCX); } +void iFpplp(x64emu_t *emu, uintptr_t fcn) { iFpplp_t fn = (iFpplp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } +void iFppLi(x64emu_t *emu, uintptr_t fcn) { iFppLi_t fn = (iFppLi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX); } +void iFppLu(x64emu_t *emu, uintptr_t fcn) { iFppLu_t fn = (iFppLu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX); } +void iFppLl(x64emu_t *emu, uintptr_t fcn) { iFppLl_t fn = (iFppLl_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (intptr_t)R_RCX); } +void iFppLL(x64emu_t *emu, uintptr_t fcn) { iFppLL_t fn = (iFppLL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } +void iFppLp(x64emu_t *emu, uintptr_t fcn) { iFppLp_t fn = (iFppLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } +void iFpppi(x64emu_t *emu, uintptr_t fcn) { iFpppi_t fn = (iFpppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFpppC(x64emu_t *emu, uintptr_t fcn) { iFpppC_t fn = (iFpppC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint8_t)R_RCX); } +void iFpppu(x64emu_t *emu, uintptr_t fcn) { iFpppu_t fn = (iFpppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } +void iFpppL(x64emu_t *emu, uintptr_t fcn) { iFpppL_t fn = (iFpppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } +void iFpppp(x64emu_t *emu, uintptr_t fcn) { iFpppp_t fn = (iFpppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFpONN(x64emu_t *emu, uintptr_t fcn) { iFpONN_t fn = (iFpONN_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, of_convert((int32_t)R_RSI), (void*)R_RDX, (void*)R_RCX); } +void iFSpii(x64emu_t *emu, uintptr_t fcn) { iFSpii_t fn = (iFSpii_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void iFSpiL(x64emu_t *emu, uintptr_t fcn) { iFSpiL_t fn = (iFSpiL_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX); } +void iFbupp(x64emu_t *emu, uintptr_t fcn) { iFbupp_t fn = (iFbupp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } +void IFEpIi(x64emu_t *emu, uintptr_t fcn) { IFEpIi_t fn = (IFEpIi_t)fcn; S_RAX=(int64_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (int32_t)R_RDX); } +void IFpIip(x64emu_t *emu, uintptr_t fcn) { IFpIip_t fn = (IFpIip_t)fcn; S_RAX=(int64_t)fn((void*)R_RDI, (int64_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void IFppii(x64emu_t *emu, uintptr_t fcn) { IFppii_t fn = (IFppii_t)fcn; S_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void IFppip(x64emu_t *emu, uintptr_t fcn) { IFppip_t fn = (IFppip_t)fcn; S_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void IFSIii(x64emu_t *emu, uintptr_t fcn) { IFSIii_t fn = (IFSIii_t)fcn; S_RAX=(int64_t)fn(io_convert((void*)R_RDI), (int64_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void CFuuff(x64emu_t *emu, uintptr_t fcn) { CFuuff_t fn = (CFuuff_t)fcn; R_RAX=(unsigned char)fn((uint32_t)R_RDI, (uint32_t)R_RSI, emu->xmm[0].f[0], emu->xmm[1].f[0]); } -void CFpiii(x64emu_t *emu, uintptr_t fcn) { CFpiii_t fn = (CFpiii_t)fcn; R_RAX=(unsigned char)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void CFpLLi(x64emu_t *emu, uintptr_t fcn) { CFpLLi_t fn = (CFpLLi_t)fcn; R_RAX=(unsigned char)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX); } void CFppip(x64emu_t *emu, uintptr_t fcn) { CFppip_t fn = (CFppip_t)fcn; R_RAX=(unsigned char)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void CFbupp(x64emu_t *emu, uintptr_t fcn) { CFbupp_t fn = (CFbupp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(unsigned char)fn(aligned_xcb, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } @@ -4292,24 +4570,29 @@ void uFiiii(x64emu_t *emu, uintptr_t fcn) { uFiiii_t fn = (uFiiii_t)fcn; R_RAX=( void uFiiuu(x64emu_t *emu, uintptr_t fcn) { uFiiuu_t fn = (uFiiuu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } void uFifff(x64emu_t *emu, uintptr_t fcn) { uFifff_t fn = (uFifff_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0]); } void uFuuuu(x64emu_t *emu, uintptr_t fcn) { uFuuuu_t fn = (uFuuuu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } +void uFuppd(x64emu_t *emu, uintptr_t fcn) { uFuppd_t fn = (uFuppd_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, emu->xmm[0].d[0]); } +void uFLppp(x64emu_t *emu, uintptr_t fcn) { uFLppp_t fn = (uFLppp_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void uFpiip(x64emu_t *emu, uintptr_t fcn) { uFpiip_t fn = (uFpiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void uFpipu(x64emu_t *emu, uintptr_t fcn) { uFpipu_t fn = (uFpipu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } void uFpipL(x64emu_t *emu, uintptr_t fcn) { uFpipL_t fn = (uFpipL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void uFpipp(x64emu_t *emu, uintptr_t fcn) { uFpipp_t fn = (uFpipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void uFpCCC(x64emu_t *emu, uintptr_t fcn) { uFpCCC_t fn = (uFpCCC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX); } -void uFpuip(x64emu_t *emu, uintptr_t fcn) { uFpuip_t fn = (uFpuip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void uFpuup(x64emu_t *emu, uintptr_t fcn) { uFpuup_t fn = (uFpuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } void uFpupi(x64emu_t *emu, uintptr_t fcn) { uFpupi_t fn = (uFpupi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void uFpupu(x64emu_t *emu, uintptr_t fcn) { uFpupu_t fn = (uFpupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } void uFpupp(x64emu_t *emu, uintptr_t fcn) { uFpupp_t fn = (uFpupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void uFpubp(x64emu_t *emu, uintptr_t fcn) { uFpubp_t fn = (uFpubp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDX); R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, aligned_xcb, (void*)R_RCX); unalign_xcb_connection(aligned_xcb, (void*)R_RDX); } +void uFplup(x64emu_t *emu, uintptr_t fcn) { uFplup_t fn = (uFplup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void uFppii(x64emu_t *emu, uintptr_t fcn) { uFppii_t fn = (uFppii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void uFppiu(x64emu_t *emu, uintptr_t fcn) { uFppiu_t fn = (uFppiu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } void uFppip(x64emu_t *emu, uintptr_t fcn) { uFppip_t fn = (uFppip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void uFppuu(x64emu_t *emu, uintptr_t fcn) { uFppuu_t fn = (uFppuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } +void uFppup(x64emu_t *emu, uintptr_t fcn) { uFppup_t fn = (uFppup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } void uFpplp(x64emu_t *emu, uintptr_t fcn) { uFpplp_t fn = (uFpplp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } void uFppLp(x64emu_t *emu, uintptr_t fcn) { uFppLp_t fn = (uFppLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } void uFpppi(x64emu_t *emu, uintptr_t fcn) { uFpppi_t fn = (uFpppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void uFpppu(x64emu_t *emu, uintptr_t fcn) { uFpppu_t fn = (uFpppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } +void uFpppd(x64emu_t *emu, uintptr_t fcn) { uFpppd_t fn = (uFpppd_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, emu->xmm[0].d[0]); } void uFpppL(x64emu_t *emu, uintptr_t fcn) { uFpppL_t fn = (uFpppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void uFpppp(x64emu_t *emu, uintptr_t fcn) { uFpppp_t fn = (uFpppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void uFbipp(x64emu_t *emu, uintptr_t fcn) { uFbipp_t fn = (uFbipp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } @@ -4329,6 +4612,7 @@ void lFEppL(x64emu_t *emu, uintptr_t fcn) { lFEppL_t fn = (lFEppL_t)fcn; R_RAX=( void lFEppp(x64emu_t *emu, uintptr_t fcn) { lFEppp_t fn = (lFEppp_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } void lFiiLu(x64emu_t *emu, uintptr_t fcn) { lFiiLu_t fn = (lFiiLu_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX); } void lFiipL(x64emu_t *emu, uintptr_t fcn) { lFiipL_t fn = (lFiipL_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } +void lFipiI(x64emu_t *emu, uintptr_t fcn) { lFipiI_t fn = (lFipiI_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int64_t)R_RCX); } void lFipil(x64emu_t *emu, uintptr_t fcn) { lFipil_t fn = (lFipil_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX); } void lFipLi(x64emu_t *emu, uintptr_t fcn) { lFipLi_t fn = (lFipLi_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX); } void lFipLI(x64emu_t *emu, uintptr_t fcn) { lFipLI_t fn = (lFipLI_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int64_t)R_RCX); } @@ -4341,10 +4625,15 @@ void lFpili(x64emu_t *emu, uintptr_t fcn) { lFpili_t fn = (lFpili_t)fcn; R_RAX=( void lFpilp(x64emu_t *emu, uintptr_t fcn) { lFpilp_t fn = (lFpilp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } void lFpuip(x64emu_t *emu, uintptr_t fcn) { lFpuip_t fn = (lFpuip_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void lFplip(x64emu_t *emu, uintptr_t fcn) { lFplip_t fn = (lFplip_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void lFplup(x64emu_t *emu, uintptr_t fcn) { lFplup_t fn = (lFplup_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void lFplpi(x64emu_t *emu, uintptr_t fcn) { lFplpi_t fn = (lFplpi_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void lFplpp(x64emu_t *emu, uintptr_t fcn) { lFplpp_t fn = (lFplpp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void lFpLpp(x64emu_t *emu, uintptr_t fcn) { lFpLpp_t fn = (lFpLpp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void lFppii(x64emu_t *emu, uintptr_t fcn) { lFppii_t fn = (lFppii_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void lFppip(x64emu_t *emu, uintptr_t fcn) { lFppip_t fn = (lFppip_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void lFppiS(x64emu_t *emu, uintptr_t fcn) { lFppiS_t fn = (lFppiS_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, io_convert((void*)R_RCX)); } +void lFpplp(x64emu_t *emu, uintptr_t fcn) { lFpplp_t fn = (lFpplp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } +void lFppLp(x64emu_t *emu, uintptr_t fcn) { lFppLp_t fn = (lFppLp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } void lFpppL(x64emu_t *emu, uintptr_t fcn) { lFpppL_t fn = (lFpppL_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void lFpppp(x64emu_t *emu, uintptr_t fcn) { lFpppp_t fn = (lFpppp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void LFEppL(x64emu_t *emu, uintptr_t fcn) { LFEppL_t fn = (LFEppL_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } @@ -4356,7 +4645,10 @@ void LFuipL(x64emu_t *emu, uintptr_t fcn) { LFuipL_t fn = (LFuipL_t)fcn; R_RAX=( void LFpCii(x64emu_t *emu, uintptr_t fcn) { LFpCii_t fn = (LFpCii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint8_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void LFpupL(x64emu_t *emu, uintptr_t fcn) { LFpupL_t fn = (LFpupL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void LFpLCL(x64emu_t *emu, uintptr_t fcn) { LFpLCL_t fn = (LFpLCL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint8_t)R_RDX, (uintptr_t)R_RCX); } +void LFpLuu(x64emu_t *emu, uintptr_t fcn) { LFpLuu_t fn = (LFpLuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } void LFpLLp(x64emu_t *emu, uintptr_t fcn) { LFpLLp_t fn = (LFpLLp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } +void LFpLLS(x64emu_t *emu, uintptr_t fcn) { LFpLLS_t fn = (LFpLLS_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, io_convert((void*)R_RCX)); } +void LFpLpi(x64emu_t *emu, uintptr_t fcn) { LFpLpi_t fn = (LFpLpi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void LFpLpL(x64emu_t *emu, uintptr_t fcn) { LFpLpL_t fn = (LFpLpL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void LFpLpp(x64emu_t *emu, uintptr_t fcn) { LFpLpp_t fn = (LFpLpp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void LFppii(x64emu_t *emu, uintptr_t fcn) { LFppii_t fn = (LFppii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } @@ -4374,7 +4666,8 @@ void pFELpV(x64emu_t *emu, uintptr_t fcn) { pFELpV_t fn = (pFELpV_t)fcn; R_RAX=( void pFELpA(x64emu_t *emu, uintptr_t fcn) { pFELpA_t fn = (pFELpA_t)fcn; R_RAX=(uintptr_t)fn(emu, (uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } void pFEpii(x64emu_t *emu, uintptr_t fcn) { pFEpii_t fn = (pFEpii_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } void pFEpip(x64emu_t *emu, uintptr_t fcn) { pFEpip_t fn = (pFEpip_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } -void pFEpuL(x64emu_t *emu, uintptr_t fcn) { pFEpuL_t fn = (pFEpuL_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX); } +void pFEpiV(x64emu_t *emu, uintptr_t fcn) { pFEpiV_t fn = (pFEpiV_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)(R_RSP + 8)); } +void pFEpCL(x64emu_t *emu, uintptr_t fcn) { pFEpCL_t fn = (pFEpCL_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint8_t)R_RSI, (uintptr_t)R_RDX); } void pFEppi(x64emu_t *emu, uintptr_t fcn) { pFEppi_t fn = (pFEppi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void pFEppp(x64emu_t *emu, uintptr_t fcn) { pFEppp_t fn = (pFEppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } void pFEppV(x64emu_t *emu, uintptr_t fcn) { pFEppV_t fn = (pFEppV_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); } @@ -4384,24 +4677,25 @@ void pFiiuu(x64emu_t *emu, uintptr_t fcn) { pFiiuu_t fn = (pFiiuu_t)fcn; R_RAX=( void pFiiup(x64emu_t *emu, uintptr_t fcn) { pFiiup_t fn = (pFiiup_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } void pFiiLp(x64emu_t *emu, uintptr_t fcn) { pFiiLp_t fn = (pFiiLp_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } void pFiipi(x64emu_t *emu, uintptr_t fcn) { pFiipi_t fn = (pFiipi_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void pFiipp(x64emu_t *emu, uintptr_t fcn) { pFiipp_t fn = (pFiipp_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void pFiIIi(x64emu_t *emu, uintptr_t fcn) { pFiIIi_t fn = (pFiIIi_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int32_t)R_RCX); } void pFillu(x64emu_t *emu, uintptr_t fcn) { pFillu_t fn = (pFillu_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uint32_t)R_RCX); } -void pFipii(x64emu_t *emu, uintptr_t fcn) { pFipii_t fn = (pFipii_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void pFipip(x64emu_t *emu, uintptr_t fcn) { pFipip_t fn = (pFipip_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void pFippi(x64emu_t *emu, uintptr_t fcn) { pFippi_t fn = (pFippi_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void pFippu(x64emu_t *emu, uintptr_t fcn) { pFippu_t fn = (pFippu_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } +void pFippl(x64emu_t *emu, uintptr_t fcn) { pFippl_t fn = (pFippl_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (intptr_t)R_RCX); } void pFippL(x64emu_t *emu, uintptr_t fcn) { pFippL_t fn = (pFippL_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void pFippp(x64emu_t *emu, uintptr_t fcn) { pFippp_t fn = (pFippp_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void pFuuii(x64emu_t *emu, uintptr_t fcn) { pFuuii_t fn = (pFuuii_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void pFuuip(x64emu_t *emu, uintptr_t fcn) { pFuuip_t fn = (pFuuip_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void pFuuuu(x64emu_t *emu, uintptr_t fcn) { pFuuuu_t fn = (pFuuuu_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } +void pFuddd(x64emu_t *emu, uintptr_t fcn) { pFuddd_t fn = (pFuddd_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0]); } void pFullu(x64emu_t *emu, uintptr_t fcn) { pFullu_t fn = (pFullu_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uint32_t)R_RCX); } void pFupii(x64emu_t *emu, uintptr_t fcn) { pFupii_t fn = (pFupii_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void pFuppp(x64emu_t *emu, uintptr_t fcn) { pFuppp_t fn = (pFuppp_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void pFffff(x64emu_t *emu, uintptr_t fcn) { pFffff_t fn = (pFffff_t)fcn; R_RAX=(uintptr_t)fn(emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0]); } void pFdipp(x64emu_t *emu, uintptr_t fcn) { pFdipp_t fn = (pFdipp_t)fcn; R_RAX=(uintptr_t)fn(emu->xmm[0].d[0], (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } void pFdddd(x64emu_t *emu, uintptr_t fcn) { pFdddd_t fn = (pFdddd_t)fcn; R_RAX=(uintptr_t)fn(emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0]); } -void pFDipp(x64emu_t *emu, uintptr_t fcn) { pFDipp_t fn = (pFDipp_t)fcn; R_RAX=(uintptr_t)fn(LD2localLD((void*)(R_RSP + 8)), (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } void pFlfff(x64emu_t *emu, uintptr_t fcn) { pFlfff_t fn = (pFlfff_t)fcn; R_RAX=(uintptr_t)fn((intptr_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0]); } void pFLiip(x64emu_t *emu, uintptr_t fcn) { pFLiip_t fn = (pFLiip_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void pFLLup(x64emu_t *emu, uintptr_t fcn) { pFLLup_t fn = (pFLLup_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } @@ -4413,6 +4707,7 @@ void pFpiip(x64emu_t *emu, uintptr_t fcn) { pFpiip_t fn = (pFpiip_t)fcn; R_RAX=( void pFpiuu(x64emu_t *emu, uintptr_t fcn) { pFpiuu_t fn = (pFpiuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } void pFpiLi(x64emu_t *emu, uintptr_t fcn) { pFpiLi_t fn = (pFpiLi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX); } void pFpiLL(x64emu_t *emu, uintptr_t fcn) { pFpiLL_t fn = (pFpiLL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } +void pFpipc(x64emu_t *emu, uintptr_t fcn) { pFpipc_t fn = (pFpipc_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int8_t)R_RCX); } void pFpipi(x64emu_t *emu, uintptr_t fcn) { pFpipi_t fn = (pFpipi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void pFpipd(x64emu_t *emu, uintptr_t fcn) { pFpipd_t fn = (pFpipd_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, emu->xmm[0].d[0]); } void pFpipL(x64emu_t *emu, uintptr_t fcn) { pFpipL_t fn = (pFpipL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } @@ -4446,6 +4741,7 @@ void pFppii(x64emu_t *emu, uintptr_t fcn) { pFppii_t fn = (pFppii_t)fcn; R_RAX=( void pFppiu(x64emu_t *emu, uintptr_t fcn) { pFppiu_t fn = (pFppiu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } void pFppiL(x64emu_t *emu, uintptr_t fcn) { pFppiL_t fn = (pFppiL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX); } void pFppip(x64emu_t *emu, uintptr_t fcn) { pFppip_t fn = (pFppip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void pFppiS(x64emu_t *emu, uintptr_t fcn) { pFppiS_t fn = (pFppiS_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, io_convert((void*)R_RCX)); } void pFppCp(x64emu_t *emu, uintptr_t fcn) { pFppCp_t fn = (pFppCp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint8_t)R_RDX, (void*)R_RCX); } void pFppWp(x64emu_t *emu, uintptr_t fcn) { pFppWp_t fn = (pFppWp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint16_t)R_RDX, (void*)R_RCX); } void pFppuu(x64emu_t *emu, uintptr_t fcn) { pFppuu_t fn = (pFppuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } @@ -4461,6 +4757,7 @@ void pFpppi(x64emu_t *emu, uintptr_t fcn) { pFpppi_t fn = (pFpppi_t)fcn; R_RAX=( void pFpppu(x64emu_t *emu, uintptr_t fcn) { pFpppu_t fn = (pFpppu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } void pFpppL(x64emu_t *emu, uintptr_t fcn) { pFpppL_t fn = (pFpppL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void pFpppp(x64emu_t *emu, uintptr_t fcn) { pFpppp_t fn = (pFpppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void pFpONN(x64emu_t *emu, uintptr_t fcn) { pFpONN_t fn = (pFpONN_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, of_convert((int32_t)R_RSI), (void*)R_RDX, (void*)R_RCX); } void pFpbii(x64emu_t *emu, uintptr_t fcn) { pFpbii_t fn = (pFpbii_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RSI); R_RAX=(uintptr_t)fn((void*)R_RDI, aligned_xcb, (int32_t)R_RDX, (int32_t)R_RCX); unalign_xcb_connection(aligned_xcb, (void*)R_RSI); } void pFSppi(x64emu_t *emu, uintptr_t fcn) { pFSppi_t fn = (pFSppi_t)fcn; R_RAX=(uintptr_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void pFbCuW(x64emu_t *emu, uintptr_t fcn) { pFbCuW_t fn = (pFbCuW_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (uint8_t)R_RSI, (uint32_t)R_RDX, (uint16_t)R_RCX); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } @@ -4496,8 +4793,8 @@ void vFEpipV(x64emu_t *emu, uintptr_t fcn) { vFEpipV_t fn = (vFEpipV_t)fcn; fn(e void vFEpipA(x64emu_t *emu, uintptr_t fcn) { vFEpipA_t fn = (vFEpipA_t)fcn; fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void vFEpuup(x64emu_t *emu, uintptr_t fcn) { vFEpuup_t fn = (vFEpuup_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } void vFEpuuV(x64emu_t *emu, uintptr_t fcn) { vFEpuuV_t fn = (vFEpuuV_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)(R_RSP + 8)); } +void vFEpuuA(x64emu_t *emu, uintptr_t fcn) { vFEpuuA_t fn = (vFEpuuA_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } void vFEpupp(x64emu_t *emu, uintptr_t fcn) { vFEpupp_t fn = (vFEpupp_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void vFEpupA(x64emu_t *emu, uintptr_t fcn) { vFEpupA_t fn = (vFEpupA_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void vFEpLLp(x64emu_t *emu, uintptr_t fcn) { vFEpLLp_t fn = (vFEpLLp_t)fcn; fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } void vFEppip(x64emu_t *emu, uintptr_t fcn) { vFEppip_t fn = (vFEppip_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void vFEppiV(x64emu_t *emu, uintptr_t fcn) { vFEppiV_t fn = (vFEppiV_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)(R_RSP + 8)); } @@ -4512,19 +4809,18 @@ void vFiiuii(x64emu_t *emu, uintptr_t fcn) { vFiiuii_t fn = (vFiiuii_t)fcn; fn(( void vFiiuup(x64emu_t *emu, uintptr_t fcn) { vFiiuup_t fn = (vFiiuup_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } void vFiillu(x64emu_t *emu, uintptr_t fcn) { vFiillu_t fn = (vFiillu_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (uint32_t)R_R8); } void vFiilll(x64emu_t *emu, uintptr_t fcn) { vFiilll_t fn = (vFiilll_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8); } -void vFiipii(x64emu_t *emu, uintptr_t fcn) { vFiipii_t fn = (vFiipii_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } void vFiipll(x64emu_t *emu, uintptr_t fcn) { vFiipll_t fn = (vFiipll_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8); } +void vFiIIII(x64emu_t *emu, uintptr_t fcn) { vFiIIII_t fn = (vFiIIII_t)fcn; fn((int32_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8); } void vFiuiip(x64emu_t *emu, uintptr_t fcn) { vFiuiip_t fn = (vFiuiip_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void vFiuipi(x64emu_t *emu, uintptr_t fcn) { vFiuipi_t fn = (vFiuipi_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void vFiuuuu(x64emu_t *emu, uintptr_t fcn) { vFiuuuu_t fn = (vFiuuuu_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } void vFiulpp(x64emu_t *emu, uintptr_t fcn) { vFiulpp_t fn = (vFiulpp_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void vFiUUUU(x64emu_t *emu, uintptr_t fcn) { vFiUUUU_t fn = (vFiUUUU_t)fcn; fn((int32_t)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8); } void vFiffff(x64emu_t *emu, uintptr_t fcn) { vFiffff_t fn = (vFiffff_t)fcn; fn((int32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0]); } void vFidddd(x64emu_t *emu, uintptr_t fcn) { vFidddd_t fn = (vFidddd_t)fcn; fn((int32_t)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0]); } void vFilill(x64emu_t *emu, uintptr_t fcn) { vFilill_t fn = (vFilill_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8); } void vFilipi(x64emu_t *emu, uintptr_t fcn) { vFilipi_t fn = (vFilipi_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void vFilipl(x64emu_t *emu, uintptr_t fcn) { vFilipl_t fn = (vFilipl_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (intptr_t)R_R8); } -void vFillll(x64emu_t *emu, uintptr_t fcn) { vFillll_t fn = (vFillll_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8); } -void vFiLLLL(x64emu_t *emu, uintptr_t fcn) { vFiLLLL_t fn = (vFiLLLL_t)fcn; fn((int32_t)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } void vFipipu(x64emu_t *emu, uintptr_t fcn) { vFipipu_t fn = (vFipipu_t)fcn; fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } void vFipipp(x64emu_t *emu, uintptr_t fcn) { vFipipp_t fn = (vFipipp_t)fcn; fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFipupi(x64emu_t *emu, uintptr_t fcn) { vFipupi_t fn = (vFipupi_t)fcn; fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } @@ -4536,6 +4832,7 @@ void vFuiiip(x64emu_t *emu, uintptr_t fcn) { vFuiiip_t fn = (vFuiiip_t)fcn; fn(( void vFuiiCp(x64emu_t *emu, uintptr_t fcn) { vFuiiCp_t fn = (vFuiiCp_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint8_t)R_RCX, (void*)R_R8); } void vFuiiup(x64emu_t *emu, uintptr_t fcn) { vFuiiup_t fn = (vFuiiup_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } void vFuiill(x64emu_t *emu, uintptr_t fcn) { vFuiill_t fn = (vFuiill_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8); } +void vFuiIII(x64emu_t *emu, uintptr_t fcn) { vFuiIII_t fn = (vFuiIII_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8); } void vFuiuii(x64emu_t *emu, uintptr_t fcn) { vFuiuii_t fn = (vFuiuii_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } void vFuiuip(x64emu_t *emu, uintptr_t fcn) { vFuiuip_t fn = (vFuiuip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void vFuiuCi(x64emu_t *emu, uintptr_t fcn) { vFuiuCi_t fn = (vFuiuCi_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint8_t)R_RCX, (int32_t)R_R8); } @@ -4543,20 +4840,19 @@ void vFuiuCu(x64emu_t *emu, uintptr_t fcn) { vFuiuCu_t fn = (vFuiuCu_t)fcn; fn(( void vFuiuuu(x64emu_t *emu, uintptr_t fcn) { vFuiuuu_t fn = (vFuiuuu_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } void vFuiuup(x64emu_t *emu, uintptr_t fcn) { vFuiuup_t fn = (vFuiuup_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } void vFuiupi(x64emu_t *emu, uintptr_t fcn) { vFuiupi_t fn = (vFuiupi_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void vFuiUUU(x64emu_t *emu, uintptr_t fcn) { vFuiUUU_t fn = (vFuiUUU_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8); } void vFuifff(x64emu_t *emu, uintptr_t fcn) { vFuifff_t fn = (vFuifff_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0]); } void vFuiddd(x64emu_t *emu, uintptr_t fcn) { vFuiddd_t fn = (vFuiddd_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0]); } -void vFuilll(x64emu_t *emu, uintptr_t fcn) { vFuilll_t fn = (vFuilll_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8); } -void vFuiLLL(x64emu_t *emu, uintptr_t fcn) { vFuiLLL_t fn = (vFuiLLL_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } void vFuipii(x64emu_t *emu, uintptr_t fcn) { vFuipii_t fn = (vFuipii_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } void vFuipip(x64emu_t *emu, uintptr_t fcn) { vFuipip_t fn = (vFuipip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void vFuipup(x64emu_t *emu, uintptr_t fcn) { vFuipup_t fn = (vFuipup_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } void vFuippp(x64emu_t *emu, uintptr_t fcn) { vFuippp_t fn = (vFuippp_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void vFuIIII(x64emu_t *emu, uintptr_t fcn) { vFuIIII_t fn = (vFuIIII_t)fcn; fn((uint32_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8); } void vFuCCCC(x64emu_t *emu, uintptr_t fcn) { vFuCCCC_t fn = (vFuCCCC_t)fcn; fn((uint32_t)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX, (uint8_t)R_R8); } void vFuCuip(x64emu_t *emu, uintptr_t fcn) { vFuCuip_t fn = (vFuCuip_t)fcn; fn((uint32_t)R_RDI, (uint8_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void vFuCuup(x64emu_t *emu, uintptr_t fcn) { vFuCuup_t fn = (vFuCuup_t)fcn; fn((uint32_t)R_RDI, (uint8_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } void vFuWWWW(x64emu_t *emu, uintptr_t fcn) { vFuWWWW_t fn = (vFuWWWW_t)fcn; fn((uint32_t)R_RDI, (uint16_t)R_RSI, (uint16_t)R_RDX, (uint16_t)R_RCX, (uint16_t)R_R8); } void vFuuiii(x64emu_t *emu, uintptr_t fcn) { vFuuiii_t fn = (vFuuiii_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } -void vFuuiiu(x64emu_t *emu, uintptr_t fcn) { vFuuiiu_t fn = (vFuuiiu_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } void vFuuiip(x64emu_t *emu, uintptr_t fcn) { vFuuiip_t fn = (vFuuiip_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void vFuuiui(x64emu_t *emu, uintptr_t fcn) { vFuuiui_t fn = (vFuuiui_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } void vFuuiuu(x64emu_t *emu, uintptr_t fcn) { vFuuiuu_t fn = (vFuuiuu_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } @@ -4578,12 +4874,10 @@ void vFuulll(x64emu_t *emu, uintptr_t fcn) { vFuulll_t fn = (vFuulll_t)fcn; fn(( void vFuullp(x64emu_t *emu, uintptr_t fcn) { vFuullp_t fn = (vFuullp_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (void*)R_R8); } void vFuupii(x64emu_t *emu, uintptr_t fcn) { vFuupii_t fn = (vFuupii_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } void vFuuppu(x64emu_t *emu, uintptr_t fcn) { vFuuppu_t fn = (vFuuppu_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } +void vFuUUUU(x64emu_t *emu, uintptr_t fcn) { vFuUUUU_t fn = (vFuUUUU_t)fcn; fn((uint32_t)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8); } void vFuffff(x64emu_t *emu, uintptr_t fcn) { vFuffff_t fn = (vFuffff_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0]); } void vFudddd(x64emu_t *emu, uintptr_t fcn) { vFudddd_t fn = (vFudddd_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0]); } -void vFulill(x64emu_t *emu, uintptr_t fcn) { vFulill_t fn = (vFulill_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8); } -void vFullll(x64emu_t *emu, uintptr_t fcn) { vFullll_t fn = (vFullll_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8); } void vFullpu(x64emu_t *emu, uintptr_t fcn) { vFullpu_t fn = (vFullpu_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } -void vFuLLLL(x64emu_t *emu, uintptr_t fcn) { vFuLLLL_t fn = (vFuLLLL_t)fcn; fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } void vFupiii(x64emu_t *emu, uintptr_t fcn) { vFupiii_t fn = (vFupiii_t)fcn; fn((uint32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } void vFupupi(x64emu_t *emu, uintptr_t fcn) { vFupupi_t fn = (vFupupi_t)fcn; fn((uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void vFupupp(x64emu_t *emu, uintptr_t fcn) { vFupupp_t fn = (vFupupp_t)fcn; fn((uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } @@ -4596,6 +4890,7 @@ void vFddddp(x64emu_t *emu, uintptr_t fcn) { vFddddp_t fn = (vFddddp_t)fcn; fn(e void vFluipp(x64emu_t *emu, uintptr_t fcn) { vFluipp_t fn = (vFluipp_t)fcn; fn((intptr_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFLpppi(x64emu_t *emu, uintptr_t fcn) { vFLpppi_t fn = (vFLpppi_t)fcn; fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void vFLpppp(x64emu_t *emu, uintptr_t fcn) { vFLpppp_t fn = (vFLpppp_t)fcn; fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void vFpwwWW(x64emu_t *emu, uintptr_t fcn) { vFpwwWW_t fn = (vFpwwWW_t)fcn; fn((void*)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX, (uint16_t)R_RCX, (uint16_t)R_R8); } void vFpiiii(x64emu_t *emu, uintptr_t fcn) { vFpiiii_t fn = (vFpiiii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } void vFpiiiI(x64emu_t *emu, uintptr_t fcn) { vFpiiiI_t fn = (vFpiiiI_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int64_t)R_R8); } void vFpiiiu(x64emu_t *emu, uintptr_t fcn) { vFpiiiu_t fn = (vFpiiiu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } @@ -4612,6 +4907,7 @@ void vFpiUUu(x64emu_t *emu, uintptr_t fcn) { vFpiUUu_t fn = (vFpiUUu_t)fcn; fn(( void vFpiUUp(x64emu_t *emu, uintptr_t fcn) { vFpiUUp_t fn = (vFpiUUp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (void*)R_R8); } void vFpilpp(x64emu_t *emu, uintptr_t fcn) { vFpilpp_t fn = (vFpilpp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFpipii(x64emu_t *emu, uintptr_t fcn) { vFpipii_t fn = (vFpipii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void vFpipiu(x64emu_t *emu, uintptr_t fcn) { vFpipiu_t fn = (vFpipiu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } void vFpippi(x64emu_t *emu, uintptr_t fcn) { vFpippi_t fn = (vFpippi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void vFpippp(x64emu_t *emu, uintptr_t fcn) { vFpippp_t fn = (vFpippp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFpuiip(x64emu_t *emu, uintptr_t fcn) { vFpuiip_t fn = (vFpuiip_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } @@ -4634,13 +4930,19 @@ void vFpdiII(x64emu_t *emu, uintptr_t fcn) { vFpdiII_t fn = (vFpdiII_t)fcn; fn(( void vFpddii(x64emu_t *emu, uintptr_t fcn) { vFpddii_t fn = (vFpddii_t)fcn; fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], (int32_t)R_RSI, (int32_t)R_RDX); } void vFpdddd(x64emu_t *emu, uintptr_t fcn) { vFpdddd_t fn = (vFpdddd_t)fcn; fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0]); } void vFpddpp(x64emu_t *emu, uintptr_t fcn) { vFpddpp_t fn = (vFpddpp_t)fcn; fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], (void*)R_RSI, (void*)R_RDX); } +void vFpliip(x64emu_t *emu, uintptr_t fcn) { vFpliip_t fn = (vFpliip_t)fcn; fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void vFpluul(x64emu_t *emu, uintptr_t fcn) { vFpluul_t fn = (vFpluul_t)fcn; fn((void*)R_RDI, (intptr_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (intptr_t)R_R8); } void vFplppp(x64emu_t *emu, uintptr_t fcn) { vFplppp_t fn = (vFplppp_t)fcn; fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void vFpLiii(x64emu_t *emu, uintptr_t fcn) { vFpLiii_t fn = (vFpLiii_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void vFpLiiL(x64emu_t *emu, uintptr_t fcn) { vFpLiiL_t fn = (vFpLiiL_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } void vFpLLLL(x64emu_t *emu, uintptr_t fcn) { vFpLLLL_t fn = (vFpLLLL_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } void vFpLLpp(x64emu_t *emu, uintptr_t fcn) { vFpLLpp_t fn = (vFpLLpp_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFpLpiL(x64emu_t *emu, uintptr_t fcn) { vFpLpiL_t fn = (vFpLpiL_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } +void vFpLppi(x64emu_t *emu, uintptr_t fcn) { vFpLppi_t fn = (vFpLppi_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void vFppiic(x64emu_t *emu, uintptr_t fcn) { vFppiic_t fn = (vFppiic_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int8_t)R_R8); } void vFppiii(x64emu_t *emu, uintptr_t fcn) { vFppiii_t fn = (vFppiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } void vFppiiu(x64emu_t *emu, uintptr_t fcn) { vFppiiu_t fn = (vFppiiu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } +void vFppiiL(x64emu_t *emu, uintptr_t fcn) { vFppiiL_t fn = (vFppiiL_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } void vFppiip(x64emu_t *emu, uintptr_t fcn) { vFppiip_t fn = (vFppiip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void vFppiui(x64emu_t *emu, uintptr_t fcn) { vFppiui_t fn = (vFppiui_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } void vFppiup(x64emu_t *emu, uintptr_t fcn) { vFppiup_t fn = (vFppiup_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } @@ -4675,164 +4977,182 @@ void vFppppi(x64emu_t *emu, uintptr_t fcn) { vFppppi_t fn = (vFppppi_t)fcn; fn(( void vFppppu(x64emu_t *emu, uintptr_t fcn) { vFppppu_t fn = (vFppppu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } void vFppppL(x64emu_t *emu, uintptr_t fcn) { vFppppL_t fn = (vFppppL_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } void vFppppp(x64emu_t *emu, uintptr_t fcn) { vFppppp_t fn = (vFppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFEiipp(x64emu_t *emu, uintptr_t fcn) { iFEiipp_t fn = (iFEiipp_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFEiipV(x64emu_t *emu, uintptr_t fcn) { iFEiipV_t fn = (iFEiipV_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } -void iFEiipA(x64emu_t *emu, uintptr_t fcn) { iFEiipA_t fn = (iFEiipA_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFEipip(x64emu_t *emu, uintptr_t fcn) { iFEipip_t fn = (iFEipip_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFEippi(x64emu_t *emu, uintptr_t fcn) { iFEippi_t fn = (iFEippi_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFEippL(x64emu_t *emu, uintptr_t fcn) { iFEippL_t fn = (iFEippL_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } -void iFEippp(x64emu_t *emu, uintptr_t fcn) { iFEippp_t fn = (iFEippp_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFEpiii(x64emu_t *emu, uintptr_t fcn) { iFEpiii_t fn = (iFEpiii_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void iFEpipi(x64emu_t *emu, uintptr_t fcn) { iFEpipi_t fn = (iFEpipi_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFEpipp(x64emu_t *emu, uintptr_t fcn) { iFEpipp_t fn = (iFEpipp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFEpipV(x64emu_t *emu, uintptr_t fcn) { iFEpipV_t fn = (iFEpipV_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } -void iFEpipA(x64emu_t *emu, uintptr_t fcn) { iFEpipA_t fn = (iFEpipA_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFEpUup(x64emu_t *emu, uintptr_t fcn) { iFEpUup_t fn = (iFEpUup_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } -void iFEpLpp(x64emu_t *emu, uintptr_t fcn) { iFEpLpp_t fn = (iFEpLpp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFEpLpV(x64emu_t *emu, uintptr_t fcn) { iFEpLpV_t fn = (iFEpLpV_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } -void iFEpLpA(x64emu_t *emu, uintptr_t fcn) { iFEpLpA_t fn = (iFEpLpA_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFEppii(x64emu_t *emu, uintptr_t fcn) { iFEppii_t fn = (iFEppii_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void iFEppip(x64emu_t *emu, uintptr_t fcn) { iFEppip_t fn = (iFEppip_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFEppiV(x64emu_t *emu, uintptr_t fcn) { iFEppiV_t fn = (iFEppiV_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)(R_RSP + 8)); } -void iFEppiA(x64emu_t *emu, uintptr_t fcn) { iFEppiA_t fn = (iFEppiA_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFEpplp(x64emu_t *emu, uintptr_t fcn) { iFEpplp_t fn = (iFEpplp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } -void iFEpppi(x64emu_t *emu, uintptr_t fcn) { iFEpppi_t fn = (iFEpppi_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } -void iFEpppL(x64emu_t *emu, uintptr_t fcn) { iFEpppL_t fn = (iFEpppL_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } -void iFEpppp(x64emu_t *emu, uintptr_t fcn) { iFEpppp_t fn = (iFEpppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFEpppV(x64emu_t *emu, uintptr_t fcn) { iFEpppV_t fn = (iFEpppV_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } -void iFEpppA(x64emu_t *emu, uintptr_t fcn) { iFEpppA_t fn = (iFEpppA_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void iFiiipu(x64emu_t *emu, uintptr_t fcn) { iFiiipu_t fn = (iFiiipu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } -void iFiiipp(x64emu_t *emu, uintptr_t fcn) { iFiiipp_t fn = (iFiiipp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFiiupp(x64emu_t *emu, uintptr_t fcn) { iFiiupp_t fn = (iFiiupp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFiuuuu(x64emu_t *emu, uintptr_t fcn) { iFiuuuu_t fn = (iFiuuuu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } -void iFiuuup(x64emu_t *emu, uintptr_t fcn) { iFiuuup_t fn = (iFiuuup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFiuLip(x64emu_t *emu, uintptr_t fcn) { iFiuLip_t fn = (iFiuLip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } -void iFillLL(x64emu_t *emu, uintptr_t fcn) { iFillLL_t fn = (iFillLL_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } -void iFipiii(x64emu_t *emu, uintptr_t fcn) { iFipiii_t fn = (iFipiii_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } -void iFipiup(x64emu_t *emu, uintptr_t fcn) { iFipiup_t fn = (iFipiup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFipipi(x64emu_t *emu, uintptr_t fcn) { iFipipi_t fn = (iFipipi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFipipu(x64emu_t *emu, uintptr_t fcn) { iFipipu_t fn = (iFipipu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } -void iFipuip(x64emu_t *emu, uintptr_t fcn) { iFipuip_t fn = (iFipuip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } -void iFipuui(x64emu_t *emu, uintptr_t fcn) { iFipuui_t fn = (iFipuui_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } -void iFipLup(x64emu_t *emu, uintptr_t fcn) { iFipLup_t fn = (iFipLup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFippuu(x64emu_t *emu, uintptr_t fcn) { iFippuu_t fn = (iFippuu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } -void iFippLi(x64emu_t *emu, uintptr_t fcn) { iFippLi_t fn = (iFippLi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } -void iFippLp(x64emu_t *emu, uintptr_t fcn) { iFippLp_t fn = (iFippLp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } -void iFipppi(x64emu_t *emu, uintptr_t fcn) { iFipppi_t fn = (iFipppi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFipppp(x64emu_t *emu, uintptr_t fcn) { iFipppp_t fn = (iFipppp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFuuupp(x64emu_t *emu, uintptr_t fcn) { iFuuupp_t fn = (iFuuupp_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFuppLp(x64emu_t *emu, uintptr_t fcn) { iFuppLp_t fn = (iFuppLp_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } -void iFLppip(x64emu_t *emu, uintptr_t fcn) { iFLppip_t fn = (iFLppip_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } -void iFLpppp(x64emu_t *emu, uintptr_t fcn) { iFLpppp_t fn = (iFLpppp_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpwwww(x64emu_t *emu, uintptr_t fcn) { iFpwwww_t fn = (iFpwwww_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX, (int16_t)R_RCX, (int16_t)R_R8); } -void iFpwppp(x64emu_t *emu, uintptr_t fcn) { iFpwppp_t fn = (iFpwppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int16_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpiiii(x64emu_t *emu, uintptr_t fcn) { iFpiiii_t fn = (iFpiiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } -void iFpiiiu(x64emu_t *emu, uintptr_t fcn) { iFpiiiu_t fn = (iFpiiiu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } -void iFpiiiL(x64emu_t *emu, uintptr_t fcn) { iFpiiiL_t fn = (iFpiiiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } -void iFpiiip(x64emu_t *emu, uintptr_t fcn) { iFpiiip_t fn = (iFpiiip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } -void iFpiiui(x64emu_t *emu, uintptr_t fcn) { iFpiiui_t fn = (iFpiiui_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } -void iFpiiuu(x64emu_t *emu, uintptr_t fcn) { iFpiiuu_t fn = (iFpiiuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } -void iFpiipi(x64emu_t *emu, uintptr_t fcn) { iFpiipi_t fn = (iFpiipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFpiipp(x64emu_t *emu, uintptr_t fcn) { iFpiipp_t fn = (iFpiipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpiIip(x64emu_t *emu, uintptr_t fcn) { iFpiIip_t fn = (iFpiIip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int64_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } -void iFpiuwp(x64emu_t *emu, uintptr_t fcn) { iFpiuwp_t fn = (iFpiuwp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int16_t)R_RCX, (void*)R_R8); } -void iFpiuuu(x64emu_t *emu, uintptr_t fcn) { iFpiuuu_t fn = (iFpiuuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } -void iFpiUUU(x64emu_t *emu, uintptr_t fcn) { iFpiUUU_t fn = (iFpiUUU_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8); } -void iFpipii(x64emu_t *emu, uintptr_t fcn) { iFpipii_t fn = (iFpipii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } -void iFpipiu(x64emu_t *emu, uintptr_t fcn) { iFpipiu_t fn = (iFpipiu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } -void iFpipiL(x64emu_t *emu, uintptr_t fcn) { iFpipiL_t fn = (iFpipiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } -void iFpipip(x64emu_t *emu, uintptr_t fcn) { iFpipip_t fn = (iFpipip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } -void iFpippi(x64emu_t *emu, uintptr_t fcn) { iFpippi_t fn = (iFpippi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFpippW(x64emu_t *emu, uintptr_t fcn) { iFpippW_t fn = (iFpippW_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint16_t)R_R8); } -void iFpippp(x64emu_t *emu, uintptr_t fcn) { iFpippp_t fn = (iFpippp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpCCCC(x64emu_t *emu, uintptr_t fcn) { iFpCCCC_t fn = (iFpCCCC_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX, (uint8_t)R_R8); } -void iFpCupp(x64emu_t *emu, uintptr_t fcn) { iFpCupp_t fn = (iFpCupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpCpip(x64emu_t *emu, uintptr_t fcn) { iFpCpip_t fn = (iFpCpip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } -void iFpuill(x64emu_t *emu, uintptr_t fcn) { iFpuill_t fn = (iFpuill_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8); } -void iFpuipi(x64emu_t *emu, uintptr_t fcn) { iFpuipi_t fn = (iFpuipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFpuipp(x64emu_t *emu, uintptr_t fcn) { iFpuipp_t fn = (iFpuipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpuuip(x64emu_t *emu, uintptr_t fcn) { iFpuuip_t fn = (iFpuuip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } -void iFpuuui(x64emu_t *emu, uintptr_t fcn) { iFpuuui_t fn = (iFpuuui_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } -void iFpuuup(x64emu_t *emu, uintptr_t fcn) { iFpuuup_t fn = (iFpuuup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFpuuLL(x64emu_t *emu, uintptr_t fcn) { iFpuuLL_t fn = (iFpuuLL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } -void iFpuuLp(x64emu_t *emu, uintptr_t fcn) { iFpuuLp_t fn = (iFpuuLp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } -void iFpuupp(x64emu_t *emu, uintptr_t fcn) { iFpuupp_t fn = (iFpuupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpulup(x64emu_t *emu, uintptr_t fcn) { iFpulup_t fn = (iFpulup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFpulpp(x64emu_t *emu, uintptr_t fcn) { iFpulpp_t fn = (iFpulpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpuLpL(x64emu_t *emu, uintptr_t fcn) { iFpuLpL_t fn = (iFpuLpL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } -void iFpuLpp(x64emu_t *emu, uintptr_t fcn) { iFpuLpp_t fn = (iFpuLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpupui(x64emu_t *emu, uintptr_t fcn) { iFpupui_t fn = (iFpupui_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } -void iFpupuu(x64emu_t *emu, uintptr_t fcn) { iFpupuu_t fn = (iFpupuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } -void iFpupuU(x64emu_t *emu, uintptr_t fcn) { iFpupuU_t fn = (iFpupuU_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint64_t)R_R8); } -void iFpupup(x64emu_t *emu, uintptr_t fcn) { iFpupup_t fn = (iFpupup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFpuppL(x64emu_t *emu, uintptr_t fcn) { iFpuppL_t fn = (iFpuppL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } -void iFpuppp(x64emu_t *emu, uintptr_t fcn) { iFpuppp_t fn = (iFpuppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpUiUi(x64emu_t *emu, uintptr_t fcn) { iFpUiUi_t fn = (iFpUiUi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (int32_t)R_RDX, (uint64_t)R_RCX, (int32_t)R_R8); } -void iFpUupp(x64emu_t *emu, uintptr_t fcn) { iFpUupp_t fn = (iFpUupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFplupp(x64emu_t *emu, uintptr_t fcn) { iFplupp_t fn = (iFplupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFplluu(x64emu_t *emu, uintptr_t fcn) { iFplluu_t fn = (iFplluu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } -void iFpLiup(x64emu_t *emu, uintptr_t fcn) { iFpLiup_t fn = (iFpLiup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFpLilp(x64emu_t *emu, uintptr_t fcn) { iFpLilp_t fn = (iFpLilp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (void*)R_R8); } -void iFpLiLi(x64emu_t *emu, uintptr_t fcn) { iFpLiLi_t fn = (iFpLiLi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } -void iFpLlpp(x64emu_t *emu, uintptr_t fcn) { iFpLlpp_t fn = (iFpLlpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpLLii(x64emu_t *emu, uintptr_t fcn) { iFpLLii_t fn = (iFpLLii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } -void iFpLLup(x64emu_t *emu, uintptr_t fcn) { iFpLLup_t fn = (iFpLLup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFpLLpp(x64emu_t *emu, uintptr_t fcn) { iFpLLpp_t fn = (iFpLLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpLpii(x64emu_t *emu, uintptr_t fcn) { iFpLpii_t fn = (iFpLpii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } -void iFpLpiL(x64emu_t *emu, uintptr_t fcn) { iFpLpiL_t fn = (iFpLpiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } -void iFpLpuL(x64emu_t *emu, uintptr_t fcn) { iFpLpuL_t fn = (iFpLpuL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8); } -void iFpLpup(x64emu_t *emu, uintptr_t fcn) { iFpLpup_t fn = (iFpLpup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFpLpLi(x64emu_t *emu, uintptr_t fcn) { iFpLpLi_t fn = (iFpLpLi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } -void iFpLppi(x64emu_t *emu, uintptr_t fcn) { iFpLppi_t fn = (iFpLppi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFpLppL(x64emu_t *emu, uintptr_t fcn) { iFpLppL_t fn = (iFpLppL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } -void iFpLppp(x64emu_t *emu, uintptr_t fcn) { iFpLppp_t fn = (iFpLppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFppiiu(x64emu_t *emu, uintptr_t fcn) { iFppiiu_t fn = (iFppiiu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } -void iFppiiL(x64emu_t *emu, uintptr_t fcn) { iFppiiL_t fn = (iFppiiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } -void iFppiip(x64emu_t *emu, uintptr_t fcn) { iFppiip_t fn = (iFppiip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } -void iFppiuu(x64emu_t *emu, uintptr_t fcn) { iFppiuu_t fn = (iFppiuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } -void iFppiup(x64emu_t *emu, uintptr_t fcn) { iFppiup_t fn = (iFppiup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFppiLi(x64emu_t *emu, uintptr_t fcn) { iFppiLi_t fn = (iFppiLi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } -void iFppiLL(x64emu_t *emu, uintptr_t fcn) { iFppiLL_t fn = (iFppiLL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } -void iFppipi(x64emu_t *emu, uintptr_t fcn) { iFppipi_t fn = (iFppipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFppipu(x64emu_t *emu, uintptr_t fcn) { iFppipu_t fn = (iFppipu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } -void iFppipp(x64emu_t *emu, uintptr_t fcn) { iFppipp_t fn = (iFppipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFppuwp(x64emu_t *emu, uintptr_t fcn) { iFppuwp_t fn = (iFppuwp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int16_t)R_RCX, (void*)R_R8); } -void iFppuip(x64emu_t *emu, uintptr_t fcn) { iFppuip_t fn = (iFppuip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } -void iFppuuu(x64emu_t *emu, uintptr_t fcn) { iFppuuu_t fn = (iFppuuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } -void iFppuup(x64emu_t *emu, uintptr_t fcn) { iFppuup_t fn = (iFppuup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFppupi(x64emu_t *emu, uintptr_t fcn) { iFppupi_t fn = (iFppupi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFppupu(x64emu_t *emu, uintptr_t fcn) { iFppupu_t fn = (iFppupu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } -void iFppupp(x64emu_t *emu, uintptr_t fcn) { iFppupp_t fn = (iFppupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFppUup(x64emu_t *emu, uintptr_t fcn) { iFppUup_t fn = (iFppUup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFpplii(x64emu_t *emu, uintptr_t fcn) { iFpplii_t fn = (iFpplii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } -void iFppllp(x64emu_t *emu, uintptr_t fcn) { iFppllp_t fn = (iFppllp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (void*)R_R8); } -void iFpplpp(x64emu_t *emu, uintptr_t fcn) { iFpplpp_t fn = (iFpplpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFppLup(x64emu_t *emu, uintptr_t fcn) { iFppLup_t fn = (iFppLup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFppLpi(x64emu_t *emu, uintptr_t fcn) { iFppLpi_t fn = (iFppLpi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFppLpL(x64emu_t *emu, uintptr_t fcn) { iFppLpL_t fn = (iFppLpL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } -void iFppLpp(x64emu_t *emu, uintptr_t fcn) { iFppLpp_t fn = (iFppLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpppii(x64emu_t *emu, uintptr_t fcn) { iFpppii_t fn = (iFpppii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } -void iFpppip(x64emu_t *emu, uintptr_t fcn) { iFpppip_t fn = (iFpppip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } -void iFpppui(x64emu_t *emu, uintptr_t fcn) { iFpppui_t fn = (iFpppui_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } -void iFpppup(x64emu_t *emu, uintptr_t fcn) { iFpppup_t fn = (iFpppup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFpppUi(x64emu_t *emu, uintptr_t fcn) { iFpppUi_t fn = (iFpppUi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint64_t)R_RCX, (int32_t)R_R8); } -void iFpppLi(x64emu_t *emu, uintptr_t fcn) { iFpppLi_t fn = (iFpppLi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } -void iFpppLL(x64emu_t *emu, uintptr_t fcn) { iFpppLL_t fn = (iFpppLL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } -void iFpppLp(x64emu_t *emu, uintptr_t fcn) { iFpppLp_t fn = (iFpppLp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } -void iFppppi(x64emu_t *emu, uintptr_t fcn) { iFppppi_t fn = (iFppppi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFppppu(x64emu_t *emu, uintptr_t fcn) { iFppppu_t fn = (iFppppu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } -void iFppppl(x64emu_t *emu, uintptr_t fcn) { iFppppl_t fn = (iFppppl_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (intptr_t)R_R8); } -void iFppppL(x64emu_t *emu, uintptr_t fcn) { iFppppL_t fn = (iFppppL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } -void iFppppp(x64emu_t *emu, uintptr_t fcn) { iFppppp_t fn = (iFppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void IFppIII(x64emu_t *emu, uintptr_t fcn) { IFppIII_t fn = (IFppIII_t)fcn; R_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8); } +void iFEiipp(x64emu_t *emu, uintptr_t fcn) { iFEiipp_t fn = (iFEiipp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFEiipV(x64emu_t *emu, uintptr_t fcn) { iFEiipV_t fn = (iFEiipV_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void iFEiipA(x64emu_t *emu, uintptr_t fcn) { iFEiipA_t fn = (iFEiipA_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFEipip(x64emu_t *emu, uintptr_t fcn) { iFEipip_t fn = (iFEipip_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFEippi(x64emu_t *emu, uintptr_t fcn) { iFEippi_t fn = (iFEippi_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFEippp(x64emu_t *emu, uintptr_t fcn) { iFEippp_t fn = (iFEippp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFEpiii(x64emu_t *emu, uintptr_t fcn) { iFEpiii_t fn = (iFEpiii_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void iFEpipi(x64emu_t *emu, uintptr_t fcn) { iFEpipi_t fn = (iFEpipi_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFEpipp(x64emu_t *emu, uintptr_t fcn) { iFEpipp_t fn = (iFEpipp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFEpipV(x64emu_t *emu, uintptr_t fcn) { iFEpipV_t fn = (iFEpipV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void iFEpipA(x64emu_t *emu, uintptr_t fcn) { iFEpipA_t fn = (iFEpipA_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFEpUup(x64emu_t *emu, uintptr_t fcn) { iFEpUup_t fn = (iFEpUup_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void iFEpLpp(x64emu_t *emu, uintptr_t fcn) { iFEpLpp_t fn = (iFEpLpp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFEpLpV(x64emu_t *emu, uintptr_t fcn) { iFEpLpV_t fn = (iFEpLpV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void iFEpLpA(x64emu_t *emu, uintptr_t fcn) { iFEpLpA_t fn = (iFEpLpA_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFEppii(x64emu_t *emu, uintptr_t fcn) { iFEppii_t fn = (iFEppii_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void iFEppip(x64emu_t *emu, uintptr_t fcn) { iFEppip_t fn = (iFEppip_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFEppiA(x64emu_t *emu, uintptr_t fcn) { iFEppiA_t fn = (iFEppiA_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFEppup(x64emu_t *emu, uintptr_t fcn) { iFEppup_t fn = (iFEppup_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void iFEpplp(x64emu_t *emu, uintptr_t fcn) { iFEpplp_t fn = (iFEpplp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } +void iFEpppi(x64emu_t *emu, uintptr_t fcn) { iFEpppi_t fn = (iFEpppi_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFEpppL(x64emu_t *emu, uintptr_t fcn) { iFEpppL_t fn = (iFEpppL_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } +void iFEpppp(x64emu_t *emu, uintptr_t fcn) { iFEpppp_t fn = (iFEpppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFEpppV(x64emu_t *emu, uintptr_t fcn) { iFEpppV_t fn = (iFEpppV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void iFEpppA(x64emu_t *emu, uintptr_t fcn) { iFEpppA_t fn = (iFEpppA_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFiiipu(x64emu_t *emu, uintptr_t fcn) { iFiiipu_t fn = (iFiiipu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } +void iFiiipp(x64emu_t *emu, uintptr_t fcn) { iFiiipp_t fn = (iFiiipp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFiiupp(x64emu_t *emu, uintptr_t fcn) { iFiiupp_t fn = (iFiiupp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFiippp(x64emu_t *emu, uintptr_t fcn) { iFiippp_t fn = (iFiippp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFiuuuu(x64emu_t *emu, uintptr_t fcn) { iFiuuuu_t fn = (iFiuuuu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } +void iFiuuup(x64emu_t *emu, uintptr_t fcn) { iFiuuup_t fn = (iFiuuup_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFiuUip(x64emu_t *emu, uintptr_t fcn) { iFiuUip_t fn = (iFiuUip_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint64_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFillLL(x64emu_t *emu, uintptr_t fcn) { iFillLL_t fn = (iFillLL_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } +void iFipiii(x64emu_t *emu, uintptr_t fcn) { iFipiii_t fn = (iFipiii_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void iFipipi(x64emu_t *emu, uintptr_t fcn) { iFipipi_t fn = (iFipipi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFipipu(x64emu_t *emu, uintptr_t fcn) { iFipipu_t fn = (iFipipu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } +void iFipuip(x64emu_t *emu, uintptr_t fcn) { iFipuip_t fn = (iFipuip_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFipuui(x64emu_t *emu, uintptr_t fcn) { iFipuui_t fn = (iFipuui_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } +void iFipLup(x64emu_t *emu, uintptr_t fcn) { iFipLup_t fn = (iFipLup_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFippuu(x64emu_t *emu, uintptr_t fcn) { iFippuu_t fn = (iFippuu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } +void iFippLi(x64emu_t *emu, uintptr_t fcn) { iFippLi_t fn = (iFippLi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } +void iFippLp(x64emu_t *emu, uintptr_t fcn) { iFippLp_t fn = (iFippLp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } +void iFipppi(x64emu_t *emu, uintptr_t fcn) { iFipppi_t fn = (iFipppi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFipppp(x64emu_t *emu, uintptr_t fcn) { iFipppp_t fn = (iFipppp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFuiuup(x64emu_t *emu, uintptr_t fcn) { iFuiuup_t fn = (iFuiuup_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFuuupp(x64emu_t *emu, uintptr_t fcn) { iFuuupp_t fn = (iFuuupp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFuupid(x64emu_t *emu, uintptr_t fcn) { iFuupid_t fn = (iFuupid_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, emu->xmm[0].d[0]); } +void iFuppLp(x64emu_t *emu, uintptr_t fcn) { iFuppLp_t fn = (iFuppLp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } +void iFLppip(x64emu_t *emu, uintptr_t fcn) { iFLppip_t fn = (iFLppip_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFLpppp(x64emu_t *emu, uintptr_t fcn) { iFLpppp_t fn = (iFLpppp_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpwwww(x64emu_t *emu, uintptr_t fcn) { iFpwwww_t fn = (iFpwwww_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX, (int16_t)R_RCX, (int16_t)R_R8); } +void iFpwppp(x64emu_t *emu, uintptr_t fcn) { iFpwppp_t fn = (iFpwppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int16_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpiiii(x64emu_t *emu, uintptr_t fcn) { iFpiiii_t fn = (iFpiiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void iFpiiiu(x64emu_t *emu, uintptr_t fcn) { iFpiiiu_t fn = (iFpiiiu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } +void iFpiiiL(x64emu_t *emu, uintptr_t fcn) { iFpiiiL_t fn = (iFpiiiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } +void iFpiiip(x64emu_t *emu, uintptr_t fcn) { iFpiiip_t fn = (iFpiiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFpiiui(x64emu_t *emu, uintptr_t fcn) { iFpiiui_t fn = (iFpiiui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } +void iFpiiuu(x64emu_t *emu, uintptr_t fcn) { iFpiiuu_t fn = (iFpiiuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } +void iFpiipi(x64emu_t *emu, uintptr_t fcn) { iFpiipi_t fn = (iFpiipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFpiipp(x64emu_t *emu, uintptr_t fcn) { iFpiipp_t fn = (iFpiipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpiIip(x64emu_t *emu, uintptr_t fcn) { iFpiIip_t fn = (iFpiIip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int64_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFpiuwp(x64emu_t *emu, uintptr_t fcn) { iFpiuwp_t fn = (iFpiuwp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int16_t)R_RCX, (void*)R_R8); } +void iFpiuuu(x64emu_t *emu, uintptr_t fcn) { iFpiuuu_t fn = (iFpiuuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } +void iFpiuLi(x64emu_t *emu, uintptr_t fcn) { iFpiuLi_t fn = (iFpiuLi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } +void iFpiUUU(x64emu_t *emu, uintptr_t fcn) { iFpiUUU_t fn = (iFpiUUU_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8); } +void iFpiLip(x64emu_t *emu, uintptr_t fcn) { iFpiLip_t fn = (iFpiLip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFpiLuu(x64emu_t *emu, uintptr_t fcn) { iFpiLuu_t fn = (iFpiLuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } +void iFpipii(x64emu_t *emu, uintptr_t fcn) { iFpipii_t fn = (iFpipii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void iFpipiu(x64emu_t *emu, uintptr_t fcn) { iFpipiu_t fn = (iFpipiu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } +void iFpipiL(x64emu_t *emu, uintptr_t fcn) { iFpipiL_t fn = (iFpipiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } +void iFpipip(x64emu_t *emu, uintptr_t fcn) { iFpipip_t fn = (iFpipip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFpippi(x64emu_t *emu, uintptr_t fcn) { iFpippi_t fn = (iFpippi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFpippW(x64emu_t *emu, uintptr_t fcn) { iFpippW_t fn = (iFpippW_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint16_t)R_R8); } +void iFpippL(x64emu_t *emu, uintptr_t fcn) { iFpippL_t fn = (iFpippL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } +void iFpippp(x64emu_t *emu, uintptr_t fcn) { iFpippp_t fn = (iFpippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpCCCC(x64emu_t *emu, uintptr_t fcn) { iFpCCCC_t fn = (iFpCCCC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX, (uint8_t)R_R8); } +void iFpCupp(x64emu_t *emu, uintptr_t fcn) { iFpCupp_t fn = (iFpCupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpCpip(x64emu_t *emu, uintptr_t fcn) { iFpCpip_t fn = (iFpCpip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFpuill(x64emu_t *emu, uintptr_t fcn) { iFpuill_t fn = (iFpuill_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8); } +void iFpuipi(x64emu_t *emu, uintptr_t fcn) { iFpuipi_t fn = (iFpuipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFpuipp(x64emu_t *emu, uintptr_t fcn) { iFpuipp_t fn = (iFpuipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpuuip(x64emu_t *emu, uintptr_t fcn) { iFpuuip_t fn = (iFpuuip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFpuuup(x64emu_t *emu, uintptr_t fcn) { iFpuuup_t fn = (iFpuuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFpuuLL(x64emu_t *emu, uintptr_t fcn) { iFpuuLL_t fn = (iFpuuLL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } +void iFpuuLp(x64emu_t *emu, uintptr_t fcn) { iFpuuLp_t fn = (iFpuuLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } +void iFpuupp(x64emu_t *emu, uintptr_t fcn) { iFpuupp_t fn = (iFpuupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpulup(x64emu_t *emu, uintptr_t fcn) { iFpulup_t fn = (iFpulup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFpulpp(x64emu_t *emu, uintptr_t fcn) { iFpulpp_t fn = (iFpulpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpuLup(x64emu_t *emu, uintptr_t fcn) { iFpuLup_t fn = (iFpuLup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFpuLpL(x64emu_t *emu, uintptr_t fcn) { iFpuLpL_t fn = (iFpuLpL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } +void iFpuLpp(x64emu_t *emu, uintptr_t fcn) { iFpuLpp_t fn = (iFpuLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpupui(x64emu_t *emu, uintptr_t fcn) { iFpupui_t fn = (iFpupui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } +void iFpupuu(x64emu_t *emu, uintptr_t fcn) { iFpupuu_t fn = (iFpupuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } +void iFpupuU(x64emu_t *emu, uintptr_t fcn) { iFpupuU_t fn = (iFpupuU_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint64_t)R_R8); } +void iFpupup(x64emu_t *emu, uintptr_t fcn) { iFpupup_t fn = (iFpupup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFpupLu(x64emu_t *emu, uintptr_t fcn) { iFpupLu_t fn = (iFpupLu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uint32_t)R_R8); } +void iFpuppu(x64emu_t *emu, uintptr_t fcn) { iFpuppu_t fn = (iFpuppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } +void iFpuppL(x64emu_t *emu, uintptr_t fcn) { iFpuppL_t fn = (iFpuppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } +void iFpuppp(x64emu_t *emu, uintptr_t fcn) { iFpuppp_t fn = (iFpuppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpUiUi(x64emu_t *emu, uintptr_t fcn) { iFpUiUi_t fn = (iFpUiUi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (int32_t)R_RDX, (uint64_t)R_RCX, (int32_t)R_R8); } +void iFpUupp(x64emu_t *emu, uintptr_t fcn) { iFpUupp_t fn = (iFpUupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFplupp(x64emu_t *emu, uintptr_t fcn) { iFplupp_t fn = (iFplupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFplluu(x64emu_t *emu, uintptr_t fcn) { iFplluu_t fn = (iFplluu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } +void iFpLiup(x64emu_t *emu, uintptr_t fcn) { iFpLiup_t fn = (iFpLiup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFpLilp(x64emu_t *emu, uintptr_t fcn) { iFpLilp_t fn = (iFpLilp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (void*)R_R8); } +void iFpLiLi(x64emu_t *emu, uintptr_t fcn) { iFpLiLi_t fn = (iFpLiLi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } +void iFpLipi(x64emu_t *emu, uintptr_t fcn) { iFpLipi_t fn = (iFpLipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFpLuLi(x64emu_t *emu, uintptr_t fcn) { iFpLuLi_t fn = (iFpLuLi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } +void iFpLlpp(x64emu_t *emu, uintptr_t fcn) { iFpLlpp_t fn = (iFpLlpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpLLii(x64emu_t *emu, uintptr_t fcn) { iFpLLii_t fn = (iFpLLii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void iFpLLup(x64emu_t *emu, uintptr_t fcn) { iFpLLup_t fn = (iFpLLup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFpLpii(x64emu_t *emu, uintptr_t fcn) { iFpLpii_t fn = (iFpLpii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void iFpLpiL(x64emu_t *emu, uintptr_t fcn) { iFpLpiL_t fn = (iFpLpiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } +void iFpLpuL(x64emu_t *emu, uintptr_t fcn) { iFpLpuL_t fn = (iFpLpuL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8); } +void iFpLpup(x64emu_t *emu, uintptr_t fcn) { iFpLpup_t fn = (iFpLpup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFpLpLi(x64emu_t *emu, uintptr_t fcn) { iFpLpLi_t fn = (iFpLpLi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } +void iFpLppi(x64emu_t *emu, uintptr_t fcn) { iFpLppi_t fn = (iFpLppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFpLppL(x64emu_t *emu, uintptr_t fcn) { iFpLppL_t fn = (iFpLppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } +void iFpLppp(x64emu_t *emu, uintptr_t fcn) { iFpLppp_t fn = (iFpLppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFppiii(x64emu_t *emu, uintptr_t fcn) { iFppiii_t fn = (iFppiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void iFppiiu(x64emu_t *emu, uintptr_t fcn) { iFppiiu_t fn = (iFppiiu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } +void iFppiiL(x64emu_t *emu, uintptr_t fcn) { iFppiiL_t fn = (iFppiiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } +void iFppiip(x64emu_t *emu, uintptr_t fcn) { iFppiip_t fn = (iFppiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFppiuu(x64emu_t *emu, uintptr_t fcn) { iFppiuu_t fn = (iFppiuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } +void iFppiup(x64emu_t *emu, uintptr_t fcn) { iFppiup_t fn = (iFppiup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFppiLi(x64emu_t *emu, uintptr_t fcn) { iFppiLi_t fn = (iFppiLi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } +void iFppiLL(x64emu_t *emu, uintptr_t fcn) { iFppiLL_t fn = (iFppiLL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } +void iFppipi(x64emu_t *emu, uintptr_t fcn) { iFppipi_t fn = (iFppipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFppipu(x64emu_t *emu, uintptr_t fcn) { iFppipu_t fn = (iFppipu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } +void iFppipl(x64emu_t *emu, uintptr_t fcn) { iFppipl_t fn = (iFppipl_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (intptr_t)R_R8); } +void iFppipp(x64emu_t *emu, uintptr_t fcn) { iFppipp_t fn = (iFppipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFppuwp(x64emu_t *emu, uintptr_t fcn) { iFppuwp_t fn = (iFppuwp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int16_t)R_RCX, (void*)R_R8); } +void iFppuip(x64emu_t *emu, uintptr_t fcn) { iFppuip_t fn = (iFppuip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFppuuu(x64emu_t *emu, uintptr_t fcn) { iFppuuu_t fn = (iFppuuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } +void iFppuup(x64emu_t *emu, uintptr_t fcn) { iFppuup_t fn = (iFppuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFppupi(x64emu_t *emu, uintptr_t fcn) { iFppupi_t fn = (iFppupi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFppupu(x64emu_t *emu, uintptr_t fcn) { iFppupu_t fn = (iFppupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } +void iFppupp(x64emu_t *emu, uintptr_t fcn) { iFppupp_t fn = (iFppupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFppUup(x64emu_t *emu, uintptr_t fcn) { iFppUup_t fn = (iFppUup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFpplii(x64emu_t *emu, uintptr_t fcn) { iFpplii_t fn = (iFpplii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void iFppllp(x64emu_t *emu, uintptr_t fcn) { iFppllp_t fn = (iFppllp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (void*)R_R8); } +void iFpplpp(x64emu_t *emu, uintptr_t fcn) { iFpplpp_t fn = (iFpplpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFppLiL(x64emu_t *emu, uintptr_t fcn) { iFppLiL_t fn = (iFppLiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } +void iFppLup(x64emu_t *emu, uintptr_t fcn) { iFppLup_t fn = (iFppLup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFppLLi(x64emu_t *emu, uintptr_t fcn) { iFppLLi_t fn = (iFppLLi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } +void iFppLpi(x64emu_t *emu, uintptr_t fcn) { iFppLpi_t fn = (iFppLpi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFppLpL(x64emu_t *emu, uintptr_t fcn) { iFppLpL_t fn = (iFppLpL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } +void iFppLpp(x64emu_t *emu, uintptr_t fcn) { iFppLpp_t fn = (iFppLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpppii(x64emu_t *emu, uintptr_t fcn) { iFpppii_t fn = (iFpppii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void iFpppip(x64emu_t *emu, uintptr_t fcn) { iFpppip_t fn = (iFpppip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFpppui(x64emu_t *emu, uintptr_t fcn) { iFpppui_t fn = (iFpppui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } +void iFpppuu(x64emu_t *emu, uintptr_t fcn) { iFpppuu_t fn = (iFpppuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } +void iFpppup(x64emu_t *emu, uintptr_t fcn) { iFpppup_t fn = (iFpppup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFpppUi(x64emu_t *emu, uintptr_t fcn) { iFpppUi_t fn = (iFpppUi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint64_t)R_RCX, (int32_t)R_R8); } +void iFpppLi(x64emu_t *emu, uintptr_t fcn) { iFpppLi_t fn = (iFpppLi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } +void iFpppLu(x64emu_t *emu, uintptr_t fcn) { iFpppLu_t fn = (iFpppLu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uint32_t)R_R8); } +void iFpppLL(x64emu_t *emu, uintptr_t fcn) { iFpppLL_t fn = (iFpppLL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } +void iFpppLp(x64emu_t *emu, uintptr_t fcn) { iFpppLp_t fn = (iFpppLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } +void iFppppi(x64emu_t *emu, uintptr_t fcn) { iFppppi_t fn = (iFppppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFppppu(x64emu_t *emu, uintptr_t fcn) { iFppppu_t fn = (iFppppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } +void iFppppd(x64emu_t *emu, uintptr_t fcn) { iFppppd_t fn = (iFppppd_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, emu->xmm[0].d[0]); } +void iFppppl(x64emu_t *emu, uintptr_t fcn) { iFppppl_t fn = (iFppppl_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (intptr_t)R_R8); } +void iFppppL(x64emu_t *emu, uintptr_t fcn) { iFppppL_t fn = (iFppppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } +void iFppppp(x64emu_t *emu, uintptr_t fcn) { iFppppp_t fn = (iFppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpSipp(x64emu_t *emu, uintptr_t fcn) { iFpSipp_t fn = (iFpSipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, io_convert((void*)R_RSI), (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpSuif(x64emu_t *emu, uintptr_t fcn) { iFpSuif_t fn = (iFpSuif_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, io_convert((void*)R_RSI), (uint32_t)R_RDX, (int32_t)R_RCX, emu->xmm[0].f[0]); } +void iFSppLp(x64emu_t *emu, uintptr_t fcn) { iFSppLp_t fn = (iFSppLp_t)fcn; R_RAX=(uint32_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } +void IFppIII(x64emu_t *emu, uintptr_t fcn) { IFppIII_t fn = (IFppIII_t)fcn; S_RAX=(int64_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8); } void uFEippp(x64emu_t *emu, uintptr_t fcn) { uFEippp_t fn = (uFEippp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void uFEpipp(x64emu_t *emu, uintptr_t fcn) { uFEpipp_t fn = (uFEpipp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void uFEppuu(x64emu_t *emu, uintptr_t fcn) { uFEppuu_t fn = (uFEppuu_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } +void uFEpupp(x64emu_t *emu, uintptr_t fcn) { uFEpupp_t fn = (uFEpupp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void uFEpppp(x64emu_t *emu, uintptr_t fcn) { uFEpppp_t fn = (uFEpppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void uFEpppV(x64emu_t *emu, uintptr_t fcn) { uFEpppV_t fn = (uFEpppV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } void uFiuuuu(x64emu_t *emu, uintptr_t fcn) { uFiuuuu_t fn = (uFiuuuu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } void uFiuppi(x64emu_t *emu, uintptr_t fcn) { uFiuppi_t fn = (uFiuppi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void uFipipp(x64emu_t *emu, uintptr_t fcn) { uFipipp_t fn = (uFipipp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void uFipupp(x64emu_t *emu, uintptr_t fcn) { uFipupp_t fn = (uFipupp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void uFipLpp(x64emu_t *emu, uintptr_t fcn) { uFipLpp_t fn = (uFipLpp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void uFuiiii(x64emu_t *emu, uintptr_t fcn) { uFuiiii_t fn = (uFuiiii_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } void uFLpppL(x64emu_t *emu, uintptr_t fcn) { uFLpppL_t fn = (uFLpppL_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } @@ -4847,15 +5167,20 @@ void uFppipp(x64emu_t *emu, uintptr_t fcn) { uFppipp_t fn = (uFppipp_t)fcn; R_RA void uFppuup(x64emu_t *emu, uintptr_t fcn) { uFppuup_t fn = (uFppuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } void uFppupp(x64emu_t *emu, uintptr_t fcn) { uFppupp_t fn = (uFppupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void uFpplip(x64emu_t *emu, uintptr_t fcn) { uFpplip_t fn = (uFpplip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void uFpplpp(x64emu_t *emu, uintptr_t fcn) { uFpplpp_t fn = (uFpplpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void uFppLpp(x64emu_t *emu, uintptr_t fcn) { uFppLpp_t fn = (uFppLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void uFpppip(x64emu_t *emu, uintptr_t fcn) { uFpppip_t fn = (uFpppip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void uFppppL(x64emu_t *emu, uintptr_t fcn) { uFppppL_t fn = (uFppppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } void uFppppp(x64emu_t *emu, uintptr_t fcn) { uFppppp_t fn = (uFppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void uFbCuuu(x64emu_t *emu, uintptr_t fcn) { uFbCuuu_t fn = (uFbCuuu_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint8_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void uFbCuup(x64emu_t *emu, uintptr_t fcn) { uFbCuup_t fn = (uFbCuup_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint8_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void uFbuuWW(x64emu_t *emu, uintptr_t fcn) { uFbuuWW_t fn = (uFbuuWW_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint16_t)R_RCX, (uint16_t)R_R8); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void uFbuuup(x64emu_t *emu, uintptr_t fcn) { uFbuuup_t fn = (uFbuuup_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } -void UFuiiii(x64emu_t *emu, uintptr_t fcn) { UFuiiii_t fn = (UFuiiii_t)fcn; R_RAX=fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void UFuiCiu(x64emu_t *emu, uintptr_t fcn) { UFuiCiu_t fn = (UFuiCiu_t)fcn; R_RAX=fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint8_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } +void lFEippL(x64emu_t *emu, uintptr_t fcn) { lFEippL_t fn = (lFEippL_t)fcn; R_RAX=(intptr_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void lFEuipp(x64emu_t *emu, uintptr_t fcn) { lFEuipp_t fn = (lFEuipp_t)fcn; R_RAX=(intptr_t)fn(emu, (uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void lFEppLL(x64emu_t *emu, uintptr_t fcn) { lFEppLL_t fn = (lFEppLL_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } +void lFipiIi(x64emu_t *emu, uintptr_t fcn) { lFipiIi_t fn = (lFipiIi_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int64_t)R_RCX, (int32_t)R_R8); } void lFipili(x64emu_t *emu, uintptr_t fcn) { lFipili_t fn = (lFipili_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (int32_t)R_R8); } void lFipLli(x64emu_t *emu, uintptr_t fcn) { lFipLli_t fn = (lFipLli_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (intptr_t)R_RCX, (int32_t)R_R8); } void lFipLlL(x64emu_t *emu, uintptr_t fcn) { lFipLlL_t fn = (lFipLlL_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (intptr_t)R_RCX, (uintptr_t)R_R8); } @@ -4864,29 +5189,31 @@ void lFipLpp(x64emu_t *emu, uintptr_t fcn) { lFipLpp_t fn = (lFipLpp_t)fcn; R_RA void lFpuipC(x64emu_t *emu, uintptr_t fcn) { lFpuipC_t fn = (lFpuipC_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint8_t)R_R8); } void lFpuuLL(x64emu_t *emu, uintptr_t fcn) { lFpuuLL_t fn = (lFpuuLL_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } void lFppupp(x64emu_t *emu, uintptr_t fcn) { lFppupp_t fn = (lFppupp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void lFppllp(x64emu_t *emu, uintptr_t fcn) { lFppllp_t fn = (lFppllp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (void*)R_R8); } void lFppLpL(x64emu_t *emu, uintptr_t fcn) { lFppLpL_t fn = (lFppLpL_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } void lFppLpp(x64emu_t *emu, uintptr_t fcn) { lFppLpp_t fn = (lFppLpp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void LFELppi(x64emu_t *emu, uintptr_t fcn) { LFELppi_t fn = (LFELppi_t)fcn; R_RAX=(uintptr_t)fn(emu, (uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void LFELppu(x64emu_t *emu, uintptr_t fcn) { LFELppu_t fn = (LFELppu_t)fcn; R_RAX=(uintptr_t)fn(emu, (uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } +void LFEppLL(x64emu_t *emu, uintptr_t fcn) { LFEppLL_t fn = (LFEppLL_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } void LFEpppp(x64emu_t *emu, uintptr_t fcn) { LFEpppp_t fn = (LFEpppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void LFuiCiu(x64emu_t *emu, uintptr_t fcn) { LFuiCiu_t fn = (LFuiCiu_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint8_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } +void LFuuuuu(x64emu_t *emu, uintptr_t fcn) { LFuuuuu_t fn = (LFuuuuu_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } void LFLpppL(x64emu_t *emu, uintptr_t fcn) { LFLpppL_t fn = (LFLpppL_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } void LFpuipp(x64emu_t *emu, uintptr_t fcn) { LFpuipp_t fn = (LFpuipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void LFpuppi(x64emu_t *emu, uintptr_t fcn) { LFpuppi_t fn = (LFpuppi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void LFpuupi(x64emu_t *emu, uintptr_t fcn) { LFpuupi_t fn = (LFpuupi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void LFpLuuu(x64emu_t *emu, uintptr_t fcn) { LFpLuuu_t fn = (LFpLuuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } void LFpLLLp(x64emu_t *emu, uintptr_t fcn) { LFpLLLp_t fn = (LFpLLLp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } void LFpLpuu(x64emu_t *emu, uintptr_t fcn) { LFpLpuu_t fn = (LFpLpuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } +void LFpLpLp(x64emu_t *emu, uintptr_t fcn) { LFpLpLp_t fn = (LFpLpLp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } void LFpLppL(x64emu_t *emu, uintptr_t fcn) { LFpLppL_t fn = (LFpLppL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } void LFpLppp(x64emu_t *emu, uintptr_t fcn) { LFpLppp_t fn = (LFpLppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void LFppLLp(x64emu_t *emu, uintptr_t fcn) { LFppLLp_t fn = (LFppLLp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } void LFppLpL(x64emu_t *emu, uintptr_t fcn) { LFppLpL_t fn = (LFppLpL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } void LFpppii(x64emu_t *emu, uintptr_t fcn) { LFpppii_t fn = (LFpppii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void LFppppi(x64emu_t *emu, uintptr_t fcn) { LFppppi_t fn = (LFppppi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void LFppppp(x64emu_t *emu, uintptr_t fcn) { LFppppp_t fn = (LFppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void pFEuipV(x64emu_t *emu, uintptr_t fcn) { pFEuipV_t fn = (pFEuipV_t)fcn; R_RAX=(uintptr_t)fn(emu, (uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void pFEuipA(x64emu_t *emu, uintptr_t fcn) { pFEuipA_t fn = (pFEuipA_t)fcn; R_RAX=(uintptr_t)fn(emu, (uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void pFEpiii(x64emu_t *emu, uintptr_t fcn) { pFEpiii_t fn = (pFEpiii_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void pFEpipL(x64emu_t *emu, uintptr_t fcn) { pFEpipL_t fn = (pFEpipL_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void pFEpipp(x64emu_t *emu, uintptr_t fcn) { pFEpipp_t fn = (pFEpipp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } -void pFEpipV(x64emu_t *emu, uintptr_t fcn) { pFEpipV_t fn = (pFEpipV_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } -void pFEpipA(x64emu_t *emu, uintptr_t fcn) { pFEpipA_t fn = (pFEpipA_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void pFEpupp(x64emu_t *emu, uintptr_t fcn) { pFEpupp_t fn = (pFEpupp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void pFEpUpp(x64emu_t *emu, uintptr_t fcn) { pFEpUpp_t fn = (pFEpUpp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void pFEpLpp(x64emu_t *emu, uintptr_t fcn) { pFEpLpp_t fn = (pFEpLpp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } @@ -4899,7 +5226,7 @@ void pFEpppp(x64emu_t *emu, uintptr_t fcn) { pFEpppp_t fn = (pFEpppp_t)fcn; R_RA void pFEpppV(x64emu_t *emu, uintptr_t fcn) { pFEpppV_t fn = (pFEpppV_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } void pFEpppA(x64emu_t *emu, uintptr_t fcn) { pFEpppA_t fn = (pFEpppA_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void pFiiiii(x64emu_t *emu, uintptr_t fcn) { pFiiiii_t fn = (pFiiiii_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } -void pFiiipL(x64emu_t *emu, uintptr_t fcn) { pFiiipL_t fn = (pFiiipL_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } +void pFiiupL(x64emu_t *emu, uintptr_t fcn) { pFiiupL_t fn = (pFiiupL_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } void pFipipL(x64emu_t *emu, uintptr_t fcn) { pFipipL_t fn = (pFipipL_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } void pFipipp(x64emu_t *emu, uintptr_t fcn) { pFipipp_t fn = (pFipipp_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void pFuiiiu(x64emu_t *emu, uintptr_t fcn) { pFuiiiu_t fn = (pFuiiiu_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } @@ -4924,6 +5251,7 @@ void pFpiuuu(x64emu_t *emu, uintptr_t fcn) { pFpiuuu_t fn = (pFpiuuu_t)fcn; R_RA void pFpiuup(x64emu_t *emu, uintptr_t fcn) { pFpiuup_t fn = (pFpiuup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } void pFpiupp(x64emu_t *emu, uintptr_t fcn) { pFpiupp_t fn = (pFpiupp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void pFpiLip(x64emu_t *emu, uintptr_t fcn) { pFpiLip_t fn = (pFpiLip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void pFpipii(x64emu_t *emu, uintptr_t fcn) { pFpipii_t fn = (pFpipii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } void pFpipip(x64emu_t *emu, uintptr_t fcn) { pFpipip_t fn = (pFpipip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void pFpipup(x64emu_t *emu, uintptr_t fcn) { pFpipup_t fn = (pFpipup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } void pFpippi(x64emu_t *emu, uintptr_t fcn) { pFpippi_t fn = (pFpippi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } @@ -4942,6 +5270,7 @@ void pFpfffi(x64emu_t *emu, uintptr_t fcn) { pFpfffi_t fn = (pFpfffi_t)fcn; R_RA void pFpdddd(x64emu_t *emu, uintptr_t fcn) { pFpdddd_t fn = (pFpdddd_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0]); } void pFplppp(x64emu_t *emu, uintptr_t fcn) { pFplppp_t fn = (pFplppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void pFpLiii(x64emu_t *emu, uintptr_t fcn) { pFpLiii_t fn = (pFpLiii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } +void pFpLipp(x64emu_t *emu, uintptr_t fcn) { pFpLipp_t fn = (pFpLipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void pFpLLip(x64emu_t *emu, uintptr_t fcn) { pFpLLip_t fn = (pFpLLip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void pFpLLLp(x64emu_t *emu, uintptr_t fcn) { pFpLLLp_t fn = (pFpLLLp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } void pFpLpii(x64emu_t *emu, uintptr_t fcn) { pFpLpii_t fn = (pFpLpii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } @@ -4953,6 +5282,7 @@ void pFppiip(x64emu_t *emu, uintptr_t fcn) { pFppiip_t fn = (pFppiip_t)fcn; R_RA void pFppiup(x64emu_t *emu, uintptr_t fcn) { pFppiup_t fn = (pFppiup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } void pFppipi(x64emu_t *emu, uintptr_t fcn) { pFppipi_t fn = (pFppipi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void pFppipp(x64emu_t *emu, uintptr_t fcn) { pFppipp_t fn = (pFppipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void pFppCip(x64emu_t *emu, uintptr_t fcn) { pFppCip_t fn = (pFppCip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint8_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void pFppWpp(x64emu_t *emu, uintptr_t fcn) { pFppWpp_t fn = (pFppWpp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint16_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void pFppuip(x64emu_t *emu, uintptr_t fcn) { pFppuip_t fn = (pFppuip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void pFppuuu(x64emu_t *emu, uintptr_t fcn) { pFppuuu_t fn = (pFppuuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } @@ -4999,11 +5329,10 @@ void vFEpiLpp(x64emu_t *emu, uintptr_t fcn) { vFEpiLpp_t fn = (vFEpiLpp_t)fcn; f void vFEpippp(x64emu_t *emu, uintptr_t fcn) { vFEpippp_t fn = (vFEpippp_t)fcn; fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFEpuipp(x64emu_t *emu, uintptr_t fcn) { vFEpuipp_t fn = (vFEpuipp_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFEpuipV(x64emu_t *emu, uintptr_t fcn) { vFEpuipV_t fn = (vFEpuipV_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } +void vFEpuipA(x64emu_t *emu, uintptr_t fcn) { vFEpuipA_t fn = (vFEpuipA_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFEpupup(x64emu_t *emu, uintptr_t fcn) { vFEpupup_t fn = (vFEpupup_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } void vFEpuppp(x64emu_t *emu, uintptr_t fcn) { vFEpuppp_t fn = (vFEpuppp_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFEpLLpp(x64emu_t *emu, uintptr_t fcn) { vFEpLLpp_t fn = (vFEpLLpp_t)fcn; fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void vFEppipV(x64emu_t *emu, uintptr_t fcn) { vFEppipV_t fn = (vFEppipV_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } -void vFEppipA(x64emu_t *emu, uintptr_t fcn) { vFEppipA_t fn = (vFEppipA_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFEppupp(x64emu_t *emu, uintptr_t fcn) { vFEppupp_t fn = (vFEppupp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFEpppLp(x64emu_t *emu, uintptr_t fcn) { vFEpppLp_t fn = (vFEpppLp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } void vFEppppp(x64emu_t *emu, uintptr_t fcn) { vFEppppp_t fn = (vFEppppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } @@ -5011,36 +5340,35 @@ void vFiiiiii(x64emu_t *emu, uintptr_t fcn) { vFiiiiii_t fn = (vFiiiiii_t)fcn; f void vFiiiuil(x64emu_t *emu, uintptr_t fcn) { vFiiiuil_t fn = (vFiiiuil_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (intptr_t)R_R9); } void vFiiilpi(x64emu_t *emu, uintptr_t fcn) { vFiiilpi_t fn = (vFiiilpi_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } void vFiiuilp(x64emu_t *emu, uintptr_t fcn) { vFiiuilp_t fn = (vFiiuilp_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (intptr_t)R_R8, (void*)R_R9); } +void vFiipupV(x64emu_t *emu, uintptr_t fcn) { vFiipupV_t fn = (vFiipupV_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)(R_RSP + 8)); } void vFiffiff(x64emu_t *emu, uintptr_t fcn) { vFiffiff_t fn = (vFiffiff_t)fcn; fn((int32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], (int32_t)R_RSI, emu->xmm[2].f[0], emu->xmm[3].f[0]); } void vFiddidd(x64emu_t *emu, uintptr_t fcn) { vFiddidd_t fn = (vFiddidd_t)fcn; fn((int32_t)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], (int32_t)R_RSI, emu->xmm[2].d[0], emu->xmm[3].d[0]); } void vFilipli(x64emu_t *emu, uintptr_t fcn) { vFilipli_t fn = (vFilipli_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (intptr_t)R_R8, (int32_t)R_R9); } void vFiliplu(x64emu_t *emu, uintptr_t fcn) { vFiliplu_t fn = (vFiliplu_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (intptr_t)R_R8, (uint32_t)R_R9); } -void vFillill(x64emu_t *emu, uintptr_t fcn) { vFillill_t fn = (vFillill_t)fcn; fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX, (intptr_t)R_R8, (intptr_t)R_R9); } void vFipiplp(x64emu_t *emu, uintptr_t fcn) { vFipiplp_t fn = (vFipiplp_t)fcn; fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (intptr_t)R_R8, (void*)R_R9); } void vFCCCCff(x64emu_t *emu, uintptr_t fcn) { vFCCCCff_t fn = (vFCCCCff_t)fcn; fn((uint8_t)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX, emu->xmm[0].f[0], emu->xmm[1].f[0]); } void vFuiiiii(x64emu_t *emu, uintptr_t fcn) { vFuiiiii_t fn = (vFuiiiii_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } void vFuiiiip(x64emu_t *emu, uintptr_t fcn) { vFuiiiip_t fn = (vFuiiiip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } void vFuiiuii(x64emu_t *emu, uintptr_t fcn) { vFuiiuii_t fn = (vFuiiuii_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } void vFuiiuup(x64emu_t *emu, uintptr_t fcn) { vFuiiuup_t fn = (vFuiiuup_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void vFuiIIII(x64emu_t *emu, uintptr_t fcn) { vFuiIIII_t fn = (vFuiIIII_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9); } void vFuiuiii(x64emu_t *emu, uintptr_t fcn) { vFuiuiii_t fn = (vFuiuiii_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } void vFuiuiiC(x64emu_t *emu, uintptr_t fcn) { vFuiuiiC_t fn = (vFuiuiiC_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint8_t)R_R9); } void vFuiuiil(x64emu_t *emu, uintptr_t fcn) { vFuiuiil_t fn = (vFuiuiil_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (intptr_t)R_R9); } void vFuiuiip(x64emu_t *emu, uintptr_t fcn) { vFuiuiip_t fn = (vFuiuiip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } void vFuiuiuu(x64emu_t *emu, uintptr_t fcn) { vFuiuiuu_t fn = (vFuiuiuu_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } -void vFuiuiuL(x64emu_t *emu, uintptr_t fcn) { vFuiuiuL_t fn = (vFuiuiuL_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uintptr_t)R_R9); } +void vFuiuiuU(x64emu_t *emu, uintptr_t fcn) { vFuiuiuU_t fn = (vFuiuiuU_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint64_t)R_R9); } void vFuiuCip(x64emu_t *emu, uintptr_t fcn) { vFuiuCip_t fn = (vFuiuCip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint8_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } void vFuiuuip(x64emu_t *emu, uintptr_t fcn) { vFuiuuip_t fn = (vFuiuuip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } void vFuiuuuu(x64emu_t *emu, uintptr_t fcn) { vFuiuuuu_t fn = (vFuiuuuu_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } void vFuiupii(x64emu_t *emu, uintptr_t fcn) { vFuiupii_t fn = (vFuiupii_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } void vFuiupiu(x64emu_t *emu, uintptr_t fcn) { vFuiupiu_t fn = (vFuiupiu_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uint32_t)R_R9); } +void vFuiUUUU(x64emu_t *emu, uintptr_t fcn) { vFuiUUUU_t fn = (vFuiUUUU_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8, (uint64_t)R_R9); } void vFuiffff(x64emu_t *emu, uintptr_t fcn) { vFuiffff_t fn = (vFuiffff_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0]); } void vFuidddd(x64emu_t *emu, uintptr_t fcn) { vFuidddd_t fn = (vFuidddd_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0]); } -void vFuillll(x64emu_t *emu, uintptr_t fcn) { vFuillll_t fn = (vFuillll_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (intptr_t)R_R9); } -void vFuiLLLL(x64emu_t *emu, uintptr_t fcn) { vFuiLLLL_t fn = (vFuiLLLL_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9); } void vFuipiup(x64emu_t *emu, uintptr_t fcn) { vFuipiup_t fn = (vFuipiup_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } void vFuCuuip(x64emu_t *emu, uintptr_t fcn) { vFuCuuip_t fn = (vFuCuuip_t)fcn; fn((uint32_t)R_RDI, (uint8_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } void vFuuiiii(x64emu_t *emu, uintptr_t fcn) { vFuuiiii_t fn = (vFuuiiii_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void vFuuiiiu(x64emu_t *emu, uintptr_t fcn) { vFuuiiiu_t fn = (vFuuiiiu_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9); } void vFuuiuii(x64emu_t *emu, uintptr_t fcn) { vFuuiuii_t fn = (vFuuiuii_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } void vFuuiuil(x64emu_t *emu, uintptr_t fcn) { vFuuiuil_t fn = (vFuuiuil_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (intptr_t)R_R9); } void vFuuiuip(x64emu_t *emu, uintptr_t fcn) { vFuuiuip_t fn = (vFuuiuip_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } @@ -5066,8 +5394,7 @@ void vFuuplii(x64emu_t *emu, uintptr_t fcn) { vFuuplii_t fn = (vFuuplii_t)fcn; f void vFuffiip(x64emu_t *emu, uintptr_t fcn) { vFuffiip_t fn = (vFuffiip_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void vFufffff(x64emu_t *emu, uintptr_t fcn) { vFufffff_t fn = (vFufffff_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0]); } void vFuddiip(x64emu_t *emu, uintptr_t fcn) { vFuddiip_t fn = (vFuddiip_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void vFullill(x64emu_t *emu, uintptr_t fcn) { vFullill_t fn = (vFullill_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX, (intptr_t)R_R8, (intptr_t)R_R9); } -void vFulluLC(x64emu_t *emu, uintptr_t fcn) { vFulluLC_t fn = (vFulluLC_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8, (uint8_t)R_R9); } +void vFulluUC(x64emu_t *emu, uintptr_t fcn) { vFulluUC_t fn = (vFulluUC_t)fcn; fn((uint32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uint32_t)R_RCX, (uint64_t)R_R8, (uint8_t)R_R9); } void vFupiiii(x64emu_t *emu, uintptr_t fcn) { vFupiiii_t fn = (vFupiiii_t)fcn; fn((uint32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } void vFupupip(x64emu_t *emu, uintptr_t fcn) { vFupupip_t fn = (vFupupip_t)fcn; fn((uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } void vFuppppu(x64emu_t *emu, uintptr_t fcn) { vFuppppu_t fn = (vFuppppu_t)fcn; fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9); } @@ -5076,15 +5403,17 @@ void vFUUpppp(x64emu_t *emu, uintptr_t fcn) { vFUUpppp_t fn = (vFUUpppp_t)fcn; f void vFffffff(x64emu_t *emu, uintptr_t fcn) { vFffffff_t fn = (vFffffff_t)fcn; fn(emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0]); } void vFdddddd(x64emu_t *emu, uintptr_t fcn) { vFdddddd_t fn = (vFdddddd_t)fcn; fn(emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], emu->xmm[4].d[0], emu->xmm[5].d[0]); } void vFdddppp(x64emu_t *emu, uintptr_t fcn) { vFdddppp_t fn = (vFdddppp_t)fcn; fn(emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void vFpwwllc(x64emu_t *emu, uintptr_t fcn) { vFpwwllc_t fn = (vFpwwllc_t)fcn; fn((void*)R_RDI, (int16_t)R_RSI, (int16_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (int8_t)R_R9); } void vFpiiiii(x64emu_t *emu, uintptr_t fcn) { vFpiiiii_t fn = (vFpiiiii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } void vFpiiipp(x64emu_t *emu, uintptr_t fcn) { vFpiiipp_t fn = (vFpiiipp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } void vFpiiuuu(x64emu_t *emu, uintptr_t fcn) { vFpiiuuu_t fn = (vFpiiuuu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } +void vFpiilli(x64emu_t *emu, uintptr_t fcn) { vFpiilli_t fn = (vFpiilli_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (int32_t)R_R9); } void vFpiippi(x64emu_t *emu, uintptr_t fcn) { vFpiippi_t fn = (vFpiippi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } void vFpiippp(x64emu_t *emu, uintptr_t fcn) { vFpiippp_t fn = (vFpiippp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void vFpiUuup(x64emu_t *emu, uintptr_t fcn) { vFpiUuup_t fn = (vFpiUuup_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void vFpiLppi(x64emu_t *emu, uintptr_t fcn) { vFpiLppi_t fn = (vFpiLppi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } void vFpipipp(x64emu_t *emu, uintptr_t fcn) { vFpipipp_t fn = (vFpipipp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } void vFpipipV(x64emu_t *emu, uintptr_t fcn) { vFpipipV_t fn = (vFpipipV_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)(R_RSP + 8)); } -void vFpipppi(x64emu_t *emu, uintptr_t fcn) { vFpipppi_t fn = (vFpipppi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } void vFpipppp(x64emu_t *emu, uintptr_t fcn) { vFpipppp_t fn = (vFpipppp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void vFpuiiii(x64emu_t *emu, uintptr_t fcn) { vFpuiiii_t fn = (vFpuiiii_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } void vFpuiiiu(x64emu_t *emu, uintptr_t fcn) { vFpuiiiu_t fn = (vFpuiiiu_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9); } @@ -5107,11 +5436,15 @@ void vFpUUiup(x64emu_t *emu, uintptr_t fcn) { vFpUUiup_t fn = (vFpUUiup_t)fcn; f void vFpdddii(x64emu_t *emu, uintptr_t fcn) { vFpdddii_t fn = (vFpdddii_t)fcn; fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], (int32_t)R_RSI, (int32_t)R_RDX); } void vFpddddd(x64emu_t *emu, uintptr_t fcn) { vFpddddd_t fn = (vFpddddd_t)fcn; fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], emu->xmm[4].d[0]); } void vFpddddp(x64emu_t *emu, uintptr_t fcn) { vFpddddp_t fn = (vFpddddp_t)fcn; fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], (void*)R_RSI); } +void vFpLiiii(x64emu_t *emu, uintptr_t fcn) { vFpLiiii_t fn = (vFpLiiii_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void vFpLiiiL(x64emu_t *emu, uintptr_t fcn) { vFpLiiiL_t fn = (vFpLiiiL_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9); } +void vFpLiipi(x64emu_t *emu, uintptr_t fcn) { vFpLiipi_t fn = (vFpLiipi_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } +void vFpLLLLu(x64emu_t *emu, uintptr_t fcn) { vFpLLLLu_t fn = (vFpLLLLu_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uint32_t)R_R9); } void vFpLpLLL(x64emu_t *emu, uintptr_t fcn) { vFpLpLLL_t fn = (vFpLpLLL_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9); } +void vFpLpppi(x64emu_t *emu, uintptr_t fcn) { vFpLpppi_t fn = (vFpLpppi_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } void vFppiiii(x64emu_t *emu, uintptr_t fcn) { vFppiiii_t fn = (vFppiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void vFppiiip(x64emu_t *emu, uintptr_t fcn) { vFppiiip_t fn = (vFppiiip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void vFppiiiu(x64emu_t *emu, uintptr_t fcn) { vFppiiiu_t fn = (vFppiiiu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9); } void vFppiiuu(x64emu_t *emu, uintptr_t fcn) { vFppiiuu_t fn = (vFppiiuu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } -void vFppiipi(x64emu_t *emu, uintptr_t fcn) { vFppiipi_t fn = (vFppiipi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } void vFppiipp(x64emu_t *emu, uintptr_t fcn) { vFppiipp_t fn = (vFppiipp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } void vFppilpp(x64emu_t *emu, uintptr_t fcn) { vFppilpp_t fn = (vFppilpp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } void vFppipLp(x64emu_t *emu, uintptr_t fcn) { vFppipLp_t fn = (vFppipLp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } @@ -5136,8 +5469,11 @@ void vFpppiip(x64emu_t *emu, uintptr_t fcn) { vFpppiip_t fn = (vFpppiip_t)fcn; f void vFpppiui(x64emu_t *emu, uintptr_t fcn) { vFpppiui_t fn = (vFpppiui_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9); } void vFpppiff(x64emu_t *emu, uintptr_t fcn) { vFpppiff_t fn = (vFpppiff_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, emu->xmm[0].f[0], emu->xmm[1].f[0]); } void vFpppipu(x64emu_t *emu, uintptr_t fcn) { vFpppipu_t fn = (vFpppipu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } +void vFpppipp(x64emu_t *emu, uintptr_t fcn) { vFpppipp_t fn = (vFpppipp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } void vFpppuii(x64emu_t *emu, uintptr_t fcn) { vFpppuii_t fn = (vFpppuii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void vFpppuip(x64emu_t *emu, uintptr_t fcn) { vFpppuip_t fn = (vFpppuip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } void vFpppuuu(x64emu_t *emu, uintptr_t fcn) { vFpppuuu_t fn = (vFpppuuu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } +void vFpppuup(x64emu_t *emu, uintptr_t fcn) { vFpppuup_t fn = (vFpppuup_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } void vFpppLpp(x64emu_t *emu, uintptr_t fcn) { vFpppLpp_t fn = (vFpppLpp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } void vFppppii(x64emu_t *emu, uintptr_t fcn) { vFppppii_t fn = (vFppppii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } void vFppppLp(x64emu_t *emu, uintptr_t fcn) { vFppppLp_t fn = (vFppppLp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } @@ -5146,144 +5482,171 @@ void vFpppppu(x64emu_t *emu, uintptr_t fcn) { vFpppppu_t fn = (vFpppppu_t)fcn; f void vFpppppU(x64emu_t *emu, uintptr_t fcn) { vFpppppU_t fn = (vFpppppU_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint64_t)R_R9); } void vFpppppL(x64emu_t *emu, uintptr_t fcn) { vFpppppL_t fn = (vFpppppL_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } void vFpppppp(x64emu_t *emu, uintptr_t fcn) { vFpppppp_t fn = (vFpppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void cFppLppi(x64emu_t *emu, uintptr_t fcn) { cFppLppi_t fn = (cFppLppi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } -void iFEiippi(x64emu_t *emu, uintptr_t fcn) { iFEiippi_t fn = (iFEiippi_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFEiippp(x64emu_t *emu, uintptr_t fcn) { iFEiippp_t fn = (iFEiippp_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFEiLLLL(x64emu_t *emu, uintptr_t fcn) { iFEiLLLL_t fn = (iFEiLLLL_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } -void iFEippLp(x64emu_t *emu, uintptr_t fcn) { iFEippLp_t fn = (iFEippLp_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } -void iFElpppp(x64emu_t *emu, uintptr_t fcn) { iFElpppp_t fn = (iFElpppp_t)fcn; R_RAX=(int32_t)fn(emu, (intptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFEpiipp(x64emu_t *emu, uintptr_t fcn) { iFEpiipp_t fn = (iFEpiipp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFEpiipV(x64emu_t *emu, uintptr_t fcn) { iFEpiipV_t fn = (iFEpiipV_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } -void iFEpilpV(x64emu_t *emu, uintptr_t fcn) { iFEpilpV_t fn = (iFEpilpV_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } -void iFEpippi(x64emu_t *emu, uintptr_t fcn) { iFEpippi_t fn = (iFEpippi_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFEpIppp(x64emu_t *emu, uintptr_t fcn) { iFEpIppp_t fn = (iFEpIppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFEpuppp(x64emu_t *emu, uintptr_t fcn) { iFEpuppp_t fn = (iFEpuppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFEpUppp(x64emu_t *emu, uintptr_t fcn) { iFEpUppp_t fn = (iFEpUppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFEppppi(x64emu_t *emu, uintptr_t fcn) { iFEppppi_t fn = (iFEppppi_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } -void iFEppppp(x64emu_t *emu, uintptr_t fcn) { iFEppppp_t fn = (iFEppppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFiiiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiiip_t fn = (iFiiiiip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } -void iFiiiipp(x64emu_t *emu, uintptr_t fcn) { iFiiiipp_t fn = (iFiiiipp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFiiiuwp(x64emu_t *emu, uintptr_t fcn) { iFiiiuwp_t fn = (iFiiiuwp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int16_t)R_R8, (void*)R_R9); } -void iFiWiipi(x64emu_t *emu, uintptr_t fcn) { iFiWiipi_t fn = (iFiWiipi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint16_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } -void iFiuUuUu(x64emu_t *emu, uintptr_t fcn) { iFiuUuUu_t fn = (iFiuUuUu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint64_t)R_RDX, (uint32_t)R_RCX, (uint64_t)R_R8, (uint32_t)R_R9); } -void iFilpppp(x64emu_t *emu, uintptr_t fcn) { iFilpppp_t fn = (iFilpppp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFiLpppi(x64emu_t *emu, uintptr_t fcn) { iFiLpppi_t fn = (iFiLpppi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } -void iFipipip(x64emu_t *emu, uintptr_t fcn) { iFipipip_t fn = (iFipipip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } -void iFipippp(x64emu_t *emu, uintptr_t fcn) { iFipippp_t fn = (iFipippp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFipuIup(x64emu_t *emu, uintptr_t fcn) { iFipuIup_t fn = (iFipuIup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int64_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } -void iFipupup(x64emu_t *emu, uintptr_t fcn) { iFipupup_t fn = (iFipupup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9); } -void iFipuppp(x64emu_t *emu, uintptr_t fcn) { iFipuppp_t fn = (iFipuppp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFipppLp(x64emu_t *emu, uintptr_t fcn) { iFipppLp_t fn = (iFipppLp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } -void iFippppp(x64emu_t *emu, uintptr_t fcn) { iFippppp_t fn = (iFippppp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFdipppL(x64emu_t *emu, uintptr_t fcn) { iFdipppL_t fn = (iFdipppL_t)fcn; R_RAX=(int32_t)fn(emu->xmm[0].d[0], (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } -void iFDipppL(x64emu_t *emu, uintptr_t fcn) { iFDipppL_t fn = (iFDipppL_t)fcn; R_RAX=(int32_t)fn(LD2localLD((void*)(R_RSP + 8)), (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } -void iFlpippp(x64emu_t *emu, uintptr_t fcn) { iFlpippp_t fn = (iFlpippp_t)fcn; R_RAX=(int32_t)fn((intptr_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFLpppii(x64emu_t *emu, uintptr_t fcn) { iFLpppii_t fn = (iFLpppii_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void iFpiiiii(x64emu_t *emu, uintptr_t fcn) { iFpiiiii_t fn = (iFpiiiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void iFpiiiiu(x64emu_t *emu, uintptr_t fcn) { iFpiiiiu_t fn = (iFpiiiiu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9); } -void iFpiiiip(x64emu_t *emu, uintptr_t fcn) { iFpiiiip_t fn = (iFpiiiip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } -void iFpiiipp(x64emu_t *emu, uintptr_t fcn) { iFpiiipp_t fn = (iFpiiipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpiiuii(x64emu_t *emu, uintptr_t fcn) { iFpiiuii_t fn = (iFpiiuii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void iFpiiuui(x64emu_t *emu, uintptr_t fcn) { iFpiiuui_t fn = (iFpiiuui_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9); } -void iFpiiupp(x64emu_t *emu, uintptr_t fcn) { iFpiiupp_t fn = (iFpiiupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpiipip(x64emu_t *emu, uintptr_t fcn) { iFpiipip_t fn = (iFpiipip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } -void iFpiippp(x64emu_t *emu, uintptr_t fcn) { iFpiippp_t fn = (iFpiippp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpiCCpu(x64emu_t *emu, uintptr_t fcn) { iFpiCCpu_t fn = (iFpiCCpu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } -void iFpiuuup(x64emu_t *emu, uintptr_t fcn) { iFpiuuup_t fn = (iFpiuuup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } -void iFpiuupp(x64emu_t *emu, uintptr_t fcn) { iFpiuupp_t fn = (iFpiuupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpipiii(x64emu_t *emu, uintptr_t fcn) { iFpipiii_t fn = (iFpipiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void iFpipipi(x64emu_t *emu, uintptr_t fcn) { iFpipipi_t fn = (iFpipipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } -void iFpipipp(x64emu_t *emu, uintptr_t fcn) { iFpipipp_t fn = (iFpipipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpipupp(x64emu_t *emu, uintptr_t fcn) { iFpipupp_t fn = (iFpipupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpipLpp(x64emu_t *emu, uintptr_t fcn) { iFpipLpp_t fn = (iFpipLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpippip(x64emu_t *emu, uintptr_t fcn) { iFpippip_t fn = (iFpippip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } -void iFpippup(x64emu_t *emu, uintptr_t fcn) { iFpippup_t fn = (iFpippup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9); } -void iFpipppp(x64emu_t *emu, uintptr_t fcn) { iFpipppp_t fn = (iFpipppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpCiipp(x64emu_t *emu, uintptr_t fcn) { iFpCiipp_t fn = (iFpCiipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpCpipu(x64emu_t *emu, uintptr_t fcn) { iFpCpipu_t fn = (iFpCpipu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } -void iFpWipip(x64emu_t *emu, uintptr_t fcn) { iFpWipip_t fn = (iFpWipip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } -void iFpWpppp(x64emu_t *emu, uintptr_t fcn) { iFpWpppp_t fn = (iFpWpppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpuiCpp(x64emu_t *emu, uintptr_t fcn) { iFpuiCpp_t fn = (iFpuiCpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint8_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpuippp(x64emu_t *emu, uintptr_t fcn) { iFpuippp_t fn = (iFpuippp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpuuuuu(x64emu_t *emu, uintptr_t fcn) { iFpuuuuu_t fn = (iFpuuuuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } -void iFpuuuup(x64emu_t *emu, uintptr_t fcn) { iFpuuuup_t fn = (iFpuuuup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } -void iFpuuupu(x64emu_t *emu, uintptr_t fcn) { iFpuuupu_t fn = (iFpuuupu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } -void iFpuuupp(x64emu_t *emu, uintptr_t fcn) { iFpuuupp_t fn = (iFpuuupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpuuLpp(x64emu_t *emu, uintptr_t fcn) { iFpuuLpp_t fn = (iFpuuLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpuupuu(x64emu_t *emu, uintptr_t fcn) { iFpuupuu_t fn = (iFpuupuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } -void iFpuuppp(x64emu_t *emu, uintptr_t fcn) { iFpuuppp_t fn = (iFpuuppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpuLLpp(x64emu_t *emu, uintptr_t fcn) { iFpuLLpp_t fn = (iFpuLLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpupuui(x64emu_t *emu, uintptr_t fcn) { iFpupuui_t fn = (iFpupuui_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9); } -void iFpupLpL(x64emu_t *emu, uintptr_t fcn) { iFpupLpL_t fn = (iFpupLpL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } -void iFpupLpp(x64emu_t *emu, uintptr_t fcn) { iFpupLpp_t fn = (iFpupLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpUiipp(x64emu_t *emu, uintptr_t fcn) { iFpUiipp_t fn = (iFpUiipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpUuuLp(x64emu_t *emu, uintptr_t fcn) { iFpUuuLp_t fn = (iFpUuuLp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } -void iFpUUUup(x64emu_t *emu, uintptr_t fcn) { iFpUUUup_t fn = (iFpUUUup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } -void iFpUUUUp(x64emu_t *emu, uintptr_t fcn) { iFpUUUUp_t fn = (iFpUUUUp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8, (void*)R_R9); } -void iFpdpipp(x64emu_t *emu, uintptr_t fcn) { iFpdpipp_t fn = (iFpdpipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, emu->xmm[0].d[0], (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } -void iFpLiiiL(x64emu_t *emu, uintptr_t fcn) { iFpLiiiL_t fn = (iFpLiiiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9); } -void iFpLiiip(x64emu_t *emu, uintptr_t fcn) { iFpLiiip_t fn = (iFpLiiip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } -void iFpLiiuu(x64emu_t *emu, uintptr_t fcn) { iFpLiiuu_t fn = (iFpLiiuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } -void iFpLipLu(x64emu_t *emu, uintptr_t fcn) { iFpLipLu_t fn = (iFpLipLu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (uint32_t)R_R9); } -void iFpLuipp(x64emu_t *emu, uintptr_t fcn) { iFpLuipp_t fn = (iFpLuipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpLuupp(x64emu_t *emu, uintptr_t fcn) { iFpLuupp_t fn = (iFpLuupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpLupip(x64emu_t *emu, uintptr_t fcn) { iFpLupip_t fn = (iFpLupip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } -void iFpLLLLL(x64emu_t *emu, uintptr_t fcn) { iFpLLLLL_t fn = (iFpLLLLL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9); } -void iFpLLppp(x64emu_t *emu, uintptr_t fcn) { iFpLLppp_t fn = (iFpLLppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpLpipi(x64emu_t *emu, uintptr_t fcn) { iFpLpipi_t fn = (iFpLpipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } -void iFpLppii(x64emu_t *emu, uintptr_t fcn) { iFpLppii_t fn = (iFpLppii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void iFpLpppL(x64emu_t *emu, uintptr_t fcn) { iFpLpppL_t fn = (iFpLpppL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } -void iFpLpppp(x64emu_t *emu, uintptr_t fcn) { iFpLpppp_t fn = (iFpLpppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFppiiii(x64emu_t *emu, uintptr_t fcn) { iFppiiii_t fn = (iFppiiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void iFppiiip(x64emu_t *emu, uintptr_t fcn) { iFppiiip_t fn = (iFppiiip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } -void iFppiipi(x64emu_t *emu, uintptr_t fcn) { iFppiipi_t fn = (iFppiipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } -void iFppiipp(x64emu_t *emu, uintptr_t fcn) { iFppiipp_t fn = (iFppiipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFppiupp(x64emu_t *emu, uintptr_t fcn) { iFppiupp_t fn = (iFppiupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFppilpp(x64emu_t *emu, uintptr_t fcn) { iFppilpp_t fn = (iFppilpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFppipii(x64emu_t *emu, uintptr_t fcn) { iFppipii_t fn = (iFppipii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void iFppipiL(x64emu_t *emu, uintptr_t fcn) { iFppipiL_t fn = (iFppipiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9); } -void iFppipip(x64emu_t *emu, uintptr_t fcn) { iFppipip_t fn = (iFppipip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } -void iFppippi(x64emu_t *emu, uintptr_t fcn) { iFppippi_t fn = (iFppippi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } -void iFppippu(x64emu_t *emu, uintptr_t fcn) { iFppippu_t fn = (iFppippu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9); } -void iFppippp(x64emu_t *emu, uintptr_t fcn) { iFppippp_t fn = (iFppippp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFppIppp(x64emu_t *emu, uintptr_t fcn) { iFppIppp_t fn = (iFppIppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFppuiii(x64emu_t *emu, uintptr_t fcn) { iFppuiii_t fn = (iFppuiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void iFppuIII(x64emu_t *emu, uintptr_t fcn) { iFppuIII_t fn = (iFppuIII_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9); } -void iFppuupp(x64emu_t *emu, uintptr_t fcn) { iFppuupp_t fn = (iFppuupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFppuLpp(x64emu_t *emu, uintptr_t fcn) { iFppuLpp_t fn = (iFppuLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFppupip(x64emu_t *emu, uintptr_t fcn) { iFppupip_t fn = (iFppupip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } -void iFppuppp(x64emu_t *emu, uintptr_t fcn) { iFppuppp_t fn = (iFppuppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFppdidd(x64emu_t *emu, uintptr_t fcn) { iFppdidd_t fn = (iFppdidd_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], (int32_t)R_RDX, emu->xmm[1].d[0], emu->xmm[2].d[0]); } -void iFpplupp(x64emu_t *emu, uintptr_t fcn) { iFpplupp_t fn = (iFpplupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpplppi(x64emu_t *emu, uintptr_t fcn) { iFpplppi_t fn = (iFpplppi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } -void iFppLupp(x64emu_t *emu, uintptr_t fcn) { iFppLupp_t fn = (iFppLupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFppLLiL(x64emu_t *emu, uintptr_t fcn) { iFppLLiL_t fn = (iFppLLiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9); } -void iFppLLup(x64emu_t *emu, uintptr_t fcn) { iFppLLup_t fn = (iFppLLup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } -void iFppLLpp(x64emu_t *emu, uintptr_t fcn) { iFppLLpp_t fn = (iFppLLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFppLpLp(x64emu_t *emu, uintptr_t fcn) { iFppLpLp_t fn = (iFppLpLp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } -void iFppLppp(x64emu_t *emu, uintptr_t fcn) { iFppLppp_t fn = (iFppLppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpppiuu(x64emu_t *emu, uintptr_t fcn) { iFpppiuu_t fn = (iFpppiuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } -void iFpppipi(x64emu_t *emu, uintptr_t fcn) { iFpppipi_t fn = (iFpppipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } -void iFpppipu(x64emu_t *emu, uintptr_t fcn) { iFpppipu_t fn = (iFpppipu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } -void iFpppipp(x64emu_t *emu, uintptr_t fcn) { iFpppipp_t fn = (iFpppipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpppuii(x64emu_t *emu, uintptr_t fcn) { iFpppuii_t fn = (iFpppuii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void iFpppuup(x64emu_t *emu, uintptr_t fcn) { iFpppuup_t fn = (iFpppuup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } -void iFpppupu(x64emu_t *emu, uintptr_t fcn) { iFpppupu_t fn = (iFpppupu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } -void iFpppupp(x64emu_t *emu, uintptr_t fcn) { iFpppupp_t fn = (iFpppupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpppLpp(x64emu_t *emu, uintptr_t fcn) { iFpppLpp_t fn = (iFpppLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFppppii(x64emu_t *emu, uintptr_t fcn) { iFppppii_t fn = (iFppppii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } -void iFppppiu(x64emu_t *emu, uintptr_t fcn) { iFppppiu_t fn = (iFppppiu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uint32_t)R_R9); } -void iFppppip(x64emu_t *emu, uintptr_t fcn) { iFppppip_t fn = (iFppppip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } -void iFppppup(x64emu_t *emu, uintptr_t fcn) { iFppppup_t fn = (iFppppup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9); } -void iFppppLp(x64emu_t *emu, uintptr_t fcn) { iFppppLp_t fn = (iFppppLp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } -void iFpppppi(x64emu_t *emu, uintptr_t fcn) { iFpppppi_t fn = (iFpppppi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } -void iFpppppL(x64emu_t *emu, uintptr_t fcn) { iFpppppL_t fn = (iFpppppL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } -void iFpppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppp_t fn = (iFpppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void cFppLppi(x64emu_t *emu, uintptr_t fcn) { cFppLppi_t fn = (cFppLppi_t)fcn; R_RAX=(uint8_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } +void iFEiippi(x64emu_t *emu, uintptr_t fcn) { iFEiippi_t fn = (iFEiippi_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFEiippp(x64emu_t *emu, uintptr_t fcn) { iFEiippp_t fn = (iFEiippp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFEiLLLL(x64emu_t *emu, uintptr_t fcn) { iFEiLLLL_t fn = (iFEiLLLL_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } +void iFEipiup(x64emu_t *emu, uintptr_t fcn) { iFEipiup_t fn = (iFEipiup_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFEippLp(x64emu_t *emu, uintptr_t fcn) { iFEippLp_t fn = (iFEippLp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } +void iFElpppp(x64emu_t *emu, uintptr_t fcn) { iFElpppp_t fn = (iFElpppp_t)fcn; R_RAX=(uint32_t)fn(emu, (intptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFEpiipp(x64emu_t *emu, uintptr_t fcn) { iFEpiipp_t fn = (iFEpiipp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFEpiipV(x64emu_t *emu, uintptr_t fcn) { iFEpiipV_t fn = (iFEpiipV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } +void iFEpilpV(x64emu_t *emu, uintptr_t fcn) { iFEpilpV_t fn = (iFEpilpV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } +void iFEpippi(x64emu_t *emu, uintptr_t fcn) { iFEpippi_t fn = (iFEpippi_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFEpIppp(x64emu_t *emu, uintptr_t fcn) { iFEpIppp_t fn = (iFEpIppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFEpuipp(x64emu_t *emu, uintptr_t fcn) { iFEpuipp_t fn = (iFEpuipp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFEpuppp(x64emu_t *emu, uintptr_t fcn) { iFEpuppp_t fn = (iFEpuppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFEpUppp(x64emu_t *emu, uintptr_t fcn) { iFEpUppp_t fn = (iFEpUppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFEppupp(x64emu_t *emu, uintptr_t fcn) { iFEppupp_t fn = (iFEppupp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFEppppi(x64emu_t *emu, uintptr_t fcn) { iFEppppi_t fn = (iFEppppi_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFEppppp(x64emu_t *emu, uintptr_t fcn) { iFEppppp_t fn = (iFEppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFiiiipp(x64emu_t *emu, uintptr_t fcn) { iFiiiipp_t fn = (iFiiiipp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFiiiuwp(x64emu_t *emu, uintptr_t fcn) { iFiiiuwp_t fn = (iFiiiuwp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int16_t)R_R8, (void*)R_R9); } +void iFiWiipi(x64emu_t *emu, uintptr_t fcn) { iFiWiipi_t fn = (iFiWiipi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint16_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } +void iFiuuuup(x64emu_t *emu, uintptr_t fcn) { iFiuuuup_t fn = (iFiuuuup_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFiuuppp(x64emu_t *emu, uintptr_t fcn) { iFiuuppp_t fn = (iFiuuppp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFiuUuUu(x64emu_t *emu, uintptr_t fcn) { iFiuUuUu_t fn = (iFiuUuUu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint64_t)R_RDX, (uint32_t)R_RCX, (uint64_t)R_R8, (uint32_t)R_R9); } +void iFilpppp(x64emu_t *emu, uintptr_t fcn) { iFilpppp_t fn = (iFilpppp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFiLpppi(x64emu_t *emu, uintptr_t fcn) { iFiLpppi_t fn = (iFiLpppi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } +void iFipipip(x64emu_t *emu, uintptr_t fcn) { iFipipip_t fn = (iFipipip_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFipippp(x64emu_t *emu, uintptr_t fcn) { iFipippp_t fn = (iFipippp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFipuIup(x64emu_t *emu, uintptr_t fcn) { iFipuIup_t fn = (iFipuIup_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int64_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFipupup(x64emu_t *emu, uintptr_t fcn) { iFipupup_t fn = (iFipupup_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFipuppp(x64emu_t *emu, uintptr_t fcn) { iFipuppp_t fn = (iFipuppp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFipppLp(x64emu_t *emu, uintptr_t fcn) { iFipppLp_t fn = (iFipppLp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } +void iFippppp(x64emu_t *emu, uintptr_t fcn) { iFippppp_t fn = (iFippppp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFuiiuup(x64emu_t *emu, uintptr_t fcn) { iFuiiuup_t fn = (iFuiiuup_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFupupLp(x64emu_t *emu, uintptr_t fcn) { iFupupLp_t fn = (iFupupLp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } +void iFupLpLp(x64emu_t *emu, uintptr_t fcn) { iFupLpLp_t fn = (iFupLpLp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } +void iFdipppL(x64emu_t *emu, uintptr_t fcn) { iFdipppL_t fn = (iFdipppL_t)fcn; R_RAX=(uint32_t)fn(emu->xmm[0].d[0], (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } +void iFlpippp(x64emu_t *emu, uintptr_t fcn) { iFlpippp_t fn = (iFlpippp_t)fcn; R_RAX=(uint32_t)fn((intptr_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFLpppii(x64emu_t *emu, uintptr_t fcn) { iFLpppii_t fn = (iFLpppii_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void iFpiiiii(x64emu_t *emu, uintptr_t fcn) { iFpiiiii_t fn = (iFpiiiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void iFpiiiiu(x64emu_t *emu, uintptr_t fcn) { iFpiiiiu_t fn = (iFpiiiiu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9); } +void iFpiiiip(x64emu_t *emu, uintptr_t fcn) { iFpiiiip_t fn = (iFpiiiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFpiiipp(x64emu_t *emu, uintptr_t fcn) { iFpiiipp_t fn = (iFpiiipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpiiuii(x64emu_t *emu, uintptr_t fcn) { iFpiiuii_t fn = (iFpiiuii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void iFpiiuui(x64emu_t *emu, uintptr_t fcn) { iFpiiuui_t fn = (iFpiiuui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9); } +void iFpiiupp(x64emu_t *emu, uintptr_t fcn) { iFpiiupp_t fn = (iFpiiupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpiiLip(x64emu_t *emu, uintptr_t fcn) { iFpiiLip_t fn = (iFpiiLip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFpiipip(x64emu_t *emu, uintptr_t fcn) { iFpiipip_t fn = (iFpiipip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFpiippp(x64emu_t *emu, uintptr_t fcn) { iFpiippp_t fn = (iFpiippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpiCCpu(x64emu_t *emu, uintptr_t fcn) { iFpiCCpu_t fn = (iFpiCCpu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } +void iFpiuuup(x64emu_t *emu, uintptr_t fcn) { iFpiuuup_t fn = (iFpiuuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFpiuupp(x64emu_t *emu, uintptr_t fcn) { iFpiuupp_t fn = (iFpiuupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpipiii(x64emu_t *emu, uintptr_t fcn) { iFpipiii_t fn = (iFpipiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void iFpipipi(x64emu_t *emu, uintptr_t fcn) { iFpipipi_t fn = (iFpipipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } +void iFpipipp(x64emu_t *emu, uintptr_t fcn) { iFpipipp_t fn = (iFpipipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpipupp(x64emu_t *emu, uintptr_t fcn) { iFpipupp_t fn = (iFpipupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpipLpp(x64emu_t *emu, uintptr_t fcn) { iFpipLpp_t fn = (iFpipLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpippip(x64emu_t *emu, uintptr_t fcn) { iFpippip_t fn = (iFpippip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFpippup(x64emu_t *emu, uintptr_t fcn) { iFpippup_t fn = (iFpippup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFpipppu(x64emu_t *emu, uintptr_t fcn) { iFpipppu_t fn = (iFpipppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9); } +void iFpipppp(x64emu_t *emu, uintptr_t fcn) { iFpipppp_t fn = (iFpipppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpCiipp(x64emu_t *emu, uintptr_t fcn) { iFpCiipp_t fn = (iFpCiipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpCpipu(x64emu_t *emu, uintptr_t fcn) { iFpCpipu_t fn = (iFpCpipu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } +void iFpWipip(x64emu_t *emu, uintptr_t fcn) { iFpWipip_t fn = (iFpWipip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFpWpppp(x64emu_t *emu, uintptr_t fcn) { iFpWpppp_t fn = (iFpWpppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpuiCpp(x64emu_t *emu, uintptr_t fcn) { iFpuiCpp_t fn = (iFpuiCpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint8_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpuiLpp(x64emu_t *emu, uintptr_t fcn) { iFpuiLpp_t fn = (iFpuiLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpuippp(x64emu_t *emu, uintptr_t fcn) { iFpuippp_t fn = (iFpuippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpuuuuu(x64emu_t *emu, uintptr_t fcn) { iFpuuuuu_t fn = (iFpuuuuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } +void iFpuuuup(x64emu_t *emu, uintptr_t fcn) { iFpuuuup_t fn = (iFpuuuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFpuuupu(x64emu_t *emu, uintptr_t fcn) { iFpuuupu_t fn = (iFpuuupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } +void iFpuuupp(x64emu_t *emu, uintptr_t fcn) { iFpuuupp_t fn = (iFpuuupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpuuLpp(x64emu_t *emu, uintptr_t fcn) { iFpuuLpp_t fn = (iFpuuLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpuupuu(x64emu_t *emu, uintptr_t fcn) { iFpuupuu_t fn = (iFpuupuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } +void iFpuuppp(x64emu_t *emu, uintptr_t fcn) { iFpuuppp_t fn = (iFpuuppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpuLuLu(x64emu_t *emu, uintptr_t fcn) { iFpuLuLu_t fn = (iFpuLuLu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8, (uint32_t)R_R9); } +void iFpuLLpp(x64emu_t *emu, uintptr_t fcn) { iFpuLLpp_t fn = (iFpuLLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpupupp(x64emu_t *emu, uintptr_t fcn) { iFpupupp_t fn = (iFpupupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpupLpL(x64emu_t *emu, uintptr_t fcn) { iFpupLpL_t fn = (iFpupLpL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } +void iFpupLpp(x64emu_t *emu, uintptr_t fcn) { iFpupLpp_t fn = (iFpupLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpupppp(x64emu_t *emu, uintptr_t fcn) { iFpupppp_t fn = (iFpupppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpUiipp(x64emu_t *emu, uintptr_t fcn) { iFpUiipp_t fn = (iFpUiipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpUuuLp(x64emu_t *emu, uintptr_t fcn) { iFpUuuLp_t fn = (iFpUuuLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } +void iFpUUUup(x64emu_t *emu, uintptr_t fcn) { iFpUUUup_t fn = (iFpUUUup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFpUUUUp(x64emu_t *emu, uintptr_t fcn) { iFpUUUUp_t fn = (iFpUUUUp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8, (void*)R_R9); } +void iFpdpipp(x64emu_t *emu, uintptr_t fcn) { iFpdpipp_t fn = (iFpdpipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, emu->xmm[0].d[0], (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFpLiiiL(x64emu_t *emu, uintptr_t fcn) { iFpLiiiL_t fn = (iFpLiiiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9); } +void iFpLiiip(x64emu_t *emu, uintptr_t fcn) { iFpLiiip_t fn = (iFpLiiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFpLiiuu(x64emu_t *emu, uintptr_t fcn) { iFpLiiuu_t fn = (iFpLiiuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } +void iFpLipLu(x64emu_t *emu, uintptr_t fcn) { iFpLipLu_t fn = (iFpLipLu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (uint32_t)R_R9); } +void iFpLuipp(x64emu_t *emu, uintptr_t fcn) { iFpLuipp_t fn = (iFpLuipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpLuupp(x64emu_t *emu, uintptr_t fcn) { iFpLuupp_t fn = (iFpLuupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpLupip(x64emu_t *emu, uintptr_t fcn) { iFpLupip_t fn = (iFpLupip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFpLLLLu(x64emu_t *emu, uintptr_t fcn) { iFpLLLLu_t fn = (iFpLLLLu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uint32_t)R_R9); } +void iFpLLLLL(x64emu_t *emu, uintptr_t fcn) { iFpLLLLL_t fn = (iFpLLLLL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9); } +void iFpLLLLp(x64emu_t *emu, uintptr_t fcn) { iFpLLLLp_t fn = (iFpLLLLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } +void iFpLLppp(x64emu_t *emu, uintptr_t fcn) { iFpLLppp_t fn = (iFpLLppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpLpipi(x64emu_t *emu, uintptr_t fcn) { iFpLpipi_t fn = (iFpLpipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } +void iFpLpLui(x64emu_t *emu, uintptr_t fcn) { iFpLpLui_t fn = (iFpLpLui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9); } +void iFpLppii(x64emu_t *emu, uintptr_t fcn) { iFpLppii_t fn = (iFpLppii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void iFpLpppL(x64emu_t *emu, uintptr_t fcn) { iFpLpppL_t fn = (iFpLpppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } +void iFpLpppp(x64emu_t *emu, uintptr_t fcn) { iFpLpppp_t fn = (iFpLpppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppiiii(x64emu_t *emu, uintptr_t fcn) { iFppiiii_t fn = (iFppiiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void iFppiiip(x64emu_t *emu, uintptr_t fcn) { iFppiiip_t fn = (iFppiiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFppiipi(x64emu_t *emu, uintptr_t fcn) { iFppiipi_t fn = (iFppiipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } +void iFppiipp(x64emu_t *emu, uintptr_t fcn) { iFppiipp_t fn = (iFppiipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppiuii(x64emu_t *emu, uintptr_t fcn) { iFppiuii_t fn = (iFppiuii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void iFppiupp(x64emu_t *emu, uintptr_t fcn) { iFppiupp_t fn = (iFppiupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppilpp(x64emu_t *emu, uintptr_t fcn) { iFppilpp_t fn = (iFppilpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppipii(x64emu_t *emu, uintptr_t fcn) { iFppipii_t fn = (iFppipii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void iFppipiL(x64emu_t *emu, uintptr_t fcn) { iFppipiL_t fn = (iFppipiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9); } +void iFppipip(x64emu_t *emu, uintptr_t fcn) { iFppipip_t fn = (iFppipip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFppippi(x64emu_t *emu, uintptr_t fcn) { iFppippi_t fn = (iFppippi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } +void iFppippu(x64emu_t *emu, uintptr_t fcn) { iFppippu_t fn = (iFppippu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9); } +void iFppippp(x64emu_t *emu, uintptr_t fcn) { iFppippp_t fn = (iFppippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppIppp(x64emu_t *emu, uintptr_t fcn) { iFppIppp_t fn = (iFppIppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppuiii(x64emu_t *emu, uintptr_t fcn) { iFppuiii_t fn = (iFppuiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void iFppuipp(x64emu_t *emu, uintptr_t fcn) { iFppuipp_t fn = (iFppuipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppuIII(x64emu_t *emu, uintptr_t fcn) { iFppuIII_t fn = (iFppuIII_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9); } +void iFppuupL(x64emu_t *emu, uintptr_t fcn) { iFppuupL_t fn = (iFppuupL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } +void iFppuupp(x64emu_t *emu, uintptr_t fcn) { iFppuupp_t fn = (iFppuupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppulup(x64emu_t *emu, uintptr_t fcn) { iFppulup_t fn = (iFppulup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (intptr_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFppulll(x64emu_t *emu, uintptr_t fcn) { iFppulll_t fn = (iFppulll_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (intptr_t)R_R9); } +void iFppuLpp(x64emu_t *emu, uintptr_t fcn) { iFppuLpp_t fn = (iFppuLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppupip(x64emu_t *emu, uintptr_t fcn) { iFppupip_t fn = (iFppupip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFppuppu(x64emu_t *emu, uintptr_t fcn) { iFppuppu_t fn = (iFppuppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9); } +void iFppuppp(x64emu_t *emu, uintptr_t fcn) { iFppuppp_t fn = (iFppuppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppdidd(x64emu_t *emu, uintptr_t fcn) { iFppdidd_t fn = (iFppdidd_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], (int32_t)R_RDX, emu->xmm[1].d[0], emu->xmm[2].d[0]); } +void iFpplupp(x64emu_t *emu, uintptr_t fcn) { iFpplupp_t fn = (iFpplupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpplppi(x64emu_t *emu, uintptr_t fcn) { iFpplppi_t fn = (iFpplppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } +void iFppLiWL(x64emu_t *emu, uintptr_t fcn) { iFppLiWL_t fn = (iFppLiWL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (uint16_t)R_R8, (uintptr_t)R_R9); } +void iFppLupp(x64emu_t *emu, uintptr_t fcn) { iFppLupp_t fn = (iFppLupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppLLiL(x64emu_t *emu, uintptr_t fcn) { iFppLLiL_t fn = (iFppLLiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9); } +void iFppLLup(x64emu_t *emu, uintptr_t fcn) { iFppLLup_t fn = (iFppLLup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFppLLpp(x64emu_t *emu, uintptr_t fcn) { iFppLLpp_t fn = (iFppLLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppLpLp(x64emu_t *emu, uintptr_t fcn) { iFppLpLp_t fn = (iFppLpLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } +void iFppLppp(x64emu_t *emu, uintptr_t fcn) { iFppLppp_t fn = (iFppLppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpppiup(x64emu_t *emu, uintptr_t fcn) { iFpppiup_t fn = (iFpppiup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFpppipi(x64emu_t *emu, uintptr_t fcn) { iFpppipi_t fn = (iFpppipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } +void iFpppipu(x64emu_t *emu, uintptr_t fcn) { iFpppipu_t fn = (iFpppipu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } +void iFpppipp(x64emu_t *emu, uintptr_t fcn) { iFpppipp_t fn = (iFpppipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpppuii(x64emu_t *emu, uintptr_t fcn) { iFpppuii_t fn = (iFpppuii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void iFpppuuu(x64emu_t *emu, uintptr_t fcn) { iFpppuuu_t fn = (iFpppuuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } +void iFpppuup(x64emu_t *emu, uintptr_t fcn) { iFpppuup_t fn = (iFpppuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFpppupu(x64emu_t *emu, uintptr_t fcn) { iFpppupu_t fn = (iFpppupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } +void iFpppupp(x64emu_t *emu, uintptr_t fcn) { iFpppupp_t fn = (iFpppupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpppLpp(x64emu_t *emu, uintptr_t fcn) { iFpppLpp_t fn = (iFpppLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFppppiu(x64emu_t *emu, uintptr_t fcn) { iFppppiu_t fn = (iFppppiu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uint32_t)R_R9); } +void iFppppip(x64emu_t *emu, uintptr_t fcn) { iFppppip_t fn = (iFppppip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFppppui(x64emu_t *emu, uintptr_t fcn) { iFppppui_t fn = (iFppppui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (int32_t)R_R9); } +void iFppppuu(x64emu_t *emu, uintptr_t fcn) { iFppppuu_t fn = (iFppppuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } +void iFppppup(x64emu_t *emu, uintptr_t fcn) { iFppppup_t fn = (iFppppup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void iFppppLp(x64emu_t *emu, uintptr_t fcn) { iFppppLp_t fn = (iFppppLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } +void iFpppppi(x64emu_t *emu, uintptr_t fcn) { iFpppppi_t fn = (iFpppppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } +void iFpppppu(x64emu_t *emu, uintptr_t fcn) { iFpppppu_t fn = (iFpppppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9); } +void iFpppppL(x64emu_t *emu, uintptr_t fcn) { iFpppppL_t fn = (iFpppppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } +void iFpppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppp_t fn = (iFpppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpppppS(x64emu_t *emu, uintptr_t fcn) { iFpppppS_t fn = (iFpppppS_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, io_convert((void*)R_R9)); } void uFEiippp(x64emu_t *emu, uintptr_t fcn) { uFEiippp_t fn = (uFEiippp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void uFEiuppp(x64emu_t *emu, uintptr_t fcn) { uFEiuppp_t fn = (uFEiuppp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void uFEpippi(x64emu_t *emu, uintptr_t fcn) { uFEpippi_t fn = (uFEpippi_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void uFEpippp(x64emu_t *emu, uintptr_t fcn) { uFEpippp_t fn = (uFEpippp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void uFEpCppp(x64emu_t *emu, uintptr_t fcn) { uFEpCppp_t fn = (uFEpCppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint8_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void uFEpuppp(x64emu_t *emu, uintptr_t fcn) { uFEpuppp_t fn = (uFEpuppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void uFipuppp(x64emu_t *emu, uintptr_t fcn) { uFipuppp_t fn = (uFipuppp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void uFuuuuuu(x64emu_t *emu, uintptr_t fcn) { uFuuuuuu_t fn = (uFuuuuuu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } void uFupuufp(x64emu_t *emu, uintptr_t fcn) { uFupuufp_t fn = (uFupuufp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, emu->xmm[0].f[0], (void*)R_R8); } void uFuppppp(x64emu_t *emu, uintptr_t fcn) { uFuppppp_t fn = (uFuppppp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } @@ -5296,9 +5659,9 @@ void uFpuuupp(x64emu_t *emu, uintptr_t fcn) { uFpuuupp_t fn = (uFpuuupp_t)fcn; R void uFpuuppp(x64emu_t *emu, uintptr_t fcn) { uFpuuppp_t fn = (uFpuuppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void uFpupupu(x64emu_t *emu, uintptr_t fcn) { uFpupupu_t fn = (uFpupupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } void uFpupppp(x64emu_t *emu, uintptr_t fcn) { uFpupppp_t fn = (uFpupppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void uFppippp(x64emu_t *emu, uintptr_t fcn) { uFppippp_t fn = (uFppippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void uFppuuup(x64emu_t *emu, uintptr_t fcn) { uFppuuup_t fn = (uFppuuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } void uFppuupu(x64emu_t *emu, uintptr_t fcn) { uFppuupu_t fn = (uFppuupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } +void uFppLpLp(x64emu_t *emu, uintptr_t fcn) { uFppLpLp_t fn = (uFppLpLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } void uFppLppL(x64emu_t *emu, uintptr_t fcn) { uFppLppL_t fn = (uFppLppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } void uFpppppi(x64emu_t *emu, uintptr_t fcn) { uFpppppi_t fn = (uFpppppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } void uFpppppp(x64emu_t *emu, uintptr_t fcn) { uFpppppp_t fn = (uFpppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } @@ -5313,19 +5676,21 @@ void lFipLipp(x64emu_t *emu, uintptr_t fcn) { lFipLipp_t fn = (lFipLipp_t)fcn; R void lFipLpLL(x64emu_t *emu, uintptr_t fcn) { lFipLpLL_t fn = (lFipLpLL_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9); } void lFpipill(x64emu_t *emu, uintptr_t fcn) { lFpipill_t fn = (lFpipill_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (intptr_t)R_R8, (intptr_t)R_R9); } void lFpuuLLp(x64emu_t *emu, uintptr_t fcn) { lFpuuLLp_t fn = (lFpuuLLp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9); } -void lFpplllp(x64emu_t *emu, uintptr_t fcn) { lFpplllp_t fn = (lFpplllp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (void*)R_R9); } +void lFpluuic(x64emu_t *emu, uintptr_t fcn) { lFpluuic_t fn = (lFpluuic_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int8_t)R_R9); } void lFppLipp(x64emu_t *emu, uintptr_t fcn) { lFppLipp_t fn = (lFppLipp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } void lFpppLpp(x64emu_t *emu, uintptr_t fcn) { lFpppLpp_t fn = (lFpppLpp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void LFEupppp(x64emu_t *emu, uintptr_t fcn) { LFEupppp_t fn = (LFEupppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void LFELpppi(x64emu_t *emu, uintptr_t fcn) { LFELpppi_t fn = (LFELpppi_t)fcn; R_RAX=(uintptr_t)fn(emu, (uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void LFEuuppp(x64emu_t *emu, uintptr_t fcn) { LFEuuppp_t fn = (LFEuuppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void LFELpppu(x64emu_t *emu, uintptr_t fcn) { LFELpppu_t fn = (LFELpppu_t)fcn; R_RAX=(uintptr_t)fn(emu, (uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } void LFEpippp(x64emu_t *emu, uintptr_t fcn) { LFEpippp_t fn = (LFEpippp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void LFEppppi(x64emu_t *emu, uintptr_t fcn) { LFEppppi_t fn = (LFEppppi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void LFEppppu(x64emu_t *emu, uintptr_t fcn) { LFEppppu_t fn = (LFEppppu_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } void LFpipipi(x64emu_t *emu, uintptr_t fcn) { LFpipipi_t fn = (LFpipipi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } void LFpLippp(x64emu_t *emu, uintptr_t fcn) { LFpLippp_t fn = (LFpLippp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void LFpLLLLL(x64emu_t *emu, uintptr_t fcn) { LFpLLLLL_t fn = (LFpLLLLL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9); } void LFppLLpL(x64emu_t *emu, uintptr_t fcn) { LFppLLpL_t fn = (LFppLLpL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } void LFppLpLL(x64emu_t *emu, uintptr_t fcn) { LFppLpLL_t fn = (LFppLpLL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9); } void LFSpLiip(x64emu_t *emu, uintptr_t fcn) { LFSpLiip_t fn = (LFSpLiip_t)fcn; R_RAX=(uintptr_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void pFELpppV(x64emu_t *emu, uintptr_t fcn) { pFELpppV_t fn = (pFELpppV_t)fcn; R_RAX=(uintptr_t)fn(emu, (uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } +void pFELpApp(x64emu_t *emu, uintptr_t fcn) { pFELpApp_t fn = (pFELpApp_t)fcn; R_RAX=(uintptr_t)fn(emu, (uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void pFEpiupp(x64emu_t *emu, uintptr_t fcn) { pFEpiupp_t fn = (pFEpiupp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void pFEpippp(x64emu_t *emu, uintptr_t fcn) { pFEpippp_t fn = (pFEpippp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void pFEpuipp(x64emu_t *emu, uintptr_t fcn) { pFEpuipp_t fn = (pFEpuipp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } @@ -5337,8 +5702,6 @@ void pFEppLLp(x64emu_t *emu, uintptr_t fcn) { pFEppLLp_t fn = (pFEppLLp_t)fcn; R void pFEpppLp(x64emu_t *emu, uintptr_t fcn) { pFEpppLp_t fn = (pFEpppLp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } void pFEppppi(x64emu_t *emu, uintptr_t fcn) { pFEppppi_t fn = (pFEppppi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void pFEppppp(x64emu_t *emu, uintptr_t fcn) { pFEppppp_t fn = (pFEppppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } -void pFEppppV(x64emu_t *emu, uintptr_t fcn) { pFEppppV_t fn = (pFEppppV_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } -void pFEppApp(x64emu_t *emu, uintptr_t fcn) { pFEppApp_t fn = (pFEppApp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void pFiiiiii(x64emu_t *emu, uintptr_t fcn) { pFiiiiii_t fn = (pFiiiiii_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } void pFiiiiid(x64emu_t *emu, uintptr_t fcn) { pFiiiiid_t fn = (pFiiiiid_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, emu->xmm[0].d[0]); } void pFipippp(x64emu_t *emu, uintptr_t fcn) { pFipippp_t fn = (pFipippp_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } @@ -5352,18 +5715,24 @@ void pFuuuuup(x64emu_t *emu, uintptr_t fcn) { pFuuuuup_t fn = (pFuuuuup_t)fcn; R void pFuuppuu(x64emu_t *emu, uintptr_t fcn) { pFuuppuu_t fn = (pFuuppuu_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } void pFuppppp(x64emu_t *emu, uintptr_t fcn) { pFuppppp_t fn = (pFuppppp_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void pFdddddd(x64emu_t *emu, uintptr_t fcn) { pFdddddd_t fn = (pFdddddd_t)fcn; R_RAX=(uintptr_t)fn(emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], emu->xmm[4].d[0], emu->xmm[5].d[0]); } +void pFLppppp(x64emu_t *emu, uintptr_t fcn) { pFLppppp_t fn = (pFLppppp_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void pFpiiiiu(x64emu_t *emu, uintptr_t fcn) { pFpiiiiu_t fn = (pFpiiiiu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9); } void pFpiiipp(x64emu_t *emu, uintptr_t fcn) { pFpiiipp_t fn = (pFpiiipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } void pFpiiCCC(x64emu_t *emu, uintptr_t fcn) { pFpiiCCC_t fn = (pFpiiCCC_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint8_t)R_RCX, (uint8_t)R_R8, (uint8_t)R_R9); } void pFpiiuup(x64emu_t *emu, uintptr_t fcn) { pFpiiuup_t fn = (pFpiiuup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } +void pFpiipip(x64emu_t *emu, uintptr_t fcn) { pFpiipip_t fn = (pFpiipip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void pFpiippp(x64emu_t *emu, uintptr_t fcn) { pFpiippp_t fn = (pFpiippp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void pFpiUUUU(x64emu_t *emu, uintptr_t fcn) { pFpiUUUU_t fn = (pFpiUUUU_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8, (uint64_t)R_R9); } +void pFpipipL(x64emu_t *emu, uintptr_t fcn) { pFpipipL_t fn = (pFpipipL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } void pFpipipp(x64emu_t *emu, uintptr_t fcn) { pFpipipp_t fn = (pFpipipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void pFpipuii(x64emu_t *emu, uintptr_t fcn) { pFpipuii_t fn = (pFpipuii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } void pFpippip(x64emu_t *emu, uintptr_t fcn) { pFpippip_t fn = (pFpippip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } void pFpipppp(x64emu_t *emu, uintptr_t fcn) { pFpipppp_t fn = (pFpipppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void pFpuiiip(x64emu_t *emu, uintptr_t fcn) { pFpuiiip_t fn = (pFpuiiip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } void pFpuuuuu(x64emu_t *emu, uintptr_t fcn) { pFpuuuuu_t fn = (pFpuuuuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } void pFpuuupu(x64emu_t *emu, uintptr_t fcn) { pFpuuupu_t fn = (pFpuuupu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9); } void pFpupuui(x64emu_t *emu, uintptr_t fcn) { pFpupuui_t fn = (pFpupuui_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9); } +void pFpupuup(x64emu_t *emu, uintptr_t fcn) { pFpupuup_t fn = (pFpupuup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } void pFpuppip(x64emu_t *emu, uintptr_t fcn) { pFpuppip_t fn = (pFpuppip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } void pFpupppp(x64emu_t *emu, uintptr_t fcn) { pFpupppp_t fn = (pFpupppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void pFplpppp(x64emu_t *emu, uintptr_t fcn) { pFplpppp_t fn = (pFplpppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } @@ -5373,6 +5742,7 @@ void pFpLppii(x64emu_t *emu, uintptr_t fcn) { pFpLppii_t fn = (pFpLppii_t)fcn; R void pFpLppip(x64emu_t *emu, uintptr_t fcn) { pFpLppip_t fn = (pFpLppip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } void pFpLppup(x64emu_t *emu, uintptr_t fcn) { pFpLppup_t fn = (pFpLppup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9); } void pFppiiii(x64emu_t *emu, uintptr_t fcn) { pFppiiii_t fn = (pFppiiii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } +void pFppiiup(x64emu_t *emu, uintptr_t fcn) { pFppiiup_t fn = (pFppiiup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9); } void pFppiipp(x64emu_t *emu, uintptr_t fcn) { pFppiipp_t fn = (pFppiipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } void pFppiCCC(x64emu_t *emu, uintptr_t fcn) { pFppiCCC_t fn = (pFppiCCC_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint8_t)R_RCX, (uint8_t)R_R8, (uint8_t)R_R9); } void pFppiupp(x64emu_t *emu, uintptr_t fcn) { pFppiupp_t fn = (pFppiupp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } @@ -5406,9 +5776,9 @@ void iWpiuppu(x64emu_t *emu, uintptr_t fcn) { iWpiuppu_t fn = (iWpiuppu_t)fcn; R void iWpuiiii(x64emu_t *emu, uintptr_t fcn) { iWpuiiii_t fn = (iWpuiiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RCX, (uint32_t)R_RDX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } void iWpppppi(x64emu_t *emu, uintptr_t fcn) { iWpppppi_t fn = (iWpppppi_t)fcn; R_RAX=(int32_t)fn((void*)R_RCX, (void*)R_RDX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } void iWpppppu(x64emu_t *emu, uintptr_t fcn) { iWpppppu_t fn = (iWpppppu_t)fcn; R_RAX=(int32_t)fn((void*)R_RCX, (void*)R_RDX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 40), *(uint32_t*)(R_RSP + 48)); } -void vFEpiiipp(x64emu_t *emu, uintptr_t fcn) { vFEpiiipp_t fn = (vFEpiiipp_t)fcn; fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void vFEpipppp(x64emu_t *emu, uintptr_t fcn) { vFEpipppp_t fn = (vFEpipppp_t)fcn; fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void vFEpuipuV(x64emu_t *emu, uintptr_t fcn) { vFEpuipuV_t fn = (vFEpuipuV_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)(R_RSP + 8)); } +void vFEpuuipp(x64emu_t *emu, uintptr_t fcn) { vFEpuuipp_t fn = (vFEpuuipp_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void vFEpupppp(x64emu_t *emu, uintptr_t fcn) { vFEpupppp_t fn = (vFEpupppp_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void vFEppippp(x64emu_t *emu, uintptr_t fcn) { vFEppippp_t fn = (vFEppippp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void vFEpppLpp(x64emu_t *emu, uintptr_t fcn) { vFEpppLpp_t fn = (vFEpppLpp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } void vFEppppup(x64emu_t *emu, uintptr_t fcn) { vFEppppup_t fn = (vFEppppup_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9); } @@ -5430,7 +5800,7 @@ void vFuiiiuup(x64emu_t *emu, uintptr_t fcn) { vFuiiiuup_t fn = (vFuiiiuup_t)fcn void vFuiuiiii(x64emu_t *emu, uintptr_t fcn) { vFuiuiiii_t fn = (vFuiuiiii_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } void vFuiuiiiC(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiC_t fn = (vFuiuiiiC_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint8_t*)(R_RSP + 8)); } void vFuiuiiip(x64emu_t *emu, uintptr_t fcn) { vFuiuiiip_t fn = (vFuiuiiip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } -void vFuiuiiuL(x64emu_t *emu, uintptr_t fcn) { vFuiuiiuL_t fn = (vFuiuiiuL_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uintptr_t*)(R_RSP + 8)); } +void vFuiuiiuU(x64emu_t *emu, uintptr_t fcn) { vFuiuiiuU_t fn = (vFuiuiiuU_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint64_t*)(R_RSP + 8)); } void vFuiuCiuu(x64emu_t *emu, uintptr_t fcn) { vFuiuCiuu_t fn = (vFuiuCiuu_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint8_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFuiupiiu(x64emu_t *emu, uintptr_t fcn) { vFuiupiiu_t fn = (vFuiupiiu_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFuiupuip(x64emu_t *emu, uintptr_t fcn) { vFuiupuip_t fn = (vFuiupuip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } @@ -5449,7 +5819,6 @@ void vFuuiuiiC(x64emu_t *emu, uintptr_t fcn) { vFuuiuiiC_t fn = (vFuuiuiiC_t)fcn void vFuuipppp(x64emu_t *emu, uintptr_t fcn) { vFuuipppp_t fn = (vFuuipppp_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFuuuiiii(x64emu_t *emu, uintptr_t fcn) { vFuuuiiii_t fn = (vFuuuiiii_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } void vFuuuiiCp(x64emu_t *emu, uintptr_t fcn) { vFuuuiiCp_t fn = (vFuuuiiCp_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint8_t)R_R9, *(void**)(R_RSP + 8)); } -void vFuuuiuii(x64emu_t *emu, uintptr_t fcn) { vFuuuiuii_t fn = (vFuuuiuii_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } void vFuuuiuil(x64emu_t *emu, uintptr_t fcn) { vFuuuiuil_t fn = (vFuuuiuil_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(intptr_t*)(R_RSP + 8)); } void vFuuuiupi(x64emu_t *emu, uintptr_t fcn) { vFuuuiupi_t fn = (vFuuuiupi_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } void vFuuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuu_t fn = (vFuuuuuuu_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } @@ -5464,21 +5833,21 @@ void vFuuppppu(x64emu_t *emu, uintptr_t fcn) { vFuuppppu_t fn = (vFuuppppu_t)fcn void vFuuppppp(x64emu_t *emu, uintptr_t fcn) { vFuuppppp_t fn = (vFuuppppp_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFuffffff(x64emu_t *emu, uintptr_t fcn) { vFuffffff_t fn = (vFuffffff_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0]); } void vFudddddd(x64emu_t *emu, uintptr_t fcn) { vFudddddd_t fn = (vFudddddd_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], emu->xmm[4].d[0], emu->xmm[5].d[0]); } -void vFlipuiip(x64emu_t *emu, uintptr_t fcn) { vFlipuiip_t fn = (vFlipuiip_t)fcn; fn((intptr_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void vFlliiiip(x64emu_t *emu, uintptr_t fcn) { vFlliiiip_t fn = (vFlliiiip_t)fcn; fn((intptr_t)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void vFLpuLpLp(x64emu_t *emu, uintptr_t fcn) { vFLpuLpLp_t fn = (vFLpuLpLp_t)fcn; fn((uintptr_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8)); } void vFpiiiipp(x64emu_t *emu, uintptr_t fcn) { vFpiiiipp_t fn = (vFpiiiipp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFpiiliip(x64emu_t *emu, uintptr_t fcn) { vFpiiliip_t fn = (vFpiiliip_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void vFpiiLiip(x64emu_t *emu, uintptr_t fcn) { vFpiiLiip_t fn = (vFpiiLiip_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void vFpiipCpp(x64emu_t *emu, uintptr_t fcn) { vFpiipCpp_t fn = (vFpiipCpp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint8_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void vFpiipppp(x64emu_t *emu, uintptr_t fcn) { vFpiipppp_t fn = (vFpiipppp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void vFpipipii(x64emu_t *emu, uintptr_t fcn) { vFpipipii_t fn = (vFpipipii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void vFpipipiu(x64emu_t *emu, uintptr_t fcn) { vFpipipiu_t fn = (vFpipipiu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFpippppu(x64emu_t *emu, uintptr_t fcn) { vFpippppu_t fn = (vFpippppu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFpuiippp(x64emu_t *emu, uintptr_t fcn) { vFpuiippp_t fn = (vFpuiippp_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void vFpuipppp(x64emu_t *emu, uintptr_t fcn) { vFpuipppp_t fn = (vFpuipppp_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFpuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFpuuuuuu_t fn = (vFpuuuuuu_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFpuuUUuu(x64emu_t *emu, uintptr_t fcn) { vFpuuUUuu_t fn = (vFpuuUUuu_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint64_t)R_RCX, (uint64_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFpuupupu(x64emu_t *emu, uintptr_t fcn) { vFpuupupu_t fn = (vFpuupupu_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFpuupppp(x64emu_t *emu, uintptr_t fcn) { vFpuupppp_t fn = (vFpuupppp_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void vFpupiiiu(x64emu_t *emu, uintptr_t fcn) { vFpupiiiu_t fn = (vFpupiiiu_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFpupuuup(x64emu_t *emu, uintptr_t fcn) { vFpupuuup_t fn = (vFpupuuup_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } void vFpupppui(x64emu_t *emu, uintptr_t fcn) { vFpupppui_t fn = (vFpupppui_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8)); } void vFpUiUiup(x64emu_t *emu, uintptr_t fcn) { vFpUiUiup_t fn = (vFpUiUiup_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (int32_t)R_RDX, (uint64_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } @@ -5487,11 +5856,17 @@ void vFpUUUUuu(x64emu_t *emu, uintptr_t fcn) { vFpUUUUuu_t fn = (vFpUUUUuu_t)fcn void vFpfffppp(x64emu_t *emu, uintptr_t fcn) { vFpfffppp_t fn = (vFpfffppp_t)fcn; fn((void*)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void vFpddiidd(x64emu_t *emu, uintptr_t fcn) { vFpddiidd_t fn = (vFpddiidd_t)fcn; fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], (int32_t)R_RSI, (int32_t)R_RDX, emu->xmm[2].d[0], emu->xmm[3].d[0]); } void vFpdddddd(x64emu_t *emu, uintptr_t fcn) { vFpdddddd_t fn = (vFpdddddd_t)fcn; fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], emu->xmm[4].d[0], emu->xmm[5].d[0]); } +void vFplilppp(x64emu_t *emu, uintptr_t fcn) { vFplilppp_t fn = (vFplilppp_t)fcn; fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void vFpLiiiLi(x64emu_t *emu, uintptr_t fcn) { vFpLiiiLi_t fn = (vFpLiiiLi_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void vFpLiiipi(x64emu_t *emu, uintptr_t fcn) { vFpLiiipi_t fn = (vFpLiiipi_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } +void vFpLiiuui(x64emu_t *emu, uintptr_t fcn) { vFpLiiuui_t fn = (vFpLiiuui_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8)); } void vFpLiLiLp(x64emu_t *emu, uintptr_t fcn) { vFpLiLiLp_t fn = (vFpLiLiLp_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8)); } +void vFpLLiiip(x64emu_t *emu, uintptr_t fcn) { vFpLLiiip_t fn = (vFpLLiiip_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void vFpLLuuuu(x64emu_t *emu, uintptr_t fcn) { vFpLLuuuu_t fn = (vFpLLuuuu_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFpLpiipi(x64emu_t *emu, uintptr_t fcn) { vFpLpiipi_t fn = (vFpLpiipi_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } +void vFpLppipi(x64emu_t *emu, uintptr_t fcn) { vFpLppipi_t fn = (vFpLppipi_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } +void vFppcuupp(x64emu_t *emu, uintptr_t fcn) { vFppcuupp_t fn = (vFppcuupp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int8_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFppiiiii(x64emu_t *emu, uintptr_t fcn) { vFppiiiii_t fn = (vFppiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void vFppiiiip(x64emu_t *emu, uintptr_t fcn) { vFppiiiip_t fn = (vFppiiiip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } -void vFppiiipi(x64emu_t *emu, uintptr_t fcn) { vFppiiipi_t fn = (vFppiiipi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } void vFppiipii(x64emu_t *emu, uintptr_t fcn) { vFppiipii_t fn = (vFppiipii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } void vFppiipuu(x64emu_t *emu, uintptr_t fcn) { vFppiipuu_t fn = (vFppiipuu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFppiippp(x64emu_t *emu, uintptr_t fcn) { vFppiippp_t fn = (vFppiippp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } @@ -5500,9 +5875,10 @@ void vFppiLiLp(x64emu_t *emu, uintptr_t fcn) { vFppiLiLp_t fn = (vFppiLiLp_t)fcn void vFppipiip(x64emu_t *emu, uintptr_t fcn) { vFppipiip_t fn = (vFppipiip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void vFppipipp(x64emu_t *emu, uintptr_t fcn) { vFppipipp_t fn = (vFppipipp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFppipppp(x64emu_t *emu, uintptr_t fcn) { vFppipppp_t fn = (vFppipppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void vFppCuupp(x64emu_t *emu, uintptr_t fcn) { vFppCuupp_t fn = (vFppCuupp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint8_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFppuiiip(x64emu_t *emu, uintptr_t fcn) { vFppuiiip_t fn = (vFppuiiip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void vFppuuuii(x64emu_t *emu, uintptr_t fcn) { vFppuuuii_t fn = (vFppuuuii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } void vFppuupii(x64emu_t *emu, uintptr_t fcn) { vFppuupii_t fn = (vFppuupii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void vFppupipp(x64emu_t *emu, uintptr_t fcn) { vFppupipp_t fn = (vFppupipp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFppUuupp(x64emu_t *emu, uintptr_t fcn) { vFppUuupp_t fn = (vFppUuupp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint64_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFppddddu(x64emu_t *emu, uintptr_t fcn) { vFppddddu_t fn = (vFppddddu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], (uint32_t)R_RDX); } void vFppddpiu(x64emu_t *emu, uintptr_t fcn) { vFppddpiu_t fn = (vFppddpiu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0], (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } @@ -5514,102 +5890,112 @@ void vFpppiipi(x64emu_t *emu, uintptr_t fcn) { vFpppiipi_t fn = (vFpppiipi_t)fcn void vFpppiipp(x64emu_t *emu, uintptr_t fcn) { vFpppiipp_t fn = (vFpppiipp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFpppiupi(x64emu_t *emu, uintptr_t fcn) { vFpppiupi_t fn = (vFpppiupi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } void vFpppippi(x64emu_t *emu, uintptr_t fcn) { vFpppippi_t fn = (vFpppippi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } -void vFpppuuuu(x64emu_t *emu, uintptr_t fcn) { vFpppuuuu_t fn = (vFpppuuuu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFpppffff(x64emu_t *emu, uintptr_t fcn) { vFpppffff_t fn = (vFpppffff_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0]); } void vFppppiip(x64emu_t *emu, uintptr_t fcn) { vFppppiip_t fn = (vFppppiip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void vFppppiui(x64emu_t *emu, uintptr_t fcn) { vFppppiui_t fn = (vFppppiui_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void vFppppipi(x64emu_t *emu, uintptr_t fcn) { vFppppipi_t fn = (vFppppipi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } void vFpppppip(x64emu_t *emu, uintptr_t fcn) { vFpppppip_t fn = (vFpppppip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void vFppppppu(x64emu_t *emu, uintptr_t fcn) { vFppppppu_t fn = (vFppppppu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } void vFppppppp(x64emu_t *emu, uintptr_t fcn) { vFppppppp_t fn = (vFppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFEpupppp(x64emu_t *emu, uintptr_t fcn) { iFEpupppp_t fn = (iFEpupppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFEpUuppp(x64emu_t *emu, uintptr_t fcn) { iFEpUuppp_t fn = (iFEpUuppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFEpLiLpp(x64emu_t *emu, uintptr_t fcn) { iFEpLiLpp_t fn = (iFEpLiLpp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFEpLiLpV(x64emu_t *emu, uintptr_t fcn) { iFEpLiLpV_t fn = (iFEpLiLpV_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)(R_RSP + 8)); } -void iFEppuppp(x64emu_t *emu, uintptr_t fcn) { iFEppuppp_t fn = (iFEppuppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFEppLpIi(x64emu_t *emu, uintptr_t fcn) { iFEppLpIi_t fn = (iFEppLpIi_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int64_t)R_R8, (int32_t)R_R9); } -void iFEpppiiu(x64emu_t *emu, uintptr_t fcn) { iFEpppiiu_t fn = (iFEpppiiu_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9); } -void iFEpppLpp(x64emu_t *emu, uintptr_t fcn) { iFEpppLpp_t fn = (iFEpppLpp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFEpppppL(x64emu_t *emu, uintptr_t fcn) { iFEpppppL_t fn = (iFEpppppL_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } -void iFEpppppp(x64emu_t *emu, uintptr_t fcn) { iFEpppppp_t fn = (iFEpppppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFiiiiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiiiip_t fn = (iFiiiiiip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFipupupi(x64emu_t *emu, uintptr_t fcn) { iFipupupi_t fn = (iFipupupi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFippuIup(x64emu_t *emu, uintptr_t fcn) { iFippuIup_t fn = (iFippuIup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int64_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFipppppp(x64emu_t *emu, uintptr_t fcn) { iFipppppp_t fn = (iFipppppp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpiiiiii(x64emu_t *emu, uintptr_t fcn) { iFpiiiiii_t fn = (iFpiiiiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFpiiiuwp(x64emu_t *emu, uintptr_t fcn) { iFpiiiuwp_t fn = (iFpiiiuwp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (int16_t)R_R9, *(void**)(R_RSP + 8)); } -void iFpiiiuup(x64emu_t *emu, uintptr_t fcn) { iFpiiiuup_t fn = (iFpiiiuup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFpiiuuiu(x64emu_t *emu, uintptr_t fcn) { iFpiiuuiu_t fn = (iFpiiuuiu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } -void iFpiipppp(x64emu_t *emu, uintptr_t fcn) { iFpiipppp_t fn = (iFpiipppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpiuiipp(x64emu_t *emu, uintptr_t fcn) { iFpiuiipp_t fn = (iFpiuiipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpiuLiii(x64emu_t *emu, uintptr_t fcn) { iFpiuLiii_t fn = (iFpiuLiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFpiupppp(x64emu_t *emu, uintptr_t fcn) { iFpiupppp_t fn = (iFpiupppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpiLuupp(x64emu_t *emu, uintptr_t fcn) { iFpiLuupp_t fn = (iFpiLuupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpiLuppp(x64emu_t *emu, uintptr_t fcn) { iFpiLuppp_t fn = (iFpiLuppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpipiiip(x64emu_t *emu, uintptr_t fcn) { iFpipiiip_t fn = (iFpipiiip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFpipipip(x64emu_t *emu, uintptr_t fcn) { iFpipipip_t fn = (iFpipipip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFpipippp(x64emu_t *emu, uintptr_t fcn) { iFpipippp_t fn = (iFpipippp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpippLpp(x64emu_t *emu, uintptr_t fcn) { iFpippLpp_t fn = (iFpippLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpippppW(x64emu_t *emu, uintptr_t fcn) { iFpippppW_t fn = (iFpippppW_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint16_t*)(R_RSP + 8)); } -void iFpippppp(x64emu_t *emu, uintptr_t fcn) { iFpippppp_t fn = (iFpippppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpIIpppp(x64emu_t *emu, uintptr_t fcn) { iFpIIpppp_t fn = (iFpIIpppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpWCiWCi(x64emu_t *emu, uintptr_t fcn) { iFpWCiWCi_t fn = (iFpWCiWCi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (uint8_t)R_RDX, (int32_t)R_RCX, (uint16_t)R_R8, (uint8_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFpWppppW(x64emu_t *emu, uintptr_t fcn) { iFpWppppW_t fn = (iFpWppppW_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint16_t*)(R_RSP + 8)); } -void iFpWppppp(x64emu_t *emu, uintptr_t fcn) { iFpWppppp_t fn = (iFpWppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpuiCuCp(x64emu_t *emu, uintptr_t fcn) { iFpuiCuCp_t fn = (iFpuiCuCp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint8_t)R_RCX, (uint32_t)R_R8, (uint8_t)R_R9, *(void**)(R_RSP + 8)); } -void iFpuiuupp(x64emu_t *emu, uintptr_t fcn) { iFpuiuupp_t fn = (iFpuiuupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpupiLpL(x64emu_t *emu, uintptr_t fcn) { iFpupiLpL_t fn = (iFpupiLpL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8)); } -void iFpupuuui(x64emu_t *emu, uintptr_t fcn) { iFpupuuui_t fn = (iFpupuuui_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFpupuupp(x64emu_t *emu, uintptr_t fcn) { iFpupuupp_t fn = (iFpupuupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpupupui(x64emu_t *emu, uintptr_t fcn) { iFpupupui_t fn = (iFpupupui_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFpuppppp(x64emu_t *emu, uintptr_t fcn) { iFpuppppp_t fn = (iFpuppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpllpppp(x64emu_t *emu, uintptr_t fcn) { iFpllpppp_t fn = (iFpllpppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpLiiiiL(x64emu_t *emu, uintptr_t fcn) { iFpLiiiiL_t fn = (iFpLiiiiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8)); } -void iFpLiiuui(x64emu_t *emu, uintptr_t fcn) { iFpLiiuui_t fn = (iFpLiiuui_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFpLipipi(x64emu_t *emu, uintptr_t fcn) { iFpLipipi_t fn = (iFpLipipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFpLipupu(x64emu_t *emu, uintptr_t fcn) { iFpLipupu_t fn = (iFpLipupu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } -void iFpLpiiii(x64emu_t *emu, uintptr_t fcn) { iFpLpiiii_t fn = (iFpLpiiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFpLpiiuu(x64emu_t *emu, uintptr_t fcn) { iFpLpiiuu_t fn = (iFpLpiiuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } -void iFpLpiipi(x64emu_t *emu, uintptr_t fcn) { iFpLpiipi_t fn = (iFpLpiipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFpLpLpip(x64emu_t *emu, uintptr_t fcn) { iFpLpLpip_t fn = (iFpLpLpip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFpLppiii(x64emu_t *emu, uintptr_t fcn) { iFpLppiii_t fn = (iFpLppiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFppiiiip(x64emu_t *emu, uintptr_t fcn) { iFppiiiip_t fn = (iFppiiiip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFppiiuup(x64emu_t *emu, uintptr_t fcn) { iFppiiuup_t fn = (iFppiiuup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFppiiLll(x64emu_t *emu, uintptr_t fcn) { iFppiiLll_t fn = (iFppiiLll_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8, (intptr_t)R_R9, *(intptr_t*)(R_RSP + 8)); } -void iFppiipii(x64emu_t *emu, uintptr_t fcn) { iFppiipii_t fn = (iFppiipii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFppiipiL(x64emu_t *emu, uintptr_t fcn) { iFppiipiL_t fn = (iFppiipiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8)); } -void iFppipiii(x64emu_t *emu, uintptr_t fcn) { iFppipiii_t fn = (iFppipiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFppipiip(x64emu_t *emu, uintptr_t fcn) { iFppipiip_t fn = (iFppipiip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFppipipp(x64emu_t *emu, uintptr_t fcn) { iFppipipp_t fn = (iFppipipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFppippip(x64emu_t *emu, uintptr_t fcn) { iFppippip_t fn = (iFppippip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFppipppi(x64emu_t *emu, uintptr_t fcn) { iFppipppi_t fn = (iFppipppi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFppipppp(x64emu_t *emu, uintptr_t fcn) { iFppipppp_t fn = (iFppipppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFppuipiL(x64emu_t *emu, uintptr_t fcn) { iFppuipiL_t fn = (iFppuipiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8)); } -void iFppuippp(x64emu_t *emu, uintptr_t fcn) { iFppuippp_t fn = (iFppuippp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFppuuppp(x64emu_t *emu, uintptr_t fcn) { iFppuuppp_t fn = (iFppuuppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFppupupp(x64emu_t *emu, uintptr_t fcn) { iFppupupp_t fn = (iFppupupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFppliupp(x64emu_t *emu, uintptr_t fcn) { iFppliupp_t fn = (iFppliupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFppLiipp(x64emu_t *emu, uintptr_t fcn) { iFppLiipp_t fn = (iFppLiipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFppLippp(x64emu_t *emu, uintptr_t fcn) { iFppLippp_t fn = (iFppLippp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFppLuuii(x64emu_t *emu, uintptr_t fcn) { iFppLuuii_t fn = (iFppLuuii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFppLpppp(x64emu_t *emu, uintptr_t fcn) { iFppLpppp_t fn = (iFppLpppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpppiiuu(x64emu_t *emu, uintptr_t fcn) { iFpppiiuu_t fn = (iFpppiiuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } -void iFpppiiup(x64emu_t *emu, uintptr_t fcn) { iFpppiiup_t fn = (iFpppiiup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFpppiuwu(x64emu_t *emu, uintptr_t fcn) { iFpppiuwu_t fn = (iFpppiuwu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (int16_t)R_R9, *(uint32_t*)(R_RSP + 8)); } -void iFpppippi(x64emu_t *emu, uintptr_t fcn) { iFpppippi_t fn = (iFpppippi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFpppippp(x64emu_t *emu, uintptr_t fcn) { iFpppippp_t fn = (iFpppippp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpppuiii(x64emu_t *emu, uintptr_t fcn) { iFpppuiii_t fn = (iFpppuiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void iFpppLppp(x64emu_t *emu, uintptr_t fcn) { iFpppLppp_t fn = (iFpppLppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFppppilp(x64emu_t *emu, uintptr_t fcn) { iFppppilp_t fn = (iFppppilp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (intptr_t)R_R9, *(void**)(R_RSP + 8)); } -void iFppppipp(x64emu_t *emu, uintptr_t fcn) { iFppppipp_t fn = (iFppppipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFppppIip(x64emu_t *emu, uintptr_t fcn) { iFppppIip_t fn = (iFppppIip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int64_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFppppdpu(x64emu_t *emu, uintptr_t fcn) { iFppppdpu_t fn = (iFppppdpu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, emu->xmm[0].d[0], (void*)R_R8, (uint32_t)R_R9); } -void iFpppppip(x64emu_t *emu, uintptr_t fcn) { iFpppppip_t fn = (iFpppppip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } -void iFpppppLp(x64emu_t *emu, uintptr_t fcn) { iFpppppLp_t fn = (iFpppppLp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8)); } -void iFppppppu(x64emu_t *emu, uintptr_t fcn) { iFppppppu_t fn = (iFppppppu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } -void iFppppppp(x64emu_t *emu, uintptr_t fcn) { iFppppppp_t fn = (iFppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void cFppppppp(x64emu_t *emu, uintptr_t fcn) { cFppppppp_t fn = (cFppppppp_t)fcn; R_RAX=(uint8_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFElppppp(x64emu_t *emu, uintptr_t fcn) { iFElppppp_t fn = (iFElppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (intptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFEpupppp(x64emu_t *emu, uintptr_t fcn) { iFEpupppp_t fn = (iFEpupppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFEpUuppp(x64emu_t *emu, uintptr_t fcn) { iFEpUuppp_t fn = (iFEpUuppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFEpLiLpp(x64emu_t *emu, uintptr_t fcn) { iFEpLiLpp_t fn = (iFEpLiLpp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFEpLiLpV(x64emu_t *emu, uintptr_t fcn) { iFEpLiLpV_t fn = (iFEpLiLpV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)(R_RSP + 8)); } +void iFEpLpiiL(x64emu_t *emu, uintptr_t fcn) { iFEpLpiiL_t fn = (iFEpLpiiL_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9); } +void iFEppuppp(x64emu_t *emu, uintptr_t fcn) { iFEppuppp_t fn = (iFEppuppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFEppLpIu(x64emu_t *emu, uintptr_t fcn) { iFEppLpIu_t fn = (iFEppLpIu_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int64_t)R_R8, (uint32_t)R_R9); } +void iFEpppLpp(x64emu_t *emu, uintptr_t fcn) { iFEpppLpp_t fn = (iFEpppLpp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFEpppppL(x64emu_t *emu, uintptr_t fcn) { iFEpppppL_t fn = (iFEpppppL_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } +void iFEpppppp(x64emu_t *emu, uintptr_t fcn) { iFEpppppp_t fn = (iFEpppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFiupuuup(x64emu_t *emu, uintptr_t fcn) { iFiupuuup_t fn = (iFiupuuup_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFiupuppp(x64emu_t *emu, uintptr_t fcn) { iFiupuppp_t fn = (iFiupuppp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFipupupi(x64emu_t *emu, uintptr_t fcn) { iFipupupi_t fn = (iFipupupi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFippuIup(x64emu_t *emu, uintptr_t fcn) { iFippuIup_t fn = (iFippuIup_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int64_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFipppppp(x64emu_t *emu, uintptr_t fcn) { iFipppppp_t fn = (iFipppppp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFuiiiuup(x64emu_t *emu, uintptr_t fcn) { iFuiiiuup_t fn = (iFuiiiuup_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFuippLpp(x64emu_t *emu, uintptr_t fcn) { iFuippLpp_t fn = (iFuippLpp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpiiiiii(x64emu_t *emu, uintptr_t fcn) { iFpiiiiii_t fn = (iFpiiiiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFpiiiuwp(x64emu_t *emu, uintptr_t fcn) { iFpiiiuwp_t fn = (iFpiiiuwp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (int16_t)R_R9, *(void**)(R_RSP + 8)); } +void iFpiiiuup(x64emu_t *emu, uintptr_t fcn) { iFpiiiuup_t fn = (iFpiiiuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFpiipppp(x64emu_t *emu, uintptr_t fcn) { iFpiipppp_t fn = (iFpiipppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpiuiipp(x64emu_t *emu, uintptr_t fcn) { iFpiuiipp_t fn = (iFpiuiipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpiuuuiu(x64emu_t *emu, uintptr_t fcn) { iFpiuuuiu_t fn = (iFpiuuuiu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } +void iFpiuLiii(x64emu_t *emu, uintptr_t fcn) { iFpiuLiii_t fn = (iFpiuLiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFpiupppp(x64emu_t *emu, uintptr_t fcn) { iFpiupppp_t fn = (iFpiupppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpiLipip(x64emu_t *emu, uintptr_t fcn) { iFpiLipip_t fn = (iFpiLipip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFpiLuupp(x64emu_t *emu, uintptr_t fcn) { iFpiLuupp_t fn = (iFpiLuupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpiLuppp(x64emu_t *emu, uintptr_t fcn) { iFpiLuppp_t fn = (iFpiLuppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpipiiip(x64emu_t *emu, uintptr_t fcn) { iFpipiiip_t fn = (iFpipiiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFpipippp(x64emu_t *emu, uintptr_t fcn) { iFpipippp_t fn = (iFpipippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpippLpp(x64emu_t *emu, uintptr_t fcn) { iFpippLpp_t fn = (iFpippLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpippppW(x64emu_t *emu, uintptr_t fcn) { iFpippppW_t fn = (iFpippppW_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint16_t*)(R_RSP + 8)); } +void iFpippppp(x64emu_t *emu, uintptr_t fcn) { iFpippppp_t fn = (iFpippppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpIIpppp(x64emu_t *emu, uintptr_t fcn) { iFpIIpppp_t fn = (iFpIIpppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpWCiWCi(x64emu_t *emu, uintptr_t fcn) { iFpWCiWCi_t fn = (iFpWCiWCi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (uint8_t)R_RDX, (int32_t)R_RCX, (uint16_t)R_R8, (uint8_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFpWppppW(x64emu_t *emu, uintptr_t fcn) { iFpWppppW_t fn = (iFpWppppW_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint16_t*)(R_RSP + 8)); } +void iFpWppppp(x64emu_t *emu, uintptr_t fcn) { iFpWppppp_t fn = (iFpWppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpuiCuCp(x64emu_t *emu, uintptr_t fcn) { iFpuiCuCp_t fn = (iFpuiCuCp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint8_t)R_RCX, (uint32_t)R_R8, (uint8_t)R_R9, *(void**)(R_RSP + 8)); } +void iFpuiuupp(x64emu_t *emu, uintptr_t fcn) { iFpuiuupp_t fn = (iFpuiuupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpupiLpL(x64emu_t *emu, uintptr_t fcn) { iFpupiLpL_t fn = (iFpupiLpL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8)); } +void iFpupuupp(x64emu_t *emu, uintptr_t fcn) { iFpupuupp_t fn = (iFpupuupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpupupui(x64emu_t *emu, uintptr_t fcn) { iFpupupui_t fn = (iFpupupui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFpuppppp(x64emu_t *emu, uintptr_t fcn) { iFpuppppp_t fn = (iFpuppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpllpppp(x64emu_t *emu, uintptr_t fcn) { iFpllpppp_t fn = (iFpllpppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpLiiiiL(x64emu_t *emu, uintptr_t fcn) { iFpLiiiiL_t fn = (iFpLiiiiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8)); } +void iFpLiiuui(x64emu_t *emu, uintptr_t fcn) { iFpLiiuui_t fn = (iFpLiiuui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFpLipipi(x64emu_t *emu, uintptr_t fcn) { iFpLipipi_t fn = (iFpLipipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFpLipupu(x64emu_t *emu, uintptr_t fcn) { iFpLipupu_t fn = (iFpLipupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } +void iFpLpiiii(x64emu_t *emu, uintptr_t fcn) { iFpLpiiii_t fn = (iFpLpiiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFpLpiiuu(x64emu_t *emu, uintptr_t fcn) { iFpLpiiuu_t fn = (iFpLpiiuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } +void iFpLpiipi(x64emu_t *emu, uintptr_t fcn) { iFpLpiipi_t fn = (iFpLpiipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFpLpLuLi(x64emu_t *emu, uintptr_t fcn) { iFpLpLuLi_t fn = (iFpLpLuLi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uint32_t)R_R8, (uintptr_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFpLpLpip(x64emu_t *emu, uintptr_t fcn) { iFpLpLpip_t fn = (iFpLpLpip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFpLpLpLp(x64emu_t *emu, uintptr_t fcn) { iFpLpLpLp_t fn = (iFpLpLpLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8)); } +void iFpLppiii(x64emu_t *emu, uintptr_t fcn) { iFpLppiii_t fn = (iFpLppiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFpLppiip(x64emu_t *emu, uintptr_t fcn) { iFpLppiip_t fn = (iFpLppiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFppiiiip(x64emu_t *emu, uintptr_t fcn) { iFppiiiip_t fn = (iFppiiiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFppiiuup(x64emu_t *emu, uintptr_t fcn) { iFppiiuup_t fn = (iFppiiuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFppiiLll(x64emu_t *emu, uintptr_t fcn) { iFppiiLll_t fn = (iFppiiLll_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8, (intptr_t)R_R9, *(intptr_t*)(R_RSP + 8)); } +void iFppiipii(x64emu_t *emu, uintptr_t fcn) { iFppiipii_t fn = (iFppiipii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFppiipiL(x64emu_t *emu, uintptr_t fcn) { iFppiipiL_t fn = (iFppiipiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8)); } +void iFppipiii(x64emu_t *emu, uintptr_t fcn) { iFppipiii_t fn = (iFppipiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFppipiip(x64emu_t *emu, uintptr_t fcn) { iFppipiip_t fn = (iFppipiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFppipipp(x64emu_t *emu, uintptr_t fcn) { iFppipipp_t fn = (iFppipipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFppippip(x64emu_t *emu, uintptr_t fcn) { iFppippip_t fn = (iFppippip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFppipppi(x64emu_t *emu, uintptr_t fcn) { iFppipppi_t fn = (iFppipppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFppipppp(x64emu_t *emu, uintptr_t fcn) { iFppipppp_t fn = (iFppipppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFppuipiL(x64emu_t *emu, uintptr_t fcn) { iFppuipiL_t fn = (iFppuipiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8)); } +void iFppuippp(x64emu_t *emu, uintptr_t fcn) { iFppuippp_t fn = (iFppuippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFppuuppp(x64emu_t *emu, uintptr_t fcn) { iFppuuppp_t fn = (iFppuuppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFppupupp(x64emu_t *emu, uintptr_t fcn) { iFppupupp_t fn = (iFppupupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFppupppp(x64emu_t *emu, uintptr_t fcn) { iFppupppp_t fn = (iFppupppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFppliupp(x64emu_t *emu, uintptr_t fcn) { iFppliupp_t fn = (iFppliupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFppLiipp(x64emu_t *emu, uintptr_t fcn) { iFppLiipp_t fn = (iFppLiipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFppLiWwL(x64emu_t *emu, uintptr_t fcn) { iFppLiWwL_t fn = (iFppLiWwL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (uint16_t)R_R8, (int16_t)R_R9, *(uintptr_t*)(R_RSP + 8)); } +void iFppLippp(x64emu_t *emu, uintptr_t fcn) { iFppLippp_t fn = (iFppLippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFppLuuii(x64emu_t *emu, uintptr_t fcn) { iFppLuuii_t fn = (iFppLuuii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFppLLLLu(x64emu_t *emu, uintptr_t fcn) { iFppLLLLu_t fn = (iFppLLLLu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9, *(uint32_t*)(R_RSP + 8)); } +void iFppLpppp(x64emu_t *emu, uintptr_t fcn) { iFppLpppp_t fn = (iFppLpppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpppiiup(x64emu_t *emu, uintptr_t fcn) { iFpppiiup_t fn = (iFpppiiup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFpppippi(x64emu_t *emu, uintptr_t fcn) { iFpppippi_t fn = (iFpppippi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFpppippp(x64emu_t *emu, uintptr_t fcn) { iFpppippp_t fn = (iFpppippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpppuiii(x64emu_t *emu, uintptr_t fcn) { iFpppuiii_t fn = (iFpppuiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFpppuupu(x64emu_t *emu, uintptr_t fcn) { iFpppuupu_t fn = (iFpppuupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } +void iFpppulup(x64emu_t *emu, uintptr_t fcn) { iFpppulup_t fn = (iFpppulup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (intptr_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFpppLppp(x64emu_t *emu, uintptr_t fcn) { iFpppLppp_t fn = (iFpppLppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFppppilp(x64emu_t *emu, uintptr_t fcn) { iFppppilp_t fn = (iFppppilp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (intptr_t)R_R9, *(void**)(R_RSP + 8)); } +void iFppppipp(x64emu_t *emu, uintptr_t fcn) { iFppppipp_t fn = (iFppppipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFppppIip(x64emu_t *emu, uintptr_t fcn) { iFppppIip_t fn = (iFppppIip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int64_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFppppupu(x64emu_t *emu, uintptr_t fcn) { iFppppupu_t fn = (iFppppupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } +void iFppppdpu(x64emu_t *emu, uintptr_t fcn) { iFppppdpu_t fn = (iFppppdpu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, emu->xmm[0].d[0], (void*)R_R8, (uint32_t)R_R9); } +void iFpppppip(x64emu_t *emu, uintptr_t fcn) { iFpppppip_t fn = (iFpppppip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void iFpppppLp(x64emu_t *emu, uintptr_t fcn) { iFpppppLp_t fn = (iFpppppLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8)); } +void iFppppppi(x64emu_t *emu, uintptr_t fcn) { iFppppppi_t fn = (iFppppppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } +void iFppppppu(x64emu_t *emu, uintptr_t fcn) { iFppppppu_t fn = (iFppppppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } +void iFppppppp(x64emu_t *emu, uintptr_t fcn) { iFppppppp_t fn = (iFppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void uFEiipppp(x64emu_t *emu, uintptr_t fcn) { uFEiipppp_t fn = (uFEiipppp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void uFEpiippp(x64emu_t *emu, uintptr_t fcn) { uFEpiippp_t fn = (uFEpiippp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void uFEpiuppp(x64emu_t *emu, uintptr_t fcn) { uFEpiuppp_t fn = (uFEpiuppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void uFEpuuppp(x64emu_t *emu, uintptr_t fcn) { uFEpuuppp_t fn = (uFEpuuppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void uFEpppppp(x64emu_t *emu, uintptr_t fcn) { uFEpppppp_t fn = (uFEpppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void uFiiiuuuu(x64emu_t *emu, uintptr_t fcn) { uFiiiuuuu_t fn = (uFiiiuuuu_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } @@ -5620,6 +6006,7 @@ void uFpuuuppp(x64emu_t *emu, uintptr_t fcn) { uFpuuuppp_t fn = (uFpuuuppp_t)fcn void uFpuupppp(x64emu_t *emu, uintptr_t fcn) { uFpuupppp_t fn = (uFpuupppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void uFppiuppi(x64emu_t *emu, uintptr_t fcn) { uFppiuppi_t fn = (uFppiuppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } void uFppiuppp(x64emu_t *emu, uintptr_t fcn) { uFppiuppp_t fn = (uFppiuppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void uFppuiupu(x64emu_t *emu, uintptr_t fcn) { uFppuiupu_t fn = (uFppuiupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } void uFppuuuup(x64emu_t *emu, uintptr_t fcn) { uFppuuuup_t fn = (uFppuuuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } void uFppppppp(x64emu_t *emu, uintptr_t fcn) { uFppppppp_t fn = (uFppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void uFbCuuuuu(x64emu_t *emu, uintptr_t fcn) { uFbCuuuuu_t fn = (uFbCuuuuu_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint8_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } @@ -5629,9 +6016,11 @@ void LFEppLppU(x64emu_t *emu, uintptr_t fcn) { LFEppLppU_t fn = (LFEppLppU_t)fcn void LFEpppppu(x64emu_t *emu, uintptr_t fcn) { LFEpppppu_t fn = (LFEpppppu_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9); } void LFpLLuupp(x64emu_t *emu, uintptr_t fcn) { LFpLLuupp_t fn = (LFpLLuupp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void LFpLLppuu(x64emu_t *emu, uintptr_t fcn) { LFpLLppuu_t fn = (LFpLLppuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } +void LFpLppuuu(x64emu_t *emu, uintptr_t fcn) { LFpLppuuu_t fn = (LFpLppuuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } void pFEpupppp(x64emu_t *emu, uintptr_t fcn) { pFEpupppp_t fn = (pFEpupppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void pFEpLiiiI(x64emu_t *emu, uintptr_t fcn) { pFEpLiiiI_t fn = (pFEpLiiiI_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int64_t)R_R9); } void pFEpLiiil(x64emu_t *emu, uintptr_t fcn) { pFEpLiiil_t fn = (pFEpLiiil_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (intptr_t)R_R9); } -void pFEppuipp(x64emu_t *emu, uintptr_t fcn) { pFEppuipp_t fn = (pFEppuipp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } +void pFEppLipp(x64emu_t *emu, uintptr_t fcn) { pFEppLipp_t fn = (pFEppLipp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } void pFEppppip(x64emu_t *emu, uintptr_t fcn) { pFEppppip_t fn = (pFEppppip_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } void pFEpppppi(x64emu_t *emu, uintptr_t fcn) { pFEpppppi_t fn = (pFEpppppi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9); } void pFifffppp(x64emu_t *emu, uintptr_t fcn) { pFifffppp_t fn = (pFifffppp_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } @@ -5643,7 +6032,10 @@ void pFdiiiIiI(x64emu_t *emu, uintptr_t fcn) { pFdiiiIiI_t fn = (pFdiiiIiI_t)fcn void pFpiiiiid(x64emu_t *emu, uintptr_t fcn) { pFpiiiiid_t fn = (pFpiiiiid_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, emu->xmm[0].d[0]); } void pFpiiippp(x64emu_t *emu, uintptr_t fcn) { pFpiiippp_t fn = (pFpiiippp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFpiiUdii(x64emu_t *emu, uintptr_t fcn) { pFpiiUdii_t fn = (pFpiiUdii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint64_t)R_RCX, emu->xmm[0].d[0], (int32_t)R_R8, (int32_t)R_R9); } +void pFpiipipp(x64emu_t *emu, uintptr_t fcn) { pFpiipipp_t fn = (pFpiipipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void pFpiiplui(x64emu_t *emu, uintptr_t fcn) { pFpiiplui_t fn = (pFpiiplui_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (intptr_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8)); } void pFpiipppp(x64emu_t *emu, uintptr_t fcn) { pFpiipppp_t fn = (pFpiipppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void pFpipiupp(x64emu_t *emu, uintptr_t fcn) { pFpipiupp_t fn = (pFpipiupp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFpipippp(x64emu_t *emu, uintptr_t fcn) { pFpipippp_t fn = (pFpipippp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFpWppWpp(x64emu_t *emu, uintptr_t fcn) { pFpWppWpp_t fn = (pFpWppWpp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint16_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint16_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFpuLpipp(x64emu_t *emu, uintptr_t fcn) { pFpuLpipp_t fn = (pFpuLpipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } @@ -5658,24 +6050,24 @@ void pFpLppiip(x64emu_t *emu, uintptr_t fcn) { pFpLppiip_t fn = (pFpLppiip_t)fcn void pFpLppLLi(x64emu_t *emu, uintptr_t fcn) { pFpLppLLi_t fn = (pFpLppLLi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9, *(int32_t*)(R_RSP + 8)); } void pFppiiipp(x64emu_t *emu, uintptr_t fcn) { pFppiiipp_t fn = (pFppiiipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFppiiCCC(x64emu_t *emu, uintptr_t fcn) { pFppiiCCC_t fn = (pFppiiCCC_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint8_t)R_R8, (uint8_t)R_R9, *(uint8_t*)(R_RSP + 8)); } +void pFppiipup(x64emu_t *emu, uintptr_t fcn) { pFppiipup_t fn = (pFppiipup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } void pFppiippp(x64emu_t *emu, uintptr_t fcn) { pFppiippp_t fn = (pFppiippp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFppipipp(x64emu_t *emu, uintptr_t fcn) { pFppipipp_t fn = (pFppipipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFppipLpp(x64emu_t *emu, uintptr_t fcn) { pFppipLpp_t fn = (pFppipLpp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void pFppuipii(x64emu_t *emu, uintptr_t fcn) { pFppuipii_t fn = (pFppuipii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } void pFppuippp(x64emu_t *emu, uintptr_t fcn) { pFppuippp_t fn = (pFppuippp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFppuuupp(x64emu_t *emu, uintptr_t fcn) { pFppuuupp_t fn = (pFppuuupp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void pFppuuppp(x64emu_t *emu, uintptr_t fcn) { pFppuuppp_t fn = (pFppuuppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFppuLLip(x64emu_t *emu, uintptr_t fcn) { pFppuLLip_t fn = (pFppuLLip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void pFppupuuu(x64emu_t *emu, uintptr_t fcn) { pFppupuuu_t fn = (pFppupuuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } void pFppliuip(x64emu_t *emu, uintptr_t fcn) { pFppliuip_t fn = (pFppliuip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void pFpplipup(x64emu_t *emu, uintptr_t fcn) { pFpplipup_t fn = (pFpplipup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } -void pFppLipip(x64emu_t *emu, uintptr_t fcn) { pFppLipip_t fn = (pFppLipip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void pFppLLiLi(x64emu_t *emu, uintptr_t fcn) { pFppLLiLi_t fn = (pFppLLiLi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9, *(int32_t*)(R_RSP + 8)); } +void pFppLLppp(x64emu_t *emu, uintptr_t fcn) { pFppLLppp_t fn = (pFppLLppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFpppccci(x64emu_t *emu, uintptr_t fcn) { pFpppccci_t fn = (pFpppccci_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int8_t)R_RCX, (int8_t)R_R8, (int8_t)R_R9, *(int32_t*)(R_RSP + 8)); } void pFpppiiii(x64emu_t *emu, uintptr_t fcn) { pFpppiiii_t fn = (pFpppiiii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } void pFpppCCCi(x64emu_t *emu, uintptr_t fcn) { pFpppCCCi_t fn = (pFpppCCCi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint8_t)R_RCX, (uint8_t)R_R8, (uint8_t)R_R9, *(int32_t*)(R_RSP + 8)); } void pFpppuipp(x64emu_t *emu, uintptr_t fcn) { pFpppuipp_t fn = (pFpppuipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFpppuuui(x64emu_t *emu, uintptr_t fcn) { pFpppuuui_t fn = (pFpppuuui_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void pFpppuupp(x64emu_t *emu, uintptr_t fcn) { pFpppuupp_t fn = (pFpppuupp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFpppupii(x64emu_t *emu, uintptr_t fcn) { pFpppupii_t fn = (pFpppupii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } void pFpppupup(x64emu_t *emu, uintptr_t fcn) { pFpppupup_t fn = (pFpppupup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } void pFpppuppp(x64emu_t *emu, uintptr_t fcn) { pFpppuppp_t fn = (pFpppuppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } @@ -5684,8 +6076,7 @@ void pFpppdddi(x64emu_t *emu, uintptr_t fcn) { pFpppdddi_t fn = (pFpppdddi_t)fcn void pFpppllli(x64emu_t *emu, uintptr_t fcn) { pFpppllli_t fn = (pFpppllli_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (intptr_t)R_R9, *(int32_t*)(R_RSP + 8)); } void pFpppLLLi(x64emu_t *emu, uintptr_t fcn) { pFpppLLLi_t fn = (pFpppLLLi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9, *(int32_t*)(R_RSP + 8)); } void pFppppiii(x64emu_t *emu, uintptr_t fcn) { pFppppiii_t fn = (pFppppiii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void pFppppuuu(x64emu_t *emu, uintptr_t fcn) { pFppppuuu_t fn = (pFppppuuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } -void pFpppppuu(x64emu_t *emu, uintptr_t fcn) { pFpppppuu_t fn = (pFpppppuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } +void pFppppiip(x64emu_t *emu, uintptr_t fcn) { pFppppiip_t fn = (pFppppiip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void pFppppppu(x64emu_t *emu, uintptr_t fcn) { pFppppppu_t fn = (pFppppppu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } void pFppppppp(x64emu_t *emu, uintptr_t fcn) { pFppppppp_t fn = (pFppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFbCuwwWW(x64emu_t *emu, uintptr_t fcn) { pFbCuwwWW_t fn = (pFbCuwwWW_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (uint8_t)R_RSI, (uint32_t)R_RDX, (int16_t)R_RCX, (int16_t)R_R8, (uint16_t)R_R9, *(uint16_t*)(R_RSP + 8)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } @@ -5699,10 +6090,10 @@ void iWpuipupp(x64emu_t *emu, uintptr_t fcn) { iWpuipupp_t fn = (iWpuipupp_t)fcn void iWpuuuppu(x64emu_t *emu, uintptr_t fcn) { iWpuuuppu_t fn = (iWpuuuppu_t)fcn; R_RAX=(int32_t)fn((void*)R_RCX, (uint32_t)R_RDX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(uint32_t*)(R_RSP + 56)); } void iWpupuufu(x64emu_t *emu, uintptr_t fcn) { iWpupuufu_t fn = (iWpupuufu_t)fcn; R_RAX=(int32_t)fn((void*)R_RCX, (uint32_t)R_RDX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 40), *(float*)(R_RSP + 48), *(uint32_t*)(R_RSP + 56)); } void iWpppuppp(x64emu_t *emu, uintptr_t fcn) { iWpppuppp_t fn = (iWpppuppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RCX, (void*)R_RDX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } -void vFEiippppV(x64emu_t *emu, uintptr_t fcn) { vFEiippppV_t fn = (vFEiippppV_t)fcn; fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, (void*)(R_RSP + 8)); } -void vFEiupippp(x64emu_t *emu, uintptr_t fcn) { vFEiupippp_t fn = (vFEiupippp_t)fcn; fn(emu, (int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void vFEipAippp(x64emu_t *emu, uintptr_t fcn) { vFEipAippp_t fn = (vFEipAippp_t)fcn; fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void vFEppipppp(x64emu_t *emu, uintptr_t fcn) { vFEppipppp_t fn = (vFEppipppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void vFELippppV(x64emu_t *emu, uintptr_t fcn) { vFELippppV_t fn = (vFELippppV_t)fcn; fn(emu, (uintptr_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, (void*)(R_RSP + 8)); } +void vFELupippp(x64emu_t *emu, uintptr_t fcn) { vFELupippp_t fn = (vFELupippp_t)fcn; fn(emu, (uintptr_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void vFELpAippp(x64emu_t *emu, uintptr_t fcn) { vFELpAippp_t fn = (vFELpAippp_t)fcn; fn(emu, (uintptr_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void vFEppupppp(x64emu_t *emu, uintptr_t fcn) { vFEppupppp_t fn = (vFEppupppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFEppLippp(x64emu_t *emu, uintptr_t fcn) { vFEppLippp_t fn = (vFEppLippp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFEppLpLpp(x64emu_t *emu, uintptr_t fcn) { vFEppLpLpp_t fn = (vFEppLpLpp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void vFEpppippp(x64emu_t *emu, uintptr_t fcn) { vFEpppippp_t fn = (vFEpppippp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } @@ -5721,8 +6112,8 @@ void vFuiiiiuup(x64emu_t *emu, uintptr_t fcn) { vFuiiiiuup_t fn = (vFuiiiiuup_t) void vFuiiipiup(x64emu_t *emu, uintptr_t fcn) { vFuiiipiup_t fn = (vFuiiipiup_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } void vFuiuiiiii(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiii_t fn = (vFuiuiiiii_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFuiuiiiip(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiip_t fn = (vFuiuiiiip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void vFuiuiiiuL(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiuL_t fn = (vFuiuiiiuL_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16)); } -void vFuiuiiCuL(x64emu_t *emu, uintptr_t fcn) { vFuiuiiCuL_t fn = (vFuiuiiCuL_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint8_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16)); } +void vFuiuiiiuU(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiuU_t fn = (vFuiuiiiuU_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16)); } +void vFuiuiiCuU(x64emu_t *emu, uintptr_t fcn) { vFuiuiiCuU_t fn = (vFuiuiiCuU_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint8_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16)); } void vFuiuiuuuu(x64emu_t *emu, uintptr_t fcn) { vFuiuiuuuu_t fn = (vFuiuiuuuu_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } void vFuCCCCfff(x64emu_t *emu, uintptr_t fcn) { vFuCCCCfff_t fn = (vFuCCCCfff_t)fcn; fn((uint32_t)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX, (uint8_t)R_R8, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0]); } void vFuuiiiiiC(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiC_t fn = (vFuuiiiiiC_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(uint8_t*)(R_RSP + 16)); } @@ -5743,18 +6134,20 @@ void vFpiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFpiiiiiii_t fn = (vFpiiiiiii_t) void vFpiiiiiip(x64emu_t *emu, uintptr_t fcn) { vFpiiiiiip_t fn = (vFpiiiiiip_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } void vFpiiiipii(x64emu_t *emu, uintptr_t fcn) { vFpiiiipii_t fn = (vFpiiiipii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFpiUuupup(x64emu_t *emu, uintptr_t fcn) { vFpiUuupup_t fn = (vFpiUuupup_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void vFpippiiuu(x64emu_t *emu, uintptr_t fcn) { vFpippiiuu_t fn = (vFpippiiuu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } -void vFpippiipi(x64emu_t *emu, uintptr_t fcn) { vFpippiipi_t fn = (vFpippiipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void vFpiLLiipi(x64emu_t *emu, uintptr_t fcn) { vFpiLLiipi_t fn = (vFpiLLiipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void vFpiLpiiuu(x64emu_t *emu, uintptr_t fcn) { vFpiLpiiuu_t fn = (vFpiLpiiuu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } void vFpuiULipp(x64emu_t *emu, uintptr_t fcn) { vFpuiULipp_t fn = (vFpuiULipp_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (uint64_t)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } void vFpudddddd(x64emu_t *emu, uintptr_t fcn) { vFpudddddd_t fn = (vFpudddddd_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], emu->xmm[4].d[0], emu->xmm[5].d[0]); } void vFpuppippp(x64emu_t *emu, uintptr_t fcn) { vFpuppippp_t fn = (vFpuppippp_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } void vFpuppLLLL(x64emu_t *emu, uintptr_t fcn) { vFpuppLLLL_t fn = (vFpuppLLLL_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16)); } void vFpUiUiupi(x64emu_t *emu, uintptr_t fcn) { vFpUiUiupi_t fn = (vFpUiUiupi_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (int32_t)R_RDX, (uint64_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFpUuuUUUu(x64emu_t *emu, uintptr_t fcn) { vFpUuuUUUu_t fn = (vFpUuuUUUu_t)fcn; fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint64_t)R_R8, (uint64_t)R_R9, *(uint64_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void vFpliicppp(x64emu_t *emu, uintptr_t fcn) { vFpliicppp_t fn = (vFpliicppp_t)fcn; fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int8_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void vFpLiiiLii(x64emu_t *emu, uintptr_t fcn) { vFpLiiiLii_t fn = (vFpLiiiLii_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void vFpLLLiipi(x64emu_t *emu, uintptr_t fcn) { vFpLLLiipi_t fn = (vFpLLLiipi_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFpLpLpLpp(x64emu_t *emu, uintptr_t fcn) { vFpLpLpLpp_t fn = (vFpLpLpLpp_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } void vFpLppiipi(x64emu_t *emu, uintptr_t fcn) { vFpLppiipi_t fn = (vFpLppiipi_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFppiiiiii(x64emu_t *emu, uintptr_t fcn) { vFppiiiiii_t fn = (vFppiiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } -void vFppiiipii(x64emu_t *emu, uintptr_t fcn) { vFppiiipii_t fn = (vFppiiipii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFppipipiu(x64emu_t *emu, uintptr_t fcn) { vFppipipiu_t fn = (vFppipipiu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } void vFppipppui(x64emu_t *emu, uintptr_t fcn) { vFppipppui_t fn = (vFppipppui_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFppippppi(x64emu_t *emu, uintptr_t fcn) { vFppippppi_t fn = (vFppippppi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } @@ -5764,76 +6157,86 @@ void vFppuppiii(x64emu_t *emu, uintptr_t fcn) { vFppuppiii_t fn = (vFppuppiii_t) void vFppuppiiu(x64emu_t *emu, uintptr_t fcn) { vFppuppiiu_t fn = (vFppuppiiu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } void vFpplppppi(x64emu_t *emu, uintptr_t fcn) { vFpplppppi_t fn = (vFpplppppi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFpplppppp(x64emu_t *emu, uintptr_t fcn) { vFpplppppp_t fn = (vFpplppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void vFppLLiipi(x64emu_t *emu, uintptr_t fcn) { vFppLLiipi_t fn = (vFppLLiipi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFppLpLpLp(x64emu_t *emu, uintptr_t fcn) { vFppLpLpLp_t fn = (vFppLpLpLp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void vFpppiipui(x64emu_t *emu, uintptr_t fcn) { vFpppiipui_t fn = (vFpppiipui_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFpppipppu(x64emu_t *emu, uintptr_t fcn) { vFpppipppu_t fn = (vFpppipppu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } void vFpppuiiii(x64emu_t *emu, uintptr_t fcn) { vFpppuiiii_t fn = (vFpppuiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFpppLpppp(x64emu_t *emu, uintptr_t fcn) { vFpppLpppp_t fn = (vFpppLpppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void vFppppiipi(x64emu_t *emu, uintptr_t fcn) { vFppppiipi_t fn = (vFppppiipi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFpppppuuu(x64emu_t *emu, uintptr_t fcn) { vFpppppuuu_t fn = (vFpppppuuu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void vFppppppui(x64emu_t *emu, uintptr_t fcn) { vFppppppui_t fn = (vFppppppui_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFpppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppppppp_t fn = (vFpppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFEuipuupp(x64emu_t *emu, uintptr_t fcn) { iFEuipuupp_t fn = (iFEuipuupp_t)fcn; R_RAX=(int32_t)fn(emu, (uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFEpippppp(x64emu_t *emu, uintptr_t fcn) { iFEpippppp_t fn = (iFEpippppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFEpuuLppp(x64emu_t *emu, uintptr_t fcn) { iFEpuuLppp_t fn = (iFEpuuLppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFEpUUuppp(x64emu_t *emu, uintptr_t fcn) { iFEpUUuppp_t fn = (iFEpUUuppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFEppipppp(x64emu_t *emu, uintptr_t fcn) { iFEppipppp_t fn = (iFEppipppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFEppppipp(x64emu_t *emu, uintptr_t fcn) { iFEppppipp_t fn = (iFEppppipp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFEppppLpp(x64emu_t *emu, uintptr_t fcn) { iFEppppLpp_t fn = (iFEppppLpp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFEpppppuu(x64emu_t *emu, uintptr_t fcn) { iFEpppppuu_t fn = (iFEpppppuu_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } -void iFEppppppp(x64emu_t *emu, uintptr_t fcn) { iFEppppppp_t fn = (iFEppppppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFiiiiiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiiiiip_t fn = (iFiiiiiiip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFiiupiupi(x64emu_t *emu, uintptr_t fcn) { iFiiupiupi_t fn = (iFiiupiupi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } -void iFiuuCCuup(x64emu_t *emu, uintptr_t fcn) { iFiuuCCuup_t fn = (iFiuuCCuup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint8_t)R_RCX, (uint8_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFiuuuupip(x64emu_t *emu, uintptr_t fcn) { iFiuuuupip_t fn = (iFiuuuupip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFipippppp(x64emu_t *emu, uintptr_t fcn) { iFipippppp_t fn = (iFipippppp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { iFuuuuuuuu_t fn = (iFuuuuuuuu_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } -void iFdiippppL(x64emu_t *emu, uintptr_t fcn) { iFdiippppL_t fn = (iFdiippppL_t)fcn; R_RAX=(int32_t)fn(emu->xmm[0].d[0], (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8)); } -void iFpiiiuuup(x64emu_t *emu, uintptr_t fcn) { iFpiiiuuup_t fn = (iFpiiiuuup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpipiipip(x64emu_t *emu, uintptr_t fcn) { iFpipiipip_t fn = (iFpipiipip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpippuuii(x64emu_t *emu, uintptr_t fcn) { iFpippuuii_t fn = (iFpippuuii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } -void iFpippuupp(x64emu_t *emu, uintptr_t fcn) { iFpippuupp_t fn = (iFpippuupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpCCWWpWu(x64emu_t *emu, uintptr_t fcn) { iFpCCWWpWu_t fn = (iFpCCWWpWu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint16_t)R_RCX, (uint16_t)R_R8, (void*)R_R9, *(uint16_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } -void iFpWCuWCuu(x64emu_t *emu, uintptr_t fcn) { iFpWCuWCuu_t fn = (iFpWCuWCuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (uint8_t)R_RDX, (uint32_t)R_RCX, (uint16_t)R_R8, (uint8_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } -void iFpuiipppp(x64emu_t *emu, uintptr_t fcn) { iFpuiipppp_t fn = (iFpuiipppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpuippLpp(x64emu_t *emu, uintptr_t fcn) { iFpuippLpp_t fn = (iFpuippLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpuuiiiii(x64emu_t *emu, uintptr_t fcn) { iFpuuiiiii_t fn = (iFpuuiiiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } -void iFpuuipppp(x64emu_t *emu, uintptr_t fcn) { iFpuuipppp_t fn = (iFpuuipppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpuuupupu(x64emu_t *emu, uintptr_t fcn) { iFpuuupupu_t fn = (iFpuuupupu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } -void iFpuupuupp(x64emu_t *emu, uintptr_t fcn) { iFpuupuupp_t fn = (iFpuupuupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpuuppiip(x64emu_t *emu, uintptr_t fcn) { iFpuuppiip_t fn = (iFpuuppiip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpuuppppp(x64emu_t *emu, uintptr_t fcn) { iFpuuppppp_t fn = (iFpuuppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpupppppp(x64emu_t *emu, uintptr_t fcn) { iFpupppppp_t fn = (iFpupppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpUuuLpUu(x64emu_t *emu, uintptr_t fcn) { iFpUuuLpUu_t fn = (iFpUuuLpUu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uint64_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } -void iFpduuulul(x64emu_t *emu, uintptr_t fcn) { iFpduuulul_t fn = (iFpduuulul_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, emu->xmm[0].d[0], (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (intptr_t)R_R8, (uint32_t)R_R9, *(intptr_t*)(R_RSP + 8)); } -void iFpLLiippp(x64emu_t *emu, uintptr_t fcn) { iFpLLiippp_t fn = (iFpLLiippp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpLLLiipi(x64emu_t *emu, uintptr_t fcn) { iFpLLLiipi_t fn = (iFpLLLiipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } -void iFpLLppppp(x64emu_t *emu, uintptr_t fcn) { iFpLLppppp_t fn = (iFpLLppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpLpipppp(x64emu_t *emu, uintptr_t fcn) { iFpLpipppp_t fn = (iFpLpipppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpLpLpLpp(x64emu_t *emu, uintptr_t fcn) { iFpLpLpLpp_t fn = (iFpLpLpLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpLppLpip(x64emu_t *emu, uintptr_t fcn) { iFpLppLpip_t fn = (iFpLppLpip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpLpppupu(x64emu_t *emu, uintptr_t fcn) { iFpLpppupu_t fn = (iFpLpppupu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } -void iFpLpppppp(x64emu_t *emu, uintptr_t fcn) { iFpLpppppp_t fn = (iFpLpppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFppiiipip(x64emu_t *emu, uintptr_t fcn) { iFppiiipip_t fn = (iFppiiipip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFppillppp(x64emu_t *emu, uintptr_t fcn) { iFppillppp_t fn = (iFppillppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFppippppp(x64emu_t *emu, uintptr_t fcn) { iFppippppp_t fn = (iFppippppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFppIIIppp(x64emu_t *emu, uintptr_t fcn) { iFppIIIppp_t fn = (iFppIIIppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFppuiiuuu(x64emu_t *emu, uintptr_t fcn) { iFppuiiuuu_t fn = (iFppuiiuuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } -void iFppuuuuuu(x64emu_t *emu, uintptr_t fcn) { iFppuuuuuu_t fn = (iFppuuuuuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } -void iFppuppppp(x64emu_t *emu, uintptr_t fcn) { iFppuppppp_t fn = (iFppuppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpppiiipi(x64emu_t *emu, uintptr_t fcn) { iFpppiiipi_t fn = (iFpppiiipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } -void iFpppiiipp(x64emu_t *emu, uintptr_t fcn) { iFpppiiipp_t fn = (iFpppiiipp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpppipipi(x64emu_t *emu, uintptr_t fcn) { iFpppipipi_t fn = (iFpppipipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } -void iFppppiiup(x64emu_t *emu, uintptr_t fcn) { iFppppiiup_t fn = (iFppppiiup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFppppippp(x64emu_t *emu, uintptr_t fcn) { iFppppippp_t fn = (iFppppippp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpppppupp(x64emu_t *emu, uintptr_t fcn) { iFpppppupp_t fn = (iFpppppupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFppppppii(x64emu_t *emu, uintptr_t fcn) { iFppppppii_t fn = (iFppppppii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } -void iFpppppppi(x64emu_t *emu, uintptr_t fcn) { iFpppppppi_t fn = (iFpppppppi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } -void iFpppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppp_t fn = (iFpppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFbWWipppp(x64emu_t *emu, uintptr_t fcn) { iFbWWipppp_t fn = (iFbWWipppp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(int32_t)fn(aligned_xcb, (uint16_t)R_RSI, (uint16_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } -void iFbupppWWu(x64emu_t *emu, uintptr_t fcn) { iFbupppWWu_t fn = (iFbupppWWu_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(int32_t)fn(aligned_xcb, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint16_t)R_R9, *(uint16_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } +void iFEuipuupp(x64emu_t *emu, uintptr_t fcn) { iFEuipuupp_t fn = (iFEuipuupp_t)fcn; R_RAX=(uint32_t)fn(emu, (uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFEpippppp(x64emu_t *emu, uintptr_t fcn) { iFEpippppp_t fn = (iFEpippppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFEpuuLppp(x64emu_t *emu, uintptr_t fcn) { iFEpuuLppp_t fn = (iFEpuuLppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFEpUUuppp(x64emu_t *emu, uintptr_t fcn) { iFEpUUuppp_t fn = (iFEpUUuppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint64_t)R_RSI, (uint64_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFEppipppp(x64emu_t *emu, uintptr_t fcn) { iFEppipppp_t fn = (iFEppipppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFEppppipp(x64emu_t *emu, uintptr_t fcn) { iFEppppipp_t fn = (iFEppppipp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFEppppLpp(x64emu_t *emu, uintptr_t fcn) { iFEppppLpp_t fn = (iFEppppLpp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFEpppppuu(x64emu_t *emu, uintptr_t fcn) { iFEpppppuu_t fn = (iFEpppppuu_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); } +void iFEppppppp(x64emu_t *emu, uintptr_t fcn) { iFEppppppp_t fn = (iFEppppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFiiupiupi(x64emu_t *emu, uintptr_t fcn) { iFiiupiupi_t fn = (iFiiupiupi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void iFiuuCCuup(x64emu_t *emu, uintptr_t fcn) { iFiuuCCuup_t fn = (iFiuuCCuup_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint8_t)R_RCX, (uint8_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFiuuuupip(x64emu_t *emu, uintptr_t fcn) { iFiuuuupip_t fn = (iFiuuuupip_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFipippppp(x64emu_t *emu, uintptr_t fcn) { iFipippppp_t fn = (iFipippppp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFuiiiiuup(x64emu_t *emu, uintptr_t fcn) { iFuiiiiuup_t fn = (iFuiiiiuup_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { iFuuuuuuuu_t fn = (iFuuuuuuuu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void iFupipppip(x64emu_t *emu, uintptr_t fcn) { iFupipppip_t fn = (iFupipppip_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFdiippppL(x64emu_t *emu, uintptr_t fcn) { iFdiippppL_t fn = (iFdiippppL_t)fcn; R_RAX=(uint32_t)fn(emu->xmm[0].d[0], (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8)); } +void iFpiiiuuup(x64emu_t *emu, uintptr_t fcn) { iFpiiiuuup_t fn = (iFpiiiuuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpipiipip(x64emu_t *emu, uintptr_t fcn) { iFpipiipip_t fn = (iFpipiipip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpippuuui(x64emu_t *emu, uintptr_t fcn) { iFpippuuui_t fn = (iFpippuuui_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void iFpippuupp(x64emu_t *emu, uintptr_t fcn) { iFpippuupp_t fn = (iFpippuupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpCCWWpWu(x64emu_t *emu, uintptr_t fcn) { iFpCCWWpWu_t fn = (iFpCCWWpWu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint16_t)R_RCX, (uint16_t)R_R8, (void*)R_R9, *(uint16_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void iFpWCuWCuu(x64emu_t *emu, uintptr_t fcn) { iFpWCuWCuu_t fn = (iFpWCuWCuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint16_t)R_RSI, (uint8_t)R_RDX, (uint32_t)R_RCX, (uint16_t)R_R8, (uint8_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void iFpuiipppp(x64emu_t *emu, uintptr_t fcn) { iFpuiipppp_t fn = (iFpuiipppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpuippLpp(x64emu_t *emu, uintptr_t fcn) { iFpuippLpp_t fn = (iFpuippLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpuuiiuuu(x64emu_t *emu, uintptr_t fcn) { iFpuuiiuuu_t fn = (iFpuuiiuuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void iFpuuipppp(x64emu_t *emu, uintptr_t fcn) { iFpuuipppp_t fn = (iFpuuipppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpuuupupu(x64emu_t *emu, uintptr_t fcn) { iFpuuupupu_t fn = (iFpuuupupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void iFpuupuupp(x64emu_t *emu, uintptr_t fcn) { iFpuupuupp_t fn = (iFpuupuupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpuuppiip(x64emu_t *emu, uintptr_t fcn) { iFpuuppiip_t fn = (iFpuuppiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpuuppppp(x64emu_t *emu, uintptr_t fcn) { iFpuuppppp_t fn = (iFpuuppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpuLLLppL(x64emu_t *emu, uintptr_t fcn) { iFpuLLLppL_t fn = (iFpuLLLppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16)); } +void iFpupupuup(x64emu_t *emu, uintptr_t fcn) { iFpupupuup_t fn = (iFpupupuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpupppppp(x64emu_t *emu, uintptr_t fcn) { iFpupppppp_t fn = (iFpupppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpUuuLpUu(x64emu_t *emu, uintptr_t fcn) { iFpUuuLpUu_t fn = (iFpUuuLpUu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uint64_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void iFpduuulul(x64emu_t *emu, uintptr_t fcn) { iFpduuulul_t fn = (iFpduuulul_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, emu->xmm[0].d[0], (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (intptr_t)R_R8, (uint32_t)R_R9, *(intptr_t*)(R_RSP + 8)); } +void iFpLLiippp(x64emu_t *emu, uintptr_t fcn) { iFpLLiippp_t fn = (iFpLLiippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpLLLiipi(x64emu_t *emu, uintptr_t fcn) { iFpLLLiipi_t fn = (iFpLLLiipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void iFpLLppppp(x64emu_t *emu, uintptr_t fcn) { iFpLLppppp_t fn = (iFpLLppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpLpiLpLp(x64emu_t *emu, uintptr_t fcn) { iFpLpiLpLp_t fn = (iFpLpiLpLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpLpipppp(x64emu_t *emu, uintptr_t fcn) { iFpLpipppp_t fn = (iFpLpipppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpLpLpLpp(x64emu_t *emu, uintptr_t fcn) { iFpLpLpLpp_t fn = (iFpLpLpLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpLppLpip(x64emu_t *emu, uintptr_t fcn) { iFpLppLpip_t fn = (iFpLppLpip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpLpppupu(x64emu_t *emu, uintptr_t fcn) { iFpLpppupu_t fn = (iFpLpppupu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void iFpLpppppp(x64emu_t *emu, uintptr_t fcn) { iFpLpppppp_t fn = (iFpLpppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFppiiipip(x64emu_t *emu, uintptr_t fcn) { iFppiiipip_t fn = (iFppiiipip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFppillppp(x64emu_t *emu, uintptr_t fcn) { iFppillppp_t fn = (iFppillppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFppipiipi(x64emu_t *emu, uintptr_t fcn) { iFppipiipi_t fn = (iFppipiipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void iFppIIIppp(x64emu_t *emu, uintptr_t fcn) { iFppIIIppp_t fn = (iFppIIIppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFppuiiuuu(x64emu_t *emu, uintptr_t fcn) { iFppuiiuuu_t fn = (iFppuiiuuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void iFppuuuuuu(x64emu_t *emu, uintptr_t fcn) { iFppuuuuuu_t fn = (iFppuuuuuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void iFppuppppp(x64emu_t *emu, uintptr_t fcn) { iFppuppppp_t fn = (iFppuppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFppLpLpLi(x64emu_t *emu, uintptr_t fcn) { iFppLpLpLi_t fn = (iFppLpLpLi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void iFpppiiipi(x64emu_t *emu, uintptr_t fcn) { iFpppiiipi_t fn = (iFpppiiipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void iFpppiiipp(x64emu_t *emu, uintptr_t fcn) { iFpppiiipp_t fn = (iFpppiiipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpppipipi(x64emu_t *emu, uintptr_t fcn) { iFpppipipi_t fn = (iFpppipipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void iFppppiiup(x64emu_t *emu, uintptr_t fcn) { iFppppiiup_t fn = (iFppppiiup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFppppiipp(x64emu_t *emu, uintptr_t fcn) { iFppppiipp_t fn = (iFppppiipp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFppppippp(x64emu_t *emu, uintptr_t fcn) { iFppppippp_t fn = (iFppppippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFppppuplu(x64emu_t *emu, uintptr_t fcn) { iFppppuplu_t fn = (iFppppuplu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(intptr_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void iFpppppupp(x64emu_t *emu, uintptr_t fcn) { iFpppppupp_t fn = (iFpppppupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFppppppii(x64emu_t *emu, uintptr_t fcn) { iFppppppii_t fn = (iFppppppii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void iFppppppuu(x64emu_t *emu, uintptr_t fcn) { iFppppppuu_t fn = (iFppppppuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void iFpppppppi(x64emu_t *emu, uintptr_t fcn) { iFpppppppi_t fn = (iFpppppppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void iFpppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppp_t fn = (iFpppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFbWWipppp(x64emu_t *emu, uintptr_t fcn) { iFbWWipppp_t fn = (iFbWWipppp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint16_t)R_RSI, (uint16_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } +void iFbupppWWu(x64emu_t *emu, uintptr_t fcn) { iFbupppWWu_t fn = (iFbupppWWu_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint16_t)R_R9, *(uint16_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void CFuiifpppp(x64emu_t *emu, uintptr_t fcn) { CFuiifpppp_t fn = (CFuiifpppp_t)fcn; R_RAX=(unsigned char)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, emu->xmm[0].f[0], (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void uFEipipppp(x64emu_t *emu, uintptr_t fcn) { uFEipipppp_t fn = (uFEipipppp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void uFEpiupppp(x64emu_t *emu, uintptr_t fcn) { uFEpiupppp_t fn = (uFEpiupppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void uFEppipppp(x64emu_t *emu, uintptr_t fcn) { uFEppipppp_t fn = (uFEppipppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void uFEipupppp(x64emu_t *emu, uintptr_t fcn) { uFEipupppp_t fn = (uFEipupppp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void uFEpuuuppp(x64emu_t *emu, uintptr_t fcn) { uFEpuuuppp_t fn = (uFEpuuuppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void uFEppupppp(x64emu_t *emu, uintptr_t fcn) { uFEppupppp_t fn = (uFEppupppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void uFEpppuppp(x64emu_t *emu, uintptr_t fcn) { uFEpppuppp_t fn = (uFEpppuppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void uFEppppppp(x64emu_t *emu, uintptr_t fcn) { uFEppppppp_t fn = (uFEppppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void uFuipppppp(x64emu_t *emu, uintptr_t fcn) { uFuipppppp_t fn = (uFuipppppp_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } @@ -5848,12 +6251,12 @@ void uFpppppupp(x64emu_t *emu, uintptr_t fcn) { uFpppppupp_t fn = (uFpppppupp_t) void uFbCuuuCup(x64emu_t *emu, uintptr_t fcn) { uFbCuuuCup_t fn = (uFbCuuuCup_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint8_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint8_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void uFbWWWWWWp(x64emu_t *emu, uintptr_t fcn) { uFbWWWWWWp_t fn = (uFbWWWWWWp_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint16_t)R_RSI, (uint16_t)R_RDX, (uint16_t)R_RCX, (uint16_t)R_R8, (uint16_t)R_R9, *(uint16_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void LFELpupupu(x64emu_t *emu, uintptr_t fcn) { LFELpupupu_t fn = (LFELpupupu_t)fcn; R_RAX=(uintptr_t)fn(emu, (uintptr_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8)); } -void LFEpiupppp(x64emu_t *emu, uintptr_t fcn) { LFEpiupppp_t fn = (LFEpiupppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void LFEpuuuppp(x64emu_t *emu, uintptr_t fcn) { LFEpuuuppp_t fn = (LFEpuuuppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void LFpLpuuLLu(x64emu_t *emu, uintptr_t fcn) { LFpLpuuLLu_t fn = (LFpLpuuLLu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uintptr_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } void pFEiplllpp(x64emu_t *emu, uintptr_t fcn) { pFEiplllpp_t fn = (pFEiplllpp_t)fcn; R_RAX=(uintptr_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFEipLLLpp(x64emu_t *emu, uintptr_t fcn) { pFEipLLLpp_t fn = (pFEipLLLpp_t)fcn; R_RAX=(uintptr_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void pFEpiuCppp(x64emu_t *emu, uintptr_t fcn) { pFEpiuCppp_t fn = (pFEpiuCppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (uint8_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void pFEppLiiip(x64emu_t *emu, uintptr_t fcn) { pFEppLiiip_t fn = (pFEppLiiip_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void pFEppLiiup(x64emu_t *emu, uintptr_t fcn) { pFEppLiiup_t fn = (pFEppLiiup_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8)); } void pFEpppuipV(x64emu_t *emu, uintptr_t fcn) { pFEpppuipV_t fn = (pFEpppuipV_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, (void*)(R_RSP + 8)); } void pFEpppppiV(x64emu_t *emu, uintptr_t fcn) { pFEpppppiV_t fn = (pFEpppppiV_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, (void*)(R_RSP + 8)); } void pFEppppppi(x64emu_t *emu, uintptr_t fcn) { pFEppppppi_t fn = (pFEppppppi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8)); } @@ -5866,7 +6269,7 @@ void pFuupupipp(x64emu_t *emu, uintptr_t fcn) { pFuupupipp_t fn = (pFuupupipp_t) void pFpiiiiiuu(x64emu_t *emu, uintptr_t fcn) { pFpiiiiiuu_t fn = (pFpiiiiiuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } void pFpiiuuupp(x64emu_t *emu, uintptr_t fcn) { pFpiiuuupp_t fn = (pFpiiuuupp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } void pFpiUdiiUi(x64emu_t *emu, uintptr_t fcn) { pFpiUdiiUi_t fn = (pFpiUdiiUi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint64_t)R_RDX, emu->xmm[0].d[0], (int32_t)R_RCX, (int32_t)R_R8, (uint64_t)R_R9, *(int32_t*)(R_RSP + 8)); } -void pFpipiiiip(x64emu_t *emu, uintptr_t fcn) { pFpipiiiip_t fn = (pFpipiiiip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void pFpipiuiip(x64emu_t *emu, uintptr_t fcn) { pFpipiuiip_t fn = (pFpipiuiip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } void pFpuuuuupp(x64emu_t *emu, uintptr_t fcn) { pFpuuuuupp_t fn = (pFpuuuuupp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } void pFpuuuupup(x64emu_t *emu, uintptr_t fcn) { pFpuuuupup_t fn = (pFpuuuupup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } void pFpupLLLpp(x64emu_t *emu, uintptr_t fcn) { pFpupLLLpp_t fn = (pFpupLLLpp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } @@ -5895,8 +6298,8 @@ void vFEpiiiuipp(x64emu_t *emu, uintptr_t fcn) { vFEpiiiuipp_t fn = (vFEpiiiuipp void vFEpippippV(x64emu_t *emu, uintptr_t fcn) { vFEpippippV_t fn = (vFEpippippV_t)fcn; fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), (void*)(R_RSP + 16)); } void vFEpippippA(x64emu_t *emu, uintptr_t fcn) { vFEpippippA_t fn = (vFEpippippA_t)fcn; fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } void vFEpuuuippp(x64emu_t *emu, uintptr_t fcn) { vFEpuuuippp_t fn = (vFEpuuuippp_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void vFEppiipppp(x64emu_t *emu, uintptr_t fcn) { vFEppiipppp_t fn = (vFEppiipppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void vFEpppiippp(x64emu_t *emu, uintptr_t fcn) { vFEpppiippp_t fn = (vFEpppiippp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void vFEppuipppp(x64emu_t *emu, uintptr_t fcn) { vFEppuipppp_t fn = (vFEppuipppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void vFEpppuippp(x64emu_t *emu, uintptr_t fcn) { vFEpppuippp_t fn = (vFEpppuippp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } void vFEpppLLpLp(x64emu_t *emu, uintptr_t fcn) { vFEpppLLpLp_t fn = (vFEpppLLpLp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } void vFEppppippp(x64emu_t *emu, uintptr_t fcn) { vFEppppippp_t fn = (vFEppppippp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } void vFiiiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFiiiiiiiii_t fn = (vFiiiiiiiii_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } @@ -5910,7 +6313,7 @@ void vFuiiiiiiiC(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiC_t fn = (vFuiiiiiiiC void vFuiiiiiuip(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiuip_t fn = (vFuiiiiiuip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } void vFuiiiiiuup(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiuup_t fn = (vFuiiiiiuup_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } void vFuiuiiiiip(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiiip_t fn = (vFuiuiiiiip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void vFuiuiiiCuL(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiCuL_t fn = (vFuiuiiiCuL_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint8_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24)); } +void vFuiuiiiCuU(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiCuU_t fn = (vFuiuiiiCuU_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint8_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint64_t*)(R_RSP + 24)); } void vFuiupuffup(x64emu_t *emu, uintptr_t fcn) { vFuiupuffup_t fn = (vFuiupuffup_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, emu->xmm[0].f[0], emu->xmm[1].f[0], (uint32_t)R_R9, *(void**)(R_RSP + 8)); } void vFuuiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiii_t fn = (vFuuiiiiiii_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } void vFuuiiiiiiC(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiiC_t fn = (vFuuiiiiiiC_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint8_t*)(R_RSP + 24)); } @@ -5924,19 +6327,18 @@ void vFuffffffff(x64emu_t *emu, uintptr_t fcn) { vFuffffffff_t fn = (vFuffffffff void vFffCCCCfff(x64emu_t *emu, uintptr_t fcn) { vFffCCCCfff_t fn = (vFffCCCCfff_t)fcn; fn(emu->xmm[0].f[0], emu->xmm[1].f[0], (uint8_t)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX, emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0]); } void vFddddddddd(x64emu_t *emu, uintptr_t fcn) { vFddddddddd_t fn = (vFddddddddd_t)fcn; fn(emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], emu->xmm[4].d[0], emu->xmm[5].d[0], emu->xmm[6].d[0], emu->xmm[7].d[0], *(double*)(R_RSP + 8)); } void vFpiuippppi(x64emu_t *emu, uintptr_t fcn) { vFpiuippppi_t fn = (vFpiuippppi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } +void vFpiLLpiipi(x64emu_t *emu, uintptr_t fcn) { vFpiLLpiipi_t fn = (vFpiLLpiipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } +void vFpiLpLiipi(x64emu_t *emu, uintptr_t fcn) { vFpiLpLiipi_t fn = (vFpiLpLiipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } void vFpipiuiipp(x64emu_t *emu, uintptr_t fcn) { vFpipiuiipp_t fn = (vFpipiuiipp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void vFpipppiipi(x64emu_t *emu, uintptr_t fcn) { vFpipppiipi_t fn = (vFpipppiipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } void vFpuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFpuuuuuuuu_t fn = (vFpuuuuuuuu_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } +void vFpLiiipiii(x64emu_t *emu, uintptr_t fcn) { vFpLiiipiii_t fn = (vFpLiiipiii_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } void vFpLpLpLLpp(x64emu_t *emu, uintptr_t fcn) { vFpLpLpLLpp_t fn = (vFpLpLpLLpp_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void vFpLpppippp(x64emu_t *emu, uintptr_t fcn) { vFpLpppippp_t fn = (vFpLpppippp_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void vFppiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFppiiiiiii_t fn = (vFppiiiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } void vFppiiiiipi(x64emu_t *emu, uintptr_t fcn) { vFppiiiiipi_t fn = (vFppiiiiipi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } void vFppiiiiupi(x64emu_t *emu, uintptr_t fcn) { vFppiiiiupi_t fn = (vFppiiiiupi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } -void vFppiiipiii(x64emu_t *emu, uintptr_t fcn) { vFppiiipiii_t fn = (vFppiiipiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } void vFppiupiiii(x64emu_t *emu, uintptr_t fcn) { vFppiupiiii_t fn = (vFppiupiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } -void vFppippDpDC(x64emu_t *emu, uintptr_t fcn) { vFppippDpDC_t fn = (vFppippDpDC_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, LD2localLD((void*)(R_RSP + 8)), (void*)R_R9, LD2localLD((void*)(R_RSP + 24)), *(uint8_t*)(R_RSP + 40)); } void vFppipppiii(x64emu_t *emu, uintptr_t fcn) { vFppipppiii_t fn = (vFppipppiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } -void vFppipppiip(x64emu_t *emu, uintptr_t fcn) { vFppipppiip_t fn = (vFppipppiip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } void vFppuippiip(x64emu_t *emu, uintptr_t fcn) { vFppuippiip_t fn = (vFppuippiip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } void vFppuuiiiii(x64emu_t *emu, uintptr_t fcn) { vFppuuiiiii_t fn = (vFppuuiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } void vFppuuiiiiu(x64emu_t *emu, uintptr_t fcn) { vFppuuiiiiu_t fn = (vFppuuiiiiu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } @@ -5950,49 +6352,52 @@ void vFpplpppppi(x64emu_t *emu, uintptr_t fcn) { vFpplpppppi_t fn = (vFpplpppppi void vFpppiiiiii(x64emu_t *emu, uintptr_t fcn) { vFpppiiiiii_t fn = (vFpppiiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } void vFpppffffff(x64emu_t *emu, uintptr_t fcn) { vFpppffffff_t fn = (vFpppffffff_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0]); } void vFppppipiip(x64emu_t *emu, uintptr_t fcn) { vFppppipiip_t fn = (vFppppipiip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void vFpppppippp(x64emu_t *emu, uintptr_t fcn) { vFpppppippp_t fn = (vFpppppippp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFEpiiiiipi(x64emu_t *emu, uintptr_t fcn) { iFEpiiiiipi_t fn = (iFEpiiiiipi_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } -void iFEppuppppp(x64emu_t *emu, uintptr_t fcn) { iFEppuppppp_t fn = (iFEppuppppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFEpppipppp(x64emu_t *emu, uintptr_t fcn) { iFEpppipppp_t fn = (iFEpppipppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFEppplPPPP(x64emu_t *emu, uintptr_t fcn) { iFEppplPPPP_t fn = (iFEppplPPPP_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (intptr_t)R_RCX, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void iFEpppppupp(x64emu_t *emu, uintptr_t fcn) { iFEpppppupp_t fn = (iFEpppppupp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFEppppppuu(x64emu_t *emu, uintptr_t fcn) { iFEppppppuu_t fn = (iFEppppppuu_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } -void iFEppPPPPPP(x64emu_t *emu, uintptr_t fcn) { iFEppPPPPPP_t fn = (iFEppPPPPPP_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } -void iFiiiiiiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiiiiiip_t fn = (iFiiiiiiiip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFiiiipiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiipiiip_t fn = (iFiiiipiiip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFipiipippi(x64emu_t *emu, uintptr_t fcn) { iFipiipippi_t fn = (iFipiipippi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } -void iFdddpppppp(x64emu_t *emu, uintptr_t fcn) { iFdddpppppp_t fn = (iFdddpppppp_t)fcn; R_RAX=(int32_t)fn(emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFpipippppi(x64emu_t *emu, uintptr_t fcn) { iFpipippppi_t fn = (iFpipippppi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } -void iFpipLpiiip(x64emu_t *emu, uintptr_t fcn) { iFpipLpiiip_t fn = (iFpipLpiiip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFpuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { iFpuuuuuuuu_t fn = (iFpuuuuuuuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } -void iFpuuuuduup(x64emu_t *emu, uintptr_t fcn) { iFpuuuuduup_t fn = (iFpuuuuduup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, emu->xmm[0].d[0], (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpuuuLiiip(x64emu_t *emu, uintptr_t fcn) { iFpuuuLiiip_t fn = (iFpuuuLiiip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFpuuuLpppp(x64emu_t *emu, uintptr_t fcn) { iFpuuuLpppp_t fn = (iFpuuuLpppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFpduuuLuLp(x64emu_t *emu, uintptr_t fcn) { iFpduuuLuLp_t fn = (iFpduuuLuLp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, emu->xmm[0].d[0], (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8, (uint32_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } -void iFpLiuiiLLL(x64emu_t *emu, uintptr_t fcn) { iFpLiuiiLLL_t fn = (iFpLiuiiLLL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24)); } -void iFpLLiiuuii(x64emu_t *emu, uintptr_t fcn) { iFpLLiiuuii_t fn = (iFpLLiiuuii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } -void iFpLpiiuuii(x64emu_t *emu, uintptr_t fcn) { iFpLpiiuuii_t fn = (iFpLpiiuuii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } -void iFpLpLpLLpp(x64emu_t *emu, uintptr_t fcn) { iFpLpLpLLpp_t fn = (iFpLpLpLLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFpLpppupup(x64emu_t *emu, uintptr_t fcn) { iFpLpppupup_t fn = (iFpLpppupup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFpLppppppp(x64emu_t *emu, uintptr_t fcn) { iFpLppppppp_t fn = (iFpLppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFppiiiiiii(x64emu_t *emu, uintptr_t fcn) { iFppiiiiiii_t fn = (iFppiiiiiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } -void iFppippippp(x64emu_t *emu, uintptr_t fcn) { iFppippippp_t fn = (iFppippippp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFppuLLpupp(x64emu_t *emu, uintptr_t fcn) { iFppuLLpupp_t fn = (iFppuLLpupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFppuppuuuu(x64emu_t *emu, uintptr_t fcn) { iFppuppuuuu_t fn = (iFppuppuuuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } -void iFppupppupp(x64emu_t *emu, uintptr_t fcn) { iFppupppupp_t fn = (iFppupppupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFppLpiuppp(x64emu_t *emu, uintptr_t fcn) { iFppLpiuppp_t fn = (iFppLpiuppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFpppiiipip(x64emu_t *emu, uintptr_t fcn) { iFpppiiipip_t fn = (iFpppiiipip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFpppiiuuii(x64emu_t *emu, uintptr_t fcn) { iFpppiiuuii_t fn = (iFpppiiuuii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } -void iFpppiipiiu(x64emu_t *emu, uintptr_t fcn) { iFpppiipiiu_t fn = (iFpppiipiiu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } -void iFpppippipi(x64emu_t *emu, uintptr_t fcn) { iFpppippipi_t fn = (iFpppippipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } -void iFpppLLLupp(x64emu_t *emu, uintptr_t fcn) { iFpppLLLupp_t fn = (iFpppLLLupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFpppLppupp(x64emu_t *emu, uintptr_t fcn) { iFpppLppupp_t fn = (iFpppLppupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFppppiiupp(x64emu_t *emu, uintptr_t fcn) { iFppppiiupp_t fn = (iFppppiiupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFpppppLupp(x64emu_t *emu, uintptr_t fcn) { iFpppppLupp_t fn = (iFpppppLupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFppppppupp(x64emu_t *emu, uintptr_t fcn) { iFppppppupp_t fn = (iFppppppupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFppppppppu(x64emu_t *emu, uintptr_t fcn) { iFppppppppu_t fn = (iFppppppppu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } -void iFppppppppp(x64emu_t *emu, uintptr_t fcn) { iFppppppppp_t fn = (iFppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void uFEipippppp(x64emu_t *emu, uintptr_t fcn) { uFEipippppp_t fn = (uFEipippppp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFEpiiiiipi(x64emu_t *emu, uintptr_t fcn) { iFEpiiiiipi_t fn = (iFEpiiiiipi_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void iFEppuppppp(x64emu_t *emu, uintptr_t fcn) { iFEppuppppp_t fn = (iFEppuppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFEpppupppp(x64emu_t *emu, uintptr_t fcn) { iFEpppupppp_t fn = (iFEpppupppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFEppplPPPP(x64emu_t *emu, uintptr_t fcn) { iFEppplPPPP_t fn = (iFEppplPPPP_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (intptr_t)R_RCX, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFEpppppupp(x64emu_t *emu, uintptr_t fcn) { iFEpppppupp_t fn = (iFEpppppupp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFEppppppuu(x64emu_t *emu, uintptr_t fcn) { iFEppppppuu_t fn = (iFEppppppuu_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } +void iFEppPPPPPP(x64emu_t *emu, uintptr_t fcn) { iFEppPPPPPP_t fn = (iFEppPPPPPP_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } +void iFipiipippi(x64emu_t *emu, uintptr_t fcn) { iFipiipippi_t fn = (iFipiipippi_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } +void iFuiiuuiiip(x64emu_t *emu, uintptr_t fcn) { iFuiiuuiiip_t fn = (iFuiiuuiiip_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFuiiupiiup(x64emu_t *emu, uintptr_t fcn) { iFuiiupiiup_t fn = (iFuiiupiiup_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFuuppuuppu(x64emu_t *emu, uintptr_t fcn) { iFuuppuuppu_t fn = (iFuuppuuppu_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } +void iFdddpppppp(x64emu_t *emu, uintptr_t fcn) { iFdddpppppp_t fn = (iFdddpppppp_t)fcn; R_RAX=(uint32_t)fn(emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFpiLiiipip(x64emu_t *emu, uintptr_t fcn) { iFpiLiiipip_t fn = (iFpiLiiipip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFpiLLLiiip(x64emu_t *emu, uintptr_t fcn) { iFpiLLLiiip_t fn = (iFpiLLLiiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFpipippppi(x64emu_t *emu, uintptr_t fcn) { iFpipippppi_t fn = (iFpipippppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } +void iFpuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { iFpuuuuuuuu_t fn = (iFpuuuuuuuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } +void iFpuuuuuupp(x64emu_t *emu, uintptr_t fcn) { iFpuuuuuupp_t fn = (iFpuuuuuupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFpuuuuduup(x64emu_t *emu, uintptr_t fcn) { iFpuuuuduup_t fn = (iFpuuuuduup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, emu->xmm[0].d[0], (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpuuuLiiip(x64emu_t *emu, uintptr_t fcn) { iFpuuuLiiip_t fn = (iFpuuuLiiip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFpuuuLpppp(x64emu_t *emu, uintptr_t fcn) { iFpuuuLpppp_t fn = (iFpuuuLpppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFpuuppupuu(x64emu_t *emu, uintptr_t fcn) { iFpuuppupuu_t fn = (iFpuuppupuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } +void iFpduuuLuLp(x64emu_t *emu, uintptr_t fcn) { iFpduuuLuLp_t fn = (iFpduuuLuLp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, emu->xmm[0].d[0], (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uintptr_t)R_R8, (uint32_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } +void iFpLiuiiLLL(x64emu_t *emu, uintptr_t fcn) { iFpLiuiiLLL_t fn = (iFpLiuiiLLL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24)); } +void iFpLLiiuuii(x64emu_t *emu, uintptr_t fcn) { iFpLLiiuuii_t fn = (iFpLLiiuuii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } +void iFpLpiiuuii(x64emu_t *emu, uintptr_t fcn) { iFpLpiiuuii_t fn = (iFpLpiiuuii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } +void iFpLpLpLLpp(x64emu_t *emu, uintptr_t fcn) { iFpLpLpLLpp_t fn = (iFpLpLpLLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFpLpppupup(x64emu_t *emu, uintptr_t fcn) { iFpLpppupup_t fn = (iFpLpppupup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFpLppppppp(x64emu_t *emu, uintptr_t fcn) { iFpLppppppp_t fn = (iFpLppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFppiiiiiii(x64emu_t *emu, uintptr_t fcn) { iFppiiiiiii_t fn = (iFppiiiiiii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } +void iFppipiiipi(x64emu_t *emu, uintptr_t fcn) { iFppipiiipi_t fn = (iFppipiiipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } +void iFppippippp(x64emu_t *emu, uintptr_t fcn) { iFppippippp_t fn = (iFppippippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFppuLLpupp(x64emu_t *emu, uintptr_t fcn) { iFppuLLpupp_t fn = (iFppuLLpupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFppuppuuuu(x64emu_t *emu, uintptr_t fcn) { iFppuppuuuu_t fn = (iFppuppuuuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } +void iFppupppupp(x64emu_t *emu, uintptr_t fcn) { iFppupppupp_t fn = (iFppupppupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFppLiipiiL(x64emu_t *emu, uintptr_t fcn) { iFppLiipiiL_t fn = (iFppLiipiiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24)); } +void iFppLpiuppp(x64emu_t *emu, uintptr_t fcn) { iFppLpiuppp_t fn = (iFppLpiuppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFpppiiipip(x64emu_t *emu, uintptr_t fcn) { iFpppiiipip_t fn = (iFpppiiipip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFpppippipi(x64emu_t *emu, uintptr_t fcn) { iFpppippipi_t fn = (iFpppippipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } +void iFpppLLLupp(x64emu_t *emu, uintptr_t fcn) { iFpppLLLupp_t fn = (iFpppLLLupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFpppLppupp(x64emu_t *emu, uintptr_t fcn) { iFpppLppupp_t fn = (iFpppLppupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFppppiiupp(x64emu_t *emu, uintptr_t fcn) { iFppppiiupp_t fn = (iFppppiiupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFpppppLupp(x64emu_t *emu, uintptr_t fcn) { iFpppppLupp_t fn = (iFpppppLupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFppppppupp(x64emu_t *emu, uintptr_t fcn) { iFppppppupp_t fn = (iFppppppupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFppppppppu(x64emu_t *emu, uintptr_t fcn) { iFppppppppu_t fn = (iFppppppppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } +void iFppppppppp(x64emu_t *emu, uintptr_t fcn) { iFppppppppp_t fn = (iFppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void uFEipuppppp(x64emu_t *emu, uintptr_t fcn) { uFEipuppppp_t fn = (uFEipuppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } void uFEpppufppp(x64emu_t *emu, uintptr_t fcn) { uFEpppufppp_t fn = (uFEpppufppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, emu->xmm[0].f[0], (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } void uFuulpiuiuf(x64emu_t *emu, uintptr_t fcn) { uFuulpiuiuf_t fn = (uFuulpiuiuf_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), emu->xmm[0].f[0]); } void uFpuupuppuu(x64emu_t *emu, uintptr_t fcn) { uFpuupuppuu_t fn = (uFpuupuppuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } @@ -6001,8 +6406,9 @@ void uFppppppppp(x64emu_t *emu, uintptr_t fcn) { uFppppppppp_t fn = (uFppppppppp void lFpppipiipp(x64emu_t *emu, uintptr_t fcn) { lFpppipiipp_t fn = (lFpppipiipp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void lFpppippppp(x64emu_t *emu, uintptr_t fcn) { lFpppippppp_t fn = (lFpppippppp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void LFEppppppii(x64emu_t *emu, uintptr_t fcn) { LFEppppppii_t fn = (LFEppppppii_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void LFpLiiiiiip(x64emu_t *emu, uintptr_t fcn) { LFpLiiiiiip_t fn = (LFpLiiiiiip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } void LFpLiiuuuLL(x64emu_t *emu, uintptr_t fcn) { LFpLiiuuuLL_t fn = (LFpLiiuuuLL_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24)); } -void pFEppiiuuLi(x64emu_t *emu, uintptr_t fcn) { pFEppiiuuLi_t fn = (pFEppiiuuLi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } +void pFEpLiiuuLi(x64emu_t *emu, uintptr_t fcn) { pFEpLiiuuLi_t fn = (pFEpLiiuuLi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void pFEppuippuu(x64emu_t *emu, uintptr_t fcn) { pFEppuippuu_t fn = (pFEppuippuu_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); } void pFEpppppiiV(x64emu_t *emu, uintptr_t fcn) { pFEpppppiiV_t fn = (pFEpppppiiV_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), (void*)(R_RSP + 16)); } void pFEpppppppi(x64emu_t *emu, uintptr_t fcn) { pFEpppppppi_t fn = (pFEpppppppi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } @@ -6011,8 +6417,7 @@ void pFuupuuuuuu(x64emu_t *emu, uintptr_t fcn) { pFuupuuuuuu_t fn = (pFuupuuuuuu void pFpiiiiuuuu(x64emu_t *emu, uintptr_t fcn) { pFpiiiiuuuu_t fn = (pFpiiiiuuuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24)); } void pFpLpLLipui(x64emu_t *emu, uintptr_t fcn) { pFpLpLLipui_t fn = (pFpLpLLipui_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } void pFpLppLLiLi(x64emu_t *emu, uintptr_t fcn) { pFpLppLLiLi_t fn = (pFpLppLLiLi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9, *(int32_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } -void pFppiiiiiip(x64emu_t *emu, uintptr_t fcn) { pFppiiiiiip_t fn = (pFppiiiiiip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void pFppipppppp(x64emu_t *emu, uintptr_t fcn) { pFppipppppp_t fn = (pFppipppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void pFppupppppp(x64emu_t *emu, uintptr_t fcn) { pFppupppppp_t fn = (pFppupppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void pFpppiiiiii(x64emu_t *emu, uintptr_t fcn) { pFpppiiiiii_t fn = (pFpppiiiiii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } void pFpppuipppp(x64emu_t *emu, uintptr_t fcn) { pFpppuipppp_t fn = (pFpppuipppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void pFpppppiipp(x64emu_t *emu, uintptr_t fcn) { pFpppppiipp_t fn = (pFpppppiipp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } @@ -6026,9 +6431,9 @@ void iWEpuuuiipp(x64emu_t *emu, uintptr_t fcn) { iWEpuuuiipp_t fn = (iWEpuuuiipp void iWpiuuupipu(x64emu_t *emu, uintptr_t fcn) { iWpiuuupipu_t fn = (iWpiuuupipu_t)fcn; R_RAX=(int32_t)fn((void*)R_RCX, (int32_t)R_RDX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 40), *(void**)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(void**)(R_RSP + 64), *(uint32_t*)(R_RSP + 72)); } void iWpuiuuipip(x64emu_t *emu, uintptr_t fcn) { iWpuiuuipip_t fn = (iWpuiuuipip_t)fcn; R_RAX=(int32_t)fn((void*)R_RCX, (uint32_t)R_RDX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(void**)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(void**)(R_RSP + 72)); } void iWppppupiii(x64emu_t *emu, uintptr_t fcn) { iWppppupiii_t fn = (iWppppupiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RCX, (void*)R_RDX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 40), *(void**)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(int32_t*)(R_RSP + 72)); } -void vFEiippppppp(x64emu_t *emu, uintptr_t fcn) { vFEiippppppp_t fn = (vFEiippppppp_t)fcn; fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void vFEpippppppp(x64emu_t *emu, uintptr_t fcn) { vFEpippppppp_t fn = (vFEpippppppp_t)fcn; fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void vFEpppiipppp(x64emu_t *emu, uintptr_t fcn) { vFEpppiipppp_t fn = (vFEpppiipppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void vFEiuppppppp(x64emu_t *emu, uintptr_t fcn) { vFEiuppppppp_t fn = (vFEiuppppppp_t)fcn; fn(emu, (int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void vFEpuppppppp(x64emu_t *emu, uintptr_t fcn) { vFEpuppppppp_t fn = (vFEpuppppppp_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void vFEpppuipppp(x64emu_t *emu, uintptr_t fcn) { vFEpppuipppp_t fn = (vFEpppuipppp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void vFEpppLuLpLp(x64emu_t *emu, uintptr_t fcn) { vFEpppLuLpLp_t fn = (vFEpppLuLpLp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uint32_t)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } void vFiiiiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFiiiiiiiiii_t fn = (vFiiiiiiiiii_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } void vFiiiiiiiiiu(x64emu_t *emu, uintptr_t fcn) { vFiiiiiiiiiu_t fn = (vFiiiiiiiiiu_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32)); } @@ -6051,10 +6456,8 @@ void vFuddiiddiip(x64emu_t *emu, uintptr_t fcn) { vFuddiiddiip_t fn = (vFuddiidd void vFffffffffff(x64emu_t *emu, uintptr_t fcn) { vFffffffffff_t fn = (vFffffffffff_t)fcn; fn(emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0], emu->xmm[6].f[0], emu->xmm[7].f[0], *(float*)(R_RSP + 8), *(float*)(R_RSP + 16)); } void vFpiuippppip(x64emu_t *emu, uintptr_t fcn) { vFpiuippppip_t fn = (vFpiuippppip_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } void vFpuupuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFpuupuuuuuu_t fn = (vFpuupuuuuuu_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32)); } -void vFppiiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFppiiiiiiii_t fn = (vFppiiiiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } -void vFppiiiiipip(x64emu_t *emu, uintptr_t fcn) { vFppiiiiipip_t fn = (vFppiiiiipip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } void vFppiiiiupip(x64emu_t *emu, uintptr_t fcn) { vFppiiiiupip_t fn = (vFppiiiiupip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void vFppiippppii(x64emu_t *emu, uintptr_t fcn) { vFppiippppii_t fn = (vFppiippppii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } +void vFppipipippi(x64emu_t *emu, uintptr_t fcn) { vFppipipippi_t fn = (vFppipipippi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } void vFppuipppiip(x64emu_t *emu, uintptr_t fcn) { vFppuipppiip_t fn = (vFppuipppiip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } void vFppuuuiiiii(x64emu_t *emu, uintptr_t fcn) { vFppuuuiiiii_t fn = (vFppuuuiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } void vFppuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFppuuuuuuuu_t fn = (vFppuuuuuuuu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32)); } @@ -6065,28 +6468,30 @@ void vFppupppiiii(x64emu_t *emu, uintptr_t fcn) { vFppupppiiii_t fn = (vFppupppi void vFppdddddddd(x64emu_t *emu, uintptr_t fcn) { vFppdddddddd_t fn = (vFppdddddddd_t)fcn; fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], emu->xmm[4].d[0], emu->xmm[5].d[0], emu->xmm[6].d[0], emu->xmm[7].d[0]); } void vFppppppppii(x64emu_t *emu, uintptr_t fcn) { vFppppppppii_t fn = (vFppppppppii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } void vFpppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppppppppp_t fn = (vFpppppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void iFEpiiiiippp(x64emu_t *emu, uintptr_t fcn) { iFEpiiiiippp_t fn = (iFEpiiiiippp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFEpupppLppL(x64emu_t *emu, uintptr_t fcn) { iFEpupppLppL_t fn = (iFEpupppLppL_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24)); } -void iFEppppppipp(x64emu_t *emu, uintptr_t fcn) { iFEppppppipp_t fn = (iFEppppppipp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } -void iFiiiiiiiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiiiiiiip_t fn = (iFiiiiiiiiip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void iFpiipiiipip(x64emu_t *emu, uintptr_t fcn) { iFpiipiiipip_t fn = (iFpiipiiipip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void iFpippddiidd(x64emu_t *emu, uintptr_t fcn) { iFpippddiidd_t fn = (iFpippddiidd_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, emu->xmm[0].d[0], emu->xmm[1].d[0], (int32_t)R_R8, (int32_t)R_R9, emu->xmm[2].d[0], emu->xmm[3].d[0]); } -void iFpCuWCCCCup(x64emu_t *emu, uintptr_t fcn) { iFpCuWCCCCup_t fn = (iFpCuWCCCCup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint32_t)R_RDX, (uint16_t)R_RCX, (uint8_t)R_R8, (uint8_t)R_R9, *(uint8_t*)(R_RSP + 8), *(uint8_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void iFpuuLiuiiLL(x64emu_t *emu, uintptr_t fcn) { iFpuuLiuiiLL_t fn = (iFpuuLiuiiLL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24), *(uintptr_t*)(R_RSP + 32)); } -void iFpLLpiiuuii(x64emu_t *emu, uintptr_t fcn) { iFpLLpiiuuii_t fn = (iFpLLpiiuuii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } -void iFpLpLUUUUpL(x64emu_t *emu, uintptr_t fcn) { iFpLpLUUUUpL_t fn = (iFpLpLUUUUpL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uint64_t)R_R8, (uint64_t)R_R9, *(uint64_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(uintptr_t*)(R_RSP + 32)); } -void iFppuuiiiiii(x64emu_t *emu, uintptr_t fcn) { iFppuuiiiiii_t fn = (iFppuuiiiiii_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } -void iFppuuiiuupi(x64emu_t *emu, uintptr_t fcn) { iFppuuiiuupi_t fn = (iFppuuiiuupi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } -void iFppLpLpLLpp(x64emu_t *emu, uintptr_t fcn) { iFppLpLpLLpp_t fn = (iFppLpLpLLpp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void iFpppiiipipi(x64emu_t *emu, uintptr_t fcn) { iFpppiiipipi_t fn = (iFpppiiipipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } -void iFpppLLipppp(x64emu_t *emu, uintptr_t fcn) { iFpppLLipppp_t fn = (iFpppLLipppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void iFpppppiiuup(x64emu_t *emu, uintptr_t fcn) { iFpppppiiuup_t fn = (iFpppppiiuup_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void iFpppppppipi(x64emu_t *emu, uintptr_t fcn) { iFpppppppipi_t fn = (iFpppppppipi_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } -void iFpppppppppu(x64emu_t *emu, uintptr_t fcn) { iFpppppppppu_t fn = (iFpppppppppu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(uint32_t*)(R_RSP + 32)); } +void iFEpiiiiippp(x64emu_t *emu, uintptr_t fcn) { iFEpiiiiippp_t fn = (iFEpiiiiippp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFEpupppLppL(x64emu_t *emu, uintptr_t fcn) { iFEpupppLppL_t fn = (iFEpupppLppL_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24)); } +void iFEppppppipp(x64emu_t *emu, uintptr_t fcn) { iFEppppppipp_t fn = (iFEppppppipp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFuiiiuuiiip(x64emu_t *emu, uintptr_t fcn) { iFuiiiuuiiip_t fn = (iFuiiiuuiiip_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFpiiLiiipip(x64emu_t *emu, uintptr_t fcn) { iFpiiLiiipip_t fn = (iFpiiLiiipip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFpiLLiiipip(x64emu_t *emu, uintptr_t fcn) { iFpiLLiiipip_t fn = (iFpiLLiiipip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFpiLLdduudd(x64emu_t *emu, uintptr_t fcn) { iFpiLLdduudd_t fn = (iFpiLLdduudd_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, emu->xmm[0].d[0], emu->xmm[1].d[0], (uint32_t)R_R8, (uint32_t)R_R9, emu->xmm[2].d[0], emu->xmm[3].d[0]); } +void iFpCuWCCCCup(x64emu_t *emu, uintptr_t fcn) { iFpCuWCCCCup_t fn = (iFpCuWCCCCup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint32_t)R_RDX, (uint16_t)R_RCX, (uint8_t)R_R8, (uint8_t)R_R9, *(uint8_t*)(R_RSP + 8), *(uint8_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFpuuLiuiiLL(x64emu_t *emu, uintptr_t fcn) { iFpuuLiuiiLL_t fn = (iFpuuLiuiiLL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24), *(uintptr_t*)(R_RSP + 32)); } +void iFpLLpiiuuii(x64emu_t *emu, uintptr_t fcn) { iFpLLpiiuuii_t fn = (iFpLLpiiuuii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } +void iFpLpLUUUUpL(x64emu_t *emu, uintptr_t fcn) { iFpLpLUUUUpL_t fn = (iFpLpLUUUUpL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uint64_t)R_R8, (uint64_t)R_R9, *(uint64_t*)(R_RSP + 8), *(uint64_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(uintptr_t*)(R_RSP + 32)); } +void iFppuuiiuuuu(x64emu_t *emu, uintptr_t fcn) { iFppuuiiuuuu_t fn = (iFppuuiiuuuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32)); } +void iFppLLiiLWpi(x64emu_t *emu, uintptr_t fcn) { iFppLLiiLWpi_t fn = (iFppLLiiLWpi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(uint16_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } +void iFppLpLLpLpp(x64emu_t *emu, uintptr_t fcn) { iFppLpLLpLpp_t fn = (iFppLpLLpLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFppLpLpLLpp(x64emu_t *emu, uintptr_t fcn) { iFppLpLpLLpp_t fn = (iFppLpLpLLpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFpppiiipipi(x64emu_t *emu, uintptr_t fcn) { iFpppiiipipi_t fn = (iFpppiiipipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } +void iFpppLLipppp(x64emu_t *emu, uintptr_t fcn) { iFpppLLipppp_t fn = (iFpppLLipppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFpppppiiuup(x64emu_t *emu, uintptr_t fcn) { iFpppppiiuup_t fn = (iFpppppiiuup_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFpppppppipi(x64emu_t *emu, uintptr_t fcn) { iFpppppppipi_t fn = (iFpppppppipi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } +void iFpppppppppu(x64emu_t *emu, uintptr_t fcn) { iFpppppppppu_t fn = (iFpppppppppu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(uint32_t*)(R_RSP + 32)); } void uFpddpippppp(x64emu_t *emu, uintptr_t fcn) { uFpddpippppp_t fn = (uFpddpippppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } void uFpppppppppp(x64emu_t *emu, uintptr_t fcn) { uFpppppppppp_t fn = (uFpppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } void lFpLppdddddd(x64emu_t *emu, uintptr_t fcn) { lFpLppdddddd_t fn = (lFpLppdddddd_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], emu->xmm[4].d[0], emu->xmm[5].d[0]); } -void pFEiippppppp(x64emu_t *emu, uintptr_t fcn) { pFEiippppppp_t fn = (pFEiippppppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void pFEiuppppppp(x64emu_t *emu, uintptr_t fcn) { pFEiuppppppp_t fn = (pFEiuppppppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void pFEpiiiiiipp(x64emu_t *emu, uintptr_t fcn) { pFEpiiiiiipp_t fn = (pFEpiiiiiipp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void pFEpippppppp(x64emu_t *emu, uintptr_t fcn) { pFEpippppppp_t fn = (pFEpippppppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); } void pFpupLLLLLpp(x64emu_t *emu, uintptr_t fcn) { pFpupLLLLLpp_t fn = (pFpupLLLLLpp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (uintptr_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } @@ -6107,7 +6512,6 @@ void vFEpuuuupupup(x64emu_t *emu, uintptr_t fcn) { vFEpuuuupupup_t fn = (vFEpuuu void vFEppLpLpLLpp(x64emu_t *emu, uintptr_t fcn) { vFEppLpLpLLpp_t fn = (vFEppLpLpLLpp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } void vFiiiiillliip(x64emu_t *emu, uintptr_t fcn) { vFiiiiillliip_t fn = (vFiiiiillliip_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (intptr_t)R_R9, *(intptr_t*)(R_RSP + 8), *(intptr_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } void vFiiiiilllilp(x64emu_t *emu, uintptr_t fcn) { vFiiiiilllilp_t fn = (vFiiiiilllilp_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (intptr_t)R_R9, *(intptr_t*)(R_RSP + 8), *(intptr_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(intptr_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } -void vFuiiiiiiiiip(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiiip_t fn = (vFuiiiiiiiiip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } void vFuiiiiiiiuip(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiuip_t fn = (vFuiiiiiiiuip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } void vFuiiiiiiiuup(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiuup_t fn = (vFuiiiiiiiuup_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } void vFuiiiillliip(x64emu_t *emu, uintptr_t fcn) { vFuiiiillliip_t fn = (vFuiiiillliip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (intptr_t)R_R9, *(intptr_t*)(R_RSP + 8), *(intptr_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } @@ -6117,11 +6521,13 @@ void vFuuupupppppp(x64emu_t *emu, uintptr_t fcn) { vFuuupupppppp_t fn = (vFuuupu void vFuuffiiffiip(x64emu_t *emu, uintptr_t fcn) { vFuuffiiffiip_t fn = (vFuuffiiffiip_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, emu->xmm[0].f[0], emu->xmm[1].f[0], (int32_t)R_RDX, (int32_t)R_RCX, emu->xmm[2].f[0], emu->xmm[3].f[0], (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } void vFuufffffffff(x64emu_t *emu, uintptr_t fcn) { vFuufffffffff_t fn = (vFuufffffffff_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0], emu->xmm[6].f[0], emu->xmm[7].f[0], *(float*)(R_RSP + 8)); } void vFuuddiiddiip(x64emu_t *emu, uintptr_t fcn) { vFuuddiiddiip_t fn = (vFuuddiiddiip_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0], (int32_t)R_RDX, (int32_t)R_RCX, emu->xmm[2].d[0], emu->xmm[3].d[0], (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8)); } +void vFuUuuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFuUuuuuuuuuu_t fn = (vFuUuuuuuuuuu_t)fcn; fn((uint32_t)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40)); } void vFuffffffffff(x64emu_t *emu, uintptr_t fcn) { vFuffffffffff_t fn = (vFuffffffffff_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0], emu->xmm[6].f[0], emu->xmm[7].f[0], *(float*)(R_RSP + 8), *(float*)(R_RSP + 16)); } -void vFuLuuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFuLuuuuuuuuu_t fn = (vFuLuuuuuuuuu_t)fcn; fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40)); } -void vFLufffffffff(x64emu_t *emu, uintptr_t fcn) { vFLufffffffff_t fn = (vFLufffffffff_t)fcn; fn((uintptr_t)R_RDI, (uint32_t)R_RSI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0], emu->xmm[6].f[0], emu->xmm[7].f[0], *(float*)(R_RSP + 8)); } -void vFpipipiipiii(x64emu_t *emu, uintptr_t fcn) { vFpipipiipiii_t fn = (vFpipipiipiii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } -void vFpipppiiiipi(x64emu_t *emu, uintptr_t fcn) { vFpipppiiiipi_t fn = (vFpipppiiiipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } +void vFUufffffffff(x64emu_t *emu, uintptr_t fcn) { vFUufffffffff_t fn = (vFUufffffffff_t)fcn; fn((uint64_t)R_RDI, (uint32_t)R_RSI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0], emu->xmm[6].f[0], emu->xmm[7].f[0], *(float*)(R_RSP + 8)); } +void vFpiiiiiiiiuu(x64emu_t *emu, uintptr_t fcn) { vFpiiiiiiiiuu_t fn = (vFpiiiiiiiiuu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40)); } +void vFpiLLpiiiipi(x64emu_t *emu, uintptr_t fcn) { vFpiLLpiiiipi_t fn = (vFpiLLpiiiipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } +void vFpiLpLiiiipi(x64emu_t *emu, uintptr_t fcn) { vFpiLpLiiiipi_t fn = (vFpiLpLiiiipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } +void vFpipipiipiiu(x64emu_t *emu, uintptr_t fcn) { vFpipipiipiiu_t fn = (vFpipipiipiiu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40)); } void vFpupuuupupup(x64emu_t *emu, uintptr_t fcn) { vFpupuuupupup_t fn = (vFpupuuupupup_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } void vFppiiiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFppiiiiiiiii_t fn = (vFppiiiiiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } void vFppiiiiipiii(x64emu_t *emu, uintptr_t fcn) { vFppiiiiipiii_t fn = (vFppiiiiipiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } @@ -6134,25 +6540,28 @@ void vFppuupppiiii(x64emu_t *emu, uintptr_t fcn) { vFppuupppiiii_t fn = (vFppuup void vFppupipiuuuu(x64emu_t *emu, uintptr_t fcn) { vFppupipiuuuu_t fn = (vFppupipiuuuu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40)); } void vFppupppuiiii(x64emu_t *emu, uintptr_t fcn) { vFppupppuiiii_t fn = (vFppupppuiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } void vFppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFppppppppppp_t fn = (vFppppppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } -void iFEiipppppppp(x64emu_t *emu, uintptr_t fcn) { iFEiipppppppp_t fn = (iFEiipppppppp_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void iFEppLpLpLLpp(x64emu_t *emu, uintptr_t fcn) { iFEppLpLpLLpp_t fn = (iFEppLpLpLLpp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void iFEpppipppppp(x64emu_t *emu, uintptr_t fcn) { iFEpppipppppp_t fn = (iFEpppipppppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void iFEppppiiiiuu(x64emu_t *emu, uintptr_t fcn) { iFEppppiiiiuu_t fn = (iFEppppiiiiuu_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32)); } -void iFEpppppppppp(x64emu_t *emu, uintptr_t fcn) { iFEpppppppppp_t fn = (iFEpppppppppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void iFiiiiiiiiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiiiiiiiip_t fn = (iFiiiiiiiiiip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } -void iFpiippiiipip(x64emu_t *emu, uintptr_t fcn) { iFpiippiiipip_t fn = (iFpiippiiipip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } -void iFpippupppppp(x64emu_t *emu, uintptr_t fcn) { iFpippupppppp_t fn = (iFpippupppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } -void iFpuppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpuppppppppp_t fn = (iFpuppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } -void iFpLipiiiippp(x64emu_t *emu, uintptr_t fcn) { iFpLipiiiippp_t fn = (iFpLipiiiippp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } -void iFpLLpiiuuiiL(x64emu_t *emu, uintptr_t fcn) { iFpLLpiiuuiiL_t fn = (iFpLLpiiuuiiL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(uintptr_t*)(R_RSP + 40)); } -void iFppippipppip(x64emu_t *emu, uintptr_t fcn) { iFppippipppip_t fn = (iFppippipppip_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } -void iFppuppLLpupp(x64emu_t *emu, uintptr_t fcn) { iFppuppLLpupp_t fn = (iFppuppLLpupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } -void iFpppiiuuiiuu(x64emu_t *emu, uintptr_t fcn) { iFpppiiuuiiuu_t fn = (iFpppiiuuiiuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40)); } -void iFpppppiiuupp(x64emu_t *emu, uintptr_t fcn) { iFpppppiiuupp_t fn = (iFpppppiiuupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } -void uFEpLiupppLuV(x64emu_t *emu, uintptr_t fcn) { uFEpLiupppLuV_t fn = (uFEpLiupppLuV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), (void*)(R_RSP + 32)); } -void uFEpLippppLup(x64emu_t *emu, uintptr_t fcn) { uFEpLippppLup_t fn = (uFEpLippppLup_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void uFEpLippppLuA(x64emu_t *emu, uintptr_t fcn) { uFEpLippppLuA_t fn = (uFEpLippppLuA_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } -void uFEppppppippp(x64emu_t *emu, uintptr_t fcn) { uFEppppppippp_t fn = (uFEppppppippp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFEiipppppppp(x64emu_t *emu, uintptr_t fcn) { iFEiipppppppp_t fn = (iFEiipppppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFEpLppiiiiuu(x64emu_t *emu, uintptr_t fcn) { iFEpLppiiiiuu_t fn = (iFEpLppiiiiuu_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32)); } +void iFEppLpLpLLpp(x64emu_t *emu, uintptr_t fcn) { iFEppLpLpLLpp_t fn = (iFEppLpLpLLpp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFEpppupppppp(x64emu_t *emu, uintptr_t fcn) { iFEpppupppppp_t fn = (iFEpppupppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFEpppppppppp(x64emu_t *emu, uintptr_t fcn) { iFEpppppppppp_t fn = (iFEpppppppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void iFuiiiiuuiiip(x64emu_t *emu, uintptr_t fcn) { iFuiiiiuuiiip_t fn = (iFuiiiiuuiiip_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } +void iFuppipipippi(x64emu_t *emu, uintptr_t fcn) { iFuppipipippi_t fn = (iFuppipipippi_t)fcn; R_RAX=(uint32_t)fn((uint32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } +void iFpiiLLiiipip(x64emu_t *emu, uintptr_t fcn) { iFpiiLLiiipip_t fn = (iFpiiLLiiipip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } +void iFpippupppppp(x64emu_t *emu, uintptr_t fcn) { iFpippupppppp_t fn = (iFpippupppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } +void iFpuppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpuppppppppp_t fn = (iFpuppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } +void iFpLipiiiippp(x64emu_t *emu, uintptr_t fcn) { iFpLipiiiippp_t fn = (iFpLipiiiippp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } +void iFpLLpiiuuiiL(x64emu_t *emu, uintptr_t fcn) { iFpLLpiiuuiiL_t fn = (iFpLLpiiuuiiL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(uintptr_t*)(R_RSP + 40)); } +void iFppippipppip(x64emu_t *emu, uintptr_t fcn) { iFppippipppip_t fn = (iFppippipppip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40)); } +void iFppuupLiupii(x64emu_t *emu, uintptr_t fcn) { iFppuupLiupii_t fn = (iFppuupLiupii_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(int32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } +void iFppuppLLpupp(x64emu_t *emu, uintptr_t fcn) { iFppuppLLpupp_t fn = (iFppuppLLpupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } +void iFpppiiuuiiuu(x64emu_t *emu, uintptr_t fcn) { iFpppiiuuiiuu_t fn = (iFpppiiuuiiuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40)); } +void iFpppippppppp(x64emu_t *emu, uintptr_t fcn) { iFpppippppppp_t fn = (iFpppippppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } +void iFpppppiiuupp(x64emu_t *emu, uintptr_t fcn) { iFpppppiiuupp_t fn = (iFpppppiiuupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } +void uFEpLuupppLuV(x64emu_t *emu, uintptr_t fcn) { uFEpLuupppLuV_t fn = (uFEpLuupppLuV_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), (void*)(R_RSP + 32)); } +void uFEpLuppppLup(x64emu_t *emu, uintptr_t fcn) { uFEpLuppppLup_t fn = (uFEpLuppppLup_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void uFEpLuppppLuA(x64emu_t *emu, uintptr_t fcn) { uFEpLuppppLuA_t fn = (uFEpLuppppLuA_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } +void uFEppppppuppp(x64emu_t *emu, uintptr_t fcn) { uFEppppppuppp_t fn = (uFEppppppuppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); } void uFppppppppppp(x64emu_t *emu, uintptr_t fcn) { uFppppppppppp_t fn = (uFppppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } void pFEpipppppppi(x64emu_t *emu, uintptr_t fcn) { pFEpipppppppi_t fn = (pFEpipppppppi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32)); } void pFEppiiLpppip(x64emu_t *emu, uintptr_t fcn) { pFEppiiLpppip_t fn = (pFEppiiLpppip_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32)); } @@ -6162,59 +6571,59 @@ void pFppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFppppppppppp_t fn = (pFppppp void iWEpuipuppppp(x64emu_t *emu, uintptr_t fcn) { iWEpuipuppppp_t fn = (iWEpuipuppppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RCX, (uint32_t)R_RDX, (int32_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80)); } void iWEpuuiiuippu(x64emu_t *emu, uintptr_t fcn) { iWEpuuiiuippu_t fn = (iWEpuuiiuippu_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RCX, (uint32_t)R_RDX, (uint32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(uint32_t*)(R_RSP + 80)); } void iWEpuuuuuiipp(x64emu_t *emu, uintptr_t fcn) { iWEpuuuuuiipp_t fn = (iWEpuuuuuiipp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RCX, (uint32_t)R_RDX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80)); } -void vFuiiiiiiiiuLC(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiiuLC_t fn = (vFuiiiiiiiiuLC_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uintptr_t*)(R_RSP + 40), *(uint8_t*)(R_RSP + 48)); } +void vFuiiiiiiiiuUC(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiiuUC_t fn = (vFuiiiiiiiiuUC_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint64_t*)(R_RSP + 40), *(uint8_t*)(R_RSP + 48)); } void vFuiiiiiiiuuip(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiuuip_t fn = (vFuiiiiiiiuuip_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); } -void vFuuiiiiiiiiui(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiiiiui_t fn = (vFuuiiiiiiiiui_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } void vFuuiiiiiiiiuu(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiiiiuu_t fn = (vFuuiiiiiiiiuu_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48)); } void vFuuiiiiiiiuip(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiiiuip_t fn = (vFuuiiiiiiiuip_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); } void vFuuiiiiiiiuup(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiiiuup_t fn = (vFuuiiiiiiiuup_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); } void vFuuuuuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuuuuuuu_t fn = (vFuuuuuuuuuuuu_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48)); } void vFffffffffffff(x64emu_t *emu, uintptr_t fcn) { vFffffffffffff_t fn = (vFffffffffffff_t)fcn; fn(emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0], emu->xmm[6].f[0], emu->xmm[7].f[0], *(float*)(R_RSP + 8), *(float*)(R_RSP + 16), *(float*)(R_RSP + 24), *(float*)(R_RSP + 32)); } -void vFpipppiiiipii(x64emu_t *emu, uintptr_t fcn) { vFpipppiiiipii_t fn = (vFpipppiiiipii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } -void vFpippppiiiipi(x64emu_t *emu, uintptr_t fcn) { vFpippppiiiipi_t fn = (vFpippppiiiipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } +void vFpiLLpiiiipii(x64emu_t *emu, uintptr_t fcn) { vFpiLLpiiiipii_t fn = (vFpiLLpiiiipii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } +void vFpiLLpLiiiipi(x64emu_t *emu, uintptr_t fcn) { vFpiLLpLiiiipi_t fn = (vFpiLLpLiiiipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } +void vFpiLpLiiiipui(x64emu_t *emu, uintptr_t fcn) { vFpiLpLiiiipui_t fn = (vFpiLpLiiiipui_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } void vFpupppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpupppppppppp_t fn = (vFpupppppppppp_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } +void vFpLiiuuuiupLp(x64emu_t *emu, uintptr_t fcn) { vFpLiiuuuiupLp_t fn = (vFpLiiuuuiupLp_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(uintptr_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); } void vFppiiiiddddii(x64emu_t *emu, uintptr_t fcn) { vFppiiiiddddii_t fn = (vFppiiiiddddii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } -void vFppiiuuuiupup(x64emu_t *emu, uintptr_t fcn) { vFppiiuuuiupup_t fn = (vFppiiuuuiupup_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); } void vFppiipppiiiii(x64emu_t *emu, uintptr_t fcn) { vFppiipppiiiii_t fn = (vFppiipppiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } void vFppuuppuiiiii(x64emu_t *emu, uintptr_t fcn) { vFppuuppuiiiii_t fn = (vFppuuppuiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } void vFppuupppiiiiu(x64emu_t *emu, uintptr_t fcn) { vFppuupppiiiiu_t fn = (vFppuupppiiiiu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48)); } -void vFpppiiiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFpppiiiiiiiii_t fn = (vFpppiiiiiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } void vFpppiiiiiiuii(x64emu_t *emu, uintptr_t fcn) { vFpppiiiiiiuii_t fn = (vFpppiiiiiiuii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } void vFpppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppppppppppp_t fn = (vFpppppppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } -void iFEpppippppppp(x64emu_t *emu, uintptr_t fcn) { iFEpppippppppp_t fn = (iFEpppippppppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } -void iFEppppiiiiuui(x64emu_t *emu, uintptr_t fcn) { iFEppppiiiiuui_t fn = (iFEppppiiiiuui_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } -void iFpipllipppppp(x64emu_t *emu, uintptr_t fcn) { iFpipllipppppp_t fn = (iFpipllipppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } -void iFpipppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpipppppppppp_t fn = (iFpipppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } -void iFpCCCWCWCCCWp(x64emu_t *emu, uintptr_t fcn) { iFpCCCWCWCCCWp_t fn = (iFpCCCWCWCCCWp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX, (uint16_t)R_R8, (uint8_t)R_R9, *(uint16_t*)(R_RSP + 8), *(uint8_t*)(R_RSP + 16), *(uint8_t*)(R_RSP + 24), *(uint8_t*)(R_RSP + 32), *(uint16_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); } -void iFpLLlliLppppp(x64emu_t *emu, uintptr_t fcn) { iFpLLlliLppppp_t fn = (iFpLLlliLppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } -void iFpppllipppppp(x64emu_t *emu, uintptr_t fcn) { iFpppllipppppp_t fn = (iFpppllipppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } -void iFpppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppp_t fn = (iFpppppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } -void pFEppiiuuuipii(x64emu_t *emu, uintptr_t fcn) { pFEppiiuuuipii_t fn = (pFEppiiuuuipii_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } +void iFEpLppiiiiuui(x64emu_t *emu, uintptr_t fcn) { iFEpLppiiiiuui_t fn = (iFEpLppiiiiuui_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } +void iFEpppuppppppp(x64emu_t *emu, uintptr_t fcn) { iFEpppuppppppp_t fn = (iFEpppuppppppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } +void iFpiLlliLppppp(x64emu_t *emu, uintptr_t fcn) { iFpiLlliLppppp_t fn = (iFpiLlliLppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } +void iFpiLppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpiLppppppppp_t fn = (iFpiLppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } +void iFpCCCWCWCCCWp(x64emu_t *emu, uintptr_t fcn) { iFpCCCWCWCCCWp_t fn = (iFpCCCWCWCCCWp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX, (uint16_t)R_R8, (uint8_t)R_R9, *(uint16_t*)(R_RSP + 8), *(uint8_t*)(R_RSP + 16), *(uint8_t*)(R_RSP + 24), *(uint8_t*)(R_RSP + 32), *(uint16_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); } +void iFpLLlliLppppp(x64emu_t *emu, uintptr_t fcn) { iFpLLlliLppppp_t fn = (iFpLLlliLppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } +void iFpLpuuLpLpppL(x64emu_t *emu, uintptr_t fcn) { iFpLpuuLpLpppL_t fn = (iFpLpuuLpLpppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uintptr_t)R_R9, *(void**)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(uintptr_t*)(R_RSP + 48)); } +void iFpLpppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpLpppppppppp_t fn = (iFpLpppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } +void iFppLlliLppppp(x64emu_t *emu, uintptr_t fcn) { iFppLlliLppppp_t fn = (iFppLlliLppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (int32_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } +void iFpppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppp_t fn = (iFpppppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } +void LFpLiiuuuiupLp(x64emu_t *emu, uintptr_t fcn) { LFpLiiuuuiupLp_t fn = (LFpLiiuuuiupLp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(uintptr_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); } +void pFEpLiiuuLipii(x64emu_t *emu, uintptr_t fcn) { pFEpLiiuuLipii_t fn = (pFEpLiiuuLipii_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40)); } void pFEppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFEppppppppppp_t fn = (pFEppppppppppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40)); } void pFWWiCCCCiipup(x64emu_t *emu, uintptr_t fcn) { pFWWiCCCCiipup_t fn = (pFWWiCCCCiipup_t)fcn; R_RAX=(uintptr_t)fn((uint16_t)R_RDI, (uint16_t)R_RSI, (int32_t)R_RDX, (uint8_t)R_RCX, (uint8_t)R_R8, (uint8_t)R_R9, *(uint8_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); } -void pFppiiuuuiupLp(x64emu_t *emu, uintptr_t fcn) { pFppiiuuuiupLp_t fn = (pFppiiuuuiupLp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(uintptr_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); } void pFppippLLLiLpp(x64emu_t *emu, uintptr_t fcn) { pFppippLLLiLpp_t fn = (pFppippLLLiLpp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(uintptr_t*)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } void pFppuuppppuppp(x64emu_t *emu, uintptr_t fcn) { pFppuuppppuppp_t fn = (pFppuuppppuppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } void pFpppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpppppppppppp_t fn = (pFpppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } void pFbCuuWWwwCCup(x64emu_t *emu, uintptr_t fcn) { pFbCuuWWwwCCup_t fn = (pFbCuuWWwwCCup_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (uint8_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint16_t)R_R8, (uint16_t)R_R9, *(int16_t*)(R_RSP + 8), *(int16_t*)(R_RSP + 16), *(uint8_t*)(R_RSP + 24), *(uint8_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void pFbuuuWWWWWWWW(x64emu_t *emu, uintptr_t fcn) { pFbuuuWWWWWWWW_t fn = (pFbuuuWWWWWWWW_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint16_t)R_R8, (uint16_t)R_R9, *(uint16_t*)(R_RSP + 8), *(uint16_t*)(R_RSP + 16), *(uint16_t*)(R_RSP + 24), *(uint16_t*)(R_RSP + 32), *(uint16_t*)(R_RSP + 40), *(uint16_t*)(R_RSP + 48)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } -void vFEpppppppiippp(x64emu_t *emu, uintptr_t fcn) { vFEpppppppiippp_t fn = (vFEpppppppiippp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } +void vFEpppppppuippp(x64emu_t *emu, uintptr_t fcn) { vFEpppppppuippp_t fn = (vFEpppppppuippp_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } void vFuiiiiiiiiiuup(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiiiuup_t fn = (vFuiiiiiiiiiuup_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(void**)(R_RSP + 56)); } void vFuuuuuuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuuuuuuuu_t fn = (vFuuuuuuuuuuuuu_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(uint32_t*)(R_RSP + 56)); } +void vFuUuuuuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFuUuuuuuuuuuuu_t fn = (vFuUuuuuuuuuuuu_t)fcn; fn((uint32_t)R_RDI, (uint64_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(uint32_t*)(R_RSP + 56)); } void vFuffffffffffff(x64emu_t *emu, uintptr_t fcn) { vFuffffffffffff_t fn = (vFuffffffffffff_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0], emu->xmm[6].f[0], emu->xmm[7].f[0], *(float*)(R_RSP + 8), *(float*)(R_RSP + 16), *(float*)(R_RSP + 24), *(float*)(R_RSP + 32)); } -void vFuLuuuuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFuLuuuuuuuuuuu_t fn = (vFuLuuuuuuuuuuu_t)fcn; fn((uint32_t)R_RDI, (uintptr_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(uint32_t*)(R_RSP + 56)); } -void vFpipppiiiiiiuu(x64emu_t *emu, uintptr_t fcn) { vFpipppiiiiiiuu_t fn = (vFpipppiiiiiiuu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(uint32_t*)(R_RSP + 56)); } +void vFpiLLLiiiiiiuu(x64emu_t *emu, uintptr_t fcn) { vFpiLLLiiiiiiuu_t fn = (vFpiLLLiiiiiiuu_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(uint32_t*)(R_RSP + 56)); } void vFpippppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpippppppppppp_t fn = (vFpippppppppppp_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } -void vFpuppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpuppppppppppp_t fn = (vFpuppppppppppp_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } -void vFppiiiiiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFppiiiiiiiiiii_t fn = (vFppiiiiiiiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56)); } +void vFpLppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpLppppppppppp_t fn = (vFpLppppppppppp_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } void vFppiiiiiiuiuii(x64emu_t *emu, uintptr_t fcn) { vFppiiiiiiuiuii_t fn = (vFppiiiiiiuiuii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56)); } void vFppuuppiiiiuii(x64emu_t *emu, uintptr_t fcn) { vFppuuppiiiiuii_t fn = (vFppuuppiiiiuii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56)); } void vFppuupppuiiiii(x64emu_t *emu, uintptr_t fcn) { vFppuupppuiiiii_t fn = (vFppuupppuiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56)); } void vFppppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFppppppppppppp_t fn = (vFppppppppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } -void iFddddpppddpppp(x64emu_t *emu, uintptr_t fcn) { iFddddpppddpppp_t fn = (iFddddpppddpppp_t)fcn; R_RAX=(int32_t)fn(emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, emu->xmm[4].d[0], emu->xmm[5].d[0], (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } -void iFpippuuuiipppp(x64emu_t *emu, uintptr_t fcn) { iFpippuuuiipppp_t fn = (iFpippuuuiipppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } -void iFpupiiiipppppp(x64emu_t *emu, uintptr_t fcn) { iFpupiiiipppppp_t fn = (iFpupiiiipppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } -void iFppppppLLLLupp(x64emu_t *emu, uintptr_t fcn) { iFppppppLLLLupp_t fn = (iFppppppLLLLupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24), *(uintptr_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } +void iFddddpppddpppp(x64emu_t *emu, uintptr_t fcn) { iFddddpppddpppp_t fn = (iFddddpppddpppp_t)fcn; R_RAX=(uint32_t)fn(emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, emu->xmm[4].d[0], emu->xmm[5].d[0], (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFpippuuuiipppp(x64emu_t *emu, uintptr_t fcn) { iFpippuuuiipppp_t fn = (iFpippuuuiipppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } +void iFpLLlliiLppppp(x64emu_t *emu, uintptr_t fcn) { iFpLLlliiLppppp_t fn = (iFpLLlliiLppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (intptr_t)R_RCX, (intptr_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } +void iFppppppLLLLupp(x64emu_t *emu, uintptr_t fcn) { iFppppppLLLLupp_t fn = (iFppppppLLLLupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24), *(uintptr_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } void uFippuuuulllipp(x64emu_t *emu, uintptr_t fcn) { uFippuuuulllipp_t fn = (uFippuuuulllipp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(intptr_t*)(R_RSP + 16), *(intptr_t*)(R_RSP + 24), *(intptr_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } void uFpppppuupppppp(x64emu_t *emu, uintptr_t fcn) { uFpppppuupppppp_t fn = (uFpppppuupppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56)); } void uFbCuuwwWWWWuup(x64emu_t *emu, uintptr_t fcn) { uFbCuuwwWWWWuup_t fn = (uFbCuuwwWWWWuup_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint8_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int16_t)R_R8, (int16_t)R_R9, *(uint16_t*)(R_RSP + 8), *(uint16_t*)(R_RSP + 16), *(uint16_t*)(R_RSP + 24), *(uint16_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(void**)(R_RSP + 56)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } @@ -6227,9 +6636,9 @@ void vFuffiiffiiffiip(x64emu_t *emu, uintptr_t fcn) { vFuffiiffiiffiip_t fn = (v void vFuddiiddiiddiip(x64emu_t *emu, uintptr_t fcn) { vFuddiiddiiddiip_t fn = (vFuddiiddiiddiip_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], (int32_t)R_RSI, (int32_t)R_RDX, emu->xmm[2].d[0], emu->xmm[3].d[0], (int32_t)R_RCX, (int32_t)R_R8, emu->xmm[4].d[0], emu->xmm[5].d[0], (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); } void vFppiipppiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFppiipppiiiiiii_t fn = (vFppiipppiiiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64)); } void vFppuupppiiiiuii(x64emu_t *emu, uintptr_t fcn) { vFppuupppiiiiuii_t fn = (vFppuupppiiiiuii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64)); } -void iFpipppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpipppppppppppp_t fn = (iFpipppppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64)); } -void iFppupppLLLLpupp(x64emu_t *emu, uintptr_t fcn) { iFppupppLLLLpupp_t fn = (iFppupppLLLLpupp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24), *(uintptr_t*)(R_RSP + 32), *(void**)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64)); } -void iFpppwwWWwwWWpuu(x64emu_t *emu, uintptr_t fcn) { iFpppwwWWwwWWpuu_t fn = (iFpppwwWWwwWWpuu_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int16_t)R_RCX, (int16_t)R_R8, (uint16_t)R_R9, *(uint16_t*)(R_RSP + 8), *(int16_t*)(R_RSP + 16), *(int16_t*)(R_RSP + 24), *(uint16_t*)(R_RSP + 32), *(uint16_t*)(R_RSP + 40), *(void**)(R_RSP + 48), *(uint32_t*)(R_RSP + 56), *(uint32_t*)(R_RSP + 64)); } +void iFpipppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpipppppppppppp_t fn = (iFpipppppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64)); } +void iFppupppLLLLpupp(x64emu_t *emu, uintptr_t fcn) { iFppupppLLLLpupp_t fn = (iFppupppLLLLpupp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8), *(uintptr_t*)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24), *(uintptr_t*)(R_RSP + 32), *(void**)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64)); } +void iFpppwwWWwwWWpuu(x64emu_t *emu, uintptr_t fcn) { iFpppwwWWwwWWpuu_t fn = (iFpppwwWWwwWWpuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int16_t)R_RCX, (int16_t)R_R8, (uint16_t)R_R9, *(uint16_t*)(R_RSP + 8), *(int16_t*)(R_RSP + 16), *(int16_t*)(R_RSP + 24), *(uint16_t*)(R_RSP + 32), *(uint16_t*)(R_RSP + 40), *(void**)(R_RSP + 48), *(uint32_t*)(R_RSP + 56), *(uint32_t*)(R_RSP + 64)); } void pFbpCpppwwwwwwWW(x64emu_t *emu, uintptr_t fcn) { pFbpCpppwwwwwwWW_t fn = (pFbpCpppwwwwwwWW_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (void*)R_RSI, (uint8_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int16_t*)(R_RSP + 8), *(int16_t*)(R_RSP + 16), *(int16_t*)(R_RSP + 24), *(int16_t*)(R_RSP + 32), *(int16_t*)(R_RSP + 40), *(int16_t*)(R_RSP + 48), *(uint16_t*)(R_RSP + 56), *(uint16_t*)(R_RSP + 64)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void vFuiiiiiuiiiiilll(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiuiiiiilll_t fn = (vFuiiiiiuiiiiilll_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(intptr_t*)(R_RSP + 56), *(intptr_t*)(R_RSP + 64), *(intptr_t*)(R_RSP + 72)); } void vFuuiiiiuuiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiuuiiiiiii_t fn = (vFuuiiiiuuiiiiiii_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(int32_t*)(R_RSP + 72)); } @@ -6239,13 +6648,15 @@ void vFpppippppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppippppppppppp_t fn = void vFppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFppppppppppppppp_t fn = (vFppppppppppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72)); } void pFpuiippppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpuiippppppppppp_t fn = (pFpuiippppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72)); } void pFppipppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFppipppppppppppp_t fn = (pFppipppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72)); } +void pFppupppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFppupppppppppppp_t fn = (pFppupppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72)); } void pFppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFppppppppppppppp_t fn = (pFppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72)); } void vFpppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppppppppppppppp_t fn = (vFpppppppppppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80)); } -void iFpppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppp_t fn = (iFpppppppppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80)); } +void iFpppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppp_t fn = (iFpppppppppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80)); } +void pFpipppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpipppppppppppppp_t fn = (pFpipppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80)); } void pFppipipipipipipip(x64emu_t *emu, uintptr_t fcn) { pFppipipipipipipip_t fn = (pFppipipipipipipip_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(void**)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(void**)(R_RSP + 64), *(int32_t*)(R_RSP + 72), *(void**)(R_RSP + 80)); } +void pFppupupupupupupup(x64emu_t *emu, uintptr_t fcn) { pFppupupupupupupup_t fn = (pFppupupupupupupup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(void**)(R_RSP + 48), *(uint32_t*)(R_RSP + 56), *(void**)(R_RSP + 64), *(uint32_t*)(R_RSP + 72), *(void**)(R_RSP + 80)); } void pFpppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpppppppppppppppp_t fn = (pFpppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80)); } void pFbuuWWWWWWwwCCCuu(x64emu_t *emu, uintptr_t fcn) { pFbuuWWWWWWwwCCCuu_t fn = (pFbuuWWWWWWwwCCCuu_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint16_t)R_RCX, (uint16_t)R_R8, (uint16_t)R_R9, *(uint16_t*)(R_RSP + 8), *(uint16_t*)(R_RSP + 16), *(uint16_t*)(R_RSP + 24), *(int16_t*)(R_RSP + 32), *(int16_t*)(R_RSP + 40), *(uint8_t*)(R_RSP + 48), *(uint8_t*)(R_RSP + 56), *(uint8_t*)(R_RSP + 64), *(uint32_t*)(R_RSP + 72), *(uint32_t*)(R_RSP + 80)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } -void vFuuuiiiiiuiiiiilll(x64emu_t *emu, uintptr_t fcn) { vFuuuiiiiiuiiiiilll_t fn = (vFuuuiiiiiuiiiiilll_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(intptr_t*)(R_RSP + 72), *(intptr_t*)(R_RSP + 80), *(intptr_t*)(R_RSP + 88)); } void vFuuuuiiiiuuiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFuuuuiiiiuuiiiiiii_t fn = (vFuuuuiiiiuuiiiiiii_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(int32_t*)(R_RSP + 72), *(int32_t*)(R_RSP + 80), *(int32_t*)(R_RSP + 88)); } void vFppiiiiddddiiiiiuu(x64emu_t *emu, uintptr_t fcn) { vFppiiiiddddiiiiiuu_t fn = (vFppiiiiddddiiiiiuu_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(uint32_t*)(R_RSP + 56)); } void vFpppuppiipppuUUUpi(x64emu_t *emu, uintptr_t fcn) { vFpppuppiipppuUUUpi_t fn = (vFpppuppiipppuUUUpi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(uint64_t*)(R_RSP + 56), *(uint64_t*)(R_RSP + 64), *(uint64_t*)(R_RSP + 72), *(void**)(R_RSP + 80), *(int32_t*)(R_RSP + 88)); } @@ -6253,81 +6664,110 @@ void pFppippipipipipipip(x64emu_t *emu, uintptr_t fcn) { pFppippipipipipipip_t f void pFbuuuuuwwuuuuUUUup(x64emu_t *emu, uintptr_t fcn) { pFbuuuuuwwuuuuUUUup_t fn = (pFbuuuuuwwuuuuUUUup_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uintptr_t)fn(aligned_xcb, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(int16_t*)(R_RSP + 8), *(int16_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(uint64_t*)(R_RSP + 56), *(uint64_t*)(R_RSP + 64), *(uint64_t*)(R_RSP + 72), *(uint32_t*)(R_RSP + 80), *(void**)(R_RSP + 88)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void vFppuiiiiipuiiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFppuiiiiipuiiiiiiii_t fn = (vFppuiiiiipuiiiiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24), *(uint32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(int32_t*)(R_RSP + 72), *(int32_t*)(R_RSP + 80), *(int32_t*)(R_RSP + 88), *(int32_t*)(R_RSP + 96)); } void vFpppipppppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppipppppppppppppp_t fn = (vFpppipppppppppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); } -void iFpppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppppp_t fn = (iFpppppppppppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); } +void iFpppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppppp_t fn = (iFpppppppppppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); } void LFpppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { LFpppppppppppppppppp_t fn = (LFpppppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); } void pFippppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFippppppppppppppppp_t fn = (pFippppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); } void pFpupppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpupppppppppppppppp_t fn = (pFpupppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); } void vFpiiiiiiiiiiiiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFpiiiiiiiiiiiiiiiiii_t fn = (vFpiiiiiiiiiiiiiiiiii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(int32_t*)(R_RSP + 72), *(int32_t*)(R_RSP + 80), *(int32_t*)(R_RSP + 88), *(int32_t*)(R_RSP + 96), *(int32_t*)(R_RSP + 104)); } void uFbWWWCCCCCCCCWCCCCCC(x64emu_t *emu, uintptr_t fcn) { uFbWWWCCCCCCCCWCCCCCC_t fn = (uFbWWWCCCCCCCCWCCCCCC_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint16_t)R_RSI, (uint16_t)R_RDX, (uint16_t)R_RCX, (uint8_t)R_R8, (uint8_t)R_R9, *(uint8_t*)(R_RSP + 8), *(uint8_t*)(R_RSP + 16), *(uint8_t*)(R_RSP + 24), *(uint8_t*)(R_RSP + 32), *(uint8_t*)(R_RSP + 40), *(uint8_t*)(R_RSP + 48), *(uint16_t*)(R_RSP + 56), *(uint8_t*)(R_RSP + 64), *(uint8_t*)(R_RSP + 72), *(uint8_t*)(R_RSP + 80), *(uint8_t*)(R_RSP + 88), *(uint8_t*)(R_RSP + 96), *(uint8_t*)(R_RSP + 104)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void pFiiiippppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFiiiippppppppppppppp_t fn = (pFiiiippppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104)); } -void pFpippppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpippppppppppppppppp_t fn = (pFpippppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104)); } +void pFppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFppppppppppppppppppp_t fn = (pFppppppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104)); } void pFpupupppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpupupppppppppppppppp_t fn = (pFpupupppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112)); } -void iFpppppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppppppppp_t fn = (iFpppppppppppppppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128)); } +void iFpppppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppppppppp_t fn = (iFpppppppppppppppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128)); } void uFippuuuuiiiiuuiiiiiiiipp(x64emu_t *emu, uintptr_t fcn) { uFippuuuuiiiiuuiiiiiiiipp_t fn = (uFippuuuuiiiiuuiiiiiiiipp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(uint32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(int32_t*)(R_RSP + 72), *(int32_t*)(R_RSP + 80), *(int32_t*)(R_RSP + 88), *(int32_t*)(R_RSP + 96), *(int32_t*)(R_RSP + 104), *(int32_t*)(R_RSP + 112), *(int32_t*)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136)); } void vFpppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppppppppppppppppppppppp_t fn = (vFpppppppppppppppppppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136), *(void**)(R_RSP + 144)); } void pFpupuupppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpupuupppppppppppppppppppp_t fn = (pFpupuupppppppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136), *(void**)(R_RSP + 144), *(void**)(R_RSP + 152)); } -void iFpppppppppppppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppppppppppppppppppppp_t fn = (iFpppppppppppppppppppppppppppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136), *(void**)(R_RSP + 144), *(void**)(R_RSP + 152), *(void**)(R_RSP + 160), *(void**)(R_RSP + 168), *(void**)(R_RSP + 176), *(void**)(R_RSP + 184), *(void**)(R_RSP + 192), *(void**)(R_RSP + 200), *(void**)(R_RSP + 208), *(void**)(R_RSP + 216), *(void**)(R_RSP + 224)); } +void iFpppppppppppppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppppppppppppppppppppp_t fn = (iFpppppppppppppppppppppppppppppppppp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136), *(void**)(R_RSP + 144), *(void**)(R_RSP + 152), *(void**)(R_RSP + 160), *(void**)(R_RSP + 168), *(void**)(R_RSP + 176), *(void**)(R_RSP + 184), *(void**)(R_RSP + 192), *(void**)(R_RSP + 200), *(void**)(R_RSP + 208), *(void**)(R_RSP + 216), *(void**)(R_RSP + 224)); } -#if defined(HAVE_LD80BITS) +#ifdef HAVE_LD80BITS +void iFD(x64emu_t *emu, uintptr_t fcn) { iFD_t fn = (iFD_t)fcn; R_RAX=(uint32_t)fn(LD2localLD((void*)(R_RSP + 8))); } void DFD(x64emu_t *emu, uintptr_t fcn) { DFD_t fn = (DFD_t)fcn; long double ld=fn(LD2localLD((void*)(R_RSP + 8))); fpu_do_push(emu); ST0val = ld; } void DFY(x64emu_t *emu, uintptr_t fcn) { DFY_t fn = (DFY_t)fcn; long double ld=fn(to_complexl(emu, R_RSP + 8)); fpu_do_push(emu); ST0val = ld; } void lFD(x64emu_t *emu, uintptr_t fcn) { lFD_t fn = (lFD_t)fcn; R_RAX=(intptr_t)fn(LD2localLD((void*)(R_RSP + 8))); } void YFY(x64emu_t *emu, uintptr_t fcn) { YFY_t fn = (YFY_t)fcn; from_complexl(emu, fn(to_complexl(emu, R_RSP + 8))); } -void IFED(x64emu_t *emu, uintptr_t fcn) { IFED_t fn = (IFED_t)fcn; R_RAX=(int64_t)fn(emu, LD2localLD((void*)(R_RSP + 8))); } +void IFED(x64emu_t *emu, uintptr_t fcn) { IFED_t fn = (IFED_t)fcn; S_RAX=(int64_t)fn(emu, LD2localLD((void*)(R_RSP + 8))); } +void fFfD(x64emu_t *emu, uintptr_t fcn) { fFfD_t fn = (fFfD_t)fcn; emu->xmm[0].f[0]=fn(emu->xmm[0].f[0], LD2localLD((void*)(R_RSP + 8))); } +void dFdD(x64emu_t *emu, uintptr_t fcn) { dFdD_t fn = (dFdD_t)fcn; emu->xmm[0].d[0]=fn(emu->xmm[0].d[0], LD2localLD((void*)(R_RSP + 8))); } void DFiD(x64emu_t *emu, uintptr_t fcn) { DFiD_t fn = (DFiD_t)fcn; long double ld=fn((int32_t)R_RDI, LD2localLD((void*)(R_RSP + 8))); fpu_do_push(emu); ST0val = ld; } +void DFDi(x64emu_t *emu, uintptr_t fcn) { DFDi_t fn = (DFDi_t)fcn; long double ld=fn(LD2localLD((void*)(R_RSP + 8)), (int32_t)R_RDI); fpu_do_push(emu); ST0val = ld; } +void DFDD(x64emu_t *emu, uintptr_t fcn) { DFDD_t fn = (DFDD_t)fcn; long double ld=fn(LD2localLD((void*)(R_RSP + 8)), LD2localLD((void*)(R_RSP + 24))); fpu_do_push(emu); ST0val = ld; } +void DFDp(x64emu_t *emu, uintptr_t fcn) { DFDp_t fn = (DFDp_t)fcn; long double ld=fn(LD2localLD((void*)(R_RSP + 8)), (void*)R_RDI); fpu_do_push(emu); ST0val = ld; } +void DFpp(x64emu_t *emu, uintptr_t fcn) { DFpp_t fn = (DFpp_t)fcn; long double ld=fn((void*)R_RDI, (void*)R_RSI); fpu_do_push(emu); ST0val = ld; } void lFDD(x64emu_t *emu, uintptr_t fcn) { lFDD_t fn = (lFDD_t)fcn; R_RAX=(intptr_t)fn(LD2localLD((void*)(R_RSP + 8)), LD2localLD((void*)(R_RSP + 24))); } void YFYY(x64emu_t *emu, uintptr_t fcn) { YFYY_t fn = (YFYY_t)fcn; from_complexl(emu, fn(to_complexl(emu, R_RSP + 8), to_complexl(emu, R_RSP + 40))); } void vFDpp(x64emu_t *emu, uintptr_t fcn) { vFDpp_t fn = (vFDpp_t)fcn; fn(LD2localLD((void*)(R_RSP + 8)), (void*)R_RDI, (void*)R_RSI); } void DFDDD(x64emu_t *emu, uintptr_t fcn) { DFDDD_t fn = (DFDDD_t)fcn; long double ld=fn(LD2localLD((void*)(R_RSP + 8)), LD2localLD((void*)(R_RSP + 24)), LD2localLD((void*)(R_RSP + 40))); fpu_do_push(emu); ST0val = ld; } -#endif - -#if !defined(HAVE_LD80BITS) -void KFK(x64emu_t *emu, uintptr_t fcn) { KFK_t fn = (KFK_t)fcn; double db=fn(FromLD((void*)(R_RSP + 8))); fpu_do_push(emu); ST0val = db; } -void KFy(x64emu_t *emu, uintptr_t fcn) { KFy_t fn = (KFy_t)fcn; double db=fn(to_complexk(emu, R_RSP + 8)); fpu_do_push(emu); ST0val = db; } -void lFK(x64emu_t *emu, uintptr_t fcn) { lFK_t fn = (lFK_t)fcn; R_RAX=(intptr_t)fn(FromLD((void*)(R_RSP + 8))); } -void yFy(x64emu_t *emu, uintptr_t fcn) { yFy_t fn = (yFy_t)fcn; from_complexk(emu, fn(to_complexk(emu, R_RSP + 8))); } -void IFEK(x64emu_t *emu, uintptr_t fcn) { IFEK_t fn = (IFEK_t)fcn; R_RAX=(int64_t)fn(emu, FromLD((void*)(R_RSP + 8))); } -void KFiK(x64emu_t *emu, uintptr_t fcn) { KFiK_t fn = (KFiK_t)fcn; double db=fn((int32_t)R_RDI, FromLD((void*)(R_RSP + 8))); fpu_do_push(emu); ST0val = db; } -void KFKK(x64emu_t *emu, uintptr_t fcn) { KFKK_t fn = (KFKK_t)fcn; double db=fn(FromLD((void*)(R_RSP + 8)), FromLD((void*)(R_RSP + 24))); fpu_do_push(emu); ST0val = db; } -void KFKp(x64emu_t *emu, uintptr_t fcn) { KFKp_t fn = (KFKp_t)fcn; double db=fn(FromLD((void*)(R_RSP + 8)), (void*)R_RDI); fpu_do_push(emu); ST0val = db; } -void lFKK(x64emu_t *emu, uintptr_t fcn) { lFKK_t fn = (lFKK_t)fcn; R_RAX=(intptr_t)fn(FromLD((void*)(R_RSP + 8)), FromLD((void*)(R_RSP + 24))); } -void yFyy(x64emu_t *emu, uintptr_t fcn) { yFyy_t fn = (yFyy_t)fcn; from_complexk(emu, fn(to_complexk(emu, R_RSP + 8), to_complexk(emu, R_RSP + 40))); } -void vFKpp(x64emu_t *emu, uintptr_t fcn) { vFKpp_t fn = (vFKpp_t)fcn; fn(FromLD((void*)(R_RSP + 8)), (void*)R_RDI, (void*)R_RSI); } -void KFKKK(x64emu_t *emu, uintptr_t fcn) { KFKKK_t fn = (KFKKK_t)fcn; double db=fn(FromLD((void*)(R_RSP + 8)), FromLD((void*)(R_RSP + 24)), FromLD((void*)(R_RSP + 40))); fpu_do_push(emu); ST0val = db; } +void DFppi(x64emu_t *emu, uintptr_t fcn) { DFppi_t fn = (DFppi_t)fcn; long double ld=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); fpu_do_push(emu); ST0val = ld; } +void DFppp(x64emu_t *emu, uintptr_t fcn) { DFppp_t fn = (DFppp_t)fcn; long double ld=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); fpu_do_push(emu); ST0val = ld; } +void pFDip(x64emu_t *emu, uintptr_t fcn) { pFDip_t fn = (pFDip_t)fcn; R_RAX=(uintptr_t)fn(LD2localLD((void*)(R_RSP + 8)), (int32_t)R_RDI, (void*)R_RSI); } +void iFpLpD(x64emu_t *emu, uintptr_t fcn) { iFpLpD_t fn = (iFpLpD_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, LD2localLD((void*)(R_RSP + 8))); } +void pFDipp(x64emu_t *emu, uintptr_t fcn) { pFDipp_t fn = (pFDipp_t)fcn; R_RAX=(uintptr_t)fn(LD2localLD((void*)(R_RSP + 8)), (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFDipppL(x64emu_t *emu, uintptr_t fcn) { iFDipppL_t fn = (iFDipppL_t)fcn; R_RAX=(uint32_t)fn(LD2localLD((void*)(R_RSP + 8)), (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } +void vFppippDpDc(x64emu_t *emu, uintptr_t fcn) { vFppippDpDc_t fn = (vFppippDpDc_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, LD2localLD((void*)(R_RSP + 8)), (void*)R_R9, LD2localLD((void*)(R_RSP + 24)), *(int8_t*)(R_RSP + 40)); } +#else // HAVE_LD80BITS +void iFD(x64emu_t *emu, uintptr_t fcn) { iFD_t fn = (iFD_t)fcn; R_RAX=(uint32_t)fn(FromLD((void*)(R_RSP + 8))); } +void DFD(x64emu_t *emu, uintptr_t fcn) { DFD_t fn = (DFD_t)fcn; double db=fn(FromLD((void*)(R_RSP + 8))); fpu_do_push(emu); ST0val = db; } +void DFY(x64emu_t *emu, uintptr_t fcn) { DFY_t fn = (DFY_t)fcn; double db=fn(to_complexk(emu, R_RSP + 8)); fpu_do_push(emu); ST0val = db; } +void lFD(x64emu_t *emu, uintptr_t fcn) { lFD_t fn = (lFD_t)fcn; R_RAX=(intptr_t)fn(FromLD((void*)(R_RSP + 8))); } +void YFY(x64emu_t *emu, uintptr_t fcn) { YFY_t fn = (YFY_t)fcn; from_complexk(emu, fn(to_complexk(emu, R_RSP + 8))); } +void IFED(x64emu_t *emu, uintptr_t fcn) { IFED_t fn = (IFED_t)fcn; S_RAX=(int64_t)fn(emu, FromLD((void*)(R_RSP + 8))); } +void fFfD(x64emu_t *emu, uintptr_t fcn) { fFfD_t fn = (fFfD_t)fcn; emu->xmm[0].f[0]=fn(emu->xmm[0].f[0], FromLD((void*)(R_RSP + 8))); } +void dFdD(x64emu_t *emu, uintptr_t fcn) { dFdD_t fn = (dFdD_t)fcn; emu->xmm[0].d[0]=fn(emu->xmm[0].d[0], FromLD((void*)(R_RSP + 8))); } +void DFiD(x64emu_t *emu, uintptr_t fcn) { DFiD_t fn = (DFiD_t)fcn; double db=fn((int32_t)R_RDI, FromLD((void*)(R_RSP + 8))); fpu_do_push(emu); ST0val = db; } +void DFDi(x64emu_t *emu, uintptr_t fcn) { DFDi_t fn = (DFDi_t)fcn; double db=fn(FromLD((void*)(R_RSP + 8)), (int32_t)R_RDI); fpu_do_push(emu); ST0val = db; } +void DFDD(x64emu_t *emu, uintptr_t fcn) { DFDD_t fn = (DFDD_t)fcn; double db=fn(FromLD((void*)(R_RSP + 8)), FromLD((void*)(R_RSP + 24))); fpu_do_push(emu); ST0val = db; } +void DFDp(x64emu_t *emu, uintptr_t fcn) { DFDp_t fn = (DFDp_t)fcn; double db=fn(FromLD((void*)(R_RSP + 8)), (void*)R_RDI); fpu_do_push(emu); ST0val = db; } +void DFpp(x64emu_t *emu, uintptr_t fcn) { DFpp_t fn = (DFpp_t)fcn; double db=fn((void*)R_RDI, (void*)R_RSI); fpu_do_push(emu); ST0val = db; } +void lFDD(x64emu_t *emu, uintptr_t fcn) { lFDD_t fn = (lFDD_t)fcn; R_RAX=(intptr_t)fn(FromLD((void*)(R_RSP + 8)), FromLD((void*)(R_RSP + 24))); } +void YFYY(x64emu_t *emu, uintptr_t fcn) { YFYY_t fn = (YFYY_t)fcn; from_complexk(emu, fn(to_complexk(emu, R_RSP + 8), to_complexk(emu, R_RSP + 40))); } +void vFDpp(x64emu_t *emu, uintptr_t fcn) { vFDpp_t fn = (vFDpp_t)fcn; fn(FromLD((void*)(R_RSP + 8)), (void*)R_RDI, (void*)R_RSI); } +void DFDDD(x64emu_t *emu, uintptr_t fcn) { DFDDD_t fn = (DFDDD_t)fcn; double db=fn(FromLD((void*)(R_RSP + 8)), FromLD((void*)(R_RSP + 24)), FromLD((void*)(R_RSP + 40))); fpu_do_push(emu); ST0val = db; } +void DFppi(x64emu_t *emu, uintptr_t fcn) { DFppi_t fn = (DFppi_t)fcn; double db=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); fpu_do_push(emu); ST0val = db; } +void DFppp(x64emu_t *emu, uintptr_t fcn) { DFppp_t fn = (DFppp_t)fcn; double db=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); fpu_do_push(emu); ST0val = db; } +void pFDip(x64emu_t *emu, uintptr_t fcn) { pFDip_t fn = (pFDip_t)fcn; R_RAX=(uintptr_t)fn(FromLD((void*)(R_RSP + 8)), (int32_t)R_RDI, (void*)R_RSI); } +void iFpLpD(x64emu_t *emu, uintptr_t fcn) { iFpLpD_t fn = (iFpLpD_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, FromLD((void*)(R_RSP + 8))); } +void pFDipp(x64emu_t *emu, uintptr_t fcn) { pFDipp_t fn = (pFDipp_t)fcn; R_RAX=(uintptr_t)fn(FromLD((void*)(R_RSP + 8)), (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX); } +void iFDipppL(x64emu_t *emu, uintptr_t fcn) { iFDipppL_t fn = (iFDipppL_t)fcn; R_RAX=(uint32_t)fn(FromLD((void*)(R_RSP + 8)), (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } +void vFppippDpDc(x64emu_t *emu, uintptr_t fcn) { vFppippDpDc_t fn = (vFppippDpDc_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, FromLD((void*)(R_RSP + 8)), (void*)R_R9, FromLD((void*)(R_RSP + 24)), *(int8_t*)(R_RSP + 40)); } #endif #if defined(NOALIGN) -void iFipiip(x64emu_t *emu, uintptr_t fcn) { iFipiip_t fn = (iFipiip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFipiip(x64emu_t *emu, uintptr_t fcn) { iFipiip_t fn = (iFipiip_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } #endif #if !defined(NOALIGN) -void iFEppu(x64emu_t *emu, uintptr_t fcn) { iFEppu_t fn = (iFEppu_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } -void iFEiiip(x64emu_t *emu, uintptr_t fcn) { iFEiiip_t fn = (iFEiiip_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } -void iFEipii(x64emu_t *emu, uintptr_t fcn) { iFEipii_t fn = (iFEipii_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } -void iFEipiip(x64emu_t *emu, uintptr_t fcn) { iFEipiip_t fn = (iFEipiip_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } +void iFELp(x64emu_t *emu, uintptr_t fcn) { iFELp_t fn = (iFELp_t)fcn; R_RAX=(uint32_t)fn(emu, (uintptr_t)R_RDI, (void*)R_RSI); } +void iFEppu(x64emu_t *emu, uintptr_t fcn) { iFEppu_t fn = (iFEppu_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } +void iFEiiip(x64emu_t *emu, uintptr_t fcn) { iFEiiip_t fn = (iFEiiip_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFEipii(x64emu_t *emu, uintptr_t fcn) { iFEipii_t fn = (iFEipii_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void iFEipiip(x64emu_t *emu, uintptr_t fcn) { iFEipiip_t fn = (iFEipiip_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } #endif #if !defined(STATICBUILD) -void iFlip(x64emu_t *emu, uintptr_t fcn) { iFlip_t fn = (iFlip_t)fcn; R_RAX=(int32_t)fn((intptr_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } -void iFLLi(x64emu_t *emu, uintptr_t fcn) { iFLLi_t fn = (iFLLi_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX); } -void iFLLiW(x64emu_t *emu, uintptr_t fcn) { iFLLiW_t fn = (iFLLiW_t)fcn; R_RAX=(int32_t)fn((uintptr_t)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (uint16_t)R_RCX); } -void iFEipup(x64emu_t *emu, uintptr_t fcn) { iFEipup_t fn = (iFEipup_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } -void iFEiipup(x64emu_t *emu, uintptr_t fcn) { iFEiipup_t fn = (iFEiipup_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFpipppL(x64emu_t *emu, uintptr_t fcn) { iFpipppL_t fn = (iFpipppL_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } +void lFiN(x64emu_t *emu, uintptr_t fcn) { lFiN_t fn = (lFiN_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI); } +void iFlip(x64emu_t *emu, uintptr_t fcn) { iFlip_t fn = (iFlip_t)fcn; R_RAX=(uint32_t)fn((intptr_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX); } +void iFLLi(x64emu_t *emu, uintptr_t fcn) { iFLLi_t fn = (iFLLi_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX); } +void iFLLii(x64emu_t *emu, uintptr_t fcn) { iFLLii_t fn = (iFLLii_t)fcn; R_RAX=(uint32_t)fn((uintptr_t)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } +void WFpLLu(x64emu_t *emu, uintptr_t fcn) { WFpLLu_t fn = (WFpLLu_t)fcn; R_RAX=(unsigned short)fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX); } +void iFEipup(x64emu_t *emu, uintptr_t fcn) { iFEipup_t fn = (iFEipup_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void iFEiipup(x64emu_t *emu, uintptr_t fcn) { iFEiipup_t fn = (iFEiipup_t)fcn; R_RAX=(uint32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFpipppL(x64emu_t *emu, uintptr_t fcn) { iFpipppL_t fn = (iFpipppL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uintptr_t)R_R9); } +void lFpLpdddddd(x64emu_t *emu, uintptr_t fcn) { lFpLpdddddd_t fn = (lFpLpdddddd_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], emu->xmm[4].d[0], emu->xmm[5].d[0]); } #endif void vFEv(x64emu_t *emu, uintptr_t fcn) { vFE_t fn = (vFE_t)fcn; fn(emu); } -void iFEv(x64emu_t *emu, uintptr_t fcn) { iFE_t fn = (iFE_t)fcn; R_RAX=(int32_t)fn(emu); } +void iFEv(x64emu_t *emu, uintptr_t fcn) { iFE_t fn = (iFE_t)fcn; R_RAX=(uint32_t)fn(emu); } void lFEv(x64emu_t *emu, uintptr_t fcn) { lFE_t fn = (lFE_t)fcn; R_RAX=(intptr_t)fn(emu); } void pFEv(x64emu_t *emu, uintptr_t fcn) { pFE_t fn = (pFE_t)fcn; R_RAX=(uintptr_t)fn(emu); } -void iFEvpp(x64emu_t *emu, uintptr_t fcn) { iFEpp_t fn = (iFEpp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RSI, (void*)R_RDX); } +void iFEvpp(x64emu_t *emu, uintptr_t fcn) { iFEpp_t fn = (iFEpp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RSI, (void*)R_RDX); } void pFEppv(x64emu_t *emu, uintptr_t fcn) { pFEpp_t fn = (pFEpp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI); } -void iFEpvpp(x64emu_t *emu, uintptr_t fcn) { iFEppp_t fn = (iFEppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RDX, (void*)R_RCX); } -void iFEpvvppp(x64emu_t *emu, uintptr_t fcn) { iFEpppp_t fn = (iFEpppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } -void iFEpuvvppp(x64emu_t *emu, uintptr_t fcn) { iFEpuppp_t fn = (iFEpuppp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFEpvpp(x64emu_t *emu, uintptr_t fcn) { iFEppp_t fn = (iFEppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RDX, (void*)R_RCX); } +void iFEpvvppp(x64emu_t *emu, uintptr_t fcn) { iFEpppp_t fn = (iFEpppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } +void iFEpuvvppp(x64emu_t *emu, uintptr_t fcn) { iFEpuppp_t fn = (iFEpuppp_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } #if defined(ARM64) int isSimpleWrapper(wrapper_t fun) { + if (box64_is32bits) return 0; if (fun == &vFv) return 1; if (fun == &vFc) return 1; if (fun == &vFw) return 1; @@ -6342,19 +6782,20 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFL) return 1; if (fun == &vFp) return 1; if (fun == &cFv) return 1; + if (fun == &cFc) return 1; if (fun == &cFi) return 1; if (fun == &cFu) return 1; if (fun == &cFf) return 2; if (fun == &cFp) return 1; if (fun == &wFp) return 1; if (fun == &iFv) return 1; + if (fun == &iFc) return 1; if (fun == &iFw) return 1; if (fun == &iFi) return 1; if (fun == &iFI) return 1; if (fun == &iFC) return 1; if (fun == &iFW) return 1; if (fun == &iFu) return 1; - if (fun == &iFU) return 1; if (fun == &iFf) return 2; if (fun == &iFd) return 2; if (fun == &iFl) return 1; @@ -6368,9 +6809,9 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &IFp) return 1; if (fun == &CFv) return 1; if (fun == &CFi) return 1; - if (fun == &CFC) return 1; if (fun == &CFW) return 1; if (fun == &CFu) return 1; + if (fun == &CFU) return 1; if (fun == &CFl) return 1; if (fun == &CFL) return 1; if (fun == &CFp) return 1; @@ -6381,11 +6822,12 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &uFv) return 1; if (fun == &uFi) return 1; if (fun == &uFu) return 1; + if (fun == &uFU) return 1; if (fun == &uFd) return 2; - if (fun == &uFl) return 1; if (fun == &uFL) return 1; if (fun == &uFp) return 1; if (fun == &UFv) return 1; + if (fun == &UFi) return 1; if (fun == &UFu) return 1; if (fun == &UFp) return 1; if (fun == &fFi) return -1; @@ -6422,19 +6864,19 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFcc) return 1; if (fun == &vFww) return 1; if (fun == &vFii) return 1; + if (fun == &vFiI) return 1; if (fun == &vFiW) return 1; if (fun == &vFiu) return 1; if (fun == &vFiU) return 1; if (fun == &vFif) return 2; if (fun == &vFid) return 2; - if (fun == &vFil) return 1; - if (fun == &vFiL) return 1; if (fun == &vFip) return 1; if (fun == &vFWW) return 1; if (fun == &vFWp) return 1; if (fun == &vFuc) return 1; if (fun == &vFuw) return 1; if (fun == &vFui) return 1; + if (fun == &vFuI) return 1; if (fun == &vFuC) return 1; if (fun == &vFuW) return 1; if (fun == &vFuu) return 1; @@ -6444,7 +6886,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFul) return 1; if (fun == &vFuL) return 1; if (fun == &vFup) return 1; - if (fun == &vFUi) return 1; + if (fun == &vFUu) return 1; if (fun == &vFfi) return 2; if (fun == &vFfC) return 2; if (fun == &vFff) return 3; @@ -6475,8 +6917,8 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFiI) return 1; if (fun == &iFiC) return 1; if (fun == &iFiu) return 1; + if (fun == &iFiU) return 1; if (fun == &iFil) return 1; - if (fun == &iFiL) return 1; if (fun == &iFip) return 1; if (fun == &iFui) return 1; if (fun == &iFuu) return 1; @@ -6502,7 +6944,6 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpL) return 1; if (fun == &iFpp) return 1; if (fun == &IFip) return 1; - if (fun == &IFII) return 1; if (fun == &IFpi) return 1; if (fun == &IFpu) return 1; if (fun == &IFpd) return 2; @@ -6512,7 +6953,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &CFui) return 1; if (fun == &CFuW) return 1; if (fun == &CFuu) return 1; - if (fun == &CFuL) return 1; + if (fun == &CFuU) return 1; if (fun == &CFpi) return 1; if (fun == &CFpu) return 1; if (fun == &CFpL) return 1; @@ -6520,8 +6961,6 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &WFpi) return 1; if (fun == &WFpp) return 1; if (fun == &uFii) return 1; - if (fun == &uFiu) return 1; - if (fun == &uFip) return 1; if (fun == &uFui) return 1; if (fun == &uFuu) return 1; if (fun == &uFup) return 1; @@ -6534,6 +6973,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &uFpl) return 1; if (fun == &uFpL) return 1; if (fun == &uFpp) return 1; + if (fun == &UFii) return 1; if (fun == &UFuu) return 1; if (fun == &UFUp) return 1; if (fun == &UFpi) return 1; @@ -6555,15 +6995,16 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &dFpd) return -2; if (fun == &dFpp) return -1; if (fun == &lFii) return 1; + if (fun == &lFiL) return 1; if (fun == &lFip) return 1; if (fun == &lFui) return 1; if (fun == &lFll) return 1; if (fun == &lFpi) return 1; + if (fun == &lFpu) return 1; if (fun == &lFpd) return 2; if (fun == &lFpl) return 1; + if (fun == &lFpL) return 1; if (fun == &lFpp) return 1; - if (fun == &LFii) return 1; - if (fun == &LFuu) return 1; if (fun == &LFUp) return 1; if (fun == &LFLi) return 1; if (fun == &LFLL) return 1; @@ -6585,11 +7026,12 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFli) return 1; if (fun == &pFll) return 1; if (fun == &pFlp) return 1; + if (fun == &pFLc) return 1; if (fun == &pFLi) return 1; - if (fun == &pFLC) return 1; if (fun == &pFLu) return 1; if (fun == &pFLL) return 1; if (fun == &pFLp) return 1; + if (fun == &pFpc) return 1; if (fun == &pFpi) return 1; if (fun == &pFpC) return 1; if (fun == &pFpW) return 1; @@ -6604,16 +7046,16 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFiii) return 1; if (fun == &vFiif) return 2; if (fun == &vFiip) return 1; + if (fun == &vFiII) return 1; if (fun == &vFiui) return 1; if (fun == &vFiuu) return 1; - if (fun == &vFiuU) return 1; if (fun == &vFiup) return 1; + if (fun == &vFiUU) return 1; if (fun == &vFiff) return 3; if (fun == &vFidd) return 3; if (fun == &vFilu) return 1; if (fun == &vFill) return 1; if (fun == &vFilp) return 1; - if (fun == &vFiLL) return 1; if (fun == &vFipi) return 1; if (fun == &vFipu) return 1; if (fun == &vFipL) return 1; @@ -6623,13 +7065,13 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFucc) return 1; if (fun == &vFuww) return 1; if (fun == &vFuii) return 1; + if (fun == &vFuiI) return 1; if (fun == &vFuiu) return 1; if (fun == &vFuiU) return 1; if (fun == &vFuif) return 2; if (fun == &vFuid) return 2; - if (fun == &vFuil) return 1; - if (fun == &vFuiL) return 1; if (fun == &vFuip) return 1; + if (fun == &vFuII) return 1; if (fun == &vFuWW) return 1; if (fun == &vFuui) return 1; if (fun == &vFuuC) return 1; @@ -6637,14 +7079,13 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFuuU) return 1; if (fun == &vFuuf) return 2; if (fun == &vFuud) return 2; - if (fun == &vFuuL) return 1; if (fun == &vFuup) return 1; + if (fun == &vFuUU) return 1; if (fun == &vFuff) return 3; if (fun == &vFufp) return 2; if (fun == &vFudd) return 3; if (fun == &vFull) return 1; if (fun == &vFulp) return 1; - if (fun == &vFuLL) return 1; if (fun == &vFuLp) return 1; if (fun == &vFupu) return 1; if (fun == &vFupp) return 1; @@ -6659,6 +7100,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFLup) return 1; if (fun == &vFLpL) return 1; if (fun == &vFLpp) return 1; + if (fun == &vFpww) return 1; if (fun == &vFpic) return 1; if (fun == &vFpii) return 1; if (fun == &vFpiI) return 1; @@ -6671,11 +7113,13 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFpip) return 1; if (fun == &vFpui) return 1; if (fun == &vFpuI) return 1; + if (fun == &vFpuC) return 1; if (fun == &vFpuW) return 1; if (fun == &vFpuu) return 1; if (fun == &vFpuU) return 1; if (fun == &vFpuf) return 2; if (fun == &vFpud) return 2; + if (fun == &vFpul) return 1; if (fun == &vFpuL) return 1; if (fun == &vFpup) return 1; if (fun == &vFpUi) return 1; @@ -6711,6 +7155,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFiiu) return 1; if (fun == &iFiil) return 1; if (fun == &iFiip) return 1; + if (fun == &iFiII) return 1; if (fun == &iFiCC) return 1; if (fun == &iFiui) return 1; if (fun == &iFiuu) return 1; @@ -6738,6 +7183,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFupp) return 1; if (fun == &iFfff) return 4; if (fun == &iFLip) return 1; + if (fun == &iFLpL) return 1; if (fun == &iFLpp) return 1; if (fun == &iFpwp) return 1; if (fun == &iFpii) return 1; @@ -6750,7 +7196,6 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpil) return 1; if (fun == &iFpiL) return 1; if (fun == &iFpip) return 1; - if (fun == &iFpIi) return 1; if (fun == &iFpII) return 1; if (fun == &iFpCp) return 1; if (fun == &iFpWp) return 1; @@ -6791,9 +7236,10 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &IFppi) return 1; if (fun == &IFppI) return 1; if (fun == &CFipp) return 1; + if (fun == &CFuUu) return 1; if (fun == &CFuff) return 3; - if (fun == &CFuLu) return 1; if (fun == &CFppp) return 1; + if (fun == &WFpip) return 1; if (fun == &WFppp) return 1; if (fun == &uFiuu) return 1; if (fun == &uFilp) return 1; @@ -6816,10 +7262,12 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &uFpWp) return 1; if (fun == &uFpui) return 1; if (fun == &uFpuu) return 1; + if (fun == &uFpuU) return 1; if (fun == &uFpuL) return 1; if (fun == &uFpup) return 1; if (fun == &uFpfu) return 2; if (fun == &uFpli) return 1; + if (fun == &uFplu) return 1; if (fun == &uFpLu) return 1; if (fun == &uFpLL) return 1; if (fun == &uFpLp) return 1; @@ -6846,13 +7294,16 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &dFppu) return -1; if (fun == &dFppd) return -2; if (fun == &dFppp) return -1; + if (fun == &lFiIL) return 1; if (fun == &lFili) return 1; - if (fun == &lFilL) return 1; if (fun == &lFipi) return 1; if (fun == &lFipL) return 1; if (fun == &lFlll) return 1; + if (fun == &lFpup) return 1; if (fun == &lFpli) return 1; if (fun == &lFpLu) return 1; + if (fun == &lFpLd) return 2; + if (fun == &lFpLL) return 1; if (fun == &lFpLp) return 1; if (fun == &lFppi) return 1; if (fun == &lFppu) return 1; @@ -6866,10 +7317,13 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &LFLpu) return 1; if (fun == &LFLpL) return 1; if (fun == &LFpii) return 1; + if (fun == &LFpip) return 1; if (fun == &LFpCi) return 1; + if (fun == &LFpWp) return 1; if (fun == &LFpuL) return 1; if (fun == &LFpup) return 1; if (fun == &LFpLi) return 1; + if (fun == &LFpLC) return 1; if (fun == &LFpLL) return 1; if (fun == &LFpLp) return 1; if (fun == &LFppi) return 1; @@ -6906,6 +7360,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFLLp) return 1; if (fun == &pFLpi) return 1; if (fun == &pFLpp) return 1; + if (fun == &pFpcU) return 1; if (fun == &pFpii) return 1; if (fun == &pFpiu) return 1; if (fun == &pFpid) return 2; @@ -6913,19 +7368,18 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFpiL) return 1; if (fun == &pFpip) return 1; if (fun == &pFpCi) return 1; - if (fun == &pFpCu) return 1; if (fun == &pFpWi) return 1; if (fun == &pFpWW) return 1; if (fun == &pFpWp) return 1; if (fun == &pFpui) return 1; if (fun == &pFpuu) return 1; - if (fun == &pFpuL) return 1; + if (fun == &pFpuf) return 2; if (fun == &pFpup) return 1; if (fun == &pFpUi) return 1; if (fun == &pFpUu) return 1; if (fun == &pFpdu) return 2; if (fun == &pFpdd) return 3; - if (fun == &pFplC) return 1; + if (fun == &pFplc) return 1; if (fun == &pFplu) return 1; if (fun == &pFpll) return 1; if (fun == &pFplp) return 1; @@ -6933,12 +7387,13 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFpLu) return 1; if (fun == &pFpLL) return 1; if (fun == &pFpLp) return 1; + if (fun == &pFppc) return 1; if (fun == &pFppi) return 1; if (fun == &pFppI) return 1; - if (fun == &pFppC) return 1; if (fun == &pFppu) return 1; if (fun == &pFppU) return 1; if (fun == &pFppf) return 2; + if (fun == &pFppd) return 2; if (fun == &pFppl) return 1; if (fun == &pFppL) return 1; if (fun == &pFppp) return 1; @@ -6948,16 +7403,16 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFiiip) return 1; if (fun == &vFiiCp) return 1; if (fun == &vFiill) return 1; + if (fun == &vFiIII) return 1; if (fun == &vFiuip) return 1; if (fun == &vFiuuu) return 1; if (fun == &vFiulp) return 1; + if (fun == &vFiUUU) return 1; if (fun == &vFifff) return 4; if (fun == &vFiddd) return 4; if (fun == &vFilip) return 1; - if (fun == &vFilll) return 1; if (fun == &vFilpu) return 1; if (fun == &vFilpp) return 1; - if (fun == &vFiLLL) return 1; if (fun == &vFipii) return 1; if (fun == &vFipup) return 1; if (fun == &vFipll) return 1; @@ -6968,21 +7423,21 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFuccc) return 1; if (fun == &vFuwww) return 1; if (fun == &vFuiii) return 1; - if (fun == &vFuiiu) return 1; if (fun == &vFuiip) return 1; + if (fun == &vFuiII) return 1; if (fun == &vFuiui) return 1; if (fun == &vFuiuC) return 1; if (fun == &vFuiuu) return 1; if (fun == &vFuiup) return 1; + if (fun == &vFuiUU) return 1; if (fun == &vFuifi) return 2; if (fun == &vFuiff) return 3; if (fun == &vFuidd) return 3; - if (fun == &vFuill) return 1; if (fun == &vFuilp) return 1; - if (fun == &vFuiLL) return 1; if (fun == &vFuipi) return 1; if (fun == &vFuipu) return 1; if (fun == &vFuipp) return 1; + if (fun == &vFuIII) return 1; if (fun == &vFuWWW) return 1; if (fun == &vFuuii) return 1; if (fun == &vFuuiu) return 1; @@ -6996,24 +7451,21 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFuuud) return 2; if (fun == &vFuuul) return 1; if (fun == &vFuuup) return 1; + if (fun == &vFuuUl) return 1; if (fun == &vFuuff) return 3; if (fun == &vFuuli) return 1; - if (fun == &vFuulp) return 1; - if (fun == &vFuuLl) return 1; if (fun == &vFuupi) return 1; if (fun == &vFuupp) return 1; + if (fun == &vFuUui) return 1; + if (fun == &vFuUup) return 1; + if (fun == &vFuUUU) return 1; if (fun == &vFufff) return 4; if (fun == &vFuddd) return 4; - if (fun == &vFuluL) return 1; + if (fun == &vFuluU) return 1; if (fun == &vFullC) return 1; - if (fun == &vFulll) return 1; if (fun == &vFullp) return 1; - if (fun == &vFulpi) return 1; if (fun == &vFulpu) return 1; if (fun == &vFulpp) return 1; - if (fun == &vFuLui) return 1; - if (fun == &vFuLup) return 1; - if (fun == &vFuLLL) return 1; if (fun == &vFupii) return 1; if (fun == &vFuppi) return 1; if (fun == &vFuppu) return 1; @@ -7023,17 +7475,17 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFllii) return 1; if (fun == &vFLuui) return 1; if (fun == &vFLppi) return 1; + if (fun == &vFpwwu) return 1; if (fun == &vFpiii) return 1; if (fun == &vFpiiu) return 1; if (fun == &vFpiid) return 2; if (fun == &vFpiip) return 1; if (fun == &vFpiui) return 1; - if (fun == &vFpiuu) return 1; if (fun == &vFpiuL) return 1; if (fun == &vFpiup) return 1; if (fun == &vFpiUu) return 1; if (fun == &vFpiUU) return 1; - if (fun == &vFpifi) return 2; + if (fun == &vFpiLu) return 1; if (fun == &vFpipi) return 1; if (fun == &vFpipu) return 1; if (fun == &vFpipp) return 1; @@ -7059,10 +7511,13 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFpddu) return 3; if (fun == &vFpddd) return 4; if (fun == &vFplll) return 1; + if (fun == &vFpllL) return 1; if (fun == &vFplpp) return 1; if (fun == &vFpLii) return 1; if (fun == &vFpLuu) return 1; if (fun == &vFpLLL) return 1; + if (fun == &vFpLLp) return 1; + if (fun == &vFpLpi) return 1; if (fun == &vFpLpu) return 1; if (fun == &vFpLpL) return 1; if (fun == &vFpLpp) return 1; @@ -7089,33 +7544,37 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFpppl) return 1; if (fun == &vFpppL) return 1; if (fun == &vFpppp) return 1; + if (fun == &cFpiii) return 1; if (fun == &cFpipp) return 1; if (fun == &iFwwww) return 1; if (fun == &iFwppp) return 1; if (fun == &iFiiii) return 1; if (fun == &iFiiiu) return 1; if (fun == &iFiiip) return 1; + if (fun == &iFiiII) return 1; if (fun == &iFiiui) return 1; if (fun == &iFiill) return 1; if (fun == &iFiipi) return 1; if (fun == &iFiipp) return 1; + if (fun == &iFiIIi) return 1; + if (fun == &iFiIIu) return 1; if (fun == &iFiWii) return 1; if (fun == &iFiuwp) return 1; if (fun == &iFiuup) return 1; if (fun == &iFiupp) return 1; if (fun == &iFilli) return 1; - if (fun == &iFillu) return 1; if (fun == &iFiLpL) return 1; if (fun == &iFipii) return 1; if (fun == &iFipip) return 1; if (fun == &iFipWp) return 1; if (fun == &iFipui) return 1; - if (fun == &iFipuL) return 1; + if (fun == &iFipuU) return 1; if (fun == &iFipLi) return 1; if (fun == &iFipLu) return 1; if (fun == &iFipLp) return 1; if (fun == &iFippi) return 1; if (fun == &iFippu) return 1; + if (fun == &iFippl) return 1; if (fun == &iFippL) return 1; if (fun == &iFippp) return 1; if (fun == &iFuiup) return 1; @@ -7123,6 +7582,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFuWWp) return 1; if (fun == &iFuuuu) return 1; if (fun == &iFuupi) return 1; + if (fun == &iFuupu) return 1; if (fun == &iFuupp) return 1; if (fun == &iFupup) return 1; if (fun == &iFupLp) return 1; @@ -7134,6 +7594,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpwww) return 1; if (fun == &iFpwpp) return 1; if (fun == &iFpiii) return 1; + if (fun == &iFpiiC) return 1; if (fun == &iFpiiu) return 1; if (fun == &iFpiid) return 2; if (fun == &iFpiiL) return 1; @@ -7142,15 +7603,17 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpiuL) return 1; if (fun == &iFpiup) return 1; if (fun == &iFpiUp) return 1; + if (fun == &iFpili) return 1; if (fun == &iFpild) return 2; + if (fun == &iFpiLL) return 1; if (fun == &iFpipi) return 1; if (fun == &iFpipu) return 1; if (fun == &iFpipL) return 1; if (fun == &iFpipp) return 1; - if (fun == &iFpIip) return 1; if (fun == &iFpCCC) return 1; if (fun == &iFpCpi) return 1; if (fun == &iFpCpp) return 1; + if (fun == &iFpWWW) return 1; if (fun == &iFpWWu) return 1; if (fun == &iFpWpp) return 1; if (fun == &iFpuwp) return 1; @@ -7163,6 +7626,8 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpuuL) return 1; if (fun == &iFpuup) return 1; if (fun == &iFpuUp) return 1; + if (fun == &iFpufp) return 2; + if (fun == &iFpuLi) return 1; if (fun == &iFpuLL) return 1; if (fun == &iFpuLp) return 1; if (fun == &iFpupi) return 1; @@ -7173,17 +7638,20 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpupp) return 1; if (fun == &iFpUip) return 1; if (fun == &iFpUup) return 1; + if (fun == &iFpUUu) return 1; if (fun == &iFpUUU) return 1; if (fun == &iFpULp) return 1; if (fun == &iFpUpp) return 1; if (fun == &iFpdip) return 2; if (fun == &iFplii) return 1; if (fun == &iFplip) return 1; + if (fun == &iFpllp) return 1; if (fun == &iFplpi) return 1; if (fun == &iFplpp) return 1; if (fun == &iFpLii) return 1; if (fun == &iFpLiL) return 1; if (fun == &iFpLip) return 1; + if (fun == &iFpLui) return 1; if (fun == &iFpLuu) return 1; if (fun == &iFpLup) return 1; if (fun == &iFpLlp) return 1; @@ -7191,6 +7659,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpLLL) return 1; if (fun == &iFpLLp) return 1; if (fun == &iFpLpi) return 1; + if (fun == &iFpLpu) return 1; if (fun == &iFpLpf) return 2; if (fun == &iFpLpd) return 2; if (fun == &iFpLpL) return 1; @@ -7214,6 +7683,8 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpplL) return 1; if (fun == &iFpplp) return 1; if (fun == &iFppLi) return 1; + if (fun == &iFppLu) return 1; + if (fun == &iFppLl) return 1; if (fun == &iFppLL) return 1; if (fun == &iFppLp) return 1; if (fun == &iFpppi) return 1; @@ -7221,36 +7692,38 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpppu) return 1; if (fun == &iFpppL) return 1; if (fun == &iFpppp) return 1; - if (fun == &IFipUI) return 1; - if (fun == &IFipUp) return 1; if (fun == &IFpIip) return 1; if (fun == &IFppii) return 1; if (fun == &IFppip) return 1; if (fun == &CFuuff) return 3; - if (fun == &CFpiii) return 1; if (fun == &CFpLLi) return 1; if (fun == &CFppip) return 1; if (fun == &uFiiii) return 1; if (fun == &uFiiuu) return 1; if (fun == &uFifff) return 4; if (fun == &uFuuuu) return 1; + if (fun == &uFuppd) return 2; + if (fun == &uFLppp) return 1; if (fun == &uFpiip) return 1; if (fun == &uFpipu) return 1; if (fun == &uFpipL) return 1; if (fun == &uFpipp) return 1; if (fun == &uFpCCC) return 1; - if (fun == &uFpuip) return 1; if (fun == &uFpuup) return 1; if (fun == &uFpupi) return 1; if (fun == &uFpupu) return 1; if (fun == &uFpupp) return 1; + if (fun == &uFplup) return 1; + if (fun == &uFppii) return 1; if (fun == &uFppiu) return 1; if (fun == &uFppip) return 1; if (fun == &uFppuu) return 1; + if (fun == &uFppup) return 1; if (fun == &uFpplp) return 1; if (fun == &uFppLp) return 1; if (fun == &uFpppi) return 1; if (fun == &uFpppu) return 1; + if (fun == &uFpppd) return 2; if (fun == &uFpppL) return 1; if (fun == &uFpppp) return 1; if (fun == &UFpUui) return 1; @@ -7259,6 +7732,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &dFpppp) return -1; if (fun == &lFiiLu) return 1; if (fun == &lFiipL) return 1; + if (fun == &lFipiI) return 1; if (fun == &lFipil) return 1; if (fun == &lFipLi) return 1; if (fun == &lFipLI) return 1; @@ -7271,10 +7745,14 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &lFpilp) return 1; if (fun == &lFpuip) return 1; if (fun == &lFplip) return 1; + if (fun == &lFplup) return 1; + if (fun == &lFplpi) return 1; if (fun == &lFplpp) return 1; if (fun == &lFpLpp) return 1; if (fun == &lFppii) return 1; if (fun == &lFppip) return 1; + if (fun == &lFpplp) return 1; + if (fun == &lFppLp) return 1; if (fun == &lFpppL) return 1; if (fun == &lFpppp) return 1; if (fun == &LFipLL) return 1; @@ -7284,7 +7762,9 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &LFpCii) return 1; if (fun == &LFpupL) return 1; if (fun == &LFpLCL) return 1; + if (fun == &LFpLuu) return 1; if (fun == &LFpLLp) return 1; + if (fun == &LFpLpi) return 1; if (fun == &LFpLpL) return 1; if (fun == &LFpLpp) return 1; if (fun == &LFppii) return 1; @@ -7301,17 +7781,19 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFiiup) return 1; if (fun == &pFiiLp) return 1; if (fun == &pFiipi) return 1; + if (fun == &pFiipp) return 1; if (fun == &pFiIIi) return 1; if (fun == &pFillu) return 1; - if (fun == &pFipii) return 1; if (fun == &pFipip) return 1; if (fun == &pFippi) return 1; if (fun == &pFippu) return 1; + if (fun == &pFippl) return 1; if (fun == &pFippL) return 1; if (fun == &pFippp) return 1; if (fun == &pFuuii) return 1; if (fun == &pFuuip) return 1; if (fun == &pFuuuu) return 1; + if (fun == &pFuddd) return 4; if (fun == &pFullu) return 1; if (fun == &pFupii) return 1; if (fun == &pFuppp) return 1; @@ -7329,6 +7811,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFpiuu) return 1; if (fun == &pFpiLi) return 1; if (fun == &pFpiLL) return 1; + if (fun == &pFpipc) return 1; if (fun == &pFpipi) return 1; if (fun == &pFpipd) return 2; if (fun == &pFpipL) return 1; @@ -7384,19 +7867,18 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFiiuup) return 1; if (fun == &vFiillu) return 1; if (fun == &vFiilll) return 1; - if (fun == &vFiipii) return 1; if (fun == &vFiipll) return 1; + if (fun == &vFiIIII) return 1; if (fun == &vFiuiip) return 1; if (fun == &vFiuipi) return 1; if (fun == &vFiuuuu) return 1; if (fun == &vFiulpp) return 1; + if (fun == &vFiUUUU) return 1; if (fun == &vFiffff) return 5; if (fun == &vFidddd) return 5; if (fun == &vFilill) return 1; if (fun == &vFilipi) return 1; if (fun == &vFilipl) return 1; - if (fun == &vFillll) return 1; - if (fun == &vFiLLLL) return 1; if (fun == &vFipipu) return 1; if (fun == &vFipipp) return 1; if (fun == &vFipupi) return 1; @@ -7408,6 +7890,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFuiiCp) return 1; if (fun == &vFuiiup) return 1; if (fun == &vFuiill) return 1; + if (fun == &vFuiIII) return 1; if (fun == &vFuiuii) return 1; if (fun == &vFuiuip) return 1; if (fun == &vFuiuCi) return 1; @@ -7415,20 +7898,19 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFuiuuu) return 1; if (fun == &vFuiuup) return 1; if (fun == &vFuiupi) return 1; + if (fun == &vFuiUUU) return 1; if (fun == &vFuifff) return 4; if (fun == &vFuiddd) return 4; - if (fun == &vFuilll) return 1; - if (fun == &vFuiLLL) return 1; if (fun == &vFuipii) return 1; if (fun == &vFuipip) return 1; if (fun == &vFuipup) return 1; if (fun == &vFuippp) return 1; + if (fun == &vFuIIII) return 1; if (fun == &vFuCCCC) return 1; if (fun == &vFuCuip) return 1; if (fun == &vFuCuup) return 1; if (fun == &vFuWWWW) return 1; if (fun == &vFuuiii) return 1; - if (fun == &vFuuiiu) return 1; if (fun == &vFuuiip) return 1; if (fun == &vFuuiui) return 1; if (fun == &vFuuiuu) return 1; @@ -7450,12 +7932,10 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFuullp) return 1; if (fun == &vFuupii) return 1; if (fun == &vFuuppu) return 1; + if (fun == &vFuUUUU) return 1; if (fun == &vFuffff) return 5; if (fun == &vFudddd) return 5; - if (fun == &vFulill) return 1; - if (fun == &vFullll) return 1; if (fun == &vFullpu) return 1; - if (fun == &vFuLLLL) return 1; if (fun == &vFupiii) return 1; if (fun == &vFupupi) return 1; if (fun == &vFupupp) return 1; @@ -7468,6 +7948,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFluipp) return 1; if (fun == &vFLpppi) return 1; if (fun == &vFLpppp) return 1; + if (fun == &vFpwwWW) return 1; if (fun == &vFpiiii) return 1; if (fun == &vFpiiiI) return 1; if (fun == &vFpiiiu) return 1; @@ -7484,6 +7965,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFpiUUp) return 1; if (fun == &vFpilpp) return 1; if (fun == &vFpipii) return 1; + if (fun == &vFpipiu) return 1; if (fun == &vFpippi) return 1; if (fun == &vFpippp) return 1; if (fun == &vFpuiip) return 1; @@ -7506,13 +7988,19 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFpddii) return 3; if (fun == &vFpdddd) return 5; if (fun == &vFpddpp) return 3; + if (fun == &vFpliip) return 1; if (fun == &vFpluul) return 1; if (fun == &vFplppp) return 1; + if (fun == &vFpLiii) return 1; + if (fun == &vFpLiiL) return 1; if (fun == &vFpLLLL) return 1; if (fun == &vFpLLpp) return 1; if (fun == &vFpLpiL) return 1; + if (fun == &vFpLppi) return 1; + if (fun == &vFppiic) return 1; if (fun == &vFppiii) return 1; if (fun == &vFppiiu) return 1; + if (fun == &vFppiiL) return 1; if (fun == &vFppiip) return 1; if (fun == &vFppiui) return 1; if (fun == &vFppiup) return 1; @@ -7550,12 +8038,12 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFiiipu) return 1; if (fun == &iFiiipp) return 1; if (fun == &iFiiupp) return 1; + if (fun == &iFiippp) return 1; if (fun == &iFiuuuu) return 1; if (fun == &iFiuuup) return 1; - if (fun == &iFiuLip) return 1; + if (fun == &iFiuUip) return 1; if (fun == &iFillLL) return 1; if (fun == &iFipiii) return 1; - if (fun == &iFipiup) return 1; if (fun == &iFipipi) return 1; if (fun == &iFipipu) return 1; if (fun == &iFipuip) return 1; @@ -7566,7 +8054,9 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFippLp) return 1; if (fun == &iFipppi) return 1; if (fun == &iFipppp) return 1; + if (fun == &iFuiuup) return 1; if (fun == &iFuuupp) return 1; + if (fun == &iFuupid) return 2; if (fun == &iFuppLp) return 1; if (fun == &iFLppip) return 1; if (fun == &iFLpppp) return 1; @@ -7583,13 +8073,17 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpiIip) return 1; if (fun == &iFpiuwp) return 1; if (fun == &iFpiuuu) return 1; + if (fun == &iFpiuLi) return 1; if (fun == &iFpiUUU) return 1; + if (fun == &iFpiLip) return 1; + if (fun == &iFpiLuu) return 1; if (fun == &iFpipii) return 1; if (fun == &iFpipiu) return 1; if (fun == &iFpipiL) return 1; if (fun == &iFpipip) return 1; if (fun == &iFpippi) return 1; if (fun == &iFpippW) return 1; + if (fun == &iFpippL) return 1; if (fun == &iFpippp) return 1; if (fun == &iFpCCCC) return 1; if (fun == &iFpCupp) return 1; @@ -7598,19 +8092,21 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpuipi) return 1; if (fun == &iFpuipp) return 1; if (fun == &iFpuuip) return 1; - if (fun == &iFpuuui) return 1; if (fun == &iFpuuup) return 1; if (fun == &iFpuuLL) return 1; if (fun == &iFpuuLp) return 1; if (fun == &iFpuupp) return 1; if (fun == &iFpulup) return 1; if (fun == &iFpulpp) return 1; + if (fun == &iFpuLup) return 1; if (fun == &iFpuLpL) return 1; if (fun == &iFpuLpp) return 1; if (fun == &iFpupui) return 1; if (fun == &iFpupuu) return 1; if (fun == &iFpupuU) return 1; if (fun == &iFpupup) return 1; + if (fun == &iFpupLu) return 1; + if (fun == &iFpuppu) return 1; if (fun == &iFpuppL) return 1; if (fun == &iFpuppp) return 1; if (fun == &iFpUiUi) return 1; @@ -7620,10 +8116,11 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpLiup) return 1; if (fun == &iFpLilp) return 1; if (fun == &iFpLiLi) return 1; + if (fun == &iFpLipi) return 1; + if (fun == &iFpLuLi) return 1; if (fun == &iFpLlpp) return 1; if (fun == &iFpLLii) return 1; if (fun == &iFpLLup) return 1; - if (fun == &iFpLLpp) return 1; if (fun == &iFpLpii) return 1; if (fun == &iFpLpiL) return 1; if (fun == &iFpLpuL) return 1; @@ -7632,6 +8129,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpLppi) return 1; if (fun == &iFpLppL) return 1; if (fun == &iFpLppp) return 1; + if (fun == &iFppiii) return 1; if (fun == &iFppiiu) return 1; if (fun == &iFppiiL) return 1; if (fun == &iFppiip) return 1; @@ -7641,6 +8139,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFppiLL) return 1; if (fun == &iFppipi) return 1; if (fun == &iFppipu) return 1; + if (fun == &iFppipl) return 1; if (fun == &iFppipp) return 1; if (fun == &iFppuwp) return 1; if (fun == &iFppuip) return 1; @@ -7653,27 +8152,32 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpplii) return 1; if (fun == &iFppllp) return 1; if (fun == &iFpplpp) return 1; + if (fun == &iFppLiL) return 1; if (fun == &iFppLup) return 1; + if (fun == &iFppLLi) return 1; if (fun == &iFppLpi) return 1; if (fun == &iFppLpL) return 1; if (fun == &iFppLpp) return 1; if (fun == &iFpppii) return 1; if (fun == &iFpppip) return 1; if (fun == &iFpppui) return 1; + if (fun == &iFpppuu) return 1; if (fun == &iFpppup) return 1; if (fun == &iFpppUi) return 1; if (fun == &iFpppLi) return 1; + if (fun == &iFpppLu) return 1; if (fun == &iFpppLL) return 1; if (fun == &iFpppLp) return 1; if (fun == &iFppppi) return 1; if (fun == &iFppppu) return 1; + if (fun == &iFppppd) return 2; if (fun == &iFppppl) return 1; if (fun == &iFppppL) return 1; if (fun == &iFppppp) return 1; if (fun == &IFppIII) return 1; if (fun == &uFiuuuu) return 1; if (fun == &uFiuppi) return 1; - if (fun == &uFipipp) return 1; + if (fun == &uFipupp) return 1; if (fun == &uFipLpp) return 1; if (fun == &uFuiiii) return 1; if (fun == &uFLpppL) return 1; @@ -7688,10 +8192,13 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &uFppuup) return 1; if (fun == &uFppupp) return 1; if (fun == &uFpplip) return 1; + if (fun == &uFpplpp) return 1; if (fun == &uFppLpp) return 1; + if (fun == &uFpppip) return 1; if (fun == &uFppppL) return 1; if (fun == &uFppppp) return 1; - if (fun == &UFuiiii) return 1; + if (fun == &UFuiCiu) return 1; + if (fun == &lFipiIi) return 1; if (fun == &lFipili) return 1; if (fun == &lFipLli) return 1; if (fun == &lFipLlL) return 1; @@ -7700,24 +8207,25 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &lFpuipC) return 1; if (fun == &lFpuuLL) return 1; if (fun == &lFppupp) return 1; - if (fun == &lFppllp) return 1; if (fun == &lFppLpL) return 1; if (fun == &lFppLpp) return 1; - if (fun == &LFuiCiu) return 1; + if (fun == &LFuuuuu) return 1; if (fun == &LFLpppL) return 1; if (fun == &LFpuipp) return 1; - if (fun == &LFpuppi) return 1; + if (fun == &LFpuupi) return 1; if (fun == &LFpLuuu) return 1; if (fun == &LFpLLLp) return 1; if (fun == &LFpLpuu) return 1; + if (fun == &LFpLpLp) return 1; if (fun == &LFpLppL) return 1; if (fun == &LFpLppp) return 1; if (fun == &LFppLLp) return 1; if (fun == &LFppLpL) return 1; if (fun == &LFpppii) return 1; + if (fun == &LFppppi) return 1; if (fun == &LFppppp) return 1; if (fun == &pFiiiii) return 1; - if (fun == &pFiiipL) return 1; + if (fun == &pFiiupL) return 1; if (fun == &pFipipL) return 1; if (fun == &pFipipp) return 1; if (fun == &pFuiiiu) return 1; @@ -7742,6 +8250,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFpiuup) return 1; if (fun == &pFpiupp) return 1; if (fun == &pFpiLip) return 1; + if (fun == &pFpipii) return 1; if (fun == &pFpipip) return 1; if (fun == &pFpipup) return 1; if (fun == &pFpippi) return 1; @@ -7760,6 +8269,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFpdddd) return 5; if (fun == &pFplppp) return 1; if (fun == &pFpLiii) return 1; + if (fun == &pFpLipp) return 1; if (fun == &pFpLLip) return 1; if (fun == &pFpLLLp) return 1; if (fun == &pFpLpii) return 1; @@ -7771,6 +8281,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFppiup) return 1; if (fun == &pFppipi) return 1; if (fun == &pFppipp) return 1; + if (fun == &pFppCip) return 1; if (fun == &pFppWpp) return 1; if (fun == &pFppuip) return 1; if (fun == &pFppuuu) return 1; @@ -7798,32 +8309,30 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFiddidd) return 5; if (fun == &vFilipli) return 1; if (fun == &vFiliplu) return 1; - if (fun == &vFillill) return 1; if (fun == &vFipiplp) return 1; if (fun == &vFCCCCff) return 3; if (fun == &vFuiiiii) return 1; if (fun == &vFuiiiip) return 1; if (fun == &vFuiiuii) return 1; if (fun == &vFuiiuup) return 1; + if (fun == &vFuiIIII) return 1; if (fun == &vFuiuiii) return 1; if (fun == &vFuiuiiC) return 1; if (fun == &vFuiuiil) return 1; if (fun == &vFuiuiip) return 1; if (fun == &vFuiuiuu) return 1; - if (fun == &vFuiuiuL) return 1; + if (fun == &vFuiuiuU) return 1; if (fun == &vFuiuCip) return 1; if (fun == &vFuiuuip) return 1; if (fun == &vFuiuuuu) return 1; if (fun == &vFuiupii) return 1; if (fun == &vFuiupiu) return 1; + if (fun == &vFuiUUUU) return 1; if (fun == &vFuiffff) return 5; if (fun == &vFuidddd) return 5; - if (fun == &vFuillll) return 1; - if (fun == &vFuiLLLL) return 1; if (fun == &vFuipiup) return 1; if (fun == &vFuCuuip) return 1; if (fun == &vFuuiiii) return 1; - if (fun == &vFuuiiiu) return 1; if (fun == &vFuuiuii) return 1; if (fun == &vFuuiuil) return 1; if (fun == &vFuuiuip) return 1; @@ -7849,8 +8358,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFuffiip) return 3; if (fun == &vFufffff) return 6; if (fun == &vFuddiip) return 3; - if (fun == &vFullill) return 1; - if (fun == &vFulluLC) return 1; + if (fun == &vFulluUC) return 1; if (fun == &vFupiiii) return 1; if (fun == &vFupupip) return 1; if (fun == &vFuppppu) return 1; @@ -7859,14 +8367,16 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFffffff) return 7; if (fun == &vFdddddd) return 7; if (fun == &vFdddppp) return 4; + if (fun == &vFpwwllc) return 1; if (fun == &vFpiiiii) return 1; if (fun == &vFpiiipp) return 1; if (fun == &vFpiiuuu) return 1; + if (fun == &vFpiilli) return 1; if (fun == &vFpiippi) return 1; if (fun == &vFpiippp) return 1; if (fun == &vFpiUuup) return 1; + if (fun == &vFpiLppi) return 1; if (fun == &vFpipipp) return 1; - if (fun == &vFpipppi) return 1; if (fun == &vFpipppp) return 1; if (fun == &vFpuiiii) return 1; if (fun == &vFpuiiiu) return 1; @@ -7889,11 +8399,15 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFpdddii) return 4; if (fun == &vFpddddd) return 6; if (fun == &vFpddddp) return 5; + if (fun == &vFpLiiii) return 1; + if (fun == &vFpLiiiL) return 1; + if (fun == &vFpLiipi) return 1; + if (fun == &vFpLLLLu) return 1; if (fun == &vFpLpLLL) return 1; + if (fun == &vFpLpppi) return 1; if (fun == &vFppiiii) return 1; - if (fun == &vFppiiip) return 1; + if (fun == &vFppiiiu) return 1; if (fun == &vFppiiuu) return 1; - if (fun == &vFppiipi) return 1; if (fun == &vFppiipp) return 1; if (fun == &vFppilpp) return 1; if (fun == &vFppipLp) return 1; @@ -7918,8 +8432,11 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFpppiui) return 1; if (fun == &vFpppiff) return 3; if (fun == &vFpppipu) return 1; + if (fun == &vFpppipp) return 1; if (fun == &vFpppuii) return 1; + if (fun == &vFpppuip) return 1; if (fun == &vFpppuuu) return 1; + if (fun == &vFpppuup) return 1; if (fun == &vFpppLpp) return 1; if (fun == &vFppppii) return 1; if (fun == &vFppppLp) return 1; @@ -7929,10 +8446,11 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFpppppL) return 1; if (fun == &vFpppppp) return 1; if (fun == &cFppLppi) return 1; - if (fun == &iFiiiiip) return 1; if (fun == &iFiiiipp) return 1; if (fun == &iFiiiuwp) return 1; if (fun == &iFiWiipi) return 1; + if (fun == &iFiuuuup) return 1; + if (fun == &iFiuuppp) return 1; if (fun == &iFiuUuUu) return 1; if (fun == &iFilpppp) return 1; if (fun == &iFiLpppi) return 1; @@ -7943,6 +8461,9 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFipuppp) return 1; if (fun == &iFipppLp) return 1; if (fun == &iFippppp) return 1; + if (fun == &iFuiiuup) return 1; + if (fun == &iFupupLp) return 1; + if (fun == &iFupLpLp) return 1; if (fun == &iFdipppL) return 2; if (fun == &iFlpippp) return 1; if (fun == &iFLpppii) return 1; @@ -7953,6 +8474,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpiiuii) return 1; if (fun == &iFpiiuui) return 1; if (fun == &iFpiiupp) return 1; + if (fun == &iFpiiLip) return 1; if (fun == &iFpiipip) return 1; if (fun == &iFpiippp) return 1; if (fun == &iFpiCCpu) return 1; @@ -7965,12 +8487,14 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpipLpp) return 1; if (fun == &iFpippip) return 1; if (fun == &iFpippup) return 1; + if (fun == &iFpipppu) return 1; if (fun == &iFpipppp) return 1; if (fun == &iFpCiipp) return 1; if (fun == &iFpCpipu) return 1; if (fun == &iFpWipip) return 1; if (fun == &iFpWpppp) return 1; if (fun == &iFpuiCpp) return 1; + if (fun == &iFpuiLpp) return 1; if (fun == &iFpuippp) return 1; if (fun == &iFpuuuuu) return 1; if (fun == &iFpuuuup) return 1; @@ -7979,10 +8503,12 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpuuLpp) return 1; if (fun == &iFpuupuu) return 1; if (fun == &iFpuuppp) return 1; + if (fun == &iFpuLuLu) return 1; if (fun == &iFpuLLpp) return 1; - if (fun == &iFpupuui) return 1; + if (fun == &iFpupupp) return 1; if (fun == &iFpupLpL) return 1; if (fun == &iFpupLpp) return 1; + if (fun == &iFpupppp) return 1; if (fun == &iFpUiipp) return 1; if (fun == &iFpUuuLp) return 1; if (fun == &iFpUUUup) return 1; @@ -7995,9 +8521,12 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFpLuipp) return 1; if (fun == &iFpLuupp) return 1; if (fun == &iFpLupip) return 1; + if (fun == &iFpLLLLu) return 1; if (fun == &iFpLLLLL) return 1; + if (fun == &iFpLLLLp) return 1; if (fun == &iFpLLppp) return 1; if (fun == &iFpLpipi) return 1; + if (fun == &iFpLpLui) return 1; if (fun == &iFpLppii) return 1; if (fun == &iFpLpppL) return 1; if (fun == &iFpLpppp) return 1; @@ -8005,6 +8534,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFppiiip) return 1; if (fun == &iFppiipi) return 1; if (fun == &iFppiipp) return 1; + if (fun == &iFppiuii) return 1; if (fun == &iFppiupp) return 1; if (fun == &iFppilpp) return 1; if (fun == &iFppipii) return 1; @@ -8015,37 +8545,47 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFppippp) return 1; if (fun == &iFppIppp) return 1; if (fun == &iFppuiii) return 1; + if (fun == &iFppuipp) return 1; if (fun == &iFppuIII) return 1; + if (fun == &iFppuupL) return 1; if (fun == &iFppuupp) return 1; + if (fun == &iFppulup) return 1; + if (fun == &iFppulll) return 1; if (fun == &iFppuLpp) return 1; if (fun == &iFppupip) return 1; + if (fun == &iFppuppu) return 1; if (fun == &iFppuppp) return 1; if (fun == &iFppdidd) return 4; if (fun == &iFpplupp) return 1; if (fun == &iFpplppi) return 1; + if (fun == &iFppLiWL) return 1; if (fun == &iFppLupp) return 1; if (fun == &iFppLLiL) return 1; if (fun == &iFppLLup) return 1; if (fun == &iFppLLpp) return 1; if (fun == &iFppLpLp) return 1; if (fun == &iFppLppp) return 1; - if (fun == &iFpppiuu) return 1; + if (fun == &iFpppiup) return 1; if (fun == &iFpppipi) return 1; if (fun == &iFpppipu) return 1; if (fun == &iFpppipp) return 1; if (fun == &iFpppuii) return 1; + if (fun == &iFpppuuu) return 1; if (fun == &iFpppuup) return 1; if (fun == &iFpppupu) return 1; if (fun == &iFpppupp) return 1; if (fun == &iFpppLpp) return 1; - if (fun == &iFppppii) return 1; if (fun == &iFppppiu) return 1; if (fun == &iFppppip) return 1; + if (fun == &iFppppui) return 1; + if (fun == &iFppppuu) return 1; if (fun == &iFppppup) return 1; if (fun == &iFppppLp) return 1; if (fun == &iFpppppi) return 1; + if (fun == &iFpppppu) return 1; if (fun == &iFpppppL) return 1; if (fun == &iFpppppp) return 1; + if (fun == &uFipuppp) return 1; if (fun == &uFuuuuuu) return 1; if (fun == &uFupuufp) return 2; if (fun == &uFuppppp) return 1; @@ -8058,9 +8598,9 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &uFpuuppp) return 1; if (fun == &uFpupupu) return 1; if (fun == &uFpupppp) return 1; - if (fun == &uFppippp) return 1; if (fun == &uFppuuup) return 1; if (fun == &uFppuupu) return 1; + if (fun == &uFppLpLp) return 1; if (fun == &uFppLppL) return 1; if (fun == &uFpppppi) return 1; if (fun == &uFpppppp) return 1; @@ -8070,7 +8610,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &lFipLpLL) return 1; if (fun == &lFpipill) return 1; if (fun == &lFpuuLLp) return 1; - if (fun == &lFpplllp) return 1; + if (fun == &lFpluuic) return 1; if (fun == &lFppLipp) return 1; if (fun == &lFpppLpp) return 1; if (fun == &LFpipipi) return 1; @@ -8091,18 +8631,24 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFuuppuu) return 1; if (fun == &pFuppppp) return 1; if (fun == &pFdddddd) return 7; + if (fun == &pFLppppp) return 1; if (fun == &pFpiiiiu) return 1; if (fun == &pFpiiipp) return 1; if (fun == &pFpiiCCC) return 1; if (fun == &pFpiiuup) return 1; + if (fun == &pFpiipip) return 1; + if (fun == &pFpiippp) return 1; if (fun == &pFpiUUUU) return 1; + if (fun == &pFpipipL) return 1; if (fun == &pFpipipp) return 1; + if (fun == &pFpipuii) return 1; if (fun == &pFpippip) return 1; if (fun == &pFpipppp) return 1; if (fun == &pFpuiiip) return 1; if (fun == &pFpuuuuu) return 1; if (fun == &pFpuuupu) return 1; if (fun == &pFpupuui) return 1; + if (fun == &pFpupuup) return 1; if (fun == &pFpuppip) return 1; if (fun == &pFpupppp) return 1; if (fun == &pFplpppp) return 1; @@ -8112,6 +8658,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFpLppip) return 1; if (fun == &pFpLppup) return 1; if (fun == &pFppiiii) return 1; + if (fun == &pFppiiup) return 1; if (fun == &pFppiipp) return 1; if (fun == &pFppiCCC) return 1; if (fun == &pFppiupp) return 1; @@ -8166,7 +8713,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFuffiiffiip) return 5; if (fun == &vFuddiiddiip) return 5; if (fun == &vFppdddddddd) return 9; - if (fun == &iFpippddiidd) return 5; + if (fun == &iFpiLLdduudd) return 5; if (fun == &lFpLppdddddd) return 7; #if defined(NOALIGN) if (fun == &iFipiip) return 1; @@ -8174,32 +8721,35 @@ int isSimpleWrapper(wrapper_t fun) { #if !defined(STATICBUILD) if (fun == &iFlip) return 1; if (fun == &iFLLi) return 1; - if (fun == &iFLLiW) return 1; + if (fun == &iFLLii) return 1; + if (fun == &WFpLLu) return 1; if (fun == &iFpipppL) return 1; + if (fun == &lFpLpdddddd) return 7; #endif return 0; } #elif defined(RV64) int isSimpleWrapper(wrapper_t fun) { + if (box64_is32bits) return 0; if (fun == &vFv) return 1; if (fun == &vFC) return 1; if (fun == &vFW) return 1; if (fun == &vFu) return 1; if (fun == &vFU) return 1; - if (fun == &vFf) return 3; - if (fun == &vFd) return 3; + if (fun == &vFf) return 2; + if (fun == &vFd) return 2; if (fun == &vFl) return 1; if (fun == &vFL) return 1; if (fun == &vFp) return 1; if (fun == &IFv) return 1; if (fun == &IFI) return 1; - if (fun == &IFf) return 3; - if (fun == &IFd) return 3; + if (fun == &IFf) return 2; + if (fun == &IFd) return 2; if (fun == &IFp) return 1; if (fun == &CFv) return 1; - if (fun == &CFC) return 1; if (fun == &CFW) return 1; if (fun == &CFu) return 1; + if (fun == &CFU) return 1; if (fun == &CFl) return 1; if (fun == &CFL) return 1; if (fun == &CFp) return 1; @@ -8208,18 +8758,18 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &WFp) return 1; if (fun == &uFv) return 1; if (fun == &uFu) return 1; - if (fun == &uFd) return 3; - if (fun == &uFl) return 1; + if (fun == &uFU) return 1; + if (fun == &uFd) return 2; if (fun == &uFL) return 1; if (fun == &uFp) return 1; if (fun == &UFv) return 1; if (fun == &UFu) return 1; if (fun == &UFp) return 1; - if (fun == &fFf) return -3; + if (fun == &fFf) return -2; if (fun == &fFp) return -1; if (fun == &dFv) return -1; if (fun == &dFu) return -1; - if (fun == &dFd) return -3; + if (fun == &dFd) return -2; if (fun == &dFL) return -1; if (fun == &dFp) return -1; if (fun == &lFv) return 1; @@ -8228,7 +8778,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &lFp) return 1; if (fun == &LFv) return 1; if (fun == &LFu) return 1; - if (fun == &LFd) return 3; + if (fun == &LFd) return 2; if (fun == &LFL) return 1; if (fun == &LFp) return 1; if (fun == &pFv) return 1; @@ -8236,25 +8786,27 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFW) return 1; if (fun == &pFu) return 1; if (fun == &pFU) return 1; - if (fun == &pFd) return 3; + if (fun == &pFd) return 2; if (fun == &pFl) return 1; if (fun == &pFL) return 1; if (fun == &pFp) return 1; if (fun == &vFWW) return 1; if (fun == &vFWp) return 1; + if (fun == &vFuI) return 1; if (fun == &vFuC) return 1; if (fun == &vFuW) return 1; if (fun == &vFuu) return 1; if (fun == &vFuU) return 1; - if (fun == &vFuf) return 3; - if (fun == &vFud) return 3; + if (fun == &vFuf) return 2; + if (fun == &vFud) return 2; if (fun == &vFul) return 1; if (fun == &vFuL) return 1; if (fun == &vFup) return 1; - if (fun == &vFfC) return 3; - if (fun == &vFff) return 5; - if (fun == &vFfp) return 3; - if (fun == &vFdd) return 5; + if (fun == &vFUu) return 1; + if (fun == &vFfC) return 2; + if (fun == &vFff) return 3; + if (fun == &vFfp) return 2; + if (fun == &vFdd) return 3; if (fun == &vFlu) return 1; if (fun == &vFlp) return 1; if (fun == &vFLu) return 1; @@ -8265,18 +8817,17 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFpW) return 1; if (fun == &vFpu) return 1; if (fun == &vFpU) return 1; - if (fun == &vFpf) return 3; - if (fun == &vFpd) return 3; + if (fun == &vFpf) return 2; + if (fun == &vFpd) return 2; if (fun == &vFpl) return 1; if (fun == &vFpL) return 1; if (fun == &vFpp) return 1; - if (fun == &IFII) return 1; if (fun == &IFpu) return 1; - if (fun == &IFpd) return 3; + if (fun == &IFpd) return 2; if (fun == &IFpp) return 1; if (fun == &CFuW) return 1; if (fun == &CFuu) return 1; - if (fun == &CFuL) return 1; + if (fun == &CFuU) return 1; if (fun == &CFpu) return 1; if (fun == &CFpL) return 1; if (fun == &CFpp) return 1; @@ -8286,7 +8837,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &uFpC) return 1; if (fun == &uFpu) return 1; if (fun == &uFpU) return 1; - if (fun == &uFpf) return 3; + if (fun == &uFpf) return 2; if (fun == &uFpl) return 1; if (fun == &uFpL) return 1; if (fun == &uFpp) return 1; @@ -8294,21 +8845,22 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &UFUp) return 1; if (fun == &UFpU) return 1; if (fun == &UFpp) return 1; - if (fun == &fFff) return -5; - if (fun == &fFfp) return -3; + if (fun == &fFff) return -3; + if (fun == &fFfp) return -2; if (fun == &fFpu) return -1; if (fun == &fFpp) return -1; - if (fun == &dFdd) return -5; - if (fun == &dFdp) return -3; + if (fun == &dFdd) return -3; + if (fun == &dFdp) return -2; if (fun == &dFll) return -1; if (fun == &dFpu) return -1; - if (fun == &dFpd) return -3; + if (fun == &dFpd) return -2; if (fun == &dFpp) return -1; if (fun == &lFll) return 1; - if (fun == &lFpd) return 3; + if (fun == &lFpu) return 1; + if (fun == &lFpd) return 2; if (fun == &lFpl) return 1; + if (fun == &lFpL) return 1; if (fun == &lFpp) return 1; - if (fun == &LFuu) return 1; if (fun == &LFUp) return 1; if (fun == &LFLL) return 1; if (fun == &LFLp) return 1; @@ -8318,10 +8870,9 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFuu) return 1; if (fun == &pFup) return 1; if (fun == &pFUU) return 1; - if (fun == &pFdd) return 5; + if (fun == &pFdd) return 3; if (fun == &pFll) return 1; if (fun == &pFlp) return 1; - if (fun == &pFLC) return 1; if (fun == &pFLu) return 1; if (fun == &pFLL) return 1; if (fun == &pFLp) return 1; @@ -8329,54 +8880,56 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFpW) return 1; if (fun == &pFpu) return 1; if (fun == &pFpU) return 1; - if (fun == &pFpd) return 3; + if (fun == &pFpd) return 2; if (fun == &pFpl) return 1; if (fun == &pFpL) return 1; if (fun == &pFpp) return 1; if (fun == &vFCCC) return 1; if (fun == &vFWWW) return 1; + if (fun == &vFuII) return 1; if (fun == &vFuWW) return 1; if (fun == &vFuuC) return 1; if (fun == &vFuuu) return 1; if (fun == &vFuuU) return 1; - if (fun == &vFuuf) return 3; - if (fun == &vFuud) return 3; - if (fun == &vFuuL) return 1; + if (fun == &vFuuf) return 2; + if (fun == &vFuud) return 2; if (fun == &vFuup) return 1; - if (fun == &vFuff) return 5; - if (fun == &vFufp) return 3; - if (fun == &vFudd) return 5; + if (fun == &vFuUU) return 1; + if (fun == &vFuff) return 3; + if (fun == &vFufp) return 2; + if (fun == &vFudd) return 3; if (fun == &vFull) return 1; if (fun == &vFulp) return 1; - if (fun == &vFuLL) return 1; if (fun == &vFuLp) return 1; if (fun == &vFupu) return 1; if (fun == &vFupp) return 1; - if (fun == &vFfff) return 7; - if (fun == &vFfpp) return 3; - if (fun == &vFddd) return 7; - if (fun == &vFdpp) return 3; + if (fun == &vFfff) return 4; + if (fun == &vFfpp) return 2; + if (fun == &vFddd) return 4; + if (fun == &vFdpp) return 2; if (fun == &vFllp) return 1; if (fun == &vFlpp) return 1; if (fun == &vFLup) return 1; if (fun == &vFLpL) return 1; if (fun == &vFLpp) return 1; if (fun == &vFpuI) return 1; + if (fun == &vFpuC) return 1; if (fun == &vFpuW) return 1; if (fun == &vFpuu) return 1; if (fun == &vFpuU) return 1; - if (fun == &vFpuf) return 3; - if (fun == &vFpud) return 3; + if (fun == &vFpuf) return 2; + if (fun == &vFpud) return 2; + if (fun == &vFpul) return 1; if (fun == &vFpuL) return 1; if (fun == &vFpup) return 1; if (fun == &vFpUu) return 1; if (fun == &vFpUU) return 1; - if (fun == &vFpUf) return 3; + if (fun == &vFpUf) return 2; if (fun == &vFpUp) return 1; - if (fun == &vFpff) return 5; - if (fun == &vFpdu) return 3; - if (fun == &vFpdd) return 5; - if (fun == &vFpdp) return 3; + if (fun == &vFpff) return 3; + if (fun == &vFpdu) return 2; + if (fun == &vFpdd) return 3; + if (fun == &vFpdp) return 2; if (fun == &vFpll) return 1; if (fun == &vFplp) return 1; if (fun == &vFpLu) return 1; @@ -8384,28 +8937,30 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &vFpLp) return 1; if (fun == &vFppu) return 1; if (fun == &vFppU) return 1; - if (fun == &vFppf) return 3; - if (fun == &vFppd) return 3; + if (fun == &vFppf) return 2; + if (fun == &vFppd) return 2; if (fun == &vFppl) return 1; if (fun == &vFppL) return 1; if (fun == &vFppp) return 1; if (fun == &IFppI) return 1; - if (fun == &CFuff) return 5; - if (fun == &CFuLu) return 1; + if (fun == &CFuUu) return 1; + if (fun == &CFuff) return 3; if (fun == &CFppp) return 1; if (fun == &WFppp) return 1; if (fun == &uFuuu) return 1; if (fun == &uFuup) return 1; - if (fun == &uFufp) return 3; + if (fun == &uFufp) return 2; if (fun == &uFupu) return 1; if (fun == &uFupp) return 1; if (fun == &uFpWu) return 1; - if (fun == &uFpWf) return 3; + if (fun == &uFpWf) return 2; if (fun == &uFpWp) return 1; if (fun == &uFpuu) return 1; + if (fun == &uFpuU) return 1; if (fun == &uFpuL) return 1; if (fun == &uFpup) return 1; - if (fun == &uFpfu) return 3; + if (fun == &uFpfu) return 2; + if (fun == &uFplu) return 1; if (fun == &uFpLu) return 1; if (fun == &uFpLL) return 1; if (fun == &uFpLp) return 1; @@ -8413,19 +8968,22 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &uFppL) return 1; if (fun == &uFppp) return 1; if (fun == &UFUUU) return 1; - if (fun == &fFfff) return -7; - if (fun == &fFffp) return -5; + if (fun == &fFfff) return -4; + if (fun == &fFffp) return -3; if (fun == &fFppL) return -1; if (fun == &fFppp) return -1; - if (fun == &dFuud) return -3; - if (fun == &dFddd) return -7; - if (fun == &dFddp) return -5; - if (fun == &dFpdd) return -5; + if (fun == &dFuud) return -2; + if (fun == &dFddd) return -4; + if (fun == &dFddp) return -3; + if (fun == &dFpdd) return -3; if (fun == &dFppu) return -1; - if (fun == &dFppd) return -3; + if (fun == &dFppd) return -2; if (fun == &dFppp) return -1; if (fun == &lFlll) return 1; + if (fun == &lFpup) return 1; if (fun == &lFpLu) return 1; + if (fun == &lFpLd) return 2; + if (fun == &lFpLL) return 1; if (fun == &lFpLp) return 1; if (fun == &lFppu) return 1; if (fun == &lFppL) return 1; @@ -8434,8 +8992,10 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &LFLLL) return 1; if (fun == &LFLpu) return 1; if (fun == &LFLpL) return 1; + if (fun == &LFpWp) return 1; if (fun == &LFpuL) return 1; if (fun == &LFpup) return 1; + if (fun == &LFpLC) return 1; if (fun == &LFpLL) return 1; if (fun == &LFpLp) return 1; if (fun == &LFppC) return 1; @@ -8451,21 +9011,19 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFupl) return 1; if (fun == &pFupL) return 1; if (fun == &pFupp) return 1; - if (fun == &pFdUU) return 3; - if (fun == &pFddd) return 7; + if (fun == &pFdUU) return 2; + if (fun == &pFddd) return 4; if (fun == &pFLup) return 1; if (fun == &pFLLp) return 1; if (fun == &pFLpp) return 1; - if (fun == &pFpCu) return 1; if (fun == &pFpWW) return 1; if (fun == &pFpWp) return 1; if (fun == &pFpuu) return 1; - if (fun == &pFpuL) return 1; + if (fun == &pFpuf) return 2; if (fun == &pFpup) return 1; if (fun == &pFpUu) return 1; - if (fun == &pFpdu) return 3; - if (fun == &pFpdd) return 5; - if (fun == &pFplC) return 1; + if (fun == &pFpdu) return 2; + if (fun == &pFpdd) return 3; if (fun == &pFplu) return 1; if (fun == &pFpll) return 1; if (fun == &pFplp) return 1; @@ -8473,92 +9031,393 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFpLL) return 1; if (fun == &pFpLp) return 1; if (fun == &pFppI) return 1; - if (fun == &pFppC) return 1; if (fun == &pFppu) return 1; if (fun == &pFppU) return 1; - if (fun == &pFppf) return 3; + if (fun == &pFppf) return 2; + if (fun == &pFppd) return 2; if (fun == &pFppl) return 1; if (fun == &pFppL) return 1; if (fun == &pFppp) return 1; - if (fun == &vFuuuf) return 3; - if (fun == &vFuuud) return 3; - if (fun == &vFuuff) return 5; - if (fun == &vFufff) return 7; - if (fun == &vFuddd) return 7; - if (fun == &vFffff) return 9; - if (fun == &vFdddd) return 9; - if (fun == &vFpudd) return 5; - if (fun == &vFpfff) return 7; - if (fun == &vFpdup) return 3; - if (fun == &vFpddu) return 5; - if (fun == &vFpddd) return 7; - if (fun == &vFppff) return 5; - if (fun == &vFppdu) return 3; - if (fun == &vFppdd) return 5; - if (fun == &vFppdp) return 3; - if (fun == &vFpppd) return 3; - if (fun == &CFuuff) return 5; - if (fun == &pFffff) return 9; - if (fun == &pFdddd) return 9; - if (fun == &pFlfff) return 7; - if (fun == &pFpudd) return 5; - if (fun == &pFpdIU) return 3; - if (fun == &pFppdd) return 5; - if (fun == &vFuffff) return 9; - if (fun == &vFudddd) return 9; - if (fun == &vFddddp) return 9; - if (fun == &vFpuddd) return 7; - if (fun == &vFpffff) return 9; - if (fun == &vFpdddd) return 9; - if (fun == &vFpddpp) return 5; - if (fun == &vFppudd) return 5; - if (fun == &vFppfff) return 7; - if (fun == &vFppddp) return 5; - if (fun == &vFpppff) return 5; - if (fun == &vFpppdd) return 5; - if (fun == &pFudddp) return 7; - if (fun == &pFpdddd) return 9; - if (fun == &pFppddu) return 5; - if (fun == &vFuuffff) return 9; - if (fun == &vFuudddd) return 9; - if (fun == &vFdddppp) return 7; - if (fun == &vFpudddd) return 9; - if (fun == &vFpddddp) return 9; - if (fun == &vFppffff) return 9; - if (fun == &vFppdddd) return 9; - if (fun == &vFuuuffff) return 9; - if (fun == &vFuuudddd) return 9; - if (fun == &vFppddddu) return 9; - if (fun == &vFpppffff) return 9; + if (fun == &vFCCCC) return 1; + if (fun == &vFWWWW) return 1; + if (fun == &vFuIII) return 1; + if (fun == &vFuWWW) return 1; + if (fun == &vFuuCu) return 1; + if (fun == &vFuuCp) return 1; + if (fun == &vFuuuu) return 1; + if (fun == &vFuuuf) return 2; + if (fun == &vFuuud) return 2; + if (fun == &vFuuul) return 1; + if (fun == &vFuuup) return 1; + if (fun == &vFuuUl) return 1; + if (fun == &vFuuff) return 3; + if (fun == &vFuupp) return 1; + if (fun == &vFuUup) return 1; + if (fun == &vFuUUU) return 1; + if (fun == &vFufff) return 4; + if (fun == &vFuddd) return 4; + if (fun == &vFuluU) return 1; + if (fun == &vFullC) return 1; + if (fun == &vFullp) return 1; + if (fun == &vFulpu) return 1; + if (fun == &vFulpp) return 1; + if (fun == &vFuppu) return 1; + if (fun == &vFffff) return 5; + if (fun == &vFdddd) return 5; + if (fun == &vFpCuW) return 1; + if (fun == &vFpuuu) return 1; + if (fun == &vFpuup) return 1; + if (fun == &vFpudd) return 3; + if (fun == &vFpupu) return 1; + if (fun == &vFpupp) return 1; + if (fun == &vFpUuu) return 1; + if (fun == &vFpUup) return 1; + if (fun == &vFpUUu) return 1; + if (fun == &vFpUUp) return 1; + if (fun == &vFpUpp) return 1; + if (fun == &vFpfff) return 4; + if (fun == &vFpdup) return 2; + if (fun == &vFpddu) return 3; + if (fun == &vFpddd) return 4; + if (fun == &vFplll) return 1; + if (fun == &vFpllL) return 1; + if (fun == &vFplpp) return 1; + if (fun == &vFpLuu) return 1; + if (fun == &vFpLLL) return 1; + if (fun == &vFpLLp) return 1; + if (fun == &vFpLpu) return 1; + if (fun == &vFpLpL) return 1; + if (fun == &vFpLpp) return 1; + if (fun == &vFppuu) return 1; + if (fun == &vFppup) return 1; + if (fun == &vFppff) return 3; + if (fun == &vFppdu) return 2; + if (fun == &vFppdd) return 3; + if (fun == &vFppdp) return 2; + if (fun == &vFpplp) return 1; + if (fun == &vFppLL) return 1; + if (fun == &vFppLp) return 1; + if (fun == &vFpppu) return 1; + if (fun == &vFpppd) return 2; + if (fun == &vFpppl) return 1; + if (fun == &vFpppL) return 1; + if (fun == &vFpppp) return 1; + if (fun == &CFuuff) return 3; + if (fun == &uFuuuu) return 1; + if (fun == &uFuppd) return 2; + if (fun == &uFLppp) return 1; + if (fun == &uFpCCC) return 1; + if (fun == &uFpuup) return 1; + if (fun == &uFpupu) return 1; + if (fun == &uFpupp) return 1; + if (fun == &uFplup) return 1; + if (fun == &uFppuu) return 1; + if (fun == &uFppup) return 1; + if (fun == &uFpplp) return 1; + if (fun == &uFppLp) return 1; + if (fun == &uFpppu) return 1; + if (fun == &uFpppd) return 2; + if (fun == &uFpppL) return 1; + if (fun == &uFpppp) return 1; + if (fun == &dFpppp) return -1; + if (fun == &lFplup) return 1; + if (fun == &lFplpp) return 1; + if (fun == &lFpLpp) return 1; + if (fun == &lFpplp) return 1; + if (fun == &lFppLp) return 1; + if (fun == &lFpppL) return 1; + if (fun == &lFpppp) return 1; + if (fun == &LFpupL) return 1; + if (fun == &LFpLCL) return 1; + if (fun == &LFpLuu) return 1; + if (fun == &LFpLLp) return 1; + if (fun == &LFpLpL) return 1; + if (fun == &LFpLpp) return 1; + if (fun == &LFppLu) return 1; + if (fun == &LFppLL) return 1; + if (fun == &LFppLp) return 1; + if (fun == &LFpppL) return 1; + if (fun == &LFpppp) return 1; + if (fun == &pFuuuu) return 1; + if (fun == &pFuddd) return 4; + if (fun == &pFullu) return 1; + if (fun == &pFuppp) return 1; + if (fun == &pFffff) return 5; + if (fun == &pFdddd) return 5; + if (fun == &pFlfff) return 4; + if (fun == &pFLLup) return 1; + if (fun == &pFLLpp) return 1; + if (fun == &pFLppp) return 1; + if (fun == &pFpWWW) return 1; + if (fun == &pFpuuu) return 1; + if (fun == &pFpuup) return 1; + if (fun == &pFpudd) return 3; + if (fun == &pFpuLL) return 1; + if (fun == &pFpupu) return 1; + if (fun == &pFpupp) return 1; + if (fun == &pFpdIU) return 2; + if (fun == &pFplpl) return 1; + if (fun == &pFplpp) return 1; + if (fun == &pFpLup) return 1; + if (fun == &pFpLLp) return 1; + if (fun == &pFpLpl) return 1; + if (fun == &pFpLpL) return 1; + if (fun == &pFpLpp) return 1; + if (fun == &pFppCp) return 1; + if (fun == &pFppWp) return 1; + if (fun == &pFppuu) return 1; + if (fun == &pFppup) return 1; + if (fun == &pFppUU) return 1; + if (fun == &pFppdd) return 3; + if (fun == &pFppll) return 1; + if (fun == &pFpplp) return 1; + if (fun == &pFppLL) return 1; + if (fun == &pFppLp) return 1; + if (fun == &pFpppu) return 1; + if (fun == &pFpppL) return 1; + if (fun == &pFpppp) return 1; + if (fun == &vFuIIII) return 1; + if (fun == &vFuCCCC) return 1; + if (fun == &vFuCuup) return 1; + if (fun == &vFuWWWW) return 1; + if (fun == &vFuuuuu) return 1; + if (fun == &vFuuuup) return 1; + if (fun == &vFuuull) return 1; + if (fun == &vFuulll) return 1; + if (fun == &vFuullp) return 1; + if (fun == &vFuuppu) return 1; + if (fun == &vFuUUUU) return 1; + if (fun == &vFuffff) return 5; + if (fun == &vFudddd) return 5; + if (fun == &vFullpu) return 1; + if (fun == &vFupupp) return 1; + if (fun == &vFupppu) return 1; + if (fun == &vFupppp) return 1; + if (fun == &vFfffff) return 6; + if (fun == &vFddddp) return 5; + if (fun == &vFLpppp) return 1; + if (fun == &vFpuuuu) return 1; + if (fun == &vFpuuup) return 1; + if (fun == &vFpuupp) return 1; + if (fun == &vFpuddd) return 4; + if (fun == &vFpupup) return 1; + if (fun == &vFpUuuu) return 1; + if (fun == &vFpUUuu) return 1; + if (fun == &vFpUUup) return 1; + if (fun == &vFpUUUu) return 1; + if (fun == &vFpUUUp) return 1; + if (fun == &vFpffff) return 5; + if (fun == &vFpdddd) return 5; + if (fun == &vFpddpp) return 3; + if (fun == &vFpluul) return 1; + if (fun == &vFplppp) return 1; + if (fun == &vFpLLLL) return 1; + if (fun == &vFpLLpp) return 1; + if (fun == &vFppuuu) return 1; + if (fun == &vFppuup) return 1; + if (fun == &vFppudd) return 3; + if (fun == &vFppupu) return 1; + if (fun == &vFppupp) return 1; + if (fun == &vFppfff) return 4; + if (fun == &vFppddp) return 3; + if (fun == &vFppLLL) return 1; + if (fun == &vFppLLp) return 1; + if (fun == &vFppLpL) return 1; + if (fun == &vFppLpp) return 1; + if (fun == &vFpppuu) return 1; + if (fun == &vFpppup) return 1; + if (fun == &vFpppff) return 3; + if (fun == &vFpppdd) return 3; + if (fun == &vFpppLp) return 1; + if (fun == &vFppppu) return 1; + if (fun == &vFppppL) return 1; + if (fun == &vFppppp) return 1; + if (fun == &IFppIII) return 1; + if (fun == &uFLpppL) return 1; + if (fun == &uFpCCCC) return 1; + if (fun == &uFpuuuu) return 1; + if (fun == &uFpuupp) return 1; + if (fun == &uFpupuu) return 1; + if (fun == &uFpuppp) return 1; + if (fun == &uFppuup) return 1; + if (fun == &uFppupp) return 1; + if (fun == &uFpplpp) return 1; + if (fun == &uFppLpp) return 1; + if (fun == &uFppppL) return 1; + if (fun == &uFppppp) return 1; + if (fun == &lFpuuLL) return 1; + if (fun == &lFppupp) return 1; + if (fun == &lFppLpL) return 1; + if (fun == &lFppLpp) return 1; + if (fun == &LFuuuuu) return 1; + if (fun == &LFLpppL) return 1; + if (fun == &LFpLuuu) return 1; + if (fun == &LFpLLLp) return 1; + if (fun == &LFpLpuu) return 1; + if (fun == &LFpLpLp) return 1; + if (fun == &LFpLppL) return 1; + if (fun == &LFpLppp) return 1; + if (fun == &LFppLLp) return 1; + if (fun == &LFppLpL) return 1; + if (fun == &LFppppp) return 1; + if (fun == &pFuuupu) return 1; + if (fun == &pFuupuu) return 1; + if (fun == &pFudddp) return 4; + if (fun == &pFupLpl) return 1; + if (fun == &pFupLpL) return 1; + if (fun == &pFLuppp) return 1; + if (fun == &pFpuuuu) return 1; + if (fun == &pFpuuup) return 1; + if (fun == &pFpuupp) return 1; + if (fun == &pFpuLpp) return 1; + if (fun == &pFpuppu) return 1; + if (fun == &pFpuppp) return 1; + if (fun == &pFpdddd) return 5; + if (fun == &pFplppp) return 1; + if (fun == &pFpLLLp) return 1; + if (fun == &pFpLpup) return 1; + if (fun == &pFppWpp) return 1; + if (fun == &pFppuuu) return 1; + if (fun == &pFppuup) return 1; + if (fun == &pFppupp) return 1; + if (fun == &pFppddu) return 3; + if (fun == &pFppLpp) return 1; + if (fun == &pFpppup) return 1; + if (fun == &pFppppu) return 1; + if (fun == &pFppppL) return 1; + if (fun == &pFppppp) return 1; + if (fun == &vFCCCCff) return 3; + if (fun == &vFuuuuuu) return 1; + if (fun == &vFuuuull) return 1; + if (fun == &vFuuuppp) return 1; + if (fun == &vFuuffff) return 5; + if (fun == &vFuudddd) return 5; + if (fun == &vFuupupp) return 1; + if (fun == &vFufffff) return 6; + if (fun == &vFulluUC) return 1; + if (fun == &vFuppppu) return 1; + if (fun == &vFuppppp) return 1; + if (fun == &vFUUpppp) return 1; + if (fun == &vFffffff) return 7; + if (fun == &vFdddddd) return 7; + if (fun == &vFdddppp) return 4; + if (fun == &vFpuuuup) return 1; + if (fun == &vFpuuupp) return 1; + if (fun == &vFpuupuu) return 1; + if (fun == &vFpuuppp) return 1; + if (fun == &vFpudddd) return 5; + if (fun == &vFpupuuu) return 1; + if (fun == &vFpupupu) return 1; + if (fun == &vFpuppuu) return 1; + if (fun == &vFpupppp) return 1; + if (fun == &vFpUuuup) return 1; + if (fun == &vFpddddd) return 6; + if (fun == &vFpddddp) return 5; + if (fun == &vFpLLLLu) return 1; + if (fun == &vFpLpLLL) return 1; + if (fun == &vFppuuuu) return 1; + if (fun == &vFppuUUU) return 1; + if (fun == &vFppuppp) return 1; + if (fun == &vFppffff) return 5; + if (fun == &vFppdddd) return 5; + if (fun == &vFpplppp) return 1; + if (fun == &vFppLppp) return 1; + if (fun == &vFpppuuu) return 1; + if (fun == &vFpppuup) return 1; + if (fun == &vFpppLpp) return 1; + if (fun == &vFppppLp) return 1; + if (fun == &vFpppppu) return 1; + if (fun == &vFpppppU) return 1; + if (fun == &vFpppppL) return 1; + if (fun == &vFpppppp) return 1; + if (fun == &uFuuuuuu) return 1; + if (fun == &uFupuufp) return 2; + if (fun == &uFuppppp) return 1; + if (fun == &uFpWuuCp) return 1; + if (fun == &uFpuuuup) return 1; + if (fun == &uFpuuupp) return 1; + if (fun == &uFpuuppp) return 1; + if (fun == &uFpupupu) return 1; + if (fun == &uFpupppp) return 1; + if (fun == &uFppuuup) return 1; + if (fun == &uFppuupu) return 1; + if (fun == &uFppLpLp) return 1; + if (fun == &uFppLppL) return 1; + if (fun == &uFpppppp) return 1; + if (fun == &lFpuuLLp) return 1; + if (fun == &lFpppLpp) return 1; + if (fun == &LFpLLLLL) return 1; + if (fun == &LFppLLpL) return 1; + if (fun == &LFppLpLL) return 1; + if (fun == &pFuCCCCp) return 1; + if (fun == &pFuuuuuu) return 1; + if (fun == &pFuuuuup) return 1; + if (fun == &pFuuppuu) return 1; + if (fun == &pFuppppp) return 1; + if (fun == &pFdddddd) return 7; + if (fun == &pFLppppp) return 1; + if (fun == &pFpuuuuu) return 1; + if (fun == &pFpuuupu) return 1; + if (fun == &pFpupuup) return 1; + if (fun == &pFpupppp) return 1; + if (fun == &pFplpppp) return 1; + if (fun == &pFpLuLpp) return 1; + if (fun == &pFpLppup) return 1; + if (fun == &pFppuupp) return 1; + if (fun == &pFppuppp) return 1; + if (fun == &pFpplplp) return 1; + if (fun == &pFpplppp) return 1; + if (fun == &pFpppupp) return 1; + if (fun == &pFpppppu) return 1; + if (fun == &pFpppppp) return 1; + if (fun == &vFCCCCfff) return 4; + if (fun == &vFuuuffff) return 5; + if (fun == &vFuuudddd) return 5; + if (fun == &vFuffffff) return 7; + if (fun == &vFudddddd) return 7; + if (fun == &vFpfffppp) return 4; + if (fun == &vFpdddddd) return 7; + if (fun == &vFppddddu) return 5; + if (fun == &vFpppffff) return 5; + if (fun == &vFuCCCCfff) return 4; + if (fun == &vFuuufffff) return 6; + if (fun == &vFffffffff) return 9; + if (fun == &vFpudddddd) return 7; + if (fun == &vFuffffffff) return 9; + if (fun == &vFffCCCCfff) return 6; + if (fun == &vFppddddudd) return 7; + if (fun == &vFpppffffff) return 7; + if (fun == &vFppdddddddd) return 9; + if (fun == &lFpLppdddddd) return 7; +#if !defined(STATICBUILD) + if (fun == &WFpLLu) return 1; + if (fun == &lFpLpdddddd) return 7; +#endif return 0; } - #else int isSimpleWrapper(wrapper_t fun) { return 0; } #endif +int isRetX87Wrapper32(wrapper_t fun) +#ifndef BOX32 +{ return 0; } +#else + ; +#endif + int isRetX87Wrapper(wrapper_t fun) { + if (fun == &DFD) return 1; + if (fun == &DFY) return 1; + if (fun == &DFiD) return 1; if (fun == &DFDi) return 1; if (fun == &DFDD) return 1; if (fun == &DFDp) return 1; if (fun == &DFpp) return 1; + if (fun == &DFDDD) return 1; if (fun == &DFppi) return 1; if (fun == &DFppp) return 1; -#if defined(HAVE_LD80BITS) - if (fun == &DFD) return 1; - if (fun == &DFY) return 1; - if (fun == &DFiD) return 1; - if (fun == &DFDDD) return 1; -#endif -#if !defined(HAVE_LD80BITS) - if (fun == &KFK) return 1; - if (fun == &KFy) return 1; - if (fun == &KFiK) return 1; - if (fun == &KFKK) return 1; - if (fun == &KFKp) return 1; - if (fun == &KFKKK) return 1; -#endif return 0; } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index 44575ecd0efe4013defab86d95a37f8ebe0ddf63..1f9f1eea04c5890a2b211eee486cb51119204257 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -1,5 +1,5 @@ /******************************************************************* - * File automatically generated by rebuild_wrappers.py (v2.4.0.21) * + * File automatically generated by rebuild_wrappers.py (v2.5.0.24) * *******************************************************************/ #ifndef __WRAPPER_H_ #define __WRAPPER_H_ @@ -29,7 +29,6 @@ typedef void (*wrapper_t)(x64emu_t* emu, uintptr_t fnc); // o = stdout // S = _IO_2_1_stdXXX_ pointer (or FILE*) // N = ... automatically sending 1 arg -// M = ... automatically sending 2 args // A = va_list // 0 = constant 0, 1 = constant 1 // x = float complex @@ -53,6 +52,7 @@ void vFp(x64emu_t *emu, uintptr_t fnc); void vFS(x64emu_t *emu, uintptr_t fnc); void vFb(x64emu_t *emu, uintptr_t fnc); void cFv(x64emu_t *emu, uintptr_t fnc); +void cFc(x64emu_t *emu, uintptr_t fnc); void cFi(x64emu_t *emu, uintptr_t fnc); void cFu(x64emu_t *emu, uintptr_t fnc); void cFf(x64emu_t *emu, uintptr_t fnc); @@ -60,13 +60,13 @@ void cFp(x64emu_t *emu, uintptr_t fnc); void wFp(x64emu_t *emu, uintptr_t fnc); void iFE(x64emu_t *emu, uintptr_t fnc); void iFv(x64emu_t *emu, uintptr_t fnc); +void iFc(x64emu_t *emu, uintptr_t fnc); void iFw(x64emu_t *emu, uintptr_t fnc); void iFi(x64emu_t *emu, uintptr_t fnc); void iFI(x64emu_t *emu, uintptr_t fnc); void iFC(x64emu_t *emu, uintptr_t fnc); void iFW(x64emu_t *emu, uintptr_t fnc); void iFu(x64emu_t *emu, uintptr_t fnc); -void iFU(x64emu_t *emu, uintptr_t fnc); void iFf(x64emu_t *emu, uintptr_t fnc); void iFd(x64emu_t *emu, uintptr_t fnc); void iFD(x64emu_t *emu, uintptr_t fnc); @@ -75,7 +75,6 @@ void iFL(x64emu_t *emu, uintptr_t fnc); void iFp(x64emu_t *emu, uintptr_t fnc); void iFO(x64emu_t *emu, uintptr_t fnc); void iFS(x64emu_t *emu, uintptr_t fnc); -void iFP(x64emu_t *emu, uintptr_t fnc); void iFb(x64emu_t *emu, uintptr_t fnc); void IFv(x64emu_t *emu, uintptr_t fnc); void IFi(x64emu_t *emu, uintptr_t fnc); @@ -83,11 +82,12 @@ void IFI(x64emu_t *emu, uintptr_t fnc); void IFf(x64emu_t *emu, uintptr_t fnc); void IFd(x64emu_t *emu, uintptr_t fnc); void IFp(x64emu_t *emu, uintptr_t fnc); +void IFS(x64emu_t *emu, uintptr_t fnc); void CFv(x64emu_t *emu, uintptr_t fnc); void CFi(x64emu_t *emu, uintptr_t fnc); -void CFC(x64emu_t *emu, uintptr_t fnc); void CFW(x64emu_t *emu, uintptr_t fnc); void CFu(x64emu_t *emu, uintptr_t fnc); +void CFU(x64emu_t *emu, uintptr_t fnc); void CFl(x64emu_t *emu, uintptr_t fnc); void CFL(x64emu_t *emu, uintptr_t fnc); void CFp(x64emu_t *emu, uintptr_t fnc); @@ -98,12 +98,14 @@ void WFp(x64emu_t *emu, uintptr_t fnc); void uFv(x64emu_t *emu, uintptr_t fnc); void uFi(x64emu_t *emu, uintptr_t fnc); void uFu(x64emu_t *emu, uintptr_t fnc); +void uFU(x64emu_t *emu, uintptr_t fnc); void uFd(x64emu_t *emu, uintptr_t fnc); -void uFl(x64emu_t *emu, uintptr_t fnc); void uFL(x64emu_t *emu, uintptr_t fnc); void uFp(x64emu_t *emu, uintptr_t fnc); +void uFS(x64emu_t *emu, uintptr_t fnc); void uFb(x64emu_t *emu, uintptr_t fnc); void UFv(x64emu_t *emu, uintptr_t fnc); +void UFi(x64emu_t *emu, uintptr_t fnc); void UFu(x64emu_t *emu, uintptr_t fnc); void UFp(x64emu_t *emu, uintptr_t fnc); void fFi(x64emu_t *emu, uintptr_t fnc); @@ -115,12 +117,16 @@ void dFu(x64emu_t *emu, uintptr_t fnc); void dFd(x64emu_t *emu, uintptr_t fnc); void dFL(x64emu_t *emu, uintptr_t fnc); void dFp(x64emu_t *emu, uintptr_t fnc); +void DFD(x64emu_t *emu, uintptr_t fnc); +void DFY(x64emu_t *emu, uintptr_t fnc); void lFE(x64emu_t *emu, uintptr_t fnc); void lFv(x64emu_t *emu, uintptr_t fnc); void lFi(x64emu_t *emu, uintptr_t fnc); void lFu(x64emu_t *emu, uintptr_t fnc); +void lFD(x64emu_t *emu, uintptr_t fnc); void lFl(x64emu_t *emu, uintptr_t fnc); void lFp(x64emu_t *emu, uintptr_t fnc); +void lFS(x64emu_t *emu, uintptr_t fnc); void LFv(x64emu_t *emu, uintptr_t fnc); void LFi(x64emu_t *emu, uintptr_t fnc); void LFu(x64emu_t *emu, uintptr_t fnc); @@ -140,12 +146,16 @@ void pFl(x64emu_t *emu, uintptr_t fnc); void pFL(x64emu_t *emu, uintptr_t fnc); void pFp(x64emu_t *emu, uintptr_t fnc); void pFV(x64emu_t *emu, uintptr_t fnc); +void pFS(x64emu_t *emu, uintptr_t fnc); void pFA(x64emu_t *emu, uintptr_t fnc); void pFb(x64emu_t *emu, uintptr_t fnc); +void SFv(x64emu_t *emu, uintptr_t fnc); void HFi(x64emu_t *emu, uintptr_t fnc); void HFp(x64emu_t *emu, uintptr_t fnc); +void HFH(x64emu_t *emu, uintptr_t fnc); void xFx(x64emu_t *emu, uintptr_t fnc); void XFX(x64emu_t *emu, uintptr_t fnc); +void YFY(x64emu_t *emu, uintptr_t fnc); void vWp(x64emu_t *emu, uintptr_t fnc); void iWp(x64emu_t *emu, uintptr_t fnc); void uWp(x64emu_t *emu, uintptr_t fnc); @@ -155,19 +165,19 @@ void vFEp(x64emu_t *emu, uintptr_t fnc); void vFcc(x64emu_t *emu, uintptr_t fnc); void vFww(x64emu_t *emu, uintptr_t fnc); void vFii(x64emu_t *emu, uintptr_t fnc); +void vFiI(x64emu_t *emu, uintptr_t fnc); void vFiW(x64emu_t *emu, uintptr_t fnc); void vFiu(x64emu_t *emu, uintptr_t fnc); void vFiU(x64emu_t *emu, uintptr_t fnc); void vFif(x64emu_t *emu, uintptr_t fnc); void vFid(x64emu_t *emu, uintptr_t fnc); -void vFil(x64emu_t *emu, uintptr_t fnc); -void vFiL(x64emu_t *emu, uintptr_t fnc); void vFip(x64emu_t *emu, uintptr_t fnc); void vFWW(x64emu_t *emu, uintptr_t fnc); void vFWp(x64emu_t *emu, uintptr_t fnc); void vFuc(x64emu_t *emu, uintptr_t fnc); void vFuw(x64emu_t *emu, uintptr_t fnc); void vFui(x64emu_t *emu, uintptr_t fnc); +void vFuI(x64emu_t *emu, uintptr_t fnc); void vFuC(x64emu_t *emu, uintptr_t fnc); void vFuW(x64emu_t *emu, uintptr_t fnc); void vFuu(x64emu_t *emu, uintptr_t fnc); @@ -177,7 +187,7 @@ void vFud(x64emu_t *emu, uintptr_t fnc); void vFul(x64emu_t *emu, uintptr_t fnc); void vFuL(x64emu_t *emu, uintptr_t fnc); void vFup(x64emu_t *emu, uintptr_t fnc); -void vFUi(x64emu_t *emu, uintptr_t fnc); +void vFUu(x64emu_t *emu, uintptr_t fnc); void vFfi(x64emu_t *emu, uintptr_t fnc); void vFfC(x64emu_t *emu, uintptr_t fnc); void vFff(x64emu_t *emu, uintptr_t fnc); @@ -200,9 +210,10 @@ void vFpd(x64emu_t *emu, uintptr_t fnc); void vFpl(x64emu_t *emu, uintptr_t fnc); void vFpL(x64emu_t *emu, uintptr_t fnc); void vFpp(x64emu_t *emu, uintptr_t fnc); -void vFpV(x64emu_t *emu, uintptr_t fnc); void vFpS(x64emu_t *emu, uintptr_t fnc); +void vFpA(x64emu_t *emu, uintptr_t fnc); void vFSi(x64emu_t *emu, uintptr_t fnc); +void vFSp(x64emu_t *emu, uintptr_t fnc); void vFbi(x64emu_t *emu, uintptr_t fnc); void vFbu(x64emu_t *emu, uintptr_t fnc); void vFbU(x64emu_t *emu, uintptr_t fnc); @@ -220,8 +231,8 @@ void iFii(x64emu_t *emu, uintptr_t fnc); void iFiI(x64emu_t *emu, uintptr_t fnc); void iFiC(x64emu_t *emu, uintptr_t fnc); void iFiu(x64emu_t *emu, uintptr_t fnc); +void iFiU(x64emu_t *emu, uintptr_t fnc); void iFil(x64emu_t *emu, uintptr_t fnc); -void iFiL(x64emu_t *emu, uintptr_t fnc); void iFip(x64emu_t *emu, uintptr_t fnc); void iFiS(x64emu_t *emu, uintptr_t fnc); void iFui(x64emu_t *emu, uintptr_t fnc); @@ -247,14 +258,17 @@ void iFpd(x64emu_t *emu, uintptr_t fnc); void iFpl(x64emu_t *emu, uintptr_t fnc); void iFpL(x64emu_t *emu, uintptr_t fnc); void iFpp(x64emu_t *emu, uintptr_t fnc); +void iFpV(x64emu_t *emu, uintptr_t fnc); void iFpO(x64emu_t *emu, uintptr_t fnc); +void iFpS(x64emu_t *emu, uintptr_t fnc); +void iFpA(x64emu_t *emu, uintptr_t fnc); void iFSi(x64emu_t *emu, uintptr_t fnc); -void IFEi(x64emu_t *emu, uintptr_t fnc); +void iFSp(x64emu_t *emu, uintptr_t fnc); void IFEf(x64emu_t *emu, uintptr_t fnc); void IFEd(x64emu_t *emu, uintptr_t fnc); +void IFED(x64emu_t *emu, uintptr_t fnc); void IFEp(x64emu_t *emu, uintptr_t fnc); void IFip(x64emu_t *emu, uintptr_t fnc); -void IFII(x64emu_t *emu, uintptr_t fnc); void IFpi(x64emu_t *emu, uintptr_t fnc); void IFpu(x64emu_t *emu, uintptr_t fnc); void IFpd(x64emu_t *emu, uintptr_t fnc); @@ -264,7 +278,7 @@ void CFCi(x64emu_t *emu, uintptr_t fnc); void CFui(x64emu_t *emu, uintptr_t fnc); void CFuW(x64emu_t *emu, uintptr_t fnc); void CFuu(x64emu_t *emu, uintptr_t fnc); -void CFuL(x64emu_t *emu, uintptr_t fnc); +void CFuU(x64emu_t *emu, uintptr_t fnc); void CFpi(x64emu_t *emu, uintptr_t fnc); void CFpu(x64emu_t *emu, uintptr_t fnc); void CFpL(x64emu_t *emu, uintptr_t fnc); @@ -273,12 +287,11 @@ void WFpi(x64emu_t *emu, uintptr_t fnc); void WFpp(x64emu_t *emu, uintptr_t fnc); void uFEp(x64emu_t *emu, uintptr_t fnc); void uFii(x64emu_t *emu, uintptr_t fnc); -void uFiu(x64emu_t *emu, uintptr_t fnc); -void uFip(x64emu_t *emu, uintptr_t fnc); +void uFiS(x64emu_t *emu, uintptr_t fnc); void uFui(x64emu_t *emu, uintptr_t fnc); void uFuu(x64emu_t *emu, uintptr_t fnc); void uFup(x64emu_t *emu, uintptr_t fnc); -void uFuM(x64emu_t *emu, uintptr_t fnc); +void uFuS(x64emu_t *emu, uintptr_t fnc); void uFpw(x64emu_t *emu, uintptr_t fnc); void uFpi(x64emu_t *emu, uintptr_t fnc); void uFpC(x64emu_t *emu, uintptr_t fnc); @@ -290,6 +303,7 @@ void uFpL(x64emu_t *emu, uintptr_t fnc); void uFpp(x64emu_t *emu, uintptr_t fnc); void uFbu(x64emu_t *emu, uintptr_t fnc); void UFEp(x64emu_t *emu, uintptr_t fnc); +void UFii(x64emu_t *emu, uintptr_t fnc); void UFuu(x64emu_t *emu, uintptr_t fnc); void UFUp(x64emu_t *emu, uintptr_t fnc); void UFpi(x64emu_t *emu, uintptr_t fnc); @@ -316,23 +330,26 @@ void dFpi(x64emu_t *emu, uintptr_t fnc); void dFpu(x64emu_t *emu, uintptr_t fnc); void dFpd(x64emu_t *emu, uintptr_t fnc); void dFpp(x64emu_t *emu, uintptr_t fnc); +void DFiD(x64emu_t *emu, uintptr_t fnc); void DFDi(x64emu_t *emu, uintptr_t fnc); void DFDD(x64emu_t *emu, uintptr_t fnc); void DFDp(x64emu_t *emu, uintptr_t fnc); void DFpp(x64emu_t *emu, uintptr_t fnc); void lFEi(x64emu_t *emu, uintptr_t fnc); void lFii(x64emu_t *emu, uintptr_t fnc); +void lFiL(x64emu_t *emu, uintptr_t fnc); void lFip(x64emu_t *emu, uintptr_t fnc); void lFui(x64emu_t *emu, uintptr_t fnc); +void lFDD(x64emu_t *emu, uintptr_t fnc); void lFll(x64emu_t *emu, uintptr_t fnc); void lFpi(x64emu_t *emu, uintptr_t fnc); +void lFpu(x64emu_t *emu, uintptr_t fnc); void lFpd(x64emu_t *emu, uintptr_t fnc); void lFpl(x64emu_t *emu, uintptr_t fnc); +void lFpL(x64emu_t *emu, uintptr_t fnc); void lFpp(x64emu_t *emu, uintptr_t fnc); void LFEL(x64emu_t *emu, uintptr_t fnc); void LFEp(x64emu_t *emu, uintptr_t fnc); -void LFii(x64emu_t *emu, uintptr_t fnc); -void LFuu(x64emu_t *emu, uintptr_t fnc); void LFUp(x64emu_t *emu, uintptr_t fnc); void LFLi(x64emu_t *emu, uintptr_t fnc); void LFLL(x64emu_t *emu, uintptr_t fnc); @@ -358,11 +375,12 @@ void pFdd(x64emu_t *emu, uintptr_t fnc); void pFli(x64emu_t *emu, uintptr_t fnc); void pFll(x64emu_t *emu, uintptr_t fnc); void pFlp(x64emu_t *emu, uintptr_t fnc); +void pFLc(x64emu_t *emu, uintptr_t fnc); void pFLi(x64emu_t *emu, uintptr_t fnc); -void pFLC(x64emu_t *emu, uintptr_t fnc); void pFLu(x64emu_t *emu, uintptr_t fnc); void pFLL(x64emu_t *emu, uintptr_t fnc); void pFLp(x64emu_t *emu, uintptr_t fnc); +void pFpc(x64emu_t *emu, uintptr_t fnc); void pFpi(x64emu_t *emu, uintptr_t fnc); void pFpC(x64emu_t *emu, uintptr_t fnc); void pFpW(x64emu_t *emu, uintptr_t fnc); @@ -376,12 +394,14 @@ void pFSi(x64emu_t *emu, uintptr_t fnc); void pFbC(x64emu_t *emu, uintptr_t fnc); void pFbu(x64emu_t *emu, uintptr_t fnc); void pFbp(x64emu_t *emu, uintptr_t fnc); +void SFip(x64emu_t *emu, uintptr_t fnc); +void SFpp(x64emu_t *emu, uintptr_t fnc); void HFII(x64emu_t *emu, uintptr_t fnc); void HFll(x64emu_t *emu, uintptr_t fnc); void HFpi(x64emu_t *emu, uintptr_t fnc); -void HFpp(x64emu_t *emu, uintptr_t fnc); void xFxx(x64emu_t *emu, uintptr_t fnc); void XFXX(x64emu_t *emu, uintptr_t fnc); +void YFYY(x64emu_t *emu, uintptr_t fnc); void iWpi(x64emu_t *emu, uintptr_t fnc); void iWpu(x64emu_t *emu, uintptr_t fnc); void iWpf(x64emu_t *emu, uintptr_t fnc); @@ -399,16 +419,16 @@ void vFwww(x64emu_t *emu, uintptr_t fnc); void vFiii(x64emu_t *emu, uintptr_t fnc); void vFiif(x64emu_t *emu, uintptr_t fnc); void vFiip(x64emu_t *emu, uintptr_t fnc); +void vFiII(x64emu_t *emu, uintptr_t fnc); void vFiui(x64emu_t *emu, uintptr_t fnc); void vFiuu(x64emu_t *emu, uintptr_t fnc); -void vFiuU(x64emu_t *emu, uintptr_t fnc); void vFiup(x64emu_t *emu, uintptr_t fnc); +void vFiUU(x64emu_t *emu, uintptr_t fnc); void vFiff(x64emu_t *emu, uintptr_t fnc); void vFidd(x64emu_t *emu, uintptr_t fnc); void vFilu(x64emu_t *emu, uintptr_t fnc); void vFill(x64emu_t *emu, uintptr_t fnc); void vFilp(x64emu_t *emu, uintptr_t fnc); -void vFiLL(x64emu_t *emu, uintptr_t fnc); void vFipi(x64emu_t *emu, uintptr_t fnc); void vFipu(x64emu_t *emu, uintptr_t fnc); void vFipL(x64emu_t *emu, uintptr_t fnc); @@ -418,13 +438,13 @@ void vFWWW(x64emu_t *emu, uintptr_t fnc); void vFucc(x64emu_t *emu, uintptr_t fnc); void vFuww(x64emu_t *emu, uintptr_t fnc); void vFuii(x64emu_t *emu, uintptr_t fnc); +void vFuiI(x64emu_t *emu, uintptr_t fnc); void vFuiu(x64emu_t *emu, uintptr_t fnc); void vFuiU(x64emu_t *emu, uintptr_t fnc); void vFuif(x64emu_t *emu, uintptr_t fnc); void vFuid(x64emu_t *emu, uintptr_t fnc); -void vFuil(x64emu_t *emu, uintptr_t fnc); -void vFuiL(x64emu_t *emu, uintptr_t fnc); void vFuip(x64emu_t *emu, uintptr_t fnc); +void vFuII(x64emu_t *emu, uintptr_t fnc); void vFuWW(x64emu_t *emu, uintptr_t fnc); void vFuui(x64emu_t *emu, uintptr_t fnc); void vFuuC(x64emu_t *emu, uintptr_t fnc); @@ -432,14 +452,13 @@ void vFuuu(x64emu_t *emu, uintptr_t fnc); void vFuuU(x64emu_t *emu, uintptr_t fnc); void vFuuf(x64emu_t *emu, uintptr_t fnc); void vFuud(x64emu_t *emu, uintptr_t fnc); -void vFuuL(x64emu_t *emu, uintptr_t fnc); void vFuup(x64emu_t *emu, uintptr_t fnc); +void vFuUU(x64emu_t *emu, uintptr_t fnc); void vFuff(x64emu_t *emu, uintptr_t fnc); void vFufp(x64emu_t *emu, uintptr_t fnc); void vFudd(x64emu_t *emu, uintptr_t fnc); void vFull(x64emu_t *emu, uintptr_t fnc); void vFulp(x64emu_t *emu, uintptr_t fnc); -void vFuLL(x64emu_t *emu, uintptr_t fnc); void vFuLp(x64emu_t *emu, uintptr_t fnc); void vFupu(x64emu_t *emu, uintptr_t fnc); void vFupp(x64emu_t *emu, uintptr_t fnc); @@ -447,6 +466,7 @@ void vFfff(x64emu_t *emu, uintptr_t fnc); void vFfpp(x64emu_t *emu, uintptr_t fnc); void vFddd(x64emu_t *emu, uintptr_t fnc); void vFdpp(x64emu_t *emu, uintptr_t fnc); +void vFDpp(x64emu_t *emu, uintptr_t fnc); void vFlii(x64emu_t *emu, uintptr_t fnc); void vFlip(x64emu_t *emu, uintptr_t fnc); void vFllp(x64emu_t *emu, uintptr_t fnc); @@ -454,6 +474,7 @@ void vFlpp(x64emu_t *emu, uintptr_t fnc); void vFLup(x64emu_t *emu, uintptr_t fnc); void vFLpL(x64emu_t *emu, uintptr_t fnc); void vFLpp(x64emu_t *emu, uintptr_t fnc); +void vFpww(x64emu_t *emu, uintptr_t fnc); void vFpic(x64emu_t *emu, uintptr_t fnc); void vFpii(x64emu_t *emu, uintptr_t fnc); void vFpiI(x64emu_t *emu, uintptr_t fnc); @@ -464,13 +485,16 @@ void vFpif(x64emu_t *emu, uintptr_t fnc); void vFpid(x64emu_t *emu, uintptr_t fnc); void vFpiL(x64emu_t *emu, uintptr_t fnc); void vFpip(x64emu_t *emu, uintptr_t fnc); +void vFpiS(x64emu_t *emu, uintptr_t fnc); void vFpui(x64emu_t *emu, uintptr_t fnc); void vFpuI(x64emu_t *emu, uintptr_t fnc); +void vFpuC(x64emu_t *emu, uintptr_t fnc); void vFpuW(x64emu_t *emu, uintptr_t fnc); void vFpuu(x64emu_t *emu, uintptr_t fnc); void vFpuU(x64emu_t *emu, uintptr_t fnc); void vFpuf(x64emu_t *emu, uintptr_t fnc); void vFpud(x64emu_t *emu, uintptr_t fnc); +void vFpul(x64emu_t *emu, uintptr_t fnc); void vFpuL(x64emu_t *emu, uintptr_t fnc); void vFpup(x64emu_t *emu, uintptr_t fnc); void vFpUi(x64emu_t *emu, uintptr_t fnc); @@ -497,6 +521,8 @@ void vFppl(x64emu_t *emu, uintptr_t fnc); void vFppL(x64emu_t *emu, uintptr_t fnc); void vFppp(x64emu_t *emu, uintptr_t fnc); void vFppV(x64emu_t *emu, uintptr_t fnc); +void vFpHi(x64emu_t *emu, uintptr_t fnc); +void vFSpL(x64emu_t *emu, uintptr_t fnc); void cFpdp(x64emu_t *emu, uintptr_t fnc); void wFppp(x64emu_t *emu, uintptr_t fnc); void iFEiw(x64emu_t *emu, uintptr_t fnc); @@ -504,7 +530,6 @@ void iFEip(x64emu_t *emu, uintptr_t fnc); void iFEWW(x64emu_t *emu, uintptr_t fnc); void iFEup(x64emu_t *emu, uintptr_t fnc); void iFEUU(x64emu_t *emu, uintptr_t fnc); -void iFELp(x64emu_t *emu, uintptr_t fnc); void iFEpi(x64emu_t *emu, uintptr_t fnc); void iFEpU(x64emu_t *emu, uintptr_t fnc); void iFEpL(x64emu_t *emu, uintptr_t fnc); @@ -521,6 +546,7 @@ void iFiiu(x64emu_t *emu, uintptr_t fnc); void iFiil(x64emu_t *emu, uintptr_t fnc); void iFiip(x64emu_t *emu, uintptr_t fnc); void iFiiO(x64emu_t *emu, uintptr_t fnc); +void iFiII(x64emu_t *emu, uintptr_t fnc); void iFiCC(x64emu_t *emu, uintptr_t fnc); void iFiui(x64emu_t *emu, uintptr_t fnc); void iFiuu(x64emu_t *emu, uintptr_t fnc); @@ -550,6 +576,7 @@ void iFupL(x64emu_t *emu, uintptr_t fnc); void iFupp(x64emu_t *emu, uintptr_t fnc); void iFfff(x64emu_t *emu, uintptr_t fnc); void iFLip(x64emu_t *emu, uintptr_t fnc); +void iFLpL(x64emu_t *emu, uintptr_t fnc); void iFLpp(x64emu_t *emu, uintptr_t fnc); void iFpwp(x64emu_t *emu, uintptr_t fnc); void iFpii(x64emu_t *emu, uintptr_t fnc); @@ -562,7 +589,6 @@ void iFpid(x64emu_t *emu, uintptr_t fnc); void iFpil(x64emu_t *emu, uintptr_t fnc); void iFpiL(x64emu_t *emu, uintptr_t fnc); void iFpip(x64emu_t *emu, uintptr_t fnc); -void iFpIi(x64emu_t *emu, uintptr_t fnc); void iFpII(x64emu_t *emu, uintptr_t fnc); void iFpCp(x64emu_t *emu, uintptr_t fnc); void iFpWp(x64emu_t *emu, uintptr_t fnc); @@ -598,9 +624,16 @@ void iFppd(x64emu_t *emu, uintptr_t fnc); void iFppl(x64emu_t *emu, uintptr_t fnc); void iFppL(x64emu_t *emu, uintptr_t fnc); void iFppp(x64emu_t *emu, uintptr_t fnc); +void iFpOi(x64emu_t *emu, uintptr_t fnc); void iFpOu(x64emu_t *emu, uintptr_t fnc); -void iFpOM(x64emu_t *emu, uintptr_t fnc); +void iFpSu(x64emu_t *emu, uintptr_t fnc); +void iFpSp(x64emu_t *emu, uintptr_t fnc); +void iFSIi(x64emu_t *emu, uintptr_t fnc); +void iFSli(x64emu_t *emu, uintptr_t fnc); +void iFSpi(x64emu_t *emu, uintptr_t fnc); void iFSpL(x64emu_t *emu, uintptr_t fnc); +void iFSpp(x64emu_t *emu, uintptr_t fnc); +void iFSpA(x64emu_t *emu, uintptr_t fnc); void iFbpp(x64emu_t *emu, uintptr_t fnc); void IFiIi(x64emu_t *emu, uintptr_t fnc); void IFpIi(x64emu_t *emu, uintptr_t fnc); @@ -608,9 +641,10 @@ void IFppi(x64emu_t *emu, uintptr_t fnc); void IFppI(x64emu_t *emu, uintptr_t fnc); void IFSIi(x64emu_t *emu, uintptr_t fnc); void CFipp(x64emu_t *emu, uintptr_t fnc); +void CFuUu(x64emu_t *emu, uintptr_t fnc); void CFuff(x64emu_t *emu, uintptr_t fnc); -void CFuLu(x64emu_t *emu, uintptr_t fnc); void CFppp(x64emu_t *emu, uintptr_t fnc); +void WFpip(x64emu_t *emu, uintptr_t fnc); void WFppp(x64emu_t *emu, uintptr_t fnc); void uFEpW(x64emu_t *emu, uintptr_t fnc); void uFEpu(x64emu_t *emu, uintptr_t fnc); @@ -627,6 +661,7 @@ void uFuup(x64emu_t *emu, uintptr_t fnc); void uFufp(x64emu_t *emu, uintptr_t fnc); void uFupu(x64emu_t *emu, uintptr_t fnc); void uFupp(x64emu_t *emu, uintptr_t fnc); +void uFuNN(x64emu_t *emu, uintptr_t fnc); void uFpii(x64emu_t *emu, uintptr_t fnc); void uFpiu(x64emu_t *emu, uintptr_t fnc); void uFpip(x64emu_t *emu, uintptr_t fnc); @@ -637,10 +672,12 @@ void uFpWf(x64emu_t *emu, uintptr_t fnc); void uFpWp(x64emu_t *emu, uintptr_t fnc); void uFpui(x64emu_t *emu, uintptr_t fnc); void uFpuu(x64emu_t *emu, uintptr_t fnc); +void uFpuU(x64emu_t *emu, uintptr_t fnc); void uFpuL(x64emu_t *emu, uintptr_t fnc); void uFpup(x64emu_t *emu, uintptr_t fnc); void uFpfu(x64emu_t *emu, uintptr_t fnc); void uFpli(x64emu_t *emu, uintptr_t fnc); +void uFplu(x64emu_t *emu, uintptr_t fnc); void uFpLu(x64emu_t *emu, uintptr_t fnc); void uFpLL(x64emu_t *emu, uintptr_t fnc); void uFpLp(x64emu_t *emu, uintptr_t fnc); @@ -648,6 +685,7 @@ void uFppi(x64emu_t *emu, uintptr_t fnc); void uFppu(x64emu_t *emu, uintptr_t fnc); void uFppL(x64emu_t *emu, uintptr_t fnc); void uFppp(x64emu_t *emu, uintptr_t fnc); +void uFbCu(x64emu_t *emu, uintptr_t fnc); void uFbWW(x64emu_t *emu, uintptr_t fnc); void uFbWu(x64emu_t *emu, uintptr_t fnc); void uFbuC(x64emu_t *emu, uintptr_t fnc); @@ -674,21 +712,27 @@ void dFppi(x64emu_t *emu, uintptr_t fnc); void dFppu(x64emu_t *emu, uintptr_t fnc); void dFppd(x64emu_t *emu, uintptr_t fnc); void dFppp(x64emu_t *emu, uintptr_t fnc); +void DFDDD(x64emu_t *emu, uintptr_t fnc); void DFppi(x64emu_t *emu, uintptr_t fnc); void DFppp(x64emu_t *emu, uintptr_t fnc); +void lFiIL(x64emu_t *emu, uintptr_t fnc); void lFili(x64emu_t *emu, uintptr_t fnc); -void lFilL(x64emu_t *emu, uintptr_t fnc); void lFipi(x64emu_t *emu, uintptr_t fnc); void lFipL(x64emu_t *emu, uintptr_t fnc); void lFlll(x64emu_t *emu, uintptr_t fnc); +void lFpup(x64emu_t *emu, uintptr_t fnc); void lFpli(x64emu_t *emu, uintptr_t fnc); void lFpLu(x64emu_t *emu, uintptr_t fnc); +void lFpLd(x64emu_t *emu, uintptr_t fnc); +void lFpLL(x64emu_t *emu, uintptr_t fnc); void lFpLp(x64emu_t *emu, uintptr_t fnc); void lFppi(x64emu_t *emu, uintptr_t fnc); void lFppu(x64emu_t *emu, uintptr_t fnc); void lFppL(x64emu_t *emu, uintptr_t fnc); void lFppp(x64emu_t *emu, uintptr_t fnc); +void lFppS(x64emu_t *emu, uintptr_t fnc); void lFSpl(x64emu_t *emu, uintptr_t fnc); +void LFEpp(x64emu_t *emu, uintptr_t fnc); void LFEpA(x64emu_t *emu, uintptr_t fnc); void LFipL(x64emu_t *emu, uintptr_t fnc); void LFuui(x64emu_t *emu, uintptr_t fnc); @@ -698,10 +742,13 @@ void LFLLL(x64emu_t *emu, uintptr_t fnc); void LFLpu(x64emu_t *emu, uintptr_t fnc); void LFLpL(x64emu_t *emu, uintptr_t fnc); void LFpii(x64emu_t *emu, uintptr_t fnc); +void LFpip(x64emu_t *emu, uintptr_t fnc); void LFpCi(x64emu_t *emu, uintptr_t fnc); +void LFpWp(x64emu_t *emu, uintptr_t fnc); void LFpuL(x64emu_t *emu, uintptr_t fnc); void LFpup(x64emu_t *emu, uintptr_t fnc); void LFpLi(x64emu_t *emu, uintptr_t fnc); +void LFpLC(x64emu_t *emu, uintptr_t fnc); void LFpLL(x64emu_t *emu, uintptr_t fnc); void LFpLp(x64emu_t *emu, uintptr_t fnc); void LFppi(x64emu_t *emu, uintptr_t fnc); @@ -713,7 +760,6 @@ void LFSpL(x64emu_t *emu, uintptr_t fnc); void pFEip(x64emu_t *emu, uintptr_t fnc); void pFEiV(x64emu_t *emu, uintptr_t fnc); void pFEup(x64emu_t *emu, uintptr_t fnc); -void pFEuV(x64emu_t *emu, uintptr_t fnc); void pFEpi(x64emu_t *emu, uintptr_t fnc); void pFEpu(x64emu_t *emu, uintptr_t fnc); void pFEpp(x64emu_t *emu, uintptr_t fnc); @@ -749,26 +795,27 @@ void pFLup(x64emu_t *emu, uintptr_t fnc); void pFLLp(x64emu_t *emu, uintptr_t fnc); void pFLpi(x64emu_t *emu, uintptr_t fnc); void pFLpp(x64emu_t *emu, uintptr_t fnc); +void pFpcU(x64emu_t *emu, uintptr_t fnc); void pFpii(x64emu_t *emu, uintptr_t fnc); void pFpiu(x64emu_t *emu, uintptr_t fnc); void pFpid(x64emu_t *emu, uintptr_t fnc); void pFpil(x64emu_t *emu, uintptr_t fnc); void pFpiL(x64emu_t *emu, uintptr_t fnc); void pFpip(x64emu_t *emu, uintptr_t fnc); +void pFpiS(x64emu_t *emu, uintptr_t fnc); void pFpCi(x64emu_t *emu, uintptr_t fnc); -void pFpCu(x64emu_t *emu, uintptr_t fnc); void pFpWi(x64emu_t *emu, uintptr_t fnc); void pFpWW(x64emu_t *emu, uintptr_t fnc); void pFpWp(x64emu_t *emu, uintptr_t fnc); void pFpui(x64emu_t *emu, uintptr_t fnc); void pFpuu(x64emu_t *emu, uintptr_t fnc); -void pFpuL(x64emu_t *emu, uintptr_t fnc); +void pFpuf(x64emu_t *emu, uintptr_t fnc); void pFpup(x64emu_t *emu, uintptr_t fnc); void pFpUi(x64emu_t *emu, uintptr_t fnc); void pFpUu(x64emu_t *emu, uintptr_t fnc); void pFpdu(x64emu_t *emu, uintptr_t fnc); void pFpdd(x64emu_t *emu, uintptr_t fnc); -void pFplC(x64emu_t *emu, uintptr_t fnc); +void pFplc(x64emu_t *emu, uintptr_t fnc); void pFplu(x64emu_t *emu, uintptr_t fnc); void pFpll(x64emu_t *emu, uintptr_t fnc); void pFplp(x64emu_t *emu, uintptr_t fnc); @@ -776,17 +823,19 @@ void pFpLi(x64emu_t *emu, uintptr_t fnc); void pFpLu(x64emu_t *emu, uintptr_t fnc); void pFpLL(x64emu_t *emu, uintptr_t fnc); void pFpLp(x64emu_t *emu, uintptr_t fnc); +void pFppc(x64emu_t *emu, uintptr_t fnc); void pFppi(x64emu_t *emu, uintptr_t fnc); void pFppI(x64emu_t *emu, uintptr_t fnc); -void pFppC(x64emu_t *emu, uintptr_t fnc); void pFppu(x64emu_t *emu, uintptr_t fnc); void pFppU(x64emu_t *emu, uintptr_t fnc); void pFppf(x64emu_t *emu, uintptr_t fnc); +void pFppd(x64emu_t *emu, uintptr_t fnc); void pFppl(x64emu_t *emu, uintptr_t fnc); void pFppL(x64emu_t *emu, uintptr_t fnc); void pFppp(x64emu_t *emu, uintptr_t fnc); +void pFppS(x64emu_t *emu, uintptr_t fnc); void pFppA(x64emu_t *emu, uintptr_t fnc); -void pFpOM(x64emu_t *emu, uintptr_t fnc); +void pFpSp(x64emu_t *emu, uintptr_t fnc); void pFpbi(x64emu_t *emu, uintptr_t fnc); void pFSpl(x64emu_t *emu, uintptr_t fnc); void pFbCC(x64emu_t *emu, uintptr_t fnc); @@ -796,6 +845,9 @@ void pFbUp(x64emu_t *emu, uintptr_t fnc); void pFbpi(x64emu_t *emu, uintptr_t fnc); void pFbpu(x64emu_t *emu, uintptr_t fnc); void pFbpp(x64emu_t *emu, uintptr_t fnc); +void SFEpp(x64emu_t *emu, uintptr_t fnc); +void SFpLp(x64emu_t *emu, uintptr_t fnc); +void SFppS(x64emu_t *emu, uintptr_t fnc); void vWpup(x64emu_t *emu, uintptr_t fnc); void iWEip(x64emu_t *emu, uintptr_t fnc); void iWEpp(x64emu_t *emu, uintptr_t fnc); @@ -808,16 +860,17 @@ void iWppu(x64emu_t *emu, uintptr_t fnc); void iWppp(x64emu_t *emu, uintptr_t fnc); void uWpui(x64emu_t *emu, uintptr_t fnc); void uWpup(x64emu_t *emu, uintptr_t fnc); -void vFEiip(x64emu_t *emu, uintptr_t fnc); void vFEipp(x64emu_t *emu, uintptr_t fnc); void vFEipV(x64emu_t *emu, uintptr_t fnc); void vFEipA(x64emu_t *emu, uintptr_t fnc); void vFELLp(x64emu_t *emu, uintptr_t fnc); void vFEpii(x64emu_t *emu, uintptr_t fnc); void vFEpip(x64emu_t *emu, uintptr_t fnc); -void vFEpiA(x64emu_t *emu, uintptr_t fnc); void vFEpup(x64emu_t *emu, uintptr_t fnc); +void vFEpuV(x64emu_t *emu, uintptr_t fnc); +void vFEpuA(x64emu_t *emu, uintptr_t fnc); void vFEpUp(x64emu_t *emu, uintptr_t fnc); +void vFEpLp(x64emu_t *emu, uintptr_t fnc); void vFEppp(x64emu_t *emu, uintptr_t fnc); void vFEppV(x64emu_t *emu, uintptr_t fnc); void vFEppA(x64emu_t *emu, uintptr_t fnc); @@ -828,17 +881,17 @@ void vFiiip(x64emu_t *emu, uintptr_t fnc); void vFiiCp(x64emu_t *emu, uintptr_t fnc); void vFiill(x64emu_t *emu, uintptr_t fnc); void vFiipV(x64emu_t *emu, uintptr_t fnc); +void vFiIII(x64emu_t *emu, uintptr_t fnc); void vFiuip(x64emu_t *emu, uintptr_t fnc); void vFiuuu(x64emu_t *emu, uintptr_t fnc); void vFiulp(x64emu_t *emu, uintptr_t fnc); void vFiupV(x64emu_t *emu, uintptr_t fnc); +void vFiUUU(x64emu_t *emu, uintptr_t fnc); void vFifff(x64emu_t *emu, uintptr_t fnc); void vFiddd(x64emu_t *emu, uintptr_t fnc); void vFilip(x64emu_t *emu, uintptr_t fnc); -void vFilll(x64emu_t *emu, uintptr_t fnc); void vFilpu(x64emu_t *emu, uintptr_t fnc); void vFilpp(x64emu_t *emu, uintptr_t fnc); -void vFiLLL(x64emu_t *emu, uintptr_t fnc); void vFipii(x64emu_t *emu, uintptr_t fnc); void vFipup(x64emu_t *emu, uintptr_t fnc); void vFipll(x64emu_t *emu, uintptr_t fnc); @@ -849,21 +902,21 @@ void vFWWWW(x64emu_t *emu, uintptr_t fnc); void vFuccc(x64emu_t *emu, uintptr_t fnc); void vFuwww(x64emu_t *emu, uintptr_t fnc); void vFuiii(x64emu_t *emu, uintptr_t fnc); -void vFuiiu(x64emu_t *emu, uintptr_t fnc); void vFuiip(x64emu_t *emu, uintptr_t fnc); +void vFuiII(x64emu_t *emu, uintptr_t fnc); void vFuiui(x64emu_t *emu, uintptr_t fnc); void vFuiuC(x64emu_t *emu, uintptr_t fnc); void vFuiuu(x64emu_t *emu, uintptr_t fnc); void vFuiup(x64emu_t *emu, uintptr_t fnc); +void vFuiUU(x64emu_t *emu, uintptr_t fnc); void vFuifi(x64emu_t *emu, uintptr_t fnc); void vFuiff(x64emu_t *emu, uintptr_t fnc); void vFuidd(x64emu_t *emu, uintptr_t fnc); -void vFuill(x64emu_t *emu, uintptr_t fnc); void vFuilp(x64emu_t *emu, uintptr_t fnc); -void vFuiLL(x64emu_t *emu, uintptr_t fnc); void vFuipi(x64emu_t *emu, uintptr_t fnc); void vFuipu(x64emu_t *emu, uintptr_t fnc); void vFuipp(x64emu_t *emu, uintptr_t fnc); +void vFuIII(x64emu_t *emu, uintptr_t fnc); void vFuWWW(x64emu_t *emu, uintptr_t fnc); void vFuuii(x64emu_t *emu, uintptr_t fnc); void vFuuiu(x64emu_t *emu, uintptr_t fnc); @@ -877,24 +930,21 @@ void vFuuuf(x64emu_t *emu, uintptr_t fnc); void vFuuud(x64emu_t *emu, uintptr_t fnc); void vFuuul(x64emu_t *emu, uintptr_t fnc); void vFuuup(x64emu_t *emu, uintptr_t fnc); +void vFuuUl(x64emu_t *emu, uintptr_t fnc); void vFuuff(x64emu_t *emu, uintptr_t fnc); void vFuuli(x64emu_t *emu, uintptr_t fnc); -void vFuulp(x64emu_t *emu, uintptr_t fnc); -void vFuuLl(x64emu_t *emu, uintptr_t fnc); void vFuupi(x64emu_t *emu, uintptr_t fnc); void vFuupp(x64emu_t *emu, uintptr_t fnc); +void vFuUui(x64emu_t *emu, uintptr_t fnc); +void vFuUup(x64emu_t *emu, uintptr_t fnc); +void vFuUUU(x64emu_t *emu, uintptr_t fnc); void vFufff(x64emu_t *emu, uintptr_t fnc); void vFuddd(x64emu_t *emu, uintptr_t fnc); -void vFuluL(x64emu_t *emu, uintptr_t fnc); +void vFuluU(x64emu_t *emu, uintptr_t fnc); void vFullC(x64emu_t *emu, uintptr_t fnc); -void vFulll(x64emu_t *emu, uintptr_t fnc); void vFullp(x64emu_t *emu, uintptr_t fnc); -void vFulpi(x64emu_t *emu, uintptr_t fnc); void vFulpu(x64emu_t *emu, uintptr_t fnc); void vFulpp(x64emu_t *emu, uintptr_t fnc); -void vFuLui(x64emu_t *emu, uintptr_t fnc); -void vFuLup(x64emu_t *emu, uintptr_t fnc); -void vFuLLL(x64emu_t *emu, uintptr_t fnc); void vFupii(x64emu_t *emu, uintptr_t fnc); void vFuppi(x64emu_t *emu, uintptr_t fnc); void vFuppu(x64emu_t *emu, uintptr_t fnc); @@ -904,17 +954,17 @@ void vFdddd(x64emu_t *emu, uintptr_t fnc); void vFllii(x64emu_t *emu, uintptr_t fnc); void vFLuui(x64emu_t *emu, uintptr_t fnc); void vFLppi(x64emu_t *emu, uintptr_t fnc); +void vFpwwu(x64emu_t *emu, uintptr_t fnc); void vFpiii(x64emu_t *emu, uintptr_t fnc); void vFpiiu(x64emu_t *emu, uintptr_t fnc); void vFpiid(x64emu_t *emu, uintptr_t fnc); void vFpiip(x64emu_t *emu, uintptr_t fnc); void vFpiui(x64emu_t *emu, uintptr_t fnc); -void vFpiuu(x64emu_t *emu, uintptr_t fnc); void vFpiuL(x64emu_t *emu, uintptr_t fnc); void vFpiup(x64emu_t *emu, uintptr_t fnc); void vFpiUu(x64emu_t *emu, uintptr_t fnc); void vFpiUU(x64emu_t *emu, uintptr_t fnc); -void vFpifi(x64emu_t *emu, uintptr_t fnc); +void vFpiLu(x64emu_t *emu, uintptr_t fnc); void vFpipi(x64emu_t *emu, uintptr_t fnc); void vFpipu(x64emu_t *emu, uintptr_t fnc); void vFpipp(x64emu_t *emu, uintptr_t fnc); @@ -940,10 +990,13 @@ void vFpdup(x64emu_t *emu, uintptr_t fnc); void vFpddu(x64emu_t *emu, uintptr_t fnc); void vFpddd(x64emu_t *emu, uintptr_t fnc); void vFplll(x64emu_t *emu, uintptr_t fnc); +void vFpllL(x64emu_t *emu, uintptr_t fnc); void vFplpp(x64emu_t *emu, uintptr_t fnc); void vFpLii(x64emu_t *emu, uintptr_t fnc); void vFpLuu(x64emu_t *emu, uintptr_t fnc); void vFpLLL(x64emu_t *emu, uintptr_t fnc); +void vFpLLp(x64emu_t *emu, uintptr_t fnc); +void vFpLpi(x64emu_t *emu, uintptr_t fnc); void vFpLpu(x64emu_t *emu, uintptr_t fnc); void vFpLpL(x64emu_t *emu, uintptr_t fnc); void vFpLpp(x64emu_t *emu, uintptr_t fnc); @@ -970,6 +1023,8 @@ void vFpppd(x64emu_t *emu, uintptr_t fnc); void vFpppl(x64emu_t *emu, uintptr_t fnc); void vFpppL(x64emu_t *emu, uintptr_t fnc); void vFpppp(x64emu_t *emu, uintptr_t fnc); +void vFHHpi(x64emu_t *emu, uintptr_t fnc); +void cFpiii(x64emu_t *emu, uintptr_t fnc); void cFpipp(x64emu_t *emu, uintptr_t fnc); void iFEiip(x64emu_t *emu, uintptr_t fnc); void iFEiiN(x64emu_t *emu, uintptr_t fnc); @@ -994,34 +1049,39 @@ void iFEppL(x64emu_t *emu, uintptr_t fnc); void iFEppp(x64emu_t *emu, uintptr_t fnc); void iFEppV(x64emu_t *emu, uintptr_t fnc); void iFEppA(x64emu_t *emu, uintptr_t fnc); -void iFEpOu(x64emu_t *emu, uintptr_t fnc); +void iFEpON(x64emu_t *emu, uintptr_t fnc); +void iFESpV(x64emu_t *emu, uintptr_t fnc); +void iFESpA(x64emu_t *emu, uintptr_t fnc); void iFwwww(x64emu_t *emu, uintptr_t fnc); void iFwppp(x64emu_t *emu, uintptr_t fnc); void iFiiii(x64emu_t *emu, uintptr_t fnc); void iFiiiu(x64emu_t *emu, uintptr_t fnc); void iFiiip(x64emu_t *emu, uintptr_t fnc); void iFiiiN(x64emu_t *emu, uintptr_t fnc); +void iFiiII(x64emu_t *emu, uintptr_t fnc); void iFiiui(x64emu_t *emu, uintptr_t fnc); void iFiill(x64emu_t *emu, uintptr_t fnc); void iFiipi(x64emu_t *emu, uintptr_t fnc); void iFiipp(x64emu_t *emu, uintptr_t fnc); +void iFiIIi(x64emu_t *emu, uintptr_t fnc); +void iFiIIu(x64emu_t *emu, uintptr_t fnc); void iFiWii(x64emu_t *emu, uintptr_t fnc); void iFiuwp(x64emu_t *emu, uintptr_t fnc); void iFiuup(x64emu_t *emu, uintptr_t fnc); void iFiupp(x64emu_t *emu, uintptr_t fnc); void iFilli(x64emu_t *emu, uintptr_t fnc); -void iFillu(x64emu_t *emu, uintptr_t fnc); void iFiLpL(x64emu_t *emu, uintptr_t fnc); void iFipii(x64emu_t *emu, uintptr_t fnc); void iFipip(x64emu_t *emu, uintptr_t fnc); void iFipWp(x64emu_t *emu, uintptr_t fnc); void iFipui(x64emu_t *emu, uintptr_t fnc); -void iFipuL(x64emu_t *emu, uintptr_t fnc); +void iFipuU(x64emu_t *emu, uintptr_t fnc); void iFipLi(x64emu_t *emu, uintptr_t fnc); void iFipLu(x64emu_t *emu, uintptr_t fnc); void iFipLp(x64emu_t *emu, uintptr_t fnc); void iFippi(x64emu_t *emu, uintptr_t fnc); void iFippu(x64emu_t *emu, uintptr_t fnc); +void iFippl(x64emu_t *emu, uintptr_t fnc); void iFippL(x64emu_t *emu, uintptr_t fnc); void iFippp(x64emu_t *emu, uintptr_t fnc); void iFipON(x64emu_t *emu, uintptr_t fnc); @@ -1030,6 +1090,7 @@ void iFuipp(x64emu_t *emu, uintptr_t fnc); void iFuWWp(x64emu_t *emu, uintptr_t fnc); void iFuuuu(x64emu_t *emu, uintptr_t fnc); void iFuupi(x64emu_t *emu, uintptr_t fnc); +void iFuupu(x64emu_t *emu, uintptr_t fnc); void iFuupp(x64emu_t *emu, uintptr_t fnc); void iFupup(x64emu_t *emu, uintptr_t fnc); void iFupLp(x64emu_t *emu, uintptr_t fnc); @@ -1041,6 +1102,7 @@ void iFLppp(x64emu_t *emu, uintptr_t fnc); void iFpwww(x64emu_t *emu, uintptr_t fnc); void iFpwpp(x64emu_t *emu, uintptr_t fnc); void iFpiii(x64emu_t *emu, uintptr_t fnc); +void iFpiiC(x64emu_t *emu, uintptr_t fnc); void iFpiiu(x64emu_t *emu, uintptr_t fnc); void iFpiid(x64emu_t *emu, uintptr_t fnc); void iFpiiL(x64emu_t *emu, uintptr_t fnc); @@ -1049,16 +1111,18 @@ void iFpiuu(x64emu_t *emu, uintptr_t fnc); void iFpiuL(x64emu_t *emu, uintptr_t fnc); void iFpiup(x64emu_t *emu, uintptr_t fnc); void iFpiUp(x64emu_t *emu, uintptr_t fnc); +void iFpili(x64emu_t *emu, uintptr_t fnc); void iFpild(x64emu_t *emu, uintptr_t fnc); +void iFpiLL(x64emu_t *emu, uintptr_t fnc); void iFpipi(x64emu_t *emu, uintptr_t fnc); void iFpipu(x64emu_t *emu, uintptr_t fnc); void iFpipL(x64emu_t *emu, uintptr_t fnc); void iFpipp(x64emu_t *emu, uintptr_t fnc); void iFpipV(x64emu_t *emu, uintptr_t fnc); -void iFpIip(x64emu_t *emu, uintptr_t fnc); void iFpCCC(x64emu_t *emu, uintptr_t fnc); void iFpCpi(x64emu_t *emu, uintptr_t fnc); void iFpCpp(x64emu_t *emu, uintptr_t fnc); +void iFpWWW(x64emu_t *emu, uintptr_t fnc); void iFpWWu(x64emu_t *emu, uintptr_t fnc); void iFpWpp(x64emu_t *emu, uintptr_t fnc); void iFpuwp(x64emu_t *emu, uintptr_t fnc); @@ -1071,6 +1135,8 @@ void iFpuul(x64emu_t *emu, uintptr_t fnc); void iFpuuL(x64emu_t *emu, uintptr_t fnc); void iFpuup(x64emu_t *emu, uintptr_t fnc); void iFpuUp(x64emu_t *emu, uintptr_t fnc); +void iFpufp(x64emu_t *emu, uintptr_t fnc); +void iFpuLi(x64emu_t *emu, uintptr_t fnc); void iFpuLL(x64emu_t *emu, uintptr_t fnc); void iFpuLp(x64emu_t *emu, uintptr_t fnc); void iFpupi(x64emu_t *emu, uintptr_t fnc); @@ -1082,17 +1148,20 @@ void iFpupp(x64emu_t *emu, uintptr_t fnc); void iFpupV(x64emu_t *emu, uintptr_t fnc); void iFpUip(x64emu_t *emu, uintptr_t fnc); void iFpUup(x64emu_t *emu, uintptr_t fnc); +void iFpUUu(x64emu_t *emu, uintptr_t fnc); void iFpUUU(x64emu_t *emu, uintptr_t fnc); void iFpULp(x64emu_t *emu, uintptr_t fnc); void iFpUpp(x64emu_t *emu, uintptr_t fnc); void iFpdip(x64emu_t *emu, uintptr_t fnc); void iFplii(x64emu_t *emu, uintptr_t fnc); void iFplip(x64emu_t *emu, uintptr_t fnc); +void iFpllp(x64emu_t *emu, uintptr_t fnc); void iFplpi(x64emu_t *emu, uintptr_t fnc); void iFplpp(x64emu_t *emu, uintptr_t fnc); void iFpLii(x64emu_t *emu, uintptr_t fnc); void iFpLiL(x64emu_t *emu, uintptr_t fnc); void iFpLip(x64emu_t *emu, uintptr_t fnc); +void iFpLui(x64emu_t *emu, uintptr_t fnc); void iFpLuu(x64emu_t *emu, uintptr_t fnc); void iFpLup(x64emu_t *emu, uintptr_t fnc); void iFpLlp(x64emu_t *emu, uintptr_t fnc); @@ -1100,6 +1169,7 @@ void iFpLLu(x64emu_t *emu, uintptr_t fnc); void iFpLLL(x64emu_t *emu, uintptr_t fnc); void iFpLLp(x64emu_t *emu, uintptr_t fnc); void iFpLpi(x64emu_t *emu, uintptr_t fnc); +void iFpLpu(x64emu_t *emu, uintptr_t fnc); void iFpLpf(x64emu_t *emu, uintptr_t fnc); void iFpLpd(x64emu_t *emu, uintptr_t fnc); void iFpLpD(x64emu_t *emu, uintptr_t fnc); @@ -1124,6 +1194,8 @@ void iFppll(x64emu_t *emu, uintptr_t fnc); void iFpplL(x64emu_t *emu, uintptr_t fnc); void iFpplp(x64emu_t *emu, uintptr_t fnc); void iFppLi(x64emu_t *emu, uintptr_t fnc); +void iFppLu(x64emu_t *emu, uintptr_t fnc); +void iFppLl(x64emu_t *emu, uintptr_t fnc); void iFppLL(x64emu_t *emu, uintptr_t fnc); void iFppLp(x64emu_t *emu, uintptr_t fnc); void iFpppi(x64emu_t *emu, uintptr_t fnc); @@ -1131,16 +1203,16 @@ void iFpppC(x64emu_t *emu, uintptr_t fnc); void iFpppu(x64emu_t *emu, uintptr_t fnc); void iFpppL(x64emu_t *emu, uintptr_t fnc); void iFpppp(x64emu_t *emu, uintptr_t fnc); +void iFpONN(x64emu_t *emu, uintptr_t fnc); +void iFSpii(x64emu_t *emu, uintptr_t fnc); +void iFSpiL(x64emu_t *emu, uintptr_t fnc); void iFbupp(x64emu_t *emu, uintptr_t fnc); void IFEpIi(x64emu_t *emu, uintptr_t fnc); -void IFipUI(x64emu_t *emu, uintptr_t fnc); -void IFipUp(x64emu_t *emu, uintptr_t fnc); void IFpIip(x64emu_t *emu, uintptr_t fnc); void IFppii(x64emu_t *emu, uintptr_t fnc); void IFppip(x64emu_t *emu, uintptr_t fnc); void IFSIii(x64emu_t *emu, uintptr_t fnc); void CFuuff(x64emu_t *emu, uintptr_t fnc); -void CFpiii(x64emu_t *emu, uintptr_t fnc); void CFpLLi(x64emu_t *emu, uintptr_t fnc); void CFppip(x64emu_t *emu, uintptr_t fnc); void CFbupp(x64emu_t *emu, uintptr_t fnc); @@ -1152,24 +1224,29 @@ void uFiiii(x64emu_t *emu, uintptr_t fnc); void uFiiuu(x64emu_t *emu, uintptr_t fnc); void uFifff(x64emu_t *emu, uintptr_t fnc); void uFuuuu(x64emu_t *emu, uintptr_t fnc); +void uFuppd(x64emu_t *emu, uintptr_t fnc); +void uFLppp(x64emu_t *emu, uintptr_t fnc); void uFpiip(x64emu_t *emu, uintptr_t fnc); void uFpipu(x64emu_t *emu, uintptr_t fnc); void uFpipL(x64emu_t *emu, uintptr_t fnc); void uFpipp(x64emu_t *emu, uintptr_t fnc); void uFpCCC(x64emu_t *emu, uintptr_t fnc); -void uFpuip(x64emu_t *emu, uintptr_t fnc); void uFpuup(x64emu_t *emu, uintptr_t fnc); void uFpupi(x64emu_t *emu, uintptr_t fnc); void uFpupu(x64emu_t *emu, uintptr_t fnc); void uFpupp(x64emu_t *emu, uintptr_t fnc); void uFpubp(x64emu_t *emu, uintptr_t fnc); +void uFplup(x64emu_t *emu, uintptr_t fnc); +void uFppii(x64emu_t *emu, uintptr_t fnc); void uFppiu(x64emu_t *emu, uintptr_t fnc); void uFppip(x64emu_t *emu, uintptr_t fnc); void uFppuu(x64emu_t *emu, uintptr_t fnc); +void uFppup(x64emu_t *emu, uintptr_t fnc); void uFpplp(x64emu_t *emu, uintptr_t fnc); void uFppLp(x64emu_t *emu, uintptr_t fnc); void uFpppi(x64emu_t *emu, uintptr_t fnc); void uFpppu(x64emu_t *emu, uintptr_t fnc); +void uFpppd(x64emu_t *emu, uintptr_t fnc); void uFpppL(x64emu_t *emu, uintptr_t fnc); void uFpppp(x64emu_t *emu, uintptr_t fnc); void uFbipp(x64emu_t *emu, uintptr_t fnc); @@ -1189,6 +1266,7 @@ void lFEppL(x64emu_t *emu, uintptr_t fnc); void lFEppp(x64emu_t *emu, uintptr_t fnc); void lFiiLu(x64emu_t *emu, uintptr_t fnc); void lFiipL(x64emu_t *emu, uintptr_t fnc); +void lFipiI(x64emu_t *emu, uintptr_t fnc); void lFipil(x64emu_t *emu, uintptr_t fnc); void lFipLi(x64emu_t *emu, uintptr_t fnc); void lFipLI(x64emu_t *emu, uintptr_t fnc); @@ -1201,10 +1279,15 @@ void lFpili(x64emu_t *emu, uintptr_t fnc); void lFpilp(x64emu_t *emu, uintptr_t fnc); void lFpuip(x64emu_t *emu, uintptr_t fnc); void lFplip(x64emu_t *emu, uintptr_t fnc); +void lFplup(x64emu_t *emu, uintptr_t fnc); +void lFplpi(x64emu_t *emu, uintptr_t fnc); void lFplpp(x64emu_t *emu, uintptr_t fnc); void lFpLpp(x64emu_t *emu, uintptr_t fnc); void lFppii(x64emu_t *emu, uintptr_t fnc); void lFppip(x64emu_t *emu, uintptr_t fnc); +void lFppiS(x64emu_t *emu, uintptr_t fnc); +void lFpplp(x64emu_t *emu, uintptr_t fnc); +void lFppLp(x64emu_t *emu, uintptr_t fnc); void lFpppL(x64emu_t *emu, uintptr_t fnc); void lFpppp(x64emu_t *emu, uintptr_t fnc); void LFEppL(x64emu_t *emu, uintptr_t fnc); @@ -1216,7 +1299,10 @@ void LFuipL(x64emu_t *emu, uintptr_t fnc); void LFpCii(x64emu_t *emu, uintptr_t fnc); void LFpupL(x64emu_t *emu, uintptr_t fnc); void LFpLCL(x64emu_t *emu, uintptr_t fnc); +void LFpLuu(x64emu_t *emu, uintptr_t fnc); void LFpLLp(x64emu_t *emu, uintptr_t fnc); +void LFpLLS(x64emu_t *emu, uintptr_t fnc); +void LFpLpi(x64emu_t *emu, uintptr_t fnc); void LFpLpL(x64emu_t *emu, uintptr_t fnc); void LFpLpp(x64emu_t *emu, uintptr_t fnc); void LFppii(x64emu_t *emu, uintptr_t fnc); @@ -1234,7 +1320,8 @@ void pFELpV(x64emu_t *emu, uintptr_t fnc); void pFELpA(x64emu_t *emu, uintptr_t fnc); void pFEpii(x64emu_t *emu, uintptr_t fnc); void pFEpip(x64emu_t *emu, uintptr_t fnc); -void pFEpuL(x64emu_t *emu, uintptr_t fnc); +void pFEpiV(x64emu_t *emu, uintptr_t fnc); +void pFEpCL(x64emu_t *emu, uintptr_t fnc); void pFEppi(x64emu_t *emu, uintptr_t fnc); void pFEppp(x64emu_t *emu, uintptr_t fnc); void pFEppV(x64emu_t *emu, uintptr_t fnc); @@ -1244,17 +1331,19 @@ void pFiiuu(x64emu_t *emu, uintptr_t fnc); void pFiiup(x64emu_t *emu, uintptr_t fnc); void pFiiLp(x64emu_t *emu, uintptr_t fnc); void pFiipi(x64emu_t *emu, uintptr_t fnc); +void pFiipp(x64emu_t *emu, uintptr_t fnc); void pFiIIi(x64emu_t *emu, uintptr_t fnc); void pFillu(x64emu_t *emu, uintptr_t fnc); -void pFipii(x64emu_t *emu, uintptr_t fnc); void pFipip(x64emu_t *emu, uintptr_t fnc); void pFippi(x64emu_t *emu, uintptr_t fnc); void pFippu(x64emu_t *emu, uintptr_t fnc); +void pFippl(x64emu_t *emu, uintptr_t fnc); void pFippL(x64emu_t *emu, uintptr_t fnc); void pFippp(x64emu_t *emu, uintptr_t fnc); void pFuuii(x64emu_t *emu, uintptr_t fnc); void pFuuip(x64emu_t *emu, uintptr_t fnc); void pFuuuu(x64emu_t *emu, uintptr_t fnc); +void pFuddd(x64emu_t *emu, uintptr_t fnc); void pFullu(x64emu_t *emu, uintptr_t fnc); void pFupii(x64emu_t *emu, uintptr_t fnc); void pFuppp(x64emu_t *emu, uintptr_t fnc); @@ -1273,6 +1362,7 @@ void pFpiip(x64emu_t *emu, uintptr_t fnc); void pFpiuu(x64emu_t *emu, uintptr_t fnc); void pFpiLi(x64emu_t *emu, uintptr_t fnc); void pFpiLL(x64emu_t *emu, uintptr_t fnc); +void pFpipc(x64emu_t *emu, uintptr_t fnc); void pFpipi(x64emu_t *emu, uintptr_t fnc); void pFpipd(x64emu_t *emu, uintptr_t fnc); void pFpipL(x64emu_t *emu, uintptr_t fnc); @@ -1306,6 +1396,7 @@ void pFppii(x64emu_t *emu, uintptr_t fnc); void pFppiu(x64emu_t *emu, uintptr_t fnc); void pFppiL(x64emu_t *emu, uintptr_t fnc); void pFppip(x64emu_t *emu, uintptr_t fnc); +void pFppiS(x64emu_t *emu, uintptr_t fnc); void pFppCp(x64emu_t *emu, uintptr_t fnc); void pFppWp(x64emu_t *emu, uintptr_t fnc); void pFppuu(x64emu_t *emu, uintptr_t fnc); @@ -1321,6 +1412,7 @@ void pFpppi(x64emu_t *emu, uintptr_t fnc); void pFpppu(x64emu_t *emu, uintptr_t fnc); void pFpppL(x64emu_t *emu, uintptr_t fnc); void pFpppp(x64emu_t *emu, uintptr_t fnc); +void pFpONN(x64emu_t *emu, uintptr_t fnc); void pFpbii(x64emu_t *emu, uintptr_t fnc); void pFSppi(x64emu_t *emu, uintptr_t fnc); void pFbCuW(x64emu_t *emu, uintptr_t fnc); @@ -1356,8 +1448,8 @@ void vFEpipV(x64emu_t *emu, uintptr_t fnc); void vFEpipA(x64emu_t *emu, uintptr_t fnc); void vFEpuup(x64emu_t *emu, uintptr_t fnc); void vFEpuuV(x64emu_t *emu, uintptr_t fnc); +void vFEpuuA(x64emu_t *emu, uintptr_t fnc); void vFEpupp(x64emu_t *emu, uintptr_t fnc); -void vFEpupA(x64emu_t *emu, uintptr_t fnc); void vFEpLLp(x64emu_t *emu, uintptr_t fnc); void vFEppip(x64emu_t *emu, uintptr_t fnc); void vFEppiV(x64emu_t *emu, uintptr_t fnc); @@ -1372,19 +1464,18 @@ void vFiiuii(x64emu_t *emu, uintptr_t fnc); void vFiiuup(x64emu_t *emu, uintptr_t fnc); void vFiillu(x64emu_t *emu, uintptr_t fnc); void vFiilll(x64emu_t *emu, uintptr_t fnc); -void vFiipii(x64emu_t *emu, uintptr_t fnc); void vFiipll(x64emu_t *emu, uintptr_t fnc); +void vFiIIII(x64emu_t *emu, uintptr_t fnc); void vFiuiip(x64emu_t *emu, uintptr_t fnc); void vFiuipi(x64emu_t *emu, uintptr_t fnc); void vFiuuuu(x64emu_t *emu, uintptr_t fnc); void vFiulpp(x64emu_t *emu, uintptr_t fnc); +void vFiUUUU(x64emu_t *emu, uintptr_t fnc); void vFiffff(x64emu_t *emu, uintptr_t fnc); void vFidddd(x64emu_t *emu, uintptr_t fnc); void vFilill(x64emu_t *emu, uintptr_t fnc); void vFilipi(x64emu_t *emu, uintptr_t fnc); void vFilipl(x64emu_t *emu, uintptr_t fnc); -void vFillll(x64emu_t *emu, uintptr_t fnc); -void vFiLLLL(x64emu_t *emu, uintptr_t fnc); void vFipipu(x64emu_t *emu, uintptr_t fnc); void vFipipp(x64emu_t *emu, uintptr_t fnc); void vFipupi(x64emu_t *emu, uintptr_t fnc); @@ -1396,6 +1487,7 @@ void vFuiiip(x64emu_t *emu, uintptr_t fnc); void vFuiiCp(x64emu_t *emu, uintptr_t fnc); void vFuiiup(x64emu_t *emu, uintptr_t fnc); void vFuiill(x64emu_t *emu, uintptr_t fnc); +void vFuiIII(x64emu_t *emu, uintptr_t fnc); void vFuiuii(x64emu_t *emu, uintptr_t fnc); void vFuiuip(x64emu_t *emu, uintptr_t fnc); void vFuiuCi(x64emu_t *emu, uintptr_t fnc); @@ -1403,20 +1495,19 @@ void vFuiuCu(x64emu_t *emu, uintptr_t fnc); void vFuiuuu(x64emu_t *emu, uintptr_t fnc); void vFuiuup(x64emu_t *emu, uintptr_t fnc); void vFuiupi(x64emu_t *emu, uintptr_t fnc); +void vFuiUUU(x64emu_t *emu, uintptr_t fnc); void vFuifff(x64emu_t *emu, uintptr_t fnc); void vFuiddd(x64emu_t *emu, uintptr_t fnc); -void vFuilll(x64emu_t *emu, uintptr_t fnc); -void vFuiLLL(x64emu_t *emu, uintptr_t fnc); void vFuipii(x64emu_t *emu, uintptr_t fnc); void vFuipip(x64emu_t *emu, uintptr_t fnc); void vFuipup(x64emu_t *emu, uintptr_t fnc); void vFuippp(x64emu_t *emu, uintptr_t fnc); +void vFuIIII(x64emu_t *emu, uintptr_t fnc); void vFuCCCC(x64emu_t *emu, uintptr_t fnc); void vFuCuip(x64emu_t *emu, uintptr_t fnc); void vFuCuup(x64emu_t *emu, uintptr_t fnc); void vFuWWWW(x64emu_t *emu, uintptr_t fnc); void vFuuiii(x64emu_t *emu, uintptr_t fnc); -void vFuuiiu(x64emu_t *emu, uintptr_t fnc); void vFuuiip(x64emu_t *emu, uintptr_t fnc); void vFuuiui(x64emu_t *emu, uintptr_t fnc); void vFuuiuu(x64emu_t *emu, uintptr_t fnc); @@ -1438,12 +1529,10 @@ void vFuulll(x64emu_t *emu, uintptr_t fnc); void vFuullp(x64emu_t *emu, uintptr_t fnc); void vFuupii(x64emu_t *emu, uintptr_t fnc); void vFuuppu(x64emu_t *emu, uintptr_t fnc); +void vFuUUUU(x64emu_t *emu, uintptr_t fnc); void vFuffff(x64emu_t *emu, uintptr_t fnc); void vFudddd(x64emu_t *emu, uintptr_t fnc); -void vFulill(x64emu_t *emu, uintptr_t fnc); -void vFullll(x64emu_t *emu, uintptr_t fnc); void vFullpu(x64emu_t *emu, uintptr_t fnc); -void vFuLLLL(x64emu_t *emu, uintptr_t fnc); void vFupiii(x64emu_t *emu, uintptr_t fnc); void vFupupi(x64emu_t *emu, uintptr_t fnc); void vFupupp(x64emu_t *emu, uintptr_t fnc); @@ -1456,6 +1545,7 @@ void vFddddp(x64emu_t *emu, uintptr_t fnc); void vFluipp(x64emu_t *emu, uintptr_t fnc); void vFLpppi(x64emu_t *emu, uintptr_t fnc); void vFLpppp(x64emu_t *emu, uintptr_t fnc); +void vFpwwWW(x64emu_t *emu, uintptr_t fnc); void vFpiiii(x64emu_t *emu, uintptr_t fnc); void vFpiiiI(x64emu_t *emu, uintptr_t fnc); void vFpiiiu(x64emu_t *emu, uintptr_t fnc); @@ -1472,6 +1562,7 @@ void vFpiUUu(x64emu_t *emu, uintptr_t fnc); void vFpiUUp(x64emu_t *emu, uintptr_t fnc); void vFpilpp(x64emu_t *emu, uintptr_t fnc); void vFpipii(x64emu_t *emu, uintptr_t fnc); +void vFpipiu(x64emu_t *emu, uintptr_t fnc); void vFpippi(x64emu_t *emu, uintptr_t fnc); void vFpippp(x64emu_t *emu, uintptr_t fnc); void vFpuiip(x64emu_t *emu, uintptr_t fnc); @@ -1494,13 +1585,19 @@ void vFpdiII(x64emu_t *emu, uintptr_t fnc); void vFpddii(x64emu_t *emu, uintptr_t fnc); void vFpdddd(x64emu_t *emu, uintptr_t fnc); void vFpddpp(x64emu_t *emu, uintptr_t fnc); +void vFpliip(x64emu_t *emu, uintptr_t fnc); void vFpluul(x64emu_t *emu, uintptr_t fnc); void vFplppp(x64emu_t *emu, uintptr_t fnc); +void vFpLiii(x64emu_t *emu, uintptr_t fnc); +void vFpLiiL(x64emu_t *emu, uintptr_t fnc); void vFpLLLL(x64emu_t *emu, uintptr_t fnc); void vFpLLpp(x64emu_t *emu, uintptr_t fnc); void vFpLpiL(x64emu_t *emu, uintptr_t fnc); +void vFpLppi(x64emu_t *emu, uintptr_t fnc); +void vFppiic(x64emu_t *emu, uintptr_t fnc); void vFppiii(x64emu_t *emu, uintptr_t fnc); void vFppiiu(x64emu_t *emu, uintptr_t fnc); +void vFppiiL(x64emu_t *emu, uintptr_t fnc); void vFppiip(x64emu_t *emu, uintptr_t fnc); void vFppiui(x64emu_t *emu, uintptr_t fnc); void vFppiup(x64emu_t *emu, uintptr_t fnc); @@ -1540,7 +1637,6 @@ void iFEiipV(x64emu_t *emu, uintptr_t fnc); void iFEiipA(x64emu_t *emu, uintptr_t fnc); void iFEipip(x64emu_t *emu, uintptr_t fnc); void iFEippi(x64emu_t *emu, uintptr_t fnc); -void iFEippL(x64emu_t *emu, uintptr_t fnc); void iFEippp(x64emu_t *emu, uintptr_t fnc); void iFEpiii(x64emu_t *emu, uintptr_t fnc); void iFEpipi(x64emu_t *emu, uintptr_t fnc); @@ -1553,8 +1649,8 @@ void iFEpLpV(x64emu_t *emu, uintptr_t fnc); void iFEpLpA(x64emu_t *emu, uintptr_t fnc); void iFEppii(x64emu_t *emu, uintptr_t fnc); void iFEppip(x64emu_t *emu, uintptr_t fnc); -void iFEppiV(x64emu_t *emu, uintptr_t fnc); void iFEppiA(x64emu_t *emu, uintptr_t fnc); +void iFEppup(x64emu_t *emu, uintptr_t fnc); void iFEpplp(x64emu_t *emu, uintptr_t fnc); void iFEpppi(x64emu_t *emu, uintptr_t fnc); void iFEpppL(x64emu_t *emu, uintptr_t fnc); @@ -1564,12 +1660,12 @@ void iFEpppA(x64emu_t *emu, uintptr_t fnc); void iFiiipu(x64emu_t *emu, uintptr_t fnc); void iFiiipp(x64emu_t *emu, uintptr_t fnc); void iFiiupp(x64emu_t *emu, uintptr_t fnc); +void iFiippp(x64emu_t *emu, uintptr_t fnc); void iFiuuuu(x64emu_t *emu, uintptr_t fnc); void iFiuuup(x64emu_t *emu, uintptr_t fnc); -void iFiuLip(x64emu_t *emu, uintptr_t fnc); +void iFiuUip(x64emu_t *emu, uintptr_t fnc); void iFillLL(x64emu_t *emu, uintptr_t fnc); void iFipiii(x64emu_t *emu, uintptr_t fnc); -void iFipiup(x64emu_t *emu, uintptr_t fnc); void iFipipi(x64emu_t *emu, uintptr_t fnc); void iFipipu(x64emu_t *emu, uintptr_t fnc); void iFipuip(x64emu_t *emu, uintptr_t fnc); @@ -1580,7 +1676,9 @@ void iFippLi(x64emu_t *emu, uintptr_t fnc); void iFippLp(x64emu_t *emu, uintptr_t fnc); void iFipppi(x64emu_t *emu, uintptr_t fnc); void iFipppp(x64emu_t *emu, uintptr_t fnc); +void iFuiuup(x64emu_t *emu, uintptr_t fnc); void iFuuupp(x64emu_t *emu, uintptr_t fnc); +void iFuupid(x64emu_t *emu, uintptr_t fnc); void iFuppLp(x64emu_t *emu, uintptr_t fnc); void iFLppip(x64emu_t *emu, uintptr_t fnc); void iFLpppp(x64emu_t *emu, uintptr_t fnc); @@ -1597,13 +1695,17 @@ void iFpiipp(x64emu_t *emu, uintptr_t fnc); void iFpiIip(x64emu_t *emu, uintptr_t fnc); void iFpiuwp(x64emu_t *emu, uintptr_t fnc); void iFpiuuu(x64emu_t *emu, uintptr_t fnc); +void iFpiuLi(x64emu_t *emu, uintptr_t fnc); void iFpiUUU(x64emu_t *emu, uintptr_t fnc); +void iFpiLip(x64emu_t *emu, uintptr_t fnc); +void iFpiLuu(x64emu_t *emu, uintptr_t fnc); void iFpipii(x64emu_t *emu, uintptr_t fnc); void iFpipiu(x64emu_t *emu, uintptr_t fnc); void iFpipiL(x64emu_t *emu, uintptr_t fnc); void iFpipip(x64emu_t *emu, uintptr_t fnc); void iFpippi(x64emu_t *emu, uintptr_t fnc); void iFpippW(x64emu_t *emu, uintptr_t fnc); +void iFpippL(x64emu_t *emu, uintptr_t fnc); void iFpippp(x64emu_t *emu, uintptr_t fnc); void iFpCCCC(x64emu_t *emu, uintptr_t fnc); void iFpCupp(x64emu_t *emu, uintptr_t fnc); @@ -1612,19 +1714,21 @@ void iFpuill(x64emu_t *emu, uintptr_t fnc); void iFpuipi(x64emu_t *emu, uintptr_t fnc); void iFpuipp(x64emu_t *emu, uintptr_t fnc); void iFpuuip(x64emu_t *emu, uintptr_t fnc); -void iFpuuui(x64emu_t *emu, uintptr_t fnc); void iFpuuup(x64emu_t *emu, uintptr_t fnc); void iFpuuLL(x64emu_t *emu, uintptr_t fnc); void iFpuuLp(x64emu_t *emu, uintptr_t fnc); void iFpuupp(x64emu_t *emu, uintptr_t fnc); void iFpulup(x64emu_t *emu, uintptr_t fnc); void iFpulpp(x64emu_t *emu, uintptr_t fnc); +void iFpuLup(x64emu_t *emu, uintptr_t fnc); void iFpuLpL(x64emu_t *emu, uintptr_t fnc); void iFpuLpp(x64emu_t *emu, uintptr_t fnc); void iFpupui(x64emu_t *emu, uintptr_t fnc); void iFpupuu(x64emu_t *emu, uintptr_t fnc); void iFpupuU(x64emu_t *emu, uintptr_t fnc); void iFpupup(x64emu_t *emu, uintptr_t fnc); +void iFpupLu(x64emu_t *emu, uintptr_t fnc); +void iFpuppu(x64emu_t *emu, uintptr_t fnc); void iFpuppL(x64emu_t *emu, uintptr_t fnc); void iFpuppp(x64emu_t *emu, uintptr_t fnc); void iFpUiUi(x64emu_t *emu, uintptr_t fnc); @@ -1634,10 +1738,11 @@ void iFplluu(x64emu_t *emu, uintptr_t fnc); void iFpLiup(x64emu_t *emu, uintptr_t fnc); void iFpLilp(x64emu_t *emu, uintptr_t fnc); void iFpLiLi(x64emu_t *emu, uintptr_t fnc); +void iFpLipi(x64emu_t *emu, uintptr_t fnc); +void iFpLuLi(x64emu_t *emu, uintptr_t fnc); void iFpLlpp(x64emu_t *emu, uintptr_t fnc); void iFpLLii(x64emu_t *emu, uintptr_t fnc); void iFpLLup(x64emu_t *emu, uintptr_t fnc); -void iFpLLpp(x64emu_t *emu, uintptr_t fnc); void iFpLpii(x64emu_t *emu, uintptr_t fnc); void iFpLpiL(x64emu_t *emu, uintptr_t fnc); void iFpLpuL(x64emu_t *emu, uintptr_t fnc); @@ -1646,6 +1751,7 @@ void iFpLpLi(x64emu_t *emu, uintptr_t fnc); void iFpLppi(x64emu_t *emu, uintptr_t fnc); void iFpLppL(x64emu_t *emu, uintptr_t fnc); void iFpLppp(x64emu_t *emu, uintptr_t fnc); +void iFppiii(x64emu_t *emu, uintptr_t fnc); void iFppiiu(x64emu_t *emu, uintptr_t fnc); void iFppiiL(x64emu_t *emu, uintptr_t fnc); void iFppiip(x64emu_t *emu, uintptr_t fnc); @@ -1655,6 +1761,7 @@ void iFppiLi(x64emu_t *emu, uintptr_t fnc); void iFppiLL(x64emu_t *emu, uintptr_t fnc); void iFppipi(x64emu_t *emu, uintptr_t fnc); void iFppipu(x64emu_t *emu, uintptr_t fnc); +void iFppipl(x64emu_t *emu, uintptr_t fnc); void iFppipp(x64emu_t *emu, uintptr_t fnc); void iFppuwp(x64emu_t *emu, uintptr_t fnc); void iFppuip(x64emu_t *emu, uintptr_t fnc); @@ -1667,32 +1774,40 @@ void iFppUup(x64emu_t *emu, uintptr_t fnc); void iFpplii(x64emu_t *emu, uintptr_t fnc); void iFppllp(x64emu_t *emu, uintptr_t fnc); void iFpplpp(x64emu_t *emu, uintptr_t fnc); +void iFppLiL(x64emu_t *emu, uintptr_t fnc); void iFppLup(x64emu_t *emu, uintptr_t fnc); +void iFppLLi(x64emu_t *emu, uintptr_t fnc); void iFppLpi(x64emu_t *emu, uintptr_t fnc); void iFppLpL(x64emu_t *emu, uintptr_t fnc); void iFppLpp(x64emu_t *emu, uintptr_t fnc); void iFpppii(x64emu_t *emu, uintptr_t fnc); void iFpppip(x64emu_t *emu, uintptr_t fnc); void iFpppui(x64emu_t *emu, uintptr_t fnc); +void iFpppuu(x64emu_t *emu, uintptr_t fnc); void iFpppup(x64emu_t *emu, uintptr_t fnc); void iFpppUi(x64emu_t *emu, uintptr_t fnc); void iFpppLi(x64emu_t *emu, uintptr_t fnc); +void iFpppLu(x64emu_t *emu, uintptr_t fnc); void iFpppLL(x64emu_t *emu, uintptr_t fnc); void iFpppLp(x64emu_t *emu, uintptr_t fnc); void iFppppi(x64emu_t *emu, uintptr_t fnc); void iFppppu(x64emu_t *emu, uintptr_t fnc); +void iFppppd(x64emu_t *emu, uintptr_t fnc); void iFppppl(x64emu_t *emu, uintptr_t fnc); void iFppppL(x64emu_t *emu, uintptr_t fnc); void iFppppp(x64emu_t *emu, uintptr_t fnc); +void iFpSipp(x64emu_t *emu, uintptr_t fnc); +void iFpSuif(x64emu_t *emu, uintptr_t fnc); +void iFSppLp(x64emu_t *emu, uintptr_t fnc); void IFppIII(x64emu_t *emu, uintptr_t fnc); void uFEippp(x64emu_t *emu, uintptr_t fnc); void uFEpipp(x64emu_t *emu, uintptr_t fnc); -void uFEppuu(x64emu_t *emu, uintptr_t fnc); +void uFEpupp(x64emu_t *emu, uintptr_t fnc); void uFEpppp(x64emu_t *emu, uintptr_t fnc); void uFEpppV(x64emu_t *emu, uintptr_t fnc); void uFiuuuu(x64emu_t *emu, uintptr_t fnc); void uFiuppi(x64emu_t *emu, uintptr_t fnc); -void uFipipp(x64emu_t *emu, uintptr_t fnc); +void uFipupp(x64emu_t *emu, uintptr_t fnc); void uFipLpp(x64emu_t *emu, uintptr_t fnc); void uFuiiii(x64emu_t *emu, uintptr_t fnc); void uFLpppL(x64emu_t *emu, uintptr_t fnc); @@ -1707,15 +1822,20 @@ void uFppipp(x64emu_t *emu, uintptr_t fnc); void uFppuup(x64emu_t *emu, uintptr_t fnc); void uFppupp(x64emu_t *emu, uintptr_t fnc); void uFpplip(x64emu_t *emu, uintptr_t fnc); +void uFpplpp(x64emu_t *emu, uintptr_t fnc); void uFppLpp(x64emu_t *emu, uintptr_t fnc); +void uFpppip(x64emu_t *emu, uintptr_t fnc); void uFppppL(x64emu_t *emu, uintptr_t fnc); void uFppppp(x64emu_t *emu, uintptr_t fnc); void uFbCuuu(x64emu_t *emu, uintptr_t fnc); void uFbCuup(x64emu_t *emu, uintptr_t fnc); void uFbuuWW(x64emu_t *emu, uintptr_t fnc); void uFbuuup(x64emu_t *emu, uintptr_t fnc); -void UFuiiii(x64emu_t *emu, uintptr_t fnc); +void UFuiCiu(x64emu_t *emu, uintptr_t fnc); +void lFEippL(x64emu_t *emu, uintptr_t fnc); void lFEuipp(x64emu_t *emu, uintptr_t fnc); +void lFEppLL(x64emu_t *emu, uintptr_t fnc); +void lFipiIi(x64emu_t *emu, uintptr_t fnc); void lFipili(x64emu_t *emu, uintptr_t fnc); void lFipLli(x64emu_t *emu, uintptr_t fnc); void lFipLlL(x64emu_t *emu, uintptr_t fnc); @@ -1724,29 +1844,31 @@ void lFipLpp(x64emu_t *emu, uintptr_t fnc); void lFpuipC(x64emu_t *emu, uintptr_t fnc); void lFpuuLL(x64emu_t *emu, uintptr_t fnc); void lFppupp(x64emu_t *emu, uintptr_t fnc); -void lFppllp(x64emu_t *emu, uintptr_t fnc); void lFppLpL(x64emu_t *emu, uintptr_t fnc); void lFppLpp(x64emu_t *emu, uintptr_t fnc); -void LFELppi(x64emu_t *emu, uintptr_t fnc); +void LFELppu(x64emu_t *emu, uintptr_t fnc); +void LFEppLL(x64emu_t *emu, uintptr_t fnc); void LFEpppp(x64emu_t *emu, uintptr_t fnc); -void LFuiCiu(x64emu_t *emu, uintptr_t fnc); +void LFuuuuu(x64emu_t *emu, uintptr_t fnc); void LFLpppL(x64emu_t *emu, uintptr_t fnc); void LFpuipp(x64emu_t *emu, uintptr_t fnc); -void LFpuppi(x64emu_t *emu, uintptr_t fnc); +void LFpuupi(x64emu_t *emu, uintptr_t fnc); void LFpLuuu(x64emu_t *emu, uintptr_t fnc); void LFpLLLp(x64emu_t *emu, uintptr_t fnc); void LFpLpuu(x64emu_t *emu, uintptr_t fnc); +void LFpLpLp(x64emu_t *emu, uintptr_t fnc); void LFpLppL(x64emu_t *emu, uintptr_t fnc); void LFpLppp(x64emu_t *emu, uintptr_t fnc); void LFppLLp(x64emu_t *emu, uintptr_t fnc); void LFppLpL(x64emu_t *emu, uintptr_t fnc); void LFpppii(x64emu_t *emu, uintptr_t fnc); +void LFppppi(x64emu_t *emu, uintptr_t fnc); void LFppppp(x64emu_t *emu, uintptr_t fnc); +void pFEuipV(x64emu_t *emu, uintptr_t fnc); +void pFEuipA(x64emu_t *emu, uintptr_t fnc); void pFEpiii(x64emu_t *emu, uintptr_t fnc); void pFEpipL(x64emu_t *emu, uintptr_t fnc); void pFEpipp(x64emu_t *emu, uintptr_t fnc); -void pFEpipV(x64emu_t *emu, uintptr_t fnc); -void pFEpipA(x64emu_t *emu, uintptr_t fnc); void pFEpupp(x64emu_t *emu, uintptr_t fnc); void pFEpUpp(x64emu_t *emu, uintptr_t fnc); void pFEpLpp(x64emu_t *emu, uintptr_t fnc); @@ -1759,7 +1881,7 @@ void pFEpppp(x64emu_t *emu, uintptr_t fnc); void pFEpppV(x64emu_t *emu, uintptr_t fnc); void pFEpppA(x64emu_t *emu, uintptr_t fnc); void pFiiiii(x64emu_t *emu, uintptr_t fnc); -void pFiiipL(x64emu_t *emu, uintptr_t fnc); +void pFiiupL(x64emu_t *emu, uintptr_t fnc); void pFipipL(x64emu_t *emu, uintptr_t fnc); void pFipipp(x64emu_t *emu, uintptr_t fnc); void pFuiiiu(x64emu_t *emu, uintptr_t fnc); @@ -1784,6 +1906,7 @@ void pFpiuuu(x64emu_t *emu, uintptr_t fnc); void pFpiuup(x64emu_t *emu, uintptr_t fnc); void pFpiupp(x64emu_t *emu, uintptr_t fnc); void pFpiLip(x64emu_t *emu, uintptr_t fnc); +void pFpipii(x64emu_t *emu, uintptr_t fnc); void pFpipip(x64emu_t *emu, uintptr_t fnc); void pFpipup(x64emu_t *emu, uintptr_t fnc); void pFpippi(x64emu_t *emu, uintptr_t fnc); @@ -1802,6 +1925,7 @@ void pFpfffi(x64emu_t *emu, uintptr_t fnc); void pFpdddd(x64emu_t *emu, uintptr_t fnc); void pFplppp(x64emu_t *emu, uintptr_t fnc); void pFpLiii(x64emu_t *emu, uintptr_t fnc); +void pFpLipp(x64emu_t *emu, uintptr_t fnc); void pFpLLip(x64emu_t *emu, uintptr_t fnc); void pFpLLLp(x64emu_t *emu, uintptr_t fnc); void pFpLpii(x64emu_t *emu, uintptr_t fnc); @@ -1813,6 +1937,7 @@ void pFppiip(x64emu_t *emu, uintptr_t fnc); void pFppiup(x64emu_t *emu, uintptr_t fnc); void pFppipi(x64emu_t *emu, uintptr_t fnc); void pFppipp(x64emu_t *emu, uintptr_t fnc); +void pFppCip(x64emu_t *emu, uintptr_t fnc); void pFppWpp(x64emu_t *emu, uintptr_t fnc); void pFppuip(x64emu_t *emu, uintptr_t fnc); void pFppuuu(x64emu_t *emu, uintptr_t fnc); @@ -1859,11 +1984,10 @@ void vFEpiLpp(x64emu_t *emu, uintptr_t fnc); void vFEpippp(x64emu_t *emu, uintptr_t fnc); void vFEpuipp(x64emu_t *emu, uintptr_t fnc); void vFEpuipV(x64emu_t *emu, uintptr_t fnc); +void vFEpuipA(x64emu_t *emu, uintptr_t fnc); void vFEpupup(x64emu_t *emu, uintptr_t fnc); void vFEpuppp(x64emu_t *emu, uintptr_t fnc); void vFEpLLpp(x64emu_t *emu, uintptr_t fnc); -void vFEppipV(x64emu_t *emu, uintptr_t fnc); -void vFEppipA(x64emu_t *emu, uintptr_t fnc); void vFEppupp(x64emu_t *emu, uintptr_t fnc); void vFEpppLp(x64emu_t *emu, uintptr_t fnc); void vFEppppp(x64emu_t *emu, uintptr_t fnc); @@ -1871,36 +1995,35 @@ void vFiiiiii(x64emu_t *emu, uintptr_t fnc); void vFiiiuil(x64emu_t *emu, uintptr_t fnc); void vFiiilpi(x64emu_t *emu, uintptr_t fnc); void vFiiuilp(x64emu_t *emu, uintptr_t fnc); +void vFiipupV(x64emu_t *emu, uintptr_t fnc); void vFiffiff(x64emu_t *emu, uintptr_t fnc); void vFiddidd(x64emu_t *emu, uintptr_t fnc); void vFilipli(x64emu_t *emu, uintptr_t fnc); void vFiliplu(x64emu_t *emu, uintptr_t fnc); -void vFillill(x64emu_t *emu, uintptr_t fnc); void vFipiplp(x64emu_t *emu, uintptr_t fnc); void vFCCCCff(x64emu_t *emu, uintptr_t fnc); void vFuiiiii(x64emu_t *emu, uintptr_t fnc); void vFuiiiip(x64emu_t *emu, uintptr_t fnc); void vFuiiuii(x64emu_t *emu, uintptr_t fnc); void vFuiiuup(x64emu_t *emu, uintptr_t fnc); +void vFuiIIII(x64emu_t *emu, uintptr_t fnc); void vFuiuiii(x64emu_t *emu, uintptr_t fnc); void vFuiuiiC(x64emu_t *emu, uintptr_t fnc); void vFuiuiil(x64emu_t *emu, uintptr_t fnc); void vFuiuiip(x64emu_t *emu, uintptr_t fnc); void vFuiuiuu(x64emu_t *emu, uintptr_t fnc); -void vFuiuiuL(x64emu_t *emu, uintptr_t fnc); +void vFuiuiuU(x64emu_t *emu, uintptr_t fnc); void vFuiuCip(x64emu_t *emu, uintptr_t fnc); void vFuiuuip(x64emu_t *emu, uintptr_t fnc); void vFuiuuuu(x64emu_t *emu, uintptr_t fnc); void vFuiupii(x64emu_t *emu, uintptr_t fnc); void vFuiupiu(x64emu_t *emu, uintptr_t fnc); +void vFuiUUUU(x64emu_t *emu, uintptr_t fnc); void vFuiffff(x64emu_t *emu, uintptr_t fnc); void vFuidddd(x64emu_t *emu, uintptr_t fnc); -void vFuillll(x64emu_t *emu, uintptr_t fnc); -void vFuiLLLL(x64emu_t *emu, uintptr_t fnc); void vFuipiup(x64emu_t *emu, uintptr_t fnc); void vFuCuuip(x64emu_t *emu, uintptr_t fnc); void vFuuiiii(x64emu_t *emu, uintptr_t fnc); -void vFuuiiiu(x64emu_t *emu, uintptr_t fnc); void vFuuiuii(x64emu_t *emu, uintptr_t fnc); void vFuuiuil(x64emu_t *emu, uintptr_t fnc); void vFuuiuip(x64emu_t *emu, uintptr_t fnc); @@ -1926,8 +2049,7 @@ void vFuuplii(x64emu_t *emu, uintptr_t fnc); void vFuffiip(x64emu_t *emu, uintptr_t fnc); void vFufffff(x64emu_t *emu, uintptr_t fnc); void vFuddiip(x64emu_t *emu, uintptr_t fnc); -void vFullill(x64emu_t *emu, uintptr_t fnc); -void vFulluLC(x64emu_t *emu, uintptr_t fnc); +void vFulluUC(x64emu_t *emu, uintptr_t fnc); void vFupiiii(x64emu_t *emu, uintptr_t fnc); void vFupupip(x64emu_t *emu, uintptr_t fnc); void vFuppppu(x64emu_t *emu, uintptr_t fnc); @@ -1936,15 +2058,17 @@ void vFUUpppp(x64emu_t *emu, uintptr_t fnc); void vFffffff(x64emu_t *emu, uintptr_t fnc); void vFdddddd(x64emu_t *emu, uintptr_t fnc); void vFdddppp(x64emu_t *emu, uintptr_t fnc); +void vFpwwllc(x64emu_t *emu, uintptr_t fnc); void vFpiiiii(x64emu_t *emu, uintptr_t fnc); void vFpiiipp(x64emu_t *emu, uintptr_t fnc); void vFpiiuuu(x64emu_t *emu, uintptr_t fnc); +void vFpiilli(x64emu_t *emu, uintptr_t fnc); void vFpiippi(x64emu_t *emu, uintptr_t fnc); void vFpiippp(x64emu_t *emu, uintptr_t fnc); void vFpiUuup(x64emu_t *emu, uintptr_t fnc); +void vFpiLppi(x64emu_t *emu, uintptr_t fnc); void vFpipipp(x64emu_t *emu, uintptr_t fnc); void vFpipipV(x64emu_t *emu, uintptr_t fnc); -void vFpipppi(x64emu_t *emu, uintptr_t fnc); void vFpipppp(x64emu_t *emu, uintptr_t fnc); void vFpuiiii(x64emu_t *emu, uintptr_t fnc); void vFpuiiiu(x64emu_t *emu, uintptr_t fnc); @@ -1967,11 +2091,15 @@ void vFpUUiup(x64emu_t *emu, uintptr_t fnc); void vFpdddii(x64emu_t *emu, uintptr_t fnc); void vFpddddd(x64emu_t *emu, uintptr_t fnc); void vFpddddp(x64emu_t *emu, uintptr_t fnc); +void vFpLiiii(x64emu_t *emu, uintptr_t fnc); +void vFpLiiiL(x64emu_t *emu, uintptr_t fnc); +void vFpLiipi(x64emu_t *emu, uintptr_t fnc); +void vFpLLLLu(x64emu_t *emu, uintptr_t fnc); void vFpLpLLL(x64emu_t *emu, uintptr_t fnc); +void vFpLpppi(x64emu_t *emu, uintptr_t fnc); void vFppiiii(x64emu_t *emu, uintptr_t fnc); -void vFppiiip(x64emu_t *emu, uintptr_t fnc); +void vFppiiiu(x64emu_t *emu, uintptr_t fnc); void vFppiiuu(x64emu_t *emu, uintptr_t fnc); -void vFppiipi(x64emu_t *emu, uintptr_t fnc); void vFppiipp(x64emu_t *emu, uintptr_t fnc); void vFppilpp(x64emu_t *emu, uintptr_t fnc); void vFppipLp(x64emu_t *emu, uintptr_t fnc); @@ -1996,8 +2124,11 @@ void vFpppiip(x64emu_t *emu, uintptr_t fnc); void vFpppiui(x64emu_t *emu, uintptr_t fnc); void vFpppiff(x64emu_t *emu, uintptr_t fnc); void vFpppipu(x64emu_t *emu, uintptr_t fnc); +void vFpppipp(x64emu_t *emu, uintptr_t fnc); void vFpppuii(x64emu_t *emu, uintptr_t fnc); +void vFpppuip(x64emu_t *emu, uintptr_t fnc); void vFpppuuu(x64emu_t *emu, uintptr_t fnc); +void vFpppuup(x64emu_t *emu, uintptr_t fnc); void vFpppLpp(x64emu_t *emu, uintptr_t fnc); void vFppppii(x64emu_t *emu, uintptr_t fnc); void vFppppLp(x64emu_t *emu, uintptr_t fnc); @@ -2010,6 +2141,7 @@ void cFppLppi(x64emu_t *emu, uintptr_t fnc); void iFEiippi(x64emu_t *emu, uintptr_t fnc); void iFEiippp(x64emu_t *emu, uintptr_t fnc); void iFEiLLLL(x64emu_t *emu, uintptr_t fnc); +void iFEipiup(x64emu_t *emu, uintptr_t fnc); void iFEippLp(x64emu_t *emu, uintptr_t fnc); void iFElpppp(x64emu_t *emu, uintptr_t fnc); void iFEpiipp(x64emu_t *emu, uintptr_t fnc); @@ -2017,14 +2149,17 @@ void iFEpiipV(x64emu_t *emu, uintptr_t fnc); void iFEpilpV(x64emu_t *emu, uintptr_t fnc); void iFEpippi(x64emu_t *emu, uintptr_t fnc); void iFEpIppp(x64emu_t *emu, uintptr_t fnc); +void iFEpuipp(x64emu_t *emu, uintptr_t fnc); void iFEpuppp(x64emu_t *emu, uintptr_t fnc); void iFEpUppp(x64emu_t *emu, uintptr_t fnc); +void iFEppupp(x64emu_t *emu, uintptr_t fnc); void iFEppppi(x64emu_t *emu, uintptr_t fnc); void iFEppppp(x64emu_t *emu, uintptr_t fnc); -void iFiiiiip(x64emu_t *emu, uintptr_t fnc); void iFiiiipp(x64emu_t *emu, uintptr_t fnc); void iFiiiuwp(x64emu_t *emu, uintptr_t fnc); void iFiWiipi(x64emu_t *emu, uintptr_t fnc); +void iFiuuuup(x64emu_t *emu, uintptr_t fnc); +void iFiuuppp(x64emu_t *emu, uintptr_t fnc); void iFiuUuUu(x64emu_t *emu, uintptr_t fnc); void iFilpppp(x64emu_t *emu, uintptr_t fnc); void iFiLpppi(x64emu_t *emu, uintptr_t fnc); @@ -2035,6 +2170,9 @@ void iFipupup(x64emu_t *emu, uintptr_t fnc); void iFipuppp(x64emu_t *emu, uintptr_t fnc); void iFipppLp(x64emu_t *emu, uintptr_t fnc); void iFippppp(x64emu_t *emu, uintptr_t fnc); +void iFuiiuup(x64emu_t *emu, uintptr_t fnc); +void iFupupLp(x64emu_t *emu, uintptr_t fnc); +void iFupLpLp(x64emu_t *emu, uintptr_t fnc); void iFdipppL(x64emu_t *emu, uintptr_t fnc); void iFDipppL(x64emu_t *emu, uintptr_t fnc); void iFlpippp(x64emu_t *emu, uintptr_t fnc); @@ -2046,6 +2184,7 @@ void iFpiiipp(x64emu_t *emu, uintptr_t fnc); void iFpiiuii(x64emu_t *emu, uintptr_t fnc); void iFpiiuui(x64emu_t *emu, uintptr_t fnc); void iFpiiupp(x64emu_t *emu, uintptr_t fnc); +void iFpiiLip(x64emu_t *emu, uintptr_t fnc); void iFpiipip(x64emu_t *emu, uintptr_t fnc); void iFpiippp(x64emu_t *emu, uintptr_t fnc); void iFpiCCpu(x64emu_t *emu, uintptr_t fnc); @@ -2058,12 +2197,14 @@ void iFpipupp(x64emu_t *emu, uintptr_t fnc); void iFpipLpp(x64emu_t *emu, uintptr_t fnc); void iFpippip(x64emu_t *emu, uintptr_t fnc); void iFpippup(x64emu_t *emu, uintptr_t fnc); +void iFpipppu(x64emu_t *emu, uintptr_t fnc); void iFpipppp(x64emu_t *emu, uintptr_t fnc); void iFpCiipp(x64emu_t *emu, uintptr_t fnc); void iFpCpipu(x64emu_t *emu, uintptr_t fnc); void iFpWipip(x64emu_t *emu, uintptr_t fnc); void iFpWpppp(x64emu_t *emu, uintptr_t fnc); void iFpuiCpp(x64emu_t *emu, uintptr_t fnc); +void iFpuiLpp(x64emu_t *emu, uintptr_t fnc); void iFpuippp(x64emu_t *emu, uintptr_t fnc); void iFpuuuuu(x64emu_t *emu, uintptr_t fnc); void iFpuuuup(x64emu_t *emu, uintptr_t fnc); @@ -2072,10 +2213,12 @@ void iFpuuupp(x64emu_t *emu, uintptr_t fnc); void iFpuuLpp(x64emu_t *emu, uintptr_t fnc); void iFpuupuu(x64emu_t *emu, uintptr_t fnc); void iFpuuppp(x64emu_t *emu, uintptr_t fnc); +void iFpuLuLu(x64emu_t *emu, uintptr_t fnc); void iFpuLLpp(x64emu_t *emu, uintptr_t fnc); -void iFpupuui(x64emu_t *emu, uintptr_t fnc); +void iFpupupp(x64emu_t *emu, uintptr_t fnc); void iFpupLpL(x64emu_t *emu, uintptr_t fnc); void iFpupLpp(x64emu_t *emu, uintptr_t fnc); +void iFpupppp(x64emu_t *emu, uintptr_t fnc); void iFpUiipp(x64emu_t *emu, uintptr_t fnc); void iFpUuuLp(x64emu_t *emu, uintptr_t fnc); void iFpUUUup(x64emu_t *emu, uintptr_t fnc); @@ -2088,9 +2231,12 @@ void iFpLipLu(x64emu_t *emu, uintptr_t fnc); void iFpLuipp(x64emu_t *emu, uintptr_t fnc); void iFpLuupp(x64emu_t *emu, uintptr_t fnc); void iFpLupip(x64emu_t *emu, uintptr_t fnc); +void iFpLLLLu(x64emu_t *emu, uintptr_t fnc); void iFpLLLLL(x64emu_t *emu, uintptr_t fnc); +void iFpLLLLp(x64emu_t *emu, uintptr_t fnc); void iFpLLppp(x64emu_t *emu, uintptr_t fnc); void iFpLpipi(x64emu_t *emu, uintptr_t fnc); +void iFpLpLui(x64emu_t *emu, uintptr_t fnc); void iFpLppii(x64emu_t *emu, uintptr_t fnc); void iFpLpppL(x64emu_t *emu, uintptr_t fnc); void iFpLpppp(x64emu_t *emu, uintptr_t fnc); @@ -2098,6 +2244,7 @@ void iFppiiii(x64emu_t *emu, uintptr_t fnc); void iFppiiip(x64emu_t *emu, uintptr_t fnc); void iFppiipi(x64emu_t *emu, uintptr_t fnc); void iFppiipp(x64emu_t *emu, uintptr_t fnc); +void iFppiuii(x64emu_t *emu, uintptr_t fnc); void iFppiupp(x64emu_t *emu, uintptr_t fnc); void iFppilpp(x64emu_t *emu, uintptr_t fnc); void iFppipii(x64emu_t *emu, uintptr_t fnc); @@ -2108,42 +2255,54 @@ void iFppippu(x64emu_t *emu, uintptr_t fnc); void iFppippp(x64emu_t *emu, uintptr_t fnc); void iFppIppp(x64emu_t *emu, uintptr_t fnc); void iFppuiii(x64emu_t *emu, uintptr_t fnc); +void iFppuipp(x64emu_t *emu, uintptr_t fnc); void iFppuIII(x64emu_t *emu, uintptr_t fnc); +void iFppuupL(x64emu_t *emu, uintptr_t fnc); void iFppuupp(x64emu_t *emu, uintptr_t fnc); +void iFppulup(x64emu_t *emu, uintptr_t fnc); +void iFppulll(x64emu_t *emu, uintptr_t fnc); void iFppuLpp(x64emu_t *emu, uintptr_t fnc); void iFppupip(x64emu_t *emu, uintptr_t fnc); +void iFppuppu(x64emu_t *emu, uintptr_t fnc); void iFppuppp(x64emu_t *emu, uintptr_t fnc); void iFppdidd(x64emu_t *emu, uintptr_t fnc); void iFpplupp(x64emu_t *emu, uintptr_t fnc); void iFpplppi(x64emu_t *emu, uintptr_t fnc); +void iFppLiWL(x64emu_t *emu, uintptr_t fnc); void iFppLupp(x64emu_t *emu, uintptr_t fnc); void iFppLLiL(x64emu_t *emu, uintptr_t fnc); void iFppLLup(x64emu_t *emu, uintptr_t fnc); void iFppLLpp(x64emu_t *emu, uintptr_t fnc); void iFppLpLp(x64emu_t *emu, uintptr_t fnc); void iFppLppp(x64emu_t *emu, uintptr_t fnc); -void iFpppiuu(x64emu_t *emu, uintptr_t fnc); +void iFpppiup(x64emu_t *emu, uintptr_t fnc); void iFpppipi(x64emu_t *emu, uintptr_t fnc); void iFpppipu(x64emu_t *emu, uintptr_t fnc); void iFpppipp(x64emu_t *emu, uintptr_t fnc); void iFpppuii(x64emu_t *emu, uintptr_t fnc); +void iFpppuuu(x64emu_t *emu, uintptr_t fnc); void iFpppuup(x64emu_t *emu, uintptr_t fnc); void iFpppupu(x64emu_t *emu, uintptr_t fnc); void iFpppupp(x64emu_t *emu, uintptr_t fnc); void iFpppLpp(x64emu_t *emu, uintptr_t fnc); -void iFppppii(x64emu_t *emu, uintptr_t fnc); void iFppppiu(x64emu_t *emu, uintptr_t fnc); void iFppppip(x64emu_t *emu, uintptr_t fnc); +void iFppppui(x64emu_t *emu, uintptr_t fnc); +void iFppppuu(x64emu_t *emu, uintptr_t fnc); void iFppppup(x64emu_t *emu, uintptr_t fnc); void iFppppLp(x64emu_t *emu, uintptr_t fnc); void iFpppppi(x64emu_t *emu, uintptr_t fnc); +void iFpppppu(x64emu_t *emu, uintptr_t fnc); void iFpppppL(x64emu_t *emu, uintptr_t fnc); void iFpppppp(x64emu_t *emu, uintptr_t fnc); +void iFpppppS(x64emu_t *emu, uintptr_t fnc); void uFEiippp(x64emu_t *emu, uintptr_t fnc); void uFEiuppp(x64emu_t *emu, uintptr_t fnc); +void uFEpippi(x64emu_t *emu, uintptr_t fnc); void uFEpippp(x64emu_t *emu, uintptr_t fnc); void uFEpCppp(x64emu_t *emu, uintptr_t fnc); void uFEpuppp(x64emu_t *emu, uintptr_t fnc); +void uFipuppp(x64emu_t *emu, uintptr_t fnc); void uFuuuuuu(x64emu_t *emu, uintptr_t fnc); void uFupuufp(x64emu_t *emu, uintptr_t fnc); void uFuppppp(x64emu_t *emu, uintptr_t fnc); @@ -2156,9 +2315,9 @@ void uFpuuupp(x64emu_t *emu, uintptr_t fnc); void uFpuuppp(x64emu_t *emu, uintptr_t fnc); void uFpupupu(x64emu_t *emu, uintptr_t fnc); void uFpupppp(x64emu_t *emu, uintptr_t fnc); -void uFppippp(x64emu_t *emu, uintptr_t fnc); void uFppuuup(x64emu_t *emu, uintptr_t fnc); void uFppuupu(x64emu_t *emu, uintptr_t fnc); +void uFppLpLp(x64emu_t *emu, uintptr_t fnc); void uFppLppL(x64emu_t *emu, uintptr_t fnc); void uFpppppi(x64emu_t *emu, uintptr_t fnc); void uFpppppp(x64emu_t *emu, uintptr_t fnc); @@ -2173,19 +2332,21 @@ void lFipLipp(x64emu_t *emu, uintptr_t fnc); void lFipLpLL(x64emu_t *emu, uintptr_t fnc); void lFpipill(x64emu_t *emu, uintptr_t fnc); void lFpuuLLp(x64emu_t *emu, uintptr_t fnc); -void lFpplllp(x64emu_t *emu, uintptr_t fnc); +void lFpluuic(x64emu_t *emu, uintptr_t fnc); void lFppLipp(x64emu_t *emu, uintptr_t fnc); void lFpppLpp(x64emu_t *emu, uintptr_t fnc); -void LFEupppp(x64emu_t *emu, uintptr_t fnc); -void LFELpppi(x64emu_t *emu, uintptr_t fnc); +void LFEuuppp(x64emu_t *emu, uintptr_t fnc); +void LFELpppu(x64emu_t *emu, uintptr_t fnc); void LFEpippp(x64emu_t *emu, uintptr_t fnc); -void LFEppppi(x64emu_t *emu, uintptr_t fnc); +void LFEppppu(x64emu_t *emu, uintptr_t fnc); void LFpipipi(x64emu_t *emu, uintptr_t fnc); void LFpLippp(x64emu_t *emu, uintptr_t fnc); void LFpLLLLL(x64emu_t *emu, uintptr_t fnc); void LFppLLpL(x64emu_t *emu, uintptr_t fnc); void LFppLpLL(x64emu_t *emu, uintptr_t fnc); void LFSpLiip(x64emu_t *emu, uintptr_t fnc); +void pFELpppV(x64emu_t *emu, uintptr_t fnc); +void pFELpApp(x64emu_t *emu, uintptr_t fnc); void pFEpiupp(x64emu_t *emu, uintptr_t fnc); void pFEpippp(x64emu_t *emu, uintptr_t fnc); void pFEpuipp(x64emu_t *emu, uintptr_t fnc); @@ -2197,8 +2358,6 @@ void pFEppLLp(x64emu_t *emu, uintptr_t fnc); void pFEpppLp(x64emu_t *emu, uintptr_t fnc); void pFEppppi(x64emu_t *emu, uintptr_t fnc); void pFEppppp(x64emu_t *emu, uintptr_t fnc); -void pFEppppV(x64emu_t *emu, uintptr_t fnc); -void pFEppApp(x64emu_t *emu, uintptr_t fnc); void pFiiiiii(x64emu_t *emu, uintptr_t fnc); void pFiiiiid(x64emu_t *emu, uintptr_t fnc); void pFipippp(x64emu_t *emu, uintptr_t fnc); @@ -2212,18 +2371,24 @@ void pFuuuuup(x64emu_t *emu, uintptr_t fnc); void pFuuppuu(x64emu_t *emu, uintptr_t fnc); void pFuppppp(x64emu_t *emu, uintptr_t fnc); void pFdddddd(x64emu_t *emu, uintptr_t fnc); +void pFLppppp(x64emu_t *emu, uintptr_t fnc); void pFpiiiiu(x64emu_t *emu, uintptr_t fnc); void pFpiiipp(x64emu_t *emu, uintptr_t fnc); void pFpiiCCC(x64emu_t *emu, uintptr_t fnc); void pFpiiuup(x64emu_t *emu, uintptr_t fnc); +void pFpiipip(x64emu_t *emu, uintptr_t fnc); +void pFpiippp(x64emu_t *emu, uintptr_t fnc); void pFpiUUUU(x64emu_t *emu, uintptr_t fnc); +void pFpipipL(x64emu_t *emu, uintptr_t fnc); void pFpipipp(x64emu_t *emu, uintptr_t fnc); +void pFpipuii(x64emu_t *emu, uintptr_t fnc); void pFpippip(x64emu_t *emu, uintptr_t fnc); void pFpipppp(x64emu_t *emu, uintptr_t fnc); void pFpuiiip(x64emu_t *emu, uintptr_t fnc); void pFpuuuuu(x64emu_t *emu, uintptr_t fnc); void pFpuuupu(x64emu_t *emu, uintptr_t fnc); void pFpupuui(x64emu_t *emu, uintptr_t fnc); +void pFpupuup(x64emu_t *emu, uintptr_t fnc); void pFpuppip(x64emu_t *emu, uintptr_t fnc); void pFpupppp(x64emu_t *emu, uintptr_t fnc); void pFplpppp(x64emu_t *emu, uintptr_t fnc); @@ -2233,6 +2398,7 @@ void pFpLppii(x64emu_t *emu, uintptr_t fnc); void pFpLppip(x64emu_t *emu, uintptr_t fnc); void pFpLppup(x64emu_t *emu, uintptr_t fnc); void pFppiiii(x64emu_t *emu, uintptr_t fnc); +void pFppiiup(x64emu_t *emu, uintptr_t fnc); void pFppiipp(x64emu_t *emu, uintptr_t fnc); void pFppiCCC(x64emu_t *emu, uintptr_t fnc); void pFppiupp(x64emu_t *emu, uintptr_t fnc); @@ -2266,9 +2432,9 @@ void iWpiuppu(x64emu_t *emu, uintptr_t fnc); void iWpuiiii(x64emu_t *emu, uintptr_t fnc); void iWpppppi(x64emu_t *emu, uintptr_t fnc); void iWpppppu(x64emu_t *emu, uintptr_t fnc); -void vFEpiiipp(x64emu_t *emu, uintptr_t fnc); -void vFEpipppp(x64emu_t *emu, uintptr_t fnc); void vFEpuipuV(x64emu_t *emu, uintptr_t fnc); +void vFEpuuipp(x64emu_t *emu, uintptr_t fnc); +void vFEpupppp(x64emu_t *emu, uintptr_t fnc); void vFEppippp(x64emu_t *emu, uintptr_t fnc); void vFEpppLpp(x64emu_t *emu, uintptr_t fnc); void vFEppppup(x64emu_t *emu, uintptr_t fnc); @@ -2290,7 +2456,7 @@ void vFuiiiuup(x64emu_t *emu, uintptr_t fnc); void vFuiuiiii(x64emu_t *emu, uintptr_t fnc); void vFuiuiiiC(x64emu_t *emu, uintptr_t fnc); void vFuiuiiip(x64emu_t *emu, uintptr_t fnc); -void vFuiuiiuL(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiuU(x64emu_t *emu, uintptr_t fnc); void vFuiuCiuu(x64emu_t *emu, uintptr_t fnc); void vFuiupiiu(x64emu_t *emu, uintptr_t fnc); void vFuiupuip(x64emu_t *emu, uintptr_t fnc); @@ -2309,7 +2475,6 @@ void vFuuiuiiC(x64emu_t *emu, uintptr_t fnc); void vFuuipppp(x64emu_t *emu, uintptr_t fnc); void vFuuuiiii(x64emu_t *emu, uintptr_t fnc); void vFuuuiiCp(x64emu_t *emu, uintptr_t fnc); -void vFuuuiuii(x64emu_t *emu, uintptr_t fnc); void vFuuuiuil(x64emu_t *emu, uintptr_t fnc); void vFuuuiupi(x64emu_t *emu, uintptr_t fnc); void vFuuuuuuu(x64emu_t *emu, uintptr_t fnc); @@ -2324,21 +2489,21 @@ void vFuuppppu(x64emu_t *emu, uintptr_t fnc); void vFuuppppp(x64emu_t *emu, uintptr_t fnc); void vFuffffff(x64emu_t *emu, uintptr_t fnc); void vFudddddd(x64emu_t *emu, uintptr_t fnc); -void vFlipuiip(x64emu_t *emu, uintptr_t fnc); void vFlliiiip(x64emu_t *emu, uintptr_t fnc); void vFLpuLpLp(x64emu_t *emu, uintptr_t fnc); void vFpiiiipp(x64emu_t *emu, uintptr_t fnc); void vFpiiliip(x64emu_t *emu, uintptr_t fnc); void vFpiiLiip(x64emu_t *emu, uintptr_t fnc); void vFpiipCpp(x64emu_t *emu, uintptr_t fnc); -void vFpiipppp(x64emu_t *emu, uintptr_t fnc); -void vFpipipii(x64emu_t *emu, uintptr_t fnc); +void vFpipipiu(x64emu_t *emu, uintptr_t fnc); void vFpippppu(x64emu_t *emu, uintptr_t fnc); void vFpuiippp(x64emu_t *emu, uintptr_t fnc); +void vFpuipppp(x64emu_t *emu, uintptr_t fnc); void vFpuuuuuu(x64emu_t *emu, uintptr_t fnc); void vFpuuUUuu(x64emu_t *emu, uintptr_t fnc); void vFpuupupu(x64emu_t *emu, uintptr_t fnc); void vFpuupppp(x64emu_t *emu, uintptr_t fnc); +void vFpupiiiu(x64emu_t *emu, uintptr_t fnc); void vFpupuuup(x64emu_t *emu, uintptr_t fnc); void vFpupppui(x64emu_t *emu, uintptr_t fnc); void vFpUiUiup(x64emu_t *emu, uintptr_t fnc); @@ -2347,11 +2512,17 @@ void vFpUUUUuu(x64emu_t *emu, uintptr_t fnc); void vFpfffppp(x64emu_t *emu, uintptr_t fnc); void vFpddiidd(x64emu_t *emu, uintptr_t fnc); void vFpdddddd(x64emu_t *emu, uintptr_t fnc); +void vFplilppp(x64emu_t *emu, uintptr_t fnc); +void vFpLiiiLi(x64emu_t *emu, uintptr_t fnc); +void vFpLiiipi(x64emu_t *emu, uintptr_t fnc); +void vFpLiiuui(x64emu_t *emu, uintptr_t fnc); void vFpLiLiLp(x64emu_t *emu, uintptr_t fnc); +void vFpLLiiip(x64emu_t *emu, uintptr_t fnc); +void vFpLLuuuu(x64emu_t *emu, uintptr_t fnc); void vFpLpiipi(x64emu_t *emu, uintptr_t fnc); +void vFpLppipi(x64emu_t *emu, uintptr_t fnc); +void vFppcuupp(x64emu_t *emu, uintptr_t fnc); void vFppiiiii(x64emu_t *emu, uintptr_t fnc); -void vFppiiiip(x64emu_t *emu, uintptr_t fnc); -void vFppiiipi(x64emu_t *emu, uintptr_t fnc); void vFppiipii(x64emu_t *emu, uintptr_t fnc); void vFppiipuu(x64emu_t *emu, uintptr_t fnc); void vFppiippp(x64emu_t *emu, uintptr_t fnc); @@ -2360,9 +2531,10 @@ void vFppiLiLp(x64emu_t *emu, uintptr_t fnc); void vFppipiip(x64emu_t *emu, uintptr_t fnc); void vFppipipp(x64emu_t *emu, uintptr_t fnc); void vFppipppp(x64emu_t *emu, uintptr_t fnc); -void vFppCuupp(x64emu_t *emu, uintptr_t fnc); void vFppuiiip(x64emu_t *emu, uintptr_t fnc); +void vFppuuuii(x64emu_t *emu, uintptr_t fnc); void vFppuupii(x64emu_t *emu, uintptr_t fnc); +void vFppupipp(x64emu_t *emu, uintptr_t fnc); void vFppUuupp(x64emu_t *emu, uintptr_t fnc); void vFppddddu(x64emu_t *emu, uintptr_t fnc); void vFppddpiu(x64emu_t *emu, uintptr_t fnc); @@ -2374,40 +2546,43 @@ void vFpppiipi(x64emu_t *emu, uintptr_t fnc); void vFpppiipp(x64emu_t *emu, uintptr_t fnc); void vFpppiupi(x64emu_t *emu, uintptr_t fnc); void vFpppippi(x64emu_t *emu, uintptr_t fnc); -void vFpppuuuu(x64emu_t *emu, uintptr_t fnc); void vFpppffff(x64emu_t *emu, uintptr_t fnc); void vFppppiip(x64emu_t *emu, uintptr_t fnc); void vFppppiui(x64emu_t *emu, uintptr_t fnc); -void vFppppipi(x64emu_t *emu, uintptr_t fnc); void vFpppppip(x64emu_t *emu, uintptr_t fnc); void vFppppppu(x64emu_t *emu, uintptr_t fnc); void vFppppppp(x64emu_t *emu, uintptr_t fnc); +void cFppppppp(x64emu_t *emu, uintptr_t fnc); +void iFElppppp(x64emu_t *emu, uintptr_t fnc); void iFEpupppp(x64emu_t *emu, uintptr_t fnc); void iFEpUuppp(x64emu_t *emu, uintptr_t fnc); void iFEpLiLpp(x64emu_t *emu, uintptr_t fnc); void iFEpLiLpV(x64emu_t *emu, uintptr_t fnc); +void iFEpLpiiL(x64emu_t *emu, uintptr_t fnc); void iFEppuppp(x64emu_t *emu, uintptr_t fnc); -void iFEppLpIi(x64emu_t *emu, uintptr_t fnc); -void iFEpppiiu(x64emu_t *emu, uintptr_t fnc); +void iFEppLpIu(x64emu_t *emu, uintptr_t fnc); void iFEpppLpp(x64emu_t *emu, uintptr_t fnc); void iFEpppppL(x64emu_t *emu, uintptr_t fnc); void iFEpppppp(x64emu_t *emu, uintptr_t fnc); -void iFiiiiiip(x64emu_t *emu, uintptr_t fnc); +void iFiupuuup(x64emu_t *emu, uintptr_t fnc); +void iFiupuppp(x64emu_t *emu, uintptr_t fnc); void iFipupupi(x64emu_t *emu, uintptr_t fnc); void iFippuIup(x64emu_t *emu, uintptr_t fnc); void iFipppppp(x64emu_t *emu, uintptr_t fnc); +void iFuiiiuup(x64emu_t *emu, uintptr_t fnc); +void iFuippLpp(x64emu_t *emu, uintptr_t fnc); void iFpiiiiii(x64emu_t *emu, uintptr_t fnc); void iFpiiiuwp(x64emu_t *emu, uintptr_t fnc); void iFpiiiuup(x64emu_t *emu, uintptr_t fnc); -void iFpiiuuiu(x64emu_t *emu, uintptr_t fnc); void iFpiipppp(x64emu_t *emu, uintptr_t fnc); void iFpiuiipp(x64emu_t *emu, uintptr_t fnc); +void iFpiuuuiu(x64emu_t *emu, uintptr_t fnc); void iFpiuLiii(x64emu_t *emu, uintptr_t fnc); void iFpiupppp(x64emu_t *emu, uintptr_t fnc); +void iFpiLipip(x64emu_t *emu, uintptr_t fnc); void iFpiLuupp(x64emu_t *emu, uintptr_t fnc); void iFpiLuppp(x64emu_t *emu, uintptr_t fnc); void iFpipiiip(x64emu_t *emu, uintptr_t fnc); -void iFpipipip(x64emu_t *emu, uintptr_t fnc); void iFpipippp(x64emu_t *emu, uintptr_t fnc); void iFpippLpp(x64emu_t *emu, uintptr_t fnc); void iFpippppW(x64emu_t *emu, uintptr_t fnc); @@ -2419,7 +2594,6 @@ void iFpWppppp(x64emu_t *emu, uintptr_t fnc); void iFpuiCuCp(x64emu_t *emu, uintptr_t fnc); void iFpuiuupp(x64emu_t *emu, uintptr_t fnc); void iFpupiLpL(x64emu_t *emu, uintptr_t fnc); -void iFpupuuui(x64emu_t *emu, uintptr_t fnc); void iFpupuupp(x64emu_t *emu, uintptr_t fnc); void iFpupupui(x64emu_t *emu, uintptr_t fnc); void iFpuppppp(x64emu_t *emu, uintptr_t fnc); @@ -2431,8 +2605,11 @@ void iFpLipupu(x64emu_t *emu, uintptr_t fnc); void iFpLpiiii(x64emu_t *emu, uintptr_t fnc); void iFpLpiiuu(x64emu_t *emu, uintptr_t fnc); void iFpLpiipi(x64emu_t *emu, uintptr_t fnc); +void iFpLpLuLi(x64emu_t *emu, uintptr_t fnc); void iFpLpLpip(x64emu_t *emu, uintptr_t fnc); +void iFpLpLpLp(x64emu_t *emu, uintptr_t fnc); void iFpLppiii(x64emu_t *emu, uintptr_t fnc); +void iFpLppiip(x64emu_t *emu, uintptr_t fnc); void iFppiiiip(x64emu_t *emu, uintptr_t fnc); void iFppiiuup(x64emu_t *emu, uintptr_t fnc); void iFppiiLll(x64emu_t *emu, uintptr_t fnc); @@ -2448,28 +2625,33 @@ void iFppuipiL(x64emu_t *emu, uintptr_t fnc); void iFppuippp(x64emu_t *emu, uintptr_t fnc); void iFppuuppp(x64emu_t *emu, uintptr_t fnc); void iFppupupp(x64emu_t *emu, uintptr_t fnc); +void iFppupppp(x64emu_t *emu, uintptr_t fnc); void iFppliupp(x64emu_t *emu, uintptr_t fnc); void iFppLiipp(x64emu_t *emu, uintptr_t fnc); +void iFppLiWwL(x64emu_t *emu, uintptr_t fnc); void iFppLippp(x64emu_t *emu, uintptr_t fnc); void iFppLuuii(x64emu_t *emu, uintptr_t fnc); +void iFppLLLLu(x64emu_t *emu, uintptr_t fnc); void iFppLpppp(x64emu_t *emu, uintptr_t fnc); -void iFpppiiuu(x64emu_t *emu, uintptr_t fnc); void iFpppiiup(x64emu_t *emu, uintptr_t fnc); -void iFpppiuwu(x64emu_t *emu, uintptr_t fnc); void iFpppippi(x64emu_t *emu, uintptr_t fnc); void iFpppippp(x64emu_t *emu, uintptr_t fnc); void iFpppuiii(x64emu_t *emu, uintptr_t fnc); +void iFpppuupu(x64emu_t *emu, uintptr_t fnc); +void iFpppulup(x64emu_t *emu, uintptr_t fnc); void iFpppLppp(x64emu_t *emu, uintptr_t fnc); void iFppppilp(x64emu_t *emu, uintptr_t fnc); void iFppppipp(x64emu_t *emu, uintptr_t fnc); void iFppppIip(x64emu_t *emu, uintptr_t fnc); +void iFppppupu(x64emu_t *emu, uintptr_t fnc); void iFppppdpu(x64emu_t *emu, uintptr_t fnc); void iFpppppip(x64emu_t *emu, uintptr_t fnc); void iFpppppLp(x64emu_t *emu, uintptr_t fnc); +void iFppppppi(x64emu_t *emu, uintptr_t fnc); void iFppppppu(x64emu_t *emu, uintptr_t fnc); void iFppppppp(x64emu_t *emu, uintptr_t fnc); void uFEiipppp(x64emu_t *emu, uintptr_t fnc); -void uFEpiippp(x64emu_t *emu, uintptr_t fnc); +void uFEpiuppp(x64emu_t *emu, uintptr_t fnc); void uFEpuuppp(x64emu_t *emu, uintptr_t fnc); void uFEpppppp(x64emu_t *emu, uintptr_t fnc); void uFiiiuuuu(x64emu_t *emu, uintptr_t fnc); @@ -2480,6 +2662,7 @@ void uFpuuuppp(x64emu_t *emu, uintptr_t fnc); void uFpuupppp(x64emu_t *emu, uintptr_t fnc); void uFppiuppi(x64emu_t *emu, uintptr_t fnc); void uFppiuppp(x64emu_t *emu, uintptr_t fnc); +void uFppuiupu(x64emu_t *emu, uintptr_t fnc); void uFppuuuup(x64emu_t *emu, uintptr_t fnc); void uFppppppp(x64emu_t *emu, uintptr_t fnc); void uFbCuuuuu(x64emu_t *emu, uintptr_t fnc); @@ -2489,9 +2672,11 @@ void LFEppLppU(x64emu_t *emu, uintptr_t fnc); void LFEpppppu(x64emu_t *emu, uintptr_t fnc); void LFpLLuupp(x64emu_t *emu, uintptr_t fnc); void LFpLLppuu(x64emu_t *emu, uintptr_t fnc); +void LFpLppuuu(x64emu_t *emu, uintptr_t fnc); void pFEpupppp(x64emu_t *emu, uintptr_t fnc); +void pFEpLiiiI(x64emu_t *emu, uintptr_t fnc); void pFEpLiiil(x64emu_t *emu, uintptr_t fnc); -void pFEppuipp(x64emu_t *emu, uintptr_t fnc); +void pFEppLipp(x64emu_t *emu, uintptr_t fnc); void pFEppppip(x64emu_t *emu, uintptr_t fnc); void pFEpppppi(x64emu_t *emu, uintptr_t fnc); void pFifffppp(x64emu_t *emu, uintptr_t fnc); @@ -2503,7 +2688,10 @@ void pFdiiiIiI(x64emu_t *emu, uintptr_t fnc); void pFpiiiiid(x64emu_t *emu, uintptr_t fnc); void pFpiiippp(x64emu_t *emu, uintptr_t fnc); void pFpiiUdii(x64emu_t *emu, uintptr_t fnc); +void pFpiipipp(x64emu_t *emu, uintptr_t fnc); +void pFpiiplui(x64emu_t *emu, uintptr_t fnc); void pFpiipppp(x64emu_t *emu, uintptr_t fnc); +void pFpipiupp(x64emu_t *emu, uintptr_t fnc); void pFpipippp(x64emu_t *emu, uintptr_t fnc); void pFpWppWpp(x64emu_t *emu, uintptr_t fnc); void pFpuLpipp(x64emu_t *emu, uintptr_t fnc); @@ -2518,24 +2706,24 @@ void pFpLppiip(x64emu_t *emu, uintptr_t fnc); void pFpLppLLi(x64emu_t *emu, uintptr_t fnc); void pFppiiipp(x64emu_t *emu, uintptr_t fnc); void pFppiiCCC(x64emu_t *emu, uintptr_t fnc); +void pFppiipup(x64emu_t *emu, uintptr_t fnc); void pFppiippp(x64emu_t *emu, uintptr_t fnc); void pFppipipp(x64emu_t *emu, uintptr_t fnc); void pFppipLpp(x64emu_t *emu, uintptr_t fnc); +void pFppuipii(x64emu_t *emu, uintptr_t fnc); void pFppuippp(x64emu_t *emu, uintptr_t fnc); void pFppuuupp(x64emu_t *emu, uintptr_t fnc); -void pFppuuppp(x64emu_t *emu, uintptr_t fnc); void pFppuLLip(x64emu_t *emu, uintptr_t fnc); void pFppupuuu(x64emu_t *emu, uintptr_t fnc); void pFppliuip(x64emu_t *emu, uintptr_t fnc); void pFpplipup(x64emu_t *emu, uintptr_t fnc); -void pFppLipip(x64emu_t *emu, uintptr_t fnc); void pFppLLiLi(x64emu_t *emu, uintptr_t fnc); +void pFppLLppp(x64emu_t *emu, uintptr_t fnc); void pFpppccci(x64emu_t *emu, uintptr_t fnc); void pFpppiiii(x64emu_t *emu, uintptr_t fnc); void pFpppCCCi(x64emu_t *emu, uintptr_t fnc); void pFpppuipp(x64emu_t *emu, uintptr_t fnc); void pFpppuuui(x64emu_t *emu, uintptr_t fnc); -void pFpppuupp(x64emu_t *emu, uintptr_t fnc); void pFpppupii(x64emu_t *emu, uintptr_t fnc); void pFpppupup(x64emu_t *emu, uintptr_t fnc); void pFpppuppp(x64emu_t *emu, uintptr_t fnc); @@ -2544,8 +2732,7 @@ void pFpppdddi(x64emu_t *emu, uintptr_t fnc); void pFpppllli(x64emu_t *emu, uintptr_t fnc); void pFpppLLLi(x64emu_t *emu, uintptr_t fnc); void pFppppiii(x64emu_t *emu, uintptr_t fnc); -void pFppppuuu(x64emu_t *emu, uintptr_t fnc); -void pFpppppuu(x64emu_t *emu, uintptr_t fnc); +void pFppppiip(x64emu_t *emu, uintptr_t fnc); void pFppppppu(x64emu_t *emu, uintptr_t fnc); void pFppppppp(x64emu_t *emu, uintptr_t fnc); void pFbCuwwWW(x64emu_t *emu, uintptr_t fnc); @@ -2559,10 +2746,10 @@ void iWpuipupp(x64emu_t *emu, uintptr_t fnc); void iWpuuuppu(x64emu_t *emu, uintptr_t fnc); void iWpupuufu(x64emu_t *emu, uintptr_t fnc); void iWpppuppp(x64emu_t *emu, uintptr_t fnc); -void vFEiippppV(x64emu_t *emu, uintptr_t fnc); -void vFEiupippp(x64emu_t *emu, uintptr_t fnc); -void vFEipAippp(x64emu_t *emu, uintptr_t fnc); -void vFEppipppp(x64emu_t *emu, uintptr_t fnc); +void vFELippppV(x64emu_t *emu, uintptr_t fnc); +void vFELupippp(x64emu_t *emu, uintptr_t fnc); +void vFELpAippp(x64emu_t *emu, uintptr_t fnc); +void vFEppupppp(x64emu_t *emu, uintptr_t fnc); void vFEppLippp(x64emu_t *emu, uintptr_t fnc); void vFEppLpLpp(x64emu_t *emu, uintptr_t fnc); void vFEpppippp(x64emu_t *emu, uintptr_t fnc); @@ -2581,8 +2768,8 @@ void vFuiiiiuup(x64emu_t *emu, uintptr_t fnc); void vFuiiipiup(x64emu_t *emu, uintptr_t fnc); void vFuiuiiiii(x64emu_t *emu, uintptr_t fnc); void vFuiuiiiip(x64emu_t *emu, uintptr_t fnc); -void vFuiuiiiuL(x64emu_t *emu, uintptr_t fnc); -void vFuiuiiCuL(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiiuU(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiCuU(x64emu_t *emu, uintptr_t fnc); void vFuiuiuuuu(x64emu_t *emu, uintptr_t fnc); void vFuCCCCfff(x64emu_t *emu, uintptr_t fnc); void vFuuiiiiiC(x64emu_t *emu, uintptr_t fnc); @@ -2603,18 +2790,20 @@ void vFpiiiiiii(x64emu_t *emu, uintptr_t fnc); void vFpiiiiiip(x64emu_t *emu, uintptr_t fnc); void vFpiiiipii(x64emu_t *emu, uintptr_t fnc); void vFpiUuupup(x64emu_t *emu, uintptr_t fnc); -void vFpippiiuu(x64emu_t *emu, uintptr_t fnc); -void vFpippiipi(x64emu_t *emu, uintptr_t fnc); +void vFpiLLiipi(x64emu_t *emu, uintptr_t fnc); +void vFpiLpiiuu(x64emu_t *emu, uintptr_t fnc); void vFpuiULipp(x64emu_t *emu, uintptr_t fnc); void vFpudddddd(x64emu_t *emu, uintptr_t fnc); void vFpuppippp(x64emu_t *emu, uintptr_t fnc); void vFpuppLLLL(x64emu_t *emu, uintptr_t fnc); void vFpUiUiupi(x64emu_t *emu, uintptr_t fnc); void vFpUuuUUUu(x64emu_t *emu, uintptr_t fnc); +void vFpliicppp(x64emu_t *emu, uintptr_t fnc); +void vFpLiiiLii(x64emu_t *emu, uintptr_t fnc); +void vFpLLLiipi(x64emu_t *emu, uintptr_t fnc); void vFpLpLpLpp(x64emu_t *emu, uintptr_t fnc); void vFpLppiipi(x64emu_t *emu, uintptr_t fnc); void vFppiiiiii(x64emu_t *emu, uintptr_t fnc); -void vFppiiipii(x64emu_t *emu, uintptr_t fnc); void vFppipipiu(x64emu_t *emu, uintptr_t fnc); void vFppipppui(x64emu_t *emu, uintptr_t fnc); void vFppippppi(x64emu_t *emu, uintptr_t fnc); @@ -2624,12 +2813,14 @@ void vFppuppiii(x64emu_t *emu, uintptr_t fnc); void vFppuppiiu(x64emu_t *emu, uintptr_t fnc); void vFpplppppi(x64emu_t *emu, uintptr_t fnc); void vFpplppppp(x64emu_t *emu, uintptr_t fnc); +void vFppLLiipi(x64emu_t *emu, uintptr_t fnc); void vFppLpLpLp(x64emu_t *emu, uintptr_t fnc); +void vFpppiipui(x64emu_t *emu, uintptr_t fnc); void vFpppipppu(x64emu_t *emu, uintptr_t fnc); void vFpppuiiii(x64emu_t *emu, uintptr_t fnc); void vFpppLpppp(x64emu_t *emu, uintptr_t fnc); -void vFppppiipi(x64emu_t *emu, uintptr_t fnc); void vFpppppuuu(x64emu_t *emu, uintptr_t fnc); +void vFppppppui(x64emu_t *emu, uintptr_t fnc); void vFpppppppp(x64emu_t *emu, uintptr_t fnc); void iFEuipuupp(x64emu_t *emu, uintptr_t fnc); void iFEpippppp(x64emu_t *emu, uintptr_t fnc); @@ -2640,33 +2831,37 @@ void iFEppppipp(x64emu_t *emu, uintptr_t fnc); void iFEppppLpp(x64emu_t *emu, uintptr_t fnc); void iFEpppppuu(x64emu_t *emu, uintptr_t fnc); void iFEppppppp(x64emu_t *emu, uintptr_t fnc); -void iFiiiiiiip(x64emu_t *emu, uintptr_t fnc); void iFiiupiupi(x64emu_t *emu, uintptr_t fnc); void iFiuuCCuup(x64emu_t *emu, uintptr_t fnc); void iFiuuuupip(x64emu_t *emu, uintptr_t fnc); void iFipippppp(x64emu_t *emu, uintptr_t fnc); +void iFuiiiiuup(x64emu_t *emu, uintptr_t fnc); void iFuuuuuuuu(x64emu_t *emu, uintptr_t fnc); +void iFupipppip(x64emu_t *emu, uintptr_t fnc); void iFdiippppL(x64emu_t *emu, uintptr_t fnc); void iFpiiiuuup(x64emu_t *emu, uintptr_t fnc); void iFpipiipip(x64emu_t *emu, uintptr_t fnc); -void iFpippuuii(x64emu_t *emu, uintptr_t fnc); +void iFpippuuui(x64emu_t *emu, uintptr_t fnc); void iFpippuupp(x64emu_t *emu, uintptr_t fnc); void iFpCCWWpWu(x64emu_t *emu, uintptr_t fnc); void iFpWCuWCuu(x64emu_t *emu, uintptr_t fnc); void iFpuiipppp(x64emu_t *emu, uintptr_t fnc); void iFpuippLpp(x64emu_t *emu, uintptr_t fnc); -void iFpuuiiiii(x64emu_t *emu, uintptr_t fnc); +void iFpuuiiuuu(x64emu_t *emu, uintptr_t fnc); void iFpuuipppp(x64emu_t *emu, uintptr_t fnc); void iFpuuupupu(x64emu_t *emu, uintptr_t fnc); void iFpuupuupp(x64emu_t *emu, uintptr_t fnc); void iFpuuppiip(x64emu_t *emu, uintptr_t fnc); void iFpuuppppp(x64emu_t *emu, uintptr_t fnc); +void iFpuLLLppL(x64emu_t *emu, uintptr_t fnc); +void iFpupupuup(x64emu_t *emu, uintptr_t fnc); void iFpupppppp(x64emu_t *emu, uintptr_t fnc); void iFpUuuLpUu(x64emu_t *emu, uintptr_t fnc); void iFpduuulul(x64emu_t *emu, uintptr_t fnc); void iFpLLiippp(x64emu_t *emu, uintptr_t fnc); void iFpLLLiipi(x64emu_t *emu, uintptr_t fnc); void iFpLLppppp(x64emu_t *emu, uintptr_t fnc); +void iFpLpiLpLp(x64emu_t *emu, uintptr_t fnc); void iFpLpipppp(x64emu_t *emu, uintptr_t fnc); void iFpLpLpLpp(x64emu_t *emu, uintptr_t fnc); void iFpLppLpip(x64emu_t *emu, uintptr_t fnc); @@ -2674,26 +2869,30 @@ void iFpLpppupu(x64emu_t *emu, uintptr_t fnc); void iFpLpppppp(x64emu_t *emu, uintptr_t fnc); void iFppiiipip(x64emu_t *emu, uintptr_t fnc); void iFppillppp(x64emu_t *emu, uintptr_t fnc); -void iFppippppp(x64emu_t *emu, uintptr_t fnc); +void iFppipiipi(x64emu_t *emu, uintptr_t fnc); void iFppIIIppp(x64emu_t *emu, uintptr_t fnc); void iFppuiiuuu(x64emu_t *emu, uintptr_t fnc); void iFppuuuuuu(x64emu_t *emu, uintptr_t fnc); void iFppuppppp(x64emu_t *emu, uintptr_t fnc); +void iFppLpLpLi(x64emu_t *emu, uintptr_t fnc); void iFpppiiipi(x64emu_t *emu, uintptr_t fnc); void iFpppiiipp(x64emu_t *emu, uintptr_t fnc); void iFpppipipi(x64emu_t *emu, uintptr_t fnc); void iFppppiiup(x64emu_t *emu, uintptr_t fnc); +void iFppppiipp(x64emu_t *emu, uintptr_t fnc); void iFppppippp(x64emu_t *emu, uintptr_t fnc); +void iFppppuplu(x64emu_t *emu, uintptr_t fnc); void iFpppppupp(x64emu_t *emu, uintptr_t fnc); void iFppppppii(x64emu_t *emu, uintptr_t fnc); +void iFppppppuu(x64emu_t *emu, uintptr_t fnc); void iFpppppppi(x64emu_t *emu, uintptr_t fnc); void iFpppppppp(x64emu_t *emu, uintptr_t fnc); void iFbWWipppp(x64emu_t *emu, uintptr_t fnc); void iFbupppWWu(x64emu_t *emu, uintptr_t fnc); void CFuiifpppp(x64emu_t *emu, uintptr_t fnc); -void uFEipipppp(x64emu_t *emu, uintptr_t fnc); -void uFEpiupppp(x64emu_t *emu, uintptr_t fnc); -void uFEppipppp(x64emu_t *emu, uintptr_t fnc); +void uFEipupppp(x64emu_t *emu, uintptr_t fnc); +void uFEpuuuppp(x64emu_t *emu, uintptr_t fnc); +void uFEppupppp(x64emu_t *emu, uintptr_t fnc); void uFEpppuppp(x64emu_t *emu, uintptr_t fnc); void uFEppppppp(x64emu_t *emu, uintptr_t fnc); void uFuipppppp(x64emu_t *emu, uintptr_t fnc); @@ -2708,12 +2907,12 @@ void uFpppppupp(x64emu_t *emu, uintptr_t fnc); void uFbCuuuCup(x64emu_t *emu, uintptr_t fnc); void uFbWWWWWWp(x64emu_t *emu, uintptr_t fnc); void LFELpupupu(x64emu_t *emu, uintptr_t fnc); -void LFEpiupppp(x64emu_t *emu, uintptr_t fnc); +void LFEpuuuppp(x64emu_t *emu, uintptr_t fnc); void LFpLpuuLLu(x64emu_t *emu, uintptr_t fnc); void pFEiplllpp(x64emu_t *emu, uintptr_t fnc); void pFEipLLLpp(x64emu_t *emu, uintptr_t fnc); void pFEpiuCppp(x64emu_t *emu, uintptr_t fnc); -void pFEppLiiip(x64emu_t *emu, uintptr_t fnc); +void pFEppLiiup(x64emu_t *emu, uintptr_t fnc); void pFEpppuipV(x64emu_t *emu, uintptr_t fnc); void pFEpppppiV(x64emu_t *emu, uintptr_t fnc); void pFEppppppi(x64emu_t *emu, uintptr_t fnc); @@ -2726,7 +2925,7 @@ void pFuupupipp(x64emu_t *emu, uintptr_t fnc); void pFpiiiiiuu(x64emu_t *emu, uintptr_t fnc); void pFpiiuuupp(x64emu_t *emu, uintptr_t fnc); void pFpiUdiiUi(x64emu_t *emu, uintptr_t fnc); -void pFpipiiiip(x64emu_t *emu, uintptr_t fnc); +void pFpipiuiip(x64emu_t *emu, uintptr_t fnc); void pFpuuuuupp(x64emu_t *emu, uintptr_t fnc); void pFpuuuupup(x64emu_t *emu, uintptr_t fnc); void pFpupLLLpp(x64emu_t *emu, uintptr_t fnc); @@ -2755,8 +2954,8 @@ void vFEpiiiuipp(x64emu_t *emu, uintptr_t fnc); void vFEpippippV(x64emu_t *emu, uintptr_t fnc); void vFEpippippA(x64emu_t *emu, uintptr_t fnc); void vFEpuuuippp(x64emu_t *emu, uintptr_t fnc); -void vFEppiipppp(x64emu_t *emu, uintptr_t fnc); -void vFEpppiippp(x64emu_t *emu, uintptr_t fnc); +void vFEppuipppp(x64emu_t *emu, uintptr_t fnc); +void vFEpppuippp(x64emu_t *emu, uintptr_t fnc); void vFEpppLLpLp(x64emu_t *emu, uintptr_t fnc); void vFEppppippp(x64emu_t *emu, uintptr_t fnc); void vFiiiiiiiii(x64emu_t *emu, uintptr_t fnc); @@ -2770,7 +2969,7 @@ void vFuiiiiiiiC(x64emu_t *emu, uintptr_t fnc); void vFuiiiiiuip(x64emu_t *emu, uintptr_t fnc); void vFuiiiiiuup(x64emu_t *emu, uintptr_t fnc); void vFuiuiiiiip(x64emu_t *emu, uintptr_t fnc); -void vFuiuiiiCuL(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiiCuU(x64emu_t *emu, uintptr_t fnc); void vFuiupuffup(x64emu_t *emu, uintptr_t fnc); void vFuuiiiiiii(x64emu_t *emu, uintptr_t fnc); void vFuuiiiiiiC(x64emu_t *emu, uintptr_t fnc); @@ -2784,19 +2983,19 @@ void vFuffffffff(x64emu_t *emu, uintptr_t fnc); void vFffCCCCfff(x64emu_t *emu, uintptr_t fnc); void vFddddddddd(x64emu_t *emu, uintptr_t fnc); void vFpiuippppi(x64emu_t *emu, uintptr_t fnc); +void vFpiLLpiipi(x64emu_t *emu, uintptr_t fnc); +void vFpiLpLiipi(x64emu_t *emu, uintptr_t fnc); void vFpipiuiipp(x64emu_t *emu, uintptr_t fnc); -void vFpipppiipi(x64emu_t *emu, uintptr_t fnc); void vFpuuuuuuuu(x64emu_t *emu, uintptr_t fnc); +void vFpLiiipiii(x64emu_t *emu, uintptr_t fnc); void vFpLpLpLLpp(x64emu_t *emu, uintptr_t fnc); void vFpLpppippp(x64emu_t *emu, uintptr_t fnc); void vFppiiiiiii(x64emu_t *emu, uintptr_t fnc); void vFppiiiiipi(x64emu_t *emu, uintptr_t fnc); void vFppiiiiupi(x64emu_t *emu, uintptr_t fnc); -void vFppiiipiii(x64emu_t *emu, uintptr_t fnc); void vFppiupiiii(x64emu_t *emu, uintptr_t fnc); -void vFppippDpDC(x64emu_t *emu, uintptr_t fnc); +void vFppippDpDc(x64emu_t *emu, uintptr_t fnc); void vFppipppiii(x64emu_t *emu, uintptr_t fnc); -void vFppipppiip(x64emu_t *emu, uintptr_t fnc); void vFppuippiip(x64emu_t *emu, uintptr_t fnc); void vFppuuiiiii(x64emu_t *emu, uintptr_t fnc); void vFppuuiiiiu(x64emu_t *emu, uintptr_t fnc); @@ -2810,24 +3009,27 @@ void vFpplpppppi(x64emu_t *emu, uintptr_t fnc); void vFpppiiiiii(x64emu_t *emu, uintptr_t fnc); void vFpppffffff(x64emu_t *emu, uintptr_t fnc); void vFppppipiip(x64emu_t *emu, uintptr_t fnc); -void vFpppppippp(x64emu_t *emu, uintptr_t fnc); void iFEpiiiiipi(x64emu_t *emu, uintptr_t fnc); void iFEppuppppp(x64emu_t *emu, uintptr_t fnc); -void iFEpppipppp(x64emu_t *emu, uintptr_t fnc); +void iFEpppupppp(x64emu_t *emu, uintptr_t fnc); void iFEppplPPPP(x64emu_t *emu, uintptr_t fnc); void iFEpppppupp(x64emu_t *emu, uintptr_t fnc); void iFEppppppuu(x64emu_t *emu, uintptr_t fnc); void iFEppPPPPPP(x64emu_t *emu, uintptr_t fnc); -void iFiiiiiiiip(x64emu_t *emu, uintptr_t fnc); -void iFiiiipiiip(x64emu_t *emu, uintptr_t fnc); void iFipiipippi(x64emu_t *emu, uintptr_t fnc); +void iFuiiuuiiip(x64emu_t *emu, uintptr_t fnc); +void iFuiiupiiup(x64emu_t *emu, uintptr_t fnc); +void iFuuppuuppu(x64emu_t *emu, uintptr_t fnc); void iFdddpppppp(x64emu_t *emu, uintptr_t fnc); +void iFpiLiiipip(x64emu_t *emu, uintptr_t fnc); +void iFpiLLLiiip(x64emu_t *emu, uintptr_t fnc); void iFpipippppi(x64emu_t *emu, uintptr_t fnc); -void iFpipLpiiip(x64emu_t *emu, uintptr_t fnc); void iFpuuuuuuuu(x64emu_t *emu, uintptr_t fnc); +void iFpuuuuuupp(x64emu_t *emu, uintptr_t fnc); void iFpuuuuduup(x64emu_t *emu, uintptr_t fnc); void iFpuuuLiiip(x64emu_t *emu, uintptr_t fnc); void iFpuuuLpppp(x64emu_t *emu, uintptr_t fnc); +void iFpuuppupuu(x64emu_t *emu, uintptr_t fnc); void iFpduuuLuLp(x64emu_t *emu, uintptr_t fnc); void iFpLiuiiLLL(x64emu_t *emu, uintptr_t fnc); void iFpLLiiuuii(x64emu_t *emu, uintptr_t fnc); @@ -2836,14 +3038,14 @@ void iFpLpLpLLpp(x64emu_t *emu, uintptr_t fnc); void iFpLpppupup(x64emu_t *emu, uintptr_t fnc); void iFpLppppppp(x64emu_t *emu, uintptr_t fnc); void iFppiiiiiii(x64emu_t *emu, uintptr_t fnc); +void iFppipiiipi(x64emu_t *emu, uintptr_t fnc); void iFppippippp(x64emu_t *emu, uintptr_t fnc); void iFppuLLpupp(x64emu_t *emu, uintptr_t fnc); void iFppuppuuuu(x64emu_t *emu, uintptr_t fnc); void iFppupppupp(x64emu_t *emu, uintptr_t fnc); +void iFppLiipiiL(x64emu_t *emu, uintptr_t fnc); void iFppLpiuppp(x64emu_t *emu, uintptr_t fnc); void iFpppiiipip(x64emu_t *emu, uintptr_t fnc); -void iFpppiiuuii(x64emu_t *emu, uintptr_t fnc); -void iFpppiipiiu(x64emu_t *emu, uintptr_t fnc); void iFpppippipi(x64emu_t *emu, uintptr_t fnc); void iFpppLLLupp(x64emu_t *emu, uintptr_t fnc); void iFpppLppupp(x64emu_t *emu, uintptr_t fnc); @@ -2852,7 +3054,7 @@ void iFpppppLupp(x64emu_t *emu, uintptr_t fnc); void iFppppppupp(x64emu_t *emu, uintptr_t fnc); void iFppppppppu(x64emu_t *emu, uintptr_t fnc); void iFppppppppp(x64emu_t *emu, uintptr_t fnc); -void uFEipippppp(x64emu_t *emu, uintptr_t fnc); +void uFEipuppppp(x64emu_t *emu, uintptr_t fnc); void uFEpppufppp(x64emu_t *emu, uintptr_t fnc); void uFuulpiuiuf(x64emu_t *emu, uintptr_t fnc); void uFpuupuppuu(x64emu_t *emu, uintptr_t fnc); @@ -2861,8 +3063,9 @@ void uFppppppppp(x64emu_t *emu, uintptr_t fnc); void lFpppipiipp(x64emu_t *emu, uintptr_t fnc); void lFpppippppp(x64emu_t *emu, uintptr_t fnc); void LFEppppppii(x64emu_t *emu, uintptr_t fnc); +void LFpLiiiiiip(x64emu_t *emu, uintptr_t fnc); void LFpLiiuuuLL(x64emu_t *emu, uintptr_t fnc); -void pFEppiiuuLi(x64emu_t *emu, uintptr_t fnc); +void pFEpLiiuuLi(x64emu_t *emu, uintptr_t fnc); void pFEppuippuu(x64emu_t *emu, uintptr_t fnc); void pFEpppppiiV(x64emu_t *emu, uintptr_t fnc); void pFEpppppppi(x64emu_t *emu, uintptr_t fnc); @@ -2871,8 +3074,7 @@ void pFuupuuuuuu(x64emu_t *emu, uintptr_t fnc); void pFpiiiiuuuu(x64emu_t *emu, uintptr_t fnc); void pFpLpLLipui(x64emu_t *emu, uintptr_t fnc); void pFpLppLLiLi(x64emu_t *emu, uintptr_t fnc); -void pFppiiiiiip(x64emu_t *emu, uintptr_t fnc); -void pFppipppppp(x64emu_t *emu, uintptr_t fnc); +void pFppupppppp(x64emu_t *emu, uintptr_t fnc); void pFpppiiiiii(x64emu_t *emu, uintptr_t fnc); void pFpppuipppp(x64emu_t *emu, uintptr_t fnc); void pFpppppiipp(x64emu_t *emu, uintptr_t fnc); @@ -2886,9 +3088,9 @@ void iWEpuuuiipp(x64emu_t *emu, uintptr_t fnc); void iWpiuuupipu(x64emu_t *emu, uintptr_t fnc); void iWpuiuuipip(x64emu_t *emu, uintptr_t fnc); void iWppppupiii(x64emu_t *emu, uintptr_t fnc); -void vFEiippppppp(x64emu_t *emu, uintptr_t fnc); -void vFEpippppppp(x64emu_t *emu, uintptr_t fnc); -void vFEpppiipppp(x64emu_t *emu, uintptr_t fnc); +void vFEiuppppppp(x64emu_t *emu, uintptr_t fnc); +void vFEpuppppppp(x64emu_t *emu, uintptr_t fnc); +void vFEpppuipppp(x64emu_t *emu, uintptr_t fnc); void vFEpppLuLpLp(x64emu_t *emu, uintptr_t fnc); void vFiiiiiiiiii(x64emu_t *emu, uintptr_t fnc); void vFiiiiiiiiiu(x64emu_t *emu, uintptr_t fnc); @@ -2911,10 +3113,8 @@ void vFuddiiddiip(x64emu_t *emu, uintptr_t fnc); void vFffffffffff(x64emu_t *emu, uintptr_t fnc); void vFpiuippppip(x64emu_t *emu, uintptr_t fnc); void vFpuupuuuuuu(x64emu_t *emu, uintptr_t fnc); -void vFppiiiiiiii(x64emu_t *emu, uintptr_t fnc); -void vFppiiiiipip(x64emu_t *emu, uintptr_t fnc); void vFppiiiiupip(x64emu_t *emu, uintptr_t fnc); -void vFppiippppii(x64emu_t *emu, uintptr_t fnc); +void vFppipipippi(x64emu_t *emu, uintptr_t fnc); void vFppuipppiip(x64emu_t *emu, uintptr_t fnc); void vFppuuuiiiii(x64emu_t *emu, uintptr_t fnc); void vFppuuuuuuuu(x64emu_t *emu, uintptr_t fnc); @@ -2928,15 +3128,17 @@ void vFpppppppppp(x64emu_t *emu, uintptr_t fnc); void iFEpiiiiippp(x64emu_t *emu, uintptr_t fnc); void iFEpupppLppL(x64emu_t *emu, uintptr_t fnc); void iFEppppppipp(x64emu_t *emu, uintptr_t fnc); -void iFiiiiiiiiip(x64emu_t *emu, uintptr_t fnc); -void iFpiipiiipip(x64emu_t *emu, uintptr_t fnc); -void iFpippddiidd(x64emu_t *emu, uintptr_t fnc); +void iFuiiiuuiiip(x64emu_t *emu, uintptr_t fnc); +void iFpiiLiiipip(x64emu_t *emu, uintptr_t fnc); +void iFpiLLiiipip(x64emu_t *emu, uintptr_t fnc); +void iFpiLLdduudd(x64emu_t *emu, uintptr_t fnc); void iFpCuWCCCCup(x64emu_t *emu, uintptr_t fnc); void iFpuuLiuiiLL(x64emu_t *emu, uintptr_t fnc); void iFpLLpiiuuii(x64emu_t *emu, uintptr_t fnc); void iFpLpLUUUUpL(x64emu_t *emu, uintptr_t fnc); -void iFppuuiiiiii(x64emu_t *emu, uintptr_t fnc); -void iFppuuiiuupi(x64emu_t *emu, uintptr_t fnc); +void iFppuuiiuuuu(x64emu_t *emu, uintptr_t fnc); +void iFppLLiiLWpi(x64emu_t *emu, uintptr_t fnc); +void iFppLpLLpLpp(x64emu_t *emu, uintptr_t fnc); void iFppLpLpLLpp(x64emu_t *emu, uintptr_t fnc); void iFpppiiipipi(x64emu_t *emu, uintptr_t fnc); void iFpppLLipppp(x64emu_t *emu, uintptr_t fnc); @@ -2946,7 +3148,7 @@ void iFpppppppppu(x64emu_t *emu, uintptr_t fnc); void uFpddpippppp(x64emu_t *emu, uintptr_t fnc); void uFpppppppppp(x64emu_t *emu, uintptr_t fnc); void lFpLppdddddd(x64emu_t *emu, uintptr_t fnc); -void pFEiippppppp(x64emu_t *emu, uintptr_t fnc); +void pFEiuppppppp(x64emu_t *emu, uintptr_t fnc); void pFEpiiiiiipp(x64emu_t *emu, uintptr_t fnc); void pFEpippppppp(x64emu_t *emu, uintptr_t fnc); void pFpupLLLLLpp(x64emu_t *emu, uintptr_t fnc); @@ -2967,7 +3169,6 @@ void vFEpuuuupupup(x64emu_t *emu, uintptr_t fnc); void vFEppLpLpLLpp(x64emu_t *emu, uintptr_t fnc); void vFiiiiillliip(x64emu_t *emu, uintptr_t fnc); void vFiiiiilllilp(x64emu_t *emu, uintptr_t fnc); -void vFuiiiiiiiiip(x64emu_t *emu, uintptr_t fnc); void vFuiiiiiiiuip(x64emu_t *emu, uintptr_t fnc); void vFuiiiiiiiuup(x64emu_t *emu, uintptr_t fnc); void vFuiiiillliip(x64emu_t *emu, uintptr_t fnc); @@ -2977,11 +3178,13 @@ void vFuuupupppppp(x64emu_t *emu, uintptr_t fnc); void vFuuffiiffiip(x64emu_t *emu, uintptr_t fnc); void vFuufffffffff(x64emu_t *emu, uintptr_t fnc); void vFuuddiiddiip(x64emu_t *emu, uintptr_t fnc); +void vFuUuuuuuuuuu(x64emu_t *emu, uintptr_t fnc); void vFuffffffffff(x64emu_t *emu, uintptr_t fnc); -void vFuLuuuuuuuuu(x64emu_t *emu, uintptr_t fnc); -void vFLufffffffff(x64emu_t *emu, uintptr_t fnc); -void vFpipipiipiii(x64emu_t *emu, uintptr_t fnc); -void vFpipppiiiipi(x64emu_t *emu, uintptr_t fnc); +void vFUufffffffff(x64emu_t *emu, uintptr_t fnc); +void vFpiiiiiiiiuu(x64emu_t *emu, uintptr_t fnc); +void vFpiLLpiiiipi(x64emu_t *emu, uintptr_t fnc); +void vFpiLpLiiiipi(x64emu_t *emu, uintptr_t fnc); +void vFpipipiipiiu(x64emu_t *emu, uintptr_t fnc); void vFpupuuupupup(x64emu_t *emu, uintptr_t fnc); void vFppiiiiiiiii(x64emu_t *emu, uintptr_t fnc); void vFppiiiiipiii(x64emu_t *emu, uintptr_t fnc); @@ -2995,24 +3198,27 @@ void vFppupipiuuuu(x64emu_t *emu, uintptr_t fnc); void vFppupppuiiii(x64emu_t *emu, uintptr_t fnc); void vFppppppppppp(x64emu_t *emu, uintptr_t fnc); void iFEiipppppppp(x64emu_t *emu, uintptr_t fnc); +void iFEpLppiiiiuu(x64emu_t *emu, uintptr_t fnc); void iFEppLpLpLLpp(x64emu_t *emu, uintptr_t fnc); -void iFEpppipppppp(x64emu_t *emu, uintptr_t fnc); -void iFEppppiiiiuu(x64emu_t *emu, uintptr_t fnc); +void iFEpppupppppp(x64emu_t *emu, uintptr_t fnc); void iFEpppppppppp(x64emu_t *emu, uintptr_t fnc); -void iFiiiiiiiiiip(x64emu_t *emu, uintptr_t fnc); -void iFpiippiiipip(x64emu_t *emu, uintptr_t fnc); +void iFuiiiiuuiiip(x64emu_t *emu, uintptr_t fnc); +void iFuppipipippi(x64emu_t *emu, uintptr_t fnc); +void iFpiiLLiiipip(x64emu_t *emu, uintptr_t fnc); void iFpippupppppp(x64emu_t *emu, uintptr_t fnc); void iFpuppppppppp(x64emu_t *emu, uintptr_t fnc); void iFpLipiiiippp(x64emu_t *emu, uintptr_t fnc); void iFpLLpiiuuiiL(x64emu_t *emu, uintptr_t fnc); void iFppippipppip(x64emu_t *emu, uintptr_t fnc); +void iFppuupLiupii(x64emu_t *emu, uintptr_t fnc); void iFppuppLLpupp(x64emu_t *emu, uintptr_t fnc); void iFpppiiuuiiuu(x64emu_t *emu, uintptr_t fnc); +void iFpppippppppp(x64emu_t *emu, uintptr_t fnc); void iFpppppiiuupp(x64emu_t *emu, uintptr_t fnc); -void uFEpLiupppLuV(x64emu_t *emu, uintptr_t fnc); -void uFEpLippppLup(x64emu_t *emu, uintptr_t fnc); -void uFEpLippppLuA(x64emu_t *emu, uintptr_t fnc); -void uFEppppppippp(x64emu_t *emu, uintptr_t fnc); +void uFEpLuupppLuV(x64emu_t *emu, uintptr_t fnc); +void uFEpLuppppLup(x64emu_t *emu, uintptr_t fnc); +void uFEpLuppppLuA(x64emu_t *emu, uintptr_t fnc); +void uFEppppppuppp(x64emu_t *emu, uintptr_t fnc); void uFppppppppppp(x64emu_t *emu, uintptr_t fnc); void pFEpipppppppi(x64emu_t *emu, uintptr_t fnc); void pFEppiiLpppip(x64emu_t *emu, uintptr_t fnc); @@ -3022,58 +3228,58 @@ void pFppppppppppp(x64emu_t *emu, uintptr_t fnc); void iWEpuipuppppp(x64emu_t *emu, uintptr_t fnc); void iWEpuuiiuippu(x64emu_t *emu, uintptr_t fnc); void iWEpuuuuuiipp(x64emu_t *emu, uintptr_t fnc); -void vFuiiiiiiiiuLC(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiiiiuUC(x64emu_t *emu, uintptr_t fnc); void vFuiiiiiiiuuip(x64emu_t *emu, uintptr_t fnc); -void vFuuiiiiiiiiui(x64emu_t *emu, uintptr_t fnc); void vFuuiiiiiiiiuu(x64emu_t *emu, uintptr_t fnc); void vFuuiiiiiiiuip(x64emu_t *emu, uintptr_t fnc); void vFuuiiiiiiiuup(x64emu_t *emu, uintptr_t fnc); void vFuuuuuuuuuuuu(x64emu_t *emu, uintptr_t fnc); void vFffffffffffff(x64emu_t *emu, uintptr_t fnc); -void vFpipppiiiipii(x64emu_t *emu, uintptr_t fnc); -void vFpippppiiiipi(x64emu_t *emu, uintptr_t fnc); +void vFpiLLpiiiipii(x64emu_t *emu, uintptr_t fnc); +void vFpiLLpLiiiipi(x64emu_t *emu, uintptr_t fnc); +void vFpiLpLiiiipui(x64emu_t *emu, uintptr_t fnc); void vFpupppppppppp(x64emu_t *emu, uintptr_t fnc); +void vFpLiiuuuiupLp(x64emu_t *emu, uintptr_t fnc); void vFppiiiiddddii(x64emu_t *emu, uintptr_t fnc); -void vFppiiuuuiupup(x64emu_t *emu, uintptr_t fnc); void vFppiipppiiiii(x64emu_t *emu, uintptr_t fnc); void vFppuuppuiiiii(x64emu_t *emu, uintptr_t fnc); void vFppuupppiiiiu(x64emu_t *emu, uintptr_t fnc); -void vFpppiiiiiiiii(x64emu_t *emu, uintptr_t fnc); void vFpppiiiiiiuii(x64emu_t *emu, uintptr_t fnc); void vFpppppppppppp(x64emu_t *emu, uintptr_t fnc); -void iFEpppippppppp(x64emu_t *emu, uintptr_t fnc); -void iFEppppiiiiuui(x64emu_t *emu, uintptr_t fnc); -void iFpipllipppppp(x64emu_t *emu, uintptr_t fnc); -void iFpipppppppppp(x64emu_t *emu, uintptr_t fnc); +void iFEpLppiiiiuui(x64emu_t *emu, uintptr_t fnc); +void iFEpppuppppppp(x64emu_t *emu, uintptr_t fnc); +void iFpiLlliLppppp(x64emu_t *emu, uintptr_t fnc); +void iFpiLppppppppp(x64emu_t *emu, uintptr_t fnc); void iFpCCCWCWCCCWp(x64emu_t *emu, uintptr_t fnc); void iFpLLlliLppppp(x64emu_t *emu, uintptr_t fnc); -void iFpppllipppppp(x64emu_t *emu, uintptr_t fnc); +void iFpLpuuLpLpppL(x64emu_t *emu, uintptr_t fnc); +void iFpLpppppppppp(x64emu_t *emu, uintptr_t fnc); +void iFppLlliLppppp(x64emu_t *emu, uintptr_t fnc); void iFpppppppppppp(x64emu_t *emu, uintptr_t fnc); -void pFEppiiuuuipii(x64emu_t *emu, uintptr_t fnc); +void LFpLiiuuuiupLp(x64emu_t *emu, uintptr_t fnc); +void pFEpLiiuuLipii(x64emu_t *emu, uintptr_t fnc); void pFEppppppppppp(x64emu_t *emu, uintptr_t fnc); void pFWWiCCCCiipup(x64emu_t *emu, uintptr_t fnc); -void pFppiiuuuiupLp(x64emu_t *emu, uintptr_t fnc); void pFppippLLLiLpp(x64emu_t *emu, uintptr_t fnc); void pFppuuppppuppp(x64emu_t *emu, uintptr_t fnc); void pFpppppppppppp(x64emu_t *emu, uintptr_t fnc); void pFbCuuWWwwCCup(x64emu_t *emu, uintptr_t fnc); void pFbuuuWWWWWWWW(x64emu_t *emu, uintptr_t fnc); -void vFEpppppppiippp(x64emu_t *emu, uintptr_t fnc); +void vFEpppppppuippp(x64emu_t *emu, uintptr_t fnc); void vFuiiiiiiiiiuup(x64emu_t *emu, uintptr_t fnc); void vFuuuuuuuuuuuuu(x64emu_t *emu, uintptr_t fnc); +void vFuUuuuuuuuuuuu(x64emu_t *emu, uintptr_t fnc); void vFuffffffffffff(x64emu_t *emu, uintptr_t fnc); -void vFuLuuuuuuuuuuu(x64emu_t *emu, uintptr_t fnc); -void vFpipppiiiiiiuu(x64emu_t *emu, uintptr_t fnc); +void vFpiLLLiiiiiiuu(x64emu_t *emu, uintptr_t fnc); void vFpippppppppppp(x64emu_t *emu, uintptr_t fnc); -void vFpuppppppppppp(x64emu_t *emu, uintptr_t fnc); -void vFppiiiiiiiiiii(x64emu_t *emu, uintptr_t fnc); +void vFpLppppppppppp(x64emu_t *emu, uintptr_t fnc); void vFppiiiiiiuiuii(x64emu_t *emu, uintptr_t fnc); void vFppuuppiiiiuii(x64emu_t *emu, uintptr_t fnc); void vFppuupppuiiiii(x64emu_t *emu, uintptr_t fnc); void vFppppppppppppp(x64emu_t *emu, uintptr_t fnc); void iFddddpppddpppp(x64emu_t *emu, uintptr_t fnc); void iFpippuuuiipppp(x64emu_t *emu, uintptr_t fnc); -void iFpupiiiipppppp(x64emu_t *emu, uintptr_t fnc); +void iFpLLlliiLppppp(x64emu_t *emu, uintptr_t fnc); void iFppppppLLLLupp(x64emu_t *emu, uintptr_t fnc); void uFippuuuulllipp(x64emu_t *emu, uintptr_t fnc); void uFpppppuupppppp(x64emu_t *emu, uintptr_t fnc); @@ -3099,13 +3305,15 @@ void vFpppippppppppppp(x64emu_t *emu, uintptr_t fnc); void vFppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void pFpuiippppppppppp(x64emu_t *emu, uintptr_t fnc); void pFppipppppppppppp(x64emu_t *emu, uintptr_t fnc); +void pFppupppppppppppp(x64emu_t *emu, uintptr_t fnc); void pFppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void vFpppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void iFpppppppppppppppp(x64emu_t *emu, uintptr_t fnc); +void pFpipppppppppppppp(x64emu_t *emu, uintptr_t fnc); void pFppipipipipipipip(x64emu_t *emu, uintptr_t fnc); +void pFppupupupupupupup(x64emu_t *emu, uintptr_t fnc); void pFpppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void pFbuuWWWWWWwwCCCuu(x64emu_t *emu, uintptr_t fnc); -void vFuuuiiiiiuiiiiilll(x64emu_t *emu, uintptr_t fnc); void vFuuuuiiiiuuiiiiiii(x64emu_t *emu, uintptr_t fnc); void vFppiiiiddddiiiiiuu(x64emu_t *emu, uintptr_t fnc); void vFpppuppiipppuUUUpi(x64emu_t *emu, uintptr_t fnc); @@ -3120,7 +3328,7 @@ void pFpupppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void vFpiiiiiiiiiiiiiiiiii(x64emu_t *emu, uintptr_t fnc); void uFbWWWCCCCCCCCWCCCCCC(x64emu_t *emu, uintptr_t fnc); void pFiiiippppppppppppppp(x64emu_t *emu, uintptr_t fnc); -void pFpippppppppppppppppp(x64emu_t *emu, uintptr_t fnc); +void pFppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void pFpupupppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void iFpppppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void uFippuuuuiiiiuuiiiiiiiipp(x64emu_t *emu, uintptr_t fnc); @@ -3128,39 +3336,12 @@ void vFpppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void pFpupuupppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void iFpppppppppppppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc); -#if defined(HAVE_LD80BITS) -void DFD(x64emu_t *emu, uintptr_t fnc); -void DFY(x64emu_t *emu, uintptr_t fnc); -void lFD(x64emu_t *emu, uintptr_t fnc); -void YFY(x64emu_t *emu, uintptr_t fnc); -void IFED(x64emu_t *emu, uintptr_t fnc); -void DFiD(x64emu_t *emu, uintptr_t fnc); -void lFDD(x64emu_t *emu, uintptr_t fnc); -void YFYY(x64emu_t *emu, uintptr_t fnc); -void vFDpp(x64emu_t *emu, uintptr_t fnc); -void DFDDD(x64emu_t *emu, uintptr_t fnc); -#endif - -#if !defined(HAVE_LD80BITS) -void KFK(x64emu_t *emu, uintptr_t fnc); -void KFy(x64emu_t *emu, uintptr_t fnc); -void lFK(x64emu_t *emu, uintptr_t fnc); -void yFy(x64emu_t *emu, uintptr_t fnc); -void IFEK(x64emu_t *emu, uintptr_t fnc); -void KFiK(x64emu_t *emu, uintptr_t fnc); -void KFKK(x64emu_t *emu, uintptr_t fnc); -void KFKp(x64emu_t *emu, uintptr_t fnc); -void lFKK(x64emu_t *emu, uintptr_t fnc); -void yFyy(x64emu_t *emu, uintptr_t fnc); -void vFKpp(x64emu_t *emu, uintptr_t fnc); -void KFKKK(x64emu_t *emu, uintptr_t fnc); -#endif - #if defined(NOALIGN) void iFipiip(x64emu_t *emu, uintptr_t fnc); #endif #if !defined(NOALIGN) +void iFELp(x64emu_t *emu, uintptr_t fnc); void iFEppu(x64emu_t *emu, uintptr_t fnc); void iFEiiip(x64emu_t *emu, uintptr_t fnc); void iFEipii(x64emu_t *emu, uintptr_t fnc); @@ -3168,12 +3349,15 @@ void iFEipiip(x64emu_t *emu, uintptr_t fnc); #endif #if !defined(STATICBUILD) +void lFiN(x64emu_t *emu, uintptr_t fnc); void iFlip(x64emu_t *emu, uintptr_t fnc); void iFLLi(x64emu_t *emu, uintptr_t fnc); -void iFLLiW(x64emu_t *emu, uintptr_t fnc); +void iFLLii(x64emu_t *emu, uintptr_t fnc); +void WFpLLu(x64emu_t *emu, uintptr_t fnc); void iFEipup(x64emu_t *emu, uintptr_t fnc); void iFEiipup(x64emu_t *emu, uintptr_t fnc); void iFpipppL(x64emu_t *emu, uintptr_t fnc); +void lFpLpdddddd(x64emu_t *emu, uintptr_t fnc); #endif void vFEv(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedandroidsupport_private.h b/src/wrapped/wrappedandroidsupport_private.h index a0ed8e1f1fa82d030b88054fe84e2ab24b79bb47..4c8e334bfbe8f305df3f19bddc4c62dc26a1a5e6 100644 --- a/src/wrapped/wrappedandroidsupport_private.h +++ b/src/wrapped/wrappedandroidsupport_private.h @@ -1,4 +1,4 @@ -#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA) && defined(GOS)) +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) #error Meh... #endif diff --git a/src/wrapped/wrappedatomic_private.h b/src/wrapped/wrappedatomic_private.h index 9566807ff0bec75e79a8e8e85478600e15df35fa..e1a21aa209948944d4ce5187ee3f583e550ea5f4 100644 --- a/src/wrapped/wrappedatomic_private.h +++ b/src/wrapped/wrappedatomic_private.h @@ -62,7 +62,7 @@ GO(__atomic_exchange, vFLpppi) GO(__atomic_is_lock_free, iFLp) GO(__atomic_load, vFLppi) //GO(__atomic_load_1, -//GO(__atomic_load_16, +GO(__atomic_load_16, HFpi) //GO(__atomic_load_2, //GO(__atomic_load_4, //GO(__atomic_load_8, @@ -79,7 +79,7 @@ GO(__atomic_load, vFLppi) //GO(atomic_signal_fence, GO(__atomic_store, vFLppi) //GO(__atomic_store_1, -//GO(__atomic_store_16, +GO(__atomic_store_16, vFpHi) //GO(__atomic_store_2, //GO(__atomic_store_4, //GO(__atomic_store_8, diff --git a/src/wrapped/wrappedbrotlidec.c b/src/wrapped/wrappedbrotlidec.c new file mode 100644 index 0000000000000000000000000000000000000000..f74b70105272b4e772f83e352ab5c1aed83a2252 --- /dev/null +++ b/src/wrapped/wrappedbrotlidec.c @@ -0,0 +1,135 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include + +#include "wrappedlibs.h" + +#include "wrapper.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "debug.h" +#include "myalign.h" +#include "callback.h" +#include "emu/x64emu_private.h" + +const char* brotlidecName = "libbrotlidec.so.1"; +#define LIBNAME brotlidec + +#define ADDED_FUNCTIONS() \ + +#include "generated/wrappedbrotlidectypes.h" + +#include "wrappercallback.h" + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// brotli_alloc_func ... +#define GO(A) \ +static uintptr_t my_brotli_alloc_func_fct_##A = 0; \ +static void* my_brotli_alloc_func_##A(void* a, size_t b) \ +{ \ + return (void*)RunFunctionFmt(my_brotli_alloc_func_fct_##A, "pL", a, b); \ +} +SUPER() +#undef GO +static void* find_brotli_alloc_func_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_brotli_alloc_func_fct_##A == (uintptr_t)fct) return my_brotli_alloc_func_##A; + SUPER() + #undef GO + #define GO(A) if(my_brotli_alloc_func_fct_##A == 0) {my_brotli_alloc_func_fct_##A = (uintptr_t)fct; return my_brotli_alloc_func_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for brotidec brotli_alloc_func callback\n"); + return NULL; +} +// brotli_free_func ... +#define GO(A) \ +static uintptr_t my_brotli_free_func_fct_##A = 0; \ +static void my_brotli_free_func_##A(void* a, void* b) \ +{ \ + RunFunctionFmt(my_brotli_free_func_fct_##A, "pp", a, b); \ +} +SUPER() +#undef GO +static void* find_brotli_free_func_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_brotli_free_func_fct_##A == (uintptr_t)fct) return my_brotli_free_func_##A; + SUPER() + #undef GO + #define GO(A) if(my_brotli_free_func_fct_##A == 0) {my_brotli_free_func_fct_##A = (uintptr_t)fct; return my_brotli_free_func_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for brotidec brotli_free_func callback\n"); + return NULL; +} +// brotli_decoder_metadata_start_func ... +#define GO(A) \ +static uintptr_t my_brotli_decoder_metadata_start_func_fct_##A = 0; \ +static void my_brotli_decoder_metadata_start_func_##A(void* a, size_t b) \ +{ \ + RunFunctionFmt(my_brotli_decoder_metadata_start_func_fct_##A, "pL", a, b); \ +} +SUPER() +#undef GO +static void* find_brotli_decoder_metadata_start_func_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_brotli_decoder_metadata_start_func_fct_##A == (uintptr_t)fct) return my_brotli_decoder_metadata_start_func_##A; + SUPER() + #undef GO + #define GO(A) if(my_brotli_decoder_metadata_start_func_fct_##A == 0) {my_brotli_decoder_metadata_start_func_fct_##A = (uintptr_t)fct; return my_brotli_decoder_metadata_start_func_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for brotidec brotli_decoder_metadata_start_func callback\n"); + return NULL; +} +// brotli_decoder_metadata_chunk_func ... +#define GO(A) \ +static uintptr_t my_brotli_decoder_metadata_chunk_func_fct_##A = 0; \ +static void my_brotli_decoder_metadata_chunk_func_##A(void* a, void* b, size_t c) \ +{ \ + RunFunctionFmt(my_brotli_decoder_metadata_chunk_func_fct_##A, "ppL", a, b, c); \ +} +SUPER() +#undef GO +static void* find_brotli_decoder_metadata_chunk_func_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_brotli_decoder_metadata_chunk_func_fct_##A == (uintptr_t)fct) return my_brotli_decoder_metadata_chunk_func_##A; + SUPER() + #undef GO + #define GO(A) if(my_brotli_decoder_metadata_chunk_func_fct_##A == 0) {my_brotli_decoder_metadata_chunk_func_fct_##A = (uintptr_t)fct; return my_brotli_decoder_metadata_chunk_func_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for brotidec brotli_decoder_metadata_chunk_func callback\n"); + return NULL; +} +#undef SUPER + +EXPORT void* my_BrotliDecoderCreateInstance(x64emu_t* emu, void* m, void* f, void* d) +{ + return my->BrotliDecoderCreateInstance(find_brotli_alloc_func_Fct(m), find_brotli_free_func_Fct(f), d); +} + +EXPORT void my_BrotliDecoderSetMetadataCallbacks(x64emu_t* emu, void* state, void* start, void* chunk, void* d) +{ + my->BrotliDecoderSetMetadataCallbacks(state, find_brotli_decoder_metadata_start_func_Fct(start), find_brotli_decoder_metadata_chunk_func_Fct(chunk), d); +} + +#include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedbrotlidec_private.h b/src/wrapped/wrappedbrotlidec_private.h new file mode 100644 index 0000000000000000000000000000000000000000..952985d4cbc39f93adbffd669827a08a72d26a47 --- /dev/null +++ b/src/wrapped/wrappedbrotlidec_private.h @@ -0,0 +1,18 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(BrotliDecoderAttachDictionary, iFpuLp) +GOM(BrotliDecoderCreateInstance, pFEppp) +GO(BrotliDecoderDecompress, uFLppp) +GO(BrotliDecoderDecompressStream, uFpppppp) +GO(BrotliDecoderDestroyInstance, vFp) +GO(BrotliDecoderErrorString, pFi) +GO(BrotliDecoderGetErrorCode, iFp) +GO(BrotliDecoderHasMoreOutput, iFp) +GO(BrotliDecoderIsFinished, iFp) +GO(BrotliDecoderIsUsed, iFp) +GOM(BrotliDecoderSetMetadataCallbacks, vFEpppp) +GO(BrotliDecoderSetParameter, iFpuu) +GO(BrotliDecoderTakeOutput, pFpp) +GO(BrotliDecoderVersion, uFv) diff --git a/src/wrapped/wrappedcrypto3.c b/src/wrapped/wrappedcrypto3.c index 87e5e089df63a0d11517605ce1f4bf66221d2f64..127d130e4c36ffcac831b3332e0f2d3af004af0d 100644 --- a/src/wrapped/wrappedcrypto3.c +++ b/src/wrapped/wrappedcrypto3.c @@ -22,10 +22,25 @@ const char* crypto3Name = "libcrypto.so.3"; #define LIBNAME crypto3 -typedef int(*iFppA_t) (void*, void*, va_list); +typedef void*(*pFv_t) (); +typedef int (*iFppA_t) (void*, void*, va_list); +typedef int (*iFpip_t) (void*, int, void*); +typedef void*(*pFppp_t) (void*, void*, void*); #define ADDED_FUNCTIONS() \ GO(BIO_vprintf, iFppA_t); \ + GO(i2t_ASN1_OBJECT, iFpip_t); \ + GO(i2v_ASN1_BIT_STRING, pFppp_t); \ + GO(i2v_GENERAL_NAME, pFppp_t); \ + GO(i2v_GENERAL_NAMES, pFppp_t); \ + GO(ASN1_BIT_STRING_it, pFv_t); \ + GO(EXTENDED_KEY_USAGE_it, pFv_t); \ + GO(ASN1_OCTET_STRING_it, pFv_t); \ + GO(GENERAL_NAMES_it, pFv_t); \ + GO(CERTIFICATEPOLICIES_it, pFv_t); \ + GO(POLICYINFO_it, pFv_t); \ + GO(CRL_DIST_POINTS_it, pFv_t); \ + GO(ISSUING_DIST_POINT_it, pFv_t); \ #include "generated/wrappedcrypto3types.h" @@ -506,6 +521,86 @@ EXPORT void my3_EVP_MD_do_all_provided(x64emu_t* emu, void* ctx, void* cb, void* my->EVP_MD_do_all_provided(ctx, find_do_all_provided_cb_Fct(cb), arg); } +EXPORT void my3_X509_STORE_set_verify_cb(x64emu_t* emu, void* ctx, void* cb) +{ + my->X509_STORE_set_verify_cb(ctx, find_verify_cb_Fct(cb)); +} + +EXPORT void* my3_PEM_read_bio_PrivateKey(x64emu_t* emu, void* bp, void* x, void* cb, void* u) +{ + return my->PEM_read_bio_PrivateKey(bp,x, find_pem_password_cb_Fct(cb), u); +} + +EXPORT int my3_PEM_write_bio_PrivateKey(x64emu_t* emu, void* bp, void* x, void* enc, void* kstr, int klen, void* cb, void* u) +{ + return my->PEM_write_bio_PrivateKey(bp, x, enc, kstr, klen, find_pem_password_cb_Fct(cb), u); +} + +EXPORT int my3_PEM_write_bio_PrivateKey_traditional(x64emu_t* emu, void* bp, void* x, void* enc, void* kstr, int klen, void* cb, void* u) +{ + return my->PEM_write_bio_PrivateKey_traditional(bp, x, enc, kstr, klen, find_pem_password_cb_Fct(cb), u); +} + +EXPORT void* my3_PEM_read_bio_PUBKEY(x64emu_t* emu, void* bp, void* x, void* cb, void* u) +{ + return my->PEM_read_bio_PUBKEY(bp, x, find_pem_password_cb_Fct(cb), u); +} + +EXPORT void* my3_PEM_read_bio_DHparams(x64emu_t* emu, void* bp, void* x, void* cb, void* u) +{ + return my->PEM_read_bio_DHparams(bp, x, find_pem_password_cb_Fct(cb), u); +} + +typedef struct my_v3_ext_method_s { + int ext_nid; + int ext_flags; + void* it; + void* ext_new; + void* ext_free; + void* d2i; + void* i2d; + void* i2s; + void* s2i; + void* i2v; + void* v2i; + void* i2r; + void* r2i; +} my_v3_ext_method_t; + +EXPORT void* my3_X509V3_EXT_get(x64emu_t* emu, void* x) +{ + my_v3_ext_method_t* ret = my->X509V3_EXT_get(x); + if(ret) { + #define GO(A, W) if(ret->A) AddAutomaticBridge(my_lib->w.bridge, W, ret->A, 0, "v3_ext_method_" #A) + GO(ext_new, pFv); + GO(ext_free, vFp); + GO(d2i, pFppl); + GO(i2d, iFpp); + GO(i2s, pFpp); + GO(s2i, pFppp); + GO(i2v, pFppp); + GO(v2i, pFppp); + GO(i2r, iFpppi); + GO(r2i, pFppp); + #undef GO + } + return ret; +} + #define ALTMY my3_ +#define CUSTOM_INIT \ + AddAutomaticBridge(lib->w.bridge, iFpip, my->i2t_ASN1_OBJECT, 0, "i2t_ASN1_OBJECT"); \ + AddAutomaticBridge(lib->w.bridge, pFppp, my->i2v_ASN1_BIT_STRING, 0, "i2v_ASN1_BIT_STRING"); \ + AddAutomaticBridge(lib->w.bridge, pFppp, my->i2v_GENERAL_NAME, 0, "i2v_GENERAL_NAME"); \ + AddAutomaticBridge(lib->w.bridge, pFppp, my->i2v_GENERAL_NAMES, 0, "i2v_GENERAL_NAMES"); \ + AddAutomaticBridge(lib->w.bridge, pFv, my->ASN1_BIT_STRING_it, 0, "ASN1_BIT_STRING_it"); \ + AddAutomaticBridge(lib->w.bridge, pFv, my->EXTENDED_KEY_USAGE_it, 0, "EXTENDED_KEY_USAGE_it"); \ + AddAutomaticBridge(lib->w.bridge, pFv, my->ASN1_OCTET_STRING_it, 0, "ASN1_OCTET_STRING_it"); \ + AddAutomaticBridge(lib->w.bridge, pFv, my->GENERAL_NAMES_it, 0, "GENERAL_NAMES_it"); \ + AddAutomaticBridge(lib->w.bridge, pFv, my->CERTIFICATEPOLICIES_it, 0, "CERTIFICATEPOLICIES_it");\ + AddAutomaticBridge(lib->w.bridge, pFv, my->POLICYINFO_it, 0, "POLICYINFO_it"); \ + AddAutomaticBridge(lib->w.bridge, pFv, my->CRL_DIST_POINTS_it, 0, "CRL_DIST_POINTS_it"); \ + AddAutomaticBridge(lib->w.bridge, pFv, my->ISSUING_DIST_POINT_it, 0, "ISSUING_DIST_POINT_it"); \ + #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedcrypto3_private.h b/src/wrapped/wrappedcrypto3_private.h index 9b4d5cff886b6355d31f0f95d3516555cb9e3ee8..318942fcfcf1783a125fa5c5e32ae1628c97eb13 100644 --- a/src/wrapped/wrappedcrypto3_private.h +++ b/src/wrapped/wrappedcrypto3_private.h @@ -1,5 +1,5 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif GO(a2d_ASN1_OBJECT, iFpipi) @@ -42,10 +42,11 @@ GO(AES_wrap_key, iFppppi) //GO(_armv8_sha1_probe, //GO(_armv8_sha256_probe, //GO(asn1_add_error, -//GO(ASN1_add_oid_module, +GO(ASN1_add_oid_module, vFv) GO(ASN1_BIT_STRING_check, iFppi) GO(ASN1_BIT_STRING_free, vFp) GO(ASN1_BIT_STRING_get_bit, iFpi) +GO(ASN1_BIT_STRING_it, pFv) GO(ASN1_BIT_STRING_name_print, iFpppi) GO(ASN1_BIT_STRING_new, pFv) GO(ASN1_BIT_STRING_num_asc, iFpp) @@ -59,11 +60,11 @@ GO(ASN1_check_infinite_end, iFpl) GO(ASN1_const_check_infinite_end, iFpl) //GO(asn1_const_Finish, GOM(ASN1_d2i_bio, pFEpppp) -//GO(ASN1_d2i_fp, +//GOM(ASN1_d2i_fp, pFEppSp) //GO(ASN1_digest, //GO(asn1_do_adb, //GO(asn1_do_lock, -//GO(ASN1_dup, +//GOM(ASN1_dup, pFEppp) //GO(asn1_enc_free, //GO(asn1_enc_init, //GO(asn1_enc_restore, @@ -93,7 +94,7 @@ GO(ASN1_generate_v3, pFpp) GO(ASN1_get_object, iFppppl) //GO(asn1_GetSequence, GOM(ASN1_i2d_bio, iFEppp) -//GO(ASN1_i2d_fp, +//GOM(ASN1_i2d_fp, iFEpSp) GO(ASN1_IA5STRING_free, vFp) GO(ASN1_IA5STRING_new, pFv) GO(ASN1_INTEGER_cmp, iFpp) @@ -105,7 +106,7 @@ GO(ASN1_INTEGER_set, iFpl) GO(ASN1_INTEGER_to_BN, pFpp) GO(ASN1_item_d2i, pFpplp) GO(ASN1_item_d2i_bio, pFppp) -GO(ASN1_item_d2i_fp, pFppp) +GO(ASN1_item_d2i_fp, pFpSp) //GO(ASN1_item_digest, GO(ASN1_item_dup, pFpp) //GO(ASN1_item_ex_d2i, @@ -113,9 +114,9 @@ GO(ASN1_item_dup, pFpp) //GO(ASN1_item_ex_i2d, //GO(ASN1_item_ex_new, GO(ASN1_item_free, vFpp) -//GO(ASN1_item_i2d, +GO(ASN1_item_i2d, iFppp) GO(ASN1_item_i2d_bio, iFppp) -GO(ASN1_item_i2d_fp, iFppp) +GO(ASN1_item_i2d_fp, iFpSp) GO(ASN1_item_ndef_i2d, iFppp) GO(ASN1_item_new, pFp) GO(ASN1_item_pack, pFppp) @@ -135,27 +136,28 @@ GO(ASN1_object_size, iFiii) GO(ASN1_OCTET_STRING_cmp, iFpp) GO(ASN1_OCTET_STRING_dup, pFp) GO(ASN1_OCTET_STRING_free, vFp) +GO(ASN1_OCTET_STRING_it, pFv) GO(ASN1_OCTET_STRING_new, pFv) GO(ASN1_OCTET_STRING_set, iFppi) //GO(ASN1_pack_string, GO(ASN1_parse, iFppli) GO(ASN1_parse_dump, iFpplii) GO(ASN1_PCTX_free, vFp) -//GO(ASN1_PCTX_get_cert_flags, -//GO(ASN1_PCTX_get_flags, -//GO(ASN1_PCTX_get_nm_flags, -//GO(ASN1_PCTX_get_oid_flags, +GO(ASN1_PCTX_get_cert_flags, LFp) +GO(ASN1_PCTX_get_flags, LFp) +GO(ASN1_PCTX_get_nm_flags, LFp) +GO(ASN1_PCTX_get_oid_flags, LFp) GO(ASN1_PCTX_get_str_flags, LFp) GO(ASN1_PCTX_new, pFv) -//GO(ASN1_PCTX_set_cert_flags, -//GO(ASN1_PCTX_set_flags, -//GO(ASN1_PCTX_set_nm_flags, -//GO(ASN1_PCTX_set_oid_flags, +GO(ASN1_PCTX_set_cert_flags, vFpL) +GO(ASN1_PCTX_set_flags, vFpL) +GO(ASN1_PCTX_set_nm_flags, vFpL) +GO(ASN1_PCTX_set_oid_flags, vFpL) GO(ASN1_PCTX_set_str_flags, vFpL) //GO(ASN1_primitive_free, //GO(ASN1_primitive_new, -//GO(ASN1_PRINTABLE_free, -//GO(ASN1_PRINTABLE_new, +GO(ASN1_PRINTABLE_free, vFp) +GO(ASN1_PRINTABLE_new, pFv) GO(ASN1_PRINTABLESTRING_free, vFp) GO(ASN1_PRINTABLESTRING_new, pFv) GO(ASN1_PRINTABLE_type, iFpi) @@ -165,7 +167,7 @@ GO(ASN1_put_object, vFpiiii) //GO(ASN1_seq_unpack, //GO(asn1_set_choice_selector, //GO(ASN1_sign, -//GO(ASN1_STRING_clear_free, +GO(ASN1_STRING_clear_free, vFp) GO(ASN1_STRING_cmp, iFpp) GO(ASN1_STRING_copy, iFpp) GO(ASN1_STRING_data, pFp) @@ -175,17 +177,17 @@ GO(ASN1_STRING_get0_data, pFp) GO(ASN1_STRING_get_default_mask, LFv) GO(ASN1_STRING_length, iFp) GO(ASN1_STRING_length_set, vFpi) -//GO(ASN1_STRING_new, +GO(ASN1_STRING_new, pFv) GO(ASN1_STRING_print, iFpp) GO(ASN1_STRING_print_ex, iFppL) -GO(ASN1_STRING_print_ex_fp, iFppL) +GO(ASN1_STRING_print_ex_fp, iFSpL) GO(ASN1_STRING_set, iFppi) GO(ASN1_STRING_set0, vFppi) GO(ASN1_STRING_set_by_NID, pFppiii) GO(ASN1_STRING_set_default_mask, vFL) GO(ASN1_STRING_set_default_mask_asc, iFp) GO(ASN1_STRING_TABLE_add, iFillLL) -//GO(ASN1_STRING_TABLE_cleanup, +GO(ASN1_STRING_TABLE_cleanup, vFv) GO(ASN1_STRING_TABLE_get, pFi) GO(ASN1_STRING_to_UTF8, iFpp) GO(ASN1_STRING_type, iFp) @@ -206,7 +208,7 @@ GO(ASN1_TIME_free, vFp) GO(ASN1_TIME_new, pFv) GO(ASN1_TIME_print, iFpp) GO(ASN1_TIME_set, pFpl) -//GO(ASN1_TIME_set_string, +GO(ASN1_TIME_set_string, iFpp) GO(ASN1_TIME_to_generalizedtime, pFpp) GO(ASN1_TYPE_cmp, iFpp) GO(ASN1_TYPE_free, vFp) @@ -218,6 +220,7 @@ GO(ASN1_TYPE_set, vFpip) GO(ASN1_TYPE_set1, iFpip) GO(ASN1_TYPE_set_int_octetstring, iFplpi) GO(ASN1_TYPE_set_octetstring, iFppi) +GO(ASN1_TIME_to_tm, iFpp) GO(ASN1_UNIVERSALSTRING_free, vFp) GO(ASN1_UNIVERSALSTRING_new, pFv) GO(ASN1_UNIVERSALSTRING_to_string, iFp) @@ -256,48 +259,48 @@ GO(BF_ofb64_encrypt, vFpplppp) GO(BF_options, pFv) GO(BF_set_key, vFpip) GO(BIO_accept, iFip) -//GO(BIO_asn1_get_prefix, -GO(BIO_asn1_get_suffix, iFppp) -//GO(BIO_asn1_set_prefix, -//GO(BIO_asn1_set_suffix, -//GO(BIO_callback_ctrl, +//GOM(BIO_asn1_get_prefix, iFEppp) +GO(BIO_asn1_get_suffix, iFppp) // might need GOM, the 2 last p are functions pointers +//GOM(BIO_asn1_set_prefix, iFEppp) +//GOM(BIO_asn1_set_suffix, iFEppp) +//GOM(BIO_callback_ctrl, lFEpip) GO(BIO_clear_flags, vFpi) //GO(BIO_CONNECT_free, //GO(BIO_CONNECT_new, GO(BIO_copy_next_retry, vFp) GO(BIO_ctrl, lFpilp) GO(BIO_ctrl_get_read_request, LFp) -//GO(BIO_ctrl_get_write_guarantee, +GO(BIO_ctrl_get_write_guarantee, LFp) GO(BIO_ctrl_pending, LFp) -//GO(BIO_ctrl_reset_read_request, +GO(BIO_ctrl_reset_read_request, iFp) GO(BIO_ctrl_wpending, LFp) GO(BIO_debug_callback, lFpipill) -//GO(BIO_dgram_non_fatal_error, +GO(BIO_dgram_non_fatal_error, iFi) GO(BIO_dump, iFppi) -//GO(BIO_dump_cb, -GO(BIO_dump_fp, iFppi) +//GOM(BIO_dump_cb, iFEpppi) +GO(BIO_dump_fp, iFSpi) GO(BIO_dump_indent, iFppii) -//GO(BIO_dump_indent_cb, -GO(BIO_dump_indent_fp, iFppii) +//GOM(BIO_dump_indent_cb, iFEpppii) +GO(BIO_dump_indent_fp, iFSpii) GO(BIO_dup_chain, pFp) GO(BIO_eof, iFp) GO(BIO_f_asn1, pFv) -//GO(BIO_f_base64, -//GO(BIO_f_buffer, -//GO(BIO_f_cipher, -//GO(BIO_fd_non_fatal_error, -//GO(BIO_fd_should_retry, +GO(BIO_f_base64, pFv) +GO(BIO_f_buffer, pFv) +GO(BIO_f_cipher, pFv) +GO(BIO_fd_non_fatal_error, iFi) +GO(BIO_fd_should_retry, iFi) GO(BIO_flush, iFp) GO(BIO_find_type, pFpi) -//GO(BIO_f_md, -//GO(BIO_f_nbio_test, -//GO(BIO_f_null, +GO(BIO_f_md, pFv) +GO(BIO_f_nbio_test, pFv) +GO(BIO_f_null, pFv) GO(BIO_free, iFp) GO(BIO_free_all, vFp) -//GO(BIO_f_reliable, +GO(BIO_f_reliable, pFv) //GO(BIO_f_zlib, GO(BIO_get_accept_socket, iFpi) -GO(BIO_get_callback, pFp) +GO(BIO_get_callback, pFp) // might need GOM to unwrap callback? GO(BIO_get_callback_arg, pFp) GO(BIO_get_close, iFp) GO(BIO_get_ex_data, pFpi) @@ -309,7 +312,7 @@ GO(BIO_get_retry_BIO, pFpp) GO(BIO_get_retry_reason, iFp) GO(BIO_gets, iFppi) GO(BIO_hex_string, iFpiipi) -//GO(BIO_indent, +GO(BIO_indent, iFpii) GO(BIO_int_ctrl, lFpili) GO(BIO_method_name, pFp) GO(BIO_method_type, iFp) @@ -317,75 +320,75 @@ GO(BIO_new, pFp) GO(BIO_new_accept, pFp) GO(BIO_new_bio_pair, iFpLpL) //GO(BIO_new_CMS, -//GO(BIO_new_connect, -//GO(BIO_new_dgram, +GO(BIO_new_connect, pFp) +GO(BIO_new_dgram, pFii) GO(BIO_new_fd, pFii) GO(BIO_new_file, pFpp) -GO(BIO_new_fp, pFpi) +GO(BIO_new_fp, pFSi) GO(BIO_new_mem_buf, pFpi) GO(BIO_new_NDEF, pFppp) //GO(BIO_new_PKCS7, -//GO(BIO_new_socket, -//GO(BIO_next, -//GO(BIO_nread, -//GO(BIO_nread0, -//GO(BIO_number_read, -GO(BIO_number_written, LFp) +GO(BIO_new_socket, pFii) +GO(BIO_next, pFp) +GO(BIO_nread, iFppi) +GO(BIO_nread0, iFpp) +GO(BIO_number_read, UFp) +GO(BIO_number_written, UFp) GO(BIO_nwrite, iFppi) GO(BIO_nwrite0, iFpp) GO(BIO_pending, iFp) -//GO(BIO_pop, +GO(BIO_pop, pFp) GOM(BIO_printf, iFEppV) GO(BIO_ptr_ctrl, pFpil) GO(BIO_push, pFpp) GO(BIO_puts, iFpp) GO(BIO_read, iFppi) GO(BIO_reset, iFp) -//GO(BIO_s_accept, -//GO(BIO_s_bio, -//GO(BIO_s_connect, +GO(BIO_s_accept, pFv) +GO(BIO_s_bio, pFv) +GO(BIO_s_connect, pFv) GO(BIO_s_datagram, pFv) GO(BIO_seek, iFpi) GO(BIO_set, iFpp) -//GO(BIO_set_callback, +//GOM(BIO_set_callback, vFEpp) GO(BIO_set_callback_arg, vFpp) GO(BIO_set_close, iFpl) -//GO(BIO_set_cipher, +GO(BIO_set_cipher, iFppppi) GO(BIO_set_ex_data, iFpip) GO(BIO_set_flags, vFpi) GO(BIO_set_tcp_ndelay, iFii) -//GO(BIO_s_fd, +GO(BIO_s_fd, pFv) GO(BIO_s_file, pFv) -//GO(BIO_s_log, +GO(BIO_s_log, pFv) GO(BIO_s_mem, pFv) -//GO(BIO_snprintf, -//GO(BIO_s_null, +//GOM(BIO_snprintf, iFEpLpV) +GO(BIO_s_null, pFv) //GO(BIO_sock_cleanup, -//GO(BIO_sock_error, +GO(BIO_sock_error, iFi) GO(BIO_socket_ioctl, iFilp) -//GO(BIO_socket_nbio, +GO(BIO_socket_nbio, iFii) GO(BIO_sock_init, iFv) -//GO(BIO_sock_non_fatal_error, -//GO(BIO_sock_should_retry, -//GO(BIO_s_socket, +GO(BIO_sock_non_fatal_error, iFi) +GO(BIO_sock_should_retry, iFi) +GO(BIO_s_socket, pFv) GO(BIO_tell, iFp) GO(BIO_test_flags, iFpi) GO(BIO_up_ref, iFp) GO(BIO_vfree, vFp) -//GO(BIO_vprintf, -//GO(BIO_vsnprintf, +//GOM(BIO_vprintf, iFEppA) +//GOM(BIO_vsnprintf, iFEpLpA) GO(BIO_wpending, iFp) GO(BIO_write, iFppi) GO(BN_add, iFppp) //GO(bn_add_part_words, -GO(BN_add_word, iFpu) +GO(BN_add_word, iFpL) //GO(bn_add_words, GO(BN_asc2bn, iFpp) GO(BN_bin2bn, pFpip) -//GO(BN_BLINDING_convert, +GO(BN_BLINDING_convert, iFppp) GO(BN_BLINDING_convert_ex, iFpppp) -//GO(BN_BLINDING_create_param, -//GO(BN_BLINDING_free, +//GOM(BN_BLINDING_create_param, pFEpppppp) +GO(BN_BLINDING_free, vFp) GO(BN_BLINDING_get_flags, LFp) //GO(BN_BLINDING_get_thread_id, GO(BN_BLINDING_invert, iFppp) @@ -413,7 +416,7 @@ GO(BN_CTX_free, vFp) GO(BN_CTX_get, pFp) GO(BN_CTX_init, vFp) GO(BN_CTX_new, pFv) -//GO(BN_CTX_start, +GO(BN_CTX_start, vFp) GO(BN_dec2bn, iFpp) GO(BN_div, iFppppp) GO(BN_div_recp, iFppppp) @@ -427,60 +430,61 @@ GO(BN_free, vFp) GO(BN_from_montgomery, iFpppp) GO(BN_gcd, iFpppp) GO(BN_GENCB_call, iFpii) -//GO(BN_generate_prime, pFpiippBp) //callback previous last argument... +//GOM(BN_generate_prime, pFEpiipppp) GO(BN_generate_prime_ex, iFpiippp) -//GO(BN_get0_nist_prime_192, -//GO(BN_get0_nist_prime_224, -//GO(BN_get0_nist_prime_256, -//GO(BN_get0_nist_prime_384, +GO(BN_get0_nist_prime_192, pFv) +GO(BN_get0_nist_prime_224, pFv) +GO(BN_get0_nist_prime_256, pFv) +GO(BN_get0_nist_prime_384, pFv) GO(BN_get0_nist_prime_521, pFv) GO(BN_get_params, iFi) GO(BN_get_word, LFp) -//GO(BN_GF2m_add, +GO(BN_GF2m_add, iFppp) GO(BN_GF2m_arr2poly, iFpp) GO(BN_GF2m_mod, iFppp) GO(BN_GF2m_mod_arr, iFppp) -//GO(BN_GF2m_mod_div, -//GO(BN_GF2m_mod_div_arr, +GO(BN_GF2m_mod_div, iFppppp) +GO(BN_GF2m_mod_div_arr, iFppppp) GO(BN_GF2m_mod_exp, iFppppp) GO(BN_GF2m_mod_exp_arr, iFppppp) -//GO(BN_GF2m_mod_inv, -//GO(BN_GF2m_mod_inv_arr, -//GO(BN_GF2m_mod_mul, -//GO(BN_GF2m_mod_mul_arr, -//GO(BN_GF2m_mod_solve_quad, +GO(BN_GF2m_mod_inv, iFpppp) +GO(BN_GF2m_mod_inv_arr, iFpppp) +GO(BN_GF2m_mod_mul, iFppppp) +GO(BN_GF2m_mod_mul_arr, iFppppp) +GO(BN_GF2m_mod_solve_quad, iFpppp) GO(BN_GF2m_mod_solve_quad_arr, iFpppp) -//GO(BN_GF2m_mod_sqr, -//GO(BN_GF2m_mod_sqr_arr, -//GO(BN_GF2m_mod_sqrt, -//GO(BN_GF2m_mod_sqrt_arr, +GO(BN_GF2m_mod_sqr, iFpppp) +GO(BN_GF2m_mod_sqr_arr, iFpppp) +GO(BN_GF2m_mod_sqrt, iFpppp) +GO(BN_GF2m_mod_sqrt_arr, iFpppp) //GO(bn_GF2m_mul_2x2, GO(BN_GF2m_poly2arr, iFppi) GO(BN_hex2bn, iFpp) //GO(BN_init, GO(BN_is_bit_set, iFpi) -//GO(BN_is_prime, iFpiBpp) // third argument is a callback +//GOM(BN_is_prime, iFEpippp) // third argument is a callback GO(BN_is_prime_ex, iFpipp) -//GO(BN_is_prime_fasttest, +//GOM(BN_is_prime_fasttest, iFEpipppi) GO(BN_is_prime_fasttest_ex, iFpipip) -GO(BN_is_zero, iFp) +GO(BN_is_word, iFpL) +GO(BN_is_zero, iFp) GO(BN_kronecker, iFppp) GO(BN_lshift, iFppi) GO(BN_lshift1, iFpp) GO(BN_mask_bits, iFpi) GO(BN_mod_add, iFppppp) -//GO(BN_mod_add_quick, +GO(BN_mod_add_quick, iFpppp) GO(BN_mod_exp, iFppppp) GO(BN_mod_exp2_mont, iFpppppppp) -//GO(BN_mod_exp_mont, +GO(BN_mod_exp_mont, iFpppppp) GO(BN_mod_exp_mont_consttime, iFpppppp) GO(BN_mod_exp_mont_word, iFpLpppp) -//GO(BN_mod_exp_recp, -//GO(BN_mod_exp_simple, +GO(BN_mod_exp_recp, iFppppp) +GO(BN_mod_exp_simple, iFppppp) GO(BN_mod_inverse, pFpppp) GO(BN_mod_lshift, iFppipp) -//GO(BN_mod_lshift1, -//GO(BN_mod_lshift1_quick, +GO(BN_mod_lshift1, iFpppp) +GO(BN_mod_lshift1_quick, iFppp) GO(BN_mod_lshift_quick, iFppip) GO(BN_mod_mul, iFppppp) GO(BN_mod_mul_montgomery, iFppppp) @@ -508,13 +512,13 @@ GO(BN_mul, iFpppp) //GO(bn_mul_normal, //GO(bn_mul_part_recursive, //GO(bn_mul_recursive, -GO(BN_mul_word, iFpu) +GO(BN_mul_word, iFpL) //GO(bn_mul_words, GO(BN_new, pFv) -//GO(BN_nist_mod_192, -//GO(BN_nist_mod_224, -//GO(BN_nist_mod_256, -//GO(BN_nist_mod_384, +GO(BN_nist_mod_192, iFpppp) +GO(BN_nist_mod_224, iFpppp) +GO(BN_nist_mod_256, iFpppp) +GO(BN_nist_mod_384, iFpppp) GO(BN_nist_mod_521, iFpppp) GO(BN_nnmod, iFpppp) GO(BN_num_bits, iFp) @@ -522,11 +526,11 @@ GO(BN_num_bits_word, iFL) GO(BN_one, iFp) GO(BN_options, pFv) GO(BN_print, iFpp) -GO(BN_print_fp, iFpp) +GO(BN_print_fp, iFSp) GO(BN_pseudo_rand, iFpiii) GO(BN_pseudo_rand_range, iFpp) GO(BN_rand, iFpiii) -//GO(BN_rand_range, +GO(BN_rand_range, iFpp) GO(BN_reciprocal, iFppip) GO(BN_RECP_CTX_free, vFp) //GO(BN_RECP_CTX_init, @@ -546,14 +550,14 @@ GO(BN_sqr, iFppp) //GO(bn_sqr_words, GO(BN_sub, iFppp) //GO(bn_sub_part_words, -GO(BN_sub_word, iFpu) +GO(BN_sub_word, iFpL) //GO(bn_sub_words, GO(BN_swap, vFpp) GO(BN_to_ASN1_ENUMERATED, pFpp) GO(BN_to_ASN1_INTEGER, pFpp) -//GO(BN_uadd, +GO(BN_uadd, iFppp) GO(BN_ucmp, iFpp) -//GO(BN_usub, +GO(BN_usub, iFppp) GO(BN_value_one, pFv) GO(BN_X931_derive_prime_ex, iFppppppppp) GO(BN_X931_generate_prime_ex, iFppppppppp) @@ -600,6 +604,7 @@ GO(BN_zero, vFp) //GO(CAST_ofb64_encrypt, //GO(CAST_set_key, //GO(CERTIFICATEPOLICIES_free, +GO(CERTIFICATEPOLICIES_it, pFv) //GO(CERTIFICATEPOLICIES_new, //GO(check_defer, //GO(CMAC_CTX_cleanup, @@ -797,6 +802,7 @@ GO(CONF_modules_unload, vFi) //GO(CONF_set_nconf, GO(COMP_get_type, iFp) GO(CRL_DIST_POINTS_free, vFp) +GO(CRL_DIST_POINTS_it, pFv) GO(CRL_DIST_POINTS_new, pFv) //GO(CRYPTO_128_unwrap, //GO(CRYPTO_128_wrap, @@ -850,7 +856,7 @@ GO(CRYPTO_free_ex_data, vFipp) //GO(CRYPTO_get_dynlock_value, GO(CRYPTO_get_ex_data, pFpi) //GO(CRYPTO_get_ex_data_implementation, -GO(CRYPTO_get_ex_new_index, iFilpppp) +GO(CRYPTO_get_ex_new_index, iFilpppp) // might need GOM, last 3 pointers are functions //GO(CRYPTO_get_id_callback, //GO(CRYPTO_get_locked_mem_ex_functions, //GO(CRYPTO_get_locked_mem_functions, @@ -859,12 +865,12 @@ GO(CRYPTO_get_ex_new_index, iFilpppp) //GO(CRYPTO_get_mem_debug_functions, //GO(CRYPTO_get_mem_debug_options, //GO(CRYPTO_get_mem_ex_functions, -GO(CRYPTO_get_mem_functions, vFppp) +GO(CRYPTO_get_mem_functions, vFppp) // might need GOM, 3 function pointers retreived //GO(CRYPTO_get_new_dynlockid, //GO(CRYPTO_get_new_lockid, //GO(CRYPTO_is_mem_check_on, //GO(CRYPTO_lock, -GO(CRYPTO_malloc, pFupi) +GO(CRYPTO_malloc, pFLpi) //GO(CRYPTO_malloc_locked, GO(CRYPTO_memcmp, iFppL) //GO(CRYPTO_mem_ctrl, @@ -897,7 +903,7 @@ GOM(CRYPTO_set_locking_callback, vFEp) //GO(CRYPTO_set_mem_debug_functions, //GO(CRYPTO_set_mem_debug_options, //GO(CRYPTO_set_mem_ex_functions, -//GO(CRYPTO_set_mem_functions, +//GOM(CRYPTO_set_mem_functions, iFEppp) GO(CRYPTO_strdup, pFppi) //GO(CRYPTO_thread_id, //GO(CRYPTO_THREADID_cmp, @@ -918,13 +924,13 @@ GO(d2i_ASN1_ENUMERATED, pFppl) GO(d2i_ASN1_GENERALIZEDTIME, pFppl) GO(d2i_ASN1_GENERALSTRING, pFppl) GO(d2i_ASN1_IA5STRING, pFppl) -//GO(d2i_ASN1_INTEGER, +GO(d2i_ASN1_INTEGER, pFppl) GO(d2i_ASN1_NULL, pFppl) GO(d2i_ASN1_OBJECT, pFppl) GO(d2i_ASN1_OCTET_STRING, pFppl) -//GO(d2i_ASN1_PRINTABLE, +GO(d2i_ASN1_PRINTABLE, pFppl) GO(d2i_ASN1_PRINTABLESTRING, pFppl) -//GO(d2i_ASN1_SEQUENCE_ANY, +GO(d2i_ASN1_SEQUENCE_ANY, pFppl) //GO(d2i_ASN1_SET, GO(d2i_ASN1_SET_ANY, pFppl) GO(d2i_ASN1_T61STRING, pFppl) @@ -947,7 +953,7 @@ GO(d2i_BASIC_CONSTRAINTS, pFppl) //GO(d2i_CRL_DIST_POINTS, GO(d2i_DHparams, pFppl) //GO(d2i_DHxparams, -//GO(d2i_DIRECTORYSTRING, +GO(d2i_DIRECTORYSTRING, pFppl) GO(d2i_DISPLAYTEXT, pFppl) //GO(d2i_DIST_POINT, //GO(d2i_DIST_POINT_NAME, @@ -1046,7 +1052,7 @@ GO(d2i_PKCS8_PRIV_KEY_INFO_fp, pFpp) //GO(d2i_PKEY_USAGE_PERIOD, //GO(d2i_POLICYINFO, //GO(d2i_POLICYQUALINFO, -GO(d2i_PrivateKey, pFppl) +GO(d2i_PrivateKey, pFippl) GO(d2i_PrivateKey_bio, pFpp) GO(d2i_PrivateKey_fp, pFpp) //GO(d2i_PROXY_CERT_INFO_EXTENSION, @@ -1054,7 +1060,7 @@ GO(d2i_PrivateKey_fp, pFpp) GO(d2i_PUBKEY, pFppl) GO(d2i_PUBKEY_bio, pFpp) GO(d2i_PUBKEY_fp, pFpp) -//GO(d2i_PublicKey, +GO(d2i_PublicKey, pFippl) //GO(d2i_RSA_NET, //GO(d2i_RSA_OAEP_PARAMS, GO(d2i_RSAPrivateKey, pFppl) @@ -1150,7 +1156,8 @@ GO(DES_set_odd_parity, vFp) GO(DES_string_to_2keys, vFppp) GO(DES_string_to_key, vFpp) GO(DES_xcbc_encrypt, vFpplppppi) -//GO(DH_check, +GO(DH_bits, iFp) +GO(DH_check, iFpp) //GO(DH_check_pub_key, //GO(DH_compute_key, //GO(DH_compute_key_padded, @@ -1158,6 +1165,7 @@ GO(DH_free, vFp) //GO(DH_generate_key, //GO(DH_generate_parameters, //GO(DH_generate_parameters_ex, +GO(DH_get0_pqg, vFpppp) //GO(DH_get_1024_160, //GO(DH_get_2048_224, //GO(DH_get_2048_256, @@ -1176,8 +1184,8 @@ GO(DH_new, pFv) //GO(DH_set_method, //GO(DH_size, //GO(DH_up_ref, -//GO(DIRECTORYSTRING_free, -//GO(DIRECTORYSTRING_new, +GO(DIRECTORYSTRING_free, vFp) +GO(DIRECTORYSTRING_new, pFv) GO(DISPLAYTEXT_free, vFp) GO(DISPLAYTEXT_new, pFv) //GO(DIST_POINT_free, @@ -1185,6 +1193,7 @@ GO(DISPLAYTEXT_new, pFv) //GO(DIST_POINT_NAME_new, //GO(DIST_POINT_new, //GO(DIST_POINT_set_dpname, +GO(DSA_bits, iFp) //GO(dsa_builtin_paramgen, //GO(dsa_builtin_paramgen2, //GO(DSA_do_sign, @@ -1478,10 +1487,10 @@ GO(EC_POINT_method_of, pFp) GO(EC_POINT_mul, iFpppppp) GO(EC_POINT_new, pFp) //GO(EC_POINT_oct2point, -//GO(EC_POINT_point2buf, +//GO(EC_POINT_point2buf, //GO(EC_POINT_point2bn, //GO(EC_POINT_point2hex, -//GO(EC_POINT_point2oct, +//GO(EC_POINT_point2oct, GO(EC_POINT_set_affine_coordinates, iFppppp) GO(EC_POINT_set_affine_coordinates_GF2m, iFppppp) GO(EC_POINT_set_affine_coordinates_GFp, iFppppp) @@ -1668,36 +1677,36 @@ GO(ERR_get_error_line_data, LFpppp) //GO(ERR_get_state, //GO(ERR_get_string_table, GO(ERR_lib_error_string, pFu) -//GO(ERR_load_ASN1_strings, -//GO(ERR_load_BIO_strings, -//GO(ERR_load_BN_strings, -//GO(ERR_load_BUF_strings, -//GO(ERR_load_CMS_strings, -//GO(ERR_load_COMP_strings, -//GO(ERR_load_CONF_strings, +GO(ERR_load_ASN1_strings, iFv) +GO(ERR_load_BIO_strings, iFv) +GO(ERR_load_BN_strings, iFv) +GO(ERR_load_BUF_strings, iFv) +GO(ERR_load_CMS_strings, iFv) +GO(ERR_load_COMP_strings, iFv) +GO(ERR_load_CONF_strings, iFv) GO(ERR_load_crypto_strings, vFv) -GO(ERR_load_CRYPTO_strings, vFv) -//GO(ERR_load_DH_strings, -//GO(ERR_load_DSA_strings, +GO(ERR_load_CRYPTO_strings, iFv) +GO(ERR_load_DH_strings, iFv) +GO(ERR_load_DSA_strings, iFv) //GO(ERR_load_DSO_strings, //GO(ERR_load_ECDH_strings, //GO(ERR_load_ECDSA_strings, -//GO(ERR_load_EC_strings, -//GO(ERR_load_ENGINE_strings, -//GO(ERR_load_ERR_strings, -GO(ERR_load_EVP_strings, vFv) -//GO(ERR_load_OBJ_strings, -//GO(ERR_load_OCSP_strings, -//GO(ERR_load_PEM_strings, -//GO(ERR_load_PKCS12_strings, -GO(ERR_load_PKCS7_strings, vFv) -//GO(ERR_load_RAND_strings, -//GO(ERR_load_RSA_strings, +GO(ERR_load_EC_strings, iFv) +GO(ERR_load_ENGINE_strings, iFv) +GO(ERR_load_ERR_strings, iFv) +GO(ERR_load_EVP_strings, iFv) +GO(ERR_load_OBJ_strings, iFv) +GO(ERR_load_OCSP_strings, iFv) +GO(ERR_load_PEM_strings, iFv) +GO(ERR_load_PKCS12_strings, iFv) +GO(ERR_load_PKCS7_strings, iFv) +GO(ERR_load_RAND_strings, iFv) +GO(ERR_load_RSA_strings, iFv) //GO(ERR_load_strings, -//GO(ERR_load_TS_strings, -//GO(ERR_load_UI_strings, -//GO(ERR_load_X509_strings, -//GO(ERR_load_X509V3_strings, +GO(ERR_load_TS_strings, iFv) +GO(ERR_load_UI_strings, iFv) +GO(ERR_load_X509_strings, iFv) +GO(ERR_load_X509V3_strings, iFv) GO(ERR_new, vFv) GO(ERR_peek_error, LFv) GO(ERR_peek_error_line, LFpp) @@ -1730,9 +1739,9 @@ GOM(ERR_vset_error, vFEiipA) //GO(ESS_SIGNING_CERT_dup, //GO(ESS_SIGNING_CERT_free, //GO(ESS_SIGNING_CERT_new, -//GO(EVP_add_alg_module, -//GO(EVP_add_cipher, -//GO(EVP_add_digest, +GO(EVP_add_alg_module, vFv) +GO(EVP_add_cipher, iFp) +GO(EVP_add_digest, iFp) GO(EVP_aes_128_cbc, pFv) GO(EVP_aes_128_cbc_hmac_sha1, pFv) GO(EVP_aes_128_cbc_hmac_sha256, pFv) @@ -1769,52 +1778,52 @@ GO(EVP_aes_256_cfb8, pFv) GO(EVP_aes_256_ctr, pFv) GO(EVP_aes_256_ecb, pFv) GO(EVP_aes_256_gcm, pFv) -//GO(EVP_aes_256_ofb, -//GO(EVP_aes_256_wrap, -//GO(EVP_aes_256_xts, -//GO(EVP_bf_cbc, +GO(EVP_aes_256_ofb, pFv) +GO(EVP_aes_256_wrap, pFv) +GO(EVP_aes_256_xts, pFv) +GO(EVP_bf_cbc, pFv) //GO(EVP_bf_cfb, -//GO(EVP_bf_cfb64, -//GO(EVP_bf_ecb, -//GO(EVP_bf_ofb, -//GO(EVP_BytesToKey, -//GO(EVP_camellia_128_cbc, -//GO(EVP_camellia_128_cfb1, -//GO(EVP_camellia_128_cfb128, -//GO(EVP_camellia_128_cfb8, -//GO(EVP_camellia_128_ecb, -//GO(EVP_camellia_128_ofb, -//GO(EVP_camellia_192_cbc, -//GO(EVP_camellia_192_cfb1, -//GO(EVP_camellia_192_cfb128, -//GO(EVP_camellia_192_cfb8, -//GO(EVP_camellia_192_ecb, -//GO(EVP_camellia_192_ofb, -//GO(EVP_camellia_256_cbc, -//GO(EVP_camellia_256_cfb1, -//GO(EVP_camellia_256_cfb128, -//GO(EVP_camellia_256_cfb8, -//GO(EVP_camellia_256_ecb, -//GO(EVP_camellia_256_ofb, -//GO(EVP_cast5_cbc, +GO(EVP_bf_cfb64, pFv) +GO(EVP_bf_ecb, pFv) +GO(EVP_bf_ofb, pFv) +GO(EVP_BytesToKey, iFppppiipp) +GO(EVP_camellia_128_cbc, pFv) +GO(EVP_camellia_128_cfb1, pFv) +GO(EVP_camellia_128_cfb128, pFv) +GO(EVP_camellia_128_cfb8, pFv) +GO(EVP_camellia_128_ecb, pFv) +GO(EVP_camellia_128_ofb, pFv) +GO(EVP_camellia_192_cbc, pFv) +GO(EVP_camellia_192_cfb1, pFv) +GO(EVP_camellia_192_cfb128, pFv) +GO(EVP_camellia_192_cfb8, pFv) +GO(EVP_camellia_192_ecb, pFv) +GO(EVP_camellia_192_ofb, pFv) +GO(EVP_camellia_256_cbc, pFv) +GO(EVP_camellia_256_cfb1, pFv) +GO(EVP_camellia_256_cfb128, pFv) +GO(EVP_camellia_256_cfb8, pFv) +GO(EVP_camellia_256_ecb, pFv) +GO(EVP_camellia_256_ofb, pFv) +GO(EVP_cast5_cbc, pFv) //GO(EVP_cast5_cfb, -//GO(EVP_cast5_cfb64, -//GO(EVP_cast5_ecb, -//GO(EVP_cast5_ofb, +GO(EVP_cast5_cfb64, pFv) +GO(EVP_cast5_ecb, pFv) +GO(EVP_cast5_ofb, pFv) GO(EVP_chacha20, pFv) GO(EVP_chacha20_poly1305, pFv) -//GO(EVP_Cipher, +GO(EVP_Cipher, iFpppu) GO(EVP_CIPHER_asn1_to_param, iFpp) //GO(EVP_CIPHER_block_size, //GO(EVP_CIPHER_CTX_block_size, -//GO(EVP_CIPHER_CTX_cipher, +GO(EVP_CIPHER_CTX_cipher, pFp) GO(EVP_CIPHER_CTX_cleanup, iFp) -//GO(EVP_CIPHER_CTX_clear_flags, -//GO(EVP_CIPHER_CTX_copy, +GO(EVP_CIPHER_CTX_clear_flags, vFpi) +GO(EVP_CIPHER_CTX_copy, iFpp) GO(EVP_CIPHER_CTX_ctrl, iFpiip) //GO(EVP_CIPHER_CTX_flags, GO(EVP_CIPHER_CTX_free, vFp) -//GO(EVP_CIPHER_CTX_get_app_data, +GO(EVP_CIPHER_CTX_get_app_data, pFp) GO(EVP_CIPHER_CTX_get_original_iv, iFppL) GO(EVP_CIPHER_CTX_get_updated_iv, iFppL) GO(EVP_CIPHER_CTX_init, vFp) @@ -1822,33 +1831,33 @@ GO(EVP_CIPHER_CTX_init, vFp) //GO(EVP_CIPHER_CTX_key_length, GO(EVP_CIPHER_CTX_new, pFv) //GO(EVP_CIPHER_CTX_nid, -//GO(EVP_CIPHER_CTX_rand_key, +GO(EVP_CIPHER_CTX_rand_key, iFpp) GO(EVP_CIPHER_CTX_reset, iFp) -//GO(EVP_CIPHER_CTX_set_app_data, -//GO(EVP_CIPHER_CTX_set_flags, +GO(EVP_CIPHER_CTX_set_app_data, vFpp) +GO(EVP_CIPHER_CTX_set_flags, vFpi) GO(EVP_CIPHER_CTX_set_key_length, iFpi) GO(EVP_CIPHER_CTX_set_padding, iFpi) -//GO(EVP_CIPHER_CTX_test_flags, -//GO(EVP_CIPHER_do_all, -//GO(EVP_CIPHER_do_all_sorted, +GO(EVP_CIPHER_CTX_test_flags, iFpi) +//GOM(EVP_CIPHER_do_all, vFEpp) +//GOM(EVP_CIPHER_do_all_sorted, vFEpp) GO(EVP_CipherFinal, iFppp) GO(EVP_CipherFinal_ex, iFppp) //GO(EVP_CIPHER_flags, -//GO(EVP_CIPHER_get_asn1_iv, +GO(EVP_CIPHER_get_asn1_iv, iFpp) GO(EVP_CipherInit, iFppppi) GO(EVP_CipherInit_ex, iFpppppi) //GO(EVP_CIPHER_iv_length, //GO(EVP_CIPHER_key_length, //GO(EVP_CIPHER_nid, GO(EVP_CIPHER_param_to_asn1, iFpp) -//GO(EVP_CIPHER_set_asn1_iv, +GO(EVP_CIPHER_set_asn1_iv, iFpp) GO(EVP_CIPHER_type, iFp) GO(EVP_CipherUpdate, iFppppi) GO(EVP_cleanup, vFv) GO(EVP_DecodeBlock, iFppi) -//GO(EVP_DecodeFinal, -//GO(EVP_DecodeInit, -//GO(EVP_DecodeUpdate, +GO(EVP_DecodeFinal, iFppp) +GO(EVP_DecodeInit, vFp) +GO(EVP_DecodeUpdate, iFppppi) GO(EVP_DecryptFinal, iFppp) GO(EVP_DecryptFinal_ex, iFppp) GO(EVP_DecryptInit, iFpppp) @@ -1876,9 +1885,9 @@ GO(EVP_des_ede_cfb, pFv) GO(EVP_des_ede_cfb64, pFv) GO(EVP_des_ede_ecb, pFv) GO(EVP_des_ede_ofb, pFv) -//GO(EVP_des_ofb, -//GO(EVP_desx_cbc, -//GO(EVP_Digest, +GO(EVP_des_ofb, pFv) +GO(EVP_desx_cbc, pFv) +GO(EVP_Digest, iFpLpppp) GO(EVP_DigestFinal, iFppp) GO(EVP_DigestFinalXOF, iFppL) GO(EVP_DigestFinal_ex, iFppp) @@ -1889,16 +1898,16 @@ GO(EVP_DigestSignFinal, iFppp) GO(EVP_DigestSignInit, iFppppp) GO(EVP_DigestUpdate, iFppL) GO(EVP_DigestVerify, iFppLpL) -//GO(EVP_DigestVerifyFinal, +GO(EVP_DigestVerifyFinal, iFppL) GO(EVP_DigestVerifyInit, iFppppp) //GO(EVP_dss, //GO(EVP_dss1, //GO(EVP_ecdsa, -//GO(EVP_enc_null, +GO(EVP_enc_null, pFv) GO(EVP_EncodeBlock, iFppi) -//GO(EVP_EncodeFinal, -//GO(EVP_EncodeInit, -//GO(EVP_EncodeUpdate, +GO(EVP_EncodeFinal, vFppp) +GO(EVP_EncodeInit, vFp) +GO(EVP_EncodeUpdate, iFppppi) GO(EVP_EncryptFinal, iFppp) GO(EVP_EncryptFinal_ex, iFppp) GO(EVP_EncryptInit, iFpppp) @@ -1906,7 +1915,7 @@ GO(EVP_EncryptInit_ex, iFppppp) GO(EVP_EncryptUpdate, iFppppi) GO(EVP_get_cipherbyname, pFp) GO(EVP_get_digestbyname, pFp) -//GO(EVP_get_pw_prompt, +GO(EVP_get_pw_prompt, pFv) //GO(EVP_idea_cbc, //GO(EVP_idea_cfb, //GO(EVP_idea_cfb64, @@ -1928,7 +1937,7 @@ GO(EVP_MD_CTX_clear_flags, vFpi) GO(EVP_MD_CTX_copy, iFpp) GO(EVP_MD_CTX_copy_ex, iFpp) GO(EVP_MD_CTX_create, pFv) -GO(EVP_MD_CTX_ctrl, vFpiip) +GO(EVP_MD_CTX_ctrl, iFpiip) GO(EVP_MD_CTX_destroy, vFp) GO(EVP_MD_CTX_free, vFp) GO(EVP_MD_CTX_get0_md, pFp) @@ -1937,10 +1946,10 @@ GO(EVP_MD_CTX_md, pFp) GO(EVP_MD_CTX_new, pFv) GO(EVP_MD_CTX_reset, iFp) GO(EVP_MD_CTX_set_flags, vFpi) -//GO(EVP_MD_CTX_test_flags, -//GO(EVP_MD_do_all, +GO(EVP_MD_CTX_test_flags, iFpi) +//GOM(EVP_MD_do_all, vFEpp) GOM(EVP_MD_do_all_provided, vFEppp) -//GO(EVP_MD_do_all_sorted, +//GOM(EVP_MD_do_all_sorted, vFEpp) GO(EVP_MD_fetch, pFppp) //GO(EVP_MD_flags, GO(EVP_MD_free, vFp) @@ -1952,13 +1961,13 @@ GO(EVP_md_null, pFv) GO(EVP_MD_pkey_type, iFp) GO(EVP_MD_type, iFp) GO(EVP_MD_up_ref, iFp) -//GO(EVP_OpenFinal, -//GO(EVP_OpenInit, -//GO(EVP_PBE_alg_add, -//GO(EVP_PBE_alg_add_type, -//GO(EVP_PBE_CipherInit, -//GO(EVP_PBE_cleanup, -//GO(EVP_PBE_find, +GO(EVP_OpenFinal, iFppp) +GO(EVP_OpenInit, iFpppipp) +//GOM(EVP_PBE_alg_add, iFEippp) +//GOM(EVP_PBE_alg_add_type, iFEiiiip) +GO(EVP_PBE_CipherInit, iFppippi) +GO(EVP_PBE_cleanup, vFv) +//GOM(EVP_PBE_find, iFEiippp) GO(EVP_PBE_scrypt, iFpLpLUUUUpL) GO(EVP_PKCS82PKEY, pFp) GO(EVP_PKCS82PKEY_ex, pFppp) @@ -1968,22 +1977,22 @@ GO(EVP_PKEY2PKCS8, pFp) //GO(EVP_PKEY_add1_attr_by_NID, //GO(EVP_PKEY_add1_attr_by_OBJ, //GO(EVP_PKEY_add1_attr_by_txt, -//GO(EVP_PKEY_asn1_add0, -//GO(EVP_PKEY_asn1_add_alias, -//GO(EVP_PKEY_asn1_copy, -//GO(EVP_PKEY_asn1_find, -//GO(EVP_PKEY_asn1_find_str, -//GO(EVP_PKEY_asn1_free, -//GO(EVP_PKEY_asn1_get0, -//GO(EVP_PKEY_asn1_get0_info, -//GO(EVP_PKEY_asn1_get_count, -//GO(EVP_PKEY_asn1_new, -//GO(EVP_PKEY_asn1_set_ctrl, -//GO(EVP_PKEY_asn1_set_free, -//GO(EVP_PKEY_asn1_set_item, -//GO(EVP_PKEY_asn1_set_param, -//GO(EVP_PKEY_asn1_set_private, -//GO(EVP_PKEY_asn1_set_public, +GO(EVP_PKEY_asn1_add0, iFp) +GO(EVP_PKEY_asn1_add_alias, iFii) +GO(EVP_PKEY_asn1_copy, vFpp) +GO(EVP_PKEY_asn1_find, pFpi) +GO(EVP_PKEY_asn1_find_str, pFppi) +GO(EVP_PKEY_asn1_free, vFp) +GO(EVP_PKEY_asn1_get0, pFi) +GO(EVP_PKEY_asn1_get0_info, iFpppppp) +GO(EVP_PKEY_asn1_get_count, iFv) +GO(EVP_PKEY_asn1_new, pFiipp) +//GOM(EVP_PKEY_asn1_set_ctrl, vFEpp) +//GOM(EVP_PKEY_asn1_set_free, vFEpp) +//GOM(EVP_PKEY_asn1_set_item, vFEppp) +//GOM(EVP_PKEY_asn1_set_param, vFEppppppp) +//GOM(EVP_PKEY_asn1_set_private, vFEpppp) +//GOM(EVP_PKEY_asn1_set_public, vFEppppppp) GO(EVP_PKEY_assign, iFpip) //GO(EVP_PKEY_base_id, //GO(EVP_PKEY_bits, @@ -1997,16 +2006,16 @@ GO(EVP_PKEY_CTX_free, vFp) GO(EVP_PKEY_CTX_get0_peerkey, pFp) GO(EVP_PKEY_CTX_get0_pkey, pFp) GO(EVP_PKEY_CTX_get_app_data, pFp) -//GO(EVP_PKEY_CTX_get_cb, -//GO(EVP_PKEY_CTX_get_data, +//GOM(EVP_PKEY_CTX_get_cb, pFEp) +GO(EVP_PKEY_CTX_get_data, pFp) GO(EVP_PKEY_CTX_get_keygen_info, iFpi) -//GO(EVP_PKEY_CTX_get_operation, +GO(EVP_PKEY_CTX_get_operation, iFp) GO(EVP_PKEY_CTX_new, pFpp) GO(EVP_PKEY_CTX_new_id, pFip) -//GO(EVP_PKEY_CTX_set0_keygen_info, +GO(EVP_PKEY_CTX_set0_keygen_info, vFppi) GO(EVP_PKEY_CTX_set_app_data, vFpp) -//GO(EVP_PKEY_CTX_set_cb, -//GO(EVP_PKEY_CTX_set_data, +//GOM(EVP_PKEY_CTX_set_cb, vFEpp) +GO(EVP_PKEY_CTX_set_data, vFpp) GO(EVP_PKEY_CTX_set_rsa_keygen_bits, iFpi) GO(EVP_PKEY_CTX_set_rsa_oaep_md, iFpp) GO(EVP_PKEY_CTX_set_rsa_padding, iFpi) @@ -2015,19 +2024,19 @@ GO(EVP_PKEY_CTX_set_signature_md, iFpp) GO(EVP_PKEY_check, iFp) GO(EVP_PKEY_decrypt, iFppppL) GO(EVP_PKEY_decrypt_init, iFp) -//GO(EVP_PKEY_decrypt_old, +GO(EVP_PKEY_decrypt_old, iFppip) //GO(EVP_PKEY_delete_attr, GO(EVP_PKEY_derive, iFppp) GO(EVP_PKEY_derive_init, iFp) -GO(EVP_PKEY_derive_set_peer, iFppi) +GO(EVP_PKEY_derive_set_peer, iFpp) GO(EVP_PKEY_encrypt, iFppppL) GO(EVP_PKEY_encrypt_init, iFp) -//GO(EVP_PKEY_encrypt_old, +GO(EVP_PKEY_encrypt_old, iFppip) GO(EVP_PKEY_free, vFp) -//GO(EVP_PKEY_get0, -//GO(EVP_PKEY_get0_asn1, +GO(EVP_PKEY_get0, pFp) +GO(EVP_PKEY_get0_asn1, pFp) GO(EVP_PKEY_get0_RSA, pFp) -//GO(EVP_PKEY_get1_DH, +GO(EVP_PKEY_get1_DH, pFp) GO(EVP_PKEY_get1_DSA, pFp) GO(EVP_PKEY_get1_EC_KEY, pFp) GO(EVP_PKEY_get1_RSA, pFp) @@ -2036,61 +2045,63 @@ GO(EVP_PKEY_get1_RSA, pFp) //GO(EVP_PKEY_get_attr_by_OBJ, //GO(EVP_PKEY_get_attr_count, GO(EVP_PKEY_get_base_id, iFp) -//GO(EVP_PKEY_get_default_digest_nid, +GO(EVP_PKEY_get_bits, iFp) +GO(EVP_PKEY_get_default_digest_nid, iFpp) GO(EVP_PKEY_get_raw_private_key, iFppp) GO(EVP_PKEY_get_raw_public_key, iFppp) -GO(EVP_PKEY_new_raw_private_key, pFppppL) +GO(EVP_PKEY_new_raw_private_key, pFippL) GO(EVP_PKEY_new_raw_public_key, pFippL) GO(EVP_PKEY_get_size, iFp) //GO(EVP_PKEY_id, GO(EVP_PKEY_keygen, iFpp) GO(EVP_PKEY_keygen_init, iFp) -//GO(EVP_PKEY_meth_add0, -//GO(EVP_PKEY_meth_copy, -//GO(EVP_PKEY_meth_find, -//GO(EVP_PKEY_meth_free, -//GO(EVP_PKEY_meth_get0_info, -//GO(EVP_PKEY_meth_new, -//GO(EVP_PKEY_meth_set_cleanup, -//GO(EVP_PKEY_meth_set_copy, -//GO(EVP_PKEY_meth_set_ctrl, -//GO(EVP_PKEY_meth_set_decrypt, -//GO(EVP_PKEY_meth_set_derive, -//GO(EVP_PKEY_meth_set_encrypt, -//GO(EVP_PKEY_meth_set_init, -//GO(EVP_PKEY_meth_set_keygen, -//GO(EVP_PKEY_meth_set_paramgen, -//GO(EVP_PKEY_meth_set_sign, -//GO(EVP_PKEY_meth_set_signctx, -//GO(EVP_PKEY_meth_set_verify, -//GO(EVP_PKEY_meth_set_verifyctx, -//GO(EVP_PKEY_meth_set_verify_recover, +GO(EVP_PKEY_meth_add0, iFp) +GO(EVP_PKEY_meth_copy, vFpp) +GO(EVP_PKEY_meth_find, pFi) +GO(EVP_PKEY_meth_free, vFp) +GO(EVP_PKEY_meth_get0_info, vFppp) +GO(EVP_PKEY_meth_new, pFii) +//GOM(EVP_PKEY_meth_set_cleanup, vFEpp) +//GOM(EVP_PKEY_meth_set_copy, vFEpp) +//GOM(EVP_PKEY_meth_set_ctrl, vFEppp) +//GOM(EVP_PKEY_meth_set_decrypt, vFEppp) +//GOM(EVP_PKEY_meth_set_derive, vFEppp) +//GOM(EVP_PKEY_meth_set_encrypt, vFEppp) +//GOM(EVP_PKEY_meth_set_init, vFEpp) +//GOM(EVP_PKEY_meth_set_keygen, vFEppp) +//GOM(EVP_PKEY_meth_set_paramgen, vFEppp) +//GOM(EVP_PKEY_meth_set_sign, vFEppp) +//GOM(EVP_PKEY_meth_set_signctx, vFEppp) +//GOM(EVP_PKEY_meth_set_verify, vFEppp) +//GOM(EVP_PKEY_meth_set_verifyctx, vFEppp) +//GOM(EVP_PKEY_meth_set_verify_recover, vFEppp) GO(EVP_PKEY_missing_parameters, iFp) GO(EVP_PKEY_new, pFv) GO(EVP_PKEY_new_mac_key, pFippi) +GO(EVP_PKEY_param_check, iFp) GO(EVP_PKEY_paramgen, iFpp) GO(EVP_PKEY_paramgen_init, iFp) -//GO(EVP_PKEY_print_params, -//GO(EVP_PKEY_print_private, -//GO(EVP_PKEY_print_public, +GO(EVP_PKEY_print_params, iFppip) +GO(EVP_PKEY_print_private, iFppip) +GO(EVP_PKEY_print_public, iFppip) GO(EVP_PKEY_public_check, iFp) -//GO(EVP_PKEY_save_parameters, -//GO(EVP_PKEY_set1_DH, +GO(EVP_PKEY_save_parameters, iFpi) +GO(EVP_PKEY_set1_DH, iFpp) GO(EVP_PKEY_set1_DSA, iFpp) GO(EVP_PKEY_set1_EC_KEY, iFpp) GO(EVP_PKEY_set1_RSA, iFpp) //GO(evp_pkey_set_cb_translate, -//GO(EVP_PKEY_set_type, -//GO(EVP_PKEY_set_type_str, -GO(EVP_PKEY_sign, iFppppp) +GO(EVP_PKEY_set_type, iFpi) +GO(EVP_PKEY_set_type_str, iFppi) +GO(EVP_PKEY_sign, iFppppL) GO(EVP_PKEY_sign_init, iFp) //GO(EVP_PKEY_size, GO(EVP_PKEY_type, iFi) GO(EVP_PKEY_up_ref, iFp) GO(EVP_PKEY_verify, iFppLpL) GO(EVP_PKEY_verify_init, iFp) -//GO(EVP_PKEY_verify_recover, -//GO(EVP_PKEY_verify_recover_init, +GO(EVP_PKEY_verify_recover, iFppppL) +GO(EVP_PKEY_verify_recover_init, iFp) GO(EVP_rc2_40_cbc, pFv) GO(EVP_rc2_64_cbc, pFv) GO(EVP_rc2_cbc, pFv) @@ -2098,32 +2109,33 @@ GO(EVP_rc2_cfb, pFv) GO(EVP_rc2_cfb64, pFv) GO(EVP_rc2_ecb, pFv) GO(EVP_rc2_ofb, pFv) -//GO(EVP_rc4, -//GO(EVP_rc4_40, -//GO(EVP_rc4_hmac_md5, -//GO(EVP_read_pw_string, -//GO(EVP_read_pw_string_min, -GO(EVP_ripemd160, pFp) -//GO(EVP_SealFinal, -//GO(EVP_SealInit, -//GO(EVP_seed_cbc, -//GO(EVP_seed_cfb128, -//GO(EVP_seed_ecb, -//GO(EVP_seed_ofb, -//GO(EVP_set_pw_prompt, +GO(EVP_rc4, pFv) +GO(EVP_rc4_40, pFv) +GO(EVP_rc4_hmac_md5, pFv) +GO(EVP_read_pw_string, iFpipi) +GO(EVP_read_pw_string_min, iFpiipi) +GO(EVP_ripemd160, pFv) +GO(EVP_SealFinal, iFppp) +GO(EVP_SealInit, iFppppppi) +GO(EVP_seed_cbc, pFv) +GO(EVP_seed_cfb128, pFv) +GO(EVP_seed_ecb, pFv) +GO(EVP_seed_ofb, pFv) +GO(EVP_set_pw_prompt, vFp) GO(EVP_sha, pFV) GO(EVP_sha1, pFv) GO(EVP_sha224, pFv) GO(EVP_sha256, pFv) GO(EVP_sha384, pFv) GO(EVP_sha512, pFv) -//GO(EVP_SignFinal, +GO(EVP_SignFinal, iFpppp) GO(EVP_VerifyFinal, iFppup) -GO(EVP_VerifyInit, iFpp) // 1.1.0+ -GO(EVP_VerifyInit_ex, iFppp) // 1.1.0+ -GO(EVP_VerifyUpdate, iFppu) // 1.1.0+ -//GO(EVP_whirlpool, +GO(EVP_VerifyInit, iFpp) +GO(EVP_VerifyInit_ex, iFppp) +GO(EVP_VerifyUpdate, iFppu) +GO(EVP_whirlpool, pFv) GO(EXTENDED_KEY_USAGE_free, vFp) +GO(EXTENDED_KEY_USAGE_it, pFv) //GO(EXTENDED_KEY_USAGE_new, //GO(fcrypt_body, //GO(_fini, @@ -2147,6 +2159,7 @@ GO(GENERAL_NAME_print, iFpp) //GO(GENERAL_NAME_set0_othername, //GO(GENERAL_NAME_set0_value, GO(GENERAL_NAMES_free, vFp) +GO(GENERAL_NAMES_it, pFv) GO(GENERAL_NAMES_new, pFv) GO(GENERAL_SUBTREE_free, vFp) GO(GENERAL_SUBTREE_new, pFv) @@ -2195,9 +2208,9 @@ GO(i2d_ASN1_INTEGER, iFpp) GO(i2d_ASN1_NULL, iFpp) GO(i2d_ASN1_OBJECT, iFpp) GO(i2d_ASN1_OCTET_STRING, iFpp) -//GO(i2d_ASN1_PRINTABLE, +GO(i2d_ASN1_PRINTABLE, iFpp) GO(i2d_ASN1_PRINTABLESTRING, iFpp) -//GO(i2d_ASN1_SEQUENCE_ANY, +GO(i2d_ASN1_SEQUENCE_ANY, iFpp) //GO(i2d_ASN1_SET, GO(i2d_ASN1_SET_ANY, iFpp) GO(i2d_ASN1_T61STRING, iFpp) @@ -2218,7 +2231,7 @@ GO(i2d_CMS_bio, iFpp) //GO(i2d_CRL_DIST_POINTS, GO(i2d_DHparams, iFpp) //GO(i2d_DHxparams, -//GO(i2d_DIRECTORYSTRING, +GO(i2d_DIRECTORYSTRING, iFpp) GO(i2d_DISPLAYTEXT, iFpp) //GO(i2d_DIST_POINT, //GO(i2d_DIST_POINT_NAME, @@ -2331,7 +2344,7 @@ GO(i2d_PROXY_POLICY, iFpp) GO(i2d_PUBKEY, iFpp) GO(i2d_PUBKEY_bio, iFpp) GO(i2d_PUBKEY_fp, iFpp) -//GO(i2d_PublicKey, +GO(i2d_PublicKey, iFpp) //GO(i2d_re_X509_tbs, GO(i2d_RSA_NET, iFpp) GO(i2d_RSA_OAEP_PARAMS, iFpp) @@ -2395,9 +2408,9 @@ GO(i2d_X509_VAL, iFpp) //GO(i2s_ASN1_INTEGER, //GO(i2s_ASN1_OCTET_STRING, GO(i2t_ASN1_OBJECT, iFpip) -//GO(i2v_ASN1_BIT_STRING, -//GO(i2v_GENERAL_NAME, -//GO(i2v_GENERAL_NAMES, +GO(i2v_ASN1_BIT_STRING, pFppp) +GO(i2v_GENERAL_NAME, pFppp) +GO(i2v_GENERAL_NAMES, pFppp) //GO(idea_cbc_encrypt, //GO(idea_cfb64_encrypt, //GO(idea_ecb_encrypt, @@ -2409,6 +2422,7 @@ GO(i2t_ASN1_OBJECT, iFpip) //GO(_init, //GO(int_rsa_verify, //GO(ISSUING_DIST_POINT_free, +GO(ISSUING_DIST_POINT_it, pFv) //GO(ISSUING_DIST_POINT_new, //GO(KRB5_APREQBODY_free, //GO(KRB5_APREQBODY_new, @@ -2504,33 +2518,33 @@ GO(NETSCAPE_X509_new, pFv) //GO(NOTICEREF_free, //GO(NOTICEREF_new, //GO(o2i_ECPublicKey, -//GO(OBJ_add_object, -//GO(OBJ_add_sigid, -//GO(OBJ_bsearch_, -//GO(OBJ_bsearch_ex_, +GO(OBJ_add_object, iFp) +GO(OBJ_add_sigid, iFiii) +//GOM(OBJ_bsearch_, pFEppiip) +//GOM(OBJ_bsearch_ex_, pFEppiipi) GO(OBJ_cleanup, vFv) GO(OBJ_cmp, iFpp) GO(OBJ_create, iFppp) -//GO(OBJ_create_objects, +GO(OBJ_create_objects, iFp) GO(OBJ_dup, pFp) -//GO(OBJ_find_sigid_algs, -//GO(OBJ_find_sigid_by_algs, +GO(OBJ_find_sigid_algs, iFipp) +GO(OBJ_find_sigid_by_algs, iFpii) GO(OBJ_ln2nid, iFp) -//GO(OBJ_NAME_add, -//GO(OBJ_NAME_cleanup, -//GO(OBJ_NAME_do_all, -//GO(OBJ_NAME_do_all_sorted, -//GO(OBJ_NAME_get, -//GO(OBJ_NAME_init, -//GO(OBJ_NAME_new_index, -//GO(OBJ_NAME_remove, -//GO(OBJ_new_nid, +GO(OBJ_NAME_add, iFpip) +GO(OBJ_NAME_cleanup, vFi) +//GOM(OBJ_NAME_do_all, vFEipp) +//GOM(OBJ_NAME_do_all_sorted, vFEipp) +GO(OBJ_NAME_get, pFpi) +GO(OBJ_NAME_init, iFv) +//GOM(OBJ_NAME_new_index, iFEppp) +GO(OBJ_NAME_remove, iFpi) +GO(OBJ_new_nid, iFi) GO(OBJ_nid2ln, pFi) GO(OBJ_nid2obj, pFi) GO(OBJ_nid2sn, pFi) GO(OBJ_obj2nid, iFp) GO(OBJ_obj2txt, iFpipi) -//GO(OBJ_sigid_free, +GO(OBJ_sigid_free, vFv) GO(OBJ_sn2nid, iFp) GO(OBJ_txt2nid, iFp) GO(OBJ_txt2obj, pFpi) @@ -2538,7 +2552,7 @@ GO(OBJ_txt2obj, pFpi) //GO(OCSP_archive_cutoff_new, //GO(OCSP_basic_add1_cert, //GO(OCSP_basic_add1_nonce, -//GO(OCSP_basic_add1_status, +GO(OCSP_basic_add1_status, pFppiippp) //GO(OCSP_BASICRESP_add1_ext_i2d, //GO(OCSP_BASICRESP_add_ext, //GO(OCSP_BASICRESP_delete_ext, @@ -2549,8 +2563,8 @@ GO(OCSP_BASICRESP_free, vFp) //GO(OCSP_BASICRESP_get_ext_by_NID, //GO(OCSP_BASICRESP_get_ext_by_OBJ, //GO(OCSP_BASICRESP_get_ext_count, -//GO(OCSP_BASICRESP_new, -//GO(OCSP_basic_sign, +GO(OCSP_BASICRESP_new, pFv) +GO(OCSP_basic_sign, iFpppppL) GO(OCSP_basic_verify, iFpppL) //GO(OCSP_CERTID_dup, GO(OCSP_CERTID_free, vFp) @@ -2561,14 +2575,14 @@ GO(OCSP_CERTID_free, vFp) //GO(OCSP_cert_status_str, GO(OCSP_cert_to_id, pFppp) GO(OCSP_check_nonce, iFpp) -//GO(OCSP_check_validity, +GO(OCSP_check_validity, iFppll) //GO(OCSP_copy_nonce, //GO(OCSP_CRLID_free, //GO(OCSP_crlID_new, //GO(OCSP_CRLID_new, //GO(OCSP_crl_reason_str, -//GO(OCSP_id_cmp, -//GO(OCSP_id_get0_info, +GO(OCSP_id_cmp, iFpp) +GO(OCSP_id_get0_info, iFppppp) //GO(OCSP_id_issuer_cmp, //GO(OCSP_ONEREQ_add1_ext_i2d, //GO(OCSP_ONEREQ_add_ext, @@ -2617,20 +2631,21 @@ GO(OCSP_REQUEST_new, pFv) //GO(OCSP_request_verify, //GO(OCSP_RESPBYTES_free, //GO(OCSP_RESPBYTES_new, -//GO(OCSP_resp_count, +GO(OCSP_resp_count, iFp) +GO(OCSP_resp_get0_certs, pFp) //GO(OCSP_RESPDATA_free, //GO(OCSP_RESPDATA_new, //GO(OCSP_resp_find, GO(OCSP_resp_find_status, iFppppppp) -//GO(OCSP_resp_get0, +GO(OCSP_resp_get0, pFpi) //GO(OCSP_RESPID_free, //GO(OCSP_RESPID_new, -//GO(OCSP_response_create, +GO(OCSP_response_create, pFip) GO(OCSP_RESPONSE_free, vFp) GO(OCSP_response_get1_basic, pFp) GO(OCSP_RESPONSE_new, pFv) //GO(OCSP_RESPONSE_print, -//GO(OCSP_response_status, +GO(OCSP_response_status, iFp) //GO(OCSP_response_status_str, //GO(OCSP_REVOKEDINFO_free, //GO(OCSP_REVOKEDINFO_new, @@ -2642,11 +2657,12 @@ GO(OCSP_RESPONSE_new, pFv) //GO(OCSP_set_max_response_length, //GO(OCSP_SIGNATURE_free, //GO(OCSP_SIGNATURE_new, -//GO(OCSP_single_get0_status, +GO(OCSP_single_get0_status, iFppppp) //GO(OCSP_SINGLERESP_add1_ext_i2d, //GO(OCSP_SINGLERESP_add_ext, //GO(OCSP_SINGLERESP_delete_ext, //GO(OCSP_SINGLERESP_free, +GO(OCSP_SINGLERESP_get0_id, pFp) //GO(OCSP_SINGLERESP_get1_ext_d2i, //GO(OCSP_SINGLERESP_get_ext, //GO(OCSP_SINGLERESP_get_ext_by_critical, @@ -2671,25 +2687,25 @@ GO(OPENSSL_gmtime, pFpp) GO(OPENSSL_gmtime_adj, iFpil) GO(OPENSSL_gmtime_diff, iFpppp) //GO(OPENSSL_ia32cap_loc, -//GO(OPENSSL_init, -GO(OPENSSL_init_crypto, iFLp) +GO(OPENSSL_init, vFv) +GO(OPENSSL_init_crypto, iFUp) //GO(OPENSSL_instrument_bus, //GO(OPENSSL_instrument_bus2, -//GO(OPENSSL_isservice, -//GO(OPENSSL_issetugid, +GO(OPENSSL_isservice, iFv) +GO(OPENSSL_issetugid, iFv) //GO(OPENSSL_load_builtin_modules, //GO(OPENSSL_memcmp, GO(OPENSSL_no_config, vFv) //GO(OPENSSL_rdtsc, GO(OPENSSL_sk_find, iFpp) -GO(OPENSSL_sk_free, vFp) //1.1+ +GO(OPENSSL_sk_free, vFp) GOM(OPENSSL_sk_new, pFEp) -GO(OPENSSL_sk_new_null, pFv) //1.1+ -GO(OPENSSL_sk_num, iFp) //1.1+ -GO(OPENSSL_sk_pop, pFp) //1.1+ -GOM(OPENSSL_sk_pop_free, pFEpp) //1.1+ -GO(OPENSSL_sk_push, iFpp) //1.1+ -GO(OPENSSL_sk_value, pFpi) //1.1+ +GO(OPENSSL_sk_new_null, pFv) +GO(OPENSSL_sk_num, iFp) +GO(OPENSSL_sk_pop, pFp) +GOM(OPENSSL_sk_pop_free, vFEpp) +GO(OPENSSL_sk_push, iFpp) +GO(OPENSSL_sk_value, pFpi) //GO(OPENSSL_showfatal, //GO(OPENSSL_stderr, GO(OPENSSL_strcasecmp, iFpp) @@ -2760,7 +2776,7 @@ GO(OSSL_PROVIDER_try_load, pFppi) //GO(PEM_read, //GO(PEM_read_bio, //GO(PEM_read_bio_CMS, -//GO(PEM_read_bio_DHparams, +GOM(PEM_read_bio_DHparams, pFEpppp) //GO(PEM_read_bio_DSAparams, GOM(PEM_read_bio_DSAPrivateKey, pFEpppp) GOM(PEM_read_bio_DSA_PUBKEY, pFEpppp) @@ -2772,8 +2788,8 @@ GOM(PEM_read_bio_EC_PUBKEY, pFEpppp) GOM(PEM_read_bio_PKCS7, pFEpppp) //GO(PEM_read_bio_PKCS8, //GO(PEM_read_bio_PKCS8_PRIV_KEY_INFO, -//GO(PEM_read_bio_PrivateKey, -//GO(PEM_read_bio_PUBKEY, +GOM(PEM_read_bio_PrivateKey, pFEpppp) +GOM(PEM_read_bio_PUBKEY, pFEpppp) GOM(PEM_read_bio_RSAPrivateKey, pFEpppp) GOM(PEM_read_bio_RSA_PUBKEY, pFEpppp) //GO(PEM_read_bio_RSAPublicKey, @@ -2831,8 +2847,9 @@ GO(PEM_write_bio_EC_PUBKEY, iFpp) //GO(PEM_write_bio_PKCS8PrivateKey, //GO(PEM_write_bio_PKCS8PrivateKey_nid, //GO(PEM_write_bio_PKCS8_PRIV_KEY_INFO, -//GO(PEM_write_bio_PrivateKey, -//GO(PEM_write_bio_PUBKEY, +GOM(PEM_write_bio_PrivateKey, iFEppppipp) +GOM(PEM_write_bio_PrivateKey_traditional, iFEppppipp) +GO(PEM_write_bio_PUBKEY, iFpp) GOM(PEM_write_bio_RSAPrivateKey, iFEppppipp) GO(PEM_write_bio_RSA_PUBKEY, iFpp) //GO(PEM_write_bio_RSAPublicKey, @@ -2923,14 +2940,14 @@ GO(PKCS12_PBE_keyivgen, iFppipppi) //GO(PKCS1_MGF1, //GO(PKCS5_pbe2_set, //GO(PKCS5_pbe2_set_iv, -//GO(PKCS5_PBE_add, -//GO(PKCS5_PBE_keyivgen, +GO(PKCS5_PBE_add, vFv) +GO(PKCS5_PBE_keyivgen, iFppipppi) //GO(PKCS5_pbe_set, //GO(PKCS5_pbe_set0_algor, GO(PKCS5_PBKDF2_HMAC, iFpipiipip) GO(PKCS5_PBKDF2_HMAC_SHA1, iFpipiiip) //GO(PKCS5_pbkdf2_set, -//GO(PKCS5_v2_PBE_keyivgen, +GO(PKCS5_v2_PBE_keyivgen, iFppipppi) //GO(PKCS5_v2_PBKDF2_keyivgen, //GO(PKCS7_add0_attrib_signing_time, //GO(PKCS7_add1_attrib_digest, @@ -3022,6 +3039,7 @@ GO(PKCS8_PRIV_KEY_INFO_new, pFv) //GO(policy_data_free, //GO(policy_data_new, //GO(POLICYINFO_free, +GO(POLICYINFO_it, pFv) //GO(POLICYINFO_new, //GO(POLICY_MAPPING_free, //GO(POLICY_MAPPING_new, @@ -3081,6 +3099,7 @@ GO(RAND_write_file, iFp) //GO(RIPEMD160_Init, //GO(RIPEMD160_Transform, //GO(RIPEMD160_Update, +GO(RSA_bits, iFp) //GO(RSA_blinding_off, //GO(RSA_blinding_on, GO(RSA_check_key, iFp) @@ -3585,7 +3604,9 @@ GO(X509_get_serialNumber, pFp) GO(X509_get_subject_name, pFp) GO(X509_get_version, lFp) GO(X509_get_X509_PUBKEY, pFp) -//GO(X509_gmtime_adj, +GO(X509_getm_notAfter, pFp) +GO(X509_getm_notBefore, pFp) +GO(X509_gmtime_adj, pFpl) //GO(X509_http_nbio, GO(X509_INFO_free, vFp) GO(X509_INFO_new, pFv) @@ -3777,7 +3798,7 @@ GO(X509_STORE_CTX_get_chain, pFp) GO(X509_STORE_CTX_get_current_cert, pFp) GO(X509_STORE_CTX_get_error, iFp) GO(X509_STORE_CTX_get_error_depth, iFp) -//GO(X509_STORE_CTX_get_ex_data, +GO(X509_STORE_CTX_get_ex_data, pFpi) //GO(X509_STORE_CTX_get_ex_new_index, //GO(X509_STORE_CTX_get_explicit_policy, GO(X509_STORE_CTX_init, iFpppp) @@ -3805,6 +3826,7 @@ GO(X509_STORE_get0_objects, pFp) //GO(X509_STORE_get1_certs, //GO(X509_STORE_get1_crls, //GO(X509_STORE_get_by_subject, +GO(X509_STORE_get_ex_data, pFpi) GO(X509_STORE_load_file, iFpp) GO(X509_STORE_load_path, iFpp) GO(X509_STORE_load_store, iFpp) @@ -3812,12 +3834,13 @@ GO(X509_STORE_load_store, iFpp) GO(X509_STORE_new, pFv) //GO(X509_STORE_set1_param, //GO(X509_STORE_set_default_paths, +GO(X509_STORE_set_ex_data, iFpip) GO(X509_STORE_set_depth, iFpi) GO(X509_STORE_set_flags, iFpL) //GO(X509_STORE_set_lookup_crls_cb, GO(X509_STORE_set_purpose, iFpi) GO(X509_STORE_set_trust, iFpi) -//GO(X509_STORE_set_verify_cb, +GOM(X509_STORE_set_verify_cb, vFEpp) //GO(X509_subject_name_cmp, GO(X509_subject_name_hash, LFp) GO(X509_subject_name_hash_old, LFp) @@ -3845,7 +3868,7 @@ GO(X509V3_add1_i2d, iFpipiL) //GO(X509V3_add_value_bool_nf, //GO(X509V3_add_value_int, //GO(X509V3_add_value_uchar, -//GO(X509V3_conf_free, +GO(X509V3_conf_free, vFp) //GO(X509v3_delete_ext, //GO(X509V3_EXT_add, //GO(X509V3_EXT_add_alias, @@ -3861,7 +3884,7 @@ GO(X509V3_add1_i2d, iFpipiL) GO(X509V3_EXT_d2i, pFp) //GO(X509V3_extensions_print, //GO(X509V3_EXT_free, -GO(X509V3_EXT_get, pFp) +GOM(X509V3_EXT_get, pFEp) //GO(X509V3_EXT_get_nid, GO(X509V3_EXT_i2d, pFiip) //GO(X509V3_EXT_nconf, diff --git a/src/wrapped/wrappedcurl.c b/src/wrapped/wrappedcurl.c index 06a49a0c6e0fcfc7f149cb583e99b08552e8f57f..e51860807f49012fadea6e3ba3b15e7eb6f5f8a6 100644 --- a/src/wrapped/wrappedcurl.c +++ b/src/wrapped/wrappedcurl.c @@ -718,6 +718,146 @@ static void* find_ssl_ctx_callback_Fct(void* fct) return NULL; } +// malloc_callback +#define GO(A) \ + static uintptr_t my_malloc_callback_fct_##A = 0; \ + static void* my_malloc_callback_##A(size_t a) \ + { \ + return (void*)RunFunctionFmt(my_malloc_callback_fct_##A, "L", a); \ + } +SUPER() +#undef GO +static void* find_malloc_callback_Fct(void* fct) +{ + if (!fct) return NULL; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_malloc_callback_fct_##A == (uintptr_t)fct) return my_malloc_callback_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_malloc_callback_fct_##A == 0) { \ + my_malloc_callback_fct_##A = (uintptr_t)fct; \ + return my_malloc_callback_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for curl malloc_callback callback\n"); + return NULL; +} + +// free_callback +#define GO(A) \ + static uintptr_t my_free_callback_fct_##A = 0; \ + static void my_free_callback_##A(void* a) \ + { \ + RunFunctionFmt(my_free_callback_fct_##A, "p", a); \ + } +SUPER() +#undef GO +static void* find_free_callback_Fct(void* fct) +{ + if (!fct) return NULL; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_free_callback_fct_##A == (uintptr_t)fct) return my_free_callback_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_free_callback_fct_##A == 0) { \ + my_free_callback_fct_##A = (uintptr_t)fct; \ + return my_free_callback_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for curl free_callback callback\n"); + return NULL; +} + +// realloc_callback +#define GO(A) \ + static uintptr_t my_realloc_callback_fct_##A = 0; \ + static void* my_realloc_callback_##A(void* a, size_t b) \ + { \ + return (void*)RunFunctionFmt(my_realloc_callback_fct_##A, "pL", a, b); \ + } +SUPER() +#undef GO +static void* find_realloc_callback_Fct(void* fct) +{ + if (!fct) return NULL; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_realloc_callback_fct_##A == (uintptr_t)fct) return my_realloc_callback_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_realloc_callback_fct_##A == 0) { \ + my_realloc_callback_fct_##A = (uintptr_t)fct; \ + return my_realloc_callback_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for curl realloc_callback callback\n"); + return NULL; +} + +// strdup_callback +#define GO(A) \ + static uintptr_t my_strdup_callback_fct_##A = 0; \ + static void* my_strdup_callback_##A(void* a) \ + { \ + return (void*)RunFunctionFmt(my_strdup_callback_fct_##A, "p", a); \ + } +SUPER() +#undef GO +static void* find_strdup_callback_Fct(void* fct) +{ + if (!fct) return NULL; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_strdup_callback_fct_##A == (uintptr_t)fct) return my_strdup_callback_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_strdup_callback_fct_##A == 0) { \ + my_strdup_callback_fct_##A = (uintptr_t)fct; \ + return my_strdup_callback_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for curl strdup_callback callback\n"); + return NULL; +} + + +// calloc_callback +#define GO(A) \ + static uintptr_t my_calloc_callback_fct_##A = 0; \ + static void* my_calloc_callback_##A(size_t a, size_t b) \ + { \ + return (void*)RunFunctionFmt(my_calloc_callback_fct_##A, "LL", a, b); \ + } +SUPER() +#undef GO +static void* find_calloc_callback_Fct(void* fct) +{ + if (!fct) return NULL; + if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); +#define GO(A) \ + if (my_calloc_callback_fct_##A == (uintptr_t)fct) return my_calloc_callback_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my_calloc_callback_fct_##A == 0) { \ + my_calloc_callback_fct_##A = (uintptr_t)fct; \ + return my_calloc_callback_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for curl calloc_callback callback\n"); + return NULL; +} #undef SUPER EXPORT uint32_t my_curl_easy_setopt(x64emu_t* emu, void* handle, uint32_t option, void* param) @@ -796,4 +936,14 @@ EXPORT uint32_t my_curl_share_setopt(x64emu_t* emu, void* handle, CURLSHoption o } } +EXPORT int my_curl_global_init_mem(x64emu_t* emu, long flags, void* m, void* f, void* r, void* s, void* c) +{ + return my->curl_global_init_mem(flags, + find_malloc_callback_Fct(m), + find_free_callback_Fct(f), + find_realloc_callback_Fct(r), + find_strdup_callback_Fct(s), + find_calloc_callback_Fct(c)); +} + #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedcurl_private.h b/src/wrapped/wrappedcurl_private.h index e672b1b35b17a297eb9bc7dfcd83be70bef69fef..ce198abeef76026fad426460ed1520bf941f64b5 100644 --- a/src/wrapped/wrappedcurl_private.h +++ b/src/wrapped/wrappedcurl_private.h @@ -24,20 +24,20 @@ GO(curl_free, vFp) //GO(curl_getenv, GO(curl_global_cleanup, vFv) GO(curl_global_init, uFu) -//GO(curl_global_init_mem, +GOM(curl_global_init_mem, iFElppppp) GO(curl_global_sslset, uFupp) -//GO(curl_maprintf, -//GO(curl_mfprintf, -//GO(curl_mime_addpart, -//GO(curl_mime_data, -//GO(curl_mime_data_cb, -//GO(curl_mime_encoder, -//GO(curl_mime_filedata, -//GO(curl_mime_filename, -//GO(curl_mime_free, -//GO(curl_mime_headers, -//GO(curl_mime_init, -//GO(curl_mime_name, +// GO(curl_maprintf, +// GO(curl_mfprintf, +GO(curl_mime_addpart, pFp) +GO(curl_mime_data, iFppL) +// GO(curl_mime_data_cb, +// GO(curl_mime_encoder, +GO(curl_mime_filedata, iFpp) +// GO(curl_mime_filename, +// GO(curl_mime_free, +// GO(curl_mime_headers, +GO(curl_mime_init, pFp) +GO(curl_mime_name, iFpp) //GO(curl_mime_subparts, //GO(curl_mime_type, //GO(curl_mprintf, diff --git a/src/wrapped/wrappedexpat.c b/src/wrapped/wrappedexpat.c index be880b8bf22bcc0b45b0845d823848b86291ab98..84afb85b0e90b17c1f8f2bf78ec75e1bc4e6bc81 100644 --- a/src/wrapped/wrappedexpat.c +++ b/src/wrapped/wrappedexpat.c @@ -20,6 +20,7 @@ const char* expatName = "libexpat.so.1"; #define LIBNAME expat +#define ALTNAME "libexpat.so" #include "generated/wrappedexpattypes.h" diff --git a/src/wrapped/wrappedexpat_private.h b/src/wrapped/wrappedexpat_private.h index 5ce94aec1e7f0b235288fea0ea9874e6d1dca556..f88e751169ea2e6f99c3bfcc901ec0f5ca89ed33 100644 --- a/src/wrapped/wrappedexpat_private.h +++ b/src/wrapped/wrappedexpat_private.h @@ -1,60 +1,60 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif //GO(_INTERNAL_trim_to_complete_utf8_characters, -//GO(XML_DefaultCurrent, -GO(XML_ErrorString, pFi) +GO(XML_DefaultCurrent, vFp) +GO(XML_ErrorString, pFu) GO(XML_ExpatVersion, pFv) GO(XML_ExpatVersionInfo, pFp) // return a struct of 3 int. Use shadow pointer on ARM64 and x86_64 GO(XML_ExternalEntityParserCreate, pFppp) GO(XML_FreeContentModel, vFpp) GO(XML_GetBase, pFp) GO(XML_GetBuffer, pFpi) -//GO(XML_GetCurrentByteCount, +GO(XML_GetCurrentByteCount, iFp) GO(XML_GetCurrentByteIndex, lFp) GO(XML_GetCurrentColumnNumber, LFp) -GO(XML_GetCurrentLineNumber, iFp) -GO(XML_GetErrorCode, iFp) +GO(XML_GetCurrentLineNumber, LFp) +GO(XML_GetErrorCode, uFp) GO(XML_GetFeatureList, pFv) -//GO(XML_GetIdAttributeIndex, +GO(XML_GetIdAttributeIndex, iFp) GO(XML_GetInputContext, pFppp) -//GO(XML_GetParsingStatus, +GO(XML_GetParsingStatus, vFpp) GO(XML_GetSpecifiedAttributeCount, iFp) -//GO(XML_MemFree, -//GO(XML_MemMalloc, -//GO(XML_MemRealloc, -GO(XML_Parse, iFppii) -GO(XML_ParseBuffer, iFpii) +GO(XML_MemFree, vFpp) +GO(XML_MemMalloc, pFpL) +GO(XML_MemRealloc, pFppL) +GO(XML_Parse, uFppii) +GO(XML_ParseBuffer, uFpii) GO(XML_ParserCreate, pFp) GO(XML_ParserCreate_MM, pFpppp) // return a structure -//GO(XML_ParserCreateNS, +GO(XML_ParserCreateNS, pFpc) GO(XML_ParserFree, vFp) -GO(XML_ParserReset, iFpp) -//GO(XML_ResumeParser, +GO(XML_ParserReset, CFpp) +GO(XML_ResumeParser, uFp) GOM(XML_SetAttlistDeclHandler, vFEpp) -GO(XML_SetBase, iFpp) -//GO(XML_SetCdataSectionHandler, +GO(XML_SetBase, uFpp) +//GOM(XML_SetCdataSectionHandler, vFEppp) GOM(XML_SetCharacterDataHandler, vFEpp) GOM(XML_SetCommentHandler, vFEpp) GOM(XML_SetDefaultHandler, vFEpp) GOM(XML_SetDefaultHandlerExpand, vFEpp) -//GO(XML_SetDoctypeDeclHandler, +//GOM(XML_SetDoctypeDeclHandler, vFEppp) GOM(XML_SetElementDeclHandler, vFEpp) GOM(XML_SetElementHandler, vFEppp) -GO(XML_SetEncoding, iFpp) +GO(XML_SetEncoding, uFpp) GOM(XML_SetEndCdataSectionHandler, vFEpp) GOM(XML_SetEndDoctypeDeclHandler, vFEpp) GOM(XML_SetEndElementHandler, vFEpp) GOM(XML_SetEndNamespaceDeclHandler, vFEpp) GOM(XML_SetEntityDeclHandler, vFEpp) GOM(XML_SetExternalEntityRefHandler, vFEpp) -//GO(XML_SetExternalEntityRefHandlerArg, +GO(XML_SetExternalEntityRefHandlerArg, vFpp) GO(XML_SetHashSalt, iFpL) GOM(XML_SetNamespaceDeclHandler, vFEppp) GOM(XML_SetNotationDeclHandler, vFEpp) GOM(XML_SetNotStandaloneHandler, vFEpp) -GO(XML_SetParamEntityParsing, iFpi) +GO(XML_SetParamEntityParsing, iFpu) GOM(XML_SetProcessingInstructionHandler, vFEpp) GO(XML_SetReturnNSTriplet, vFpi) GOM(XML_SetSkippedEntityHandler, vFEpp) @@ -66,6 +66,6 @@ GOM(XML_SetUnknownEncodingHandler, vFEppp) GOM(XML_SetUnparsedEntityDeclHandler, vFEpp) GO(XML_SetUserData, vFpp) GOM(XML_SetXmlDeclHandler, vFEpp) -GO(XML_StopParser, iFpi) -GO(XML_UseForeignDTD, iFpi) -//GO(XML_UseParserAsHandlerArg, +GO(XML_StopParser, uFpC) +GO(XML_UseForeignDTD, uFpC) +GO(XML_UseParserAsHandlerArg, vFp) diff --git a/src/wrapped/wrappedflac.c b/src/wrapped/wrappedflac.c index 06f7617ce6036e71d23ad110e468f093ac61f053..8420ce723f1985fcfacb81bbea723933145a1f9f 100644 --- a/src/wrapped/wrappedflac.c +++ b/src/wrapped/wrappedflac.c @@ -18,11 +18,8 @@ #include "myalign.h" #include "bridge.h" -#ifdef ANDROID - const char* flacName = "libFLAC.so"; -#else - const char* flacName = "libFLAC.so.8"; -#endif +const char* flacName = "libFLAC.so.8"; +#define ALTNAME "libFLAC.so" #define LIBNAME flac diff --git a/src/wrapped/wrappedfontconfig.c b/src/wrapped/wrappedfontconfig.c index 41ef35072fa07c69a87c0e903ce30e45e14137ae..25d05e5679adb57c8952cface4be650f1d81d436 100644 --- a/src/wrapped/wrappedfontconfig.c +++ b/src/wrapped/wrappedfontconfig.c @@ -18,11 +18,8 @@ #include "emu/x64emu_private.h" #include "myalign.h" -#ifdef ANDROID - const char* fontconfigName = "libfontconfig.so"; -#else - const char* fontconfigName = "libfontconfig.so.1"; -#endif +const char* fontconfigName = "libfontconfig.so.1"; +#define ALTNAME "libfontconfig.so" #define LIBNAME fontconfig diff --git a/src/wrapped/wrappedfontconfig_private.h b/src/wrapped/wrappedfontconfig_private.h index 5403f0db682baf52eb344404ea4cd4571562c884..da1e9ca8f77947018fd13fa905865a54f3710c22 100644 --- a/src/wrapped/wrappedfontconfig_private.h +++ b/src/wrapped/wrappedfontconfig_private.h @@ -1,16 +1,16 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif GO(FcAtomicCreate, pFp) GO(FcAtomicDeleteNew, vFp) GO(FcAtomicDestroy, vFp) GO(FcAtomicLock, iFp) -//GO(FcAtomicNewFile, +GO(FcAtomicNewFile, pFp) GO(FcAtomicOrigFile, pFp) GO(FcAtomicReplaceOrig, iFp) -//GO(FcAtomicUnlock, -//GO(FcBlanksAdd, +GO(FcAtomicUnlock, vFp) +GO(FcBlanksAdd, iFpu) GO(FcBlanksCreate, pFv) GO(FcBlanksDestroy, vFp) GO(FcBlanksIsMember, iFpu) @@ -25,11 +25,11 @@ GO(FcCharSetCount, uFp) GO(FcCharSetCoverage, uFpup) GO(FcCharSetCreate, pFv) GO(FcCharSetDestroy, vFp) -//GO(FcCharSetEqual, -GO(FcCharSetFirstPage, iFppp) // second p is a fixed sized array +GO(FcCharSetEqual, iFpp) +GO(FcCharSetFirstPage, uFppp) // second p is a fixed sized array GO(FcCharSetHasChar, iFpu) -//GO(FcCharSetIntersect, -//GO(FcCharSetIntersectCount, +GO(FcCharSetIntersect, pFpp) +GO(FcCharSetIntersectCount, uFpp) GO(FcCharSetIsSubset, iFpp) GO(FcCharSetMerge, iFppp) GO(FcCharSetNew, pFv) @@ -44,12 +44,12 @@ GO(FcConfigBuildFonts, iFp) GO(FcConfigCreate, pFv) GO(FcConfigDestroy, vFp) GO(FcConfigEnableHome, iFi) -//GO(FcConfigFilename, +GO(FcConfigFilename, pFp) GO(FcConfigGetBlanks, pFp) GO(FcConfigGetCache, pFp) GO(FcConfigGetCacheDirs, pFp) -//GO(FcConfigGetConfigDirs, -//GO(FcConfigGetConfigFiles, +GO(FcConfigGetConfigDirs, pFp) +GO(FcConfigGetConfigFiles, pFp) GO(FcConfigGetCurrent, pFv) GO(FcConfigGetFontDirs, pFp) GO(FcConfigGetFonts, pFpu) @@ -57,25 +57,25 @@ GO(FcConfigGetRescanInterval, iFp) //GO(FcConfigGetRescanInverval, GO(FcConfigGetSysRoot, pFp) GO(FcConfigHome, pFv) -//GO(FcConfigParseAndLoad, +GO(FcConfigParseAndLoad, iFppi) GO(FcConfigReference, pFp) -//GO(FcConfigSetCurrent, +GO(FcConfigSetCurrent, iFp) GO(FcConfigSetRescanInterval, iFpi) //GO(FcConfigSetRescanInverval, GO(FcConfigSubstitute, iFppu) GO(FcConfigSubstituteWithPat, iFpppu) -//GO(FcConfigUptoDate, +GO(FcConfigUptoDate, iFp) GO(FcDefaultSubstitute, vFp) GO(FcDirCacheLoad, pFppp) GO(FcDirCacheLoadFile, pFpp) GO(FcDirCacheRead, pFpip) -//GO(FcDirCacheUnlink, +GO(FcDirCacheUnlink, iFpp) GO(FcDirCacheUnload, vFp) -//GO(FcDirCacheValid, +GO(FcDirCacheValid, iFp) GO(FcDirSave, iFppp) GO(FcDirScan, iFpppppi) GO(FcFileIsDir, iFp) -//GO(FcFileScan, +GO(FcFileScan, iFpppppi) GO(FcFini, vFv) GO(FcFontList, pFppp) GO(FcFontMatch, pFppp) @@ -94,17 +94,17 @@ GO(FcFreeTypeCharIndex, uFpu) //GO(FcFreeTypeCharSetAndSpacing, GO(FcFreeTypeQuery, pFpupp) GO(FcFreeTypeQueryFace, pFppip) -//GO(FcGetLangs, +GO(FcGetLangs, pFv) GO(FcGetVersion, iFv) GO(FcInit, iFv) GO(FcInitBringUptoDate, iFv) -//GO(FcInitLoadConfig, +GO(FcInitLoadConfig, pFv) GO(FcInitLoadConfigAndFonts, pFv) GO(FcInitReinitialize, iFv) GO(FcLangGetCharSet, pFp) GO(FcLangSetAdd, iFpp) GO(FcLangSetCompare, uFpp) -//GO(FcLangSetContains, +GO(FcLangSetContains, iFpp) GO(FcLangSetCopy, pFp) GO(FcLangSetCreate, pFv) GO(FcLangSetDestroy, vFp) @@ -115,15 +115,15 @@ GO(FcLangSetHasLang, uFpp) GO(FcMatrixCopy, pFp) GO(FcMatrixEqual, iFpp) GO(FcMatrixMultiply, vFppp) -//GO(FcMatrixRotate, -//GO(FcMatrixScale, +GO(FcMatrixRotate, vFpdd) +GO(FcMatrixScale, vFpdd) GO(FcMatrixShear, vFpdd) GO(FcNameConstant, iFpp) GO(FcNameGetConstant, pFp) GO(FcNameGetObjectType, pFp) GO(FcNameParse, pFp) -//GO(FcNameRegisterConstants, -//GO(FcNameRegisterObjectTypes, +GO(FcNameRegisterConstants, iFpi) +GO(FcNameRegisterObjectTypes, iFpi) GO(FcNameUnparse, pFp) GO(FcNameUnregisterConstants, iFpi) GO(FcNameUnregisterObjectTypes, iFpi) @@ -132,16 +132,16 @@ GOM(FcObjectSetBuild, pFEpV) GO(FcObjectSetCreate, pFv) GO(FcObjectSetDestroy, vFp) GOM(FcObjectSetVaBuild, pFEpA) -GO(FcPatternAdd, iFppiLi) // FcValue is a typedef with int+union, with biggest part is a double => so 1 int and 1"L" +GO(FcPatternAdd, iFppiLi) // Warning: failed to confirm GO(FcPatternAddBool, iFppi) GO(FcPatternAddCharSet, iFppp) GO(FcPatternAddDouble, iFppd) -GO(FcPatternAddFTFace, iFppp) +GO(FcPatternAddFTFace, iFppp) // Warning: failed to confirm GO(FcPatternAddInteger, iFppi) GO(FcPatternAddLangSet, iFppp) GO(FcPatternAddMatrix, iFppp) GO(FcPatternAddString, iFppp) -GO(FcPatternAddWeak, iFppiLi) +GO(FcPatternAddWeak, iFppiLi) // Warning: failed to confirm GOM(FcPatternBuild, pFEpV) GO(FcPatternCreate, pFv) GO(FcPatternDel, iFpp) @@ -155,7 +155,7 @@ GO(FcPatternGet, uFppip) GO(FcPatternGetBool, uFppip) GO(FcPatternGetCharSet, uFppip) GO(FcPatternGetDouble, uFppip) -GO(FcPatternGetFTFace, iFppip) +GO(FcPatternGetFTFace, iFppip) // Warning: failed to confirm GO(FcPatternGetInteger, uFppip) GO(FcPatternGetLangSet, uFppip) GO(FcPatternGetMatrix, uFppip) @@ -175,7 +175,7 @@ GO(FcStrDowncase, pFp) GO(FcStrFree, vFp) GO(FcStrListCreate, pFp) GO(FcStrListDone, vFp) -GO(FcStrListFirst, vFp) //2.11.0+ +GO(FcStrListFirst, vFp) GO(FcStrListNext, pFp) GO(FcStrPlus, pFpp) GO(FcStrSetAdd, iFpp) diff --git a/src/wrapped/wrappedfreetype.c b/src/wrapped/wrappedfreetype.c index 7e02db0b05f38d070887f7007d6cf8e0322f578b..cfb5e76a0bf6a64cf5bfff1afd6ffbfe747228cd 100644 --- a/src/wrapped/wrappedfreetype.c +++ b/src/wrapped/wrappedfreetype.c @@ -18,13 +18,9 @@ #include "emu/x64emu_private.h" #include "myalign.h" -const char* freetypeName = -#ifdef ANDROID - "libfreetype.so" -#else - "libfreetype.so.6" -#endif - ; +const char* freetypeName = "libfreetype.so.6"; +#define ALTNAME "libfreetype.so" + #define LIBNAME freetype typedef void (*vFp_t)(void*); diff --git a/src/wrapped/wrappedgcrypt_private.h b/src/wrapped/wrappedgcrypt_private.h index 4aa3dcbd6ed8429105e60667fcdead75335006bb..123a72b911aaa8583ebfe25845618f99744254b7 100644 --- a/src/wrapped/wrappedgcrypt_private.h +++ b/src/wrapped/wrappedgcrypt_private.h @@ -24,7 +24,7 @@ GO(gcry_check_version, pFp) //GO(gcry_cipher_setctr, //GO(gcry_cipher_setiv, //GO(gcry_cipher_setkey, -GO(gcry_control, uFuM) +GO(gcry_control, uFuNN) //GO(gcry_create_nonce, //GO(gcry_ctx_release, //GO(gcry_ecc_get_algo_keylen, diff --git a/src/wrapped/wrappedgdk3.c b/src/wrapped/wrappedgdk3.c index 29d7626eee4011fbd699126b080af6a33f65439b..c58d4064938bf20febfd402525d99d39bbe81d0e 100644 --- a/src/wrapped/wrappedgdk3.c +++ b/src/wrapped/wrappedgdk3.c @@ -18,11 +18,9 @@ #include "emu/x64emu_private.h" #include "gtkclass.h" -#ifdef ANDROID - const char* gdk3Name = "libgdk-3.so"; -#else - const char* gdk3Name = "libgdk-3.so.0"; -#endif +const char* gdk3Name = "libgdk-3.so.0"; +#define ALTNAME "libgdk-3.so" + #define LIBNAME gdk3 //#define ADDED_FUNCTIONS() @@ -149,24 +147,6 @@ static void my3_input_function(my_signal_t* sig, int source, int condition) RunFunctionFmt(sig->c_handler, "pii", sig->data, source, condition) ; } -EXPORT int my3_gdk_input_add(x64emu_t* emu, int source, int condition, void* f, void* data) -{ - if(!f) - return my->gdk_input_add_full(source, condition, f, data, NULL); - - my_signal_t* sig = new_mysignal(f, data, NULL); - return my->gdk_input_add_full(source, condition, my3_input_function, sig, my_signal_delete); -} - -EXPORT int my3_gdk_input_add_full(x64emu_t* emu, int source, int condition, void* f, void* data, void* notify) -{ - if(!f) - return my->gdk_input_add_full(source, condition, f, data, notify); - - my_signal_t* sig = new_mysignal(f, data, notify); - return my->gdk_input_add_full(source, condition, my3_input_function, sig, my_signal_delete); -} - EXPORT void my3_gdk_init(x64emu_t* emu, void* argc, void* argv) { my->gdk_init(argc, argv); @@ -216,10 +196,6 @@ EXPORT void my3_gdk_threads_set_lock_functions(x64emu_t* emu, void* enter_fn, vo #define ALTMY my3_ -#ifdef ANDROID -#define NEEDED_LIBS "libgobject-2.0.so", "libgio-2.0.so", "libgdk_pixbuf-2.0.so" -#else #define NEEDED_LIBS "libgobject-2.0.so.0", "libgio-2.0.so.0", "libgdk_pixbuf-2.0.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedgdk3_private.h b/src/wrapped/wrappedgdk3_private.h index 8dcee79e475f88f627c76b2b3b2c62ae5f115553..b2b0081a3d0dcf490a5aa7c048525b7cc362799f 100644 --- a/src/wrapped/wrappedgdk3_private.h +++ b/src/wrapped/wrappedgdk3_private.h @@ -1,10 +1,10 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif -//GOM(gdk_add_client_message_filter, vFpBp) GO(gdk_add_option_entries_libgtk_only, vFp) -//GO(gdk_app_launch_context_get_type, +GO(gdk_anchor_hints_get_type, LFv) +GO(gdk_app_launch_context_get_type, LFv) GO(gdk_app_launch_context_new, pFv) GO(gdk_app_launch_context_set_desktop, vFpi) GO(gdk_app_launch_context_set_display, vFpp) @@ -15,10 +15,18 @@ GO(gdk_app_launch_context_set_timestamp, vFpu) GO(gdk_atom_intern, pFpi) GO(gdk_atom_intern_static_string, pFp) GO(gdk_atom_name, pFp) -GO(gdk_axis_use_get_type, iFv) +GO(gdk_axis_flags_get_type, LFv) +GO(gdk_axis_use_get_type, LFv) GO(gdk_beep, vFv) -GO(gdk_bitmap_create_from_data, pFppii) -GO(gdk_byte_order_get_type, iFv) +GO(gdk_broadway_cursor_get_type, LFv) +GO(gdk_broadway_display_get_type, LFv) +GO(gdk_broadway_display_hide_keyboard, vFp) +GO(gdk_broadway_display_show_keyboard, vFp) +GO(gdk_broadway_get_last_seen_time, uFp) +GO(gdk_broadway_monitor_get_type, LFv) +GO(gdk_broadway_visual_get_type, LFv) +GO(gdk_broadway_window_get_type, LFv) +GO(gdk_byte_order_get_type, LFv) GO(gdk_cairo_create, pFp) GO(gdk_cairo_draw_from_gl, vFppiiiiiii) GO(gdk_cairo_get_clip_rectangle, iFpp) @@ -26,86 +34,89 @@ GO(gdk_cairo_get_drawing_context, pFp) GO(gdk_cairo_rectangle, vFpp) GO(gdk_cairo_region, vFpp) GO(gdk_cairo_region_create_from_surface, pFp) -GO(gdk_cairo_reset_clip, vFpp) GO(gdk_cairo_set_source_color, vFpp) GO(gdk_cairo_set_source_pixbuf, vFppdd) -GO(gdk_cairo_set_source_pixmap, vFppdd) GO(gdk_cairo_set_source_rgba, vFpp) GO(gdk_cairo_set_source_window, vFppdd) GO(gdk_cairo_surface_create_from_pixbuf, pFpip) -//GO(gdk_cap_style_get_type, -//GO(gdk_char_height, -//GO(gdk_char_measure, -//GO(gdk_char_width, -//GO(gdk_char_width_wc, -GO(gdk_color_alloc, iFpp) -GO(gdk_color_black, iFpp) -GO(gdk_color_change, iFpp) GO(gdk_color_copy, pFp) GO(gdk_color_equal, iFpp) GO(gdk_color_free, vFp) -GO(gdk_color_get_type, iFv) +GO(gdk_color_get_type, LFv) GO(gdk_color_hash, uFp) -GO(gdk_colormap_alloc_color, iFppii) -GO(gdk_colormap_alloc_colors, iFppiiip) -GO(gdk_colormap_change, vFpi) -GO(gdk_colormap_free_colors, vFppi) -GO(gdk_colormap_get_screen, pFp) -GO(gdk_colormap_get_system, pFv) -GO(gdk_colormap_get_system_size, iFv) -GO(gdk_colormap_get_type, iFv) -GO(gdk_colormap_get_visual, pFp) -GO(gdk_colormap_new, pFpi) -GO(gdk_colormap_query_color, vFpLp) -GO(gdk_colormap_ref, pFp) -GO(gdk_colormap_unref, vFp) GO(gdk_color_parse, iFpp) -GO(gdk_colors_alloc, iFpipipi) -GO(gdk_colors_free, vFppiL) -GO(gdk_colors_store, vFppi) GO(gdk_color_to_string, pFp) -GO(gdk_color_white, iFpp) -GO(gdk_crossing_mode_get_type, iFv) +GO(gdk_crossing_mode_get_type, LFv) GO(gdk_cursor_get_cursor_type, iFp) GO(gdk_cursor_get_display, pFp) GO(gdk_cursor_get_image, pFp) -GO(gdk_cursor_get_type, iFv) +GO(gdk_cursor_get_surface, pFppp) +GO(gdk_cursor_get_type, LFv) GO(gdk_cursor_new, pFi) GO(gdk_cursor_new_for_display, pFpi) GO(gdk_cursor_new_from_name, pFpp) GO(gdk_cursor_new_from_pixbuf, pFppii) -GO(gdk_cursor_new_from_pixmap, pFppppii) +GO(gdk_cursor_new_from_surface, pFppdd) GO(gdk_cursor_ref, pFp) -GO(gdk_cursor_type_get_type, iFv) +GO(gdk_cursor_type_get_type, LFv) GO(gdk_cursor_unref, vFp) GO(gdk_device_free_history, vFpi) +GO(gdk_device_get_associated_device, pFp) +GO(gdk_device_get_axes, uFp) GO(gdk_device_get_axis, iFppup) GO(gdk_device_get_axis_use, uFpu) -GO(gdk_device_get_core_pointer, pFv) +GO(gdk_device_get_axis_value, iFpppp) +GO(gdk_device_get_device_type, uFp) +GO(gdk_device_get_display, pFp) GO(gdk_device_get_has_cursor, iFp) GO(gdk_device_get_history, iFppuupp) GO(gdk_device_get_key, iFpupp) +GO(gdk_device_get_last_event_window, pFp) GO(gdk_device_get_mode, uFp) GO(gdk_device_get_name, pFp) GO(gdk_device_get_n_axes, iFp) GO(gdk_device_get_n_keys, iFp) GO(gdk_device_get_position, vFpppp) +GO(gdk_device_get_position_double, vFpppp) +GO(gdk_device_get_product_id, pFp) +GO(gdk_device_get_seat, pFp) GO(gdk_device_get_source, uFp) GO(gdk_device_get_state, vFpppp) -GO(gdk_device_get_type, iFv) -GO(gdk_device_set_axis_use, vFpuu) +GO(gdk_device_get_type, LFv) +GO(gdk_device_get_vendor_id, pFp) +GO(gdk_device_get_window_at_position, pFppp) +GO(gdk_device_get_window_at_position_double, pFppp) +GO(gdk_device_grab, uFppuiupu) +GO(gdk_device_grab_info_libgtk_only, iFpppp) +GO(gdk_device_list_axes, pFp) +GO(gdk_device_list_slave_devices, pFp) GO(gdk_device_manager_get_client_pointer, pFp) -GO(gdk_device_manager_get_type, lFv) +GO(gdk_device_manager_get_display, pFp) +GO(gdk_device_manager_get_type, LFv) +GO(gdk_device_manager_list_devices, pFpu) +GO(gdk_device_pad_feature_get_type, LFv) +GO(gdk_device_pad_get_feature_group, iFpui) +GO(gdk_device_pad_get_group_n_modes, iFpi) +GO(gdk_device_pad_get_n_features, iFpu) +GO(gdk_device_pad_get_n_groups, iFp) +GO(gdk_device_pad_get_type, LFv) +GO(gdk_device_set_axis_use, vFpuu) GO(gdk_device_set_key, vFpuuu) GO(gdk_device_set_mode, iFpu) -GO(gdk_device_set_source, vFpi) -GO(gdk_devices_list, pFv) +GO(gdk_device_tool_get_hardware_id, LFp) +GO(gdk_device_tool_get_serial, LFp) +GO(gdk_device_tool_get_tool_type, uFp) +GO(gdk_device_tool_get_type, LFv) +GO(gdk_device_tool_type_get_type, LFv) +GO(gdk_device_type_get_type, LFv) GO(gdk_device_ungrab, vFpu) -//GOM(gdk_display_add_client_message_filter, vFEpppp) +GO(gdk_device_warp, vFppii) +GO(gdk_disable_multidevice, vFv) GO(gdk_display_beep, vFp) GO(gdk_display_close, vFp) +GO(gdk_display_device_is_grabbed, iFpp) GO(gdk_display_flush, vFp) -GO(gdk_display_get_core_pointer, pFp) +GO(gdk_display_get_app_launch_context, pFp) GO(gdk_display_get_default, pFv) GO(gdk_display_get_default_cursor_size, uFp) GO(gdk_display_get_default_group, pFp) @@ -114,23 +125,27 @@ GO(gdk_display_get_default_seat, pFp) GO(gdk_display_get_device_manager, pFp) GO(gdk_display_get_event, pFp) GO(gdk_display_get_maximal_cursor_size, vFppp) -GO(gdk_display_get_name, pFp) GO(gdk_display_get_monitor, pFpi) -GO(gdk_display_get_monitors, pFp) +GO(gdk_display_get_monitor_at_point, pFpii) +GO(gdk_display_get_monitor_at_window, pFpp) +GO(gdk_display_get_name, pFp) GO(gdk_display_get_n_monitors, iFp) GO(gdk_display_get_n_screens, iFp) GO(gdk_display_get_pointer, vFppppp) GO(gdk_display_get_primary_monitor, pFp) GO(gdk_display_get_screen, pFpi) -GO(gdk_display_get_type, iFv) +GO(gdk_display_get_type, LFv) GO(gdk_display_get_window_at_pointer, pFppp) +GO(gdk_display_has_pending, iFp) GO(gdk_display_is_closed, iFp) GO(gdk_display_keyboard_ungrab, vFpu) GO(gdk_display_list_devices, pFp) +GO(gdk_display_list_seats, pFp) GO(gdk_display_manager_get, pFv) GO(gdk_display_manager_get_default_display, pFp) -GO(gdk_display_manager_get_type, iFv) +GO(gdk_display_manager_get_type, LFv) GO(gdk_display_manager_list_displays, pFp) +GO(gdk_display_manager_open_display, pFpp) GO(gdk_display_manager_set_default_display, vFpp) GO(gdk_display_map_keycode, iFpuppp) GO(gdk_display_notify_startup_complete, vFpp) @@ -143,7 +158,6 @@ GO(gdk_display_put_event, vFpp) GO(gdk_display_request_selection_notification, iFpp) GO(gdk_display_set_double_click_distance, vFpu) GO(gdk_display_set_double_click_time, vFpu) -//GOM(gdk_display_set_pointer_hooks, pFEpp) // GdkDisplayPointerHooks needs wrapping GO(gdk_display_store_clipboard, vFppupi) GO(gdk_display_supports_clipboard_persistence, iFp) GO(gdk_display_supports_composite, iFp) @@ -155,206 +169,146 @@ GO(gdk_display_supports_shapes, iFp) GO(gdk_display_sync, vFp) GO(gdk_display_warp_pointer, vFppii) GO(gdk_drag_abort, vFpu) -GO(gdk_drag_action_get_type, iFv) +GO(gdk_drag_action_get_type, LFv) GO(gdk_drag_begin, pFpp) -GO(gdk_drag_context_get_actions, iFp) +GO(gdk_drag_begin_for_device, pFppp) +GO(gdk_drag_begin_from_point, pFpppii) +GO(gdk_drag_cancel_reason_get_type, LFv) +GO(gdk_drag_context_get_actions, uFp) GO(gdk_drag_context_get_dest_window, pFp) +GO(gdk_drag_context_get_device, pFp) +GO(gdk_drag_context_get_drag_window, pFp) GO(gdk_drag_context_get_protocol, uFp) GO(gdk_drag_context_get_selected_action, uFp) GO(gdk_drag_context_get_source_window, pFp) -GO(gdk_drag_context_get_suggested_action, iFp) -GO(gdk_drag_context_get_type, iFv) +GO(gdk_drag_context_get_suggested_action, uFp) +GO(gdk_drag_context_get_type, LFv) GO(gdk_drag_context_list_targets, pFp) -GO(gdk_drag_context_new, pFv) -GO(gdk_drag_context_ref, vFp) -GO(gdk_drag_context_unref, vFp) +GO(gdk_drag_context_manage_dnd, iFppu) +GO(gdk_drag_context_set_device, vFpp) +GO(gdk_drag_context_set_hotspot, vFpii) GO(gdk_drag_drop, vFpu) +GO(gdk_drag_drop_done, vFpi) GO(gdk_drag_drop_succeeded, iFp) -GO(gdk_drag_find_window, vFppiipp) GO(gdk_drag_find_window_for_screen, vFpppiipp) -GO(gdk_drag_get_protocol, pFpp) -GO(gdk_drag_get_protocol_for_display, pFppp) GO(gdk_drag_get_selection, pFp) GO(gdk_drag_motion, iFppuiiuuu) -GO(gdk_drag_protocol_get_type, iFv) +GO(gdk_drag_protocol_get_type, LFv) GO(gdk_drag_status, vFpuu) -GO(gdk_drawable_copy_to_image, pFppiiiiii) -GO(gdk_drawable_get_clip_region, pFp) -GO(gdk_drawable_get_colormap, pFp) -GO(gdk_drawable_get_data, pFpp) -GO(gdk_drawable_get_depth, iFp) -GO(gdk_drawable_get_display, pFp) -GO(gdk_drawable_get_image, pFpiiii) -GO(gdk_drawable_get_screen, pFp) -GO(gdk_drawable_get_size, vFppp) -GO(gdk_drawable_get_type, iFv) -GO(gdk_drawable_get_visible_region, pFp) -GO(gdk_drawable_get_visual, pFp) -GO(gdk_drawable_ref, pFp) -GO(gdk_drawable_set_colormap, vFpp) -//GOM(gdk_drawable_set_data, vFEpppB) -GO(gdk_drawable_unref, vFp) -GO(gdk_draw_arc, vFppiiiiiii) -GO(gdk_draw_drawable, vFpppiiiiii) -GO(gdk_draw_glyphs, vFpppiip) -GO(gdk_draw_glyphs_transformed, vFppppiip) -GO(gdk_draw_gray_image, vFppiiiiipi) -GO(gdk_draw_image, vFpppiiiiii) -GO(gdk_draw_indexed_image, vFppiiiiipip) -GO(gdk_draw_layout, vFppiip) -GO(gdk_draw_layout_line, vFppiip) -GO(gdk_draw_layout_line_with_colors, vFppiippp) -GO(gdk_draw_layout_with_colors, vFppiippp) -GO(gdk_draw_line, vFppiiii) -GO(gdk_draw_lines, vFpppi) -GO(gdk_draw_pixbuf, vFpppiiiiiiiii) -GO(gdk_draw_point, vFppii) -GO(gdk_draw_points, vFpppi) -GO(gdk_draw_polygon, vFppipi) -GO(gdk_draw_rectangle, vFppiiiii) -GO(gdk_draw_rgb_32_image, vFppiiiiipi) -GO(gdk_draw_rgb_32_image_dithalign, vFppiiiiipiii) -GO(gdk_draw_rgb_image, vFppiiiiipi) -GO(gdk_draw_rgb_image_dithalign, vFppiiiiipiii) -GO(gdk_draw_segments, vFpppi) -GO(gdk_draw_string, vFpppiip) -GO(gdk_draw_text, vFpppiipi) -GO(gdk_draw_text_wc, vFpppiipi) -GO(gdk_draw_trapezoids, vFpppi) +GO(gdk_drawing_context_get_cairo_context, pFp) +GO(gdk_drawing_context_get_clip, pFp) +GO(gdk_drawing_context_get_type, LFv) +GO(gdk_drawing_context_get_window, pFp) +GO(gdk_drawing_context_is_valid, iFp) GO(gdk_drop_finish, vFpiu) GO(gdk_drop_reply, vFpiu) GO(gdk_error_trap_pop, iFv) +GO(gdk_error_trap_pop_ignored, vFv) GO(gdk_error_trap_push, vFv) GO(gdk_event_copy, pFp) GO(gdk_event_free, vFp) GO(gdk_event_get, pFv) GO(gdk_event_get_axis, iFpup) +GO(gdk_event_get_button, iFpp) +GO(gdk_event_get_click_count, iFpp) GO(gdk_event_get_coords, iFppp) -GO(gdk_event_get_graphics_expose, pFp) -GO(gdk_event_get_modifier_state, iFp) +GO(gdk_event_get_device, pFp) +GO(gdk_event_get_device_tool, pFp) +GO(gdk_event_get_event_sequence, pFp) +GO(gdk_event_get_event_type, iFp) +GO(gdk_event_get_keycode, iFpp) +GO(gdk_event_get_keyval, iFpp) +GO(gdk_event_get_modifier_state, uFp) +GO(gdk_event_get_pointer_emulated, iFp) GO(gdk_event_get_root_coords, iFppp) +GO(gdk_event_get_scancode, iFp) GO(gdk_event_get_screen, pFp) -GO(gdk_event_get_state, iFpp) +GO(gdk_event_get_scroll_deltas, iFppp) +GO(gdk_event_get_scroll_direction, iFpp) +GO(gdk_event_get_seat, pFp) GO(gdk_event_get_source_device, pFp) +GO(gdk_event_get_state, iFpp) GO(gdk_event_get_surface, pFp) GO(gdk_event_get_time, uFp) -GO(gdk_event_get_type, iFv) +GO(gdk_event_get_type, LFv) +GO(gdk_event_get_window, pFp) GOM(gdk_event_handler_set, vFEppp) -GO(gdk_event_mask_get_type, lFv) +//GO(gdk_event_is_allocated, +GO(gdk_event_is_scroll_stop_event, iFp) +GO(gdk_event_mask_get_type, LFv) GO(gdk_event_new, pFi) GO(gdk_event_peek, pFv) GO(gdk_event_put, vFp) GO(gdk_event_request_motions, vFp) -GO(gdk_event_send_client_message, iFpp) -GO(gdk_event_send_client_message_for_display, iFppp) -GO(gdk_event_send_clientmessage_toall, vFp) +GO(gdk_event_sequence_get_type, LFv) +GO(gdk_event_set_device, vFpp) +GO(gdk_event_set_device_tool, vFpp) GO(gdk_event_set_screen, vFpp) +GO(gdk_event_set_source_device, vFpp) +GO(gdk_events_get_angle, iFppp) +GO(gdk_events_get_center, iFpppp) +GO(gdk_events_get_distance, iFppp) GO(gdk_events_pending, iFv) -GO(gdk_event_type_get_type, lFv) -GO(gdk_exit, vFi) -//GO(gdk_extension_mode_get_type, -//GO(gdk_fill_get_type, -//GO(gdk_fill_rule_get_type, -//GO(gdk_filter_return_get_type, +GO(gdk_event_triggers_context_menu, iFp) +GO(gdk_event_type_get_type, LFv) +GO(gdk_filter_return_get_type, LFv) GO(gdk_flush, vFv) -//GO(gdk_font_equal, -//GO(gdk_font_from_description, -//GO(gdk_font_from_description_for_display, -//GO(gdk_font_get_display, -GO(gdk_font_get_type, iFv) -//GO(gdk_font_id, -//GO(gdk_font_load, -//GO(gdk_font_load_for_display, -//GO(gdk_font_ref, -//GO(gdk_fontset_load, -//GO(gdk_fontset_load_for_display, -//GO(gdk_font_type_get_type, -//GO(gdk_font_unref, -GO(gdk_frame_clock_phase_get_type, lFv) -GO(gdk_frame_clock_get_type, lFv) -GO(gdk_frame_timings_get_type, lFv) -GO(gdk_free_compound_text, vFp) -GO(gdk_free_text_list, vFp) -GO(gdk_function_get_type, iFv) -GO(gdk_gc_copy, vFpp) -GO(gdk_gc_get_colormap, pFp) -GO(gdk_gc_get_screen, pFp) -GO(gdk_gc_get_type, iFv) -GO(gdk_gc_get_values, vFpp) -GO(gdk_gc_new, pFp) -GO(gdk_gc_new_with_values, pFppu) -GO(gdk_gc_offset, vFpii) -GO(gdk_gc_ref, pFp) -GO(gdk_gc_set_background, vFpp) -GO(gdk_gc_set_clip_mask, vFpp) -GO(gdk_gc_set_clip_origin, vFpii) -GO(gdk_gc_set_clip_rectangle, vFpp) -GO(gdk_gc_set_clip_region, vFpp) -GO(gdk_gc_set_colormap, vFpp) -GO(gdk_gc_set_dashes, vFpipi) -GO(gdk_gc_set_exposures, vFpi) -GO(gdk_gc_set_fill, vFpi) -GO(gdk_gc_set_font, vFpp) -GO(gdk_gc_set_foreground, vFpp) -GO(gdk_gc_set_function,vFpi) -GO(gdk_gc_set_line_attributes, vFpiiii) -GO(gdk_gc_set_rgb_bg_color, vFpp) -GO(gdk_gc_set_rgb_fg_color, vFpp) -GO(gdk_gc_set_stipple, vFpp) -GO(gdk_gc_set_subwindow, vFpi) -GO(gdk_gc_set_tile, vFpp) -GO(gdk_gc_set_ts_origin, vFpii) -GO(gdk_gc_set_values, vFppu) -GO(gdk_gc_unref, vFp) -GO(gdk_gc_values_mask_get_type, iFv) +GO(gdk_frame_clock_begin_updating, vFp) +GO(gdk_frame_clock_end_updating, vFp) +GO(gdk_frame_clock_get_current_timings, pFp) +GO(gdk_frame_clock_get_frame_counter, lFp) +GO(gdk_frame_clock_get_frame_time, lFp) +GO(gdk_frame_clock_get_history_start, lFp) +GO(gdk_frame_clock_get_refresh_info, vFplpp) +GO(gdk_frame_clock_get_timings, pFpl) +GO(gdk_frame_clock_get_type, LFv) +GO(gdk_frame_clock_phase_get_type, LFv) +GO(gdk_frame_clock_request_phase, vFpu) +GO(gdk_frame_timings_get_complete, iFp) +GO(gdk_frame_timings_get_frame_counter, lFp) +GO(gdk_frame_timings_get_frame_time, lFp) +GO(gdk_frame_timings_get_predicted_presentation_time, lFp) +GO(gdk_frame_timings_get_presentation_time, lFp) +GO(gdk_frame_timings_get_refresh_interval, lFp) +GO(gdk_frame_timings_get_type, LFv) +GO(gdk_frame_timings_ref, pFp) +GO(gdk_frame_timings_unref, vFp) +GO(gdk_fullscreen_mode_get_type, LFv) GO(gdk_get_default_root_window, pFv) GO(gdk_get_display, pFv) GO(gdk_get_display_arg_name, pFv) GO(gdk_get_program_class, pFv) GO(gdk_get_show_events, iFv) -GO(gdk_get_use_xshm, iFv) -GO(gdk_gl_context_get_type, LFv) GO(gdk_gl_context_clear_current, vFv) GO(gdk_gl_context_get_current, pFv) +GO(gdk_gl_context_get_debug_enabled, iFp) +GO(gdk_gl_context_get_display, pFp) +GO(gdk_gl_context_get_forward_compatible, iFp) +GO(gdk_gl_context_get_required_version, vFppp) +GO(gdk_gl_context_get_shared_context, pFp) +GO(gdk_gl_context_get_type, LFv) +GO(gdk_gl_context_get_use_es, iFp) +GO(gdk_gl_context_get_version, vFppp) +GO(gdk_gl_context_get_window, pFp) +GO(gdk_gl_context_is_legacy, iFp) GO(gdk_gl_context_make_current, vFp) GO(gdk_gl_context_realize, iFpp) -GO(gdk_grab_status_get_type, iFv) -GO(gdk_gravity_get_type, iFv) -GO(gdk_image_get, pFpiiii) -GO(gdk_image_get_bits_per_pixel, WFp) -GO(gdk_image_get_byte_order, iFp) -GO(gdk_image_get_bytes_per_line, WFp) -GO(gdk_image_get_bytes_per_pixel, WFp) -GO(gdk_image_get_colormap, pFp) -GO(gdk_image_get_depth, WFp) -GO(gdk_image_get_height, iFp) -GO(gdk_image_get_image_type, iFp) -GO(gdk_image_get_pixel, uFpii) -GO(gdk_image_get_pixels, pFp) -GO(gdk_image_get_type, iFv) -GO(gdk_image_get_visual, pFp) -GO(gdk_image_get_width, iFp) -GO(gdk_image_new, pFipii) -GO(gdk_image_new_bitmap, pFppii) -GO(gdk_image_put_pixel, vFpiiu) -GO(gdk_image_ref, pFp) -GO(gdk_image_set_colormap, vFpp) -GO(gdk_image_type_get_type, iFv) -GO(gdk_image_unref, vFp) +GO(gdk_gl_context_set_debug_enabled, vFpi) +GO(gdk_gl_context_set_forward_compatible, vFpi) +GO(gdk_gl_context_set_required_version, vFpii) +GO(gdk_gl_context_set_use_es, vFpi) +GO(gdk_gl_error_get_type, LFv) +GO(gdk_gl_error_quark, uFv) +GO(gdk_grab_ownership_get_type, LFv) +GO(gdk_grab_status_get_type, LFv) +GO(gdk_gravity_get_type, LFv) GOM(gdk_init, vFEpp) GOM(gdk_init_check, iFEpp) -GOM(gdk_input_add, iFEiipp) -GOM(gdk_input_add_full, iFEiippp) -GO(gdk_input_condition_get_type, iFv) -GO(gdk_input_mode_get_type, iFv) -GO(gdk_input_remove, vFi) -GO(gdk_input_set_extension_events, vFpii) -GO(gdk_input_source_get_type, iFv) -GO(gdk_join_style_get_type, iFv) +GO(gdk_input_mode_get_type, LFv) +GO(gdk_input_source_get_type, LFv) GO(gdk_key_event_get_keycode, uFp) GO(gdk_key_event_get_keyval, uFp) GO(gdk_keyboard_grab, uFpiu) -//GO(gdk_keyboard_grab_info_libgtk_only, GO(gdk_keyboard_ungrab, vFu) GO(gdk_keymap_add_virtual_modifiers, vFpp) GO(gdk_keymap_get_caps_lock_state, iFp) @@ -363,7 +317,11 @@ GO(gdk_keymap_get_direction, uFp) GO(gdk_keymap_get_entries_for_keycode, iFpuppp) GO(gdk_keymap_get_entries_for_keyval, iFpupp) GO(gdk_keymap_get_for_display, pFp) -GO(gdk_keymap_get_type, iFv) +GO(gdk_keymap_get_modifier_mask, uFpu) +GO(gdk_keymap_get_modifier_state, uFp) +GO(gdk_keymap_get_num_lock_state, iFp) +GO(gdk_keymap_get_scroll_lock_state, iFp) +GO(gdk_keymap_get_type, LFv) GO(gdk_keymap_have_bidi_layouts, iFp) GO(gdk_keymap_lookup_key, uFpp) GO(gdk_keymap_map_virtual_modifiers, iFpp) @@ -376,11 +334,10 @@ GO(gdk_keyval_name, pFu) GO(gdk_keyval_to_lower, uFu) GO(gdk_keyval_to_unicode, uFu) GO(gdk_keyval_to_upper, uFu) -GO(gdk_line_style_get_type, iFv) GO(gdk_list_visuals, pFv) -//GO(gdk_mbstowcs, -GO(gdk_monitor_get_connector, pFp) -GO(gdk_monitor_get_description, pFp) +GO(gdk_memory_texture_new, pFiiupL) +GO(gdk_modifier_intent_get_type, LFv) +GO(gdk_modifier_type_get_type, LFv) GO(gdk_monitor_get_display, pFp) GO(gdk_monitor_get_geometry, vFpp) GO(gdk_monitor_get_height_mm, iFp) @@ -389,120 +346,54 @@ GO(gdk_monitor_get_model, pFp) GO(gdk_monitor_get_refresh_rate, iFp) GO(gdk_monitor_get_scale_factor, iFp) GO(gdk_monitor_get_subpixel_layout, uFp) +GO(gdk_monitor_get_type, LFv) GO(gdk_monitor_get_width_mm, iFp) -GO(gdk_monitor_is_valid, iFp) -GO(gdk_memory_texture_new, pFiiipL) -GO(gdk_modifier_type_get_type, iFv) -GO(gdk_net_wm_supports, iFp) +GO(gdk_monitor_get_workarea, vFpp) +GO(gdk_monitor_is_primary, iFp) GO(gdk_notify_startup_complete, vFv) GO(gdk_notify_startup_complete_with_id, vFp) -GO(gdk_notify_type_get_type, iFv) +GO(gdk_notify_type_get_type, LFv) GO(gdk_offscreen_window_get_embedder, pFp) -GO(gdk_offscreen_window_get_pixmap, pFp) -GO(gdk_offscreen_window_get_type, iFv) +GO(gdk_offscreen_window_get_surface, pFp) GO(gdk_offscreen_window_set_embedder, vFpp) -GO(gdk_overlap_type_get_type, iFv) -GO(gdk_owner_change_get_type, iFv) +GO(gdk_owner_change_get_type, LFv) GO(gdk_paintable_get_intrinsic_height, iFp) GO(gdk_paintable_get_intrinsic_width, iFp) -GO(gdk_paintable_get_type, pFv) +GO(gdk_paintable_get_type, LFv) GO(gdk_paintable_snapshot, vFppdd) -GO(gdk_pango_attr_emboss_color_new, pFp) -GO(gdk_pango_attr_embossed_new, pFi) -GO(gdk_pango_attr_stipple_new, pFp) GO(gdk_pango_context_get, pFv) +GO(gdk_pango_context_get_for_display, pFp) GO(gdk_pango_context_get_for_screen, pFp) -GO(gdk_pango_context_set_colormap, vFpp) GO(gdk_pango_layout_get_clip_region, pFpiipi) GO(gdk_pango_layout_line_get_clip_region, pFpiipi) -GO(gdk_pango_renderer_get_default, pFp) -GO(gdk_pango_renderer_get_type, iFv) -GO(gdk_pango_renderer_new, pFp) -GO(gdk_pango_renderer_set_drawable, vFpp) -GO(gdk_pango_renderer_set_gc, vFpp) -GO(gdk_pango_renderer_set_override_color, vFpip) -GO(gdk_pango_renderer_set_stipple, vFpip) GO(gdk_parse_args, vFpp) -GO(gdk_pixbuf_get_from_drawable, pFpppiiiiii) -GO(gdk_pixbuf_get_from_image, pFpppiiiiii) +GO(gdk_pixbuf_get_from_surface, pFpiiii) GO(gdk_pixbuf_get_from_window, pFpiiii) -GO(gdk_pixbuf_render_pixmap_and_mask, vFpppi) -GO(gdk_pixbuf_render_pixmap_and_mask_for_colormap, vFppppi) -GO(gdk_pixbuf_render_threshold_alpha, vFppiiiiiii) -GO(gdk_pixbuf_render_to_drawable, vFpppiiiiiiiii) -GO(gdk_pixbuf_render_to_drawable_alpha, vFppiiiiiiiiiii) -GO(gdk_pixmap_colormap_create_from_xpm, pFppppp) -GO(gdk_pixmap_colormap_create_from_xpm_d, pFppppp) -GO(gdk_pixmap_create_from_data, pFppiiipp) -GO(gdk_pixmap_create_from_xpm, pFpppp) -GO(gdk_pixmap_create_from_xpm_d, pFpppp) -GO(gdk_pixmap_foreign_new, pFp) -GO(gdk_pixmap_foreign_new_for_display, pFpp) -GO(gdk_pixmap_foreign_new_for_screen, pFppiii) -GO(gdk_pixmap_get_size, vFppp) -GO(gdk_pixmap_get_type, iFv) -GO(gdk_pixmap_impl_x11_get_type, iFv) -GO(gdk_pixmap_lookup, pFp) -GO(gdk_pixmap_lookup_for_display, pFpp) -GO(gdk_pixmap_new, pFpiii) GO(gdk_pointer_grab, uFpiuppu) -//GO(gdk_pointer_grab_info_libgtk_only, GO(gdk_pointer_is_grabbed, iFv) GO(gdk_pointer_ungrab, vFu) -//GO(gdk_pre_parse_libgtk_only, +GO(gdk_pre_parse_libgtk_only, vFv) +//GO(gdk__private__, GO(gdk_property_change, vFpppiupi) GO(gdk_property_delete, vFpp) GO(gdk_property_get, iFpppLLipppp) -GO(gdk_property_state_get_type, iFv) -GO(gdk_prop_mode_get_type, iFv) +GO(gdk_property_state_get_type, LFv) +GO(gdk_prop_mode_get_type, LFv) GO(gdk_query_depths, vFpp) GO(gdk_query_visual_types, vFpp) -GO(gdk_rectangle_get_type, iFv) +GO(gdk_rectangle_equal, iFpp) +GO(gdk_rectangle_get_type, LFv) GO(gdk_rectangle_intersect, iFppp) GO(gdk_rectangle_union, vFppp) -GO(gdk_region_copy, pFp) -GO(gdk_region_destroy, vFpp) -GO(gdk_region_empty, iFp) -GO(gdk_region_equal, iFpp) -GO(gdk_region_get_clipbox, vFpp) -GO(gdk_region_get_rectangles, vFppp) -GO(gdk_region_intersect, vFpp) -GO(gdk_region_new, pFv) -GO(gdk_region_offset, vFpii) -GO(gdk_region_point_in, iFpii) -GO(gdk_region_polygon, pFpii) -GO(gdk_region_rectangle, pFp) -GO(gdk_region_rect_equal, iFpp) -GO(gdk_region_rect_in, iFpp) -GO(gdk_region_shrink, vFpii) -//GOM(gdk_region_spans_intersect_foreach, vFppiiBp) -GO(gdk_region_subtract, vFpp) -GO(gdk_region_union, vFpp) -GO(gdk_region_union_with_rect, vFpp) -GO(gdk_region_xor, vFpp) +GO(gdk_rgba_copy, pFp) +GO(gdk_rgba_equal, iFpp) GO(gdk_rgba_free, vFp) GO(gdk_rgba_get_type, LFv) +GO(gdk_rgba_hash, uFp) GO(gdk_rgba_parse, iFpp) GO(gdk_rgba_to_string, pFp) -GO(gdk_rgb_cmap_free, vFp) -GO(gdk_rgb_cmap_new, pFpi) -GO(gdk_rgb_colormap_ditherable, iFp) -GO(gdk_rgb_ditherable, iFv) -GO(gdk_rgb_dither_get_type, iFv) -GO(gdk_rgb_find_color, vFpp) -GO(gdk_rgb_gc_set_background, vFpu) -GO(gdk_rgb_gc_set_foreground, vFpu) -GO(gdk_rgb_get_colormap, pFv) -GO(gdk_rgb_get_visual, pFv) -GO(gdk_rgb_init, vFv) -GO(gdk_rgb_set_install, vFi) -GO(gdk_rgb_set_min_colors, vFi) -GO(gdk_rgb_set_verbose, vFi) -GO(gdk_rgb_xpixel_from_rgb, LFu) -GO(gdk_screen_broadcast_client_message, vFpp) GO(gdk_screen_get_active_window, pFp) GO(gdk_screen_get_default, pFv) -GO(gdk_screen_get_default_colormap, pFp) GO(gdk_screen_get_display, pFp) GO(gdk_screen_get_font_options, pFp) GO(gdk_screen_get_height, iFp) @@ -512,22 +403,19 @@ GO(gdk_screen_get_monitor_at_window, iFpp) GO(gdk_screen_get_monitor_geometry, vFpip) GO(gdk_screen_get_monitor_height_mm, iFpi) GO(gdk_screen_get_monitor_plug_name, pFpi) +GO(gdk_screen_get_monitor_scale_factor, iFpi) GO(gdk_screen_get_monitor_width_mm, iFpi) GO(gdk_screen_get_monitor_workarea, vFpip) GO(gdk_screen_get_n_monitors, iFp) GO(gdk_screen_get_number, iFp) GO(gdk_screen_get_primary_monitor, iFp) GO(gdk_screen_get_resolution, dFp) -GO(gdk_screen_get_rgba_colormap, pFp) GO(gdk_screen_get_rgba_visual, pFp) -GO(gdk_screen_get_rgb_colormap, pFp) -GO(gdk_screen_get_rgb_visual, pFp) GO(gdk_screen_get_root_window, pFp) GO(gdk_screen_get_setting, iFppp) -GO(gdk_screen_get_system_colormap, pFp) GO(gdk_screen_get_system_visual, pFp) GO(gdk_screen_get_toplevel_windows, pFp) -GO(gdk_screen_get_type, iFv) +GO(gdk_screen_get_type, LFv) GO(gdk_screen_get_width, iFp) GO(gdk_screen_get_width_mm, iFp) GO(gdk_screen_get_window_stack, pFp) @@ -536,13 +424,20 @@ GO(gdk_screen_height_mm, iFv) GO(gdk_screen_is_composited, iFp) GO(gdk_screen_list_visuals, pFp) GO(gdk_screen_make_display_name, pFp) -GO(gdk_screen_set_default_colormap, vFpp) GO(gdk_screen_set_font_options, vFpp) GO(gdk_screen_set_resolution, vFpd) GO(gdk_screen_width, iFv) GO(gdk_screen_width_mm, iFv) -GO(gdk_scroll_direction_get_type, iFv) +GO(gdk_scroll_direction_get_type, LFv) +GO(gdk_seat_capabilities_get_type, LFv) +GO(gdk_seat_get_capabilities, uFp) +GO(gdk_seat_get_display, pFp) GO(gdk_seat_get_keyboard, pFp) +GO(gdk_seat_get_pointer, pFp) +GO(gdk_seat_get_slaves, pFpu) +GO(gdk_seat_get_type, LFv) +//GOM(gdk_seat_grab, uFppuipppp) +GO(gdk_seat_ungrab, vFp) GO(gdk_selection_convert, vFpppu) GO(gdk_selection_owner_get, pFp) GO(gdk_selection_owner_get_for_display, pFpp) @@ -553,42 +448,20 @@ GO(gdk_selection_send_notify, vFppppu) GO(gdk_selection_send_notify_for_display, vFpppppu) GO(gdk_set_allowed_backends, vFp) GO(gdk_set_double_click_time, vFu) -GO(gdk_set_locale, pFv) -//GOM(gdk_set_pointer_hooks, BFEB) GO(gdk_set_program_class, vFp) GO(gdk_set_show_events, vFi) -GO(gdk_set_sm_client_id, vFp) -GO(gdk_setting_action_get_type, iFv) +GO(gdk_setting_action_get_type, LFv) GO(gdk_setting_get, iFpp) -GO(gdk_set_use_xshm, vFi) -GO(gdk_spawn_command_line_on_screen, iFppp) -//GOM(gdk_spawn_on_screen, iFEppppipppp) -//GOM(gdk_spawn_on_screen_with_pipes, iFEppppippppppp) -GO(gdk_status_get_type, iFv) -//GO(gdk_string_extents, -//GO(gdk_string_height, -//GO(gdk_string_measure, -GO(gdk_string_to_compound_text, iFppppp) -GO(gdk_string_to_compound_text_for_display, iFpppppp) -//GO(gdk_string_width, -//GO(gdk_subwindow_mode_get_type, +GO(gdk_status_get_type, LFv) +GO(gdk_subpixel_layout_get_type, LFv) //GO(gdk_synthesize_window_state, -//GO(gdk_test_render_sync, +GO(gdk_test_render_sync, vFp) GO(gdk_test_simulate_button, iFpiiuui) -//GO(gdk_test_simulate_key, -//GO(gdk_text_extents, -//GO(gdk_text_extents_wc, -//GO(gdk_text_height, -//GO(gdk_text_measure, -GO(gdk_text_property_to_text_list, iFpipip) -GO(gdk_text_property_to_text_list_for_display, iFppipip) -GO(gdk_text_property_to_utf8_list, iFpipip) -GO(gdk_text_property_to_utf8_list_for_display, iFppipip) -//GO(gdk_text_width, -//GO(gdk_text_width_wc, +GO(gdk_test_simulate_key, iFpiiuui) GO(gdk_texture_download, vFppL) -GO(gdk_texture_get_width, uFp) -GO(gdk_texture_get_height, uFp) +GO(gdk_texture_get_height, iFp) +GO(gdk_texture_get_width, iFp) +GO(gdk_text_property_to_utf8_list_for_display, iFppipip) GOM(gdk_threads_add_idle, uFEpp) GOM(gdk_threads_add_idle_full, uFEippp) //GOM(gdk_threads_add_timeout, uFEupp) @@ -599,12 +472,11 @@ GO(gdk_threads_enter, vFv) GO(gdk_threads_init, vFv) GO(gdk_threads_leave, vFv) GOM(gdk_threads_set_lock_functions, vFEpp) -GO(gdk_toplevel_get_type, pFv) +GO(gdk_toplevel_get_type, LFv) +GO(gdk_touchpad_gesture_phase_get_type, LFv) GO(gdk_unicode_to_keyval, uFu) -GO(gdk_utf8_to_compound_text, iFppppp) -GO(gdk_utf8_to_compound_text_for_display, iFpppppp) GO(gdk_utf8_to_string_target, pFp) -GO(gdk_visibility_state_get_type, iFv) +GO(gdk_visibility_state_get_type, LFv) GO(gdk_visual_get_best, pFv) GO(gdk_visual_get_best_depth, iFv) GO(gdk_visual_get_best_type, uFv) @@ -622,23 +494,50 @@ GO(gdk_visual_get_screen, pFp) GO(gdk_visual_get_system, pFv) GO(gdk_visual_get_type, LFv) GO(gdk_visual_get_visual_type, uFp) -GO(gdk_visual_type_get_type, iFv) +GO(gdk_visual_type_get_type, LFv) +GO(gdk_wayland_device_get_node_path, pFp) +GO(gdk_wayland_device_get_type, LFv) +GO(gdk_wayland_device_get_wl_keyboard, pFp) +GO(gdk_wayland_device_get_wl_pointer, pFp) +GO(gdk_wayland_device_get_wl_seat, pFp) +GO(gdk_wayland_device_pad_set_feedback, vFpuup) +GO(gdk_wayland_display_get_type, LFv) +GO(gdk_wayland_display_get_wl_compositor, pFp) +GO(gdk_wayland_display_get_wl_display, pFp) +GO(gdk_wayland_display_prefers_ssd, iFp) +GO(gdk_wayland_display_query_registry, iFpp) +GO(gdk_wayland_display_set_cursor_theme, vFppi) +GO(gdk_wayland_display_set_startup_notification_id, vFpp) +GO(gdk_wayland_gl_context_get_type, LFv) +GO(gdk_wayland_monitor_get_type, LFv) +GO(gdk_wayland_monitor_get_wl_output, pFp) +GO(gdk_wayland_seat_get_wl_seat, pFp) +//GO(gdk_wayland_selection_add_targets_libgtk_only, +//GO(gdk_wayland_selection_clear_targets_libgtk_only, GO(gdk_wayland_toplevel_set_transient_for_exported, iFpp) +GO(gdk_wayland_window_add_frame_callback_surface, vFpp) +GO(gdk_wayland_window_announce_csd, vFp) +GO(gdk_wayland_window_announce_ssd, vFp) +//GOM(gdk_wayland_window_export_handle, iFpppp) GO(gdk_wayland_window_get_type, LFv) +GO(gdk_wayland_window_get_wl_surface, pFp) +GO(gdk_wayland_window_remove_frame_callback_surface, vFpp) +GO(gdk_wayland_window_set_application_id, vFpp) +GO(gdk_wayland_window_set_dbus_properties_libgtk_only, vFppppppp) GO(gdk_wayland_window_set_transient_for_exported, iFpp) -//GO(gdk_wcstombs, +GO(gdk_wayland_window_set_use_custom_surface, vFp) +GO(gdk_wayland_window_unexport_handle, vFp) GOM(gdk_window_add_filter, vFEppp) GO(gdk_window_at_pointer, pFpp) -//GO(gdk_window_attributes_type_get_type, +GO(gdk_window_attributes_type_get_type, LFv) GO(gdk_window_beep, vFp) +GO(gdk_window_begin_draw_frame, pFpp) GO(gdk_window_begin_move_drag, vFpiiiu) +GO(gdk_window_begin_move_drag_for_device, vFppiiiu) GO(gdk_window_begin_paint_rect, vFpp) GO(gdk_window_begin_paint_region, vFpp) GO(gdk_window_begin_resize_drag, vFpuiiiu) -GO(gdk_window_class_get_type, iFv) -GO(gdk_window_clear, vFp) -GO(gdk_window_clear_area, vFpiiii) -GO(gdk_window_clear_area_e, vFpiiii) +GO(gdk_window_begin_resize_drag_for_device, vFpupiiiu) GO(gdk_window_configure_finished, vFp) GO(gdk_window_constrain_size, vFpuiipp) GO(gdk_window_coords_from_parent, vFpddpp) @@ -649,62 +548,71 @@ GO(gdk_window_create_similar_surface, pFpuii) GO(gdk_window_deiconify, vFp) GO(gdk_window_destroy, vFp) //GO(gdk_window_destroy_notify, -//GO(gdk_window_edge_get_type, +GO(gdk_window_edge_get_type, LFv) GO(gdk_window_enable_synchronized_configure, vFp) +GO(gdk_window_end_draw_frame, vFpp) GO(gdk_window_end_paint, vFp) GO(gdk_window_ensure_native, iFp) GO(gdk_window_flush, vFp) GO(gdk_window_focus, vFpu) -GO(gdk_window_foreign_new, pFp) -GO(gdk_window_foreign_new_for_display, pFpp) -//GO(gdk_window_freeze_toplevel_updates_libgtk_only, +GO(gdk_window_freeze_toplevel_updates_libgtk_only, vFp) GO(gdk_window_freeze_updates, vFp) GO(gdk_window_fullscreen, vFp) +GO(gdk_window_fullscreen_on_monitor, vFpi) GO(gdk_window_geometry_changed, vFp) GO(gdk_window_get_accept_focus, iFp) GO(gdk_window_get_background_pattern, pFp) GO(gdk_window_get_children, pFp) +GO(gdk_window_get_children_with_user_data, pFpp) +GO(gdk_window_get_clip_region, pFp) GO(gdk_window_get_composited, iFp) GO(gdk_window_get_cursor, pFp) GO(gdk_window_get_decorations, iFpp) -GO(gdk_window_get_deskrelative_origin, iFppp) +GO(gdk_window_get_device_cursor, pFpp) +GO(gdk_window_get_device_events, uFpp) +GO(gdk_window_get_device_position, pFppppp) +GO(gdk_window_get_device_position_double, pFppppp) GO(gdk_window_get_display, pFp) +GO(gdk_window_get_drag_protocol, uFpp) GO(gdk_window_get_effective_parent, pFp) GO(gdk_window_get_effective_toplevel, pFp) +GO(gdk_window_get_event_compression, iFp) GO(gdk_window_get_events, uFp) GO(gdk_window_get_focus_on_map, iFp) +GO(gdk_window_get_frame_clock, pFp) GO(gdk_window_get_frame_extents, vFpp) +GO(gdk_window_get_fullscreen_mode, uFp) GO(gdk_window_get_geometry, vFppppp) GO(gdk_window_get_group, pFp) GO(gdk_window_get_height, iFp) -GO(gdk_window_get_internal_paint_info, vFpppp) GO(gdk_window_get_modal_hint, iFp) GO(gdk_window_get_origin, iFppp) GO(gdk_window_get_parent, pFp) +GO(gdk_window_get_pass_through, iFp) GO(gdk_window_get_pointer, pFpppp) GO(gdk_window_get_position, vFppp) GO(gdk_window_get_root_coords, vFpiipp) GO(gdk_window_get_root_origin, vFppp) +GO(gdk_window_get_scale_factor, iFp) GO(gdk_window_get_screen, pFp) +GO(gdk_window_get_source_events, uFpu) GO(gdk_window_get_state, uFp) +GO(gdk_window_get_support_multidevice, iFp) GO(gdk_window_get_toplevel, pFp) -GO(gdk_window_get_toplevels, pFp) -GO(gdk_window_get_type, lFv) +GO(gdk_window_get_type, LFv) GO(gdk_window_get_type_hint, uFp) GO(gdk_window_get_update_area, pFp) GO(gdk_window_get_user_data, vFpp) +GO(gdk_window_get_visible_region, pFp) GO(gdk_window_get_visual, pFp) GO(gdk_window_get_width, iFp) GO(gdk_window_get_window_type, uFp) GO(gdk_window_has_native, iFp) GO(gdk_window_hide, vFp) -GO(gdk_window_hints_get_type, iFv) +GO(gdk_window_hints_get_type, LFv) GO(gdk_window_iconify, vFp) -GO(gdk_window_impl_get_type, iFv) -GO(gdk_window_impl_x11_get_type, iFv) -GO(gdk_window_input_shape_combine_mask, vFppii) GO(gdk_window_input_shape_combine_region, vFppii) -//GOM(gdk_window_invalidate_maybe_recurse, vFEppBp) +//GOM(gdk_window_invalidate_maybe_recurse, vFEpppp) GO(gdk_window_invalidate_rect, vFppi) GO(gdk_window_invalidate_region, vFppi) GO(gdk_window_is_destroyed, iFp) @@ -712,143 +620,165 @@ GO(gdk_window_is_input_only, iFp) GO(gdk_window_is_shaped, iFp) GO(gdk_window_is_viewable, iFp) GO(gdk_window_is_visible, iFp) -GO(gdk_window_lookup, pFp) -GO(gdk_window_lookup_for_display, pFpp) GO(gdk_window_lower, vFp) +GO(gdk_window_mark_paint_from_clip, vFpp) GO(gdk_window_maximize, vFp) GO(gdk_window_merge_child_input_shapes, vFp) GO(gdk_window_merge_child_shapes, vFp) GO(gdk_window_move, vFpii) GO(gdk_window_move_region, vFppii) GO(gdk_window_move_resize, vFpiiii) +GO(gdk_window_move_to_rect, vFppuuuii) GO(gdk_window_new, pFppi) -GO(gdk_window_object_get_type, iFv) GO(gdk_window_peek_children, pFp) GO(gdk_window_process_all_updates, vFv) GO(gdk_window_process_updates, vFpi) GO(gdk_window_raise, vFp) -GO(gdk_window_redirect_to_drawable, vFppiiiiii) GO(gdk_window_register_dnd, vFp) GOM(gdk_window_remove_filter, vFEppp) -GO(gdk_window_remove_redirection, vFp) GO(gdk_window_reparent, vFppii) GO(gdk_window_resize, vFpii) GO(gdk_window_restack, vFppi) GO(gdk_window_scroll, vFpii) GO(gdk_window_set_accept_focus, vFpi) GO(gdk_window_set_background, vFpp) +GO(gdk_window_set_background_pattern, vFpp) GO(gdk_window_set_background_rgba, vFpp) -GO(gdk_window_set_back_pixmap, vFppi) GO(gdk_window_set_child_input_shapes, vFp) GO(gdk_window_set_child_shapes, vFp) GO(gdk_window_set_composited, vFpi) GO(gdk_window_set_cursor, vFpp) GO(gdk_window_set_debug_updates, vFi) GO(gdk_window_set_decorations, vFpu) +GO(gdk_window_set_device_cursor, vFppp) +GO(gdk_window_set_device_events, vFppu) +GO(gdk_window_set_event_compression, vFpi) GO(gdk_window_set_events, vFpu) GO(gdk_window_set_focus_on_map, vFpi) +GO(gdk_window_set_fullscreen_mode, vFpu) GO(gdk_window_set_functions, vFpu) GO(gdk_window_set_geometry_hints, vFppu) GO(gdk_window_set_group, vFpp) -GO(gdk_window_set_hints, vFpiiiiiii) -GO(gdk_window_set_icon, vFpppp) GO(gdk_window_set_icon_list, vFpp) GO(gdk_window_set_icon_name, vFpp) +//GOM(gdk_window_set_invalidate_handler, vFpp) GO(gdk_window_set_keep_above, vFpi) GO(gdk_window_set_keep_below, vFpi) -GO(gdk_window_set_modal_hint, iFp) +GO(gdk_window_set_modal_hint, vFpi) GO(gdk_window_set_opacity, vFpd) +GO(gdk_window_set_opaque_region, vFpp) GO(gdk_window_set_override_redirect, vFpi) +GO(gdk_window_set_pass_through, vFpi) GO(gdk_window_set_role, vFpp) +GO(gdk_window_set_shadow_width, vFpiiii) GO(gdk_window_set_skip_pager_hint, vFpi) GO(gdk_window_set_skip_taskbar_hint, vFpi) +GO(gdk_window_set_source_events, vFpuu) GO(gdk_window_set_startup_id, vFpp) GO(gdk_window_set_static_gravities, iFpi) +GO(gdk_window_set_support_multidevice, vFpi) GO(gdk_window_set_title, vFpp) GO(gdk_window_set_transient_for, vFpp) GO(gdk_window_set_type_hint, vFpu) GO(gdk_window_set_urgency_hint, vFpi) GO(gdk_window_set_user_data, vFpp) -GO(gdk_window_shape_combine_mask, vFppii) GO(gdk_window_shape_combine_region, vFppii) GO(gdk_window_show, vFp) GO(gdk_window_show_unraised, vFp) -GO(gdk_window_state_get_type, iFv) +GO(gdk_window_show_window_menu, iFpp) +GO(gdk_window_state_get_type, LFv) GO(gdk_window_stick, vFp) -//GO(gdk_window_thaw_toplevel_updates_libgtk_only, +GO(gdk_window_thaw_toplevel_updates_libgtk_only, vFp) GO(gdk_window_thaw_updates, vFp) -GO(gdk_window_type_get_type, iFv) -GO(gdk_window_type_hint_get_type, iFv) +GO(gdk_window_type_get_type, LFv) +GO(gdk_window_type_hint_get_type, LFv) GO(gdk_window_unfullscreen, vFp) GO(gdk_window_unmaximize, vFp) GO(gdk_window_unstick, vFp) +GO(gdk_window_window_class_get_type, LFv) GO(gdk_window_withdraw, vFp) -GO(gdk_wm_decoration_get_type, iFv) -GO(gdk_wm_function_get_type, iFv) -GO(gdk_x11_atom_to_xatom, pFp) -GO(gdk_x11_atom_to_xatom_for_display, pFpp) -GO(gdk_x11_colormap_foreign_new, pFpp) -GO(gdk_x11_colormap_get_xcolormap, pFp) -GO(gdk_x11_colormap_get_xdisplay, pFp) -GO(gdk_x11_cursor_get_xcursor, pFp) +GO(gdk_wm_decoration_get_type, LFv) +GO(gdk_wm_function_get_type, LFv) +GO(gdk_x11_app_launch_context_get_type, LFv) +GO(gdk_x11_atom_to_xatom, LFp) +GO(gdk_x11_atom_to_xatom_for_display, LFpp) +GO(gdk_x11_cursor_get_type, LFv) +GO(gdk_x11_cursor_get_xcursor, LFp) GO(gdk_x11_cursor_get_xdisplay, pFp) +GO(gdk_x11_device_core_get_type, LFv) +GO(gdk_x11_device_get_id, iFp) +GO(gdk_x11_device_manager_core_get_type, LFv) +GO(gdk_x11_device_manager_lookup, pFpi) +GO(gdk_x11_device_manager_xi2_get_type, LFv) +GO(gdk_x11_device_xi2_get_type, LFv) GO(gdk_x11_display_broadcast_startup_message, vFppppppppppppp) //vaarg after 2 p +GO(gdk_x11_display_error_trap_pop, iFp) +GO(gdk_x11_display_error_trap_pop_ignored, vFp) +GO(gdk_x11_display_error_trap_push, vFp) +GO(gdk_x11_display_get_glx_version, iFppp) GO(gdk_x11_display_get_startup_notification_id, pFp) -GO(gdk_x11_display_get_type, iFv) +GO(gdk_x11_display_get_type, LFv) GO(gdk_x11_display_get_user_time, uFp) GO(gdk_x11_display_get_xdisplay, pFp) -GO(gdk_x11_window_get_type, LFv) -GO(gdk_x11_window_get_xid, LFp) GO(gdk_x11_display_grab, vFp) +GO(gdk_x11_display_manager_get_type, LFv) GO(gdk_x11_display_set_cursor_theme, vFppi) -//GO(gdk_x11_display_string_to_compound_text, -//GO(gdk_x11_display_text_property_to_text_list, +GO(gdk_x11_display_set_startup_notification_id, vFpp) +GO(gdk_x11_display_set_window_scale, vFpi) +GO(gdk_x11_display_string_to_compound_text, iFpppppp) +GO(gdk_x11_display_text_property_to_text_list, iFppipip) GO(gdk_x11_display_ungrab, vFp) -//GO(gdk_x11_display_utf8_to_compound_text, -GO(gdk_x11_drawable_get_xdisplay, pFp) -GO(gdk_x11_drawable_get_xid, pFp) -GO(gdk_x11_font_get_name, pFp) -GO(gdk_x11_font_get_xdisplay, pFp) -GO(gdk_x11_font_get_xfont, pFp) -//GO(gdk_x11_free_compound_text, -//GO(gdk_x11_free_text_list, -GO(gdk_x11_gc_get_xdisplay, pFp) -GO(gdk_x11_gc_get_xgc, pFp) -GO(gdk_x11_get_default_root_xwindow, pFv) +GO(gdk_x11_display_utf8_to_compound_text, iFpppppp) +GO(gdk_x11_drag_context_get_type, LFv) +GO(gdk_x11_free_compound_text, vFp) +GO(gdk_x11_free_text_list, vFp) +GO(gdk_x11_get_default_root_xwindow, LFv) GO(gdk_x11_get_default_screen, iFv) GO(gdk_x11_get_default_xdisplay, pFv) +GO(gdk_x11_get_parent_relative_pattern, pFv) GO(gdk_x11_get_server_time, uFp) -GO(gdk_x11_get_xatom_by_name, pFp) -GO(gdk_x11_get_xatom_by_name_for_display, pFpp) -GO(gdk_x11_get_xatom_name, pFp) -GO(gdk_x11_get_xatom_name_for_display, pFpp) +GO(gdk_x11_get_xatom_by_name, LFp) +GO(gdk_x11_get_xatom_by_name_for_display, LFpp) +GO(gdk_x11_get_xatom_name, pFL) +GO(gdk_x11_get_xatom_name_for_display, pFpL) +GO(gdk_x11_gl_context_get_type, LFv) GO(gdk_x11_grab_server, vFv) -GO(gdk_x11_image_get_xdisplay, pFp) -GO(gdk_x11_image_get_ximage, pFp) +GO(gdk_x11_keymap_get_group_for_state, iFpu) +GO(gdk_x11_keymap_get_type, LFv) +GO(gdk_x11_keymap_key_is_modifier, iFpu) GO(gdk_x11_lookup_xdisplay, pFp) -GO(gdk_x11_pixmap_get_drawable_impl, pFp) +GO(gdk_x11_monitor_get_output, LFp) +GO(gdk_x11_monitor_get_type, LFv) GO(gdk_x11_register_standard_event_type, vFpii) -GO(gdk_x11_screen_get_monitor_output, pFpi) +GO(gdk_x11_screen_get_current_desktop, uFp) +GO(gdk_x11_screen_get_monitor_output, LFpi) +GO(gdk_x11_screen_get_number_of_desktops, uFp) GO(gdk_x11_screen_get_screen_number, iFp) +GO(gdk_x11_screen_get_type, LFv) GO(gdk_x11_screen_get_window_manager_name, pFp) -GO(gdk_x11_screen_get_xscreen, pFp) -GO(gdk_x11_screen_lookup_visual, pFpp) +//GOM(gdk_x11_screen_get_xscreen, pFp) +GO(gdk_x11_screen_lookup_visual, pFpL) GO(gdk_x11_screen_supports_net_wm_hint, iFpp) GO(gdk_x11_set_sm_client_id, vFp) GO(gdk_x11_surface_get_xid, LFp) GO(gdk_x11_ungrab_server, vFv) +GO(gdk_x11_visual_get_type, LFv) GO(gdk_x11_visual_get_xvisual, pFp) -GO(gdk_x11_window_foreign_new_for_display, pFpp) -GO(gdk_x11_window_get_drawable_impl, pFp) -GO(gdk_x11_window_lookup_for_display, pFpp) +GO(gdk_x11_window_foreign_new_for_display, pFpL) +GO(gdk_x11_window_get_desktop, uFp) +GO(gdk_x11_window_get_type, LFv) +GO(gdk_x11_window_get_xid, LFp) +GO(gdk_x11_window_lookup_for_display, pFpL) GO(gdk_x11_window_move_to_current_desktop, vFp) +GO(gdk_x11_window_move_to_desktop, vFpu) +GO(gdk_x11_window_set_frame_extents, vFpiiii) +GO(gdk_x11_window_set_frame_sync_enabled, vFpi) +GO(gdk_x11_window_set_hide_titlebar_when_maximized, vFpi) +GO(gdk_x11_window_set_theme_variant, vFpp) GO(gdk_x11_window_set_user_time, vFpu) -GO(gdk_x11_xatom_to_atom, pFp) -GO(gdk_x11_xatom_to_atom_for_display, pFpp) -GO(gdkx_colormap_get, pFu) -GO(gdk_xid_table_lookup, pFp) -GO(gdk_xid_table_lookup_for_display, pFpp) -GO(gdkx_visual_get, pFp) +GO(gdk_x11_window_set_utf8_property, vFppp) +GO(gdk_x11_xatom_to_atom, pFL) +GO(gdk_x11_xatom_to_atom_for_display, pFpL) DATA(gdk_display, 4) // no hack here... DATA(gdk_threads_lock, 4) diff --git a/src/wrapped/wrappedgdkpixbuf2.c b/src/wrapped/wrappedgdkpixbuf2.c index 99fa169201ecb88c1ae0682c17850f2b90a99295..645dbb2c0778bb16a0719ac4d35a931c42e8506b 100644 --- a/src/wrapped/wrappedgdkpixbuf2.c +++ b/src/wrapped/wrappedgdkpixbuf2.c @@ -17,11 +17,9 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* gdkpixbuf2Name = "libgdk_pixbuf-2.0.so"; -#else - const char* gdkpixbuf2Name = "libgdk_pixbuf-2.0.so.0"; -#endif +const char* gdkpixbuf2Name = "libgdk_pixbuf-2.0.so.0"; +#define ALTNAME "libgdk_pixbuf-2.0.so" + #define LIBNAME gdkpixbuf2 #include "generated/wrappedgdkpixbuf2types.h" diff --git a/src/wrapped/wrappedgdkx112.c b/src/wrapped/wrappedgdkx112.c index a9b6cd5cb5b137af25ba41ea981c26a694da6502..1cb65c63183488a56c3a446d75d9d02e840797c0 100644 --- a/src/wrapped/wrappedgdkx112.c +++ b/src/wrapped/wrappedgdkx112.c @@ -18,11 +18,9 @@ #include "emu/x64emu_private.h" #include "gtkclass.h" -#ifdef ANDROID - const char* gdkx112Name = "libgdk-x11-2.0.so"; -#else - const char* gdkx112Name = "libgdk-x11-2.0.so.0"; -#endif +const char* gdkx112Name = "libgdk-x11-2.0.so.0"; +#define ALTNAME "libgdk-x11-2.0.so" + #define LIBNAME gdkx112 static char* libname = NULL; @@ -181,10 +179,6 @@ EXPORT uint32_t my_gdk_threads_add_timeout_full(x64emu_t* emu, int priotity, uin #define CUSTOM_INIT \ libname = lib->name; -#ifdef ANDROID -#define NEEDED_LIBS "libgobject-2.0.so", "libgio-2.0.so", "libgdk_pixbuf-2.0.so" -#else #define NEEDED_LIBS "libgobject-2.0.so.0", "libgio-2.0.so.0", "libgdk_pixbuf-2.0.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedgio2.c b/src/wrapped/wrappedgio2.c index 638bc14c743457a4f0cf7b0cc6a47e45827ab2fc..4a1398248905b5595321f94f23511b58b11b3f73 100644 --- a/src/wrapped/wrappedgio2.c +++ b/src/wrapped/wrappedgio2.c @@ -20,11 +20,9 @@ #include "myalign.h" #include "gtkclass.h" -#ifdef ANDROID - const char* gio2Name = "libgio-2.0.so"; -#else - const char* gio2Name = "libgio-2.0.so.0"; -#endif +const char* gio2Name = "libgio-2.0.so.0"; +#define ALTNAME "libgio-2.0.so" + #define LIBNAME gio2 typedef size_t(*LFv_t)(void); @@ -383,27 +381,27 @@ EXPORT void my_g_task_return_pointer(x64emu_t* emu, void* task, void* result, vo my->g_task_return_pointer(task, result, findGDestroyNotifyFct(destroy)); } -EXPORT void my_g_dbus_proxy_new(x64emu_t* emu, void* connection, int flags, void* info, void* name, void* path, void* interface, void* cancellable, void* cb, void* data) +EXPORT void my_g_dbus_proxy_new(x64emu_t* emu, void* connection, uint32_t flags, void* info, void* name, void* path, void* interface, void* cancellable, void* cb, void* data) { my->g_dbus_proxy_new(connection, flags, info, name, path, interface, cancellable, findGAsyncReadyCallbackFct(cb), data); } -EXPORT void my_g_dbus_proxy_new_for_bus(x64emu_t* emu, int bus_type, int flags, void* info, void* name, void* path, void* interface, void* cancellable, void* cb, void* data) +EXPORT void my_g_dbus_proxy_new_for_bus(x64emu_t* emu, int bus_type, uint32_t flags, void* info, void* name, void* path, void* interface, void* cancellable, void* cb, void* data) { my->g_dbus_proxy_new_for_bus(bus_type, flags, info, name, path, interface, cancellable, findGAsyncReadyCallbackFct(cb), data); } -EXPORT void my_g_dbus_proxy_call(x64emu_t* emu, void* proxy, void* name, void* param, int flags, int timeout, void* cancellable, void* cb, void* data) +EXPORT void my_g_dbus_proxy_call(x64emu_t* emu, void* proxy, void* name, void* param, uint32_t flags, int timeout, void* cancellable, void* cb, void* data) { my->g_dbus_proxy_call(proxy, name, param, flags, timeout, cancellable, findGAsyncReadyCallbackFct(cb), data); } -EXPORT void my_g_dbus_proxy_call_with_unix_fd_list(x64emu_t* emu, void* proxy, void* name, void* param, int flags, int timeout, void* fd_list, void* cancellable, void* cb, void* data) +EXPORT void my_g_dbus_proxy_call_with_unix_fd_list(x64emu_t* emu, void* proxy, void* name, void* param, uint32_t flags, int timeout, void* fd_list, void* cancellable, void* cb, void* data) { my->g_dbus_proxy_call_with_unix_fd_list(proxy, name, param, flags, timeout, fd_list, cancellable, findGAsyncReadyCallbackFct(cb), data); } -EXPORT void* my_g_dbus_object_manager_client_new_for_bus_sync(x64emu_t* emu, size_t bus, int flags, void* name, void* path, void* cb, void* data, void* destroy, void* cancellable, void* error) +EXPORT void* my_g_dbus_object_manager_client_new_for_bus_sync(x64emu_t* emu, size_t bus, uint32_t flags, void* name, void* path, void* cb, void* data, void* destroy, void* cancellable, void* error) { return my->g_dbus_object_manager_client_new_for_bus_sync(bus, flags, name, path, findGDBusProxyTypeFuncFct(cb), data, findGDestroyNotifyFct(destroy), cancellable, error); } @@ -498,12 +496,12 @@ EXPORT void my_g_bus_get(x64emu_t* emu, size_t type, void* cancellable, void* cb my->g_bus_get(type, cancellable, findGAsyncReadyCallbackFct(cb), data); } -EXPORT void my_g_dbus_connection_new(x64emu_t* emu, void* stream, void* guid, int flags, void* observer, void* cancellable, void* cb, void* data) +EXPORT void my_g_dbus_connection_new(x64emu_t* emu, void* stream, void* guid, uint32_t flags, void* observer, void* cancellable, void* cb, void* data) { my->g_dbus_connection_new(stream, guid, flags, observer, cancellable, findGAsyncReadyCallbackFct(cb), data); } -EXPORT void my_g_dbus_connection_new_for_address(x64emu_t* emu, void* address, int flags, void* observer, void* cancellable, void* cb, void* data) +EXPORT void my_g_dbus_connection_new_for_address(x64emu_t* emu, void* address, uint32_t flags, void* observer, void* cancellable, void* cb, void* data) { my->g_dbus_connection_new_for_address(address, flags, observer, cancellable, findGAsyncReadyCallbackFct(cb), data); } @@ -518,17 +516,17 @@ EXPORT void my_g_dbus_connection_flush(x64emu_t* emu, void* connection, void* ca my->g_dbus_connection_flush(connection, cancellable, findGAsyncReadyCallbackFct(cb), data); } -EXPORT void my_g_dbus_connection_call(x64emu_t* emu, void* connection, void* bus, void* object, void* interface, void* method, void* param, void* reply, int flags, int timeout, void* cancellable, void* cb, void* data) +EXPORT void my_g_dbus_connection_call(x64emu_t* emu, void* connection, void* bus, void* object, void* interface, void* method, void* param, void* reply, uint32_t flags, int timeout, void* cancellable, void* cb, void* data) { my->g_dbus_connection_call(connection, bus, object, interface, method, param, reply, flags, timeout, cancellable, findGAsyncReadyCallbackFct(cb), data); } -EXPORT uint32_t my_g_dbus_connection_signal_subscribe(x64emu_t* emu, void* connection, void* sender, void* interface, void* member, void* object, void* arg0, int flags, void* cb, void* data, void* notify) +EXPORT uint32_t my_g_dbus_connection_signal_subscribe(x64emu_t* emu, void* connection, void* sender, void* interface, void* member, void* object, void* arg0, uint32_t flags, void* cb, void* data, void* notify) { return my->g_dbus_connection_signal_subscribe(connection, sender, interface, member, object, arg0, flags, findGDBusSignalCallbackFct(cb), data, findGDestroyNotifyFct(notify)); } -EXPORT void my_g_dbus_connection_send_message_with_reply(x64emu_t* emu, void* connection, void* message, int flags, int timeout, void* serial, void* cancellable, void* cb, void* data) +EXPORT void my_g_dbus_connection_send_message_with_reply(x64emu_t* emu, void* connection, void* message, uint32_t flags, int timeout, void* serial, void* cancellable, void* cb, void* data) { my->g_dbus_connection_send_message_with_reply(connection, message, flags, timeout, serial, cancellable, findGAsyncReadyCallbackFct(cb), data); } @@ -543,27 +541,27 @@ EXPORT uint32_t my_g_dbus_connection_register_object(x64emu_t* emu, void* connec return my->g_dbus_connection_register_object(connection, object, info, findFreeGDBusInterfaceVTable(vtable), data, findGDestroyNotifyFct(notify), error); } -EXPORT uint32_t my_g_bus_watch_name(x64emu_t* emu, size_t type, void* name, int flags, void* appeared, void* vanished, void* data, void* notify) +EXPORT uint32_t my_g_bus_watch_name(x64emu_t* emu, int type, void* name, uint32_t flags, void* appeared, void* vanished, void* data, void* notify) { return my->g_bus_watch_name(type, name, flags, findGBusNameAppearedCallbackFct(appeared), findGBusNameVanishedCallbackFct(vanished), data, findGDestroyNotifyFct(notify)); } -EXPORT uint32_t my_g_bus_watch_name_on_connection(x64emu_t* emu, void* connection, void* name, int flags, void* appeared, void* vanished, void* data, void* notify) +EXPORT uint32_t my_g_bus_watch_name_on_connection(x64emu_t* emu, void* connection, void* name, uint32_t flags, void* appeared, void* vanished, void* data, void* notify) { return my->g_bus_watch_name_on_connection(connection, name, flags, findGBusNameAppearedCallbackFct(appeared), findGBusNameVanishedCallbackFct(vanished), data, findGDestroyNotifyFct(notify)); } -EXPORT uint32_t my_g_bus_own_name(x64emu_t* emu, size_t type, void* name, int flags, void* bus_acquired, void* name_acquired, void* name_lost, void* data, void* notify) +EXPORT uint32_t my_g_bus_own_name(x64emu_t* emu, size_t type, void* name, uint32_t flags, void* bus_acquired, void* name_acquired, void* name_lost, void* data, void* notify) { return my->g_bus_own_name(type, name, flags, findGBusAcquiredCallbackFct(bus_acquired), findGBusNameAcquiredCallbackFct(name_acquired), findGBusNameLostCallbackFct(name_lost), data, findGDestroyNotifyFct(notify)); } -EXPORT uint32_t my_g_bus_own_name_on_connection(x64emu_t* emu, void* connection, void* name, int flags, void* name_acquired, void* name_lost, void* data, void* notify) +EXPORT uint32_t my_g_bus_own_name_on_connection(x64emu_t* emu, void* connection, void* name, uint32_t flags, void* name_acquired, void* name_lost, void* data, void* notify) { return my->g_bus_own_name_on_connection(connection, name, flags, findGBusNameAcquiredCallbackFct(name_acquired), findGBusNameLostCallbackFct(name_lost), data, findGDestroyNotifyFct(notify)); } -EXPORT void my_g_simple_async_result_set_error_va(x64emu_t* emu, void* simple, void* domain, int code, void* fmt, x64_va_list_t V) +EXPORT void my_g_simple_async_result_set_error_va(x64emu_t* emu, void* simple, uint32_t domain, int code, void* fmt, x64_va_list_t V) { #ifdef CONVERT_VALIST CONVERT_VALIST(V); @@ -573,14 +571,14 @@ EXPORT void my_g_simple_async_result_set_error_va(x64emu_t* emu, void* simple, v my->g_simple_async_result_set_error_va(simple, domain, code, fmt, VARARGS); } -EXPORT void my_g_simple_async_result_set_error(x64emu_t* emu, void* simple, void* domain, int code, void* fmt, uintptr_t* b) +EXPORT void my_g_simple_async_result_set_error(x64emu_t* emu, void* simple, uint32_t domain, int code, void* fmt, uintptr_t* b) { myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 4); PREPARE_VALIST; my->g_simple_async_result_set_error_va(simple, domain, code, fmt, VARARGS); } -EXPORT void* my_g_initable_new(x64emu_t* emu, void* type, void* cancel, void* err, void* first, uintptr_t* b) +EXPORT void* my_g_initable_new(x64emu_t* emu, size_t type, void* cancel, void* err, void* first, uintptr_t* b) { #if 0 // look for number of pairs @@ -601,7 +599,7 @@ EXPORT void* my_g_initable_new(x64emu_t* emu, void* type, void* cancel, void* er return my->g_initable_new_valist(type, first, VARARGS, cancel, err); } -EXPORT void* my_g_initable_new_valist(x64emu_t* emu, void* type, void* first, x64_va_list_t V, void* cancel, void* err) +EXPORT void* my_g_initable_new_valist(x64emu_t* emu, size_t type, void* first, x64_va_list_t V, void* cancel, void* err) { #ifdef CONVERT_VALIST CONVERT_VALIST(V); @@ -633,10 +631,6 @@ EXPORT void my_g_input_stream_read_async(x64emu_t* emu, void* stream, void* buff SetGApplicationID(my->g_application_get_type()); \ SetGDBusProxyID(my->g_dbus_proxy_get_type()); -#ifdef ANDROID -#define NEEDED_LIBS "libgmodule-2.0.so" -#else #define NEEDED_LIBS "libgmodule-2.0.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedgio2_private.h b/src/wrapped/wrappedgio2_private.h index 22f92831f1b73faafc12f476093cfe1f5b2d225e..a3f5223598643d2dfaf5f6f4881d4db91836aad3 100644 --- a/src/wrapped/wrappedgio2_private.h +++ b/src/wrapped/wrappedgio2_private.h @@ -1,17 +1,17 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif //GO(_fini, GO(g_action_activate, vFpp) -//GO(g_action_change_state, +GO(g_action_change_state, vFpp) GO(g_action_get_enabled, iFp) GO(g_action_get_name, pFp) -//GO(g_action_get_parameter_type, +GO(g_action_get_parameter_type, pFp) GO(g_action_get_state, pFp) -//GO(g_action_get_state_hint, +GO(g_action_get_state_hint, pFp) GO(g_action_get_state_type, pFp) -//GO(g_action_get_type, +GO(g_action_get_type, LFv) GO(g_action_group_action_added, vFpp) GO(g_action_group_action_enabled_changed, vFppi) GO(g_action_group_action_removed, vFpp) @@ -29,10 +29,10 @@ GO(g_action_group_list_actions, pFp) GO(g_action_group_query_action, iFppppppp) GO(g_action_map_add_action, vFpp) GO(g_action_map_add_action_entries, vFppip) -//GO(g_action_map_get_type, +GO(g_action_map_get_type, LFv) GO(g_action_map_lookup_action, pFpp) GO(g_action_map_remove_action, vFpp) -//GO(g_action_name_is_valid, +GO(g_action_name_is_valid, iFp) GO(g_action_parse_detailed_name, iFpppp) GO(g_action_print_detailed_name, pFpp) GO(g_app_info_add_supports_type, iFppp) @@ -71,16 +71,16 @@ GO(g_app_info_set_as_last_used_for_type, iFppp) GO(g_app_info_should_show, iFp) GO(g_app_info_supports_files, iFp) GO(g_app_info_supports_uris, iFp) -//GO(g_app_launch_context_get_display, +GO(g_app_launch_context_get_display, pFppp) GO(g_app_launch_context_get_environment, pFp) GO(g_app_launch_context_get_startup_notify_id, pFppp) GO(g_app_launch_context_get_type, LFv) GO(g_app_launch_context_launch_failed, vFpp) GO(g_app_launch_context_new, pFv) GO(g_app_launch_context_setenv, vFppp) -//GO(g_app_launch_context_unsetenv, +GO(g_app_launch_context_unsetenv, vFpp) GO(g_application_activate, vFp) -GO(g_application_add_main_option, vFppCuupp) +GO(g_application_add_main_option, vFppcuupp) GO(g_application_add_main_option_entries, vFpp) GO(g_application_add_option_group, vFpp) GO(g_application_command_line_create_file_for_arg, pFpp) @@ -93,24 +93,24 @@ GO(g_application_command_line_get_is_remote, iFp) GO(g_application_command_line_get_options_dict, pFp) GO(g_application_command_line_get_platform_data, pFp) GO(g_application_command_line_get_stdin, pFp) -//GO(g_application_command_line_get_type, -//GO(g_application_command_line_print, -//GO(g_application_command_line_printerr, +GO(g_application_command_line_get_type, LFv) +//GOM(g_application_command_line_print, vFppV) +//GOM(g_application_command_line_printerr, vFppV) GO(g_application_command_line_set_exit_status, vFpi) -//GO(g_application_flags_get_type, -//GO(g_application_get_application_id, +GO(g_application_flags_get_type, LFv) +GO(g_application_get_application_id, pFp) GO(g_application_get_dbus_connection, pFp) -//GO(g_application_get_dbus_object_path, +GO(g_application_get_dbus_object_path, pFp) GO(g_application_get_default, pFv) GO(g_application_get_flags, uFp) GO(g_application_get_inactivity_timeout, uFp) -//GO(g_application_get_is_registered, -//GO(g_application_get_is_remote, +GO(g_application_get_is_registered, iFp) +GO(g_application_get_is_remote, iFp) GO(g_application_get_resource_base_path, pFp) GO(g_application_get_type, LFv) -//GO(g_application_hold, -//GO(g_application_id_is_valid, -//GO(g_application_mark_busy, +GO(g_application_hold, vFp) +GO(g_application_id_is_valid, iFp) +GO(g_application_mark_busy, vFp) GO(g_application_new, pFpu) GO(g_application_open, vFppip) GO(g_application_quit, vFp) @@ -119,32 +119,32 @@ GO(g_application_release, vFp) GO(g_application_run, iFpip) GO(g_application_send_notification, vFppp) GO(g_application_set_action_group, vFpp) -//GO(g_application_set_application_id, -//GO(g_application_set_default, +GO(g_application_set_application_id, vFpp) +GO(g_application_set_default, vFp) GO(g_application_set_flags, vFpu) GO(g_application_set_inactivity_timeout, vFpu) -//GO(g_application_set_resource_base_path, -//GO(g_application_unmark_busy, +GO(g_application_set_resource_base_path, vFpp) +GO(g_application_unmark_busy, vFp) GO(g_application_withdraw_notification, vFpp) -//GO(g_ask_password_flags_get_type, +GO(g_ask_password_flags_get_type, LFv) GO(g_async_initable_get_type, LFv) GOM(g_async_initable_init_async, vFEpippp) GO(g_async_initable_init_finish, iFppp) -GOM(g_async_initable_new_async, vFEiippppV) +GOM(g_async_initable_new_async, vFELippppV) GO(g_async_initable_new_finish, pFppp) -GOM(g_async_initable_new_valist_async, vFEipAippp) -GOM(g_async_initable_newv_async, vFEiupippp) +GOM(g_async_initable_new_valist_async, vFELpAippp) +GOM(g_async_initable_newv_async, vFELupippp) GO(g_async_result_get_source_object, pFp) GO(g_async_result_get_type, LFv) GO(g_async_result_get_user_data, pFp) GO(g_async_result_is_tagged, iFpp) -//GO(g_async_result_legacy_propagate_error, +GO(g_async_result_legacy_propagate_error, iFpp) GO(g_buffered_input_stream_fill, lFplpp) -//GO(g_buffered_input_stream_fill_async, +//GOM(g_buffered_input_stream_fill_async, vFplippp) GO(g_buffered_input_stream_fill_finish, lFppp) GO(g_buffered_input_stream_get_available, LFp) -//GO(g_buffered_input_stream_get_buffer_size, -//GO(g_buffered_input_stream_get_type, +GO(g_buffered_input_stream_get_buffer_size, LFp) +GO(g_buffered_input_stream_get_type, LFv) GO(g_buffered_input_stream_new, pFp) GO(g_buffered_input_stream_new_sized, pFpL) GO(g_buffered_input_stream_peek, LFppLL) @@ -153,7 +153,7 @@ GO(g_buffered_input_stream_read_byte, iFppp) GO(g_buffered_input_stream_set_buffer_size, vFpL) GO(g_buffered_output_stream_get_auto_grow, iFp) GO(g_buffered_output_stream_get_buffer_size, LFp) -//GO(g_buffered_output_stream_get_type, +GO(g_buffered_output_stream_get_type, LFv) GO(g_buffered_output_stream_new, pFp) GO(g_buffered_output_stream_new_sized, pFpL) GO(g_buffered_output_stream_set_auto_grow, vFpi) @@ -163,19 +163,19 @@ GO(g_bus_get_finish, pFpp) GO(g_bus_get_sync, pFipp) GO(g_bus_name_owner_flags_get_type, LFv) GO(g_bus_name_watcher_flags_get_type, LFv) -GOM(g_bus_own_name, uFEipippppp) -GOM(g_bus_own_name_on_connection, uFEppipppp) -GO(g_bus_own_name_on_connection_with_closures, uFppipp) -GO(g_bus_own_name_with_closures, uFppippp) +GOM(g_bus_own_name, uFEipuppppp) +GOM(g_bus_own_name_on_connection, uFEppupppp) +GO(g_bus_own_name_on_connection_with_closures, uFppupp) +GO(g_bus_own_name_with_closures, uFipuppp) GO(g_bus_type_get_type, LFv) GO(g_bus_unown_name, vFu) GO(g_bus_unwatch_name, vFu) -GOM(g_bus_watch_name, uFEipipppp) -GOM(g_bus_watch_name_on_connection, uFEppipppp) -GO(g_bus_watch_name_on_connection_with_closures, uFppipp) // mmm closure, wrapped or unwrapped? -GO(g_bus_watch_name_with_closures, uFipipp) +GOM(g_bus_watch_name, uFEipupppp) +GOM(g_bus_watch_name_on_connection, uFEppupppp) +GO(g_bus_watch_name_on_connection_with_closures, uFppupp) // mmm closure, wrapped or unwrapped? +GO(g_bus_watch_name_with_closures, uFipupp) GO(g_bytes_icon_get_bytes, pFp) -//GO(g_bytes_icon_get_type, +GO(g_bytes_icon_get_type, LFv) GO(g_bytes_icon_new, pFp) GO(g_cancellable_cancel, vFp) GOM(g_cancellable_connect, LFEpppp) @@ -211,18 +211,18 @@ GO(g_content_type_is_a, iFpp) GO(g_content_type_is_unknown, iFp) GO(g_content_types_get_registered, pFv) GO(g_converter_convert, uFppLpLuppp) -//GO(g_converter_flags_get_type, -//GO(g_converter_get_type, +GO(g_converter_flags_get_type, LFv) +GO(g_converter_get_type, LFv) GO(g_converter_input_stream_get_converter, pFp) -//GO(g_converter_input_stream_get_type, +GO(g_converter_input_stream_get_type, LFv) GO(g_converter_input_stream_new, pFpp) GO(g_converter_output_stream_get_converter, pFp) -//GO(g_converter_output_stream_get_type, +GO(g_converter_output_stream_get_type, LFv) GO(g_converter_output_stream_new, pFpp) -//GO(g_converter_reset, -//GO(g_converter_result_get_type, +GO(g_converter_reset, vFp) +GO(g_converter_result_get_type, LFv) GO(g_credentials_get_native, pFpu) -//GO(g_credentials_get_type, +GO(g_credentials_get_type, LFv) GO(g_credentials_get_unix_pid, iFpp) GO(g_credentials_get_unix_user, uFpp) GO(g_credentials_is_same_user, iFppp) @@ -230,33 +230,33 @@ GO(g_credentials_new, pFv) GO(g_credentials_set_native, vFpup) GO(g_credentials_set_unix_user, iFpup) GO(g_credentials_to_string, pFp) -//GO(g_credentials_type_get_type, +GO(g_credentials_type_get_type, LFv) GO(g_data_input_stream_get_byte_order, uFp) GO(g_data_input_stream_get_newline_type, uFp) -//GO(g_data_input_stream_get_type, +GO(g_data_input_stream_get_type, LFv) GO(g_data_input_stream_new, pFp) GO(g_data_input_stream_read_byte, CFppp) GO(g_data_input_stream_read_int16, wFppp) GO(g_data_input_stream_read_int32, iFppp) GO(g_data_input_stream_read_int64, lFppp) -//GO(g_data_input_stream_read_line, -//GO(g_data_input_stream_read_line_async, -//GO(g_data_input_stream_read_line_finish, -//GO(g_data_input_stream_read_line_finish_utf8, +GO(g_data_input_stream_read_line, pFpppp) +//GOM(g_data_input_stream_read_line_async, vFpippp) +GO(g_data_input_stream_read_line_finish, pFpppp) +GO(g_data_input_stream_read_line_finish_utf8, pFpppp) GO(g_data_input_stream_read_line_utf8, pFpppp) GO(g_data_input_stream_read_uint16, WFppp) GO(g_data_input_stream_read_uint32, uFppp) GO(g_data_input_stream_read_uint64, LFppp) GO(g_data_input_stream_read_until, pFppppp) -//GO(g_data_input_stream_read_until_async, -//GO(g_data_input_stream_read_until_finish, +//GOM(g_data_input_stream_read_until_async, vFppippp) +GO(g_data_input_stream_read_until_finish, pFpppp) GO(g_data_input_stream_read_upto, pFpplppp) -//GO(g_data_input_stream_read_upto_async, +//GOM(g_data_input_stream_read_upto_async, vFpplippp) GO(g_data_input_stream_read_upto_finish, pFpppp) GO(g_data_input_stream_set_byte_order, vFpu) GO(g_data_input_stream_set_newline_type, vFpu) GO(g_data_output_stream_get_byte_order, uFp) -//GO(g_data_output_stream_get_type, +GO(g_data_output_stream_get_type, LFv) GO(g_data_output_stream_new, pFp) GO(g_data_output_stream_put_byte, iFpCpp) GO(g_data_output_stream_put_int16, iFpwpp) @@ -267,13 +267,13 @@ GO(g_data_output_stream_put_uint16, iFpWpp) GO(g_data_output_stream_put_uint32, iFpupp) GO(g_data_output_stream_put_uint64, iFpLpp) GO(g_data_output_stream_set_byte_order, vFpu) -//GO(g_data_stream_byte_order_get_type, -//GO(g_data_stream_newline_type_get_type, +GO(g_data_stream_byte_order_get_type, LFv) +GO(g_data_stream_newline_type_get_type, LFv) GO(g_dbus_action_group_get, pFppp) -//GO(g_dbus_action_group_get_type, -//GO(g_dbus_address_escape_value, +GO(g_dbus_action_group_get_type, LFv) +GO(g_dbus_address_escape_value, pFp) GO(g_dbus_address_get_for_bus_sync, pFipp) -//GO(g_dbus_address_get_stream, +//GOM(g_dbus_address_get_stream, vFpppp) GO(g_dbus_address_get_stream_finish, pFppp) GO(g_dbus_address_get_stream_sync, pFpppp) GO(g_dbus_annotation_info_get_type, LFv) @@ -285,15 +285,15 @@ GO(g_dbus_arg_info_ref, pFp) GO(g_dbus_arg_info_unref, vFp) GO(g_dbus_auth_observer_allow_mechanism, iFpp) GO(g_dbus_auth_observer_authorize_authenticated_peer, iFppp) -//GO(g_dbus_auth_observer_get_type, +GO(g_dbus_auth_observer_get_type, LFv) GO(g_dbus_auth_observer_new, pFv) GO(g_dbus_call_flags_get_type, LFv) GO(g_dbus_capability_flags_get_type, LFv) GOM(g_dbus_connection_add_filter, uFEpppp) -GOM(g_dbus_connection_call, vFEpppppppiippp) +GOM(g_dbus_connection_call, vFEpppppppuippp) GO(g_dbus_connection_call_finish, pFppp) GO(g_dbus_connection_call_sync, pFpppppppuipp) -//GO(g_dbus_connection_call_with_unix_fd_list, +//GOM(g_dbus_connection_call_with_unix_fd_list, vFpppppppuipppp) GO(g_dbus_connection_call_with_unix_fd_list_finish, pFpppp) GO(g_dbus_connection_call_with_unix_fd_list_sync, pFpppppppuipppp) GOM(g_dbus_connection_close, vFEpppp) @@ -315,37 +315,37 @@ GO(g_dbus_connection_get_stream, pFp) GO(g_dbus_connection_get_type, LFv) GO(g_dbus_connection_get_unique_name, pFp) GO(g_dbus_connection_is_closed, iFp) -GOM(g_dbus_connection_new, vFEppipppp) +GOM(g_dbus_connection_new, vFEppupppp) GO(g_dbus_connection_new_finish, pFpp) -GOM(g_dbus_connection_new_for_address, vFEpipppp) +GOM(g_dbus_connection_new_for_address, vFEpupppp) GO(g_dbus_connection_new_for_address_finish, pFpp) GO(g_dbus_connection_new_for_address_sync, pFpuppp) GO(g_dbus_connection_new_sync, pFppuppp) GOM(g_dbus_connection_register_object, uFEppppppp) -//GOM(g_dbus_connection_register_subtree, uFEppppppp) // vtable need wrapping +//GOM(g_dbus_connection_register_subtree, uFEpppuppp) // vtable need wrapping GO(g_dbus_connection_remove_filter, vFpu) GO(g_dbus_connection_send_message, iFppupp) -GOM(g_dbus_connection_send_message_with_reply, vFEppiipppp) //TODO: same volatile argument... +GOM(g_dbus_connection_send_message_with_reply, vFEppuipppp) //TODO: same volatile argument... GO(g_dbus_connection_send_message_with_reply_finish, pFppp) GO(g_dbus_connection_send_message_with_reply_sync, pFppuippp) GO(g_dbus_connection_set_exit_on_close, vFpi) -GOM(g_dbus_connection_signal_subscribe, uFEppppppippp) +GOM(g_dbus_connection_signal_subscribe, uFEppppppuppp) GO(g_dbus_connection_signal_unsubscribe, vFpu) GO(g_dbus_connection_start_message_processing, vFp) -//GO(g_dbus_connection_unexport_action_group, +GO(g_dbus_connection_unexport_action_group, vFpu) GO(g_dbus_connection_unexport_menu_model, vFpu) GO(g_dbus_connection_unregister_object, iFpu) GO(g_dbus_connection_unregister_subtree, iFpu) GO(g_dbus_error_encode_gerror, pFp) -//GO(g_dbus_error_get_remote_error, -//GO(g_dbus_error_get_type, +GO(g_dbus_error_get_remote_error, pFp) +GO(g_dbus_error_get_type, LFv) GO(g_dbus_error_is_remote_error, iFp) GO(g_dbus_error_new_for_dbus_error, pFpp) GO(g_dbus_error_quark, uFv) -//GO(g_dbus_error_register_error, +GO(g_dbus_error_register_error, iFuip) GO(g_dbus_error_register_error_domain, vFpppu) -//GO(g_dbus_error_set_dbus_error, -//GO(g_dbus_error_set_dbus_error_valist, +//GOM(g_dbus_error_set_dbus_error, vFppppV) +//GOM(g_dbus_error_set_dbus_error_valist, vFppppA) GO(g_dbus_error_strip_remote_error, iFp) GO(g_dbus_error_unregister_error, iFuip) GO(g_dbus_generate_guid, pFv) @@ -353,8 +353,8 @@ GO(g_dbus_gvalue_to_gvariant, pFpp) GO(g_dbus_gvariant_to_gvalue, vFpp) GO(g_dbus_interface_dup_object, pFp) GO(g_dbus_interface_get_info, pFp) -//GO(g_dbus_interface_get_object, -//GO(g_dbus_interface_get_type, +GO(g_dbus_interface_get_object, pFp) +GO(g_dbus_interface_get_type, LFv) GO(g_dbus_interface_info_cache_build, vFp) GO(g_dbus_interface_info_cache_release, vFp) GO(g_dbus_interface_info_generate_xml, vFpup) @@ -366,19 +366,19 @@ GO(g_dbus_interface_info_ref, pFp) GO(g_dbus_interface_info_unref, vFp) GO(g_dbus_interface_set_object, vFpp) GO(g_dbus_interface_skeleton_export, iFpppp) -//GO(g_dbus_interface_skeleton_flags_get_type, -//GO(g_dbus_interface_skeleton_flush, +GO(g_dbus_interface_skeleton_flags_get_type, LFv) +GO(g_dbus_interface_skeleton_flush, vFp) GO(g_dbus_interface_skeleton_get_connection, pFp) GO(g_dbus_interface_skeleton_get_connections, pFp) GO(g_dbus_interface_skeleton_get_flags, uFp) GO(g_dbus_interface_skeleton_get_info, pFp) GO(g_dbus_interface_skeleton_get_object_path, pFp) GO(g_dbus_interface_skeleton_get_properties, pFp) -//GO(g_dbus_interface_skeleton_get_type, -//GO(g_dbus_interface_skeleton_get_vtable, +GO(g_dbus_interface_skeleton_get_type, LFv) +//GOM(g_dbus_interface_skeleton_get_vtable, pFp) GO(g_dbus_interface_skeleton_has_connection, iFpp) GO(g_dbus_interface_skeleton_set_flags, vFpu) -//GO(g_dbus_interface_skeleton_unexport, +GO(g_dbus_interface_skeleton_unexport, vFp) GO(g_dbus_interface_skeleton_unexport_from_connection, vFpp) GO(g_dbus_is_address, iFp) GO(g_dbus_is_guid, iFp) @@ -418,9 +418,9 @@ GO(g_dbus_message_lock, vFp) GO(g_dbus_message_new, pFv) GO(g_dbus_message_new_from_blob, pFpLup) GO(g_dbus_message_new_method_call, pFpppp) -//GO2(g_dbus_message_new_method_error, pFpppV, g_dbus_message_new_method_error_valist) +//GOM(g_dbus_message_new_method_error, pFpppV) GO(g_dbus_message_new_method_error_literal, pFppp) -//GO(g_dbus_message_new_method_error_valist, pFpppp) +//GOM(g_dbus_message_new_method_error_valist, pFpppA) GO(g_dbus_message_new_method_reply, pFp) GO(g_dbus_message_new_signal, pFppp) GO(g_dbus_message_print, pFpu) @@ -458,9 +458,9 @@ GO(g_dbus_method_invocation_get_sender, pFp) GO(g_dbus_method_invocation_get_type, LFv) GO(g_dbus_method_invocation_get_user_data, pFp) GO(g_dbus_method_invocation_return_dbus_error, vFppp) -//GO2(g_dbus_method_invocation_return_error, vFpuipV, g_dbus_method_invocation_return_error_valist) +//GOM(g_dbus_method_invocation_return_error, vFpuipV) GO(g_dbus_method_invocation_return_error_literal, vFpuip) -//GO(g_dbus_method_invocation_return_error_valist, vFpuipp) +//GOM(g_dbus_method_invocation_return_error_valist, vFpuipA) GO(g_dbus_method_invocation_return_gerror, vFpp) GO(g_dbus_method_invocation_return_value, vFpp) GO(g_dbus_method_invocation_return_value_with_unix_fd_list, vFppp) @@ -481,43 +481,43 @@ GO(g_dbus_object_manager_client_get_flags, uFp) GO(g_dbus_object_manager_client_get_name, pFp) GO(g_dbus_object_manager_client_get_name_owner, pFp) GO(g_dbus_object_manager_client_get_type, LFv) -//GOM(g_dbus_object_manager_client_new, +//GOM(g_dbus_object_manager_client_new, vFpupppppppp) GO(g_dbus_object_manager_client_new_finish, pFpp) -//GOM(g_dbus_object_manager_client_new_for_bus, +//GOM(g_dbus_object_manager_client_new_for_bus, vFiupppppppp) GO(g_dbus_object_manager_client_new_for_bus_finish, pFpp) -GOM(g_dbus_object_manager_client_new_for_bus_sync, pFEiippppppp) -//GOM(g_dbus_object_manager_client_new_sync, +GOM(g_dbus_object_manager_client_new_for_bus_sync, pFEiuppppppp) +//GOM(g_dbus_object_manager_client_new_sync, pFpuppppppp) //GOM(g_dbus_object_manager_get_interface, pFEppp) //struct GDBusObjectManagerIface is full of callbacks GO(g_dbus_object_manager_get_object, pFpp) GO(g_dbus_object_manager_get_object_path, pFp) GO(g_dbus_object_manager_get_objects, pFp) -//GO(g_dbus_object_manager_get_type, -//GO(g_dbus_object_manager_server_export, +GO(g_dbus_object_manager_get_type, LFv) +GO(g_dbus_object_manager_server_export, vFpp) GO(g_dbus_object_manager_server_export_uniquely, vFpp) GO(g_dbus_object_manager_server_get_connection, pFp) -//GO(g_dbus_object_manager_server_get_type, +GO(g_dbus_object_manager_server_get_type, LFv) GO(g_dbus_object_manager_server_is_exported, iFpp) GO(g_dbus_object_manager_server_new, pFp) GO(g_dbus_object_manager_server_set_connection, vFpp) GO(g_dbus_object_manager_server_unexport, iFpp) GO(g_dbus_object_proxy_get_connection, pFp) -//GO(g_dbus_object_proxy_get_type, +GO(g_dbus_object_proxy_get_type, LFv) GO(g_dbus_object_proxy_new, pFpp) -//GO(g_dbus_object_skeleton_add_interface, -//GO(g_dbus_object_skeleton_flush, -//GO(g_dbus_object_skeleton_get_type, +GO(g_dbus_object_skeleton_add_interface, vFpp) +GO(g_dbus_object_skeleton_flush, vFp) +GO(g_dbus_object_skeleton_get_type, LFv) GO(g_dbus_object_skeleton_new, pFp) GO(g_dbus_object_skeleton_remove_interface, vFpp) -//GO(g_dbus_object_skeleton_remove_interface_by_name, +GO(g_dbus_object_skeleton_remove_interface_by_name, vFpp) GO(g_dbus_object_skeleton_set_object_path, vFpp) -//GO(g_dbus_property_info_flags_get_type, +GO(g_dbus_property_info_flags_get_type, LFv) GO(g_dbus_property_info_get_type, LFv) GO(g_dbus_property_info_ref, pFp) GO(g_dbus_property_info_unref, vFp) -GOM(g_dbus_proxy_call, vFEpppiippp) +GOM(g_dbus_proxy_call, vFEpppuippp) GO(g_dbus_proxy_call_finish, pFppp) GO(g_dbus_proxy_call_sync, pFpppuipp) -GOM(g_dbus_proxy_call_with_unix_fd_list, vFEpppiipppp) +GOM(g_dbus_proxy_call_with_unix_fd_list, vFEpppuipppp) GO(g_dbus_proxy_call_with_unix_fd_list_finish, pFpppp) GO(g_dbus_proxy_call_with_unix_fd_list_sync, pFpppuipppp) GO(g_dbus_proxy_flags_get_type, LFv) @@ -532,159 +532,159 @@ GO(g_dbus_proxy_get_name, pFp) GO(g_dbus_proxy_get_name_owner, pFp) GO(g_dbus_proxy_get_object_path, pFp) GO(g_dbus_proxy_get_type, LFv) -GOM(g_dbus_proxy_new, vFEpippppppp) +GOM(g_dbus_proxy_new, vFEpuppppppp) GO(g_dbus_proxy_new_finish, pFpp) -GOM(g_dbus_proxy_new_for_bus, vFEiippppppp) +GOM(g_dbus_proxy_new_for_bus, vFEiuppppppp) GO(g_dbus_proxy_new_for_bus_finish, pFpp) GO(g_dbus_proxy_new_for_bus_sync, pFiupppppp) GO(g_dbus_proxy_new_sync, pFpupppppp) GO(g_dbus_proxy_set_cached_property, vFppp) GO(g_dbus_proxy_set_default_timeout, vFpi) GO(g_dbus_proxy_set_interface_info, vFpp) -//GO(g_dbus_send_message_flags_get_type, -//GO(g_dbus_server_flags_get_type, -//GO(g_dbus_server_get_client_address, +GO(g_dbus_send_message_flags_get_type, LFv) +GO(g_dbus_server_flags_get_type, LFv) +GO(g_dbus_server_get_client_address, pFp) GO(g_dbus_server_get_flags, uFp) GO(g_dbus_server_get_guid, pFp) -//GO(g_dbus_server_get_type, +GO(g_dbus_server_get_type, LFv) GO(g_dbus_server_is_active, iFp) GO(g_dbus_server_new_sync, pFpupppp) -//GO(g_dbus_server_start, -//GO(g_dbus_server_stop, -//GO(g_dbus_signal_flags_get_type, +GO(g_dbus_server_start, vFp) +GO(g_dbus_server_stop, vFp) +GO(g_dbus_signal_flags_get_type, LFv) GO(g_dbus_signal_info_get_type, LFv) GO(g_dbus_signal_info_ref, pFp) GO(g_dbus_signal_info_unref, vFp) GO(g_dbus_subtree_flags_get_type, LFv) -//GO(g_desktop_app_info_get_action_name, -//GO(g_desktop_app_info_get_boolean, +GO(g_desktop_app_info_get_action_name, pFpp) +GO(g_desktop_app_info_get_boolean, iFpp) GO(g_desktop_app_info_get_categories, pFp) GO(g_desktop_app_info_get_filename, pFp) GO(g_desktop_app_info_get_generic_name, pFp) -//GO(g_desktop_app_info_get_implementations, +GO(g_desktop_app_info_get_implementations, pFp) GO(g_desktop_app_info_get_is_hidden, iFp) GO(g_desktop_app_info_get_keywords, pFp) GO(g_desktop_app_info_get_nodisplay, iFp) GO(g_desktop_app_info_get_show_in, iFpp) -//GO(g_desktop_app_info_get_startup_wm_class, +GO(g_desktop_app_info_get_startup_wm_class, pFp) GO(g_desktop_app_info_get_string, pFpp) GO(g_desktop_app_info_get_type, LFv) -//GO(g_desktop_app_info_has_key, -//GO(g_desktop_app_info_launch_action, -//GO(g_desktop_app_info_launch_uris_as_manager, -//GO(g_desktop_app_info_list_actions, -//GO(g_desktop_app_info_lookup_get_default_for_uri_scheme, +GO(g_desktop_app_info_has_key, iFpp) +GO(g_desktop_app_info_launch_action, vFppp) +//GOM(g_desktop_app_info_launch_uris_as_manager, iFpppuppppp) +GO(g_desktop_app_info_list_actions, pFp) +GO(g_desktop_app_info_lookup_get_default_for_uri_scheme, pFpp) GO(g_desktop_app_info_lookup_get_type, LFv) GO(g_desktop_app_info_new, pFp) GO(g_desktop_app_info_new_from_filename, pFp) GO(g_desktop_app_info_new_from_keyfile, pFp) -//GO(g_desktop_app_info_search, +GO(g_desktop_app_info_search, pFp) GO(g_desktop_app_info_set_desktop_env, vFp) -//GO(g_drive_can_eject, -//GO(g_drive_can_poll_for_media, -//GO(g_drive_can_start, -//GO(g_drive_can_start_degraded, +GO(g_drive_can_eject, iFp) +GO(g_drive_can_poll_for_media, iFp) +GO(g_drive_can_start, iFp) +GO(g_drive_can_start_degraded, iFp) GO(g_drive_can_stop, iFp) -//GO(g_drive_eject, -//GO(g_drive_eject_finish, -//GO(g_drive_eject_with_operation, +//GOM(g_drive_eject, vFpuppp) +GO(g_drive_eject_finish, iFppp) +//GOM(g_drive_eject_with_operation, vFpupppp) GO(g_drive_eject_with_operation_finish, iFppp) GO(g_drive_enumerate_identifiers, pFp) -//GO(g_drive_get_icon, +GO(g_drive_get_icon, pFp) GO(g_drive_get_identifier, pFpp) GO(g_drive_get_name, pFp) GO(g_drive_get_sort_key, pFp) GO(g_drive_get_start_stop_type, uFp) GO(g_drive_get_symbolic_icon, pFp) -//GO(g_drive_get_type, +GO(g_drive_get_type, LFv) GO(g_drive_get_volumes, pFp) -//GO(g_drive_has_media, -//GO(g_drive_has_volumes, -//GO(g_drive_is_media_check_automatic, -//GO(g_drive_is_media_removable, -//GO(g_drive_poll_for_media, -//GO(g_drive_poll_for_media_finish, -//GO(g_drive_start, -//GO(g_drive_start_finish, -//GO(g_drive_start_flags_get_type, -//GO(g_drive_start_stop_type_get_type, -//GO(g_drive_stop, -//GO(g_drive_stop_finish, +GO(g_drive_has_media, iFp) +GO(g_drive_has_volumes, iFp) +GO(g_drive_is_media_check_automatic, iFp) +GO(g_drive_is_media_removable, iFp) +//GOM(g_drive_poll_for_media, vFpppp) +GO(g_drive_poll_for_media_finish, iFppp) +//GOM(g_drive_start, vFpupppp) +GO(g_drive_start_finish, iFppp) +GO(g_drive_start_flags_get_type, LFv) +GO(g_drive_start_stop_type_get_type, LFv) +//GOM(g_drive_stop, vFpupppp) +GO(g_drive_stop_finish, iFppp) GO(g_emblemed_icon_add_emblem, vFpp) -//GO(g_emblemed_icon_clear_emblems, +GO(g_emblemed_icon_clear_emblems, vFp) GO(g_emblemed_icon_get_emblems, pFp) GO(g_emblemed_icon_get_icon, pFp) -//GO(g_emblemed_icon_get_type, +GO(g_emblemed_icon_get_type, LFv) GO(g_emblemed_icon_new, pFpp) GO(g_emblem_get_icon, pFp) GO(g_emblem_get_origin, uFp) -//GO(g_emblem_get_type, +GO(g_emblem_get_type, LFv) GO(g_emblem_new, pFp) GO(g_emblem_new_with_origin, pFpu) -//GO(g_emblem_origin_get_type, -GO(g_file_append_to, pFpipp) -//GOM(g_file_append_to_async, vFEpiipBp) +GO(g_emblem_origin_get_type, LFv) +GO(g_file_append_to, pFpupp) +//GOM(g_file_append_to_async, vFEpuippp) GO(g_file_append_to_finish, pFppp) -//GO(g_file_attribute_info_flags_get_type, +GO(g_file_attribute_info_flags_get_type, LFv) GO(g_file_attribute_info_list_add, vFppuu) GO(g_file_attribute_info_list_dup, pFp) -//GO(g_file_attribute_info_list_get_type, +GO(g_file_attribute_info_list_get_type, LFv) GO(g_file_attribute_info_list_lookup, pFpp) GO(g_file_attribute_info_list_new, pFv) -//GO(g_file_attribute_info_list_ref, -//GO(g_file_attribute_info_list_unref, +GO(g_file_attribute_info_list_ref, pFp) +GO(g_file_attribute_info_list_unref, vFp) GO(g_file_attribute_matcher_enumerate_namespace, iFpp) GO(g_file_attribute_matcher_enumerate_next, pFp) -//GO(g_file_attribute_matcher_get_type, -//GO(g_file_attribute_matcher_matches, -//GO(g_file_attribute_matcher_matches_only, +GO(g_file_attribute_matcher_get_type, LFv) +GO(g_file_attribute_matcher_matches, iFpp) +GO(g_file_attribute_matcher_matches_only, iFpp) GO(g_file_attribute_matcher_new, pFp) GO(g_file_attribute_matcher_ref, pFp) GO(g_file_attribute_matcher_subtract, pFpp) GO(g_file_attribute_matcher_to_string, pFp) GO(g_file_attribute_matcher_unref, vFp) -//GO(g_file_attribute_status_get_type, -//GO(g_file_attribute_type_get_type, -//GOM(g_file_copy, iFEppipBpp) -//GOM(g_file_copy_async, vFEppiipBpBp) +GO(g_file_attribute_status_get_type, LFv) +GO(g_file_attribute_type_get_type, LFv) +//GOM(g_file_copy, iFEppupppp) +//GOM(g_file_copy_async, vFEppuippppp) GO(g_file_copy_attributes, iFppupp) GO(g_file_copy_finish, iFppp) GO(g_file_copy_flags_get_type, LFv) GO(g_file_create, pFpupp) -//GOM(g_file_create_async, vFEpiipBp) +//GOM(g_file_create_async, vFEpuippp) GO(g_file_create_finish, pFppp) GO(g_file_create_flags_get_type, LFv) GO(g_file_create_readwrite, pFpupp) -//GOM(g_file_create_readwrite_async, vFEpiipBp) +//GOM(g_file_create_readwrite_async, vFEpuippp) GO(g_file_create_readwrite_finish, pFppp) GO(g_file_delete, iFppp) -//GOM(g_file_delete_async, vFEpipBp) -GO(g_file_delete_finish, pFppp) -//GO(g_file_descriptor_based_get_fd, -//GO(g_file_descriptor_based_get_type, +//GOM(g_file_delete_async, vFEpippp) +GO(g_file_delete_finish, iFppp) +GO(g_file_descriptor_based_get_fd, iFp) +GO(g_file_descriptor_based_get_type, LFv) GO(g_file_dup, pFp) -//GOM(g_file_eject_mountable, vFEpipBp) +//GOM(g_file_eject_mountable, vFEpuppp) GO(g_file_eject_mountable_finish, iFppp) -//GOM(g_file_eject_mountable_with_operation, vFpippBp) +//GOM(g_file_eject_mountable_with_operation, vFpupppp) GO(g_file_eject_mountable_with_operation_finish, iFppp) GO(g_file_enumerate_children, pFppupp) -//GOM(g_file_enumerate_children_async, vFppiipBp) +//GOM(g_file_enumerate_children_async, vFppuippp) GO(g_file_enumerate_children_finish, pFppp) GO(g_file_enumerator_close, iFppp) -//GO(g_file_enumerator_close_async, +//GOM(g_file_enumerator_close_async, vFpippp) GO(g_file_enumerator_close_finish, iFppp) GO(g_file_enumerator_get_child, pFpp) GO(g_file_enumerator_get_container, pFp) -//GO(g_file_enumerator_get_type, +GO(g_file_enumerator_get_type, LFv) GO(g_file_enumerator_has_pending, iFp) -//GO(g_file_enumerator_is_closed, +GO(g_file_enumerator_is_closed, iFp) GO(g_file_enumerator_next_file, pFppp) -//GO(g_file_enumerator_next_files_async, +//GOM(g_file_enumerator_next_files_async, vFpiippp) GO(g_file_enumerator_next_files_finish, pFppp) GO(g_file_enumerator_set_pending, vFpi) GO(g_file_equal, iFpp) GO(g_file_find_enclosing_mount, pFppp) -//GOM(g_file_find_enclosing_mount_async, vFEpipBp) +//GOM(g_file_find_enclosing_mount_async, vFEpippp) GO(g_file_find_enclosing_mount_finish, pFppp) GO(g_file_get_basename, pFp) GO(g_file_get_child, pFpp) @@ -703,7 +703,7 @@ GO(g_file_has_uri_scheme, iFpp) GO(g_file_icon_get_file, pFp) GO(g_file_icon_get_type, LFv) GO(g_file_icon_new, pFp) -//GO(g_file_info_clear_status, +GO(g_file_info_clear_status, vFp) GO(g_file_info_copy_into, vFpp) GO(g_file_info_dup, pFp) GO(g_file_info_get_attribute_as_string, pFpp) @@ -714,33 +714,33 @@ GO(g_file_info_get_attribute_int32, iFpp) GO(g_file_info_get_attribute_int64, lFpp) GO(g_file_info_get_attribute_object, pFpp) GO(g_file_info_get_attribute_status, uFpp) -//GO(g_file_info_get_attribute_string, +GO(g_file_info_get_attribute_string, pFpp) GO(g_file_info_get_attribute_stringv, pFpp) GO(g_file_info_get_attribute_type, uFpp) GO(g_file_info_get_attribute_uint32, uFpp) GO(g_file_info_get_attribute_uint64, LFpp) -//GO(g_file_info_get_content_type, -//GO(g_file_info_get_deletion_date, -//GO(g_file_info_get_display_name, -//GO(g_file_info_get_edit_name, +GO(g_file_info_get_content_type, pFp) +GO(g_file_info_get_deletion_date, pFp) +GO(g_file_info_get_display_name, pFp) +GO(g_file_info_get_edit_name, pFp) GO(g_file_info_get_etag, pFp) GO(g_file_info_get_file_type, uFp) -//GO(g_file_info_get_icon, -//GO(g_file_info_get_is_backup, -//GO(g_file_info_get_is_hidden, +GO(g_file_info_get_icon, pFp) +GO(g_file_info_get_is_backup, iFp) +GO(g_file_info_get_is_hidden, iFp) GO(g_file_info_get_is_symlink, iFp) -//GO(g_file_info_get_modification_time, -//GO(g_file_info_get_name, +GO(g_file_info_get_modification_time, vFpp) +GO(g_file_info_get_name, pFp) GO(g_file_info_get_size, lFp) GO(g_file_info_get_sort_order, iFp) GO(g_file_info_get_symbolic_icon, pFp) -//GO(g_file_info_get_symlink_target, -//GO(g_file_info_get_type, -//GO(g_file_info_has_attribute, -//GO(g_file_info_has_namespace, -//GO(g_file_info_list_attributes, +GO(g_file_info_get_symlink_target, pFp) +GO(g_file_info_get_type, LFv) +GO(g_file_info_has_attribute, iFpp) +GO(g_file_info_has_namespace, iFpp) +GO(g_file_info_list_attributes, pFpp) GO(g_file_info_new, pFv) -//GO(g_file_info_remove_attribute, +GO(g_file_info_remove_attribute, vFpp) GO(g_file_info_set_attribute, vFppup) GO(g_file_info_set_attribute_boolean, vFppi) GO(g_file_info_set_attribute_byte_string, vFppp) @@ -749,69 +749,69 @@ GO(g_file_info_set_attribute_int64, vFppl) GO(g_file_info_set_attribute_mask, vFpp) GO(g_file_info_set_attribute_object, vFppp) GO(g_file_info_set_attribute_status, iFppu) -//GO(g_file_info_set_attribute_string, +GO(g_file_info_set_attribute_string, vFppp) GO(g_file_info_set_attribute_stringv, vFppp) GO(g_file_info_set_attribute_uint32, vFppu) GO(g_file_info_set_attribute_uint64, vFppL) -//GO(g_file_info_set_content_type, -//GO(g_file_info_set_display_name, -//GO(g_file_info_set_edit_name, +GO(g_file_info_set_content_type, vFpp) +GO(g_file_info_set_display_name, vFpp) +GO(g_file_info_set_edit_name, vFpp) GO(g_file_info_set_file_type, vFpu) -//GO(g_file_info_set_icon, -//GO(g_file_info_set_is_hidden, +GO(g_file_info_set_icon, vFpp) +GO(g_file_info_set_is_hidden, vFpi) GO(g_file_info_set_is_symlink, vFpi) GO(g_file_info_set_modification_time, vFpp) -//GO(g_file_info_set_name, +GO(g_file_info_set_name, vFpp) GO(g_file_info_set_size, vFpl) GO(g_file_info_set_sort_order, vFpi) GO(g_file_info_set_symbolic_icon, vFpp) GO(g_file_info_set_symlink_target, vFpp) -//GO(g_file_info_unset_attribute_mask, -//GO(g_file_input_stream_get_type, +GO(g_file_info_unset_attribute_mask, vFp) +GO(g_file_input_stream_get_type, LFv) GO(g_file_input_stream_query_info, pFpppp) -//GO(g_file_input_stream_query_info_async, +//GOM(g_file_input_stream_query_info_async, vFppippp) GO(g_file_input_stream_query_info_finish, pFppp) GO(g_file_io_stream_get_etag, pFp) -//GO(g_file_io_stream_get_type, +GO(g_file_io_stream_get_type, LFv) GO(g_file_io_stream_query_info, pFpppp) -//GO(g_file_io_stream_query_info_async, +//GOM(g_file_io_stream_query_info_async, vFppippp) GO(g_file_io_stream_query_info_finish, pFppp) -GO(g_file_is_native, iFpp) +GO(g_file_is_native, iFp) GO(g_file_load_bytes, pFpppp) //sice 2.56+ -//GOM(g_file_load_bytes_async, vFEppBp) //since 2.56+ +//GOM(g_file_load_bytes_async, vFEpppp) //since 2.56+ GO(g_file_load_bytes_finish, pFpppp) //since 2.56+ GO(g_file_load_contents, iFpppppp) -//GOM(g_file_load_contents_async, vFEppBp) +//GOM(g_file_load_contents_async, vFEpppp) GO(g_file_load_contents_finish, iFpppppp) -//GOM(g_file_load_partial_contents_async, vFppBBp) +//GOM(g_file_load_partial_contents_async, vFppppp) GO(g_file_load_partial_contents_finish, iFpppppp) GO(g_file_make_directory, iFppp) -//GOM(g_file_make_directory_async, vFEpipBp) +//GOM(g_file_make_directory_async, vFEpippp) GO(g_file_make_directory_finish, iFppp) GO(g_file_make_directory_with_parents, iFppp) GO(g_file_make_symbolic_link, iFpppp) -//GOM(g_file_measure_disk_usage, iFEpipBppppp) -//GOM(g_file_measure_disk_usage_async, vFEpiipBpBp) +//GOM(g_file_measure_disk_usage, iFEpuppppppp) +//GOM(g_file_measure_disk_usage_async, vFEpuippppp) GO(g_file_measure_disk_usage_finish, iFpppppp) -//GO(g_file_measure_flags_get_type, +GO(g_file_measure_flags_get_type, LFv) GO(g_file_monitor, pFpupp) -//GO(g_file_monitor_cancel, -GO(g_file_monitor_directory, pFpipp) +GO(g_file_monitor_cancel, iFp) +GO(g_file_monitor_directory, pFpupp) GO(g_file_monitor_emit_event, vFpppu) -//GO(g_file_monitor_event_get_type, -GO(g_file_monitor_file, pFpipp) -//GO(g_file_monitor_flags_get_type, -//GO(g_file_monitor_get_type, +GO(g_file_monitor_event_get_type, LFv) +GO(g_file_monitor_file, pFpupp) +GO(g_file_monitor_flags_get_type, LFv) +GO(g_file_monitor_get_type, LFv) GO(g_file_monitor_is_cancelled, iFp) GO(g_file_monitor_set_rate_limit, vFpi) -//GOM(g_file_mount_enclosing_volume, vFEpippBp) +//GOM(g_file_mount_enclosing_volume, vFEpupppp) GO(g_file_mount_enclosing_volume_finish, iFppp) -//GOM(g_file_mount_mountable, vFEpippBp) +//GOM(g_file_mount_mountable, vFEpupppp) GO(g_file_mount_mountable_finish, pFppp) -//GOM(g_file_move, iFEppipBpp) +//GOM(g_file_move, iFEppupppp) GO(g_filename_completer_get_completions, pFpp) GO(g_filename_completer_get_completion_suffix, pFpp) -//GO(g_filename_completer_get_type, +GO(g_filename_completer_get_type, LFv) GO(g_filename_completer_new, pFv) GO(g_filename_completer_set_dirs_only, vFpi) GO(g_file_new_build_filename, pFppppppppppp) // vaarg, since v2.56+ @@ -821,106 +821,106 @@ GO(g_file_new_for_path, pFp) GO(g_file_new_for_uri, pFp) GO(g_file_new_tmp, pFppp) GO(g_file_open_readwrite, pFppp) -//GOM(g_file_open_readwrite_async, vFEpipBp) +//GOM(g_file_open_readwrite_async, vFEpippp) GO(g_file_open_readwrite_finish, pFppp) GO(g_file_output_stream_get_etag, pFp) -//GO(g_file_output_stream_get_type, +GO(g_file_output_stream_get_type, LFv) GO(g_file_output_stream_query_info, pFpppp) -//GO(g_file_output_stream_query_info_async, +//GOM(g_file_output_stream_query_info_async, vFppippp) GO(g_file_output_stream_query_info_finish, pFppp) GO(g_file_parse_name, pFp) -GO(g_file_peek_path , pFp) // sice 2.56+ -//GOM(g_file_poll_mountable, vFEppBp) +GO(g_file_peek_path, pFp) +//GOM(g_file_poll_mountable, vFEpppp) GO(g_file_poll_mountable_finish, iFppp) GO(g_file_query_default_handler, pFppp) -//GOMg_file_query_default_handler_async, vFEpipBp) //since 2.60+ +//GOM(g_file_query_default_handler_async, vFEpipBp) //since 2.60+ GO(g_file_query_default_handler_finish, pFppp) //since 2.60+ GO(g_file_query_exists, iFpp) GO(g_file_query_filesystem_info, pFpppp) -//GOM(g_file_query_filesystem_info_async, vFEppipBp) +//GOM(g_file_query_filesystem_info_async, vFEppippp) GO(g_file_query_filesystem_info_finish, pFppp) GO(g_file_query_file_type, uFpup) GO(g_file_query_info, pFppupp) -//GOM(g_file_query_info_async, vFEppiipBp) +//GOM(g_file_query_info_async, vFEppuippp) GO(g_file_query_info_finish, pFppp) -//GO(g_file_query_info_flags_get_type, +GO(g_file_query_info_flags_get_type, LFv) GO(g_file_query_settable_attributes, pFppp) GO(g_file_query_writable_namespaces, pFppp) GO(g_file_read, pFppp) -//GOM(g_file_read_async, vFEpipBp) +//GOM(g_file_read_async, vFEpippp) GO(g_file_read_finish, pFppp) GO(g_file_replace, pFppiupp) -//GOM(g_file_replace_async, vFEppiiipBp) +//GOM(g_file_replace_async, vFEppiuippp) GO(g_file_replace_contents, iFppLpiuppp) -//GOM(g_file_replace_contents_async, vFEppLpuupBp) -//GOM(g_file_replace_contents_bytes_async, vFEpppiipBp) +//GOM(g_file_replace_contents_async, vFEppLpiuppp) +//GOM(g_file_replace_contents_bytes_async, vFEpppiuppp) GO(g_file_replace_contents_finish, iFpppp) GO(g_file_replace_finish, pFppp) GO(g_file_replace_readwrite, pFppiupp) -//GOM(g_file_replace_readwrite_async, vFEppiiipBp) +//GOM(g_file_replace_readwrite_async, vFEppiuippp) GO(g_file_replace_readwrite_finish, pFppp) GO(g_file_resolve_relative_path, pFpp) GO(g_file_set_attribute, iFppupupp) GO(g_file_set_attribute_byte_string, iFpppupp) GO(g_file_set_attribute_int32, iFppiupp) GO(g_file_set_attribute_int64, iFpplupp) -//GOM(g_file_set_attributes_async, vFEppiipBp) +//GOM(g_file_set_attributes_async, vFEppuippp) GO(g_file_set_attributes_finish, iFpppp) GO(g_file_set_attributes_from_info, iFppupp) -GO(g_file_set_attribute_string, iFpppipp) +GO(g_file_set_attribute_string, iFpppupp) GO(g_file_set_attribute_uint32, iFppuupp) GO(g_file_set_attribute_uint64, iFppLupp) GO(g_file_set_display_name, pFpppp) -//GOM(g_file_set_display_name_async, vFEppipBp) +//GOM(g_file_set_display_name_async, vFEppippp) GO(g_file_set_display_name_finish, pFppp) -//GOM(g_file_start_mountable, vFEpippBp) +//GOM(g_file_start_mountable, vFEpupppp) GO(g_file_start_mountable_finish, iFppp) -//GOM(g_file_stop_mountable, vFpippBp) +//GOM(g_file_stop_mountable, vFpupppp) GO(g_file_stop_mountable_finish, iFppp) GO(g_file_supports_thread_contexts, iFp) -//GO(g_filesystem_preview_type_get_type, +GO(g_filesystem_preview_type_get_type, LFv) GO(g_file_trash, iFppp) -//GOM(g_file_trash_async, vFEpipBp) -GO(g_file_trash_finish, pFppp) +//GOM(g_file_trash_async, vFEpippp) +GO(g_file_trash_finish, iFppp) GO(g_file_type_get_type, LFv) -//GOM(g_file_unmount_mountable, vFEpipBp) +//GOM(g_file_unmount_mountable, vFEpuppp) GO(g_file_unmount_mountable_finish, iFppp) -//GOM(g_file_unmount_mountable_with_operation, vFEpippBp) +//GOM(g_file_unmount_mountable_with_operation, vFEpupppp) GO(g_file_unmount_mountable_with_operation_finish, iFppp) GO(g_filter_input_stream_get_base_stream, pFp) GO(g_filter_input_stream_get_close_base_stream, iFp) -//GO(g_filter_input_stream_get_type, +GO(g_filter_input_stream_get_type, LFv) GO(g_filter_input_stream_set_close_base_stream, vFpi) GO(g_filter_output_stream_get_base_stream, pFp) GO(g_filter_output_stream_get_close_base_stream, iFp) -//GO(g_filter_output_stream_get_type, +GO(g_filter_output_stream_get_type, LFv) GO(g_filter_output_stream_set_close_base_stream, vFpi) GO(g_icon_deserialize, pFp) GO(g_icon_equal, iFpp) -//GO(g_icon_get_type, +GO(g_icon_get_type, LFv) GO(g_icon_hash, uFp) GO(g_icon_new_for_string, pFpp) GO(g_icon_serialize, pFp) GO(g_icon_to_string, pFp) GO(g_inet_address_equal, iFpp) GO(g_inet_address_get_family, uFp) -//GO(g_inet_address_get_is_any, -//GO(g_inet_address_get_is_link_local, -//GO(g_inet_address_get_is_loopback, -//GO(g_inet_address_get_is_mc_global, -//GO(g_inet_address_get_is_mc_link_local, -//GO(g_inet_address_get_is_mc_node_local, -//GO(g_inet_address_get_is_mc_org_local, +GO(g_inet_address_get_is_any, iFp) +GO(g_inet_address_get_is_link_local, iFp) +GO(g_inet_address_get_is_loopback, iFp) +GO(g_inet_address_get_is_mc_global, iFp) +GO(g_inet_address_get_is_mc_link_local, iFp) +GO(g_inet_address_get_is_mc_node_local, iFp) +GO(g_inet_address_get_is_mc_org_local, iFp) GO(g_inet_address_get_is_mc_site_local, iFp) -//GO(g_inet_address_get_is_multicast, -//GO(g_inet_address_get_is_site_local, +GO(g_inet_address_get_is_multicast, iFp) +GO(g_inet_address_get_is_site_local, iFp) GO(g_inet_address_get_native_size, LFp) -//GO(g_inet_address_get_type, +GO(g_inet_address_get_type, LFv) GO(g_inet_address_mask_equal, iFpp) GO(g_inet_address_mask_get_address, pFp) GO(g_inet_address_mask_get_family, uFp) GO(g_inet_address_mask_get_length, uFp) -//GO(g_inet_address_mask_get_type, +GO(g_inet_address_mask_get_type, LFv) GO(g_inet_address_mask_matches, iFpp) GO(g_inet_address_mask_new, pFpup) GO(g_inet_address_mask_new_from_string, pFpp) @@ -928,40 +928,40 @@ GO(g_inet_address_mask_to_string, pFp) GO(g_inet_address_new_any, pFu) GO(g_inet_address_new_from_bytes, pFpu) GO(g_inet_address_new_from_string, pFp) -//GO(g_inet_address_new_loopback, +GO(g_inet_address_new_loopback, pFu) GO(g_inet_address_to_bytes, pFp) GO(g_inet_address_to_string, pFp) GO(g_inet_socket_address_get_address, pFp) -//GO(g_inet_socket_address_get_flowinfo, +GO(g_inet_socket_address_get_flowinfo, uFp) GO(g_inet_socket_address_get_port, WFp) GO(g_inet_socket_address_get_scope_id, uFp) -//GO(g_inet_socket_address_get_type, +GO(g_inet_socket_address_get_type, LFv) GO(g_inet_socket_address_new, pFpW) GO(g_inet_socket_address_new_from_string, pFpu) GO(g_initable_get_type, LFv) GO(g_initable_init, iFppp) -GOM(g_initable_new, pFEppppV) +GOM(g_initable_new, pFELpppV) GO(g_initable_newv, pFLuppp) -GOM(g_initable_new_valist, pFEppApp) -//GO(g_input_stream_clear_pending, +GOM(g_initable_new_valist, pFELpApp) +GO(g_input_stream_clear_pending, vFp) GO(g_input_stream_close, iFppp) -//GO(g_input_stream_close_async, +//GOM(g_input_stream_close_async, vFpippp) GO(g_input_stream_close_finish, iFppp) GO(g_input_stream_get_type, LFv) GO(g_input_stream_has_pending, iFp) -//GO(g_input_stream_is_closed, +GO(g_input_stream_is_closed, iFp) GO(g_input_stream_read, lFppLpp) GO(g_input_stream_read_all, iFppLppp) GOM(g_input_stream_read_async, vFEppLippp) GO(g_input_stream_read_bytes, pFpLpp) -//GO(g_input_stream_read_bytes_async, +//GOM(g_input_stream_read_bytes_async, vFpLippp) GO(g_input_stream_read_bytes_finish, pFppp) GO(g_input_stream_read_finish, lFppp) GO(g_input_stream_set_pending, iFpp) GO(g_input_stream_skip, lFpLpp) -//GO(g_input_stream_skip_async, +//GOM(g_input_stream_skip_async, vFpLippp) GO(g_input_stream_skip_finish, lFppp) -//GO(g_io_error_enum_get_type, +GO(g_io_error_enum_get_type, LFv) GO(g_io_error_from_errno, uFi) GO(g_io_error_quark, uFv) GO(g_io_extension_get_name, pFp) @@ -972,57 +972,57 @@ GO(g_io_extension_point_get_extensions, pFp) GO(g_io_extension_point_get_required_type, LFp) GO(g_io_extension_point_implement, pFpLpi) GO(g_io_extension_point_lookup, pFp) -//GO(g_io_extension_point_register, +GO(g_io_extension_point_register, pFp) GO(g_io_extension_point_set_required_type, vFpL) GO(g_io_extension_ref_class, pFp) -//GO(g_io_module_get_type, +GO(g_io_module_get_type, LFv) GO(g_io_module_new, pFp) GO(g_io_module_scope_block, vFpp) -//GO(g_io_module_scope_flags_get_type, +GO(g_io_module_scope_flags_get_type, LFv) GO(g_io_module_scope_free, vFp) GO(g_io_module_scope_new, pFu) GO(g_io_modules_load_all_in_directory, pFp) GO(g_io_modules_load_all_in_directory_with_scope, pFpp) GO(g_io_modules_scan_all_in_directory, vFp) GO(g_io_modules_scan_all_in_directory_with_scope, vFpp) -//GO(g_io_scheduler_cancel_all_jobs, -//GO(g_io_scheduler_job_send_to_mainloop, -//GO(g_io_scheduler_job_send_to_mainloop_async, -//GO(g_io_scheduler_push_job, -//GO(g_io_stream_clear_pending, +GO(g_io_scheduler_cancel_all_jobs, vFv) +//GOM(g_io_scheduler_job_send_to_mainloop, iFpppp) +//GOM(g_io_scheduler_job_send_to_mainloop_async, vFpppp) +//GOM(g_io_scheduler_push_job, vFpppip) +GO(g_io_stream_clear_pending, vFp) GO(g_io_stream_close, iFppp) -//GO(g_io_stream_close_async, +//GOM(g_io_stream_close_async, vFpippp) GO(g_io_stream_close_finish, iFppp) GO(g_io_stream_get_input_stream, pFp) GO(g_io_stream_get_output_stream, pFp) -//GO(g_io_stream_get_type, +GO(g_io_stream_get_type, LFv) GO(g_io_stream_has_pending, iFp) -//GO(g_io_stream_is_closed, +GO(g_io_stream_is_closed, iFp) GO(g_io_stream_set_pending, iFpp) -//GO(g_io_stream_splice_async, +//GOM(g_io_stream_splice_async, vFppuippp) GO(g_io_stream_splice_finish, iFpp) -//GO(g_io_stream_splice_flags_get_type, +GO(g_io_stream_splice_flags_get_type, LFv) //GO(g_keyfile_settings_backend_new, GO(g_list_model_get_item, pFpu) GO(g_list_model_get_n_items, uFp) GO(g_list_model_get_object, pFpu) -//GO(g_loadable_icon_get_type, +GO(g_loadable_icon_get_type, LFv) GO(g_loadable_icon_load, pFpippp) -//GO(g_loadable_icon_load_async, +//GOM(g_loadable_icon_load_async, vFpippp) GO(g_loadable_icon_load_finish, pFpppp) //GO(g_local_directory_monitor_get_type, //GO(g_local_file_monitor_get_type, GO(g_memory_input_stream_add_bytes, vFpp) -//GO(g_memory_input_stream_add_data, -//GO(g_memory_input_stream_get_type, +//GOM(g_memory_input_stream_add_data, vFpplp) +GO(g_memory_input_stream_get_type, LFv) GO(g_memory_input_stream_new, pFv) GO(g_memory_input_stream_new_from_bytes, pFp) -//GO(g_memory_input_stream_new_from_data, -//GO(g_memory_output_stream_get_data, +//GOM(g_memory_input_stream_new_from_data, pFplp) +GO(g_memory_output_stream_get_data, pFp) GO(g_memory_output_stream_get_data_size, LFp) -//GO(g_memory_output_stream_get_size, -//GO(g_memory_output_stream_get_type, -//GO(g_memory_output_stream_new, +GO(g_memory_output_stream_get_size, LFp) +GO(g_memory_output_stream_get_type, LFv) +//GOM(g_memory_output_stream_new, pFpLpp) GO(g_memory_output_stream_new_resizable, pFv) GO(g_memory_output_stream_steal_as_bytes, pFp) GO(g_memory_output_stream_steal_data, pFp) @@ -1033,107 +1033,107 @@ GO(g_menu_append_section, vFppp) GO(g_menu_append_submenu, vFppp) GO(g_menu_attribute_iter_get_name, pFp) GO(g_menu_attribute_iter_get_next, iFppp) -//GO(g_menu_attribute_iter_get_type, +GO(g_menu_attribute_iter_get_type, LFv) GO(g_menu_attribute_iter_get_value, pFp) GO(g_menu_attribute_iter_next, iFp) -//GO(g_menu_freeze, -//GO(g_menu_get_type, +GO(g_menu_freeze, vFp) +GO(g_menu_get_type, LFv) GO(g_menu_insert, vFpipp) GO(g_menu_insert_item, vFpip) -//GO(g_menu_insert_section, +GO(g_menu_insert_section, vFpipp) GO(g_menu_insert_submenu, vFpipp) -//GO(g_menu_item_get_attribute, +//GOM(g_menu_item_get_attribute, iFpppV) GO(g_menu_item_get_attribute_value, pFppp) GO(g_menu_item_get_link, pFpp) -//GO(g_menu_item_get_type, +GO(g_menu_item_get_type, LFv) GO(g_menu_item_new, pFpp) GO(g_menu_item_new_from_model, pFpi) GO(g_menu_item_new_section, pFpp) -//GO(g_menu_item_new_submenu, -//GO(g_menu_item_set_action_and_target, +GO(g_menu_item_new_submenu, pFpp) +//GOM(g_menu_item_set_action_and_target, vFpppV) GO(g_menu_item_set_action_and_target_value, vFppp) -//GO(g_menu_item_set_attribute, -//GO(g_menu_item_set_attribute_value, +//GOM(g_menu_item_set_attribute, vFpppV) +GO(g_menu_item_set_attribute_value, vFppp) GO(g_menu_item_set_detailed_action, vFpp) GO(g_menu_item_set_icon, vFpp) -//GO(g_menu_item_set_label, +GO(g_menu_item_set_label, vFpp) GO(g_menu_item_set_link, vFppp) GO(g_menu_item_set_section, vFpp) -//GO(g_menu_item_set_submenu, +GO(g_menu_item_set_submenu, vFpp) GO(g_menu_link_iter_get_name, pFp) GO(g_menu_link_iter_get_next, iFppp) -//GO(g_menu_link_iter_get_type, +GO(g_menu_link_iter_get_type, LFv) GO(g_menu_link_iter_get_value, pFp) GO(g_menu_link_iter_next, iFp) -//GO(g_menu_model_get_item_attribute, +//GOM(g_menu_model_get_item_attribute, iFpippV) GO(g_menu_model_get_item_attribute_value, pFpipp) GO(g_menu_model_get_item_link, pFpip) GO(g_menu_model_get_n_items, iFp) -//GO(g_menu_model_get_type, +GO(g_menu_model_get_type, LFv) GO(g_menu_model_is_mutable, iFp) GO(g_menu_model_items_changed, vFpiii) GO(g_menu_model_iterate_item_attributes, pFpi) GO(g_menu_model_iterate_item_links, pFpi) GO(g_menu_new, pFv) -//GO(g_menu_prepend, -//GO(g_menu_prepend_item, -//GO(g_menu_prepend_section, -//GO(g_menu_prepend_submenu, +GO(g_menu_prepend, vFppp) +GO(g_menu_prepend_item, vFpp) +GO(g_menu_prepend_section, vFppp) +GO(g_menu_prepend_submenu, vFppp) GO(g_menu_remove, vFpi) -//GO(g_menu_remove_all, -//GO(g_mount_can_eject, -//GO(g_mount_can_unmount, -//GO(g_mount_eject, -//GO(g_mount_eject_finish, -//GO(g_mount_eject_with_operation, +GO(g_menu_remove_all, vFp) +GO(g_mount_can_eject, iFp) +GO(g_mount_can_unmount, iFp) +//GOM(g_mount_eject, vFpuppp) +GO(g_mount_eject_finish, iFppp) +//GOM(g_mount_eject_with_operation, vFpupppp) GO(g_mount_eject_with_operation_finish, iFppp) GO(g_mount_get_default_location, pFp) GO(g_mount_get_drive, pFp) -//GO(g_mount_get_icon, -//GO(g_mount_get_name, -//GO(g_mount_get_root, +GO(g_mount_get_icon, pFp) +GO(g_mount_get_name, pFp) +GO(g_mount_get_root, pFp) GO(g_mount_get_sort_key, pFp) GO(g_mount_get_symbolic_icon, pFp) -//GO(g_mount_get_type, +GO(g_mount_get_type, LFv) GO(g_mount_get_uuid, pFp) -//GO(g_mount_get_volume, -//GO(g_mount_guess_content_type, +GO(g_mount_get_volume, pFp) +//GOM(g_mount_guess_content_type, vFpippp) GO(g_mount_guess_content_type_finish, pFppp) GO(g_mount_guess_content_type_sync, pFpipp) GO(g_mount_is_shadowed, iFp) -//GO(g_mount_mount_flags_get_type, -//GO(g_mount_operation_get_anonymous, +GO(g_mount_mount_flags_get_type, LFv) +GO(g_mount_operation_get_anonymous, iFp) GO(g_mount_operation_get_choice, iFp) GO(g_mount_operation_get_domain, pFp) -//GO(g_mount_operation_get_password, +GO(g_mount_operation_get_password, pFp) GO(g_mount_operation_get_password_save, uFp) -//GO(g_mount_operation_get_type, -//GO(g_mount_operation_get_username, +GO(g_mount_operation_get_type, LFv) +GO(g_mount_operation_get_username, pFp) GO(g_mount_operation_new, pFv) GO(g_mount_operation_reply, vFpu) -//GO(g_mount_operation_result_get_type, -//GO(g_mount_operation_set_anonymous, +GO(g_mount_operation_result_get_type, LFv) +GO(g_mount_operation_set_anonymous, vFpi) GO(g_mount_operation_set_choice, vFpi) GO(g_mount_operation_set_domain, vFpp) -//GO(g_mount_operation_set_password, +GO(g_mount_operation_set_password, vFpp) GO(g_mount_operation_set_password_save, vFpu) -//GO(g_mount_operation_set_username, -//GO(g_mount_remount, -//GO(g_mount_remount_finish, -//GO(g_mount_shadow, -//GO(g_mount_unmount, -//GO(g_mount_unmount_finish, -//GO(g_mount_unmount_flags_get_type, -//GO(g_mount_unmount_with_operation, -//GO(g_mount_unmount_with_operation_finish, -//GO(g_mount_unshadow, -//GO(g_native_volume_monitor_get_type, -//GO(g_network_address_get_hostname, +GO(g_mount_operation_set_username, vFpp) +//GOM(g_mount_remount, vFpupppp) +GO(g_mount_remount_finish, iFppp) +GO(g_mount_shadow, vFp) +//GOM(g_mount_unmount, vFpuppp) +GO(g_mount_unmount_finish, iFppp) +GO(g_mount_unmount_flags_get_type, LFv) +//GOM(g_mount_unmount_with_operation, vFpupppp) +GO(g_mount_unmount_with_operation_finish, iFppp) +GO(g_mount_unshadow, vFp) +GO(g_native_volume_monitor_get_type, LFv) +GO(g_network_address_get_hostname, pFp) GO(g_network_address_get_port, WFp) GO(g_network_address_get_scheme, pFp) -//GO(g_network_address_get_type, +GO(g_network_address_get_type, LFv) GO(g_network_address_new, pFpW) -//GO(g_network_address_parse, +GO(g_network_address_parse, pFpWp) GO(g_network_address_parse_uri, pFpWp) //GO(g_networking_init, //GO(g_network_monitor_base_add_network, @@ -1141,141 +1141,141 @@ GO(g_network_address_parse_uri, pFpWp) //GO(g_network_monitor_base_remove_network, //GO(g_network_monitor_base_set_networks, GO(g_network_monitor_can_reach, iFpppp) -//GO(g_network_monitor_can_reach_async, +//GOM(g_network_monitor_can_reach_async, vFppppp) GO(g_network_monitor_can_reach_finish, iFppp) GO(g_network_monitor_get_default, pFv) -//GO(g_network_monitor_get_network_available, -//GO(g_network_monitor_get_type, -//GO(g_network_service_get_domain, -//GO(g_network_service_get_protocol, +GO(g_network_monitor_get_network_available, iFp) +GO(g_network_monitor_get_type, LFv) +GO(g_network_service_get_domain, pFp) +GO(g_network_service_get_protocol, pFp) GO(g_network_service_get_scheme, pFp) -//GO(g_network_service_get_service, -//GO(g_network_service_get_type, +GO(g_network_service_get_service, pFp) +GO(g_network_service_get_type, LFv) GO(g_network_service_new, pFppp) GO(g_network_service_set_scheme, vFpp) GO(g_notification_add_button, vFppp) -//GO(g_notification_add_button_with_target, +//GOM(g_notification_add_button_with_target, vFppppV) GO(g_notification_add_button_with_target_value, vFpppp) -//GO(g_notification_get_type, +GO(g_notification_get_type, LFv) GO(g_notification_new, pFp) -//GO(g_notification_priority_get_type, -//GO(g_notification_set_body, +GO(g_notification_priority_get_type, LFv) +GO(g_notification_set_body, vFpp) GO(g_notification_set_default_action, vFpp) -//GO(g_notification_set_default_action_and_target, +//GOM(g_notification_set_default_action_and_target, vFpppV) GO(g_notification_set_default_action_and_target_value, vFppp) GO(g_notification_set_icon, vFpp) GO(g_notification_set_priority, vFpu) -//GO(g_notification_set_title, +GO(g_notification_set_title, vFpp) GO(g_notification_set_urgent, vFpi) //GO(g_null_settings_backend_new, -//GO(g_output_stream_clear_pending, +GO(g_output_stream_clear_pending, vFp) GO(g_output_stream_close, iFppp) -//GO(g_output_stream_close_async, +//GOM(g_output_stream_close_async, vFpippp) GO(g_output_stream_close_finish, iFppp) -//GO(g_output_stream_flush, -//GO(g_output_stream_flush_async, -//GO(g_output_stream_flush_finish, -//GO(g_output_stream_get_type, +GO(g_output_stream_flush, iFppp) +//GOM(g_output_stream_flush_async, vFpippp) +GO(g_output_stream_flush_finish, iFppp) +GO(g_output_stream_get_type, LFv) GO(g_output_stream_has_pending, iFp) -//GO(g_output_stream_is_closed, -//GO(g_output_stream_is_closing, -//GO(g_output_stream_printf, +GO(g_output_stream_is_closed, iFp) +GO(g_output_stream_is_closing, iFp) +//GOM(g_output_stream_printf, iFpppppV) GO(g_output_stream_set_pending, iFpp) GO(g_output_stream_splice, lFppupp) -//GO(g_output_stream_splice_async, +//GOM(g_output_stream_splice_async, vFppuippp) GO(g_output_stream_splice_finish, lFppp) -//GO(g_output_stream_splice_flags_get_type, -//GO(g_output_stream_vprintf, +GO(g_output_stream_splice_flags_get_type, LFv) +//GOM(g_output_stream_vprintf, iFpppppA) GO(g_output_stream_write, lFppLpp) GO(g_output_stream_write_all, iFppLppp) -//GO(g_output_stream_write_async, +//GOM(g_output_stream_write_async, vFppLippp) GO(g_output_stream_write_bytes, lFpppp) -//GO(g_output_stream_write_bytes_async, -//GO(g_output_stream_write_bytes_finish, -//GO(g_output_stream_write_finish, -//GO(g_password_save_get_type, -//GO(g_permission_acquire, -//GO(g_permission_acquire_async, -//GO(g_permission_acquire_finish, -//GO(g_permission_get_allowed, -//GO(g_permission_get_can_acquire, +//GOM(g_output_stream_write_bytes_async, vFppippp) +GO(g_output_stream_write_bytes_finish, lFppp) +GO(g_output_stream_write_finish, lFppp) +GO(g_password_save_get_type, LFv) +GO(g_permission_acquire, iFppp) +//GOM(g_permission_acquire_async, vFpppp) +GO(g_permission_acquire_finish, iFppp) +GO(g_permission_get_allowed, iFp) +GO(g_permission_get_can_acquire, iFp) GO(g_permission_get_can_release, iFp) -//GO(g_permission_get_type, +GO(g_permission_get_type, LFv) GO(g_permission_impl_update, vFpiii) GO(g_permission_release, iFppp) -//GO(g_permission_release_async, +//GOM(g_permission_release_async, vFpppp) GO(g_permission_release_finish, iFppp) -//GO(g_pollable_input_stream_can_poll, -//GO(g_pollable_input_stream_create_source, -//GO(g_pollable_input_stream_get_type, +GO(g_pollable_input_stream_can_poll, iFp) +//GOM(g_pollable_input_stream_create_source, pFpp) +GO(g_pollable_input_stream_get_type, LFv) GO(g_pollable_input_stream_is_readable, iFp) GO(g_pollable_input_stream_read_nonblocking, lFppLpp) -//GO(g_pollable_output_stream_can_poll, -//GO(g_pollable_output_stream_create_source, -//GO(g_pollable_output_stream_get_type, +GO(g_pollable_output_stream_can_poll, iFp) +//GOM(g_pollable_output_stream_create_source, pFpp) +GO(g_pollable_output_stream_get_type, LFv) GO(g_pollable_output_stream_is_writable, iFp) GO(g_pollable_output_stream_write_nonblocking, lFppLpp) -//GO(g_pollable_source_new, -//GO(g_pollable_source_new_full, +//GOM(g_pollable_source_new, pFp) +//GOM(g_pollable_source_new_full, pFppp) GO(g_pollable_stream_read, lFppLipp) GO(g_pollable_stream_write, lFppLipp) GO(g_pollable_stream_write_all, iFppLippp) -//GO(g_property_action_get_type, +GO(g_property_action_get_type, LFv) GO(g_property_action_new, pFppp) -//GO(g_proxy_address_enumerator_get_type, -//GO(g_proxy_address_get_destination_hostname, +GO(g_proxy_address_enumerator_get_type, LFv) +GO(g_proxy_address_get_destination_hostname, pFp) GO(g_proxy_address_get_destination_port, WFp) -//GO(g_proxy_address_get_destination_protocol, -//GO(g_proxy_address_get_password, -//GO(g_proxy_address_get_protocol, +GO(g_proxy_address_get_destination_protocol, pFp) +GO(g_proxy_address_get_password, pFp) +GO(g_proxy_address_get_protocol, pFp) GO(g_proxy_address_get_type, LFv) GO(g_proxy_address_get_uri, pFp) -//GO(g_proxy_address_get_username, +GO(g_proxy_address_get_username, pFp) GO(g_proxy_address_new, pFpWppWpp) GO(g_proxy_connect, pFppppp) -//GO(g_proxy_connect_async, +//GOM(g_proxy_connect_async, vFpppppp) GO(g_proxy_connect_finish, pFppp) GO(g_proxy_get_default_for_protocol, pFp) -//GO(g_proxy_get_type, +GO(g_proxy_get_type, LFv) GO(g_proxy_resolver_get_default, pFv) GO(g_proxy_resolver_get_type, LFv) GO(g_proxy_resolver_is_supported, iFp) GO(g_proxy_resolver_lookup, pFpppp) -//GO(g_proxy_resolver_lookup_async, +//GOM(g_proxy_resolver_lookup_async, vFppppp) GO(g_proxy_resolver_lookup_finish, pFppp) GO(g_proxy_supports_hostname, iFp) -//GO(g_remote_action_group_activate_action_full, +GO(g_remote_action_group_activate_action_full, vFpppp) GO(g_remote_action_group_change_action_state_full, vFpppp) -//GO(g_remote_action_group_get_type, -//GO(g_resolver_error_get_type, -//GO(g_resolver_error_quark, -//GO(g_resolver_free_addresses, +GO(g_remote_action_group_get_type, LFv) +GO(g_resolver_error_get_type, LFv) +GO(g_resolver_error_quark, uFv) +GO(g_resolver_free_addresses, vFp) GO(g_resolver_free_targets, vFp) GO(g_resolver_get_default, pFv) GO(g_resolver_get_type, LFv) GO(g_resolver_lookup_by_address, pFpppp) -//GO(g_resolver_lookup_by_address_async, +//GOM(g_resolver_lookup_by_address_async, vFppppp) GO(g_resolver_lookup_by_address_finish, pFppp) GO(g_resolver_lookup_by_name, pFpppp) -//GO(g_resolver_lookup_by_name_async, -//GO(g_resolver_lookup_by_name_finish, +//GOM(g_resolver_lookup_by_name_async, vFppppp) +GO(g_resolver_lookup_by_name_finish, pFppp) GO(g_resolver_lookup_records, pFppupp) -//GO(g_resolver_lookup_records_async, +//GOM(g_resolver_lookup_records_async, vFppuppp) GO(g_resolver_lookup_records_finish, pFppp) GO(g_resolver_lookup_service, pFpppppp) -//GO(g_resolver_lookup_service_async, -//GO(g_resolver_lookup_service_finish, -//GO(g_resolver_record_type_get_type, -//GO(g_resolver_set_default, +//GOM(g_resolver_lookup_service_async, vFppppppp) +GO(g_resolver_lookup_service_finish, pFppp) +GO(g_resolver_record_type_get_type, LFv) +GO(g_resolver_set_default, vFp) GO(g_resource_enumerate_children, pFppup) -//GO(g_resource_error_get_type, -//GO(g_resource_error_quark, -//GO(g_resource_flags_get_type, +GO(g_resource_error_get_type, LFv) +GO(g_resource_error_quark, uFv) +GO(g_resource_flags_get_type, LFv) GO(g_resource_get_info, iFppuppp) -//GO(g_resource_get_type, +GO(g_resource_get_type, LFv) GO(g_resource_load, pFpp) GO(g_resource_lookup_data, pFppup) -//GO(g_resource_lookup_flags_get_type, +GO(g_resource_lookup_flags_get_type, LFv) GO(g_resource_new_from_data, pFpp) GO(g_resource_open_stream, pFppup) GO(g_resource_ref, pFp) @@ -1283,12 +1283,12 @@ GO(g_resources_enumerate_children, pFpup) GO(g_resources_get_info, iFpuppp) GO(g_resources_lookup_data, pFpup) GO(g_resources_open_stream, pFpup) -//GO(g_resources_register, -//GO(g_resources_unregister, -//GO(g_resource_unref, -//GO(g_seekable_can_seek, +GO(g_resources_register, vFp) +GO(g_resources_unregister, vFp) +GO(g_resource_unref, vFp) +GO(g_seekable_can_seek, iFp) GO(g_seekable_can_truncate, iFp) -//GO(g_seekable_get_type, +GO(g_seekable_get_type, LFv) GO(g_seekable_seek, iFplupp) GO(g_seekable_tell, lFp) GO(g_seekable_truncate, iFplpp) @@ -1303,12 +1303,12 @@ GO(g_settings_apply, vFp) //GO(g_settings_backend_path_writable_changed, //GO(g_settings_backend_writable_changed, GO(g_settings_bind, vFppppu) -//GO(g_settings_bind_flags_get_type, -//GO(g_settings_bind_with_mapping, +GO(g_settings_bind_flags_get_type, LFv) +//GOM(g_settings_bind_with_mapping, vFppppupppp) GO(g_settings_bind_writable, vFppppi) GO(g_settings_create_action, pFpp) GO(g_settings_delay, vFp) -//GO(g_settings_get, +//GOM(g_settings_get, vFpppV) GO(g_settings_get_boolean, iFpp) GO(g_settings_get_child, pFpp) GO(g_settings_get_default_value, pFpp) @@ -1317,41 +1317,41 @@ GO(g_settings_get_enum, iFpp) GO(g_settings_get_flags, uFpp) GO(g_settings_get_has_unapplied, iFp) GO(g_settings_get_int, iFpp) -//GO(g_settings_get_mapped, -//GO(g_settings_get_range, +//GOM(g_settings_get_mapped, pFpppp) +GO(g_settings_get_range, pFpp) GO(g_settings_get_string, pFpp) GO(g_settings_get_strv, pFpp) -GO(g_settings_get_type, pFv) +GO(g_settings_get_type, LFv) GO(g_settings_get_uint, uFpp) GO(g_settings_get_user_value, pFpp) GO(g_settings_get_value, pFpp) GO(g_settings_is_writable, iFpp) -//GO(g_settings_list_children, +GO(g_settings_list_children, pFp) GO(g_settings_list_keys, pFp) GO(g_settings_list_relocatable_schemas, pFv) -//GO(g_settings_list_schemas, +GO(g_settings_list_schemas, pFv) GO(g_settings_new, pFp) GO(g_settings_new_full, pFppp) GO(g_settings_new_with_backend, pFpp) GO(g_settings_new_with_backend_and_path, pFppp) GO(g_settings_new_with_path, pFpp) -//GO(g_settings_range_check, +GO(g_settings_range_check, iFppp) GO(g_settings_reset, vFpp) -//GO(g_settings_revert, -//GO(g_settings_schema_get_id, +GO(g_settings_revert, vFp) +GO(g_settings_schema_get_id, pFp) GO(g_settings_schema_get_key, pFpp) GO(g_settings_schema_get_path, pFp) -//GO(g_settings_schema_get_type, +GO(g_settings_schema_get_type, LFv) GO(g_settings_schema_has_key, iFpp) -//GO(g_settings_schema_key_get_default_value, +GO(g_settings_schema_key_get_default_value, pFp) GO(g_settings_schema_key_get_description, pFp) GO(g_settings_schema_key_get_range, pFp) -//GO(g_settings_schema_key_get_summary, -//GO(g_settings_schema_key_get_type, +GO(g_settings_schema_key_get_summary, pFp) +GO(g_settings_schema_key_get_type, LFv) GO(g_settings_schema_key_get_value_type, pFp) GO(g_settings_schema_key_range_check, iFpp) GO(g_settings_schema_key_ref, pFp) -//GO(g_settings_schema_key_unref, +GO(g_settings_schema_key_unref, vFp) GO(g_settings_schema_ref, pFp) GO(g_settings_schema_source_get_default, pFv) GO(g_settings_schema_source_get_type, LFv) @@ -1361,7 +1361,7 @@ GO(g_settings_schema_source_new_from_directory, pFppip) GO(g_settings_schema_source_ref, pFp) GO(g_settings_schema_source_unref, vFp) GO(g_settings_schema_unref, vFp) -//GO(g_settings_set, +//GOM(g_settings_set, iFpppV) GO(g_settings_set_boolean, iFppi) GO(g_settings_set_double, iFppd) GO(g_settings_set_enum, iFppi) @@ -1369,13 +1369,13 @@ GO(g_settings_set_flags, iFppu) GO(g_settings_set_int, iFppi) GO(g_settings_set_string, iFppp) GO(g_settings_set_strv, iFppp) -//GO(g_settings_set_uint, +GO(g_settings_set_uint, iFppu) GO(g_settings_set_value, iFppp) GO(g_settings_sync, vFv) GO(g_settings_unbind, vFpp) GO(g_simple_action_get_type, LFv) -//GO(g_simple_action_group_add_entries, -//GO(g_simple_action_group_get_type, +//GOM(g_simple_action_group_add_entries, vFppip) +GO(g_simple_action_group_get_type, LFv) GO(g_simple_action_group_insert, vFpp) GO(g_simple_action_group_lookup, pFpp) GO(g_simple_action_group_new, pFv) @@ -1383,7 +1383,7 @@ GO(g_simple_action_group_remove, vFpp) GO(g_simple_action_new, pFpp) GO(g_simple_action_new_stateful, pFppp) GO(g_simple_action_set_enabled, vFpi) -//GO(g_simple_action_set_state, +GO(g_simple_action_set_state, vFpp) GOM(g_simple_async_report_error_in_idle, vFEpppuipV) GOM(g_simple_async_report_gerror_in_idle, vFEpppp) GOM(g_simple_async_report_take_gerror_in_idle, vFEpppp) @@ -1402,8 +1402,8 @@ GOM(g_simple_async_result_new_take_error, pFEpppp) GO(g_simple_async_result_propagate_error, iFpp) GOM(g_simple_async_result_run_in_thread, vFEppip) GO(g_simple_async_result_set_check_cancellable, vFpp) -GOM(g_simple_async_result_set_error, vFEppipV) -GOM(g_simple_async_result_set_error_va, vFEppipA) +GOM(g_simple_async_result_set_error, vFEpuipV) +GOM(g_simple_async_result_set_error_va, vFEpuipA) GO(g_simple_async_result_set_from_error, vFpp) GO(g_simple_async_result_set_handle_cancellation, vFpi) GO(g_simple_async_result_set_op_res_gboolean, vFpi) @@ -1418,32 +1418,32 @@ GO(g_simple_proxy_resolver_set_default_proxy, vFpp) GO(g_simple_proxy_resolver_set_ignore_hosts, vFpp) GO(g_simple_proxy_resolver_set_uri_proxy, vFppp) GO(g_socket_accept, pFppp) -//GO(g_socket_address_enumerator_get_type, +GO(g_socket_address_enumerator_get_type, LFv) GO(g_socket_address_enumerator_next, pFppp) -//GO(g_socket_address_enumerator_next_async, +//GOM(g_socket_address_enumerator_next_async, vFpppp) GO(g_socket_address_enumerator_next_finish, pFppp) GO(g_socket_address_get_family, uFp) GO(g_socket_address_get_native_size, lFp) GO(g_socket_address_get_type, LFv) -//GO(g_socket_address_new_from_native, +GO(g_socket_address_new_from_native, pFpL) GO(g_socket_address_to_native, iFppLp) GO(g_socket_bind, iFppip) -//GO(g_socket_check_connect_result, +GO(g_socket_check_connect_result, iFpp) GO(g_socket_client_add_application_proxy, vFpp) GO(g_socket_client_connect, pFpppp) -//GO(g_socket_client_connect_async, -//GO(g_socket_client_connect_finish, -//GO(g_socket_client_connect_to_host, -//GO(g_socket_client_connect_to_host_async, -//GO(g_socket_client_connect_to_host_finish, +//GOM(g_socket_client_connect_async, vFppppp) +GO(g_socket_client_connect_finish, pFppp) +GO(g_socket_client_connect_to_host, pFppWpp) +//GOM(g_socket_client_connect_to_host_async, vFppWppp) +GO(g_socket_client_connect_to_host_finish, pFppp) GO(g_socket_client_connect_to_service, pFppppp) -//GO(g_socket_client_connect_to_service_async, -//GO(g_socket_client_connect_to_service_finish, +//GOM(g_socket_client_connect_to_service_async, vFpppppp) +GO(g_socket_client_connect_to_service_finish, pFppp) GO(g_socket_client_connect_to_uri, pFppWpp) -//GO(g_socket_client_connect_to_uri_async, +//GOM(g_socket_client_connect_to_uri_async, vFppWppp) GO(g_socket_client_connect_to_uri_finish, pFppp) -//GO(g_socket_client_event_get_type, -//GO(g_socket_client_get_enable_proxy, +GO(g_socket_client_event_get_type, LFv) +GO(g_socket_client_get_enable_proxy, iFp) GO(g_socket_client_get_family, uFp) GO(g_socket_client_get_local_address, pFp) GO(g_socket_client_get_protocol, iFp) @@ -1454,7 +1454,7 @@ GO(g_socket_client_get_tls, iFp) GO(g_socket_client_get_tls_validation_flags, uFp) GO(g_socket_client_get_type, LFv) GO(g_socket_client_new, pFv) -//GO(g_socket_client_set_enable_proxy, +GO(g_socket_client_set_enable_proxy, vFpi) GO(g_socket_client_set_family, vFpu) GO(g_socket_client_set_local_address, vFpp) GO(g_socket_client_set_protocol, vFpi) @@ -1468,69 +1468,69 @@ GO(g_socket_condition_check, uFpu) GO(g_socket_condition_timed_wait, iFpulpp) GO(g_socket_condition_wait, iFpupp) GO(g_socket_connect, iFpppp) -//GO(g_socket_connectable_enumerate, -//GO(g_socket_connectable_get_type, +GO(g_socket_connectable_enumerate, pFp) +GO(g_socket_connectable_get_type, LFv) GO(g_socket_connectable_proxy_enumerate, pFp) GO(g_socket_connection_connect, iFpppp) -//GO(g_socket_connection_connect_async, +//GOM(g_socket_connection_connect_async, vFppppp) GO(g_socket_connection_connect_finish, iFppp) GO(g_socket_connection_factory_create_connection, pFp) GO(g_socket_connection_factory_lookup_type, LFuui) GO(g_socket_connection_factory_register_type, vFLuui) -//GO(g_socket_connection_get_local_address, +GO(g_socket_connection_get_local_address, pFpp) GO(g_socket_connection_get_remote_address, pFpp) GO(g_socket_connection_get_socket, pFp) -//GO(g_socket_connection_get_type, +GO(g_socket_connection_get_type, LFv) GO(g_socket_connection_is_connected, iFp) GO(g_socket_control_message_deserialize, pFiiLp) -//GO(g_socket_control_message_get_level, +GO(g_socket_control_message_get_level, iFp) GO(g_socket_control_message_get_msg_type, iFp) GO(g_socket_control_message_get_size, LFp) -//GO(g_socket_control_message_get_type, +GO(g_socket_control_message_get_type, LFv) GO(g_socket_control_message_serialize, vFpp) -//GO(g_socket_create_source, +//GOM(g_socket_create_source, pFpup) GO(g_socket_family_get_type, LFv) GO(g_socket_get_available_bytes, lFp) -//GO(g_socket_get_blocking, -//GO(g_socket_get_broadcast, +GO(g_socket_get_blocking, iFp) +GO(g_socket_get_broadcast, iFp) GO(g_socket_get_credentials, pFpp) GO(g_socket_get_family, uFp) GO(g_socket_get_fd, iFp) -//GO(g_socket_get_keepalive, +GO(g_socket_get_keepalive, iFp) GO(g_socket_get_listen_backlog, iFp) -//GO(g_socket_get_local_address, -//GO(g_socket_get_multicast_loopback, +GO(g_socket_get_local_address, pFpp) +GO(g_socket_get_multicast_loopback, iFp) GO(g_socket_get_multicast_ttl, uFp) GO(g_socket_get_option, iFpiipp) GO(g_socket_get_protocol, iFp) GO(g_socket_get_remote_address, pFpp) GO(g_socket_get_socket_type, uFp) -//GO(g_socket_get_timeout, -//GO(g_socket_get_ttl, +GO(g_socket_get_timeout, uFp) +GO(g_socket_get_ttl, uFp) GO(g_socket_get_type, LFv) -//GO(g_socket_is_closed, -//GO(g_socket_is_connected, -//GO(g_socket_join_multicast_group, +GO(g_socket_is_closed, iFp) +GO(g_socket_is_connected, iFp) +GO(g_socket_join_multicast_group, iFppipp) GO(g_socket_leave_multicast_group, iFppipp) -//GO(g_socket_listen, +GO(g_socket_listen, iFpp) GO(g_socket_listener_accept, pFpppp) -//GO(g_socket_listener_accept_async, +//GOM(g_socket_listener_accept_async, vFpppp) GO(g_socket_listener_accept_finish, pFpppp) GO(g_socket_listener_accept_socket, pFpppp) -//GO(g_socket_listener_accept_socket_async, +//GOM(g_socket_listener_accept_socket_async, vFpppp) GO(g_socket_listener_accept_socket_finish, pFpppp) GO(g_socket_listener_add_address, iFppuippp) GO(g_socket_listener_add_any_inet_port, WFppp) GO(g_socket_listener_add_inet_port, iFpWpp) GO(g_socket_listener_add_socket, iFpppp) -//GO(g_socket_listener_close, -//GO(g_socket_listener_get_type, +GO(g_socket_listener_close, vFp) +GO(g_socket_listener_get_type, LFv) GO(g_socket_listener_new, pFv) GO(g_socket_listener_set_backlog, vFpi) -//GO(g_socket_msg_flags_get_type, +GO(g_socket_msg_flags_get_type, LFv) GO(g_socket_new, pFuuip) GO(g_socket_new_from_fd, pFip) -//GO(g_socket_protocol_get_type, +GO(g_socket_protocol_get_type, LFv) GO(g_socket_receive, lFppLpp) GO(g_socket_receive_from, lFpppLpp) GO(g_socket_receive_message, lFpppippppp) @@ -1542,26 +1542,26 @@ GO(g_socket_send_with_blocking, lFppLipp) GO(g_socket_service_get_type, LFv) GO(g_socket_service_is_active, iFp) GO(g_socket_service_new, pFv) -//GO(g_socket_service_start, -//GO(g_socket_service_stop, -//GO(g_socket_set_blocking, -//GO(g_socket_set_broadcast, -//GO(g_socket_set_keepalive, +GO(g_socket_service_start, vFp) +GO(g_socket_service_stop, vFp) +GO(g_socket_set_blocking, vFpi) +GO(g_socket_set_broadcast, vFpi) +GO(g_socket_set_keepalive, vFpi) GO(g_socket_set_listen_backlog, vFpi) GO(g_socket_set_multicast_loopback, vFpi) GO(g_socket_set_multicast_ttl, vFpu) GO(g_socket_set_option, iFpiiip) -//GO(g_socket_set_timeout, -//GO(g_socket_set_ttl, +GO(g_socket_set_timeout, vFpu) +GO(g_socket_set_ttl, vFpu) GO(g_socket_shutdown, iFpiip) GO(g_socket_speaks_ipv4, iFp) -//GO(g_socket_type_get_type, +GO(g_socket_type_get_type, LFv) GO(g_srv_target_copy, pFp) GO(g_srv_target_free, vFp) GO(g_srv_target_get_hostname, pFp) -//GO(g_srv_target_get_port, -//GO(g_srv_target_get_priority, -//GO(g_srv_target_get_type, +GO(g_srv_target_get_port, WFp) +GO(g_srv_target_get_priority, WFp) +GO(g_srv_target_get_type, LFv) GO(g_srv_target_get_weight, WFp) GO(g_srv_target_list_sort, pFp) GO(g_srv_target_new, pFpWWW) @@ -1569,98 +1569,98 @@ GO(g_static_resource_fini, vFp) GO(g_static_resource_get_resource, pFp) GO(g_static_resource_init, vFp) GO(g_subprocess_communicate, iFpppppp) -//GO(g_subprocess_communicate_async, +//GOM(g_subprocess_communicate_async, vFppppp) GO(g_subprocess_communicate_finish, iFppppp) GO(g_subprocess_communicate_utf8, iFpppppp) -//GO(g_subprocess_communicate_utf8_async, +//GOM(g_subprocess_communicate_utf8_async, vFppppp) GO(g_subprocess_communicate_utf8_finish, iFppppp) -//GO(g_subprocess_flags_get_type, -//GO(g_subprocess_force_exit, -//GO(g_subprocess_get_exit_status, +GO(g_subprocess_flags_get_type, LFv) +GO(g_subprocess_force_exit, vFp) +GO(g_subprocess_get_exit_status, iFp) GO(g_subprocess_get_identifier, pFp) -//GO(g_subprocess_get_if_exited, +GO(g_subprocess_get_if_exited, iFp) GO(g_subprocess_get_if_signaled, iFp) -//GO(g_subprocess_get_status, +GO(g_subprocess_get_status, iFp) GO(g_subprocess_get_stderr_pipe, pFp) GO(g_subprocess_get_stdin_pipe, pFp) -//GO(g_subprocess_get_stdout_pipe, -//GO(g_subprocess_get_successful, +GO(g_subprocess_get_stdout_pipe, pFp) +GO(g_subprocess_get_successful, iFp) GO(g_subprocess_get_term_sig, iFp) -//GO(g_subprocess_get_type, +GO(g_subprocess_get_type, LFv) GO(g_subprocess_launcher_getenv, pFpp) -//GO(g_subprocess_launcher_get_type, +GO(g_subprocess_launcher_get_type, LFv) GO(g_subprocess_launcher_new, pFu) -//GO(g_subprocess_launcher_set_child_setup, -//GO(g_subprocess_launcher_set_cwd, +//GOM(g_subprocess_launcher_set_child_setup, vFpppp) +GO(g_subprocess_launcher_set_cwd, vFpp) GO(g_subprocess_launcher_setenv, vFpppi) GO(g_subprocess_launcher_set_environ, vFpp) GO(g_subprocess_launcher_set_flags, vFpu) GO(g_subprocess_launcher_set_stderr_file_path, vFpp) -//GO(g_subprocess_launcher_set_stdin_file_path, -//GO(g_subprocess_launcher_set_stdout_file_path, -//GO(g_subprocess_launcher_spawn, +GO(g_subprocess_launcher_set_stdin_file_path, vFpp) +GO(g_subprocess_launcher_set_stdout_file_path, vFpp) +//GOM(g_subprocess_launcher_spawn, pFpppV) GO(g_subprocess_launcher_spawnv, pFppp) GO(g_subprocess_launcher_take_fd, vFpii) GO(g_subprocess_launcher_take_stderr_fd, vFpi) -//GO(g_subprocess_launcher_take_stdin_fd, -//GO(g_subprocess_launcher_take_stdout_fd, -//GO(g_subprocess_launcher_unsetenv, -//GO(g_subprocess_new, +GO(g_subprocess_launcher_take_stdin_fd, vFpi) +GO(g_subprocess_launcher_take_stdout_fd, vFpi) +GO(g_subprocess_launcher_unsetenv, vFpp) +//GOM(g_subprocess_new, pFuppV) GO(g_subprocess_newv, pFpup) GO(g_subprocess_send_signal, vFpi) -//GO(g_subprocess_wait, -//GO(g_subprocess_wait_async, +GO(g_subprocess_wait, iFppp) +//GOM(g_subprocess_wait_async, vFpppp) GO(g_subprocess_wait_check, iFppp) -//GO(g_subprocess_wait_check_async, +//GOM(g_subprocess_wait_check_async, vFpppp) GO(g_subprocess_wait_check_finish, iFppp) -//GO(g_subprocess_wait_finish, -//GO(g_task_attach_source, +GO(g_subprocess_wait_finish, iFppp) +//GOM(g_task_attach_source, vFppp) GO(g_task_get_cancellable, pFp) -//GO(g_task_get_check_cancellable, +GO(g_task_get_check_cancellable, iFp) GO(g_task_get_context, pFp) GO(g_task_get_priority, iFp) -//GO(g_task_get_return_on_cancel, -//GO(g_task_get_source_object, +GO(g_task_get_return_on_cancel, iFp) +GO(g_task_get_source_object, pFp) GO(g_task_get_source_tag, pFp) -//GO(g_task_get_task_data, +GO(g_task_get_task_data, pFp) GO(g_task_get_type, LFv) -//GO(g_task_had_error, +GO(g_task_had_error, iFp) GO(g_task_is_valid, iFpp) GOM(g_task_new, pFEpppp) GO(g_task_propagate_boolean, iFpp) GO(g_task_propagate_int, lFpp) GO(g_task_propagate_pointer, pFpp) -//GO(g_task_report_error, -//GO(g_task_report_new_error, +//GOM(g_task_report_error, vFppppp) +//GOM(g_task_report_new_error, vFppppuipV) GO(g_task_return_boolean, vFpi) GO(g_task_return_error, vFpp) -//GO(g_task_return_error_if_cancelled, +GO(g_task_return_error_if_cancelled, iFp) GO(g_task_return_int, vFpl) GOM(g_task_return_new_error, vFEpuipV) GOM(g_task_return_pointer, vFEppp) -//GO(g_task_run_in_thread, -//GO(g_task_run_in_thread_sync, -//GO(g_task_set_check_cancellable, +//GOM(g_task_run_in_thread, vFpp) +//GOM(g_task_run_in_thread_sync, vFpp) +GO(g_task_set_check_cancellable, vFpi) GO(g_task_set_priority, vFpi) GO(g_task_set_return_on_cancel, iFpi) GO(g_task_set_source_tag, vFpp) -//GO(g_task_set_task_data, +//GOM(g_task_set_task_data, vFppp) GO(g_tcp_connection_get_graceful_disconnect, iFp) -//GO(g_tcp_connection_get_type, +GO(g_tcp_connection_get_type, LFv) GO(g_tcp_connection_set_graceful_disconnect, vFpi) GO(g_tcp_wrapper_connection_get_base_io_stream, pFp) -//GO(g_tcp_wrapper_connection_get_type, +GO(g_tcp_wrapper_connection_get_type, LFv) GO(g_tcp_wrapper_connection_new, pFpp) GO(g_test_dbus_add_service_dir, vFpp) -//GO(g_test_dbus_down, -//GO(g_test_dbus_flags_get_type, +GO(g_test_dbus_down, vFp) +GO(g_test_dbus_flags_get_type, LFv) GO(g_test_dbus_get_bus_address, pFp) GO(g_test_dbus_get_flags, uFp) -//GO(g_test_dbus_get_type, +GO(g_test_dbus_get_type, LFv) GO(g_test_dbus_new, pFu) -//GO(g_test_dbus_stop, +GO(g_test_dbus_stop, vFp) GO(g_test_dbus_unset, vFv) -//GO(g_test_dbus_up, +GO(g_test_dbus_up, vFp) GO(g_themed_icon_append_name, vFpp) GO(g_themed_icon_get_names, pFp) GO(g_themed_icon_get_type, LFv) @@ -1669,30 +1669,30 @@ GO(g_themed_icon_new_from_names, pFpi) GO(g_themed_icon_new_with_default_fallbacks, pFp) GO(g_themed_icon_prepend_name, vFpp) //GO(g_threaded_resolver_get_type, -//GO(g_threaded_socket_service_get_type, +GO(g_threaded_socket_service_get_type, LFv) GO(g_threaded_socket_service_new, pFi) -//GO(g_tls_authentication_mode_get_type, -//GO(g_tls_backend_get_certificate_type, -//GO(g_tls_backend_get_client_connection_type, +GO(g_tls_authentication_mode_get_type, LFv) +GO(g_tls_backend_get_certificate_type, LFp) +GO(g_tls_backend_get_client_connection_type, LFp) GO(g_tls_backend_get_default, pFv) GO(g_tls_backend_get_default_database, pFp) -//GO(g_tls_backend_get_file_database_type, -//GO(g_tls_backend_get_server_connection_type, -//GO(g_tls_backend_get_type, -//GO(g_tls_backend_supports_tls, -//GO(g_tls_certificate_flags_get_type, +GO(g_tls_backend_get_file_database_type, LFp) +GO(g_tls_backend_get_server_connection_type, LFp) +GO(g_tls_backend_get_type, LFv) +GO(g_tls_backend_supports_tls, iFp) +GO(g_tls_certificate_flags_get_type, LFv) GO(g_tls_certificate_get_issuer, pFp) GO(g_tls_certificate_get_type, LFv) GO(g_tls_certificate_is_same, iFpp) GO(g_tls_certificate_list_new_from_file, pFpp) GO(g_tls_certificate_new_from_file, pFpp) -//GO(g_tls_certificate_new_from_files, +GO(g_tls_certificate_new_from_files, pFppp) GO(g_tls_certificate_new_from_pem, pFplp) -//GO(g_tls_certificate_request_flags_get_type, +GO(g_tls_certificate_request_flags_get_type, LFv) GO(g_tls_certificate_verify, uFppp) GO(g_tls_client_connection_get_accepted_cas, pFp) GO(g_tls_client_connection_get_server_identity, pFp) -//GO(g_tls_client_connection_get_type, +GO(g_tls_client_connection_get_type, LFv) GO(g_tls_client_connection_get_use_ssl3, iFp) GO(g_tls_client_connection_get_validation_flags, uFp) GO(g_tls_client_connection_new, pFppp) @@ -1700,7 +1700,7 @@ GO(g_tls_client_connection_set_server_identity, vFpp) GO(g_tls_client_connection_set_use_ssl3, vFpi) GO(g_tls_client_connection_set_validation_flags, vFpu) GO(g_tls_connection_emit_accept_certificate, iFppu) -//GO(g_tls_connection_get_certificate, +GO(g_tls_connection_get_certificate, pFp) GO(g_tls_connection_get_database, pFp) GO(g_tls_connection_get_interaction, pFp) GO(g_tls_connection_get_peer_certificate, pFp) @@ -1708,76 +1708,76 @@ GO(g_tls_connection_get_peer_certificate_errors, uFp) GO(g_tls_connection_get_rehandshake_mode, uFp) GO(g_tls_connection_get_require_close_notify, iFp) GO(g_tls_connection_get_type, LFv) -//GO(g_tls_connection_get_use_system_certdb, +GO(g_tls_connection_get_use_system_certdb, iFp) GO(g_tls_connection_handshake, iFppp) -//GO(g_tls_connection_handshake_async, +//GOM(g_tls_connection_handshake_async, vFpippp) GO(g_tls_connection_handshake_finish, iFppp) GO(g_tls_connection_set_certificate, vFpp) GO(g_tls_connection_set_database, vFpp) GO(g_tls_connection_set_interaction, vFpp) GO(g_tls_connection_set_rehandshake_mode, vFpu) GO(g_tls_connection_set_require_close_notify, vFpi) -//GO(g_tls_connection_set_use_system_certdb, +GO(g_tls_connection_set_use_system_certdb, vFpi) GO(g_tls_database_create_certificate_handle, pFpp) GO(g_tls_database_get_type, LFv) GO(g_tls_database_lookup_certificate_for_handle, pFpppupp) -//GO(g_tls_database_lookup_certificate_for_handle_async, -//GO(g_tls_database_lookup_certificate_for_handle_finish, +//GOM(g_tls_database_lookup_certificate_for_handle_async, vFpppuppp) +GO(g_tls_database_lookup_certificate_for_handle_finish, pFppp) GO(g_tls_database_lookup_certificate_issuer, pFpppupp) -//GO(g_tls_database_lookup_certificate_issuer_async, +//GOM(g_tls_database_lookup_certificate_issuer_async, vFpppuppp) GO(g_tls_database_lookup_certificate_issuer_finish, pFppp) GO(g_tls_database_lookup_certificates_issued_by, pFpppupp) -//GO(g_tls_database_lookup_certificates_issued_by_async, +//GOM(g_tls_database_lookup_certificates_issued_by_async, vFpppuppp) GO(g_tls_database_lookup_certificates_issued_by_finish, pFppp) -//GO(g_tls_database_lookup_flags_get_type, +GO(g_tls_database_lookup_flags_get_type, LFv) GO(g_tls_database_verify_chain, uFpppppupp) -//GO(g_tls_database_verify_chain_async, +//GOM(g_tls_database_verify_chain_async, vFpppppuppp) GO(g_tls_database_verify_chain_finish, uFppp) -//GO(g_tls_database_verify_flags_get_type, -//GO(g_tls_error_get_type, -//GO(g_tls_error_quark, -//GO(g_tls_file_database_get_type, +GO(g_tls_database_verify_flags_get_type, LFv) +GO(g_tls_error_get_type, LFv) +GO(g_tls_error_quark, uFv) +GO(g_tls_file_database_get_type, LFv) GO(g_tls_file_database_new, pFpp) GO(g_tls_interaction_ask_password, uFpppp) -//GO(g_tls_interaction_ask_password_async, -//GO(g_tls_interaction_ask_password_finish, +//GOM(g_tls_interaction_ask_password_async, vFppppp) +GO(g_tls_interaction_ask_password_finish, uFppp) GO(g_tls_interaction_get_type, LFv) -//GO(g_tls_interaction_invoke_ask_password, -//GO(g_tls_interaction_invoke_request_certificate, +GO(g_tls_interaction_invoke_ask_password, uFpppp) +GO(g_tls_interaction_invoke_request_certificate, uFppupp) GO(g_tls_interaction_request_certificate, uFppupp) -//GO(g_tls_interaction_request_certificate_async, +//GOM(g_tls_interaction_request_certificate_async, vFppuppp) GO(g_tls_interaction_request_certificate_finish, uFppp) -//GO(g_tls_interaction_result_get_type, -//GO(g_tls_password_flags_get_type, -//GO(g_tls_password_get_description, +GO(g_tls_interaction_result_get_type, LFv) +GO(g_tls_password_flags_get_type, LFv) +GO(g_tls_password_get_description, pFp) GO(g_tls_password_get_flags, uFp) -//GO(g_tls_password_get_type, +GO(g_tls_password_get_type, LFv) GO(g_tls_password_get_value, pFpp) GO(g_tls_password_get_warning, pFp) GO(g_tls_password_new, pFup) -//GO(g_tls_password_set_description, +GO(g_tls_password_set_description, vFpp) GO(g_tls_password_set_flags, vFpu) GO(g_tls_password_set_value, vFppl) -//GO(g_tls_password_set_value_full, +//GOM(g_tls_password_set_value_full, vFpplp) GO(g_tls_password_set_warning, vFpp) -//GO(g_tls_rehandshake_mode_get_type, -//GO(g_tls_server_connection_get_type, +GO(g_tls_rehandshake_mode_get_type, LFv) +GO(g_tls_server_connection_get_type, LFv) GO(g_tls_server_connection_new, pFppp) -//GO(g_unix_connection_get_type, +GO(g_unix_connection_get_type, LFv) GO(g_unix_connection_receive_credentials, pFppp) -//GO(g_unix_connection_receive_credentials_async, +//GOM(g_unix_connection_receive_credentials_async, vFpppp) GO(g_unix_connection_receive_credentials_finish, pFppp) GO(g_unix_connection_receive_fd, iFppp) GO(g_unix_connection_send_credentials, iFppp) -//GO(g_unix_connection_send_credentials_async, +//GOM(g_unix_connection_send_credentials_async, vFpppp) GO(g_unix_connection_send_credentials_finish, iFppp) GO(g_unix_connection_send_fd, iFpipp) GO(g_unix_credentials_message_get_credentials, pFp) -//GO(g_unix_credentials_message_get_type, -//GO(g_unix_credentials_message_is_supported, +GO(g_unix_credentials_message_get_type, LFv) +GO(g_unix_credentials_message_is_supported, iFv) GO(g_unix_credentials_message_new, pFv) GO(g_unix_credentials_message_new_with_credentials, pFp) -//GO(g_unix_fd_list_append, +GO(g_unix_fd_list_append, iFpip) GO(g_unix_fd_list_get, iFpip) GO(g_unix_fd_list_get_length, iFp) GO(g_unix_fd_list_get_type, LFv) @@ -1785,105 +1785,105 @@ GO(g_unix_fd_list_new, pFv) GO(g_unix_fd_list_new_from_array, pFpi) GO(g_unix_fd_list_peek_fds, pFpp) GO(g_unix_fd_list_steal_fds, pFpp) -//GO(g_unix_fd_message_append_fd, -//GO(g_unix_fd_message_get_fd_list, -//GO(g_unix_fd_message_get_type, -//GO(g_unix_fd_message_new, -//GO(g_unix_fd_message_new_with_fd_list, -//GO(g_unix_fd_message_steal_fds, -//GO(g_unix_input_stream_get_close_fd, -//GO(g_unix_input_stream_get_fd, -//GO(g_unix_input_stream_get_type, -//GO(g_unix_input_stream_new, -//GO(g_unix_input_stream_set_close_fd, -//GO(g_unix_is_mount_path_system_internal, -//GO(g_unix_mount_at, -//GO(g_unix_mount_compare, -//GO(g_unix_mount_free, -//GO(g_unix_mount_get_device_path, -//GO(g_unix_mount_get_fs_type, -//GO(g_unix_mount_get_mount_path, -//GO(g_unix_mount_guess_can_eject, -//GO(g_unix_mount_guess_icon, -//GO(g_unix_mount_guess_name, -//GO(g_unix_mount_guess_should_display, -//GO(g_unix_mount_guess_symbolic_icon, -//GO(g_unix_mount_is_readonly, -//GO(g_unix_mount_is_system_internal, -//GO(g_unix_mount_monitor_get_type, -//GO(g_unix_mount_monitor_new, -//GO(g_unix_mount_monitor_set_rate_limit, -//GO(g_unix_mount_point_compare, -//GO(g_unix_mount_point_free, -//GO(g_unix_mount_point_get_device_path, -//GO(g_unix_mount_point_get_fs_type, -//GO(g_unix_mount_point_get_mount_path, -//GO(g_unix_mount_point_get_options, -//GO(g_unix_mount_point_guess_can_eject, -//GO(g_unix_mount_point_guess_icon, -//GO(g_unix_mount_point_guess_name, -//GO(g_unix_mount_point_guess_symbolic_icon, -//GO(g_unix_mount_point_is_loopback, -//GO(g_unix_mount_point_is_readonly, -//GO(g_unix_mount_point_is_user_mountable, -//GO(g_unix_mount_points_changed_since, -//GO(g_unix_mount_points_get, -//GO(g_unix_mounts_changed_since, -//GO(g_unix_mounts_get, -//GO(g_unix_output_stream_get_close_fd, -//GO(g_unix_output_stream_get_fd, -//GO(g_unix_output_stream_get_type, -//GO(g_unix_output_stream_new, -//GO(g_unix_output_stream_set_close_fd, +GO(g_unix_fd_message_append_fd, iFpip) +GO(g_unix_fd_message_get_fd_list, pFp) +GO(g_unix_fd_message_get_type, LFv) +GO(g_unix_fd_message_new, pFv) +GO(g_unix_fd_message_new_with_fd_list, pFp) +GO(g_unix_fd_message_steal_fds, pFpp) +GO(g_unix_input_stream_get_close_fd, iFp) +GO(g_unix_input_stream_get_fd, iFp) +GO(g_unix_input_stream_get_type, LFv) +GO(g_unix_input_stream_new, pFii) +GO(g_unix_input_stream_set_close_fd, vFpi) +GO(g_unix_is_mount_path_system_internal, iFp) +GO(g_unix_mount_at, pFpp) +GO(g_unix_mount_compare, iFpp) +GO(g_unix_mount_free, vFp) +GO(g_unix_mount_get_device_path, pFp) +GO(g_unix_mount_get_fs_type, pFp) +GO(g_unix_mount_get_mount_path, pFp) +GO(g_unix_mount_guess_can_eject, iFp) +GO(g_unix_mount_guess_icon, pFp) +GO(g_unix_mount_guess_name, pFp) +GO(g_unix_mount_guess_should_display, iFp) +GO(g_unix_mount_guess_symbolic_icon, pFp) +GO(g_unix_mount_is_readonly, iFp) +GO(g_unix_mount_is_system_internal, iFp) +GO(g_unix_mount_monitor_get_type, LFv) +GO(g_unix_mount_monitor_new, pFv) +GO(g_unix_mount_monitor_set_rate_limit, vFpi) +GO(g_unix_mount_point_compare, iFpp) +GO(g_unix_mount_point_free, vFp) +GO(g_unix_mount_point_get_device_path, pFp) +GO(g_unix_mount_point_get_fs_type, pFp) +GO(g_unix_mount_point_get_mount_path, pFp) +GO(g_unix_mount_point_get_options, pFp) +GO(g_unix_mount_point_guess_can_eject, iFp) +GO(g_unix_mount_point_guess_icon, pFp) +GO(g_unix_mount_point_guess_name, pFp) +GO(g_unix_mount_point_guess_symbolic_icon, pFp) +GO(g_unix_mount_point_is_loopback, iFp) +GO(g_unix_mount_point_is_readonly, iFp) +GO(g_unix_mount_point_is_user_mountable, iFp) +GO(g_unix_mount_points_changed_since, iFL) +GO(g_unix_mount_points_get, pFp) +GO(g_unix_mounts_changed_since, iFL) +GO(g_unix_mounts_get, pFp) +GO(g_unix_output_stream_get_close_fd, iFp) +GO(g_unix_output_stream_get_fd, iFp) +GO(g_unix_output_stream_get_type, LFv) +GO(g_unix_output_stream_new, pFii) +GO(g_unix_output_stream_set_close_fd, vFpi) GO(g_unix_socket_address_abstract_names_supported, iFv) GO(g_unix_socket_address_get_address_type, uFp) GO(g_unix_socket_address_get_is_abstract, iFp) GO(g_unix_socket_address_get_path, pFp) GO(g_unix_socket_address_get_path_len, LFp) -//GO(g_unix_socket_address_get_type, +GO(g_unix_socket_address_get_type, LFv) GO(g_unix_socket_address_new, pFp) GO(g_unix_socket_address_new_abstract, pFpi) GO(g_unix_socket_address_new_with_type, pFpiu) -//GO(g_unix_socket_address_type_get_type, -//GO(g_vfs_get_default, -//GO(g_vfs_get_file_for_path, -//GO(g_vfs_get_file_for_uri, +GO(g_unix_socket_address_type_get_type, LFv) +GO(g_vfs_get_default, pFv) +GO(g_vfs_get_file_for_path, pFpp) +GO(g_vfs_get_file_for_uri, pFpp) GO(g_vfs_get_local, pFv) GO(g_vfs_get_supported_uri_schemes, pFp) -//GO(g_vfs_get_type, +GO(g_vfs_get_type, LFv) GO(g_vfs_is_active, iFp) GO(g_vfs_parse_name, pFpp) -//GO(g_volume_can_eject, -//GO(g_volume_can_mount, -//GO(g_volume_eject, -//GO(g_volume_eject_finish, -//GO(g_volume_eject_with_operation, +GO(g_volume_can_eject, iFp) +GO(g_volume_can_mount, iFp) +//GOM(g_volume_eject, vFpuppp) +GO(g_volume_eject_finish, iFppp) +//GOM(g_volume_eject_with_operation, vFpupppp) GO(g_volume_eject_with_operation_finish, iFppp) GO(g_volume_enumerate_identifiers, pFp) GO(g_volume_get_activation_root, pFp) GO(g_volume_get_drive, pFp) -//GO(g_volume_get_icon, +GO(g_volume_get_icon, pFp) GO(g_volume_get_identifier, pFpp) GO(g_volume_get_mount, pFp) -//GO(g_volume_get_name, +GO(g_volume_get_name, pFp) GO(g_volume_get_sort_key, pFp) GO(g_volume_get_symbolic_icon, pFp) -//GO(g_volume_get_type, +GO(g_volume_get_type, LFv) GO(g_volume_get_uuid, pFp) GO(g_volume_monitor_adopt_orphan_mount, pFp) GO(g_volume_monitor_get, pFv) -//GO(g_volume_monitor_get_connected_drives, +GO(g_volume_monitor_get_connected_drives, pFp) GO(g_volume_monitor_get_mount_for_uuid, pFpp) GO(g_volume_monitor_get_mounts, pFp) -//GO(g_volume_monitor_get_type, +GO(g_volume_monitor_get_type, LFv) GO(g_volume_monitor_get_volume_for_uuid, pFpp) -//GO(g_volume_monitor_get_volumes, -//GO(g_volume_mount, -//GO(g_volume_mount_finish, +GO(g_volume_monitor_get_volumes, pFp) +//GOM(g_volume_mount, vFpupppp) +GO(g_volume_mount_finish, iFppp) GO(g_volume_should_automount, iFp) -//GO(g_zlib_compressor_format_get_type, +GO(g_zlib_compressor_format_get_type, LFv) GO(g_zlib_compressor_get_file_info, pFp) -//GO(g_zlib_compressor_get_type, +GO(g_zlib_compressor_get_type, LFv) GO(g_zlib_compressor_new, pFui) GO(g_zlib_compressor_set_file_info, vFpp) GO(g_zlib_decompressor_get_file_info, pFp) diff --git a/src/wrapped/wrappedglib2.c b/src/wrapped/wrappedglib2.c index 0372e844a5cf3364c1f2d3d5a7da5a8780117e0e..210729f0490265f75e166998fd138407103a66a7 100644 --- a/src/wrapped/wrappedglib2.c +++ b/src/wrapped/wrappedglib2.c @@ -20,21 +20,28 @@ #include "gtkclass.h" #include "threads.h" -#ifdef ANDROID - const char* glib2Name = "libglib-2.0.so"; -#else - const char* glib2Name = "libglib-2.0.so.0"; -#endif +const char* glib2Name = "libglib-2.0.so.0"; +#define ALTNAME "libglib-2.0.so" + #define LIBNAME glib2 typedef void (*vFppip_t)(void*, void*, int, void*); +#ifdef HAVE_LD80LIBS +#define ADDED_FUNCTIONS_2() +#else +typedef void (*vFppippDpDC_t)(void*, void*, int32_t, void*, void*, double, void*, double, uint8_t); +#define ADDED_FUNCTIONS_2() \ + GO(g_assertion_message_cmpnum, vFppippDpDC_t) +#endif + #define ADDED_FUNCTIONS() \ GO(g_build_filenamev, pFp_t) \ GO(g_variant_get_va, vFpppp_t) \ GO(g_build_pathv, pFpp_t) \ GO(g_set_error_literal, vFppip_t) \ GO(g_variant_builder_add_value, vFpp_t) \ + ADDED_FUNCTIONS_2() #include "wrappedglib2types.h" @@ -166,28 +173,27 @@ SUPER() #undef GO // then the static functions callback that may be used with the structure, but dispatch also have a callback... #define GO(A) \ -static uintptr_t fct_funcs_prepare_##A = 0; \ -static int my_funcs_prepare_##A(void* source, int *timeout_) { \ - return (int)RunFunctionFmt(fct_funcs_prepare_##A, "pp", source, timeout_); \ -} \ -static uintptr_t fct_funcs_check_##A = 0; \ -static int my_funcs_check_##A(void* source) { \ - return (int)RunFunctionFmt(fct_funcs_check_##A, "p", source); \ -} \ -static uintptr_t fct_funcs_dispatch_cb_##A = 0; \ -static int my_funcs_dispatch_cb_##A(void* a, void* b, void* c, void* d) { \ - return (int)RunFunctionFmt(fct_funcs_dispatch_cb_##A, "pppp", a, b, c, d); \ -} \ -static uintptr_t fct_funcs_dispatch_##A = 0; \ -static int my_funcs_dispatch_##A(void* source, void* cb, void* data) { \ - uintptr_t old = fct_funcs_dispatch_cb_##A; \ - fct_funcs_dispatch_cb_##A = (uintptr_t)cb; \ - return (int)RunFunctionFmt(fct_funcs_dispatch_##A, "ppp", source, cb?my_funcs_dispatch_cb_##A:NULL, data); \ - fct_funcs_dispatch_cb_##A = old; \ -} \ -static uintptr_t fct_funcs_finalize_##A = 0; \ -static int my_funcs_finalize_##A(void* source) { \ - return (int)RunFunctionFmt(fct_funcs_finalize_##A, "p", source); \ +static int my_funcs_prepare_##A(void* source, int *timeout_) { \ + return (int)RunFunctionFmt((uintptr_t)ref_gsourcefuncs_##A->prepare, "pp", source, timeout_); \ +} \ +static uintptr_t fct_funcs_check_##A = 0; \ +static int my_funcs_check_##A(void* source) { \ + return (int)RunFunctionFmt((uintptr_t)ref_gsourcefuncs_##A->check, "p", source); \ +} \ +static uintptr_t fct_funcs_dispatch_cb_##A = 0; \ +static int my_funcs_dispatch_cb_##A(void* a, void* b, void* c, void* d) { \ + return (int)RunFunctionFmt(fct_funcs_dispatch_cb_##A, "pppp", a, b, c, d); \ +} \ +static uintptr_t fct_funcs_dispatch_##A = 0; \ +static int my_funcs_dispatch_##A(void* source, void* cb, void* data) { \ + uintptr_t old = fct_funcs_dispatch_cb_##A; \ + fct_funcs_dispatch_cb_##A = (uintptr_t)cb; \ + return (int)RunFunctionFmt((uintptr_t)ref_gsourcefuncs_##A->dispatch, "ppp", source, cb?my_funcs_dispatch_cb_##A:NULL, data); \ + fct_funcs_dispatch_cb_##A = old; \ +} \ +static uintptr_t fct_funcs_finalize_##A = 0; \ +static int my_funcs_finalize_##A(void* source) { \ + return (int)RunFunctionFmt((uintptr_t)ref_gsourcefuncs_##A->finalize, "p", source); \ } SUPER() #undef GO @@ -198,16 +204,14 @@ static my_GSourceFuncs_t* findFreeGSourceFuncs(my_GSourceFuncs_t* fcts) #define GO(A) if(ref_gsourcefuncs_##A == fcts) return &my_gsourcefuncs_##A; SUPER() #undef GO - #define GO(A) if(ref_gsourcefuncs_##A == 0) { \ - ref_gsourcefuncs_##A = fcts; \ - my_gsourcefuncs_##A.prepare = (fcts->prepare)?((GetNativeFnc((uintptr_t)fcts->prepare))?GetNativeFnc((uintptr_t)fcts->prepare):my_funcs_prepare_##A):NULL; \ - fct_funcs_prepare_##A = (uintptr_t)fcts->prepare; \ - my_gsourcefuncs_##A.check = (fcts->check)?((GetNativeFnc((uintptr_t)fcts->check))?GetNativeFnc((uintptr_t)fcts->check):my_funcs_check_##A):NULL; \ - fct_funcs_check_##A = (uintptr_t)fcts->check; \ - my_gsourcefuncs_##A.dispatch = (fcts->dispatch)?((GetNativeFnc((uintptr_t)fcts->dispatch))?GetNativeFnc((uintptr_t)fcts->dispatch):my_funcs_dispatch_##A):NULL; \ - fct_funcs_dispatch_##A = (uintptr_t)fcts->dispatch; \ - my_gsourcefuncs_##A.finalize = (fcts->finalize)?((GetNativeFnc((uintptr_t)fcts->finalize))?GetNativeFnc((uintptr_t)fcts->finalize):my_funcs_finalize_##A):NULL; \ - fct_funcs_finalize_##A = (uintptr_t)fcts->finalize; \ + #define GO(A) if(ref_gsourcefuncs_##A == 0) { \ + ref_gsourcefuncs_##A = fcts; \ + my_gsourcefuncs_##A.closure = fcts->closure; \ + my_gsourcefuncs_##A.marshal = fcts->marshal; \ + my_gsourcefuncs_##A.prepare = (fcts->prepare)?GetNativeOrAlt(fcts->prepare, my_funcs_prepare_##A):NULL; \ + my_gsourcefuncs_##A.check = (fcts->check)?GetNativeOrAlt(fcts->check, my_funcs_check_##A):NULL; \ + my_gsourcefuncs_##A.dispatch = (fcts->dispatch)?GetNativeOrAlt(fcts->dispatch, my_funcs_dispatch_##A):NULL; \ + my_gsourcefuncs_##A.finalize = (fcts->finalize)?GetNativeOrAlt(fcts->finalize, my_funcs_finalize_##A):NULL; \ return &my_gsourcefuncs_##A; \ } SUPER() @@ -936,17 +940,17 @@ EXPORT void* my_g_hash_table_find(x64emu_t* emu, void* table, void* f, void* dat return my->g_hash_table_find(table, findGHRFuncFct(f), data); } -EXPORT int my_g_spawn_async_with_pipes(x64emu_t* emu, void* dir, void* argv, void* envp, int flags, void* f, void* data, void* child, void* input, void* output, void* err, void* error) +EXPORT int my_g_spawn_async_with_pipes(x64emu_t* emu, void* dir, void* argv, void* envp, uint32_t flags, void* f, void* data, void* child, void* input, void* output, void* err, void* error) { return my->g_spawn_async_with_pipes(dir, argv, envp, flags, findSpawnChildSetupFct(f), data, child, input, output, err, error); } -EXPORT int my_g_spawn_async(x64emu_t* emu, void* dir, void* argv, void* envp, int flags, void* f, void* data, void* child, void* error) +EXPORT int my_g_spawn_async(x64emu_t* emu, void* dir, void* argv, void* envp, uint32_t flags, void* f, void* data, void* child, void* error) { return my->g_spawn_async(dir, argv, envp, flags, findSpawnChildSetupFct(f), data, child, error); } -EXPORT int my_g_spawn_sync(x64emu_t* emu, void* dir, void* argv, void* envp, int flags, void* f, void* data, void* input, void* output, void* status, void* error) +EXPORT int my_g_spawn_sync(x64emu_t* emu, void* dir, void* argv, void* envp, uint32_t flags, void* f, void* data, void* input, void* output, void* status, void* error) { return my->g_spawn_sync(dir, argv, envp, flags, findSpawnChildSetupFct(f), data, input, output, status, error); } @@ -1012,7 +1016,7 @@ EXPORT void* my_g_thread_create(x64emu_t* emu, void* func, void* data, int joina return my->g_thread_create(my_prepare_thread(emu, func, data, 0, &et), et, joinable, error); } -EXPORT void* my_g_thread_create_full(x64emu_t* emu, void* func, void* data, unsigned long stack, int joinable, int bound, int priority, void* error) +EXPORT void* my_g_thread_create_full(x64emu_t* emu, void* func, void* data, unsigned long stack, int joinable, int bound, uint32_t priority, void* error) { void* et = NULL; return my->g_thread_create_full(my_prepare_thread(emu, func, data, stack, &et), et, stack, joinable, bound, priority, error); @@ -1108,12 +1112,12 @@ EXPORT void* my_g_log_set_default_handler(x64emu_t *emu, void* f, void* data) return reverseGLogFuncFct(my->g_log_set_default_handler(findGLogFuncFct(f), data)); } -EXPORT uint32_t my_g_io_add_watch_full(x64emu_t* emu, void* channel, int priority, int cond, void* f, void* data, void* notify) +EXPORT uint32_t my_g_io_add_watch_full(x64emu_t* emu, void* channel, int priority, uint32_t cond, void* f, void* data, void* notify) { return my->g_io_add_watch_full(channel, priority, cond, findGIOFuncFct(f), data, findDestroyFct(notify)); } -EXPORT uint32_t my_g_io_add_watch(x64emu_t* emu, void* channel, int cond, void* f, void* data) +EXPORT uint32_t my_g_io_add_watch(x64emu_t* emu, void* channel, uint32_t cond, void* f, void* data) { return my->g_io_add_watch(channel, cond, findGIOFuncFct(f), data); } @@ -1195,7 +1199,7 @@ EXPORT uint32_t my_g_log_set_handler(x64emu_t *emu, void* domain, int level, voi return my->g_log_set_handler(domain, level, findGLogFuncFct(f), data); } -EXPORT void my_g_set_error(x64emu_t *emu, void* err, void* domain, int code, void* fmt, uintptr_t* stack) +EXPORT void my_g_set_error(x64emu_t *emu, void* err, void* domain, uint32_t code, void* fmt, uintptr_t* stack) { char buf[1000]; myStackAlign(emu, fmt, stack, emu->scratch, R_EAX, 4); @@ -1204,13 +1208,13 @@ EXPORT void my_g_set_error(x64emu_t *emu, void* err, void* domain, int code, voi my->g_set_error_literal(err, domain, code, buf); } -EXPORT void* my_g_error_new(x64emu_t* emu, void* domain, int code, void* fmt, uintptr_t* b) +EXPORT void* my_g_error_new(x64emu_t* emu, uint32_t domain, int code, void* fmt, uintptr_t* b) { myStackAlign(emu, fmt, b, emu->scratch, R_EAX, 3); PREPARE_VALIST; return my->g_error_new_valist(domain, code, fmt, VARARGS); } -EXPORT void* my_g_error_new_valist(x64emu_t* emu, void* domain, int code, void* fmt, x64_va_list_t V) +EXPORT void* my_g_error_new_valist(x64emu_t* emu, uint32_t domain, int code, void* fmt, x64_va_list_t V) { #ifdef CONVERT_VALIST CONVERT_VALIST(V); @@ -1384,7 +1388,7 @@ EXPORT void* my_g_strconcat(x64emu_t* emu, void* first, uintptr_t* data) return p; } -EXPORT void* my_g_markup_parse_context_new(x64emu_t* emu, void* parser, int flags, void* data, void* destroy) +EXPORT void* my_g_markup_parse_context_new(x64emu_t* emu, void* parser, uint32_t flags, void* data, void* destroy) { return my->g_markup_parse_context_new(parser, flags, data, findDestroyFct(destroy)); } @@ -1449,6 +1453,13 @@ EXPORT void* my_g_bytes_new_with_free_func(x64emu_t* emu, void* data, unsigned l return my->g_bytes_new_with_free_func(data, n, findGDestroyNotifyFct(notify), user); } +#ifndef HAVE_LD80BITS +EXPORT void my_g_assertion_message_cmpnum(void* domain, void* file, int32_t line, void* func, void* expr, double arg1, void* comp, double arg2, uint8_t numtype) +{ + my->g_assertion_message_cmpnum(domain, file, line, func, expr, arg1, comp, arg2, numtype); +} +#endif + #define PRE_INIT \ if(box64_nogtk) \ return -1; diff --git a/src/wrapped/wrappedglib2_private.h b/src/wrapped/wrappedglib2_private.h index 4f06530ce4ef4767d5928f5086db6978962fafa4..deee39128b6878d492cc78fc40f1b98b3f07382b 100644 --- a/src/wrapped/wrappedglib2_private.h +++ b/src/wrapped/wrappedglib2_private.h @@ -1,5 +1,5 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif //GO(__aeabi_d2lz, @@ -24,21 +24,21 @@ GO(g_array_sized_new, pFiiuu) GOM(g_array_sort, vFEpp) GOM(g_array_sort_with_data, vFEppp) GO(g_array_unref, vFp) -GO(g_ascii_digit_value, iFC) +GO(g_ascii_digit_value, iFc) GO(g_ascii_dtostr, pFpid) GO(g_ascii_formatd, pFpipd) GO(g_ascii_strcasecmp, iFpp) -GO(g_ascii_strdown, pFpi) +GO(g_ascii_strdown, pFpl) GO(g_ascii_strncasecmp, iFppL) GO(g_ascii_strtod, dFpp) GO(g_ascii_strtoll, lFppu) GO(g_ascii_strtoull, LFppu) GO(g_ascii_strup, pFpl) -GO(g_ascii_tolower, CFC) -GO(g_ascii_toupper, CFC) -GO(g_ascii_xdigit_value, iFC) +GO(g_ascii_tolower, cFc) +GO(g_ascii_toupper, cFc) +GO(g_ascii_xdigit_value, iFc) GO(g_assertion_message, vFppipp) -GO(g_assertion_message_cmpnum, vFppippDpDC) +GOD(g_assertion_message_cmpnum, vFppippDpDc, my_g_assertion_message_cmpnum) GO(g_assertion_message_cmpstr, vFppippppp) GO(g_assertion_message_error, vFppipppui) GO(g_assertion_message_expr, vFppipp) @@ -47,20 +47,20 @@ GO(g_async_queue_length, iFp) GO(g_async_queue_length_unlocked, iFp) GO(g_async_queue_lock, vFp) GO(g_async_queue_new, pFv) -//GO(g_async_queue_new_full, +//GOM(g_async_queue_new_full, pFp) GO(g_async_queue_pop, pFp) -//GO(g_async_queue_pop_unlocked, +GO(g_async_queue_pop_unlocked, pFp) GO(g_async_queue_push, vFpp) -//GO(g_async_queue_push_sorted, -//GO(g_async_queue_push_sorted_unlocked, +//GOM(g_async_queue_push_sorted, vFpppp) +//GOM(g_async_queue_push_sorted_unlocked, vFpppp) GO(g_async_queue_push_unlocked, vFpp) GO(g_async_queue_ref, pFp) -//GO(g_async_queue_ref_unlocked, -//GO(g_async_queue_sort, -//GO(g_async_queue_sort_unlocked, -//GO(g_async_queue_timed_pop, +GO(g_async_queue_ref_unlocked, vFp) +//GOM(g_async_queue_sort, vFppp) +//GOM(g_async_queue_sort_unlocked, vFppp) +GO(g_async_queue_timed_pop, pFpp) GO(g_async_queue_timed_pop_unlocked, pFpp) -GO(g_async_queue_timeout_pop, pFpU) +GO(g_async_queue_timeout_pop, pFpL) GO(g_async_queue_timeout_pop_unlocked, pFpL) GO(g_async_queue_try_pop, pFp) GO(g_async_queue_try_pop_unlocked, pFp) @@ -68,21 +68,21 @@ GO(g_async_queue_unlock, vFp) GO(g_async_queue_unref, vFp) GO(g_async_queue_unref_and_unlock, vFp) GO2(g_atexit, vFEp, my_atexit) -//GO(g_atomic_int_add, -//GO(g_atomic_int_and, +GO(g_atomic_int_add, iFpi) +GO(g_atomic_int_and, uFpu) GO(g_atomic_int_compare_and_exchange, iFpii) GO(g_atomic_int_dec_and_test, iFp) GO(g_atomic_int_exchange_and_add, iFpi) GO(g_atomic_int_get, iFp) GO(g_atomic_int_inc, vFp) -//GO(g_atomic_int_or, -//GO(g_atomic_int_set, +GO(g_atomic_int_or, uFpu) +GO(g_atomic_int_set, vFpi) GO(g_atomic_int_xor, uFpu) GO(g_atomic_pointer_add, lFpl) -//GO(g_atomic_pointer_and, +GO(g_atomic_pointer_and, LFpL) GO(g_atomic_pointer_compare_and_exchange, iFppp) GO(g_atomic_pointer_get, pFp) -//GO(g_atomic_pointer_or, +GO(g_atomic_pointer_or, LFpL) GO(g_atomic_pointer_set, vFpp) GO(g_atomic_pointer_xor, LFpL) GO(g_base64_decode, pFpp) @@ -92,53 +92,53 @@ GO(g_base64_encode, pFpL) GO(g_base64_encode_close, LFippp) GO(g_base64_encode_step, LFpLippp) GO(g_basename, pFp) -//GO(g_bit_lock, -GO(g_bit_nth_lsf, iFii) +GO(g_bit_lock, vFpi) +GO(g_bit_nth_lsf, iFLi) GO(g_bit_nth_msf, iFLi) GO(g_bit_storage, uFL) GO(g_bit_trylock, iFpi) GO(g_bit_unlock, vFpi) -//GO(g_blow_chunks, -//GO(g_bookmark_file_add_application, +GO(g_blow_chunks, vFv) +GO(g_bookmark_file_add_application, vFpppp) GO(g_bookmark_file_add_group, vFppp) -//GO(g_bookmark_file_error_quark, -//GO(g_bookmark_file_free, -//GO(g_bookmark_file_get_added, +GO(g_bookmark_file_error_quark, uFv) +GO(g_bookmark_file_free, vFp) +GO(g_bookmark_file_get_added, lFppp) GO(g_bookmark_file_get_app_info, iFppppppp) GO(g_bookmark_file_get_applications, pFpppp) -//GO(g_bookmark_file_get_description, -//GO(g_bookmark_file_get_groups, +GO(g_bookmark_file_get_description, pFppp) +GO(g_bookmark_file_get_groups, pFpppp) GO(g_bookmark_file_get_icon, iFppppp) -//GO(g_bookmark_file_get_is_private, +GO(g_bookmark_file_get_is_private, iFppp) GO(g_bookmark_file_get_mime_type, pFppp) -//GO(g_bookmark_file_get_modified, +GO(g_bookmark_file_get_modified, lFppp) GO(g_bookmark_file_get_size, iFp) -//GO(g_bookmark_file_get_title, +GO(g_bookmark_file_get_title, pFppp) GO(g_bookmark_file_get_uris, pFpp) GO(g_bookmark_file_get_visited, lFppp) -//GO(g_bookmark_file_has_application, -//GO(g_bookmark_file_has_group, +GO(g_bookmark_file_has_application, iFpppp) +GO(g_bookmark_file_has_group, iFpppp) GO(g_bookmark_file_has_item, iFpp) GO(g_bookmark_file_load_from_data, iFppLp) GO(g_bookmark_file_load_from_data_dirs, iFpppp) -//GO(g_bookmark_file_load_from_file, +GO(g_bookmark_file_load_from_file, iFppp) GO(g_bookmark_file_move_item, iFpppp) GO(g_bookmark_file_new, pFv) -//GO(g_bookmark_file_remove_application, -//GO(g_bookmark_file_remove_group, +GO(g_bookmark_file_remove_application, iFpppp) +GO(g_bookmark_file_remove_group, iFpppp) GO(g_bookmark_file_remove_item, iFppp) -//GO(g_bookmark_file_set_added, +GO(g_bookmark_file_set_added, vFppl) GO(g_bookmark_file_set_app_info, iFppppilp) -//GO(g_bookmark_file_set_description, +GO(g_bookmark_file_set_description, vFppp) GO(g_bookmark_file_set_groups, vFpppL) GO(g_bookmark_file_set_icon, vFpppp) GO(g_bookmark_file_set_is_private, vFppi) -//GO(g_bookmark_file_set_mime_type, -//GO(g_bookmark_file_set_modified, -//GO(g_bookmark_file_set_title, +GO(g_bookmark_file_set_mime_type, vFppp) +GO(g_bookmark_file_set_modified, vFppl) +GO(g_bookmark_file_set_title, vFppp) GO(g_bookmark_file_set_visited, vFppl) GO(g_bookmark_file_to_data, pFppp) -//GO(g_bookmark_file_to_file, +GO(g_bookmark_file_to_file, iFppp) GOM(g_build_filename, pFEpV) GO(g_build_filenamev, pFp) GOM(g_build_path, pFEppV) // wrap using g_build_pathv @@ -155,8 +155,8 @@ GO(g_byte_array_remove_index_fast, pFpu) GO(g_byte_array_remove_range, pFpuu) GO(g_byte_array_set_size, pFpu) GO(g_byte_array_sized_new, pFu) -//GOM(g_byte_array_sort, vFpB) -//GOM(g_byte_array_sort_with_data, vFpBp) +//GOM(g_byte_array_sort, vFpp) +//GOM(g_byte_array_sort_with_data, vFppp) GO(g_byte_array_unref, vFp) GO(g_bytes_compare, iFpp) GO(g_bytes_equal, iFpp) @@ -174,17 +174,17 @@ GO(g_bytes_unref_to_array, pFp) GO(g_bytes_unref_to_data, pFpp) GO(g_cache_destroy, vFp) GO(g_cache_insert, pFpp) -//GO(g_cache_key_foreach, -//GO(g_cache_new, +//GOM(g_cache_key_foreach, vFppp) +//GOM(g_cache_new, pFppppppp) GO(g_cache_remove, vFpp) -//GO(g_cache_value_foreach, +//GOM(g_cache_value_foreach, vFppp) GO(g_chdir, iFp) GO(g_checksum_copy, pFp) GO(g_checksum_free, vFp) GO(g_checksum_get_digest, vFppp) GO(g_checksum_get_string, pFp) GO(g_checksum_new, pFu) -//GO(g_checksum_reset, +GO(g_checksum_reset, vFp) GO(g_checksum_type_get_length, lFu) GO(g_checksum_update, vFppl) GOM(g_child_watch_add, uFEipp) @@ -194,7 +194,7 @@ GO(g_chmod, iFpi) GO(g_clear_error, vFp) //GOM(g_clear_pointer, vFEpp) GO(g_close, iFip) -GO(g_completion_add_items, vFpp) +GO(g_completion_add_items, vFpp) // need wrapping?: GCompletion structure contains 2 callback GO(g_completion_clear_items, vFp) GO(g_completion_complete, pFppp) GO(g_completion_complete_utf8, pFppp) @@ -217,7 +217,7 @@ GO(g_cond_timed_wait, iFppp) GO(g_cond_wait, vFpp) GO(g_cond_wait_until, iFppl) GO(g_convert, pFplppppp) -//GO(g_convert_error_quark, +GO(g_convert_error_quark, uFv) GO(g_convert_with_fallback, pFplpppppp) GO(g_convert_with_iconv, pFplpppp) GO(g_creat, iFpi) @@ -234,10 +234,10 @@ GO(g_datalist_init, vFp) GO(g_datalist_set_flags, vFpu) GO(g_datalist_unset_flags, vFpu) GO(g_dataset_destroy, vFp) -//GO(g_dataset_foreach, -//GO(g_dataset_id_get_data, +//GOM(g_dataset_foreach, vFppp) +GO(g_dataset_id_get_data, pFpu) GO(g_dataset_id_remove_no_notify, pFpu) -//GO(g_dataset_id_set_data_full, +//GOM(g_dataset_id_set_data_full, vFpupp) GO(g_date_add_days, vFpu) GO(g_date_add_months, vFpu) GO(g_date_add_years, vFpu) @@ -252,7 +252,7 @@ GO(g_date_get_days_in_month, CFuW) GO(g_date_get_iso8601_week_of_year, uFp) GO(g_date_get_julian, uFp) GO(g_date_get_monday_week_of_year, uFp) -GO(g_date_get_monday_weeks_in_year, CFp) +GO(g_date_get_monday_weeks_in_year, CFW) GO(g_date_get_month, uFp) GO(g_date_get_sunday_week_of_year, uFp) GO(g_date_get_sunday_weeks_in_year, CFW) @@ -279,47 +279,47 @@ GO(g_date_subtract_days, vFpu) GO(g_date_subtract_months, vFpu) GO(g_date_subtract_years, vFpu) GO(g_date_time_add, pFpl) -//GO(g_date_time_add_days, +GO(g_date_time_add_days, pFpi) GO(g_date_time_add_full, pFpiiiiid) -//GO(g_date_time_add_hours, +GO(g_date_time_add_hours, pFpi) GO(g_date_time_add_minutes, pFpi) -//GO(g_date_time_add_months, +GO(g_date_time_add_months, pFpi) GO(g_date_time_add_seconds, pFpd) -//GO(g_date_time_add_weeks, -//GO(g_date_time_add_years, -//GO(g_date_time_compare, +GO(g_date_time_add_weeks, pFpi) +GO(g_date_time_add_years, pFpi) +GO(g_date_time_compare, iFpp) GO(g_date_time_difference, lFpp) -//GO(g_date_time_equal, +GO(g_date_time_equal, iFpp) GO(g_date_time_format, pFpp) -//GO(g_date_time_get_day_of_month, -//GO(g_date_time_get_day_of_week, -//GO(g_date_time_get_day_of_year, -//GO(g_date_time_get_hour, +GO(g_date_time_get_day_of_month, iFp) +GO(g_date_time_get_day_of_week, iFp) +GO(g_date_time_get_day_of_year, iFp) +GO(g_date_time_get_hour, iFp) GO(g_date_time_get_microsecond, iFp) -//GO(g_date_time_get_minute, -//GO(g_date_time_get_month, -//GO(g_date_time_get_second, +GO(g_date_time_get_minute, iFp) +GO(g_date_time_get_month, iFp) +GO(g_date_time_get_second, iFp) GO(g_date_time_get_seconds, dFp) GO(g_date_time_get_timezone_abbreviation, pFp) GO(g_date_time_get_utc_offset, lFp) -//GO(g_date_time_get_week_numbering_year, -//GO(g_date_time_get_week_of_year, -//GO(g_date_time_get_year, +GO(g_date_time_get_week_numbering_year, iFp) +GO(g_date_time_get_week_of_year, iFp) +GO(g_date_time_get_year, iFp) GO(g_date_time_get_ymd, vFpppp) -//GO(g_date_time_hash, +GO(g_date_time_hash, uFp) GO(g_date_time_is_daylight_savings, iFp) GO(g_date_time_new, pFpiiiiid) -//GO(g_date_time_new_from_timeval_local, +GO(g_date_time_new_from_timeval_local, pFp) GO(g_date_time_new_from_timeval_utc, pFp) -//GO(g_date_time_new_from_unix_local, +GO(g_date_time_new_from_unix_local, pFl) GO(g_date_time_new_from_unix_utc, pFl) -//GO(g_date_time_new_local, +GO(g_date_time_new_local, pFiiiiid) GO(g_date_time_new_now, pFp) GO(g_date_time_new_now_local, pFv) GO(g_date_time_new_now_utc, pFv) GO(g_date_time_new_utc, pFiiiiid) GO(g_date_time_ref, pFp) -//GO(g_date_time_to_local, +GO(g_date_time_to_local, pFp) GO(g_date_time_to_timeval, iFpp) GO(g_date_time_to_timezone, pFpp) GO(g_date_time_to_unix, lFp) @@ -353,23 +353,23 @@ GO(g_environ_unsetenv, pFpp) GO(g_error_copy, pFp) GO(g_error_free, vFp) GO(g_error_matches, iFpui) -GOM(g_error_new, pFEpipV) +GOM(g_error_new, pFEuipV) GO(g_error_new_literal, pFuip) -GOM(g_error_new_valist, pFEpipA) +GOM(g_error_new_valist, pFEuipA) GO(g_file_error_from_errno, uFi) -GO(g_file_error_quark, pFv) +GO(g_file_error_quark, uFv) GO(g_file_get_contents, iFpppp) GO(g_filename_display_basename, pFp) GO(g_filename_display_name, pFp) GO(g_filename_from_uri, pFppp) GO(g_filename_from_utf8, pFplppp) GO(g_filename_to_uri, pFppp) -GO(g_filename_to_utf8, pFpippp) +GO(g_filename_to_utf8, pFplppp) GO(g_file_open_tmp, iFppp) GO(g_file_read_link, pFpp) GO(g_file_set_contents, iFpplp) GO(g_file_test, iFpu) -GO(g_find_program_in_path, pFp) // need wrap? +GO(g_find_program_in_path, pFp) GO(g_fopen, pFpp) GO(g_format_size, pFL) GO(g_format_size_for_display, pFl) @@ -382,15 +382,15 @@ GO(g_get_charset, iFp) GO(g_get_codeset, pFv) GO(g_get_current_dir, pFv) GO(g_get_current_time, vFp) -GO(g_getenv, pFp) // should wrap? +GO(g_getenv, pFp) GO(g_get_environ, pFv) GO(g_get_filename_charsets, iFp) GO(g_get_home_dir, pFv) GO(g_get_host_name, pFv) GO(g_get_language_names, pFv) GO(g_get_locale_variants, pFp) -GO(g_get_monotonic_time, IFv) -//GO(g_get_num_processors, +GO(g_get_monotonic_time, lFv) +GO(g_get_num_processors, uFv) GO(g_get_prgname, pFv) GO(g_get_real_name, pFv) GO(g_get_real_time, lFv) @@ -437,88 +437,88 @@ GO(g_hmac_get_digest, vFppp) GO(g_hmac_get_string, pFp) GO(g_hmac_new, pFupL) GO(g_hmac_ref, pFp) -//GO(g_hmac_unref, +GO(g_hmac_unref, vFp) GO(g_hmac_update, vFppl) -//GO(g_hook_alloc, -//GO(g_hook_compare_ids, -//GO(g_hook_destroy, -//GO(g_hook_destroy_link, -//GO(g_hook_find, -//GO(g_hook_find_data, -//GO(g_hook_find_func, -//GO(g_hook_find_func_data, -//GO(g_hook_first_valid, -//GO(g_hook_free, -//GO(g_hook_get, -//GO(g_hook_insert_before, -//GO(g_hook_insert_sorted, -//GO(g_hook_list_clear, -//GO(g_hook_list_init, -//GO(g_hook_list_invoke, -//GO(g_hook_list_invoke_check, -//GO(g_hook_list_marshal, -//GO(g_hook_list_marshal_check, -//GO(g_hook_next_valid, -//GO(g_hook_prepend, -//GO(g_hook_ref, -//GO(g_hook_unref, -//GO(g_hostname_is_ascii_encoded, -//GO(g_hostname_is_ip_address, -//GO(g_hostname_is_non_ascii, -//GO(g_hostname_to_ascii, -//GO(g_hostname_to_unicode, +//GOM(g_hook_alloc, pFp) +//GOM(g_hook_compare_ids, iFpp) +//GOM(g_hook_destroy, iFpL) +//GOM(g_hook_destroy_link, vFpp) +//GOM(g_hook_find, pFpipp) +//GOM(g_hook_find_data, pFpip) +//GOM(g_hook_find_func, pFpip) +//GOM(g_hook_find_func_data, pFpipp) +//GOM(g_hook_first_valid, pFpi) +//GOM(g_hook_free, vFpp) +//GOM(g_hook_get, pFpL) +//GOM(g_hook_insert_before, vFppp) +//GOM(g_hook_insert_sorted, vFppp) +//GOM(g_hook_list_clear, vFp) +//GOM(g_hook_list_init, vFpu) +//GOM(g_hook_list_invoke, vFpi) +//GOM(g_hook_list_invoke_check, vFpi) +//GOM(g_hook_list_marshal, vFpipp) +//GOM(g_hook_list_marshal_check, vFpipp) +//GOM(g_hook_next_valid, pFppi) +//GOM(g_hook_prepend, vFpp) +//GOM(g_hook_ref, pFpp) +//GOM(g_hook_unref, vFpp) +GO(g_hostname_is_ascii_encoded, iFp) +GO(g_hostname_is_ip_address, iFp) +GO(g_hostname_is_non_ascii, iFp) +GO(g_hostname_to_ascii, pFp) +GO(g_hostname_to_unicode, pFp) GO(g_iconv, LFppppp) GO(g_iconv_close, iFp) GO(g_iconv_open, pFpp) GOM(g_idle_add, uFEpp) GOM(g_idle_add_full, uFEippp) GO(g_idle_remove_by_data, iFp) -GO(g_idle_source_new, pFv) +GO(g_idle_source_new, pFv) // should wrap? GO(g_int64_equal, iFpp) GO(g_int64_hash, uFp) GO(g_int_equal, iFpp) GO(g_intern_static_string, pFp) GO(g_intern_string, pFp) GO(g_int_hash, uFp) -GOM(g_io_add_watch, uFEpipp) -GOM(g_io_add_watch_full, uFEpiippp) +GOM(g_io_add_watch, uFEpupp) +GOM(g_io_add_watch_full, uFEpiuppp) GO(g_io_channel_close, vFp) GO(g_io_channel_error_from_errno, uFi) -GO(g_io_channel_error_quark, pFv) -GO(g_io_channel_flush, iFpp) -GO(g_io_channel_get_buffer_condition, iFp) +GO(g_io_channel_error_quark, uFv) +GO(g_io_channel_flush, uFpp) //should wrap? +GO(g_io_channel_get_buffer_condition, uFp) GO(g_io_channel_get_buffered, iFp) -GO(g_io_channel_get_buffer_size, iFp) +GO(g_io_channel_get_buffer_size, LFp) GO(g_io_channel_get_close_on_unref, iFp) GO(g_io_channel_get_encoding, pFp) -GO(g_io_channel_get_flags, iFp) +GO(g_io_channel_get_flags, uFp) GO(g_io_channel_get_line_term, pFpp) GO(g_io_channel_init, vFp) GO(g_io_channel_new_file, pFppp) -GO(g_io_channel_read, iFppLp) -GO(g_io_channel_read_chars, iFpplpp) -GO(g_io_channel_read_line, iFppppp) -GO(g_io_channel_read_line_string, iFpppp) -GO(g_io_channel_read_to_end, iFpppp) -GO(g_io_channel_read_unichar, iFppp) +GO(g_io_channel_read, uFppLp) +GO(g_io_channel_read_chars, uFppLpp) +GO(g_io_channel_read_line, uFppppp) +GO(g_io_channel_read_line_string, uFpppp) +GO(g_io_channel_read_to_end, uFpppp) +GO(g_io_channel_read_unichar, uFppp) GO(g_io_channel_ref, pFp) -GO(g_io_channel_seek, iFpIi) -GO(g_io_channel_seek_position, iFpIip) +GO(g_io_channel_seek, uFplu) +GO(g_io_channel_seek_position, uFplup) GO(g_io_channel_set_buffered, vFpi) GO(g_io_channel_set_buffer_size, vFpL) GO(g_io_channel_set_close_on_unref, vFpi) -GO(g_io_channel_set_encoding, iFppp) -GO(g_io_channel_set_flags, iFpip) +GO(g_io_channel_set_encoding, uFppp) +GO(g_io_channel_set_flags, uFpup) GO(g_io_channel_set_line_term, vFppi) -GO(g_io_channel_shutdown, iFpip) +GO(g_io_channel_shutdown, uFpip) GO(g_io_channel_unix_get_fd, iFp) GO(g_io_channel_unix_new, pFi) GO(g_io_channel_unref, vFp) -GO(g_io_channel_write, iFppLp) -GO(g_io_channel_write_chars, iFpplpp) -GO(g_io_channel_write_unichar, iFpup) -GO(g_io_create_watch, pFpp) -GO(g_key_file_error_quark, pFv) +GO(g_io_channel_write, uFppLp) +GO(g_io_channel_write_chars, uFpplpp) +GO(g_io_channel_write_unichar, uFpup) +GO(g_io_create_watch, pFpu) +GO(g_key_file_error_quark, uFv) GO(g_key_file_free, vFp) GO(g_key_file_get_boolean, iFpppp) GO(g_key_file_get_boolean_list, pFppppp) @@ -557,7 +557,7 @@ GO(g_key_file_set_double_list, vFppppL) GO(g_key_file_set_int64, vFpppl) GO(g_key_file_set_integer, vFpppi) GO(g_key_file_set_integer_list, vFppppL) -GO(g_key_file_set_list_separator, vFpC) +GO(g_key_file_set_list_separator, vFpc) GO(g_key_file_set_locale_string, vFppppp) GO(g_key_file_set_locale_string_list, vFpppppL) GO(g_key_file_set_string, vFpppp) @@ -574,7 +574,7 @@ GO(g_list_alloc, pFv) GO(g_list_append, pFpp) GO(g_list_concat, pFpp) GO(g_list_copy, pFp) -//GOM(g_list_copy_deep, pFEpBp) +//GOM(g_list_copy_deep, pFEppp) GO(g_list_delete_link, pFpp) GO(g_listenv, pFv) GO(g_list_find, pFpp) @@ -594,10 +594,10 @@ GO(g_list_length, uFp) GO(g_list_nth, pFpu) GO(g_list_nth_data, pFpu) GO(g_list_nth_prev, pFpu) -//GO(g_list_pop_allocator, +GO(g_list_pop_allocator, vFv) GO(g_list_position, iFpp) GO(g_list_prepend, pFpp) -//GO(g_list_push_allocator, +GO(g_list_push_allocator, vFp) GO(g_list_remove, pFpp) GO(g_list_remove_all, pFpp) GO(g_list_remove_link, pFpp) @@ -623,12 +623,12 @@ GO(g_main_context_check, iFpipi) GO(g_main_context_default, pFv) GO(g_main_context_dispatch, vFp) //GOM(g_main_context_find_source_by_funcs_user_data, pFEppp) // 2nd is a GSourceFuncs structures with callbacks.. -GO(g_main_context_find_source_by_id, pFpu) -GO(g_main_context_find_source_by_user_data, pFpp) +GO(g_main_context_find_source_by_id, pFpu) // sould wrap? +GO(g_main_context_find_source_by_user_data, pFpp) // sould wrap? GOM(g_main_context_get_poll_func, pFEp) GO(g_main_context_get_thread_default, pFv) //GOM(g_main_context_invoke, vFppp) // 2nd is GSourceFuncs -//GOM(g_main_context_invoke_full, vFpippB) // 3rd is GSourceFuncs +//GOM(g_main_context_invoke_full, vFpippp) // 3rd is GSourceFuncs GO(g_main_context_is_owner, iFp) GO(g_main_context_iteration, iFpi) GO(g_main_context_new, pFv) @@ -666,8 +666,8 @@ GO(g_mapped_file_new, pFpip) GO(g_mapped_file_new_from_fd, pFiip) GO(g_mapped_file_ref, pFp) GO(g_mapped_file_unref, vFp) -//GO(g_markup_collect_attributes, -//GO(g_markup_error_quark, +//GOM(g_markup_collect_attributes, iFppppupV) +GO(g_markup_error_quark, uFv) GO(g_markup_escape_text, pFpl) GO(g_markup_parse_context_end_parse, iFpp) GO(g_markup_parse_context_free, vFp) @@ -675,12 +675,12 @@ GO(g_markup_parse_context_get_element, pFp) GO(g_markup_parse_context_get_element_stack, pFp) GO(g_markup_parse_context_get_position, vFppp) GO(g_markup_parse_context_get_user_data, pFp) -GOM(g_markup_parse_context_new, pFEpipp) +GOM(g_markup_parse_context_new, pFEpupp) GO(g_markup_parse_context_parse, iFpplp) -//GO(g_markup_parse_context_pop, -//GO(g_markup_parse_context_push, +GO(g_markup_parse_context_pop, pFp) +//GOM(g_markup_parse_context_push, vFppp) GO(g_markup_parse_context_ref, pFp) -//GO(g_markup_parse_context_unref, +GO(g_markup_parse_context_unref, vFp) GOM(g_markup_printf_escaped, pFEpV) GOM(g_markup_vprintf_escaped, pFEpA) GO(g_match_info_expand_references, pFppp) @@ -698,19 +698,19 @@ GO(g_match_info_matches, iFp) GO(g_match_info_next, iFpp) GO(g_match_info_ref, pFp) GO(g_match_info_unref, vFp) -//GO(g_mem_chunk_alloc, +GO(g_mem_chunk_alloc, pFp) GO(g_mem_chunk_alloc0, pFp) -//GO(g_mem_chunk_clean, -//GO(g_mem_chunk_destroy, +GO(g_mem_chunk_clean, vFp) +GO(g_mem_chunk_destroy, vFp) GO(g_mem_chunk_free, vFpp) -//GO(g_mem_chunk_info, +GO(g_mem_chunk_info, vFv) GO(g_mem_chunk_new, pFpiLi) GO(g_mem_chunk_print, vFp) -//GO(g_mem_chunk_reset, +GO(g_mem_chunk_reset, vFp) GO(g_memdup, pFpu) GO(g_mem_is_system_malloc, iFv) GO(g_mem_profile, vFv) -//GOM(g_mem_set_vtable, vFEp) // VMemTable needs wrapping +//GOM(g_mem_set_vtable, vFEp) GO(g_mkdir, iFpi) GO(g_mkdir_with_parents, iFpi) GO(g_mkdtemp, pFp) @@ -726,32 +726,32 @@ GO(g_mutex_trylock, iFp) GO(g_mutex_unlock, vFp) GO(g_node_child_index, iFpp) GO(g_node_child_position, iFpp) -//GO(g_node_children_foreach, -//GO(g_node_copy, +//GOM(g_node_children_foreach, vFpupp) +GO(g_node_copy, pFp) GOM(g_node_copy_deep, pFEppp) -//GO(g_node_depth, +GO(g_node_depth, uFp) GO(g_node_destroy, vFp) GO(g_node_find, pFpuup) GO(g_node_find_child, pFpup) -//GO(g_node_first_sibling, +GO(g_node_first_sibling, pFp) GO(g_node_get_root, pFp) GO(g_node_insert, pFpip) GO(g_node_insert_after, pFppp) GO(g_node_insert_before, pFppp) GO(g_node_is_ancestor, iFpp) -//GO(g_node_last_child, +GO(g_node_last_child, pFp) GO(g_node_last_sibling, pFp) -//GO(g_node_max_height, +GO(g_node_max_height, uFp) GO(g_node_n_children, uFp) GO(g_node_new, pFp) GO(g_node_n_nodes, uFpu) GO(g_node_nth_child, pFpu) -//GO(g_node_pop_allocator, +GO(g_node_pop_allocator, vFv) GO(g_node_prepend, pFpp) GO(g_node_push_allocator, vFp) -//GO(g_node_reverse_children, -GOM(g_node_traverse, vFEpiiipp) -//GO(g_node_unlink, +GO(g_node_reverse_children, vFp) +GOM(g_node_traverse, vFEpuuipp) +GO(g_node_unlink, vFp) GO(g_nullify_pointer, vFp) GOM(g_once_impl, pFEppp) GO(g_once_init_enter, iFp) @@ -761,7 +761,7 @@ GO(g_once_init_leave, vFpL) GO(g_once_init_leave_pointer, vFpp) GO(g_on_error_query, vFp) GO(g_on_error_stack_trace, vFp) -GO(g_open, iFpii) +GO(g_open, iFpOi) GO(g_option_context_add_group, vFpp) GOM(g_option_context_add_main_entries, vFEppp) GO(g_option_context_free, vFp) @@ -781,16 +781,16 @@ GO(g_option_context_set_ignore_unknown_options, vFpi) GO(g_option_context_set_main_group, vFpp) GO(g_option_context_set_strict_posix, vFpi) // 2.44+ GO(g_option_context_set_summary, vFpp) -//GOM(g_option_context_set_translate_func, vFEpBpB) +//GOM(g_option_context_set_translate_func, vFEpppp) GO(g_option_context_set_translation_domain, vFpp) -GO(g_option_error_quark, pFv) +GO(g_option_error_quark, uFv) GO(g_option_group_add_entries, vFpp) GO(g_option_group_free, vFp) GOM(g_option_group_new, pFEppppp) GO(g_option_group_ref, pFp) // 2.44+ -//GOM(g_option_group_set_error_hook, vFEpB) +//GOM(g_option_group_set_error_hook, vFEpp) GOM(g_option_group_set_parse_hooks, vFEppp) -//GOM(g_option_group_set_translate_func, vFEpBpB) +//GOM(g_option_group_set_translate_func, vFEpppp) GO(g_option_group_set_translation_domain, vFpp) GO(g_option_group_unref, vFp) // 2.44+ GO(g_parse_debug_string, uFppu) @@ -804,11 +804,11 @@ GO(g_pattern_match_string, iFpp) GO(g_pattern_spec_equal, iFpp) GO(g_pattern_spec_free, vFp) GO(g_pattern_spec_new, pFp) -//GO(g_pointer_bit_lock, +GO(g_pointer_bit_lock, vFpi) GO(g_pointer_bit_trylock, iFpi) GO(g_pointer_bit_unlock, vFpi) GO(g_poll, iFpui) -//GO(g_prefix_error, vFpppppppppp) //vaarg, should align? +//GOM(g_prefix_error, vFppV) GOM(g_print, vFEpV) GOM(g_printerr, vFEpV) GOM(g_printf, iFEpV) @@ -818,7 +818,7 @@ GOM(g_private_new, pFEp) GO(g_private_replace, vFpp) GO(g_private_set, vFpp) GO(g_propagate_error, vFpp) -//GO(g_propagate_prefixed_error, vFpppppppppppp) //vaarg, should align? +//GOM(g_propagate_prefixed_error, vFpppV) GO(g_ptr_array_add, vFpp) GOM(g_ptr_array_foreach, vFEppp) GO(g_ptr_array_free, pFpi) @@ -827,7 +827,7 @@ GO(g_ptr_array_new, pFv) GOM(g_ptr_array_new_full, pFEup) GOM(g_ptr_array_new_with_free_func, pFEp) GO(g_ptr_array_ref, pFp) -GO(g_ptr_array_remove, vFpp) +GO(g_ptr_array_remove, iFpp) GO(g_ptr_array_remove_fast, iFpp) GO(g_ptr_array_remove_index, pFpu) GO(g_ptr_array_remove_index_fast, pFpu) @@ -844,14 +844,14 @@ GO(g_quark_from_string, uFp) GO(g_quark_to_string, pFu) GO(g_quark_try_string, uFp) GO(g_queue_clear, vFp) -//GOM(g_queue_clear_full, vFEpB) // 2.60+ +//GOM(g_queue_clear_full, vFEpp) // 2.60+ GO(g_queue_copy, pFp) GO(g_queue_delete_link, vFpp) GO(g_queue_find, pFpp) GOM(g_queue_find_custom, pFEppp) GOM(g_queue_foreach, vFEppp) GO(g_queue_free, vFp) -//GOM(g_queue_free_full, vFEpB) +//GOM(g_queue_free_full, vFEpp) GO(g_queue_get_length, uFp) GO(g_queue_index, iFpp) GO(g_queue_init, vFp) @@ -859,7 +859,7 @@ GO(g_queue_insert_after, vFppp) GO(g_queue_insert_after_link, vFppp) // 2.62+ GO(g_queue_insert_before, vFppp) GO(g_queue_insert_before_link, vFppp) // 2.62+ -//GOM(g_queue_insert_sorted, vFEppBp) +//GOM(g_queue_insert_sorted, vFEpppp) GO(g_queue_is_empty, iFp) GO(g_queue_link_index, iFpp) GO(g_queue_new, pFv) @@ -883,8 +883,8 @@ GO(g_queue_push_tail, vFpp) GO(g_queue_push_tail_link, vFpp) GO(g_queue_remove, iFpp) GO(g_queue_remove_all, uFpp) -GO(g_queue_reverse, pFp) -//GOM(g_queue_sort, vFEpBp) +GO(g_queue_reverse, vFp) +//GOM(g_queue_sort, vFEppp) GO(g_queue_unlink, vFpp) GO(g_rand_copy, pFp) GO(g_rand_double, dFp) @@ -910,7 +910,7 @@ GO(g_rec_mutex_lock, vFp) GO(g_rec_mutex_trylock, iFp) GO(g_rec_mutex_unlock, vFp) GO(g_regex_check_replacement, iFppp) -//GO(g_regex_error_quark, +GO(g_regex_error_quark, uFv) GO(g_regex_escape_nul, pFpi) GO(g_regex_escape_string, pFpi) GO(g_regex_get_capture_count, iFp) @@ -921,108 +921,108 @@ GO(g_regex_get_max_backref, iFp) GO(g_regex_get_max_lookbehind, iFp) GO(g_regex_get_pattern, pFp) GO(g_regex_get_string_number, iFpp) -GO(g_regex_match, iFppip) +GO(g_regex_match, iFppup) GO(g_regex_match_all, iFppup) GO(g_regex_match_all_full, iFppliupp) -GO(g_regex_match_full, iFppLiipp) +GO(g_regex_match_full, iFppliupp) GO(g_regex_match_simple, iFppuu) GO(g_regex_new, pFpuup) GO(g_regex_ref, pFp) -GO(g_regex_replace, pFppLipip) -//GOM(g_regex_replace_eval, pFEppLiiBpp) +GO(g_regex_replace, pFpplipup) +//GOM(g_regex_replace_eval, pFEppliuppp) GO(g_regex_replace_literal, pFpplipup) GO(g_regex_split, pFppu) GO(g_regex_split_full, pFppliuip) GO(g_regex_split_simple, pFppuu) GO(g_regex_unref, vFp) GO(g_relation_count, iFppi) -//GO(g_relation_delete, -//GO(g_relation_destroy, -//GO(g_relation_exists, -//GO(g_relation_index, -//GO(g_relation_insert, +GO(g_relation_delete, iFppi) +GO(g_relation_destroy, vFp) +//GOM(g_relation_exists, iFpV) +//GOM(g_relation_index, vFpipp) +//GOM(g_relation_insert, vFpV) GO(g_relation_new, pFi) GO(g_relation_print, vFp) GO(g_relation_select, pFppi) -//GO(g_reload_user_special_dirs_cache, +GO(g_reload_user_special_dirs_cache, vFv) GO(g_remove, iFp) GO(g_rename, iFpp) GO(g_return_if_fail_warning, vFppp) GO(g_rmdir, iFp) -//GO(g_rw_lock_clear, -//GO(g_rw_lock_init, -//GO(g_rw_lock_reader_lock, +GO(g_rw_lock_clear, vFp) +GO(g_rw_lock_init, vFp) +GO(g_rw_lock_reader_lock, vFp) GO(g_rw_lock_reader_trylock, iFp) GO(g_rw_lock_reader_unlock, vFp) -//GO(g_rw_lock_writer_lock, -//GO(g_rw_lock_writer_trylock, -//GO(g_rw_lock_writer_unlock, -//GO(g_scanner_cur_line, -//GO(g_scanner_cur_position, -//GO(g_scanner_cur_token, -//GO(g_scanner_cur_value, -//GO(g_scanner_destroy, -//GO(g_scanner_eof, -//GO(g_scanner_error, -//GO(g_scanner_get_next_token, -//GO(g_scanner_input_file, -//GO(g_scanner_input_text, -//GO(g_scanner_lookup_symbol, -//GO(g_scanner_new, -//GO(g_scanner_peek_next_token, -//GO(g_scanner_scope_add_symbol, -//GO(g_scanner_scope_foreach_symbol, -//GO(g_scanner_scope_lookup_symbol, -//GO(g_scanner_scope_remove_symbol, -//GO(g_scanner_set_scope, -//GO(g_scanner_sync_file_offset, -//GO(g_scanner_unexp_token, -//GO(g_scanner_warn, -//GO(g_sequence_append, -//GO(g_sequence_foreach, -//GO(g_sequence_foreach_range, -//GO(g_sequence_free, +GO(g_rw_lock_writer_lock, vFp) +GO(g_rw_lock_writer_trylock, iFp) +GO(g_rw_lock_writer_unlock, vFp) +//GOM(g_scanner_cur_line, uFp) +//GOM(g_scanner_cur_position, uFp) +//GOM(g_scanner_cur_token, uFp) +//GOM(g_scanner_cur_value, UFp) +//GOM(g_scanner_destroy, vFp) +//GOM(g_scanner_eof, iFp) +//GOM(g_scanner_error, vFppV) +//GOM(g_scanner_get_next_token, uFp) +//GOM(g_scanner_input_file, vFpi) +//GOM(g_scanner_input_text, vFppu) +//GOM(g_scanner_lookup_symbol, pFpp) +//GOM(g_scanner_new, pFp) +//GOM(g_scanner_peek_next_token, uFp) +//GOM(g_scanner_scope_add_symbol, vFpupp) +//GOM(g_scanner_scope_foreach_symbol, vFpupp) +//GOM(g_scanner_scope_lookup_symbol, pFpup) +//GOM(g_scanner_scope_remove_symbol, vFpup) +//GOM(g_scanner_set_scope, uFpu) +//GOM(g_scanner_sync_file_offset, vFp) +//GOM(g_scanner_unexp_token, vFpuppppi) +//GOM(g_scanner_warn, vFppV) +GO(g_sequence_append, pFpp) +//GOM(g_sequence_foreach, vFppp) +//GOM(g_sequence_foreach_range, vFpppp) +GO(g_sequence_free, vFp) GO(g_sequence_get, pFp) -//GO(g_sequence_get_begin_iter, +GO(g_sequence_get_begin_iter, pFp) GO(g_sequence_get_end_iter, pFp) GO(g_sequence_get_iter_at_pos, pFpi) GO(g_sequence_get_length, iFp) GO(g_sequence_insert_before, pFpp) -//GO(g_sequence_insert_sorted, -//GO(g_sequence_insert_sorted_iter, +//GOM(g_sequence_insert_sorted, pFpppp) +//GOM(g_sequence_insert_sorted_iter, pFpppp) GO(g_sequence_iter_compare, iFpp) GO(g_sequence_iter_get_position, iFp) GO(g_sequence_iter_get_sequence, pFp) -//GO(g_sequence_iter_is_begin, +GO(g_sequence_iter_is_begin, iFp) GO(g_sequence_iter_is_end, iFp) GO(g_sequence_iter_move, pFpi) -//GO(g_sequence_iter_next, +GO(g_sequence_iter_next, pFp) GO(g_sequence_iter_prev, pFp) -//GO(g_sequence_lookup, -//GO(g_sequence_lookup_iter, -//GO(g_sequence_move, +//GOM(g_sequence_lookup, pFpppp) +//GOM(g_sequence_lookup_iter, pFpppp) +GO(g_sequence_move, vFpp) GO(g_sequence_move_range, vFppp) -//GO(g_sequence_new, +//GOM(g_sequence_new, pFp) GO(g_sequence_prepend, pFpp) GO(g_sequence_range_get_midpoint, pFpp) GO(g_sequence_remove, vFp) GO(g_sequence_remove_range, vFpp) -//GO(g_sequence_search, -//GO(g_sequence_search_iter, +//GOM(g_sequence_search, pFpppp) +//GOM(g_sequence_search_iter, pFpppp) GO(g_sequence_set, vFpp) -//GO(g_sequence_sort, -//GO(g_sequence_sort_changed, -//GO(g_sequence_sort_changed_iter, -//GO(g_sequence_sort_iter, -//GO(g_sequence_swap, +//GOM(g_sequence_sort, vFppp) +//GOM(g_sequence_sort_changed, vFppp) +//GOM(g_sequence_sort_changed_iter, vFppp) +//GOM(g_sequence_sort_iter, vFppp) +GO(g_sequence_swap, vFpp) GO(g_set_application_name, vFp) GO(g_setenv, iFppi) -GOM(g_set_error, vFEppipV) +GOM(g_set_error, vFEpuipV) GO(g_set_error_literal, vFpuip) GO(g_set_prgname, vFp) GOM(g_set_printerr_handler, pFEp) GOM(g_set_print_handler, pFEp) -//GO(g_shell_error_quark, +GO(g_shell_error_quark, uFv) GO(g_shell_parse_argv, iFpppp) GO(g_shell_quote, pFp) GO(g_shell_unquote, pFpp) @@ -1042,7 +1042,7 @@ GO(g_slist_copy, pFp) GO(g_slist_delete_link, pFpp) GO(g_slist_find, pFpp) GOM(g_slist_find_custom, pFEppp) -GOM(g_slist_foreach, pFEppp) +GOM(g_slist_foreach, vFEppp) GO(g_slist_free, vFp) GO(g_slist_free_1, vFp) GOM(g_slist_free_full, vFEpp) @@ -1055,10 +1055,10 @@ GO(g_slist_last, pFp) GO(g_slist_length, uFp) GO(g_slist_nth, pFpu) GO(g_slist_nth_data, pFpu) -//GO(g_slist_pop_allocator, +GO(g_slist_pop_allocator, vFv) GO(g_slist_position, iFpp) GO(g_slist_prepend, pFpp) -//GO(g_slist_push_allocator, +GO(g_slist_push_allocator, vFp) GO(g_slist_remove, pFpp) GO(g_slist_remove_all, pFpp) GO(g_slist_remove_link, pFpp) @@ -1066,9 +1066,9 @@ GO(g_slist_reverse, pFp) GOM(g_slist_sort, pFEpp) GOM(g_slist_sort_with_data, pFEppp) GOM(g_snprintf, iFEpLpV) -GO(g_source_add_child_source, vFpp) +GO(g_source_add_child_source, vFpp) //should wrap? GO(g_source_add_poll, vFpp) -GO(g_source_add_unix_fd, pFpii) +GO(g_source_add_unix_fd, pFpiu) GO(g_source_attach, uFpp) GO(g_source_destroy, vFp) GO(g_source_get_can_recurse, iFp) @@ -1077,12 +1077,12 @@ GO(g_source_get_current_time, vFpp) GO(g_source_get_id, uFp) GO(g_source_get_name, pFp) GO(g_source_get_priority, iFp) -GO(g_source_get_ready_time, IFp) -GO(g_source_get_time, IFp) +GO(g_source_get_ready_time, lFp) +GO(g_source_get_time, lFp) GO(g_source_is_destroyed, iFp) -GO(g_source_modify_unix_fd, vFppi) +GO(g_source_modify_unix_fd, vFppu) GOM(g_source_new, pFEpu) -GO(g_source_query_unix_fd, iFpp) +GO(g_source_query_unix_fd, uFpp) GO(g_source_ref, pFp) GO(g_source_remove, iFu) GOM(g_source_remove_by_funcs_user_data, iFEpp) @@ -1091,24 +1091,24 @@ GO(g_source_remove_child_source, vFpp) GO(g_source_remove_poll, vFpp) GO(g_source_remove_unix_fd, vFpp) GOM(g_source_set_callback, vFEpppp) -//GOM(g_source_set_callback_indirect, vFEppB) +//GOM(g_source_set_callback_indirect, vFEppp) GO(g_source_set_can_recurse, vFpi) GOM(g_source_set_funcs, vFEpp) GO(g_source_set_name, vFpp) GO(g_source_set_name_by_id, vFup) GO(g_source_set_priority, vFpi) -GO(g_source_set_ready_time, vFpI) +GO(g_source_set_ready_time, vFpl) GO(g_source_unref, vFp) GO(g_spaced_primes_closest, uFu) -GOM(g_spawn_async, iFEpppipppp) -GOM(g_spawn_async_with_pipes, iFEpppippppppp) +GOM(g_spawn_async, iFEpppupppp) +GOM(g_spawn_async_with_pipes, iFEpppuppppppp) GO(g_spawn_check_exit_status, iFip) GO(g_spawn_close_pid, vFi) GO(g_spawn_command_line_async, iFpp) GO(g_spawn_command_line_sync, iFppppp) -GO(g_spawn_error_quark, pFv) -GO(g_spawn_exit_error_quark, pFv) -GOM(g_spawn_sync, iFEpppipppppp) +GO(g_spawn_error_quark, uFv) +GO(g_spawn_exit_error_quark, uFv) +GOM(g_spawn_sync, iFEpppupppppp) GOM(g_sprintf, iFEppV) GO(g_stat, iFpp) GO(g_static_mutex_free, vFp) @@ -1134,14 +1134,14 @@ GO(g_static_rw_lock_writer_lock, vFp) GO(g_static_rw_lock_writer_trylock, iFp) GO(g_static_rw_lock_writer_unlock, vFp) GO(g_stpcpy, pFpp) -GO(g_strcanon, pFppC) +GO(g_strcanon, pFppc) GO(g_strcasecmp, iFpp) GO(g_strchomp, pFp) GO(g_strchug, pFp) GO(g_strcmp0, iFpp) GO(g_strcompress, pFp) GOM(g_strconcat, pFEpV) //vaarg, no va_list equivalent... -GO(g_strdelimit, pFppC) +GO(g_strdelimit, pFppc) GO(g_strdown, pFp) GO(g_strdup, pFp) GOM(g_strdup_printf, pFEpV) @@ -1155,7 +1155,7 @@ GO(g_str_hash, uFp) GO(g_str_has_prefix, iFpp) GO(g_str_has_suffix, iFpp) GO(g_string_append, pFpp) -GO(g_string_append_c, pFpC) +GO(g_string_append_c, pFpc) GO(g_string_append_len, pFppl) GOM(g_string_append_printf, vFEppV) GO(g_string_append_unichar, pFpu) @@ -1177,7 +1177,7 @@ GO(g_string_free, pFpi) GO(g_string_free_to_bytes, pFp) GO(g_string_hash, uFp) GO(g_string_insert, pFplp) -GO(g_string_insert_c, pFplC) +GO(g_string_insert_c, pFplc) GO(g_string_insert_len, pFplpl) GO(g_string_insert_unichar, pFplu) GO(g_string_new, pFp) @@ -1185,7 +1185,7 @@ GO(g_string_new_len, pFpl) GO(g_string_overwrite, pFpLp) GO(g_string_overwrite_len, pFpLpl) GO(g_string_prepend, pFpp) -GO(g_string_prepend_c, pFpC) +GO(g_string_prepend_c, pFpc) GO(g_string_prepend_len, pFppl) GO(g_string_prepend_unichar, pFpu) GOM(g_string_printf, vFEppV) @@ -1199,99 +1199,99 @@ GO(g_str_is_ascii, iFp) GOM(g_strjoin, pFEpV) GOM(g_strjoinv, pFEpp) GO(g_strlcat, LFppL) -GO(g_strlcpy, uFppu) +GO(g_strlcpy, LFppL) GO(g_str_match_string, iFppi) GO(g_strncasecmp, iFppu) GO(g_strndup, pFpL) -GO(g_strnfill, pFLC) +GO(g_strnfill, pFLc) GO(g_strreverse, pFp) GO(g_strrstr, pFpp) GO(g_strrstr_len, pFplp) GO(g_strsignal, pFi) GO(g_strsplit, pFppi) GO(g_strsplit_set, pFppi) -GO(g_strstr_len, pFpip) +GO(g_strstr_len, pFplp) GO(g_str_to_ascii, pFpp) GO(g_strtod, dFpp) GO(g_str_tokenize_and_fold, pFppp) GO(g_strup, pFp) GO(g_strv_contains, iFpp) GO(g_strv_length, uFp) -//GO(g_test_add_data_func, -//GO(g_test_add_data_func_full, -//GO(g_test_add_func, -//GO(g_test_add_vtable, +//GOM(g_test_add_data_func, vFppp) +//GOM(g_test_add_data_func_full, vFpppp) +//GOM(g_test_add_func, vFpp) +//GOM(g_test_add_vtable, vFpLpppp) GO(g_test_assert_expected_messages_internal, vFppip) -//GO(g_test_bug, -//GO(g_test_bug_base, -//GO(g_test_build_filename, -//GO(g_test_create_case, +GO(g_test_bug, vFp) +GO(g_test_bug_base, vFp) +//GOM(g_test_build_filename, pFupV) +//GOM(g_test_create_case, pFpLpppp) GO(g_test_create_suite, pFp) GO(g_test_expect_message, vFpip) -//GO(g_test_fail, -//GO(g_test_failed, +GO(g_test_fail, vFv) +GO(g_test_failed, iFv) GO(g_test_get_dir, pFu) -//GO(g_test_get_filename, +//GOM(g_test_get_filename, pFupV) GO(g_test_get_root, pFv) -//GO(g_test_incomplete, -//GO(g_test_init, +GO(g_test_incomplete, vFp) +//GOM(g_test_init, vFppV) GO(g_test_log_buffer_free, vFp) GO(g_test_log_buffer_new, pFv) GO(g_test_log_buffer_pop, pFp) GO(g_test_log_buffer_push, vFpup) GO(g_test_log_msg_free, vFp) -//GO(g_test_log_set_fatal_handler, +//GOM(g_test_log_set_fatal_handler, vFpp) GO(g_test_log_type_name, pFu) -//GO(g_test_maximized_result, -//GO(g_test_message, -//GO(g_test_minimized_result, -//GO(g_test_queue_destroy, -//GO(g_test_queue_free, +//GOM(g_test_maximized_result, vFdpV) +//GOM(g_test_message, vFpV) +//GOM(g_test_minimized_result, vFdpV) +//GOM(g_test_queue_destroy, vFpp) +GO(g_test_queue_free, vFp) GO(g_test_rand_double, dFv) GO(g_test_rand_double_range, dFdd) GO(g_test_rand_int, iFv) GO(g_test_rand_int_range, iFii) -//GO(g_test_run, +GO(g_test_run, iFv) GO(g_test_run_suite, iFp) -//GO(g_test_set_nonfatal_assertions, +GO(g_test_set_nonfatal_assertions, vFv) GO(g_test_skip, vFp) -//GO(g_test_subprocess, +GO(g_test_subprocess, iFv) GO(g_test_suite_add, vFpp) GO(g_test_suite_add_suite, vFpp) -//GO(g_test_timer_elapsed, -//GO(g_test_timer_last, -//GO(g_test_timer_start, +GO(g_test_timer_elapsed, dFv) +GO(g_test_timer_last, dFv) +GO(g_test_timer_start, vFv) GO(g_test_trap_assertions, vFppipLp) GO(g_test_trap_fork, iFLu) -//GO(g_test_trap_has_passed, -//GO(g_test_trap_reached_timeout, +GO(g_test_trap_has_passed, iFv) +GO(g_test_trap_reached_timeout, iFv) GO(g_test_trap_subprocess, vFpLu) GOM(g_thread_create, pFEppip) -GOM(g_thread_create_full, pFEppLiiip) -GO(g_thread_error_quark, pFv) +GOM(g_thread_create_full, pFEppLiiup) +GO(g_thread_error_quark, uFv) GO(g_thread_exit, vFp) GOM(g_thread_foreach, vFEpp) GO(g_thread_get_initialized, iFv) //GO(g_thread_init_glib, GO(g_thread_join, pFp) GOM(g_thread_new, pFEppp) -//GO(g_thread_pool_free, +//GOM(g_thread_pool_free, vFpii) GO(g_thread_pool_get_max_idle_time, uFv) -//GO(g_thread_pool_get_max_threads, +//GOM(g_thread_pool_get_max_threads, iFp) GO(g_thread_pool_get_max_unused_threads, iFv) -//GO(g_thread_pool_get_num_threads, -//GO(g_thread_pool_get_num_unused_threads, -//GO(g_thread_pool_new, -//GO(g_thread_pool_push, +//GOM(g_thread_pool_get_num_threads, uFp) +GO(g_thread_pool_get_num_unused_threads, uFv) +//GOM(g_thread_pool_new, pFppiip) +//GOM(g_thread_pool_push, iFppp) GO(g_thread_pool_set_max_idle_time, vFu) -//GO(g_thread_pool_set_max_threads, +//GOM(g_thread_pool_set_max_threads, iFpip) GO(g_thread_pool_set_max_unused_threads, vFi) -//GO(g_thread_pool_set_sort_function, -//GO(g_thread_pool_stop_unused_threads, -//GO(g_thread_pool_unprocessed, +//GOM(g_thread_pool_set_sort_function, vFppp) +GO(g_thread_pool_stop_unused_threads, vFv) +//GOM(g_thread_pool_unprocessed, uFp) GO(g_thread_ref, pFp) GO(g_thread_self, pFv) -GO(g_thread_set_priority, vFpi) +GO(g_thread_set_priority, vFpu) GOM(g_thread_try_new, pFEpppp) GO(g_thread_unref, vFp) GO(g_thread_yield, vFv) @@ -1301,13 +1301,13 @@ GOM(g_timeout_add_seconds, uFEupp) GOM(g_timeout_add_seconds_full, uFEiuppp) GO(g_timeout_source_new, pFu) GO(g_timeout_source_new_seconds, pFu) -//GO(g_timer_continue, -//GO(g_timer_destroy, +GO(g_timer_continue, vFp) +GO(g_timer_destroy, vFp) GO(g_timer_elapsed, dFpp) GO(g_timer_new, pFv) -//GO(g_timer_reset, -//GO(g_timer_start, -//GO(g_timer_stop, +GO(g_timer_reset, vFp) +GO(g_timer_start, vFp) +GO(g_timer_stop, vFp) GO(g_time_val_add, vFpl) GO(g_time_val_from_iso8601, iFpp) GO(g_time_val_to_iso8601, pFp) @@ -1316,32 +1316,32 @@ GO(g_time_zone_find_interval, iFpul) GO(g_time_zone_get_abbreviation, pFpi) GO(g_time_zone_get_offset, iFpi) GO(g_time_zone_is_dst, iFpi) -//GO(g_time_zone_new, +GO(g_time_zone_new, pFp) GO(g_time_zone_new_local, pFv) -//GO(g_time_zone_new_utc, +GO(g_time_zone_new_utc, pFv) GO(g_time_zone_ref, pFp) -//GO(g_time_zone_unref, +GO(g_time_zone_unref, vFp) GO(g_trash_stack_height, uFp) GO(g_trash_stack_peek, pFp) GO(g_trash_stack_pop, pFp) GO(g_trash_stack_push, vFpp) -//GO(g_tree_destroy, -//GO(g_tree_foreach, -//GO(g_tree_height, -//GO(g_tree_insert, +GO(g_tree_destroy, vFp) +//GOM(g_tree_foreach, vFppp) +GO(g_tree_height, iFp) +GO(g_tree_insert, vFppp) GO(g_tree_lookup, pFpp) GO(g_tree_lookup_extended, iFpppp) -//GO(g_tree_new, -//GO(g_tree_new_full, -//GO(g_tree_new_with_data, +//GOM(g_tree_new, pFp) +//GOM(g_tree_new_full, pFpppp) +//GOM(g_tree_new_with_data, pFpp) GO(g_tree_nnodes, iFp) GO(g_tree_ref, pFp) -//GO(g_tree_remove, +GO(g_tree_remove, iFpp) GO(g_tree_replace, vFppp) -//GO(g_tree_search, +//GOM(g_tree_search, pFppp) GO(g_tree_steal, iFpp) -//GO(g_tree_traverse, -//GO(g_tree_unref, +//GOM(g_tree_traverse, vFppup) +GO(g_tree_unref, vFp) GO(g_try_malloc, pFL) GO(g_try_malloc0, pFL) GO(g_try_malloc0_n, pFLL) @@ -1388,32 +1388,32 @@ GO(g_unicode_canonical_decomposition, pFup) GO(g_unicode_canonical_ordering, vFpL) GO(g_unicode_script_from_iso15924, iFu) GO(g_unicode_script_to_iso15924, uFi) -//GO(g_unix_error_quark, -//GO(g_unix_fd_add, -//GO(g_unix_fd_add_full, -GO(g_unix_fd_source_new, pFii) -//GO(g_unix_open_pipe, -//GO(g_unix_set_fd_nonblocking, -//GO(g_unix_signal_add, -//GO(g_unix_signal_add_full, -//GO(g_unix_signal_source_new, +GO(g_unix_error_quark, uFv) +//GOM(g_unix_fd_add, uFiupp) +//GOM(g_unix_fd_add_full, uFiiuppp) +GO(g_unix_fd_source_new, pFiu) +GO(g_unix_open_pipe, iFpip) +GO(g_unix_set_fd_nonblocking, iFiip) +//GOM(g_unix_signal_add, uFipp) +//GOM(g_unix_signal_add_full, uFiippp) +//GOM(g_unix_signal_source_new, pFi) GO(g_unlink, iFp) GO(g_unsetenv, vFp) GO(g_uri_escape_string, pFppi) GO(g_uri_list_extract_uris, pFp) -GO(g_uri_parse, pFpip) +GO(g_uri_parse, pFpup) GO(g_uri_parse_scheme, pFp) -GO(g_uri_to_string_partial, pFpi) +GO(g_uri_to_string_partial, pFpu) GO(g_uri_unescape_segment, pFppp) GO(g_uri_unescape_string, pFpp) GO(g_uri_unref, vFp) GO(g_usleep, vFL) GO(g_utf16_to_ucs4, pFplppp) GO(g_utf16_to_utf8, pFplppp) -GO(g_utf8_casefold, pFpi) +GO(g_utf8_casefold, pFpl) GO(g_utf8_collate, iFpp) -GO(g_utf8_collate_key, pFpi) -GO(g_utf8_collate_key_for_filename, pFpi) +GO(g_utf8_collate_key, pFpl) +GO(g_utf8_collate_key_for_filename, pFpl) GO(g_utf8_find_next_char, pFpp) GO(g_utf8_find_prev_char, pFpp) GO(g_utf8_get_char, uFp) @@ -1422,21 +1422,21 @@ GO(g_utf8_normalize, pFplu) GO(g_utf8_offset_to_pointer, pFpl) GO(g_utf8_pointer_to_offset, lFpp) GO(g_utf8_prev_char, pFp) -GO(g_utf8_strchr, pFpiu) -GO(g_utf8_strdown, pFpi) +GO(g_utf8_strchr, pFplu) +GO(g_utf8_strdown, pFpl) GO(g_utf8_strlen, lFpl) GO(g_utf8_strncpy, pFppL) GO(g_utf8_strrchr, pFplu) -GO(g_utf8_strreverse, pFpi) -GO(g_utf8_strup, pFpi) +GO(g_utf8_strreverse, pFpl) +GO(g_utf8_strup, pFpl) GO(g_utf8_substring, pFpll) GO(g_utf8_to_ucs4, pFplppp) GO(g_utf8_to_ucs4_fast, pFplp) GO(g_utf8_to_utf16, pFplppp) GO(g_utf8_validate, iFplp) -GO(g_utime, iFpp) +GO(g_utime, iFpp) // Warning: failed to confirm GOM(g_variant_builder_add, vFEppV) -//GO(g_variant_builder_add_parsed, vFppppppppppp) //vaarg +//GOM(g_variant_builder_add_parsed, vFppV) GO(g_variant_builder_add_value, vFpp) GO(g_variant_builder_clear, vFp) GO(g_variant_builder_close, vFp) @@ -1454,9 +1454,9 @@ GO(g_variant_dict_clear, vFp) GO(g_variant_dict_contains, iFpp) GO(g_variant_dict_end, pFp) GO(g_variant_dict_init, vFpp) -//GO(g_variant_dict_insert, vFpppppppppppppp) //vaarg +//GOM(g_variant_dict_insert, vFpppV) GO(g_variant_dict_insert_value, vFppp) -//GO(g_variant_dict_lookup, iFppppppppppppp) //vaarg +//GOM(g_variant_dict_lookup, iFpppV) GO(g_variant_dict_lookup_value, pFppp) GO(g_variant_dict_new, pFp) GO(g_variant_dict_ref, pFp) @@ -1475,7 +1475,7 @@ GO(g_variant_get_boolean, iFp) GO(g_variant_get_byte, CFp) GO(g_variant_get_bytestring, pFp) GO(g_variant_get_bytestring_array, pFpp) -GO(g_variant_get_child, vFpuppppppppppp) //vaarg here, only pointers so should be ok +GO(g_variant_get_child, vFpLppppppppppp) //vaarg here, only pointers so should be ok GO(g_variant_get_child_value, pFpL) GO(g_variant_get_data, pFp) GO(g_variant_get_data_as_bytes, pFp) @@ -1515,7 +1515,7 @@ GO(g_variant_iter_next, iFpppppppppppp) // vaarg here, only pointers so should b GO(g_variant_iter_next_value, pFp) GO(g_variant_lookup, iFpppppppppppp) // vaarg GO(g_variant_lookup_value, pFppp) -GO(g_variant_n_children, uFp) +GO(g_variant_n_children, LFp) GOM(g_variant_new, pFEpV) GO(g_variant_new_array, pFppL) GO(g_variant_new_boolean, pFi) @@ -1526,20 +1526,20 @@ GO(g_variant_new_dict_entry, pFpp) GO(g_variant_new_double, pFd) GO(g_variant_new_fixed_array, pFppLL) GO(g_variant_new_from_bytes, pFppi) -GOM(g_variant_new_from_data, pFEppuipp) +GOM(g_variant_new_from_data, pFEppLipp) GO(g_variant_new_handle, pFi) GO(g_variant_new_int16, pFw) GO(g_variant_new_int32, pFi) GO(g_variant_new_int64, pFl) GO(g_variant_new_maybe, pFpp) GO(g_variant_new_object_path, pFp) -GO(g_variant_new_objv, pFpi) -//GO2(g_variant_new_parsed, pFEpV, my_g_variant_new_parsed_va) +GO(g_variant_new_objv, pFpl) +//GOM(g_variant_new_parsed, pFpV) GOM(g_variant_new_parsed_va, pFEpp) -//GO(g_variant_new_printf, // needs alignment..... +//GOM(g_variant_new_printf, pFpV) GO(g_variant_new_signature, pFp) GO(g_variant_new_string, pFp) -GO(g_variant_new_strv, pFpi) +GO(g_variant_new_strv, pFpl) GO(g_variant_new_take_string, pFp) GO(g_variant_new_tuple, pFpL) GO(g_variant_new_uint16, pFW) @@ -1549,8 +1549,8 @@ GOM(g_variant_new_va, pFEppp) GO(g_variant_new_variant, pFp) GO(g_variant_parse, pFppppp) GO(g_variant_parse_error_print_context, pFpp) -//GO(g_variant_parse_error_quark, -//GO(g_variant_parser_get_error_quark, +GO(g_variant_parse_error_quark, uFv) +GO(g_variant_parser_get_error_quark, uFv) GO(g_variant_print, pFpi) GO(g_variant_print_string, pFppi) GO(g_variant_ref, pFp) @@ -1569,9 +1569,9 @@ GO(g_variant_take_ref, pFp) GO(g_variant_type_checked_, pFp) GO(g_variant_type_copy, pFp) GO(g_variant_type_dup_string, pFp) -//GO(g_variant_type_element, +GO(g_variant_type_element, pFp) GO(g_variant_type_equal, iFpp) -//GO(g_variant_type_first, +GO(g_variant_type_first, pFp) GO(g_variant_type_free, vFp) GO(g_variant_type_get_string_length, LFp) GO(g_variant_type_hash, uFp) diff --git a/src/wrapped/wrappedgmodule2.c b/src/wrapped/wrappedgmodule2.c index d4233e113f9468b28c7d303e9ca060ec94369325..cc71d2ef4ae4c42f6070c3551ee5f0b133e3b6cd 100644 --- a/src/wrapped/wrappedgmodule2.c +++ b/src/wrapped/wrappedgmodule2.c @@ -12,21 +12,15 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* gmodule2Name = "libgmodule-2.0.so"; -#else - const char* gmodule2Name = "libgmodule-2.0.so.0"; -#endif +const char* gmodule2Name = "libgmodule-2.0.so.0"; +#define ALTNAME "libgmodule-2.0.so" + #define LIBNAME gmodule2 #define PRE_INIT \ if(box64_nogtk) \ return -1; -#ifdef ANDROID -#define NEEDED_LIBS "libglib-2.0.so" -#else #define NEEDED_LIBS "libglib-2.0.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedgnutls.c b/src/wrapped/wrappedgnutls.c index 6af45d64d2c0901ccdd23e30f37406b5d367c16c..00d92964706047c191037d46dc3b98fe9b849da8 100644 --- a/src/wrapped/wrappedgnutls.c +++ b/src/wrapped/wrappedgnutls.c @@ -18,13 +18,9 @@ #include "emu/x64emu_private.h" #include "callback.h" -const char* gnutlsName = -#if ANDROID - "libgnutls.so" -#else - "libgnutls.so.30" -#endif - ; +const char* gnutlsName = "libgnutls.so.30"; +#define ALTNAME "libgnutls.so" + #define LIBNAME gnutls #include "generated/wrappedgnutlstypes.h" diff --git a/src/wrapped/wrappedgnutls_private.h b/src/wrapped/wrappedgnutls_private.h index 1d8e009f0bab490fd7c58fa16b4fdd20c1f0b197..075bdc44bd2c76386eb3b9a38fbf3dbb8be3dd8c 100644 --- a/src/wrapped/wrappedgnutls_private.h +++ b/src/wrapped/wrappedgnutls_private.h @@ -1,5 +1,5 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error Meh.... +#error Meh... #endif //gnutls_session_t is p @@ -10,101 +10,101 @@ //GO(_dsa_generate_dss_pq, //GO(_dsa_validate_dss_g, //GO(_dsa_validate_dss_pq, -//GO(gnutls_aead_cipher_decrypt, -//GO(gnutls_aead_cipher_deinit, -//GO(gnutls_aead_cipher_encrypt, -//GO(gnutls_aead_cipher_init, -GO(gnutls_alert_get, pFp) -GO(gnutls_alert_get_name, pFp) -//GO(gnutls_alert_get_strname, -GO(gnutls_alert_send, iFppp) -//GO(gnutls_alert_send_appropriate, +GO(gnutls_aead_cipher_decrypt, iFppLpLLpLpp) +GO(gnutls_aead_cipher_deinit, vFp) +GO(gnutls_aead_cipher_encrypt, iFppLpLLpLpp) +GO(gnutls_aead_cipher_init, iFpup) +GO(gnutls_alert_get, uFp) +GO(gnutls_alert_get_name, pFu) +GO(gnutls_alert_get_strname, pFu) +GO(gnutls_alert_send, iFpuu) +GO(gnutls_alert_send_appropriate, iFpi) GO(gnutls_alpn_get_selected_protocol, iFpp) GO(gnutls_alpn_set_protocols, iFppuu) -//GO(gnutls_anon_allocate_client_credentials, -//GO(gnutls_anon_allocate_server_credentials, -//GO(gnutls_anon_free_client_credentials, -//GO(gnutls_anon_free_server_credentials, -//GO(gnutls_anon_set_params_function, -//GO(gnutls_anon_set_server_dh_params, -//GO(gnutls_anon_set_server_known_dh_params, -//GO(gnutls_anon_set_server_params_function, -//GO(gnutls_auth_client_get_type, -//GO(gnutls_auth_get_type, -//GO(gnutls_auth_server_get_type, +GO(gnutls_anon_allocate_client_credentials, iFp) +GO(gnutls_anon_allocate_server_credentials, iFp) +GO(gnutls_anon_free_client_credentials, vFp) +GO(gnutls_anon_free_server_credentials, vFp) +//GOM(gnutls_anon_set_params_function, vFEpp) +GO(gnutls_anon_set_server_dh_params, vFpp) +GO(gnutls_anon_set_server_known_dh_params, iFpu) +//GOM(gnutls_anon_set_server_params_function, vFEpp) +GO(gnutls_auth_client_get_type, uFp) +GO(gnutls_auth_get_type, uFp) +GO(gnutls_auth_server_get_type, uFp) //GO(_gnutls_bin2hex, -//GO(gnutls_buffer_append_data, +GO(gnutls_buffer_append_data, iFppL) //GO(_gnutls_buffer_append_str, //GO(_gnutls_buffer_init, //GO(_gnutls_buffer_to_datum, -GO(gnutls_bye, iFpi) -//GO(gnutls_certificate_activation_time_peers, +GO(gnutls_bye, iFpu) +GO(gnutls_certificate_activation_time_peers, lFp) GO(gnutls_certificate_allocate_credentials, iFp) -//GO(gnutls_certificate_client_get_request_status, -//GO(gnutls_certificate_expiration_time_peers, -//GO(gnutls_certificate_free_ca_names, -//GO(gnutls_certificate_free_cas, +GO(gnutls_certificate_client_get_request_status, uFp) +GO(gnutls_certificate_expiration_time_peers, lFp) +GO(gnutls_certificate_free_ca_names, vFp) +GO(gnutls_certificate_free_cas, vFp) GO(gnutls_certificate_free_credentials, vFp) -//GO(gnutls_certificate_free_crls, -//GO(gnutls_certificate_free_keys, -//GO(gnutls_certificate_get_crt_raw, -//GO(gnutls_certificate_get_issuer, -//GO(gnutls_certificate_get_openpgp_crt, -//GO(gnutls_certificate_get_openpgp_key, -//GO(gnutls_certificate_get_ours, +GO(gnutls_certificate_free_crls, vFp) +GO(gnutls_certificate_free_keys, vFp) +GO(gnutls_certificate_get_crt_raw, iFpuup) +GO(gnutls_certificate_get_issuer, iFpppu) +GO(gnutls_certificate_get_openpgp_crt, iFpupp) +GO(gnutls_certificate_get_openpgp_key, iFpup) +GO(gnutls_certificate_get_ours, pFp) GO(gnutls_certificate_get_peers, pFpp) -//GO(gnutls_certificate_get_peers_subkey_id, -//GO(gnutls_certificate_get_trust_list, -//GO(gnutls_certificate_get_verify_flags, -//GO(gnutls_certificate_get_x509_crt, -//GO(gnutls_certificate_get_x509_key, -//GO(gnutls_certificate_send_x509_rdn_sequence, -//GO(gnutls_certificate_server_set_request, -//GO(gnutls_certificate_set_dh_params, -//GO(gnutls_certificate_set_flags, -//GO(gnutls_certificate_set_key, -//GO(gnutls_certificate_set_known_dh_params, -//GO(gnutls_certificate_set_ocsp_status_request_file, -//GO(gnutls_certificate_set_ocsp_status_request_function, -//GO(gnutls_certificate_set_ocsp_status_request_function2, -//GO(gnutls_certificate_set_openpgp_key, -//GO(gnutls_certificate_set_openpgp_key_file, -//GO(gnutls_certificate_set_openpgp_key_file2, -//GO(gnutls_certificate_set_openpgp_key_mem, -//GO(gnutls_certificate_set_openpgp_key_mem2, -//GO(gnutls_certificate_set_openpgp_keyring_file, -//GO(gnutls_certificate_set_openpgp_keyring_mem, -//GO(gnutls_certificate_set_params_function, -//GO(gnutls_certificate_set_pin_function, -//GO(gnutls_certificate_set_retrieve_function, -//GO(gnutls_certificate_set_retrieve_function2, -//GO(gnutls_certificate_set_trust_list, +GO(gnutls_certificate_get_peers_subkey_id, iFpp) +GO(gnutls_certificate_get_trust_list, vFpp) +GO(gnutls_certificate_get_verify_flags, uFp) +GO(gnutls_certificate_get_x509_crt, iFpupp) +GO(gnutls_certificate_get_x509_key, iFpup) +GO(gnutls_certificate_send_x509_rdn_sequence, vFpi) +GO(gnutls_certificate_server_set_request, vFpu) +GO(gnutls_certificate_set_dh_params, vFpp) +GO(gnutls_certificate_set_flags, vFpu) +GO(gnutls_certificate_set_key, iFppipip) +GO(gnutls_certificate_set_known_dh_params, iFpu) +GO(gnutls_certificate_set_ocsp_status_request_file, iFppu) +//GOM(gnutls_certificate_set_ocsp_status_request_function, vFEppp) +//GOM(gnutls_certificate_set_ocsp_status_request_function2, iFEpupp) +GO(gnutls_certificate_set_openpgp_key, iFppp) +GO(gnutls_certificate_set_openpgp_key_file, iFpppu) +GO(gnutls_certificate_set_openpgp_key_file2, iFppppu) +GO(gnutls_certificate_set_openpgp_key_mem, iFpppu) +GO(gnutls_certificate_set_openpgp_key_mem2, iFppppu) +GO(gnutls_certificate_set_openpgp_keyring_file, iFppu) +GO(gnutls_certificate_set_openpgp_keyring_mem, iFppLu) +//GOM(gnutls_certificate_set_params_function, vFEpp) +//GOM(gnutls_certificate_set_pin_function, vFEppp) +//GOM(gnutls_certificate_set_retrieve_function, vFEpp) +//GOM(gnutls_certificate_set_retrieve_function2, vFEpp) +GO(gnutls_certificate_set_trust_list, vFppu) GO(gnutls_certificate_set_verify_flags, vFpu) -//GO(gnutls_certificate_set_verify_function, -//GO(gnutls_certificate_set_verify_limits, -//GO(gnutls_certificate_set_x509_crl, -GO(gnutls_certificate_set_x509_crl_file, iFppi) -//GO(gnutls_certificate_set_x509_crl_mem, +//GOM(gnutls_certificate_set_verify_function, vFEpp) +GO(gnutls_certificate_set_verify_limits, vFpuu) +GO(gnutls_certificate_set_x509_crl, iFppi) +GO(gnutls_certificate_set_x509_crl_file, iFppu) +GO(gnutls_certificate_set_x509_crl_mem, iFppu) GO(gnutls_certificate_set_x509_key, iFppip) -GO(gnutls_certificate_set_x509_key_file, iFpppi) -GO(gnutls_certificate_set_x509_key_file2, iFpppipu) -//GO(gnutls_certificate_set_x509_key_mem, -//GO(gnutls_certificate_set_x509_key_mem2, -//GO(gnutls_certificate_set_x509_simple_pkcs12_file, -//GO(gnutls_certificate_set_x509_simple_pkcs12_mem, +GO(gnutls_certificate_set_x509_key_file, iFpppu) +GO(gnutls_certificate_set_x509_key_file2, iFpppupu) +GO(gnutls_certificate_set_x509_key_mem, iFpppu) +GO(gnutls_certificate_set_x509_key_mem2, iFpppupu) +GO(gnutls_certificate_set_x509_simple_pkcs12_file, iFppup) +GO(gnutls_certificate_set_x509_simple_pkcs12_mem, iFppup) GO(gnutls_certificate_set_x509_system_trust, iFp) -//GO(gnutls_certificate_set_x509_trust, -GO(gnutls_certificate_set_x509_trust_dir, iFppi) -GO(gnutls_certificate_set_x509_trust_file, iFppi) -//GO(gnutls_certificate_set_x509_trust_mem, -//GO(gnutls_certificate_type_get, -//GO(gnutls_certificate_type_get_id, -//GO(gnutls_certificate_type_get_name, -//GO(gnutls_certificate_type_list, -//GO(gnutls_certificate_verification_status_print, -//GO(gnutls_certificate_verify_peers, +GO(gnutls_certificate_set_x509_trust, iFppi) +GO(gnutls_certificate_set_x509_trust_dir, iFppu) +GO(gnutls_certificate_set_x509_trust_file, iFppu) +GO(gnutls_certificate_set_x509_trust_mem, iFppu) +GO(gnutls_certificate_type_get, uFp) +GO(gnutls_certificate_type_get_id, uFp) +GO(gnutls_certificate_type_get_name, pFu) +GO(gnutls_certificate_type_list, pFv) +GO(gnutls_certificate_verification_status_print, iFuupu) +GO(gnutls_certificate_verify_peers, iFppup) GO(gnutls_certificate_verify_peers2, iFpp) -//GO(gnutls_certificate_verify_peers3, +GO(gnutls_certificate_verify_peers3, iFppp) GO(gnutls_check_version, pFp) //GO(_gnutls_cidr_to_string, GO(gnutls_cipher_add_auth, iFppL) @@ -113,668 +113,668 @@ GO(gnutls_cipher_decrypt2, iFppLpL) GO(gnutls_cipher_deinit, vFp) GO(gnutls_cipher_encrypt, iFppL) GO(gnutls_cipher_encrypt2, iFppLpL) -GO(gnutls_cipher_get, pFp) -GO(gnutls_cipher_get_block_size, uFp) -//GO(gnutls_cipher_get_id, -//GO(gnutls_cipher_get_iv_size, -GO(gnutls_cipher_get_key_size, LFp) -//GO(gnutls_cipher_get_name, -//GO(gnutls_cipher_get_tag_size, -GO(gnutls_cipher_init, iFpppp) -//GO(gnutls_cipher_list, -//GO(gnutls_cipher_set_iv, -GO(gnutls_cipher_suite_get_name, pFiii) -//GO(gnutls_cipher_suite_info, +GO(gnutls_cipher_get, uFp) +GO(gnutls_cipher_get_block_size, uFu) +GO(gnutls_cipher_get_id, uFp) +GO(gnutls_cipher_get_iv_size, uFu) +GO(gnutls_cipher_get_key_size, LFu) +GO(gnutls_cipher_get_name, pFu) +GO(gnutls_cipher_get_tag_size, uFu) +GO(gnutls_cipher_init, iFpupp) +GO(gnutls_cipher_list, pFv) +GO(gnutls_cipher_set_iv, vFppL) +GO(gnutls_cipher_suite_get_name, pFuuu) +GO(gnutls_cipher_suite_info, pFLppppp) GO(gnutls_cipher_tag, iFppL) -//GO(gnutls_compression_get, -//GO(gnutls_compression_get_id, -//GO(gnutls_compression_get_name, -//GO(gnutls_compression_list, -//GO(gnutls_credentials_clear, -//GO(gnutls_credentials_get, -GO(gnutls_credentials_set, iFppp) -//GO(gnutls_crypto_register_aead_cipher, -//GO(gnutls_crypto_register_cipher, -//GO(gnutls_crypto_register_digest, -//GO(gnutls_crypto_register_mac, +GO(gnutls_compression_get, uFp) +GO(gnutls_compression_get_id, uFp) +GO(gnutls_compression_get_name, pFu) +GO(gnutls_compression_list, pFv) +GO(gnutls_credentials_clear, vFp) +GO(gnutls_credentials_get, iFpup) +GO(gnutls_credentials_set, iFpup) +//GOM(gnutls_crypto_register_aead_cipher, iFEuippppp) +//GOM(gnutls_crypto_register_cipher, iFEuipppppp) +//GOM(gnutls_crypto_register_digest, iFEuippppp) +//GOM(gnutls_crypto_register_mac, iFEuippppppp) //GO(gnutls_db_check_entry, -//GO(gnutls_db_check_entry_time, -//GO(gnutls_db_get_default_cache_expiration, -//GO(gnutls_db_get_ptr, -//GO(gnutls_db_remove_session, -//GO(gnutls_db_set_cache_expiration, -//GO(gnutls_db_set_ptr, -//GO(gnutls_db_set_remove_function, -//GO(gnutls_db_set_retrieve_function, -//GO(gnutls_db_set_store_function, -GO(gnutls_decode_rs_value, iFppp) // not always present -//GO(gnutls_decode_ber_digest_info, +GO(gnutls_db_check_entry_time, lFp) +GO(gnutls_db_get_default_cache_expiration, uFv) +GO(gnutls_db_get_ptr, pFp) +GO(gnutls_db_remove_session, vFp) +GO(gnutls_db_set_cache_expiration, vFpi) +GO(gnutls_db_set_ptr, vFpp) +//GOM(gnutls_db_set_remove_function, vFEpp) +//GOM(gnutls_db_set_retrieve_function, vFEpp) +//GOM(gnutls_db_set_store_function, vFEpp) +GO(gnutls_decode_rs_value, iFppp) +GO(gnutls_decode_ber_digest_info, iFpppp) //GO(_gnutls_decode_ber_rs_raw, GO(gnutls_deinit, vFp) -//GO(gnutls_dh_get_group, -//GO(gnutls_dh_get_peers_public_bits, -//GO(gnutls_dh_get_prime_bits, -//GO(gnutls_dh_get_pubkey, -//GO(gnutls_dh_get_secret_bits, -//GO(gnutls_dh_params_cpy, +GO(gnutls_dh_get_group, iFppp) +GO(gnutls_dh_get_peers_public_bits, iFp) +GO(gnutls_dh_get_prime_bits, iFp) +GO(gnutls_dh_get_pubkey, iFpp) +GO(gnutls_dh_get_secret_bits, iFp) +GO(gnutls_dh_params_cpy, iFpp) GO(gnutls_dh_params_deinit, vFp) -//GO(gnutls_dh_params_export2_pkcs3, -//GO(gnutls_dh_params_export_pkcs3, +GO(gnutls_dh_params_export2_pkcs3, iFpup) +GO(gnutls_dh_params_export_pkcs3, iFpupp) GO(gnutls_dh_params_export_raw, iFpppp) GO(gnutls_dh_params_generate2, iFpu) -//GO(gnutls_dh_params_import_dsa, -//GO(gnutls_dh_params_import_pkcs3, +GO(gnutls_dh_params_import_dsa, iFpp) +GO(gnutls_dh_params_import_pkcs3, iFppu) GO(gnutls_dh_params_import_raw, iFppp) GO(gnutls_dh_params_import_raw2, iFpppu) GO(gnutls_dh_params_init, iFp) -//GO(gnutls_dh_set_prime_bits, +GO(gnutls_dh_set_prime_bits, vFpu) //GO(_gnutls_digest_exists, -//GO(gnutls_digest_get_id, -//GO(gnutls_digest_get_name, -//GO(gnutls_digest_get_oid, -//GO(gnutls_digest_list, -//GO(gnutls_dtls_cookie_send, -//GO(gnutls_dtls_cookie_verify, -//GO(gnutls_dtls_get_data_mtu, -//GO(gnutls_dtls_get_mtu, -//GO(gnutls_dtls_get_timeout, -//GO(gnutls_dtls_prestate_set, -//GO(gnutls_dtls_set_data_mtu, +GO(gnutls_digest_get_id, uFp) +GO(gnutls_digest_get_name, pFu) +GO(gnutls_digest_get_oid, pFu) +GO(gnutls_digest_list, pFv) +//GOM(gnutls_dtls_cookie_send, iFEppLppp) +GO(gnutls_dtls_cookie_verify, iFppLpLp) +GO(gnutls_dtls_get_data_mtu, uFp) +GO(gnutls_dtls_get_mtu, uFp) +GO(gnutls_dtls_get_timeout, uFp) +GO(gnutls_dtls_prestate_set, vFpp) +GO(gnutls_dtls_set_data_mtu, iFpu) GO(gnutls_dtls_set_mtu, vFpu) GO(gnutls_dtls_set_timeouts, vFpuu) -//GO(gnutls_ecc_curve_get, -//GO(gnutls_ecc_curve_get_id, -//GO(gnutls_ecc_curve_get_name, -//GO(gnutls_ecc_curve_get_oid, -//GO(gnutls_ecc_curve_get_pk, -//GO(gnutls_ecc_curve_get_size, -//GO(gnutls_ecc_curve_list, +GO(gnutls_ecc_curve_get, uFp) +GO(gnutls_ecc_curve_get_id, uFp) +GO(gnutls_ecc_curve_get_name, pFu) +GO(gnutls_ecc_curve_get_oid, pFu) +GO(gnutls_ecc_curve_get_pk, uFu) +GO(gnutls_ecc_curve_get_size, iFu) +GO(gnutls_ecc_curve_list, pFv) GO(_gnutls_ecdh_compute_key, iFipppppp) GO(gnutls_ecdh_compute_key, iFipppppp) -//GO(gnutls_encode_ber_digest_info, +GO(gnutls_encode_ber_digest_info, iFupp) //GO(_gnutls_encode_ber_rs_raw, GO(gnutls_error_is_fatal, iFi) -//GO(gnutls_error_to_alert, -//GO(gnutls_est_record_overhead_size, +GO(gnutls_error_to_alert, iFip) +GO(gnutls_est_record_overhead_size, LFuuuuu) GO(gnutls_privkey_export_dh_raw, iFppppu) -//GO(gnutls_ext_get_data, -//GO(gnutls_ext_get_name, -//GO(gnutls_ext_register, -//GO(gnutls_ext_set_data, -//GO(gnutls_fingerprint, -//GO(gnutls_fips140_mode_enabled, -GO(gnutls_free, vFp) +GO(gnutls_ext_get_data, iFpup) +GO(gnutls_ext_get_name, pFu) +//GOM(gnutls_ext_register, iFEpiuppppp) +GO(gnutls_ext_set_data, vFpup) +GO(gnutls_fingerprint, iFuppp) +GO(gnutls_fips140_mode_enabled, uFv) +GO(gnutls_free, vFp)//DATAM(gnutls_free, 8) GO(gnutls_global_deinit, vFv) GO(gnutls_global_init, iFv) -//GO(gnutls_global_set_audit_log_function, +//GOM(gnutls_global_set_audit_log_function, vFEp) GOM(gnutls_global_set_log_function, vFEp) GO(gnutls_global_set_log_level, vFi) -//GO(gnutls_global_set_mem_functions, -//GO(gnutls_global_set_mutex, -//GO(gnutls_global_set_time_function, +//GOM(gnutls_global_set_mem_functions, vFEppppp) +//GOM(gnutls_global_set_mutex, vFEpppp) +//GOM(gnutls_global_set_time_function, vFEp) GO(gnutls_handshake, iFp) -//GO(gnutls_handshake_description_get_name, -//GO(gnutls_handshake_get_last_in, -//GO(gnutls_handshake_get_last_out, -//GO(gnutls_handshake_set_hook_function, -//GO(gnutls_handshake_set_max_packet_length, -//GO(gnutls_handshake_set_post_client_hello_function, -//GO(gnutls_handshake_set_private_extensions, -//GO(gnutls_handshake_set_random, -//GO(gnutls_handshake_set_timeout, -//GO(gnutls_hash, -//GO(gnutls_hash_deinit, -//GO(gnutls_hash_fast, -//GO(gnutls_hash_get_len, -//GO(gnutls_hash_init, -//GO(gnutls_hash_output, -//GO(gnutls_heartbeat_allowed, -//GO(gnutls_heartbeat_enable, -//GO(gnutls_heartbeat_get_timeout, -//GO(gnutls_heartbeat_ping, -//GO(gnutls_heartbeat_pong, -//GO(gnutls_heartbeat_set_timeouts, +GO(gnutls_handshake_description_get_name, pFu) +GO(gnutls_handshake_get_last_in, uFp) +GO(gnutls_handshake_get_last_out, uFp) +//GOM(gnutls_handshake_set_hook_function, vFEpuip) +GO(gnutls_handshake_set_max_packet_length, vFpL) +//GOM(gnutls_handshake_set_post_client_hello_function, vFEpp) +GO(gnutls_handshake_set_private_extensions, vFpi) +GO(gnutls_handshake_set_random, iFpp) +GO(gnutls_handshake_set_timeout, vFpu) +GO(gnutls_hash, iFppL) +GO(gnutls_hash_deinit, vFpp) +GO(gnutls_hash_fast, iFupLp) +GO(gnutls_hash_get_len, uFu) +GO(gnutls_hash_init, iFpu) +GO(gnutls_hash_output, vFpp) +GO(gnutls_heartbeat_allowed, uFpu) +GO(gnutls_heartbeat_enable, vFpu) +GO(gnutls_heartbeat_get_timeout, uFp) +GO(gnutls_heartbeat_ping, iFpLuu) +GO(gnutls_heartbeat_pong, iFpu) +GO(gnutls_heartbeat_set_timeouts, vFpuu) //GO(_gnutls_hello_set_default_version, -//GO(gnutls_hex2bin, -//GO(gnutls_hex_decode, -//GO(gnutls_hex_decode2, -//GO(gnutls_hex_encode, -//GO(gnutls_hex_encode2, -//GO(gnutls_hmac, -//GO(gnutls_hmac_deinit, -//GO(gnutls_hmac_fast, -//GO(gnutls_hmac_get_len, -//GO(gnutls_hmac_init, -//GO(gnutls_hmac_output, -//GO(gnutls_hmac_set_nonce, -//GO(gnutls_idna_map, -//GO(gnutls_idna_reverse_map, +GO(gnutls_hex2bin, iFpLpp) +GO(gnutls_hex_decode, iFppp) +GO(gnutls_hex_decode2, iFpp) +GO(gnutls_hex_encode, iFppp) +GO(gnutls_hex_encode2, iFpp) +GO(gnutls_hmac, iFppL) +GO(gnutls_hmac_deinit, vFpp) +GO(gnutls_hmac_fast, iFupLpLp) +GO(gnutls_hmac_get_len, uFu) +GO(gnutls_hmac_init, iFpupL) +GO(gnutls_hmac_output, vFpp) +GO(gnutls_hmac_set_nonce, vFppL) +GO(gnutls_idna_map, iFpupu) +GO(gnutls_idna_reverse_map, iFpupu) GO(gnutls_init, iFpu) //GO(_gnutls_ip_to_string, -//GO(gnutls_key_generate, -GO(gnutls_kx_get, pFp) -//GO(gnutls_kx_get_id, -//GO(gnutls_kx_get_name, -//GO(gnutls_kx_list, +GO(gnutls_key_generate, iFpu) +GO(gnutls_kx_get, uFp) +GO(gnutls_kx_get_id, uFp) +GO(gnutls_kx_get_name, pFu) +GO(gnutls_kx_list, pFv) //GO(_gnutls_lib_simulate_error, -//GO(gnutls_load_file, +GO(gnutls_load_file, iFpp) //GO(_gnutls_log, -GO(gnutls_mac_get, pFp) -//GO(gnutls_mac_get_id, -GO(gnutls_mac_get_key_size, LFp) -//GO(gnutls_mac_get_name, -//GO(gnutls_mac_get_nonce_size, -//GO(gnutls_mac_list, +GO(gnutls_mac_get, uFp) +GO(gnutls_mac_get_id, uFp) +GO(gnutls_mac_get_key_size, LFu) +GO(gnutls_mac_get_name, pFu) +GO(gnutls_mac_get_nonce_size, LFu) +GO(gnutls_mac_list, pFv) //GO(_gnutls_mac_to_entry, -//GO(gnutls_memcmp, -//GO(gnutls_memset, +GO(gnutls_memcmp, iFppL) +GO(gnutls_memset, vFpiL) //GO(_gnutls_mpi_log, -//GO(gnutls_ocsp_req_add_cert, -//GO(gnutls_ocsp_req_add_cert_id, -//GO(gnutls_ocsp_req_deinit, -//GO(gnutls_ocsp_req_export, -//GO(gnutls_ocsp_req_get_cert_id, -//GO(gnutls_ocsp_req_get_extension, -//GO(gnutls_ocsp_req_get_nonce, -//GO(gnutls_ocsp_req_get_version, -//GO(gnutls_ocsp_req_import, -//GO(gnutls_ocsp_req_init, -//GO(gnutls_ocsp_req_print, -//GO(gnutls_ocsp_req_randomize_nonce, -//GO(gnutls_ocsp_req_set_extension, -//GO(gnutls_ocsp_req_set_nonce, -//GO(gnutls_ocsp_resp_check_crt, +GO(gnutls_ocsp_req_add_cert, iFpupp) +GO(gnutls_ocsp_req_add_cert_id, iFpuppp) +GO(gnutls_ocsp_req_deinit, vFp) +GO(gnutls_ocsp_req_export, iFpp) +GO(gnutls_ocsp_req_get_cert_id, iFpupppp) +GO(gnutls_ocsp_req_get_extension, iFpuppp) +GO(gnutls_ocsp_req_get_nonce, iFppp) +GO(gnutls_ocsp_req_get_version, iFp) +GO(gnutls_ocsp_req_import, iFpp) +GO(gnutls_ocsp_req_init, iFp) +GO(gnutls_ocsp_req_print, iFpup) +GO(gnutls_ocsp_req_randomize_nonce, iFp) +GO(gnutls_ocsp_req_set_extension, iFppup) +GO(gnutls_ocsp_req_set_nonce, iFpup) +GO(gnutls_ocsp_resp_check_crt, iFpup) GO(gnutls_ocsp_resp_deinit, vFp) -//GO(gnutls_ocsp_resp_export, -//GO(gnutls_ocsp_resp_get_certs, -//GO(gnutls_ocsp_resp_get_extension, -//GO(gnutls_ocsp_resp_get_nonce, -//GO(gnutls_ocsp_resp_get_produced, -//GO(gnutls_ocsp_resp_get_responder, -//GO(gnutls_ocsp_resp_get_responder2, -//GO(gnutls_ocsp_resp_get_responder_raw_id, -//GO(gnutls_ocsp_resp_get_response, -//GO(gnutls_ocsp_resp_get_signature, -//GO(gnutls_ocsp_resp_get_signature_algorithm, +GO(gnutls_ocsp_resp_export, iFpp) +GO(gnutls_ocsp_resp_get_certs, iFppp) +GO(gnutls_ocsp_resp_get_extension, iFpuppp) +GO(gnutls_ocsp_resp_get_nonce, iFppp) +GO(gnutls_ocsp_resp_get_produced, lFp) +GO(gnutls_ocsp_resp_get_responder, iFpp) +GO(gnutls_ocsp_resp_get_responder2, iFppu) +GO(gnutls_ocsp_resp_get_responder_raw_id, iFpup) +GO(gnutls_ocsp_resp_get_response, iFppp) +GO(gnutls_ocsp_resp_get_signature, iFpp) +GO(gnutls_ocsp_resp_get_signature_algorithm, iFp) GO(gnutls_ocsp_resp_get_single, iFpuppppppppp) -//GO(gnutls_ocsp_resp_get_status, -//GO(gnutls_ocsp_resp_get_version, +GO(gnutls_ocsp_resp_get_status, iFp) +GO(gnutls_ocsp_resp_get_version, iFp) GO(gnutls_ocsp_resp_import, iFpp) GO(gnutls_ocsp_resp_init, iFp) -//GO(gnutls_ocsp_resp_print, -//GO(gnutls_ocsp_resp_verify, -//GO(gnutls_ocsp_resp_verify_direct, +GO(gnutls_ocsp_resp_print, iFpup) +GO(gnutls_ocsp_resp_verify, iFpppu) +GO(gnutls_ocsp_resp_verify_direct, iFpppu) GO(gnutls_ocsp_status_request_enable_client, iFppLp) GO(gnutls_ocsp_status_request_get, iFpp) GO(gnutls_ocsp_status_request_is_checked, uFpu) -//GO(gnutls_oid_to_digest, -//GO(gnutls_oid_to_ecc_curve, -//GO(gnutls_oid_to_mac, -//GO(gnutls_oid_to_pk, -//GO(gnutls_oid_to_sign, -//GO(gnutls_openpgp_crt_check_email, -//GO(gnutls_openpgp_crt_check_hostname, -//GO(gnutls_openpgp_crt_check_hostname2, -//GO(gnutls_openpgp_crt_deinit, -//GO(gnutls_openpgp_crt_export, -//GO(gnutls_openpgp_crt_export2, -//GO(gnutls_openpgp_crt_get_auth_subkey, -//GO(gnutls_openpgp_crt_get_creation_time, -//GO(gnutls_openpgp_crt_get_expiration_time, -//GO(gnutls_openpgp_crt_get_fingerprint, -//GO(gnutls_openpgp_crt_get_key_id, -//GO(gnutls_openpgp_crt_get_key_usage, -//GO(gnutls_openpgp_crt_get_name, -//GO(gnutls_openpgp_crt_get_pk_algorithm, -//GO(gnutls_openpgp_crt_get_pk_dsa_raw, -//GO(gnutls_openpgp_crt_get_pk_rsa_raw, -//GO(gnutls_openpgp_crt_get_preferred_key_id, -//GO(gnutls_openpgp_crt_get_revoked_status, -//GO(gnutls_openpgp_crt_get_subkey_count, -//GO(gnutls_openpgp_crt_get_subkey_creation_time, -//GO(gnutls_openpgp_crt_get_subkey_expiration_time, -//GO(gnutls_openpgp_crt_get_subkey_fingerprint, -//GO(gnutls_openpgp_crt_get_subkey_id, -//GO(gnutls_openpgp_crt_get_subkey_idx, -//GO(gnutls_openpgp_crt_get_subkey_pk_algorithm, -//GO(gnutls_openpgp_crt_get_subkey_pk_dsa_raw, -//GO(gnutls_openpgp_crt_get_subkey_pk_rsa_raw, -//GO(gnutls_openpgp_crt_get_subkey_revoked_status, -//GO(gnutls_openpgp_crt_get_subkey_usage, -//GO(gnutls_openpgp_crt_get_version, -//GO(gnutls_openpgp_crt_import, -//GO(gnutls_openpgp_crt_init, -//GO(gnutls_openpgp_crt_print, -//GO(gnutls_openpgp_crt_set_preferred_key_id, -//GO(gnutls_openpgp_crt_verify_ring, -//GO(gnutls_openpgp_crt_verify_self, -//GO(gnutls_openpgp_keyring_check_id, -//GO(gnutls_openpgp_keyring_deinit, -//GO(gnutls_openpgp_keyring_get_crt, -//GO(gnutls_openpgp_keyring_get_crt_count, -//GO(gnutls_openpgp_keyring_import, -//GO(gnutls_openpgp_keyring_init, -//GO(gnutls_openpgp_privkey_deinit, -//GO(gnutls_openpgp_privkey_export, -//GO(gnutls_openpgp_privkey_export2, -//GO(gnutls_openpgp_privkey_export_dsa_raw, -//GO(gnutls_openpgp_privkey_export_rsa_raw, -//GO(gnutls_openpgp_privkey_export_subkey_dsa_raw, -//GO(gnutls_openpgp_privkey_export_subkey_rsa_raw, -//GO(gnutls_openpgp_privkey_get_fingerprint, -//GO(gnutls_openpgp_privkey_get_key_id, -//GO(gnutls_openpgp_privkey_get_pk_algorithm, -//GO(gnutls_openpgp_privkey_get_preferred_key_id, -//GO(gnutls_openpgp_privkey_get_revoked_status, -//GO(gnutls_openpgp_privkey_get_subkey_count, -//GO(gnutls_openpgp_privkey_get_subkey_creation_time, -//GO(gnutls_openpgp_privkey_get_subkey_expiration_time, -//GO(gnutls_openpgp_privkey_get_subkey_fingerprint, -//GO(gnutls_openpgp_privkey_get_subkey_id, -//GO(gnutls_openpgp_privkey_get_subkey_idx, -//GO(gnutls_openpgp_privkey_get_subkey_pk_algorithm, -//GO(gnutls_openpgp_privkey_get_subkey_revoked_status, -//GO(gnutls_openpgp_privkey_import, -//GO(gnutls_openpgp_privkey_init, -//GO(gnutls_openpgp_privkey_sec_param, -//GO(gnutls_openpgp_privkey_set_preferred_key_id, -//GO(gnutls_openpgp_privkey_sign_hash, -//GO(gnutls_openpgp_send_cert, -//GO(gnutls_openpgp_set_recv_key_function, -//GO(gnutls_packet_deinit, -//GO(gnutls_packet_get, -//GO(gnutls_pcert_deinit, -//GO(gnutls_pcert_export_openpgp, -//GO(gnutls_pcert_export_x509, -//GO(gnutls_pcert_import_openpgp, -//GO(gnutls_pcert_import_openpgp_raw, -//GO(gnutls_pcert_import_x509, -//GO(gnutls_pcert_import_x509_list, -//GO(gnutls_pcert_import_x509_raw, -//GO(gnutls_pcert_list_import_x509_raw, -//GO(gnutls_pem_base64_decode, -//GO(gnutls_pem_base64_decode2, -//GO(gnutls_pem_base64_encode, -//GO(gnutls_pem_base64_encode2, +GO(gnutls_oid_to_digest, uFp) +GO(gnutls_oid_to_ecc_curve, uFp) +GO(gnutls_oid_to_mac, uFp) +GO(gnutls_oid_to_pk, uFp) +GO(gnutls_oid_to_sign, uFp) +GO(gnutls_openpgp_crt_check_email, iFppu) +GO(gnutls_openpgp_crt_check_hostname, iFpp) +GO(gnutls_openpgp_crt_check_hostname2, iFppu) +GO(gnutls_openpgp_crt_deinit, vFp) +GO(gnutls_openpgp_crt_export, iFpupp) +GO(gnutls_openpgp_crt_export2, iFpup) +GO(gnutls_openpgp_crt_get_auth_subkey, iFppu) +GO(gnutls_openpgp_crt_get_creation_time, lFp) +GO(gnutls_openpgp_crt_get_expiration_time, lFp) +GO(gnutls_openpgp_crt_get_fingerprint, iFppp) +GO(gnutls_openpgp_crt_get_key_id, iFpp) +GO(gnutls_openpgp_crt_get_key_usage, iFpp) +GO(gnutls_openpgp_crt_get_name, iFpipp) +GO(gnutls_openpgp_crt_get_pk_algorithm, uFpp) +GO(gnutls_openpgp_crt_get_pk_dsa_raw, iFppppp) +GO(gnutls_openpgp_crt_get_pk_rsa_raw, iFppp) +GO(gnutls_openpgp_crt_get_preferred_key_id, iFpp) +GO(gnutls_openpgp_crt_get_revoked_status, iFp) +GO(gnutls_openpgp_crt_get_subkey_count, iFp) +GO(gnutls_openpgp_crt_get_subkey_creation_time, lFpu) +GO(gnutls_openpgp_crt_get_subkey_expiration_time, lFpu) +GO(gnutls_openpgp_crt_get_subkey_fingerprint, iFpupp) +GO(gnutls_openpgp_crt_get_subkey_id, iFpup) +GO(gnutls_openpgp_crt_get_subkey_idx, iFpp) +GO(gnutls_openpgp_crt_get_subkey_pk_algorithm, uFpup) +GO(gnutls_openpgp_crt_get_subkey_pk_dsa_raw, iFpupppp) +GO(gnutls_openpgp_crt_get_subkey_pk_rsa_raw, iFpupp) +GO(gnutls_openpgp_crt_get_subkey_revoked_status, iFpu) +GO(gnutls_openpgp_crt_get_subkey_usage, iFpup) +GO(gnutls_openpgp_crt_get_version, iFp) +GO(gnutls_openpgp_crt_import, iFppu) +GO(gnutls_openpgp_crt_init, iFp) +GO(gnutls_openpgp_crt_print, iFpup) +GO(gnutls_openpgp_crt_set_preferred_key_id, iFpp) +GO(gnutls_openpgp_crt_verify_ring, iFppup) +GO(gnutls_openpgp_crt_verify_self, iFpup) +GO(gnutls_openpgp_keyring_check_id, iFppu) +GO(gnutls_openpgp_keyring_deinit, vFp) +GO(gnutls_openpgp_keyring_get_crt, iFpup) +GO(gnutls_openpgp_keyring_get_crt_count, iFp) +GO(gnutls_openpgp_keyring_import, iFppu) +GO(gnutls_openpgp_keyring_init, iFp) +GO(gnutls_openpgp_privkey_deinit, vFp) +GO(gnutls_openpgp_privkey_export, iFpupupp) +GO(gnutls_openpgp_privkey_export2, iFpupup) +GO(gnutls_openpgp_privkey_export_dsa_raw, iFpppppp) +GO(gnutls_openpgp_privkey_export_rsa_raw, iFppppppp) +GO(gnutls_openpgp_privkey_export_subkey_dsa_raw, iFpuppppp) +GO(gnutls_openpgp_privkey_export_subkey_rsa_raw, iFpupppppp) +GO(gnutls_openpgp_privkey_get_fingerprint, iFppp) +GO(gnutls_openpgp_privkey_get_key_id, iFpp) +GO(gnutls_openpgp_privkey_get_pk_algorithm, uFpp) +GO(gnutls_openpgp_privkey_get_preferred_key_id, iFpp) +GO(gnutls_openpgp_privkey_get_revoked_status, iFp) +GO(gnutls_openpgp_privkey_get_subkey_count, iFp) +GO(gnutls_openpgp_privkey_get_subkey_creation_time, lFpu) +GO(gnutls_openpgp_privkey_get_subkey_expiration_time, lFpu) +GO(gnutls_openpgp_privkey_get_subkey_fingerprint, iFpupp) +GO(gnutls_openpgp_privkey_get_subkey_id, iFpup) +GO(gnutls_openpgp_privkey_get_subkey_idx, iFpp) +GO(gnutls_openpgp_privkey_get_subkey_pk_algorithm, uFpup) +GO(gnutls_openpgp_privkey_get_subkey_revoked_status, iFpu) +GO(gnutls_openpgp_privkey_import, iFppupu) +GO(gnutls_openpgp_privkey_init, iFp) +GO(gnutls_openpgp_privkey_sec_param, uFp) +GO(gnutls_openpgp_privkey_set_preferred_key_id, iFpp) +GO(gnutls_openpgp_privkey_sign_hash, iFppp) +GO(gnutls_openpgp_send_cert, vFpu) +//GOM(gnutls_openpgp_set_recv_key_function, vFEpp) +GO(gnutls_packet_deinit, vFp) +GO(gnutls_packet_get, vFppp) +GO(gnutls_pcert_deinit, vFp) +GO(gnutls_pcert_export_openpgp, iFpp) +GO(gnutls_pcert_export_x509, iFpp) +GO(gnutls_pcert_import_openpgp, iFppu) +GO(gnutls_pcert_import_openpgp_raw, iFppupu) +GO(gnutls_pcert_import_x509, iFppu) +GO(gnutls_pcert_import_x509_list, iFpppu) +GO(gnutls_pcert_import_x509_raw, iFppuu) +GO(gnutls_pcert_list_import_x509_raw, iFpppuu) +GO(gnutls_pem_base64_decode, iFpppp) +GO(gnutls_pem_base64_decode2, iFppp) +GO(gnutls_pem_base64_encode, iFpppp) +GO(gnutls_pem_base64_encode2, iFppp) GO(gnutls_perror, vFi) -GO(gnutls_pk_algorithm_get_name, pFi) -//GO(gnutls_pk_bits_to_sec_param, -//GO(gnutls_pkcs11_add_provider, -//GO(gnutls_pkcs11_copy_attached_extension, -//GO(gnutls_pkcs11_copy_pubkey, -//GO(gnutls_pkcs11_copy_secret_key, -//GO(gnutls_pkcs11_copy_x509_crt2, -//GO(gnutls_pkcs11_copy_x509_privkey2, -//GO(gnutls_pkcs11_crt_is_known, -//GO(gnutls_pkcs11_deinit, -//GO(gnutls_pkcs11_delete_url, -//GO(gnutls_pkcs11_get_pin_function, -//GO(gnutls_pkcs11_get_raw_issuer, -//GO(gnutls_pkcs11_get_raw_issuer_by_dn, -//GO(gnutls_pkcs11_get_raw_issuer_by_subject_key_id, -//GO(gnutls_pkcs11_init, -//GO(gnutls_pkcs11_obj_deinit, -//GO(gnutls_pkcs11_obj_export, -//GO(gnutls_pkcs11_obj_export2, -//GO(gnutls_pkcs11_obj_export3, -//GO(gnutls_pkcs11_obj_export_url, -//GO(gnutls_pkcs11_obj_flags_get_str, -//GO(gnutls_pkcs11_obj_get_exts, -//GO(gnutls_pkcs11_obj_get_flags, -//GO(gnutls_pkcs11_obj_get_info, -//GO(gnutls_pkcs11_obj_get_type, -//GO(gnutls_pkcs11_obj_import_url, -//GO(gnutls_pkcs11_obj_init, -//GO(gnutls_pkcs11_obj_list_import_url3, -//GO(gnutls_pkcs11_obj_list_import_url4, -//GO(gnutls_pkcs11_obj_set_info, -//GO(gnutls_pkcs11_obj_set_pin_function, -//GO(gnutls_pkcs11_privkey_cpy, -//GO(gnutls_pkcs11_privkey_deinit, -//GO(gnutls_pkcs11_privkey_export_pubkey, -//GO(gnutls_pkcs11_privkey_export_url, -//GO(gnutls_pkcs11_privkey_generate3, -//GO(gnutls_pkcs11_privkey_get_info, -//GO(gnutls_pkcs11_privkey_get_pk_algorithm, -//GO(gnutls_pkcs11_privkey_import_url, -//GO(gnutls_pkcs11_privkey_init, -//GO(gnutls_pkcs11_privkey_set_pin_function, -//GO(gnutls_pkcs11_privkey_status, -//GO(gnutls_pkcs11_reinit, -//GO(gnutls_pkcs11_set_pin_function, -//GO(gnutls_pkcs11_set_token_function, -//GO(gnutls_pkcs11_token_get_flags, -//GO(gnutls_pkcs11_token_get_info, -//GO(gnutls_pkcs11_token_get_mechanism, -//GO(gnutls_pkcs11_token_get_random, -//GO(gnutls_pkcs11_token_get_url, -//GO(gnutls_pkcs11_token_init, -//GO(gnutls_pkcs11_token_set_pin, -//GO(gnutls_pkcs11_type_get_name, -//GO(gnutls_pkcs12_bag_decrypt, -//GO(gnutls_pkcs12_bag_deinit, -//GO(gnutls_pkcs12_bag_enc_info, -//GO(gnutls_pkcs12_bag_encrypt, -//GO(gnutls_pkcs12_bag_get_count, -//GO(gnutls_pkcs12_bag_get_data, -//GO(gnutls_pkcs12_bag_get_friendly_name, -//GO(gnutls_pkcs12_bag_get_key_id, -//GO(gnutls_pkcs12_bag_get_type, -//GO(gnutls_pkcs12_bag_init, -//GO(gnutls_pkcs12_bag_set_crl, -//GO(gnutls_pkcs12_bag_set_crt, -//GO(gnutls_pkcs12_bag_set_data, -//GO(gnutls_pkcs12_bag_set_friendly_name, -//GO(gnutls_pkcs12_bag_set_key_id, -//GO(gnutls_pkcs12_bag_set_privkey, +GO(gnutls_pk_algorithm_get_name, pFu) +GO(gnutls_pk_bits_to_sec_param, uFuu) +GO(gnutls_pkcs11_add_provider, iFpp) +GO(gnutls_pkcs11_copy_attached_extension, iFppppu) +GO(gnutls_pkcs11_copy_pubkey, iFppppuu) +GO(gnutls_pkcs11_copy_secret_key, iFpppuu) +GO(gnutls_pkcs11_copy_x509_crt2, iFppppu) +GO(gnutls_pkcs11_copy_x509_privkey2, iFppppuu) +GO(gnutls_pkcs11_crt_is_known, uFppu) +GO(gnutls_pkcs11_deinit, vFv) +GO(gnutls_pkcs11_delete_url, iFpu) +//GOM(gnutls_pkcs11_get_pin_function, pFEp) +GO(gnutls_pkcs11_get_raw_issuer, iFpppuu) +GO(gnutls_pkcs11_get_raw_issuer_by_dn, iFpppuu) +GO(gnutls_pkcs11_get_raw_issuer_by_subject_key_id, iFppppuu) +GO(gnutls_pkcs11_init, iFup) +GO(gnutls_pkcs11_obj_deinit, vFp) +GO(gnutls_pkcs11_obj_export, iFppp) +GO(gnutls_pkcs11_obj_export2, iFpp) +GO(gnutls_pkcs11_obj_export3, iFpup) +GO(gnutls_pkcs11_obj_export_url, iFpup) +GO(gnutls_pkcs11_obj_flags_get_str, pFu) +GO(gnutls_pkcs11_obj_get_exts, iFpppu) +GO(gnutls_pkcs11_obj_get_flags, iFpp) +GO(gnutls_pkcs11_obj_get_info, iFpupp) +GO(gnutls_pkcs11_obj_get_type, uFp) +GO(gnutls_pkcs11_obj_import_url, iFppu) +GO(gnutls_pkcs11_obj_init, iFp) +GO(gnutls_pkcs11_obj_list_import_url3, iFpppu) +GO(gnutls_pkcs11_obj_list_import_url4, iFpppu) +GO(gnutls_pkcs11_obj_set_info, iFpupLu) +//GOM(gnutls_pkcs11_obj_set_pin_function, vFEppp) +GO(gnutls_pkcs11_privkey_cpy, iFpp) +GO(gnutls_pkcs11_privkey_deinit, vFp) +GO(gnutls_pkcs11_privkey_export_pubkey, iFpupu) +GO(gnutls_pkcs11_privkey_export_url, iFpup) +GO(gnutls_pkcs11_privkey_generate3, iFpuuppupuu) +GO(gnutls_pkcs11_privkey_get_info, iFpupp) +GO(gnutls_pkcs11_privkey_get_pk_algorithm, iFpp) +GO(gnutls_pkcs11_privkey_import_url, iFppu) +GO(gnutls_pkcs11_privkey_init, iFp) +//GOM(gnutls_pkcs11_privkey_set_pin_function, vFEppp) +GO(gnutls_pkcs11_privkey_status, uFp) +GO(gnutls_pkcs11_reinit, iFv) +//GOM(gnutls_pkcs11_set_pin_function, vFEpp) +//GOM(gnutls_pkcs11_set_token_function, vFEpp) +GO(gnutls_pkcs11_token_get_flags, iFpp) +GO(gnutls_pkcs11_token_get_info, iFpupp) +GO(gnutls_pkcs11_token_get_mechanism, iFpup) +GO(gnutls_pkcs11_token_get_random, iFppL) +GO(gnutls_pkcs11_token_get_url, iFuup) +GO(gnutls_pkcs11_token_init, iFppp) +GO(gnutls_pkcs11_token_set_pin, iFpppu) +GO(gnutls_pkcs11_type_get_name, pFu) +GO(gnutls_pkcs12_bag_decrypt, iFpp) +GO(gnutls_pkcs12_bag_deinit, vFp) +GO(gnutls_pkcs12_bag_enc_info, iFppppppp) +GO(gnutls_pkcs12_bag_encrypt, iFppu) +GO(gnutls_pkcs12_bag_get_count, iFp) +GO(gnutls_pkcs12_bag_get_data, iFpup) +GO(gnutls_pkcs12_bag_get_friendly_name, iFpup) +GO(gnutls_pkcs12_bag_get_key_id, iFpup) +GO(gnutls_pkcs12_bag_get_type, iFpu) +GO(gnutls_pkcs12_bag_init, iFp) +GO(gnutls_pkcs12_bag_set_crl, iFpp) +GO(gnutls_pkcs12_bag_set_crt, iFpp) +GO(gnutls_pkcs12_bag_set_data, iFpup) +GO(gnutls_pkcs12_bag_set_friendly_name, iFpup) +GO(gnutls_pkcs12_bag_set_key_id, iFpup) +GO(gnutls_pkcs12_bag_set_privkey, iFpppu) GO(gnutls_pkcs12_deinit, vFp) -//GO(gnutls_pkcs12_export, -//GO(gnutls_pkcs12_export2, -//GO(gnutls_pkcs12_generate_mac, -//GO(gnutls_pkcs12_generate_mac2, -//GO(gnutls_pkcs12_get_bag, -GO(gnutls_pkcs12_import, iFpppu) +GO(gnutls_pkcs12_export, iFpupp) +GO(gnutls_pkcs12_export2, iFpup) +GO(gnutls_pkcs12_generate_mac, iFpp) +GO(gnutls_pkcs12_generate_mac2, iFpup) +GO(gnutls_pkcs12_get_bag, iFpip) +GO(gnutls_pkcs12_import, iFppuu) GO(gnutls_pkcs12_init, iFp) -//GO(gnutls_pkcs12_mac_info, -//GO(gnutls_pkcs12_set_bag, +GO(gnutls_pkcs12_mac_info, iFpppppp) +GO(gnutls_pkcs12_set_bag, iFpp) GO(gnutls_pkcs12_simple_parse, iFppppppppu) //GO(_gnutls_pkcs12_string_to_key, -//GO(gnutls_pkcs12_verify_mac, -//GO(gnutls_pkcs7_add_attr, -//GO(gnutls_pkcs7_attrs_deinit, -//GO(gnutls_pkcs7_deinit, -//GO(gnutls_pkcs7_delete_crl, -//GO(gnutls_pkcs7_delete_crt, -//GO(gnutls_pkcs7_export, -//GO(gnutls_pkcs7_export2, -//GO(gnutls_pkcs7_get_attr, -//GO(gnutls_pkcs7_get_crl_count, -//GO(gnutls_pkcs7_get_crl_raw, -//GO(gnutls_pkcs7_get_crl_raw2, -//GO(gnutls_pkcs7_get_crt_count, -//GO(gnutls_pkcs7_get_crt_raw, -//GO(gnutls_pkcs7_get_crt_raw2, -//GO(gnutls_pkcs7_get_embedded_data, -//GO(gnutls_pkcs7_get_embedded_data_oid, -//GO(gnutls_pkcs7_get_signature_count, -//GO(gnutls_pkcs7_get_signature_info, -//GO(gnutls_pkcs7_import, -//GO(gnutls_pkcs7_init, -//GO(gnutls_pkcs7_print, -//GO(gnutls_pkcs7_set_crl, -//GO(gnutls_pkcs7_set_crl_raw, -//GO(gnutls_pkcs7_set_crt, -//GO(gnutls_pkcs7_set_crt_raw, -//GO(gnutls_pkcs7_sign, -//GO(gnutls_pkcs7_signature_info_deinit, -//GO(gnutls_pkcs7_verify, -//GO(gnutls_pkcs7_verify_direct, -//GO(gnutls_pkcs8_info, -//GO(gnutls_pkcs_schema_get_name, -//GO(gnutls_pkcs_schema_get_oid, -//GO(gnutls_pk_get_id, -//GO(gnutls_pk_get_name, -//GO(gnutls_pk_get_oid, -//GO(gnutls_pk_list, -GO(gnutls_pk_to_sign, pFpp) -//GO(gnutls_prf, -//GO(gnutls_prf_raw, -//GO(gnutls_prf_rfc5705, -//GO(gnutls_priority_certificate_type_list, -//GO(gnutls_priority_cipher_list, -//GO(gnutls_priority_compression_list, -//GO(gnutls_priority_deinit, -//GO(gnutls_priority_ecc_curve_list, -//GO(gnutls_priority_get_cipher_suite_index, -//GO(gnutls_priority_init, -//GO(gnutls_priority_kx_list, -//GO(gnutls_priority_mac_list, -//GO(gnutls_priority_protocol_list, -//GO(gnutls_priority_set, +GO(gnutls_pkcs12_verify_mac, iFpp) +GO(gnutls_pkcs7_add_attr, iFpppu) +GO(gnutls_pkcs7_attrs_deinit, vFp) +GO(gnutls_pkcs7_deinit, vFp) +GO(gnutls_pkcs7_delete_crl, iFpi) +GO(gnutls_pkcs7_delete_crt, iFpi) +GO(gnutls_pkcs7_export, iFpupp) +GO(gnutls_pkcs7_export2, iFpup) +GO(gnutls_pkcs7_get_attr, iFpuppu) +GO(gnutls_pkcs7_get_crl_count, iFp) +GO(gnutls_pkcs7_get_crl_raw, iFpupp) +GO(gnutls_pkcs7_get_crl_raw2, iFpup) +GO(gnutls_pkcs7_get_crt_count, iFp) +GO(gnutls_pkcs7_get_crt_raw, iFpupp) +GO(gnutls_pkcs7_get_crt_raw2, iFpup) +GO(gnutls_pkcs7_get_embedded_data, iFpup) +GO(gnutls_pkcs7_get_embedded_data_oid, pFp) +GO(gnutls_pkcs7_get_signature_count, iFp) +GO(gnutls_pkcs7_get_signature_info, iFpup) +GO(gnutls_pkcs7_import, iFppu) +GO(gnutls_pkcs7_init, iFp) +GO(gnutls_pkcs7_print, iFpup) +GO(gnutls_pkcs7_set_crl, iFpp) +GO(gnutls_pkcs7_set_crl_raw, iFpp) +GO(gnutls_pkcs7_set_crt, iFpp) +GO(gnutls_pkcs7_set_crt_raw, iFpp) +GO(gnutls_pkcs7_sign, iFppppppuu) +GO(gnutls_pkcs7_signature_info_deinit, vFp) +GO(gnutls_pkcs7_verify, iFpppuupu) +GO(gnutls_pkcs7_verify_direct, iFppupu) +GO(gnutls_pkcs8_info, iFpupppppp) +GO(gnutls_pkcs_schema_get_name, pFu) +GO(gnutls_pkcs_schema_get_oid, pFu) +GO(gnutls_pk_get_id, uFp) +GO(gnutls_pk_get_name, pFu) +GO(gnutls_pk_get_oid, pFu) +GO(gnutls_pk_list, pFv) +GO(gnutls_pk_to_sign, uFuu) +GO(gnutls_prf, iFpLpiLpLp) +GO(gnutls_prf_raw, iFpLpLpLp) +GO(gnutls_prf_rfc5705, iFpLpLpLp) +GO(gnutls_priority_certificate_type_list, iFpp) +GO(gnutls_priority_cipher_list, iFpp) +GO(gnutls_priority_compression_list, iFpp) +GO(gnutls_priority_deinit, vFp) +GO(gnutls_priority_ecc_curve_list, iFpp) +GO(gnutls_priority_get_cipher_suite_index, iFpup) +GO(gnutls_priority_init, iFppp) +GO(gnutls_priority_kx_list, iFpp) +GO(gnutls_priority_mac_list, iFpp) +GO(gnutls_priority_protocol_list, iFpp) +GO(gnutls_priority_set, iFpp) GO(gnutls_priority_set_direct, iFppp) -//GO(gnutls_priority_sign_list, -//GO(gnutls_priority_string_list, -GO(gnutls_privkey_decrypt_data, iFpipp) +GO(gnutls_priority_sign_list, iFpp) +GO(gnutls_priority_string_list, pFuu) +GO(gnutls_privkey_decrypt_data, iFpupp) GO(gnutls_privkey_deinit, vFp) GO(gnutls_privkey_derive_secret, iFppppu) GO(gnutls_privkey_export_dsa_raw, iFpppppp) GO(gnutls_privkey_export_ecc_raw, iFppppp) -//GO(gnutls_privkey_export_openpgp, -//GO(gnutls_privkey_export_pkcs11, +GO(gnutls_privkey_export_openpgp, iFpp) +GO(gnutls_privkey_export_pkcs11, iFpp) GO(gnutls_privkey_export_rsa_raw, iFppppppppp) GO(gnutls_privkey_export_x509, iFpp) -GO(gnutls_privkey_generate, iFppuu) +GO(gnutls_privkey_generate, iFpuuu) GO(gnutls_privkey_generate2, iFpuuupu) -//GO(gnutls_privkey_get_pk_algorithm, -//GO(gnutls_privkey_get_seed, -//GO(gnutls_privkey_get_type, -GO(gnutls_privkey_import_dh_raw, iFpupp) +GO(gnutls_privkey_get_pk_algorithm, iFpp) +GO(gnutls_privkey_get_seed, iFpppp) +GO(gnutls_privkey_get_type, uFp) +GO(gnutls_privkey_import_dh_raw, iFpppp) GO(gnutls_privkey_import_dsa_raw, iFpppppp) -GO(gnutls_privkey_import_ecc_raw, iFppppp) -//GO(gnutls_privkey_import_ext, -//GO(gnutls_privkey_import_ext2, -//GO(gnutls_privkey_import_ext3, -//GO(gnutls_privkey_import_openpgp, -//GO(gnutls_privkey_import_openpgp_raw, -//GO(gnutls_privkey_import_pkcs11, +GO(gnutls_privkey_import_ecc_raw, iFpuppp) +//GOM(gnutls_privkey_import_ext, iFEpupppu) +//GOM(gnutls_privkey_import_ext2, iFEpuppppu) +//GOM(gnutls_privkey_import_ext3, iFEppppppu) +GO(gnutls_privkey_import_openpgp, iFppu) +GO(gnutls_privkey_import_openpgp_raw, iFppupp) +GO(gnutls_privkey_import_pkcs11, iFppu) GO(gnutls_privkey_import_rsa_raw, iFppppppppp) -//GO(gnutls_privkey_import_tpm_raw, -//GO(gnutls_privkey_import_tpm_url, -//GO(gnutls_privkey_import_url, -//GO(gnutls_privkey_import_x509, -//GO(gnutls_privkey_import_x509_raw, +GO(gnutls_privkey_import_tpm_raw, iFppuppu) +GO(gnutls_privkey_import_tpm_url, iFppppu) +GO(gnutls_privkey_import_url, iFppu) +GO(gnutls_privkey_import_x509, iFppu) +GO(gnutls_privkey_import_x509_raw, iFppupu) GO(gnutls_privkey_init, iFp) -//GO(gnutls_privkey_set_flags, -//GO(gnutls_privkey_set_pin_function, +GO(gnutls_privkey_set_flags, vFpu) +//GOM(gnutls_privkey_set_pin_function, vFEppp) GO(gnutls_privkey_set_spki, iFppu) -//GO(gnutls_privkey_sign_data, -GO(gnutls_privkey_sign_hash, iFppupp) -//GO(gnutls_privkey_status, -//GO(gnutls_privkey_verify_params, -//GO(gnutls_privkey_verify_seed, -//GO(gnutls_protocol_get_id, -GO(gnutls_protocol_get_name, pFi) -GO(gnutls_protocol_get_version, iFp) -//GO(gnutls_protocol_list, -//GO(gnutls_psk_allocate_client_credentials, -//GO(gnutls_psk_allocate_server_credentials, -//GO(gnutls_psk_client_get_hint, -//GO(gnutls_psk_free_client_credentials, -//GO(gnutls_psk_free_server_credentials, -//GO(gnutls_psk_server_get_username, -//GO(gnutls_psk_set_client_credentials, -//GO(gnutls_psk_set_client_credentials_function, -//GO(gnutls_psk_set_params_function, -//GO(gnutls_psk_set_server_credentials_file, -//GO(gnutls_psk_set_server_credentials_function, -//GO(gnutls_psk_set_server_credentials_hint, -//GO(gnutls_psk_set_server_dh_params, -//GO(gnutls_psk_set_server_known_dh_params, -//GO(gnutls_psk_set_server_params_function, +GO(gnutls_privkey_sign_data, iFpuupp) +GO(gnutls_privkey_sign_hash, iFpuupp) +GO(gnutls_privkey_status, iFp) +GO(gnutls_privkey_verify_params, iFp) +GO(gnutls_privkey_verify_seed, iFpupL) +GO(gnutls_protocol_get_id, uFp) +GO(gnutls_protocol_get_name, pFu) +GO(gnutls_protocol_get_version, uFp) +GO(gnutls_protocol_list, pFv) +GO(gnutls_psk_allocate_client_credentials, iFp) +GO(gnutls_psk_allocate_server_credentials, iFp) +GO(gnutls_psk_client_get_hint, pFp) +GO(gnutls_psk_free_client_credentials, vFp) +GO(gnutls_psk_free_server_credentials, vFp) +GO(gnutls_psk_server_get_username, pFp) +GO(gnutls_psk_set_client_credentials, iFpppu) +//GOM(gnutls_psk_set_client_credentials_function, vFEpp) +//GOM(gnutls_psk_set_params_function, vFEpp) +GO(gnutls_psk_set_server_credentials_file, iFpp) +//GOM(gnutls_psk_set_server_credentials_function, vFEpp) +GO(gnutls_psk_set_server_credentials_hint, iFpp) +GO(gnutls_psk_set_server_dh_params, vFpp) +GO(gnutls_psk_set_server_known_dh_params, iFpu) +//GOM(gnutls_psk_set_server_params_function, vFEpp) GO(gnutls_pubkey_deinit, vFp) GO(gnutls_pubkey_encrypt_data, iFpupp) -GO(gnutls_pubkey_export, iFpipp) -//GO(gnutls_pubkey_export2, +GO(gnutls_pubkey_export, iFpupp) +GO(gnutls_pubkey_export2, iFpup) GO(gnutls_pubkey_export_dsa_raw, iFppppp) -GO(gnutls_pubkey_export_dh_raw, iFpupu) +GO(gnutls_pubkey_export_dh_raw, iFpppu) GO(gnutls_pubkey_export_ecc_raw, iFpppp) -//GO(gnutls_pubkey_export_ecc_x962, +GO(gnutls_pubkey_export_ecc_x962, iFppp) GO(gnutls_pubkey_export_rsa_raw, iFppp) -//GO(gnutls_pubkey_get_key_id, -//GO(gnutls_pubkey_get_key_usage, -//GO(gnutls_pubkey_get_openpgp_key_id, -//GO(gnutls_pubkey_get_pk_algorithm, -//GO(gnutls_pubkey_get_preferred_hash_algorithm, -//GO(gnutls_pubkey_import, -GO(gnutls_pubkey_import_dh_raw, iFpup) +GO(gnutls_pubkey_get_key_id, iFpupp) +GO(gnutls_pubkey_get_key_usage, iFpp) +GO(gnutls_pubkey_get_openpgp_key_id, iFpuppp) +GO(gnutls_pubkey_get_pk_algorithm, iFpp) +GO(gnutls_pubkey_get_preferred_hash_algorithm, iFppp) +GO(gnutls_pubkey_import, iFppu) +GO(gnutls_pubkey_import_dh_raw, iFppp) GO(gnutls_pubkey_import_dsa_raw, iFppppp) -GO(gnutls_pubkey_import_ecc_raw, iFpppp) -//GO(gnutls_pubkey_import_ecc_x962, -//GO(gnutls_pubkey_import_openpgp, -//GO(gnutls_pubkey_import_openpgp_raw, -//GO(gnutls_pubkey_import_pkcs11, +GO(gnutls_pubkey_import_ecc_raw, iFpupp) +GO(gnutls_pubkey_import_ecc_x962, iFppp) +GO(gnutls_pubkey_import_openpgp, iFppu) +GO(gnutls_pubkey_import_openpgp_raw, iFppupu) +GO(gnutls_pubkey_import_pkcs11, iFppu) GO(gnutls_pubkey_import_privkey, iFppuu) GO(gnutls_pubkey_import_rsa_raw, iFppp) -//GO(gnutls_pubkey_import_tpm_raw, -//GO(gnutls_pubkey_import_tpm_url, -//GO(gnutls_pubkey_import_url, +GO(gnutls_pubkey_import_tpm_raw, iFppupu) +GO(gnutls_pubkey_import_tpm_url, iFpppu) +GO(gnutls_pubkey_import_url, iFppu) GO(gnutls_pubkey_import_x509, iFppu) -//GO(gnutls_pubkey_import_x509_crq, -//GO(gnutls_pubkey_import_x509_raw, +GO(gnutls_pubkey_import_x509_crq, iFppu) +GO(gnutls_pubkey_import_x509_raw, iFppuu) GO(gnutls_pubkey_init, iFp) -//GO(gnutls_pubkey_print, -//GO(gnutls_pubkey_set_key_usage, -//GO(gnutls_pubkey_set_pin_function, +GO(gnutls_pubkey_print, iFpup) +GO(gnutls_pubkey_set_key_usage, iFpu) +//GOM(gnutls_pubkey_set_pin_function, vFEppp) GO(gnutls_pubkey_set_spki, iFppu) -//GO(gnutls_pubkey_verify_data2, -GO(gnutls_pubkey_verify_hash2, iFppupp) -//GO(gnutls_pubkey_verify_params, -//GO(gnutls_random_art, -//GO(gnutls_range_split, -//GO(gnutls_record_can_use_length_hiding, -//GO(gnutls_record_check_corked, +GO(gnutls_pubkey_verify_data2, iFpuupp) +GO(gnutls_pubkey_verify_hash2, iFpuupp) +GO(gnutls_pubkey_verify_params, iFp) +GO(gnutls_random_art, iFupupLp) +GO(gnutls_range_split, iFpppp) +GO(gnutls_record_can_use_length_hiding, uFp) +GO(gnutls_record_check_corked, LFp) GO(gnutls_record_check_pending, LFp) -//GO(gnutls_record_cork, -//GO(gnutls_record_disable_padding, -//GO(gnutls_record_discard_queued, +GO(gnutls_record_cork, vFp) +GO(gnutls_record_disable_padding, vFp) +GO(gnutls_record_discard_queued, LFp) GO(gnutls_record_get_direction, iFp) -//GO(gnutls_record_get_discarded, +GO(gnutls_record_get_discarded, uFp) GO(gnutls_record_get_max_size, LFp) -//GO(gnutls_record_get_state, -//GO(gnutls_record_overhead_size, +GO(gnutls_record_get_state, iFpupppp) +GO(gnutls_record_overhead_size, LFp) GO(gnutls_record_recv, lFppL) -//GO(gnutls_record_recv_packet, -//GO(gnutls_record_recv_seq, +GO(gnutls_record_recv_packet, lFpp) +GO(gnutls_record_recv_seq, lFppLp) GO(gnutls_record_send, lFppL) -//GO(gnutls_record_send_range, +GO(gnutls_record_send_range, lFppLp) //GO(_gnutls_record_set_default_version, -//GO(gnutls_record_set_max_size, -//GO(gnutls_record_set_state, -//GO(gnutls_record_set_timeout, -//GO(gnutls_record_uncork, +GO(gnutls_record_set_max_size, lFpL) +GO(gnutls_record_set_state, iFpup) +GO(gnutls_record_set_timeout, vFpu) +GO(gnutls_record_uncork, iFpu) //GO(gnutls_register_custom_url, -//GO(gnutls_rehandshake, +GO(gnutls_rehandshake, iFp) //GO(_gnutls_resolve_priorities, -GO(gnutls_rnd, iFipL) -//GO(gnutls_rnd_refresh, +GO(gnutls_rnd, iFupL) +GO(gnutls_rnd_refresh, vFv) //GO(_gnutls_rsa_pms_set_version, -//GO(gnutls_safe_renegotiation_status, -//GO(gnutls_sec_param_get_name, -//GO(gnutls_sec_param_to_pk_bits, -//GO(gnutls_sec_param_to_symmetric_bits, -//GO(gnutls_server_name_get, -GO(gnutls_server_name_set, iFpppL) +GO(gnutls_safe_renegotiation_status, uFp) +GO(gnutls_sec_param_get_name, pFu) +GO(gnutls_sec_param_to_pk_bits, uFuu) +GO(gnutls_sec_param_to_symmetric_bits, uFu) +GO(gnutls_server_name_get, iFppppu) +GO(gnutls_server_name_set, iFpupL) //GO(_gnutls_server_name_set_raw, -GO(gnutls_session_channel_binding, iFpip) -//GO(gnutls_session_enable_compatibility_mode, -//GO(gnutls_session_etm_status, -//GO(gnutls_session_ext_master_secret_status, -//GO(gnutls_session_ext_register, -//GO(gnutls_session_force_valid, +GO(gnutls_session_channel_binding, iFpup) +GO(gnutls_session_enable_compatibility_mode, vFp) +GO(gnutls_session_etm_status, uFp) +GO(gnutls_session_ext_master_secret_status, uFp) +//GOM(gnutls_session_ext_register, iFEppiupppppu) +GO(gnutls_session_force_valid, vFp) GO(gnutls_session_get_data, iFppp) -//GO(gnutls_session_get_data2, -//GO(gnutls_session_get_desc, -//GO(gnutls_session_get_flags, -//GO(gnutls_session_get_id, -//GO(gnutls_session_get_id2, -//GO(gnutls_session_get_master_secret, -//GO(gnutls_session_get_ptr, -//GO(gnutls_session_get_random, -//GO(gnutls_session_get_verify_cert_status, -//GO(gnutls_session_is_resumed, -//GO(gnutls_session_resumption_requested, +GO(gnutls_session_get_data2, iFpp) +GO(gnutls_session_get_desc, pFp) +GO(gnutls_session_get_flags, uFp) +GO(gnutls_session_get_id, iFppp) +GO(gnutls_session_get_id2, iFpp) +GO(gnutls_session_get_master_secret, vFpp) +GO(gnutls_session_get_ptr, pFp) +GO(gnutls_session_get_random, vFppp) +GO(gnutls_session_get_verify_cert_status, uFp) +GO(gnutls_session_is_resumed, iFp) +GO(gnutls_session_resumption_requested, iFp) GO(gnutls_session_set_data, iFppL) -//GO(gnutls_session_set_id, -//GO(gnutls_session_set_premaster, -//GO(gnutls_session_set_ptr, -//GO(gnutls_session_set_verify_cert, -//GO(gnutls_session_set_verify_cert2, -//GO(gnutls_session_set_verify_function, -//GO(gnutls_session_supplemental_register, -//GO(gnutls_session_ticket_enable_client, -//GO(gnutls_session_ticket_enable_server, -//GO(gnutls_session_ticket_key_generate, +GO(gnutls_session_set_id, iFpp) +GO(gnutls_session_set_premaster, iFpuuuuuupp) +GO(gnutls_session_set_ptr, vFpp) +GO(gnutls_session_set_verify_cert, vFppu) +GO(gnutls_session_set_verify_cert2, vFppuu) +//GOM(gnutls_session_set_verify_function, vFEpp) +//GOM(gnutls_session_supplemental_register, iFEppuppu) +GO(gnutls_session_ticket_enable_client, iFp) +GO(gnutls_session_ticket_enable_server, iFpp) +GO(gnutls_session_ticket_key_generate, iFp) GO(gnutls_set_default_priority, iFp) -//GO(gnutls_sign_algorithm_get, -//GO(gnutls_sign_algorithm_get_client, -//GO(gnutls_sign_algorithm_get_requested, -//GO(gnutls_sign_get_hash_algorithm, -//GO(gnutls_sign_get_id, -//GO(gnutls_sign_get_name, -//GO(gnutls_sign_get_oid, -//GO(gnutls_sign_get_pk_algorithm, -//GO(gnutls_sign_is_secure, -//GO(gnutls_sign_list, -//GO(gnutls_srp_allocate_client_credentials, -//GO(gnutls_srp_allocate_server_credentials, -//GO(gnutls_srp_base64_decode, -//GO(gnutls_srp_base64_decode2, -//GO(gnutls_srp_base64_encode, -//GO(gnutls_srp_base64_encode2, -//GO(gnutls_srp_free_client_credentials, -//GO(gnutls_srp_free_server_credentials, -//GO(gnutls_srp_server_get_username, -//GO(gnutls_srp_set_client_credentials, -//GO(gnutls_srp_set_client_credentials_function, -//GO(gnutls_srp_set_prime_bits, -//GO(gnutls_srp_set_server_credentials_file, -//GO(gnutls_srp_set_server_credentials_function, -//GO(gnutls_srp_set_server_fake_salt_seed, -//GO(gnutls_srp_verifier, -//GO(gnutls_srtp_get_keys, -//GO(gnutls_srtp_get_mki, -//GO(gnutls_srtp_get_profile_id, -//GO(gnutls_srtp_get_profile_name, -//GO(gnutls_srtp_get_selected_profile, -//GO(gnutls_srtp_set_mki, -//GO(gnutls_srtp_set_profile, -//GO(gnutls_srtp_set_profile_direct, -//GO(gnutls_store_commitment, -//GO(gnutls_store_pubkey, +GO(gnutls_sign_algorithm_get, iFp) +GO(gnutls_sign_algorithm_get_client, iFp) +GO(gnutls_sign_algorithm_get_requested, iFpLp) +GO(gnutls_sign_get_hash_algorithm, uFu) +GO(gnutls_sign_get_id, uFp) +GO(gnutls_sign_get_name, pFu) +GO(gnutls_sign_get_oid, pFu) +GO(gnutls_sign_get_pk_algorithm, uFu) +GO(gnutls_sign_is_secure, uFu) +GO(gnutls_sign_list, pFv) +GO(gnutls_srp_allocate_client_credentials, iFp) +GO(gnutls_srp_allocate_server_credentials, iFp) +GO(gnutls_srp_base64_decode, iFppp) +GO(gnutls_srp_base64_decode2, iFpp) +GO(gnutls_srp_base64_encode, iFppp) +GO(gnutls_srp_base64_encode2, iFpp) +GO(gnutls_srp_free_client_credentials, vFp) +GO(gnutls_srp_free_server_credentials, vFp) +GO(gnutls_srp_server_get_username, pFp) +GO(gnutls_srp_set_client_credentials, iFppp) +//GOM(gnutls_srp_set_client_credentials_function, vFEpp) +GO(gnutls_srp_set_prime_bits, vFpu) +GO(gnutls_srp_set_server_credentials_file, iFppp) +//GOM(gnutls_srp_set_server_credentials_function, vFEpp) +GO(gnutls_srp_set_server_fake_salt_seed, vFppu) +GO(gnutls_srp_verifier, iFpppppp) +GO(gnutls_srtp_get_keys, iFppupppp) +GO(gnutls_srtp_get_mki, iFpp) +GO(gnutls_srtp_get_profile_id, iFpp) +GO(gnutls_srtp_get_profile_name, pFu) +GO(gnutls_srtp_get_selected_profile, iFpp) +GO(gnutls_srtp_set_mki, iFpp) +GO(gnutls_srtp_set_profile, iFpu) +GO(gnutls_srtp_set_profile_direct, iFppp) +GO(gnutls_store_commitment, iFppppuplu) +GO(gnutls_store_pubkey, iFppppuplu) GO(gnutls_strerror, pFi) -//GO(gnutls_strerror_name, +GO(gnutls_strerror_name, pFi) //GO(gnutls_subject_alt_names_deinit, //GO(gnutls_subject_alt_names_get, //GO(gnutls_subject_alt_names_init, //GO(gnutls_subject_alt_names_set, -//GO(gnutls_supplemental_get_name, -//GO(gnutls_supplemental_recv, -//GO(gnutls_supplemental_register, -//GO(gnutls_supplemental_send, +GO(gnutls_supplemental_get_name, pFu) +GO(gnutls_supplemental_recv, vFpu) +//GOM(gnutls_supplemental_register, iFEpupp) +GO(gnutls_supplemental_send, vFpu) //GO(gnutls_system_key_add_x509, //GO(gnutls_system_key_delete, //GO(gnutls_system_key_iter_deinit, //GO(gnutls_system_key_iter_get_info, -//GO(gnutls_system_recv_timeout, -//GO(gnutls_tdb_deinit, -//GO(gnutls_tdb_init, -//GO(gnutls_tdb_set_store_commitment_func, -//GO(gnutls_tdb_set_store_func, -//GO(gnutls_tdb_set_verify_func, -//GO(gnutls_tpm_get_registered, -//GO(gnutls_tpm_key_list_deinit, -//GO(gnutls_tpm_key_list_get_url, -//GO(gnutls_tpm_privkey_delete, -//GO(gnutls_tpm_privkey_generate, -//GO(gnutls_transport_get_int, -//GO(gnutls_transport_get_int2, +GO(gnutls_system_recv_timeout, iFpu) +GO(gnutls_tdb_deinit, vFp) +GO(gnutls_tdb_init, iFp) +//GOM(gnutls_tdb_set_store_commitment_func, vFEpp) +//GOM(gnutls_tdb_set_store_func, vFEpp) +//GOM(gnutls_tdb_set_verify_func, vFEpp) +GO(gnutls_tpm_get_registered, iFp) +GO(gnutls_tpm_key_list_deinit, vFp) +GO(gnutls_tpm_key_list_get_url, iFpupu) +GO(gnutls_tpm_privkey_delete, iFpp) +GO(gnutls_tpm_privkey_generate, iFuuppuuppu) +GO(gnutls_transport_get_int, iFp) +GO(gnutls_transport_get_int2, vFppp) GO(gnutls_transport_get_ptr, pFp) -//GO(gnutls_transport_get_ptr2, +GO(gnutls_transport_get_ptr2, vFppp) GO(gnutls_transport_set_errno, vFpi) -//GO(gnutls_transport_set_errno_function, +//GOM(gnutls_transport_set_errno_function, vFEpp) //GO(gnutls_transport_set_fastopen, -//GO(gnutls_transport_set_int2, +GO(gnutls_transport_set_int2, vFpii) GO(gnutls_transport_set_ptr, vFpp) -//GO(gnutls_transport_set_ptr2, +GO(gnutls_transport_set_ptr2, vFppp) GOM(gnutls_transport_set_pull_function, vFEpp) GOM(gnutls_transport_set_pull_timeout_function, vFEpp) GOM(gnutls_transport_set_push_function, vFEpp) -//GO(gnutls_transport_set_vec_push_function, +//GOM(gnutls_transport_set_vec_push_function, vFEpp) //GO(_gnutls_ucs2_to_utf8, -//GO(gnutls_url_is_supported, -//GO(gnutls_utf8_password_normalize, +GO(gnutls_url_is_supported, uFp) +GO(gnutls_utf8_password_normalize, iFpupu) //GO(_gnutls_utf8_to_ucs2, -//GO(gnutls_verify_stored_pubkey, +GO(gnutls_verify_stored_pubkey, iFppppupu) //GO(gnutls_x509_aia_deinit, //GO(gnutls_x509_aia_get, //GO(gnutls_x509_aia_init, @@ -785,240 +785,240 @@ GOM(gnutls_transport_set_push_function, vFEpp) //GO(gnutls_x509_aki_init, //GO(gnutls_x509_aki_set_cert_issuer, //GO(gnutls_x509_aki_set_id, -//GO(gnutls_x509_cidr_to_rfc5280, -//GO(gnutls_x509_crl_check_issuer, -//GO(gnutls_x509_crl_deinit, +GO(gnutls_x509_cidr_to_rfc5280, iFpp) +GO(gnutls_x509_crl_check_issuer, uFpp) +GO(gnutls_x509_crl_deinit, vFp) //GO(gnutls_x509_crl_dist_points_deinit, //GO(gnutls_x509_crl_dist_points_get, //GO(gnutls_x509_crl_dist_points_init, //GO(gnutls_x509_crl_dist_points_set, -//GO(gnutls_x509_crl_export, -//GO(gnutls_x509_crl_export2, -//GO(gnutls_x509_crl_get_authority_key_gn_serial, -//GO(gnutls_x509_crl_get_authority_key_id, -//GO(gnutls_x509_crl_get_crt_count, -//GO(gnutls_x509_crl_get_crt_serial, -//GO(gnutls_x509_crl_get_dn_oid, -//GO(gnutls_x509_crl_get_extension_data, -//GO(gnutls_x509_crl_get_extension_data2, -//GO(gnutls_x509_crl_get_extension_info, -//GO(gnutls_x509_crl_get_extension_oid, -//GO(gnutls_x509_crl_get_issuer_dn, -//GO(gnutls_x509_crl_get_issuer_dn2, -//GO(gnutls_x509_crl_get_issuer_dn3, -//GO(gnutls_x509_crl_get_issuer_dn_by_oid, -//GO(gnutls_x509_crl_get_next_update, -//GO(gnutls_x509_crl_get_number, -//GO(gnutls_x509_crl_get_raw_issuer_dn, -//GO(gnutls_x509_crl_get_signature, -//GO(gnutls_x509_crl_get_signature_algorithm, -//GO(gnutls_x509_crl_get_signature_oid, -//GO(gnutls_x509_crl_get_this_update, -//GO(gnutls_x509_crl_get_version, -//GO(gnutls_x509_crl_import, -//GO(gnutls_x509_crl_init, -//GO(gnutls_x509_crl_iter_crt_serial, -//GO(gnutls_x509_crl_iter_deinit, -//GO(gnutls_x509_crl_list_import, -//GO(gnutls_x509_crl_list_import2, -//GO(gnutls_x509_crl_print, -//GO(gnutls_x509_crl_privkey_sign, -//GO(gnutls_x509_crl_set_authority_key_id, -//GO(gnutls_x509_crl_set_crt, -//GO(gnutls_x509_crl_set_crt_serial, -//GO(gnutls_x509_crl_set_next_update, -//GO(gnutls_x509_crl_set_number, -//GO(gnutls_x509_crl_set_this_update, -//GO(gnutls_x509_crl_set_version, -//GO(gnutls_x509_crl_sign, -//GO(gnutls_x509_crl_sign2, -//GO(gnutls_x509_crl_verify, -//GO(gnutls_x509_crq_deinit, -//GO(gnutls_x509_crq_export, -//GO(gnutls_x509_crq_export2, -//GO(gnutls_x509_crq_get_attribute_by_oid, -//GO(gnutls_x509_crq_get_attribute_data, -//GO(gnutls_x509_crq_get_attribute_info, -//GO(gnutls_x509_crq_get_basic_constraints, -//GO(gnutls_x509_crq_get_challenge_password, -//GO(gnutls_x509_crq_get_dn, -//GO(gnutls_x509_crq_get_dn2, -//GO(gnutls_x509_crq_get_dn3, -//GO(gnutls_x509_crq_get_dn_by_oid, -//GO(gnutls_x509_crq_get_dn_oid, -//GO(gnutls_x509_crq_get_extension_by_oid, -//GO(gnutls_x509_crq_get_extension_by_oid2, -//GO(gnutls_x509_crq_get_extension_data, -//GO(gnutls_x509_crq_get_extension_data2, -//GO(gnutls_x509_crq_get_extension_info, -//GO(gnutls_x509_crq_get_key_id, -//GO(gnutls_x509_crq_get_key_purpose_oid, -//GO(gnutls_x509_crq_get_key_rsa_raw, -//GO(gnutls_x509_crq_get_key_usage, -//GO(gnutls_x509_crq_get_pk_algorithm, -//GO(gnutls_x509_crq_get_pk_oid, -//GO(gnutls_x509_crq_get_private_key_usage_period, -//GO(gnutls_x509_crq_get_signature_algorithm, -//GO(gnutls_x509_crq_get_signature_oid, -//GO(gnutls_x509_crq_get_subject_alt_name, -//GO(gnutls_x509_crq_get_subject_alt_othername_oid, -//GO(gnutls_x509_crq_get_tlsfeatures, -//GO(gnutls_x509_crq_get_version, -//GO(gnutls_x509_crq_import, -//GO(gnutls_x509_crq_init, -//GO(gnutls_x509_crq_print, -//GO(gnutls_x509_crq_privkey_sign, -//GO(gnutls_x509_crq_set_attribute_by_oid, -//GO(gnutls_x509_crq_set_basic_constraints, -//GO(gnutls_x509_crq_set_challenge_password, -//GO(gnutls_x509_crq_set_dn, -//GO(gnutls_x509_crq_set_dn_by_oid, -//GO(gnutls_x509_crq_set_extension_by_oid, -//GO(gnutls_x509_crq_set_key, -//GO(gnutls_x509_crq_set_key_purpose_oid, -//GO(gnutls_x509_crq_set_key_rsa_raw, -//GO(gnutls_x509_crq_set_key_usage, -//GO(gnutls_x509_crq_set_private_key_usage_period, -//GO(gnutls_x509_crq_set_pubkey, -//GO(gnutls_x509_crq_set_subject_alt_name, -//GO(gnutls_x509_crq_set_subject_alt_othername, -//GO(gnutls_x509_crq_set_tlsfeatures, -//GO(gnutls_x509_crq_set_version, -//GO(gnutls_x509_crq_sign, -//GO(gnutls_x509_crq_sign2, -//GO(gnutls_x509_crq_verify, -//GO(gnutls_x509_crt_check_email, +GO(gnutls_x509_crl_export, iFpupp) +GO(gnutls_x509_crl_export2, iFpup) +GO(gnutls_x509_crl_get_authority_key_gn_serial, iFpupppppp) +GO(gnutls_x509_crl_get_authority_key_id, iFpppp) +GO(gnutls_x509_crl_get_crt_count, iFp) +GO(gnutls_x509_crl_get_crt_serial, iFpuppp) +GO(gnutls_x509_crl_get_dn_oid, iFpupp) +GO(gnutls_x509_crl_get_extension_data, iFpupp) +GO(gnutls_x509_crl_get_extension_data2, iFpup) +GO(gnutls_x509_crl_get_extension_info, iFpuppp) +GO(gnutls_x509_crl_get_extension_oid, iFpupp) +GO(gnutls_x509_crl_get_issuer_dn, iFppp) +GO(gnutls_x509_crl_get_issuer_dn2, iFpp) +GO(gnutls_x509_crl_get_issuer_dn3, iFppu) +GO(gnutls_x509_crl_get_issuer_dn_by_oid, iFppuupp) +GO(gnutls_x509_crl_get_next_update, lFp) +GO(gnutls_x509_crl_get_number, iFpppp) +GO(gnutls_x509_crl_get_raw_issuer_dn, iFpp) +GO(gnutls_x509_crl_get_signature, iFppp) +GO(gnutls_x509_crl_get_signature_algorithm, iFp) +GO(gnutls_x509_crl_get_signature_oid, iFppp) +GO(gnutls_x509_crl_get_this_update, lFp) +GO(gnutls_x509_crl_get_version, iFp) +GO(gnutls_x509_crl_import, iFppu) +GO(gnutls_x509_crl_init, iFp) +GO(gnutls_x509_crl_iter_crt_serial, iFppppp) +GO(gnutls_x509_crl_iter_deinit, vFp) +GO(gnutls_x509_crl_list_import, iFpppuu) +GO(gnutls_x509_crl_list_import2, iFpppuu) +GO(gnutls_x509_crl_print, iFpup) +GO(gnutls_x509_crl_privkey_sign, iFpppuu) +GO(gnutls_x509_crl_set_authority_key_id, iFppL) +GO(gnutls_x509_crl_set_crt, iFppl) +GO(gnutls_x509_crl_set_crt_serial, iFppLl) +GO(gnutls_x509_crl_set_next_update, iFpl) +GO(gnutls_x509_crl_set_number, iFppL) +GO(gnutls_x509_crl_set_this_update, iFpl) +GO(gnutls_x509_crl_set_version, iFpu) +GO(gnutls_x509_crl_sign, iFppp) +GO(gnutls_x509_crl_sign2, iFpppuu) +GO(gnutls_x509_crl_verify, iFppuup) +GO(gnutls_x509_crq_deinit, vFp) +GO(gnutls_x509_crq_export, iFpupp) +GO(gnutls_x509_crq_export2, iFpup) +GO(gnutls_x509_crq_get_attribute_by_oid, iFppupp) +GO(gnutls_x509_crq_get_attribute_data, iFpupp) +GO(gnutls_x509_crq_get_attribute_info, iFpupp) +GO(gnutls_x509_crq_get_basic_constraints, iFpppp) +GO(gnutls_x509_crq_get_challenge_password, iFppp) +GO(gnutls_x509_crq_get_dn, iFppp) +GO(gnutls_x509_crq_get_dn2, iFpp) +GO(gnutls_x509_crq_get_dn3, iFppu) +GO(gnutls_x509_crq_get_dn_by_oid, iFppuupp) +GO(gnutls_x509_crq_get_dn_oid, iFpupp) +GO(gnutls_x509_crq_get_extension_by_oid, iFppuppp) +GO(gnutls_x509_crq_get_extension_by_oid2, iFppupp) +GO(gnutls_x509_crq_get_extension_data, iFpupp) +GO(gnutls_x509_crq_get_extension_data2, iFpup) +GO(gnutls_x509_crq_get_extension_info, iFpuppp) +GO(gnutls_x509_crq_get_key_id, iFpupp) +GO(gnutls_x509_crq_get_key_purpose_oid, iFpuppp) +GO(gnutls_x509_crq_get_key_rsa_raw, iFppp) +GO(gnutls_x509_crq_get_key_usage, iFppp) +GO(gnutls_x509_crq_get_pk_algorithm, iFpp) +GO(gnutls_x509_crq_get_pk_oid, iFppp) +GO(gnutls_x509_crq_get_private_key_usage_period, iFpppp) +GO(gnutls_x509_crq_get_signature_algorithm, iFp) +GO(gnutls_x509_crq_get_signature_oid, iFppp) +GO(gnutls_x509_crq_get_subject_alt_name, iFpupppp) +GO(gnutls_x509_crq_get_subject_alt_othername_oid, iFpupp) +GO(gnutls_x509_crq_get_tlsfeatures, iFppup) +GO(gnutls_x509_crq_get_version, iFp) +GO(gnutls_x509_crq_import, iFppu) +GO(gnutls_x509_crq_init, iFp) +GO(gnutls_x509_crq_print, iFpup) +GO(gnutls_x509_crq_privkey_sign, iFppuu) +GO(gnutls_x509_crq_set_attribute_by_oid, iFpppL) +GO(gnutls_x509_crq_set_basic_constraints, iFpui) +GO(gnutls_x509_crq_set_challenge_password, iFpp) +GO(gnutls_x509_crq_set_dn, iFppp) +GO(gnutls_x509_crq_set_dn_by_oid, iFppupu) +GO(gnutls_x509_crq_set_extension_by_oid, iFpppLu) +GO(gnutls_x509_crq_set_key, iFpp) +GO(gnutls_x509_crq_set_key_purpose_oid, iFppu) +GO(gnutls_x509_crq_set_key_rsa_raw, iFppp) +GO(gnutls_x509_crq_set_key_usage, iFpu) +GO(gnutls_x509_crq_set_private_key_usage_period, iFpll) +GO(gnutls_x509_crq_set_pubkey, iFpp) +GO(gnutls_x509_crq_set_subject_alt_name, iFpupuu) +GO(gnutls_x509_crq_set_subject_alt_othername, iFpppuu) +GO(gnutls_x509_crq_set_tlsfeatures, iFpp) +GO(gnutls_x509_crq_set_version, iFpu) +GO(gnutls_x509_crq_sign, iFpp) +GO(gnutls_x509_crq_sign2, iFppuu) +GO(gnutls_x509_crq_verify, iFpu) +GO(gnutls_x509_crt_check_email, uFppu) GO(gnutls_x509_crt_check_hostname, uFpp) -//GO(gnutls_x509_crt_check_hostname2, +GO(gnutls_x509_crt_check_hostname2, uFppu) GO(gnutls_x509_crt_check_issuer, uFpp) -//GO(gnutls_x509_crt_check_key_purpose, -//GO(gnutls_x509_crt_check_revocation, -//GO(gnutls_x509_crt_cpy_crl_dist_points, +GO(gnutls_x509_crt_check_key_purpose, uFppu) +GO(gnutls_x509_crt_check_revocation, iFppu) +GO(gnutls_x509_crt_cpy_crl_dist_points, iFpp) GO(gnutls_x509_crt_deinit, vFp) -//GO(gnutls_x509_crt_equals, -//GO(gnutls_x509_crt_equals2, -GO(gnutls_x509_crt_export, iFpppp) -//GO(gnutls_x509_crt_export2, +GO(gnutls_x509_crt_equals, uFpp) +GO(gnutls_x509_crt_equals2, uFpp) +GO(gnutls_x509_crt_export, iFpupp) +GO(gnutls_x509_crt_export2, iFpup) GO(gnutls_x509_crt_get_activation_time, lFp) -//GO(gnutls_x509_crt_get_authority_info_access, -//GO(gnutls_x509_crt_get_authority_key_gn_serial, -//GO(gnutls_x509_crt_get_authority_key_id, -//GO(gnutls_x509_crt_get_basic_constraints, -//GO(gnutls_x509_crt_get_ca_status, -//GO(gnutls_x509_crt_get_crl_dist_points, -//GO(gnutls_x509_crt_get_dn, +GO(gnutls_x509_crt_get_authority_info_access, iFpuipp) +GO(gnutls_x509_crt_get_authority_key_gn_serial, iFpupppppp) +GO(gnutls_x509_crt_get_authority_key_id, iFpppp) +GO(gnutls_x509_crt_get_basic_constraints, iFpppp) +GO(gnutls_x509_crt_get_ca_status, iFpp) +GO(gnutls_x509_crt_get_crl_dist_points, iFpupppp) +GO(gnutls_x509_crt_get_dn, iFppp) GO(gnutls_x509_crt_get_dn2, iFpp) -//GO(gnutls_x509_crt_get_dn3, +GO(gnutls_x509_crt_get_dn3, iFppu) GO(gnutls_x509_crt_get_dn_by_oid, iFppuupp) -//GO(gnutls_x509_crt_get_dn_oid, +GO(gnutls_x509_crt_get_dn_oid, iFpupp) GO(gnutls_x509_crt_get_expiration_time, lFp) -//GO(gnutls_x509_crt_get_extension_by_oid, -//GO(gnutls_x509_crt_get_extension_by_oid2, -//GO(gnutls_x509_crt_get_extension_data, -//GO(gnutls_x509_crt_get_extension_data2, -//GO(gnutls_x509_crt_get_extension_info, -//GO(gnutls_x509_crt_get_extension_oid, -//GO(gnutls_x509_crt_get_fingerprint, -//GO(gnutls_x509_crt_get_issuer, -//GO(gnutls_x509_crt_get_issuer_alt_name, -//GO(gnutls_x509_crt_get_issuer_alt_name2, -//GO(gnutls_x509_crt_get_issuer_alt_othername_oid, -//GO(gnutls_x509_crt_get_issuer_dn, +GO(gnutls_x509_crt_get_extension_by_oid, iFppuppp) +GO(gnutls_x509_crt_get_extension_by_oid2, iFppupp) +GO(gnutls_x509_crt_get_extension_data, iFpupp) +GO(gnutls_x509_crt_get_extension_data2, iFpup) +GO(gnutls_x509_crt_get_extension_info, iFpuppp) +GO(gnutls_x509_crt_get_extension_oid, iFpupp) +GO(gnutls_x509_crt_get_fingerprint, iFpupp) +GO(gnutls_x509_crt_get_issuer, iFpp) +GO(gnutls_x509_crt_get_issuer_alt_name, iFpuppp) +GO(gnutls_x509_crt_get_issuer_alt_name2, iFpupppp) +GO(gnutls_x509_crt_get_issuer_alt_othername_oid, iFpupp) +GO(gnutls_x509_crt_get_issuer_dn, iFppp) GO(gnutls_x509_crt_get_issuer_dn2, iFpp) -//GO(gnutls_x509_crt_get_issuer_dn3, -//GO(gnutls_x509_crt_get_issuer_dn_by_oid, -//GO(gnutls_x509_crt_get_issuer_dn_oid, -//GO(gnutls_x509_crt_get_issuer_unique_id, -//GO(gnutls_x509_crt_get_key_id, -//GO(gnutls_x509_crt_get_key_purpose_oid, -//GO(gnutls_x509_crt_get_key_usage, -//GO(gnutls_x509_crt_get_name_constraints, +GO(gnutls_x509_crt_get_issuer_dn3, iFppu) +GO(gnutls_x509_crt_get_issuer_dn_by_oid, iFppuupp) +GO(gnutls_x509_crt_get_issuer_dn_oid, iFpupp) +GO(gnutls_x509_crt_get_issuer_unique_id, iFppp) +GO(gnutls_x509_crt_get_key_id, iFpupp) +GO(gnutls_x509_crt_get_key_purpose_oid, iFpuppp) +GO(gnutls_x509_crt_get_key_usage, iFppp) +GO(gnutls_x509_crt_get_name_constraints, iFppup) GO(gnutls_x509_crt_get_pk_algorithm, iFpp) -//GO(gnutls_x509_crt_get_pk_dsa_raw, -//GO(gnutls_x509_crt_get_pk_ecc_raw, -//GO(gnutls_x509_crt_get_pk_oid, -//GO(gnutls_x509_crt_get_pk_rsa_raw, -//GO(gnutls_x509_crt_get_policy, -//GO(gnutls_x509_crt_get_preferred_hash_algorithm, -//GO(gnutls_x509_crt_get_private_key_usage_period, -//GO(gnutls_x509_crt_get_proxy, -//GO(gnutls_x509_crt_get_raw_dn, -//GO(gnutls_x509_crt_get_raw_issuer_dn, -//GO(gnutls_x509_crt_get_serial, -//GO(gnutls_x509_crt_get_signature, -//GO(gnutls_x509_crt_get_signature_algorithm, -//GO(gnutls_x509_crt_get_signature_oid, -//GO(gnutls_x509_crt_get_subject, -//GO(gnutls_x509_crt_get_subject_alt_name, -//GO(gnutls_x509_crt_get_subject_alt_name2, -//GO(gnutls_x509_crt_get_subject_alt_othername_oid, -//GO(gnutls_x509_crt_get_subject_key_id, -//GO(gnutls_x509_crt_get_subject_unique_id, -//GO(gnutls_x509_crt_get_tlsfeatures, +GO(gnutls_x509_crt_get_pk_dsa_raw, iFppppp) +GO(gnutls_x509_crt_get_pk_ecc_raw, iFpppp) +GO(gnutls_x509_crt_get_pk_oid, iFppp) +GO(gnutls_x509_crt_get_pk_rsa_raw, iFppp) +GO(gnutls_x509_crt_get_policy, iFpupp) +GO(gnutls_x509_crt_get_preferred_hash_algorithm, iFppp) +GO(gnutls_x509_crt_get_private_key_usage_period, iFpppp) +GO(gnutls_x509_crt_get_proxy, iFpppppp) +GO(gnutls_x509_crt_get_raw_dn, iFpp) +GO(gnutls_x509_crt_get_raw_issuer_dn, iFpp) +GO(gnutls_x509_crt_get_serial, iFppp) +GO(gnutls_x509_crt_get_signature, iFppp) +GO(gnutls_x509_crt_get_signature_algorithm, iFp) +GO(gnutls_x509_crt_get_signature_oid, iFppp) +GO(gnutls_x509_crt_get_subject, iFpp) +GO(gnutls_x509_crt_get_subject_alt_name, iFpuppp) +GO(gnutls_x509_crt_get_subject_alt_name2, iFpupppp) +GO(gnutls_x509_crt_get_subject_alt_othername_oid, iFpupp) +GO(gnutls_x509_crt_get_subject_key_id, iFpppp) +GO(gnutls_x509_crt_get_subject_unique_id, iFppp) +GO(gnutls_x509_crt_get_tlsfeatures, iFppup) GO(gnutls_x509_crt_get_version, iFp) -GO(gnutls_x509_crt_import, iFppp) -//GO(gnutls_x509_crt_import_pkcs11, -//GO(gnutls_x509_crt_import_url, +GO(gnutls_x509_crt_import, iFppu) +GO(gnutls_x509_crt_import_pkcs11, iFpp) +GO(gnutls_x509_crt_import_url, iFppu) GO(gnutls_x509_crt_init, iFp) -//GO(gnutls_x509_crt_list_import, -//GO(gnutls_x509_crt_list_import2, -//GO(gnutls_x509_crt_list_import_pkcs11, -//GO(gnutls_x509_crt_list_verify, -//GO(gnutls_x509_crt_print, -//GO(gnutls_x509_crt_privkey_sign, -//GO(gnutls_x509_crt_set_activation_time, -//GO(gnutls_x509_crt_set_authority_info_access, -//GO(gnutls_x509_crt_set_authority_key_id, -//GO(gnutls_x509_crt_set_basic_constraints, -//GO(gnutls_x509_crt_set_ca_status, -//GO(gnutls_x509_crt_set_crl_dist_points, -//GO(gnutls_x509_crt_set_crl_dist_points2, -//GO(gnutls_x509_crt_set_crq, -//GO(gnutls_x509_crt_set_crq_extension_by_oid, -//GO(gnutls_x509_crt_set_crq_extensions, -//GO(gnutls_x509_crt_set_dn, -//GO(gnutls_x509_crt_set_dn_by_oid, -//GO(gnutls_x509_crt_set_expiration_time, -//GO(gnutls_x509_crt_set_extension_by_oid, -//GO(gnutls_x509_crt_set_issuer_alt_name, -//GO(gnutls_x509_crt_set_issuer_alt_othername, -//GO(gnutls_x509_crt_set_issuer_dn, -//GO(gnutls_x509_crt_set_issuer_dn_by_oid, -//GO(gnutls_x509_crt_set_issuer_unique_id, -//GO(gnutls_x509_crt_set_key, -//GO(gnutls_x509_crt_set_key_purpose_oid, -//GO(gnutls_x509_crt_set_key_usage, -//GO(gnutls_x509_crt_set_name_constraints, -//GO(gnutls_x509_crt_set_pin_function, -//GO(gnutls_x509_crt_set_policy, -//GO(gnutls_x509_crt_set_private_key_usage_period, -//GO(gnutls_x509_crt_set_proxy, -//GO(gnutls_x509_crt_set_proxy_dn, -//GO(gnutls_x509_crt_set_pubkey, -//GO(gnutls_x509_crt_set_serial, -//GO(gnutls_x509_crt_set_subject_alternative_name, -//GO(gnutls_x509_crt_set_subject_alt_name, -//GO(gnutls_x509_crt_set_subject_alt_othername, -//GO(gnutls_x509_crt_set_subject_key_id, -//GO(gnutls_x509_crt_set_subject_unique_id, -//GO(gnutls_x509_crt_set_tlsfeatures, -//GO(gnutls_x509_crt_set_version, -//GO(gnutls_x509_crt_sign, -//GO(gnutls_x509_crt_sign2, -//GO(gnutls_x509_crt_verify, -//GO(gnutls_x509_crt_verify_data2, -//GO(gnutls_x509_dn_deinit, -//GO(gnutls_x509_dn_export, -//GO(gnutls_x509_dn_export2, -//GO(gnutls_x509_dn_get_rdn_ava, -//GO(gnutls_x509_dn_get_str, -//GO(gnutls_x509_dn_get_str2, -//GO(gnutls_x509_dn_import, -//GO(gnutls_x509_dn_init, -//GO(gnutls_x509_dn_oid_known, -//GO(gnutls_x509_dn_oid_name, -//GO(gnutls_x509_dn_set_str, -//GO(gnutls_x509_ext_deinit, +GO(gnutls_x509_crt_list_import, iFpppuu) +GO(gnutls_x509_crt_list_import2, iFpppuu) +GO(gnutls_x509_crt_list_import_pkcs11, iFpupu) +GO(gnutls_x509_crt_list_verify, iFpupupuup) +GO(gnutls_x509_crt_print, iFpup) +GO(gnutls_x509_crt_privkey_sign, iFpppuu) +GO(gnutls_x509_crt_set_activation_time, iFpl) +GO(gnutls_x509_crt_set_authority_info_access, iFpip) +GO(gnutls_x509_crt_set_authority_key_id, iFppL) +GO(gnutls_x509_crt_set_basic_constraints, iFpui) +GO(gnutls_x509_crt_set_ca_status, iFpu) +GO(gnutls_x509_crt_set_crl_dist_points, iFpupu) +GO(gnutls_x509_crt_set_crl_dist_points2, iFpupuu) +GO(gnutls_x509_crt_set_crq, iFpp) +GO(gnutls_x509_crt_set_crq_extension_by_oid, iFpppu) +GO(gnutls_x509_crt_set_crq_extensions, iFpp) +GO(gnutls_x509_crt_set_dn, iFppp) +GO(gnutls_x509_crt_set_dn_by_oid, iFppupu) +GO(gnutls_x509_crt_set_expiration_time, iFpl) +GO(gnutls_x509_crt_set_extension_by_oid, iFpppLu) +GO(gnutls_x509_crt_set_issuer_alt_name, iFpupuu) +GO(gnutls_x509_crt_set_issuer_alt_othername, iFpppuu) +GO(gnutls_x509_crt_set_issuer_dn, iFppp) +GO(gnutls_x509_crt_set_issuer_dn_by_oid, iFppupu) +GO(gnutls_x509_crt_set_issuer_unique_id, iFppL) +GO(gnutls_x509_crt_set_key, iFpp) +GO(gnutls_x509_crt_set_key_purpose_oid, iFppu) +GO(gnutls_x509_crt_set_key_usage, iFpu) +GO(gnutls_x509_crt_set_name_constraints, iFppu) +//GOM(gnutls_x509_crt_set_pin_function, vFEppp) +GO(gnutls_x509_crt_set_policy, iFppu) +GO(gnutls_x509_crt_set_private_key_usage_period, iFpll) +GO(gnutls_x509_crt_set_proxy, iFpippL) +GO(gnutls_x509_crt_set_proxy_dn, iFppupu) +GO(gnutls_x509_crt_set_pubkey, iFpp) +GO(gnutls_x509_crt_set_serial, iFppL) +GO(gnutls_x509_crt_set_subject_alternative_name, iFpup) +GO(gnutls_x509_crt_set_subject_alt_name, iFpupuu) +GO(gnutls_x509_crt_set_subject_alt_othername, iFpppuu) +GO(gnutls_x509_crt_set_subject_key_id, iFppL) +GO(gnutls_x509_crt_set_subject_unique_id, iFppL) +GO(gnutls_x509_crt_set_tlsfeatures, iFpp) +GO(gnutls_x509_crt_set_version, iFpu) +GO(gnutls_x509_crt_sign, iFppp) +GO(gnutls_x509_crt_sign2, iFpppuu) +GO(gnutls_x509_crt_verify, iFppuup) +GO(gnutls_x509_crt_verify_data2, iFpuupp) +GO(gnutls_x509_dn_deinit, vFp) +GO(gnutls_x509_dn_export, iFpupp) +GO(gnutls_x509_dn_export2, iFpup) +GO(gnutls_x509_dn_get_rdn_ava, iFpiip) +GO(gnutls_x509_dn_get_str, iFpp) +GO(gnutls_x509_dn_get_str2, iFppu) +GO(gnutls_x509_dn_import, iFpp) +GO(gnutls_x509_dn_init, iFp) +GO(gnutls_x509_dn_oid_known, iFp) +GO(gnutls_x509_dn_oid_name, pFpu) +GO(gnutls_x509_dn_set_str, iFppp) +GO(gnutls_x509_ext_deinit, vFp) //GO(gnutls_x509_ext_export_aia, //GO(gnutls_x509_ext_export_authority_key_id, //GO(gnutls_x509_ext_export_basic_constraints, @@ -1045,90 +1045,90 @@ GO(gnutls_x509_crt_init, iFp) //GO(gnutls_x509_ext_import_subject_alt_names, //GO(gnutls_x509_ext_import_subject_key_id, //GO(gnutls_x509_ext_import_tlsfeatures, -//GO(gnutls_x509_ext_print, +GO(gnutls_x509_ext_print, iFpuup) //GO(gnutls_x509_key_purpose_deinit, //GO(gnutls_x509_key_purpose_get, //GO(gnutls_x509_key_purpose_init, //GO(gnutls_x509_key_purpose_set, -//GO(gnutls_x509_name_constraints_add_excluded, -//GO(gnutls_x509_name_constraints_add_permitted, -//GO(gnutls_x509_name_constraints_check, -//GO(gnutls_x509_name_constraints_check_crt, -//GO(gnutls_x509_name_constraints_deinit, -//GO(gnutls_x509_name_constraints_get_excluded, -//GO(gnutls_x509_name_constraints_get_permitted, -//GO(gnutls_x509_name_constraints_init, +GO(gnutls_x509_name_constraints_add_excluded, iFpup) +GO(gnutls_x509_name_constraints_add_permitted, iFpup) +GO(gnutls_x509_name_constraints_check, uFpup) +GO(gnutls_x509_name_constraints_check_crt, uFpup) +GO(gnutls_x509_name_constraints_deinit, vFp) +GO(gnutls_x509_name_constraints_get_excluded, iFpupp) +GO(gnutls_x509_name_constraints_get_permitted, iFpupp) +GO(gnutls_x509_name_constraints_init, iFp) //GO(_gnutls_x509_name_constraints_merge, //GO(gnutls_x509_othername_to_virtual, //GO(gnutls_x509_policies_deinit, //GO(gnutls_x509_policies_get, //GO(gnutls_x509_policies_init, //GO(gnutls_x509_policies_set, -//GO(gnutls_x509_policy_release, -//GO(gnutls_x509_privkey_cpy, +GO(gnutls_x509_policy_release, vFp) +GO(gnutls_x509_privkey_cpy, iFpp) GO(gnutls_x509_privkey_deinit, vFp) -//GO(gnutls_x509_privkey_export, -//GO(gnutls_x509_privkey_export2, -//GO(gnutls_x509_privkey_export2_pkcs8, -//GO(gnutls_x509_privkey_export_dsa_raw, -//GO(gnutls_x509_privkey_export_ecc_raw, -//GO(gnutls_x509_privkey_export_pkcs8, -//GO(gnutls_x509_privkey_export_rsa_raw, +GO(gnutls_x509_privkey_export, iFpupp) +GO(gnutls_x509_privkey_export2, iFpup) +GO(gnutls_x509_privkey_export2_pkcs8, iFpupup) +GO(gnutls_x509_privkey_export_dsa_raw, iFpppppp) +GO(gnutls_x509_privkey_export_ecc_raw, iFppppp) +GO(gnutls_x509_privkey_export_pkcs8, iFpupupp) +GO(gnutls_x509_privkey_export_rsa_raw, iFppppppp) GO(gnutls_x509_privkey_export_rsa_raw2, iFppppppppp) -//GO(gnutls_x509_privkey_fix, -//GO(gnutls_x509_privkey_generate, -//GO(gnutls_x509_privkey_generate2, -//GO(gnutls_x509_privkey_get_key_id, -//GO(gnutls_x509_privkey_get_pk_algorithm, +GO(gnutls_x509_privkey_fix, iFp) +GO(gnutls_x509_privkey_generate, iFpuuu) +GO(gnutls_x509_privkey_generate2, iFpuuupu) +GO(gnutls_x509_privkey_get_key_id, iFpupp) +GO(gnutls_x509_privkey_get_pk_algorithm, iFp) GO(gnutls_x509_privkey_get_pk_algorithm2, iFpp) -//GO(gnutls_x509_privkey_get_seed, -//GO(gnutls_x509_privkey_import, -//GO(gnutls_x509_privkey_import2, -//GO(gnutls_x509_privkey_import_dsa_raw, -//GO(gnutls_x509_privkey_import_ecc_raw, -//GO(gnutls_x509_privkey_import_openssl, -//GO(gnutls_x509_privkey_import_pkcs8, -//GO(gnutls_x509_privkey_import_rsa_raw, -//GO(gnutls_x509_privkey_import_rsa_raw2, -//GO(gnutls_x509_privkey_init, -//GO(gnutls_x509_privkey_sec_param, -//GO(gnutls_x509_privkey_set_flags, -//GO(gnutls_x509_privkey_set_pin_function, -//GO(gnutls_x509_privkey_sign_data, -//GO(gnutls_x509_privkey_sign_hash, -//GO(gnutls_x509_privkey_verify_params, -//GO(gnutls_x509_privkey_verify_seed, -//GO(gnutls_x509_rdn_get, -//GO(gnutls_x509_rdn_get2, -//GO(gnutls_x509_rdn_get_by_oid, -//GO(gnutls_x509_rdn_get_oid, +GO(gnutls_x509_privkey_get_seed, iFpppp) +GO(gnutls_x509_privkey_import, iFppu) +GO(gnutls_x509_privkey_import2, iFppupu) +GO(gnutls_x509_privkey_import_dsa_raw, iFpppppp) +GO(gnutls_x509_privkey_import_ecc_raw, iFpuppp) +GO(gnutls_x509_privkey_import_openssl, iFppp) +GO(gnutls_x509_privkey_import_pkcs8, iFppupu) +GO(gnutls_x509_privkey_import_rsa_raw, iFppppppp) +GO(gnutls_x509_privkey_import_rsa_raw2, iFppppppppp) +GO(gnutls_x509_privkey_init, iFp) +GO(gnutls_x509_privkey_sec_param, uFp) +GO(gnutls_x509_privkey_set_flags, vFpu) +//GOM(gnutls_x509_privkey_set_pin_function, vFEppp) +GO(gnutls_x509_privkey_sign_data, iFpuuppp) +GO(gnutls_x509_privkey_sign_hash, iFppp) +GO(gnutls_x509_privkey_verify_params, iFp) +GO(gnutls_x509_privkey_verify_seed, iFpupL) +GO(gnutls_x509_rdn_get, iFppp) +GO(gnutls_x509_rdn_get2, iFppu) +GO(gnutls_x509_rdn_get_by_oid, iFppuupp) +GO(gnutls_x509_rdn_get_oid, iFpupp) GO(gnutls_x509_spki_deinit, vFp) -GO(gnutls_x509_spki_init, vFp) +GO(gnutls_x509_spki_init, iFp) GO(gnutls_x509_spki_set_rsa_oaep_params, iFpup) -GO(gnutls_x509_spki_set_rsa_pss_params, vFppu) +GO(gnutls_x509_spki_set_rsa_pss_params, vFpuu) //GO(gnutls_x509_tlsfeatures_add, -//GO(gnutls_x509_tlsfeatures_check_crt, -//GO(gnutls_x509_tlsfeatures_deinit, -//GO(gnutls_x509_tlsfeatures_get, -//GO(gnutls_x509_tlsfeatures_init, -//GO(gnutls_x509_trust_list_add_cas, -//GO(gnutls_x509_trust_list_add_crls, -//GO(gnutls_x509_trust_list_add_named_crt, -//GO(gnutls_x509_trust_list_add_system_trust, -//GO(gnutls_x509_trust_list_add_trust_dir, -//GO(gnutls_x509_trust_list_add_trust_file, -//GO(gnutls_x509_trust_list_add_trust_mem, -//GO(gnutls_x509_trust_list_deinit, -//GO(gnutls_x509_trust_list_get_issuer, -//GO(gnutls_x509_trust_list_get_issuer_by_dn, -//GO(gnutls_x509_trust_list_get_issuer_by_subject_key_id, -//GO(gnutls_x509_trust_list_init, -//GO(gnutls_x509_trust_list_iter_deinit, -//GO(gnutls_x509_trust_list_iter_get_ca, -//GO(gnutls_x509_trust_list_remove_cas, -//GO(gnutls_x509_trust_list_remove_trust_file, -//GO(gnutls_x509_trust_list_remove_trust_mem, -//GO(gnutls_x509_trust_list_verify_crt, -//GO(gnutls_x509_trust_list_verify_crt2, -//GO(gnutls_x509_trust_list_verify_named_crt, +GO(gnutls_x509_tlsfeatures_check_crt, uFpp) +GO(gnutls_x509_tlsfeatures_deinit, vFp) +GO(gnutls_x509_tlsfeatures_get, iFpup) +GO(gnutls_x509_tlsfeatures_init, iFp) +GO(gnutls_x509_trust_list_add_cas, iFppuu) +GO(gnutls_x509_trust_list_add_crls, iFppuuu) +GO(gnutls_x509_trust_list_add_named_crt, iFpppLu) +GO(gnutls_x509_trust_list_add_system_trust, iFpuu) +GO(gnutls_x509_trust_list_add_trust_dir, iFpppuuu) +GO(gnutls_x509_trust_list_add_trust_file, iFpppuuu) +GO(gnutls_x509_trust_list_add_trust_mem, iFpppuuu) +GO(gnutls_x509_trust_list_deinit, vFpu) +GO(gnutls_x509_trust_list_get_issuer, iFpppu) +GO(gnutls_x509_trust_list_get_issuer_by_dn, iFpppu) +GO(gnutls_x509_trust_list_get_issuer_by_subject_key_id, iFppppu) +GO(gnutls_x509_trust_list_init, iFpu) +GO(gnutls_x509_trust_list_iter_deinit, vFp) +GO(gnutls_x509_trust_list_iter_get_ca, iFppp) +GO(gnutls_x509_trust_list_remove_cas, iFppu) +GO(gnutls_x509_trust_list_remove_trust_file, iFppu) +GO(gnutls_x509_trust_list_remove_trust_mem, iFppu) +//GOM(gnutls_x509_trust_list_verify_crt, iFEppuupp) +//GOM(gnutls_x509_trust_list_verify_crt2, iFEppupuupp) +//GOM(gnutls_x509_trust_list_verify_named_crt, iFEpppLupp) //GO(_rsa_generate_fips186_4_keypair, diff --git a/src/wrapped/wrappedgobject2.c b/src/wrapped/wrappedgobject2.c index a29588fd74cfede1c0338b2cad83f668a818b517..875c3d8833227a16052b7e012dde0e182202f87b 100644 --- a/src/wrapped/wrappedgobject2.c +++ b/src/wrapped/wrappedgobject2.c @@ -19,11 +19,9 @@ #include "gtkclass.h" #include "myalign.h" -#ifdef ANDROID - const char* gobject2Name = "libgobject-2.0.so"; -#else - const char* gobject2Name = "libgobject-2.0.so.0"; -#endif +const char* gobject2Name = "libgobject-2.0.so.0"; +#define ALTNAME "libgobject-2.0.so" + #define LIBNAME gobject2 typedef size_t(*LFv_t)(void); @@ -511,15 +509,15 @@ static my_GParamSpecTypeInfo_t* findFreeGParamSpecTypeInfo(my_GParamSpecTypeInfo #undef GO #define GO(A) if(ref_GParamSpecTypeInfo_##A == 0) { \ ref_GParamSpecTypeInfo_##A = fcts; \ - my_GParamSpecTypeInfo_##A.instance_init = (fcts->instance_init)?((GetNativeFnc((uintptr_t)fcts->instance_init))?GetNativeFnc((uintptr_t)fcts->instance_init):my_funcs_instance_init_##A):NULL; \ + my_GParamSpecTypeInfo_##A.instance_init = (fcts->instance_init)?((GetNativeFnc((uintptr_t)fcts->instance_init))?(void (*)(void *))GetNativeFnc((uintptr_t)fcts->instance_init):my_funcs_instance_init_##A):NULL; \ fct_funcs_instance_init_##A = (uintptr_t)fcts->instance_init; \ - my_GParamSpecTypeInfo_##A.finalize = (fcts->finalize)?((GetNativeFnc((uintptr_t)fcts->finalize))?GetNativeFnc((uintptr_t)fcts->finalize):my_funcs_finalize_##A):NULL; \ + my_GParamSpecTypeInfo_##A.finalize = (fcts->finalize)?((GetNativeFnc((uintptr_t)fcts->finalize))?(void (*)(void *))GetNativeFnc((uintptr_t)fcts->finalize):my_funcs_finalize_##A):NULL; \ fct_funcs_finalize_##A = (uintptr_t)fcts->finalize; \ - my_GParamSpecTypeInfo_##A.value_set_default = (fcts->value_set_default)?((GetNativeFnc((uintptr_t)fcts->value_set_default))?GetNativeFnc((uintptr_t)fcts->value_set_default):my_funcs_value_set_default_##A):NULL; \ + my_GParamSpecTypeInfo_##A.value_set_default = (fcts->value_set_default)?((GetNativeFnc((uintptr_t)fcts->value_set_default))?(void (*)(void *, void *))GetNativeFnc((uintptr_t)fcts->value_set_default):my_funcs_value_set_default_##A):NULL; \ fct_funcs_value_set_default_##A = (uintptr_t)fcts->value_set_default; \ - my_GParamSpecTypeInfo_##A.value_validate = (fcts->value_validate)?((GetNativeFnc((uintptr_t)fcts->value_validate))?GetNativeFnc((uintptr_t)fcts->value_validate):my_funcs_value_validate_##A):NULL; \ + my_GParamSpecTypeInfo_##A.value_validate = (fcts->value_validate)?((GetNativeFnc((uintptr_t)fcts->value_validate))?(int (*)(void *, void *))GetNativeFnc((uintptr_t)fcts->value_validate):my_funcs_value_validate_##A):NULL; \ fct_funcs_value_validate_##A = (uintptr_t)fcts->value_validate; \ - my_GParamSpecTypeInfo_##A.values_cmp = (fcts->values_cmp)?((GetNativeFnc((uintptr_t)fcts->values_cmp))?GetNativeFnc((uintptr_t)fcts->values_cmp):my_funcs_values_cmp_##A):NULL; \ + my_GParamSpecTypeInfo_##A.values_cmp = (fcts->values_cmp)?((GetNativeFnc((uintptr_t)fcts->values_cmp))?(int (*)(void *, void *, void *))GetNativeFnc((uintptr_t)fcts->values_cmp):my_funcs_values_cmp_##A):NULL; \ fct_funcs_values_cmp_##A = (uintptr_t)fcts->values_cmp; \ return &my_GParamSpecTypeInfo_##A; \ } @@ -640,7 +638,7 @@ EXPORT int my_g_boxed_type_register_static(x64emu_t* emu, void* name, void* boxe return my->g_boxed_type_register_static(name, bc, bf); } -EXPORT uint32_t my_g_signal_new(x64emu_t* emu, void* name, size_t itype, int flags, uint32_t offset, void* acc, void* accu_data, void* marsh, size_t rtype, uint32_t n, void** b) +EXPORT uint32_t my_g_signal_new(x64emu_t* emu, void* name, size_t itype, uint32_t flags, uint32_t offset, void* acc, void* accu_data, void* marsh, size_t rtype, uint32_t n, void** b) { printf_log(LOG_DEBUG, "g_signal_new for \"%s\", with offset=%d and %d args\n", (const char*)name, offset, n); @@ -661,14 +659,14 @@ EXPORT uint32_t my_g_signal_new(x64emu_t* emu, void* name, size_t itype, int fla return my->g_signal_new(name, itype, flags, offset, cb_acc, accu_data, cb_marsh, rtype, n, b[0], b[1], b[2]); } -EXPORT uint32_t my_g_signal_newv(x64emu_t* emu, void* name, size_t itype, int flags, void* closure, void* acc, void* accu_data, void* marsh, size_t rtype, uint32_t n, void* types) +EXPORT uint32_t my_g_signal_newv(x64emu_t* emu, void* name, size_t itype, uint32_t flags, void* closure, void* acc, void* accu_data, void* marsh, size_t rtype, uint32_t n, void* types) { printf_log(LOG_DEBUG, "g_signal_newv for \"%s\", with %d args\n", (const char*)name, n); return my->g_signal_newv(name, itype, flags, closure, findAccumulatorFct(acc), accu_data, findMarshalFct(marsh), rtype, n, types); } -EXPORT uint32_t my_g_signal_new_valist(x64emu_t* emu, void* name, size_t itype, int flags, void* closure, void* acc, void* accu_data, void* marsh, size_t rtype, uint32_t n, x64_va_list_t b) +EXPORT uint32_t my_g_signal_new_valist(x64emu_t* emu, void* name, size_t itype, uint32_t flags, void* closure, void* acc, void* accu_data, void* marsh, size_t rtype, uint32_t n, x64_va_list_t b) { printf_log(LOG_DEBUG, "g_signal_new_valist for \"%s\", with %d args\n", (const char*)name, n); #ifdef CONVERT_VALIST @@ -679,7 +677,7 @@ EXPORT uint32_t my_g_signal_new_valist(x64emu_t* emu, void* name, size_t itype, return my->g_signal_new_valist(name, itype, flags, closure, findAccumulatorFct(acc), accu_data, findMarshalFct(marsh), rtype, n, VARARGS); } -EXPORT uint32_t my_g_signal_handlers_block_matched(x64emu_t* emu, void* instance, int mask, uint32_t signal, void* detail, void* closure, void* fnc, void* data) +EXPORT uint32_t my_g_signal_handlers_block_matched(x64emu_t* emu, void* instance, uint32_t mask, uint32_t signal, uint32_t detail, void* closure, void* fnc, void* data) { // NOTE that I have no idea of the fnc signature!... if (fnc) printf_log(LOG_DEBUG, "Warning, gobject g_signal_handlers_block_matched called with non null function \n"); @@ -687,7 +685,7 @@ EXPORT uint32_t my_g_signal_handlers_block_matched(x64emu_t* emu, void* instance return my->g_signal_handlers_block_matched(instance, mask, signal, detail, closure, fnc, data); } -EXPORT uint32_t my_g_signal_handlers_unblock_matched(x64emu_t* emu, void* instance, int mask, uint32_t signal, void* detail, void* closure, void* fnc, void* data) +EXPORT uint32_t my_g_signal_handlers_unblock_matched(x64emu_t* emu, void* instance, uint32_t mask, uint32_t signal, uint32_t detail, void* closure, void* fnc, void* data) { // NOTE that I have no idea of the fnc signature!... if (fnc) printf_log(LOG_DEBUG, "Warning, gobject g_signal_handlers_unblock_matched called with non null function \n"); @@ -695,7 +693,7 @@ EXPORT uint32_t my_g_signal_handlers_unblock_matched(x64emu_t* emu, void* instan return my->g_signal_handlers_unblock_matched(instance, mask, signal, detail, closure, fnc, data); } -EXPORT uint32_t my_g_signal_handlers_disconnect_matched(x64emu_t* emu, void* instance, int mask, uint32_t signal, void* detail, void* closure, void* fnc, void* data) +EXPORT uint32_t my_g_signal_handlers_disconnect_matched(x64emu_t* emu, void* instance, uint32_t mask, uint32_t signal, uint32_t detail, void* closure, void* fnc, void* data) { // NOTE that I have no idea of the fnc signature!... if (fnc) printf_log(LOG_DEBUG, "Warning, gobject g_signal_handlers_disconnect_matched called with non null function \n"); @@ -703,7 +701,7 @@ EXPORT uint32_t my_g_signal_handlers_disconnect_matched(x64emu_t* emu, void* ins return my->g_signal_handlers_disconnect_matched(instance, mask, signal, detail, closure, fnc, data); } -EXPORT unsigned long my_g_signal_handler_find(x64emu_t* emu, void* instance, int mask, uint32_t signal, void* detail, void* closure, void* fnc, void* data) +EXPORT unsigned long my_g_signal_handler_find(x64emu_t* emu, void* instance, uint32_t mask, uint32_t signal, uint32_t detail, void* closure, void* fnc, void* data) { // NOTE that I have no idea of the fnc signature!... if (fnc) printf_log(LOG_DEBUG, "Warning, gobject g_signal_handler_find called with non null function \n"); @@ -756,7 +754,7 @@ static int my_signal_emission_hook(void* ihint, uint32_t n, void* values, my_sig printf_log(LOG_DEBUG, "gobject2 Signal Emission Hook called, sig=%p\n", sig); return (int)RunFunctionFmt(sig->c_handler, "pupp", ihint, n, values, sig->data); } -EXPORT unsigned long my_g_signal_add_emission_hook(x64emu_t* emu, uint32_t signal, void* detail, void* f, void* data, void* notify) +EXPORT unsigned long my_g_signal_add_emission_hook(x64emu_t* emu, uint32_t signal, uint32_t detail, void* f, void* data, void* notify) { // there can be many signals connected, so something "light" is needed here @@ -801,7 +799,7 @@ EXPORT void my_g_param_spec_set_qdata_full(x64emu_t* emu, void* pspec, uint32_t my->g_param_spec_set_qdata_full(pspec, quark, data, findFreeFct(notify)); } -EXPORT int my_g_param_type_register_static(x64emu_t* emu, void* name, void* pspec_info) +EXPORT size_t my_g_param_type_register_static(x64emu_t* emu, void* name, void* pspec_info) { return my->g_param_type_register_static(name, findFreeGParamSpecTypeInfo(pspec_info)); @@ -833,7 +831,7 @@ EXPORT void* my_g_type_class_peek_parent(x64emu_t* emu, void* object) return wrapCopyGTKClass(klass, type); } -EXPORT void my_g_signal_emit_valist(x64emu_t* emu, void* inst, uint32_t id, void* quark, x64_va_list_t b) +EXPORT void my_g_signal_emit_valist(x64emu_t* emu, void* inst, uint32_t id, uint32_t quark, x64_va_list_t b) { #ifdef CONVERT_VALIST CONVERT_VALIST(b); @@ -843,7 +841,7 @@ EXPORT void my_g_signal_emit_valist(x64emu_t* emu, void* inst, uint32_t id, void my->g_signal_emit_valist(inst, id, quark, VARARGS); } -EXPORT void my_g_signal_emit(x64emu_t* emu, void* inst, uint32_t id, void* quark, uintptr_t* b) +EXPORT void my_g_signal_emit(x64emu_t* emu, void* inst, uint32_t id, uint32_t quark, uintptr_t* b) { CREATE_VALIST_FROM_VAARG(b, emu->scratch, 3); my->g_signal_emit_valist(inst, id, quark, VARARGS); @@ -882,7 +880,7 @@ EXPORT void my_g_object_set(x64emu_t* emu, void* a1, void* a2, uintptr_t* b) my->g_object_set_valist(a1, a2, VARARGS); } -EXPORT void my_g_object_set_qdata_full(x64emu_t* emu, void* o, void* q, void* data, void* d) +EXPORT void my_g_object_set_qdata_full(x64emu_t* emu, void* o, uint32_t q, void* data, void* d) { my->g_object_set_qdata_full(o, q, data, findDestroyFct(d)); } @@ -897,7 +895,7 @@ EXPORT void my_g_object_weak_ref(x64emu_t* emu, void* object, void* notify, void my->g_object_weak_ref(object, findWeakNotifyFct(notify), data); } -EXPORT void my_g_signal_override_class_handler(x64emu_t* emu, char* name, void* gtype, void* callback) +EXPORT void my_g_signal_override_class_handler(x64emu_t* emu, char* name, size_t gtype, void* callback) { my->g_signal_override_class_handler(name, gtype, findGCallbackFct(callback)); } @@ -943,10 +941,6 @@ EXPORT void* my_g_type_value_table_peek(x64emu_t* emu, size_t type) SetGClassPeek(my->g_type_class_peek); \ SetGTypeParent(my->g_type_parent); -#ifdef ANDROID -#define NEEDED_LIBS "libglib-2.0.so" -#else #define NEEDED_LIBS "libglib-2.0.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedgobject2_private.h b/src/wrapped/wrappedgobject2_private.h index fcf4c5cada50479a07683a7bfcea5f9b3f216ab2..bced8c9303c9dc5b16648bcdc909759e48e6f983 100644 --- a/src/wrapped/wrappedgobject2_private.h +++ b/src/wrapped/wrappedgobject2_private.h @@ -1,5 +1,5 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif //GType is gulong !!!!! @@ -9,9 +9,9 @@ GO(g_array_get_type, LFv) GO(g_binding_flags_get_type, LFv) GO(g_binding_get_flags, uFp) -//GO(g_binding_get_source, -//GO(g_binding_get_source_property, -//GO(g_binding_get_target, +GO(g_binding_get_source, pFp) +GO(g_binding_get_source_property, pFp) +GO(g_binding_get_target, pFp) GO(g_binding_get_target_property, pFp) GO(g_binding_get_type, LFv) GO(g_binding_unbind, vFp) @@ -67,35 +67,35 @@ DATA(g_cclosure_marshal_VOID__VARIANTv, sizeof(void*)) DATA(g_cclosure_marshal_VOID__VOID, sizeof(void*)) DATA(g_cclosure_marshal_VOID__VOIDv, sizeof(void*)) GOM(g_cclosure_new, pFEppp) -//GO(g_cclosure_new_object, -//GO(g_cclosure_new_object_swap, +//GOM(g_cclosure_new_object, pFpp) +//GOM(g_cclosure_new_object_swap, pFpp) GOM(g_cclosure_new_swap, pFEppp) -//GO(g_checksum_get_type, +GO(g_checksum_get_type, LFv) GO(g_clear_object, vFp) GOM(g_closure_add_finalize_notifier, vFEppp) -//GO(g_closure_add_invalidate_notifier, -//GO(g_closure_add_marshal_guards, -//GO(g_closure_get_type, -//GO(g_closure_invalidate, -//GO(g_closure_invoke, -//GO(g_closure_new_object, +//GOM(g_closure_add_invalidate_notifier, vFppp) +//GOM(g_closure_add_marshal_guards, vFppppp) +GO(g_closure_get_type, LFv) +//GOM(g_closure_invalidate, vFp) +//GOM(g_closure_invoke, vFppupp) +//GOM(g_closure_new_object, pFup) GO(g_closure_new_simple, pFup) -//GO(g_closure_ref, +//GOM(g_closure_ref, pFp) GOM(g_closure_remove_finalize_notifier, vFEppp) -//GO(g_closure_remove_invalidate_notifier, +//GOM(g_closure_remove_invalidate_notifier, vFppp) GOM(g_closure_set_marshal, vFEpp) -//GO(g_closure_set_meta_marshal, -//GO(g_closure_sink, -GO(g_closure_unref, pFp) +//GOM(g_closure_set_meta_marshal, vFppp) +//GOM(g_closure_sink, vFp) +GO(g_closure_unref, vFp) GO(g_date_get_type, LFv) GO(g_date_time_get_type, LFv) -GO(g_enum_complete_type_info, vFLpp) +GO(g_enum_complete_type_info, vFLpp) // should the GTypeInfo (1st "p") needs wrapping? GO(g_enum_get_value, pFpi) GO(g_enum_get_value_by_name, pFpp) GO(g_enum_get_value_by_nick, pFpp) GO(g_enum_register_static, LFpp) GO(g_error_get_type, LFv) -GO(g_flags_complete_type_info, vFipp) +GO(g_flags_complete_type_info, vFLpp) // should the GTypeInfo (1st "p") needs wrapping? GO(g_flags_get_first_value, pFpu) GO(g_flags_get_value_by_name, pFpp) GO(g_flags_get_value_by_nick, pFpp) @@ -112,27 +112,27 @@ GO(g_main_loop_get_type, LFv) GO(g_mapped_file_get_type, LFv) GO(g_markup_parse_context_get_type, LFv) GO(g_match_info_get_type, LFv) -//GOM(g_object_add_toggle_ref, vFEpBp) +//GOM(g_object_add_toggle_ref, vFEppp) GO(g_object_add_weak_pointer, vFpp) GO(g_object_bind_property, pFppppu) -//GO(g_object_bind_property_full, -//GO(g_object_bind_property_with_closures, -GO(g_object_class_find_property, pFpp) +//GOM(g_object_bind_property_full, pFppppupppp) +//GOM(g_object_bind_property_with_closures, pFppppupp) +GO(g_object_class_find_property, pFpp) // need wrapping? GOM(g_object_class_install_properties, vFEpup) -GO(g_object_class_install_property, vFpup) -GO(g_object_class_list_properties, pFpp) -GO(g_object_class_override_property, vFpup) +GO(g_object_class_install_property, vFpup) // need wrapping? +GO(g_object_class_list_properties, pFpp) // need wrapping? +GO(g_object_class_override_property, vFpup) // need wrapping? GO(g_object_compat_control, LFLp) GOM(g_object_connect, pFEppV) -GO(g_object_disconnect, vFpppppppppppppppp) // caarg -//GOM(g_object_dup_data, pFEppBp) -//GOM(g_object_dup_qdata, pFEppBp) +GO(g_object_disconnect, vFpppppppppppppppp) // vaarg +//GOM(g_object_dup_data, pFEpppp) +//GOM(g_object_dup_qdata, pFEpupp) GO(g_object_force_floating, vFp) GO(g_object_freeze_notify, vFp) GOM(g_object_get, vFEppV) GO(g_object_get_data, pFpp) GO(g_object_get_property, vFppp) -GO(g_object_get_qdata, pFpp) +GO(g_object_get_qdata, pFpu) GO(g_object_get_type, LFv) GOM(g_object_get_valist, vFEppA) GO(g_object_interface_find_property, pFpp) @@ -146,25 +146,25 @@ GO(g_object_notify, vFpp) GO(g_object_notify_by_pspec, vFpp) GO(g_object_ref, pFp) GO(g_object_ref_sink, pFp) -//GOM(g_object_remove_toggle_ref, vFEpBp) +//GOM(g_object_remove_toggle_ref, vFEppp) GO(g_object_remove_weak_pointer, vFpp) -//GOM(g_object_replace_data, iFEppppBB) -//GOM(g_object_replace_qdata, iFEppppBB) +//GOM(g_object_replace_data, iFEpppppp) +//GOM(g_object_replace_qdata, iFEpupppp) GO(g_object_run_dispose, vFp) GOM(g_object_set, vFEppV) GO(g_object_set_data, vFppp) GOM(g_object_set_data_full, vFEpppp) GO(g_object_set_property, vFppp) GO(g_object_set_qdata, vFpup) -GOM(g_object_set_qdata_full, vFEpppp) +GOM(g_object_set_qdata_full, vFEpupp) GOM(g_object_set_valist, vFEppA) GO(g_object_steal_data, pFpp) GO(g_object_steal_qdata, pFpu) GO(g_object_thaw_notify, vFp) GO(g_object_unref, vFp) -GO(g_object_watch_closure, vFpp) +GO(g_object_watch_closure, vFpp) // needs wrapping? GOM(g_object_weak_ref, vFEppp) -GO(g_object_weak_unref, vFpp) +GO(g_object_weak_unref, vFppp) // needs wrapping? GO(g_param_spec_boolean, pFpppii) GO(g_param_spec_boxed, pFpppLi) GO(g_param_spec_char, pFpppccci) @@ -185,7 +185,7 @@ GO(g_param_spec_internal, pFLpppi) GO(g_param_spec_long, pFpppllli) GO(g_param_spec_object, pFpppLi) GO(g_param_spec_override, pFpp) -GO(g_param_spec_param, pFpppii) +GO(g_param_spec_param, pFpppLi) GO(g_param_spec_pointer, pFpppi) GO(g_param_spec_pool_insert, vFppL) GO(g_param_spec_pool_list, pFpLp) @@ -209,77 +209,77 @@ GO(g_param_spec_unichar, pFpppui) GO(g_param_spec_unref, vFp) GO(g_param_spec_value_array, pFppppi) GO(g_param_spec_variant, pFpppppi) -GOM(g_param_type_register_static, iFEpp) +GOM(g_param_type_register_static, LFEpp) GO(g_param_value_convert, iFpppi) GO(g_param_value_defaults, iFpp) GO(g_param_values_cmp, iFppp) GO(g_param_value_set_default, vFpp) GO(g_param_value_validate, iFpp) GO(g_pointer_type_register_static, LFp) -//GO(g_pollfd_get_type, -//GO(g_ptr_array_get_type, -//GO(g_regex_get_type, +GO(g_pollfd_get_type, LFv) +GO(g_ptr_array_get_type, LFv) +GO(g_regex_get_type, LFv) GO(g_signal_accumulator_first_wins, iFpppp) GO(g_signal_accumulator_true_handled, iFpppp) -GOM(g_signal_add_emission_hook, LFEupppp) +GOM(g_signal_add_emission_hook, LFEuuppp) GO(g_signal_chain_from_overridden, vFpp) -//GO(g_signal_chain_from_overridden_handler, vFpppppppppp) //vaarg -GO(g_signal_connect_closure, LFpppi) -GO(g_signal_connect_closure_by_id, LFpuppi) +//GOM(g_signal_chain_from_overridden_handler, vFpV) +GO(g_signal_connect_closure, LFpppi) // needs wrapping? +GO(g_signal_connect_closure_by_id, LFpuupi) // needs wrapping? GOM(g_signal_connect_data, LFEpppppu) -GOM(g_signal_connect_object, LFEppppi) +GOM(g_signal_connect_object, LFEppppu) GOM(g_signal_emit, vFEpuuV) GO(g_signal_emit_by_name, vFppppppppppp) //vaarg GO(g_signal_emitv, vFpuup) -GOM(g_signal_emit_valist, vFEpupA) // va_list here +GOM(g_signal_emit_valist, vFEpuuA) GO(g_signal_get_invocation_hint, pFp) GO(g_signal_handler_block, vFpL) GO(g_signal_handler_disconnect, vFpL) -GOM(g_signal_handler_find, LFEpiupppp) +GOM(g_signal_handler_find, LFEpuuuppp) GO(g_signal_handler_is_connected, iFpL) -GOM(g_signal_handlers_block_matched, uFEpiupppp) -//GO(g_signal_handlers_destroy, -GOM(g_signal_handlers_disconnect_matched, uFEpiupppp) -GOM(g_signal_handlers_unblock_matched, uFEpiupppp) +GOM(g_signal_handlers_block_matched, uFEpuuuppp) +GO(g_signal_handlers_destroy, vFp) +GOM(g_signal_handlers_disconnect_matched, uFEpuuuppp) +GOM(g_signal_handlers_unblock_matched, uFEpuuuppp) GO(g_signal_handler_unblock, vFpL) GO(g_signal_has_handler_pending, iFpuui) GO(g_signal_list_ids, pFLp) GO(g_signal_lookup, uFpL) GO(g_signal_name, pFu) -GOM(g_signal_new, uFEpLiupppLuV) -//GOM(g_signal_new_class_handler, uFEpLupppppnV) -GOM(g_signal_newv, uFEpLippppLup) -GOM(g_signal_new_valist, uFEpLippppLuA) +GOM(g_signal_new, uFEpLuupppLuV) +//GOM(g_signal_new_class_handler, uFEpLuppppLuV) +GOM(g_signal_newv, uFEpLuppppLup) +GOM(g_signal_new_valist, uFEpLuppppLuA) GO(g_signal_override_class_closure, vFuLp) -GOM(g_signal_override_class_handler, vFEppp) +GOM(g_signal_override_class_handler, vFEpLp) GO(g_signal_parse_name, iFpLppi) GO(g_signal_query, vFup) GO(g_signal_remove_emission_hook, vFuL) -//GOM(g_signal_set_va_marshaller, vFEuiB) +//GOM(g_signal_set_va_marshaller, vFEuLp) GO(g_signal_stop_emission, vFpuu) GO(g_signal_stop_emission_by_name, vFpp) GO(g_signal_type_cclosure_new, pFLu) //should wrap? GO(g_source_get_type, LFv) GO(g_source_set_closure, vFpp) -//GO(g_source_set_dummy_callback, +//GOM(g_source_set_dummy_callback, vFp) GO(g_strdup_value_contents, pFp) GO(g_strv_get_type, LFv) GO(g_thread_get_type, LFv) GO(g_time_zone_get_type, LFv) -//GOM(g_type_add_class_cache_func, vFEpB) +//GOM(g_type_add_class_cache_func, vFEpp) GO(g_type_add_class_private, vFLL) GO(g_type_add_instance_private, iFLL) -//GOM(g_type_add_interface_check, vFEpB) -//GOM(g_type_add_interface_dynamic, vFEiip) +//GOM(g_type_add_interface_check, vFEpp) +//GOM(g_type_add_interface_dynamic, vFELLp) GOM(g_type_add_interface_static, vFELLp) GO(g_type_check_class_cast, pFpL) GO(g_type_check_class_is_a, iFpL) GO(g_type_check_instance, iFp) GO(g_type_check_instance_cast, pFpL) -GO(g_type_check_instance_is_a, LFpL) +GO(g_type_check_instance_is_a, iFpL) GO(g_type_check_instance_is_fundamentally_a, iFpL) GO(g_type_check_is_value_type, iFL) -GO(g_type_check_value, LFp) +GO(g_type_check_value, iFp) GO(g_type_check_value_holds, iFpL) GO(g_type_children, pFLp) GO(g_type_class_add_private, vFpL) @@ -289,7 +289,7 @@ GO(g_type_class_get_private, pFpL) GO(g_type_class_peek, pFL) GOM(g_type_class_peek_parent, pFEp) GO(g_type_class_peek_static, pFL) -GO(g_type_class_ref, pFp) +GO(g_type_class_ref, pFL) GO(g_type_class_unref, vFp) GO(g_type_class_unref_uncached, vFp) GO(g_type_create_instance, pFL) @@ -302,24 +302,24 @@ GO(g_type_free_instance, vFp) GO(g_type_from_name, LFp) GO(g_type_fundamental, LFL) GO(g_type_fundamental_next, LFv) -//GOM(g_type_get_plugin, pFEi) // GTypePugin is a stuct with callback +//GOM(g_type_get_plugin, pFEL) // GTypePugin is a stuct with callback GO(g_type_get_qdata, pFLu) GO(g_type_get_type_registration_serial, uFv) GO(g_type_init, vFv) GO(g_type_init_with_debug_flags, vFu) GO(g_type_instance_get_private, pFpL) GO(g_type_interface_add_prerequisite, vFLL) -//GOM(g_type_interface_get_plugin, pFEii) // return GTypePlugin* +//GOM(g_type_interface_get_plugin, pFELL) // return GTypePlugin* GO(g_type_interface_peek, pFpL) GO(g_type_interface_peek_parent, pFp) GO(g_type_interface_prerequisites, pFLp) GO(g_type_interfaces, pFLp) GO(g_type_is_a, iFLL) -//GO(g_type_module_add_interface, -//GO(g_type_module_get_type, +//GOM(g_type_module_add_interface, vFpLLp) +GO(g_type_module_get_type, LFv) GO(g_type_module_register_enum, LFppp) GO(g_type_module_register_flags, LFppp) -//GO(g_type_module_register_type, +//GOM(g_type_module_register_type, LFpLppu) GO(g_type_module_set_name, vFpp) GO(g_type_module_unuse, vFp) GO(g_type_module_use, iFp) @@ -328,19 +328,19 @@ GO(g_type_name_from_class, pFp) GO(g_type_name_from_instance, pFp) GO(g_type_next_base, LFLL) GO(g_type_parent, LFL) -//GO(g_type_plugin_complete_interface_info, -//GO(g_type_plugin_complete_type_info, -//GO(g_type_plugin_get_type, +//GOM(g_type_plugin_complete_interface_info, vFpLLp) +//GOM(g_type_plugin_complete_type_info, vFpLpp) +GO(g_type_plugin_get_type, LFv) GO(g_type_plugin_unuse, vFp) -//GO(g_type_plugin_use, +GO(g_type_plugin_use, vFp) GO(g_type_qname, uFL) GO(g_type_query, vFLp) //GOM(type_register_dynamic, iFEpippi) -GOM(g_type_register_fundamental, LFELpppi) -GOM(g_type_register_static, LFELppi) +GOM(g_type_register_fundamental, LFELpppu) +GOM(g_type_register_static, LFELppu) GOM(g_type_register_static_simple, LFELpupupu) -//GOM(g_type_remove_class_cache_func, vFEpB) -//GOM(g_type_remove_interface_check, vFEpB) +//GOM(g_type_remove_class_cache_func, vFEpp) +//GOM(g_type_remove_interface_check, vFEpp) GO(g_type_set_qdata, vFLup) GO(g_type_test_flags, iFLu) GOM(g_type_value_table_peek, pFEL) //need to bridge GTypeValueTable @@ -364,7 +364,7 @@ GO(g_value_dup_variant, pFp) GO(g_value_fits_pointer, iFp) GO(g_value_get_boolean, iFp) GO(g_value_get_boxed, pFp) -GO(g_value_get_char, CFp) +GO(g_value_get_char, cFp) GO(g_value_get_double, dFp) GO(g_value_get_enum, iFp) GO(g_value_get_flags, uFp) @@ -387,12 +387,12 @@ GO(g_value_get_variant, pFp) GO(g_value_init, pFpL) GO(g_value_init_from_instance, vFpp) GO(g_value_peek_pointer, pFp) -GOM(g_value_register_transform_func, vFEiip) +GOM(g_value_register_transform_func, vFELLp) GO(g_value_reset, pFp) GO(g_value_set_boolean, vFpi) GO(g_value_set_boxed, vFpp) GO(g_value_set_boxed_take_ownership, vFpp) -GO(g_value_set_char, vFpC) +GO(g_value_set_char, vFpc) GO(g_value_set_double, vFpd) GO(g_value_set_enum, vFpi) GO(g_value_set_flags, vFpu) @@ -423,13 +423,13 @@ GO(g_value_take_param, vFpp) GO(g_value_take_string, vFpp) GO(g_value_take_variant, vFpp) GO(g_value_transform, iFpp) -GO(g_value_type_compatible, iFii) +GO(g_value_type_compatible, iFLL) GO(g_value_type_transformable, iFLL) GO(g_value_unset, vFp) -//GO(g_variant_builder_get_type, -//GO(g_variant_dict_get_type, -//GO(g_variant_get_gtype, -//GO(g_variant_type_get_gtype, +GO(g_variant_builder_get_type, LFv) +GO(g_variant_dict_get_type, LFv) +GO(g_variant_get_gtype, LFv) +GO(g_variant_type_get_gtype, LFv) GO(g_weak_ref_clear, vFp) GO(g_weak_ref_get, pFp) GO(g_weak_ref_init, vFpp) @@ -437,7 +437,7 @@ GO(g_weak_ref_set, vFpp) //GO(_init, // to have some wrapper created for gtkclass.c -GO(dummy_set_property, vFpupp) +GO(dummy_set_property, vFpupp) GO(dummy_drag_data_get, vFpppuu) GO(dummy_drag_motion, iFppiiu) GO(dummy_drag_data_received, vFppiipuu) diff --git a/src/wrapped/wrappedgstallocators.c b/src/wrapped/wrappedgstallocators.c index ebdcb0fa9d6ba68f52a773885d4ede09358852bd..74cd1f3bfdb781d24126c920e7aeae227797fdad 100644 --- a/src/wrapped/wrappedgstallocators.c +++ b/src/wrapped/wrappedgstallocators.c @@ -12,11 +12,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* gstallocatorsName = "libgstallocators-1.0.so"; -#else - const char* gstallocatorsName = "libgstallocators-1.0.so.0"; -#endif +const char* gstallocatorsName = "libgstallocators-1.0.so.0"; +#define ALTNAME "libgstallocators-1.0.so" #define LIBNAME gstallocators diff --git a/src/wrapped/wrappedgstapp.c b/src/wrapped/wrappedgstapp.c index bc712f7aba96443da4f021156a426ee5a95e3215..3815c34742a5118c34932acbb07c836c60ca29ee 100644 --- a/src/wrapped/wrappedgstapp.c +++ b/src/wrapped/wrappedgstapp.c @@ -12,11 +12,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* gstappName = "libgstapp-1.0.so"; -#else - const char* gstappName = "libgstapp-1.0.so.0"; -#endif +const char* gstappName = "libgstapp-1.0.so.0"; +#define ALTNAME "libgstapp-1.0.so" #define LIBNAME gstapp diff --git a/src/wrapped/wrappedgstaudio.c b/src/wrapped/wrappedgstaudio.c index 943d2fa7d806274c25caf0d9a8b523975736f299..9e52556e8a336da5979b7277859aab83fe52cdd8 100644 --- a/src/wrapped/wrappedgstaudio.c +++ b/src/wrapped/wrappedgstaudio.c @@ -20,11 +20,8 @@ #include "gtkclass.h" #include "fileutils.h" -#ifdef ANDROID - const char* gstaudioName = "libgstaudio-1.0.so"; -#else - const char* gstaudioName = "libgstaudio-1.0.so.0"; -#endif +const char* gstaudioName = "libgstaudio-1.0.so.0"; +#define ALTNAME "libgstaudio-1.0.so" #define LIBNAME gstaudio @@ -46,10 +43,6 @@ typedef size_t (*LFv_t)(); SetGstAudioDecoderID(my->gst_audio_decoder_get_type()); \ SetGstAudioFilterID(my->gst_audio_filter_get_type()); -#ifdef ANDROID -#define NEEDED_LIBS "libgstreamer-1.0.so" -#else #define NEEDED_LIBS "libgstreamer-1.0.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedgstbase.c b/src/wrapped/wrappedgstbase.c index b3d85b35df516ecc7a73dc7076f92e3f011f6691..786b706e87fc7f5433cda472ea4afff3c93c5608 100644 --- a/src/wrapped/wrappedgstbase.c +++ b/src/wrapped/wrappedgstbase.c @@ -20,11 +20,8 @@ #include "gtkclass.h" #include "fileutils.h" -#ifdef ANDROID - const char* gstbaseName = "libgstbase-1.0.so"; -#else - const char* gstbaseName = "libgstbase-1.0.so.0"; -#endif +const char* gstbaseName = "libgstbase-1.0.so.0"; +#define ALTNAME "libgstbase-1.0.so" #define LIBNAME gstbase @@ -237,10 +234,6 @@ EXPORT void my_gst_collect_pads_set_buffer_function(x64emu_t* emu, void* pads, v SetGstBaseSrcID(my->gst_base_src_get_type());\ SetGstAggregatorPadID(my->gst_aggregator_pad_get_type()); -#ifdef ANDROID -#define NEEDED_LIBS "libgstreamer-1.0.so" -#else #define NEEDED_LIBS "libgstreamer-1.0.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedgstcheck.c b/src/wrapped/wrappedgstcheck.c index e52bf0b8368c79614b89501907afdf7f37517925..9092d25b57b220d292aacc94bd7b95ef75479140 100644 --- a/src/wrapped/wrappedgstcheck.c +++ b/src/wrapped/wrappedgstcheck.c @@ -12,11 +12,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* gstcheckName = "libgstcheck-1.0.so"; -#else - const char* gstcheckName = "libgstcheck-1.0.so.0"; -#endif +const char* gstcheckName = "libgstcheck-1.0.so.0"; +#define ALTNAME "libgstcheck-1.0.so" #define LIBNAME gstcheck diff --git a/src/wrapped/wrappedgstcontroller.c b/src/wrapped/wrappedgstcontroller.c index c2a7cfc5301cc0f0cc0f4dc2607740d93016a9ea..2f63015435fb8eb81a71b7cab2d067ba04d0ecb9 100644 --- a/src/wrapped/wrappedgstcontroller.c +++ b/src/wrapped/wrappedgstcontroller.c @@ -12,11 +12,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* gstcontrollerName = "libgstcontroller-1.0.so"; -#else - const char* gstcontrollerName = "libgstcontroller-1.0.so.0"; -#endif +const char* gstcontrollerName = "libgstcontroller-1.0.so.0"; +#define ALTNAME "libgstcontroller-1.0.so" #define LIBNAME gstcontroller diff --git a/src/wrapped/wrappedgstfft.c b/src/wrapped/wrappedgstfft.c index ee3a565e3fde91d132e917497b28d90e3f55d9ee..afb8b1590898b7e0e327a139f53d3214816f50ad 100644 --- a/src/wrapped/wrappedgstfft.c +++ b/src/wrapped/wrappedgstfft.c @@ -12,11 +12,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* gstfftName = "libgstfft-1.0.so"; -#else - const char* gstfftName = "libgstfft-1.0.so.0"; -#endif +const char* gstfftName = "libgstfft-1.0.so.0"; +#define ALTNAME "libgstfft-1.0.so" #define LIBNAME gstfft diff --git a/src/wrapped/wrappedgstgl.c b/src/wrapped/wrappedgstgl.c index 176df13ba2eb789b78218f58f7eed962d298eca8..3b3aad559f03d2c9163b7aa706396306ddb54f69 100644 --- a/src/wrapped/wrappedgstgl.c +++ b/src/wrapped/wrappedgstgl.c @@ -21,11 +21,8 @@ #include "fileutils.h" #include "gltools.h" -#ifdef ANDROID - const char* gstglName = "libgstgl-1.0.so"; -#else - const char* gstglName = "libgstgl-1.0.so.0"; -#endif +const char* gstglName = "libgstgl-1.0.so.0"; +#define ALTNAME "libgstgl-1.0.so" #define LIBNAME gstgl diff --git a/src/wrapped/wrappedgstnet.c b/src/wrapped/wrappedgstnet.c index 53c09dc1dd8ca02d725b905fc661b289190907fb..7cdcfb76f0a7b3e2c50aad898519c253326c01c0 100644 --- a/src/wrapped/wrappedgstnet.c +++ b/src/wrapped/wrappedgstnet.c @@ -12,11 +12,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* gstnetName = "libgstnet-1.0.so"; -#else - const char* gstnetName = "libgstnet-1.0.so.0"; -#endif +const char* gstnetName = "libgstnet-1.0.so.0"; +#define ALTNAME "libgstnet-1.0.so" #define LIBNAME gstnet diff --git a/src/wrapped/wrappedgstpbutils.c b/src/wrapped/wrappedgstpbutils.c index eaa2ee35a2a07df968609e4be58a93277d9715b2..d9dc054d1d99a200b9a9ec8a8c5fff61d0bd31fd 100644 --- a/src/wrapped/wrappedgstpbutils.c +++ b/src/wrapped/wrappedgstpbutils.c @@ -12,11 +12,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* gstpbutilsName = "libgstpbutils-1.0.so"; -#else - const char* gstpbutilsName = "libgstpbutils-1.0.so.0"; -#endif +const char* gstpbutilsName = "libgstpbutils-1.0.so.0"; +#define ALTNAME "libgstpbutils-1.0.so" #define LIBNAME gstpbutils diff --git a/src/wrapped/wrappedgstreamer.c b/src/wrapped/wrappedgstreamer.c index 16fcc747a5b4a41114d9224e7729b4848e8b3728..46db408bf753d270ee59a5eb88d42c428e28f70f 100644 --- a/src/wrapped/wrappedgstreamer.c +++ b/src/wrapped/wrappedgstreamer.c @@ -21,11 +21,9 @@ #include "gtkclass.h" #include "fileutils.h" -#ifdef ANDROID - const char* gstreamerName = "libgstreamer-1.0.so"; -#else - const char* gstreamerName = "libgstreamer-1.0.so.0"; -#endif +const char* gstreamerName = "libgstreamer-1.0.so.0"; +#define ALTNAME "libgstreamer-1.0.so" + #define LIBNAME gstreamer typedef void (*vFv_t)(); @@ -52,6 +50,7 @@ void* my_dlsym(x64emu_t* emu, void *handle, void *symbol); GO(gst_bin_get_type, LFv_t) \ GO(gst_pad_get_type, LFv_t) \ GO(gst_uri_handler_get_type, LFv_t) \ + GO(gst_buffer_pool_get_type, LFv_t) \ GO(gst_structure_new_empty, pFp_t) \ GO(gst_caps_new_empty, pFv_t) \ GO(gst_caps_replace, iFpp_t) \ @@ -1149,12 +1148,9 @@ EXPORT int my_gst_buffer_foreach_meta(x64emu_t* emu, void* buff, void* f, void* SetGstElementID(my->gst_element_get_type()); \ SetGstBinID(my->gst_bin_get_type()); \ SetGstPadID(my->gst_pad_get_type()); \ - SetGstURIHandlerID(my->gst_uri_handler_get_type()); + SetGstURIHandlerID(my->gst_uri_handler_get_type()); \ + SetGstBufferPoolID(my->gst_buffer_pool_get_type()); \ -#ifdef ANDROID -#define NEEDED_LIBS "libgtk-3.so" -#else #define NEEDED_LIBS "libgtk-3.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedgstriff.c b/src/wrapped/wrappedgstriff.c index 35a300f16fd1d56cca8679c6e5abbfe748a5933a..472db7ce4c837db9e80c056611885380474e4569 100644 --- a/src/wrapped/wrappedgstriff.c +++ b/src/wrapped/wrappedgstriff.c @@ -13,6 +13,8 @@ #include "x64emu.h" const char* gstriffName = "libgstriff-1.0.so.0"; +#define ALTNAME "libgstriff-1.0.so" + #define LIBNAME gstriff #define PRE_INIT \ diff --git a/src/wrapped/wrappedgstrtp.c b/src/wrapped/wrappedgstrtp.c index ef3fa6afab787178188e947b40aaf5c9f12ff741..00f3d0205b409092158b4e481caa73b3f48890d4 100644 --- a/src/wrapped/wrappedgstrtp.c +++ b/src/wrapped/wrappedgstrtp.c @@ -12,11 +12,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* gstrtpName = "libgstrtp-1.0.so"; -#else - const char* gstrtpName = "libgstrtp-1.0.so.0"; -#endif +const char* gstrtpName = "libgstrtp-1.0.so.0"; +#define ALTNAME "libgstrtp-1.0.so" #define LIBNAME gstrtp diff --git a/src/wrapped/wrappedgstrtsp.c b/src/wrapped/wrappedgstrtsp.c index 57d45acac71994af29a48ee9ee3f4d03e549983d..ff3f0cbd12599c2fe09e5b5cbe23bcfd7f6ad41b 100644 --- a/src/wrapped/wrappedgstrtsp.c +++ b/src/wrapped/wrappedgstrtsp.c @@ -12,11 +12,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* gstrtspName = "libgstrtsp-1.0.so"; -#else - const char* gstrtspName = "libgstrtsp-1.0.so.0"; -#endif +const char* gstrtspName = "libgstrtsp-1.0.so.0"; +#define ALTNAME "libgstrtsp-1.0.so" #define LIBNAME gstrtsp diff --git a/src/wrapped/wrappedgstsdp.c b/src/wrapped/wrappedgstsdp.c index ddda7d1f992aec3b2c1280fc9a6894adef7b98d2..6edcee426be01becfb829bd06cf6cb954cff0ed0 100644 --- a/src/wrapped/wrappedgstsdp.c +++ b/src/wrapped/wrappedgstsdp.c @@ -12,11 +12,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* gstsdpName = "libgstsdp-1.0.so"; -#else - const char* gstsdpName = "libgstsdp-1.0.so.0"; -#endif +const char* gstsdpName = "libgstsdp-1.0.so.0"; +#define ALTNAME "libgstsdp-1.0.so" #define LIBNAME gstsdp diff --git a/src/wrapped/wrappedgsttag.c b/src/wrapped/wrappedgsttag.c index f7aad56a60e4e05787fd0e40da77e3b317b20cc7..1f02560ac7ac5f4f242885ce50870a9bd2233a65 100644 --- a/src/wrapped/wrappedgsttag.c +++ b/src/wrapped/wrappedgsttag.c @@ -12,11 +12,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* gsttagName = "libgsttag-1.0.so"; -#else - const char* gsttagName = "libgsttag-1.0.so.0"; -#endif +const char* gsttagName = "libgsttag-1.0.so.0"; +#define ALTNAME "libgsttag-1.0.so" #define LIBNAME gsttag diff --git a/src/wrapped/wrappedgstvideo.c b/src/wrapped/wrappedgstvideo.c index 37538d35d0fb89f63f84ab7e16ff9bc7af76b269..d7fa4d60f6f737ea03c0a06f1e0f90bdde021909 100644 --- a/src/wrapped/wrappedgstvideo.c +++ b/src/wrapped/wrappedgstvideo.c @@ -20,11 +20,8 @@ #include "gtkclass.h" #include "fileutils.h" -#ifdef ANDROID - const char* gstvideoName = "libgstvideo-1.0.so"; -#else - const char* gstvideoName = "libgstvideo-1.0.so.0"; -#endif +const char* gstvideoName = "libgstvideo-1.0.so.0"; +#define ALTNAME "libgstvideo-1.0.so" #define LIBNAME gstvideo @@ -37,6 +34,7 @@ typedef size_t (*LFv_t)(); GO(gst_video_aggregator_get_type, LFv_t) \ GO(gst_video_aggregator_pad_get_type, LFv_t) \ GO(gst_video_filter_get_type, LFv_t) \ + GO(gst_video_buffer_pool_get_type, LFv_t) \ #include "generated/wrappedgstbasetypes.h" @@ -52,12 +50,9 @@ typedef size_t (*LFv_t)(); SetGstVideoSinkID(my->gst_video_sink_get_type());\ SetGstVideoAggregatorID(my->gst_video_aggregator_get_type());\ SetGstVideoAggregatorPadID(my->gst_video_aggregator_pad_get_type());\ - SetGstVideoFilterID(my->gst_video_filter_get_type()); + SetGstVideoFilterID(my->gst_video_filter_get_type());\ + SetGstVideoBufferPoolID(my->gst_video_buffer_pool_get_type());\ -#ifdef ANDROID -#define NEEDED_LIBS "libgstreamer-1.0.so" -#else #define NEEDED_LIBS "libgstreamer-1.0.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedgstvideo_private.h b/src/wrapped/wrappedgstvideo_private.h index dbc61d9f8ee9b3687e4317041f07e6fea6f71592..ae500ce9d0ad6ad1e0a1f9744345b49ed4aa1cfd 100644 --- a/src/wrapped/wrappedgstvideo_private.h +++ b/src/wrapped/wrappedgstvideo_private.h @@ -366,7 +366,7 @@ GO(gst_video_scaler_get_max_taps, uFp) GO(gst_video_scaler_horizontal, vFpuppuu) GO(gst_video_scaler_new, pFuuuuup) GO(gst_video_scaler_vertical, vFpuppuu) -GO(gst_video_sink_center_rect, vFpppppi) // this is vFHHpi, with 2 GstVideoRectangle struct that are 4 ints +GO(gst_video_sink_center_rect, vFHHpi) GO(gst_video_sink_get_type, LFv) GO(gst_video_tile_get_index, uFuiiii) GO(gst_video_tile_mode_get_type, LFv) diff --git a/src/wrapped/wrappedgtk3.c b/src/wrapped/wrappedgtk3.c index d39d99445d49bec439c0fabb721d03cb39280a83..99f749907d4eff91d146a9d7536c231d7eec95b1 100644 --- a/src/wrapped/wrappedgtk3.c +++ b/src/wrapped/wrappedgtk3.c @@ -19,11 +19,8 @@ #include "myalign.h" #include "gtkclass.h" -#ifdef ANDROID - const char* gtk3Name = "libgtk-3.so"; -#else - const char* gtk3Name = "libgtk-3.so.0"; -#endif +const char* gtk3Name = "libgtk-3.so.0"; +#define ALTNAME "libgtk-3.so" #define LIBNAME gtk3 @@ -95,14 +92,6 @@ GO(gtk_list_store_insert_with_valuesv, vFppippi_t) #include "wrappercallback.h" -EXPORT uintptr_t my3_gtk_signal_connect_full(x64emu_t* emu, void* object, void* name, void* c_handler, void* unsupported, void* data, void* closure, uint32_t signal, int after) -{ - my_signal_t *sig = new_mysignal(c_handler, data, closure); - uintptr_t ret = my->gtk_signal_connect_full(object, name, my_signal_cb, NULL, sig, my_signal_delete, signal, after); - printf_log(LOG_DEBUG, "Connecting gtk signal \"%s\" with cb=%p\n", (char*)name, sig); - return ret; -} - #define SUPER() \ GO(0) \ GO(1) \ @@ -500,6 +489,29 @@ static void* find_GtkFileFilterFunc_Fct(void* fct) return NULL; } +// GtkListBoxUpdateHeaderFunc +#define GO(A) \ +static uintptr_t my_GtkListBoxUpdateHeaderFunc_fct_##A = 0; \ +static void my_GtkListBoxUpdateHeaderFunc_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my_GtkListBoxUpdateHeaderFunc_fct_##A, "ppp", a, b, c); \ +} +SUPER() +#undef GO +static void* findGtkListBoxUpdateHeaderFunc(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_GtkListBoxUpdateHeaderFunc_fct_##A == (uintptr_t)fct) return my_GtkListBoxUpdateHeaderFunc_##A; + SUPER() + #undef GO + #define GO(A) if(my_GtkListBoxUpdateHeaderFunc_fct_##A == 0) {my_GtkListBoxUpdateHeaderFunc_fct_##A = (uintptr_t)fct; return my_GtkListBoxUpdateHeaderFunc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for gtk-3 GtkListBoxUpdateHeaderFunc callback\n"); + return NULL; +} + #undef SUPER EXPORT void my3_gtk_dialog_add_buttons(x64emu_t* emu, void* dialog, void* first, uintptr_t* b) @@ -536,12 +548,6 @@ EXPORT void my3_gtk_message_dialog_format_secondary_markup(x64emu_t* emu, void* free(buf); } -EXPORT void* my3_gtk_type_class(x64emu_t* emu, size_t type) -{ - void* class = my->gtk_type_class(type); - return wrapCopyGTKClass(class, type); -} - EXPORT void my3_gtk_file_filter_add_custom(x64emu_t* emu, void* filter, uint32_t needed, void* f, void* data, void* d) { (void)emu; @@ -581,11 +587,6 @@ EXPORT void my3_gtk_menu_popup(x64emu_t* emu, void* menu, void* shell, void* ite my->gtk_menu_popup(menu, shell, item, findMenuPositionFct(f), data, button, time_); } -EXPORT uint32_t my3_gtk_timeout_add(x64emu_t* emu, uint32_t interval, void* f, void* data) -{ - return my->gtk_timeout_add(interval, findGtkFunctionFct(f), data); -} - EXPORT int my3_gtk_clipboard_set_with_data(x64emu_t* emu, void* clipboard, void* target, uint32_t n, void* f_get, void* f_clear, void* data) { return my->gtk_clipboard_set_with_data(clipboard, target, n, findClipboadGetFct(f_get), findClipboadClearFct(f_clear), data); @@ -627,41 +628,6 @@ EXPORT int my3_gtk_text_iter_forward_find_char(x64emu_t* emu, void* iter, void* return my->gtk_text_iter_forward_find_char(iter, findGtkTextCharPredicateFct(f), data, limit); } -EXPORT void* my3_gtk_toolbar_append_item(x64emu_t* emu, void* toolbar, void* text, void* tooltip_text, void* tooltip_private, void* icon, void* f, void* data) -{ - return my->gtk_toolbar_append_item(toolbar, text, tooltip_text, tooltip_private, icon, findToolbarFct(f), data); -} - -EXPORT void* my3_gtk_toolbar_prepend_item(x64emu_t* emu, void* toolbar, void* text, void* tooltip_text, void* tooltip_private, void* icon, void* f, void* data) -{ - return my->gtk_toolbar_prepend_item(toolbar, text, tooltip_text, tooltip_private, icon, findToolbarFct(f), data); -} - -EXPORT void* my3_gtk_toolbar_insert_item(x64emu_t* emu, void* toolbar, void* text, void* tooltip_text, void* tooltip_private, void* icon, void* f, void* data, int position) -{ - return my->gtk_toolbar_insert_item(toolbar, text, tooltip_text, tooltip_private, icon, findToolbarFct(f), data, position); -} - -EXPORT void* my3_gtk_toolbar_append_element(x64emu_t* emu, void* toolbar, size_t type, void* widget, void* text, void* tooltip_text, void* tooltip_private, void* icon, void* f, void* data) -{ - return my->gtk_toolbar_append_element(toolbar, type, widget, text, tooltip_text, tooltip_private, icon, findToolbarFct(f), data); -} - -EXPORT void* my3_gtk_toolbar_prepend_element(x64emu_t* emu, void* toolbar, size_t type, void* widget, void* text, void* tooltip_text, void* tooltip_private, void* icon, void* f, void* data) -{ - return my->gtk_toolbar_prepend_element(toolbar, type, widget, text, tooltip_text, tooltip_private, icon, findToolbarFct(f), data); -} - -EXPORT void* my3_gtk_toolbar_insert_element(x64emu_t* emu, void* toolbar, size_t type, void* widget, void* text, void* tooltip_text, void* tooltip_private, void* icon, void* f, void* data, int position) -{ - return my->gtk_toolbar_insert_element(toolbar, type, widget, text, tooltip_text, tooltip_private, icon, findToolbarFct(f), data, position); -} - -EXPORT void* my3_gtk_toolbar_insert_stock(x64emu_t* emu, void* toolbar, void* stock_id, void* tooltip_text, void* tooltip_private, void* f, void* data, int position) -{ - return my->gtk_toolbar_insert_stock(toolbar, stock_id, tooltip_text, tooltip_private, findToolbarFct(f), data, position); -} - EXPORT void my3_gtk_tree_sortable_set_sort_func(x64emu_t* emu, void* sortable, int id, void* f, void* data, void* notify) { my->gtk_tree_sortable_set_sort_func(sortable, id, findGtkTreeIterCompareFuncFct(f), data, findGDestroyNotifyFct(notify)); @@ -672,21 +638,6 @@ EXPORT void my3_gtk_tree_sortable_set_default_sort_func(x64emu_t* emu, void* sor my->gtk_tree_sortable_set_default_sort_func(sortable, findGtkTreeIterCompareFuncFct(f), data, findGDestroyNotifyFct(notify)); } -EXPORT int my3_gtk_type_unique(x64emu_t* emu, size_t parent, my_GtkTypeInfo_t* gtkinfo) -{ - return my->gtk_type_unique(parent, findFreeGtkTypeInfo(gtkinfo, parent)); -} - -EXPORT unsigned long my3_gtk_signal_connect(x64emu_t* emu, void* object, void* name, void* func, void* data) -{ - return my3_gtk_signal_connect_full(emu, object, name, func, NULL, data, NULL, 0, 0); -} - -EXPORT void my3_gtk_object_set_data_full(x64emu_t* emu, void* object, void* key, void* data, void* notify) -{ - my->gtk_object_set_data_full(object, key, data, findGDestroyNotifyFct(notify)); -} - EXPORT float my3_gtk_spin_button_get_value_as_float(x64emu_t* emu, void* spinner) { return my->gtk_spin_button_get_value(spinner); @@ -753,7 +704,7 @@ EXPORT void* my3_gtk_tree_store_new(x64emu_t* emu, uint32_t n, uintptr_t* b) return my->gtk_tree_store_newv(n, c); } -EXPORT void my3_gtk_style_context_get_valist(x64emu_t* emu, void* context, int state, x64_va_list_t V) +EXPORT void my3_gtk_style_context_get_valist(x64emu_t* emu, void* context, uint32_t state, x64_va_list_t V) { #ifdef CONVERT_VALIST CONVERT_VALIST(V); @@ -773,6 +724,13 @@ EXPORT void my3_gtk_style_context_get_style_valist(x64emu_t* emu, void* context, my->gtk_style_context_get_style_valist(context, VARARGS); } +EXPORT void my3_gtk_style_context_get_style(x64emu_t* emu, void* context, uintptr_t* b) +{ + CREATE_VALIST_FROM_VAARG(b, emu->scratch, 1); + my->gtk_style_context_get_style_valist(context, VARARGS); +} + + EXPORT void my3_gtk_enumerate_printers(x64emu_t* emu, void* f, void* data, void* d, int i) { my->gtk_enumerate_printers(findGtkPrinterFuncFct(f), data, findGDestroyNotifyFct(d), i); @@ -844,6 +802,11 @@ EXPORT void my3_gtk_tree_store_set(x64emu_t* emu, void* tree, void* iter, uintpt my->gtk_tree_store_set_valist(tree, iter, VARARGS); } +EXPORT void my3_gtk_list_box_set_header_func(x64emu_t* emu, void* box, void* f, void* data, void* d) +{ + my->gtk_list_box_set_header_func(box, findGtkListBoxUpdateHeaderFunc(f), data, findGDestroyNotifyFct(d)); +} + #define PRE_INIT \ if(box64_nogtk) \ @@ -874,10 +837,6 @@ EXPORT void my3_gtk_tree_store_set(x64emu_t* emu, void* tree, void* iter, uintpt SetGtkGestureLongPressID(my->gtk_gesture_long_press_get_type());\ SetGtkActionID(my->gtk_action_get_type()); -#ifdef ANDROID -#define NEEDED_LIBS "libgdk-3.so", "libpangocairo-1.0.so", "libgio-2.0.so" -#else #define NEEDED_LIBS "libgdk-3.so.0", "libpangocairo-1.0.so.0", "libgio-2.0.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedgtk3_private.h b/src/wrapped/wrappedgtk3_private.h index 93ec5eaab6ded8969a5d3017f4f195e6b16b0480..ac87f92d49142cfa40f18fe517fe6f0e83d75793 100644 --- a/src/wrapped/wrappedgtk3_private.h +++ b/src/wrapped/wrappedgtk3_private.h @@ -1,5 +1,5 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif GO(gtk_about_dialog_add_credit_section, vFppp) @@ -12,7 +12,6 @@ GO(gtk_about_dialog_get_license, pFp) GO(gtk_about_dialog_get_license_type, uFp) GO(gtk_about_dialog_get_logo, pFp) GO(gtk_about_dialog_get_logo_icon_name, pFp) -GO(gtk_about_dialog_get_name, pFp) GO(gtk_about_dialog_get_program_name, pFp) GO(gtk_about_dialog_get_translator_credits, pFp) GO(gtk_about_dialog_get_type, LFv) @@ -26,149 +25,161 @@ GO(gtk_about_dialog_set_authors, vFpp) GO(gtk_about_dialog_set_comments, vFpp) GO(gtk_about_dialog_set_copyright, vFpp) GO(gtk_about_dialog_set_documenters, vFpp) -//GO(gtk_about_dialog_set_email_hook, GO(gtk_about_dialog_set_license, vFpp) GO(gtk_about_dialog_set_license_type, vFpu) GO(gtk_about_dialog_set_logo, vFpp) GO(gtk_about_dialog_set_logo_icon_name, vFpp) -GO(gtk_about_dialog_set_name, vFpp) GO(gtk_about_dialog_set_program_name, vFpp) GO(gtk_about_dialog_set_translator_credits, vFpp) -//GO(gtk_about_dialog_set_url_hook, GO(gtk_about_dialog_set_version, vFpp) GO(gtk_about_dialog_set_website, vFpp) GO(gtk_about_dialog_set_website_label, vFpp) GO(gtk_about_dialog_set_wrap_license, vFpi) GO(gtk_accelerator_get_default_mod_mask, uFv) GO(gtk_accelerator_get_label, pFuu) -GO(gtk_accelerator_name, pFui) +GO(gtk_accelerator_get_label_with_keycode, pFpuuu) +GO(gtk_accelerator_name, pFuu) +GO(gtk_accelerator_name_with_keycode, pFpuuu) GO(gtk_accelerator_parse, vFppp) +GO(gtk_accelerator_parse_with_keycode, vFpppp) GO(gtk_accelerator_set_default_mod_mask, vFu) GO(gtk_accelerator_valid, iFuu) GO(gtk_accel_flags_get_type, LFv) GO(gtk_accel_group_activate, iFpupuu) -GO(gtk_accel_group_connect, vFpuiip) // Closure probably needs wrapping when not null -GO(gtk_accel_group_connect_by_path, vFppp) -GO(gtk_accel_group_disconnect, iFpp) +GO(gtk_accel_group_connect, vFpuuup) // Closure probably needs wrapping when not null +GO(gtk_accel_group_connect_by_path, vFppp) // Closure probably needs wrapping when not null +GO(gtk_accel_group_disconnect, iFpp) // Closure probably needs wrapping when not null GO(gtk_accel_group_disconnect_key, iFpuu) //GOM(gtk_accel_group_find, pFEppp) GO(gtk_accel_group_from_accel_closure, pFp) -GO(gtk_accel_group_get_is_locked, iFp) +GO(gtk_accel_group_get_is_locked, iFp) // Closure probably needs wrapping when not null GO(gtk_accel_group_get_modifier_mask, uFp) GO(gtk_accel_group_get_type, LFv) GO(gtk_accel_group_lock, vFp) GO(gtk_accel_group_new, pFv) GO(gtk_accel_group_query, pFpuup) -GO(gtk_accel_groups_activate, iFpui) +GO(gtk_accel_groups_activate, iFpuu) GO(gtk_accel_groups_from_object, pFp) GO(gtk_accel_group_unlock, vFp) +GO(gtk_accel_label_get_accel, vFppp) GO(gtk_accel_label_get_accel_widget, pFp) GO(gtk_accel_label_get_accel_width, uFp) GO(gtk_accel_label_get_type, LFv) -//GO(gtk_accel_label_new, +GO(gtk_accel_label_new, pFp) GO(gtk_accel_label_refetch, iFp) -//GO(gtk_accel_label_set_accel_closure, +GO(gtk_accel_label_set_accel, vFpuu) +//GOM(gtk_accel_label_set_accel_closure, vFpp) GO(gtk_accel_label_set_accel_widget, vFpp) GO(gtk_accel_map_add_entry, vFpuu) -//GO(gtk_accel_map_add_filter, +GO(gtk_accel_map_add_filter, vFp) GO(gtk_accel_map_change_entry, iFpuui) -//GO(gtk_accel_map_foreach, -//GO(gtk_accel_map_foreach_unfiltered, +//GOM(gtk_accel_map_foreach, vFpp) +//GOM(gtk_accel_map_foreach_unfiltered, vFpp) GO(gtk_accel_map_get, pFv) GO(gtk_accel_map_get_type, LFv) -//GO(gtk_accel_map_load, -//GO(gtk_accel_map_load_fd, -//GO(gtk_accel_map_load_scanner, -//GO(gtk_accel_map_lock_path, +GO(gtk_accel_map_load, vFp) +GO(gtk_accel_map_load_fd, vFi) +//GOM(gtk_accel_map_load_scanner, vFp) +GO(gtk_accel_map_lock_path, vFp) GO(gtk_accel_map_lookup_entry, iFpp) -//GO(gtk_accel_map_save, +GO(gtk_accel_map_save, vFp) GO(gtk_accel_map_save_fd, vFi) -//GO(gtk_accel_map_unlock_path, -//GO(gtk_accessible_connect_widget_destroyed, +GO(gtk_accel_map_unlock_path, vFp) +GO(gtk_accessible_connect_widget_destroyed, vFp) GO(gtk_accessible_get_type, LFv) GO(gtk_accessible_get_widget, pFp) GO(gtk_accessible_set_widget, vFpp) +GO(gtk_actionable_get_action_name, pFp) +GO(gtk_actionable_get_action_target_value, pFp) GO(gtk_actionable_get_type, LFv) -//GO(gtk_action_activate, +GO(gtk_actionable_set_action_name, vFpp) +//GOM(gtk_actionable_set_action_target, vFppV) +GO(gtk_actionable_set_action_target_value, vFpp) +GO(gtk_actionable_set_detailed_action_name, vFpp) +GO(gtk_action_activate, vFp) +GO(gtk_action_bar_get_center_widget, pFp) GO(gtk_action_bar_get_type, LFv) -//GO(gtk_action_block_activate, -//GO(gtk_action_block_activate_from, -//GO(gtk_action_connect_accelerator, -//GO(gtk_action_connect_proxy, +GO(gtk_action_bar_new, pFv) +GO(gtk_action_bar_pack_end, vFpp) +GO(gtk_action_bar_pack_start, vFpp) +GO(gtk_action_bar_set_center_widget, vFpp) +GO(gtk_action_block_activate, vFp) +GO(gtk_action_connect_accelerator, vFp) GO(gtk_action_create_icon, pFpu) GO(gtk_action_create_menu, pFp) -//GO(gtk_action_create_menu_item, -//GO(gtk_action_create_tool_item, -//GO(gtk_action_disconnect_accelerator, -//GO(gtk_action_disconnect_proxy, -//GO(gtk_action_get_accel_closure, -//GO(gtk_action_get_accel_path, +GO(gtk_action_create_menu_item, pFp) +GO(gtk_action_create_tool_item, pFp) +GO(gtk_action_disconnect_accelerator, vFp) +//GOM(gtk_action_get_accel_closure, pFp) +GO(gtk_action_get_accel_path, pFp) GO(gtk_action_get_always_show_image, iFp) GO(gtk_action_get_gicon, pFp) GO(gtk_action_get_icon_name, pFp) -//GO(gtk_action_get_is_important, -//GO(gtk_action_get_label, -//GO(gtk_action_get_name, +GO(gtk_action_get_is_important, iFp) +GO(gtk_action_get_label, pFp) +GO(gtk_action_get_name, pFp) GO(gtk_action_get_proxies, pFp) -//GO(gtk_action_get_sensitive, -//GO(gtk_action_get_short_label, -//GO(gtk_action_get_stock_id, -//GO(gtk_action_get_tooltip, +GO(gtk_action_get_sensitive, iFp) +GO(gtk_action_get_short_label, pFp) +GO(gtk_action_get_stock_id, pFp) +GO(gtk_action_get_tooltip, pFp) GO(gtk_action_get_type, LFv) -//GO(gtk_action_get_visible, -//GO(gtk_action_get_visible_horizontal, -//GO(gtk_action_get_visible_vertical, -//GO(gtk_action_group_add_action, -//GO(gtk_action_group_add_actions, -//GO(gtk_action_group_add_actions_full, +GO(gtk_action_get_visible, iFp) +GO(gtk_action_get_visible_horizontal, iFp) +GO(gtk_action_get_visible_vertical, iFp) +GO(gtk_action_group_add_action, vFpp) +//GOM(gtk_action_group_add_actions, vFppup) +//GOM(gtk_action_group_add_actions_full, vFppupp) GO(gtk_action_group_add_action_with_accel, vFppp) -//GO(gtk_action_group_add_radio_actions, -//GO(gtk_action_group_add_radio_actions_full, -//GO(gtk_action_group_add_toggle_actions, -//GO(gtk_action_group_add_toggle_actions_full, +//GOM(gtk_action_group_add_radio_actions, vFppuipp) +//GOM(gtk_action_group_add_radio_actions_full, vFppuippp) +//GOM(gtk_action_group_add_toggle_actions, vFppup) +//GOM(gtk_action_group_add_toggle_actions_full, vFppupp) +GO(gtk_action_group_get_accel_group, pFp) GO(gtk_action_group_get_action, pFpp) GO(gtk_action_group_get_name, pFp) -//GO(gtk_action_group_get_sensitive, +GO(gtk_action_group_get_sensitive, iFp) GO(gtk_action_group_get_type, LFv) GO(gtk_action_group_get_visible, iFp) GO(gtk_action_group_list_actions, pFp) GO(gtk_action_group_new, pFp) -//GO(gtk_action_group_remove_action, -//GO(gtk_action_group_set_sensitive, -//GO(gtk_action_group_set_translate_func, +GO(gtk_action_group_remove_action, vFpp) +GO(gtk_action_group_set_accel_group, vFpp) +GO(gtk_action_group_set_sensitive, vFpi) +//GOM(gtk_action_group_set_translate_func, vFpppp) GO(gtk_action_group_set_translation_domain, vFpp) GO(gtk_action_group_set_visible, vFpi) GO(gtk_action_group_translate_string, pFpp) -//GO(gtk_action_is_sensitive, -//GO(gtk_action_is_visible, -//GO(gtk_action_new, +GO(gtk_action_is_sensitive, iFp) +GO(gtk_action_is_visible, iFp) +GO(gtk_action_new, pFpppp) GO(gtk_action_set_accel_group, vFpp) -//GO(gtk_action_set_accel_path, +GO(gtk_action_set_accel_path, vFpp) GO(gtk_action_set_always_show_image, vFpi) GO(gtk_action_set_gicon, vFpp) GO(gtk_action_set_icon_name, vFpp) -//GO(gtk_action_set_is_important, -//GO(gtk_action_set_label, -//GO(gtk_action_set_sensitive, -//GO(gtk_action_set_short_label, -//GO(gtk_action_set_stock_id, -//GO(gtk_action_set_tooltip, -//GO(gtk_action_set_visible, -//GO(gtk_action_set_visible_horizontal, -//GO(gtk_action_set_visible_vertical, -//GO(gtk_action_unblock_activate, -//GO(gtk_action_unblock_activate_from, +GO(gtk_action_set_is_important, vFpi) +GO(gtk_action_set_label, vFpp) +GO(gtk_action_set_sensitive, vFpi) +GO(gtk_action_set_short_label, vFpp) +GO(gtk_action_set_stock_id, vFpp) +GO(gtk_action_set_tooltip, vFpp) +GO(gtk_action_set_visible, vFpi) +GO(gtk_action_set_visible_horizontal, vFpi) +GO(gtk_action_set_visible_vertical, vFpi) +GO(gtk_action_unblock_activate, vFp) GO(gtk_activatable_do_set_related_action, vFpp) GO(gtk_activatable_get_related_action, pFp) GO(gtk_activatable_get_type, LFv) GO(gtk_activatable_get_use_action_appearance, iFp) -//GO(gtk_activatable_set_related_action, +GO(gtk_activatable_set_related_action, vFpp) GO(gtk_activatable_set_use_action_appearance, vFpi) -//GO(gtk_activatable_sync_action_properties, +GO(gtk_activatable_sync_action_properties, vFpp) GO(gtk_adjustment_changed, vFp) GO(gtk_adjustment_clamp_page, vFpdd) GO(gtk_adjustment_configure, vFpdddddd) GO(gtk_adjustment_get_lower, dFp) +GO(gtk_adjustment_get_minimum_increment, dFp) GO(gtk_adjustment_get_page_increment, dFp) GO(gtk_adjustment_get_page_size, dFp) GO(gtk_adjustment_get_step_increment, dFp) @@ -177,32 +188,85 @@ GO(gtk_adjustment_get_upper, dFp) GO(gtk_adjustment_get_value, dFp) GO(gtk_adjustment_new, pFdddddd) GO(gtk_adjustment_set_lower, vFpd) -GO(gtk_adjustment_set_page_increment, vFp) +GO(gtk_adjustment_set_page_increment, vFpd) GO(gtk_adjustment_set_page_size, vFpd) GO(gtk_adjustment_set_step_increment, vFpd) GO(gtk_adjustment_set_upper, vFpd) GO(gtk_adjustment_set_value, vFpd) GO(gtk_adjustment_value_changed, vFp) +GO(gtk_align_get_type, LFv) GO(gtk_alignment_get_padding, vFppppp) GO(gtk_alignment_get_type, LFv) GO(gtk_alignment_new, pFffff) GO(gtk_alignment_set, vFpffff) GO(gtk_alignment_set_padding, vFpuuuu) -GO(gtk_align_get_type, LFv) GO(gtk_alternative_dialog_button_order, iFp) -GO(gtk_anchor_type_get_type, LFv) +GO(gtk_app_chooser_button_append_custom_item, vFpppp) +GO(gtk_app_chooser_button_append_separator, vFp) +GO(gtk_app_chooser_button_get_heading, pFp) +GO(gtk_app_chooser_button_get_show_default_item, iFp) +GO(gtk_app_chooser_button_get_show_dialog_item, iFp) +GO(gtk_app_chooser_button_get_type, LFv) +GO(gtk_app_chooser_button_new, pFp) +GO(gtk_app_chooser_button_set_active_custom_item, vFpp) +GO(gtk_app_chooser_button_set_heading, vFpp) +GO(gtk_app_chooser_button_set_show_default_item, vFpi) +GO(gtk_app_chooser_button_set_show_dialog_item, vFpi) +GO(gtk_app_chooser_dialog_get_heading, pFp) +GO(gtk_app_chooser_dialog_get_type, LFv) +GO(gtk_app_chooser_dialog_get_widget, pFp) +GO(gtk_app_chooser_dialog_new, pFpup) +GO(gtk_app_chooser_dialog_new_for_content_type, pFpup) +GO(gtk_app_chooser_dialog_set_heading, vFpp) +GO(gtk_app_chooser_get_app_info, pFp) +GO(gtk_app_chooser_get_content_type, pFp) +GO(gtk_app_chooser_get_type, LFv) +GO(gtk_app_chooser_refresh, vFp) +GO(gtk_app_chooser_widget_get_default_text, pFp) +GO(gtk_app_chooser_widget_get_show_all, iFp) +GO(gtk_app_chooser_widget_get_show_default, iFp) +GO(gtk_app_chooser_widget_get_show_fallback, iFp) +GO(gtk_app_chooser_widget_get_show_other, iFp) +GO(gtk_app_chooser_widget_get_show_recommended, iFp) +GO(gtk_app_chooser_widget_get_type, LFv) +GO(gtk_app_chooser_widget_new, pFp) +GO(gtk_app_chooser_widget_set_default_text, vFpp) +GO(gtk_app_chooser_widget_set_show_all, vFpi) +GO(gtk_app_chooser_widget_set_show_default, vFpi) +GO(gtk_app_chooser_widget_set_show_fallback, vFpi) +GO(gtk_app_chooser_widget_set_show_other, vFpi) +GO(gtk_app_chooser_widget_set_show_recommended, vFpi) +GO(gtk_application_add_accelerator, vFpppp) GO(gtk_application_add_window, vFpp) -GO(gtk_application_get_new, pFpi) +GO(gtk_application_get_accels_for_action, pFpp) +GO(gtk_application_get_actions_for_accel, pFpp) +GO(gtk_application_get_active_window, pFp) +GO(gtk_application_get_app_menu, pFp) +GO(gtk_application_get_menubar, pFp) +GO(gtk_application_get_menu_by_id, pFpp) GO(gtk_application_get_type, LFv) +GO(gtk_application_get_window_by_id, pFpu) +GO(gtk_application_get_windows, pFp) +GO(gtk_application_inhibit, uFppup) +GO(gtk_application_inhibit_flags_get_type, LFv) +GO(gtk_application_is_inhibited, iFpu) +GO(gtk_application_list_action_descriptions, pFp) GO(gtk_application_new, pFpu) +GO(gtk_application_prefers_app_menu, iFp) +GO(gtk_application_remove_accelerator, vFppp) +GO(gtk_application_remove_window, vFpp) GO(gtk_application_set_accels_for_action, vFppp) -GO(gtk_application_window_new, pFp) +GO(gtk_application_set_app_menu, vFpp) +GO(gtk_application_set_menubar, vFpp) +GO(gtk_application_uninhibit, vFpu) +GO(gtk_application_window_get_help_overlay, pFp) +GO(gtk_application_window_get_id, uFp) +GO(gtk_application_window_get_show_menubar, iFp) GO(gtk_application_window_get_type, LFv) -GO(gtk_app_chooser_button_get_type, LFv) -GO(gtk_app_chooser_dialog_get_type, LFv) -GO(gtk_app_chooser_get_type, LFv) -GO(gtk_app_chooser_widget_get_type, LFv) -GO(gtk_arg_flags_get_type, LFv) +GO(gtk_application_window_new, pFp) +GO(gtk_application_window_set_help_overlay, vFpp) +GO(gtk_application_window_set_show_menubar, vFpi) +GO(gtk_arrow_accessible_get_type, LFv) GO(gtk_arrow_get_type, LFv) GO(gtk_arrow_new, pFuu) GO(gtk_arrow_placement_get_type, LFv) @@ -211,61 +275,70 @@ GO(gtk_arrow_type_get_type, LFv) GO(gtk_aspect_frame_get_type, LFv) GO(gtk_aspect_frame_new, pFpfffi) GO(gtk_aspect_frame_set, vFpfffi) -//GO(gtk_assistant_add_action_widget, +GO(gtk_assistant_add_action_widget, vFpp) GO(gtk_assistant_append_page, iFpp) -//GO(gtk_assistant_commit, -//GO(gtk_assistant_get_current_page, +GO(gtk_assistant_commit, vFp) +GO(gtk_assistant_get_current_page, iFp) GO(gtk_assistant_get_n_pages, iFp) GO(gtk_assistant_get_nth_page, pFpi) -//GO(gtk_assistant_get_page_complete, -//GO(gtk_assistant_get_page_header_image, +GO(gtk_assistant_get_page_complete, iFpp) +GO(gtk_assistant_get_page_has_padding, iFpp) +GO(gtk_assistant_get_page_header_image, pFpp) GO(gtk_assistant_get_page_side_image, pFpp) GO(gtk_assistant_get_page_title, pFpp) GO(gtk_assistant_get_page_type, uFpp) GO(gtk_assistant_get_type, LFv) GO(gtk_assistant_insert_page, iFppi) -//GO(gtk_assistant_new, +GO(gtk_assistant_new, pFv) +GO(gtk_assistant_next_page, vFp) GO(gtk_assistant_page_type_get_type, LFv) -//GO(gtk_assistant_prepend_page, +GO(gtk_assistant_prepend_page, iFpp) +GO(gtk_assistant_previous_page, vFp) GO(gtk_assistant_remove_action_widget, vFpp) -//GO(gtk_assistant_set_current_page, -//GO(gtk_assistant_set_forward_page_func, -//GO(gtk_assistant_set_page_complete, -//GO(gtk_assistant_set_page_header_image, +GO(gtk_assistant_remove_page, vFpi) +GO(gtk_assistant_set_current_page, vFpi) +//GOM(gtk_assistant_set_forward_page_func, vFpppp) +GO(gtk_assistant_set_page_complete, vFppi) +GO(gtk_assistant_set_page_has_padding, vFppi) +GO(gtk_assistant_set_page_header_image, vFppp) GO(gtk_assistant_set_page_side_image, vFppp) GO(gtk_assistant_set_page_title, vFppp) GO(gtk_assistant_set_page_type, vFppu) -//GO(gtk_assistant_update_buttons_state, +GO(gtk_assistant_update_buttons_state, vFp) GO(gtk_attach_options_get_type, LFv) -//GO(gtk_binding_entry_add_signal, +GO(gtk_baseline_position_get_type, LFv) +//GOM(gtk_binding_entry_add_signal, vFpuupuV) +GO(gtk_binding_entry_add_signal_from_string, uFpp) GO(gtk_binding_entry_add_signall, vFpuupp) -//GO(gtk_binding_entry_clear, GO(gtk_binding_entry_remove, vFpuu) -//GO(gtk_binding_entry_skip, -//GO(gtk_binding_parse_binding, +GO(gtk_binding_entry_skip, vFpuu) GO(gtk_bindings_activate, iFpuu) GO(gtk_bindings_activate_event, iFpp) GO(gtk_binding_set_activate, iFpuup) GO(gtk_binding_set_add_path, vFpupu) GO(gtk_binding_set_by_class, pFp) GO(gtk_binding_set_find, pFp) -//GO(gtk_binding_set_new, +GO(gtk_binding_set_new, pFp) GO(gtk_bin_get_child, pFp) GO(gtk_bin_get_type, LFv) +GO(gtk_boolean_cell_accessible_get_type, LFv) GO(gtk_border_copy, pFp) GO(gtk_border_free, vFp) GO(gtk_border_get_type, LFv) GO(gtk_border_new, pFv) +GO(gtk_border_style_get_type, LFv) +GO(gtk_box_get_baseline_position, uFp) +GO(gtk_box_get_center_widget, pFp) GO(gtk_box_get_homogeneous, iFp) GO(gtk_box_get_spacing, iFp) GO(gtk_box_get_type, LFv) GO(gtk_box_new, pFui) GO(gtk_box_pack_end, vFppiiu) -GO(gtk_box_pack_end_defaults, vFpp) GO(gtk_box_pack_start, vFppiiu) -GO(gtk_box_pack_start_defaults, vFpp) GO(gtk_box_query_child_packing, vFpppppp) GO(gtk_box_reorder_child, vFppi) +GO(gtk_box_set_baseline_position, vFpu) +GO(gtk_box_set_center_widget, vFpp) GO(gtk_box_set_child_packing, vFppiiuu) GO(gtk_box_set_homogeneous, vFpi) GO(gtk_box_set_spacing, vFpi) @@ -273,46 +346,56 @@ GO(gtk_buildable_add_child, vFpppp) GO(gtk_buildable_construct_child, pFppp) GO(gtk_buildable_custom_finished, vFppppp) GO(gtk_buildable_custom_tag_end, vFppppp) -GO(gtk_buildable_custom_tag_start, iFpppppp) +GO(gtk_buildable_custom_tag_start, iFpppppp) // Something to wrap? GO(gtk_buildable_get_internal_child, pFppp) GO(gtk_buildable_get_name, pFp) GO(gtk_buildable_get_type, LFv) GO(gtk_buildable_parser_finished, vFpp) GO(gtk_buildable_set_buildable_property, vFpppp) GO(gtk_buildable_set_name, vFpp) +//GOM(gtk_builder_add_callback_symbol, vFppp) +//GOM(gtk_builder_add_callback_symbols, vFpppV) GO(gtk_builder_add_from_file, uFppp) GO(gtk_builder_add_from_resource, uFppp) GO(gtk_builder_add_from_string, uFppLp) GO(gtk_builder_add_objects_from_file, uFpppp) +GO(gtk_builder_add_objects_from_resource, uFpppp) GO(gtk_builder_add_objects_from_string, uFppLpp) GOM(gtk_builder_connect_signals, vFEpp) GOM(gtk_builder_connect_signals_full, vFEppp) GO(gtk_builder_error_get_type, LFv) -GO(gtk_builder_error_quark, pFv) +GO(gtk_builder_error_quark, uFv) +GO(gtk_builder_expose_object, vFppp) +GO(gtk_builder_extend_with_template, uFppLpLp) +GO(gtk_builder_get_application, pFp) GO(gtk_builder_get_object, pFpp) GO(gtk_builder_get_objects, pFp) GO(gtk_builder_get_translation_domain, pFp) GO(gtk_builder_get_type, LFv) GO(gtk_builder_get_type_from_name, LFpp) +//GOM(gtk_builder_lookup_callback_symbol, pFpp) GO(gtk_builder_new, pFv) +GO(gtk_builder_new_from_file, pFp) +GO(gtk_builder_new_from_resource, pFp) +GO(gtk_builder_new_from_string, pFpl) +GO(gtk_builder_set_application, vFpp) GO(gtk_builder_set_translation_domain, vFpp) GO(gtk_builder_value_from_string, iFppppp) GO(gtk_builder_value_from_string_type, iFpLppp) -GO(gtk_button_action_get_type, LFv) -GO(gtk_button_box_get_child_ipadding, vFppp) +GO(gtk_button_accessible_get_type, LFv) +GO(gtk_button_box_get_child_non_homogeneous, iFpp) GO(gtk_button_box_get_child_secondary, iFpp) -GO(gtk_button_box_get_child_size, vFppp) GO(gtk_button_box_get_layout, uFp) GO(gtk_button_box_get_type, LFv) -GO(gtk_button_box_new, pFi) -GO(gtk_button_box_set_child_ipadding, vFpii) +GO(gtk_button_box_new, pFu) +GO(gtk_button_box_set_child_non_homogeneous, vFppi) GO(gtk_button_box_set_child_secondary, vFppi) -GO(gtk_button_box_set_child_size, vFpii) GO(gtk_button_box_set_layout, vFpu) GO(gtk_button_box_style_get_type, LFv) -//GO(gtk_button_clicked, -//GO(gtk_button_enter, +GO(gtk_button_clicked, vFp) +GO(gtk_button_enter, vFp) GO(gtk_button_get_alignment, vFppp) +GO(gtk_button_get_always_show_image, iFp) GO(gtk_button_get_event_window, pFp) GO(gtk_button_get_focus_on_click, iFp) GO(gtk_button_get_image, pFp) @@ -324,11 +407,13 @@ GO(gtk_button_get_use_stock, iFp) GO(gtk_button_get_use_underline, iFp) GO(gtk_button_leave, vFp) GO(gtk_button_new, pFv) +GO(gtk_button_new_from_icon_name, pFpu) GO(gtk_button_new_from_stock, pFp) GO(gtk_button_new_with_label, pFp) GO(gtk_button_new_with_mnemonic, pFp) GO(gtk_button_pressed, vFp) GO(gtk_button_released, vFp) +GO(gtk_button_role_get_type, LFv) GO(gtk_button_set_alignment, vFpff) GO(gtk_button_set_always_show_image, vFpi) GO(gtk_button_set_focus_on_click, vFpi) @@ -340,32 +425,111 @@ GO(gtk_button_set_use_stock, vFpi) GO(gtk_button_set_use_underline, vFpi) GO(gtk_buttons_type_get_type, LFv) GO(gtk_cairo_should_draw_window, iFpp) -//GO(gtk_calendar_clear_marks, -//GO(gtk_calendar_display_options, +GO(gtk_cairo_transform_to_window, vFppp) +GO(gtk_calendar_clear_marks, vFp) GO(gtk_calendar_display_options_get_type, LFv) -//GO(gtk_calendar_freeze, GO(gtk_calendar_get_date, vFpppp) +GO(gtk_calendar_get_day_is_marked, iFpu) GO(gtk_calendar_get_detail_height_rows, iFp) -//GO(gtk_calendar_get_detail_width_chars, +GO(gtk_calendar_get_detail_width_chars, iFp) GO(gtk_calendar_get_display_options, uFp) GO(gtk_calendar_get_type, LFv) -//GO(gtk_calendar_mark_day, -//GO(gtk_calendar_new, -//GO(gtk_calendar_select_day, +GO(gtk_calendar_mark_day, vFpu) +GO(gtk_calendar_new, pFv) +GO(gtk_calendar_select_day, vFpu) GO(gtk_calendar_select_month, vFpuu) -//GO(gtk_calendar_set_detail_func, +//GOM(gtk_calendar_set_detail_func, vFpppp) GO(gtk_calendar_set_detail_height_rows, vFpi) -//GO(gtk_calendar_set_detail_width_chars, +GO(gtk_calendar_set_detail_width_chars, vFpi) GO(gtk_calendar_set_display_options, vFpu) -//GO(gtk_calendar_thaw, GO(gtk_calendar_unmark_day, vFpu) -//GO(gtk_cell_editable_editing_done, +GO(gtk_cell_accessible_get_type, LFv) +GO(gtk_cell_accessible_parent_activate, vFpp) +GO(gtk_cell_accessible_parent_edit, vFpp) +GO(gtk_cell_accessible_parent_expand_collapse, vFpp) +GO(gtk_cell_accessible_parent_get_cell_area, vFppp) +GO(gtk_cell_accessible_parent_get_cell_extents, vFppppppu) +GO(gtk_cell_accessible_parent_get_cell_position, vFpppp) +GO(gtk_cell_accessible_parent_get_child_index, iFpp) +GO(gtk_cell_accessible_parent_get_column_header_cells, pFpp) +GO(gtk_cell_accessible_parent_get_renderer_state, uFpp) +GO(gtk_cell_accessible_parent_get_row_header_cells, pFpp) +GO(gtk_cell_accessible_parent_get_type, LFv) +GO(gtk_cell_accessible_parent_grab_focus, iFpp) +GO(gtk_cell_accessible_parent_update_relationset, vFppp) +GO(gtk_cell_area_activate, iFppppui) +GO(gtk_cell_area_activate_cell, iFpppppu) +GO(gtk_cell_area_add, vFpp) +GO(gtk_cell_area_add_focus_sibling, vFppp) +//GOM(gtk_cell_area_add_with_properties, vFpppV) +GO(gtk_cell_area_apply_attributes, vFpppii) +GO(gtk_cell_area_attribute_connect, vFpppi) +GO(gtk_cell_area_attribute_disconnect, vFppp) +GO(gtk_cell_area_attribute_get_column, iFppp) +GO(gtk_cell_area_box_get_spacing, iFp) +GO(gtk_cell_area_box_get_type, LFv) +GO(gtk_cell_area_box_new, pFv) +GO(gtk_cell_area_box_pack_end, vFppiii) +GO(gtk_cell_area_box_pack_start, vFppiii) +GO(gtk_cell_area_box_set_spacing, vFpi) +//GOM(gtk_cell_area_cell_get, vFpppV) +GO(gtk_cell_area_cell_get_property, vFpppp) +//GOM(gtk_cell_area_cell_get_valist, vFpppA) +//GOM(gtk_cell_area_cell_set, vFpppV) +GO(gtk_cell_area_cell_set_property, vFpppp) +//GOM(gtk_cell_area_cell_set_valist, vFpppA) +//GOM(gtk_cell_area_class_find_cell_property, pFpp) +//GOM(gtk_cell_area_class_install_cell_property, vFpup) +//GOM(gtk_cell_area_class_list_cell_properties, pFpp) +GO(gtk_cell_area_context_allocate, vFpii) +GO(gtk_cell_area_context_get_allocation, vFppp) +GO(gtk_cell_area_context_get_area, pFp) +GO(gtk_cell_area_context_get_preferred_height, vFppp) +GO(gtk_cell_area_context_get_preferred_height_for_width, vFpipp) +GO(gtk_cell_area_context_get_preferred_width, vFppp) +GO(gtk_cell_area_context_get_preferred_width_for_height, vFpipp) +GO(gtk_cell_area_context_get_type, LFv) +GO(gtk_cell_area_context_push_preferred_height, vFpii) +GO(gtk_cell_area_context_push_preferred_width, vFpii) +GO(gtk_cell_area_context_reset, vFp) +GO(gtk_cell_area_copy_context, pFpp) +GO(gtk_cell_area_create_context, pFp) +GO(gtk_cell_area_event, iFpppppu) +GO(gtk_cell_area_focus, iFpu) +//GOM(gtk_cell_area_foreach, vFppp) +//GOM(gtk_cell_area_foreach_alloc, vFppppppp) +GO(gtk_cell_area_get_cell_allocation, vFpppppp) +GO(gtk_cell_area_get_cell_at_position, pFppppiip) +GO(gtk_cell_area_get_current_path_string, pFp) +GO(gtk_cell_area_get_edited_cell, pFp) +GO(gtk_cell_area_get_edit_widget, pFp) +GO(gtk_cell_area_get_focus_cell, pFp) +GO(gtk_cell_area_get_focus_from_sibling, pFpp) +GO(gtk_cell_area_get_focus_siblings, pFpp) +GO(gtk_cell_area_get_preferred_height, vFppppp) +GO(gtk_cell_area_get_preferred_height_for_width, vFpppipp) +GO(gtk_cell_area_get_preferred_width, vFppppp) +GO(gtk_cell_area_get_preferred_width_for_height, vFpppipp) +GO(gtk_cell_area_get_request_mode, uFp) +GO(gtk_cell_area_get_type, LFv) +GO(gtk_cell_area_has_renderer, iFpp) +GO(gtk_cell_area_inner_cell_area, vFpppp) +GO(gtk_cell_area_is_activatable, iFp) +GO(gtk_cell_area_is_focus_sibling, iFppp) +GO(gtk_cell_area_remove, vFpp) +GO(gtk_cell_area_remove_focus_sibling, vFppp) +GO(gtk_cell_area_render, vFppppppui) +GO(gtk_cell_area_request_renderer, vFppupipp) +GO(gtk_cell_area_set_focus_cell, vFpp) +GO(gtk_cell_area_stop_editing, vFpi) +GO(gtk_cell_editable_editing_done, vFp) GO(gtk_cell_editable_get_type, LFv) -//GO(gtk_cell_editable_remove_widget, +GO(gtk_cell_editable_remove_widget, vFp) GO(gtk_cell_editable_start_editing, vFpp) GO(gtk_cell_layout_add_attribute, vFpppi) GO(gtk_cell_layout_clear, vFp) GO(gtk_cell_layout_clear_attributes, vFpp) +GO(gtk_cell_layout_get_area, pFp) GO(gtk_cell_layout_get_cells, pFp) GO(gtk_cell_layout_get_type, LFv) GO(gtk_cell_layout_pack_end, vFppi) @@ -375,33 +539,44 @@ GO(gtk_cell_layout_set_attributes, vFpppppppppp) // vaarg //GOM(gtk_cell_layout_set_cell_data_func, vFEppppp) GO(gtk_cell_renderer_accel_get_type, LFv) GO(gtk_cell_renderer_accel_mode_get_type, LFv) -//GO(gtk_cell_renderer_accel_new, +GO(gtk_cell_renderer_accel_new, pFv) GO(gtk_cell_renderer_activate, iFppppppu) +//GOM(gtk_cell_renderer_class_set_accessible_type, vFpL) GO(gtk_cell_renderer_combo_get_type, LFv) -//GO(gtk_cell_renderer_combo_new, -//GO(gtk_cell_renderer_editing_canceled, +GO(gtk_cell_renderer_combo_new, pFv) +GO(gtk_cell_renderer_get_aligned_area, vFppupp) GO(gtk_cell_renderer_get_alignment, vFppp) -//GO(gtk_cell_renderer_get_fixed_size, +GO(gtk_cell_renderer_get_fixed_size, vFppp) GO(gtk_cell_renderer_get_padding, vFppp) -//GO(gtk_cell_renderer_get_sensitive, +GO(gtk_cell_renderer_get_preferred_height, vFpppp) +GO(gtk_cell_renderer_get_preferred_height_for_width, vFppipp) +GO(gtk_cell_renderer_get_preferred_size, vFpppp) +GO(gtk_cell_renderer_get_preferred_width, vFpppp) +GO(gtk_cell_renderer_get_preferred_width_for_height, vFppipp) +GO(gtk_cell_renderer_get_request_mode, uFp) +GO(gtk_cell_renderer_get_sensitive, iFp) GO(gtk_cell_renderer_get_size, vFppppppp) +GO(gtk_cell_renderer_get_state, uFppu) GO(gtk_cell_renderer_get_type, LFv) -//GO(gtk_cell_renderer_get_visible, +GO(gtk_cell_renderer_get_visible, iFp) +//GO(gtk_cell_renderer_graph_get_type, +//GO(gtk_cell_renderer_graph_new, +GO(gtk_cell_renderer_is_activatable, iFp) GO(gtk_cell_renderer_mode_get_type, LFv) GO(gtk_cell_renderer_pixbuf_get_type, LFv) GO(gtk_cell_renderer_pixbuf_new, pFv) GO(gtk_cell_renderer_progress_get_type, LFv) -//GO(gtk_cell_renderer_progress_new, +GO(gtk_cell_renderer_progress_new, pFv) GO(gtk_cell_renderer_render, vFpppppu) GO(gtk_cell_renderer_set_alignment, vFpff) -//GO(gtk_cell_renderer_set_fixed_size, +GO(gtk_cell_renderer_set_fixed_size, vFpii) GO(gtk_cell_renderer_set_padding, vFpii) -//GO(gtk_cell_renderer_set_sensitive, -//GO(gtk_cell_renderer_set_visible, +GO(gtk_cell_renderer_set_sensitive, vFpi) +GO(gtk_cell_renderer_set_visible, vFpi) GO(gtk_cell_renderer_spin_get_type, LFv) GO(gtk_cell_renderer_spinner_get_type, LFv) -//GO(gtk_cell_renderer_spinner_new, -//GO(gtk_cell_renderer_spin_new, +GO(gtk_cell_renderer_spinner_new, pFv) +GO(gtk_cell_renderer_spin_new, pFv) GO(gtk_cell_renderer_start_editing, pFppppppu) GO(gtk_cell_renderer_state_get_type, LFv) GO(gtk_cell_renderer_stop_editing, vFpi) @@ -416,23 +591,28 @@ GO(gtk_cell_renderer_toggle_new, pFv) GO(gtk_cell_renderer_toggle_set_activatable, vFpi) GO(gtk_cell_renderer_toggle_set_active, vFpi) GO(gtk_cell_renderer_toggle_set_radio, vFpi) -GO(gtk_cell_type_get_type, LFv) -//GO(gtk_cell_view_get_cell_renderers, GO(gtk_cell_view_get_displayed_row, pFp) +GO(gtk_cell_view_get_draw_sensitive, iFp) +GO(gtk_cell_view_get_fit_model, iFp) GO(gtk_cell_view_get_model, pFp) GO(gtk_cell_view_get_size_of_row, iFppp) GO(gtk_cell_view_get_type, LFv) -//GO(gtk_cell_view_new, -//GO(gtk_cell_view_new_with_markup, +GO(gtk_cell_view_new, pFv) +GO(gtk_cell_view_new_with_context, pFpp) +GO(gtk_cell_view_new_with_markup, pFp) GO(gtk_cell_view_new_with_pixbuf, pFp) -//GO(gtk_cell_view_new_with_text, +GO(gtk_cell_view_new_with_text, pFp) GO(gtk_cell_view_set_background_color, vFpp) +GO(gtk_cell_view_set_background_rgba, vFpp) GO(gtk_cell_view_set_displayed_row, vFpp) +GO(gtk_cell_view_set_draw_sensitive, vFpi) +GO(gtk_cell_view_set_fit_model, vFpi) GO(gtk_cell_view_set_model, vFpp) GO(gtk_check_button_get_type, LFv) GO(gtk_check_button_new, pFv) GO(gtk_check_button_new_with_label, pFp) GO(gtk_check_button_new_with_mnemonic, pFp) +GO(gtk_check_menu_item_accessible_get_type, LFv) GO(gtk_check_menu_item_get_active, iFp) GO(gtk_check_menu_item_get_draw_as_radio, iFp) GO(gtk_check_menu_item_get_inconsistent, iFp) @@ -443,7 +623,6 @@ GO(gtk_check_menu_item_new_with_mnemonic, pFp) GO(gtk_check_menu_item_set_active, vFpi) GO(gtk_check_menu_item_set_draw_as_radio, vFpi) GO(gtk_check_menu_item_set_inconsistent, vFpi) -GO(gtk_check_menu_item_set_show_toggle, vFpi) GO(gtk_check_menu_item_toggled, vFp) GO(gtk_check_version, pFuuu) GO(gtk_clipboard_clear, vFp) @@ -452,6 +631,7 @@ GO(gtk_clipboard_get_default, pFp) GO(gtk_clipboard_get_display, pFp) GO(gtk_clipboard_get_for_display, pFpp) GO(gtk_clipboard_get_owner, pFp) +GO(gtk_clipboard_get_selection, pFp) GO(gtk_clipboard_get_type, LFv) //GOM(gtk_clipboard_request_contents, vFEpppp) //GOM(gtk_clipboard_request_image, vFEppp) @@ -476,83 +656,9 @@ GO(gtk_clipboard_wait_is_rich_text_available, iFpp) GO(gtk_clipboard_wait_is_target_available, iFpp) GO(gtk_clipboard_wait_is_text_available, iFp) GO(gtk_clipboard_wait_is_uris_available, iFp) -GO(gtk_clist_append, iFpp) -GO(gtk_clist_clear, vFp) -GO(gtk_clist_columns_autosize, iFp) -GO(gtk_clist_column_title_active, vFpi) -GO(gtk_clist_column_title_passive, vFpi) -GO(gtk_clist_column_titles_active, vFp) -GO(gtk_clist_column_titles_hide, vFp) -GO(gtk_clist_column_titles_passive, vFp) -GO(gtk_clist_column_titles_show, vFp) -GO(gtk_clist_drag_pos_get_type, LFv) -GO(gtk_clist_find_row_from_data, iFpp) -GO(gtk_clist_freeze, vFp) -GO(gtk_clist_get_cell_style, pFpii) -GO(gtk_clist_get_cell_type, iFpii) -GO(gtk_clist_get_column_title, pFpi) -GO(gtk_clist_get_column_widget, pFpi) -GO(gtk_clist_get_hadjustment, pFp) -GO(gtk_clist_get_pixmap, iFpiipp) -GO(gtk_clist_get_pixtext, iFpiipppp) -GO(gtk_clist_get_row_data, pFpi) -GO(gtk_clist_get_row_style, pFpi) -GO(gtk_clist_get_selectable, iFpi) -GO(gtk_clist_get_selection_info, iFpiipp) -GO(gtk_clist_get_text, iFpiip) -GO(gtk_clist_get_type, LFv) -GO(gtk_clist_get_vadjustment, pFp) -GO(gtk_clist_insert, iFpip) -GO(gtk_clist_moveto, vFpiiff) -GO(gtk_clist_new, pFi) -GO(gtk_clist_new_with_titles, pFip) -GO(gtk_clist_optimal_column_width, iFpi) -GO(gtk_clist_prepend, iFpp) -GO(gtk_clist_remove, vFpi) -GO(gtk_clist_row_is_visible, iFpi) -GO(gtk_clist_row_move, vFpii) -GO(gtk_clist_select_all, vFp) -GO(gtk_clist_select_row, vFpii) -GO(gtk_clist_set_auto_sort, vFpi) -GO(gtk_clist_set_background, vFpip) -GO(gtk_clist_set_button_actions, vFpiC) -GO(gtk_clist_set_cell_style, vFpiip) -GO(gtk_clist_set_column_auto_resize, iFpi) -GO(gtk_clist_set_column_justification, vFpii) -GO(gtk_clist_set_column_max_width, vFpii) -GO(gtk_clist_set_column_min_width, vFpii) -GO(gtk_clist_set_column_resizeable, vFpii) -GO(gtk_clist_set_column_title, vFpip) -GO(gtk_clist_set_column_visibility, vFpii) -GO(gtk_clist_set_column_widget, vFpip) -GO(gtk_clist_set_column_width, vFpii) -//GOM(gtk_clist_set_compare_func, vFEpp) -GO(gtk_clist_set_foreground, vFpip) -GO(gtk_clist_set_hadjustment, vFpp) -GO(gtk_clist_set_pixmap, vFpiipp) -GO(gtk_clist_set_pixtext, vFpiipCpp) -GO(gtk_clist_set_reorderable, vFpi) -GO(gtk_clist_set_row_data, vFpip) -//GOM(gtk_clist_set_row_data_full, vFpipp) -GO(gtk_clist_set_row_height, vFpu) -GO(gtk_clist_set_row_style, vFpip) -GO(gtk_clist_set_selectable, vFpii) -GO(gtk_clist_set_selection_mode, vFpi) -GO(gtk_clist_set_shadow_type, vFpi) -GO(gtk_clist_set_shift, vFpiiii) -GO(gtk_clist_set_sort_column, vFpi) -GO(gtk_clist_set_sort_type, vFpi) -GO(gtk_clist_set_text, vFpiip) -GO(gtk_clist_set_use_drag_icons, vFpi) -GO(gtk_clist_set_vadjustment, vFpp) -GO(gtk_clist_sort, vFp) -GO(gtk_clist_swap_rows, vFpii) -GO(gtk_clist_thaw, vFp) -GO(gtk_clist_undo_selection, vFp) -GO(gtk_clist_unselect_all, vFp) -GO(gtk_clist_unselect_row, vFpii) GO(gtk_color_button_get_alpha, WFp) GO(gtk_color_button_get_color, vFpp) +GO(gtk_color_button_get_rgba, vFpp) GO(gtk_color_button_get_title, pFp) GO(gtk_color_button_get_type, LFv) GO(gtk_color_button_get_use_alpha, iFp) @@ -564,74 +670,87 @@ GO(gtk_color_button_set_color, vFpp) GO(gtk_color_button_set_rgba, vFpp) GO(gtk_color_button_set_title, vFpp) GO(gtk_color_button_set_use_alpha, vFpi) +GO(gtk_color_chooser_add_palette, vFpuiip) GO(gtk_color_chooser_dialog_get_type, LFv) +GO(gtk_color_chooser_dialog_new, pFpp) +GO(gtk_color_chooser_get_rgba, vFpp) GO(gtk_color_chooser_get_type, LFv) +GO(gtk_color_chooser_get_use_alpha, iFp) +GO(gtk_color_chooser_set_rgba, vFpp) +GO(gtk_color_chooser_set_use_alpha, vFpi) +GO(gtk_color_chooser_widget_get_type, LFv) +GO(gtk_color_chooser_widget_new, pFv) +//GO(gtk_color_picker_get_type, +//GO(gtk_color_picker_kwin_new, +//GO(gtk_color_picker_new, +//GO(gtk_color_picker_pick, +//GO(gtk_color_picker_pick_finish, +//GO(gtk_color_picker_portal_new, +//GO(gtk_color_picker_shell_new, GO(gtk_color_selection_dialog_get_color_selection, pFp) GO(gtk_color_selection_dialog_get_type, LFv) GO(gtk_color_selection_dialog_new, pFp) -GO(gtk_color_selection_get_color, vFpp) GO(gtk_color_selection_get_current_alpha, WFp) GO(gtk_color_selection_get_current_color, vFpp) +GO(gtk_color_selection_get_current_rgba, vFpp) GO(gtk_color_selection_get_has_opacity_control, iFp) GO(gtk_color_selection_get_has_palette, iFp) GO(gtk_color_selection_get_previous_alpha, WFp) GO(gtk_color_selection_get_previous_color, vFpp) +GO(gtk_color_selection_get_previous_rgba, vFpp) GO(gtk_color_selection_get_type, LFv) GO(gtk_color_selection_is_adjusting, iFp) GO(gtk_color_selection_new, pFv) GO(gtk_color_selection_palette_from_string, iFppp) GO(gtk_color_selection_palette_to_string, pFpi) -//GOM(gtk_color_selection_set_change_palette_hook, pFEp) //GOM(gtk_color_selection_set_change_palette_with_screen_hook, pFEp) -GO(gtk_color_selection_set_color, vFpp) GO(gtk_color_selection_set_current_alpha, vFpW) GO(gtk_color_selection_set_current_color, vFpp) +GO(gtk_color_selection_set_current_rgba, vFpp) GO(gtk_color_selection_set_has_opacity_control, vFpi) GO(gtk_color_selection_set_has_palette, vFpi) GO(gtk_color_selection_set_previous_alpha, vFpW) GO(gtk_color_selection_set_previous_color, vFpp) -GO(gtk_color_selection_set_update_policy, vFpi) -GO(gtk_combo_box_append_text, vFpp) -GO(gtk_combo_box_entry_get_text_column, iFp) -GO(gtk_combo_box_entry_get_type, LFv) -GO(gtk_combo_box_entry_new, pFv) -GO(gtk_combo_box_entry_new_text, pFv) -GO(gtk_combo_box_entry_new_with_model, pFpi) -GO(gtk_combo_box_entry_set_text_column, vFpi) +GO(gtk_color_selection_set_previous_rgba, vFpp) +GO(gtk_combo_box_accessible_get_type, LFv) GO(gtk_combo_box_get_active, iFp) +GO(gtk_combo_box_get_active_id, pFp) GO(gtk_combo_box_get_active_iter, iFpp) -GO(gtk_combo_box_get_active_text, pFp) GO(gtk_combo_box_get_add_tearoffs, iFp) GO(gtk_combo_box_get_button_sensitivity, uFp) GO(gtk_combo_box_get_column_span_column, iFp) GO(gtk_combo_box_get_entry_text_column, iFp) GO(gtk_combo_box_get_focus_on_click, iFp) GO(gtk_combo_box_get_has_entry, iFp) +GO(gtk_combo_box_get_id_column, iFp) GO(gtk_combo_box_get_model, pFp) GO(gtk_combo_box_get_popup_accessible, pFp) +GO(gtk_combo_box_get_popup_fixed_width, iFp) //GOM(gtk_combo_box_get_row_separator_func, pFEp) GO(gtk_combo_box_get_row_span_column, iFp) GO(gtk_combo_box_get_title, pFp) GO(gtk_combo_box_get_type, LFv) GO(gtk_combo_box_get_wrap_width, iFp) -GO(gtk_combo_box_insert_text, vFpip) GO(gtk_combo_box_new, pFv) -GO(gtk_combo_box_new_text, pFv) +GO(gtk_combo_box_new_with_area, pFp) +GO(gtk_combo_box_new_with_area_and_entry, pFp) GO(gtk_combo_box_new_with_entry, pFv) GO(gtk_combo_box_new_with_model, pFp) GO(gtk_combo_box_new_with_model_and_entry, pFp) GO(gtk_combo_box_popdown, vFp) GO(gtk_combo_box_popup, vFp) -GO(gtk_combo_box_prepend_text, vFpp) -GO(gtk_combo_box_remove_text, vFpi) +GO(gtk_combo_box_popup_for_device, vFpp) GO(gtk_combo_box_set_active, vFpi) +GO(gtk_combo_box_set_active_id, iFpp) GO(gtk_combo_box_set_active_iter, vFpp) GO(gtk_combo_box_set_add_tearoffs, vFpi) GO(gtk_combo_box_set_button_sensitivity, vFpu) GO(gtk_combo_box_set_column_span_column, vFpi) GO(gtk_combo_box_set_entry_text_column, vFpi) GO(gtk_combo_box_set_focus_on_click, vFpi) +GO(gtk_combo_box_set_id_column, vFpi) GO(gtk_combo_box_set_model, vFpp) +GO(gtk_combo_box_set_popup_fixed_width, vFpi) //GOM(gtk_combo_box_set_row_separator_func, vFEpppp) GO(gtk_combo_box_set_row_span_column, vFpi) GO(gtk_combo_box_set_title, vFpp) @@ -640,33 +759,33 @@ GO(gtk_combo_box_text_append, vFppp) GO(gtk_combo_box_text_append_text, vFpp) GO(gtk_combo_box_text_get_active_text, pFp) GO(gtk_combo_box_text_get_type, LFv) +GO(gtk_combo_box_text_insert, vFpipp) GO(gtk_combo_box_text_insert_text, vFpip) GO(gtk_combo_box_text_new, pFv) GO(gtk_combo_box_text_new_with_entry, pFv) +GO(gtk_combo_box_text_prepend, vFppp) GO(gtk_combo_box_text_prepend_text, vFpp) GO(gtk_combo_box_text_remove, vFpi) GO(gtk_combo_box_text_remove_all, vFp) -GO(gtk_combo_disable_activate, vFp) -GO(gtk_combo_get_type, LFv) -GO(gtk_combo_new, pFv) -GO(gtk_combo_set_case_sensitive, vFpi) -GO(gtk_combo_set_item_string, vFppp) -GO(gtk_combo_set_popdown_strings, vFpp) -GO(gtk_combo_set_use_arrows, vFpi) -GO(gtk_combo_set_use_arrows_always, vFpi) -GO(gtk_combo_set_value_in_list, vFpii) GO(gtk_container_accessible_get_type, LFv) GO(gtk_container_add, vFpp) GO(gtk_container_add_with_properties, vFpppppppppppp) //vaarg +GO(gtk_container_cell_accessible_add_child, vFpp) +GO(gtk_container_cell_accessible_get_children, pFp) +GO(gtk_container_cell_accessible_get_type, LFv) +GO(gtk_container_cell_accessible_new, pFv) +GO(gtk_container_cell_accessible_remove_child, vFpp) GO(gtk_container_check_resize, vFp) -//GO2(gtk_container_child_get, vFpppV, gtk_container_child_get_valist) +//GOM(gtk_container_child_get, vFpppV) GO(gtk_container_child_get_property, vFpppp) -//GO(gtk_container_child_get_valist, vFpppp) -//GO2(gtk_container_child_set, vFpppV, gtk_container_child_set_valist) +//GOM(gtk_container_child_get_valist, vFpppA) +GO(gtk_container_child_notify, vFppp) +GO(gtk_container_child_notify_by_pspec, vFppp) +//GOM(gtk_container_child_set, vFpppV) GO(gtk_container_child_set_property, vFpppp) -//GO(gtk_container_child_set_valist, vFpppp) +//GOM(gtk_container_child_set_valist, vFpppA) GO(gtk_container_child_type, LFp) -GO(gtk_container_class_find_child_property, pFpp) +GO(gtk_container_class_find_child_property, pFpp) // Something to wrap? GO(gtk_container_class_install_child_property, vFpup) GO(gtk_container_class_list_child_properties, pFpp) GOM(gtk_container_forall, vFEppp) @@ -678,9 +797,10 @@ GO(gtk_container_get_focus_chain, iFpp) GO(gtk_container_get_focus_child, pFp) GO(gtk_container_get_focus_hadjustment, pFp) GO(gtk_container_get_focus_vadjustment, pFp) +GO(gtk_container_get_path_for_child, pFpp) GO(gtk_container_get_resize_mode, uFp) GO(gtk_container_get_type, LFv) -GO(gtk_container_propagate_expose, vFppp) +GO(gtk_container_propagate_draw, vFppp) GO(gtk_container_remove, vFpp) GO(gtk_container_resize_children, vFp) GO(gtk_container_set_border_width, vFpu) @@ -692,6 +812,8 @@ GO(gtk_container_set_reallocate_redraws, vFpi) GO(gtk_container_set_resize_mode, vFpu) GO(gtk_container_unset_focus_chain, vFp) GO(gtk_corner_type_get_type, LFv) +GO(gtk_css_provider_error_get_type, LFv) +GO(gtk_css_provider_error_quark, uFv) GO(gtk_css_provider_get_default, pFv) GO(gtk_css_provider_get_named, pFpp) GO(gtk_css_provider_get_type, LFv) @@ -708,120 +830,40 @@ GO(gtk_css_section_get_parent, pFp) GO(gtk_css_section_get_section_type, uFp) GO(gtk_css_section_get_start_line, uFp) GO(gtk_css_section_get_start_position, uFp) +GO(gtk_css_section_get_type, LFv) GO(gtk_css_section_ref, pFp) +GO(gtk_css_section_type_get_type, LFv) GO(gtk_css_section_unref, vFp) -//GO(gtk_ctree_collapse, -//GO(gtk_ctree_collapse_recursive, -//GO(gtk_ctree_collapse_to_depth, -//GO(gtk_ctree_expand, -GO(gtk_ctree_expander_style_get_type, LFv) -//GO(gtk_ctree_expand_recursive, -//GO(gtk_ctree_expand_to_depth, -GO(gtk_ctree_expansion_type_get_type, LFv) -//GO(gtk_ctree_export_to_gnode, -//GO(gtk_ctree_find, -//GO(gtk_ctree_find_all_by_row_data, -//GO(gtk_ctree_find_all_by_row_data_custom, -//GO(gtk_ctree_find_by_row_data, -//GO(gtk_ctree_find_by_row_data_custom, -//GO(gtk_ctree_find_node_ptr, -//GO(gtk_ctree_get_node_info, -GO(gtk_ctree_get_type, LFv) -//GO(gtk_ctree_insert_gnode, -//GO(gtk_ctree_insert_node, -//GO(gtk_ctree_is_ancestor, -//GO(gtk_ctree_is_hot_spot, -//GO(gtk_ctree_is_viewable, -//GO(gtk_ctree_last, -GO(gtk_ctree_line_style_get_type, LFv) -//GO(gtk_ctree_move, -//GO(gtk_ctree_new, -//GO(gtk_ctree_new_with_titles, -//GO(gtk_ctree_node_get_cell_style, -//GO(gtk_ctree_node_get_cell_type, -//GO(gtk_ctree_node_get_pixmap, -//GO(gtk_ctree_node_get_pixtext, -//GO(gtk_ctree_node_get_row_data, -//GO(gtk_ctree_node_get_row_style, -//GO(gtk_ctree_node_get_selectable, -//GO(gtk_ctree_node_get_text, -GO(gtk_ctree_node_get_type, LFv) -//GO(gtk_ctree_node_is_visible, -//GO(gtk_ctree_node_moveto, -//GO(gtk_ctree_node_nth, -//GO(gtk_ctree_node_set_background, -//GO(gtk_ctree_node_set_cell_style, -//GO(gtk_ctree_node_set_foreground, -//GO(gtk_ctree_node_set_pixmap, -//GO(gtk_ctree_node_set_pixtext, -//GO(gtk_ctree_node_set_row_data, -//GO(gtk_ctree_node_set_row_data_full, -//GO(gtk_ctree_node_set_row_style, -//GO(gtk_ctree_node_set_selectable, -//GO(gtk_ctree_node_set_shift, -//GO(gtk_ctree_node_set_text, -GO(gtk_ctree_pos_get_type, LFv) -//GO(gtk_ctree_post_recursive, -//GO(gtk_ctree_post_recursive_to_depth, -//GO(gtk_ctree_pre_recursive, -//GO(gtk_ctree_pre_recursive_to_depth, -//GO(gtk_ctree_real_select_recursive, -//GO(gtk_ctree_remove_node, -//GO(gtk_ctree_select, -//GO(gtk_ctree_select_recursive, -//GO(gtk_ctree_set_drag_compare_func, -//GO(gtk_ctree_set_expander_style, -//GO(gtk_ctree_set_indent, -//GO(gtk_ctree_set_line_style, -//GO(gtk_ctree_set_node_info, -//GO(gtk_ctree_set_show_stub, -//GO(gtk_ctree_set_spacing, -//GO(gtk_ctree_sort_node, -//GO(gtk_ctree_sort_recursive, -//GO(gtk_ctree_toggle_expansion, -//GO(gtk_ctree_toggle_expansion_recursive, -//GO(gtk_ctree_unselect, -//GO(gtk_ctree_unselect_recursive, -GO(gtk_curve_get_type, LFv) -GO(gtk_curve_get_vector, vFpip) -GO(gtk_curve_new, pFv) -GO(gtk_curve_reset, vFp) -GO(gtk_curve_set_curve_type, vFpi) -GO(gtk_curve_set_gamma, vFpf) -GO(gtk_curve_set_range, vFpffff) -GO(gtk_curve_set_vector, vFpip) -GO(gtk_curve_type_get_type, LFv) GO(gtk_custom_paper_unix_dialog_get_type, LFv) GO(gtk_debug_flag_get_type, LFv) -GO(gtk_decorated_window_calculate_frame_size, vFp) -GO(gtk_decorated_window_init, vFp) -GO(gtk_decorated_window_move_resize_window, vFpiiii) -GO(gtk_decorated_window_set_title, vFpp) GO(gtk_delete_type_get_type, LFv) GO(gtk_dest_defaults_get_type, LFv) +GO(gtk_device_grab_add, vFppi) +GO(gtk_device_grab_remove, vFpp) GO(gtk_dialog_add_action_widget, vFppi) GO(gtk_dialog_add_button, pFppi) GOM(gtk_dialog_add_buttons, vFEppV) GO(gtk_dialog_flags_get_type, LFv) GO(gtk_dialog_get_action_area, pFp) GO(gtk_dialog_get_content_area, pFp) -GO(gtk_dialog_get_has_separator, iFp) +GO(gtk_dialog_get_header_bar, pFp) GO(gtk_dialog_get_response_for_widget, iFpp) GO(gtk_dialog_get_type, LFv) GO(gtk_dialog_get_widget_for_response, pFpi) GO(gtk_dialog_new, pFv) -GO(gtk_dialog_new_with_buttons, pFppipppppppppppp) //vaarg +GO(gtk_dialog_new_with_buttons, pFppupppppppppppp) //vaarg GO(gtk_dialog_response, vFpi) GO(gtk_dialog_run, iFp) GO(gtk_dialog_set_alternative_button_order, vFpiiiiiiiiiiiiiiiiii) // vaarg, should wrap using gtk_dialog_set_alternative_button_order_from_array GO(gtk_dialog_set_alternative_button_order_from_array, vFpip) GO(gtk_dialog_set_default_response, vFpi) -GO(gtk_dialog_set_has_separator, vFpi) GO(gtk_dialog_set_response_sensitive, vFpii) GO(gtk_direction_type_get_type, LFv) GO(gtk_disable_setlocale, vFv) GO(gtk_distribute_natural_allocation, iFiup) GO(gtk_drag_begin, pFppuip) +GO(gtk_drag_begin_with_coordinates, pFppuipii) +GO(gtk_drag_cancel, vFp) GO(gtk_drag_check_threshold, iFpiiii) GO(gtk_drag_dest_add_image_targets, vFp) GO(gtk_drag_dest_add_text_targets, vFp) @@ -839,50 +881,28 @@ GO(gtk_drag_get_data, vFpppu) GO(gtk_drag_get_source_widget, pFp) GO(gtk_drag_highlight, vFp) GO(gtk_drag_result_get_type, LFv) -GO(gtk_drag_set_default_icon, vFpppii) GO(gtk_drag_set_icon_default, vFp) +GO(gtk_drag_set_icon_gicon, vFppii) GO(gtk_drag_set_icon_name, vFppii) GO(gtk_drag_set_icon_pixbuf, vFppii) -GO(gtk_drag_set_icon_pixmap, vFppppii) GO(gtk_drag_set_icon_stock, vFppii) +GO(gtk_drag_set_icon_surface, vFpp) GO(gtk_drag_set_icon_widget, vFppii) GO(gtk_drag_source_add_image_targets, vFp) GO(gtk_drag_source_add_text_targets, vFp) GO(gtk_drag_source_add_uri_targets, vFp) GO(gtk_drag_source_get_target_list, pFp) GO(gtk_drag_source_set, vFpupiu) -GO(gtk_drag_source_set_icon, vFpppp) +GO(gtk_drag_source_set_icon_gicon, vFpp) GO(gtk_drag_source_set_icon_name, vFpp) GO(gtk_drag_source_set_icon_pixbuf, vFpp) GO(gtk_drag_source_set_icon_stock, vFpp) GO(gtk_drag_source_set_target_list, vFpp) GO(gtk_drag_source_unset, vFp) GO(gtk_drag_unhighlight, vFp) -GO(gtk_draw_arrow, vFppiiiiiiii) -GO(gtk_draw_box, vFppiiiiii) -GO(gtk_draw_box_gap, vFppiiiiiiiii) -GO(gtk_draw_check, vFppiiiiii) -GO(gtk_draw_diamond, vFppiiiiii) -GO(gtk_draw_expander, vFppiiii) -GO(gtk_draw_extension, vFppiiiiiii) -GO(gtk_draw_flat_box, vFppiiiiii) -GO(gtk_draw_focus, vFppiiii) -GO(gtk_draw_handle, vFppiiiiiii) -GO(gtk_draw_hline, vFppiiii) GO(gtk_drawing_area_get_type, LFv) GO(gtk_drawing_area_new, pFv) -GO(gtk_drawing_area_size, vFpii) GO(gtk_draw_insertion_cursor, vFpppiui) -GO(gtk_draw_layout, vFppiiiip) -GO(gtk_draw_option, vFppiiiiii) -GO(gtk_draw_polygon, vFppiipii) -GO(gtk_draw_resize_grip, vFppiiiiii) -GO(gtk_draw_shadow, vFppiiiiii) -GO(gtk_draw_shadow_gap, vFppiiiiiiiii) -GO(gtk_draw_slider, vFppiiiiiii) -GO(gtk_draw_string, vFppiiip) -GO(gtk_draw_tab, vFppiiiiii) -GO(gtk_draw_vline, vFppiiii) GO(gtk_editable_copy_clipboard, vFp) GO(gtk_editable_cut_clipboard, vFp) GO(gtk_editable_delete_selection, vFp) @@ -897,7 +917,7 @@ GO(gtk_editable_paste_clipboard, vFp) GO(gtk_editable_select_region, vFpii) GO(gtk_editable_set_editable, vFpi) GO(gtk_editable_set_position, vFpi) -GO(gtk_entry_append_text, vFpp) +GO(gtk_entry_accessible_get_type, LFv) GO(gtk_entry_buffer_delete_text, uFpui) GO(gtk_entry_buffer_emit_deleted_text, vFpuu) GO(gtk_entry_buffer_emit_inserted_text, vFpupu) @@ -910,102 +930,113 @@ GO(gtk_entry_buffer_insert_text, uFpupi) GO(gtk_entry_buffer_new, pFpi) GO(gtk_entry_buffer_set_max_length, vFpi) GO(gtk_entry_buffer_set_text, vFppi) -//GO(gtk_entry_completion_complete, -//GO(gtk_entry_completion_delete_action, +GO(gtk_entry_completion_complete, vFp) +GO(gtk_entry_completion_compute_prefix, pFpp) +GO(gtk_entry_completion_delete_action, vFpi) GO(gtk_entry_completion_get_completion_prefix, pFp) GO(gtk_entry_completion_get_entry, pFp) -//GO(gtk_entry_completion_get_inline_completion, -//GO(gtk_entry_completion_get_inline_selection, -//GO(gtk_entry_completion_get_minimum_key_length, +GO(gtk_entry_completion_get_inline_completion, iFp) +GO(gtk_entry_completion_get_inline_selection, iFp) +GO(gtk_entry_completion_get_minimum_key_length, iFp) GO(gtk_entry_completion_get_model, pFp) -//GO(gtk_entry_completion_get_popup_completion, -//GO(gtk_entry_completion_get_popup_set_width, +GO(gtk_entry_completion_get_popup_completion, iFp) +GO(gtk_entry_completion_get_popup_set_width, iFp) GO(gtk_entry_completion_get_popup_single_match, iFp) GO(gtk_entry_completion_get_text_column, iFp) GO(gtk_entry_completion_get_type, LFv) GO(gtk_entry_completion_insert_action_markup, vFpip) -//GO(gtk_entry_completion_insert_action_text, -//GO(gtk_entry_completion_insert_prefix, +GO(gtk_entry_completion_insert_action_text, vFpip) +GO(gtk_entry_completion_insert_prefix, vFp) GO(gtk_entry_completion_new, pFv) -//GO(gtk_entry_completion_set_inline_completion, -//GO(gtk_entry_completion_set_inline_selection, -//GO(gtk_entry_completion_set_match_func, -//GO(gtk_entry_completion_set_minimum_key_length, +GO(gtk_entry_completion_new_with_area, pFp) +GO(gtk_entry_completion_set_inline_completion, vFpi) +GO(gtk_entry_completion_set_inline_selection, vFpi) +//GOM(gtk_entry_completion_set_match_func, vFpppp) +GO(gtk_entry_completion_set_minimum_key_length, vFpi) GO(gtk_entry_completion_set_model, vFpp) -//GO(gtk_entry_completion_set_popup_completion, -//GO(gtk_entry_completion_set_popup_set_width, +GO(gtk_entry_completion_set_popup_completion, vFpi) +GO(gtk_entry_completion_set_popup_set_width, vFpi) GO(gtk_entry_completion_set_popup_single_match, vFpi) GO(gtk_entry_completion_set_text_column, vFpi) GO(gtk_entry_get_activates_default, iFp) GO(gtk_entry_get_alignment, fFp) +GO(gtk_entry_get_attributes, pFp) GO(gtk_entry_get_buffer, pFp) GO(gtk_entry_get_completion, pFp) GO(gtk_entry_get_current_icon_drag_source, iFp) GO(gtk_entry_get_cursor_hadjustment, pFp) GO(gtk_entry_get_has_frame, iFp) -//GO(gtk_entry_get_icon_activatable, +GO(gtk_entry_get_icon_activatable, iFpu) +GO(gtk_entry_get_icon_area, vFpup) GO(gtk_entry_get_icon_at_pos, iFpii) GO(gtk_entry_get_icon_gicon, pFpu) GO(gtk_entry_get_icon_name, pFpu) GO(gtk_entry_get_icon_pixbuf, pFpu) GO(gtk_entry_get_icon_sensitive, iFpu) -//GO(gtk_entry_get_icon_stock, +GO(gtk_entry_get_icon_stock, pFpu) GO(gtk_entry_get_icon_storage_type, uFpu) GO(gtk_entry_get_icon_tooltip_markup, pFpu) -//GO(gtk_entry_get_icon_tooltip_text, -//GO(gtk_entry_get_icon_window, +GO(gtk_entry_get_icon_tooltip_text, pFpu) GO(gtk_entry_get_inner_border, pFp) +GO(gtk_entry_get_input_hints, uFp) +GO(gtk_entry_get_input_purpose, uFp) GO(gtk_entry_get_invisible_char, uFp) GO(gtk_entry_get_layout, pFp) GO(gtk_entry_get_layout_offsets, vFppp) -//GO(gtk_entry_get_max_length, +GO(gtk_entry_get_max_length, iFp) +GO(gtk_entry_get_max_width_chars, iFp) GO(gtk_entry_get_overwrite_mode, iFp) -//GO(gtk_entry_get_progress_fraction, +GO(gtk_entry_get_placeholder_text, pFp) +GO(gtk_entry_get_progress_fraction, dFp) GO(gtk_entry_get_progress_pulse_step, dFp) +GO(gtk_entry_get_tabs, pFp) GO(gtk_entry_get_text, pFp) +GO(gtk_entry_get_text_area, vFpp) GO(gtk_entry_get_text_length, WFp) -//GO(gtk_entry_get_text_window, GO(gtk_entry_get_type, LFv) -//GO(gtk_entry_get_visibility, +GO(gtk_entry_get_visibility, iFp) GO(gtk_entry_get_width_chars, iFp) +GO(gtk_entry_grab_focus_without_selecting, vFp) +GO(gtk_entry_icon_accessible_get_type, LFv) GO(gtk_entry_icon_position_get_type, LFv) GO(gtk_entry_im_context_filter_keypress, iFpp) -//GO(gtk_entry_layout_index_to_text_index, +GO(gtk_entry_layout_index_to_text_index, iFpi) GO(gtk_entry_new, pFv) GO(gtk_entry_new_with_buffer, pFp) -GO(gtk_entry_new_with_max_length, pFi) -GO(gtk_entry_prepend_text, vFpp) -//GO(gtk_entry_progress_pulse, -//GO(gtk_entry_reset_im_context, -GO(gtk_entry_select_region, vFpii) +GO(gtk_entry_progress_pulse, vFp) +GO(gtk_entry_reset_im_context, vFp) GO(gtk_entry_set_activates_default, vFpi) GO(gtk_entry_set_alignment, vFpf) +GO(gtk_entry_set_attributes, vFpp) GO(gtk_entry_set_buffer, vFpp) GO(gtk_entry_set_completion, vFpp) GO(gtk_entry_set_cursor_hadjustment, vFpp) -GO(gtk_entry_set_editable, vFpi) GO(gtk_entry_set_has_frame, vFpi) -//GO(gtk_entry_set_icon_activatable, +GO(gtk_entry_set_icon_activatable, vFpui) GO(gtk_entry_set_icon_drag_source, vFpupu) GO(gtk_entry_set_icon_from_gicon, vFpup) -//GO(gtk_entry_set_icon_from_icon_name, +GO(gtk_entry_set_icon_from_icon_name, vFpup) GO(gtk_entry_set_icon_from_pixbuf, vFpup) -//GO(gtk_entry_set_icon_from_stock, +GO(gtk_entry_set_icon_from_stock, vFpup) GO(gtk_entry_set_icon_sensitive, vFpui) GO(gtk_entry_set_icon_tooltip_markup, vFpup) -//GO(gtk_entry_set_icon_tooltip_text, +GO(gtk_entry_set_icon_tooltip_text, vFpup) GO(gtk_entry_set_inner_border, vFpp) +GO(gtk_entry_set_input_hints, vFpu) +GO(gtk_entry_set_input_purpose, vFpu) GO(gtk_entry_set_invisible_char, vFpu) GO(gtk_entry_set_max_length, vFpi) +GO(gtk_entry_set_max_width_chars, vFpi) GO(gtk_entry_set_overwrite_mode, vFpi) -GO(gtk_entry_set_position, vFpi) -//GO(gtk_entry_set_progress_fraction, +GO(gtk_entry_set_placeholder_text, vFpp) +GO(gtk_entry_set_progress_fraction, vFpd) GO(gtk_entry_set_progress_pulse_step, vFpd) +GO(gtk_entry_set_tabs, vFpp) GO(gtk_entry_set_text, vFpp) GO(gtk_entry_set_visibility, vFpi) -GO(gtk_entry_set_width_chars, uFp) +GO(gtk_entry_set_width_chars, vFpi) GO(gtk_entry_text_index_to_layout_index, iFpi) -//GO(gtk_entry_unset_invisible_char, +GO(gtk_entry_unset_invisible_char, vFp) GOM(gtk_enumerate_printers, vFEpppi) GO(gtk_event_box_get_above_child, iFp) GO(gtk_event_box_get_type, LFv) @@ -1013,13 +1044,33 @@ GO(gtk_event_box_get_visible_window, iFp) GO(gtk_event_box_new, pFv) GO(gtk_event_box_set_above_child, vFpi) GO(gtk_event_box_set_visible_window, vFpi) -GO(gtk_event_controller_set_propagation_phase, vFpi) +GO(gtk_event_controller_get_propagation_phase, uFp) +GO(gtk_event_controller_get_type, LFv) +GO(gtk_event_controller_get_widget, pFp) +GO(gtk_event_controller_handle_event, iFpp) +GO(gtk_event_controller_key_forward, iFpp) +GO(gtk_event_controller_key_get_group, uFp) +GO(gtk_event_controller_key_get_im_context, pFp) +GO(gtk_event_controller_key_get_type, LFv) +GO(gtk_event_controller_key_new, pFp) +GO(gtk_event_controller_key_set_im_context, vFpp) +GO(gtk_event_controller_motion_get_type, LFv) +GO(gtk_event_controller_motion_new, pFp) +GO(gtk_event_controller_reset, vFp) +GO(gtk_event_controller_scroll_flags_get_type, LFv) +GO(gtk_event_controller_scroll_get_flags, uFp) +GO(gtk_event_controller_scroll_get_type, LFv) +GO(gtk_event_controller_scroll_new, pFpu) +GO(gtk_event_controller_scroll_set_flags, vFpu) +GO(gtk_event_controller_set_propagation_phase, vFpu) +GO(gtk_event_sequence_state_get_type, LFv) GO(gtk_events_pending, iFv) -GO(gtk_exit, vFi) +GO(gtk_expander_accessible_get_type, LFv) GO(gtk_expander_get_expanded, iFp) GO(gtk_expander_get_label, pFp) GO(gtk_expander_get_label_fill, iFp) GO(gtk_expander_get_label_widget, pFp) +GO(gtk_expander_get_resize_toplevel, iFp) GO(gtk_expander_get_spacing, iFp) GO(gtk_expander_get_type, LFv) GO(gtk_expander_get_use_markup, iFp) @@ -1030,12 +1081,14 @@ GO(gtk_expander_set_expanded, vFpi) GO(gtk_expander_set_label, vFpp) GO(gtk_expander_set_label_fill, vFpi) GO(gtk_expander_set_label_widget, vFpp) +GO(gtk_expander_set_resize_toplevel, vFpi) GO(gtk_expander_set_spacing, vFpi) GO(gtk_expander_set_use_markup, vFpi) GO(gtk_expander_set_use_underline, vFpi) GO(gtk_expander_style_get_type, LFv) GO(gtk_false, iFv) GO(gtk_file_chooser_action_get_type, LFv) +GO(gtk_file_chooser_add_choice, vFppppp) GO(gtk_file_chooser_add_filter, vFpp) GO(gtk_file_chooser_add_shortcut_folder, iFppp) GO(gtk_file_chooser_add_shortcut_folder_uri, iFppp) @@ -1044,22 +1097,22 @@ GO(gtk_file_chooser_button_get_title, pFp) GO(gtk_file_chooser_button_get_type, LFv) GO(gtk_file_chooser_button_get_width_chars, iFp) GO(gtk_file_chooser_button_new, pFpu) -GO(gtk_file_chooser_button_new_with_backend, pFpip) GO(gtk_file_chooser_button_new_with_dialog, pFp) GO(gtk_file_chooser_button_set_focus_on_click, vFpi) GO(gtk_file_chooser_button_set_title, vFpp) GO(gtk_file_chooser_button_set_width_chars, vFpi) GO(gtk_file_chooser_confirmation_get_type, LFv) GO(gtk_file_chooser_dialog_get_type, LFv) -GO(gtk_file_chooser_dialog_new, pFppipipipipipipip) // vaargs (so pFppipV) with additionnal buttons, end with a NULL -GO(gtk_file_chooser_dialog_new_with_backend, pFppippipipipipipip) // same but pFppippV +GO(gtk_file_chooser_dialog_new, pFppupupupupupupup) // vaargs (so pFppupV) with additionnal buttons, end with a NULL GO(gtk_file_chooser_error_get_type, LFv) -GO(gtk_file_chooser_error_quark, pFv) +GO(gtk_file_chooser_error_quark, uFv) GO(gtk_file_chooser_get_action, uFp) +GO(gtk_file_chooser_get_choice, pFpp) GO(gtk_file_chooser_get_create_folders, iFp) GO(gtk_file_chooser_get_current_folder, pFp) GO(gtk_file_chooser_get_current_folder_file, pFp) GO(gtk_file_chooser_get_current_folder_uri, pFp) +GO(gtk_file_chooser_get_current_name, pFp) GO(gtk_file_chooser_get_do_overwrite_confirmation, iFp) GO(gtk_file_chooser_get_extra_widget, pFp) GO(gtk_file_chooser_get_file, pFp) @@ -1083,7 +1136,13 @@ GO(gtk_file_chooser_get_use_preview_label, iFp) GO(gtk_file_chooser_list_filters, pFp) GO(gtk_file_chooser_list_shortcut_folders, pFp) GO(gtk_file_chooser_list_shortcut_folder_uris, pFp) -GO(gtk_file_chooser_native_new, pFppipp) +GO(gtk_file_chooser_native_get_accept_label, pFp) +GO(gtk_file_chooser_native_get_cancel_label, pFp) +GO(gtk_file_chooser_native_get_type, LFv) +GO(gtk_file_chooser_native_new, pFppupp) +GO(gtk_file_chooser_native_set_accept_label, vFpp) +GO(gtk_file_chooser_native_set_cancel_label, vFpp) +GO(gtk_file_chooser_remove_choice, vFpp) GO(gtk_file_chooser_remove_filter, vFpp) GO(gtk_file_chooser_remove_shortcut_folder, iFppp) GO(gtk_file_chooser_remove_shortcut_folder_uri, iFppp) @@ -1092,6 +1151,7 @@ GO(gtk_file_chooser_select_file, iFppp) GO(gtk_file_chooser_select_filename, iFpp) GO(gtk_file_chooser_select_uri, iFpp) GO(gtk_file_chooser_set_action, vFpu) +GO(gtk_file_chooser_set_choice, vFppp) GO(gtk_file_chooser_set_create_folders, vFpi) GO(gtk_file_chooser_set_current_folder, iFpp) GO(gtk_file_chooser_set_current_folder_file, iFppp) @@ -1107,15 +1167,15 @@ GO(gtk_file_chooser_set_preview_widget, vFpp) GO(gtk_file_chooser_set_preview_widget_active, vFpi) GO(gtk_file_chooser_set_select_multiple, vFpi) GO(gtk_file_chooser_set_show_hidden, vFpi) -GO(gtk_file_chooser_set_uri, vFpp) +GO(gtk_file_chooser_set_uri, iFpp) GO(gtk_file_chooser_set_use_preview_label, vFpi) GO(gtk_file_chooser_unselect_all, vFp) GO(gtk_file_chooser_unselect_file, vFpp) GO(gtk_file_chooser_unselect_filename, vFpp) GO(gtk_file_chooser_unselect_uri, vFpp) +//GO(gtk_file_chooser_widget_accessible_get_type, GO(gtk_file_chooser_widget_get_type, LFv) GO(gtk_file_chooser_widget_new, pFu) -GO(gtk_file_chooser_widget_new_with_backend, pFip) GOM(gtk_file_filter_add_custom, vFEpuppp) GO(gtk_file_filter_add_mime_type, vFpp) GO(gtk_file_filter_add_pattern, vFpp) @@ -1126,25 +1186,52 @@ GO(gtk_file_filter_get_name, pFp) GO(gtk_file_filter_get_needed, uFp) GO(gtk_file_filter_get_type, LFv) GO(gtk_file_filter_new, pFv) +GO(gtk_file_filter_new_from_gvariant, pFp) GO(gtk_file_filter_set_name, vFpp) -GO(gtk_file_selection_complete, vFpp) -GO(gtk_file_selection_get_filename, pFp) -GO(gtk_file_selection_get_selections, pFp) -GO(gtk_file_selection_get_select_multiple, iFp) -GO(gtk_file_selection_get_type, LFv) -GO(gtk_file_selection_hide_fileop_buttons, vFp) -GO(gtk_file_selection_new, pFp) -GO(gtk_file_selection_set_filename, vFpp) -GO(gtk_file_selection_set_select_multiple, vFpi) -GO(gtk_file_selection_show_fileop_buttons, vFp) -GO(gtk_fixed_get_has_window, iFp) +GO(gtk_file_filter_to_gvariant, pFp) GO(gtk_fixed_get_type, LFv) GO(gtk_fixed_move, vFppii) GO(gtk_fixed_new, pFv) GO(gtk_fixed_put, vFppii) -GO(gtk_fixed_set_has_window, vFpi) +GO(gtk_flow_box_accessible_get_type, LFv) +//GOM(gtk_flow_box_bind_model, vFppppp) +GO(gtk_flow_box_child_accessible_get_type, LFv) +GO(gtk_flow_box_child_changed, vFp) +GO(gtk_flow_box_child_get_index, iFp) GO(gtk_flow_box_child_get_type, LFv) +GO(gtk_flow_box_child_is_selected, iFp) +GO(gtk_flow_box_child_new, pFv) +GO(gtk_flow_box_get_activate_on_single_click, iFp) +GO(gtk_flow_box_get_child_at_index, pFpi) +GO(gtk_flow_box_get_child_at_pos, pFpii) +GO(gtk_flow_box_get_column_spacing, uFp) +GO(gtk_flow_box_get_homogeneous, iFp) +GO(gtk_flow_box_get_max_children_per_line, uFp) +GO(gtk_flow_box_get_min_children_per_line, uFp) +GO(gtk_flow_box_get_row_spacing, uFp) +GO(gtk_flow_box_get_selected_children, pFp) +GO(gtk_flow_box_get_selection_mode, uFp) GO(gtk_flow_box_get_type, LFv) +GO(gtk_flow_box_insert, vFppi) +GO(gtk_flow_box_invalidate_filter, vFp) +GO(gtk_flow_box_invalidate_sort, vFp) +GO(gtk_flow_box_new, pFv) +GO(gtk_flow_box_select_all, vFp) +GO(gtk_flow_box_select_child, vFpp) +//GOM(gtk_flow_box_selected_foreach, vFppp) +GO(gtk_flow_box_set_activate_on_single_click, vFpi) +GO(gtk_flow_box_set_column_spacing, vFpu) +//GOM(gtk_flow_box_set_filter_func, vFpppp) +GO(gtk_flow_box_set_hadjustment, vFpp) +GO(gtk_flow_box_set_homogeneous, vFpi) +GO(gtk_flow_box_set_max_children_per_line, vFpu) +GO(gtk_flow_box_set_min_children_per_line, vFpu) +GO(gtk_flow_box_set_row_spacing, vFpu) +GO(gtk_flow_box_set_selection_mode, vFpu) +//GOM(gtk_flow_box_set_sort_func, vFpppp) +GO(gtk_flow_box_set_vadjustment, vFpp) +GO(gtk_flow_box_unselect_all, vFp) +GO(gtk_flow_box_unselect_child, vFpp) GO(gtk_font_button_get_font_name, pFp) GO(gtk_font_button_get_show_size, iFp) GO(gtk_font_button_get_show_style, iFp) @@ -1160,10 +1247,32 @@ GO(gtk_font_button_set_show_style, vFpi) GO(gtk_font_button_set_title, vFpp) GO(gtk_font_button_set_use_font, vFpi) GO(gtk_font_button_set_use_size, vFpi) +GO(gtk_font_chooser_dialog_get_type, LFv) +GO(gtk_font_chooser_dialog_new, pFpp) +GO(gtk_font_chooser_get_font, pFp) +GO(gtk_font_chooser_get_font_desc, pFp) +GO(gtk_font_chooser_get_font_face, pFp) +GO(gtk_font_chooser_get_font_family, pFp) +GO(gtk_font_chooser_get_font_features, pFp) +GO(gtk_font_chooser_get_font_map, pFp) +GO(gtk_font_chooser_get_font_size, iFp) +GO(gtk_font_chooser_get_language, pFp) +GO(gtk_font_chooser_get_level, uFp) +GO(gtk_font_chooser_get_preview_text, pFp) +GO(gtk_font_chooser_get_show_preview_entry, iFp) GO(gtk_font_chooser_get_type, LFv) -GO(gtk_font_selection_dialog_get_apply_button, pFp) +GO(gtk_font_chooser_level_get_type, LFv) +//GOM(gtk_font_chooser_set_filter_func, vFpppp) +GO(gtk_font_chooser_set_font, vFpp) +GO(gtk_font_chooser_set_font_desc, vFpp) +GO(gtk_font_chooser_set_font_map, vFpp) +GO(gtk_font_chooser_set_language, vFpp) +GO(gtk_font_chooser_set_level, vFpu) +GO(gtk_font_chooser_set_preview_text, vFpp) +GO(gtk_font_chooser_set_show_preview_entry, vFpi) +GO(gtk_font_chooser_widget_get_type, LFv) +GO(gtk_font_chooser_widget_new, pFv) GO(gtk_font_selection_dialog_get_cancel_button, pFp) -GO(gtk_font_selection_dialog_get_font, pFp) GO(gtk_font_selection_dialog_get_font_name, pFp) GO(gtk_font_selection_dialog_get_font_selection, pFp) GO(gtk_font_selection_dialog_get_ok_button, pFp) @@ -1176,7 +1285,6 @@ GO(gtk_font_selection_get_face, pFp) GO(gtk_font_selection_get_face_list, pFp) GO(gtk_font_selection_get_family, pFp) GO(gtk_font_selection_get_family_list, pFp) -GO(gtk_font_selection_get_font, pFp) GO(gtk_font_selection_get_font_name, pFp) GO(gtk_font_selection_get_preview_entry, pFp) GO(gtk_font_selection_get_preview_text, pFp) @@ -1187,6 +1295,7 @@ GO(gtk_font_selection_get_type, LFv) GO(gtk_font_selection_new, pFv) GO(gtk_font_selection_set_font_name, iFpp) GO(gtk_font_selection_set_preview_text, vFpp) +GO(gtk_frame_accessible_get_type, LFv) GO(gtk_frame_get_label, pFp) GO(gtk_frame_get_label_align, vFppp) GO(gtk_frame_get_label_widget, pFp) @@ -1197,60 +1306,164 @@ GO(gtk_frame_set_label, vFpp) GO(gtk_frame_set_label_align, vFpff) GO(gtk_frame_set_label_widget, vFpp) GO(gtk_frame_set_shadow_type, vFpu) -GO(gtk_gamma_curve_get_type, LFv) -GO(gtk_gamma_curve_new, pFv) -GO(gtk_gc_get, pFippu) -GO(gtk_gc_release, vFp) +GO(gtk_gesture_drag_get_offset, iFppp) +GO(gtk_gesture_drag_get_start_point, iFppp) +GO(gtk_gesture_drag_get_type, LFv) +GO(gtk_gesture_drag_new, pFp) +GO(gtk_gesture_get_bounding_box, iFpp) +GO(gtk_gesture_get_bounding_box_center, iFppp) +GO(gtk_gesture_get_device, pFp) +GO(gtk_gesture_get_group, pFp) +GO(gtk_gesture_get_last_event, pFpp) +GO(gtk_gesture_get_last_updated_sequence, pFp) +GO(gtk_gesture_get_point, iFpppp) +GO(gtk_gesture_get_sequences, pFp) +GO(gtk_gesture_get_sequence_state, uFpp) +GO(gtk_gesture_get_type, LFv) +GO(gtk_gesture_get_window, pFp) +GO(gtk_gesture_group, vFpp) +GO(gtk_gesture_handles_sequence, iFpp) GO(gtk_gesture_is_active, iFp) -GO(gtk_gesture_long_press_new, pFv) -GO(gtk_gesture_pan_new, pFpi) +GO(gtk_gesture_is_grouped_with, iFpp) +GO(gtk_gesture_is_recognized, iFp) +GO(gtk_gesture_long_press_get_type, LFv) +GO(gtk_gesture_long_press_new, pFp) +GO(gtk_gesture_multi_press_get_area, iFpp) +GO(gtk_gesture_multi_press_get_type, LFv) +GO(gtk_gesture_multi_press_new, pFp) +GO(gtk_gesture_multi_press_set_area, vFpp) +GO(gtk_gesture_pan_get_orientation, uFp) +GO(gtk_gesture_pan_get_type, LFv) +GO(gtk_gesture_pan_new, pFpu) +GO(gtk_gesture_pan_set_orientation, vFpu) +GO(gtk_gesture_rotate_get_angle_delta, dFp) +GO(gtk_gesture_rotate_get_type, LFv) +GO(gtk_gesture_rotate_new, pFp) +GO(gtk_gesture_set_sequence_state, iFppu) +GO(gtk_gesture_set_state, iFpu) +GO(gtk_gesture_set_window, vFpp) +GO(gtk_gesture_single_get_button, uFp) +GO(gtk_gesture_single_get_current_button, uFp) +GO(gtk_gesture_single_get_current_sequence, pFp) +GO(gtk_gesture_single_get_exclusive, iFp) +GO(gtk_gesture_single_get_touch_only, iFp) +GO(gtk_gesture_single_get_type, LFv) +GO(gtk_gesture_single_set_button, vFpu) +GO(gtk_gesture_single_set_exclusive, vFpi) +GO(gtk_gesture_single_set_touch_only, vFpi) +GO(gtk_gesture_stylus_get_axes, iFppp) +GO(gtk_gesture_stylus_get_axis, iFpup) +GO(gtk_gesture_stylus_get_device_tool, pFp) +GO(gtk_gesture_stylus_get_type, LFv) +GO(gtk_gesture_stylus_new, pFp) +GO(gtk_gesture_swipe_get_type, LFv) +GO(gtk_gesture_swipe_get_velocity, iFppp) +GO(gtk_gesture_swipe_new, pFp) +GO(gtk_gesture_ungroup, vFp) +GO(gtk_gesture_zoom_get_scale_delta, dFp) +GO(gtk_gesture_zoom_get_type, LFv) +GO(gtk_gesture_zoom_new, pFp) +GO(gtk_get_binary_age, uFv) GO(gtk_get_current_event, pFv) +GO(gtk_get_current_event_device, pFv) GO(gtk_get_current_event_state, iFp) GO(gtk_get_current_event_time, uFv) +GO(gtk_get_debug_flags, uFv) GO(gtk_get_default_language, pFv) GO(gtk_get_event_widget, pFp) -GO(gtk_get_binary_age, uFv) GO(gtk_get_interface_age, uFv) +GO(gtk_get_locale_direction, uFv) GO(gtk_get_major_version, uFv) -GO(gtk_get_minor_version, uFv) GO(gtk_get_micro_version, uFv) +GO(gtk_get_minor_version, uFv) GO(gtk_get_option_group, pFi) +//GO(gtk_glade_catalog_init, +GO(gtk_gl_area_attach_buffers, vFp) +GO(gtk_gl_area_get_auto_render, iFp) +GO(gtk_gl_area_get_context, pFp) +GO(gtk_gl_area_get_error, pFp) +GO(gtk_gl_area_get_has_alpha, iFp) +GO(gtk_gl_area_get_has_depth_buffer, iFp) +GO(gtk_gl_area_get_has_stencil_buffer, iFp) +GO(gtk_gl_area_get_required_version, vFppp) +GO(gtk_gl_area_get_type, LFv) +GO(gtk_gl_area_get_use_es, iFp) +GO(gtk_gl_area_make_current, vFp) +GO(gtk_gl_area_new, pFv) +GO(gtk_gl_area_queue_render, vFp) +GO(gtk_gl_area_set_auto_render, vFpi) +GO(gtk_gl_area_set_error, vFpp) +GO(gtk_gl_area_set_has_alpha, vFpi) +GO(gtk_gl_area_set_has_depth_buffer, vFpi) +GO(gtk_gl_area_set_has_stencil_buffer, vFpi) +GO(gtk_gl_area_set_required_version, vFpii) +GO(gtk_gl_area_set_use_es, vFpi) GO(gtk_grab_add, vFp) GO(gtk_grab_get_current, pFv) GO(gtk_grab_remove, vFp) +GO(gtk_gradient_add_color_stop, vFpdp) +GO(gtk_gradient_get_type, LFv) +GO(gtk_gradient_new_linear, pFdddd) +GO(gtk_gradient_new_radial, pFdddddd) +GO(gtk_gradient_ref, pFp) +GO(gtk_gradient_resolve, iFppp) +GO(gtk_gradient_resolve_for_context, pFpp) +GO(gtk_gradient_to_string, pFp) +GO(gtk_gradient_unref, vFp) GO(gtk_grid_attach, vFppiiii) +GO(gtk_grid_attach_next_to, vFpppuii) +GO(gtk_grid_get_baseline_row, iFp) +GO(gtk_grid_get_child_at, pFpii) +GO(gtk_grid_get_column_homogeneous, iFp) +GO(gtk_grid_get_column_spacing, uFp) +GO(gtk_grid_get_row_baseline_position, uFpi) +GO(gtk_grid_get_row_homogeneous, iFp) +GO(gtk_grid_get_row_spacing, uFp) GO(gtk_grid_get_type, LFv) +GO(gtk_grid_insert_column, vFpi) +GO(gtk_grid_insert_next_to, vFppu) +GO(gtk_grid_insert_row, vFpi) GO(gtk_grid_new, pFv) +GO(gtk_grid_remove_column, vFpi) +GO(gtk_grid_remove_row, vFpi) +GO(gtk_grid_set_baseline_row, vFpi) GO(gtk_grid_set_column_homogeneous, vFpi) GO(gtk_grid_set_column_spacing, vFpu) +GO(gtk_grid_set_row_baseline_position, vFpiu) GO(gtk_grid_set_row_homogeneous, vFpi) GO(gtk_grid_set_row_spacing, vFpu) GO(gtk_handle_box_get_child_detached, iFp) -GO(gtk_handle_box_get_handle_position, iFp) +GO(gtk_handle_box_get_handle_position, uFp) GO(gtk_handle_box_get_shadow_type, uFp) GO(gtk_handle_box_get_snap_edge, uFp) GO(gtk_handle_box_get_type, LFv) GO(gtk_handle_box_new, pFv) -GO(gtk_handle_box_set_handle_position, vFpi) +GO(gtk_handle_box_set_handle_position, vFpu) GO(gtk_handle_box_set_shadow_type, vFpu) GO(gtk_handle_box_set_snap_edge, vFpu) GO(gtk_hbox_get_type, LFv) GO(gtk_hbox_new, pFii) -GO(gtk_hbutton_box_get_layout_default, iFv) -GO(gtk_hbutton_box_get_spacing_default, iFv) GO(gtk_hbutton_box_get_type, LFv) GO(gtk_hbutton_box_new, pFv) -GO(gtk_hbutton_box_set_layout_default, vFi) -GO(gtk_hbutton_box_set_spacing_default, vFi) +//GO(gtk_header_bar_accessible_get_type, +GO(gtk_header_bar_get_custom_title, pFp) +GO(gtk_header_bar_get_decoration_layout, pFp) +GO(gtk_header_bar_get_has_subtitle, iFp) +GO(gtk_header_bar_get_show_close_button, iFp) +GO(gtk_header_bar_get_subtitle, pFp) +GO(gtk_header_bar_get_title, pFp) +GO(gtk_header_bar_get_type, LFv) GO(gtk_header_bar_new, pFv) -GO(gtk_header_bar_get_type, lFv) GO(gtk_header_bar_pack_end, vFpp) +GO(gtk_header_bar_pack_start, vFpp) +GO(gtk_header_bar_set_custom_title, vFpp) +GO(gtk_header_bar_set_decoration_layout, vFpp) +GO(gtk_header_bar_set_has_subtitle, vFpi) GO(gtk_header_bar_set_show_close_button, vFpi) +GO(gtk_header_bar_set_subtitle, vFpp) GO(gtk_header_bar_set_title, vFpp) GO(gtk_hpaned_get_type, LFv) -//GO(gtk_hpaned_new, -GO(gtk_hruler_get_type, LFv) -//GO(gtk_hruler_new, +GO(gtk_hpaned_new, pFv) GO(gtk_hscale_get_type, LFv) GO(gtk_hscale_new, pFp) GO(gtk_hscale_new_with_range, pFddd) @@ -1262,10 +1475,10 @@ GO(gtk_hsv_get_color, vFpppp) GO(gtk_hsv_get_metrics, vFppp) GO(gtk_hsv_get_type, LFv) GO(gtk_hsv_is_adjusting, iFp) -//GO(gtk_hsv_new, +GO(gtk_hsv_new, pFv) GO(gtk_hsv_set_color, vFpddd) GO(gtk_hsv_set_metrics, vFpii) -//GO(gtk_hsv_to_rgb, +GO(gtk_hsv_to_rgb, vFdddppp) GO(gtk_icon_factory_add, vFppp) GO(gtk_icon_factory_add_default, vFp) GO(gtk_icon_factory_get_type, LFv) @@ -1276,15 +1489,25 @@ GO(gtk_icon_factory_remove_default, vFp) GO(gtk_icon_info_copy, pFp) GO(gtk_icon_info_free, vFp) GO(gtk_icon_info_get_attach_points, iFppp) +GO(gtk_icon_info_get_base_scale, iFp) GO(gtk_icon_info_get_base_size, iFp) GO(gtk_icon_info_get_builtin_pixbuf, pFp) GO(gtk_icon_info_get_display_name, pFp) GO(gtk_icon_info_get_embedded_rect, iFpp) GO(gtk_icon_info_get_filename, pFp) GO(gtk_icon_info_get_type, LFv) +GO(gtk_icon_info_is_symbolic, iFp) GO(gtk_icon_info_load_icon, pFpp) +//GOM(gtk_icon_info_load_icon_async, vFpppp) +GO(gtk_icon_info_load_icon_finish, pFppp) GO(gtk_icon_info_load_surface, pFppp) +GO(gtk_icon_info_load_symbolic, pFppppppp) +//GOM(gtk_icon_info_load_symbolic_async, vFpppppppp) +GO(gtk_icon_info_load_symbolic_finish, pFpppp) GO(gtk_icon_info_load_symbolic_for_context, pFpppp) +//GOM(gtk_icon_info_load_symbolic_for_context_async, vFppppp) +GO(gtk_icon_info_load_symbolic_for_context_finish, pFpppp) +GO(gtk_icon_info_load_symbolic_for_style, pFppupp) GO(gtk_icon_info_new_for_pixbuf, pFpp) GO(gtk_icon_info_set_raw_coordinates, vFpi) GO(gtk_icon_lookup_flags_get_type, LFv) @@ -1296,6 +1519,8 @@ GO(gtk_icon_set_new, pFv) GO(gtk_icon_set_new_from_pixbuf, pFp) GO(gtk_icon_set_ref, pFp) GO(gtk_icon_set_render_icon, pFppuuupp) +GO(gtk_icon_set_render_icon_pixbuf, pFppu) +GO(gtk_icon_set_render_icon_surface, pFppuip) GO(gtk_icon_set_unref, vFp) GO(gtk_icon_size_from_name, uFp) GO(gtk_icon_size_get_name, pFu) @@ -1327,10 +1552,12 @@ GO(gtk_icon_source_set_size_wildcarded, vFpi) GO(gtk_icon_source_set_state, vFpu) GO(gtk_icon_source_set_state_wildcarded, vFpi) GO(gtk_icon_theme_add_builtin_icon, vFpip) +GO(gtk_icon_theme_add_resource_path, vFpp) GO(gtk_icon_theme_append_search_path, vFpp) GO(gtk_icon_theme_choose_icon, pFppiu) +GO(gtk_icon_theme_choose_icon_for_scale, pFppiiu) GO(gtk_icon_theme_error_get_type, LFv) -//GO(gtk_icon_theme_error_quark, +GO(gtk_icon_theme_error_quark, uFv) GO(gtk_icon_theme_get_default, pFv) GO(gtk_icon_theme_get_example_icon_name, pFp) GO(gtk_icon_theme_get_for_display, pFp) @@ -1342,20 +1569,26 @@ GO(gtk_icon_theme_has_icon, iFpp) GO(gtk_icon_theme_list_contexts, pFp) GO(gtk_icon_theme_list_icons, pFpp) GO(gtk_icon_theme_load_icon, pFppiup) +GO(gtk_icon_theme_load_icon_for_scale, pFppiiup) +GO(gtk_icon_theme_load_surface, pFppiipup) GO(gtk_icon_theme_lookup_by_gicon, pFppiu) +GO(gtk_icon_theme_lookup_by_gicon_for_scale, pFppiiu) GO(gtk_icon_theme_lookup_icon, pFppiu) GO(gtk_icon_theme_lookup_icon_for_scale, pFppiiu) GO(gtk_icon_theme_new, pFv) -//GO(gtk_icon_theme_prepend_search_path, +GO(gtk_icon_theme_prepend_search_path, vFpp) GO(gtk_icon_theme_rescan_if_needed, iFp) GO(gtk_icon_theme_set_custom_theme, vFpp) GO(gtk_icon_theme_set_screen, vFpp) GO(gtk_icon_theme_set_search_path, vFppi) +GO(gtk_icon_view_accessible_get_type, LFv) GO(gtk_icon_view_convert_widget_to_bin_window_coords, vFpiipp) GO(gtk_icon_view_create_drag_icon, pFpp) GO(gtk_icon_view_drop_position_get_type, LFv) GO(gtk_icon_view_enable_model_drag_dest, vFppiu) GO(gtk_icon_view_enable_model_drag_source, vFpupiu) +GO(gtk_icon_view_get_activate_on_single_click, iFp) +GO(gtk_icon_view_get_cell_rect, iFpppp) GO(gtk_icon_view_get_columns, iFp) GO(gtk_icon_view_get_column_spacing, iFp) GO(gtk_icon_view_get_cursor, iFppp) @@ -1370,7 +1603,6 @@ GO(gtk_icon_view_get_item_width, iFp) GO(gtk_icon_view_get_margin, iFp) GO(gtk_icon_view_get_markup_column, iFp) GO(gtk_icon_view_get_model, pFp) -GO(gtk_icon_view_get_orientation, iFp) GO(gtk_icon_view_get_path_at_pos, pFpii) GO(gtk_icon_view_get_pixbuf_column, iFp) GO(gtk_icon_view_get_reorderable, iFp) @@ -1385,12 +1617,14 @@ GO(gtk_icon_view_get_type, LFv) GO(gtk_icon_view_get_visible_range, iFppp) GO(gtk_icon_view_item_activated, vFpp) GO(gtk_icon_view_new, pFv) +GO(gtk_icon_view_new_with_area, pFp) GO(gtk_icon_view_new_with_model, pFp) GO(gtk_icon_view_path_is_selected, iFpp) GO(gtk_icon_view_scroll_to_path, vFppiff) GO(gtk_icon_view_select_all, vFp) -//GOM(gtk_icon_view_selected_foreach, vFpBp) +//GOM(gtk_icon_view_selected_foreach, vFppp) GO(gtk_icon_view_select_path, vFpp) +GO(gtk_icon_view_set_activate_on_single_click, vFpi) GO(gtk_icon_view_set_columns, vFpi) GO(gtk_icon_view_set_column_spacing, vFpi) GO(gtk_icon_view_set_cursor, vFpppi) @@ -1401,7 +1635,6 @@ GO(gtk_icon_view_set_item_width, vFpi) GO(gtk_icon_view_set_margin, vFpi) GO(gtk_icon_view_set_markup_column, vFpi) GO(gtk_icon_view_set_model, vFpp) -GO(gtk_icon_view_set_orientation, vFpi) GO(gtk_icon_view_set_pixbuf_column, vFpi) GO(gtk_icon_view_set_reorderable, vFpi) GO(gtk_icon_view_set_row_spacing, vFpi) @@ -1415,22 +1648,16 @@ GO(gtk_icon_view_unselect_all, vFp) GO(gtk_icon_view_unselect_path, vFpp) GO(gtk_icon_view_unset_model_drag_dest, vFp) GO(gtk_icon_view_unset_model_drag_source, vFp) -GO(gtk_identifier_get_type, LFv) -//GOM(gtk_idle_add, uFEBp) -//GOM(gtk_idle_add_full, uFEiBppB) -//GOM(gtk_idle_add_priority, uFEiBp) -GO(gtk_idle_remove, vFu) -GO(gtk_idle_remove_by_data, vFp) +//GO(gtk_identifier_get_type, +GO(gtk_image_accessible_get_type, LFv) +GO(gtk_image_cell_accessible_get_type, LFv) GO(gtk_image_clear, vFp) -GO(gtk_image_get, vFppp) GO(gtk_image_get_animation, pFp) GO(gtk_image_get_gicon, vFppp) GO(gtk_image_get_icon_name, vFppp) GO(gtk_image_get_icon_set, vFppp) -GO(gtk_image_get_image, vFppp) GO(gtk_image_get_pixbuf, pFp) GO(gtk_image_get_pixel_size, iFp) -GO(gtk_image_get_pixmap, vFppp) GO(gtk_image_get_stock, vFppp) GO(gtk_image_get_storage_type, uFp) GO(gtk_image_get_type, LFv) @@ -1450,26 +1677,25 @@ GO(gtk_image_new, pFv) GO(gtk_image_new_from_animation, pFp) GO(gtk_image_new_from_file, pFp) GO(gtk_image_new_from_gicon, pFpu) -GO(gtk_image_new_from_icon_name, pFpi) +GO(gtk_image_new_from_icon_name, pFpu) GO(gtk_image_new_from_icon_set, pFpu) -GO(gtk_image_new_from_image, pFpp) GO(gtk_image_new_from_pixbuf, pFp) -GO(gtk_image_new_from_pixmap, pFpp) -GO(gtk_image_new_from_stock, pFpi) -GO(gtk_image_set, vFppp) +GO(gtk_image_new_from_resource, pFp) +GO(gtk_image_new_from_stock, pFpu) +GO(gtk_image_new_from_surface, pFp) GO(gtk_image_set_from_animation, vFpp) -GO(gtk_image_set_from_file, vFppp) +GO(gtk_image_set_from_file, vFpp) GO(gtk_image_set_from_gicon, vFppu) GO(gtk_image_set_from_icon_name, vFppu) GO(gtk_image_set_from_icon_set, vFppu) -GO(gtk_image_set_from_image, vFppp) GO(gtk_image_set_from_pixbuf, vFpp) -GO(gtk_image_set_from_pixmap, vFppp) -GO(gtk_image_set_from_stock, vFppi) +GO(gtk_image_set_from_resource, vFpp) +GO(gtk_image_set_from_stock, vFppu) +GO(gtk_image_set_from_surface, vFpp) GO(gtk_image_set_pixel_size, vFpi) GO(gtk_image_type_get_type, LFv) GO(gtk_im_context_delete_surrounding, iFpii) -GO(gtk_im_context_filter_key, iFpippuuii) +GO(gtk_im_context_filter_key, iFpippuuui) GO(gtk_im_context_filter_keypress, iFpp) GO(gtk_im_context_focus_in, vFp) GO(gtk_im_context_focus_out, vFp) @@ -1482,6 +1708,7 @@ GO(gtk_im_context_set_client_window, vFpp) GO(gtk_im_context_set_cursor_location, vFpp) GO(gtk_im_context_set_surrounding, vFppii) GO(gtk_im_context_set_use_preedit, vFpi) +GO(gtk_im_context_simple_add_compose_file, vFpp) GO(gtk_im_context_simple_add_table, vFppii) GO(gtk_im_context_simple_get_type, LFv) GO(gtk_im_context_simple_new, pFv) @@ -1494,64 +1721,36 @@ GO(gtk_im_preedit_style_get_type, LFv) GO(gtk_im_status_style_get_type, LFv) GO(gtk_info_bar_add_action_widget, vFppi) GO(gtk_info_bar_add_button, pFppi) -//GO(gtk_info_bar_add_buttons, -//GO(gtk_info_bar_get_action_area, +//GOM(gtk_info_bar_add_buttons, vFppV) +GO(gtk_info_bar_get_action_area, pFp) GO(gtk_info_bar_get_content_area, pFp) GO(gtk_info_bar_get_message_type, uFp) +GO(gtk_info_bar_get_revealed, iFp) +GO(gtk_info_bar_get_show_close_button, iFp) GO(gtk_info_bar_get_type, LFv) GO(gtk_info_bar_new, pFv) -//GO(gtk_info_bar_new_with_buttons, +//GOM(gtk_info_bar_new_with_buttons, pFpV) GO(gtk_info_bar_response, vFpi) -//GO(gtk_info_bar_set_default_response, +GO(gtk_info_bar_set_default_response, vFpi) GO(gtk_info_bar_set_message_type, vFpu) GO(gtk_info_bar_set_response_sensitive, vFpii) +GO(gtk_info_bar_set_revealed, vFpi) +GO(gtk_info_bar_set_show_close_button, vFpi) GOM(gtk_init, vFEpp) -//GO(gtk_init_add, GOM(gtk_init_check, iFEpp) GOM(gtk_init_with_args, iFEpppppp) -//GOM(gtk_input_add_full, uFEiBBppB) -GO(gtk_input_dialog_get_type, LFv) -GO(gtk_input_dialog_new, pFv) GO(gtk_input_hints_get_type, LFv) GO(gtk_input_purpose_get_type, LFv) -GO(gtk_input_remove, vFu) GO(gtk_invisible_get_screen, pFp) GO(gtk_invisible_get_type, LFv) -//GO(gtk_invisible_new, +GO(gtk_invisible_new, pFv) GO(gtk_invisible_new_for_screen, pFp) GO(gtk_invisible_set_screen, vFpp) -//GO(gtk_item_deselect, -//GO(gtk_item_factories_path_delete, -//GO(gtk_item_factory_add_foreign, -//GO(gtk_item_factory_construct, -//GO(gtk_item_factory_create_item, -//GO(gtk_item_factory_create_items, -//GO(gtk_item_factory_create_items_ac, -//GO(gtk_item_factory_create_menu_entries, -//GO(gtk_item_factory_delete_entries, -//GO(gtk_item_factory_delete_entry, -//GO(gtk_item_factory_delete_item, -//GO(gtk_item_factory_from_path, -//GO(gtk_item_factory_from_widget, -//GO(gtk_item_factory_get_item, -//GO(gtk_item_factory_get_item_by_action, -GO(gtk_item_factory_get_type, LFv) -//GO(gtk_item_factory_get_widget, -//GO(gtk_item_factory_get_widget_by_action, -//GO(gtk_item_factory_new, -//GO(gtk_item_factory_path_from_widget, -//GO(gtk_item_factory_popup, -//GO(gtk_item_factory_popup_data, -//GO(gtk_item_factory_popup_data_from_widget, -//GO(gtk_item_factory_popup_with_data, -//GO(gtk_item_factory_set_translate_func, -GO(gtk_item_get_type, LFv) -//GO(gtk_item_select, -//GO(gtk_item_toggle, +GO(gtk_junction_sides_get_type, LFv) GO(gtk_justification_get_type, LFv) -//GOM(gtk_key_snooper_install, uFEBp) +//GOM(gtk_key_snooper_install, uFpp) GO(gtk_key_snooper_remove, vFu) -GO(gtk_label_get, vFpp) +GO(gtk_label_accessible_get_type, LFv) GO(gtk_label_get_angle, dFp) GO(gtk_label_get_attributes, pFp) GO(gtk_label_get_current_uri, pFp) @@ -1560,6 +1759,7 @@ GO(gtk_label_get_justify, uFp) GO(gtk_label_get_label, pFp) GO(gtk_label_get_layout, pFp) GO(gtk_label_get_layout_offsets, vFppp) +GO(gtk_label_get_lines, iFp) GO(gtk_label_get_line_wrap, iFp) GO(gtk_label_get_line_wrap_mode, uFp) GO(gtk_label_get_max_width_chars, iFp) @@ -1574,15 +1774,17 @@ GO(gtk_label_get_type, LFv) GO(gtk_label_get_use_markup, iFp) GO(gtk_label_get_use_underline, iFp) GO(gtk_label_get_width_chars, iFp) +GO(gtk_label_get_xalign, fFp) +GO(gtk_label_get_yalign, fFp) GO(gtk_label_new, pFp) GO(gtk_label_new_with_mnemonic, pFp) -GO(gtk_label_parse_uline, uFpp) GO(gtk_label_select_region, vFpii) GO(gtk_label_set_angle, vFpd) GO(gtk_label_set_attributes, vFpp) GO(gtk_label_set_ellipsize, vFpu) GO(gtk_label_set_justify, vFpu) GO(gtk_label_set_label, vFpp) +GO(gtk_label_set_lines, vFpi) GO(gtk_label_set_line_wrap, vFpi) GO(gtk_label_set_line_wrap_mode, vFpu) GO(gtk_label_set_markup, vFpp) @@ -1598,57 +1800,88 @@ GO(gtk_label_set_track_visited_links, vFpi) GO(gtk_label_set_use_markup, vFpi) GO(gtk_label_set_use_underline, vFpi) GO(gtk_label_set_width_chars, vFpi) -//GO(gtk_layout_freeze, +GO(gtk_label_set_xalign, vFpf) +GO(gtk_label_set_yalign, vFpf) GO(gtk_layout_get_bin_window, pFp) -//GO(gtk_layout_get_hadjustment, +GO(gtk_layout_get_hadjustment, pFp) GO(gtk_layout_get_size, vFppp) GO(gtk_layout_get_type, LFv) GO(gtk_layout_get_vadjustment, pFp) GO(gtk_layout_move, vFppii) GO(gtk_layout_new, pFpp) -//GO(gtk_layout_put, -//GO(gtk_layout_set_hadjustment, +GO(gtk_layout_put, vFppii) +GO(gtk_layout_set_hadjustment, vFpp) GO(gtk_layout_set_size, vFpuu) GO(gtk_layout_set_vadjustment, vFpp) -//GO(gtk_layout_thaw, -GO(gtk_level_bar_mode_get_type, LFv) +GO(gtk_level_bar_accessible_get_type, LFv) +GO(gtk_level_bar_add_offset_value, vFppd) +GO(gtk_level_bar_get_inverted, iFp) +GO(gtk_level_bar_get_max_value, dFp) +GO(gtk_level_bar_get_min_value, dFp) +GO(gtk_level_bar_get_mode, uFp) +GO(gtk_level_bar_get_offset_value, iFppp) GO(gtk_level_bar_get_type, LFv) +GO(gtk_level_bar_get_value, dFp) +GO(gtk_level_bar_mode_get_type, LFv) +GO(gtk_level_bar_new, pFv) +GO(gtk_level_bar_new_for_interval, pFdd) +GO(gtk_level_bar_remove_offset_value, vFpp) +GO(gtk_level_bar_set_inverted, vFpi) +GO(gtk_level_bar_set_max_value, vFpd) +GO(gtk_level_bar_set_min_value, vFpd) +GO(gtk_level_bar_set_mode, vFpu) +GO(gtk_level_bar_set_value, vFpd) GO(gtk_license_get_type, LFv) +GO(gtk_link_button_accessible_get_type, LFv) GO(gtk_link_button_get_type, LFv) GO(gtk_link_button_get_uri, pFp) GO(gtk_link_button_get_visited, iFp) GO(gtk_link_button_new, pFp) GO(gtk_link_button_new_with_label, pFpp) GO(gtk_link_button_set_uri, vFpp) -//GO(gtk_link_button_set_uri_hook, GO(gtk_link_button_set_visited, vFpi) -GO(gtk_list_append_items, vFpp) +GO(gtk_list_box_accessible_get_type, LFv) +//GOM(gtk_list_box_bind_model, vFppppp) +GO(gtk_list_box_drag_highlight_row, vFpp) +GO(gtk_list_box_drag_unhighlight_row, vFp) +GO(gtk_list_box_get_activate_on_single_click, iFp) +GO(gtk_list_box_get_adjustment, pFp) +GO(gtk_list_box_get_row_at_index, pFpi) +GO(gtk_list_box_get_row_at_y, pFpi) +GO(gtk_list_box_get_selected_row, pFp) +GO(gtk_list_box_get_selected_rows, pFp) +GO(gtk_list_box_get_selection_mode, uFp) GO(gtk_list_box_get_type, LFv) +GO(gtk_list_box_insert, vFppi) +GO(gtk_list_box_invalidate_filter, vFp) +GO(gtk_list_box_invalidate_headers, vFp) +GO(gtk_list_box_invalidate_sort, vFp) +GO(gtk_list_box_new, pFv) +GO(gtk_list_box_prepend, vFpp) +GO(gtk_list_box_row_accessible_get_type, LFv) +GO(gtk_list_box_row_changed, vFp) +GO(gtk_list_box_row_get_activatable, iFp) +GO(gtk_list_box_row_get_header, pFp) +GO(gtk_list_box_row_get_index, iFp) +GO(gtk_list_box_row_get_selectable, iFp) GO(gtk_list_box_row_get_type, LFv) -GO(gtk_list_box_set_header_func, vFppp) -GO(gtk_list_child_position, iFpp) -GO(gtk_list_clear_items, vFpii) -GO(gtk_list_end_drag_selection, vFp) -GO(gtk_list_end_selection, vFp) -GO(gtk_list_extend_selection, vFpifi) -GO(gtk_list_get_type, LFv) -GO(gtk_list_insert_items, vFppi) -GO(gtk_list_item_deselect, vFp) -GO(gtk_list_item_get_type, LFv) -GO(gtk_list_item_new, pFv) -GO(gtk_list_item_new_with_label, pFp) -GO(gtk_list_item_select, vFp) -GO(gtk_list_new, pFv) -GO(gtk_list_prepend_items, vFpp) -GO(gtk_list_remove_items, vFpp) -GO(gtk_list_remove_items_no_unref, vFpp) -GO(gtk_list_scroll_horizontal, vFpif) -GO(gtk_list_scroll_vertical, vFpif) -GO(gtk_list_select_all, vFp) -GO(gtk_list_select_child, vFpp) -GO(gtk_list_select_item, vFpi) -GO(gtk_list_set_selection_mode, vFpi) -GO(gtk_list_start_selection, vFp) +GO(gtk_list_box_row_is_selected, iFp) +GO(gtk_list_box_row_new, pFv) +GO(gtk_list_box_row_set_activatable, vFpi) +GO(gtk_list_box_row_set_header, vFpp) +GO(gtk_list_box_row_set_selectable, vFpi) +GO(gtk_list_box_select_all, vFp) +//GOM(gtk_list_box_selected_foreach, vFppp) +GO(gtk_list_box_select_row, vFpp) +GO(gtk_list_box_set_activate_on_single_click, vFpi) +GO(gtk_list_box_set_adjustment, vFpp) +//GOM(gtk_list_box_set_filter_func, vFpppp) +GOM(gtk_list_box_set_header_func, vFEpppp) +GO(gtk_list_box_set_placeholder, vFpp) +GO(gtk_list_box_set_selection_mode, vFpu) +//GOM(gtk_list_box_set_sort_func, vFpppp) +GO(gtk_list_box_unselect_all, vFp) +GO(gtk_list_box_unselect_row, vFpp) GO(gtk_list_store_append, vFpp) GO(gtk_list_store_clear, vFp) GO(gtk_list_store_get_type, LFv) @@ -1665,63 +1898,48 @@ GO(gtk_list_store_newv, pFip) GO(gtk_list_store_prepend, vFpp) GO(gtk_list_store_remove, iFpp) GO(gtk_list_store_reorder, vFpp) -//GO2(gtk_list_store_set, vFppV, gtk_list_store_set_valist) +//GOM(gtk_list_store_set, vFppV) GO(gtk_list_store_set_column_types, vFpip) -//GO(gtk_list_store_set_valist, vFppA) +//GOM(gtk_list_store_set_valist, vFppA) GO(gtk_list_store_set_value, vFppip) GO(gtk_list_store_set_valuesv, vFppppi) GO(gtk_list_store_swap, vFppp) -GO(gtk_list_toggle_add_mode, vFp) -GO(gtk_list_toggle_focus_row, vFp) -GO(gtk_list_toggle_row, vFpp) -GO(gtk_list_undo_selection, vFp) -GO(gtk_list_unselect_all, vFp) -GO(gtk_list_unselect_child, vFpp) -GO(gtk_list_unselect_item, vFpi) +GO(gtk_lock_button_accessible_get_type, LFv) +GO(gtk_lock_button_get_permission, pFp) +GO(gtk_lock_button_get_type, LFv) +GO(gtk_lock_button_new, pFp) +GO(gtk_lock_button_set_permission, vFpp) GO(gtk_main, vFv) GO(gtk_main_do_event, vFp) GO(gtk_main_iteration, iFv) GO(gtk_main_iteration_do, iFi) GO(gtk_main_level, uFv) GO(gtk_main_quit, vFv) -//GO(gtk_marshal_BOOLEAN__POINTER, -//GO(gtk_marshal_BOOLEAN__POINTER_INT_INT, -//GO(gtk_marshal_BOOLEAN__POINTER_INT_INT_UINT, -//GO(gtk_marshal_BOOLEAN__POINTER_POINTER_INT_INT, -//GO(gtk_marshal_BOOLEAN__POINTER_STRING_STRING_POINTER, -//GO(gtk_marshal_BOOLEAN__VOID, -//GO(gtk_marshal_ENUM__ENUM, -//GO(gtk_marshal_INT__POINTER, -//GO(gtk_marshal_INT__POINTER_CHAR_CHAR, -//GO(gtk_marshal_VOID__ENUM_FLOAT, -//GO(gtk_marshal_VOID__ENUM_FLOAT_BOOLEAN, -//GO(gtk_marshal_VOID__INT_INT, -//GO(gtk_marshal_VOID__INT_INT_POINTER, -//GO(gtk_marshal_VOID__POINTER_INT, -//GO(gtk_marshal_VOID__POINTER_INT_INT_POINTER_UINT_UINT, -//GO(gtk_marshal_VOID__POINTER_POINTER, -//GO(gtk_marshal_VOID__POINTER_POINTER_POINTER, -//GO(gtk_marshal_VOID__POINTER_POINTER_UINT_UINT, -//GO(gtk_marshal_VOID__POINTER_STRING_STRING, -//GO(gtk_marshal_VOID__POINTER_UINT, -//GO(gtk_marshal_VOID__POINTER_UINT_ENUM, -//GO(gtk_marshal_VOID__POINTER_UINT_UINT, -//GO(gtk_marshal_VOID__STRING_INT_POINTER, -//GO(gtk_marshal_VOID__UINT_POINTER_UINT_ENUM_ENUM_POINTER, -//GO(gtk_marshal_VOID__UINT_POINTER_UINT_UINT_ENUM, -//GO(gtk_marshal_VOID__UINT_STRING, -GO(gtk_match_type_get_type, LFv) +GO(gtk_menu_accessible_get_type, LFv) GO(gtk_menu_attach, vFppuuuu) GOM(gtk_menu_attach_to_widget, vFEppp) GO(gtk_menu_bar_get_child_pack_direction, uFp) -GO(gtk_menu_bar_get_pack_direction, iFp) +GO(gtk_menu_bar_get_pack_direction, uFp) GO(gtk_menu_bar_get_type, LFv) GO(gtk_menu_bar_new, pFv) +GO(gtk_menu_bar_new_from_model, pFp) GO(gtk_menu_bar_set_child_pack_direction, vFpu) -GO(gtk_menu_bar_set_pack_direction, vFpi) +GO(gtk_menu_bar_set_pack_direction, vFpu) +GO(gtk_menu_button_accessible_get_type, LFv) +GO(gtk_menu_button_get_align_widget, pFp) +GO(gtk_menu_button_get_direction, uFp) +GO(gtk_menu_button_get_menu_model, pFp) +GO(gtk_menu_button_get_popover, pFp) +GO(gtk_menu_button_get_popup, pFp) +GO(gtk_menu_button_get_type, LFv) +GO(gtk_menu_button_get_use_popover, iFp) GO(gtk_menu_button_new, pFv) +GO(gtk_menu_button_set_align_widget, vFpp) +GO(gtk_menu_button_set_direction, vFpu) GO(gtk_menu_button_set_menu_model, vFpp) -GO(gtk_menu_button_get_type, LFv) +GO(gtk_menu_button_set_popover, vFpp) +GO(gtk_menu_button_set_popup, vFpp) +GO(gtk_menu_button_set_use_popover, vFpi) GO(gtk_menu_detach, vFp) GO(gtk_menu_direction_type_get_type, LFv) GO(gtk_menu_get_accel_group, pFp) @@ -1734,29 +1952,37 @@ GO(gtk_menu_get_reserve_toggle_size, iFp) GO(gtk_menu_get_tearoff_state, iFp) GO(gtk_menu_get_title, pFp) GO(gtk_menu_get_type, LFv) +GO(gtk_menu_item_accessible_get_type, LFv) GO(gtk_menu_item_activate, vFp) GO(gtk_menu_item_deselect, vFp) GO(gtk_menu_item_get_accel_path, pFp) GO(gtk_menu_item_get_label, pFp) +GO(gtk_menu_item_get_reserve_indicator, iFp) GO(gtk_menu_item_get_right_justified, iFp) GO(gtk_menu_item_get_submenu, pFp) GO(gtk_menu_item_get_type, LFv) -GO(gtk_menu_item_get_use_underline, vFpi) +GO(gtk_menu_item_get_use_underline, iFp) GO(gtk_menu_item_new, pFv) GO(gtk_menu_item_new_with_label, pFp) GO(gtk_menu_item_new_with_mnemonic, pFp) -GO(gtk_menu_item_remove_submenu, pFp) GO(gtk_menu_item_select, vFp) GO(gtk_menu_item_set_accel_path, vFpp) GO(gtk_menu_item_set_label, vFpp) +GO(gtk_menu_item_set_reserve_indicator, vFpi) GO(gtk_menu_item_set_right_justified, vFpi) GO(gtk_menu_item_set_submenu, vFpp) GO(gtk_menu_item_set_use_underline, vFpi) GO(gtk_menu_item_toggle_size_allocate, vFpi) GO(gtk_menu_item_toggle_size_request, vFpp) GO(gtk_menu_new, pFv) +GO(gtk_menu_new_from_model, pFp) +GO(gtk_menu_place_on_monitor, vFpp) GO(gtk_menu_popdown, vFp) GOM(gtk_menu_popup, vFEpppppuu) +GO(gtk_menu_popup_at_pointer, vFpp) +GO(gtk_menu_popup_at_rect, vFpppuup) +GO(gtk_menu_popup_at_widget, vFppuup) +//GOM(gtk_menu_popup_for_device, vFpppppppuu) GO(gtk_menu_reorder_child, vFppi) GO(gtk_menu_reposition, vFp) GO(gtk_menu_set_accel_group, vFpp) @@ -1767,11 +1993,15 @@ GO(gtk_menu_set_reserve_toggle_size, vFpi) GO(gtk_menu_set_screen, vFpp) GO(gtk_menu_set_tearoff_state, vFpi) GO(gtk_menu_set_title, vFpp) +GO(gtk_menu_shell_accessible_get_type, LFv) GO(gtk_menu_shell_activate_item, vFppi) GO(gtk_menu_shell_append, vFpp) -//GO(gtk_menu_shell_cancel, -//GO(gtk_menu_shell_deactivate, -//GO(gtk_menu_shell_deselect, +GO(gtk_menu_shell_bind_model, vFpppi) +GO(gtk_menu_shell_cancel, vFp) +GO(gtk_menu_shell_deactivate, vFp) +GO(gtk_menu_shell_deselect, vFp) +GO(gtk_menu_shell_get_parent_shell, pFp) +GO(gtk_menu_shell_get_selected_item, pFp) GO(gtk_menu_shell_get_take_focus, iFp) GO(gtk_menu_shell_get_type, LFv) GO(gtk_menu_shell_insert, vFppi) @@ -1782,10 +2012,9 @@ GO(gtk_menu_shell_set_take_focus, vFpi) GO(gtk_menu_tool_button_get_menu, pFp) GO(gtk_menu_tool_button_get_type, LFv) GO(gtk_menu_tool_button_new, pFpp) -//GO(gtk_menu_tool_button_new_from_stock, -//GO(gtk_menu_tool_button_set_arrow_tooltip, +GO(gtk_menu_tool_button_new_from_stock, pFp) GO(gtk_menu_tool_button_set_arrow_tooltip_markup, vFpp) -//GO(gtk_menu_tool_button_set_arrow_tooltip_text, +GO(gtk_menu_tool_button_set_arrow_tooltip_text, vFpp) GO(gtk_menu_tool_button_set_menu, vFpp) GOM(gtk_message_dialog_format_secondary_markup, vFEppV) GOM(gtk_message_dialog_format_secondary_text, vFEppV) @@ -1797,12 +2026,13 @@ GO(gtk_message_dialog_new_with_markup, pFpuiippppppppppp) // vaarg GO(gtk_message_dialog_set_image, vFpp) GO(gtk_message_dialog_set_markup, vFpp) GO(gtk_message_type_get_type, LFv) -GO(gtk_metric_type_get_type, LFv) GO(gtk_misc_get_alignment, vFppp) GO(gtk_misc_get_padding, vFppp) GO(gtk_misc_get_type, LFv) GO(gtk_misc_set_alignment, vFpff) GO(gtk_misc_set_padding, vFpii) +GO(gtk_model_button_get_type, LFv) +GO(gtk_model_button_new, pFv) GO(gtk_mount_operation_get_parent, pFp) GO(gtk_mount_operation_get_screen, pFp) GO(gtk_mount_operation_get_type, LFv) @@ -1815,6 +2045,7 @@ GO(gtk_native_dialog_destroy, vFp) GO(gtk_native_dialog_get_modal, iFp) GO(gtk_native_dialog_get_title, pFp) GO(gtk_native_dialog_get_transient_for, pFp) +GO(gtk_native_dialog_get_type, LFv) GO(gtk_native_dialog_get_visible, iFp) GO(gtk_native_dialog_hide, vFp) GO(gtk_native_dialog_run, iFp) @@ -1823,12 +2054,12 @@ GO(gtk_native_dialog_set_title, vFpp) GO(gtk_native_dialog_set_transient_for, vFpp) GO(gtk_native_dialog_show, vFp) GO(gtk_native_get_surface, pFp) +GO(gtk_notebook_accessible_get_type, LFv) GO(gtk_notebook_append_page, iFppp) GO(gtk_notebook_append_page_menu, iFpppp) +GO(gtk_notebook_detach_tab, vFpp) GO(gtk_notebook_get_action_widget, pFpu) GO(gtk_notebook_get_current_page, iFp) -GO(gtk_notebook_get_group, pFp) -GO(gtk_notebook_get_group_id, iFp) GO(gtk_notebook_get_group_name, pFp) GO(gtk_notebook_get_menu_label, pFpp) GO(gtk_notebook_get_menu_label_text, pFpp) @@ -1849,183 +2080,197 @@ GO(gtk_notebook_insert_page, iFpppi) GO(gtk_notebook_insert_page_menu, iFppppi) GO(gtk_notebook_new, pFv) GO(gtk_notebook_next_page, vFp) +GO(gtk_notebook_page_accessible_get_type, LFv) +GO(gtk_notebook_page_accessible_invalidate, vFp) +GO(gtk_notebook_page_accessible_new, pFpp) GO(gtk_notebook_page_num, iFpp) GO(gtk_notebook_popup_disable, vFp) GO(gtk_notebook_popup_enable, vFp) GO(gtk_notebook_prepend_page, iFppp) GO(gtk_notebook_prepend_page_menu, iFpppp) GO(gtk_notebook_prev_page, vFp) -GO(gtk_notebook_query_tab_label_packing, vFppppp) GO(gtk_notebook_remove_page, vFpi) GO(gtk_notebook_reorder_child, vFppi) GO(gtk_notebook_set_action_widget, vFppu) GO(gtk_notebook_set_current_page, vFpi) -GO(gtk_notebook_set_group, vFpp) -GO(gtk_notebook_set_group_id, vFpi) GO(gtk_notebook_set_group_name, vFpp) -GO(gtk_notebook_set_homogeneous_tabs, vFpi) GO(gtk_notebook_set_menu_label, vFppp) GO(gtk_notebook_set_menu_label_text, vFppp) GO(gtk_notebook_set_scrollable, vFpi) GO(gtk_notebook_set_show_border, vFpi) GO(gtk_notebook_set_show_tabs, vFpi) -GO(gtk_notebook_set_tab_border, vFpu) GO(gtk_notebook_set_tab_detachable, vFppi) -GO(gtk_notebook_set_tab_hborder, vFpu) GO(gtk_notebook_set_tab_label, vFppp) -GO(gtk_notebook_set_tab_label_packing, vFppiii) GO(gtk_notebook_set_tab_label_text, vFppp) GO(gtk_notebook_set_tab_pos, vFpu) GO(gtk_notebook_set_tab_reorderable, vFppi) -GO(gtk_notebook_set_tab_vborder, vFpu) -//GOM(gtk_notebook_set_window_creation_hook, pFEppp) GO(gtk_notebook_tab_get_type, LFv) GO(gtk_number_up_layout_get_type, LFv) -GO(gtk_object_add_arg_type, vFpiuu) -GO(gtk_object_destroy, vFp) -GO(gtk_object_flags_get_type, LFv) -GO(gtk_object_get, vFppppppppppp) // vaarg -GO(gtk_object_get_data, pFpp) -GO(gtk_object_get_data_by_id, pFpp) -GO(gtk_object_get_type, LFv) -GO(gtk_object_get_user_data, pFp) -GO(gtk_object_new, pFppppppppppp) //vaarg -GO(gtk_object_ref, pFp) -GO(gtk_object_remove_data, vFpp) -GO(gtk_object_remove_data_by_id, vFpp) -GO(gtk_object_remove_no_notify, vFpp) -GO(gtk_object_remove_no_notify_by_id, vFpp) -GO(gtk_object_set, vFppppppppppp) //vaarg -GO(gtk_object_set_data, vFppp) -GO(gtk_object_set_data_by_id, vFppp) -//GOM(gtk_object_set_data_by_id_full, vFEpppp) -GOM(gtk_object_set_data_full, vFEpppp) -GO(gtk_object_set_user_data, vFpp) -GO(gtk_object_sink, vFp) -GO(gtk_object_unref, vFp) -//GOM(gtk_object_weakref, vFEppp) -//GOM(gtk_object_weakunref, vFEppp) +GO(gtk_numerable_icon_get_background_gicon, pFp) +GO(gtk_numerable_icon_get_background_icon_name, pFp) +GO(gtk_numerable_icon_get_count, iFp) +GO(gtk_numerable_icon_get_label, pFp) +GO(gtk_numerable_icon_get_style_context, pFp) +GO(gtk_numerable_icon_get_type, LFv) +GO(gtk_numerable_icon_new, pFp) +GO(gtk_numerable_icon_new_with_style_context, pFpp) +GO(gtk_numerable_icon_set_background_gicon, vFpp) +GO(gtk_numerable_icon_set_background_icon_name, vFpp) +GO(gtk_numerable_icon_set_count, vFpi) +GO(gtk_numerable_icon_set_label, vFpp) +GO(gtk_numerable_icon_set_style_context, vFpp) GO(gtk_offscreen_window_get_pixbuf, pFp) -GO(gtk_offscreen_window_get_pixmap, pFp) +GO(gtk_offscreen_window_get_surface, pFp) GO(gtk_offscreen_window_get_type, LFv) GO(gtk_offscreen_window_new, pFv) -GO(gtk_old_editable_changed, vFp) -GO(gtk_old_editable_claim_selection, vFpiu) -GO(gtk_old_editable_get_type, LFv) -GO(gtk_option_menu_get_history, iFp) -GO(gtk_option_menu_get_menu, pFp) -GO(gtk_option_menu_get_type, LFv) -GO(gtk_option_menu_new, pFv) -GO(gtk_option_menu_remove_menu, vFp) -GO(gtk_option_menu_set_history, vFpu) -GO(gtk_option_menu_set_menu, vFpp) GO(gtk_orientable_get_orientation, uFp) GO(gtk_orientable_get_type, LFv) GO(gtk_orientable_set_orientation, vFpu) GO(gtk_orientation_get_type, LFv) GO(gtk_overlay_add_overlay, vFpp) +GO(gtk_overlay_get_overlay_pass_through, iFpp) GO(gtk_overlay_get_type, LFv) +GO(gtk_overlay_new, pFv) +GO(gtk_overlay_reorder_overlay, vFppi) +GO(gtk_overlay_set_overlay_pass_through, vFppi) GO(gtk_pack_direction_get_type, LFv) GO(gtk_pack_type_get_type, LFv) +GO(gtk_pad_action_type_get_type, LFv) +GO(gtk_pad_controller_get_type, LFv) +GO(gtk_pad_controller_new, pFppp) +GO(gtk_pad_controller_set_action, vFpuiipp) +GO(gtk_pad_controller_set_action_entries, vFppi) GO(gtk_page_orientation_get_type, LFv) GO(gtk_page_set_get_type, LFv) GO(gtk_page_setup_copy, pFp) -//GO(gtk_page_setup_get_bottom_margin, -GO(gtk_page_setup_get_left_margin, dFpi) +GO(gtk_page_setup_get_bottom_margin, dFpu) +GO(gtk_page_setup_get_left_margin, dFpu) GO(gtk_page_setup_get_orientation, uFp) GO(gtk_page_setup_get_page_height, dFpu) -GO(gtk_page_setup_get_page_width, dFpi) -GO(gtk_page_setup_get_paper_height, dFpi) +GO(gtk_page_setup_get_page_width, dFpu) +GO(gtk_page_setup_get_paper_height, dFpu) GO(gtk_page_setup_get_paper_size, pFp) -GO(gtk_page_setup_get_paper_width, dFpi) -GO(gtk_page_setup_get_right_margin, dFpi) -GO(gtk_page_setup_get_top_margin, dFpi) +GO(gtk_page_setup_get_paper_width, dFpu) +GO(gtk_page_setup_get_right_margin, dFpu) +GO(gtk_page_setup_get_top_margin, dFpu) GO(gtk_page_setup_get_type, LFv) -//GO(gtk_page_setup_load_file, +GO(gtk_page_setup_load_file, iFppp) GO(gtk_page_setup_load_key_file, iFpppp) GO(gtk_page_setup_new, pFv) GO(gtk_page_setup_new_from_file, pFpp) +GO(gtk_page_setup_new_from_gvariant, pFp) GO(gtk_page_setup_new_from_key_file, pFppp) -//GO(gtk_page_setup_set_bottom_margin, -//GO(gtk_page_setup_set_left_margin, +GO(gtk_page_setup_set_bottom_margin, vFpdu) +GO(gtk_page_setup_set_left_margin, vFpdu) GO(gtk_page_setup_set_orientation, vFpu) GO(gtk_page_setup_set_paper_size, vFpp) GO(gtk_page_setup_set_paper_size_and_default_margins, vFpp) GO(gtk_page_setup_set_right_margin, vFpdu) -//GO(gtk_page_setup_set_top_margin, +GO(gtk_page_setup_set_top_margin, vFpdu) GO(gtk_page_setup_to_file, iFppp) +GO(gtk_page_setup_to_gvariant, pFp) GO(gtk_page_setup_to_key_file, vFppp) -//GO(gtk_page_setup_unix_dialog_get_page_setup, -//GO(gtk_page_setup_unix_dialog_get_print_settings, +GO(gtk_page_setup_unix_dialog_get_page_setup, pFp) +GO(gtk_page_setup_unix_dialog_get_print_settings, pFp) GO(gtk_page_setup_unix_dialog_get_type, LFv) -//GO(gtk_page_setup_unix_dialog_new, -//GO(gtk_page_setup_unix_dialog_set_page_setup, -//GO(gtk_page_setup_unix_dialog_set_print_settings, +GO(gtk_page_setup_unix_dialog_new, pFpp) +GO(gtk_page_setup_unix_dialog_set_page_setup, vFpp) +GO(gtk_page_setup_unix_dialog_set_print_settings, vFpp) GO(gtk_paint_arrow, vFppuuppuiiiii) -GO(gtk_paint_box, vFppiipppiiii) +GO(gtk_paint_box, vFppuuppiiii) GO(gtk_paint_box_gap, vFppuuppiiiiuii) -GO(gtk_paint_check, vFppiipppiiii) -GO(gtk_paint_diamond, vFppiipppiiii) +GO(gtk_paint_check, vFppuuppiiii) +GO(gtk_paint_diamond, vFppuuppiiii) GO(gtk_paint_expander, vFppuppiiu) GO(gtk_paint_extension, vFppuuppiiiiu) -GO(gtk_paint_flat_box, vFppiipppiiii) +GO(gtk_paint_flat_box, vFppuuppiiii) GO(gtk_paint_focus, vFppuppiiii) GO(gtk_paint_handle, vFppuuppiiiiu) -GO(gtk_paint_hline, vFppipppiii) +GO(gtk_paint_hline, vFppuppiii) GO(gtk_paint_layout, vFppuippiip) -GO(gtk_paint_option, vFppiipppiiii) -GO(gtk_paint_polygon, vFppiippppii) +GO(gtk_paint_option, vFppuuppiiii) GO(gtk_paint_resize_grip, vFppuppuiiii) -GO(gtk_paint_shadow, vFppiipppiiii) -GO(gtk_paint_shadow_gap, vFppiipppiiiiiii) -GO(gtk_paint_slider, vFppiipppiiiii) +GO(gtk_paint_shadow, vFppuuppiiii) +GO(gtk_paint_shadow_gap, vFppuuppiiiiuii) +GO(gtk_paint_slider, vFppuuppiiiiu) GO(gtk_paint_spinner, vFppuppuiiii) -GO(gtk_paint_string, vFppipppiip) GO(gtk_paint_tab, vFppuuppiiii) GO(gtk_paint_vline, vFppuppiii) +GO(gtk_pan_direction_get_type, LFv) +GO(gtk_paned_accessible_get_type, LFv) GO(gtk_paned_add1, vFpp) GO(gtk_paned_add2, vFpp) -GO(gtk_paned_compute_position, vFpiii) GO(gtk_paned_get_child1, pFp) GO(gtk_paned_get_child2, pFp) GO(gtk_paned_get_handle_window, pFp) GO(gtk_paned_get_position, iFp) GO(gtk_paned_get_type, LFv) -GO(gtk_paned_new, pFi) +GO(gtk_paned_get_wide_handle, iFp) +GO(gtk_paned_new, pFu) GO(gtk_paned_pack1, vFppii) GO(gtk_paned_pack2, vFppii) GO(gtk_paned_set_position, vFpi) +GO(gtk_paned_set_wide_handle, vFpi) GO(gtk_paper_size_copy, pFp) GO(gtk_paper_size_free, vFp) GO(gtk_paper_size_get_default, pFv) -GO(gtk_paper_size_get_default_bottom_margin, dFpi) -GO(gtk_paper_size_get_default_left_margin, dFpi) +GO(gtk_paper_size_get_default_bottom_margin, dFpu) +GO(gtk_paper_size_get_default_left_margin, dFpu) GO(gtk_paper_size_get_default_right_margin, dFpu) -GO(gtk_paper_size_get_default_top_margin, dFpi) +GO(gtk_paper_size_get_default_top_margin, dFpu) GO(gtk_paper_size_get_display_name, pFp) -GO(gtk_paper_size_get_height, dFpi) +GO(gtk_paper_size_get_height, dFpu) GO(gtk_paper_size_get_name, pFp) GO(gtk_paper_size_get_paper_sizes, pFi) GO(gtk_paper_size_get_ppd_name, pFp) GO(gtk_paper_size_get_type, LFv) -GO(gtk_paper_size_get_width, dFpi) +GO(gtk_paper_size_get_width, dFpu) GO(gtk_paper_size_is_custom, iFp) GO(gtk_paper_size_is_equal, iFpp) +GO(gtk_paper_size_is_ipp, iFp) GO(gtk_paper_size_new, pFp) GO(gtk_paper_size_new_custom, pFppddu) +GO(gtk_paper_size_new_from_gvariant, pFp) +GO(gtk_paper_size_new_from_ipp, pFpdd) GO(gtk_paper_size_new_from_key_file, pFppp) GO(gtk_paper_size_new_from_ppd, pFppdd) GO(gtk_paper_size_set_size, vFpddu) +GO(gtk_paper_size_to_gvariant, pFp) GO(gtk_paper_size_to_key_file, vFppp) GO(gtk_parse_args, iFpp) GO(gtk_path_bar_get_type, LFv) GO(gtk_path_priority_type_get_type, LFv) GO(gtk_path_type_get_type, LFv) -GO(gtk_pixmap_get, vFppp) -GO(gtk_pixmap_get_type, LFv) -GO(gtk_pixmap_new, pFpp) -GO(gtk_pixmap_set, vFppp) -GO(gtk_pixmap_set_build_insensitive, vFpi) +GO(gtk_places_open_flags_get_type, LFv) +GO(gtk_places_sidebar_add_shortcut, vFpp) +GO(gtk_places_sidebar_get_local_only, iFp) +GO(gtk_places_sidebar_get_location, pFp) +GO(gtk_places_sidebar_get_nth_bookmark, pFpi) +GO(gtk_places_sidebar_get_open_flags, uFp) +GO(gtk_places_sidebar_get_show_connect_to_server, iFp) +GO(gtk_places_sidebar_get_show_desktop, iFp) +GO(gtk_places_sidebar_get_show_enter_location, iFp) +GO(gtk_places_sidebar_get_show_other_locations, iFp) +GO(gtk_places_sidebar_get_show_recent, iFp) +GO(gtk_places_sidebar_get_show_starred_location, iFp) +GO(gtk_places_sidebar_get_show_trash, iFp) +GO(gtk_places_sidebar_get_type, LFv) +GO(gtk_places_sidebar_list_shortcuts, pFp) +GO(gtk_places_sidebar_new, pFv) +GO(gtk_places_sidebar_remove_shortcut, vFpp) +GO(gtk_places_sidebar_set_drop_targets_visible, vFpip) +GO(gtk_places_sidebar_set_local_only, vFpi) +GO(gtk_places_sidebar_set_location, vFpp) +GO(gtk_places_sidebar_set_open_flags, vFpu) +GO(gtk_places_sidebar_set_show_connect_to_server, vFpi) +GO(gtk_places_sidebar_set_show_desktop, vFpi) +GO(gtk_places_sidebar_set_show_enter_location, vFpi) +GO(gtk_places_sidebar_set_show_other_locations, vFpi) +GO(gtk_places_sidebar_set_show_recent, vFpi) +GO(gtk_places_sidebar_set_show_starred_location, vFpi) +GO(gtk_places_sidebar_set_show_trash, vFpi) +GO(gtk_plug_accessible_get_id, pFp) +GO(gtk_plug_accessible_get_type, LFv) GO(gtk_plug_construct, vFpp) GO(gtk_plug_construct_for_display, vFppp) GO(gtk_plug_get_embedded, iFp) @@ -2035,25 +2280,32 @@ GO(gtk_plug_get_type, LFv) GO(gtk_plug_new, pFp) GO(gtk_plug_new_for_display, pFpp) GO(gtk_policy_type_get_type, LFv) +GO(gtk_popover_accessible_get_type, LFv) +GO(gtk_popover_bind_model, vFppp) +GO(gtk_popover_constraint_get_type, LFv) +GO(gtk_popover_get_constrain_to, uFp) +GO(gtk_popover_get_default_widget, pFp) +GO(gtk_popover_get_modal, iFp) +GO(gtk_popover_get_pointing_to, iFpp) +GO(gtk_popover_get_position, uFp) +GO(gtk_popover_get_relative_to, pFp) +GO(gtk_popover_get_transitions_enabled, iFp) GO(gtk_popover_get_type, LFv) +GO(gtk_popover_menu_get_type, LFv) +GO(gtk_popover_menu_new, pFv) +GO(gtk_popover_menu_open_submenu, vFpp) +GO(gtk_popover_new, pFp) +GO(gtk_popover_new_from_model, pFpp) +GO(gtk_popover_popdown, vFp) +GO(gtk_popover_popup, vFp) +GO(gtk_popover_set_constrain_to, vFpu) +GO(gtk_popover_set_default_widget, vFpp) +GO(gtk_popover_set_modal, vFpi) +GO(gtk_popover_set_pointing_to, vFpp) +GO(gtk_popover_set_position, vFpu) +GO(gtk_popover_set_relative_to, vFpp) +GO(gtk_popover_set_transitions_enabled, vFpi) GO(gtk_position_type_get_type, LFv) -//GO(gtk_preview_draw_row, -//GO(gtk_preview_get_cmap, -//GO(gtk_preview_get_info, -GO(gtk_preview_get_type, LFv) -//GO(gtk_preview_get_visual, -//GO(gtk_preview_new, -//GO(gtk_preview_put, -//GO(gtk_preview_reset, -//GO(gtk_preview_set_color_cube, -//GO(gtk_preview_set_dither, -//GO(gtk_preview_set_expand, -//GO(gtk_preview_set_gamma, -//GO(gtk_preview_set_install_cmap, -//GO(gtk_preview_set_reserved, -//GO(gtk_preview_size, -GO(gtk_preview_type_get_type, LFv) -//GO(gtk_preview_uninit, //GO(gtk_print_backend_add_printer, //GO(gtk_print_backend_destroy, //GO(gtk_print_backend_error_quark, @@ -2070,39 +2322,39 @@ GO(gtk_print_capabilities_get_type, LFv) GO(gtk_print_context_create_pango_context, pFp) GO(gtk_print_context_create_pango_layout, pFp) GO(gtk_print_context_get_cairo_context, pFp) -//GO(gtk_print_context_get_dpi_x, +GO(gtk_print_context_get_dpi_x, dFp) GO(gtk_print_context_get_dpi_y, dFp) GO(gtk_print_context_get_hard_margins, iFppppp) -//GO(gtk_print_context_get_height, +GO(gtk_print_context_get_height, dFp) GO(gtk_print_context_get_page_setup, pFp) GO(gtk_print_context_get_pango_fontmap, pFp) GO(gtk_print_context_get_type, LFv) -//GO(gtk_print_context_get_width, +GO(gtk_print_context_get_width, dFp) GO(gtk_print_context_set_cairo_context, vFppdd) GO(gtk_print_duplex_get_type, LFv) -//GO(gtk_printer_accepts_pdf, -//GO(gtk_printer_accepts_ps, -//GO(gtk_printer_compare, -//GO(gtk_printer_get_backend, -//GO(gtk_printer_get_capabilities, +GO(gtk_printer_accepts_pdf, iFp) +GO(gtk_printer_accepts_ps, iFp) +GO(gtk_printer_compare, iFpp) +GO(gtk_printer_get_backend, pFp) +GO(gtk_printer_get_capabilities, uFp) GO(gtk_printer_get_default_page_size, pFp) -//GO(gtk_printer_get_description, -//GO(gtk_printer_get_hard_margins, -//GO(gtk_printer_get_icon_name, -//GO(gtk_printer_get_job_count, -//GO(gtk_printer_get_location, +GO(gtk_printer_get_description, pFp) +GO(gtk_printer_get_hard_margins, iFppppp) +GO(gtk_printer_get_icon_name, pFp) +GO(gtk_printer_get_job_count, iFp) +GO(gtk_printer_get_location, pFp) GO(gtk_printer_get_name, pFp) -//GO(gtk_printer_get_state_message, +GO(gtk_printer_get_state_message, pFp) GO(gtk_printer_get_type, LFv) -//GO(gtk_printer_has_details, -//GO(gtk_printer_is_accepting_jobs, -//GO(gtk_printer_is_active, +GO(gtk_printer_has_details, iFp) +GO(gtk_printer_is_accepting_jobs, iFp) +GO(gtk_printer_is_active, iFp) GO(gtk_printer_is_default, iFp) //GO(gtk_printer_is_new, -//GO(gtk_printer_is_paused, -//GO(gtk_printer_is_virtual, -//GO(gtk_printer_list_papers, -//GO(gtk_printer_new, +GO(gtk_printer_is_paused, iFp) +GO(gtk_printer_is_virtual, iFp) +GO(gtk_printer_list_papers, pFp) +GO(gtk_printer_new, pFppi) //GO(gtk_printer_option_allocate_choices, //GO(gtk_printer_option_choices_from_array, //GO(gtk_printer_option_clear_has_conflict, @@ -2129,9 +2381,9 @@ GO(gtk_printer_option_widget_get_type, LFv) //GO(gtk_printer_option_widget_has_external_label, //GO(gtk_printer_option_widget_new, //GO(gtk_printer_option_widget_set_source, -//GO(gtk_printer_request_details, +GO(gtk_printer_request_details, vFp) GO(gtk_print_error_get_type, LFv) -//GO(gtk_print_error_quark, +GO(gtk_print_error_quark, uFv) //GO(gtk_printer_set_accepts_pdf, //GO(gtk_printer_set_accepts_ps, //GO(gtk_printer_set_description, @@ -2145,76 +2397,97 @@ GO(gtk_print_error_get_type, LFv) //GO(gtk_printer_set_job_count, //GO(gtk_printer_set_location, //GO(gtk_printer_set_state_message, -//GO(gtk_print_job_get_printer, -//GO(gtk_print_job_get_settings, -//GO(gtk_print_job_get_status, -//GO(gtk_print_job_get_surface, -//GO(gtk_print_job_get_title, -//GO(gtk_print_job_get_track_print_status, +GO(gtk_print_job_get_collate, iFp) +GO(gtk_print_job_get_num_copies, iFp) +GO(gtk_print_job_get_n_up, uFp) +GO(gtk_print_job_get_n_up_layout, uFp) +GO(gtk_print_job_get_page_ranges, pFpp) +GO(gtk_print_job_get_pages, uFp) +GO(gtk_print_job_get_page_set, uFp) +GO(gtk_print_job_get_printer, pFp) +GO(gtk_print_job_get_reverse, iFp) +GO(gtk_print_job_get_rotate, iFp) +GO(gtk_print_job_get_scale, dFp) +GO(gtk_print_job_get_settings, pFp) +GO(gtk_print_job_get_status, uFp) +GO(gtk_print_job_get_surface, pFpp) +GO(gtk_print_job_get_title, pFp) +GO(gtk_print_job_get_track_print_status, iFp) GO(gtk_print_job_get_type, LFv) GO(gtk_print_job_new, pFpppp) GOM(gtk_print_job_send, vFEpppp) +GO(gtk_print_job_set_collate, vFpi) +GO(gtk_print_job_set_num_copies, vFpi) +GO(gtk_print_job_set_n_up, vFpu) +GO(gtk_print_job_set_n_up_layout, vFpu) +GO(gtk_print_job_set_page_ranges, vFppi) +GO(gtk_print_job_set_pages, vFpu) +GO(gtk_print_job_set_page_set, vFpu) +GO(gtk_print_job_set_reverse, vFpi) +GO(gtk_print_job_set_rotate, vFpi) +GO(gtk_print_job_set_scale, vFpd) +GO(gtk_print_job_set_source_fd, iFpip) GO(gtk_print_job_set_source_file, iFppp) //GO(gtk_print_job_set_status, -//GO(gtk_print_job_set_track_print_status, +GO(gtk_print_job_set_track_print_status, vFpi) GO(gtk_print_operation_action_get_type, LFv) -//GO(gtk_print_operation_cancel, -//GO(gtk_print_operation_draw_page_finish, +GO(gtk_print_operation_cancel, vFp) +GO(gtk_print_operation_draw_page_finish, vFp) GO(gtk_print_operation_get_default_page_setup, pFp) GO(gtk_print_operation_get_embed_page_setup, iFp) GO(gtk_print_operation_get_error, vFpp) -//GO(gtk_print_operation_get_has_selection, +GO(gtk_print_operation_get_has_selection, iFp) GO(gtk_print_operation_get_n_pages_to_print, iFp) GO(gtk_print_operation_get_print_settings, pFp) GO(gtk_print_operation_get_status, uFp) GO(gtk_print_operation_get_status_string, pFp) -//GO(gtk_print_operation_get_support_selection, +GO(gtk_print_operation_get_support_selection, iFp) GO(gtk_print_operation_get_type, LFv) -//GO(gtk_print_operation_is_finished, +GO(gtk_print_operation_is_finished, iFp) GO(gtk_print_operation_new, pFv) -//GO(gtk_print_operation_preview_end_preview, +GO(gtk_print_operation_preview_end_preview, vFp) GO(gtk_print_operation_preview_get_type, LFv) GO(gtk_print_operation_preview_is_selected, iFpi) GO(gtk_print_operation_preview_render_page, vFpi) GO(gtk_print_operation_result_get_type, LFv) GO(gtk_print_operation_run, uFpupp) -//GO(gtk_print_operation_set_allow_async, +GO(gtk_print_operation_set_allow_async, vFpi) GO(gtk_print_operation_set_current_page, vFpi) GO(gtk_print_operation_set_custom_tab_label, vFpp) GO(gtk_print_operation_set_default_page_setup, vFpp) -//GO(gtk_print_operation_set_defer_drawing, +GO(gtk_print_operation_set_defer_drawing, vFp) GO(gtk_print_operation_set_embed_page_setup, vFpi) -//GO(gtk_print_operation_set_export_filename, -//GO(gtk_print_operation_set_has_selection, -//GO(gtk_print_operation_set_job_name, -//GO(gtk_print_operation_set_n_pages, +GO(gtk_print_operation_set_export_filename, vFpp) +GO(gtk_print_operation_set_has_selection, vFpi) +GO(gtk_print_operation_set_job_name, vFpp) +GO(gtk_print_operation_set_n_pages, vFpi) GO(gtk_print_operation_set_print_settings, vFpp) -//GO(gtk_print_operation_set_show_progress, -//GO(gtk_print_operation_set_support_selection, -//GO(gtk_print_operation_set_track_print_status, +GO(gtk_print_operation_set_show_progress, vFpi) +GO(gtk_print_operation_set_support_selection, vFpi) +GO(gtk_print_operation_set_track_print_status, vFpi) GO(gtk_print_operation_set_unit, vFpu) -//GO(gtk_print_operation_set_use_full_page, +GO(gtk_print_operation_set_use_full_page, vFpi) GO(gtk_print_pages_get_type, LFv) GO(gtk_print_quality_get_type, LFv) GO(gtk_print_run_page_setup_dialog, pFppp) -//GO(gtk_print_run_page_setup_dialog_async, +//GOM(gtk_print_run_page_setup_dialog_async, vFppppp) GO(gtk_print_settings_copy, pFp) -//GO(gtk_print_settings_foreach, +//GOM(gtk_print_settings_foreach, vFppp) GO(gtk_print_settings_get, pFpp) GO(gtk_print_settings_get_bool, iFpp) -//GO(gtk_print_settings_get_collate, -//GO(gtk_print_settings_get_default_source, -//GO(gtk_print_settings_get_dither, +GO(gtk_print_settings_get_collate, iFp) +GO(gtk_print_settings_get_default_source, pFp) +GO(gtk_print_settings_get_dither, pFp) GO(gtk_print_settings_get_double, dFpp) GO(gtk_print_settings_get_double_with_default, dFppd) GO(gtk_print_settings_get_duplex, uFp) -//GO(gtk_print_settings_get_finishings, +GO(gtk_print_settings_get_finishings, pFp) GO(gtk_print_settings_get_int, iFpp) GO(gtk_print_settings_get_int_with_default, iFppi) GO(gtk_print_settings_get_length, dFppu) -//GO(gtk_print_settings_get_media_type, -//GO(gtk_print_settings_get_n_copies, -//GO(gtk_print_settings_get_number_up, +GO(gtk_print_settings_get_media_type, pFp) +GO(gtk_print_settings_get_n_copies, iFp) +GO(gtk_print_settings_get_number_up, iFp) GO(gtk_print_settings_get_number_up_layout, uFp) GO(gtk_print_settings_get_orientation, uFp) GO(gtk_print_settings_get_output_bin, pFp) @@ -2222,37 +2495,38 @@ GO(gtk_print_settings_get_page_ranges, pFpp) GO(gtk_print_settings_get_page_set, uFp) GO(gtk_print_settings_get_paper_height, dFpu) GO(gtk_print_settings_get_paper_size, pFp) -//GO(gtk_print_settings_get_paper_width, +GO(gtk_print_settings_get_paper_width, dFpu) GO(gtk_print_settings_get_printer, pFp) -//GO(gtk_print_settings_get_printer_lpi, +GO(gtk_print_settings_get_printer_lpi, dFp) GO(gtk_print_settings_get_print_pages, uFp) GO(gtk_print_settings_get_quality, uFp) GO(gtk_print_settings_get_resolution, iFp) -//GO(gtk_print_settings_get_resolution_x, +GO(gtk_print_settings_get_resolution_x, iFp) GO(gtk_print_settings_get_resolution_y, iFp) GO(gtk_print_settings_get_reverse, iFp) GO(gtk_print_settings_get_scale, dFp) GO(gtk_print_settings_get_type, LFv) -//GO(gtk_print_settings_get_use_color, -//GO(gtk_print_settings_has_key, -//GO(gtk_print_settings_load_file, +GO(gtk_print_settings_get_use_color, iFp) +GO(gtk_print_settings_has_key, iFpp) +GO(gtk_print_settings_load_file, iFppp) GO(gtk_print_settings_load_key_file, iFpppp) GO(gtk_print_settings_new, pFv) GO(gtk_print_settings_new_from_file, pFpp) +GO(gtk_print_settings_new_from_gvariant, pFp) GO(gtk_print_settings_new_from_key_file, pFppp) GO(gtk_print_settings_set, vFppp) GO(gtk_print_settings_set_bool, vFppi) GO(gtk_print_settings_set_collate, vFpi) -//GO(gtk_print_settings_set_default_source, -//GO(gtk_print_settings_set_dither, +GO(gtk_print_settings_set_default_source, vFpp) +GO(gtk_print_settings_set_dither, vFpp) GO(gtk_print_settings_set_double, vFppd) GO(gtk_print_settings_set_duplex, vFpu) -//GO(gtk_print_settings_set_finishings, +GO(gtk_print_settings_set_finishings, vFpp) GO(gtk_print_settings_set_int, vFppi) GO(gtk_print_settings_set_length, vFppdu) -//GO(gtk_print_settings_set_media_type, +GO(gtk_print_settings_set_media_type, vFpp) GO(gtk_print_settings_set_n_copies, vFpi) -//GO(gtk_print_settings_set_number_up, +GO(gtk_print_settings_set_number_up, vFpi) GO(gtk_print_settings_set_number_up_layout, vFpu) GO(gtk_print_settings_set_orientation, vFpu) GO(gtk_print_settings_set_output_bin, vFpp) @@ -2260,7 +2534,7 @@ GO(gtk_print_settings_set_page_ranges, vFppi) GO(gtk_print_settings_set_page_set, vFpu) GO(gtk_print_settings_set_paper_height, vFpdu) GO(gtk_print_settings_set_paper_size, vFpp) -//GO(gtk_print_settings_set_paper_width, +GO(gtk_print_settings_set_paper_width, vFpdu) GO(gtk_print_settings_set_printer, vFpp) GO(gtk_print_settings_set_printer_lpi, vFpd) GO(gtk_print_settings_set_print_pages, vFpu) @@ -2269,81 +2543,60 @@ GO(gtk_print_settings_set_resolution, vFpi) GO(gtk_print_settings_set_resolution_xy, vFpii) GO(gtk_print_settings_set_reverse, vFpi) GO(gtk_print_settings_set_scale, vFpd) -//GO(gtk_print_settings_set_use_color, +GO(gtk_print_settings_set_use_color, vFpi) GO(gtk_print_settings_to_file, iFppp) +GO(gtk_print_settings_to_gvariant, pFp) GO(gtk_print_settings_to_key_file, vFppp) -//GO(gtk_print_settings_unset, +GO(gtk_print_settings_unset, vFpp) GO(gtk_print_status_get_type, LFv) -//GO(gtk_print_unix_dialog_add_custom_tab, -//GO(gtk_print_unix_dialog_get_current_page, -//GO(gtk_print_unix_dialog_get_embed_page_setup, -//GO(gtk_print_unix_dialog_get_has_selection, -//GO(gtk_print_unix_dialog_get_manual_capabilities, +GO(gtk_print_unix_dialog_add_custom_tab, vFppp) +GO(gtk_print_unix_dialog_get_current_page, iFp) +GO(gtk_print_unix_dialog_get_embed_page_setup, iFp) +GO(gtk_print_unix_dialog_get_has_selection, iFp) +GO(gtk_print_unix_dialog_get_manual_capabilities, uFp) GO(gtk_print_unix_dialog_get_page_setup, pFp) -//GO(gtk_print_unix_dialog_get_page_setup_set, +GO(gtk_print_unix_dialog_get_page_setup_set, iFp) GO(gtk_print_unix_dialog_get_selected_printer, pFp) GO(gtk_print_unix_dialog_get_settings, pFp) -//GO(gtk_print_unix_dialog_get_support_selection, +GO(gtk_print_unix_dialog_get_support_selection, iFp) GO(gtk_print_unix_dialog_get_type, LFv) GO(gtk_print_unix_dialog_new, pFpp) -//GO(gtk_print_unix_dialog_set_current_page, +GO(gtk_print_unix_dialog_set_current_page, vFpi) GO(gtk_print_unix_dialog_set_embed_page_setup, vFpi) GO(gtk_print_unix_dialog_set_has_selection, vFpi) -GO(gtk_print_unix_dialog_set_manual_capabilities, vFpi) -//GO(gtk_print_unix_dialog_set_page_setup, +GO(gtk_print_unix_dialog_set_manual_capabilities, vFpu) +GO(gtk_print_unix_dialog_set_page_setup, vFpp) GO(gtk_print_unix_dialog_set_settings, vFpp) GO(gtk_print_unix_dialog_set_support_selection, vFpi) -GO(gtk_private_flags_get_type, LFv) +GO(gtk_progress_bar_accessible_get_type, LFv) GO(gtk_progress_bar_get_ellipsize, uFp) GO(gtk_progress_bar_get_fraction, dFp) -GO(gtk_progress_bar_get_orientation, iFp) +GO(gtk_progress_bar_get_inverted, iFp) GO(gtk_progress_bar_get_pulse_step, dFp) +GO(gtk_progress_bar_get_show_text, iFp) GO(gtk_progress_bar_get_text, pFp) GO(gtk_progress_bar_get_type, LFv) GO(gtk_progress_bar_new, pFv) -GO(gtk_progress_bar_new_with_adjustment, pFp) -GO(gtk_progress_bar_orientation_get_type, LFv) GO(gtk_progress_bar_pulse, vFp) -GO(gtk_progress_bar_set_activity_blocks, vFpu) -GO(gtk_progress_bar_set_activity_step, vFpu) -GO(gtk_progress_bar_set_bar_style, vFpi) -GO(gtk_progress_bar_set_discrete_blocks, vFpu) GO(gtk_progress_bar_set_ellipsize, vFpu) GO(gtk_progress_bar_set_fraction, vFpd) -GO(gtk_progress_bar_set_orientation, vFpi) +GO(gtk_progress_bar_set_inverted, vFpi) GO(gtk_progress_bar_set_pulse_step, vFpd) GO(gtk_progress_bar_set_show_text, vFpi) GO(gtk_progress_bar_set_text, vFpp) -GO(gtk_progress_bar_style_get_type, LFv) -GO(gtk_progress_bar_update, vFpd) -//GO(gtk_progress_configure, -//GO(gtk_progress_get_current_percentage, -//GO(gtk_progress_get_current_text, -//GO(gtk_progress_get_percentage_from_value, -//GO(gtk_progress_get_text_from_value, -GO(gtk_progress_get_type, LFv) -//GO(gtk_progress_get_value, -//GO(gtk_progress_set_activity_mode, -//GO(gtk_progress_set_adjustment, -//GO(gtk_progress_set_format_string, -//GO(gtk_progress_set_percentage, -//GO(gtk_progress_set_show_text, -//GO(gtk_progress_set_text_alignment, -//GO(gtk_progress_set_value, GO(gtk_propagate_event, vFpp) -//GOM(gtk_quit_add, iFEuBp) -GO(gtk_quit_add_destroy, vFup) -//GOM(gtk_quit_add_full, uFuBppB) -GO(gtk_quit_remove, vFu) -GO(gtk_quit_remove_by_data, vFp) +GO(gtk_propagation_phase_get_type, LFv) GO(gtk_radio_action_get_current_value, iFp) GO(gtk_radio_action_get_group, pFp) GO(gtk_radio_action_get_type, LFv) +GO(gtk_radio_action_join_group, vFpp) GO(gtk_radio_action_new, pFppppi) GO(gtk_radio_action_set_current_value, vFpi) GO(gtk_radio_action_set_group, vFpp) +GO(gtk_radio_button_accessible_get_type, LFv) GO(gtk_radio_button_get_group, pFp) GO(gtk_radio_button_get_type, LFv) +GO(gtk_radio_button_join_group, vFpp) GO(gtk_radio_button_new, pFp) GO(gtk_radio_button_new_from_widget, pFp) GO(gtk_radio_button_new_with_label, pFpp) @@ -2351,8 +2604,10 @@ GO(gtk_radio_button_new_with_label_from_widget, pFpp) GO(gtk_radio_button_new_with_mnemonic, pFpp) GO(gtk_radio_button_new_with_mnemonic_from_widget, pFpp) GO(gtk_radio_button_set_group, vFpp) +GO(gtk_radio_menu_item_accessible_get_type, LFv) GO(gtk_radio_menu_item_get_group, pFp) GO(gtk_radio_menu_item_get_type, LFv) +GO(gtk_radio_menu_item_join_group, vFpp) GO(gtk_radio_menu_item_new, pFp) GO(gtk_radio_menu_item_new_from_widget, pFp) GO(gtk_radio_menu_item_new_with_label, pFpp) @@ -2367,11 +2622,12 @@ GO(gtk_radio_tool_button_new_from_stock, pFpp) GO(gtk_radio_tool_button_new_from_widget, pFp) GO(gtk_radio_tool_button_new_with_stock_from_widget, pFpp) GO(gtk_radio_tool_button_set_group, vFpp) +GO(gtk_range_accessible_get_type, LFv) GO(gtk_range_get_adjustment, pFp) GO(gtk_range_get_fill_level, dFp) GO(gtk_range_get_flippable, iFp) GO(gtk_range_get_inverted, iFp) -GO(gtk_range_get_lower_stepper_sensitivity, iFp) +GO(gtk_range_get_lower_stepper_sensitivity, uFp) GO(gtk_range_get_min_slider_size, iFp) GO(gtk_range_get_range_rect, vFpp) GO(gtk_range_get_restrict_to_fill_level, iFp) @@ -2380,7 +2636,6 @@ GO(gtk_range_get_show_fill_level, iFp) GO(gtk_range_get_slider_range, vFppp) GO(gtk_range_get_slider_size_fixed, iFp) GO(gtk_range_get_type, LFv) -GO(gtk_range_get_update_policy, iFp) GO(gtk_range_get_upper_stepper_sensitivity, uFp) GO(gtk_range_get_value, dFp) GO(gtk_range_set_adjustment, vFpp) @@ -2388,22 +2643,18 @@ GO(gtk_range_set_fill_level, vFpd) GO(gtk_range_set_flippable, vFpi) GO(gtk_range_set_increments, vFpdd) GO(gtk_range_set_inverted, vFpi) -GO(gtk_range_set_lower_stepper_sensitivity, vFpi) +GO(gtk_range_set_lower_stepper_sensitivity, vFpu) GO(gtk_range_set_min_slider_size, vFpi) GO(gtk_range_set_range, vFpdd) GO(gtk_range_set_restrict_to_fill_level, vFpi) GO(gtk_range_set_round_digits, vFpi) GO(gtk_range_set_show_fill_level, vFpi) GO(gtk_range_set_slider_size_fixed, vFpi) -GO(gtk_range_set_update_policy, vFpi) GO(gtk_range_set_upper_stepper_sensitivity, vFpu) GO(gtk_range_set_value, vFpd) -GO(gtk_rc_add_class_style, vFpp) GO(gtk_rc_add_default_file, vFp) -GO(gtk_rc_add_widget_class_style, vFpp) -GO(gtk_rc_add_widget_name_style, vFpp) GO(gtk_rc_find_module_in_path, pFp) -GO(gtk_rc_find_pixmap_in_path, pFppp) +GO(gtk_rc_find_pixmap_in_path, pFppp) //need wraping? GO(gtk_rc_flags_get_type, LFv) GO(gtk_rc_get_default_files, pFv) GO(gtk_rc_get_im_module_file, pFv) @@ -2413,10 +2664,10 @@ GO(gtk_rc_get_style, pFp) GO(gtk_rc_get_style_by_paths, pFpppL) GO(gtk_rc_get_theme_dir, pFv) GO(gtk_rc_parse, vFp) -GO(gtk_rc_parse_color, uFpp) -GO(gtk_rc_parse_color_full, uFppp) -GO(gtk_rc_parse_priority, iFpp) -GO(gtk_rc_parse_state, uFpp) +//GOM(gtk_rc_parse_color, uFpp) +//GOM(gtk_rc_parse_color_full, uFppp) +//GOM(gtk_rc_parse_priority, uFpp) +//GOM(gtk_rc_parse_state, uFpp) GO(gtk_rc_parse_string, vFp) GO(gtk_rc_property_parse_border, iFppp) GO(gtk_rc_property_parse_color, iFppp) @@ -2431,20 +2682,16 @@ GO(gtk_rc_set_default_files, vFp) GO(gtk_rc_style_copy, pFp) GO(gtk_rc_style_get_type, LFv) GO(gtk_rc_style_new, pFv) -GO(gtk_rc_style_ref, vFp) -GO(gtk_rc_style_unref, vFp) GO(gtk_rc_token_type_get_type, LFv) -GO(gtk_revealer_get_type, LFv) -GO(gtk_revealer_transition_type_get_type, LFv) GO(gtk_recent_action_get_show_numbers, iFp) GO(gtk_recent_action_get_type, LFv) GO(gtk_recent_action_new, pFpppp) GO(gtk_recent_action_new_for_manager, pFppppp) GO(gtk_recent_action_set_show_numbers, vFpi) -//GO(gtk_recent_chooser_add_filter, +GO(gtk_recent_chooser_add_filter, vFpp) GO(gtk_recent_chooser_dialog_get_type, LFv) -//GO(gtk_recent_chooser_dialog_new, -//GO(gtk_recent_chooser_dialog_new_for_manager, +//GOM(gtk_recent_chooser_dialog_new, pFpppV) +//GOM(gtk_recent_chooser_dialog_new_for_manager, pFppppV) GO(gtk_recent_chooser_error_get_type, LFv) GO(gtk_recent_chooser_error_quark, uFv) GO(gtk_recent_chooser_get_current_item, pFp) @@ -2452,104 +2699,103 @@ GO(gtk_recent_chooser_get_current_uri, pFp) GO(gtk_recent_chooser_get_filter, pFp) GO(gtk_recent_chooser_get_items, pFp) GO(gtk_recent_chooser_get_limit, iFp) -//GO(gtk_recent_chooser_get_local_only, -//GO(gtk_recent_chooser_get_select_multiple, +GO(gtk_recent_chooser_get_local_only, iFp) +GO(gtk_recent_chooser_get_select_multiple, iFp) GO(gtk_recent_chooser_get_show_icons, iFp) -//GO(gtk_recent_chooser_get_show_not_found, -//GO(gtk_recent_chooser_get_show_numbers, -//GO(gtk_recent_chooser_get_show_private, -//GO(gtk_recent_chooser_get_show_tips, +GO(gtk_recent_chooser_get_show_not_found, iFp) +GO(gtk_recent_chooser_get_show_private, iFp) +GO(gtk_recent_chooser_get_show_tips, iFp) GO(gtk_recent_chooser_get_sort_type, uFp) GO(gtk_recent_chooser_get_type, LFv) GO(gtk_recent_chooser_get_uris, pFpp) GO(gtk_recent_chooser_list_filters, pFp) GO(gtk_recent_chooser_menu_get_show_numbers, iFp) GO(gtk_recent_chooser_menu_get_type, LFv) -//GO(gtk_recent_chooser_menu_new, -//GO(gtk_recent_chooser_menu_new_for_manager, +GO(gtk_recent_chooser_menu_new, pFv) +GO(gtk_recent_chooser_menu_new_for_manager, pFp) GO(gtk_recent_chooser_menu_set_show_numbers, vFpi) -//GO(gtk_recent_chooser_remove_filter, -//GO(gtk_recent_chooser_select_all, +GO(gtk_recent_chooser_remove_filter, vFpp) +GO(gtk_recent_chooser_select_all, vFp) GO(gtk_recent_chooser_select_uri, iFppp) -//GO(gtk_recent_chooser_set_current_uri, +GO(gtk_recent_chooser_set_current_uri, iFppp) GO(gtk_recent_chooser_set_filter, vFpp) GO(gtk_recent_chooser_set_limit, vFpi) -//GO(gtk_recent_chooser_set_local_only, -//GO(gtk_recent_chooser_set_select_multiple, +GO(gtk_recent_chooser_set_local_only, vFpi) +GO(gtk_recent_chooser_set_select_multiple, vFpi) GO(gtk_recent_chooser_set_show_icons, vFpi) -//GO(gtk_recent_chooser_set_show_not_found, -//GO(gtk_recent_chooser_set_show_numbers, -//GO(gtk_recent_chooser_set_show_private, -//GO(gtk_recent_chooser_set_show_tips, -//GO(gtk_recent_chooser_set_sort_func, +GO(gtk_recent_chooser_set_show_not_found, vFpi) +GO(gtk_recent_chooser_set_show_private, vFpi) +GO(gtk_recent_chooser_set_show_tips, vFpi) +//GOM(gtk_recent_chooser_set_sort_func, vFpppp) GO(gtk_recent_chooser_set_sort_type, vFpu) -//GO(gtk_recent_chooser_unselect_all, +GO(gtk_recent_chooser_unselect_all, vFp) GO(gtk_recent_chooser_unselect_uri, vFpp) GO(gtk_recent_chooser_widget_get_type, LFv) -//GO(gtk_recent_chooser_widget_new, +GO(gtk_recent_chooser_widget_new, pFv) GO(gtk_recent_chooser_widget_new_for_manager, pFp) GO(gtk_recent_filter_add_age, vFpi) -//GO(gtk_recent_filter_add_application, -//GO(gtk_recent_filter_add_custom, +GO(gtk_recent_filter_add_application, vFpp) +//GOM(gtk_recent_filter_add_custom, vFpuppp) GO(gtk_recent_filter_add_group, vFpp) -//GO(gtk_recent_filter_add_mime_type, -//GO(gtk_recent_filter_add_pattern, -//GO(gtk_recent_filter_add_pixbuf_formats, +GO(gtk_recent_filter_add_mime_type, vFpp) +GO(gtk_recent_filter_add_pattern, vFpp) +GO(gtk_recent_filter_add_pixbuf_formats, vFp) GO(gtk_recent_filter_filter, iFpp) GO(gtk_recent_filter_flags_get_type, LFv) GO(gtk_recent_filter_get_name, pFp) GO(gtk_recent_filter_get_needed, uFp) GO(gtk_recent_filter_get_type, LFv) GO(gtk_recent_filter_new, pFv) -//GO(gtk_recent_filter_set_name, +GO(gtk_recent_filter_set_name, vFpp) +GO(gtk_recent_info_create_app_info, pFppp) GO(gtk_recent_info_exists, iFp) -//GO(gtk_recent_info_get_added, +GO(gtk_recent_info_get_added, lFp) GO(gtk_recent_info_get_age, iFp) GO(gtk_recent_info_get_application_info, iFppppp) -//GO(gtk_recent_info_get_applications, -//GO(gtk_recent_info_get_description, -//GO(gtk_recent_info_get_display_name, +GO(gtk_recent_info_get_applications, pFpp) +GO(gtk_recent_info_get_description, pFp) +GO(gtk_recent_info_get_display_name, pFp) +GO(gtk_recent_info_get_gicon, pFp) GO(gtk_recent_info_get_groups, pFpp) GO(gtk_recent_info_get_icon, pFpi) GO(gtk_recent_info_get_mime_type, pFp) -//GO(gtk_recent_info_get_modified, -//GO(gtk_recent_info_get_private_hint, -//GO(gtk_recent_info_get_short_name, +GO(gtk_recent_info_get_modified, lFp) +GO(gtk_recent_info_get_private_hint, iFp) +GO(gtk_recent_info_get_short_name, pFp) GO(gtk_recent_info_get_type, LFv) -//GO(gtk_recent_info_get_uri, +GO(gtk_recent_info_get_uri, pFp) GO(gtk_recent_info_get_uri_display, pFp) GO(gtk_recent_info_get_visited, lFp) -//GO(gtk_recent_info_has_application, +GO(gtk_recent_info_has_application, iFpp) GO(gtk_recent_info_has_group, iFpp) -//GO(gtk_recent_info_is_local, -//GO(gtk_recent_info_last_application, +GO(gtk_recent_info_is_local, iFp) +GO(gtk_recent_info_last_application, pFp) GO(gtk_recent_info_match, iFpp) GO(gtk_recent_info_ref, pFp) GO(gtk_recent_info_unref, vFp) GO(gtk_recent_manager_add_full, iFppp) -//GO(gtk_recent_manager_add_item, +GO(gtk_recent_manager_add_item, iFpp) GO(gtk_recent_manager_error_get_type, LFv) -//GO(gtk_recent_manager_error_quark, +GO(gtk_recent_manager_error_quark, uFv) GO(gtk_recent_manager_get_default, pFv) -//GO(gtk_recent_manager_get_for_screen, GO(gtk_recent_manager_get_items, pFp) -//GO(gtk_recent_manager_get_limit, GO(gtk_recent_manager_get_type, LFv) GO(gtk_recent_manager_has_item, iFpp) GO(gtk_recent_manager_lookup_item, pFppp) GO(gtk_recent_manager_move_item, iFpppp) -//GO(gtk_recent_manager_new, +GO(gtk_recent_manager_new, pFv) GO(gtk_recent_manager_purge_items, iFpp) GO(gtk_recent_manager_remove_item, iFppp) -//GO(gtk_recent_manager_set_limit, -//GO(gtk_recent_manager_set_screen, GO(gtk_recent_sort_type_get_type, LFv) +GO(gtk_region_flags_get_type, LFv) GO(gtk_relief_style_get_type, LFv) GO(gtk_render_activity, vFppdddd) GO(gtk_render_arrow, vFppdddd) GO(gtk_render_background, vFppdddd) GO(gtk_render_background_get_clip, vFpddddp) GO(gtk_render_check, vFppdddd) +GO(gtk_renderer_cell_accessible_get_type, LFv) +GO(gtk_renderer_cell_accessible_new, pFp) GO(gtk_render_expander, vFppdddd) GO(gtk_render_extension, vFppddddu) GO(gtk_render_focus, vFppdddd) @@ -2567,72 +2813,117 @@ GO(gtk_render_slider, vFppddddu) GO(gtk_requisition_copy, pFp) GO(gtk_requisition_free, vFp) GO(gtk_requisition_get_type, LFv) +GO(gtk_requisition_new, pFv) GO(gtk_resize_mode_get_type, LFv) GO(gtk_response_type_get_type, LFv) +GO(gtk_revealer_get_child_revealed, iFp) +GO(gtk_revealer_get_reveal_child, iFp) +GO(gtk_revealer_get_transition_duration, uFp) +GO(gtk_revealer_get_transition_type, uFp) +GO(gtk_revealer_get_type, LFv) +GO(gtk_revealer_new, pFv) +GO(gtk_revealer_set_reveal_child, vFpi) +GO(gtk_revealer_set_transition_duration, vFpu) +GO(gtk_revealer_set_transition_type, vFpu) +GO(gtk_revealer_transition_type_get_type, LFv) GO(gtk_rgb_to_hsv, vFdddppp) -//GO(gtk_ruler_draw_pos, -//GO(gtk_ruler_draw_ticks, -//GO(gtk_ruler_get_metric, -//GO(gtk_ruler_get_range, -GO(gtk_ruler_get_type, LFv) -//GO(gtk_ruler_set_metric, -//GO(gtk_ruler_set_range, +GO(gtk_scale_accessible_get_type, LFv) GO(gtk_scale_add_mark, vFpdup) +GO(gtk_scale_button_accessible_get_type, LFv) GO(gtk_scale_button_get_adjustment, pFp) -//GO(gtk_scale_button_get_minus_button, -//GO(gtk_scale_button_get_orientation, -//GO(gtk_scale_button_get_plus_button, +GO(gtk_scale_button_get_minus_button, pFp) +GO(gtk_scale_button_get_plus_button, pFp) GO(gtk_scale_button_get_popup, pFp) GO(gtk_scale_button_get_type, LFv) GO(gtk_scale_button_get_value, dFp) GO(gtk_scale_button_new, pFudddp) GO(gtk_scale_button_set_adjustment, vFpp) GO(gtk_scale_button_set_icons, vFpp) -//GO(gtk_scale_button_set_orientation, GO(gtk_scale_button_set_value, vFpd) -//GO(gtk_scale_clear_marks, +GO(gtk_scale_clear_marks, vFp) GO(gtk_scale_get_digits, iFp) GO(gtk_scale_get_draw_value, iFp) +GO(gtk_scale_get_has_origin, iFp) GO(gtk_scale_get_layout, pFp) GO(gtk_scale_get_layout_offsets, vFppp) GO(gtk_scale_get_type, LFv) GO(gtk_scale_get_value_pos, uFp) -GO(gtk_scale_new, pFip) +GO(gtk_scale_new, pFup) +GO(gtk_scale_new_with_range, pFuddd) GO(gtk_scale_set_digits, vFpi) GO(gtk_scale_set_draw_value, vFpi) +GO(gtk_scale_set_has_origin, vFpi) GO(gtk_scale_set_value_pos, vFpu) +GO(gtk_scrollable_get_border, iFpp) +GO(gtk_scrollable_get_hadjustment, pFp) +GO(gtk_scrollable_get_hscroll_policy, uFp) GO(gtk_scrollable_get_type, LFv) +GO(gtk_scrollable_get_vadjustment, pFp) +GO(gtk_scrollable_get_vscroll_policy, uFp) +GO(gtk_scrollable_policy_get_type, LFv) +GO(gtk_scrollable_set_hadjustment, vFpp) +GO(gtk_scrollable_set_hscroll_policy, vFpu) +GO(gtk_scrollable_set_vadjustment, vFpp) +GO(gtk_scrollable_set_vscroll_policy, vFpu) GO(gtk_scrollbar_get_type, LFv) -GO(gtk_scrollbar_new, pFip) +GO(gtk_scrollbar_new, pFup) +GO(gtk_scrolled_window_accessible_get_type, LFv) GO(gtk_scrolled_window_add_with_viewport, vFpp) +GO(gtk_scrolled_window_get_capture_button_press, iFp) GO(gtk_scrolled_window_get_hadjustment, pFp) GO(gtk_scrolled_window_get_hscrollbar, pFp) +GO(gtk_scrolled_window_get_kinetic_scrolling, iFp) +GO(gtk_scrolled_window_get_max_content_height, iFp) +GO(gtk_scrolled_window_get_max_content_width, iFp) +GO(gtk_scrolled_window_get_min_content_height, iFp) +GO(gtk_scrolled_window_get_min_content_width, iFp) +GO(gtk_scrolled_window_get_overlay_scrolling, iFp) GO(gtk_scrolled_window_get_placement, uFp) GO(gtk_scrolled_window_get_policy, vFppp) +GO(gtk_scrolled_window_get_propagate_natural_height, iFp) +GO(gtk_scrolled_window_get_propagate_natural_width, iFp) GO(gtk_scrolled_window_get_shadow_type, uFp) GO(gtk_scrolled_window_get_type, LFv) GO(gtk_scrolled_window_get_vadjustment, pFp) GO(gtk_scrolled_window_get_vscrollbar, pFp) GO(gtk_scrolled_window_new, pFpp) +GO(gtk_scrolled_window_set_capture_button_press, vFpi) GO(gtk_scrolled_window_set_hadjustment, vFpp) +GO(gtk_scrolled_window_set_kinetic_scrolling, vFpi) +GO(gtk_scrolled_window_set_max_content_height, vFpi) +GO(gtk_scrolled_window_set_max_content_width, vFpi) +GO(gtk_scrolled_window_set_min_content_height, vFpi) +GO(gtk_scrolled_window_set_min_content_width, vFpi) +GO(gtk_scrolled_window_set_overlay_scrolling, vFpi) GO(gtk_scrolled_window_set_placement, vFpu) GO(gtk_scrolled_window_set_policy, vFpuu) +GO(gtk_scrolled_window_set_propagate_natural_height, vFpi) +GO(gtk_scrolled_window_set_propagate_natural_width, vFpi) GO(gtk_scrolled_window_set_shadow_type, vFpu) GO(gtk_scrolled_window_set_vadjustment, vFpp) GO(gtk_scrolled_window_unset_placement, vFp) GO(gtk_scroll_step_get_type, LFv) GO(gtk_scroll_type_get_type, LFv) +GO(gtk_search_bar_connect_entry, vFpp) +GO(gtk_search_bar_get_search_mode, iFp) +GO(gtk_search_bar_get_show_close_button, iFp) GO(gtk_search_bar_get_type, LFv) +GO(gtk_search_bar_handle_event, iFpp) +GO(gtk_search_bar_new, pFv) +GO(gtk_search_bar_set_search_mode, vFpi) +GO(gtk_search_bar_set_show_close_button, vFpi) GO(gtk_search_entry_get_type, LFv) +GO(gtk_search_entry_handle_event, iFpp) +GO(gtk_search_entry_new, pFv) GO(gtk_selection_add_target, vFpppu) GO(gtk_selection_add_targets, vFpppu) -GO(gtk_selection_clear, iFpp) GO(gtk_selection_clear_targets, vFpp) GO(gtk_selection_convert, iFpppu) GO(gtk_selection_data_copy, pFp) GO(gtk_selection_data_free, vFp) GO(gtk_selection_data_get_data, pFp) GO(gtk_selection_data_get_data_type, pFp) +GO(gtk_selection_data_get_data_with_length, pFpp) GO(gtk_selection_data_get_display, pFp) GO(gtk_selection_data_get_format, iFp) GO(gtk_selection_data_get_length, iFp) @@ -2664,34 +2955,33 @@ GO(gtk_separator_tool_item_get_draw, iFp) GO(gtk_separator_tool_item_get_type, LFv) GO(gtk_separator_tool_item_new, pFv) GO(gtk_separator_tool_item_set_draw, vFpi) -GO(gtk_set_locale, pFv) +GO(gtk_set_debug_flags, vFu) GO(gtk_settings_get_default, pFv) GO(gtk_settings_get_for_screen, pFp) GO(gtk_settings_get_type, LFv) GO(gtk_settings_install_property, vFp) -//GOM(gtk_settings_install_property_parser, vFEpB) +//GOM(gtk_settings_install_property_parser, vFEpp) +GO(gtk_settings_reset_property, vFpp) GO(gtk_settings_set_double_property, vFppdp) GO(gtk_settings_set_long_property, vFpplp) GO(gtk_settings_set_property_value, vFppp) GO(gtk_settings_set_string_property, vFpppp) GO(gtk_shadow_type_get_type, LFv) +GO(gtk_shortcut_label_get_accelerator, pFp) +GO(gtk_shortcut_label_get_disabled_text, pFp) +GO(gtk_shortcut_label_get_type, LFv) +GO(gtk_shortcut_label_new, pFp) +GO(gtk_shortcut_label_set_accelerator, vFpp) +GO(gtk_shortcut_label_set_disabled_text, vFpp) +GO(gtk_shortcuts_group_get_type, LFv) +GO(gtk_shortcuts_section_get_type, LFv) +GO(gtk_shortcuts_shortcut_get_type, LFv) +GO(gtk_shortcuts_window_get_type, LFv) +GO(gtk_shortcut_type_get_type, LFv) GO(gtk_show_about_dialog, vFpppppppppppppppppppppppp) //vaarg GO(gtk_show_uri, iFppup) GO(gtk_show_uri_on_window, iFppup) -GO(gtk_side_type_get_type, LFv) -//GO(gtk_signal_compat_matched, -GOM(gtk_signal_connect_full, LFEppppppii) -//GO(gtk_signal_connect_object_while_alive, -//GO(gtk_signal_connect_while_alive, -//GO(gtk_signal_emit, -//GO(gtk_signal_emit_by_name, -//GO(gtk_signal_emit_stop_by_name, -//GO(gtk_signal_emitv, -//GO(gtk_signal_emitv_by_name, -//GO(gtk_signal_new, -//GO(gtk_signal_newv, -GO(gtk_signal_run_type_get_type, LFv) -//GO(gtk_size_group_add_widget, +GO(gtk_size_group_add_widget, vFpp) GO(gtk_size_group_get_ignore_hidden, iFp) GO(gtk_size_group_get_mode, uFp) GO(gtk_size_group_get_type, LFv) @@ -2701,16 +2991,19 @@ GO(gtk_size_group_new, pFu) GO(gtk_size_group_remove_widget, vFpp) GO(gtk_size_group_set_ignore_hidden, vFpi) GO(gtk_size_group_set_mode, vFpu) -GO(gtk_snapshot_new, pFv) +GO(gtk_size_request_mode_get_type, LFv) GO(gtk_snapshot_free_to_node, pFp) +GO(gtk_snapshot_new, pFv) GO(gtk_snapshot_render_background, vFppdddd) +GO(gtk_socket_accessible_embed, vFpp) +GO(gtk_socket_accessible_get_type, LFv) GO(gtk_socket_add_id, vFpp) GO(gtk_socket_get_id, pFp) GO(gtk_socket_get_plug_window, pFp) GO(gtk_socket_get_type, LFv) GO(gtk_socket_new, pFv) -GO(gtk_socket_steal, vFpp) GO(gtk_sort_type_get_type, LFv) +GO(gtk_spin_button_accessible_get_type, LFv) GO(gtk_spin_button_configure, vFppdu) GO(gtk_spin_button_get_adjustment, pFp) GO(gtk_spin_button_get_digits, uFp) @@ -2737,18 +3030,49 @@ GO(gtk_spin_button_set_wrap, vFpi) GO(gtk_spin_button_spin, vFpud) GO(gtk_spin_button_update, vFp) GO(gtk_spin_button_update_policy_get_type, LFv) +GO(gtk_spinner_accessible_get_type, LFv) GO(gtk_spinner_get_type, LFv) GO(gtk_spinner_new, pFv) GO(gtk_spinner_start, vFp) GO(gtk_spinner_stop, vFp) GO(gtk_spin_type_get_type, LFv) +GO(gtk_stack_accessible_get_type, LFv) +GO(gtk_stack_add_named, vFppp) +GO(gtk_stack_add_titled, vFpppp) +GO(gtk_stack_get_child_by_name, pFpp) +GO(gtk_stack_get_hhomogeneous, iFp) +GO(gtk_stack_get_homogeneous, iFp) +GO(gtk_stack_get_interpolate_size, iFp) +GO(gtk_stack_get_transition_duration, uFp) +GO(gtk_stack_get_transition_running, iFp) +GO(gtk_stack_get_transition_type, uFp) GO(gtk_stack_get_type, LFv) +GO(gtk_stack_get_vhomogeneous, iFp) +GO(gtk_stack_get_visible_child, pFp) +GO(gtk_stack_get_visible_child_name, pFp) +GO(gtk_stack_new, pFv) +GO(gtk_stack_set_hhomogeneous, vFpi) +GO(gtk_stack_set_homogeneous, vFpi) +GO(gtk_stack_set_interpolate_size, vFpi) +GO(gtk_stack_set_transition_duration, vFpu) +GO(gtk_stack_set_transition_type, vFpu) +GO(gtk_stack_set_vhomogeneous, vFpi) +GO(gtk_stack_set_visible_child, vFpp) +GO(gtk_stack_set_visible_child_full, vFppu) +GO(gtk_stack_set_visible_child_name, vFpp) +GO(gtk_stack_sidebar_get_stack, pFp) +GO(gtk_stack_sidebar_get_type, LFv) +GO(gtk_stack_sidebar_new, pFv) +GO(gtk_stack_sidebar_set_stack, vFpp) +GO(gtk_stack_switcher_get_stack, pFp) GO(gtk_stack_switcher_get_type, LFv) +GO(gtk_stack_switcher_new, pFv) +GO(gtk_stack_switcher_set_stack, vFpp) GO(gtk_stack_transition_type_get_type, LFv) GO(gtk_state_flags_get_type, LFv) GO(gtk_state_type_get_type, LFv) +GO(gtk_statusbar_accessible_get_type, LFv) GO(gtk_statusbar_get_context_id, uFpp) -GO(gtk_statusbar_get_has_resize_grip, iFp) GO(gtk_statusbar_get_message_area, pFp) GO(gtk_statusbar_get_type, LFv) GO(gtk_statusbar_new, pFv) @@ -2756,8 +3080,6 @@ GO(gtk_statusbar_pop, vFpu) GO(gtk_statusbar_push, uFpup) GO(gtk_statusbar_remove, vFpuu) GO(gtk_statusbar_remove_all, vFpu) -GO(gtk_statusbar_set_has_resize_grip, vFpi) -GO(gtk_status_icon_get_blinking, iFp) GO(gtk_status_icon_get_geometry, iFpppp) GO(gtk_status_icon_get_gicon, pFp) GO(gtk_status_icon_get_has_tooltip, iFp) @@ -2781,7 +3103,6 @@ GO(gtk_status_icon_new_from_icon_name, pFp) GO(gtk_status_icon_new_from_pixbuf, pFp) GO(gtk_status_icon_new_from_stock, pFp) GO(gtk_status_icon_position_menu, vFppppp) -GO(gtk_status_icon_set_blinking, vFpi) GO(gtk_status_icon_set_from_file, vFpp) GO(gtk_status_icon_set_from_gicon, vFpp) GO(gtk_status_icon_set_from_icon_name, vFpp) @@ -2791,7 +3112,6 @@ GO(gtk_status_icon_set_has_tooltip, vFpi) GO(gtk_status_icon_set_name, vFpp) GO(gtk_status_icon_set_screen, vFpp) GO(gtk_status_icon_set_title, vFpp) -GO(gtk_status_icon_set_tooltip, vFpp) GO(gtk_status_icon_set_tooltip_markup, vFpp) GO(gtk_status_icon_set_tooltip_text, vFpp) GO(gtk_status_icon_set_visible, vFpi) @@ -2810,28 +3130,29 @@ GO(gtk_style_context_add_provider_for_display, vFppu) GO(gtk_style_context_add_provider_for_screen, vFppu) GO(gtk_style_context_add_region, vFppu) GO(gtk_style_context_cancel_animations, vFpp) -GOM(gtk_style_context_get, vFEppV) -GO(gtk_style_context_get_border, vFpip) -GO(gtk_style_context_get_background_color, vFpip) +GOM(gtk_style_context_get, vFEpuV) +GO(gtk_style_context_get_background_color, vFpup) +GO(gtk_style_context_get_border, vFpup) GO(gtk_style_context_get_border_color, vFpup) -GO(gtk_style_context_get_color, vFpip) +GO(gtk_style_context_get_color, vFpup) GO(gtk_style_context_get_direction, uFp) GO(gtk_style_context_get_font, pFpu) +GO(gtk_style_context_get_frame_clock, pFp) GO(gtk_style_context_get_junction_sides, uFp) GO(gtk_style_context_get_margin, vFpup) -GO(gtk_style_context_get_padding, vFpip) +GO(gtk_style_context_get_padding, vFpup) GO(gtk_style_context_get_parent, pFp) GO(gtk_style_context_get_path, pFp) GO(gtk_style_context_get_property, vFppup) -GO(gtk_style_context_get_frame_clock, pFp) GO(gtk_style_context_get_scale, iFp) GO(gtk_style_context_get_screen, pFp) GO(gtk_style_context_get_section, pFpp) GO(gtk_style_context_get_state, uFp) -GO2(gtk_style_context_get_style, vFpV, gtk_style_context_get_style_valist) +GOM(gtk_style_context_get_style, vFEpV) GO(gtk_style_context_get_style_property, vFppp) GOM(gtk_style_context_get_style_valist, vFEpA) -GOM(gtk_style_context_get_valist, vFEpiA) +GO(gtk_style_context_get_type, LFv) +GOM(gtk_style_context_get_valist, vFEpuA) GO(gtk_style_context_has_class, iFpp) GO(gtk_style_context_has_region, iFppp) GO(gtk_style_context_invalidate, vFp) @@ -2842,14 +3163,15 @@ GO(gtk_style_context_lookup_icon_set, pFpp) GO(gtk_style_context_new, pFv) GO(gtk_style_context_notify_state_change, vFpppui) GO(gtk_style_context_pop_animatable_region, vFp) +GO(gtk_style_context_print_flags_get_type, LFv) GO(gtk_style_context_push_animatable_region, vFpp) -GO(gtk_style_context_restore, vFp) GO(gtk_style_context_remove_class, vFpp) GO(gtk_style_context_remove_provider, vFpp) GO(gtk_style_context_remove_provider_for_display, vFpp) GO(gtk_style_context_remove_provider_for_screen, vFpp) GO(gtk_style_context_remove_region, vFpp) GO(gtk_style_context_reset_widgets, vFp) +GO(gtk_style_context_restore, vFp) GO(gtk_style_context_save, vFp) GO(gtk_style_context_scroll_animations, vFppii) GO(gtk_style_context_set_background, vFpp) @@ -2865,23 +3187,53 @@ GO(gtk_style_context_state_is_running, iFpup) GO(gtk_style_context_to_string, pFpu) GO(gtk_style_copy, pFp) GO(gtk_style_detach, vFp) -GO(gtk_style_get, vFpippppppppppp) //vaarg, wrap with gtk_style_get_valist? -GO(gtk_style_get_font, pFp) +//GOM(gtk_style_get, vFpLpV) GO(gtk_style_get_style_property, vFpLpp) GO(gtk_style_get_type, LFv) -//GO(gtk_style_get_valist, vFpipA) +//GOM(gtk_style_get_valist, vFpLpA) +GO(gtk_style_has_context, iFp) GO(gtk_style_lookup_color, iFppp) GO(gtk_style_lookup_icon_set, pFpp) GO(gtk_style_new, pFv) -GO(gtk_style_ref, pFp) +GO(gtk_style_properties_clear, vFp) +//GOM(gtk_style_properties_get, vFpuV) +GO(gtk_style_properties_get_property, iFppup) +GO(gtk_style_properties_get_type, LFv) +//GOM(gtk_style_properties_get_valist, vFpuA) +GO(gtk_style_properties_lookup_color, pFpp) +//GOM(gtk_style_properties_lookup_property, iFppp) +GO(gtk_style_properties_map_color, vFppp) +GO(gtk_style_properties_merge, vFppi) +GO(gtk_style_properties_new, pFv) +//GOM(gtk_style_properties_register_property, vFpp) +//GOM(gtk_style_properties_set, vFpuV) +GO(gtk_style_properties_set_property, vFppup) +//GOM(gtk_style_properties_set_valist, vFpuA) +GO(gtk_style_properties_unset_property, vFppu) +GO(gtk_style_provider_get_icon_factory, pFpp) +GO(gtk_style_provider_get_style, pFpp) +GO(gtk_style_provider_get_style_property, iFppupp) +GO(gtk_style_provider_get_type, LFv) GO(gtk_style_render_icon, pFppuuupp) GO(gtk_style_set_background, vFppu) -GO(gtk_style_set_font, vFpp) -GO(gtk_style_provider_get_type, LFv) -GO(gtk_style_unref, vFp) -GO(gtk_submenu_direction_get_type, LFv) -GO(gtk_submenu_placement_get_type, LFv) +GO(gtk_switch_accessible_get_type, LFv) +GO(gtk_switch_get_active, iFp) +GO(gtk_switch_get_state, iFp) GO(gtk_switch_get_type, LFv) +GO(gtk_switch_new, pFv) +GO(gtk_switch_set_active, vFpi) +GO(gtk_switch_set_state, vFpi) +GO(gtk_symbolic_color_get_type, LFv) +GO(gtk_symbolic_color_new_alpha, pFpd) +GO(gtk_symbolic_color_new_literal, pFp) +GO(gtk_symbolic_color_new_mix, pFppd) +GO(gtk_symbolic_color_new_name, pFp) +GO(gtk_symbolic_color_new_shade, pFpd) +GO(gtk_symbolic_color_new_win32, pFpi) +GO(gtk_symbolic_color_ref, pFp) +GO(gtk_symbolic_color_resolve, iFppp) +GO(gtk_symbolic_color_to_string, pFp) +GO(gtk_symbolic_color_unref, vFp) GO(gtk_table_attach, vFppuuuuuuuu) GO(gtk_table_attach_defaults, vFppuuuu) GO(gtk_table_get_col_spacing, uFpu) @@ -2898,7 +3250,10 @@ GO(gtk_table_set_col_spacings, vFpu) GO(gtk_table_set_homogeneous, vFpi) GO(gtk_table_set_row_spacing, vFpuu) GO(gtk_table_set_row_spacings, vFpu) +GO(gtk_target_entry_copy, pFp) +GO(gtk_target_entry_free, vFp) GO(gtk_target_entry_get_type, LFv) +GO(gtk_target_entry_new, pFpuu) GO(gtk_target_flags_get_type, LFv) GO(gtk_target_list_add, vFppuu) GO(gtk_target_list_add_image_targets, vFpui) @@ -2921,12 +3276,12 @@ GO(gtk_target_table_new_from_list, pFpp) GO(gtk_tearoff_menu_item_get_type, LFv) GO(gtk_tearoff_menu_item_new, pFv) GO(gtk_test_create_simple_window, pFpp) -//GO(gtk_test_create_widget, -//GO(gtk_test_display_button_window, +//GOM(gtk_test_create_widget, pFLpV) +//GOM(gtk_test_display_button_window, pFppV) GO(gtk_test_find_label, pFpp) GO(gtk_test_find_sibling, pFpL) GO(gtk_test_find_widget, pFppL) -//GO(gtk_test_init, +//GOM(gtk_test_init, vFppV) GO(gtk_test_list_all_types, pFp) GO(gtk_test_register_all_types, vFv) GO(gtk_test_slider_get_value, dFp) @@ -2934,20 +3289,20 @@ GO(gtk_test_slider_set_perc, vFpd) GO(gtk_test_spin_button_click, iFpui) GO(gtk_test_text_get, pFp) GO(gtk_test_text_set, vFpp) -//GO(gtk_test_widget_click, +GO(gtk_test_widget_click, iFpuu) GO(gtk_test_widget_send_key, iFpuu) -GO(gtk_text_anchored_child_set_layout, vFpp) +GO(gtk_test_widget_wait_for_draw, vFp) +//GO(gtk_text_anchored_child_set_layout, GO(gtk_text_attributes_copy, pFp) GO(gtk_text_attributes_copy_values, vFpp) GO(gtk_text_attributes_get_type, LFv) GO(gtk_text_attributes_new, pFv) GO(gtk_text_attributes_ref, pFp) GO(gtk_text_attributes_unref, vFp) -GO(gtk_text_backward_delete, iFpu) -GO(gtk_text_buffer_add_mark, vFpp) +GO(gtk_text_buffer_add_mark, vFppp) GO(gtk_text_buffer_add_selection_clipboard, vFpp) GO(gtk_text_buffer_apply_tag, vFpppp) -GO(gtk_text_buffer_apply_tag_by_name, vFpp) +GO(gtk_text_buffer_apply_tag_by_name, vFpppp) GO(gtk_text_buffer_backspace, iFppii) GO(gtk_text_buffer_begin_user_action, vFp) GO(gtk_text_buffer_copy_clipboard, vFpp) @@ -2994,6 +3349,7 @@ GO(gtk_text_buffer_insert_at_cursor, vFppi) GO(gtk_text_buffer_insert_child_anchor, vFppp) GO(gtk_text_buffer_insert_interactive, iFpppii) GO(gtk_text_buffer_insert_interactive_at_cursor, iFppii) +GO(gtk_text_buffer_insert_markup, vFpppi) GO(gtk_text_buffer_insert_pixbuf, vFppp) GO(gtk_text_buffer_insert_range, vFpppp) GO(gtk_text_buffer_insert_range_interactive, iFppppi) @@ -3004,9 +3360,9 @@ GO(gtk_text_buffer_move_mark_by_name, vFppp) GO(gtk_text_buffer_new, pFp) GO(gtk_text_buffer_paste_clipboard, vFpppi) GO(gtk_text_buffer_place_cursor, vFpp) -//GOM(gtk_text_buffer_register_deserialize_format, pFEppBpB) +//GOM(gtk_text_buffer_register_deserialize_format, pFEppppp) GO(gtk_text_buffer_register_deserialize_tagset, pFpp) -//GOM(gtk_text_buffer_register_serialize_format, pFppBpB) +//GOM(gtk_text_buffer_register_serialize_format, pFppppp) GO(gtk_text_buffer_register_serialize_tagset, pFpp) GO(gtk_text_buffer_remove_all_tags, vFppp) GO(gtk_text_buffer_remove_selection_clipboard, vFpp) @@ -3019,7 +3375,8 @@ GO(gtk_text_buffer_set_text, vFppi) GO(gtk_text_buffer_target_info_get_type, LFv) GO(gtk_text_buffer_unregister_deserialize_format, vFpp) GO(gtk_text_buffer_unregister_serialize_format, vFpp) -GO(gtk_text_byte_begins_utf8_char, iFp) +//GO(gtk_text_byte_begins_utf8_char, +GO(gtk_text_cell_accessible_get_type, LFv) GO(gtk_text_child_anchor_get_deleted, iFp) GO(gtk_text_child_anchor_get_type, LFv) GO(gtk_text_child_anchor_get_widgets, pFp) @@ -3028,12 +3385,8 @@ GO(gtk_text_child_anchor_queue_resize, vFpp) GO(gtk_text_child_anchor_register_child, vFppp) GO(gtk_text_child_anchor_unregister_child, vFpp) GO(gtk_text_direction_get_type, LFv) -GO(gtk_text_forward_delete, iFpu) -GO(gtk_text_freeze, vFp) -GO(gtk_text_get_length, uFp) -GO(gtk_text_get_point, uFp) -GO(gtk_text_get_type, LFv) -GO(gtk_text_insert, vFpppppi) +GO(gtk_text_extend_selection_get_type, LFv) +GO(gtk_text_iter_assign, vFpp) GO(gtk_text_iter_backward_char, iFp) GO(gtk_text_iter_backward_chars, iFpi) GO(gtk_text_iter_backward_cursor_position, iFp) @@ -3073,7 +3426,7 @@ GO(gtk_text_iter_forward_lines, iFpi) GO(gtk_text_iter_forward_search, iFppuppp) GO(gtk_text_iter_forward_sentence_end, iFp) GO(gtk_text_iter_forward_sentence_ends, iFpi) -GO(gtk_text_iter_forward_to_end, iFp) +GO(gtk_text_iter_forward_to_end, vFp) GO(gtk_text_iter_forward_to_line_end, iFp) GO(gtk_text_iter_forward_to_tag_toggle, iFpp) GO(gtk_text_iter_forward_visible_cursor_position, iFp) @@ -3123,6 +3476,7 @@ GO(gtk_text_iter_set_visible_line_index, vFpi) GO(gtk_text_iter_set_visible_line_offset, vFpi) GO(gtk_text_iter_starts_line, iFp) GO(gtk_text_iter_starts_sentence, iFp) +GO(gtk_text_iter_starts_tag, iFpp) GO(gtk_text_iter_starts_word, iFp) GO(gtk_text_iter_toggles_tag, iFpp) //GO(gtk_text_layout_changed, @@ -3144,7 +3498,7 @@ GO(gtk_text_iter_toggles_tag, iFpp) //GO(gtk_text_layout_get_lines, //GO(gtk_text_layout_get_line_yrange, //GO(gtk_text_layout_get_size, -GO(gtk_text_layout_get_type, LFv) +//GO(gtk_text_layout_get_type, //GO(gtk_text_layout_invalidate, //GO(gtk_text_layout_invalidate_cursors, //GO(gtk_text_layout_is_valid, @@ -3179,41 +3533,41 @@ GO(gtk_text_mark_get_type, LFv) GO(gtk_text_mark_get_visible, iFp) GO(gtk_text_mark_new, pFpi) GO(gtk_text_mark_set_visible, vFpi) -GO(gtk_text_new, pFpp) GO(gtk_text_search_flags_get_type, LFv) -GO(gtk_text_set_adjustments, vFppp) -GO(gtk_text_set_editable, vFpi) -GO(gtk_text_set_line_wrap, vFpi) -GO(gtk_text_set_point, vFpu) -GO(gtk_text_set_word_wrap, vFpi) +GO(gtk_text_tag_changed, vFpi) GO(gtk_text_tag_event, iFpppp) GO(gtk_text_tag_get_priority, iFp) GO(gtk_text_tag_get_type, LFv) GO(gtk_text_tag_new, pFp) GO(gtk_text_tag_set_priority, vFpi) GO(gtk_text_tag_table_add, iFpp) -//GOM(gtk_text_tag_table_foreach, vFEpBp) +//GOM(gtk_text_tag_table_foreach, vFEppp) GO(gtk_text_tag_table_get_size, iFp) GO(gtk_text_tag_table_get_type, LFv) GO(gtk_text_tag_table_lookup, pFpp) GO(gtk_text_tag_table_new, pFv) GO(gtk_text_tag_table_remove, vFpp) -GO(gtk_text_thaw, vFp) +//GO(gtk_text_unknown_char_utf8_gtk_tests_only, +GO(gtk_text_view_accessible_get_type, LFv) GO(gtk_text_view_add_child_at_anchor, vFppp) GO(gtk_text_view_add_child_in_window, vFppuii) GO(gtk_text_view_backward_display_line, iFpp) GO(gtk_text_view_backward_display_line_start, iFpp) -GO(gtk_text_view_buffer_to_window_coords, vFpiiipp) +GO(gtk_text_view_buffer_to_window_coords, vFpuiipp) GO(gtk_text_view_forward_display_line, iFpp) GO(gtk_text_view_forward_display_line_end, iFpp) GO(gtk_text_view_get_accepts_tab, iFp) GO(gtk_text_view_get_border_window_size, iFpu) +GO(gtk_text_view_get_bottom_margin, iFp) GO(gtk_text_view_get_buffer, pFp) +GO(gtk_text_view_get_cursor_locations, vFpppp) GO(gtk_text_view_get_cursor_visible, iFp) GO(gtk_text_view_get_default_attributes, pFp) GO(gtk_text_view_get_editable, iFp) GO(gtk_text_view_get_hadjustment, pFp) GO(gtk_text_view_get_indent, iFp) +GO(gtk_text_view_get_input_hints, uFp) +GO(gtk_text_view_get_input_purpose, uFp) GO(gtk_text_view_get_iter_at_location, iFppii) GO(gtk_text_view_get_iter_at_position, iFpppii) GO(gtk_text_view_get_iter_location, vFppp) @@ -3221,12 +3575,14 @@ GO(gtk_text_view_get_justification, uFp) GO(gtk_text_view_get_left_margin, iFp) GO(gtk_text_view_get_line_at_y, vFppip) GO(gtk_text_view_get_line_yrange, vFpppp) +GO(gtk_text_view_get_monospace, iFp) GO(gtk_text_view_get_overwrite, iFp) GO(gtk_text_view_get_pixels_above_lines, iFp) GO(gtk_text_view_get_pixels_below_lines, iFp) GO(gtk_text_view_get_pixels_inside_wrap, iFp) GO(gtk_text_view_get_right_margin, iFp) GO(gtk_text_view_get_tabs, pFp) +GO(gtk_text_view_get_top_margin, iFp) GO(gtk_text_view_get_type, LFv) GO(gtk_text_view_get_vadjustment, pFp) GO(gtk_text_view_get_visible_rect, vFpp) @@ -3234,53 +3590,75 @@ GO(gtk_text_view_get_window, pFpu) GO(gtk_text_view_get_window_type, uFpp) GO(gtk_text_view_get_wrap_mode, uFp) GO(gtk_text_view_im_context_filter_keypress, iFpp) +GO(gtk_text_view_layer_get_type, LFv) GO(gtk_text_view_move_child, vFppii) GO(gtk_text_view_move_mark_onscreen, iFpp) GO(gtk_text_view_move_visually, iFppi) GO(gtk_text_view_new, pFv) GO(gtk_text_view_new_with_buffer, pFp) GO(gtk_text_view_place_cursor_onscreen, iFp) +GO(gtk_text_view_reset_cursor_blink, vFp) GO(gtk_text_view_reset_im_context, vFp) GO(gtk_text_view_scroll_mark_onscreen, vFpp) GO(gtk_text_view_scroll_to_iter, iFppdidd) GO(gtk_text_view_scroll_to_mark, vFppdidd) GO(gtk_text_view_set_accepts_tab, vFpi) GO(gtk_text_view_set_border_window_size, vFpui) +GO(gtk_text_view_set_bottom_margin, vFpi) GO(gtk_text_view_set_buffer, vFpp) GO(gtk_text_view_set_cursor_visible, vFpi) GO(gtk_text_view_set_editable, vFpi) GO(gtk_text_view_set_indent, vFpi) +GO(gtk_text_view_set_input_hints, vFpu) +GO(gtk_text_view_set_input_purpose, vFpu) GO(gtk_text_view_set_justification, vFpu) GO(gtk_text_view_set_left_margin, vFpi) +GO(gtk_text_view_set_monospace, vFpi) GO(gtk_text_view_set_overwrite, vFpi) GO(gtk_text_view_set_pixels_above_lines, vFpi) GO(gtk_text_view_set_pixels_below_lines, vFpi) GO(gtk_text_view_set_pixels_inside_wrap, vFpi) GO(gtk_text_view_set_right_margin, vFpi) GO(gtk_text_view_set_tabs, vFpp) +GO(gtk_text_view_set_top_margin, vFpi) GO(gtk_text_view_set_wrap_mode, vFpu) GO(gtk_text_view_starts_display_line, iFpp) GO(gtk_text_view_window_to_buffer_coords, vFpuiipp) GO(gtk_text_window_type_get_type, LFv) -//GO(gtk_theme_engine_create_rc_style, -//GO(gtk_theme_engine_get, -GO(gtk_theme_engine_get_type, LFv) -GOM(gtk_timeout_add, uFEupp) -//GOM(gtk_timeout_add_full, uFuBppB) -GO(gtk_timeout_remove, vFu) -GO(gtk_tips_query_get_type, LFv) -//GO(gtk_tips_query_new, -//GO(gtk_tips_query_set_caller, -//GO(gtk_tips_query_set_labels, -//GO(gtk_tips_query_start_query, -//GO(gtk_tips_query_stop_query, -//GO(gtk_toggle_action_get_active, +//GOM(gtk_theming_engine_get, vFpuV) +GO(gtk_theming_engine_get_background_color, vFpup) +GO(gtk_theming_engine_get_border, vFpup) +GO(gtk_theming_engine_get_border_color, vFpup) +GO(gtk_theming_engine_get_color, vFpup) +GO(gtk_theming_engine_get_direction, uFp) +GO(gtk_theming_engine_get_font, pFpu) +GO(gtk_theming_engine_get_junction_sides, uFp) +GO(gtk_theming_engine_get_margin, vFpup) +GO(gtk_theming_engine_get_padding, vFpup) +GO(gtk_theming_engine_get_path, pFp) +GO(gtk_theming_engine_get_property, vFppup) +GO(gtk_theming_engine_get_screen, pFp) +GO(gtk_theming_engine_get_state, uFp) +//GOM(gtk_theming_engine_get_style, vFpV) +GO(gtk_theming_engine_get_style_property, vFppp) +//GOM(gtk_theming_engine_get_style_valist, vFpA) +GO(gtk_theming_engine_get_type, LFv) +//GOM(gtk_theming_engine_get_valist, vFpuA) +GO(gtk_theming_engine_has_class, iFpp) +GO(gtk_theming_engine_has_region, iFppp) +GO(gtk_theming_engine_load, pFp) +GO(gtk_theming_engine_lookup_color, iFppp) +//GOM(gtk_theming_engine_register_property, vFppp) +GO(gtk_theming_engine_state_is_running, iFpup) +//GO(gtk_theming_module_get_type, +GO(gtk_toggle_action_get_active, iFp) GO(gtk_toggle_action_get_draw_as_radio, iFp) GO(gtk_toggle_action_get_type, LFv) GO(gtk_toggle_action_new, pFpppp) -//GO(gtk_toggle_action_set_active, -//GO(gtk_toggle_action_set_draw_as_radio, +GO(gtk_toggle_action_set_active, vFpi) +GO(gtk_toggle_action_set_draw_as_radio, vFpi) GO(gtk_toggle_action_toggled, vFp) +GO(gtk_toggle_button_accessible_get_type, LFv) GO(gtk_toggle_button_get_active, iFp) GO(gtk_toggle_button_get_inconsistent, iFp) GO(gtk_toggle_button_get_mode, iFp) @@ -3297,40 +3675,21 @@ GO(gtk_toggle_tool_button_get_type, LFv) GO(gtk_toggle_tool_button_new, pFv) GO(gtk_toggle_tool_button_new_from_stock, pFp) GO(gtk_toggle_tool_button_set_active, vFpi) -GOM(gtk_toolbar_append_element, pFEpippppppp) -GOM(gtk_toolbar_append_item, pFEppppppp) -GO(gtk_toolbar_append_space, vFp) -GO(gtk_toolbar_append_widget, vFpppp) -GO(gtk_toolbar_child_type_get_type, LFv) GO(gtk_toolbar_get_drop_index, iFpii) GO(gtk_toolbar_get_icon_size, uFp) GO(gtk_toolbar_get_item_index, iFpp) GO(gtk_toolbar_get_n_items, iFp) GO(gtk_toolbar_get_nth_item, pFpi) -GO(gtk_toolbar_get_orientation, iFp) GO(gtk_toolbar_get_relief_style, uFp) GO(gtk_toolbar_get_show_arrow, iFp) GO(gtk_toolbar_get_style, uFp) -GO(gtk_toolbar_get_tooltips, iFp) GO(gtk_toolbar_get_type, LFv) GO(gtk_toolbar_insert, vFppi) -GOM(gtk_toolbar_insert_element, pFEpipppppppi) -GOM(gtk_toolbar_insert_item, pFEpppppppi) -GO(gtk_toolbar_insert_space, vFpi) -GOM(gtk_toolbar_insert_stock, pFEppppppi) -GO(gtk_toolbar_insert_widget, vFppppi) GO(gtk_toolbar_new, pFv) -GOM(gtk_toolbar_prepend_element, pFEpippppppp) -GOM(gtk_toolbar_prepend_item, pFEppppppp) -GO(gtk_toolbar_prepend_space, vFp) -GO(gtk_toolbar_prepend_widget, vFpppp) -GO(gtk_toolbar_remove_space, vFpi) GO(gtk_toolbar_set_drop_highlight_item, vFppi) GO(gtk_toolbar_set_icon_size, vFpu) -GO(gtk_toolbar_set_orientation, vFpi) GO(gtk_toolbar_set_show_arrow, vFpi) GO(gtk_toolbar_set_style, vFpu) -GO(gtk_toolbar_set_tooltips, vFpi) GO(gtk_toolbar_space_style_get_type, LFv) GO(gtk_toolbar_style_get_type, LFv) GO(gtk_toolbar_unset_icon_size, vFp) @@ -3351,11 +3710,11 @@ GO(gtk_tool_button_set_label_widget, vFpp) GO(gtk_tool_button_set_stock_id, vFpp) GO(gtk_tool_button_set_use_underline, vFpi) GO(gtk_tool_item_get_ellipsize_mode, uFp) -//GO(gtk_tool_item_get_expand, -//GO(gtk_tool_item_get_homogeneous, +GO(gtk_tool_item_get_expand, iFp) +GO(gtk_tool_item_get_homogeneous, iFp) GO(gtk_tool_item_get_icon_size, uFp) -//GO(gtk_tool_item_get_is_important, -//GO(gtk_tool_item_get_orientation, +GO(gtk_tool_item_get_is_important, iFp) +GO(gtk_tool_item_get_orientation, uFp) GO(gtk_tool_item_get_proxy_menu_item, pFpp) GO(gtk_tool_item_get_relief_style, uFp) GO(gtk_tool_item_get_text_alignment, fFp) @@ -3363,9 +3722,9 @@ GO(gtk_tool_item_get_text_orientation, uFp) GO(gtk_tool_item_get_text_size_group, pFp) GO(gtk_tool_item_get_toolbar_style, uFp) GO(gtk_tool_item_get_type, LFv) -//GO(gtk_tool_item_get_use_drag_window, -//GO(gtk_tool_item_get_visible_horizontal, -//GO(gtk_tool_item_get_visible_vertical, +GO(gtk_tool_item_get_use_drag_window, iFp) +GO(gtk_tool_item_get_visible_horizontal, iFp) +GO(gtk_tool_item_get_visible_vertical, iFp) GO(gtk_tool_item_group_get_collapsed, iFp) GO(gtk_tool_item_group_get_drop_item, pFpii) GO(gtk_tool_item_group_get_ellipsize, uFp) @@ -3376,122 +3735,100 @@ GO(gtk_tool_item_group_get_label_widget, pFp) GO(gtk_tool_item_group_get_n_items, uFp) GO(gtk_tool_item_group_get_nth_item, pFpu) GO(gtk_tool_item_group_get_type, LFv) -//GO(gtk_tool_item_group_insert, -//GO(gtk_tool_item_group_new, +GO(gtk_tool_item_group_insert, vFppi) +GO(gtk_tool_item_group_new, pFp) GO(gtk_tool_item_group_set_collapsed, vFpi) GO(gtk_tool_item_group_set_ellipsize, vFpu) GO(gtk_tool_item_group_set_header_relief, vFpu) GO(gtk_tool_item_group_set_item_position, vFppi) GO(gtk_tool_item_group_set_label, vFpp) GO(gtk_tool_item_group_set_label_widget, vFpp) -//GO(gtk_tool_item_new, -//GO(gtk_tool_item_rebuild_menu, +GO(gtk_tool_item_new, pFv) +GO(gtk_tool_item_rebuild_menu, vFp) GO(gtk_tool_item_retrieve_proxy_menu_item, pFp) -//GO(gtk_tool_item_set_expand, -//GO(gtk_tool_item_set_homogeneous, +GO(gtk_tool_item_set_expand, vFpi) +GO(gtk_tool_item_set_homogeneous, vFpi) GO(gtk_tool_item_set_is_important, vFpi) GO(gtk_tool_item_set_proxy_menu_item, vFppp) -//GO(gtk_tool_item_set_tooltip, GO(gtk_tool_item_set_tooltip_markup, vFpp) -//GO(gtk_tool_item_set_tooltip_text, -//GO(gtk_tool_item_set_use_drag_window, -//GO(gtk_tool_item_set_visible_horizontal, -//GO(gtk_tool_item_set_visible_vertical, -//GO(gtk_tool_item_toolbar_reconfigured, +GO(gtk_tool_item_set_tooltip_text, vFpp) +GO(gtk_tool_item_set_use_drag_window, vFpi) +GO(gtk_tool_item_set_visible_horizontal, vFpi) +GO(gtk_tool_item_set_visible_vertical, vFpi) +GO(gtk_tool_item_toolbar_reconfigured, vFp) GO(gtk_tool_palette_add_drag_dest, vFppuuu) GO(gtk_tool_palette_drag_targets_get_type, LFv) GO(gtk_tool_palette_get_drag_item, pFpp) GO(gtk_tool_palette_get_drag_target_group, pFv) -//GO(gtk_tool_palette_get_drag_target_item, +GO(gtk_tool_palette_get_drag_target_item, pFv) GO(gtk_tool_palette_get_drop_group, pFpii) GO(gtk_tool_palette_get_drop_item, pFpii) -//GO(gtk_tool_palette_get_exclusive, +GO(gtk_tool_palette_get_exclusive, iFpp) GO(gtk_tool_palette_get_expand, iFpp) GO(gtk_tool_palette_get_group_position, iFpp) -//GO(gtk_tool_palette_get_hadjustment, +GO(gtk_tool_palette_get_hadjustment, pFp) GO(gtk_tool_palette_get_icon_size, uFp) GO(gtk_tool_palette_get_style, uFp) GO(gtk_tool_palette_get_type, LFv) GO(gtk_tool_palette_get_vadjustment, pFp) -//GO(gtk_tool_palette_new, +GO(gtk_tool_palette_new, pFv) GO(gtk_tool_palette_set_drag_source, vFpu) -//GO(gtk_tool_palette_set_exclusive, +GO(gtk_tool_palette_set_exclusive, vFppi) GO(gtk_tool_palette_set_expand, vFppi) GO(gtk_tool_palette_set_group_position, vFppi) GO(gtk_tool_palette_set_icon_size, vFpu) GO(gtk_tool_palette_set_style, vFpu) -//GO(gtk_tool_palette_unset_icon_size, -//GO(gtk_tool_palette_unset_style, +GO(gtk_tool_palette_unset_icon_size, vFp) +GO(gtk_tool_palette_unset_style, vFp) GO(gtk_tool_shell_get_ellipsize_mode, uFp) GO(gtk_tool_shell_get_icon_size, uFp) -//GO(gtk_tool_shell_get_orientation, +GO(gtk_tool_shell_get_orientation, uFp) GO(gtk_tool_shell_get_relief_style, uFp) GO(gtk_tool_shell_get_style, uFp) GO(gtk_tool_shell_get_text_alignment, fFp) GO(gtk_tool_shell_get_text_orientation, uFp) GO(gtk_tool_shell_get_text_size_group, pFp) GO(gtk_tool_shell_get_type, LFv) -//GO(gtk_tool_shell_rebuild_menu, +GO(gtk_tool_shell_rebuild_menu, vFp) GO(gtk_tooltip_get_type, LFv) -GO(gtk_tooltips_data_get, pFp) -GO(gtk_tooltips_disable, vFp) -GO(gtk_tooltips_enable, vFp) GO(gtk_tooltip_set_custom, vFpp) GO(gtk_tooltip_set_icon, vFpp) GO(gtk_tooltip_set_icon_from_gicon, vFppu) GO(gtk_tooltip_set_icon_from_icon_name, vFppu) -//GO(gtk_tooltip_set_icon_from_stock, -//GO(gtk_tooltip_set_markup, +GO(gtk_tooltip_set_icon_from_stock, vFppu) +GO(gtk_tooltip_set_markup, vFpp) GO(gtk_tooltip_set_text, vFpp) GO(gtk_tooltip_set_tip_area, vFpp) -GO(gtk_tooltips_force_window, vFp) -GO(gtk_tooltips_get_info_from_tip_window, iFppp) -GO(gtk_tooltips_get_type, LFv) -GO(gtk_tooltips_new, pFv) -GO(gtk_tooltips_set_delay, vFpu) -GO(gtk_tooltips_set_tip, vFpppp) GO(gtk_tooltip_trigger_tooltip_query, vFp) -GO(gtk_tray_icon_get_type, LFv) -//GO(gtk_tree_append, -//GO(gtk_tree_child_position, -//GO(gtk_tree_clear_items, -//GO(gtk_tree_drag_dest_drag_data_received, +GO(gtk_toplevel_accessible_get_children, pFp) +GO(gtk_toplevel_accessible_get_type, LFv) +//GO(gtk_tray_icon_get_type, +GO(gtk_tree_drag_dest_drag_data_received, iFppp) GO(gtk_tree_drag_dest_get_type, LFv) GO(gtk_tree_drag_dest_row_drop_possible, iFppp) GO(gtk_tree_drag_source_drag_data_delete, iFpp) GO(gtk_tree_drag_source_drag_data_get, iFppp) GO(gtk_tree_drag_source_get_type, LFv) -//GO(gtk_tree_drag_source_row_draggable, +GO(gtk_tree_drag_source_row_draggable, iFpp) GO(gtk_tree_get_row_drag_data, iFppp) -GO(gtk_tree_get_type, LFv) -//GO(gtk_tree_insert, -//GO(gtk_tree_item_collapse, -//GO(gtk_tree_item_deselect, -//GO(gtk_tree_item_expand, -GO(gtk_tree_item_get_type, LFv) -//GO(gtk_tree_item_new, -//GO(gtk_tree_item_new_with_label, -//GO(gtk_tree_item_remove_subtree, -//GO(gtk_tree_item_select, -//GO(gtk_tree_item_set_subtree, GO(gtk_tree_iter_copy, pFp) GO(gtk_tree_iter_free, vFp) GO(gtk_tree_iter_get_type, LFv) -//GO(gtk_tree_model_filter_clear_cache, +GO(gtk_tree_model_filter_clear_cache, vFp) GO(gtk_tree_model_filter_convert_child_iter_to_iter, iFppp) -//GO(gtk_tree_model_filter_convert_child_path_to_path, +GO(gtk_tree_model_filter_convert_child_path_to_path, pFpp) GO(gtk_tree_model_filter_convert_iter_to_child_iter, vFppp) GO(gtk_tree_model_filter_convert_path_to_child_path, pFpp) GO(gtk_tree_model_filter_get_model, pFp) GO(gtk_tree_model_filter_get_type, LFv) GO(gtk_tree_model_filter_new, pFpp) -//GO(gtk_tree_model_filter_refilter, -//GO(gtk_tree_model_filter_set_modify_func, +GO(gtk_tree_model_filter_refilter, vFp) +//GOM(gtk_tree_model_filter_set_modify_func, vFpipppp) GO(gtk_tree_model_filter_set_visible_column, vFpi) -//GO(gtk_tree_model_filter_set_visible_func, +//GOM(gtk_tree_model_filter_set_visible_func, vFpppp) GO(gtk_tree_model_flags_get_type, LFv) -//GOM(gtk_tree_model_foreach, vFEpBp) -//GO2(gtk_tree_model_get, vFppV, gtk_tree_model_get_valist) +//GOM(gtk_tree_model_foreach, vFEppp) +//GOM(gtk_tree_model_get, vFppV) GO(gtk_tree_model_get_column_type, LFpi) GO(gtk_tree_model_get_flags, uFp) GO(gtk_tree_model_get_iter, iFppp) @@ -3501,7 +3838,7 @@ GO(gtk_tree_model_get_n_columns, iFp) GO(gtk_tree_model_get_path, pFpp) GO(gtk_tree_model_get_string_from_iter, pFpp) GO(gtk_tree_model_get_type, LFv) -//GO(gtk_tree_model_get_valist, vFppp) +//GOM(gtk_tree_model_get_valist, vFppA) GO(gtk_tree_model_get_value, vFppip) GO(gtk_tree_model_iter_children, iFppp) GO(gtk_tree_model_iter_has_child, iFpp) @@ -3509,24 +3846,25 @@ GO(gtk_tree_model_iter_n_children, iFpp) GO(gtk_tree_model_iter_next, iFpp) GO(gtk_tree_model_iter_nth_child, iFpppi) GO(gtk_tree_model_iter_parent, iFppp) +GO(gtk_tree_model_iter_previous, iFpp) GO(gtk_tree_model_ref_node, vFpp) GO(gtk_tree_model_row_changed, vFppp) GO(gtk_tree_model_row_deleted, vFpp) GO(gtk_tree_model_row_has_child_toggled, vFppp) GO(gtk_tree_model_row_inserted, vFppp) GO(gtk_tree_model_rows_reordered, vFpppp) -//GO(gtk_tree_model_sort_clear_cache, +GO(gtk_tree_model_rows_reordered_with_length, vFppppi) +GO(gtk_tree_model_sort_clear_cache, vFp) GO(gtk_tree_model_sort_convert_child_iter_to_iter, iFppp) -//GO(gtk_tree_model_sort_convert_child_path_to_path, +GO(gtk_tree_model_sort_convert_child_path_to_path, pFpp) GO(gtk_tree_model_sort_convert_iter_to_child_iter, vFppp) GO(gtk_tree_model_sort_convert_path_to_child_path, pFpp) GO(gtk_tree_model_sort_get_model, pFp) GO(gtk_tree_model_sort_get_type, LFv) GO(gtk_tree_model_sort_iter_is_valid, iFpp) GO(gtk_tree_model_sort_new_with_model, pFp) -//GO(gtk_tree_model_sort_reset_default_sort_func, +GO(gtk_tree_model_sort_reset_default_sort_func, vFp) GO(gtk_tree_model_unref_node, vFpp) -//GO(gtk_tree_new, GO(gtk_tree_path_append_index, vFpi) GO(gtk_tree_path_compare, iFpp) GO(gtk_tree_path_copy, pFp) @@ -3541,15 +3879,13 @@ GO(gtk_tree_path_is_descendant, iFpp) GO(gtk_tree_path_new, pFv) GO(gtk_tree_path_new_first, pFv) GO(gtk_tree_path_new_from_indices, pFippppppppppppppppp) // vaarg +GO(gtk_tree_path_new_from_indicesv, pFpL) GO(gtk_tree_path_new_from_string, pFp) GO(gtk_tree_path_next, vFp) GO(gtk_tree_path_prepend_index, vFpi) -GO(gtk_tree_path_prev, vFp) +GO(gtk_tree_path_prev, iFp) GO(gtk_tree_path_to_string, pFp) GO(gtk_tree_path_up, iFp) -//GO(gtk_tree_prepend, -//GO(gtk_tree_remove_item, -//GO(gtk_tree_remove_items, GO(gtk_tree_row_reference_copy, pFp) GO(gtk_tree_row_reference_deleted, vFpp) GO(gtk_tree_row_reference_free, vFp) @@ -3561,33 +3897,28 @@ GO(gtk_tree_row_reference_new, pFpp) GO(gtk_tree_row_reference_new_proxy, pFppp) GO(gtk_tree_row_reference_reordered, vFpppp) GO(gtk_tree_row_reference_valid, iFp) -//GO(gtk_tree_select_child, GO(gtk_tree_selection_count_selected_rows, iFp) GO(gtk_tree_selection_get_mode, uFp) GO(gtk_tree_selection_get_selected, iFppp) GO(gtk_tree_selection_get_selected_rows, pFpp) -//GOM(gtk_tree_selection_get_select_function, BFEp) +//GOM(gtk_tree_selection_get_select_function, pFEp) GO(gtk_tree_selection_get_tree_view, pFp) GO(gtk_tree_selection_get_type, LFv) -//GOM(gtk_tree_selection_get_user_data, pFEp) +GO(gtk_tree_selection_get_user_data, pFp) GO(gtk_tree_selection_iter_is_selected, iFpp) GO(gtk_tree_selection_path_is_selected, iFpp) GO(gtk_tree_selection_select_all, vFp) -//GOM(gtk_tree_selection_selected_foreach, vFEpBp) +//GOM(gtk_tree_selection_selected_foreach, vFEppp) GO(gtk_tree_selection_select_iter, vFpp) GO(gtk_tree_selection_select_path, vFpp) GO(gtk_tree_selection_select_range, vFppp) GO(gtk_tree_selection_set_mode, vFpu) -//GOM(gtk_tree_selection_set_select_function, vFEpBpB) +//GOM(gtk_tree_selection_set_select_function, vFEpppp) GO(gtk_tree_selection_unselect_all, vFp) GO(gtk_tree_selection_unselect_iter, vFpp) GO(gtk_tree_selection_unselect_path, vFpp) GO(gtk_tree_selection_unselect_range, vFppp) -//GO(gtk_tree_select_item, GO(gtk_tree_set_row_drag_data, iFppp) -//GO(gtk_tree_set_selection_mode, -//GO(gtk_tree_set_view_lines, -//GO(gtk_tree_set_view_mode, GO(gtk_tree_sortable_get_sort_column_id, iFppp) GO(gtk_tree_sortable_get_type, LFv) GO(gtk_tree_sortable_has_default_sort_func, iFp) @@ -3600,27 +3931,26 @@ GO(gtk_tree_store_clear, vFp) GO(gtk_tree_store_get_type, LFv) GO(gtk_tree_store_insert, vFpppi) GO(gtk_tree_store_insert_after, vFpppp) -//GO(gtk_tree_store_insert_before, -//GO(gtk_tree_store_insert_with_values, +GO(gtk_tree_store_insert_before, vFpppp) +//GOM(gtk_tree_store_insert_with_values, vFpppiV) GO(gtk_tree_store_insert_with_valuesv, vFpppippi) GO(gtk_tree_store_is_ancestor, iFppp) GO(gtk_tree_store_iter_depth, iFpp) GO(gtk_tree_store_iter_is_valid, iFpp) GO(gtk_tree_store_move_after, vFppp) -//GO(gtk_tree_store_move_before, -GOM(gtk_tree_store_new, pFEuV) +GO(gtk_tree_store_move_before, vFppp) +GOM(gtk_tree_store_new, pFEiV) GO(gtk_tree_store_newv, pFip) GO(gtk_tree_store_prepend, vFppp) -//GO(gtk_tree_store_remove, +GO(gtk_tree_store_remove, iFpp) GO(gtk_tree_store_reorder, vFppp) GOM(gtk_tree_store_set, vFEppV) GO(gtk_tree_store_set_column_types, vFpip) GOM(gtk_tree_store_set_valist, vFEppA) GO(gtk_tree_store_set_value, vFppip) GO(gtk_tree_store_set_valuesv, vFppppi) -//GO(gtk_tree_store_swap, -//GO(gtk_tree_unselect_child, -//GO(gtk_tree_unselect_item, +GO(gtk_tree_store_swap, vFppp) +GO(gtk_tree_view_accessible_get_type, LFv) GO(gtk_tree_view_append_column, iFpp) GO(gtk_tree_view_collapse_all, vFp) GO(gtk_tree_view_collapse_row, iFpp) @@ -3635,7 +3965,6 @@ GO(gtk_tree_view_column_clicked, vFp) GO(gtk_tree_view_column_focus_cell, vFpp) GO(gtk_tree_view_column_get_alignment, fFp) GO(gtk_tree_view_column_get_button, pFp) -GO(gtk_tree_view_column_get_cell_renderers, pFp) GO(gtk_tree_view_column_get_clickable, iFp) GO(gtk_tree_view_column_get_expand, iFp) GO(gtk_tree_view_column_get_fixed_width, iFp) @@ -3654,14 +3983,16 @@ GO(gtk_tree_view_column_get_type, LFv) GO(gtk_tree_view_column_get_visible, iFp) GO(gtk_tree_view_column_get_widget, pFp) GO(gtk_tree_view_column_get_width, iFp) +GO(gtk_tree_view_column_get_x_offset, iFp) GO(gtk_tree_view_column_new, pFv) +GO(gtk_tree_view_column_new_with_area, pFp) GO(gtk_tree_view_column_new_with_attributes, pFppppppppppppp) //vaarg GO(gtk_tree_view_column_pack_end, vFppi) GO(gtk_tree_view_column_pack_start, vFppi) GO(gtk_tree_view_column_queue_resize, vFp) GO(gtk_tree_view_columns_autosize, vFp) GO(gtk_tree_view_column_set_alignment, vFpf) -GO(gtk_tree_view_column_set_attributes, vFpppppppppppp) //vaarg +//GOM(gtk_tree_view_column_set_attributes, vFppV) GOM(gtk_tree_view_column_set_cell_data_func, vFEppppp) GO(gtk_tree_view_column_set_clickable, vFpi) GO(gtk_tree_view_column_set_expand, vFpi) @@ -3692,6 +4023,7 @@ GO(gtk_tree_view_enable_model_drag_source, vFpupiu) GO(gtk_tree_view_expand_all, vFp) GO(gtk_tree_view_expand_row, iFppi) GO(gtk_tree_view_expand_to_path, vFpp) +GO(gtk_tree_view_get_activate_on_single_click, iFp) GO(gtk_tree_view_get_background_area, vFpppp) GO(gtk_tree_view_get_bin_window, pFp) GO(gtk_tree_view_get_cell_area, vFpppp) @@ -3712,15 +4044,16 @@ GO(gtk_tree_view_get_hover_expand, iFp) GO(gtk_tree_view_get_hover_selection, iFp) GO(gtk_tree_view_get_level_indentation, iFp) GO(gtk_tree_view_get_model, pFp) +GO(gtk_tree_view_get_n_columns, uFp) GO(gtk_tree_view_get_path_at_pos, iFpiipppp) GO(gtk_tree_view_get_reorderable, iFp) -//GOM(gtk_tree_view_get_row_separator_func, BFEp) +//GOM(gtk_tree_view_get_row_separator_func, pFEp) GO(gtk_tree_view_get_rubber_banding, iFp) GO(gtk_tree_view_get_rules_hint, iFp) GO(gtk_tree_view_get_search_column, iFp) GO(gtk_tree_view_get_search_entry, pFp) -//GOM(gtk_tree_view_get_search_equal_func, BFEp) -//GOM(gtk_tree_view_get_search_position_func, BFEp) +//GOM(gtk_tree_view_get_search_equal_func, pFEp) +//GOM(gtk_tree_view_get_search_position_func, pFEp) GO(gtk_tree_view_get_selection, pFp) GO(gtk_tree_view_get_show_expanders, iFp) GO(gtk_tree_view_get_tooltip_column, iFp) @@ -3732,10 +4065,10 @@ GO(gtk_tree_view_get_visible_rect, vFpp) GO(gtk_tree_view_grid_lines_get_type, LFv) GO(gtk_tree_view_insert_column, iFppi) GO(gtk_tree_view_insert_column_with_attributes, iFpipppppppppppp) //vaarg -//GOM(gtk_tree_view_insert_column_with_data_func, iFpippBpB) +//GOM(gtk_tree_view_insert_column_with_data_func, iFpippppp) +GO(gtk_tree_view_is_blank_at_pos, iFpiipppp) GO(gtk_tree_view_is_rubber_banding_active, iFp) -//GOM(gtk_tree_view_map_expanded_rows, vFEpBp) -GO(gtk_tree_view_mode_get_type, LFv) +//GOM(gtk_tree_view_map_expanded_rows, vFEppp) GO(gtk_tree_view_move_column_after, vFppp) GO(gtk_tree_view_new, pFv) GO(gtk_tree_view_new_with_model, pFp) @@ -3744,10 +4077,11 @@ GO(gtk_tree_view_row_activated, vFppp) GO(gtk_tree_view_row_expanded, iFpp) GO(gtk_tree_view_scroll_to_cell, vFpppiff) GO(gtk_tree_view_scroll_to_point, vFpii) -//GOM(gtk_tree_view_set_column_drag_function, vFEpBpB) +GO(gtk_tree_view_set_activate_on_single_click, vFpi) +//GOM(gtk_tree_view_set_column_drag_function, vFEpppp) GO(gtk_tree_view_set_cursor, vFpppi) GO(gtk_tree_view_set_cursor_on_cell, vFppppi) -//GOM(gtk_tree_view_set_destroy_count_func, vFEpBpB) +//GOM(gtk_tree_view_set_destroy_count_func, vFEpppp) GO(gtk_tree_view_set_drag_dest_row, vFppu) GO(gtk_tree_view_set_enable_search, vFpi) GO(gtk_tree_view_set_enable_tree_lines, vFpi) @@ -3762,33 +4096,24 @@ GO(gtk_tree_view_set_hover_selection, vFpi) GO(gtk_tree_view_set_level_indentation, vFpi) GO(gtk_tree_view_set_model, vFpp) GO(gtk_tree_view_set_reorderable, vFpi) -//GOM(gtk_tree_view_set_row_separator_func, vFEpBpB) +//GOM(gtk_tree_view_set_row_separator_func, vFEpppp) GO(gtk_tree_view_set_rubber_banding, vFpi) GO(gtk_tree_view_set_rules_hint, vFpi) GO(gtk_tree_view_set_search_column, vFpi) GO(gtk_tree_view_set_search_entry, vFpp) GOM(gtk_tree_view_set_search_equal_func, vFEpppp) -//GOM(gtk_tree_view_set_search_position_func, vFEpBpB) +//GOM(gtk_tree_view_set_search_position_func, vFEpppp) GO(gtk_tree_view_set_show_expanders, vFpi) GO(gtk_tree_view_set_tooltip_cell, vFppppp) GO(gtk_tree_view_set_tooltip_column, vFpi) GO(gtk_tree_view_set_tooltip_row, vFppp) GO(gtk_tree_view_set_vadjustment, vFpp) -GO(gtk_tree_view_tree_to_widget_coords, vFpiipp) GO(gtk_tree_view_unset_rows_drag_dest, vFp) GO(gtk_tree_view_unset_rows_drag_source, vFp) -GO(gtk_tree_view_widget_to_tree_coords, vFpiipp) GO(gtk_true, iFv) -GOM(gtk_type_class, pFEi) -GO(gtk_type_enum_find_value, pFip) -GO(gtk_type_enum_get_values, pFi) -GO(gtk_type_flags_find_value, pFip) -GO(gtk_type_flags_get_values, pFi) -GO(gtk_type_init, vFi) -GO(gtk_type_new, pFi) -GOM(gtk_type_unique, iFELp) GO(gtk_ui_manager_add_ui, vFpupppui) -//GO(gtk_ui_manager_add_ui_from_file, +GO(gtk_ui_manager_add_ui_from_file, uFppp) +GO(gtk_ui_manager_add_ui_from_resource, uFppp) GO(gtk_ui_manager_add_ui_from_string, uFpplp) GO(gtk_ui_manager_ensure_update, vFp) GO(gtk_ui_manager_get_accel_group, pFp) @@ -3807,32 +4132,24 @@ GO(gtk_ui_manager_remove_action_group, vFpp) GO(gtk_ui_manager_remove_ui, vFpu) GO(gtk_ui_manager_set_add_tearoffs, vFpi) GO(gtk_unit_get_type, LFv) -GO(gtk_update_type_get_type, LFv) GO(gtk_vbox_get_type, LFv) GO(gtk_vbox_new, pFii) -//GO(gtk_vbutton_box_get_layout_default, -//GO(gtk_vbutton_box_get_spacing_default, GO(gtk_vbutton_box_get_type, LFv) -//GO(gtk_vbutton_box_new, -//GO(gtk_vbutton_box_set_layout_default, -//GO(gtk_vbutton_box_set_spacing_default, -//GO(gtk_viewport_get_bin_window, -//GO(gtk_viewport_get_hadjustment, +GO(gtk_vbutton_box_new, pFv) +GO(gtk_viewport_get_bin_window, pFp) +GO(gtk_viewport_get_hadjustment, pFp) GO(gtk_viewport_get_shadow_type, uFp) GO(gtk_viewport_get_type, LFv) GO(gtk_viewport_get_vadjustment, pFp) GO(gtk_viewport_get_view_window, pFp) GO(gtk_viewport_new, pFpp) -//GO(gtk_viewport_set_hadjustment, +GO(gtk_viewport_set_hadjustment, vFpp) GO(gtk_viewport_set_shadow_type, vFpu) GO(gtk_viewport_set_vadjustment, vFpp) -GO(gtk_visibility_get_type, LFv) GO(gtk_volume_button_get_type, LFv) GO(gtk_volume_button_new, pFv) GO(gtk_vpaned_get_type, LFv) GO(gtk_vpaned_new, pFv) -GO(gtk_vruler_get_type, LFv) -GO(gtk_vruler_new, pFv) GO(gtk_vscale_get_type, LFv) GO(gtk_vscale_new, pFp) GO(gtk_vscale_new_with_range, pFddd) @@ -3840,23 +4157,30 @@ GO(gtk_vscrollbar_get_type, LFv) GO(gtk_vscrollbar_new, pFp) GO(gtk_vseparator_get_type, LFv) GO(gtk_vseparator_new, pFv) +GO(gtk_widget_accessible_get_type, LFv) GO(gtk_widget_activate, iFp) GO(gtk_widget_add_accelerator, vFpppuuu) +GO(gtk_widget_add_device_events, vFppu) GO(gtk_widget_add_events, vFpi) GO(gtk_widget_add_mnemonic_label, vFpp) +//GOM(gtk_widget_add_tick_callback, uFEpppp) GO(gtk_widget_can_activate_accel, iFpu) -GO(gtk_widget_child_focus, iFpi) -GO(gtk_widget_child_notify, vFp) -GO(gtk_widget_class_bind_template_child_full, vFppil) -//GOM(gtk_widget_class_bind_template_callback_full, vFEppB) +GO(gtk_widget_child_focus, iFpu) +GO(gtk_widget_child_notify, vFpp) +//GOM(gtk_widget_class_bind_template_callback_full, vFppp) +GO(gtk_widget_class_bind_template_child_full, vFppil) // need wrapping? GO(gtk_widget_class_find_style_property, pFpp) +//GOM(gtk_widget_class_get_css_name, pFp) GO(gtk_widget_class_install_style_property, vFpp) -//GOM(gtk_widget_class_install_style_property_parser, vFEppB) +//GOM(gtk_widget_class_install_style_property_parser, vFEppp) GO(gtk_widget_class_list_style_properties, pFpp) GO(gtk_widget_class_path, vFpppp) GO(gtk_widget_class_set_accessible_role, vFpu) GO(gtk_widget_class_set_accessible_type, vFpL) -//GOM(gtk_widget_class_set_connect_func, vFEpBpB) +//GOM(gtk_widget_class_set_connect_func, vFEpppp) +//GOM(gtk_widget_class_set_css_name, vFpp) +//GOM(gtk_widget_class_set_template, vFpp) +//GOM(gtk_widget_class_set_template_from_resource, vFpp) GO(gtk_widget_compute_expand, iFpu) GO(gtk_widget_create_pango_context, pFp) GO(gtk_widget_create_pango_layout, pFpp) @@ -3867,13 +4191,14 @@ GO(gtk_widget_draw, vFpp) GO(gtk_widget_ensure_style, vFp) GO(gtk_widget_error_bell, vFp) GO(gtk_widget_event, iFpp) -GO(gtk_widget_flags_get_type, LFv) GO(gtk_widget_freeze_child_notify, vFp) GO(gtk_widget_get_accessible, pFp) -GO(gtk_widget_get_action, pFp) -GO(gtk_widget_get_allocation, vFpp) -GO(gtk_widget_get_allocated_width, iFp) +GO(gtk_widget_get_action_group, pFpp) +GO(gtk_widget_get_allocated_baseline, iFp) GO(gtk_widget_get_allocated_height, iFp) +GO(gtk_widget_get_allocated_size, vFppp) +GO(gtk_widget_get_allocated_width, iFp) +GO(gtk_widget_get_allocation, vFpp) GO(gtk_widget_get_ancestor, pFpL) GO(gtk_widget_get_app_paintable, iFp) GO(gtk_widget_get_can_default, iFp) @@ -3882,37 +4207,41 @@ GO(gtk_widget_get_child_requisition, vFpp) GO(gtk_widget_get_child_visible, iFp) GO(gtk_widget_get_clip, vFpp) GO(gtk_widget_get_clipboard, pFpp) -GO(gtk_widget_get_colormap, pFp) GO(gtk_widget_get_composite_name, pFp) -GO(gtk_widget_get_default_colormap, pFv) -GO(gtk_widget_get_default_direction, iFv) +GO(gtk_widget_get_default_direction, uFv) GO(gtk_widget_get_default_style, pFv) -GO(gtk_widget_get_default_visual, pFv) +GO(gtk_widget_get_device_enabled, iFpp) +GO(gtk_widget_get_device_events, uFpp) GO(gtk_widget_get_direction, uFp) GO(gtk_widget_get_display, pFp) GO(gtk_widget_get_double_buffered, iFp) GO(gtk_widget_get_events, iFp) -GO(gtk_widget_get_extension_events, iFp) +GO(gtk_widget_get_focus_on_click, iFp) +GO(gtk_widget_get_font_map, pFp) +GO(gtk_widget_get_font_options, pFp) GO(gtk_widget_get_frame_clock, pFp) -GO(gtk_widget_get_halign, iFp) +GO(gtk_widget_get_halign, uFp) GO(gtk_widget_get_has_tooltip, iFp) GO(gtk_widget_get_has_window, iFp) GO(gtk_widget_get_hexpand, iFp) GO(gtk_widget_get_hexpand_set, iFp) +GO(gtk_widget_get_mapped, iFp) GO(gtk_widget_get_margin_bottom, iFp) GO(gtk_widget_get_margin_end, iFp) GO(gtk_widget_get_margin_left, iFp) GO(gtk_widget_get_margin_right, iFp) GO(gtk_widget_get_margin_start, iFp) GO(gtk_widget_get_margin_top, iFp) -GO(gtk_widget_get_mapped, iFp) +GO(gtk_widget_get_modifier_mask, uFpu) GO(gtk_widget_get_modifier_style, pFp) GO(gtk_widget_get_name, pFp) GO(gtk_widget_get_native, pFp) GO(gtk_widget_get_no_show_all, iFp) +GO(gtk_widget_get_opacity, dFp) GO(gtk_widget_get_pango_context, pFp) GO(gtk_widget_get_parent, pFp) GO(gtk_widget_get_parent_window, pFp) +GO(gtk_widget_get_path, pFp) GO(gtk_widget_get_pointer, vFppp) GO(gtk_widget_get_preferred_height, vFppp) GO(gtk_widget_get_preferred_height_and_baseline_for_width, vFpipppp) @@ -3930,18 +4259,18 @@ GO(gtk_widget_get_screen, pFp) GO(gtk_widget_get_sensitive, iFp) GO(gtk_widget_get_settings, pFp) GO(gtk_widget_get_size_request, vFppp) -GO(gtk_widget_get_snapshot, pFpp) GO(gtk_widget_get_state, uFp) GO(gtk_widget_get_state_flags, uFp) GO(gtk_widget_get_style, pFp) GO(gtk_widget_get_style_context, pFp) +GO(gtk_widget_get_support_multidevice, iFp) GO(gtk_widget_get_template_child, pFpLp) GO(gtk_widget_get_tooltip_markup, pFp) GO(gtk_widget_get_tooltip_text, pFp) GO(gtk_widget_get_tooltip_window, pFp) GO(gtk_widget_get_toplevel, pFp) GO(gtk_widget_get_type, LFv) -GO(gtk_widget_get_valign, iFp) +GO(gtk_widget_get_valign, uFp) GO(gtk_widget_get_valign_with_baseline, uFp) GO(gtk_widget_get_vexpand, iFp) GO(gtk_widget_get_vexpand_set, iFp) @@ -3955,12 +4284,14 @@ GO(gtk_widget_has_focus, iFp) GO(gtk_widget_has_grab, iFp) GO(gtk_widget_has_rc_style, iFp) GO(gtk_widget_has_screen, iFp) +GO(gtk_widget_has_visible_focus, iFp) GO(gtk_widget_help_type_get_type, LFv) GO(gtk_widget_hide, vFp) -GO(gtk_widget_hide_all, vFp) GO(gtk_widget_hide_on_delete, iFp) +GO(gtk_widget_in_destruction, iFp) GO(gtk_widget_init_template, vFp) -GO(gtk_widget_input_shape_combine_mask, vFppii) +GO(gtk_widget_input_shape_combine_region, vFpp) +GO(gtk_widget_insert_action_group, vFppp) GO(gtk_widget_intersect, iFppp) GO(gtk_widget_is_ancestor, iFpp) GO(gtk_widget_is_composited, iFp) @@ -3968,29 +4299,37 @@ GO(gtk_widget_is_drawable, iFp) GO(gtk_widget_is_focus, iFp) GO(gtk_widget_is_sensitive, iFp) GO(gtk_widget_is_toplevel, iFp) +GO(gtk_widget_is_visible, iFp) GO(gtk_widget_keynav_failed, iFpu) GO(gtk_widget_list_accel_closures, pFp) +GO(gtk_widget_list_action_prefixes, pFp) GO(gtk_widget_list_mnemonic_labels, pFp) +GO(gtk_widget_measure, vFpuipppp) GO(gtk_widget_map, vFp) -GO(gtk_widget_measure, vFpiipppp) GO(gtk_widget_mnemonic_activate, iFpi) GO(gtk_widget_modify_base, vFpup) -GO(gtk_widget_modify_bg, vFpip) +GO(gtk_widget_modify_bg, vFpup) GO(gtk_widget_modify_cursor, vFppp) -GO(gtk_widget_modify_fg, vFpip) +GO(gtk_widget_modify_fg, vFpup) GO(gtk_widget_modify_font, vFpp) GO(gtk_widget_modify_style, vFpp) -GO(gtk_widget_modify_text, vFpip) +GO(gtk_widget_modify_text, vFpup) GO(gtk_widget_new, pFppppppppppppp) //vaarg +GO(gtk_widget_override_background_color, vFpup) +GO(gtk_widget_override_color, vFpup) +GO(gtk_widget_override_cursor, vFppp) +GO(gtk_widget_override_font, vFpp) +GO(gtk_widget_override_symbolic_color, vFppp) GO(gtk_widget_path, vFpppp) +GO(gtk_widget_path_append_for_widget, iFpp) GO(gtk_widget_path_append_type, iFpL) GO(gtk_widget_path_append_with_siblings, iFppu) -GO(gtk_widget_path_append_for_widget, iFpp) GO(gtk_widget_path_copy, pFp) GO(gtk_widget_path_free, vFp) GO(gtk_widget_path_get_object_type, LFp) +GO(gtk_widget_path_get_type, LFv) GO(gtk_widget_path_has_parent, iFpL) -GO(gtk_widget_path_is_type, iFpp) +GO(gtk_widget_path_is_type, iFpL) GO(gtk_widget_path_iter_add_class, vFpip) GO(gtk_widget_path_iter_add_region, vFpipu) GO(gtk_widget_path_iter_clear_classes, vFpi) @@ -3998,13 +4337,13 @@ GO(gtk_widget_path_iter_clear_regions, vFpi) GO(gtk_widget_path_iter_get_name, pFpi) GO(gtk_widget_path_iter_get_object_name, pFpi) GO(gtk_widget_path_iter_get_object_type, LFpi) -GO(gtk_widget_path_iter_get_siblings, pFpi) GO(gtk_widget_path_iter_get_sibling_index, uFpi) +GO(gtk_widget_path_iter_get_siblings, pFpi) GO(gtk_widget_path_iter_get_state, uFpi) GO(gtk_widget_path_iter_has_class, iFpip) GO(gtk_widget_path_iter_has_name, iFpip) GO(gtk_widget_path_iter_has_qclass, iFpiu) -GO(gtk_widget_path_iter_has_qname, iFpip) +GO(gtk_widget_path_iter_has_qname, iFpiu) GO(gtk_widget_path_iter_has_qregion, iFpiup) GO(gtk_widget_path_iter_has_region, iFpipp) GO(gtk_widget_path_iter_list_classes, pFpi) @@ -4018,32 +4357,31 @@ GO(gtk_widget_path_iter_set_state, vFpiu) GO(gtk_widget_path_length, iFp) GO(gtk_widget_path_new, pFv) GO(gtk_widget_path_prepend_type, vFpL) -GO(gtk_widget_path_to_string, pFp) GO(gtk_widget_path_ref, pFp) +GO(gtk_widget_path_to_string, pFp) GO(gtk_widget_path_unref, vFp) -GO(gtk_widget_pop_colormap, vFv) GO(gtk_widget_pop_composite_child, vFv) -GO(gtk_widget_push_colormap, vFp) GO(gtk_widget_push_composite_child, vFv) -GO(gtk_widget_queue_clear, vFp) -GO(gtk_widget_queue_clear_area, vFpiiii) +GO(gtk_widget_queue_allocate, vFp) +GO(gtk_widget_queue_compute_expand, vFp) GO(gtk_widget_queue_draw, vFp) GO(gtk_widget_queue_draw_area, vFpiiii) +GO(gtk_widget_queue_draw_region, vFpp) GO(gtk_widget_queue_resize, vFp) GO(gtk_widget_queue_resize_no_redraw, vFp) GO(gtk_widget_realize, vFp) -GO(gtk_widget_ref, pFp) GO(gtk_widget_region_intersect, pFpp) GO(gtk_widget_register_window, vFpp) GO(gtk_widget_remove_accelerator, iFppuu) GO(gtk_widget_remove_mnemonic_label, vFpp) +GO(gtk_widget_remove_tick_callback, vFpu) GO(gtk_widget_render_icon, pFppup) +GO(gtk_widget_render_icon_pixbuf, pFppu) GO(gtk_widget_reparent, vFpp) GO(gtk_widget_reset_rc_styles, vFp) -GO(gtk_widget_reset_shapes, vFp) +GO(gtk_widget_reset_style, vFp) GO(gtk_widget_send_expose, iFpp) GO(gtk_widget_send_focus_change, iFpp) -GO(gtk_widget_set, vFppppppppppppppp) //vaarg GO(gtk_widget_set_accel_path, vFppp) GO(gtk_widget_set_allocation, vFpp) GO(gtk_widget_set_app_paintable, vFpi) @@ -4051,16 +4389,18 @@ GO(gtk_widget_set_can_default, vFpi) GO(gtk_widget_set_can_focus, vFpi) GO(gtk_widget_set_child_visible, vFpi) GO(gtk_widget_set_clip, vFpp) -GO(gtk_widget_set_colormap, vFpp) GO(gtk_widget_set_composite_name, vFpp) GO(gtk_widget_set_css_classes, vFpp) -GO(gtk_widget_set_default_colormap, vFp) GO(gtk_widget_set_default_direction, vFu) +GO(gtk_widget_set_device_enabled, vFppi) +GO(gtk_widget_set_device_events, vFppu) GO(gtk_widget_set_direction, vFpu) GO(gtk_widget_set_double_buffered, vFpi) GO(gtk_widget_set_events, vFpi) -GO(gtk_widget_set_extension_events, vFpi) -GO(gtk_widget_set_halign, vFpi) +GO(gtk_widget_set_focus_on_click, vFpi) +GO(gtk_widget_set_font_map, vFpp) +GO(gtk_widget_set_font_options, vFpp) +GO(gtk_widget_set_halign, vFpu) GO(gtk_widget_set_has_tooltip, vFpi) GO(gtk_widget_set_has_window, vFpi) GO(gtk_widget_set_hexpand, vFpi) @@ -4074,52 +4414,51 @@ GO(gtk_widget_set_margin_start, vFpi) GO(gtk_widget_set_margin_top, vFpi) GO(gtk_widget_set_name, vFpp) GO(gtk_widget_set_no_show_all, vFpi) +GO(gtk_widget_set_opacity, vFpd) GO(gtk_widget_set_parent, vFpp) GO(gtk_widget_set_parent_window, vFpp) -GO(gtk_widget_queue_compute_expand, vFp) GO(gtk_widget_set_realized, vFpi) GO(gtk_widget_set_receives_default, vFpi) GO(gtk_widget_set_redraw_on_allocate, vFpi) -GO(gtk_widget_set_scroll_adjustments, iFppp) GO(gtk_widget_set_sensitive, vFpi) GO(gtk_widget_set_size_request, vFpii) GO(gtk_widget_set_state, vFpu) GO(gtk_widget_set_state_flags, vFpui) GO(gtk_widget_set_style, vFpp) -GO(gtk_widget_class_set_template, vFpp) -GO(gtk_widget_class_set_template_from_resource, vFpp) +GO(gtk_widget_set_support_multidevice, vFpi) GO(gtk_widget_set_tooltip_markup, vFpp) GO(gtk_widget_set_tooltip_text, vFpp) GO(gtk_widget_set_tooltip_window, vFpp) -GO(gtk_widget_set_uposition, vFpii) -GO(gtk_widget_set_usize, vFpii) GO(gtk_widget_set_valign, vFpu) GO(gtk_widget_set_vexpand, vFpi) GO(gtk_widget_set_vexpand_set, vFpi) GO(gtk_widget_set_visible, vFpi) +GO(gtk_widget_set_visual, vFpp) GO(gtk_widget_set_window, vFpp) -GO(gtk_widget_shape_combine_mask, vFppii) +GO(gtk_widget_shape_combine_region, vFpp) GO(gtk_widget_show, vFp) GO(gtk_widget_show_all, vFp) GO(gtk_widget_show_now, vFp) -GO(gtk_widget_size_allocate, vFpppuii) +GO(gtk_widget_size_allocate, vFpp) +GO(gtk_widget_size_allocate_with_baseline, vFppi) GO(gtk_widget_size_request, vFpp) GO(gtk_widget_style_attach, vFp) GOM(gtk_widget_style_get, vFEppV) GO(gtk_widget_style_get_property, vFppp) -//GO(gtk_widget_style_get_valist, vFppp) +//GOM(gtk_widget_style_get_valist, vFppA) GO(gtk_widget_thaw_child_notify, vFp) GO(gtk_widget_translate_coordinates, iFppiipp) GO(gtk_widget_trigger_tooltip_query, vFp) GO(gtk_widget_unmap, vFp) GO(gtk_widget_unparent, vFp) GO(gtk_widget_unrealize, vFp) -GO(gtk_widget_unref, vFp) +GO(gtk_widget_unregister_window, vFpp) +GO(gtk_widget_unset_state_flags, vFpu) +GO(gtk_window_accessible_get_type, LFv) GO(gtk_window_activate_default, iFp) GO(gtk_window_activate_focus, iFp) GO(gtk_window_activate_key, iFpp) GO(gtk_window_add_accel_group, vFpp) -GO(gtk_window_add_embedded_xid, vFpu) GO(gtk_window_add_mnemonic, vFpup) GO(gtk_window_begin_move_drag, vFpiiiu) GO(gtk_window_begin_resize_drag, vFpuiiiu) @@ -4127,8 +4466,10 @@ GO(gtk_window_close, vFp) GO(gtk_window_deiconify, vFp) GO(gtk_window_destroy, vFp) GO(gtk_window_fullscreen, vFp) +GO(gtk_window_fullscreen_on_monitor, vFppi) GO(gtk_window_get_accept_focus, iFp) -GO(gdk_window_get_clip_region, pFp) +GO(gtk_window_get_application, pFp) +GO(gtk_window_get_attached_to, pFp) GO(gtk_window_get_decorated, iFp) GO(gtk_window_get_default_icon_list, pFv) GO(gtk_window_get_default_icon_name, pFv) @@ -4138,11 +4479,11 @@ GO(gtk_window_get_deletable, iFp) GO(gtk_window_get_destroy_with_parent, iFp) GO(gtk_window_get_focus, pFp) GO(gtk_window_get_focus_on_map, iFp) -GO(gtk_window_get_frame_dimensions, vFppppp) +GO(gtk_window_get_focus_visible, iFp) GO(gtk_window_get_gravity, uFp) GO(gtk_window_get_group, pFp) -GO(gtk_window_get_has_frame, iFp) GO(gtk_window_get_has_resize_grip, iFp) +GO(gtk_window_get_hide_titlebar_when_maximized, iFp) GO(gtk_window_get_icon, pFp) GO(gtk_window_get_icon_list, pFp) GO(gtk_window_get_icon_name, pFp) @@ -4152,19 +4493,21 @@ GO(gtk_window_get_modal, iFp) GO(gtk_window_get_opacity, dFp) GO(gtk_window_get_position, vFppp) GO(gtk_window_get_resizable, iFp) +GO(gtk_window_get_resize_grip_area, iFpp) GO(gtk_window_get_role, pFp) -GO(gdk_window_get_scale_factor, iFp) GO(gtk_window_get_screen, pFp) GO(gtk_window_get_size, vFppp) GO(gtk_window_get_skip_pager_hint, iFp) GO(gtk_window_get_skip_taskbar_hint, iFp) GO(gtk_window_get_title, pFp) +GO(gtk_window_get_titlebar, pFp) GO(gtk_window_get_transient_for, pFp) GO(gtk_window_get_type, LFv) GO(gtk_window_get_type_hint, uFp) GO(gtk_window_get_urgency_hint, iFp) GO(gtk_window_get_window_type, uFp) GO(gtk_window_group_add_window, vFpp) +GO(gtk_window_group_get_current_device_grab, pFpp) GO(gtk_window_group_get_current_grab, pFp) GO(gtk_window_group_get_type, LFv) GO(gtk_window_group_list_windows, pFp) @@ -4174,6 +4517,7 @@ GO(gtk_window_has_group, iFp) GO(gtk_window_has_toplevel_focus, iFp) GO(gtk_window_iconify, vFp) GO(gtk_window_is_active, iFp) +GO(gtk_window_is_maximized, iFp) GO(gtk_window_list_toplevels, pFv) GO(gtk_window_maximize, vFp) GO(gtk_window_mnemonic_activate, iFpuu) @@ -4185,14 +4529,18 @@ GO(gtk_window_present, vFp) GO(gtk_window_present_with_time, vFpu) GO(gtk_window_propagate_key_event, iFpp) GO(gtk_window_remove_accel_group, vFpp) -GO(gtk_window_remove_embedded_xid, vFpu) GO(gtk_window_remove_mnemonic, vFpup) GO(gtk_window_reshow_with_initial_size, vFp) GO(gtk_window_resize, vFpii) +GO(gtk_window_resize_grip_is_visible, iFp) +GO(gtk_window_resize_to_geometry, vFpii) GO(gtk_window_set_accept_focus, vFpi) +GO(gtk_window_set_application, vFpp) +GO(gtk_window_set_attached_to, vFpp) GO(gtk_window_set_auto_startup_notification, vFi) GO(gtk_window_set_decorated, vFpi) GO(gtk_window_set_default, vFpp) +GO(gtk_window_set_default_geometry, vFpii) GO(gtk_window_set_default_icon, vFp) GO(gtk_window_set_default_icon_from_file, iFpp) GO(gtk_window_set_default_icon_list, vFp) @@ -4202,22 +4550,24 @@ GO(gtk_window_set_deletable, vFpi) GO(gtk_window_set_destroy_with_parent, vFpi) GO(gtk_window_set_focus, vFpp) GO(gtk_window_set_focus_on_map, vFpi) -GO(gtk_window_set_frame_dimensions, vFpiiii) +GO(gtk_window_set_focus_visible, vFpi) GO(gtk_window_set_geometry_hints, vFpppu) GO(gtk_window_set_gravity, vFpu) -GO(gtk_window_set_has_frame, vFpi) +GO(gtk_window_set_has_resize_grip, vFpi) +GO(gtk_window_set_has_user_ref_count, vFpi) GO(gtk_window_set_hide_on_close, vFpi) +GO(gtk_window_set_hide_titlebar_when_maximized, vFpi) GO(gtk_window_set_icon, vFpp) GO(gtk_window_set_icon_from_file, iFppp) GO(gtk_window_set_icon_list, vFpp) GO(gtk_window_set_icon_name, vFpp) +GO(gtk_window_set_interactive_debugging, vFi) GO(gtk_window_set_keep_above, vFpi) GO(gtk_window_set_keep_below, vFpi) GO(gtk_window_set_mnemonic_modifier, vFpu) GO(gtk_window_set_mnemonics_visible, vFpi) GO(gtk_window_set_modal, vFpi) GO(gtk_window_set_opacity, vFpd) -GO(gtk_window_set_policy, vFpiii) GO(gtk_window_set_position, vFpu) GO(gtk_window_set_resizable, vFpi) GO(gtk_window_set_role, vFpp) @@ -4226,11 +4576,10 @@ GO(gtk_window_set_skip_pager_hint, vFpi) GO(gtk_window_set_skip_taskbar_hint, vFpi) GO(gtk_window_set_startup_id, vFpp) GO(gtk_window_set_title, vFpp) +GO(gtk_window_set_titlebar, vFpp) GO(gtk_window_set_transient_for, vFpp) GO(gtk_window_set_type_hint, vFpu) -GO(gtk_window_set_titlebar, vFpp) GO(gtk_window_set_urgency_hint, vFpi) -GO(gtk_widget_set_visual, vFpp) GO(gtk_window_set_wmclass, vFppp) GO(gtk_window_stick, vFp) GO(gtk_window_type_get_type, LFv) @@ -4238,14 +4587,6 @@ GO(gtk_window_unfullscreen, vFp) GO(gtk_window_unmaximize, vFp) GO(gtk_window_unstick, vFp) GO(gtk_wrap_mode_get_type, LFv) -GO(gtk_gesture_long_press_get_type, LFv) -GO(gtk_gesture_single_get_type, LFv) -GO(gtk_gesture_get_type, LFv) -GO(gtk_gesture_rotate_new, pFp) -GO(gtk_gesture_zoom_new, pFp) -GO(gtk_event_controller_get_type, LFv) -GO(gtk_stack_set_visible_child_name, vFpp) -GO(gtk_stack_get_visible_child_name, pFp) GO(dummy_iFppdd, iFppdd) // for GtkEventController wrapping GO(dummy_iFppUup, iFppUup) diff --git a/src/wrapped/wrappedgtkx112.c b/src/wrapped/wrappedgtkx112.c index 39f1b08a7b052bb6f8be8b11a0e48e9cba619b55..98cde252f7eda3c659c7bd31e344e77841afa69f 100644 --- a/src/wrapped/wrappedgtkx112.c +++ b/src/wrapped/wrappedgtkx112.c @@ -19,11 +19,8 @@ #include "myalign.h" #include "gtkclass.h" -#ifdef ANDROID - const char* gtkx112Name = "libgtk-x11-2.0.so"; -#else - const char* gtkx112Name = "libgtk-x11-2.0.so.0"; -#endif +const char* gtkx112Name = "libgtk-x11-2.0.so.0"; +#define ALTNAME "libgtk-x11-2.0.so" #define LIBNAME gtkx112 @@ -712,6 +709,29 @@ static void* reverse_GtkLinkButtonUri_Fct(void* fct) return (void*)AddBridge(my_lib->w.bridge, vFppp, fct, 0, NULL); } +// GtkKeySnoopFunc ... +#define GO(A) \ +static uintptr_t my_GtkKeySnoopFunc_fct_##A = 0; \ +static void my_GtkKeySnoopFunc_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my_GtkKeySnoopFunc_fct_##A, "ppp", a, b, c); \ +} +SUPER() +#undef GO +static void* find_GtkKeySnoopFunc_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_GtkKeySnoopFunc_fct_##A == (uintptr_t)fct) return my_GtkKeySnoopFunc_##A; + SUPER() + #undef GO + #define GO(A) if(my_GtkKeySnoopFunc_fct_##A == 0) {my_GtkKeySnoopFunc_fct_##A = (uintptr_t)fct; return my_GtkKeySnoopFunc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for gtk-2 GtkKeySnoopFunc callback\n"); + return NULL; +} + #undef SUPER EXPORT void my_gtk_dialog_add_buttons(x64emu_t* emu, void* dialog, void* first, uintptr_t* b) @@ -1188,11 +1208,50 @@ EXPORT void my_gtk_print_job_send(x64emu_t* emu, void* job, void* f, void* data, my->gtk_print_job_send(job, find_GtkPrintJobCompleteFunc_Fct(f), data, findGDestroyNotifyFct(d)); } +EXPORT uint32_t my_gtk_key_snooper_install(x64emu_t* emu, void* f, void* data) +{ + (void)emu; + return my->gtk_key_snooper_install(find_GtkKeySnoopFunc_Fct(f), data); +} + +static void addGtk2Alternate(library_t* lib) +{ + #define GO(A, W) AddAutomaticBridge(lib->w.bridge, W, dlsym(lib->w.lib, #A), 0, #A) + GO(gtk_marshal_BOOLEAN__POINTER, vFppuppp); + GO(gtk_marshal_BOOLEAN__POINTER_INT_INT, vFppuppp); + GO(gtk_marshal_BOOLEAN__POINTER_INT_INT_UINT, vFppuppp); + GO(gtk_marshal_BOOLEAN__POINTER_POINTER_INT_INT, vFppuppp); + GO(gtk_marshal_BOOLEAN__POINTER_STRING_STRING_POINTER, vFppuppp); + GO(gtk_marshal_BOOLEAN__VOID, vFppuppp); + GO(gtk_marshal_ENUM__ENUM, vFppuppp); + GO(gtk_marshal_INT__POINTER, vFppuppp); + GO(gtk_marshal_INT__POINTER_CHAR_CHAR, vFppuppp); + GO(gtk_marshal_VOID__ENUM_FLOAT, vFppuppp); + GO(gtk_marshal_VOID__ENUM_FLOAT_BOOLEAN, vFppuppp); + GO(gtk_marshal_VOID__INT_INT, vFppuppp); + GO(gtk_marshal_VOID__INT_INT_POINTER, vFppuppp); + GO(gtk_marshal_VOID__POINTER_INT, vFppuppp); + GO(gtk_marshal_VOID__POINTER_INT_INT_POINTER_UINT_UINT, vFppuppp); + GO(gtk_marshal_VOID__POINTER_POINTER, vFppuppp); + GO(gtk_marshal_VOID__POINTER_POINTER_POINTER, vFppuppp); + GO(gtk_marshal_VOID__POINTER_POINTER_UINT_UINT, vFppuppp); + GO(gtk_marshal_VOID__POINTER_STRING_STRING, vFppuppp); + GO(gtk_marshal_VOID__POINTER_UINT, vFppuppp); + GO(gtk_marshal_VOID__POINTER_UINT_ENUM, vFppuppp); + GO(gtk_marshal_VOID__POINTER_UINT_UINT, vFppuppp); + GO(gtk_marshal_VOID__STRING_INT_POINTER, vFppuppp); + GO(gtk_marshal_VOID__UINT_POINTER_UINT_ENUM_ENUM_POINTER, vFppuppp); + GO(gtk_marshal_VOID__UINT_POINTER_UINT_UINT_ENUM, vFppuppp); + GO(gtk_marshal_VOID__UINT_STRING, vFppuppp); + #undef GO +} + #define PRE_INIT \ if(box64_nogtk) \ return -1; #define CUSTOM_INIT \ + addGtk2Alternate(lib); \ SetGtkObjectID(my->gtk_object_get_type()); \ SetGtkWidget2ID(my->gtk_widget_get_type()); \ SetGtkContainer2ID(my->gtk_container_get_type()); \ @@ -1217,10 +1276,6 @@ EXPORT void my_gtk_print_job_send(x64emu_t* emu, void* job, void* f, void* data, SetGtkMenuBar2ID(my->gtk_menu_bar_get_type()); \ SetGtkTextView2ID(my->gtk_text_view_get_type()); -#ifdef ANDROID -#define NEEDED_LIBS "libgdk-x11-2.0.so", "libpangocairo-1.0.so" -#else #define NEEDED_LIBS "libgdk-x11-2.0.so.0", "libpangocairo-1.0.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedgtkx112_private.h b/src/wrapped/wrappedgtkx112_private.h index ea9c9df9eca625bf54860f57e817ef741c7c237c..72f1c357388d0ce403025ade098ced2865189b07 100644 --- a/src/wrapped/wrappedgtkx112_private.h +++ b/src/wrapped/wrappedgtkx112_private.h @@ -1466,7 +1466,7 @@ GO(gtk_item_get_type, LFv) //GO(gtk_item_select, GO(gtk_item_toggle, vFp) GO(gtk_justification_get_type, LFv) -//GOM(gtk_key_snooper_install, uFEBp) +GOM(gtk_key_snooper_install, uFEpp) GO(gtk_key_snooper_remove, vFu) GO(gtk_label_get, vFpp) GO(gtk_label_get_angle, dFp) @@ -1595,32 +1595,32 @@ GO(gtk_main_iteration, iFv) GO(gtk_main_iteration_do, iFi) GO(gtk_main_level, uFv) GO(gtk_main_quit, vFv) -//GO(gtk_marshal_BOOLEAN__POINTER, -//GO(gtk_marshal_BOOLEAN__POINTER_INT_INT, -//GO(gtk_marshal_BOOLEAN__POINTER_INT_INT_UINT, -//GO(gtk_marshal_BOOLEAN__POINTER_POINTER_INT_INT, -//GO(gtk_marshal_BOOLEAN__POINTER_STRING_STRING_POINTER, -//GO(gtk_marshal_BOOLEAN__VOID, -//GO(gtk_marshal_ENUM__ENUM, -//GO(gtk_marshal_INT__POINTER, -//GO(gtk_marshal_INT__POINTER_CHAR_CHAR, -//GO(gtk_marshal_VOID__ENUM_FLOAT, -//GO(gtk_marshal_VOID__ENUM_FLOAT_BOOLEAN, -//GO(gtk_marshal_VOID__INT_INT, -//GO(gtk_marshal_VOID__INT_INT_POINTER, -//GO(gtk_marshal_VOID__POINTER_INT, -//GO(gtk_marshal_VOID__POINTER_INT_INT_POINTER_UINT_UINT, -//GO(gtk_marshal_VOID__POINTER_POINTER, -//GO(gtk_marshal_VOID__POINTER_POINTER_POINTER, -//GO(gtk_marshal_VOID__POINTER_POINTER_UINT_UINT, -//GO(gtk_marshal_VOID__POINTER_STRING_STRING, -//GO(gtk_marshal_VOID__POINTER_UINT, -//GO(gtk_marshal_VOID__POINTER_UINT_ENUM, -//GO(gtk_marshal_VOID__POINTER_UINT_UINT, -//GO(gtk_marshal_VOID__STRING_INT_POINTER, -//GO(gtk_marshal_VOID__UINT_POINTER_UINT_ENUM_ENUM_POINTER, -//GO(gtk_marshal_VOID__UINT_POINTER_UINT_UINT_ENUM, -//GO(gtk_marshal_VOID__UINT_STRING, +DATA(gtk_marshal_BOOLEAN__POINTER, sizeof(void*)) +DATA(gtk_marshal_BOOLEAN__POINTER_INT_INT, sizeof(void*)) +DATA(gtk_marshal_BOOLEAN__POINTER_INT_INT_UINT, sizeof(void*)) +DATA(gtk_marshal_BOOLEAN__POINTER_POINTER_INT_INT, sizeof(void*)) +DATA(gtk_marshal_BOOLEAN__POINTER_STRING_STRING_POINTER, sizeof(void*)) +DATA(gtk_marshal_BOOLEAN__VOID, sizeof(void*)) +DATA(gtk_marshal_ENUM__ENUM, sizeof(void*)) +DATA(gtk_marshal_INT__POINTER, sizeof(void*)) +DATA(gtk_marshal_INT__POINTER_CHAR_CHAR, sizeof(void*)) +DATA(gtk_marshal_VOID__ENUM_FLOAT, sizeof(void*)) +DATA(gtk_marshal_VOID__ENUM_FLOAT_BOOLEAN, sizeof(void*)) +DATA(gtk_marshal_VOID__INT_INT, sizeof(void*)) +DATA(gtk_marshal_VOID__INT_INT_POINTER, sizeof(void*)) +DATA(gtk_marshal_VOID__POINTER_INT, sizeof(void*)) +DATA(gtk_marshal_VOID__POINTER_INT_INT_POINTER_UINT_UINT, sizeof(void*)) +DATA(gtk_marshal_VOID__POINTER_POINTER, sizeof(void*)) +DATA(gtk_marshal_VOID__POINTER_POINTER_POINTER, sizeof(void*)) +DATA(gtk_marshal_VOID__POINTER_POINTER_UINT_UINT, sizeof(void*)) +DATA(gtk_marshal_VOID__POINTER_STRING_STRING, sizeof(void*)) +DATA(gtk_marshal_VOID__POINTER_UINT, sizeof(void*)) +DATA(gtk_marshal_VOID__POINTER_UINT_ENUM, sizeof(void*)) +DATA(gtk_marshal_VOID__POINTER_UINT_UINT, sizeof(void*)) +DATA(gtk_marshal_VOID__STRING_INT_POINTER, sizeof(void*)) +DATA(gtk_marshal_VOID__UINT_POINTER_UINT_ENUM_ENUM_POINTER, sizeof(void*)) +DATA(gtk_marshal_VOID__UINT_POINTER_UINT_UINT_ENUM, sizeof(void*)) +DATA(gtk_marshal_VOID__UINT_STRING, sizeof(void*)) GO(gtk_match_type_get_type, LFv) GO(gtk_menu_attach, vFppuuuu) GOM(gtk_menu_attach_to_widget, vFEppp) diff --git a/src/wrapped/wrappediconv_private.h b/src/wrapped/wrappediconv_private.h index a0ed8e1f1fa82d030b88054fe84e2ab24b79bb47..4c8e334bfbe8f305df3f19bddc4c62dc26a1a5e6 100644 --- a/src/wrapped/wrappediconv_private.h +++ b/src/wrapped/wrappediconv_private.h @@ -1,4 +1,4 @@ -#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA) && defined(GOS)) +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) #error Meh... #endif diff --git a/src/wrapped/wrappedicui18n75.c b/src/wrapped/wrappedicui18n75.c new file mode 100644 index 0000000000000000000000000000000000000000..61a345f8f3dc6066ad072f4ff360893b9e074c43 --- /dev/null +++ b/src/wrapped/wrappedicui18n75.c @@ -0,0 +1,28 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box64context.h" +#include "emu/x64emu_private.h" +#include "myalign.h" + +const char* icui18n75Name = "libicui18n.so.75"; +#define LIBNAME icui18n75 + +#define ALTMY my74_ + +#define NEEDED_LIBS "libicuuc.so.75" + +#include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedicui18n75_private.h b/src/wrapped/wrappedicui18n75_private.h new file mode 100644 index 0000000000000000000000000000000000000000..7c597e66c8e9e5e3165f46e11c34298297d253b3 --- /dev/null +++ b/src/wrapped/wrappedicui18n75_private.h @@ -0,0 +1,103 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif + +// UDate is double +// UBool is int8_t + +GO(ucal_add_75, vFpiip) +GO(ucal_clear_75, vFp) +GO(ucal_clearField_75, vFpi) +GO(ucal_clone_75, pFpp) +GO(ucal_close_75, vFp) +GO(ucal_countAvailable_75, iFv) +GO(ucal_equivalentTo_75, cFpp) +GO(ucal_get_75, iFpip) +GO(ucal_getAttribute_75, iFpi) +GO(ucal_getAvailable_75, pFi) +GO(ucal_getCanonicalTimeZoneID_75, iFpipipp) +GO(ucal_getDayOfWeekType_75, iFpip) +GO(ucal_getDefaultTimeZone_75, iFpip) +GO(ucal_getDSTSavings_75, iFpp) +GO(ucal_getFieldDifference_75, iFpdip) +GO(ucal_getGregorianChange_75, dFpp) +GO(ucal_getHostTimeZone_75, iFpip) +GO(ucal_getKeywordValuesForLocale_75, pFppCp) +GO(ucal_getLimit_75, iFpiip) +GO(ucal_getLocaleByType_75, pFpip) +GO(ucal_getMillis_75, dFpp) +GO(ucal_getNow_75, dFv) +GO(ucal_getTimeZoneDisplayName_75, iFpippip) +GO(ucal_getTimeZoneID_75, iFppip) +GO(ucal_getTimeZoneIDForWindowsID_75, iFpippip) +GO(ucal_getTimeZoneOffsetFromLocal_75, vFpiippp) +GO(ucal_getTimeZoneTransitionDate_75, cFpipp) +GO(ucal_getType_75, pFpp) +GO(ucal_getTZDataVersion_75, pFp) +GO(ucal_getWeekendTransition_75, iFpip) +GO(ucal_getWindowsTimeZoneID_75, iFpipip) +GO(ucal_inDaylightTime_75, cFpp) +GO(ucal_isSet_75, cFpi) +GO(ucal_isWeekend_75, cFpdp) +GO(ucal_open_75, pFpipip) +GO(ucal_openCountryTimeZones_75, pFpp) +GO(ucal_openTimeZoneIDEnumeration_75, pFippp) +GO(ucal_openTimeZones_75, pFp) +GO(ucal_roll_75, vFpiip) +GO(ucal_set_75, vFpii) +GO(ucal_setAttribute_75, vFpii) +GO(ucal_setDate_75, vFpiiip) +GO(ucal_setDateTime_75, vFpiiiiiip) +GO(ucal_setDefaultTimeZone_75, vFpp) +GO(ucal_setGregorianChange_75, vFpdp) +GO(ucal_setMillis_75, vFpdp) +GO(ucal_setTimeZone_75, vFppip) + +GO(ucol_clone_75, pFpp) +GO(ucol_close_75, vFp) +GO(ucol_closeElements_75, vFp) +GO(ucol_setMaxVariable_75, vFpip) +GO(ucol_getOffset_75, iFp) +GO(ucol_getRules_75, pFpp) +GO(ucol_getSortKey_75, iFppipi) +GO(ucol_getStrength_75, iFp) +GO(ucol_getVersion_75, vFpp) +GO(ucol_next_75, iFpp) +GO(ucol_previous_75, iFpp) +GO(ucol_open_75, pFpp) +GO(ucol_openElements_75, pFppip) +GO(ucol_openRules_75, pFpiiipp) +GO(ucol_safeClone_75, pFpppp) +GO(ucol_setAttribute_75, vFpiip) +GO(ucol_setVariableTop_75, uFppip) +GO(ucol_strcoll_75, iFppipi) + +GO(udat_close_75, vFp) +GO(udat_countSymbols_75, iFpi) +GO(udat_getSymbols_75, iFpiipip) +GO(udat_format_75, iFpdpipp) +GO(udat_open_75, pFiippipip) +GO(udat_setCalendar_75, vFpp) +GO(udat_toPattern_75, iFpCpip) + +GO(unum_close_75, vFp) +GO(unum_getAttribute_75, iFpi) +GO(unum_getSymbol_75, iFpipip) +GO(unum_open_75, pFipippp) +GO(unum_toPattern_75, iFpCpip) + +GO(udatpg_close_75, vFp) +GO(udatpg_getBestPattern_75, iFppipip) +GO(udatpg_open_75, pFpp) + +GO(ulocdata_getCLDRVersion_75, vFpp) +GO(ulocdata_getMeasurementSystem_75, iFpp) + +GO(usearch_close_75, vFp) +GO(usearch_first_75, iFpp) +GO(usearch_getBreakIterator_75, pFp) +GO(usearch_getMatchedLength_75, iFp) +GO(usearch_last_75, iFpp) +GO(usearch_openFromCollator_75, pFpipippp) +GO(usearch_setPattern_75, vFppip) +GO(usearch_setText_75, vFppip) diff --git a/src/wrapped/wrappedicuuc75.c b/src/wrapped/wrappedicuuc75.c new file mode 100644 index 0000000000000000000000000000000000000000..f95113453eb20985ae33b3ff0533281bea12e1f5 --- /dev/null +++ b/src/wrapped/wrappedicuuc75.c @@ -0,0 +1,26 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box64context.h" +#include "emu/x64emu_private.h" +#include "myalign.h" + +const char* icuuc75Name = "libicuuc.so.75"; +#define LIBNAME icuuc75 + +#define ALTMY my75_ + +#include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedicuuc75_private.h b/src/wrapped/wrappedicuuc75_private.h new file mode 100644 index 0000000000000000000000000000000000000000..bd84d18b3f47e164e6b08d4a1ee50ab5906bce05 --- /dev/null +++ b/src/wrapped/wrappedicuuc75_private.h @@ -0,0 +1,92 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif + +GO(ubrk_clone_75, pFpp) +GO(ubrk_close_75, vFp) +GO(ubrk_countAvailable_75, iFv) +GO(ubrk_current_75, iFp) +GO(ubrk_first_75, iFp) +GO(ubrk_following_75, iFpi) +GO(ubrk_getAvailable_75, pFi) +GO(ubrk_getBinaryRules_75, iFppip) +GO(ubrk_getLocaleByType_75, pFpip) +GO(ubrk_getRuleStatus_75, iFp) +GO(ubrk_getRuleStatusVec_75, iFppip) +GO(ubrk_isBoundary_75, cFpi) +GO(ubrk_last_75, iFp) +GO(ubrk_next_75, iFp) +GO(ubrk_open_75, pFppip) +GO(ubrk_openBinaryRules_75, pFpipip) +GO(ubrk_openRules_75, pFpipipp) +GO(ubrk_preceding_75, iFpi) +GO(ubrk_previous_75, iFp) +GO(ubrk_refreshUText_75, vFppp) +GO(ubrk_safeClone_75, pFpppp) +GO(ubrk_setText_75, vFppip) +GO(ubrk_setUText_75, vFppp) +GO(ubrk_swap_75, iFppipp) + +GO(ucnv_getDefaultName_75, pFv) +GO(ucnv_open_75, pFpp) +GO(ucnv_setDefaultName_75, vFp) + +GO(ucurr_forLocale_75, iFppip) +GO(ucurr_getName_75, pFppippp) + +GO(uloc_canonicalize_75, iFppip) +GO(uloc_countAvailable_75, iFv) +GO(uloc_getAvailable_75, pFi) +GO(uloc_getBaseName_75, iFppip) +GO(uloc_getCharacterOrientation_75, iFpp) +GO(uloc_getCountry_75, iFppip) +GO(uloc_getDefault_75, pFv) +GO(uloc_getDisplayCountry_75, iFpppip) +GO(uloc_getDisplayLanguage_75, iFpppip) +GO(uloc_getDisplayName_75, iFpppip) +GO(uloc_getISO3Country_75, pFp) +GO(uloc_getISO3Language_75, pFp) +GO(uloc_getKeywordValue_75, iFpppip) +GO(uloc_getLanguage_75, iFppip) +GO(uloc_getLCID_75, uFp) +GO(uloc_getName_75, iFppip) +GO(uloc_getParent_75, iFppip) +GO(uloc_setKeywordValue_75, iFpppip) + +GO(ures_close_75, vFp) +GO(ures_getByKey_75, pFpppp) +GO(ures_getSize_75, iFp) +GO(ures_getStringByIndex_75, pFpipp) +GO(ures_open_75, pFppp) + +GO(uldn_close_75, vFp) +GO(uldn_keyValueDisplayName_75, iFppppip) +GO(uldn_open_75, pFpip) + +GO(uenum_close_75, vFp) +GO(uenum_count_75, iFpp) +GO(uenum_next_75, pFppp) + +GO(uidna_close_75, vFp) +GO(uidna_nameToASCII_75, iFppipipp) +GO(uidna_nameToUnicode_75, iFppipipp) +GO(uidna_openUTS46_75, pFpp) + +GO(unorm2_getNFCInstance_75, pFp) +GO(unorm2_getNFDInstance_75, pFp) +GO(unorm2_getNFKCInstance_75, pFp) +GO(unorm2_getNFKDInstance_75, pFp) +GO(unorm2_isNormalized_75, CFppip) +GO(unorm2_normalize_75, iFppipip) + +GO(u_charsToUChars_75, vFppi) +GO(u_getVersion_75, vFp) +GO(u_strcmp_75, iFpp) +GO(u_strcpy_75, pFpp) +GO(u_strlen_75, iFp) +GO(u_strncpy_75, pFppi) +GO(u_strToLower_75, iFpipipp) +GO(u_strToUpper_75, iFpipipp) +GO(u_tolower_75, uFu) +GO(u_toupper_75, uFu) +GO(u_uastrncpy_75, pFppi) diff --git a/src/wrapped/wrappedlber.c b/src/wrapped/wrappedlber.c index c52db30253140098d20789a17048f95ed10b7079..6b33edd4ad4b48b90f182e0a3c2fbd55fec2d7e8 100644 --- a/src/wrapped/wrappedlber.c +++ b/src/wrapped/wrappedlber.c @@ -17,14 +17,9 @@ #include "callback.h" -const char* lberName = -#ifdef ANDROID - "liblber-2.4.so" -#else - "liblber-2.4.so.2" -#endif - ; -#define ALTNAME "liblber-2.5.so.0" +const char* lberName = "liblber-2.4.so.2"; +#define ALTNAME "liblber-2.4.so" +#define ALTNAME2 "liblber-2.5.so.0" #define LIBNAME lber #define ADDED_FUNCTIONS() \ diff --git a/src/wrapped/wrappedldapr.c b/src/wrapped/wrappedldapr.c index fca9619766fa9bcca0b0eda019bf4d0ba161b9b4..77eb2acd43df1b837be713cdcfa4eeb0ede7089b 100644 --- a/src/wrapped/wrappedldapr.c +++ b/src/wrapped/wrappedldapr.c @@ -16,14 +16,9 @@ #include "librarian.h" #include "callback.h" -const char* ldaprName = -#ifdef ANDROID - "libldap_r-2.4.so" -#else - "libldap_r-2.4.so.2" -#endif - ; -#define ALTNAME "libldap-2.5.so.0" +const char* ldaprName = "libldap_r-2.4.so.2"; +#define ALTNAME "libldap_r-2.4.so" +#define ALTNAME2 "libldap-2.5.so.0" #define LIBNAME ldapr #define ADDED_FUNCTIONS() \ diff --git a/src/wrapped/wrappedldlinux.c b/src/wrapped/wrappedldlinux.c index 90ec1b2357c9f8c33dc5c6db847bc19fc669906f..cd2ee42052726de6360babf10b825d8ab5ff0f6d 100644 --- a/src/wrapped/wrappedldlinux.c +++ b/src/wrapped/wrappedldlinux.c @@ -31,7 +31,7 @@ EXPORT void* my___tls_get_addr(void* p) EXPORT void* my___libc_stack_end; void stSetup(box64context_t* context) { - my___libc_stack_end = context->stack; // is this the end, or should I add stasz? + my___libc_stack_end = context->stack + context->stacksz; } #ifdef STATICBUILD diff --git a/src/wrapped/wrappedlib_init.h b/src/wrapped/wrappedlib_init.h index 3505efd33fb229d62d9ad1cb020760f526f8c461..c861228779136bcc19bf64e061b35d2d2d81d771 100644 --- a/src/wrapped/wrappedlib_init.h +++ b/src/wrapped/wrappedlib_init.h @@ -20,6 +20,19 @@ #define DOIT(P,Q) _DOIT(P,Q) #include DOIT(LIBNAME,defs) +// regular symbol mapped to itself or another one (depending on HAVE_LD80BITS) +#ifdef HAVE_LD80BITS +#define GOD(N, W, O) GO(N, W) +#else +#define GOD(N, W, O) GO2(N, W, O) +#endif +// regular symbol mapped to itself or another one (depending on HAVE_LD80BITS), but weak +#ifdef HAVE_LD80BITS +#define GOWD(N, W, O) GOW(N, W) +#else +#define GOWD(N, W, O) GOW2(N, W, O) +#endif + // regular symbol mapped to itself #define GO(N, W) // regular symbol mapped to itself, but weak @@ -28,10 +41,10 @@ #define GOM(N, W) // symbol mapped to my_symbol, but weak #define GOWM(N, W) -// regular symbol mapped to itself, that returns a structure -#define GOS(N, W) // symbol mapped to another one #define GO2(N, W, O) +// symbol mapped to another one, but weak +#define GOW2(N, W, O) // data #define DATA(N, S) // data, Weak (type V) @@ -72,30 +85,24 @@ static const map_onesymbol_t MAPNAME(mysymbolmap)[] = { }; #undef GOM #undef GOWM -#undef GOS #define GOM(N, W) #define GOWM(N, W) -#ifdef STATICBUILD -#define GOS(N, W) {#N, W, 0, &my_##N}, -#else -#define GOS(N, W) {#N, W, 0}, -#endif -static const map_onesymbol_t MAPNAME(stsymbolmap)[] = { - #include PRIVATE(LIBNAME) -}; -#undef GOS #undef GO2 -#define GOS(N, W) +#undef GOW2 #ifdef STATICBUILD #define GO2(N, W, O) {#N, W, 0, #O, &O}, +#define GOW2(N, W, O) {#N, W, 1, #O, &O}, #else #define GO2(N, W, O) {#N, W, 0, #O}, +#define GOW2(N, W, O) {#N, W, 1, #O}, #endif static const map_onesymbol2_t MAPNAME(symbol2map)[] = { #include PRIVATE(LIBNAME) }; #undef GO2 +#undef GOW2 #define GO2(N, W, O) +#define GOW2(N, W, O) #undef DATA #undef DATAV #undef DATAB @@ -129,10 +136,12 @@ static const map_onedata_t MAPNAME(mydatamap)[] = { #undef GO #undef GOW +#undef GOD +#undef GOWD #undef GOM #undef GOWM #undef GO2 -#undef GOS +#undef GOW2 #undef DATA #undef DATAV #undef DATAB @@ -232,19 +241,6 @@ int FUNC(_init)(library_t* lib, box64context_t* box64) DOIT(symbolmap) DOIT(mysymbolmap) #undef DOIT - cnt = sizeof(MAPNAME(stsymbolmap))/sizeof(map_onesymbol_t); - for (int i=0; iw.stsymbolmap, MAPNAME(stsymbolmap)[i].name, &ret); - kh_value(lib->w.stsymbolmap, k).w = MAPNAME(stsymbolmap)[i].w; - #ifdef STATICBUILD - kh_value(lib->w.stsymbolmap, k).resolved = 1; - kh_value(lib->w.stsymbolmap, k).addr = (uintptr_t)MAPNAME(stsymbolmap)[i].addr; - #else - kh_value(lib->w.stsymbolmap, k).resolved = 0; - #endif - if(strchr(MAPNAME(stsymbolmap)[i].name, '@')) - AddDictionnary(box64->versym, MAPNAME(stsymbolmap)[i].name); - } cnt = sizeof(MAPNAME(symbol2map))/sizeof(map_onesymbol2_t); for (int i=0; iw.symbol2map, MAPNAME(symbol2map)[i].name, &ret); diff --git a/src/wrapped/wrappedlibasound.c b/src/wrapped/wrappedlibasound.c index f9919cc5b72f5bbf894cf04a1f1e023e469e3c71..481a7d1b1bb32212148aac20ed4bf8090cef8f46 100644 --- a/src/wrapped/wrappedlibasound.c +++ b/src/wrapped/wrappedlibasound.c @@ -32,7 +32,7 @@ static void default_error_handler(const char *file, int line, const char *functi } #define ADDED_INIT() \ - my_snd_lib_error = AddCheckBridge(my_context->system, vFpipipV, default_error_handler, 0, "ASoundCustomErrorHandler"); + my_snd_lib_error = AddCheckBridge(my_lib->w.bridge, vFpipipV, default_error_handler, 0, "ASoundCustomErrorHandler"); #define ADDED_FINI() \ my_snd_lib_error = 0; // no removing of bridge @@ -89,6 +89,94 @@ static void* findElemFct(void* fct) printf_log(LOG_NONE, "Warning, no more slot for Asound Elem callback\n"); return NULL; } +// snd_pcm_hook_func_t +#define GO(A) \ +static uintptr_t my_pcm_hook_fct_##A = 0; \ +static int my_pcm_hook_##A(void* a) \ +{ \ + return (int)RunFunctionFmt(my_pcm_hook_fct_##A, "p", a); \ +} +SUPER() +#undef GO +static void* findPCMHookFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_pcm_hook_fct_##A == (uintptr_t)fct) return my_elem_##A; + SUPER() + #undef GO + #define GO(A) if(my_pcm_hook_fct_##A == 0) {my_pcm_hook_fct_##A = (uintptr_t)fct; return my_pcm_hook_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Asound PCMHook callback\n"); + return NULL; +} +// snd_mixer_compare_t +#define GO(A) \ +static uintptr_t my_mixer_compare_fct_##A = 0; \ +static int my_mixer_compare_##A(void* a) \ +{ \ + return (int)RunFunctionFmt(my_mixer_compare_fct_##A, "p", a); \ +} +SUPER() +#undef GO +static void* findMixerCompareFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_mixer_compare_fct_##A == (uintptr_t)fct) return my_elem_##A; + SUPER() + #undef GO + #define GO(A) if(my_mixer_compare_fct_##A == 0) {my_mixer_compare_fct_##A = (uintptr_t)fct; return my_mixer_compare_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Asound Mixer Compare callback\n"); + return NULL; +} +// private_free +#define GO(A) \ +static uintptr_t my_private_free_fct_##A = 0; \ +static int my_private_free_##A(void* a) \ +{ \ + return (int)RunFunctionFmt(my_private_free_fct_##A, "p", a); \ +} +SUPER() +#undef GO +static void* findPrivateFreeFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_private_free_fct_##A == (uintptr_t)fct) return my_elem_##A; + SUPER() + #undef GO + #define GO(A) if(my_private_free_fct_##A == 0) {my_private_free_fct_##A = (uintptr_t)fct; return my_private_free_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Asound PrivateFree callback\n"); + return NULL; +} +// snd_mixer_event_t +#define GO(A) \ +static uintptr_t my_mixer_event_fct_##A = 0; \ +static int my_mixer_event_##A(void* a, uint32_t b, void* c, void* d) \ +{ \ + return (int)RunFunctionFmt(my_mixer_event_fct_##A, "pupp", a, b, c, d); \ +} +SUPER() +#undef GO +static void* findMixerEventFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_mixer_event_fct_##A == (uintptr_t)fct) return my_elem_##A; + SUPER() + #undef GO + #define GO(A) if(my_mixer_event_fct_##A == 0) {my_mixer_event_fct_##A = (uintptr_t)fct; return my_mixer_event_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Asound MixerEvent callback\n"); + return NULL; +} EXPORT int my_snd_async_add_handler(x64emu_t *emu, void *handler, int fd, void* callback, void *private_data) @@ -142,6 +230,50 @@ EXPORT void my_snd_mixer_elem_set_callback(x64emu_t* emu, void* handler, void* f my->snd_mixer_elem_set_callback(handler, findElemFct(f)); } +EXPORT int my_snd_pcm_hook_add(x64emu_t* emu, void* hook, void* pcm, uint32_t type, void* f, void* data) +{ + return my->snd_pcm_hook_add(hook, pcm, type, findPCMHookFct(f), data); +} + +EXPORT int my_snd_mixer_set_compare(x64emu_t* emu, void* mixer, void* f) +{ + return my->snd_mixer_set_compare(mixer, findMixerCompareFct(f)); +} + +EXPORT int my_snd_mixer_elem_new(x64emu_t* emu, void* elem, uint32_t type, int weight, void* data, void* f) +{ + return my->snd_mixer_elem_new(elem, type, weight, data, findPrivateFreeFct(f)); +} + +EXPORT void* my_snd_mixer_class_get_event(x64emu_t* emu, void* class) +{ + void* ret = my->snd_mixer_class_get_event(class); + AddAutomaticBridge(my_lib->w.bridge, iFpupp, ret, 0, "snd_event_t"); + return ret; +} + +EXPORT void* my_snd_mixer_class_get_compare(x64emu_t* emu, void* class) +{ + void* ret = my->snd_mixer_class_get_compare(class); + AddAutomaticBridge(my_lib->w.bridge, iFpp, ret, 0, "snd_mixer_compare_t"); + return ret; +} + +EXPORT int my_snd_mixer_class_set_event(x64emu_t* emu, void* class, void* f) +{ + return my->snd_mixer_class_set_event(class, findMixerEventFct(f)); +} + +EXPORT int my_snd_mixer_class_set_private_free(x64emu_t* emu, void* class, void* f) +{ + return my->snd_mixer_class_set_private_free(class, findPrivateFreeFct(f)); +} + +EXPORT int my_snd_mixer_class_set_compare(x64emu_t* emu, void* class, void* f) +{ + return my->snd_mixer_class_set_compare(class, findMixerCompareFct(f)); +} + void* my_dlopen(x64emu_t* emu, void *filename, int flag); // defined in wrappedlibdl.c char* my_dlerror(x64emu_t* emu); int my_dlclose(x64emu_t* emu, void *handle); diff --git a/src/wrapped/wrappedlibasound_private.h b/src/wrapped/wrappedlibasound_private.h index ab6e05bbf12d7ff337925b609e881d57c66ecc05..a1228d1be9e680f9a9130ac55d656ecd4d043d28 100644 --- a/src/wrapped/wrappedlibasound_private.h +++ b/src/wrapped/wrappedlibasound_private.h @@ -1,5 +1,5 @@ -#if !(defined(GO) && defined(GOM) && defined(GO2)) -#error meh! +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... #endif DATAB(alsa_lisp_nil, 4) @@ -63,9 +63,9 @@ GOM(snd_dlopen, pFEpipL) GOM(snd_dlsym, pFEppp) GOM(snd_dlclose, iFEp) GOM(snd_async_add_handler, iFEpipp) -//GO(snd_async_del_handler, iFp) -//GO(snd_async_handler_get_fd, iFp) -//GO(snd_async_handler_get_signo, iFp) +GO(snd_async_del_handler, iFp) +GO(snd_async_handler_get_fd, iFp) +GO(snd_async_handler_get_signo, iFp) GO(snd_async_handler_get_callback_private, pFp) GO(snd_shm_area_create, pFip) GO(snd_shm_area_share, pFp) @@ -73,19 +73,19 @@ GO(snd_shm_area_destroy, iFp) GO(snd_user_file, iFpp) GO(snd_input_stdio_open, iFppp) GO(snd_input_stdio_attach, iFppi) -GO(snd_input_buffer_open, iFppu) +GO(snd_input_buffer_open, iFppl) GO(snd_input_close, iFp) -//GO(snd_input_scanf, iFppV) -GO(snd_input_gets, pFppu) +//GOM(snd_input_scanf, iFppV) +GO(snd_input_gets, pFppL) GO(snd_input_getc, iFp) GO(snd_input_ungetc, iFpi) GO(snd_output_stdio_open, iFppp) GO(snd_output_stdio_attach, iFppi) GO(snd_output_buffer_open, iFp) -GO(snd_output_buffer_string, uFpp) +GO(snd_output_buffer_string, LFpp) GO(snd_output_close, iFp) -//GO(snd_output_printf, iFppV) -//GO(snd_output_vprintf, iFppV) +//GOM(snd_output_printf, iFppV) +//GOM(snd_output_vprintf, iFppA) GO(snd_output_puts, iFpp) GO(snd_output_putc, iFpi) GO(snd_output_flush, iFp) @@ -100,7 +100,7 @@ GO(snd_config_update_r, iFppp) GO(snd_config_update_free, iFp) GO(snd_config_update_free_global, iFv) GO(snd_config_search, iFppp) -//GO(snd_config_searchv, iFppV) +//GOM(snd_config_searchv, iFppV) GO(snd_config_search_definition, iFpppp) GO(snd_config_expand, iFppppp) GO(snd_config_evaluate, iFpppp) @@ -108,21 +108,21 @@ GO(snd_config_add, iFpp) GO(snd_config_delete, iFp) GO(snd_config_delete_compound_members, iFp) GO(snd_config_copy, iFpp) -GO(snd_config_make, iFppi) +GO(snd_config_make, iFppu) GO(snd_config_make_integer, iFpp) GO(snd_config_make_integer64, iFpp) GO(snd_config_make_real, iFpp) GO(snd_config_make_string, iFpp) GO(snd_config_make_pointer, iFpp) GO(snd_config_make_compound, iFppi) -GO(snd_config_imake_integer, iFppi) +GO(snd_config_imake_integer, iFppl) GO(snd_config_imake_integer64, iFppI) GO(snd_config_imake_real, iFppd) GO(snd_config_imake_string, iFppp) GO(snd_config_imake_pointer, iFppp) -GO(snd_config_get_type, iFp) +GO(snd_config_get_type, uFp) GO(snd_config_set_id, iFpp) -GO(snd_config_set_integer, iFpi) +GO(snd_config_set_integer, iFpl) GO(snd_config_set_integer64, iFpI) GO(snd_config_set_real, iFpd) GO(snd_config_set_string, iFpp) @@ -150,9 +150,9 @@ GO(snd_device_name_get_hint, pFpp) GO(snd_device_name_hint, iFipp) GO(snd_names_list, iFpp) GO(snd_names_list_free, vFp) -GO(snd_pcm_format_mask_sizeof, uFv) -GO(snd_pcm_subformat_mask_sizeof, uFv) -GO(snd_pcm_status_sizeof, uFv) +GO(snd_pcm_format_mask_sizeof, LFv) +GO(snd_pcm_subformat_mask_sizeof, LFv) +GO(snd_pcm_status_sizeof, LFv) GOM(snd_async_add_pcm_handler, iFEpppp) GO(snd_async_handler_get_pcm, pFp) GO(snd_pcm_access_mask_any, vFp) @@ -161,24 +161,24 @@ GO(snd_pcm_access_mask_empty, iFp) GO(snd_pcm_access_mask_free, vFp) GO(snd_pcm_access_mask_malloc, iFp) GO(snd_pcm_access_mask_none, vFp) -GO(snd_pcm_access_mask_reset, vFpi) -GO(snd_pcm_access_mask_set, vFpi) -GO(snd_pcm_access_mask_test, iFpi) -GO(snd_pcm_access_name, pFi) -GO(snd_pcm_area_copy, iFpupuui) -GO(snd_pcm_area_silence, iFpuui) -GO(snd_pcm_areas_copy, iFpupuuui) -GO(snd_pcm_areas_silence, iFpuuui) -GO(snd_pcm_avail, iFp) +GO(snd_pcm_access_mask_reset, vFpu) +GO(snd_pcm_access_mask_set, vFpu) +GO(snd_pcm_access_mask_test, iFpu) +GO(snd_pcm_access_name, pFu) +GO(snd_pcm_area_copy, iFpLpLui) +GO(snd_pcm_area_silence, iFpLui) +GO(snd_pcm_areas_copy, iFpLpLuLi) +GO(snd_pcm_areas_silence, iFpLuLi) +GO(snd_pcm_avail, lFp) GO(snd_pcm_avail_delay, iFppp) -GO(snd_pcm_avail_update, iFp) +GO(snd_pcm_avail_update, lFp) GO(snd_pcm_build_linear_format, iFiiii) -GO(snd_pcm_bytes_to_frames, iFpu) -GO(snd_pcm_bytes_to_samples, iFpu) -GO(snd_pcm_chmap_type_name, pFi) -GO(snd_pcm_chmap_name, pFi) -GO(snd_pcm_chmap_long_name, pFi) -GO(snd_pcm_chmap_print, iFpup) +GO(snd_pcm_bytes_to_frames, lFpl) +GO(snd_pcm_bytes_to_samples, lFpl) +GO(snd_pcm_chmap_type_name, pFu) +GO(snd_pcm_chmap_name, pFu) +GO(snd_pcm_chmap_long_name, pFu) +GO(snd_pcm_chmap_print, iFpLp) GO(snd_pcm_chmap_from_string, uFp) GO(snd_pcm_chmap_parse_string, pFp) GO(snd_pcm_close, iFp) @@ -208,19 +208,19 @@ GO(snd_pcm_format_name, pFi) GO(snd_pcm_format_physical_width, iFi) GO(snd_pcm_format_set_silence, iFipu) GO(snd_pcm_format_signed, iFi) -GO(snd_pcm_format_silence, iFi) -GO(snd_pcm_format_silence_16, iFi) -GO(snd_pcm_format_silence_32, iFi) -GO(snd_pcm_format_silence_64, iFi) -GO(snd_pcm_format_size, uFiu) +GO(snd_pcm_format_silence, CFi) +GO(snd_pcm_format_silence_16, WFi) +GO(snd_pcm_format_silence_32, uFi) +GO(snd_pcm_format_silence_64, UFi) +GO(snd_pcm_format_size, lFiL) GO(snd_pcm_format_unsigned, iFi) GO(snd_pcm_format_value, iFp) GO(snd_pcm_format_width, iFi) -GO(snd_pcm_forward, iFpu) -GO(snd_pcm_frames_to_bytes, uFpi) +GO(snd_pcm_forward, lFpL) +GO(snd_pcm_frames_to_bytes, lFpl) GO(snd_pcm_get_params, iFppp) GO(snd_pcm_get_chmap, pFp) -GO(snd_pcm_hook_add, iFppipp) +GOM(snd_pcm_hook_add, iFEppupp) GO(snd_pcm_hook_get_pcm, pFp) GO(snd_pcm_hook_get_private, pFp) GO(snd_pcm_hook_remove, iFp) @@ -279,11 +279,11 @@ GO(snd_pcm_hw_params_is_double, iFp) GO(snd_pcm_hw_params_is_half_duplex, iFp) GO(snd_pcm_hw_params_is_joint_duplex, iFp) GO(snd_pcm_hw_params_malloc, iFp) -GO(snd_pcm_hw_params_set_access, iFppi) +GO(snd_pcm_hw_params_set_access, iFppu) GO(snd_pcm_hw_params_set_access_first, iFppp) GO(snd_pcm_hw_params_set_access_last, iFppp) GO(snd_pcm_hw_params_set_access_mask, iFppp) -GO(snd_pcm_hw_params_set_buffer_size, iFppu) +GO(snd_pcm_hw_params_set_buffer_size, iFppL) GO(snd_pcm_hw_params_set_buffer_size_first, iFppp) GO(snd_pcm_hw_params_set_buffer_size_last, iFppp) GO(snd_pcm_hw_params_set_buffer_size_max, iFppp) @@ -309,7 +309,7 @@ GO(snd_pcm_hw_params_set_format, iFppi) GO(snd_pcm_hw_params_set_format_first, iFppp) GO(snd_pcm_hw_params_set_format_last, iFppp) GO(snd_pcm_hw_params_set_format_mask, iFppp) -GO(snd_pcm_hw_params_set_period_size, iFppui) +GO(snd_pcm_hw_params_set_period_size, iFppLi) GO(snd_pcm_hw_params_set_period_size_first, iFpppp) GO(snd_pcm_hw_params_set_period_size_integer, iFpp) GO(snd_pcm_hw_params_set_period_size_last, iFpppp) @@ -351,12 +351,12 @@ GO(snd_pcm_hw_params_set_tick_time_max, iFpppp) GO(snd_pcm_hw_params_set_tick_time_min, iFpppp) GO(snd_pcm_hw_params_set_tick_time_minmax, iFpppppp) GO(snd_pcm_hw_params_set_tick_time_near, iFpppp) -GO(snd_pcm_hw_params_test_access, iFppi) -GO(snd_pcm_hw_params_test_buffer_size, iFppu) +GO(snd_pcm_hw_params_test_access, iFppu) +GO(snd_pcm_hw_params_test_buffer_size, iFppL) GO(snd_pcm_hw_params_test_buffer_time, iFppui) GO(snd_pcm_hw_params_test_channels, iFppu) GO(snd_pcm_hw_params_test_format, iFppi) -GO(snd_pcm_hw_params_test_period_size, iFppui) +GO(snd_pcm_hw_params_test_period_size, iFppLi) GO(snd_pcm_hw_params_test_period_time, iFppui) GO(snd_pcm_hw_params_test_periods, iFppui) GO(snd_pcm_hw_params_test_rate, iFppui) @@ -367,86 +367,86 @@ GO(snd_pcm_info, iFpp) GO(snd_pcm_info_copy, vFpp) GO(snd_pcm_info_free, vFp) GO(snd_pcm_info_get_card, iFp) -GO(snd_pcm_info_get_class, iFp) +GO(snd_pcm_info_get_class, uFp) GO(snd_pcm_info_get_device, uFp) GO(snd_pcm_info_get_id, pFp) GO(snd_pcm_info_get_name, pFp) -GO(snd_pcm_info_get_stream, iFp) -GO(snd_pcm_info_get_subclass, iFp) +GO(snd_pcm_info_get_stream, uFp) +GO(snd_pcm_info_get_subclass, uFp) GO(snd_pcm_info_get_subdevice, uFp) GO(snd_pcm_info_get_subdevice_name, pFp) GO(snd_pcm_info_get_subdevices_avail, uFp) GO(snd_pcm_info_get_subdevices_count, uFp) -GO(snd_pcm_info_get_sync, pFp) +GO(snd_pcm_info_get_sync, HFp) GO(snd_pcm_info_malloc, iFp) -GO(snd_pcm_info_sizeof, uFv) -GO(snd_pcm_access_mask_sizeof, uFv) +GO(snd_pcm_info_sizeof, LFv) +GO(snd_pcm_access_mask_sizeof, LFv) GO(snd_pcm_info_set_device, vFpu) -GO(snd_pcm_info_set_stream, vFpi) +GO(snd_pcm_info_set_stream, vFpu) GO(snd_pcm_info_set_subdevice, vFpu) GO(snd_pcm_link, iFpp) GO(snd_pcm_meter_add_scope, iFpp) -GO(snd_pcm_meter_get_boundary, uFp) -GO(snd_pcm_meter_get_bufsize, uFp) +GO(snd_pcm_meter_get_boundary, LFp) +GO(snd_pcm_meter_get_bufsize, LFp) GO(snd_pcm_meter_get_channels, uFp) -GO(snd_pcm_meter_get_now, uFp) +GO(snd_pcm_meter_get_now, LFp) GO(snd_pcm_meter_get_rate, uFp) GO(snd_pcm_meter_search_scope, pFpp) GO(snd_pcm_mmap_begin, iFpppp) -GO(snd_pcm_mmap_commit, iFpuu) -GO(snd_pcm_mmap_readi, iFppu) -GO(snd_pcm_mmap_readn, iFppu) -GO(snd_pcm_mmap_writei, iFppu) -GO(snd_pcm_mmap_writen, iFppu) +GO(snd_pcm_mmap_commit, lFpLL) +GO(snd_pcm_mmap_readi, lFppL) +GO(snd_pcm_mmap_readn, lFppL) +GO(snd_pcm_mmap_writei, lFppL) +GO(snd_pcm_mmap_writen, lFppL) GO(snd_pcm_name, pFp) GO(snd_pcm_nonblock, iFpi) -GO(snd_pcm_open, iFppii) -GO(snd_pcm_open_lconf, iFppiip) +GO(snd_pcm_open, iFppui) +GO(snd_pcm_open_lconf, iFppuip) GO(snd_pcm_pause, iFpi) GO(snd_pcm_poll_descriptors, iFppu) GO(snd_pcm_poll_descriptors_count, iFp) GO(snd_pcm_poll_descriptors_revents, iFppup) GO(snd_pcm_prepare, iFp) -GO(snd_pcm_readi, iFppu) -GO(snd_pcm_readn, iFppu) +GO(snd_pcm_readi, lFppL) +GO(snd_pcm_readn, lFppL) GO(snd_pcm_recover, iFpii) GO(snd_pcm_reset, iFp) GO(snd_pcm_resume, iFp) -GO(snd_pcm_rewind, iFpu) -GO(snd_pcm_samples_to_bytes, uFpi) +GO(snd_pcm_rewind, lFpL) +GO(snd_pcm_samples_to_bytes, lFpl) //GOM(snd_pcm_scope_get_callback_private, pFEp) GO(snd_pcm_scope_get_name, pFp) GO(snd_pcm_scope_malloc, iFp) GO(snd_pcm_scope_s16_get_channel_buffer, pFpu) GO(snd_pcm_scope_s16_open, iFppp) //GOM(snd_pcm_scope_set_callback_private, vFEpp) -GO(snd_pcm_hw_params_sizeof, uFv) -GO(snd_pcm_sw_params_sizeof, uFv) +GO(snd_pcm_hw_params_sizeof, LFv) +GO(snd_pcm_sw_params_sizeof, LFv) GO(snd_pcm_hw_params_is_monotonic, iFp) GO(snd_pcm_scope_set_name, vFpp) //GOM(snd_pcm_scope_set_ops, vFEpp) GO(snd_pcm_set_chmap, iFpp) -GO(snd_pcm_set_params, iFpiiuuiu) +GO(snd_pcm_set_params, iFpiuuuiu) GO(snd_pcm_start, iFp) -GO(snd_pcm_start_mode_name, pFi) -GO(snd_pcm_state, iFp) -GO(snd_pcm_state_name, pFi) +GO(snd_pcm_start_mode_name, pFu) +GO(snd_pcm_state, uFp) +GO(snd_pcm_state_name, pFu) GO(snd_pcm_status, iFpp) GO(snd_pcm_status_copy, vFpp) GO(snd_pcm_status_dump, iFpp) GO(snd_pcm_status_free, vFp) -GO(snd_pcm_status_get_avail, uFp) -GO(snd_pcm_status_get_avail_max, uFp) -GO(snd_pcm_status_get_delay, iFp) +GO(snd_pcm_status_get_avail, LFp) +GO(snd_pcm_status_get_avail_max, LFp) +GO(snd_pcm_status_get_delay, lFp) GO(snd_pcm_status_get_htstamp, vFpp) -GO(snd_pcm_status_get_overrange, uFp) -GO(snd_pcm_status_get_state, iFp) +GO(snd_pcm_status_get_overrange, LFp) +GO(snd_pcm_status_get_state, uFp) GO(snd_pcm_status_get_trigger_htstamp, vFpp) GO(snd_pcm_status_get_trigger_tstamp, vFpp) GO(snd_pcm_status_get_tstamp, vFpp) GO(snd_pcm_status_malloc, iFp) -GO(snd_pcm_stream, iFp) -GO(snd_pcm_stream_name, pFi) +GO(snd_pcm_stream, uFp) +GO(snd_pcm_stream_name, pFu) GO(snd_pcm_subformat_description, pFi) GO(snd_pcm_subformat_mask_any, vFp) GO(snd_pcm_subformat_mask_copy, vFpp) @@ -468,35 +468,35 @@ GO(snd_pcm_sw_params_get_boundary, iFpp) GO(snd_pcm_sw_params_get_silence_size, iFpp) GO(snd_pcm_sw_params_get_silence_threshold, iFpp) GO(snd_pcm_sw_params_get_sleep_min, iFpp) -GO(snd_pcm_sw_params_get_start_mode, iFp) +GO(snd_pcm_sw_params_get_start_mode, uFp) GO(snd_pcm_sw_params_get_start_threshold, iFpp) GO(snd_pcm_sw_params_get_stop_threshold, iFpp) GO(snd_pcm_sw_params_get_tstamp_mode, iFpp) GO(snd_pcm_sw_params_get_xfer_align, iFpp) -GO(snd_pcm_sw_params_get_xrun_mode, iFp) +GO(snd_pcm_sw_params_get_xrun_mode, uFp) GO(snd_pcm_sw_params_malloc, iFp) -GO(snd_pcm_sw_params_set_avail_min, iFppu) +GO(snd_pcm_sw_params_set_avail_min, iFppL) GO(snd_pcm_sw_params_set_period_event, iFppi) -GO(snd_pcm_sw_params_set_silence_size, iFppu) -GO(snd_pcm_sw_params_set_silence_threshold, iFppu) +GO(snd_pcm_sw_params_set_silence_size, iFppL) +GO(snd_pcm_sw_params_set_silence_threshold, iFppL) GO(snd_pcm_sw_params_set_sleep_min, iFppu) -GO(snd_pcm_sw_params_set_start_mode, iFppi) -GO(snd_pcm_sw_params_set_start_threshold, iFppu) -GO(snd_pcm_sw_params_set_stop_threshold, iFppu) -GO(snd_pcm_sw_params_set_tstamp_mode, iFppi) -GO(snd_pcm_sw_params_set_tstamp_type, iFppi) -GO(snd_pcm_sw_params_set_xfer_align, iFppu) -GO(snd_pcm_sw_params_set_xrun_mode, iFppi) -GO(snd_pcm_tstamp_mode_name, pFi) -GO(snd_pcm_type, iFp) -GO(snd_pcm_type_name, pFi) +GO(snd_pcm_sw_params_set_start_mode, iFppu) +GO(snd_pcm_sw_params_set_start_threshold, iFppL) +GO(snd_pcm_sw_params_set_stop_threshold, iFppL) +GO(snd_pcm_sw_params_set_tstamp_mode, iFppu) +GO(snd_pcm_sw_params_set_tstamp_type, iFppu) +GO(snd_pcm_sw_params_set_xfer_align, iFppL) +GO(snd_pcm_sw_params_set_xrun_mode, iFppu) +GO(snd_pcm_tstamp_mode_name, pFu) +GO(snd_pcm_type, uFp) +GO(snd_pcm_type_name, pFu) GO(snd_pcm_unlink, iFp) GO(snd_pcm_wait, iFpi) -GO(snd_pcm_writei, iFppu) -GO(snd_pcm_writen, iFppu) -GO(snd_pcm_xrun_mode_name, pFi) -GO(snd_spcm_init, iFpuuiiiii) -GO(snd_spcm_init_duplex, iFppuuiiiiii) +GO(snd_pcm_writei, lFppL) +GO(snd_pcm_writen, lFppL) +GO(snd_pcm_xrun_mode_name, pFu) +GO(snd_spcm_init, iFpuuiiuuu) +GO(snd_spcm_init_duplex, iFppuuiiuuuu) GO(snd_spcm_init_get_params, iFpppp) GO(snd_rawmidi_open, iFpppi) GO(snd_rawmidi_open_lconf, iFpppip) @@ -505,13 +505,13 @@ GO(snd_rawmidi_poll_descriptors_count, iFp) GO(snd_rawmidi_poll_descriptors, iFppu) GO(snd_rawmidi_poll_descriptors_revents, iFppup) GO(snd_rawmidi_nonblock, iFpi) -GO(snd_rawmidi_info_sizeof, uFv) +GO(snd_rawmidi_info_sizeof, LFv) GO(snd_rawmidi_info_malloc, iFp) GO(snd_rawmidi_info_free, vFp) GO(snd_rawmidi_info_copy, vFpp) GO(snd_rawmidi_info_get_device, uFp) GO(snd_rawmidi_info_get_subdevice, uFp) -GO(snd_rawmidi_info_get_stream, iFp) +GO(snd_rawmidi_info_get_stream, uFp) GO(snd_rawmidi_info_get_card, iFp) GO(snd_rawmidi_info_get_flags, uFp) GO(snd_rawmidi_info_get_id, pFp) @@ -521,35 +521,35 @@ GO(snd_rawmidi_info_get_subdevices_count, uFp) GO(snd_rawmidi_info_get_subdevices_avail, uFp) GO(snd_rawmidi_info_set_device, vFpu) GO(snd_rawmidi_info_set_subdevice, vFpu) -GO(snd_rawmidi_info_set_stream, vFpi) +GO(snd_rawmidi_info_set_stream, vFpu) GO(snd_rawmidi_info, iFpp) -GO(snd_rawmidi_params_sizeof, uFv) +GO(snd_rawmidi_params_sizeof, LFv) GO(snd_rawmidi_params_malloc, iFp) GO(snd_rawmidi_params_free, vFp) GO(snd_rawmidi_params_copy, vFpp) -GO(snd_rawmidi_params_set_buffer_size, iFppu) -GO(snd_rawmidi_params_get_buffer_size, uFp) -GO(snd_rawmidi_params_set_avail_min, iFppu) -GO(snd_rawmidi_params_get_avail_min, uFp) +GO(snd_rawmidi_params_set_buffer_size, iFppL) +GO(snd_rawmidi_params_get_buffer_size, LFp) +GO(snd_rawmidi_params_set_avail_min, iFppL) +GO(snd_rawmidi_params_get_avail_min, LFp) GO(snd_rawmidi_params_set_no_active_sensing, iFppi) GO(snd_rawmidi_params_get_no_active_sensing, iFp) GO(snd_rawmidi_params, iFpp) GO(snd_rawmidi_params_current, iFpp) -GO(snd_rawmidi_status_sizeof, uFv) +GO(snd_rawmidi_status_sizeof, LFv) GO(snd_rawmidi_status_malloc, iFp) GO(snd_rawmidi_status_free, vFp) GO(snd_rawmidi_status_copy, vFpp) GO(snd_rawmidi_status_get_tstamp, vFpp) -GO(snd_rawmidi_status_get_avail, uFp) -GO(snd_rawmidi_status_get_xruns, uFp) +GO(snd_rawmidi_status_get_avail, LFp) +GO(snd_rawmidi_status_get_xruns, LFp) GO(snd_rawmidi_status, iFpp) GO(snd_rawmidi_drain, iFp) GO(snd_rawmidi_drop, iFp) -GO(snd_rawmidi_write, uFppu) -GO(snd_rawmidi_read, uFppu) +GO(snd_rawmidi_write, lFppL) +GO(snd_rawmidi_read, lFppL) GO(snd_rawmidi_name, pFp) -GO(snd_rawmidi_type, iFp) -GO(snd_rawmidi_stream, iFp) +GO(snd_rawmidi_type, uFp) +GO(snd_rawmidi_stream, uFp) GO(snd_timer_query_open, iFppi) GO(snd_timer_query_open_lconf, iFppip) GO(snd_timer_query_close, iFp) @@ -560,8 +560,8 @@ GO(snd_timer_query_status, iFpp) GO(snd_timer_open, iFppi) GO(snd_timer_open_lconf, iFppip) GO(snd_timer_close, iFp) -//GO(snd_async_add_timer_handler, iFppPp) -//GO(snd_async_handler_get_timer, pFp) +//GOM(snd_async_add_timer_handler, iFpppp) +GO(snd_async_handler_get_timer, pFp) GO(snd_timer_poll_descriptors_count, iFp) GO(snd_timer_poll_descriptors, iFppu) GO(snd_timer_poll_descriptors_revents, iFppup) @@ -571,8 +571,8 @@ GO(snd_timer_status, iFpp) GO(snd_timer_start, iFp) GO(snd_timer_stop, iFp) GO(snd_timer_continue, iFp) -GO(snd_timer_read, uFppu) -GO(snd_timer_id_sizeof, uFv) +GO(snd_timer_read, lFppL) +GO(snd_timer_id_sizeof, LFv) GO(snd_timer_id_malloc, iFp) GO(snd_timer_id_free, vFp) GO(snd_timer_id_copy, vFpp) @@ -586,7 +586,7 @@ GO(snd_timer_id_set_device, vFpi) GO(snd_timer_id_get_device, iFp) GO(snd_timer_id_set_subdevice, vFpi) GO(snd_timer_id_get_subdevice, iFp) -GO(snd_timer_ginfo_sizeof, uFv) +GO(snd_timer_ginfo_sizeof, LFv) GO(snd_timer_ginfo_malloc, iFp) GO(snd_timer_ginfo_free, vFp) GO(snd_timer_ginfo_copy, vFpp) @@ -596,11 +596,11 @@ GO(snd_timer_ginfo_get_flags, uFp) GO(snd_timer_ginfo_get_card, iFp) GO(snd_timer_ginfo_get_id, pFp) GO(snd_timer_ginfo_get_name, pFp) -GO(snd_timer_ginfo_get_resolution, iFp) -GO(snd_timer_ginfo_get_resolution_min, iFp) -GO(snd_timer_ginfo_get_resolution_max, iFp) +GO(snd_timer_ginfo_get_resolution, LFp) +GO(snd_timer_ginfo_get_resolution_min, LFp) +GO(snd_timer_ginfo_get_resolution_max, LFp) GO(snd_timer_ginfo_get_clients, uFp) -GO(snd_timer_info_sizeof, uFv) +GO(snd_timer_info_sizeof, LFv) GO(snd_timer_info_malloc, iFp) GO(snd_timer_info_free, vFp) GO(snd_timer_info_copy, vFpp) @@ -608,8 +608,8 @@ GO(snd_timer_info_is_slave, iFp) GO(snd_timer_info_get_card, iFp) GO(snd_timer_info_get_id, pFp) GO(snd_timer_info_get_name, pFp) -GO(snd_timer_info_get_resolution, iFp) -GO(snd_timer_params_sizeof, uFv) +GO(snd_timer_info_get_resolution, lFp) +GO(snd_timer_params_sizeof, LFv) GO(snd_timer_params_malloc, iFp) GO(snd_timer_params_free, vFp) GO(snd_timer_params_copy, vFpp) @@ -619,22 +619,22 @@ GO(snd_timer_params_set_exclusive, iFpi) GO(snd_timer_params_get_exclusive, iFp) GO(snd_timer_params_set_early_event, iFpi) GO(snd_timer_params_get_early_event, iFp) -GO(snd_timer_params_set_ticks, vFpi) -GO(snd_timer_params_get_ticks, iFp) -GO(snd_timer_params_set_queue_size, vFpi) -GO(snd_timer_params_get_queue_size, iFp) +GO(snd_timer_params_set_ticks, vFpl) +GO(snd_timer_params_get_ticks, lFp) +GO(snd_timer_params_set_queue_size, vFpl) +GO(snd_timer_params_get_queue_size, lFp) GO(snd_timer_params_set_filter, vFpu) GO(snd_timer_params_get_filter, uFp) -GO(snd_timer_status_sizeof, uFv) +GO(snd_timer_status_sizeof, LFv) GO(snd_timer_status_malloc, iFp) GO(snd_timer_status_free, vFp) GO(snd_timer_status_copy, vFpp) -GO(snd_timer_status_get_timestamp, iFp) -GO(snd_timer_status_get_resolution, iFp) -GO(snd_timer_status_get_lost, iFp) -GO(snd_timer_status_get_overrun, iFp) -GO(snd_timer_status_get_queue, iFp) -GO(snd_timer_info_get_ticks, iFp) +GO(snd_timer_status_get_timestamp, HFp) +GO(snd_timer_status_get_resolution, lFp) +GO(snd_timer_status_get_lost, lFp) +GO(snd_timer_status_get_overrun, lFp) +GO(snd_timer_status_get_queue, lFp) +GO(snd_timer_info_get_ticks, lFp) GO(snd_hwdep_open, iFppi) GO(snd_hwdep_close, iFp) GO(snd_hwdep_poll_descriptors, iFppu) @@ -644,10 +644,10 @@ GO(snd_hwdep_info, iFpp) GO(snd_hwdep_dsp_status, iFpp) GO(snd_hwdep_dsp_load, iFpp) GO(snd_hwdep_ioctl, iFpup) -GO(snd_hwdep_write, uFppu) -GO(snd_hwdep_read, uFppu) -GO(snd_hwdep_info_sizeof, uFv) -GO(snd_hwdep_dsp_status_sizeof, uFv) +GO(snd_hwdep_write, lFppL) +GO(snd_hwdep_read, lFppL) +GO(snd_hwdep_info_sizeof, LFv) +GO(snd_hwdep_dsp_status_sizeof, LFv) GO(snd_hwdep_dsp_status_malloc, iFp) GO(snd_hwdep_dsp_status_free, vFp) GO(snd_hwdep_dsp_status_copy, vFpp) @@ -656,18 +656,18 @@ GO(snd_hwdep_dsp_status_get_id, pFp) GO(snd_hwdep_dsp_status_get_num_dsps, uFp) GO(snd_hwdep_dsp_status_get_dsp_loaded, uFp) GO(snd_hwdep_dsp_status_get_chip_ready, uFp) -GO(snd_hwdep_dsp_image_sizeof, uFv) +GO(snd_hwdep_dsp_image_sizeof, LFv) GO(snd_hwdep_dsp_image_malloc, iFp) GO(snd_hwdep_dsp_image_free, vFp) GO(snd_hwdep_dsp_image_copy, vFpp) GO(snd_hwdep_dsp_image_get_index, uFp) GO(snd_hwdep_dsp_image_get_name, pFp) GO(snd_hwdep_dsp_image_get_image, pFp) -GO(snd_hwdep_dsp_image_get_length, uFp) +GO(snd_hwdep_dsp_image_get_length, LFp) GO(snd_hwdep_dsp_image_set_index, vFpu) GO(snd_hwdep_dsp_image_set_name, vFpp) GO(snd_hwdep_dsp_image_set_image, vFpp) -GO(snd_hwdep_dsp_image_set_length, vFpu) +GO(snd_hwdep_dsp_image_set_length, vFpL) GO(snd_card_load, iFi) GO(snd_card_next, iFp) GO(snd_card_get_index, iFp) @@ -677,8 +677,8 @@ GO(snd_ctl_open, iFppi) GO(snd_ctl_open_lconf, iFppip) GO(snd_ctl_close, iFp) GO(snd_ctl_nonblock, iFpi) -//GO(snd_async_add_ctl_handler, iFppPp) -//GO(snd_async_handler_get_ctl, pFp) +//GOM(snd_async_add_ctl_handler, iFpppp) +GO(snd_async_handler_get_ctl, pFp) GO(snd_ctl_poll_descriptors_count, iFp) GO(snd_ctl_poll_descriptors, iFppu) GO(snd_ctl_poll_descriptors_revents, iFppup) @@ -706,38 +706,38 @@ GO(snd_ctl_get_power_state, iFpp) GO(snd_ctl_read, iFpp) GO(snd_ctl_wait, iFpi) GO(snd_ctl_name, pFp) -GO(snd_ctl_type, iFp) -GO(snd_ctl_elem_type_name, pFi) -GO(snd_ctl_elem_iface_name, pFi) -GO(snd_ctl_event_type_name, pFi) +GO(snd_ctl_type, uFp) +GO(snd_ctl_elem_type_name, pFu) +GO(snd_ctl_elem_iface_name, pFu) +GO(snd_ctl_event_type_name, pFu) GO(snd_ctl_event_elem_get_mask, uFp) GO(snd_ctl_event_elem_get_numid, uFp) GO(snd_ctl_event_elem_get_id, vFpp) -GO(snd_ctl_event_elem_get_interface, iFp) +GO(snd_ctl_event_elem_get_interface, uFp) GO(snd_ctl_event_elem_get_device, uFp) GO(snd_ctl_event_elem_get_subdevice, uFp) GO(snd_ctl_event_elem_get_name, pFp) GO(snd_ctl_event_elem_get_index, uFp) GO(snd_ctl_elem_list_alloc_space, iFpu) GO(snd_ctl_elem_list_free_space, vFp) -GO(snd_ctl_elem_id_sizeof, uFv) +GO(snd_ctl_elem_id_sizeof, LFv) GO(snd_ctl_elem_id_malloc, iFp) GO(snd_ctl_elem_id_free, vFp) GO(snd_ctl_elem_id_clear, vFp) GO(snd_ctl_elem_id_copy, vFpp) GO(snd_ctl_elem_id_get_numid, uFp) -GO(snd_ctl_elem_id_get_interface, iFp) +GO(snd_ctl_elem_id_get_interface, uFp) GO(snd_ctl_elem_id_get_device, uFp) GO(snd_ctl_elem_id_get_subdevice, uFp) GO(snd_ctl_elem_id_get_name, pFp) GO(snd_ctl_elem_id_get_index, uFp) GO(snd_ctl_elem_id_set_numid, vFpu) -GO(snd_ctl_elem_id_set_interface, vFpi) +GO(snd_ctl_elem_id_set_interface, vFpu) GO(snd_ctl_elem_id_set_device, vFpu) GO(snd_ctl_elem_id_set_subdevice, vFpu) GO(snd_ctl_elem_id_set_name, vFpp) GO(snd_ctl_elem_id_set_index, vFpu) -GO(snd_ctl_card_info_sizeof, uFv) +GO(snd_ctl_card_info_sizeof, LFv) GO(snd_ctl_card_info_malloc, iFp) GO(snd_ctl_card_info_free, vFp) GO(snd_ctl_card_info_clear, vFp) @@ -749,13 +749,13 @@ GO(snd_ctl_card_info_get_name, pFp) GO(snd_ctl_card_info_get_longname, pFp) GO(snd_ctl_card_info_get_mixername, pFp) GO(snd_ctl_card_info_get_components, pFp) -GO(snd_ctl_event_sizeof, uFv) +GO(snd_ctl_event_sizeof, LFv) GO(snd_ctl_event_malloc, iFp) GO(snd_ctl_event_free, vFp) GO(snd_ctl_event_clear, vFp) GO(snd_ctl_event_copy, vFpp) -GO(snd_ctl_event_get_type, iFp) -GO(snd_ctl_elem_list_sizeof, uFv) +GO(snd_ctl_event_get_type, uFp) +GO(snd_ctl_elem_list_sizeof, LFv) GO(snd_ctl_elem_list_malloc, iFp) GO(snd_ctl_elem_list_free, vFp) GO(snd_ctl_elem_list_clear, vFp) @@ -765,17 +765,17 @@ GO(snd_ctl_elem_list_get_used, uFp) GO(snd_ctl_elem_list_get_count, uFp) GO(snd_ctl_elem_list_get_id, vFpup) GO(snd_ctl_elem_list_get_numid, uFpu) -GO(snd_ctl_elem_list_get_interface, iFpu) +GO(snd_ctl_elem_list_get_interface, uFpu) GO(snd_ctl_elem_list_get_device, uFpu) GO(snd_ctl_elem_list_get_subdevice, uFpu) GO(snd_ctl_elem_list_get_name, pFpu) GO(snd_ctl_elem_list_get_index, uFpu) -GO(snd_ctl_elem_info_sizeof, uFv) +GO(snd_ctl_elem_info_sizeof, LFv) GO(snd_ctl_elem_info_malloc, iFp) GO(snd_ctl_elem_info_free, vFp) GO(snd_ctl_elem_info_clear, vFp) GO(snd_ctl_elem_info_copy, vFpp) -GO(snd_ctl_elem_info_get_type, iFp) +GO(snd_ctl_elem_info_get_type, uFp) GO(snd_ctl_elem_info_is_readable, iFp) GO(snd_ctl_elem_info_is_writable, iFp) GO(snd_ctl_elem_info_is_volatile, iFp) @@ -788,9 +788,9 @@ GO(snd_ctl_elem_info_is_owner, iFp) GO(snd_ctl_elem_info_is_user, iFp) GO(snd_ctl_elem_info_get_owner, iFp) GO(snd_ctl_elem_info_get_count, uFp) -GO(snd_ctl_elem_info_get_min, iFp) -GO(snd_ctl_elem_info_get_max, iFp) -GO(snd_ctl_elem_info_get_step, iFp) +GO(snd_ctl_elem_info_get_min, lFp) +GO(snd_ctl_elem_info_get_max, lFp) +GO(snd_ctl_elem_info_get_step, lFp) GO(snd_ctl_elem_info_get_min64, IFp) GO(snd_ctl_elem_info_get_max64, IFp) GO(snd_ctl_elem_info_get_step64, IFp) @@ -801,53 +801,53 @@ GO(snd_ctl_elem_info_get_dimensions, iFp) GO(snd_ctl_elem_info_get_dimension, iFpu) GO(snd_ctl_elem_info_get_id, vFpp) GO(snd_ctl_elem_info_get_numid, uFp) -GO(snd_ctl_elem_info_get_interface, iFp) +GO(snd_ctl_elem_info_get_interface, uFp) GO(snd_ctl_elem_info_get_device, uFp) GO(snd_ctl_elem_info_get_subdevice, uFp) GO(snd_ctl_elem_info_get_name, pFp) GO(snd_ctl_elem_info_get_index, uFp) GO(snd_ctl_elem_info_set_id, vFpp) GO(snd_ctl_elem_info_set_numid, vFpu) -GO(snd_ctl_elem_info_set_interface, vFpi) +GO(snd_ctl_elem_info_set_interface, vFpu) GO(snd_ctl_elem_info_set_device, vFpu) GO(snd_ctl_elem_info_set_subdevice, vFpu) GO(snd_ctl_elem_info_set_name, vFpp) GO(snd_ctl_elem_info_set_index, vFpu) -GO(snd_ctl_elem_add_integer, iFppuiii) +GO(snd_ctl_elem_add_integer, iFppulll) GO(snd_ctl_elem_add_integer64, iFppuIII) GO(snd_ctl_elem_add_boolean, iFppu) GO(snd_ctl_elem_add_iec958, iFpp) GO(snd_ctl_elem_remove, iFpp) -GO(snd_ctl_elem_value_sizeof, uFv) +GO(snd_ctl_elem_value_sizeof, LFv) GO(snd_ctl_elem_value_malloc, iFp) GO(snd_ctl_elem_value_free, vFp) GO(snd_ctl_elem_value_clear, vFp) GO(snd_ctl_elem_value_copy, vFpp) GO(snd_ctl_elem_value_get_id, vFpp) GO(snd_ctl_elem_value_get_numid, uFp) -GO(snd_ctl_elem_value_get_interface, iFp) +GO(snd_ctl_elem_value_get_interface, uFp) GO(snd_ctl_elem_value_get_device, uFp) GO(snd_ctl_elem_value_get_subdevice, uFp) GO(snd_ctl_elem_value_get_name, pFp) GO(snd_ctl_elem_value_get_index, uFp) GO(snd_ctl_elem_value_set_id, vFpp) GO(snd_ctl_elem_value_set_numid, vFpu) -GO(snd_ctl_elem_value_set_interface, vFpi) +GO(snd_ctl_elem_value_set_interface, vFpu) GO(snd_ctl_elem_value_set_device, vFpu) GO(snd_ctl_elem_value_set_subdevice, vFpu) GO(snd_ctl_elem_value_set_name, vFpp) GO(snd_ctl_elem_value_set_index, vFpu) GO(snd_ctl_elem_value_get_boolean, iFpu) -GO(snd_ctl_elem_value_get_integer, iFpu) +GO(snd_ctl_elem_value_get_integer, lFpu) GO(snd_ctl_elem_value_get_integer64, IFpu) GO(snd_ctl_elem_value_get_enumerated, uFpu) GO(snd_ctl_elem_value_get_byte, CFpu) -GO(snd_ctl_elem_value_set_boolean, vFpui) -GO(snd_ctl_elem_value_set_integer, vFpui) +GO(snd_ctl_elem_value_set_boolean, vFpul) +GO(snd_ctl_elem_value_set_integer, vFpul) GO(snd_ctl_elem_value_set_integer64, vFpuI) GO(snd_ctl_elem_value_set_enumerated, vFpuu) -GO(snd_ctl_elem_value_set_byte, vFpuu) -GO(snd_ctl_elem_set_bytes, vFppu) +GO(snd_ctl_elem_value_set_byte, vFpuC) +GO(snd_ctl_elem_set_bytes, vFppL) GO(snd_ctl_elem_value_get_bytes, pFp) GO(snd_ctl_elem_value_get_iec958, vFpp) GO(snd_ctl_elem_value_set_iec958, vFpp) @@ -860,16 +860,16 @@ GO(snd_hctl_poll_descriptors_count, iFp) GO(snd_hctl_poll_descriptors, iFppu) GO(snd_hctl_poll_descriptors_revents, iFppup) GO(snd_hctl_get_count, uFp) -GO(snd_hctl_set_compare, iFpp) +//GOM(snd_hctl_set_compare, iFpp) GO(snd_hctl_first_elem, pFp) GO(snd_hctl_last_elem, pFp) GO(snd_hctl_find_elem, pFpp) -//GO(snd_hctl_set_callback, vFpP) -//GO(snd_hctl_set_callback_private, vFpp) -//GO(snd_hctl_get_callback_private, pFp) +//GOM(snd_hctl_set_callback, vFpp) +GO(snd_hctl_set_callback_private, vFpp) +GO(snd_hctl_get_callback_private, pFp) GO(snd_hctl_load, iFp) GO(snd_hctl_free, iFp) -//GO(snd_hctl_handle_events, iFp) +GO(snd_hctl_handle_events, iFp) GO(snd_hctl_name, pFp) GO(snd_hctl_wait, iFpi) GO(snd_hctl_ctl, pFp) @@ -884,14 +884,14 @@ GO(snd_hctl_elem_tlv_command, iFpp) GO(snd_hctl_elem_get_hctl, pFp) GO(snd_hctl_elem_get_id, vFpp) GO(snd_hctl_elem_get_numid, uFp) -GO(snd_hctl_elem_get_interface, iFp) +GO(snd_hctl_elem_get_interface, uFp) GO(snd_hctl_elem_get_device, uFp) GO(snd_hctl_elem_get_subdevice, uFp) GO(snd_hctl_elem_get_name, pFp) GO(snd_hctl_elem_get_index, uFp) -//GO(snd_hctl_elem_set_callback, vFpP) -//GO(snd_hctl_elem_get_callback_private, pFp) -//GO(snd_hctl_elem_set_callback_private, vFpp) +//GOM(snd_hctl_elem_set_callback, vFpp) +GO(snd_hctl_elem_get_callback_private, pFp) +GO(snd_hctl_elem_set_callback_private, vFpp) GO(snd_sctl_build, iFppppi) GO(snd_sctl_free, iFp) GO(snd_sctl_install, iFp) @@ -912,10 +912,10 @@ GO(snd_mixer_poll_descriptors_revents, iFppup) GO(snd_mixer_load, iFp) GO(snd_mixer_free, vFp) GO(snd_mixer_wait, iFpi) -GO(snd_mixer_set_compare, iFpp) -//GO(snd_mixer_set_callback, vFpP) -//GO(snd_mixer_get_callback_private, pFp) -//GO(snd_mixer_set_callback_private, vFpp) +GOM(snd_mixer_set_compare, iFEpp) +//GOM(snd_mixer_set_callback, vFpp) +GO(snd_mixer_get_callback_private, pFp) +GO(snd_mixer_set_callback_private, vFpp) GO(snd_mixer_get_count, uFp) GO(snd_mixer_class_unregister, iFp) GO(snd_mixer_elem_next, pFp) @@ -923,11 +923,11 @@ GO(snd_mixer_elem_prev, pFp) GOM(snd_mixer_elem_set_callback, vFEpp) GO(snd_mixer_elem_get_callback_private, pFp) GO(snd_mixer_elem_set_callback_private, vFpp) -GO(snd_mixer_elem_get_type, iFp) -//GO(snd_mixer_class_register, iFpp) +GO(snd_mixer_elem_get_type, uFp) +GO(snd_mixer_class_register, iFpp) GO(snd_mixer_add_elem, iFpp) GO(snd_mixer_remove_elem, iFpp) -GO(snd_mixer_elem_new, iFpiipp) +GOM(snd_mixer_elem_new, iFEpuipp) GO(snd_mixer_elem_add, iFpp) GO(snd_mixer_elem_remove, iFp) GO(snd_mixer_elem_free, vFp) @@ -937,18 +937,18 @@ GO(snd_mixer_elem_attach, iFpp) GO(snd_mixer_elem_detach, iFpp) GO(snd_mixer_elem_empty, iFp) GO(snd_mixer_elem_get_private, pFp) -GO(snd_mixer_class_sizeof, uFv) +GO(snd_mixer_class_sizeof, LFv) GO(snd_mixer_class_malloc, iFp) GO(snd_mixer_class_free, vFp) GO(snd_mixer_class_copy, vFpp) GO(snd_mixer_class_get_mixer, pFp) -GO(snd_mixer_class_get_event, pFp) +GOM(snd_mixer_class_get_event, pFEp) GO(snd_mixer_class_get_private, pFp) -GO(snd_mixer_class_get_compare, pFp) -GO(snd_mixer_class_set_event, iFpp) +GOM(snd_mixer_class_get_compare, pFEp) +GOM(snd_mixer_class_set_event, iFEpp) GO(snd_mixer_class_set_private, iFpp) -GO(snd_mixer_class_set_private_free, iFpp) -GO(snd_mixer_class_set_compare, iFpp) +GOM(snd_mixer_class_set_private_free, iFEpp) +GOM(snd_mixer_class_set_compare, iFEpp) GO(snd_mixer_selem_channel_name, pFi) GO(snd_mixer_selem_register, iFppp) GO(snd_mixer_selem_get_id, vFpp) @@ -980,32 +980,32 @@ GO(snd_mixer_selem_get_playback_dB, iFpip) GO(snd_mixer_selem_get_capture_dB, iFpip) GO(snd_mixer_selem_get_playback_switch, iFpip) GO(snd_mixer_selem_get_capture_switch, iFpip) -GO(snd_mixer_selem_set_playback_volume, iFpii) -GO(snd_mixer_selem_set_capture_volume, iFpii) -GO(snd_mixer_selem_set_playback_dB, iFpiii) -GO(snd_mixer_selem_set_capture_dB, iFpiii) -GO(snd_mixer_selem_set_playback_volume_all, iFpi) -GO(snd_mixer_selem_set_capture_volume_all, iFpi) -GO(snd_mixer_selem_set_playback_dB_all, iFpii) -GO(snd_mixer_selem_set_capture_dB_all, iFpii) +GO(snd_mixer_selem_set_playback_volume, iFpil) +GO(snd_mixer_selem_set_capture_volume, iFpil) +GO(snd_mixer_selem_set_playback_dB, iFpili) +GO(snd_mixer_selem_set_capture_dB, iFpili) +GO(snd_mixer_selem_set_playback_volume_all, iFpl) +GO(snd_mixer_selem_set_capture_volume_all, iFpl) +GO(snd_mixer_selem_set_playback_dB_all, iFpli) +GO(snd_mixer_selem_set_capture_dB_all, iFpli) GO(snd_mixer_selem_set_playback_switch, iFpii) GO(snd_mixer_selem_set_capture_switch, iFpii) GO(snd_mixer_selem_set_playback_switch_all, iFpi) GO(snd_mixer_selem_set_capture_switch_all, iFpi) GO(snd_mixer_selem_get_playback_volume_range, iFppp) GO(snd_mixer_selem_get_playback_dB_range, iFppp) -GO(snd_mixer_selem_set_playback_volume_range, iFpii) +GO(snd_mixer_selem_set_playback_volume_range, iFpll) GO(snd_mixer_selem_get_capture_volume_range, iFppp) GO(snd_mixer_selem_get_capture_dB_range, iFppp) -GO(snd_mixer_selem_set_capture_volume_range, iFpii) +GO(snd_mixer_selem_set_capture_volume_range, iFpll) GO(snd_mixer_selem_is_enumerated, iFp) GO(snd_mixer_selem_is_enum_playback, iFp) GO(snd_mixer_selem_is_enum_capture, iFp) GO(snd_mixer_selem_get_enum_items, iFp) -GO(snd_mixer_selem_get_enum_item_name, iFpuup) +GO(snd_mixer_selem_get_enum_item_name, iFpuLp) GO(snd_mixer_selem_get_enum_item, iFpip) GO(snd_mixer_selem_set_enum_item, iFpiu) -GO(snd_mixer_selem_id_sizeof, uFv) +GO(snd_mixer_selem_id_sizeof, LFv) GO(snd_mixer_selem_id_malloc, iFp) GO(snd_mixer_selem_id_free, vFp) GO(snd_mixer_selem_id_copy, vFpp) @@ -1016,18 +1016,18 @@ GO(snd_mixer_selem_id_set_index, vFpu) GO(snd_seq_open, iFppii) GO(snd_seq_open_lconf, iFppiip) GO(snd_seq_name, pFp) -GO(snd_seq_type, iFp) +GO(snd_seq_type, uFp) GO(snd_seq_close, iFp) GO(snd_seq_poll_descriptors_count, iFpw) GO(snd_seq_poll_descriptors, iFppuw) GO(snd_seq_poll_descriptors_revents, iFppup) GO(snd_seq_nonblock, iFpi) GO(snd_seq_client_id, iFp) -GO(snd_seq_get_output_buffer_size, uFp) -GO(snd_seq_get_input_buffer_size, uFp) -GO(snd_seq_set_output_buffer_size, iFpu) -GO(snd_seq_set_input_buffer_size, iFpu) -GO(snd_seq_system_info_sizeof, uFv) +GO(snd_seq_get_output_buffer_size, LFp) +GO(snd_seq_get_input_buffer_size, LFp) +GO(snd_seq_set_output_buffer_size, iFpL) +GO(snd_seq_set_input_buffer_size, iFpL) +GO(snd_seq_system_info_sizeof, LFv) GO(snd_seq_system_info_malloc, iFp) GO(snd_seq_system_info_free, vFp) GO(snd_seq_system_info_copy, vFpp) @@ -1038,12 +1038,12 @@ GO(snd_seq_system_info_get_channels, iFp) GO(snd_seq_system_info_get_cur_clients, iFp) GO(snd_seq_system_info_get_cur_queues, iFp) GO(snd_seq_system_info, iFpp) -GO(snd_seq_client_info_sizeof, uFv) +GO(snd_seq_client_info_sizeof, LFv) GO(snd_seq_client_info_malloc, iFp) GO(snd_seq_client_info_free, vFp) GO(snd_seq_client_info_copy, vFpp) GO(snd_seq_client_info_get_client, iFp) -GO(snd_seq_client_info_get_type, iFp) +GO(snd_seq_client_info_get_type, uFp) GO(snd_seq_client_info_get_name, pFp) GO(snd_seq_client_info_get_broadcast_filter, iFp) GO(snd_seq_client_info_get_error_bounce, iFp) @@ -1059,22 +1059,22 @@ GO(snd_seq_get_client_info, iFpp) GO(snd_seq_get_any_client_info, iFpip) GO(snd_seq_set_client_info, iFpp) GO(snd_seq_query_next_client, iFpp) -GO(snd_seq_client_pool_sizeof, uFv) +GO(snd_seq_client_pool_sizeof, LFv) GO(snd_seq_client_pool_malloc, iFp) GO(snd_seq_client_pool_free, vFp) GO(snd_seq_client_pool_copy, vFpp) GO(snd_seq_client_pool_get_client, iFp) -GO(snd_seq_client_pool_get_output_pool, uFp) -GO(snd_seq_client_pool_get_input_pool, uFp) -GO(snd_seq_client_pool_get_output_room, uFp) -GO(snd_seq_client_pool_get_output_free, uFp) -GO(snd_seq_client_pool_get_input_free, uFp) -GO(snd_seq_client_pool_set_output_pool, vFpu) -GO(snd_seq_client_pool_set_input_pool, vFpu) -GO(snd_seq_client_pool_set_output_room, vFpu) +GO(snd_seq_client_pool_get_output_pool, LFp) +GO(snd_seq_client_pool_get_input_pool, LFp) +GO(snd_seq_client_pool_get_output_room, LFp) +GO(snd_seq_client_pool_get_output_free, LFp) +GO(snd_seq_client_pool_get_input_free, LFp) +GO(snd_seq_client_pool_set_output_pool, vFpL) +GO(snd_seq_client_pool_set_input_pool, vFpL) +GO(snd_seq_client_pool_set_output_room, vFpL) GO(snd_seq_get_client_pool, iFpp) GO(snd_seq_set_client_pool, iFpp) -GO(snd_seq_port_info_sizeof, uFv) +GO(snd_seq_port_info_sizeof, LFv) GO(snd_seq_port_info_malloc, iFp) GO(snd_seq_port_info_free, vFp) GO(snd_seq_port_info_copy, vFpp) @@ -1112,7 +1112,7 @@ GO(snd_seq_get_port_info, iFpip) GO(snd_seq_get_any_port_info, iFpiip) GO(snd_seq_set_port_info, iFpip) GO(snd_seq_query_next_port, iFpp) -GO(snd_seq_port_subscribe_sizeof, uFv) +GO(snd_seq_port_subscribe_sizeof, LFv) GO(snd_seq_port_subscribe_malloc, iFp) GO(snd_seq_port_subscribe_free, vFp) GO(snd_seq_port_subscribe_copy, vFpp) @@ -1131,14 +1131,14 @@ GO(snd_seq_port_subscribe_set_time_real, vFpi) GO(snd_seq_get_port_subscription, iFpp) GO(snd_seq_subscribe_port, iFpp) GO(snd_seq_unsubscribe_port, iFpp) -GO(snd_seq_query_subscribe_sizeof, uFv) +GO(snd_seq_query_subscribe_sizeof, LFv) GO(snd_seq_query_subscribe_malloc, iFp) GO(snd_seq_query_subscribe_free, vFp) GO(snd_seq_query_subscribe_copy, vFpp) GO(snd_seq_query_subscribe_get_client, iFp) GO(snd_seq_query_subscribe_get_port, iFp) GO(snd_seq_query_subscribe_get_root, pFp) -GO(snd_seq_query_subscribe_get_type, iFp) +GO(snd_seq_query_subscribe_get_type, uFp) GO(snd_seq_query_subscribe_get_index, iFp) GO(snd_seq_query_subscribe_get_num_subs, iFp) GO(snd_seq_query_subscribe_get_addr, pFp) @@ -1149,10 +1149,10 @@ GO(snd_seq_query_subscribe_get_time_real, iFp) GO(snd_seq_query_subscribe_set_client, vFpi) GO(snd_seq_query_subscribe_set_port, vFpi) GO(snd_seq_query_subscribe_set_root, vFpp) -GO(snd_seq_query_subscribe_set_type, vFpi) +GO(snd_seq_query_subscribe_set_type, vFpu) GO(snd_seq_query_subscribe_set_index, vFpi) GO(snd_seq_query_port_subscribers, iFpp) -GO(snd_seq_queue_info_sizeof, uFv) +GO(snd_seq_queue_info_sizeof, LFv) GO(snd_seq_queue_info_malloc, iFp) GO(snd_seq_queue_info_free, vFp) GO(snd_seq_queue_info_copy, vFpp) @@ -1174,7 +1174,7 @@ GO(snd_seq_set_queue_info, iFpip) GO(snd_seq_query_named_queue, iFpp) GO(snd_seq_get_queue_usage, iFpi) GO(snd_seq_set_queue_usage, iFpii) -GO(snd_seq_queue_status_sizeof, uFv) +GO(snd_seq_queue_status_sizeof, LFv) GO(snd_seq_queue_status_malloc, iFp) GO(snd_seq_queue_status_free, vFp) GO(snd_seq_queue_status_copy, vFpp) @@ -1184,7 +1184,7 @@ GO(snd_seq_queue_status_get_tick_time, uFp) GO(snd_seq_queue_status_get_real_time, pFp) GO(snd_seq_queue_status_get_status, uFp) GO(snd_seq_get_queue_status, iFpip) -GO(snd_seq_queue_tempo_sizeof, uFv) +GO(snd_seq_queue_tempo_sizeof, LFv) GO(snd_seq_queue_tempo_malloc, iFp) GO(snd_seq_queue_tempo_free, vFp) GO(snd_seq_queue_tempo_copy, vFpp) @@ -1199,21 +1199,21 @@ GO(snd_seq_queue_tempo_set_skew, vFpu) GO(snd_seq_queue_tempo_set_skew_base, vFpu) GO(snd_seq_get_queue_tempo, iFpip) GO(snd_seq_set_queue_tempo, iFpip) -GO(snd_seq_queue_timer_sizeof, uFv) +GO(snd_seq_queue_timer_sizeof, LFv) GO(snd_seq_queue_timer_malloc, iFp) GO(snd_seq_queue_timer_free, vFp) GO(snd_seq_queue_timer_copy, vFpp) GO(snd_seq_queue_timer_get_queue, iFp) -GO(snd_seq_queue_timer_get_type, iFp) +GO(snd_seq_queue_timer_get_type, uFp) GO(snd_seq_queue_timer_get_id, pFp) GO(snd_seq_queue_timer_get_resolution, uFp) -GO(snd_seq_queue_timer_set_type, vFpi) +GO(snd_seq_queue_timer_set_type, vFpu) GO(snd_seq_queue_timer_set_id, vFpp) GO(snd_seq_queue_timer_set_resolution, vFpu) GO(snd_seq_get_queue_timer, iFpip) GO(snd_seq_set_queue_timer, iFpip) GO(snd_seq_free_event, iFp) -GO(snd_seq_event_length, uFp) +GO(snd_seq_event_length, lFp) GO(snd_seq_event_output, iFpp) GO(snd_seq_event_output_buffer, iFpp) GO(snd_seq_event_output_direct, iFpp) @@ -1226,7 +1226,7 @@ GO(snd_seq_drop_output, iFp) GO(snd_seq_drop_output_buffer, iFp) GO(snd_seq_drop_input, iFp) GO(snd_seq_drop_input_buffer, iFp) -GO(snd_seq_remove_events_sizeof, uFv) +GO(snd_seq_remove_events_sizeof, LFv) GO(snd_seq_remove_events_malloc, iFp) GO(snd_seq_remove_events_free, vFp) GO(snd_seq_remove_events_copy, vFpp) @@ -1248,16 +1248,16 @@ GO(snd_seq_remove_events, iFpp) GO(snd_seq_set_bit, vFip) GO(snd_seq_change_bit, iFip) GO(snd_seq_get_bit, iFip) -GO(snd_midi_event_new, iFup) -GO(snd_midi_event_resize_buffer, iFpu) +GO(snd_midi_event_new, iFLp) +GO(snd_midi_event_resize_buffer, iFpL) GO(snd_midi_event_free, vFp) GO(snd_midi_event_init, vFp) GO(snd_midi_event_reset_encode, vFp) GO(snd_midi_event_reset_decode, vFp) GO(snd_midi_event_no_status, vFpi) -GO(snd_midi_event_encode, iFppip) +GO(snd_midi_event_encode, lFpplp) GO(snd_midi_event_encode_byte, iFpip) -GO(snd_midi_event_decode, iFppip) +GO(snd_midi_event_decode, lFpplp) GO(snd_seq_control_queue, iFpiiip) GO(snd_seq_create_simple_port, iFppuu) GO(snd_seq_delete_simple_port, iFpi) @@ -1267,13 +1267,13 @@ GO(snd_seq_disconnect_from, iFpiii) GO(snd_seq_disconnect_to, iFpiii) GO(snd_seq_set_client_name, iFpp) GO(snd_seq_set_client_event_filter, iFpi) -GO(snd_seq_set_client_pool_output_room, iFpu) -GO(snd_seq_set_client_pool_input, iFpu) +GO(snd_seq_set_client_pool_output_room, iFpL) +GO(snd_seq_set_client_pool_input, iFpL) GO(snd_seq_reset_pool_output, iFp) GO(snd_seq_reset_pool_input, iFp) GO(snd_seq_sync_output_queue, iFp) GO(snd_seq_parse_address, iFppp) -GO(snd_hwdep_info_get_iface, iFp) -DATAM(snd_lib_error, 4) -GO(superdummy_error_handler, vFpipipV) // dummy to have the bridge definition \ No newline at end of file +GO(snd_hwdep_info_get_iface, uFp) +DATAM(snd_lib_error, 8) +GO(superdummy_error_handler, vFpipipV) // dummy to have the bridge definition diff --git a/src/wrapped/wrappedlibbsd.c b/src/wrapped/wrappedlibbsd.c index 505d6516487727dd7198fcf1c060d3dc6b9c784b..3b495b68e7817d928e46356350625933e7e6f0a4 100644 --- a/src/wrapped/wrappedlibbsd.c +++ b/src/wrapped/wrappedlibbsd.c @@ -17,11 +17,8 @@ #include "x64tls.h" -#ifdef ANDROID -const char* libbsdName = "libbsd.so"; -#else const char* libbsdName = "libbsd.so.0"; -#endif +#define ALTNAME "libbsd.so" #define LIBNAME libbsd #ifdef STATICBUILD diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index d771818f07255166938cee3597599d46c455eec3..8e0571d311fd7dc9452bfb6a7b3ceba694fc80f8 100644 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -41,6 +41,7 @@ #include #include #include +#include #undef LOG_INFO #undef LOG_DEBUG @@ -73,13 +74,8 @@ #define LIBNAME libc -const char* libcName = -#ifdef ANDROID - "libc.so" -#else - "libc.so.6" -#endif - ; +const char* libcName = "libc.so.6"; +#define ALTNAME "libc.so" typedef int (*iFi_t)(int); typedef int (*iFp_t)(void*); @@ -100,21 +96,25 @@ typedef int32_t (*iFippi_t)(int32_t, void*, void*, int32_t); typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); typedef int32_t (*iFpipp_t)(void*, int32_t, void*, void*); typedef int32_t (*iFppii_t)(void*, void*, int32_t, int32_t); -typedef int32_t (*iFipuu_t)(int32_t, void*, uint32_t, uint32_t); +typedef int32_t (*iFipiup_t)(int, void*, int, uint32_t, void*); typedef int32_t (*iFipiI_t)(int32_t, void*, int32_t, int64_t); +typedef int32_t (*iFipuu_t)(int32_t, void*, uint32_t, uint32_t); typedef int32_t (*iFipuup_t)(int32_t, void*, uint32_t, uint32_t, void*); typedef int32_t (*iFiiV_t)(int32_t, int32_t, ...); typedef void* (*pFp_t)(void*); typedef void* (*pFpip_t)(void*, int, void*); -#define SUPER() \ +#define ADDED_FUNCTIONS() \ GO(_ITM_addUserCommitAction, iFpup_t) \ GO(_IO_file_stat, iFpp_t) \ GO(fts64_open, pFpip_t) \ GO(register_printf_specifier, iFipp_t) \ - GO(register_printf_type, iFp_t) + GO(register_printf_type, iFp_t) \ + GO(statx, iFipiup_t) +#include "generated/wrappedlibcupstypes.h" + #include "wrappercallback.h" static int regs_abi[] = {_DI, _SI, _DX, _CX, _R8, _R9}; @@ -690,9 +690,16 @@ EXPORT int my___printf_chk(x64emu_t *emu, int chk, void* fmt, void* b) PREPARE_VALIST; return vprintf((const char*)fmt, VARARGS); } +extern int box64_stdout_no_w; EXPORT int my_wprintf(x64emu_t *emu, void* fmt, void* b) { myStackAlignW(emu, (const char*)fmt, b, emu->scratch, R_EAX, 1); PREPARE_VALIST; + if(box64_stdout_no_w) { + wchar_t buff[2048]; + int ret = vswprintf(buff, 2047, fmt, VARARGS); + printf("%S", buff); + return ret; + } return vwprintf((const wchar_t*)fmt, VARARGS); } EXPORT int my___wprintf_chk(x64emu_t *emu, int chk, void* fmt, void* b) @@ -898,6 +905,14 @@ EXPORT int my_vsprintf(x64emu_t* emu, void* buff, void * fmt, x64_va_list_t b) } EXPORT int my___vsprintf_chk(x64emu_t* emu, void* buff, void * fmt, x64_va_list_t b) __attribute__((alias("my_vsprintf"))); +EXPORT int my_scanf(x64emu_t* emu, void* fmt, uint64_t* b) +{ + myStackAlignScanf(emu, (const char*)fmt, b, emu->scratch, 1); + PREPARE_VALIST; + + return vscanf(fmt, VARARGS); +} + EXPORT int my_vfscanf(x64emu_t* emu, void* stream, void* fmt, x64_va_list_t b) { (void)emu; @@ -924,6 +939,38 @@ EXPORT int my_vsscanf(x64emu_t* emu, void* stream, void* fmt, x64_va_list_t b) EXPORT int my___vsscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my_vsscanf"))); +EXPORT int my_vfwscanf(x64emu_t* emu, void* F, void* fmt, x64_va_list_t b) +{ + (void)emu; + #ifdef CONVERT_VALIST + CONVERT_VALIST(b); + #else + myStackAlignScanfWValist(emu, (const char*)fmt, emu->scratch, b); + PREPARE_VALIST; + #endif + return vfwscanf(F, fmt, VARARGS); +} + +EXPORT int my_vwscanf(x64emu_t* emu, void* fmt, x64_va_list_t b) +{ + (void)emu; + #ifdef CONVERT_VALIST + CONVERT_VALIST(b); + #else + myStackAlignScanfWValist(emu, (const char*)fmt, emu->scratch, b); + PREPARE_VALIST; + #endif + return vwscanf(fmt, VARARGS); +} + +EXPORT int my_wscanf(x64emu_t* emu, void* fmt, uint64_t* b) +{ + myStackAlignScanfW(emu, (const char*)fmt, b, emu->scratch, 1); + PREPARE_VALIST; + + return vwscanf(fmt, VARARGS); +} + EXPORT int my_vswscanf(x64emu_t* emu, void* stream, void* fmt, x64_va_list_t b) { (void)emu; @@ -1074,31 +1121,43 @@ EXPORT int my_swscanf(x64emu_t* emu, void* stream, void* fmt, uint64_t* b) return vswscanf(stream, fmt, VARARGS); } -#if 0 -EXPORT void my_verr(x64emu_t* emu, int eval, void* fmt, void* b) { - #ifndef NOALIGN - myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); +EXPORT void my_error(x64emu_t *emu, int status, int errnum, void* fmt, void* b) { + myStackAlign(emu, (const char*)fmt, b, emu->scratch, R_EAX, 3); PREPARE_VALIST; - void* f = verr; - ((vFipp_t)f)(eval, fmt, VARARGS); - #else - void* f = verr; - ((vFipp_t)f)(eval, fmt, (uint32_t*)b); - #endif + char buf[512]; + vsnprintf(buf, 512, (const char*)fmt, VARARGS); + error(status, errnum, "%s", buf); +} +EXPORT void my_error_at_line(x64emu_t *emu, int status, int errnum, void* filename, uint32_t linenum, void* fmt, void* b) { + myStackAlign(emu, (const char*)fmt, b, emu->scratch, R_EAX, 5); + PREPARE_VALIST; + char buf[512]; + vsnprintf(buf, 512, (const char*)fmt, VARARGS); + error_at_line(status, errnum, filename, linenum, "%s", buf); } -EXPORT void my_vwarn(x64emu_t* emu, void* fmt, void* b) { - #ifndef NOALIGN - myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); +EXPORT void my_verr(x64emu_t* emu, int eval, void* fmt, x64_va_list_t b) { + if (!fmt) + return err(eval, NULL); + #ifdef CONVERT_VALIST + (void)emu; + CONVERT_VALIST(b); + #else + myStackAlignValist(emu, (const char*)fmt, emu->scratch, b); PREPARE_VALIST; - void* f = vwarn; - ((vFpp_t)f)(fmt, VARARGS); + #endif + return verr(eval, fmt, VARARGS); +} +EXPORT void my_verrx(x64emu_t* emu, int eval, void* fmt, x64_va_list_t b) { + #ifdef CONVERT_VALIST + (void)emu; + CONVERT_VALIST(b); #else - void* f = vwarn; - ((vFpp_t)f)(fmt, (uint32_t*)b); + myStackAlignValist(emu, (const char*)fmt, emu->scratch, b); + PREPARE_VALIST; #endif + return verrx(eval, fmt, VARARGS); } -#endif EXPORT void my_err(x64emu_t *emu, int eval, void* fmt, void* b) { myStackAlign(emu, (const char*)fmt, b, emu->scratch, R_EAX, 2); PREPARE_VALIST; @@ -1109,6 +1168,30 @@ EXPORT void my_errx(x64emu_t *emu, int eval, void* fmt, void* b) { PREPARE_VALIST; verrx(eval, (const char*)fmt, VARARGS); } +EXPORT void my_vwarn(x64emu_t* emu, void* fmt, x64_va_list_t b) { + if (!fmt) + return warn(NULL); + #ifdef CONVERT_VALIST + (void)emu; + CONVERT_VALIST(b); + #else + myStackAlignValist(emu, (const char*)fmt, emu->scratch, b); + PREPARE_VALIST; + #endif + return vwarn(fmt, VARARGS); +} +EXPORT void my_vwarnx(x64emu_t* emu, void* fmt, x64_va_list_t b) { + if (!fmt) + return warnx(NULL); + #ifdef CONVERT_VALIST + (void)emu; + CONVERT_VALIST(b); + #else + myStackAlignValist(emu, (const char*)fmt, emu->scratch, b); + PREPARE_VALIST; + #endif + return vwarnx(fmt, VARARGS); +} EXPORT void my_warn(x64emu_t *emu, void* fmt, void* b) { myStackAlign(emu, (const char*)fmt, b, emu->scratch, R_EAX, 1); PREPARE_VALIST; @@ -1209,6 +1292,23 @@ EXPORT int my___fxstat64(x64emu_t *emu, int vers, int fd, void* buf) return r; } +EXPORT int my_statx(x64emu_t* emu, int dirfd, void* path, int flags, uint32_t mask, void* buf) +{ + if(my->statx) + return my->statx(dirfd, path, flags, mask, buf); + #ifdef __NR_statx + int ret = syscall(__NR_statx, dirfd, path, flags, mask, buf); + if(ret<0) { + errno = -ret; + ret = -1; + } + return ret; + #else + errno = ENOSYS; + return -1; + #endif +} + EXPORT int my___xmknod(x64emu_t* emu, int v, char* path, uint32_t mode, dev_t* dev) { (void)emu; @@ -1598,6 +1698,14 @@ static int isSysCpuCache(const char *path, const char* w, int* _cpu, int* _index return 1; } +static long isProcMem(const char* path) +{ + long pid; + if(sscanf(path, "/proc/%ld/mem", &pid)==1) + return pid; + return 0; +} + EXPORT ssize_t my_readlink(x64emu_t* emu, void* path, void* buf, size_t sz) { if(isProcSelf((const char*)path, "exe")) { @@ -1607,6 +1715,11 @@ EXPORT ssize_t my_readlink(x64emu_t* emu, void* path, void* buf, size_t sz) return readlink((const char*)path, (char*)buf, sz); } +EXPORT ssize_t my___readlink_chk(x64emu_t* emu, void* path, void* buf, size_t sz, size_t buflen) +{ + return my_readlink(emu, path, buf, sz); +} + int getNCpu(); // defined in my_cpuid.c const char* getBoxCpuName(); // defined in my_cpuid.c const char* getCpuName(); // defined in my_cpu_id.c @@ -1653,7 +1766,14 @@ void CreateCPUInfoFile(int fd) P; sprintf(buff, "bogomips\t: %g\n", getBogoMips()); P; - sprintf(buff, "flags\t\t: fpu cx8 sep ht cmov clflush mmx sse sse2 syscall tsc lahf_lm ssse3 ht tm lm fxsr cpuid pclmulqdq cx16 aes movbe pni sse4_1%s%s%s lzcnt popcnt%s%s%s%s%s\n", box64_sse42?" sse4_2":"", box64_avx?" avx":"", box64_shaext?"sha_ni":"", box64_avx?" bmi1":"", box64_avx2?" avx2":"", box64_avx?" bmi2":"", box64_avx2?" vaes":"", box64_avx2?" fma":""); + sprintf(buff, "flags\t\t: fpu cx8 sep ht cmov clflush mmx sse sse2 syscall tsc lahf_lm ssse3 ht tm lm fxsr cpuid pclmulqdq cx16 aes movbe pni "\ + "sse4_1%s%s%s lzcnt popcnt%s%s%s%s%s%s%s%s%s\n", + box64_sse42?" sse4_2":"", box64_avx?" avx":"", box64_shaext?"sha_ni":"", + box64_avx?" bmi1":"", box64_avx2?" avx2":"", box64_avx?" bmi2":"", + box64_avx2?" vaes":"", box64_avx2?" fma":"", + box64_avx?" xsave":"", box64_avx?" f16c":"", box64_avx2?" randr":"", + box64_avx2?" adx":"" + ); P; sprintf(buff, "address sizes\t: 48 bits physical, 48 bits virtual\n"); P; @@ -1807,6 +1927,10 @@ EXPORT int32_t my_open(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mo lseek(tmp, 0, SEEK_SET); return tmp; } + if(box64_wine && isProcMem(pathname) && (mode&O_WRONLY)) { + // deny using proc/XX/mem as it messes up with dynarec memory protection & tracking + return -1; + } #endif int ret = open(pathname, flags, mode); return ret; @@ -2128,7 +2252,7 @@ EXPORT int32_t my_execv(x64emu_t* emu, const char* path, char* const argv[]) const char** newargv = (const char**)box_calloc(n+toadd+2, sizeof(char*)); newargv[0] = x86?emu->context->box86path:emu->context->box64path; if(script) newargv[1] = emu->context->bashpath; // script needs to be launched with bash - memcpy(newargv+toadd, argv+skip_first, sizeof(char*)*(n+toadd)); + memcpy(newargv+toadd, argv+skip_first, sizeof(char*)*(n+1-skip_first)); if(self) newargv[1] = emu->context->fullpath; else { @@ -2323,6 +2447,60 @@ EXPORT int32_t my_execvp(x64emu_t* emu, const char* path, char* const argv[]) // fullpath is gone, so the search will only be on PATH, not on BOX64_PATH (is that an issue?) return execvp(path, argv); } +// execvp should use PATH to search for the program first +EXPORT int32_t my_execvpe(x64emu_t* emu, const char* path, char* const argv[], char* const envp[]) +{ + // need to use BOX64_PATH / PATH here... + char* fullpath = ResolveFileSoft(path, &my_context->box64_path); + // use fullpath... + int self = isProcSelf(fullpath, "exe"); + int x64 = FileIsX64ELF(fullpath); + int x86 = my_context->box86path?FileIsX86ELF(fullpath):0; + int script = (my_context->bashpath && FileIsShell(fullpath))?1:0; + printf_log(LOG_DEBUG, "execvpe(\"%s\", %p, %p), IsX86=%d / fullpath=\"%s\"\n", path, argv, envp, x64, fullpath); + // hack to update the environ var if needed + if(envp == my_context->envv && environ) { + envp = environ; + } + if (x64 || x86 || script || self) { + // count argv... + int i=0; + while(argv[i]) ++i; + int toadd = script?2:1; + char** newargv = (char**)alloca((i+toadd+1)*sizeof(char*)); + memset(newargv, 0, (i+toadd+1)*sizeof(char*)); + newargv[0] = x86?emu->context->box86path:emu->context->box64path; + if(script) newargv[1] = emu->context->bashpath; // script needs to be launched with bash + for (int j=0; jcontext->fullpath; + //else if(script) newargv[2] = fullpath; + else { + // TODO check if envp is not environ and add the value on a copy + if(strcmp(newargv[toadd], path)) + setenv(x86?"BOX86_ARG0":"BOX64_ARG0", newargv[toadd], 1); + newargv[toadd] = fullpath; + } + + printf_log(LOG_DEBUG, " => execvp(\"%s\", %p [\"%s\", \"%s\"...:%d])\n", newargv[0], newargv, newargv[1], i?newargv[2]:"", i); + int ret; + ret = execvpe(newargv[0], newargv, envp); + box_free(fullpath); + return ret; + } + if((!strcmp(path + strlen(path) - strlen("/uname"), "/uname") || !strcmp(path, "uname")) + && argv[1] && (!strcmp(argv[1], "-m") || !strcmp(argv[1], "-p") || !strcmp(argv[1], "-i")) + && !argv[2]) { + // uname -m is redirected to box64 -m + path = my_context->box64path; + char *argv2[3] = { my_context->box64path, argv[1], NULL }; + + return execvpe(path, argv2, envp); + } + + // fullpath is gone, so the search will only be on PATH, not on BOX64_PATH (is that an issue?) + return execvpe(path, argv, envp); +} EXPORT int32_t my_execl(x64emu_t* emu, const char* path) { @@ -2330,7 +2508,7 @@ EXPORT int32_t my_execl(x64emu_t* emu, const char* path) int x64 = FileIsX64ELF(path); int x86 = my_context->box86path?FileIsX86ELF(path):0; int script = (my_context->bashpath && FileIsShell(path))?1:0; - printf_log(LOG_DEBUG, "execle(\"%s\", ...), IsX86=%d, self=%d\n", path, x64, self); + printf_log(LOG_DEBUG, "execl(\"%s\", ...), IsX86=%d, self=%d\n", path, x64, self); // count argv... int i=0; while(getVargN(emu, i+1)) ++i; @@ -2343,7 +2521,7 @@ EXPORT int32_t my_execl(x64emu_t* emu, const char* path) for (int k=0; kcontext->fullpath; - printf_log(LOG_DEBUG, " => execle(\"%s\", %p [\"%s\", \"%s\"...:%d])\n", newargv[0], newargv, newargv[1], i?newargv[2]:"", i); + printf_log(LOG_DEBUG, " => execl(\"%s\", %p [\"%s\", \"%s\"...:%d])\n", newargv[0], newargv, newargv[1], i?newargv[2]:"", i); int ret = 0; if (!(x64 || x86 || script || self)) { ret = execv(path, newargv); @@ -2360,7 +2538,7 @@ EXPORT int32_t my_execle(x64emu_t* emu, const char* path) int x64 = FileIsX64ELF(path); int x86 = my_context->box86path?FileIsX86ELF(path):0; int script = (my_context->bashpath && FileIsShell(path))?1:0; - printf_log(LOG_DEBUG, "execl(\"%s\", ...), IsX86=%d, self=%d\n", path, x64, self); + printf_log(LOG_DEBUG, "execle(\"%s\", ...), IsX86=%d, self=%d\n", path, x64, self); // hack to update the environ var if needed // count argv... int i=0; @@ -2804,50 +2982,51 @@ EXPORT int my_readlinkat(x64emu_t* emu, int fd, void* path, void* buf, size_t bu #define MAP_32BIT 0x40 #endif extern int have48bits; -EXPORT void* my_mmap64(x64emu_t* emu, void *addr, unsigned long length, int prot, int flags, int fd, ssize_t offset) +EXPORT void* my_mmap64(x64emu_t* emu, void *addr, size_t length, int prot, int flags, int fd, ssize_t offset) { (void)emu; if(prot&PROT_WRITE) prot|=PROT_READ; // PROT_READ is implicit with PROT_WRITE on i386 - if(emu && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "mmap64(%p, 0x%lx, 0x%x, 0x%x, %d, %ld) => ", addr, length, prot, flags, fd, offset);} + if((emu || box64_is32bits) && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "mmap64(%p, 0x%lx, 0x%x, 0x%x, %d, %ld) => ", addr, length, prot, flags, fd, offset);} int new_flags = flags; - #ifndef NOALIGN void* old_addr = addr; + #ifndef NOALIGN new_flags&=~MAP_32BIT; // remove MAP_32BIT - if(flags&MAP_32BIT) { + if((flags&MAP_32BIT) && !(flags&MAP_FIXED)) { // MAP_32BIT only exist on x86_64! - addr = find31bitBlockNearHint(addr, length, 0); + if(!(flags&MAP_FIXED) && (!old_addr || !isBlockFree(old_addr, length))) + addr = find31bitBlockNearHint(old_addr, length, 0); } else if (box64_wine || 1) { // other mmap should be restricted to 47bits - if(!addr) + if(!(flags&MAP_FIXED) && (!addr || !isBlockFree(addr, length))) addr = find47bitBlock(length); } #endif void* ret = internal_mmap(addr, length, prot, new_flags, fd, offset); - #ifndef NOALIGN + #if !defined(NOALIGN) if((ret!=MAP_FAILED) && (flags&MAP_32BIT) && (((uintptr_t)ret>0xffffffffLL) || ((box64_wine) && ((uintptr_t)ret&0xffff) && (ret!=addr)))) { int olderr = errno; - if(emu && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) printf_log(LOG_NONE, "Warning, mmap on 32bits didn't worked, ask %p, got %p ", addr, ret); - munmap(ret, length); + if((emu || box64_is32bits) && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) printf_log(LOG_NONE, "Warning, mmap on 32bits didn't worked, ask %p, got %p ", addr, ret); + internal_munmap(ret, length); loadProtectionFromMap(); // reload map, because something went wrong previously addr = find31bitBlockNearHint(old_addr, length, 0); // is this the best way? new_flags = (addr && isBlockFree(addr, length) )? (new_flags|MAP_FIXED) : new_flags; if((new_flags&(MAP_FIXED|MAP_FIXED_NOREPLACE))==(MAP_FIXED|MAP_FIXED_NOREPLACE)) new_flags&=~MAP_FIXED_NOREPLACE; ret = internal_mmap(addr, length, prot, new_flags, fd, offset); - if(emu && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) printf_log(LOG_NONE, " tried again with %p, got %p\n", addr, ret); + if((emu || box64_is32bits) && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) printf_log(LOG_NONE, " tried again with %p, got %p\n", addr, ret); if(old_addr && ret!=old_addr && ret!=MAP_FAILED) errno = olderr; } else if((ret!=MAP_FAILED) && !(flags&MAP_FIXED) && ((box64_wine)) && (addr && (addr!=ret)) && (((uintptr_t)ret>0x7fffffffffffLL) || ((uintptr_t)ret&~0xffff))) { int olderr = errno; - if(emu && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) printf_log(LOG_NONE, "Warning, mmap on 47bits didn't worked, ask %p, got %p ", addr, ret); - munmap(ret, length); + if((emu || box64_is32bits) && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) printf_log(LOG_NONE, "Warning, mmap on 47bits didn't worked, ask %p, got %p ", addr, ret); + internal_munmap(ret, length); loadProtectionFromMap(); // reload map, because something went wrong previously addr = find47bitBlockNearHint(old_addr, length, 0); // is this the best way? new_flags = (addr && isBlockFree(addr, length)) ? (new_flags|MAP_FIXED) : new_flags; if((new_flags&(MAP_FIXED|MAP_FIXED_NOREPLACE))==(MAP_FIXED|MAP_FIXED_NOREPLACE)) new_flags&=~MAP_FIXED_NOREPLACE; ret = internal_mmap(addr, length, prot, new_flags, fd, offset); - if(emu && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) printf_log(LOG_NONE, " tried again with %p, got %p\n", addr, ret); + if((emu || box64_is32bits) && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) printf_log(LOG_NONE, " tried again with %p, got %p\n", addr, ret); if(old_addr && ret!=old_addr && ret!=MAP_FAILED) { errno = olderr; if(old_addr>(void*)0x7fffffffff && !have48bits) @@ -2860,7 +3039,9 @@ EXPORT void* my_mmap64(x64emu_t* emu, void *addr, unsigned long length, int prot errno = EEXIST; return MAP_FAILED; } - if(emu && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "%p\n", ret);} + int e = errno; + if((ret==MAP_FAILED && (emu || box64_is32bits)) && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "%s (%d)\n", strerror(errno), errno);} + if(((ret!=MAP_FAILED) && (emu || box64_is32bits)) && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "%p\n", ret);} #ifdef DYNAREC if(box64_dynarec && ret!=MAP_FAILED) { /*if(flags&0x100000 && addr!=ret) @@ -2889,7 +3070,7 @@ EXPORT void* my_mmap64(x64emu_t* emu, void *addr, unsigned long length, int prot char buf[128]; sprintf(buf, "/proc/self/fd/%d", fd); ssize_t r = readlink(buf, filename, sizeof(filename)-1); - if(r!=1) filename[r]=0; + if(r!=-1) filename[r]=0; if(r>0 && strlen(filename)>strlen("UnityPlayer.dll") && !strcasecmp(filename+strlen(filename)-strlen("UnityPlayer.dll"), "UnityPlayer.dll")) { printf_log(LOG_INFO, "BOX64: Detected UnityPlayer.dll\n"); #ifdef DYNAREC @@ -2903,17 +3084,20 @@ EXPORT void* my_mmap64(x64emu_t* emu, void *addr, unsigned long length, int prot setProtection_mmap((uintptr_t)ret, length, prot); else setProtection((uintptr_t)ret, length, prot); + if(old_addr && ret!=old_addr) + e = EEXIST; } + errno = e; // preserve errno return ret; } -EXPORT void* my_mmap(x64emu_t* emu, void *addr, unsigned long length, int prot, int flags, int fd, ssize_t offset) __attribute__((alias("my_mmap64"))); +EXPORT void* my_mmap(x64emu_t* emu, void *addr, size_t length, int prot, int flags, int fd, ssize_t offset) __attribute__((alias("my_mmap64"))); EXPORT void* my_mremap(x64emu_t* emu, void* old_addr, size_t old_size, size_t new_size, int flags, void* new_addr) { (void)emu; - if(emu && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "mremap(%p, %lu, %lu, %d, %p)=>", old_addr, old_size, new_size, flags, new_addr);} + if((emu || box64_is32bits) && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "mremap(%p, %lu, %lu, %d, %p)=>", old_addr, old_size, new_size, flags, new_addr);} void* ret = mremap(old_addr, old_size, new_size, flags, new_addr); - if(emu && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "%p\n", ret);} + if((emu || box64_is32bits) && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "%p\n", ret);} if(ret!=(void*)-1) { uint32_t prot = getProtection((uintptr_t)old_addr)&~PROT_CUSTOM; if(ret==old_addr) { @@ -2958,11 +3142,12 @@ EXPORT void* my_mremap(x64emu_t* emu, void* old_addr, size_t old_size, size_t ne return ret; } -EXPORT int my_munmap(x64emu_t* emu, void* addr, unsigned long length) +EXPORT int my_munmap(x64emu_t* emu, void* addr, size_t length) { (void)emu; - if(emu && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "munmap(%p, %lu)\n", addr, length);} + if((emu || box64_is32bits) && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "munmap(%p, 0x%lx)\n", addr, length);} int ret = internal_munmap(addr, length); + int e = errno; #ifdef DYNAREC if(!ret && box64_dynarec && length) { cleanDBFromAddressRange((uintptr_t)addr, length, 1); @@ -2971,13 +3156,14 @@ EXPORT int my_munmap(x64emu_t* emu, void* addr, unsigned long length) if(!ret) { freeProtection((uintptr_t)addr, length); } + errno = e; // preseve errno return ret; } EXPORT int my_mprotect(x64emu_t* emu, void *addr, unsigned long len, int prot) { (void)emu; - if(emu && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "mprotect(%p, %lu, 0x%x)\n", addr, len, prot);} + if(emu && (box64_log>=LOG_DEBUG || box64_dynarec_log>=LOG_DEBUG)) {printf_log(LOG_NONE, "mprotect(%p, 0x%lx, 0x%x)\n", addr, len, prot);} if(prot&PROT_WRITE) prot|=PROT_READ; // PROT_READ is implicit with PROT_WRITE on x86_64 int ret = mprotect(addr, len, prot); @@ -2986,7 +3172,7 @@ EXPORT int my_mprotect(x64emu_t* emu, void *addr, unsigned long len, int prot) if(prot& PROT_EXEC) addDBFromAddressRange((uintptr_t)addr, len); else - cleanDBFromAddressRange((uintptr_t)addr, len, 1); + cleanDBFromAddressRange((uintptr_t)addr, len, (!prot)?1:0); } #endif if(!ret && len) { @@ -3127,6 +3313,14 @@ EXPORT int my___libc_alloca_cutoff(x64emu_t* emu, size_t size) return (size<=(65536*4)); } +EXPORT int my_nanosleep(const struct timespec *req, struct timespec *rem) +{ + if(!req) + return 0; // workaround for some strange calls + return nanosleep(req, rem); +} +#endif + // DL functions from wrappedlibdl.c void* my_dlopen(x64emu_t* emu, void *filename, int flag); int my_dlclose(x64emu_t* emu, void *handle); @@ -3144,14 +3338,6 @@ EXPORT void* my___libc_dlsym(x64emu_t* emu, void* handle, void* name) return my_dlsym(emu, handle, name); } -EXPORT int my_nanosleep(const struct timespec *req, struct timespec *rem) -{ - if(!req) - return 0; // workaround for some strange calls - return nanosleep(req, rem); -} -#endif - #ifdef ANDROID void obstackSetup() { } @@ -3295,24 +3481,33 @@ EXPORT long my_ptrace(x64emu_t* emu, int request, pid_t pid, void* addr, uint32_ { if(request == PTRACE_POKEUSER) { if(ptrace(PTRACE_PEEKDATA, pid, &userdata_sign, NULL)==userdata_sign && (uintptr_t)addr < sizeof(userdata)) { - ptrace(PTRACE_POKEDATA, pid, addr+(uintptr_t)userdata, data); - return 0; + long ret = ptrace(PTRACE_POKEDATA, pid, addr+(uintptr_t)userdata, data); + return ret; } // fallback to a generic local faking - if((uintptr_t)addr < sizeof(userdata)) + if((uintptr_t)addr < sizeof(userdata)) { *(uintptr_t*)(addr+(uintptr_t)userdata) = (uintptr_t)data; // lets just ignore this for now! - return 0; + errno = 0; + return 0; + } + errno = EINVAL; + return -1; } if(request == PTRACE_PEEKUSER) { if(ptrace(PTRACE_PEEKDATA, pid, &userdata_sign, NULL)==userdata_sign && (uintptr_t)addr < sizeof(userdata)) { return ptrace(PTRACE_PEEKDATA, pid, addr+(uintptr_t)userdata, data); } // fallback to a generic local faking - if((uintptr_t)addr < sizeof(userdata)) + if((uintptr_t)addr < sizeof(userdata)) { + errno = 0; return *(uintptr_t*)(addr+(uintptr_t)userdata); + } + errno = EINVAL; + return -1; } - return ptrace(request, pid, addr, data); + long ret = ptrace(request, pid, addr, data); + return ret; } // Backtrace stuff @@ -3505,8 +3700,10 @@ typedef struct clone_arg_s { uintptr_t fnc; void* args; int stack_clone_used; + int flags; void* tls; } clone_arg_t; +void init_mutexes(box64context_t* context); static int clone_fn(void* p) { clone_arg_t* arg = (clone_arg_t*)p; @@ -3514,7 +3711,12 @@ static int clone_fn(void* p) x64emu_t *emu = arg->emu; R_RSP = arg->stack; emu->flags.quitonexit = 1; + thread_forget_emu(); //TODO: not all will flags needs this, probably just CLONE_VM? thread_set_emu(emu); + if(arg->flags&CLONE_NEWUSER) { + init_mutexes(my_context); + ResetSegmentsCache(emu); + } int ret = RunFunctionWithEmu(emu, 0, arg->fnc, 1, arg->args); int exited = (emu->flags.quitonexit==2); thread_set_emu(NULL); @@ -3551,6 +3753,7 @@ EXPORT int my_clone(x64emu_t* emu, void* fn, void* stack, int flags, void* args, arg->fnc = (uintptr_t)fn; arg->tls = tls; arg->emu = newemu; + arg->flags = flags; if((flags|(CLONE_VM|CLONE_VFORK|CLONE_SETTLS))==flags) // that's difficult to setup, so lets ignore all those flags :S flags&=~(CLONE_VM|CLONE_VFORK|CLONE_SETTLS); int64_t ret = clone(clone_fn, (void*)((uintptr_t)mystack+1024*1024), flags, arg, parent, NULL, child); @@ -3633,6 +3836,7 @@ EXPORT void my__exit(x64emu_t* emu, int code) __attribute__((alias("my_exit"))); EXPORT int my_prctl(x64emu_t* emu, int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5) { +#ifndef WINECE if(option==PR_SET_NAME) { printf_log(LOG_DEBUG, "BOX64: set process name to \"%s\"\n", (char*)arg2); ApplyParams((char*)arg2); @@ -3646,6 +3850,7 @@ EXPORT int my_prctl(x64emu_t* emu, int option, unsigned long arg2, unsigned long printf_log(LOG_INFO, "BOX64: ignoring prctl(PR_SET_SECCOMP, ...)\n"); return 0; } +#endif return prctl(option, arg2, arg3, arg4, arg5); } diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h index 3f1d2e1440cdedeafd0771966422d2416a6e4acc..d9b59301881c0f7405b748f4b824a2d71f746eba 100644 --- a/src/wrapped/wrappedlibc_private.h +++ b/src/wrapped/wrappedlibc_private.h @@ -1,14 +1,7 @@ -#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA) && defined(GOS)) +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) #error Meh... #endif -//socklen_t is u32 -// typedef unsigned long int nfds_t; -// pid_t is S32 -// key_t is S32 -// uid_t is u32 -// gid_t is u32 - GO(a64l, lFp) GO(abort, vFv) //DATAB(__abort_msg, @@ -17,28 +10,28 @@ GO(accept, iFipp) GO(accept4, iFippi) GOW(access, iFpi) GO(acct, iFp) -GOW(addmntent, iFpp) +GOW(addmntent, iFSp) GOW(addseverity, iFip) GOW(adjtime, iFpp) GO(__adjtimex, iFp) GOW(adjtimex, iFp) //GOW(advance, GO(alarm, uFu) -GO(aligned_alloc, pFUU) +GO(aligned_alloc, pFLL) GOW(alphasort, iFpp) GOW(alphasort64, iFpp) //GO(__arch_prctl, //GOW(arch_prctl, -//DATA(argp_err_exit_status, -//GOW(argp_error, vF!pV) -//GOW(argp_failure, vF!iipV) -//GOW(argp_help, vF!pup) -//GOW(argp_parse, iF!ipupp) -//DATAB(argp_program_bug_address, -//DATAB(argp_program_version, -//DATAB(argp_program_version_hook, -//GOW(argp_state_help, vF!pu) -//GOW(argp_usage, vF!) +//DATA(argp_err_exit_status, 4) +//GOWM(argp_error, vFppV) +//GOWM(argp_failure, vFpiipV) +//GOWM(argp_help, vFpSup) +//GOWM(argp_parse, iFpipupp) +//DATAB(argp_program_bug_address, 8) +//DATAB(argp_program_version, 8) +//DATAM(argp_program_version_hook, 8) +//GOWM(argp_state_help, vFpSu) +//GOWM(argp_usage, vFp) GOW(argz_add, iFppp) GOW(argz_add_sep, iFpppi) GOW(argz_append, iFpppL) @@ -67,13 +60,13 @@ GO(atof, dFp) GO(atoi, iFp) GO(atol, lFp) GO(atoll, IFp) -//GO(authdes_create, !Fpup!) -//GO(authdes_getucred, iF!pppp) -//GO(authdes_pk_create, !Fp!up!) -//GO(_authenticate, uF!!) -//GO(authnone_create, !Fv) -//GO(authunix_create, !Fpuuip) -//GO(authunix_create_default, !Fv) +//GOM(authdes_create, pFpupp) +//GO(authdes_getucred, "iF!pppp") +//GOM(authdes_pk_create, pFppupp) +//GOM(_authenticate, uFpp) +//GOM(authnone_create, pFv) +//GOM(authunix_create, pFpuuip) +//GOM(authunix_create_default, pFv) //GO(__backtrace, GOWM(backtrace, iFEpi) //GO(__backtrace_symbols, @@ -83,9 +76,9 @@ GOWM(backtrace_symbols_fd, vFEpii) GOW(basename, pFp) GO(bcmp, iFppL) GO(bcopy, vFppL) -//GO(bdflush, // Deprecated +//GO(bdflush, GOW(bind, iFipu) -//GO(bindresvport, iFi!) +GO(bindresvport, iFip) GOW(bindtextdomain, pFpp) GOW(bind_textdomain_codeset, pFpp) GOW(brk, iFp) @@ -95,10 +88,10 @@ GOM(bsearch, pFEppLLp) GOW(btowc, uFi) GO(__bzero, vFpL) GO(bzero, vFpL) -//GO(c16rtomb, LFpW!) +GO(c16rtomb, LFpWp) GOW(c32rtomb, LFpup) GOW(calloc, pFLL) -//GO(callrpc, iFpLLL@p@p) +//GOM(callrpc, iFpiiipppp) //GO(__call_tls_dtors, vFv) GOW(canonicalize_file_name, pFp) GO(capget, iFpp) @@ -106,7 +99,11 @@ GO(capset, iFpp) GO(catclose, iFp) GO(catgets, pFpiip) GO(catopen, pFpi) -//GO(cbc_crypt, // Deprecated +#ifdef STATICBUILD +//GO(cbc_crypt, iFppuup) +#else +GO(cbc_crypt, iFppuup) +#endif GO(cfgetispeed, uFp) GO(cfgetospeed, uFp) GO(cfmakeraw, vFp) @@ -115,43 +112,43 @@ GO(cfsetispeed, iFpu) GO(cfsetospeed, iFpu) GO(cfsetspeed, iFpu) GOW(chdir, iFp) -DATA(__check_rhosts_file, sizeof(void*)) +DATA(__check_rhosts_file, 8) //GO(chflags, //GO(__chk_fail, GOW(chmod, iFpu) GOW(chown, iFpuu) GO(chroot, iFp) GOW(clearenv, iFv) -GO(clearerr, vFp) -GO(clearerr_unlocked, vFp) +GO(clearerr, vFS) +GO(clearerr_unlocked, vFS) #ifdef STATICBUILD //GO(clnt_broadcast, -//GO(clnt_create, !FpLLp) +//GO(clnt_create, "!FpLLp") //GO(clnt_pcreateerror, vFp) //GO(clnt_perrno, vFu) -//GO(clnt_perror, vF!p) -//GO(clntraw_create, !FLL) +//GO(clnt_perror, "vF!p") +//GO(clntraw_create, "!FLL") //GO(clnt_spcreateerror, pFp) //GO(clnt_sperrno, pFu) -//GO(clnt_sperror, pF!p) -//GO(clnttcp_create, !F!LLpuu) -//GO(clntudp_bufcreate, !F!LL?puu) -//GO(clntudp_create, !F!LL?p) -//GO(clntunix_create, !F!LLpuu) +//GO(clnt_sperror, "pF!p") +//GO(clnttcp_create, "!F!LLpuu") +//GO(clntudp_bufcreate, "!F!LL?puu") +//GO(clntudp_create, "!F!LL?p") +//GO(clntunix_create, "!F!LLpuu") #else -//GO(clnt_broadcast, -//GO(clnt_create, !FpLLp) +//GOM(clnt_broadcast, uFLLLppppp) +//GOM(clnt_create, pFpuup) GO(clnt_pcreateerror, vFp) GO(clnt_perrno, vFu) -//GO(clnt_perror, vF!p) -//GO(clntraw_create, !FLL) +//GOM(clnt_perror, vFpp) +//GOM(clntraw_create, pFLL) GO(clnt_spcreateerror, pFp) GO(clnt_sperrno, pFu) -//GO(clnt_sperror, pF!p) -//GO(clnttcp_create, !F!LLpuu) -//GO(clntudp_bufcreate, !F!LL?puu) -//GO(clntudp_create, !F!LL?p) -//GO(clntunix_create, !F!LLpuu) +//GOM(clnt_sperror, pFpp) +//GOM(clnttcp_create, pFpLLpuu) +//GO(clntudp_bufcreate, "!F!LL?puu") +//GO(clntudp_create, "!F!LL?p") +//GOM(clntunix_create, pFpLLpuu) #endif GO(clock, lFv) GO(clock_adjtime, iFip) @@ -172,7 +169,7 @@ GOW(close, iFi) GOW(closedir, iFp) GO(closelog, vFv) //GO(__close_nocancel, -GO(close_range, iFuuu) +GO(close_range, iFuui) GO(__cmsg_nxthdr, pFpp) GO(confstr, LFipL) GO(__confstr_chk, LFipLL) @@ -182,7 +179,7 @@ GO(copy_file_range, lFipipLu) //GO(__copy_grp, GOW(copysign, dFdd) GOW(copysignf, fFff) -GOW(copysignl, DFDD) +GOWD(copysignl, DFDD, copysign) GOW(creat, iFpu) GOW(creat64, iFpu) //GO(create_module, @@ -193,21 +190,21 @@ GO(ctime_r, pFpp) //DATA(__ctype32_tolower, //DATA(__ctype32_toupper, #ifdef STATICBUILD -//DATA(__ctype_b, sizeof(void*)) +//DATA(__ctype_b, 8) #else -DATA(__ctype_b, sizeof(void*)) +DATA(__ctype_b, 8) #endif GO(__ctype_b_loc, pFv) GO(__ctype_get_mb_cur_max, LFv) //GO(__ctype_init, -DATAM(__ctype_tolower, sizeof(void*)) +DATAM(__ctype_tolower, 8) GO(__ctype_tolower_loc, pFv) -DATAM(__ctype_toupper, sizeof(void*)) +DATAM(__ctype_toupper, 8) GO(__ctype_toupper_loc, pFv) //DATAB(__curbrk, GO(cuserid, pFp) GOM(__cxa_atexit, iFEppp) -//GO(__cxa_at_quick_exit, /* at_quick_exit has signature iF@ -> */ iF@pp) +//GO(__cxa_at_quick_exit, "/* at_quick_exit has signature iF@ -> */ iF@pp") GOM(__cxa_finalize, vFEp) GOM(__cxa_thread_atexit_impl, iFEppp) //GO(__cyg_profile_func_enter, @@ -219,20 +216,29 @@ GO(__dcgettext, pFppi) GOW(dcgettext, pFppi) GOW(dcngettext, pFpppLi) //GO(__default_morecore, -//GO(delete_module, // Deprecated -//GO(des_setparity, // Deprecated +#ifdef STATICBUILD +//GO(delete_module, +//GO(des_setparity, +#else +//GO(delete_module, +GO(des_setparity, vFp) +#endif GO(__dgettext, pFpp) GOW(dgettext, pFpp) GO(difftime, dFll) GO(dirfd, iFp) GO(dirname, pFp) -GO(div, LFii) +GO(div, UFii) //GO(_dl_addr, //GO(_dl_catch_error, //GO(_dl_catch_exception, GOWM(dl_iterate_phdr, iFEpp) //GO(_dl_mcount_wrapper, -//GO(_dl_mcount_wrapper_check, +#ifdef STATICBUILD +//GO(_dl_mcount_wrapper_check, vFp) +#else +GO(_dl_mcount_wrapper_check, vFp) +#endif //DATAB(_dl_open_hook, //DATAB(_dl_open_hook2, //GO(_dl_signal_error, @@ -252,7 +258,11 @@ GO(__duplocale, pFp) GOW(duplocale, pFp) GO(dysize, iFi) GOW(eaccess, iFpi) +#ifdef STATICBUILD //GO(ecb_crypt, +#else +GO(ecb_crypt, iFppuu) +#endif GO(ecvt, pFdipp) GOW(ecvt_r, iFdipppL) GO(endaliasent, vFv) @@ -260,21 +270,25 @@ GO(endfsent, vFv) GO(endgrent, vFv) GO(endhostent, vFv) GO(__endmntent, iFp) -GOW(endmntent, iFp) +GOW(endmntent, iFS) GO(endnetent, vFv) GO(endnetgrent, vFv) GO(endprotoent, vFv) GO(endpwent, vFv) GO(endrpcent, vFv) GO(endservent, vFv) +#ifdef STATICBUILD //GO(endsgent, +#else +GO(endsgent, vFv) +#endif GO(endspent, vFv) GOW(endttyent, iFv) GO(endusershell, vFv) GOW(endutent, vFv) GO(endutxent, vFv) -DATAM(environ, sizeof(void*)) -DATAM(__environ, sizeof(void*)) +DATAM(environ, 8) +DATAM(__environ, 8) GO(envz_add, iFpppp) GO(envz_entry, pFpLp) GO(envz_get, pFpLp) @@ -288,7 +302,7 @@ GO(epoll_ctl, iFiiip) GO(epoll_pwait, iFipiip) GO(epoll_wait, iFipii) #else -GOM(epoll_ctl, iFEiiip) // struct epoll_event is 12byte on x86_64 and 16bytes (8bytes aligned) on arm64 +GOM(epoll_ctl, iFEiiip) GOM(epoll_pwait, iFEipiip) GOM(epoll_wait, iFEipii) #endif @@ -297,40 +311,50 @@ GOW(erand48_r, iFppp) GOM(err, vFEipV) //DATAB(errno, GO(__errno_location, pFv) -GOW(error, vFiipV) -//GOW(error_at_line, vFiipupV) -//DATAB(error_message_count, -//DATAB(error_one_per_line, -//DATAB(error_print_progname, +GOWM(error, vFiipV) +GOWM(error_at_line, vFiipupV) +//DATAB(error_message_count, 4) +//DATAB(error_one_per_line, 4) +//DATAM(error_print_progname, 8) GOM(errx, vFEipV) -//GO(ether_aton, !Fp) -//GO(ether_aton_r, !Fp!) -//GO(ether_hostton, iFp!) -//GO(ether_line, iFp!p) -//GO(ether_ntoa, pF!) -//GO(ether_ntoa_r, pF!p) -//GO(ether_ntohost, iFp!) +#ifdef STATICBUILD +//GO(ether_aton, pFp) +//GO(ether_aton_r, pFpp) +//GO(ether_hostton, iFpp) +//GO(ether_line, iFppp) +//GO(ether_ntoa, pFp) +//GO(ether_ntoa_r, pFpp) +//GO(ether_ntohost, iFpp) +#else +GO(ether_aton, pFp) +GO(ether_aton_r, pFpp) +GO(ether_hostton, iFpp) +GO(ether_line, iFppp) +GO(ether_ntoa, pFp) +GO(ether_ntoa_r, pFpp) +GO(ether_ntohost, iFpp) +#endif GOW(euidaccess, iFpi) GO(eventfd, iFui) GO(eventfd_read, iFip) -GO(eventfd_write, iFiL) +GO(eventfd_write, iFiU) GOM(execl, iFEpV) // First argument is also part of the variadic GOM(execle, iFEpV) // First argument is also part of the variadic GOM(execlp, iFEpV) // First argument is also part of the variadic GOM(execv, iFEpp) GOM(execve, iFEppp) GOM(execvp, iFEpp) -GOW(execvpe, iFppp) -GO(_exit, vFi) // immediate exit +GOWM(execvpe, iFEppp) +GO(_exit, vFi) GOM(exit, vFEi) GOW(_Exit, vFi) GO(explicit_bzero, vFpL) GO(__explicit_bzero_chk, vFpLL) GO(faccessat, iFipii) GOW(fallocate, iFiill) -GO(fallocate64, iFiill) +GO(fallocate64, iFiiII) GO(fanotify_init, iFuu) -GO(fanotify_mark, iFiuLip) +GO(fanotify_mark, iFiuUip) //GO(fattach, GO(__fbufsize, LFp) GOW(fchdir, iFi) @@ -339,7 +363,7 @@ GOW(fchmod, iFiu) GO(fchmodat, iFipui) GOW(fchown, iFiuu) GO(fchownat, iFipuui) -GO(fclose, iFp) +GO(fclose, iFS) GOW(fcloseall, iFv) GOWM(__fcntl, iFEiiN) GOWM(fcntl, iFEiiN) @@ -350,41 +374,46 @@ GO(fdatasync, iFi) GO(__fdelt_chk, LFL) //GO(__fdelt_warn, //GO(fdetach, -GO(fdopen, pFip) +GO(fdopen, SFip) GOW(fdopendir, pFi) //GO(__fentry__, -GOW(feof, iFp) -GOW(feof_unlocked, iFp) -GOW(ferror, iFp) -GOW(ferror_unlocked, iFp) +GOW(feof, iFS) +GOW(feof_unlocked, iFS) +GOW(ferror, iFS) +GOW(ferror_unlocked, iFS) GO(fexecve, iFipp) GOW(fflush, iFS) GO(fflush_unlocked, iFS) //GO(__ffs, GO(ffs, iFi) -GO(ffsl, iFI) +GO(ffsl, iFl) GO(ffsll, iFI) -GOW(fgetc, iFp) -GOW(fgetc_unlocked, iFp) -GO(fgetgrent, pFp) -GOW(fgetgrent_r, iFpppLp) -GO(fgetpos, iFpp) -GO(fgetpos64, iFpp) -GO(fgetpwent, pFp) -GOW(fgetpwent_r, iFpppLp) -GOW(fgets, pFpip) +GOW(fgetc, iFS) +GOW(fgetc_unlocked, iFS) +GO(fgetgrent, pFS) +GOW(fgetgrent_r, iFSppLp) +GO(fgetpos, iFSp) +GO(fgetpos64, iFSp) +GO(fgetpwent, pFS) +GOW(fgetpwent_r, iFSppLp) +GOW(fgets, pFpiS) GO(__fgets_chk, pFpLip) +#ifdef STATICBUILD //GO(fgetsgent, //GOW(fgetsgent_r, -GO(fgetspent, pFp) -GOW(fgetspent_r, iFpppLp) -GOW(fgets_unlocked, pFpip) +#else +GO(fgetsgent, pFS) +GOW(fgetsgent_r, iFSppLp) +#endif +GO(fgetspent, pFS) +GOW(fgetspent_r, iFSppLp) +GOW(fgets_unlocked, pFpiS) //GO(__fgets_unlocked_chk, -GOW(fgetwc, uFp) -GOW(fgetwc_unlocked, uFp) -GO(fgetws, pFpip) +GOW(fgetwc, uFS) +GOW(fgetwc_unlocked, uFS) +GO(fgetws, pFpiS) //GO(__fgetws_chk, -GO(fgetws_unlocked, pFpip) +GO(fgetws_unlocked, pFpiS) //GO(__fgetws_unlocked_chk, GO(fgetxattr, lFippL) GOW(fileno, iFS) @@ -393,41 +422,41 @@ GO(__finite, iFd) GOW(finite, iFd) GO(__finitef, iFf) GOW(finitef, iFf) -GO(__finitel, iFD) -GOW(finitel, iFD) +GOD(__finitel, iFD, __finite) +GOWD(finitel, iFD, finite) GO(__flbf, iFp) GO(flistxattr, lFipL) GOW(flock, iFii) -GOW(flockfile, vFp) +GOW(flockfile, vFS) GOW(_flushlbf, vFv) -GO(fmemopen, pFpLp) +GO(fmemopen, SFpLp) GO(fmtmsg, iFlpippp) GO(fnmatch, iFppi) -GOM(fopen, pFEpp) -GOWM(fopen64, pFEpp) +GOM(fopen, SFEpp) +GOWM(fopen64, SFEpp) GOM(fopencookie, pFEppV) //GO(__fork, GOWM(fork, iFEv) //GO(__fortify_fail, GO(fpathconf, lFii) GO(__fpending, LFp) -GOM(fprintf, iFEppV) +GOM(fprintf, iFESpV) GOM(__fprintf_chk, iFEpipV) //DATA(__fpu_control, GO(__fpurge, vFp) -GO(fputc, iFip) -GO(fputc_unlocked, iFip) -GOW(fputs, iFpp) -GOW(fputs_unlocked, iFpp) -GO(fputwc, uFip) -GO(fputwc_unlocked, uFip) -GO(fputws, iFpp) -GO(fputws_unlocked, iFpp) -GO(fread, LFpLLp) +GO(fputc, iFiS) +GO(fputc_unlocked, iFiS) +GOW(fputs, iFpS) +GOW(fputs_unlocked, iFpS) +GO(fputwc, uFiS) +GO(fputwc_unlocked, uFiS) +GO(fputws, iFpS) +GO(fputws_unlocked, iFpS) +GO(fread, LFpLLS) GO(__freadable, iFp) GO(__fread_chk, LFpLLLp) GO(__freading, iFp) -GO(fread_unlocked, LFpLLp) +GO(fread_unlocked, LFpLLS) GO(__fread_unlocked_chk, LFpLLLp) GO(free, vFp) GO(freeaddrinfo, vFp) @@ -435,19 +464,19 @@ GOW(freeifaddrs, vFp) GO(__freelocale, vFp) GOW(freelocale, vFp) GO(fremovexattr, iFip) -GO(freopen, pFppp) -GO(freopen64, pFppp) +GO(freopen, SFppS) +GO(freopen64, SFppS) GOW(frexp, dFdp) GOW(frexpf, fFfp) -GOW(frexpl, DFDp) -GOM(fscanf, iFEppV) -GO(fseek, iFpli) -GO(fseeko, iFpIi) +GOWD(frexpl, DFDp, frexp) +GOM(fscanf, iFESpV) +GO(fseek, iFSli) +GO(fseeko, iFSli) GO(__fseeko64, iFpli) -GO(fseeko64, iFpli) +GO(fseeko64, iFSIi) GO(__fsetlocking, iFpi) -GO(fsetpos, iFpp) -GO(fsetpos64, iFpp) +GO(fsetpos, iFSp) +GO(fsetpos64, iFSp) GO(fsetxattr, iFippLi) GOM(fstat, iFEip) GOM(fstat64, iFEip) @@ -458,15 +487,15 @@ GOW(fstatfs64, iFip) GOW(fstatvfs, iFip) GOW(fstatvfs64, iFip) GO(fsync, iFi) -GO(ftell, lFp) -GO(ftello, IFp) +GO(ftell, lFS) +GO(ftello, lFS) GO(__ftello64, lFp) -GO(ftello64, lFp) +GO(ftello64, IFS) GO(ftime, iFp) GO(ftok, iFpi) -GO(ftruncate, iFiI) -GO(ftruncate64, iFil) -GOW(ftrylockfile, iFp) +GO(ftruncate, iFil) +GO(ftruncate64, iFiI) +GOW(ftrylockfile, iFS) GOW(fts64_children, pFpi) GOW(fts64_close, iFp) GOWM(fts64_open, pFEpip) @@ -479,18 +508,18 @@ GO(fts_read, pFp) GO(fts_set, iFppi) GOM(ftw, iFEppi) GOM(ftw64, iFEppi) -GOW(funlockfile, vFp) +GOW(funlockfile, vFS) GO(futimens, iFip) GOW(futimes, iFip) GO(futimesat, iFipp) -GO(fwide, iFpi) -GOWM(fwprintf, iFEppV) +GO(fwide, iFSi) +GOWM(fwprintf, iFESpV) GOM(__fwprintf_chk, iFEpipV) GO(__fwritable, iFp) -GO(fwrite, LFpLLp) -GO(fwrite_unlocked, LFpLLp) +GO(fwrite, LFpLLS) +GO(fwrite_unlocked, LFpLLS) GO(__fwriting, iFp) -//GO(fwscanf, iFppV) +//GOM(fwscanf, iFSpV) GOM(__fxstat, iFEiip) GOM(__fxstat64, iFEiip) GOM(__fxstatat, iFEiippi) @@ -506,7 +535,7 @@ GO(gai_suspend, iFpip) //GO(__gconv_transliterate, GO(gcvt, pFdip) GO(getaddrinfo, iFpppp) -GO(getaddrinfo_a, iFipip) +//GOM(getaddrinfo_a, iFipip) GO(getaliasbyname, pFp) GO(getaliasbyname_r, iFpppLp) GO(getaliasent, pFv) @@ -514,22 +543,22 @@ GO(getaliasent_r, iFppLp) //GO(__getauxval, GOWM(getauxval, LFEL) GOW(get_avphys_pages, lFv) -GOW(getc, iFp) +GOW(getc, iFS) GO(getchar, iFv) GO(getchar_unlocked, iFv) GOWM(getcontext, iFEp) GOW(getcpu, iFpp) -GOW(getc_unlocked, iFp) +GOW(getc_unlocked, iFS) GO(get_current_dir_name, pFv) GO(getcwd, pFpL) GO(__getcwd_chk, pFpLL) GO(getdate, pFp) -//DATAB(getdate_err, +//DATAB(getdate_err, 4) GOW(getdate_r, iFpp) -GOW(__getdelim, lFppip) -GO(getdelim, lFppip) +GOW(__getdelim, lFppiS) +GO(getdelim, lFppiS) GO(getdents64, lFipL) -GO(getdirentries, IFipUp) +GO(getdirentries, lFipLp) GO(getdirentries64, lFipLp) GO(getdomainname, iFpL) //GO(__getdomainname_chk, @@ -561,28 +590,41 @@ GO(gethostent, pFv) GO(gethostent_r, iFppLpp) GO(gethostid, lFv) GOW(gethostname, iFpL) -//GO(__gethostname_chk, +#ifdef STATICBUILD +//GO(__gethostname_chk, iFpLL) // it's sometimes not defined, like in LA64 plateform, so lets no wrap it for now +#else +GO(__gethostname_chk, iFpLL) +#endif GOW(getifaddrs, iFp) -//GO(getipv4sourcefilter, iFi??pp!) +GO(getipv4sourcefilter, iFiuuppp) GOW(getitimer, iFup) -//GO(get_kernel_syms, // Deprecated -GO(getline, lFppp) +#ifdef STATICBUILD +//GO(get_kernel_syms, +#else +//GO(get_kernel_syms, +#endif +GO(getline, lFppS) GO(getloadavg, iFpi) GO(getlogin, pFv) GOW(getlogin_r, iFpL) //GO(__getlogin_r_chk, -GO(getmntent, pFp) +GO(getmntent, pFS) GO(__getmntent_r, pFpppi) -GOW(getmntent_r, pFpppi) -//GO(getmsg, // Deprecated -//GO(get_myaddress, vF!) +GOW(getmntent_r, pFSppi) +#ifdef STATICBUILD +//GO(getmsg, +//GO(get_myaddress, iFp) +#else +//GO(getmsg, +GO(get_myaddress, iFp) +#endif GO(getnameinfo, iFpupupui) -//GO(getnetbyaddr, !Fui) -//GO(getnetbyaddr_r, iFui!pL!p) -//GO(getnetbyname, !Fp) -//GO(getnetbyname_r, iFp!pL!p) -//GO(getnetent, !Fv) -//GO(getnetent_r, iF!pL!p) +GO(getnetbyaddr, pFui) +GO(getnetbyaddr_r, iFuippLpp) +GO(getnetbyname, pFp) +GO(getnetbyname_r, iFpppLpp) +GO(getnetent, pFv) +GO(getnetent_r, iFppLpp) GO(getnetgrent, iFppp) GOW(getnetgrent_r, iFppppL) #ifdef STATICBUILD @@ -605,7 +647,7 @@ GO(getpgrp, iFv) GOW(get_phys_pages, lFv) GO(__getpid, iFv) GO(getpid, iFv) -//GO(getpmsg, // Deprecated +//GO(getpmsg, GOW(getppid, iFv) GOW(getpriority, iFuu) GO(getprotobyname, pFp) @@ -642,10 +684,10 @@ GO(getrpcent_r, iFppLp) #ifdef STATICBUILD //GO(getrpcport, #else -GO(getrpcport, iFpLLu) +GO(getrpcport, iFpiii) #endif GOW(getrusage, iFip) -//GOW(gets, // Deprecated +//GOW(gets, //GO(__gets_chk, #ifdef STATICBUILD //GO(getsecretkey, @@ -657,15 +699,22 @@ GO(getservbyname_r, iFppppLp) GO(getservbyport, pFip) GO(getservbyport_r, iFipppLp) GO(getservent, pFv) -//GO(getservent_r, iF!pL!) +GO(getservent_r, iFppLp) +#ifdef STATICBUILD //GO(getsgent, //GO(getsgent_r, //GO(getsgnam, //GO(getsgnam_r, +#else +GO(getsgent, pFv) +GO(getsgent_r, iFppLp) +GO(getsgnam, pFp) +GO(getsgnam_r, iFpppLp) +#endif GO(getsid, iFi) GOW(getsockname, iFipp) GOW(getsockopt, iFiiipp) -//GO(getsourcefilter, iFiupupp!) +GO(getsourcefilter, iFiupuppp) GO(getspent, pFv) GO(getspent_r, iFppLp) GO(getspnam, pFp) @@ -690,11 +739,11 @@ GO(getutmpx, vFpp) GO(getutxent, pFv) GO(getutxid, pFp) GO(getutxline, pFp) -GO(getw, iFp) -GOW(getwc, uFp) +GO(getw, iFS) +GOW(getwc, uFS) GO(getwchar, uFv) GO(getwchar_unlocked, uFv) -GOW(getwc_unlocked, uFp) +GOW(getwc_unlocked, uFS) GO(getwd, pFp) //GO(__getwd_chk, GO(getxattr, lFpppL) @@ -706,20 +755,20 @@ GOW(glob_pattern_p, iFpi) GO(gmtime, pFp) GO(__gmtime_r, pFpp) GOW(gmtime_r, pFpp) -GOW(gnu_dev_major, uFL) -GOW(gnu_dev_makedev, LFuu) -GOW(gnu_dev_minor, uFL) +GOW(gnu_dev_major, uFU) +GOW(gnu_dev_makedev, UFuu) +GOW(gnu_dev_minor, uFU) GOW(gnu_get_libc_release, pFv) GOW(gnu_get_libc_version, pFv) GO(grantpt, iFi) GOW(group_member, iFu) GOW(gsignal, iFi) -//GO(gtty, // Deprecated +//GO(gtty, GOW(hasmntopt, pFpp) -GO(hcreate, iFU) -//GOW(hcreate_r, iFL!) +GO(hcreate, iFL) +GOW(hcreate_r, iFLp) GOW(hdestroy, vFv) -//GOW(hdestroy_r, vF!) +GOW(hdestroy_r, vFp) //DATA(h_errlist, //DATAB(__h_errno, GO(__h_errno_location, pFv) @@ -729,8 +778,8 @@ GO(herror, vFp) #else GO(host2netname, iFppp) #endif -//GO(hsearch, pF?u) -//GOW(hsearch_r, iF?up!) +//GO(hsearch, "pF?u") +//GOW(hsearch_r, "iF?up!") GO(hstrerror, pFi) GO(htonl, uFu) GO(htons, WFW) @@ -743,10 +792,10 @@ GOW(if_freenameindex, vFp) GOW(if_indextoname, pFup) GOW(if_nameindex, pFv) GOW(if_nametoindex, uFp) -GOW(imaxabs, lFl) -GOW(imaxdiv, IFII) -DATA(in6addr_any, 16) // type V -DATA(in6addr_loopback, 16) //type V +GOW(imaxabs, IFI) +GOW(imaxdiv, HFII) +DATAV(in6addr_any, 16) +DATAV(in6addr_loopback, 16) GO(index, pFpi) GO(inet6_opt_append, iFpuiCuCp) GO(inet6_opt_find, iFpuiCpp) @@ -761,8 +810,8 @@ GO(inet6_option_next, iFpp) GO(inet6_option_space, iFi) GO(inet6_opt_next, iFpuippp) GO(inet6_opt_set_val, iFpipu) -//GO(inet6_rth_add, iFp!) -//GO(inet6_rth_getaddr, !Fpi) +GO(inet6_rth_add, iFpp) +GO(inet6_rth_getaddr, pFpi) GO(inet6_rth_init, pFpuii) GO(inet6_rth_reverse, iFpp) GO(inet6_rth_segments, iFp) @@ -771,18 +820,18 @@ GO(inet6_rth_space, uFii) GOW(inet_addr, uFp) GOW(inet_aton, iFpp) //GO(__inet_aton_exact, -//GO(inet_lnaof, uF?) -//GOW(inet_makeaddr, ?Fuu) -//GO(inet_netof, uF?) +GO(inet_lnaof, uFu) +GOW(inet_makeaddr, UFuu) +GO(inet_netof, uFu) GO(inet_network, uFp) GO(inet_nsap_addr, uFppi) GO(inet_nsap_ntoa, pFipp) -GO(inet_ntoa, pFu) // Really? +GO(inet_ntoa, pFu) GO(inet_ntop, pFippu) GOW(inet_pton, iFipp) //GO(__inet_pton_length, GO(initgroups, iFpu) -//GO(init_module, // Deprecated +//GO(init_module, GO(initstate, pFupL) GO(initstate_r, iFupLp) GO(innetgr, iFpppp) @@ -824,7 +873,7 @@ GO(_IO_file_doallocate, iFS) //GO(_IO_file_finish, GO(_IO_file_fopen, pFSppi) GO(_IO_file_init, vFS) -DATA(_IO_file_jumps, sizeof(void*)) +DATA(_IO_file_jumps, 8) GO(_IO_file_open, pFSpiiii) GO(_IO_file_overflow, iFSi) GO(_IO_file_read, lFSpl) @@ -864,7 +913,7 @@ GO(_IO_init_marker, vFpS) //GO(_IO_iter_next, //GO(_IO_least_wmarker, GO(_IO_link_in, vFp) -DATA(_IO_list_all, sizeof(void*)) +DATA(_IO_list_all, 8) //GO(_IO_list_lock, //GO(_IO_list_resetlock, //GO(_IO_list_unlock, @@ -936,51 +985,51 @@ GO(iruserok, iFuipp) GO(iruserok_af, iFpippW) GO(isalnum, iFi) //GO(__isalnum_l, -//GOW(isalnum_l, iFi!) +GOW(isalnum_l, iFip) GO(isalpha, iFi) //GO(__isalpha_l, GOW(isalpha_l, iFip) GO(isascii, iFi) //GOW(__isascii_l, -//GO(isastream, // Deprecated +//GO(isastream, GOW(isatty, iFi) GO(isblank, iFi) //GO(__isblank_l, -//GOW(isblank_l, iFi!) +GOW(isblank_l, iFip) GO(iscntrl, iFi) //GO(__iscntrl_l, -//GOW(iscntrl_l, iFi!) +GOW(iscntrl_l, iFip) //GO(__isctype, GOW(isctype, iFii) GO(isdigit, iFi) //GO(__isdigit_l, -//GOW(isdigit_l, iFi!) +GOW(isdigit_l, iFip) GO(isfdtype, iFii) GO(isgraph, iFi) //GO(__isgraph_l, -//GOW(isgraph_l, iFi!) +GOW(isgraph_l, iFip) GO(__isinf, iFd) GOW(isinf, iFd) GO(__isinff, iFf) GOW(isinff, iFf) -GO(__isinfl, iFD) -GOW(isinfl, iFD) +GOD(__isinfl, iFD, __isinf) +GOWD(isinfl, iFD, isinf) GO(islower, iFi) //GO(__islower_l, -//GOW(islower_l, iFi!) +GOW(islower_l, iFip) GO(__isnan, iFd) GOW(isnan, iFd) GO(__isnanf, iFf) GOW(isnanf, iFf) -GO(__isnanl, iFD) -GOW(isnanl, iFD) -GO2(__isoc23_fscanf, iFEppV, my___isoc99_fscanf) +GOD(__isnanl, iFD, __isnan) +GOWD(isnanl, iFD, isnan) +GO2(__isoc23_fscanf, iFESpV, my___isoc99_fscanf) GO2(__isoc23_sscanf, iFEppV, my___isoc99_sscanf) GO2(__isoc23_strtol, lFppi, strtol) GO2(__isoc23_strtoll, IFppi, strtoll) GO2(__isoc23_strtoul, LFppi, strtoul) GO2(__isoc23_strtoull, UFppi, strtoull) -GO2(__isoc23_wcstol, LFppi, wcstol) +GO2(__isoc23_wcstol, lFppi, wcstol) GOM(__isoc99_fscanf, iFEppV) //GO(__isoc99_fwscanf, iFppV) GOM(__isoc99_scanf, iFEpV) @@ -995,16 +1044,16 @@ GOM(__isoc99_vswscanf, iFEppA) //GO(__isoc99_wscanf, iFpV) GO(isprint, iFi) //GO(__isprint_l, -//GOW(isprint_l, iFi!) +GOW(isprint_l, iFip) GO(ispunct, iFi) //GO(__ispunct_l, -//GOW(ispunct_l, iFi!) +GOW(ispunct_l, iFip) GO(isspace, iFi) //GO(__isspace_l, -//GOW(isspace_l, iFi!) +GOW(isspace_l, iFip) GO(isupper, iFi) //GO(__isupper_l, -//GOW(isupper_l, iFi!) +GOW(isupper_l, iFip) GOW(iswalnum, iFu) //GO(__iswalnum_l, GOW(iswalnum_l, iFup) @@ -1051,15 +1100,29 @@ GOW(isxdigit_l, iFip) //GO(__ivaliduser, GO(jrand48, lFp) GOW(jrand48_r, iFppp) -//GO(key_decryptsession, iFp!) -//GO(key_decryptsession_pk, iFp!!) +#ifdef STATICBUILD +//GO(key_decryptsession, iFpp) +//GO(key_decryptsession_pk, "iFp!!") +#else +GO(key_decryptsession, iFpp) +//GO(key_decryptsession_pk, "iFp!!") +#endif //DATAB(__key_decryptsession_pk_LOCAL, -//GO(key_encryptsession, iFp!) -//GO(key_encryptsession_pk, iFp!!) +#ifdef STATICBUILD +//GO(key_encryptsession, iFpp) +//GO(key_encryptsession_pk, "iFp!!") +#else +GO(key_encryptsession, iFpp) +//GO(key_encryptsession_pk, "iFp!!") +#endif //DATAB(__key_encryptsession_pk_LOCAL, -//GO(key_gendes, iF!) +#ifdef STATICBUILD +//GO(key_gendes, iFp) +#else +GO(key_gendes, iFp) +#endif //DATAB(__key_gendes_LOCAL, -//GO(key_get_conv, iFp!) +//GO(key_get_conv, "iFp!") #ifdef STATICBUILD //GO(key_secretkey_is_set, //GO(key_setnet, @@ -1081,7 +1144,7 @@ GO(lcong48, vFp) GOW(lcong48_r, iFpp) GOW(ldexp, dFdi) GOW(ldexpf, fFfi) -GOW(ldexpl, DFDi) +GOWD(ldexpl, DFDi, ldexp) GO(ldiv, HFll) GOM(lfind, pFEpppLp) GO(lgetxattr, lFpppL) @@ -1100,9 +1163,9 @@ GO(__libc_current_sigrtmax, iFv) //GO(__libc_current_sigrtmax_private, GO(__libc_current_sigrtmin, iFv) //GO(__libc_current_sigrtmin_private, -//GO(__libc_dlclose, -//GO(__libc_dlopen_mode, -//GO(__libc_dlsym, +GOM(__libc_dlclose, iFEp) +GOM(__libc_dlopen_mode, pFEpi) +GOM(__libc_dlsym, pFEpp) //GO(__libc_dlvsym, //GO(__libc_dynarray_at_failure, //GO(__libc_dynarray_emplace_enlarge, @@ -1149,16 +1212,16 @@ GO(listxattr, lFppL) GO(llabs, IFI) GO(lldiv, HFII) GO(llistxattr, lFppL) -//GO(llseek, // Deprecated +//GO(llseek, //DATAB(loc1, //DATAB(loc2, GO(localeconv, pFv) GO(localtime, pFp) GO2(localtime64, pFp, localtime) GOW(localtime_r, pFpp) -GO2(localtime64_r, pFpp, localtime_r) //Weak -GO(lockf, iFiiI) -GO(lockf64, iFiil) +GOW2(localtime64_r, pFpp, localtime_r) +GO(lockf, iFiil) +GO(lockf64, iFiiI) //DATAB(locs, GOWM(_longjmp, vFEpi) GOWM(longjmp, vFEpi) @@ -1168,8 +1231,8 @@ GO(lrand48_r, iFpp) GO(lremovexattr, iFpp) GOM(lsearch, pFEpppLp) GO(__lseek, IFiIi) -GO(lseek, IFiIi) -GO(lseek64, lFili) +GO(lseek, lFili) +GO(lseek64, IFiIi) GO(lsetxattr, iFpppLi) GOM(lstat, iFEpp) GOM(lstat64, iFEpp) @@ -1178,21 +1241,21 @@ GOM(__lxstat, iFEipp) GOM(__lxstat64, iFEipp) GO(__madvise, iFpLi) GOW(madvise, iFpLi) -GOWM(makecontext, iFEppiV) +GOWM(makecontext, vFEppiV) GOWM(mallinfo, pFEp) GO(malloc, pFL) -//GO(malloc_get_state, // Obsolete -GOW(malloc_info, iFip) -//GO(malloc_set_state, // Obsolete +//GO(malloc_get_state, +GOW(malloc_info, iFiS) +//GO(malloc_set_state, GOW(malloc_stats, vFv) GO(malloc_trim, iFL) GO(malloc_usable_size, LFp) GOW(mallopt, iFii) //DATAB(mallwatch, -GO(mblen, iFpU) +GO(mblen, iFpL) GO(__mbrlen, LFpLp) GO(mbrlen, LFpLp) -//GO(mbrtoc16, LFppL!) +GO(mbrtoc16, LFppLp) GOW(mbrtoc32, LFppLp) GO(__mbrtowc, LFppLp) GO(mbrtowc, LFppLp) @@ -1204,9 +1267,9 @@ GO(__mbsrtowcs_chk, LFppLpL) GO(mbstowcs, LFppL) GO(__mbstowcs_chk, LFppLL) GO(mbtowc, iFppL) -//GO(mcheck, iF@) +//GOM(mcheck, iFp) GO(mcheck_check_all, vFv) -//GO(mcheck_pedantic, iF@) +//GOM(mcheck_pedantic, iFp) //GO(_mcleanup, GO(_mcount, vFpp) GO2(mcount, vFpp, _mcount) @@ -1220,7 +1283,7 @@ GO(__memcpy_chk, pFppLL) GO(memfd_create, iFpu) GO(memfrob, pFpL) GO(memmem, pFpLpL) -GO(memmove, pFppU) +GO(memmove, pFppL) GO(__memmove_chk, pFppLL) GO(__mempcpy, pFppL) GO(mempcpy, pFppL) @@ -1236,8 +1299,8 @@ GO(mkdirat, iFipu) GO(mkdtemp, pFp) GO(mkfifo, iFpu) GO(mkfifoat, iFipu) -GO(mknod, iFpuL) -GO(mknodat, iFipuL) +GO(mknod, iFpuU) +GO(mknodat, iFipuU) GO(mkostemp, iFpi) GOW(mkostemp64, iFpi) GO(mkostemps, iFpii) @@ -1254,22 +1317,22 @@ GO(mlock2, iFpLu) GO(mlockall, iFi) //GO(__mmap, GOWM(mmap, pFEpLiiil) -GOWM(mmap64, pFEpLiiil) +GOWM(mmap64, pFEpLiiiI) GOW(modf, dFdp) GOW(modff, fFfp) -GOW(modfl, DFDp) -//GOW(modify_ldt, // Deprecated +GOWD(modfl, DFDp, modf) +//GOW(modify_ldt, //GOW(moncontrol, //GO(__monstartup, //GOW(monstartup, -//DATA(__morecore, // Compat-only +//DATA(__morecore, GOW(mount, iFpppLp) GO(mprobe, iFp) //GO(__mprotect, GOWM(mprotect, iFEpLi) -GO(mrand48, IFv) +GO(mrand48, lFv) GO(mrand48_r, iFpp) -GOM(mremap, pFEpLLiN) //weal +GOWM(mremap, pFEpLLiN) GO(msgctl, iFiip) GO(msgget, iFii) GOW(msgrcv, lFipLli) @@ -1295,14 +1358,14 @@ GO(netname2user, iFppppp) #endif GO(__newlocale, pFipp) GOW(newlocale, pFipp) -//GO(nfsservctl, // Deprecated -//GO(nftw, iFp@ii) +//GO(nfsservctl, +//GOM(nftw, iFppii) GOM(nftw64, iFEppii) GOW(ngettext, pFppL) GO(nice, iFi) //DATAB(_nl_domain_bindings, GO(nl_langinfo, pFi) -GO(__nl_langinfo_l, pFup) +GO(__nl_langinfo_l, pFip) GOW(nl_langinfo_l, pFip) //DATAB(_nl_msg_cat_cntr, GO(nrand48, lFp) @@ -1330,29 +1393,29 @@ GOW(nrand48_r, iFppp) GOW(ntohl, uFu) GOW(ntohs, WFW) GOW(ntp_adjtime, iFp) -//GO(ntp_gettime, iF!) -//GO(ntp_gettimex, iF!) -//DATAB(_null_auth, +//GO(ntp_gettime, "iF!") +GO(ntp_gettimex, iFp) +//DATAB(_null_auth, 24) //DATAB(_obstack, //GO(_obstack_allocated_p, -//DATA(obstack_alloc_failed_handler, -GOM(_obstack_begin, iFpLLpp) -//GO(_obstack_begin_1, -//DATA(obstack_exit_failure, +//DATAM(obstack_alloc_failed_handler, 8) +GOM(_obstack_begin, iFpiipp) +//GOM(_obstack_begin_1, iFpiippp) +//DATA(obstack_exit_failure, 4) GOM(_obstack_free, vFpp) GOM(obstack_free, vFpp) -//GO(_obstack_memory_used, +//GOM(_obstack_memory_used, iFp) GOM(_obstack_newchunk, vFEpi) -//GOW(obstack_printf, iFppV) +//GOWM(obstack_printf, iFppV) //GO(__obstack_printf_chk, GOWM(obstack_vprintf, iFEppA) //GO(__obstack_vprintf_chk, -//GOW(on_exit, iF@p) -GOWM(__open, iFEpOu) -GOWM(open, iFEpOu) +//GOWM(on_exit, iFpp) +GOWM(__open, iFEpON) +GOWM(open, iFEpON) GO(__open_2, iFpO) //GOW(__open64, -GOWM(open64, iFEpOu) +GOWM(open64, iFEpON) GO(__open64_2, iFpO) //GO(__open64_nocancel, GOW(openat, iFipON) @@ -1363,49 +1426,56 @@ GO(open_by_handle_at, iFipi) //GO(__open_catalog, GOW(opendir, pFp) GO(openlog, vFpii) -GOW(open_memstream, pFpp) +GOW(open_memstream, SFpp) //GO(__open_nocancel, -GO(open_wmemstream, pFpp) -DATA(optarg, sizeof(void*)) -DATA(opterr, sizeof(int)) -DATA(optind, sizeof(int)) -DATA(optopt, sizeof(int)) -GO(__overflow, iFpi) +GO(open_wmemstream, SFpp) +DATA(optarg, 8) +DATA(opterr, 4) +DATA(optind, 4) +DATA(optopt, 4) +GO(__overflow, iFSi) GO(parse_printf_format, LFpLp) -//GO(passwd2des, // Deprecated +#ifdef STATICBUILD +//GO(passwd2des, +#else +GO(passwd2des, vFpp) +#endif GO(pathconf, lFpi) GOW(pause, iFv) //GO(__pause_nocancel, -GO(pclose, iFp) +GO(pclose, iFS) GO(perror, vFp) GOW(personality, iFL) GO(__pipe, iFp) GOW(pipe, iFp) GO(pipe2, iFpO) -//GO(pivot_root, // Deprecated +//GO(pivot_root, GO(pkey_alloc, iFuu) GO(pkey_free, iFi) GO(pkey_get, iFi) GO(pkey_mprotect, iFpLii) GO(pkey_set, iFiu) -//GO(pmap_getmaps, pF!) -//GO(pmap_getport, WF!LLu) -//GO(pmap_rmtcall, uF!LLL@p@p?p) #ifdef STATICBUILD -//GO(pmap_set, iFLLiW) +//GO(pmap_getmaps, pFp) +//GO(pmap_getport, WFpLLu) +//GO(pmap_rmtcall, "uF!LLL@p@p?p") +//GO(pmap_set, iFLLii) //GO(pmap_unset, iFLL) #else -GO(pmap_set, iFLLiW) +GO(pmap_getmaps, pFp) +GO(pmap_getport, WFpLLu) +//GO(pmap_rmtcall, "uF!LLL@p@p?p") +GO(pmap_set, iFLLii) GO(pmap_unset, iFLL) #endif GO(__poll, iFpLi) GO(poll, iFpLi) GO(__poll_chk, iFpuiL) -GO(popen, pFpp) +GO(popen, SFpp) GO(posix_fadvise, iFilli) -GO(posix_fadvise64, iFilli) +GO(posix_fadvise64, iFiIIi) GO(posix_fallocate, iFill) -GO(posix_fallocate64, iFill) +GO(posix_fallocate64, iFiII) //GO(__posix_getopt, GO(posix_madvise, iFpLi) GO(posix_memalign, iFpLL) @@ -1436,28 +1506,28 @@ GOM(posix_spawnp, iFEpppppp) GO(ppoll, iFpLpp) GO(__ppoll_chk, iFpuppL) GOWM(prctl, iFEiLLLL) -GO(pread, IFipUI) +GO(pread, lFipLl) GOW(__pread64, lFipLI) -GO(pread64, lFipLl) +GO(pread64, lFipLI) //GO(__pread64_chk, GO(__pread_chk, lFipLlL) GO(preadv, lFipil) GO(preadv2, lFipili) -GO(preadv64, lFipil) -GO(preadv64v2, lFipili) +GO(preadv64, lFipiI) +GO(preadv64v2, lFipiIi) GOM(printf, iFEpV) GOM(__printf_chk, iFEipV) //GO(__printf_fp, -//GO(printf_size, -//GO(printf_size_info, +GO(printf_size, iFSpp) +GO(printf_size_info, iFpLp) GO(prlimit, iFiupp) GOW(prlimit64, iFiupp) GO(process_vm_readv, lFipLpLL) GO(process_vm_writev, lFipLpLL) GO(profil, iFpLLu) //GO(__profile_frequency, -DATA(__progname, sizeof(void*)) -DATA(__progname_full, sizeof(void)) +DATA(__progname, 8) +DATA(__progname_full, 1) GOW(pselect, iFippppp) GO(psiginfo, vFpp) GO(psignal, vFip) @@ -1473,41 +1543,46 @@ GOM(ptrace, lFEuipp) GO(ptsname, pFi) GOW(ptsname_r, iFipL) //GO(__ptsname_r_chk, -GOW(putc, iFip) +GOW(putc, iFiS) GO(putchar, iFi) GO(putchar_unlocked, iFi) -GOW(putc_unlocked, iFip) +GOW(putc_unlocked, iFiS) GO(putenv, iFp) -GO(putgrent, iFpp) -//GO(putmsg, // Deprecated -//GO(putpmsg, // Deprecated -GO(putpwent, iFpp) +GO(putgrent, iFpS) +//GO(putmsg, +//GO(putpmsg, +GO(putpwent, iFpS) GOW(puts, iFp) +#ifdef STATICBUILD //GO(putsgent, -GO(putspent, iFpp) +#else +GO(putsgent, iFpS) +#endif +GO(putspent, iFpS) GOW(pututline, pFp) GO(pututxline, pFp) -GO(putw, iFip) -GO(putwc, uFup) -GO(putwchar, uFu) -GO(putwchar_unlocked, uFu) -GO(putwc_unlocked, uFup) +GO(putw, iFiS) +GO(putwc, uFiS) +GO(putwchar, uFi) +GO(putwchar_unlocked, uFi) +GO(putwc_unlocked, uFiS) GO(pvalloc, pFL) -GO(pwrite, IFipUI) +GO(pwrite, lFipLl) //GOW(__pwrite64, -GO(pwrite64, lFipLl) +GO(pwrite64, lFipLI) GO(pwritev, lFipil) GO(pwritev2, lFipili) -GO(pwritev64, lFipil) -GO(pwritev64v2, lFipili) -GO(qecvt, pFDipp) -GOW(qecvt_r, iFDipppL) -GO(qfcvt, pFDipp) -GO(qfcvt_r, iFDipppL) -GO(qgcvt, pFDip) +GO(pwritev64, lFipiI) +GO(pwritev64v2, lFipiIi) +GOD(qecvt, pFDipp, ecvt) +GOWD(qecvt_r, iFDipppL, ecvt_r) +GOWM(qemu_host_direct_call, vFp) +GOD(qfcvt, pFDipp, fcvt) +GOD(qfcvt_r, iFDipppL, fcvt_r) +GOD(qgcvt, pFDip, gcvt) GOM(qsort, vFEpLLp) GOWM(qsort_r, vFEpLLpp) -//GO(query_module, // Deprecated +//GO(query_module, GO(quick_exit, vFi) GO(quotactl, iFipip) GO(raise, iFi) @@ -1522,16 +1597,16 @@ GO(rcmd_af, iFpWppppW) //DATAB(__rcmd_errstr, GOW(__read, lFipL) GO(read, lFipL) -GO(readahead, lFilL) +GO(readahead, lFiIL) GO(__read_chk, lFipLL) -GOW(readdir, pFp) // struct dirent is 280 bytes on x86_64 and ARM64 +GOW(readdir, pFp) GOW(readdir64, pFp) GOW(readdir64_r, iFppp) GOW(readdir_r, iFppp) GOWM(readlink, lFEppL) -GOM(readlinkat, iFEippL) +GOM(readlinkat, lFEippL) //GO(__readlinkat_chk, -//GO(__readlink_chk, +GOM(__readlink_chk, lFEppLL) //GO(__read_nocancel, GOW(readv, lFipi) GO(realloc, pFpL) @@ -1539,7 +1614,7 @@ GO(reallocarray, pFpLL) GOM(realpath, pFEpp) GO2(__realpath_chk, pFEppv, my_realpath) GO(reboot, iFi) -//GOW(re_comp, // Deprecated +//GOW(re_comp, GOW(re_compile_fastmap, iFp) GOW(re_compile_pattern, pFpLp) GOW(__recv, lFipLi) @@ -1549,20 +1624,20 @@ GOW(recvfrom, lFipLipp) //GO(__recvfrom_chk, GO(recvmmsg, iFipuip) GO(recvmsg, lFipi) -//GOW(re_exec, // Deprecated +//GOW(re_exec, GOW(regcomp, iFppi) GOW(regerror, LFippL) GO(regexec, iFppLpi) GOW(regfree, vFp) GOM(__register_atfork, iFEpppp) -//GOW(register_printf_function, +//GOWM(register_printf_function, iFipp) GOW(register_printf_modifier, iFp) GOWM(register_printf_specifier, iFEipp) GOWM(register_printf_type, iFEp) -//GO(registerrpc, // Deprecated? +//GOM(registerrpc, iFiiippp) GO(remap_file_pages, iFpLiLi) -GOW(re_match, lFppllp) -//GOW(re_match_2, iFppipii!i) +GOW(re_match, iFppiip) +GOW(re_match_2, iFppipiipi) //DATA(re_max_failures, GO(remove, iFp) GO(removexattr, iFpp) @@ -1571,9 +1646,9 @@ GO(rename, iFpp) GOW(renameat, iFipip) GOW(renameat2, iFipipu) //DATAB(_res, -GOW(re_search, lFpplllp) -//GOW(re_search_2, iFppipiii!i) -//GOW(re_set_registers, vFp!upp) +GOW(re_search, iFppiiip) +GOW(re_search_2, iFppipiiipi) +GOW(re_set_registers, vFppupp) GOW(re_set_syntax, LFL) //DATAB(_res_hconf, GO(__res_iclose, vFpi) @@ -1586,11 +1661,15 @@ GO(res_nsearch, iFppiipi) //GO(__resolv_context_get_preinit, //GO(__resolv_context_put, //DATA(__resp, +#ifdef STATICBUILD //GO(__res_randomid, +#else +GO(__res_randomid, uFv) +#endif GO(__res_state, pFv) -//DATAB(re_syntax_options, +//DATAB(re_syntax_options, 8) GOW(revoke, iFp) -GO(rewind, vFp) +GO(rewind, vFS) GOW(rewinddir, vFp) GO(rexec, iFpipppp) GO(rexec_af, iFpippppW) @@ -1600,22 +1679,26 @@ GOW(rmdir, iFp) #ifdef STATICBUILD //DATAB(rpc_createerr, //GO(_rpc_dtablesize, iFv) -//GO(__rpc_thread_createerr, !Fv) -//GO(__rpc_thread_svc_fdset, !Fv) +//GO(__rpc_thread_createerr, "!Fv") +//GO(__rpc_thread_svc_fdset, "!Fv") //GO(__rpc_thread_svc_max_pollfd, pFv) //GO(__rpc_thread_svc_pollfd, pFv) #else //DATAB(rpc_createerr, GO(_rpc_dtablesize, iFv) -//GO(__rpc_thread_createerr, !Fv) -//GO(__rpc_thread_svc_fdset, !Fv) +//GO(__rpc_thread_createerr, "!Fv") +//GO(__rpc_thread_svc_fdset, "!Fv") GO(__rpc_thread_svc_max_pollfd, pFv) GO(__rpc_thread_svc_pollfd, pFv) #endif GO(rpmatch, iFp) GO(rresvport, iFp) GO(rresvport_af, iFpW) -//GO(rtime, iF!!!) +#ifdef STATICBUILD +//GO(rtime, +#else +GO(rtime, iFppp) +#endif GO(ruserok, iFpipp) GO(ruserok_af, iFpippW) //GO(ruserpass, @@ -1623,12 +1706,12 @@ GO(__sbrk, pFl) GO(sbrk, pFl) GOW(scalbn, dFdi) GOW(scalbnf, fFfi) -GOW(scalbnl, DFDi) +GOWD(scalbnl, DFDi, scalbn) GOWM(scandir, iFEpppp) GOWM(scandir64, iFEpppp) GOWM(scandirat, iFipppp) -//GO(scandirat64, iFipp@@) -//GO(scanf, iFpV) +//GOM(scandirat64, iFipppp) +GOM(scanf, iFpV) GO(__sched_cpualloc, pFL) GO(__sched_cpucount, iFLp) GO(__sched_cpufree, vFp) @@ -1669,13 +1752,13 @@ GOW(sendmmsg, iFipui) GO(sendmsg, lFipi) GOW(sendto, lFipLipu) GO(setaliasent, vFv) -GO(setbuf, vFpp) -GO(setbuffer, vFppL) +GO(setbuf, vFSp) +GO(setbuffer, vFSpL) GOWM(setcontext, iFEp) GO(setdomainname, iFpL) GO(setegid, iFu) GOW(setenv, iFppi) -//GO(_seterr_reply, vF!!) +//GOM(_seterr_reply, vFpp) GO(seteuid, iFu) GO(setfsent, iFv) GO(setfsgid, iFu) @@ -1686,16 +1769,16 @@ GO(setgroups, iFLp) GO(sethostent, vFi) GO(sethostid, iFl) GO(sethostname, iFpL) -//GO(setipv4sourcefilter, iFi??uu!) +GO(setipv4sourcefilter, iFiuuuup) GOW(setitimer, iFupp) GOM(_setjmp, iFEp) GOM(setjmp, iFEp) -GO(setlinebuf, vFp) +GO(setlinebuf, vFS) GO(setlocale, pFip) GO(setlogin, iFp) GO(setlogmask, iFi) GO(__setmntent, pFpp) -GOW(setmntent, pFpp) +GOW(setmntent, SFpp) GO(setnetent, vFi) GO(setnetgrent, iFp) GO(setns, iFii) @@ -1713,10 +1796,14 @@ GOWM(setrlimit, iFEup) GOW(setrlimit64, iFup) GO(setrpcent, vFi) GO(setservent, vFi) +#ifdef STATICBUILD //GO(setsgent, +#else +GO(setsgent, vFv) +#endif GOW(setsid, iFv) GOW(setsockopt, iFiiipu) -//GO(setsourcefilter, iFiupuuu!) +GO(setsourcefilter, iFiupuuup) GO(setspent, vFv) GOW(setstate, pFp) GOW(setstate_r, iFpp) @@ -1726,10 +1813,15 @@ GOW(setuid, iFu) GO(setusershell, vFv) GOW(setutent, vFv) GO(setutxent, vFv) -GO(setvbuf, iFppiL) +GO(setvbuf, iFSpiL) GO(setxattr, iFpppLi) -//GO(sgetsgent, -//GOW(sgetsgent_r, +#ifdef STATICBUILD +//GO(sgetsgent, pFp) +//GOW(sgetsgent_r, iFpppLp) +#else +GO(sgetsgent, pFp) +GOW(sgetsgent_r, iFpppLp) +#endif GO(sgetspent, pFp) GOW(sgetspent_r, iFpppLp) GO(shmat, pFipi) @@ -1742,7 +1834,7 @@ GOWM(sigaction, iFEipp) GO(__sigaddset, iFpi) GO(sigaddset, iFpi) GOWM(sigaltstack, iFEpp) -//GO(sigandset, +GO(sigandset, iFppp) GOW(sigblock, iFi) //GO(__sigdelset, GO(sigdelset, iFpi) @@ -1760,15 +1852,20 @@ GOWM(signal, pFEip) GO(signalfd, iFipi) GO(__signbit, iFd) GO(__signbitf, iFf) -GO(__signbitl, iFD) +GOD(__signbitl, iFD, __signbit) GO(sigorset, iFppp) +#ifdef STATICBUILD //GO(__sigpause, -//GOW(sigpause, // Deprecated +//GOW(sigpause, +#else +GO(__sigpause, iFii) +//GOW(sigpause, +#endif GO(sigpending, iFp) GOW(sigprocmask, iFipp) -//GOW(sigqueue, iFii?) +//GOW(sigqueue, "iFii?") GO(sigrelse, iFi) -//GOW(sigreturn, iF!) +GOW(sigreturn, iFp) GOM(sigset, pFEip) GOM(__sigsetjmp, iFEpi) GOM(sigsetjmp, iFEpi) @@ -1778,7 +1875,7 @@ GO(__sigsuspend, iFp) GOW(sigsuspend, iFp) GO(__sigtimedwait, iFppp) GOW(sigtimedwait, iFppp) -//GO(sigvec, // Deprecated +//GO(sigvec, GOW(sigwait, iFpp) GOW(sigwaitinfo, iFpp) GOW(sleep, uFu) @@ -1792,14 +1889,18 @@ GOW(socketpair, iFiiip) GO(splice, lFipipLu) GOM(sprintf, iFEppV) GOM(__sprintf_chk, iFEpilpV) +#ifdef STATICBUILD //GOW(sprofil, +#else +GOW(sprofil, iFpipu) +#endif GOW(srand, vFu) GO(srand48, vFl) GO(srand48_r, iFlp) GOW(srandom, vFu) GOW(srandom_r, iFup) GOM(sscanf, iFEppV) -//GOW(ssignal, @Fi@) +//GOWM(ssignal, pFip) //GO(sstk, GOM(__stack_chk_fail, vFEv) GOM(stat, iFEpp) @@ -1809,10 +1910,10 @@ GOW(statfs, iFpp) GOW(statfs64, iFpp) GOW(statvfs, iFpp) GOW(statvfs64, iFpp) -GO(statx, iFipiup) -DATA(stderr, sizeof(void*)) -DATA(stdin, sizeof(void*)) -DATA(stdout, sizeof(void*)) +GOM(statx, iFEipiup) +DATA(stderr, 8) +DATA(stdin, 8) +DATA(stdout, 8) //GOW(step, GOM(stime, iFEp) GO(__stpcpy, pFpp) @@ -1849,17 +1950,22 @@ GO(strerror, pFi) GO(strerror_l, pFip) GO(__strerror_r, pFipL) GO(strerror_r, pFipL) +#ifdef STATICBUILD //GO(strfmon, lFpLpV) //GO(__strfmon_l, +#else +GO(strfmon, lFpLpdddddd) // should be V, but only double are allowed... +//GO(__strfmon_l, +#endif GOW(strfmon_l, lFpLppdddddd) // should be V, but only double are allowed... GO(strfromd, iFpLpd) GO(strfromf, iFpLpf) -GO(strfromf128, iFpLpD) +GOD(strfromf128, iFpLpD, strfromf64) GO(strfromf32, iFpLpf) GO(strfromf32x, iFpLpd) GO(strfromf64, iFpLpd) -GO(strfromf64x, iFpLpD) -GO(strfroml, iFpLpD) +GOD(strfromf64x, iFpLpD, strfromf32x) +GOD(strfroml, iFpLpD, strfromd) GO(strfry, pFp) GO(strftime, LFpLpp) GO(__strftime_l, LFpLppL) @@ -1880,7 +1986,7 @@ GO(strpbrk, pFpp) //GO(__strpbrk_c2, //GO(__strpbrk_c3, GO(strptime, pFppp) -//GOW(strptime_l, pFppp!) +GOW(strptime_l, pFpppp) GO(strrchr, pFpi) GOW(strsep, pFpp) //GO(__strsep_1c, @@ -1899,33 +2005,39 @@ GO(__strtod_l, dFppp) GOW(strtod_l, dFppp) //GO(__strtod_nan, GO(strtof, fFpp) -GO(strtof128, DFpp) +GOD(strtof128, DFpp, strtof64) //GO(__strtof128_internal, //GOW(strtof128_l, //GO(__strtof128_nan, GOW(strtof32, fFpp) -//GOW(strtof32_l, fFpp!) +GOW(strtof32_l, fFppp) GOW(strtof32x, dFpp) -//GOW(strtof32x_l, dFpp!) +GOW(strtof32x_l, dFppp) GOW(strtof64, dFpp) -//GOW(strtof64_l, dFpp!) -GOW(strtof64x, DFpp) -//GOW(strtof64x_l, DFpp!) +GOW(strtof64_l, dFppp) +GOWD(strtof64x, DFpp, strtof32x) +GOWD(strtof64x_l, DFppp, strtof32x_l) GO(__strtof_internal, fFppi) GO(__strtof_l, fFppL) GOW(strtof_l, fFppp) //GO(__strtof_nan, -GO(strtoimax, lFppi) -GO2(__isoc23_strtoimax, lFppi, strtoimax) +GO(strtoimax, IFppi) +GO2(__isoc23_strtoimax, IFppi, strtoimax) +GO2(__isoc23_strtoll_l, IFppip, strtoll_l) +GO2(__isoc23_strtoull_l, UFppip, strtoull_l) +GO2(__isoc23_vsscanf, iFEppA, my_vsscanf) +GO2(__isoc23_wcstoll, IFppi, wcstoll) +GO2(__isoc23_wcstoul, LFppi, wcstoul) +GO2(__isoc23_wcstoull, UFppi, wcstoull) GO(strtok, pFpp) GO(__strtok_r, pFppp) GOW(strtok_r, pFppp) //GO(__strtok_r_1c, GO(strtol, lFppi) -GO(strtold, DFpp) -GO(__strtold_internal, DFppi) -GO(__strtold_l, DFppp) -GOW(strtold_l, DFppp) +GOD(strtold, DFpp, strtod) +GOD(__strtold_internal, DFppi, __strtod_internal) +GOD(__strtold_l, DFppp, __strtod_l) +GOWD(strtold_l, DFppp, strtod_l) //GO(__strtold_nan, GO(__strtol_internal, lFppii) GO(__strtol_l, lFppi) @@ -1943,102 +2055,104 @@ GOW(strtoull, UFppi) GO(__strtoull_internal, UFppii) GOW(__strtoull_l, LFppip) GOW(strtoull_l, UFppip) -GO(strtoumax, LFppi) -GO2(__isoc23_strtoumax, LFppi, strtoumax) +GO(strtoumax, UFppi) +GO2(__isoc23_strtoumax, UFppi, strtoumax) GOW(strtouq, UFppi) //GO(__strverscmp, GOW(strverscmp, iFpp) GO(strxfrm, LFppL) GO(__strxfrm_l, LFppLL) GO(strxfrm_l, LFppLp) -//GO(stty, // Deprecated +//GO(stty, #ifdef STATICBUILD //DATAB(svcauthdes_stats, -//GO(svcerr_auth, vF!u) -//GO(svcerr_decode, vF!) -//GO(svcerr_noproc, vF!) -//GO(svcerr_noprog, vF!) -//GO(svcerr_progvers, vF!LL) -//GO(svcerr_systemerr, vF!) -//GO(svcerr_weakauth, vF!) +//GO(svcerr_auth, "vF!u") +//GO(svcerr_decode, "vF!") +//GO(svcerr_noproc, "vF!") +//GO(svcerr_noprog, "vF!") +//GO(svcerr_progvers, "vF!uu") +//GO(svcerr_systemerr, "vF!") +//GO(svcerr_weakauth, "vF!") //GO(svc_exit, vFv) -//GO(svcfd_create, !Fiuu) +//GO(svcfd_create, "!Fiuu") //DATAB(svc_fdset, //GO(svc_getreq, vFi) //GO(svc_getreq_common, vFi) //GO(svc_getreq_poll, vFpi) -//GO(svc_getreqset, vF!) +//GO(svc_getreqset, "vF!") //DATAB(svc_max_pollfd, //DATAB(svc_pollfd, -//GO(svcraw_create, !Fv) -//GO(svc_register, iF!LL@L) +//GO(svcraw_create, "!Fv") +//GO(svc_register, "iF!LL@i") //GO(svc_run, vFv) -//GO(svc_sendreply, iF!@p) -//GO(svctcp_create, !Fiuu) -//GO(svcudp_bufcreate, !Fiuu) -//GO(svcudp_create, !Fi) +//GO(svc_sendreply, "iF!@p") +//GO(svctcp_create, "!Fiuu") +//GO(svcudp_bufcreate, "!Fiuu") +//GO(svcudp_create, "!Fi") //GO(svcudp_enablecache, -//GO(svcunix_create, !Fiuup) +//GO(svcunix_create, "!Fiuup") //GO(svcunixfd_create, //GO(svc_unregister, vFLL) #else //DATAB(svcauthdes_stats, -//GO(svcerr_auth, vF!u) -//GO(svcerr_decode, vF!) -//GO(svcerr_noproc, vF!) -//GO(svcerr_noprog, vF!) -//GO(svcerr_progvers, vF!LL) -//GO(svcerr_systemerr, vF!) -//GO(svcerr_weakauth, vF!) +//GOM(svcerr_auth, vFpu) +//GOM(svcerr_decode, vFp) +//GOM(svcerr_noproc, vFp) +//GOM(svcerr_noprog, vFp) +//GOM(svcerr_progvers, vFpuu) +//GOM(svcerr_systemerr, vFp) +//GOM(svcerr_weakauth, vFp) GO(svc_exit, vFv) -//GO(svcfd_create, !Fiuu) -//DATAB(svc_fdset, +//GOM(svcfd_create, pFiuu) +//DATAB(svc_fdset, 128) GO(svc_getreq, vFi) GO(svc_getreq_common, vFi) GO(svc_getreq_poll, vFpi) -//GO(svc_getreqset, vF!) -//DATAB(svc_max_pollfd, -//DATAB(svc_pollfd, -//GO(svcraw_create, !Fv) -//GO(svc_register, iF!LL@L) +GO(svc_getreqset, vFp) +//DATAB(svc_max_pollfd, 4) +//DATAB(svc_pollfd, 8) +//GOM(svcraw_create, pFv) +//GOM(svc_register, iFpLLpi) GO(svc_run, vFv) -//GO(svc_sendreply, iF!@p) -//GO(svctcp_create, !Fiuu) -//GO(svcudp_bufcreate, !Fiuu) -//GO(svcudp_create, !Fi) -//GO(svcudp_enablecache, -//GO(svcunix_create, !Fiuup) -//GO(svcunixfd_create, +//GOM(svc_sendreply, iFppp) +//GOM(svctcp_create, pFiuu) +//GOM(svcudp_bufcreate, pFiuu) +//GOM(svcudp_create, pFi) +//GOM(svcudp_enablecache, iFpL) +//GOM(svcunix_create, pFiuup) +//GOM(svcunixfd_create, pFiuu) GO(svc_unregister, vFLL) #endif GO(swab, vFppl) GOWM(swapcontext, iFEpp) +#ifdef STATICBUILD //GOW(swapoff, //GOW(swapon, +#else +GOW(swapoff, iFp) +GOW(swapon, iFpi) +#endif GOM(swprintf, iFEpLpV) GOM(__swprintf_chk, iFEpLiLpV) GOM(swscanf, iFEppV) GOW(symlink, iFpp) GO(symlinkat, iFpip) GO(sync, vFv) -GO(sync_file_range, iFillu) +GO(sync_file_range, iFiIIu) GO(syncfs, iFi) GOM(syscall, lFEv) GOM(__sysconf, lFEi) -GOM(sysconf, IFEi) +GOM(sysconf, lFEi) #ifdef STATICBUILD //GO(__sysctl, -//GO(sysctl, +//GOW(sysctl, +//DATA(_sys_errlist, 8) +//DATA(sys_errlist, 8) #else GO(__sysctl, iFpipppL) -GOW(sysctl, iFpipppL) // Deprecated -#endif -#ifdef STATICBUILD -//DATA(_sys_errlist, sizeof(void*)) -//DATA(sys_errlist, sizeof(void*)) -#else -DATA(_sys_errlist, sizeof(void*)) -DATA(sys_errlist, sizeof(void*)) +GOW(sysctl, iFpipppL) +DATA(_sys_errlist, 8) +DATA(sys_errlist, 8) #endif GOW(sysinfo, iFp) GOM(syslog, vFEipV) @@ -2068,11 +2182,21 @@ GOW(textdomain, pFp) //GO(__tfind, GOWM(tfind, pFEppp) GOW(tgkill, iFiii) +#ifdef STATICBUILD //GO(thrd_current, -GO(thrd_exit, vFp) +#else +GO(thrd_current, LFv) +#endif +GO(thrd_exit, vFi) +#ifdef STATICBUILD //GO(thrd_equal, //GO(thrd_sleep, //GO(thrd_yield, +#else +GO(thrd_equal, iFLL) +GO(thrd_sleep, iFpp) +GO(thrd_yield, vFv) +#endif GO(time, lFp) GO(timegm, lFp) GOW(timelocal, lFp) @@ -2081,21 +2205,21 @@ GO(timerfd_gettime, iFip) GO(timerfd_settime, iFiipp) GOW(times, lFp) GO(timespec_get, iFpi) -DATAB(__timezone, sizeof(void*)) -DATAV(timezone, sizeof(void*)) -GO(tmpfile, pFv) -GOW(tmpfile64, pFv) +DATAB(__timezone, 8) +DATAV(timezone, 8) +GO(tmpfile, SFv) +GOW(tmpfile64, SFv) GO(tmpnam, pFp) GO(tmpnam_r, pFp) GO(toascii, iFi) //GOW(__toascii_l, GO(_tolower, iFi) GO(tolower, iFi) -//GO(__tolower_l, iFi!) +GO(__tolower_l, iFip) GOW(tolower_l, iFip) GO(_toupper, iFi) GO(toupper, iFi) -//GO(__toupper_l, iFi!) +GO(__toupper_l, iFip) GOW(toupper_l, iFip) //GO(__towctrans, GOW(towctrans, uFup) @@ -2108,8 +2232,8 @@ GOW(towupper, uFu) GO(__towupper_l, iFip) GOW(towupper_l, uFup) //GO(tr_break, -GO(truncate, iFpI) -GO(truncate64, iFpl) +GO(truncate, iFpl) +GO(truncate64, iFpI) //GO(__tsearch, GOWM(tsearch, pFEppp) GO(ttyname, pFi) @@ -2118,21 +2242,25 @@ GO(ttyname_r, iFipL) GO(ttyslot, iFv) //GO(__twalk, GOWM(twalk, vFEpp) -//GOW(twalk_r, vFp@p) -DATA(__tzname, sizeof(void*)) -DATA(tzname, sizeof(void*)) //type V +//GOWM(twalk_r, vFppp) +DATA(__tzname, 16) +DATAV(tzname, 16) GOW(tzset, vFv) GO(ualarm, uFuu) -GO(__uflow, iFp) +GO(__uflow, iFS) GOW(ulckpwdf, iFv) -//GOW(ulimit, lFiV) // Deprecated +#ifdef STATICBUILD +//GOW(ulimit, lFiV) +#else +GOW(ulimit, lFiN) +#endif GOW(umask, uFu) GOW(umount, iFp) GOW(umount2, iFpi) GOWM(uname, iFp) GO(__underflow, iFp) -GOW(ungetc, iFip) -GO(ungetwc, uFup) +GOW(ungetc, iFiS) +GO(ungetwc, uFuS) GOW(unlink, iFp) GO(unlinkat, iFipi) GO(unlockpt, iFi) @@ -2140,7 +2268,7 @@ GOW(unsetenv, iFp) GO(unshare, iFi) GOW(updwtmp, vFpp) GO(updwtmpx, vFpp) -//GO(uselib, // Deprecated +//GO(uselib, GO(__uselocale, pFp) GOW(uselocale, pFp) #ifdef STATICBUILD @@ -2149,7 +2277,7 @@ GOW(uselocale, pFp) GO(user2netname, iFpup) #endif GO(usleep, iFu) -//GO(ustat, // Deprecated +//GO(ustat, GO(utime, iFpp) GO(utimensat, iFippi) GOW(utimes, iFpp) @@ -2160,21 +2288,21 @@ GOWM(vasprintf, iFEppA) GOM(__vasprintf_chk, iFEpipp) GOM(vdprintf, iFEipA) GOM(__vdprintf_chk, iFEiipA) -//GO(verr, vFipA) -//GO(verrx, vFipA) +GOM(verr, vFEipA) +GOM(verrx, vFEipA) GOW(versionsort, iFpp) GOW(versionsort64, iFpp) //GO(__vfork, GOWM(vfork, iFEv) -GOM(vfprintf, iFEppA) +GOM(vfprintf, iFESpA) GOM(__vfprintf_chk, iFEpvpp) //GO(__vfscanf, -GOWM(vfscanf, iFEppA) -GOWM(vfwprintf, iFEppA) +GOWM(vfscanf, iFESpA) +GOWM(vfwprintf, iFESpA) GOM(__vfwprintf_chk, iFEpipA) -//GOW(vfwscanf, iFppA) +GOWM(vfwscanf, iFSpA) GO(vhangup, iFv) -//GO(vlimit, // Deprecated +//GO(vlimit, GO(vmsplice, lFipLu) GOM(vprintf, iFEpA) GOM(__vprintf_chk, iFEvpp) @@ -2191,12 +2319,12 @@ GOWM(__vswprintf_chk, iFEpuvvppp) GOM(vswscanf, iFEppA) GOM(vsyslog, vFEipA) GOM(__vsyslog_chk, vFEiipA) -//GO(vtimes, // Deprecated -//GO(vwarn, vFpA) -//GO(vwarnx, vFpA) +//GO(vtimes, +GOM(vwarn, vFpA) +GOM(vwarnx, vFpA) GOM(vwprintf, iFEpA) //GO(__vwprintf_chk, -//GO(vwscanf, iFpA) +GOM(vwscanf, iFpA) GOW(__wait, iFp) GOW(wait, iFp) GOW(wait3, iFpip) @@ -2210,15 +2338,15 @@ GOW(wcpcpy, pFpp) //GO(__wcpcpy_chk, GO(wcpncpy, pFppL) //GO(__wcpncpy_chk, -GO(wcrtomb, LFpup) +GO(wcrtomb, LFpip) GO(__wcrtomb_chk, LFpupL) GOW(wcscasecmp, iFpp) GO(__wcscasecmp_l, iFppp) GOW(wcscasecmp_l, iFppp) GOW(wcscat, pFpp) GO(__wcscat_chk, pFppL) -GO(wcschr, pFpu) -GO(wcschrnul, pFpu) +GO(wcschr, pFpi) +GO(wcschrnul, pFpi) GO(wcscmp, iFpp) GOW(wcscoll, iFpp) GO(__wcscoll_l, iFppp) @@ -2233,7 +2361,7 @@ GO(wcsftime_l, LFpLppp) GO(wcslen, LFp) GO(wcsncasecmp, iFppL) //GO(__wcsncasecmp_l, -//GOW(wcsncasecmp_l, iFppL!) +GOW(wcsncasecmp_l, iFppLp) GO(wcsncat, pFppL) GO(__wcsncat_chk, pFppLL) GO(wcsncmp, iFppL) @@ -2243,7 +2371,7 @@ GO(wcsnlen, LFpL) GO(wcsnrtombs, LFppLLp) //GO(__wcsnrtombs_chk, GO(wcspbrk, pFpp) -GO(wcsrchr, pFpu) +GO(wcsrchr, pFpi) GO(wcsrtombs, LFppLp) GO(__wcsrtombs_chk, LFppLpL) GO(wcsspn, LFpp) @@ -2253,36 +2381,40 @@ GO(wcstod, dFpp) //GO(__wcstod_l, GOW(wcstod_l, dFppp) GO(wcstof, fFpp) -GO(wcstof128, DFpp) +GOD(wcstof128, DFpp, wcstof64) //GO(__wcstof128_internal, //GOW(wcstof128_l, GOW(wcstof32, fFpp) -//GOW(wcstof32_l, fFpp!) +GOW(wcstof32_l, fFppp) GOW(wcstof32x, dFpp) -//GOW(wcstof32x_l, dFpp!) +GOW(wcstof32x_l, dFppp) GOW(wcstof64, dFpp) -//GOW(wcstof64_l, dFpp!) -GOW(wcstof64x, DFpp) -//GOW(wcstof64x_l, DFpp!) +GOW(wcstof64_l, dFppp) +GOWD(wcstof64x, DFpp, wcstof32x) +GOWD(wcstof64x_l, DFppp, wcstof32x_l) //GO(__wcstof_internal, //GO(__wcstof_l, -//GOW(wcstof_l, fFpp!) -GO(wcstoimax, lFppi) +GOW(wcstof_l, fFppp) +GO(wcstoimax, IFppi) GO(wcstok, pFppp) GO(wcstol, lFppi) -GO(wcstold, DFpp) +GOD(wcstold, DFpp, wcstod) //GO(__wcstold_internal, //GO(__wcstold_l, -//GOW(wcstold_l, DFpp!) +GOWD(wcstold_l, DFppp, wcstod_l) //GO(__wcstol_internal, //GO(__wcstol_l, GOW(wcstol_l, lFppip) GOW(wcstoll, IFppi) //GO(__wcstoll_internal, //GOW(__wcstoll_l, -//GOW(wcstoll_l, IFppi!) +GOW(wcstoll_l, IFppip) GO(wcstombs, LFppL) -//GO(__wcstombs_chk, +#ifdef STATICBUILD +//GO(__wcstombs_chk, LFppLL) // it's sometimes not defined, like in LA64 plateform, so lets no wrap it for now +#else +GO(__wcstombs_chk, LFppLL) +#endif GOW(wcstoq, IFppi) GO(wcstoul, LFppi) //GO(__wcstoul_internal, @@ -2291,8 +2423,8 @@ GOW(wcstoul_l, LFppip) GOW(wcstoull, UFppi) //GO(__wcstoull_internal, //GOW(__wcstoull_l, -//GOW(wcstoull_l, UFppi!) -GO(wcstoumax, LFppi) +GOW(wcstoull_l, UFppip) +GO(wcstoumax, UFppi) GOW(wcstouq, UFppi) GOW(wcswcs, pFpp) GO(wcswidth, iFpL) @@ -2300,7 +2432,7 @@ GO(wcsxfrm, LFppL) GO(__wcsxfrm_l, LFppLL) GO(wcsxfrm_l, LFppLp) GO(wctob, iFu) -GO(wctomb, iFpu) +GO(wctomb, iFpi) GO(__wctomb_chk, iFpuL) GOW(wctrans, pFp) //GO(__wctrans_l, @@ -2308,8 +2440,8 @@ GOW(wctrans_l, pFpp) GOW(wctype, LFp) GOW(wctype_l, LFpp) GO(__wctype_l, LFpp) -GO(wcwidth, iFu) -GO(wmemchr, pFpuL) +GO(wcwidth, iFi) +GO(wmemchr, pFpiL) GO(wmemcmp, iFppL) GOW(wmemcpy, pFppL) GO(__wmemcpy_chk, pFppLL) @@ -2317,7 +2449,7 @@ GO(wmemmove, pFppL) GO(__wmemmove_chk, pFppLL) GOW(wmempcpy, pFppL) //GO(__wmempcpy_chk, -GO(wmemset, pFpuL) +GO(wmemset, pFpiL) GO(__wmemset_chk, pFpuLL) GO(wordexp, iFppi) GO(wordfree, vFp) @@ -2328,83 +2460,150 @@ GOW(__write, lFipL) GO(write, lFipL) //GO(__write_nocancel, GOW(writev, lFipi) -//GO(wscanf, iFpV) +GOM(wscanf, iFEpV) //GO(__wuflow, //GO(__wunderflow, -//GO(xdecrypt, // Deprecated -//GO(xdr_accepted_reply, -//GO(xdr_array, iF!ppuu@) +//GO(xdecrypt, +#ifdef STATICBUILD +//GOM(xdr_accepted_reply, iFpp) +//GOM(xdr_array, iFpppuup) //GO(xdr_authdes_cred, //GO(xdr_authdes_verf, -//GO(xdr_authunix_parms, iF!!) -//GO(xdr_bool, iF!p) -//GO(xdr_bytes, iF!ppu) -//GO(xdr_callhdr, iF!!) -//GO(xdr_callmsg, iF!!) -//GO(xdr_char, iF!p) +//GOM(xdr_authunix_parms, iFpp) +//GOM(xdr_bool, iFpp) +//GOM(xdr_bytes, iFpppu) +//GOM(xdr_callhdr, iFpp) +//GOM(xdr_callmsg, iFpp) +//GOM(xdr_char, iFpp) //GO(xdr_cryptkeyarg, //GO(xdr_cryptkeyarg2, //GO(xdr_cryptkeyres, -//GO(xdr_des_block, iF!!) -//GO(xdr_double, iF!p) -//GO(xdr_enum, iF!p) -//GO(xdr_float, iF!p) -//GO(xdr_free, vF@p) +//GOM(xdr_des_block, iFpp) +//GOM(xdr_double, iFpp) +//GOM(xdr_enum, iFpp) +//GOM(xdr_float, iFpp) +//GOM(xdr_free, vFpp) //GO(xdr_getcredres, -//GO(xdr_hyper, iF!p) -//GO(xdr_int, iF!p) -//GO(xdr_int16_t, iF!p) -//GO(xdr_int32_t, iF!p) -//GO(xdr_int64_t, iF!p) -//GO(xdr_int8_t, iF!p) +//GOM(xdr_hyper, iFpp) +//GOM(xdr_int, iFpp) +//GOM(xdr_int16_t, iFpp) +//GOM(xdr_int32_t, iFpp) +//GOM(xdr_int64_t, iFpp) +//GOM(xdr_int8_t, iFpp) //GO(xdr_keybuf, //GO(xdr_key_netstarg, //GO(xdr_key_netstres, //GO(xdr_keystatus, -//GO(xdr_long, iF!p) -//GO(xdr_longlong_t, iF!p) -//GO(xdrmem_create, vF!puu) +//GOM(xdr_long, iFpp) +//GOM(xdr_longlong_t, iFpp) +//GOM(xdrmem_create, vFppuu) //GO(xdr_netnamestr, -//GO(xdr_netobj, iF!!) -//GO(xdr_opaque, iF!pu) -//GO(xdr_opaque_auth, iF!!) -//GO(xdr_pmap, -//GO(xdr_pmaplist, -//GO(xdr_pointer, iF!pu@) -//GO(xdr_quad_t, iF!p) -//GO(xdrrec_create, vF!uup@@) -//GO(xdrrec_endofrecord, iF!i) -//GO(xdrrec_eof, iF!) -//GO(xdrrec_skiprecord, iF!) -//GO(xdr_reference, iF!pu@) -//GO(xdr_rejected_reply, -//GO(xdr_replymsg, iF!!) +//GOM(xdr_netobj, iFpp) +//GOM(xdr_opaque, iFppu) +//GOM(xdr_opaque_auth, iFpp) +//GOM(xdr_pmap, iFpp) +//GOM(xdr_pmaplist, iFpp) +//GOM(xdr_pointer, iFppup) +//GOM(xdr_quad_t, iFpp) +//GOM(xdrrec_create, vFpuuppp) +//GOM(xdrrec_endofrecord, iFpi) +//GOM(xdrrec_eof, iFp) +//GOM(xdrrec_skiprecord, iFp) +//GOM(xdr_reference, iFppup) +//GOM(xdr_rejected_reply, iFpp) +//GOM(xdr_replymsg, iFpp) //GO(xdr_rmtcall_args, //GO(xdr_rmtcallres, -//GO(xdr_short, iF!p) -//GO(xdr_sizeof, LF@p) -//GO(xdrstdio_create, vF!pu) -//GO(xdr_string, iF!pu) -//GO(xdr_u_char, iF!p) -//GO(xdr_u_hyper, iF!p) -//GO(xdr_u_int, iF!p) -//GO(xdr_uint16_t, iF!p) -//GO(xdr_uint32_t, iF!p) -//GO(xdr_uint64_t, iF!p) -//GO(xdr_uint8_t, iF!p) -//GO(xdr_u_long, iF!p) -//GO(xdr_u_longlong_t, iF!p) -//GO(xdr_union, iF!pp!@) +//GOM(xdr_short, iFpp) +//GOM(xdr_sizeof, LFpp) +//GOM(xdrstdio_create, vFpSu) +//GOM(xdr_string, iFppu) +//GOM(xdr_u_char, iFpp) +//GOM(xdr_u_hyper, iFpp) +//GOM(xdr_u_int, iFpp) +//GOM(xdr_uint16_t, iFpp) +//GOM(xdr_uint32_t, iFpp) +//GOM(xdr_uint64_t, iFpp) +//GOM(xdr_uint8_t, iFpp) +//GOM(xdr_u_long, iFpp) +//GOM(xdr_u_longlong_t, iFpp) +//GOM(xdr_union, iFppppp) //GO(xdr_unixcred, -//GO(xdr_u_quad_t, iF!p) -//GO(xdr_u_short, iF!p) -//GO(xdr_vector, iF!puu@) -#ifdef STATICBUILD +//GOM(xdr_u_quad_t, iFpp) +//GOM(xdr_u_short, iFpp) +//GOM(xdr_vector, iFppuup) //GO(xdr_void, -//GO(xdr_wrapstring, iF!p) +//GO(xdr_wrapstring, "iF!p") #else +//GOM(xdr_accepted_reply, iFpp) +//GOM(xdr_array, iFpppuup) +//GO(xdr_authdes_cred, +//GO(xdr_authdes_verf, +//GOM(xdr_authunix_parms, iFpp) +//GOM(xdr_bool, iFpp) +//GOM(xdr_bytes, iFpppu) +//GOM(xdr_callhdr, iFpp) +//GOM(xdr_callmsg, iFpp) +//GOM(xdr_char, iFpp) +//GOM(xdr_cryptkeyarg, iFpp) +//GOM(xdr_cryptkeyarg2, iFpp) +//GOM(xdr_cryptkeyres, iFpp) +//GOM(xdr_des_block, iFpp) +//GOM(xdr_double, iFpp) +//GOM(xdr_enum, iFpp) +//GOM(xdr_float, iFpp) +//GOM(xdr_free, vFpp) +//GOM(xdr_getcredres, iFpp) +//GOM(xdr_hyper, iFpp) +//GOM(xdr_int, iFpp) +//GOM(xdr_int16_t, iFpp) +//GOM(xdr_int32_t, iFpp) +//GOM(xdr_int64_t, iFpp) +//GOM(xdr_int8_t, iFpp) +//GOM(xdr_keybuf, iFpp) +//GOM(xdr_key_netstarg, iFpp) +//GOM(xdr_key_netstres, iFpp) +//GOM(xdr_keystatus, iFpp) +//GOM(xdr_long, iFpp) +//GOM(xdr_longlong_t, iFpp) +//GOM(xdrmem_create, vFppuu) +//GOM(xdr_netnamestr, iFpp) +//GOM(xdr_netobj, iFpp) +//GOM(xdr_opaque, iFppu) +//GOM(xdr_opaque_auth, iFpp) +//GOM(xdr_pmap, iFpp) +//GOM(xdr_pmaplist, iFpp) +//GOM(xdr_pointer, iFppup) +//GOM(xdr_quad_t, iFpp) +//GOM(xdrrec_create, vFpuuppp) +//GOM(xdrrec_endofrecord, iFpi) +//GOM(xdrrec_eof, iFp) +//GOM(xdrrec_skiprecord, iFp) +//GOM(xdr_reference, iFppup) +//GOM(xdr_rejected_reply, iFpp) +//GOM(xdr_replymsg, iFpp) +//GO(xdr_rmtcall_args, +//GO(xdr_rmtcallres, +//GOM(xdr_short, iFpp) +//GOM(xdr_sizeof, LFpp) +//GOM(xdrstdio_create, vFpSu) +//GOM(xdr_string, iFppu) +//GOM(xdr_u_char, iFpp) +//GOM(xdr_u_hyper, iFpp) +//GOM(xdr_u_int, iFpp) +//GOM(xdr_uint16_t, iFpp) +//GOM(xdr_uint32_t, iFpp) +//GOM(xdr_uint64_t, iFpp) +//GOM(xdr_uint8_t, iFpp) +//GOM(xdr_u_long, iFpp) +//GOM(xdr_u_longlong_t, iFpp) +//GOM(xdr_union, iFppppp) +//GOM(xdr_unixcred, iFpp) +//GOM(xdr_u_quad_t, iFpp) +//GOM(xdr_u_short, iFpp) +//GOM(xdr_vector, iFppuup) GO(xdr_void, iFv) -//GO(xdr_wrapstring, iF!p) +//GOM(xdr_wrapstring, iFpp) #endif //GO(xencrypt, #ifdef STATICBUILD @@ -2417,8 +2616,8 @@ GOM(__xmknodat, iFEiipup) GO(__xpg_basename, pFp) GOW(__xpg_sigpause, iFi) GO(__xpg_strerror_r, pFipL) -//GO(xprt_register, vF!) -//GO(xprt_unregister, vF!) +//GOM(xprt_register, vFp) +//GOM(xprt_unregister, vFp) GOM(__xstat, iFEipp) GOM(__xstat64, iFEipp) @@ -2436,8 +2635,8 @@ GOM(strlcat, LFEppL) GOWM(__cxa_pure_virtual, vFEv) // create a function to trap pure virtual call -DATAM(program_invocation_name, sizeof(void*)) -DATAM(program_invocation_short_name, sizeof(void*)) +DATAM(program_invocation_name, 8) +DATAM(program_invocation_short_name, 8) DATAM(__libc_single_threaded, 1) @@ -2453,8 +2652,8 @@ GOM(__libc_init, vFEpppp) GO(__errno, pFv) #else // Those symbols don't exist in non-Android builds -//GOM(__libc_init, -//GO(__errno, +//GOM(__libc_init, +//GO(__errno, #endif #ifdef STATICBUILD GO(dummy_pFLp, pFLp) diff --git a/src/wrapped/wrappedlibcups.c b/src/wrapped/wrappedlibcups.c index 5e4f631ee5fd3945bbaa4c75e1d2da7d3ea633bc..7979e3e1dc6f70de9d219c29b0228414b02884a4 100644 --- a/src/wrapped/wrappedlibcups.c +++ b/src/wrapped/wrappedlibcups.c @@ -18,13 +18,8 @@ #include "emu/x64emu_private.h" #include "myalign.h" -const char* libcupsName = -#ifdef ANDROID - "libcups.so" -#else - "libcups.so.2" -#endif - ; +const char* libcupsName = "libcups.so.2"; +#define ALTNAME "libcups.so" #define LIBNAME libcups diff --git a/src/wrapped/wrappedlibcups_private.h b/src/wrapped/wrappedlibcups_private.h index 13f3b988275f6785484a04272ff6e4830be8aabd..0d38b9f24a43f2c65070ff224200ca732a12f1cf 100644 --- a/src/wrapped/wrappedlibcups_private.h +++ b/src/wrapped/wrappedlibcups_private.h @@ -1,111 +1,111 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif -//GO(cupsAddDest, -//GO(cupsAddIntegerOption, +GO(cupsAddDest, iFppip) +GO(cupsAddIntegerOption, iFpiip) GO(cupsAddOption, iFppip) -//GO(cupsAdminCreateWindowsPPD, -//GO(cupsAdminExportSamba, -//GO(cupsAdminGetServerSettings, -//GO(cupsAdminSetServerSettings, -//GO(cupsArrayAdd, +GO(cupsAdminCreateWindowsPPD, pFpppi) +GO(cupsAdminExportSamba, iFpppppS) +GO(cupsAdminGetServerSettings, iFppp) +GO(cupsAdminSetServerSettings, iFpip) +GO(cupsArrayAdd, iFpp) //GO(_cupsArrayAddStrings, -//GO(cupsArrayClear, -//GO(cupsArrayCount, -//GO(cupsArrayCurrent, -//GO(cupsArrayDelete, -//GO(cupsArrayDup, -//GO(cupsArrayFind, -//GO(cupsArrayFirst, -//GO(cupsArrayGetIndex, -//GO(cupsArrayGetInsert, -//GO(cupsArrayIndex, -//GO(cupsArrayInsert, -//GO(cupsArrayLast, -//GO(cupsArrayNew, -//GO(cupsArrayNew2, -//GO(cupsArrayNew3, +GO(cupsArrayClear, vFp) +GO(cupsArrayCount, iFp) +GO(cupsArrayCurrent, pFp) +GO(cupsArrayDelete, vFp) +GO(cupsArrayDup, pFp) +GO(cupsArrayFind, pFpp) +GO(cupsArrayFirst, pFp) +GO(cupsArrayGetIndex, iFp) +GO(cupsArrayGetInsert, iFp) +GO(cupsArrayIndex, pFpi) +GO(cupsArrayInsert, iFpp) +GO(cupsArrayLast, pFp) +//GOM(cupsArrayNew, pFEpp) +//GOM(cupsArrayNew2, pFEpppi) +//GOM(cupsArrayNew3, pFEpppipp) //GO(_cupsArrayNewStrings, -//GO(cupsArrayNext, -//GO(cupsArrayPrev, -//GO(cupsArrayRemove, -//GO(cupsArrayRestore, -//GO(cupsArraySave, -//GO(cupsArrayUserData, -//GO(cupsBackChannelRead, -//GO(cupsBackChannelWrite, -//GO(cupsBackendDeviceURI, -//GO(cupsBackendReport, +GO(cupsArrayNext, pFp) +GO(cupsArrayPrev, pFp) +GO(cupsArrayRemove, iFpp) +GO(cupsArrayRestore, pFp) +GO(cupsArraySave, iFp) +GO(cupsArrayUserData, pFp) +GO(cupsBackChannelRead, lFpLd) +GO(cupsBackChannelWrite, lFpLd) +GO(cupsBackendDeviceURI, pFp) +GO(cupsBackendReport, vFpppppp) //GO(_cupsBufferGet, //GO(_cupsBufferRelease, -//GO(cupsCancelDestJob, -//GO(cupsCancelJob, -//GO(cupsCancelJob2, +GO(cupsCancelDestJob, iFppi) +GO(cupsCancelJob, iFpi) +GO(cupsCancelJob2, iFppii) //GO(_cupsCharmapFlush, -//GO(cupsCharsetToUTF8, -//GO(cupsCheckDestSupported, -//GO(cupsCloseDestJob, +GO(cupsCharsetToUTF8, iFppii) +GO(cupsCheckDestSupported, iFppppp) +GO(cupsCloseDestJob, iFpppi) //GO(_cupsCondBroadcast, //GO(_cupsCondInit, //GO(_cupsCondWait, //GO(_cupsConnect, -//GO(cupsConnectDest, +//GOM(cupsConnectDest, pFEpuippLpp) //GO(_cupsConvertOptions, GO(cupsCopyDest, iFpip) -//GO(cupsCopyDestConflicts, -//GO(cupsCopyDestInfo, +GO(cupsCopyDestConflicts, iFpppippppppp) +GO(cupsCopyDestInfo, pFpp) //GO(_cupsCreateDest, -//GO(cupsCreateDestJob, +GO(cupsCreateDestJob, iFpppppip) GO(cupsCreateJob, iFpppip) //DATA(_cups_debug_fd, //DATA(_cups_debug_level, -//GO(cupsDirClose, -//GO(cupsDirOpen, -//GO(cupsDirRead, -//GO(cupsDirRewind, -//GO(cupsDoAuthentication, -//GO(cupsDoFileRequest, -//GO(cupsDoIORequest, -//GO(cupsDoRequest, -//GO(cupsEncodeOptions, -//GO(cupsEncodeOptions2, +GO(cupsDirClose, vFp) +GO(cupsDirOpen, pFp) +GO(cupsDirRead, pFp) +GO(cupsDirRewind, vFp) +GO(cupsDoAuthentication, iFppp) +GO(cupsDoFileRequest, pFpppp) +GO(cupsDoIORequest, pFpppii) +GO(cupsDoRequest, pFppp) +GO(cupsEncodeOptions, vFpip) +GO(cupsEncodeOptions2, vFpipi) //GO(_cupsEncodingName, -//GO(cupsEncryption, +GO(cupsEncryption, uFv) GOM(cupsEnumDests, iFEuipuupp) //GO(_cupsFileCheck, //GO(_cupsFileCheckFilter, -//GO(cupsFileClose, -//GO(cupsFileCompression, -//GO(cupsFileEOF, -//GO(cupsFileFind, -//GO(cupsFileFlush, -//GO(cupsFileGetChar, -//GO(cupsFileGetConf, -//GO(cupsFileGetLine, -//GO(cupsFileGets, -//GO(cupsFileLock, -//GO(cupsFileNumber, -//GO(cupsFileOpen, -//GO(cupsFileOpenFd, +GO(cupsFileClose, iFp) +GO(cupsFileCompression, iFp) +GO(cupsFileEOF, iFp) +GO(cupsFileFind, pFppipi) +GO(cupsFileFlush, iFp) +GO(cupsFileGetChar, iFp) +GO(cupsFileGetConf, pFppLpp) +GO(cupsFileGetLine, LFppL) +GO(cupsFileGets, pFppL) +GO(cupsFileLock, iFpi) +GO(cupsFileNumber, iFp) +GO(cupsFileOpen, pFpp) +GO(cupsFileOpenFd, pFip) //GO(_cupsFilePeekAhead, -//GO(cupsFilePeekChar, -//GO(cupsFilePrintf, -//GO(cupsFilePutChar, -//GO(cupsFilePutConf, -//GO(cupsFilePuts, -//GO(cupsFileRead, -//GO(cupsFileRewind, -//GO(cupsFileSeek, -//GO(cupsFileStderr, -//GO(cupsFileStdin, -//GO(cupsFileStdout, -//GO(cupsFileTell, -//GO(cupsFileUnlock, -//GO(cupsFileWrite, -//GO(cupsFindDestDefault, -//GO(cupsFindDestReady, -//GO(cupsFindDestSupported, +GO(cupsFilePeekChar, iFp) +//GOM(cupsFilePrintf, iFEppV) +GO(cupsFilePutChar, iFpi) +GO(cupsFilePutConf, lFppp) +GO(cupsFilePuts, iFpp) +GO(cupsFileRead, lFppL) +GO(cupsFileRewind, lFp) +GO(cupsFileSeek, lFpl) +GO(cupsFileStderr, pFv) +GO(cupsFileStdin, pFv) +GO(cupsFileStdout, pFv) +GO(cupsFileTell, lFp) +GO(cupsFileUnlock, iFp) +GO(cupsFileWrite, lFppL) +GO(cupsFindDestDefault, pFpppp) +GO(cupsFindDestReady, pFpppp) +GO(cupsFindDestSupported, pFpppp) GO(cupsFinishDestDocument, iFppp) GO(cupsFinishDocument, iFpp) GO(cupsFreeDestInfo, vFp) @@ -114,24 +114,24 @@ GO(cupsFreeJobs, vFip) GO(cupsFreeOptions, vFip) //GO(_cupsGet1284Values, GO(cupsGetClasses, iFp) -//GO(cupsGetConflicts, +GO(cupsGetConflicts, iFpppp) GO(cupsGetDefault, pFv) GO(cupsGetDefault2, pFp) GO(cupsGetDest, pFppip) -//GO(cupsGetDestMediaByIndex, +GO(cupsGetDestMediaByIndex, iFpppiup) GO(cupsGetDestMediaByName, iFppppup) GO(cupsGetDestMediaBySize, iFpppiiup) -//GO(cupsGetDestMediaCount, -//GO(cupsGetDestMediaDefault, +GO(cupsGetDestMediaCount, iFpppu) +GO(cupsGetDestMediaDefault, iFpppup) //GO(_cupsGetDestResource, //GO(_cupsGetDests, GO(cupsGetDests, iFp) GO(cupsGetDests2, iFpp) -//GO(cupsGetDestWithURI, -//GO(cupsGetDevices, -//GO(cupsGetFd, -//GO(cupsGetFile, -//GO(cupsGetIntegerOption, +GO(cupsGetDestWithURI, pFpp) +//GOM(cupsGetDevices, iFEpipppp) +GO(cupsGetFd, iFppi) +GO(cupsGetFile, iFppp) +GO(cupsGetIntegerOption, iFpip) GO(cupsGetJobs, iFppii) GO(cupsGetJobs2, iFpppii) GO(cupsGetNamedDest, pFppp) @@ -143,14 +143,14 @@ GO(cupsGetPPD, pFp) GO(cupsGetPPD2, pFpp) GO(cupsGetPPD3, iFppppL) GO(cupsGetPrinters, iFp) -//GO(cupsGetResponse, +GO(cupsGetResponse, pFpp) GO(cupsGetServerPPD, pFpp) //GO(_cupsGlobalLock, //GO(_cupsGlobals, //GO(_cupsGlobalUnlock, //GO(_cupsGSSServiceName, -//GO(cupsHashData, -//GO(cupsHashString, +GO(cupsHashData, lFppLpL) +GO(cupsHashString, pFpLpL) GO(cupsLangDefault, pFv) GO(cupsLangEncoding, pFp) GO(cupsLangFlush, vFv) @@ -163,10 +163,10 @@ GO(cupsLangGet, pFp) //GO(_cupsLangString, GO(cupsLastError, iFv) GO(cupsLastErrorString, pFv) -//GO(cupsLocalizeDestMedia, +GO(cupsLocalizeDestMedia, pFpppup) GO(cupsLocalizeDestOption, pFpppp) GO(cupsLocalizeDestValue, pFppppp) -//GO(cupsMakeServerCredentials, +GO(cupsMakeServerCredentials, iFppipl) GO(cupsMarkOptions, iFpip) //GO(_cupsMessageFree, //GO(_cupsMessageLoad, @@ -176,49 +176,49 @@ GO(cupsMarkOptions, iFpip) //GO(_cupsMutexLock, //GO(_cupsMutexUnlock, //GO(_cupsNextDelay, -//GO(cupsNotifySubject, +GO(cupsNotifySubject, pFpp) GO(cupsNotifyText, pFpp) GO(cupsParseOptions, iFpip) GO(cupsPrintFile, iFpppip) GO(cupsPrintFile2, iFppppip) GO(cupsPrintFiles, iFpippip) GO(cupsPrintFiles2, iFppippip) -//GO(cupsPutFd, -//GO(cupsPutFile, -//GO(cupsReadResponseData, +GO(cupsPutFd, iFppi) +GO(cupsPutFile, iFppp) +GO(cupsReadResponseData, lFppL) GO(cupsRemoveDest, iFppip) GO(cupsRemoveOption, iFpip) -//GO(cupsResolveConflicts, +GO(cupsResolveConflicts, iFppppp) //GO(_cupsRWInit, //GO(_cupsRWLockRead, //GO(_cupsRWLockWrite, //GO(_cupsRWUnlock, //GO(_cups_safe_vsnprintf, -//GO(cupsSendRequest, +GO(cupsSendRequest, iFpppL) GO(cupsServer, pFv) -//GO(cupsSetClientCertCB, -//GO(cupsSetCredentials, +//GOM(cupsSetClientCertCB, vFEpp) +GO(cupsSetCredentials, iFp) GO(cupsSetDefaultDest, vFppip) //GO(_cupsSetDefaults, -//GO(cupsSetDests, -//GO(cupsSetDests2, -//GO(cupsSetEncryption, +GO(cupsSetDests, vFip) +GO(cupsSetDests2, iFpip) +GO(cupsSetEncryption, vFu) //GO(_cupsSetError, //GO(_cupsSetHTTPError, //GO(_cupsSetLocale, //GO(_cupsSetNegotiateAuthString, -//GO(cupsSetPasswordCB, +//GOM(cupsSetPasswordCB, vFEp) GOM(cupsSetPasswordCB2, vFEpp) -//GO(cupsSetServer, -//GO(cupsSetServerCertCB, -//GO(cupsSetServerCredentials, -//GO(cupsSetUser, -//GO(cupsSetUserAgent, -//GO(cupsSideChannelDoRequest, -//GO(cupsSideChannelRead, -//GO(cupsSideChannelSNMPGet, -//GO(cupsSideChannelSNMPWalk, -//GO(cupsSideChannelWrite, +GO(cupsSetServer, vFp) +//GOM(cupsSetServerCertCB, vFEpp) +GO(cupsSetServerCredentials, iFppi) +GO(cupsSetUser, vFp) +GO(cupsSetUserAgent, vFp) +GO(cupsSideChannelDoRequest, uFuppd) +GO(cupsSideChannelRead, iFppppd) +GO(cupsSideChannelSNMPGet, uFpppd) +//GOM(cupsSideChannelSNMPWalk, uFEpdpp) +GO(cupsSideChannelWrite, iFuupid) //GO(_cupsSNMPClose, //GO(_cupsSNMPCopyOID, //GO(_cupsSNMPDefaultCommunity, @@ -246,138 +246,138 @@ GO(cupsStartDocument, iFppippi) //GO(_cupsStrRetain, //GO(_cupsStrScand, //GO(_cupsStrStatistics, -//GO(cupsTempFd, -//GO(cupsTempFile, -//GO(cupsTempFile2, +GO(cupsTempFd, iFpi) +GO(cupsTempFile, pFpi) +GO(cupsTempFile2, pFpi) //GO(_cupsThreadCancel, //GO(_cupsThreadCreate, //GO(_cupsThreadDetach, //GO(_cupsThreadWait, -//GO(cupsUser, -//GO(cupsUserAgent, +GO(cupsUser, pFv) +GO(cupsUserAgent, pFv) //GO(_cupsUserDefault, -//GO(cupsUTF32ToUTF8, -//GO(cupsUTF8ToCharset, -//GO(cupsUTF8ToUTF32, -GO(cupsWriteRequestData, iFppl) +GO(cupsUTF32ToUTF8, iFppi) +GO(cupsUTF8ToCharset, iFppii) +GO(cupsUTF8ToUTF32, iFppi) +GO(cupsWriteRequestData, iFppL) -//GO(httpAcceptConnection, -//GO(httpAddCredential, -//GO(httpAddrAny, -//GO(httpAddrClose, -//GO(httpAddrConnect, -//GO(httpAddrConnect2, -//GO(httpAddrCopyList, -//GO(httpAddrEqual, -//GO(httpAddrFamily, -//GO(httpAddrFreeList, -//GO(httpAddrGetList, -//GO(httpAddrLength, -//GO(httpAddrListen, -//GO(httpAddrLocalhost, -//GO(httpAddrLookup, -//GO(httpAddrPort, +GO(httpAcceptConnection, pFii) +GO(httpAddCredential, iFppL) +GO(httpAddrAny, iFp) +GO(httpAddrClose, iFpi) +GO(httpAddrConnect, pFpp) +GO(httpAddrConnect2, pFppip) +GO(httpAddrCopyList, pFp) +GO(httpAddrEqual, iFpp) +GO(httpAddrFamily, iFp) +GO(httpAddrFreeList, vFp) +GO(httpAddrGetList, pFpip) +GO(httpAddrLength, iFp) +GO(httpAddrListen, iFpi) +GO(httpAddrLocalhost, iFp) +GO(httpAddrLookup, pFppi) +GO(httpAddrPort, iFp) //GO(_httpAddrSetPort, -//GO(httpAddrString, -//GO(httpAssembleURI, -//GO(httpAssembleURIf, -//GO(httpAssembleUUID, +GO(httpAddrString, pFppi) +GO(httpAssembleURI, iFupipppip) +//GOM(httpAssembleURIf, iFEupipppipV) +GO(httpAssembleUUID, pFpipipL) GO(httpBlocking, vFpi) -//GO(httpCheck, -//GO(httpClearCookie, -//GO(httpClearFields, +GO(httpCheck, iFp) +GO(httpClearCookie, vFp) +GO(httpClearFields, vFp) GO(httpClose, vFp) -//GO(httpCompareCredentials, -//GO(httpConnect, -GO(httpConnect2, pFpipiiiip) -GO(httpConnectEncrypt, pFpii) -//GO(httpCopyCredentials, +GO(httpCompareCredentials, iFpp) +GO(httpConnect, pFpi) +GO(httpConnect2, pFpipiuiip) +GO(httpConnectEncrypt, pFpiu) +GO(httpCopyCredentials, iFpp) //GO(_httpCreateCredentials, -//GO(httpCredentialsAreValidForName, -//GO(httpCredentialsGetExpiration, -//GO(httpCredentialsGetTrust, -//GO(httpCredentialsString, -//GO(httpDecode64, -//GO(httpDecode64_2, +GO(httpCredentialsAreValidForName, iFpp) +GO(httpCredentialsGetExpiration, lFp) +GO(httpCredentialsGetTrust, uFpp) +GO(httpCredentialsString, LFppL) +GO(httpDecode64, pFpp) +GO(httpDecode64_2, pFppp) //GO(_httpDecodeURI, -//GO(httpDelete, +GO(httpDelete, iFpp) //GO(_httpDisconnect, -//GO(httpEncode64, -//GO(httpEncode64_2, +GO(httpEncode64, pFpp) +GO(httpEncode64_2, pFpipi) //GO(_httpEncodeURI, -//GO(httpEncryption, +GO(httpEncryption, iFpu) GO(httpError, iFp) -//GO(httpFieldValue, -//GO(httpFlush, -//GO(httpFlushWrite, +GO(httpFieldValue, iFp) +GO(httpFlush, vFp) +GO(httpFlushWrite, iFp) //GO(_httpFreeCredentials, -//GO(httpFreeCredentials, -//GO(httpGet, -//GO(httpGetActivity, -//GO(httpGetAddress, -//GO(httpGetAuthString, -//GO(httpGetBlocking, -//GO(httpGetContentEncoding, -//GO(httpGetCookie, -//GO(httpGetDateString, -//GO(httpGetDateString2, -//GO(httpGetDateTime, -//GO(httpGetEncryption, -//GO(httpGetExpect, -//GO(httpGetFd, -//GO(httpGetField, -//GO(httpGetHostByName, -//GO(httpGetHostname, -//GO(httpGetKeepAlive, -//GO(httpGetLength, -//GO(httpGetLength2, -//GO(httpGetPending, -//GO(httpGetReady, -//GO(httpGetRemaining, -//GO(httpGets, -//GO(httpGetState, -//GO(httpGetStatus, -//GO(httpGetSubField, -//GO(httpGetSubField2, -//GO(httpGetVersion, -//GO(httpHead, -//GO(httpInitialize, -//GO(httpIsChunked, -//GO(httpIsEncrypted, -//GO(httpLoadCredentials, -//GO(httpMD5, -//GO(httpMD5Final, -//GO(httpMD5String, -//GO(httpOptions, -//GO(httpPeek, -//GO(httpPost, -//GO(httpPrintf, -//GO(httpPut, -//GO(httpRead, -//GO(httpRead2, -//GO(httpReadRequest, -//GO(httpReconnect, -//GO(httpReconnect2, -//GO(httpResolveHostname, +GO(httpFreeCredentials, vFp) +GO(httpGet, iFpp) +GO(httpGetActivity, lFp) +GO(httpGetAddress, pFp) +GO(httpGetAuthString, pFp) +GO(httpGetBlocking, iFp) +GO(httpGetContentEncoding, pFp) +GO(httpGetCookie, pFp) +GO(httpGetDateString, pFl) +GO(httpGetDateString2, pFlpi) +GO(httpGetDateTime, lFp) +GO(httpGetEncryption, uFp) +GO(httpGetExpect, iFp) +GO(httpGetFd, iFp) +GO(httpGetField, pFpi) +GO(httpGetHostByName, pFp) +GO(httpGetHostname, pFppi) +GO(httpGetKeepAlive, uFp) +GO(httpGetLength, iFp) +GO(httpGetLength2, lFp) +GO(httpGetPending, LFp) +GO(httpGetReady, LFp) +GO(httpGetRemaining, LFp) +GO(httpGets, pFpip) +GO(httpGetState, iFp) +GO(httpGetStatus, iFp) +GO(httpGetSubField, pFpipp) +GO(httpGetSubField2, pFpippi) +GO(httpGetVersion, uFp) +GO(httpHead, iFpp) +GO(httpInitialize, vFv) +GO(httpIsChunked, iFp) +GO(httpIsEncrypted, iFp) +GO(httpLoadCredentials, iFppp) +GO(httpMD5, pFpppp) +GO(httpMD5Final, pFpppp) +GO(httpMD5String, pFpp) +GO(httpOptions, iFpp) +GO(httpPeek, lFppL) +GO(httpPost, iFpp) +//GOM(httpPrintf, iFEppV) +GO(httpPut, iFpp) +GO(httpRead, iFppi) +GO(httpRead2, lFppL) +GO(httpReadRequest, iFppL) +GO(httpReconnect, iFp) +GO(httpReconnect2, iFpip) +GO(httpResolveHostname, pFppL) //GO(_httpResolveURI, -//GO(httpSaveCredentials, -//GO(httpSeparate, -//GO(httpSeparate2, -//GO(httpSeparateURI, -//GO(httpSetAuthString, -//GO(httpSetCookie, -//GO(httpSetCredentials, -//GO(httpSetDefaultField, +GO(httpSaveCredentials, iFppp) +GO(httpSeparate, vFpppppp) +GO(httpSeparate2, vFppipipippi) +GO(httpSeparateURI, iFuppipipippi) +GO(httpSetAuthString, vFppp) +GO(httpSetCookie, vFpp) +GO(httpSetCredentials, iFpp) +GO(httpSetDefaultField, vFpip) //GO(_httpSetDigestAuthString, -//GO(httpSetExpect, -//GO(httpSetField, -//GO(httpSetKeepAlive, -//GO(httpSetLength, -//GO(httpSetTimeout, -//GO(httpShutdown, -//GO(httpStateString, +GO(httpSetExpect, vFpi) +GO(httpSetField, vFpip) +GO(httpSetKeepAlive, vFpu) +GO(httpSetLength, vFpL) +//GOM(httpSetTimeout, vFEpdpp) +GO(httpShutdown, vFp) +GO(httpStateString, pFi) //GO(_httpStatus, -//GO(httpStatus, +GO(httpStatus, pFi) //GO(_httpTLSInitialize, //GO(_httpTLSPending, //GO(_httpTLSRead, @@ -386,108 +386,108 @@ GO(httpError, iFp) //GO(_httpTLSStart, //GO(_httpTLSStop, //GO(_httpTLSWrite, -//GO(httpTrace, +GO(httpTrace, iFpp) //GO(_httpUpdate, -//GO(httpUpdate, -//GO(httpURIStatusString, +GO(httpUpdate, iFp) +GO(httpURIStatusString, pFi) //GO(_httpWait, -//GO(httpWait, -//GO(httpWrite, -//GO(httpWrite2, -//GO(httpWriteResponse, +GO(httpWait, iFpi) +GO(httpWrite, iFppi) +GO(httpWrite2, lFppL) +GO(httpWriteResponse, iFpi) -//GO(ippAddBoolean, -//GO(ippAddBooleans, -//GO(ippAddCollection, -//GO(ippAddCollections, -//GO(ippAddDate, -//GO(ippAddInteger, -//GO(ippAddIntegers, -//GO(ippAddOctetString, -//GO(ippAddOutOfBand, -//GO(ippAddRange, -//GO(ippAddRanges, -//GO(ippAddResolution, -//GO(ippAddResolutions, -//GO(ippAddSeparator, -//GO(ippAddString, -//GO(ippAddStringf, -//GO(ippAddStringfv, -//GO(ippAddStrings, -//GO(ippAttributeString, -//GO(ippContainsInteger, -//GO(ippContainsString, -//GO(ippCopyAttribute, -//GO(ippCopyAttributes, -//GO(ippCreateRequestedArray, -//GO(ippDateToTime, -//GO(ippDelete, -//GO(ippDeleteAttribute, -//GO(ippDeleteValues, -//GO(ippEnumString, -//GO(ippEnumValue, -//GO(ippErrorString, -//GO(ippErrorValue, -//GO(ippFindAttribute, -//GO(ippFindNextAttribute, +GO(ippAddBoolean, pFpipc) +GO(ippAddBooleans, pFpipip) +GO(ippAddCollection, pFpipp) +GO(ippAddCollections, pFpipip) +GO(ippAddDate, pFpipp) +GO(ippAddInteger, pFpiipi) +GO(ippAddIntegers, pFpiipip) +GO(ippAddOctetString, pFpippi) +GO(ippAddOutOfBand, pFpiip) +GO(ippAddRange, pFpipii) +GO(ippAddRanges, pFpipipp) +GO(ippAddResolution, pFpipuii) +GO(ippAddResolutions, pFpipiupp) +GO(ippAddSeparator, pFp) +GO(ippAddString, pFpiippp) +//GOM(ippAddStringf, pFEpiipppV) +//GOM(ippAddStringfv, pFEpiipppA) +GO(ippAddStrings, pFpiipipp) +GO(ippAttributeString, LFppL) +GO(ippContainsInteger, iFpi) +GO(ippContainsString, iFpp) +GO(ippCopyAttribute, pFppi) +//GOM(ippCopyAttributes, iFEppipp) +GO(ippCreateRequestedArray, pFp) +GO(ippDateToTime, lFp) +GO(ippDelete, vFp) +GO(ippDeleteAttribute, vFpp) +GO(ippDeleteValues, iFppii) +GO(ippEnumString, pFpi) +GO(ippEnumValue, iFpp) +GO(ippErrorString, pFi) +GO(ippErrorValue, iFp) +GO(ippFindAttribute, pFppi) +GO(ippFindNextAttribute, pFppi) //GO(_ippFindOption, -//GO(ippFirstAttribute, -//GO(ippGetBoolean, -//GO(ippGetCollection, -//GO(ippGetCount, -//GO(ippGetDate, -//GO(ippGetGroupTag, -//GO(ippGetInteger, -//GO(ippGetName, -//GO(ippGetOctetString, -//GO(ippGetOperation, -//GO(ippGetRange, -//GO(ippGetRequestId, -//GO(ippGetResolution, -//GO(ippGetState, -//GO(ippGetStatusCode, -//GO(ippGetString, -//GO(ippGetValueTag, -//GO(ippGetVersion, -//GO(ippLength, -//GO(ippNew, -//GO(ippNewRequest, -//GO(ippNewResponse, -//GO(ippNextAttribute, -//GO(ippOpString, -//GO(ippOpValue, -//GO(ippPort, -//GO(ippRead, -//GO(ippReadFile, -//GO(ippReadIO, -//GO(ippSetBoolean, -//GO(ippSetCollection, -//GO(ippSetDate, -//GO(ippSetGroupTag, -//GO(ippSetInteger, -//GO(ippSetName, -//GO(ippSetOctetString, -//GO(ippSetOperation, -//GO(ippSetPort, -//GO(ippSetRange, -//GO(ippSetRequestId, -//GO(ippSetResolution, -//GO(ippSetState, -//GO(ippSetStatusCode, -//GO(ippSetString, -//GO(ippSetStringf, -//GO(ippSetStringfv, -//GO(ippSetValueTag, -//GO(ippSetVersion, -//GO(ippStateString, -//GO(ippTagString, -//GO(ippTagValue, -//GO(ippTimeToDate, -//GO(ippValidateAttribute, -//GO(ippValidateAttributes, -//GO(ippWrite, -//GO(ippWriteFile, -//GO(ippWriteIO, +GO(ippFirstAttribute, pFp) +GO(ippGetBoolean, iFpi) +GO(ippGetCollection, pFpi) +GO(ippGetCount, iFp) +GO(ippGetDate, pFpi) +GO(ippGetGroupTag, iFp) +GO(ippGetInteger, iFpi) +GO(ippGetName, pFp) +GO(ippGetOctetString, pFpip) +GO(ippGetOperation, iFp) +GO(ippGetRange, iFpip) +GO(ippGetRequestId, iFp) +GO(ippGetResolution, iFpipp) +GO(ippGetState, iFp) +GO(ippGetStatusCode, iFp) +GO(ippGetString, pFpip) +GO(ippGetValueTag, iFp) +GO(ippGetVersion, iFpp) +GO(ippLength, LFp) +GO(ippNew, pFv) +GO(ippNewRequest, pFi) +GO(ippNewResponse, pFp) +GO(ippNextAttribute, pFp) +GO(ippOpString, pFi) +GO(ippOpValue, iFp) +GO(ippPort, iFv) +GO(ippRead, iFpp) +GO(ippReadFile, iFip) +//GOM(ippReadIO, iFEppipp) +GO(ippSetBoolean, iFppii) +GO(ippSetCollection, iFppip) +GO(ippSetDate, iFppip) +GO(ippSetGroupTag, iFppi) +GO(ippSetInteger, iFppii) +GO(ippSetName, iFppp) +GO(ippSetOctetString, iFppipi) +GO(ippSetOperation, iFpi) +GO(ippSetPort, vFi) +GO(ippSetRange, iFppiii) +GO(ippSetRequestId, iFpi) +GO(ippSetResolution, iFppiuii) +GO(ippSetState, iFpi) +GO(ippSetStatusCode, iFpi) +GO(ippSetString, iFppip) +//GOM(ippSetStringf, iFEppipV) +//GOM(ippSetStringfv, iFEppipA) +GO(ippSetValueTag, iFppi) +GO(ippSetVersion, iFpii) +GO(ippStateString, pFi) +GO(ippTagString, pFi) +GO(ippTagValue, iFp) +GO(ippTimeToDate, pFl) +GO(ippValidateAttribute, iFp) +GO(ippValidateAttributes, iFp) +GO(ippWrite, iFpp) +GO(ippWriteFile, iFip) +//GOM(ippWriteIO, iFEppipp) //GO(_ppdCacheCreateWithFile, //GO(_ppdCacheCreateWithPPD, @@ -504,64 +504,64 @@ GO(httpError, iFp) //GO(_ppdCacheGetType, //GO(_ppdCacheWriteFile, GO(ppdClose, vFp) -//GO(ppdCollect, -//GO(ppdCollect2, -//GO(ppdConflicts, +GO(ppdCollect, iFpup) +GO(ppdCollect2, iFpufp) +GO(ppdConflicts, iFp) //GO(_ppdCreateFromIPP, -//GO(ppdEmit, -//GO(ppdEmitAfterOrder, -//GO(ppdEmitFd, -//GO(ppdEmitJCL, -//GO(ppdEmitJCLEnd, -//GO(ppdEmitString, -GO(ppdErrorString, pFi) +GO(ppdEmit, iFpSu) +GO(ppdEmitAfterOrder, iFpSuif) +GO(ppdEmitFd, iFpiu) +GO(ppdEmitJCL, iFpSipp) +GO(ppdEmitJCLEnd, iFpS) +GO(ppdEmitString, pFpuf) +GO(ppdErrorString, pFu) GO(ppdFindAttr, pFppp) GO(ppdFindChoice, pFpp) -//GO(ppdFindCustomOption, -//GO(ppdFindCustomParam, +GO(ppdFindCustomOption, pFpp) +GO(ppdFindCustomParam, pFpp) GO(ppdFindMarkedChoice, pFpp) -//GO(ppdFindNextAttr, +GO(ppdFindNextAttr, pFppp) GO(ppdFindOption, pFpp) -//GO(ppdFirstCustomParam, -//GO(ppdFirstOption, +GO(ppdFirstCustomParam, pFp) +GO(ppdFirstOption, pFp) //GO(_ppdFreeLanguages, //GO(_ppdGetEncoding, //GO(_ppdGetLanguages, //GO(_ppdGlobals, //GO(_ppdHashName, -//GO(ppdInstallableConflict, -//GO(ppdIsMarked, -GO(ppdLastError, iFp) -//GO(ppdLocalize, -//GO(ppdLocalizeAttr, +GO(ppdInstallableConflict, iFppp) +GO(ppdIsMarked, iFppp) +GO(ppdLastError, uFp) +GO(ppdLocalize, iFp) +GO(ppdLocalizeAttr, pFppp) //GO(_ppdLocalizedAttr, -//GO(ppdLocalizeIPPReason, -//GO(ppdLocalizeMarkerName, +GO(ppdLocalizeIPPReason, pFppppL) +GO(ppdLocalizeMarkerName, pFpp) GO(ppdMarkDefaults, vFp) -//GO(ppdMarkOption, -//GO(ppdNextCustomParam, -//GO(ppdNextOption, +GO(ppdMarkOption, iFppp) +GO(ppdNextCustomParam, pFp) +GO(ppdNextOption, pFp) //GO(_ppdNormalizeMakeAndModel, //GO(_ppdOpen, -//GO(ppdOpen, -//GO(ppdOpen2, +GO(ppdOpen, pFS) +GO(ppdOpen2, pFp) GO(ppdOpenFd, pFi) //GO(_ppdOpenFile, GO(ppdOpenFile, pFp) -//GO(ppdPageLength, -//GO(ppdPageSize, -//GO(ppdPageSizeLimits, -//GO(ppdPageWidth, +GO(ppdPageLength, fFpp) +GO(ppdPageSize, pFpp) +GO(ppdPageSizeLimits, iFppp) +GO(ppdPageWidth, fFpp) //GO(_ppdParseOptions, -//GO(ppdSetConformance, +GO(ppdSetConformance, vFu) -//GO(pwgFormatSizeName, -//GO(pwgInitSize, +GO(pwgFormatSizeName, iFpLppiip) +GO(pwgInitSize, iFppp) //GO(_pwgInputSlotForSource, -//GO(pwgMediaForLegacy, -//GO(pwgMediaForPPD, -//GO(pwgMediaForPWG, -//GO(pwgMediaForSize, +GO(pwgMediaForLegacy, pFp) +GO(pwgMediaForPPD, pFp) +GO(pwgMediaForPWG, pFp) +GO(pwgMediaForSize, pFii) //GO(_pwgMediaNearSize, //GO(_pwgMediaTable, //GO(_pwgMediaTypeForType, diff --git a/src/wrapped/wrappedlibdl.c b/src/wrapped/wrappedlibdl.c index 27252850134d448f1294c43e9c5d9df20d86fe8a..bffe50bf843f0d368368b9a2ba1be2d707689858 100644 --- a/src/wrapped/wrappedlibdl.c +++ b/src/wrapped/wrappedlibdl.c @@ -57,13 +57,51 @@ void* my_dlvsym(x64emu_t* emu, void *handle, void *symbol, const char *vername) int my_dlinfo(x64emu_t* emu, void* handle, int request, void* info) EXPORT; #define LIBNAME libdl -#ifdef ANDROID - const char* libdlName = "libdl.so"; -#else - const char* libdlName = "libdl.so.2"; -#endif +const char* libdlName = "libdl.so.2"; +#define ALTNAME "libdl.so" #define CLEARERR if(dl->last_error) {box_free(dl->last_error); dl->last_error = NULL;} +void dl_clear_error() +{ + dlprivate_t *dl = my_context->dlprivate; + CLEARERR; +} + +void dl_set_error(const char* msg) +{ + dlprivate_t *dl = my_context->dlprivate; + if(!dl->last_error) + dl->last_error = box_calloc(1, 129); + snprintf(dl->last_error, 129, "%s", msg); +} + +library_t* dl_get_library(void* handle) +{ + dlprivate_t *dl = my_context->dlprivate; + CLEARERR + size_t nlib = (size_t)handle; + --nlib; + // size_t is unsigned + if(nlib>=dl->lib_sz) { + if(!dl->last_error) + dl->last_error = box_calloc(1, 129); + snprintf(dl->last_error, 129, "Bad handle %p)\n", handle); + return (void*)-1LL; + } + if(!dl->dllibs[nlib].count || !dl->dllibs[nlib].full) { + if(!dl->last_error) + dl->last_error = box_calloc(1, 129); + snprintf(dl->last_error, 129, "Bad handle %p (already closed))\n", handle); + return (void*)-1LL; + } + return dl->dllibs[nlib].lib; +} + +char* dl_last_error() +{ + dlprivate_t *dl = my_context->dlprivate; + return dl->last_error; +} void RemoveDlopen(library_t** lib, size_t idx) { @@ -305,6 +343,8 @@ void* my_dlsym(x64emu_t* emu, void *handle, void *symbol) dlprivate_t *dl = my_context->dlprivate; uintptr_t start = 0, end = 0; char* rsymbol = (char*)symbol; + if(box64_is32bits && handle==(void*)0xffffffff) + handle = (void*)~0LL; CLEARERR printf_dlsym(LOG_DEBUG, "%04d|Call to dlsym(%p, \"%s\")%s", GetTID(), handle, rsymbol, dlsym_error?"":"\n"); if(handle==NULL) { @@ -323,7 +363,14 @@ void* my_dlsym(x64emu_t* emu, void *handle, void *symbol) } if(handle==(void*)~0LL) { // special case, look globably but no self (RTLD_NEXT) - elfheader_t *elf = FindElfAddress(my_context, *(uintptr_t*)R_RSP); // use return address to guess "self" + uintptr_t ret_addr = 0; + #ifdef BOX32 + if(box64_is32bits) + ret_addr = from_ptri(ptr_t, R_ESP); + else + #endif + ret_addr = *(uintptr_t*)R_RSP; + elfheader_t *elf = FindElfAddress(my_context, ret_addr); // use return address to guess "self" if(GetNoSelfSymbolStartEnd(my_context->maplib, rsymbol, &start, &end, elf, 0, -1, NULL, 0, NULL)) { printf_dlsym(LOG_NEVER, "%p\n", (void*)start); pthread_mutex_unlock(&mutex); @@ -456,6 +503,8 @@ void* my_dlvsym(x64emu_t* emu, void *handle, void *symbol, const char *vername) int version = (vername)?2:-1; uintptr_t start, end; char* rsymbol = (char*)symbol; + if(box64_is32bits && handle==(void*)0xffffffff) + handle = (void*)~0LL; CLEARERR printf_dlsym(LOG_DEBUG, "Call to dlvsym(%p, \"%s\", %s)%s", handle, rsymbol, vername?vername:"(nil)", dlsym_error?"":"\n"); if(handle==NULL) { @@ -472,7 +521,14 @@ void* my_dlvsym(x64emu_t* emu, void *handle, void *symbol, const char *vername) } if(handle==(void*)~0LL) { // special case, look globably but no self (RTLD_NEXT) - elfheader_t *elf = FindElfAddress(my_context, *(uintptr_t*)R_RSP); // use return address to guess "self" + uintptr_t ret_addr = 0; + #ifdef BOX32 + if(box64_is32bits) + ret_addr = from_ptri(ptr_t, R_ESP); + else + #endif + ret_addr = *(uintptr_t*)R_RSP; + elfheader_t *elf = FindElfAddress(my_context, ret_addr); // use return address to guess "self" if(GetNoSelfSymbolStartEnd(my_context->maplib, rsymbol, &start, &end, elf, 0, version, vername, 0, NULL)) { printf_dlsym(LOG_NEVER, "%p\n", (void*)start); return (void*)start; @@ -613,6 +669,11 @@ void closeAllDLOpenned() //extern void* _dlfcn_hook; #endif +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + #define CUSTOM_FINI \ closeAllDLOpenned(); diff --git a/src/wrapped/wrappedlibdl_private.h b/src/wrapped/wrappedlibdl_private.h index c210625023d13ba926b600727894ec5eda2bb76b..540ddf0f9477d9e3e9c197de3c72ff811acb2b39 100644 --- a/src/wrapped/wrappedlibdl_private.h +++ b/src/wrapped/wrappedlibdl_private.h @@ -1,13 +1,15 @@ -#if defined(GO) && defined(GOM) && defined(GO2) && defined(DATA) +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif GOM(dladdr, iFEpp) GOM(dladdr1, iFEpppi) GOM(dlclose, iFEp) GOM(dlerror, pFEv) #ifdef STATICBUILD -//DATAB(_dlfcn_hook, sizeof(void*)) +//DATAB(_dlfcn_hook, 8) #else -DATAB(_dlfcn_hook, sizeof(void*)) +DATAB(_dlfcn_hook, 8) #endif GOM(dlinfo, iFEpip) GOM(dlmopen, pFEppi) @@ -15,5 +17,3 @@ GOM(dlopen, pFEpi) GOM(dlsym, pFEpp) GOM(dlvsym, pFEppp) // Weak GOM(_dl_find_object, iFEpp) - -#endif diff --git a/src/wrapped/wrappedlibdrmamdgpu.c b/src/wrapped/wrappedlibdrmamdgpu.c new file mode 100644 index 0000000000000000000000000000000000000000..4e58f5f5cbe629b20b02b693990bdbe2963750da --- /dev/null +++ b/src/wrapped/wrappedlibdrmamdgpu.c @@ -0,0 +1,30 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box64context.h" +#include "emu/x64emu_private.h" +#include "myalign.h" + +const char* libdrmamdgpuName = "libdrm_amdgpu.so.1"; +#define LIBNAME libdrmamdgpu + +#define ADDED_FUNCTIONS() \ + +//#include "generated/wrappedlibdrmamdgputypes.h" + +//#include "wrappercallback.h" + +#include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibdrmamdgpu_private.h b/src/wrapped/wrappedlibdrmamdgpu_private.h new file mode 100644 index 0000000000000000000000000000000000000000..42a5dbec8b03c19f583c884c9d2a14f939335332 --- /dev/null +++ b/src/wrapped/wrappedlibdrmamdgpu_private.h @@ -0,0 +1,88 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh.... +#endif + +GO(amdgpu_bo_alloc, iFppp) +GO(amdgpu_bo_cpu_map, iFpp) +GO(amdgpu_bo_cpu_unmap, iFp) +GO(amdgpu_bo_export, iFpup) +GO(amdgpu_bo_free, iFppp) +GO(amdgpu_bo_import, iFpuup) +GO(amdgpu_bo_inc_ref, vFp) +GO(amdgpu_bo_list_create, iFpuppp) +GO(amdgpu_bo_list_create_raw, iFpupp) +GO(amdgpu_bo_list_destroy, iFp) +GO(amdgpu_bo_list_destroy_raw, iFpupp) +GO(amdgpu_bo_list_update, iFpupp) +GO(amdgpu_bo_query_info, iFpp) +GO(amdgpu_bo_set_metadata, iFpp) +GO(amdgpu_bo_va_op, iFpLLLLu) +GO(amdgpu_bo_va_op_raw, iFppLLLLu) +GO(amdgpu_bo_wait_for_idle, iFpLp) +GO(amdgpu_create_bo_from_user_mem, iFppLp) +GO(amdgpu_cs_chunk_fence_info_to_data, vFpp) +GO(amdgpu_cs_chunk_fence_to_dep, vFpp) +GO(amdgpu_cs_create_semaphore, iFp) +GO(amdgpu_cs_create_syncobj, iFpp) +GO(amdgpu_cs_create_syncobj2, iFpup) +GO(amdgpu_cs_ctx_create, iFpp) +GO(amdgpu_cs_ctx_create2, iFpup) +GO(amdgpu_cs_ctx_free, iFp) +GO(amdgpu_cs_ctx_override_priority, iFppiu) +GO(amdgpu_cs_ctx_stable_pstate, iFpuup) +GO(amdgpu_cs_destroy_semaphore, iFp) +GO(amdgpu_cs_destroy_syncobj, iFpu) +GO(amdgpu_cs_export_syncobj, iFpup) +GO(amdgpu_cs_fence_to_handle, iFppup) +GO(amdgpu_cs_import_syncobj, iFpip) +GO(amdgpu_cs_query_fence_status, iFpLLp) +GO(amdgpu_cs_query_reset_state, iFppp) +GO(amdgpu_cs_query_reset_state2, iFpp) +GO(amdgpu_cs_signal_semaphore, iFpuuup) +GO(amdgpu_cs_submit, iFpLpu) +GO(amdgpu_cs_submit_raw, iFpppipp) +GO(amdgpu_cs_submit_raw2, iFppuipp) +GO(amdgpu_cs_syncobj_export_sync_file, iFpup) +GO(amdgpu_cs_syncobj_export_sync_file2, iFpuLup) +GO(amdgpu_cs_syncobj_import_sync_file, iFpui) +GO(amdgpu_cs_syncobj_import_sync_file2, iFpuLi) +GO(amdgpu_cs_syncobj_query, iFpppu) +GO(amdgpu_cs_syncobj_query2, iFpppuu) +GO(amdgpu_cs_syncobj_reset, iFppu) +GO(amdgpu_cs_syncobj_signal, iFppu) +GO(amdgpu_cs_syncobj_timeline_signal, iFpppu) +GO(amdgpu_cs_syncobj_timeline_wait, iFpppulup) +GO(amdgpu_cs_syncobj_transfer, iFpuLuLu) +GO(amdgpu_cs_syncobj_wait, iFppulup) +GO(amdgpu_cs_wait_fences, iFpuiLpp) +GO(amdgpu_cs_wait_semaphore, iFpuuup) +GO(amdgpu_device_deinitialize, iFp) +GO(amdgpu_device_get_fd, iFp) +GO(amdgpu_device_initialize, iFippp) +GO(amdgpu_device_initialize2, iFiippp) +GO(amdgpu_find_bo_by_cpu_mapping, iFppLpp) +GO(amdgpu_get_marketing_name, pFp) +GO(amdgpu_query_buffer_size_alignment, iFpp) +GO(amdgpu_query_crtc_from_id, iFpup) +GO(amdgpu_query_firmware_version, iFpuuupp) +GO(amdgpu_query_gds_info, iFpp) +GO(amdgpu_query_gpu_info, iFpp) +GO(amdgpu_query_gpuvm_fault_info, iFpup) +GO(amdgpu_query_heap_info, iFpuup) +GO(amdgpu_query_hw_ip_count, iFpup) +GO(amdgpu_query_hw_ip_info, iFpuup) +GO(amdgpu_query_info, iFpuup) +GO(amdgpu_query_sensor_info, iFpuup) +GO(amdgpu_query_sw_info, iFpup) +GO(amdgpu_query_video_caps_info, iFpuup) +GO(amdgpu_read_mm_registers, iFpuuuup) +GO(amdgpu_va_get_start_addr, LFp) +GO(amdgpu_va_manager_alloc, pFv) +GO(amdgpu_va_manager_deinit, vFp) +GO(amdgpu_va_manager_init, vFpLLLLu) +GO(amdgpu_va_range_alloc, iFpuLLLppL) +GO(amdgpu_va_range_alloc2, iFpuLLLppL) +GO(amdgpu_va_range_free, iFp) +GO(amdgpu_va_range_query, iFpupp) +GO(amdgpu_vm_reserve_vmid, iFpu) +GO(amdgpu_vm_unreserve_vmid, iFpu) diff --git a/src/wrapped/wrappedlibegl_private.h b/src/wrapped/wrappedlibegl_private.h index 1f3eb966fcb94883775cff3f3143da7d1dd27793..086f325c05b9f9b26e65d36f4879c7be6cff3848 100644 --- a/src/wrapped/wrappedlibegl_private.h +++ b/src/wrapped/wrappedlibegl_private.h @@ -1,49 +1,49 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif -GO(eglBindAPI, iFi) -GO(eglBindTexImage, iFppi) -GO(eglChooseConfig, iFpppip) +GO(eglBindAPI, uFu) +GO(eglBindTexImage, uFppi) +GO(eglChooseConfig, uFpppip) GO(eglClientWaitSync, iFppiU) -GO(eglCopyBuffers, iFppp) +GO(eglCopyBuffers, uFppL) GO(eglCreateContext, pFpppp) -GO(eglCreateImage, pFppuup) -GO(eglCreatePbufferFromClientBuffer, pFpippp) +GO(eglCreateImage, pFppupp) +GO(eglCreatePbufferFromClientBuffer, pFpuppp) GO(eglCreatePbufferSurface, pFppp) -GO(eglCreatePixmapSurface, pFpppp) +GO(eglCreatePixmapSurface, pFppLp) GO(eglCreatePlatformPixmapSurface, pFpppp) GO(eglCreatePlatformWindowSurface, pFpppp) GO(eglCreateSync, pFpup) -GO(eglCreateWindowSurface, pFpppp) -GO(eglDestroyContext, iFpp) -GO(eglDestroyImage, iFpp) -GO(eglDestroySurface, iFpp) -GO(eglDestroySync, iFpp) -GO(eglGetConfigAttrib, iFppip) -GO(eglGetConfigs, iFppip) +GO(eglCreateWindowSurface, pFppLp) +GO(eglDestroyContext, uFpp) +GO(eglDestroyImage, uFpp) +GO(eglDestroySurface, uFpp) +GO(eglDestroySync, uFpp) +GO(eglGetConfigAttrib, uFppip) +GO(eglGetConfigs, uFppip) GO(eglGetCurrentContext, pFv) GO(eglGetCurrentDisplay, pFv) GO(eglGetCurrentSurface, pFi) GO(eglGetDisplay, pFp) GO(eglGetError, iFv) -GO(eglGetPlatformDisplay, pFppp) +GO(eglGetPlatformDisplay, pFupp) GOM(eglGetProcAddress, pFEp) -GO(eglGetSyncAttrib, iFppip) -GO(eglInitialize, iFppp) -GO(eglMakeCurrent, iFpppp) -GO(eglQueryAPI, iFv) -GO(eglQueryContext, iFppip) +GO(eglGetSyncAttrib, uFppip) +GO(eglInitialize, uFppp) +GO(eglMakeCurrent, uFpppp) +GO(eglQueryAPI, uFv) +GO(eglQueryContext, uFppip) GO(eglQueryString, pFpi) -GO(eglQuerySurface, iFppip) -GO(eglReleaseTexImage, iFppi) -GO(eglReleaseThread, iFv) -GO(eglSurfaceAttrib, iFppii) -GO(eglSwapBuffers, iFpp) -GO(eglSwapInterval, iFpi) -GO(eglTerminate, iFp) -GO(eglWaitClient, iFv) -GO(eglWaitGL, iFv) -GO(eglWaitNative, iFi) -GO(eglWaitSync, iFppi) +GO(eglQuerySurface, uFppip) +GO(eglReleaseTexImage, uFppi) +GO(eglReleaseThread, uFv) +GO(eglSurfaceAttrib, uFppii) +GO(eglSwapBuffers, uFpp) +GO(eglSwapInterval, uFpi) +GO(eglTerminate, uFp) +GO(eglWaitClient, uFv) +GO(eglWaitGL, uFv) +GO(eglWaitNative, uFi) +GO(eglWaitSync, uFppi) diff --git a/src/wrapped/wrappedlibgl.c b/src/wrapped/wrappedlibgl.c index 594450246102d85017b1f8e7af656d3692bf44d3..b0a8b9624c358b040d1edda40940e1997622e282 100644 --- a/src/wrapped/wrappedlibgl.c +++ b/src/wrapped/wrappedlibgl.c @@ -410,7 +410,14 @@ static void* find_glGetVkProcAddrNV_Fct(void* fct) } #undef SUPER -#define PRE_INIT if(box64_libGL) {lib->w.lib = dlopen(box64_libGL, RTLD_LAZY | RTLD_GLOBAL); lib->path = strdup(box64_libGL);} else +#define PRE_INIT \ + if(box64_libGL) { \ + lib->w.lib = dlopen(box64_libGL, RTLD_LAZY | RTLD_GLOBAL); \ + lib->path = strdup(box64_libGL); \ + } else if(strstr(lib->name, "libGLX_nvidia.so.0")) { \ + lib->w.lib = dlopen("libGLX_nvidia.so.0", RTLD_LAZY | RTLD_GLOBAL); \ + if(lib->w.lib) lib->path = strdup("libGLX_nvidia.so.0"); \ + } #define CUSTOM_INIT \ my_lib = lib; \ lib->w.priv = dlsym(lib->w.lib, "glXGetProcAddress"); \ diff --git a/src/wrapped/wrappedlibgl_private.h b/src/wrapped/wrappedlibgl_private.h index 33605de8f049beca502fd05f36f43f83223cab45..da4ca22d158db22faf0368b805ff05ef278c5f78 100644 --- a/src/wrapped/wrappedlibgl_private.h +++ b/src/wrapped/wrappedlibgl_private.h @@ -1,6 +1,7 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif + //VERSION_1_0 GO(glAccum, vFuf) GO(glAlphaFunc, vFuf) @@ -9,7 +10,7 @@ GO(glBitmap, vFiiffffp) GO(glBlendFunc, vFuu) GO(glCallList, vFu) GO(glCallLists, vFiup) -GO(glClear, vFi) +GO(glClear, vFu) GO(glClearAccum, vFffff) GO(glClearColor, vFffff) GO(glClearDepth, vFd) @@ -24,7 +25,7 @@ GO(glColor3f, vFfff) GO(glColor3fv, vFp) GO(glColor3i, vFiii) GO(glColor3iv, vFp) -GO(glColor3s, vFiii) +GO(glColor3s, vFwww) GO(glColor3sv, vFp) GO(glColor3ub, vFCCC) GO(glColor3ubv, vFp) @@ -40,7 +41,7 @@ GO(glColor4f, vFffff) GO(glColor4fv, vFp) GO(glColor4i, vFiiii) GO(glColor4iv, vFp) -GO(glColor4s, vFiiii) +GO(glColor4s, vFwwww) GO(glColor4sv, vFp) GO(glColor4ub, vFCCCC) GO(glColor4ubv, vFp) @@ -54,12 +55,12 @@ GO(glCopyPixels, vFiiiiu) GO(glCullFace, vFu) GO(glDeleteLists, vFui) GO(glDepthFunc, vFu) -GO(glDepthMask, vFi) +GO(glDepthMask, vFC) GO(glDepthRange, vFdd) GO(glDisable, vFu) GO(glDrawBuffer, vFu) GO(glDrawPixels, vFiiuup) -GO(glEdgeFlag, vFi) +GO(glEdgeFlag, vFC) GO(glEdgeFlagv, vFp) GO(glEnable, vFu) GO(glEnd, vFv) @@ -122,11 +123,11 @@ GO(glIndexf, vFf) GO(glIndexfv, vFp) GO(glIndexi, vFi) GO(glIndexiv, vFp) -GO(glIndexs, vFi) +GO(glIndexs, vFw) GO(glIndexsv, vFp) GO(glInitNames, vFv) -GO(glIsEnabled, iFu) -GO(glIsList, iFu) +GO(glIsEnabled, CFu) +GO(glIsList, CFu) GO(glLightModelf, vFuf) GO(glLightModelfv, vFup) GO(glLightModeli, vFui) @@ -159,7 +160,7 @@ GO(glMatrixMode, vFu) GO(glMultMatrixd, vFp) GO(glMultMatrixf, vFp) GO(glNewList, vFuu) -GO(glNormal3b, vFiii) +GO(glNormal3b, vFccc) GO(glNormal3bv, vFp) GO(glNormal3d, vFddd) GO(glNormal3dv, vFp) @@ -167,7 +168,7 @@ GO(glNormal3f, vFfff) GO(glNormal3fv, vFp) GO(glNormal3i, vFiii) GO(glNormal3iv, vFp) -GO(glNormal3s, vFiii) +GO(glNormal3s, vFwww) GO(glNormal3sv, vFp) GO(glOrtho, vFdddddd) GO(glPassThrough, vFf) @@ -185,7 +186,7 @@ GO(glPolygonStipple, vFp) GO(glPopAttrib, vFv) GO(glPopMatrix, vFv) GO(glPopName, vFv) -GO(glPushAttrib, vFi) +GO(glPushAttrib, vFu) GO(glPushMatrix, vFv) GO(glPushName, vFu) GO(glRasterPos2d, vFdd) @@ -194,7 +195,7 @@ GO(glRasterPos2f, vFff) GO(glRasterPos2fv, vFp) GO(glRasterPos2i, vFii) GO(glRasterPos2iv, vFp) -GO(glRasterPos2s, vFii) +GO(glRasterPos2s, vFww) GO(glRasterPos2sv, vFp) GO(glRasterPos3d, vFddd) GO(glRasterPos3dv, vFp) @@ -202,7 +203,7 @@ GO(glRasterPos3f, vFfff) GO(glRasterPos3fv, vFp) GO(glRasterPos3i, vFiii) GO(glRasterPos3iv, vFp) -GO(glRasterPos3s, vFiii) +GO(glRasterPos3s, vFwww) GO(glRasterPos3sv, vFp) GO(glRasterPos4d, vFdddd) GO(glRasterPos4dv, vFp) @@ -210,7 +211,7 @@ GO(glRasterPos4f, vFffff) GO(glRasterPos4fv, vFp) GO(glRasterPos4i, vFiiii) GO(glRasterPos4iv, vFp) -GO(glRasterPos4s, vFiiii) +GO(glRasterPos4s, vFwwww) GO(glRasterPos4sv, vFp) GO(glReadBuffer, vFu) GO(glReadPixels, vFiiiiuup) @@ -220,7 +221,7 @@ GO(glRectf, vFffff) GO(glRectfv, vFpp) GO(glRecti, vFiiii) GO(glRectiv, vFpp) -GO(glRects, vFiiii) +GO(glRects, vFwwww) GO(glRectsv, vFpp) GO(glRenderMode, iFu) GO(glRotated, vFdddd) @@ -239,7 +240,7 @@ GO(glTexCoord1f, vFf) GO(glTexCoord1fv, vFp) GO(glTexCoord1i, vFi) GO(glTexCoord1iv, vFp) -GO(glTexCoord1s, vFi) +GO(glTexCoord1s, vFw) GO(glTexCoord1sv, vFp) GO(glTexCoord2d, vFdd) GO(glTexCoord2dv, vFp) @@ -247,7 +248,7 @@ GO(glTexCoord2f, vFff) GO(glTexCoord2fv, vFp) GO(glTexCoord2i, vFii) GO(glTexCoord2iv, vFp) -GO(glTexCoord2s, vFii) +GO(glTexCoord2s, vFww) GO(glTexCoord2sv, vFp) GO(glTexCoord3d, vFddd) GO(glTexCoord3dv, vFp) @@ -255,7 +256,7 @@ GO(glTexCoord3f, vFfff) GO(glTexCoord3fv, vFp) GO(glTexCoord3i, vFiii) GO(glTexCoord3iv, vFp) -GO(glTexCoord3s, vFiii) +GO(glTexCoord3s, vFwww) GO(glTexCoord3sv, vFp) GO(glTexCoord4d, vFdddd) GO(glTexCoord4dv, vFp) @@ -263,7 +264,7 @@ GO(glTexCoord4f, vFffff) GO(glTexCoord4fv, vFp) GO(glTexCoord4i, vFiiii) GO(glTexCoord4iv, vFp) -GO(glTexCoord4s, vFiiii) +GO(glTexCoord4s, vFwwww) GO(glTexCoord4sv, vFp) GO(glTexEnvf, vFuuf) GO(glTexEnvfv, vFuup) @@ -289,7 +290,7 @@ GO(glVertex2f, vFff) GO(glVertex2fv, vFp) GO(glVertex2i, vFii) GO(glVertex2iv, vFp) -GO(glVertex2s, vFii) +GO(glVertex2s, vFww) GO(glVertex2sv, vFp) GO(glVertex3d, vFddd) GO(glVertex3dv, vFp) @@ -297,7 +298,7 @@ GO(glVertex3f, vFfff) GO(glVertex3fv, vFp) GO(glVertex3i, vFiii) GO(glVertex3iv, vFp) -GO(glVertex3s, vFiii) +GO(glVertex3s, vFwww) GO(glVertex3sv, vFp) GO(glVertex4d, vFdddd) GO(glVertex4dv, vFp) @@ -305,7 +306,7 @@ GO(glVertex4f, vFffff) GO(glVertex4fv, vFp) GO(glVertex4i, vFiiii) GO(glVertex4iv, vFp) -GO(glVertex4s, vFiiii) +GO(glVertex4s, vFwwww) GO(glVertex4sv, vFp) GO(glViewport, vFiiii) //VERSION_1_1 @@ -326,15 +327,15 @@ GO(glEnableClientState, vFu) GO(glGenTextures, vFip) GO(glGetPointerv, vFup) GO(glIndexPointer, vFuip) -GO(glIndexub, vFu) +GO(glIndexub, vFC) GO(glIndexubv, vFp) GO(glInterleavedArrays, vFuip) -GO(glIsTexture, iFu) +GO(glIsTexture, CFu) GO(glNormalPointer, vFuip) GO(glPolygonOffset, vFff) GO(glPopClientAttrib, vFv) GO(glPrioritizeTextures, vFipp) -GO(glPushClientAttrib, vFi) +GO(glPushClientAttrib, vFu) GO(glTexCoordPointer, vFiuip) GO(glTexSubImage1D, vFuiiiuup) GO(glTexSubImage2D, vFuiiiiiuup) @@ -364,15 +365,15 @@ GO(glGetColorTableParameteriv, vFuup) GO(glGetConvolutionFilter, vFuuup) GO(glGetConvolutionParameterfv, vFuup) GO(glGetConvolutionParameteriv, vFuup) -GO(glGetHistogram, vFuiuup) +GO(glGetHistogram, vFuCuup) GO(glGetHistogramParameterfv, vFuup) GO(glGetHistogramParameteriv, vFuup) GO(glGetMinmax, vFuCuup) GO(glGetMinmaxParameterfv, vFuup) GO(glGetMinmaxParameteriv, vFuup) GO(glGetSeparableFilter, vFuuuppp) -GO(glHistogram, vFuiui) -GO(glMinmax, vFuui) +GO(glHistogram, vFuiuC) +GO(glMinmax, vFuuC) GO(glResetHistogram, vFu) GO(glResetMinmax, vFu) GO(glSeparableFilter2D, vFuuiiuupp) @@ -398,7 +399,7 @@ GO(glMultiTexCoord1f, vFuf) GO(glMultiTexCoord1fv, vFup) GO(glMultiTexCoord1i, vFui) GO(glMultiTexCoord1iv, vFup) -GO(glMultiTexCoord1s, vFui) +GO(glMultiTexCoord1s, vFuw) GO(glMultiTexCoord1sv, vFup) GO(glMultiTexCoord2d, vFudd) GO(glMultiTexCoord2dv, vFup) @@ -406,7 +407,7 @@ GO(glMultiTexCoord2f, vFuff) GO(glMultiTexCoord2fv, vFup) GO(glMultiTexCoord2i, vFuii) GO(glMultiTexCoord2iv, vFup) -GO(glMultiTexCoord2s, vFuii) +GO(glMultiTexCoord2s, vFuww) GO(glMultiTexCoord2sv, vFup) GO(glMultiTexCoord3d, vFuddd) GO(glMultiTexCoord3dv, vFup) @@ -414,7 +415,7 @@ GO(glMultiTexCoord3f, vFufff) GO(glMultiTexCoord3fv, vFup) GO(glMultiTexCoord3i, vFuiii) GO(glMultiTexCoord3iv, vFup) -GO(glMultiTexCoord3s, vFuiii) +GO(glMultiTexCoord3s, vFuwww) GO(glMultiTexCoord3sv, vFup) GO(glMultiTexCoord4d, vFudddd) GO(glMultiTexCoord4dv, vFup) @@ -422,9 +423,9 @@ GO(glMultiTexCoord4f, vFuffff) GO(glMultiTexCoord4fv, vFup) GO(glMultiTexCoord4i, vFuiiii) GO(glMultiTexCoord4iv, vFup) -GO(glMultiTexCoord4s, vFuiiii) +GO(glMultiTexCoord4s, vFuwwww) GO(glMultiTexCoord4sv, vFup) -GO(glSampleCoverage, vFfi) +GO(glSampleCoverage, vFfC) //VERSION_1_4 GO(glBlendFuncSeparate, vFuuuu) GO(glFogCoordPointer, vFuip) @@ -438,7 +439,7 @@ GO(glPointParameterf, vFuf) GO(glPointParameterfv, vFup) GO(glPointParameteri, vFui) GO(glPointParameteriv, vFup) -GO(glSecondaryColor3b, vFiii) +GO(glSecondaryColor3b, vFccc) GO(glSecondaryColor3bv, vFp) GO(glSecondaryColor3d, vFddd) GO(glSecondaryColor3dv, vFp) @@ -446,13 +447,13 @@ GO(glSecondaryColor3f, vFfff) GO(glSecondaryColor3fv, vFp) GO(glSecondaryColor3i, vFiii) GO(glSecondaryColor3iv, vFp) -GO(glSecondaryColor3s, vFiii) +GO(glSecondaryColor3s, vFwww) GO(glSecondaryColor3sv, vFp) -GO(glSecondaryColor3ub, vFuuu) +GO(glSecondaryColor3ub, vFCCC) GO(glSecondaryColor3ubv, vFp) GO(glSecondaryColor3ui, vFuuu) GO(glSecondaryColor3uiv, vFp) -GO(glSecondaryColor3us, vFuuu) +GO(glSecondaryColor3us, vFWWW) GO(glSecondaryColor3usv, vFp) GO(glSecondaryColorPointer, vFiuip) GO(glWindowPos2d, vFdd) @@ -461,7 +462,7 @@ GO(glWindowPos2f, vFff) GO(glWindowPos2fv, vFp) GO(glWindowPos2i, vFii) GO(glWindowPos2iv, vFp) -GO(glWindowPos2s, vFii) +GO(glWindowPos2s, vFww) GO(glWindowPos2sv, vFp) GO(glWindowPos3d, vFddd) GO(glWindowPos3dv, vFp) @@ -469,7 +470,7 @@ GO(glWindowPos3f, vFfff) GO(glWindowPos3fv, vFp) GO(glWindowPos3i, vFiii) GO(glWindowPos3iv, vFp) -GO(glWindowPos3s, vFiii) +GO(glWindowPos3s, vFwww) GO(glWindowPos3sv, vFp) //VERSION_1_5 GO(glBeginQuery, vFuu) @@ -487,10 +488,10 @@ GO(glGetBufferSubData, vFullp) GO(glGetQueryObjectiv, vFuup) GO(glGetQueryObjectuiv, vFuup) GO(glGetQueryiv, vFuup) -GO(glIsBuffer, iFu) -GO(glIsQuery, iFu) +GO(glIsBuffer, CFu) +GO(glIsQuery, CFu) GO(glMapBuffer, pFuu) -GO(glUnmapBuffer, iFu) +GO(glUnmapBuffer, CFu) //VERSION_2_0 GO(glAttachShader, vFuu) GO(glBindAttribLocation, vFuup) @@ -520,8 +521,8 @@ GO(glGetVertexAttribPointerv, vFuup) GO(glGetVertexAttribdv, vFuup) GO(glGetVertexAttribfv, vFuup) GO(glGetVertexAttribiv, vFuup) -GO(glIsProgram, iFu) -GO(glIsShader, iFu) +GO(glIsProgram, CFu) +GO(glIsShader, CFu) GO(glLinkProgram, vFu) GO(glShaderSource, vFuipp) GO(glStencilFuncSeparate, vFuuiu) @@ -543,33 +544,33 @@ GO(glUniform4f, vFiffff) GO(glUniform4fv, vFiip) GO(glUniform4i, vFiiiii) GO(glUniform4iv, vFiip) -GO(glUniformMatrix2fv, vFiiip) -GO(glUniformMatrix3fv, vFiiip) -GO(glUniformMatrix4fv, vFiiip) +GO(glUniformMatrix2fv, vFiiCp) +GO(glUniformMatrix3fv, vFiiCp) +GO(glUniformMatrix4fv, vFiiCp) GO(glUseProgram, vFu) GO(glValidateProgram, vFu) GO(glVertexAttrib1d, vFud) GO(glVertexAttrib1dv, vFup) GO(glVertexAttrib1f, vFuf) GO(glVertexAttrib1fv, vFup) -GO(glVertexAttrib1s, vFui) +GO(glVertexAttrib1s, vFuw) GO(glVertexAttrib1sv, vFup) GO(glVertexAttrib2d, vFudd) GO(glVertexAttrib2dv, vFup) GO(glVertexAttrib2f, vFuff) GO(glVertexAttrib2fv, vFup) -GO(glVertexAttrib2s, vFuii) +GO(glVertexAttrib2s, vFuww) GO(glVertexAttrib2sv, vFup) GO(glVertexAttrib3d, vFuddd) GO(glVertexAttrib3dv, vFup) GO(glVertexAttrib3f, vFufff) GO(glVertexAttrib3fv, vFup) -GO(glVertexAttrib3s, vFuiii) +GO(glVertexAttrib3s, vFuwww) GO(glVertexAttrib3sv, vFup) GO(glVertexAttrib4Nbv, vFup) GO(glVertexAttrib4Niv, vFup) GO(glVertexAttrib4Nsv, vFup) -GO(glVertexAttrib4Nub, vFuuuuu) +GO(glVertexAttrib4Nub, vFuCCCC) GO(glVertexAttrib4Nubv, vFup) GO(glVertexAttrib4Nuiv, vFup) GO(glVertexAttrib4Nusv, vFup) @@ -579,31 +580,31 @@ GO(glVertexAttrib4dv, vFup) GO(glVertexAttrib4f, vFuffff) GO(glVertexAttrib4fv, vFup) GO(glVertexAttrib4iv, vFup) -GO(glVertexAttrib4s, vFuiiii) +GO(glVertexAttrib4s, vFuwwww) GO(glVertexAttrib4sv, vFup) GO(glVertexAttrib4ubv, vFup) GO(glVertexAttrib4uiv, vFup) GO(glVertexAttrib4usv, vFup) -GO(glVertexAttribPointer, vFuiuiip) +GO(glVertexAttribPointer, vFuiuCip) //VERSION_2_1 -GO(glUniformMatrix2x3fv, vFiiip) -GO(glUniformMatrix2x4fv, vFiiip) -GO(glUniformMatrix3x2fv, vFiiip) -GO(glUniformMatrix3x4fv, vFiiip) -GO(glUniformMatrix4x2fv, vFiiip) -GO(glUniformMatrix4x3fv, vFiiip) +GO(glUniformMatrix2x3fv, vFiiCp) +GO(glUniformMatrix2x4fv, vFiiCp) +GO(glUniformMatrix3x2fv, vFiiCp) +GO(glUniformMatrix3x4fv, vFiiCp) +GO(glUniformMatrix4x2fv, vFiiCp) +GO(glUniformMatrix4x3fv, vFiiCp) //VERSION_3_0 GO(glBeginConditionalRender, vFuu) GO(glBeginTransformFeedback, vFu) GO(glBindBufferBase, vFuuu) -GO(glBindBufferRange, vFuuuii) +GO(glBindBufferRange, vFuuull) GO(glBindFragDataLocation, vFuup) GO(glClampColor, vFuu) GO(glClearBufferfi, vFuifi) GO(glClearBufferfv, vFuip) GO(glClearBufferiv, vFuip) GO(glClearBufferuiv, vFuip) -GO(glColorMaski, vFuiiii) +GO(glColorMaski, vFuCCCC) GO(glDisablei, vFuu) GO(glEnablei, vFuu) GO(glEndConditionalRender, vFv) @@ -618,7 +619,7 @@ GO(glGetTransformFeedbackVarying, vFuuipppp) GO(glGetUniformuiv, vFuip) GO(glGetVertexAttribIiv, vFuup) GO(glGetVertexAttribIuiv, vFuup) -GO(glIsEnabledi, iFuu) +GO(glIsEnabledi, CFuu) GO(glTexParameterIiv, vFuup) GO(glTexParameterIuiv, vFuup) GO(glTransformFeedbackVaryings, vFuipu) @@ -671,66 +672,66 @@ GO(glMinSampleShading, vFf) //VERSION_4_3 GO(glInvalidateNamedFramebuffer, vFiup) //VERSION_4_4 -GO(glBindBuffersBase, vFiuip) +GO(glBindBuffersBase, vFuuip) GO(glBindBuffersRange, vFuuippp) -GO(glBindImageTextures, vFuip) -GO(glBindSamplers, vFuip) -GO(glBindTextures, vFuip) -GO(glBindVertexBuffers, vFuippp) +GO(glBindImageTextures, vFuip) +GO(glBindSamplers, vFuip) +GO(glBindTextures, vFuip) +GO(glBindVertexBuffers, vFuippp) GO(glBufferStorage, vFulpu) GO(glClearTexImage, vFuiuup) -GO(glClearTexSubImage, vFuiiiiiiiiip) +GO(glClearTexSubImage, vFuiiiiiiiuup) //VERSION_4_5 -GO(glClipControl, vFii) -GO(glCreateTransformFeedbacks, vFlp) -GO(glTransformFeedbackBufferBase, vFuuu) +GO(glClipControl, vFuu) +GO(glCreateTransformFeedbacks, vFip) +GO(glTransformFeedbackBufferBase, vFuuu) GO(glTransformFeedbackBufferRange, vFuuull) -GO(glGetTransformFeedbackiv, vFuip) -GO(glGetTransformFeedbacki_v, vFuiup) +GO(glGetTransformFeedbackiv, vFuup) +GO(glGetTransformFeedbacki_v, vFuuup) GO(glGetTransformFeedbacki64_v, vFuuup) -GO(glCreateBuffers, vFlp) -GO(glNamedBufferStorage, vFulpu) +GO(glCreateBuffers, vFip) +GO(glNamedBufferStorage, vFulpu) GO(glNamedBufferStorageEXT, vFulpu) -GO(glNamedBufferData, vFulpi) -GO(glNamedBufferSubData, vFullp) -GO(glCopyNamedBufferSubData, vFuulll) -GO(glClearNamedBufferData, vFuiiip) +GO(glNamedBufferData, vFulpu) +GO(glNamedBufferSubData, vFullp) +GO(glCopyNamedBufferSubData, vFuulll) +GO(glClearNamedBufferData, vFuuuup) GO(glClearNamedBufferSubData, vFuulluup) -GO(glMapNamedBuffer, pFui) +GO(glMapNamedBuffer, pFuu) GO(glMapNamedBufferRange, pFullu) -GO(glUnmapNamedBuffer, iFu) +GO(glUnmapNamedBuffer, CFu) GO(glFlushMappedNamedBufferRange, vFull) -GO(glGetNamedBufferParameteriv, vFuip) -GO(glGetNamedBufferParameteri64v, vFuip) -GO(glGetNamedBufferPointerv, vFuip) +GO(glGetNamedBufferParameteriv, vFuup) +GO(glGetNamedBufferParameteri64v, vFuup) +GO(glGetNamedBufferPointerv, vFuup) GO(glGetNamedBufferSubData, vFullp) -GO(glCreateFramebuffers, vFlp) -GO(glNamedFramebufferRenderbuffer, vFuiiu) -GO(glNamedFramebufferParameteri, vFuii) -GO(glNamedFramebufferTexture, vFuiui) -GO(glNamedFramebufferTextureLayer, vFuiuii) -GO(glNamedFramebufferDrawBuffer, vFui) -GO(glNamedFramebufferDrawBuffers, vFulp) -GO(glNamedFramebufferReadBuffer, vFui) -GO(glInvalidateNamedFramebufferData, vFulp) +GO(glCreateFramebuffers, vFip) +GO(glNamedFramebufferRenderbuffer, vFuuuu) +GO(glNamedFramebufferParameteri, vFuui) +GO(glNamedFramebufferTexture, vFuuui) +GO(glNamedFramebufferTextureLayer, vFuuuii) +GO(glNamedFramebufferDrawBuffer, vFuu) +GO(glNamedFramebufferDrawBuffers, vFuip) +GO(glNamedFramebufferReadBuffer, vFuu) +GO(glInvalidateNamedFramebufferData, vFuip) GO(glInvalidateNamedFramebufferSubData, vFuipiiii) GO(glClearNamedFramebufferiv, vFuuip) GO(glClearNamedFramebufferuiv, vFuuip) GO(glClearNamedFramebufferfv, vFuuip) GO(glClearNamedFramebufferfi, vFuuifi) -GO(glBlitNamedFramebuffer, vFuuiiiiiiiiui) -GO(glCheckNamedFramebufferStatus, iFui) -GO(glGetNamedFramebufferParameteriv, vFuip) -GO(glGetNamedFramebufferAttachmentParameteriv, vFuiip) -GO(glCreateRenderbuffers, vFlp) -GO(glNamedRenderbufferStorage, vFuill) -GO(glNamedRenderbufferStorageMultisample, vFulill) -GO(glGetNamedRenderbufferParameteriv, vFuip) -GO(glCreateTextures, vFilp) -GO(glTextureBuffer, vFuiu) +GO(glBlitNamedFramebuffer, vFuuiiiiiiiiuu) +GO(glCheckNamedFramebufferStatus, uFuu) +GO(glGetNamedFramebufferParameteriv, vFuup) +GO(glGetNamedFramebufferAttachmentParameteriv, vFuuup) +GO(glCreateRenderbuffers, vFip) +GO(glNamedRenderbufferStorage, vFuuii) +GO(glNamedRenderbufferStorageMultisample, vFuiuii) +GO(glGetNamedRenderbufferParameteriv, vFuup) +GO(glCreateTextures, vFuip) +GO(glTextureBuffer, vFuuu) GO(glTextureBufferRange, vFuuull) GO(glTextureStorage1D, vFuiui) -GO(glTextureStorage2D, vFulill) +GO(glTextureStorage2D, vFuiuii) GO(glTextureStorage3D, vFuiuiii) GO(glTextureStorage2DMultisample, vFuiuiiC) GO(glTextureStorage3DMultisample, vFuiuiiiC) @@ -743,56 +744,56 @@ GO(glCompressedTextureSubImage3D, vFuiiiiiiiuip) GO(glCopyTextureSubImage1D, vFuiiiii) GO(glCopyTextureSubImage2D, vFuiiiiiii) GO(glCopyTextureSubImage3D, vFuiiiiiiii) -GO(glTextureParameterf, vFuif) -GO(glTextureParameterfv, vFuip) -GO(glTextureParameteri, vFuii) -GO(glTextureParameterIiv, vFuip) +GO(glTextureParameterf, vFuuf) +GO(glTextureParameterfv, vFuup) +GO(glTextureParameteri, vFuui) +GO(glTextureParameterIiv, vFuup) GO(glTextureParameterIuiv, vFuup) -GO(glTextureParameteriv, vFuip) +GO(glTextureParameteriv, vFuup) GO(glGenerateTextureMipmap, vFu) GO(glBindTextureUnit, vFuu) GO(glGetTextureImage, vFuiuuip) GO(glGetCompressedTextureImage, vFuiip) GO(glGetTextureLevelParameterfv, vFuiup) GO(glGetTextureLevelParameteriv, vFuiup) -GO(glGetTextureParameterfv, vFuip) -GO(glGetTextureParameterIiv, vFuip) -GO(glGetTextureParameterIuiv, vFuip) -GO(glGetTextureParameteriv, vFuip) -GO(glCreateVertexArrays, vFlp) +GO(glGetTextureParameterfv, vFuup) +GO(glGetTextureParameterIiv, vFuup) +GO(glGetTextureParameterIuiv, vFuup) +GO(glGetTextureParameteriv, vFuup) +GO(glCreateVertexArrays, vFip) GO(glDisableVertexArrayAttrib, vFuu) GO(glEnableVertexArrayAttrib, vFuu) GO(glVertexArrayElementBuffer, vFuu) -GO(glVertexArrayVertexBuffer, vFuuull) +GO(glVertexArrayVertexBuffer, vFuuuli) GO(glVertexArrayVertexBuffers, vFuuippp) GO(glVertexArrayAttribBinding, vFuuu) -GO(glVertexArrayAttribFormat, vFuuiiiu) -GO(glVertexArrayAttribIFormat, vFuuiiu) -GO(glVertexArrayAttribLFormat, vFuuiiu) +GO(glVertexArrayAttribFormat, vFuuiuCu) +GO(glVertexArrayAttribIFormat, vFuuiuu) +GO(glVertexArrayAttribLFormat, vFuuiuu) GO(glVertexArrayBindingDivisor, vFuuu) -GO(glGetVertexArrayiv, vFuip) -GO(glGetVertexArrayIndexediv, vFuuip) -GO(glGetVertexArrayIndexed64iv, vFuuip) -GO(glCreateSamplers, vFlp) +GO(glGetVertexArrayiv, vFuup) +GO(glGetVertexArrayIndexediv, vFuuup) +GO(glGetVertexArrayIndexed64iv, vFuuup) +GO(glCreateSamplers, vFip) GO(glCreateProgramPipelines, vFip) GO(glTextureBarrier, vFv) GO(glTextureParameteriiv, vFuip) GO(glTextureParameteriuiv, vFuip) -GO(glCreateQueries, vFilp) -GO(glGetQueryBufferObjecti64v, vFuuil) -GO(glGetQueryBufferObjectiv, vFuuil) -GO(glGetQueryBufferObjectui64v, vFuuil) +GO(glCreateQueries, vFuip) +GO(glGetQueryBufferObjecti64v, vFuuul) +GO(glGetQueryBufferObjectiv, vFuuul) +GO(glGetQueryBufferObjectui64v, vFuuul) GO(glGetQueryBufferObjectuiv, vFuuul) GO(glMemoryBarrierByRegion, vFu) GO(glGetTextureSubImage, vFuiiiiiiiuuip) GO(glGetCompressedTextureSubImage, vFuiiiiiiiip) -GO(glGetGraphicsResetStatus, iFv) -GO(glGetnUniformfv, vFuilp) -GO(glGetnUniformiv, vFuilp) -GO(glGetnUniformuiv, vFuilp) -GO(glReadnPixels, vFiilluulp) +GO(glGetGraphicsResetStatus, uFv) +GO(glGetnUniformfv, vFuiip) +GO(glGetnUniformiv, vFuiip) +GO(glGetnUniformuiv, vFuiip) +GO(glReadnPixels, vFiiiiuuip) //VERSION_4_6 -GO(glSpecializeShader, vFippp) +GO(glSpecializeShader, vFupupp) GO(glTexturePageCommitmentEXT, vFuiiiiiiiC) GO(glVertexArrayVertexAttribDivisorEXT, vFuuu) @@ -816,7 +817,7 @@ GO(glMultiDrawElementsIndirectAMD, vFuupii) //AMD_name_gen_delete GO(glDeleteNamesAMD, vFuup) GO(glGenNamesAMD, vFuup) -GO(glIsNameAMD, iFuu) +GO(glIsNameAMD, CFuu) //AMD_performance_monitor GO(glBeginPerfMonitorAMD, vFu) GO(glDeletePerfMonitorsAMD, vFip) @@ -850,10 +851,10 @@ GO(glDeleteFencesAPPLE, vFip) GO(glFinishFenceAPPLE, vFu) GO(glFinishObjectAPPLE, vFui) GO(glGenFencesAPPLE, vFip) -GO(glIsFenceAPPLE, iFu) +GO(glIsFenceAPPLE, CFu) GO(glSetFenceAPPLE, vFu) -GO(glTestFenceAPPLE, iFu) -GO(glTestObjectAPPLE, iFuu) +GO(glTestFenceAPPLE, CFu) +GO(glTestObjectAPPLE, CFuu) //APPLE_flush_buffer_range GO(glBufferParameteriAPPLE, vFuui) GO(glFlushMappedBufferRangeAPPLE, vFull) @@ -868,7 +869,7 @@ GO(glTextureRangeAPPLE, vFuip) GO(glBindVertexArrayAPPLE, vFu) GO(glDeleteVertexArraysAPPLE, vFip) GO(glGenVertexArraysAPPLE, vFip) -GO(glIsVertexArrayAPPLE, iFu) +GO(glIsVertexArrayAPPLE, CFu) //APPLE_vertex_array_range GO(glFlushVertexArrayRangeAPPLE, vFip) GO(glVertexArrayParameteriAPPLE, vFui) @@ -876,7 +877,7 @@ GO(glVertexArrayRangeAPPLE, vFip) //APPLE_vertex_program_evaluators GO(glDisableVertexAttribAPPLE, vFuu) GO(glEnableVertexAttribAPPLE, vFuu) -GO(glIsVertexAttribEnabledAPPLE, iFuu) +GO(glIsVertexAttribEnabledAPPLE, CFuu) GO(glMapVertexAttrib1dAPPLE, vFuuddiip) GO(glMapVertexAttrib1fAPPLE, vFuuffiip) GO(glMapVertexAttrib2dAPPLE, vFuuddiiddiip) @@ -905,7 +906,7 @@ GO(glClearNamedBufferSubDataEXT, vFuulluup) GO(glClampColorARB, vFuu) //ARB_compute_shader GO(glDispatchCompute, vFuuu) -GO(glDispatchComputeIndirect, vFi) +GO(glDispatchComputeIndirect, vFl) //ARB_copy_buffer GO(glCopyBufferSubData, vFuulll) //ARB_copy_image @@ -941,7 +942,7 @@ GO(glNamedFramebufferParameteriEXT, vFuui) //ARB_framebuffer_object GO(glBindFramebuffer, vFuu) GO(glBindRenderbuffer, vFuu) -GO(glBlitFramebuffer, vFiiiiiiiiiu) +GO(glBlitFramebuffer, vFiiiiiiiiuu) GO(glCheckFramebufferStatus, uFu) GO(glDeleteFramebuffers, vFip) GO(glDeleteRenderbuffers, vFip) @@ -955,8 +956,8 @@ GO(glGenRenderbuffers, vFip) GO(glGenerateMipmap, vFu) GO(glGetFramebufferAttachmentParameteriv, vFuuup) GO(glGetRenderbufferParameteriv, vFuup) -GO(glIsFramebuffer, iFu) -GO(glIsRenderbuffer, iFu) +GO(glIsFramebuffer, CFu) +GO(glIsRenderbuffer, CFu) GO(glRenderbufferStorage, vFuuii) GO(glRenderbufferStorageMultisample, vFuiuii) //ARB_geometry_shader4 @@ -978,14 +979,14 @@ GO(glUniform3d, vFiddd) GO(glUniform3dv, vFiip) GO(glUniform4d, vFidddd) GO(glUniform4dv, vFiip) -GO(glUniformMatrix2dv, vFiiip) -GO(glUniformMatrix2x3dv, vFiiip) -GO(glUniformMatrix2x4dv, vFiiip) -GO(glUniformMatrix3dv, vFiiip) -GO(glUniformMatrix3x2dv, vFiiip) -GO(glUniformMatrix3x4dv, vFiiip) -GO(glUniformMatrix4dv, vFiiip) -GO(glUniformMatrix4x2dv, vFiiip) +GO(glUniformMatrix2dv, vFiiCp) +GO(glUniformMatrix2x3dv, vFiiCp) +GO(glUniformMatrix2x4dv, vFiiCp) +GO(glUniformMatrix3dv, vFiiCp) +GO(glUniformMatrix3x2dv, vFiiCp) +GO(glUniformMatrix3x4dv, vFiiCp) +GO(glUniformMatrix4dv, vFiiCp) +GO(glUniformMatrix4x2dv, vFiiCp) GO(glUniformMatrix4x3dv, vFiiCp) //ARB_instanced_arrays GO(glVertexAttribDivisorARB, vFuu) @@ -995,7 +996,7 @@ GO(glGetInternalformativ, vFuuuip) GO(glGetInternalformati64v, vFuuuip) //ARB_invalidate_subdata GO(glInvalidateBufferData, vFu) -GO(glInvalidateBufferSubData, vFuii) +GO(glInvalidateBufferSubData, vFull) GO(glInvalidateFramebuffer, vFuip) GO(glInvalidateSubFramebuffer, vFuipiiii) GO(glInvalidateTexImage, vFui) @@ -1023,7 +1024,7 @@ GO(glMultiTexCoord1fARB, vFuf) GO(glMultiTexCoord1fvARB, vFup) GO(glMultiTexCoord1iARB, vFui) GO(glMultiTexCoord1ivARB, vFup) -GO(glMultiTexCoord1sARB, vFui) +GO(glMultiTexCoord1sARB, vFuw) GO(glMultiTexCoord1svARB, vFup) GO(glMultiTexCoord2dARB, vFudd) GO(glMultiTexCoord2dvARB, vFup) @@ -1031,7 +1032,7 @@ GO(glMultiTexCoord2fARB, vFuff) GO(glMultiTexCoord2fvARB, vFup) GO(glMultiTexCoord2iARB, vFuii) GO(glMultiTexCoord2ivARB, vFup) -GO(glMultiTexCoord2sARB, vFuii) +GO(glMultiTexCoord2sARB, vFuww) GO(glMultiTexCoord2svARB, vFup) GO(glMultiTexCoord3dARB, vFuddd) GO(glMultiTexCoord3dvARB, vFup) @@ -1039,7 +1040,7 @@ GO(glMultiTexCoord3fARB, vFufff) GO(glMultiTexCoord3fvARB, vFup) GO(glMultiTexCoord3iARB, vFuiii) GO(glMultiTexCoord3ivARB, vFup) -GO(glMultiTexCoord3sARB, vFuiii) +GO(glMultiTexCoord3sARB, vFuwww) GO(glMultiTexCoord3svARB, vFup) GO(glMultiTexCoord4dARB, vFudddd) GO(glMultiTexCoord4dvARB, vFup) @@ -1047,7 +1048,7 @@ GO(glMultiTexCoord4fARB, vFuffff) GO(glMultiTexCoord4fvARB, vFup) GO(glMultiTexCoord4iARB, vFuiiii) GO(glMultiTexCoord4ivARB, vFup) -GO(glMultiTexCoord4sARB, vFuiiii) +GO(glMultiTexCoord4sARB, vFuwwww) GO(glMultiTexCoord4svARB, vFup) //ARB_occlusion_query GO(glBeginQueryARB, vFuu) @@ -1057,7 +1058,7 @@ GO(glGenQueriesARB, vFip) GO(glGetQueryObjectivARB, vFuup) GO(glGetQueryObjectuivARB, vFuup) GO(glGetQueryivARB, vFuup) -GO(glIsQueryARB, iFu) +GO(glIsQueryARB, CFu) //ARB_point_parameters GO(glPointParameterfARB, vFuf) GO(glPointParameterfvARB, vFup) @@ -1075,7 +1076,7 @@ GO(glGetGraphicsResetStatusARB, uFv) GO(glGetnColorTableARB, vFuuuip) GO(glGetnCompressedTexImageARB, vFuiip) GO(glGetnConvolutionFilterARB, vFuuuip) -GO(glGetnHistogramARB, vFuiuuip) +GO(glGetnHistogramARB, vFuCuuip) GO(glGetnMapdvARB, vFuuip) GO(glGetnMapfvARB, vFuuip) GO(glGetnMapivARB, vFuuip) @@ -1101,7 +1102,7 @@ GO(glGetSamplerParameterIiv, vFuup) GO(glGetSamplerParameterIuiv, vFuup) GO(glGetSamplerParameterfv, vFuup) GO(glGetSamplerParameteriv, vFuup) -GO(glIsSampler, iFu) +GO(glIsSampler, CFu) GO(glSamplerParameterIiv, vFuup) GO(glSamplerParameterIuiv, vFuup) GO(glSamplerParameterf, vFuuf) @@ -1116,7 +1117,7 @@ GO(glDeleteProgramPipelines, vFip) GO(glGenProgramPipelines, vFip) GO(glGetProgramPipelineInfoLog, vFuipp) GO(glGetProgramPipelineiv, vFuup) -GO(glIsProgramPipeline, iFu) +GO(glIsProgramPipeline, CFu) GO(glProgramUniform1d, vFuid) GO(glProgramUniform1dv, vFuiip) GO(glProgramUniform1f, vFuif) @@ -1149,31 +1150,31 @@ GO(glProgramUniform4i, vFuiiiii) GO(glProgramUniform4iv, vFuiip) GO(glProgramUniform4ui, vFuiuuuu) GO(glProgramUniform4uiv, vFuiip) -GO(glProgramUniformMatrix2dv, vFuiiip) -GO(glProgramUniformMatrix2fv, vFuiiip) -GO(glProgramUniformMatrix2x3dv, vFuiiip) -GO(glProgramUniformMatrix2x3fv, vFuiiip) -GO(glProgramUniformMatrix2x4dv, vFuiiip) -GO(glProgramUniformMatrix2x4fv, vFuiiip) -GO(glProgramUniformMatrix3dv, vFuiiip) -GO(glProgramUniformMatrix3fv, vFuiiip) -GO(glProgramUniformMatrix3x2dv, vFuiiip) -GO(glProgramUniformMatrix3x2fv, vFuiiip) -GO(glProgramUniformMatrix3x4dv, vFuiiip) -GO(glProgramUniformMatrix3x4fv, vFuiiip) -GO(glProgramUniformMatrix4dv, vFuiiip) -GO(glProgramUniformMatrix4fv, vFuiiip) -GO(glProgramUniformMatrix4x2dv, vFuiiip) -GO(glProgramUniformMatrix4x2fv, vFuiiip) -GO(glProgramUniformMatrix4x3dv, vFuiiip) -GO(glProgramUniformMatrix4x3fv, vFuiiip) +GO(glProgramUniformMatrix2dv, vFuiiCp) +GO(glProgramUniformMatrix2fv, vFuiiCp) +GO(glProgramUniformMatrix2x3dv, vFuiiCp) +GO(glProgramUniformMatrix2x3fv, vFuiiCp) +GO(glProgramUniformMatrix2x4dv, vFuiiCp) +GO(glProgramUniformMatrix2x4fv, vFuiiCp) +GO(glProgramUniformMatrix3dv, vFuiiCp) +GO(glProgramUniformMatrix3fv, vFuiiCp) +GO(glProgramUniformMatrix3x2dv, vFuiiCp) +GO(glProgramUniformMatrix3x2fv, vFuiiCp) +GO(glProgramUniformMatrix3x4dv, vFuiiCp) +GO(glProgramUniformMatrix3x4fv, vFuiiCp) +GO(glProgramUniformMatrix4dv, vFuiiCp) +GO(glProgramUniformMatrix4fv, vFuiiCp) +GO(glProgramUniformMatrix4x2dv, vFuiiCp) +GO(glProgramUniformMatrix4x2fv, vFuiiCp) +GO(glProgramUniformMatrix4x3dv, vFuiiCp) +GO(glProgramUniformMatrix4x3fv, vFuiiCp) GO(glUseProgramStages, vFuuu) GO(glValidateProgramPipeline, vFu) //ARB_shader_atomic_counters GO(glGetActiveAtomicCounterBufferiv, vFuuup) //ARB_shader_image_load_store GO(glBindImageTexture, vFuuiCiuu) -GO(glMemoryBarrier, vFi) +GO(glMemoryBarrier, vFu) //ARB_shader_objects GO(glAttachObjectARB, vFuu) GO(glCompileShaderARB, vFu) @@ -1209,8 +1210,8 @@ GO(glUniform4fARB, vFiffff) GO(glUniform4fvARB, vFiip) GO(glUniform4iARB, vFiiiii) GO(glUniform4ivARB, vFiip) -GO(glUniformMatrix2fvARB, vFiiip) -GO(glUniformMatrix3fvARB, vFiiip) +GO(glUniformMatrix2fvARB, vFiiCp) +GO(glUniformMatrix3fvARB, vFiiCp) GO(glUniformMatrix4fvARB, vFiiCp) GO(glUseProgramObjectARB, vFu) GO(glValidateProgramARB, vFu) @@ -1233,13 +1234,13 @@ GO(glGetNamedStringivARB, vFipup) GO(glIsNamedStringARB, CFip) GO(glNamedStringARB, vFuipip) //ARB_sync -GO(glClientWaitSync, uFpuL) +GO(glClientWaitSync, uFpuU) GO(glDeleteSync, vFp) GO(glFenceSync, pFuu) GO(glGetInteger64v, vFup) GO(glGetSynciv, vFpuipp) GO(glIsSync, CFp) -GO(glWaitSync, vFpuL) +GO(glWaitSync, vFpuU) //ARB_tessellation_shader GO(glPatchParameterfv, vFup) GO(glPatchParameteri, vFui) @@ -1258,9 +1259,9 @@ GO(glCompressedTexSubImage3DARB, vFuiiiiiiiuip) GO(glGetCompressedTexImageARB, vFuip) //ARB_texture_multisample GO(glGetMultisamplefv, vFuup) -GO(glSampleMaski, vFui) -GO(glTexImage2DMultisample, vFuiiiii) -GO(glTexImage3DMultisample, vFuiiiiii) +GO(glSampleMaski, vFuu) +GO(glTexImage2DMultisample, vFuiuiiC) +GO(glTexImage3DMultisample, vFuiuiiiC) //ARB_texture_storage GO(glTexStorage1D, vFuiui) GO(glTexStorage2D, vFuiuii) @@ -1284,7 +1285,7 @@ GO(glBindTransformFeedback, vFuu) GO(glDeleteTransformFeedbacks, vFip) GO(glDrawTransformFeedback, vFuu) GO(glGenTransformFeedbacks, vFip) -GO(glIsTransformFeedback, iFu) +GO(glIsTransformFeedback, CFu) GO(glPauseTransformFeedback, vFv) GO(glResumeTransformFeedback, vFv) //ARB_transform_feedback3 @@ -1312,7 +1313,7 @@ GO(glUniformBlockBinding, vFuuu) GO(glBindVertexArray, vFu) GO(glDeleteVertexArrays, vFip) GO(glGenVertexArrays, vFip) -GO(glIsVertexArray, iFu) +GO(glIsVertexArray, CFu) //ARB_vertex_attrib_64bit GO(glGetVertexAttribLdv, vFuup) GO(glVertexAttribL1d, vFud) @@ -1357,9 +1358,9 @@ GO(glGenBuffersARB, vFip) GO(glGetBufferParameterivARB, vFuup) GO(glGetBufferPointervARB, vFuup) GO(glGetBufferSubDataARB, vFullp) -GO(glIsBufferARB, iFu) +GO(glIsBufferARB, CFu) GO(glMapBufferARB, pFuu) -GO(glUnmapBufferARB, iFu) +GO(glUnmapBufferARB, CFu) //ARB_vertex_program GO(glBindProgramARB, vFuu) GO(glDeleteProgramsARB, vFip) @@ -1376,7 +1377,7 @@ GO(glGetVertexAttribPointervARB, vFuup) GO(glGetVertexAttribdvARB, vFuup) GO(glGetVertexAttribfvARB, vFuup) GO(glGetVertexAttribivARB, vFuup) -GO(glIsProgramARB, iFu) +GO(glIsProgramARB, CFu) GO(glProgramEnvParameter4dARB, vFuudddd) GO(glProgramEnvParameter4dvARB, vFuup) GO(glProgramEnvParameter4fARB, vFuuffff) @@ -1390,24 +1391,24 @@ GO(glVertexAttrib1dARB, vFud) GO(glVertexAttrib1dvARB, vFup) GO(glVertexAttrib1fARB, vFuf) GO(glVertexAttrib1fvARB, vFup) -GO(glVertexAttrib1sARB, vFui) +GO(glVertexAttrib1sARB, vFuw) GO(glVertexAttrib1svARB, vFup) GO(glVertexAttrib2dARB, vFudd) GO(glVertexAttrib2dvARB, vFup) GO(glVertexAttrib2fARB, vFuff) GO(glVertexAttrib2fvARB, vFup) -GO(glVertexAttrib2sARB, vFuii) +GO(glVertexAttrib2sARB, vFuww) GO(glVertexAttrib2svARB, vFup) GO(glVertexAttrib3dARB, vFuddd) GO(glVertexAttrib3dvARB, vFup) GO(glVertexAttrib3fARB, vFufff) GO(glVertexAttrib3fvARB, vFup) -GO(glVertexAttrib3sARB, vFuiii) +GO(glVertexAttrib3sARB, vFuwww) GO(glVertexAttrib3svARB, vFup) GO(glVertexAttrib4NbvARB, vFup) GO(glVertexAttrib4NivARB, vFup) GO(glVertexAttrib4NsvARB, vFup) -GO(glVertexAttrib4NubARB, vFuuuuu) +GO(glVertexAttrib4NubARB, vFuCCCC) GO(glVertexAttrib4NubvARB, vFup) GO(glVertexAttrib4NuivARB, vFup) GO(glVertexAttrib4NusvARB, vFup) @@ -1417,7 +1418,7 @@ GO(glVertexAttrib4dvARB, vFup) GO(glVertexAttrib4fARB, vFuffff) GO(glVertexAttrib4fvARB, vFup) GO(glVertexAttrib4ivARB, vFup) -GO(glVertexAttrib4sARB, vFuiiii) +GO(glVertexAttrib4sARB, vFuwwww) GO(glVertexAttrib4svARB, vFup) GO(glVertexAttrib4ubvARB, vFup) GO(glVertexAttrib4uivARB, vFup) @@ -1452,12 +1453,12 @@ GO(glTexCoordP3ui, vFuu) GO(glTexCoordP3uiv, vFup) GO(glTexCoordP4ui, vFuu) GO(glTexCoordP4uiv, vFup) -GO(glVertexAttribP1ui, vFuuiu) -GO(glVertexAttribP1uiv, vFuuip) -GO(glVertexAttribP2ui, vFuuiu) -GO(glVertexAttribP2uiv, vFuuip) -GO(glVertexAttribP3ui, vFuuiu) -GO(glVertexAttribP3uiv, vFuuip) +GO(glVertexAttribP1ui, vFuuCu) +GO(glVertexAttribP1uiv, vFuuCp) +GO(glVertexAttribP2ui, vFuuCu) +GO(glVertexAttribP2uiv, vFuuCp) +GO(glVertexAttribP3ui, vFuuCu) +GO(glVertexAttribP3uiv, vFuuCp) GO(glVertexAttribP4ui, vFuuCu) GO(glVertexAttribP4uiv, vFuuCp) GO(glVertexP2ui, vFuu) @@ -1484,7 +1485,7 @@ GO(glWindowPos2fARB, vFff) GO(glWindowPos2fvARB, vFp) GO(glWindowPos2iARB, vFii) GO(glWindowPos2ivARB, vFp) -GO(glWindowPos2sARB, vFii) +GO(glWindowPos2sARB, vFww) GO(glWindowPos2svARB, vFp) GO(glWindowPos3dARB, vFddd) GO(glWindowPos3dvARB, vFp) @@ -1492,7 +1493,7 @@ GO(glWindowPos3fARB, vFfff) GO(glWindowPos3fvARB, vFp) GO(glWindowPos3iARB, vFiii) GO(glWindowPos3ivARB, vFp) -GO(glWindowPos3sARB, vFiii) +GO(glWindowPos3sARB, vFwww) GO(glWindowPos3svARB, vFp) //ATI_draw_buffers GO(glDrawBuffersATI, vFip) @@ -1538,7 +1539,7 @@ GO(glGetObjectBufferfvATI, vFuup) GO(glGetObjectBufferivATI, vFuup) GO(glGetVariantArrayObjectfvATI, vFuup) GO(glGetVariantArrayObjectivATI, vFuup) -GO(glIsObjectBufferATI, iFu) +GO(glIsObjectBufferATI, CFu) GO(glNewObjectBufferATI, uFipu) GO(glUpdateObjectBufferATI, vFuuipu) GO(glVariantArrayObjectATI, vFuuiuu) @@ -1582,7 +1583,7 @@ GO(glVertexStream3fATI, vFufff) GO(glVertexStream3fvATI, vFup) GO(glVertexStream3iATI, vFuiii) GO(glVertexStream3ivATI, vFup) -GO(glVertexStream3sATI, vFuiii) +GO(glVertexStream3sATI, vFuwww) GO(glVertexStream3svATI, vFup) GO(glVertexStream4dATI, vFudddd) GO(glVertexStream4dvATI, vFup) @@ -1625,7 +1626,7 @@ GO(glGetConvolutionParameterivEXT, vFuup) GO(glGetSeparableFilterEXT, vFuuuppp) GO(glSeparableFilter2DEXT, vFuuiiuupp) //EXT_coordinate_frame -GO(glBinormal3bEXT, vFiii) +GO(glBinormal3bEXT, vFccc) GO(glBinormal3bvEXT, vFp) GO(glBinormal3dEXT, vFddd) GO(glBinormal3dvEXT, vFp) @@ -1633,10 +1634,10 @@ GO(glBinormal3fEXT, vFfff) GO(glBinormal3fvEXT, vFp) GO(glBinormal3iEXT, vFiii) GO(glBinormal3ivEXT, vFp) -GO(glBinormal3sEXT, vFiii) +GO(glBinormal3sEXT, vFwww) GO(glBinormal3svEXT, vFp) GO(glBinormalPointerEXT, vFuip) -GO(glTangent3bEXT, vFiii) +GO(glTangent3bEXT, vFccc) GO(glTangent3bvEXT, vFp) GO(glTangent3dEXT, vFddd) GO(glTangent3dvEXT, vFp) @@ -1644,7 +1645,7 @@ GO(glTangent3fEXT, vFfff) GO(glTangent3fvEXT, vFp) GO(glTangent3iEXT, vFiii) GO(glTangent3ivEXT, vFp) -GO(glTangent3sEXT, vFiii) +GO(glTangent3sEXT, vFwww) GO(glTangent3svEXT, vFp) GO(glTangentPointerEXT, vFuip) //EXT_copy_texture @@ -1661,7 +1662,7 @@ GO(glDepthBoundsEXT, vFdd) //EXT_direct_state_access GO(glBindMultiTextureEXT, vFuuu) GO(glCheckNamedFramebufferStatusEXT, uFuu) -GO(glClientAttribDefaultEXT, vFi) +GO(glClientAttribDefaultEXT, vFu) GO(glCompressedMultiTexImage1DEXT, vFuuiuiiip) GO(glCompressedMultiTexImage2DEXT, vFuuiuiiiip) GO(glCompressedMultiTexImage3DEXT, vFuuiuiiiiip) @@ -1844,25 +1845,25 @@ GO(glProgramUniform4iEXT, vFuiiiii) GO(glProgramUniform4ivEXT, vFuiip) GO(glProgramUniform4uiEXT, vFuiuuuu) GO(glProgramUniform4uivEXT, vFuiip) -GO(glProgramUniformMatrix2dvEXT, vFuiiip) -GO(glProgramUniformMatrix2fvEXT, vFuiiip) -GO(glProgramUniformMatrix2x3dvEXT, vFuiiip) -GO(glProgramUniformMatrix2x3fvEXT, vFuiiip) -GO(glProgramUniformMatrix2x4dvEXT, vFuiiip) -GO(glProgramUniformMatrix2x4fvEXT, vFuiiip) -GO(glProgramUniformMatrix3dvEXT, vFuiiip) -GO(glProgramUniformMatrix3fvEXT, vFuiiip) -GO(glProgramUniformMatrix3x2dvEXT, vFuiiip) -GO(glProgramUniformMatrix3x2fvEXT, vFuiiip) -GO(glProgramUniformMatrix3x4dvEXT, vFuiiip) -GO(glProgramUniformMatrix3x4fvEXT, vFuiiip) -GO(glProgramUniformMatrix4dvEXT, vFuiiip) -GO(glProgramUniformMatrix4fvEXT, vFuiiip) -GO(glProgramUniformMatrix4x2dvEXT, vFuiiip) -GO(glProgramUniformMatrix4x2fvEXT, vFuiiip) +GO(glProgramUniformMatrix2dvEXT, vFuiiCp) +GO(glProgramUniformMatrix2fvEXT, vFuiiCp) +GO(glProgramUniformMatrix2x3dvEXT, vFuiiCp) +GO(glProgramUniformMatrix2x3fvEXT, vFuiiCp) +GO(glProgramUniformMatrix2x4dvEXT, vFuiiCp) +GO(glProgramUniformMatrix2x4fvEXT, vFuiiCp) +GO(glProgramUniformMatrix3dvEXT, vFuiiCp) +GO(glProgramUniformMatrix3fvEXT, vFuiiCp) +GO(glProgramUniformMatrix3x2dvEXT, vFuiiCp) +GO(glProgramUniformMatrix3x2fvEXT, vFuiiCp) +GO(glProgramUniformMatrix3x4dvEXT, vFuiiCp) +GO(glProgramUniformMatrix3x4fvEXT, vFuiiCp) +GO(glProgramUniformMatrix4dvEXT, vFuiiCp) +GO(glProgramUniformMatrix4fvEXT, vFuiiCp) +GO(glProgramUniformMatrix4x2dvEXT, vFuiiCp) +GO(glProgramUniformMatrix4x2fvEXT, vFuiiCp) GO(glProgramUniformMatrix4x3dvEXT, vFuiiCp) GO(glProgramUniformMatrix4x3fvEXT, vFuiiCp) -GO(glPushClientAttribDefaultEXT, vFi) +GO(glPushClientAttribDefaultEXT, vFu) GO(glTextureBufferEXT, vFuuuu) GO(glTextureImage1DEXT, vFuuiiiiuup) GO(glTextureImage2DEXT, vFuuiiiiiuup) @@ -1877,18 +1878,18 @@ GO(glTextureRenderbufferEXT, vFuuu) GO(glTextureSubImage1DEXT, vFuuiiiuup) GO(glTextureSubImage2DEXT, vFuuiiiiiuup) GO(glTextureSubImage3DEXT, vFuuiiiiiiiuup) -GO(glUnmapNamedBufferEXT, iFu) -GO(glVertexArrayColorOffsetEXT, vFuuiuii) +GO(glUnmapNamedBufferEXT, CFu) +GO(glVertexArrayColorOffsetEXT, vFuuiuil) GO(glVertexArrayEdgeFlagOffsetEXT, vFuuil) GO(glVertexArrayFogCoordOffsetEXT, vFuuuil) -GO(glVertexArrayIndexOffsetEXT, vFuuuii) +GO(glVertexArrayIndexOffsetEXT, vFuuuil) GO(glVertexArrayMultiTexCoordOffsetEXT, vFuuuiuil) -GO(glVertexArrayNormalOffsetEXT, vFuuuii) +GO(glVertexArrayNormalOffsetEXT, vFuuuil) GO(glVertexArraySecondaryColorOffsetEXT, vFuuiuil) -GO(glVertexArrayTexCoordOffsetEXT, vFuuiuii) -GO(glVertexArrayVertexAttribIOffsetEXT, vFuuuiuii) +GO(glVertexArrayTexCoordOffsetEXT, vFuuiuil) +GO(glVertexArrayVertexAttribIOffsetEXT, vFuuuiuil) GO(glVertexArrayVertexAttribOffsetEXT, vFuuuiuCil) -GO(glVertexArrayVertexOffsetEXT, vFuuiuii) +GO(glVertexArrayVertexOffsetEXT, vFuuiuil) //EXT_draw_buffers2 GO(glColorMaskIndexedEXT, vFuCCCC) GO(glDisableIndexedEXT, vFuu) @@ -1924,8 +1925,8 @@ GO(glGenRenderbuffersEXT, vFip) GO(glGenerateMipmapEXT, vFu) GO(glGetFramebufferAttachmentParameterivEXT, vFuuup) GO(glGetRenderbufferParameterivEXT, vFuup) -GO(glIsFramebufferEXT, iFu) -GO(glIsRenderbufferEXT, iFu) +GO(glIsFramebufferEXT, CFu) +GO(glIsRenderbufferEXT, CFu) GO(glRenderbufferStorageEXT, vFuuii) //EXT_geometry_shader4 GO(glProgramParameteriEXT, vFuui) @@ -1945,7 +1946,7 @@ GO(glUniform3uivEXT, vFiip) GO(glUniform4uiEXT, vFiuuuu) GO(glUniform4uivEXT, vFiip) //EXT_histogram -GO(glGetHistogramEXT, vFuiuup) +GO(glGetHistogramEXT, vFuCuup) GO(glGetHistogramParameterfvEXT, vFuup) GO(glGetHistogramParameterivEXT, vFuup) GO(glGetMinmaxEXT, vFuCuup) @@ -1967,7 +1968,7 @@ GO(glTextureMaterialEXT, vFuu) GO(glMultiDrawArraysEXT, vFuppi) GO(glMultiDrawElementsEXT, vFupupi) //EXT_multisample -GO(glSampleMaskEXT, vFfi) +GO(glSampleMaskEXT, vFfC) GO(glSamplePatternEXT, vFu) //EXT_paletted_texture GO(glColorTableEXT, vFuuiuup) @@ -1997,7 +1998,7 @@ GO(glSecondaryColor3fEXT, vFfff) GO(glSecondaryColor3fvEXT, vFp) GO(glSecondaryColor3iEXT, vFiii) GO(glSecondaryColor3ivEXT, vFp) -GO(glSecondaryColor3sEXT, vFiii) +GO(glSecondaryColor3sEXT, vFwww) GO(glSecondaryColor3svEXT, vFp) GO(glSecondaryColor3ubEXT, vFCCC) GO(glSecondaryColor3ubvEXT, vFp) @@ -2012,7 +2013,7 @@ GO(glCreateShaderProgramEXT, uFup) GO(glUseShaderProgramEXT, vFuu) //EXT_shader_image_load_store GO(glBindImageTextureEXT, vFuuiCiui) -GO(glMemoryBarrierEXT, vFi) +GO(glMemoryBarrierEXT, vFu) //EXT_stencil_clear_tag GO(glStencilClearTagEXT, vFiu) //EXT_stencil_two_side @@ -2033,19 +2034,19 @@ GO(glGetTexParameterIuivEXT, vFuup) GO(glTexParameterIivEXT, vFuup) GO(glTexParameterIuivEXT, vFuup) //EXT_texture_object -GO(glAreTexturesResidentEXT, iFipp) +GO(glAreTexturesResidentEXT, CFipp) GO(glBindTextureEXT, vFuu) GO(glDeleteTexturesEXT, vFip) GO(glGenTexturesEXT, vFip) -GO(glIsTextureEXT, iFu) +GO(glIsTextureEXT, CFu) GO(glPrioritizeTexturesEXT, vFipp) //EXT_texture_perturb_normal GO(glTextureNormalEXT, vFu) //EXT_transform_feedback GO(glBeginTransformFeedbackEXT, vFu) GO(glBindBufferBaseEXT, vFuuu) -GO(glBindBufferOffsetEXT, vFuuui) -GO(glBindBufferRangeEXT, vFuuuii) +GO(glBindBufferOffsetEXT, vFuuul) +GO(glBindBufferRangeEXT, vFuuull) GO(glEndTransformFeedbackEXT, vFv) GO(glGetTransformFeedbackVaryingEXT, vFuuipppp) GO(glTransformFeedbackVaryingsEXT, vFuipu) @@ -2158,7 +2159,7 @@ GO(glTexCoordPointervINTEL, vFiup) GO(glVertexPointervINTEL, vFiup) //KHR_debug GOM(glDebugMessageCallback, vFEpp) // not ideal, because the my_ version will always exist, even if glDebugMessageCallback doesn't -GO(glDebugMessageControl, vFuuuipi) +GO(glDebugMessageControl, vFuuuipC) GO(glDebugMessageInsert, vFuuuuip) GO(glGetDebugMessageLog, uFuipppppp) GO(glGetObjectLabel, vFuuipp) @@ -2198,18 +2199,18 @@ GO(glWindowPos4svMESA, vFp) GO(glBeginConditionalRenderNVX, vFu) GO(glEndConditionalRenderNVX, vFv) //NV_bindless_texture -GO(glGetImageHandleNV, LFuiCiu) -GO(glGetTextureHandleNV, LFu) -GO(glGetTextureSamplerHandleNV, LFuu) -GO(glIsImageHandleResidentNV, CFL) -GO(glIsTextureHandleResidentNV, iFu) -GO(glMakeImageHandleNonResidentNV, vFu) -GO(glMakeImageHandleResidentNV, vFLu) -GO(glMakeTextureHandleNonResidentNV, vFu) -GO(glMakeTextureHandleResidentNV, vFu) -GO(glProgramUniformHandleui64NV, vFuiL) +GO(glGetImageHandleNV, UFuiCiu) +GO(glGetTextureHandleNV, UFu) +GO(glGetTextureSamplerHandleNV, UFuu) +GO(glIsImageHandleResidentNV, CFU) +GO(glIsTextureHandleResidentNV, CFU) +GO(glMakeImageHandleNonResidentNV, vFU) +GO(glMakeImageHandleResidentNV, vFUu) +GO(glMakeTextureHandleNonResidentNV, vFU) +GO(glMakeTextureHandleResidentNV, vFU) +GO(glProgramUniformHandleui64NV, vFuiU) GO(glProgramUniformHandleui64vNV, vFuiip) -GO(glUniformHandleui64NV, vFiL) +GO(glUniformHandleui64NV, vFiU) GO(glUniformHandleui64vNV, vFiip) //NV_conditional_render GO(glBeginConditionalRenderNV, vFuu) @@ -2234,16 +2235,16 @@ GO(glMapParameterfvNV, vFuup) GO(glMapParameterivNV, vFuup) //NV_explicit_multisample GO(glGetMultisamplefvNV, vFuup) -GO(glSampleMaskIndexedNV, vFui) +GO(glSampleMaskIndexedNV, vFuu) GO(glTexRenderbufferNV, vFuu) //NV_fence GO(glDeleteFencesNV, vFip) GO(glFinishFenceNV, vFu) GO(glGenFencesNV, vFip) GO(glGetFenceivNV, vFuup) -GO(glIsFenceNV, iFu) +GO(glIsFenceNV, CFu) GO(glSetFenceNV, vFuu) -GO(glTestFenceNV, iFu) +GO(glTestFenceNV, CFu) //NV_fragment_program GO(glGetProgramNamedParameterdvNV, vFuipp) GO(glGetProgramNamedParameterfvNV, vFuipp) @@ -2280,44 +2281,44 @@ GO(glGetProgramSubroutineParameteruivNV, vFuup) GO(glProgramSubroutineParametersuivNV, vFuip) //NV_gpu_shader5 GO(glGetUniformi64vNV, vFuip) -GO(glProgramUniform1i64NV, vFuil) +GO(glProgramUniform1i64NV, vFuiI) GO(glProgramUniform1i64vNV, vFuiip) -GO(glProgramUniform1ui64NV, vFuiu) +GO(glProgramUniform1ui64NV, vFuiU) GO(glProgramUniform1ui64vNV, vFuiip) -GO(glProgramUniform2i64NV, vFuill) +GO(glProgramUniform2i64NV, vFuiII) GO(glProgramUniform2i64vNV, vFuiip) -GO(glProgramUniform2ui64NV, vFuiLL) +GO(glProgramUniform2ui64NV, vFuiUU) GO(glProgramUniform2ui64vNV, vFuiip) -GO(glProgramUniform3i64NV, vFuilll) +GO(glProgramUniform3i64NV, vFuiIII) GO(glProgramUniform3i64vNV, vFuiip) -GO(glProgramUniform3ui64NV, vFuiLLL) +GO(glProgramUniform3ui64NV, vFuiUUU) GO(glProgramUniform3ui64vNV, vFuiip) -GO(glProgramUniform4i64NV, vFuillll) +GO(glProgramUniform4i64NV, vFuiIIII) GO(glProgramUniform4i64vNV, vFuiip) -GO(glProgramUniform4ui64NV, vFuiLLLL) +GO(glProgramUniform4ui64NV, vFuiUUUU) GO(glProgramUniform4ui64vNV, vFuiip) -GO(glUniform1i64NV, vFil) +GO(glUniform1i64NV, vFiI) GO(glUniform1i64vNV, vFiip) -GO(glUniform1ui64NV, vFiu) +GO(glUniform1ui64NV, vFiU) GO(glUniform1ui64vNV, vFiip) -GO(glUniform2i64NV, vFill) +GO(glUniform2i64NV, vFiII) GO(glUniform2i64vNV, vFiip) -GO(glUniform2ui64NV, vFiLL) +GO(glUniform2ui64NV, vFiUU) GO(glUniform2ui64vNV, vFiip) -GO(glUniform3i64NV, vFilll) +GO(glUniform3i64NV, vFiIII) GO(glUniform3i64vNV, vFiip) -GO(glUniform3ui64NV, vFiLLL) +GO(glUniform3ui64NV, vFiUUU) GO(glUniform3ui64vNV, vFiip) -GO(glUniform4i64NV, vFillll) +GO(glUniform4i64NV, vFiIIII) GO(glUniform4i64vNV, vFiip) -GO(glUniform4ui64NV, vFiLLLL) +GO(glUniform4ui64NV, vFiUUUU) GO(glUniform4ui64vNV, vFiip) //NV_half_float -GO(glColor3hNV, vFiii) +GO(glColor3hNV, vFWWW) GO(glColor3hvNV, vFp) -GO(glColor4hNV, vFiiii) +GO(glColor4hNV, vFWWWW) GO(glColor4hvNV, vFp) -GO(glFogCoordhNV, vFi) +GO(glFogCoordhNV, vFW) GO(glFogCoordhvNV, vFp) GO(glMultiTexCoord1hNV, vFuW) GO(glMultiTexCoord1hvNV, vFup) @@ -2327,23 +2328,23 @@ GO(glMultiTexCoord3hNV, vFuWWW) GO(glMultiTexCoord3hvNV, vFup) GO(glMultiTexCoord4hNV, vFuWWWW) GO(glMultiTexCoord4hvNV, vFup) -GO(glNormal3hNV, vFiii) +GO(glNormal3hNV, vFWWW) GO(glNormal3hvNV, vFp) GO(glSecondaryColor3hNV, vFWWW) GO(glSecondaryColor3hvNV, vFp) -GO(glTexCoord1hNV, vFi) +GO(glTexCoord1hNV, vFW) GO(glTexCoord1hvNV, vFp) GO(glTexCoord2hNV, vFWW) GO(glTexCoord2hvNV, vFp) -GO(glTexCoord3hNV, vFiii) +GO(glTexCoord3hNV, vFWWW) GO(glTexCoord3hvNV, vFp) GO(glTexCoord4hNV, vFWWWW) GO(glTexCoord4hvNV, vFp) -GO(glVertex2hNV, vFii) +GO(glVertex2hNV, vFWW) GO(glVertex2hvNV, vFp) -GO(glVertex3hNV, vFiii) +GO(glVertex3hNV, vFWWW) GO(glVertex3hvNV, vFp) -GO(glVertex4hNV, vFiiii) +GO(glVertex4hNV, vFWWWW) GO(glVertex4hvNV, vFp) GO(glVertexAttrib1hNV, vFuW) GO(glVertexAttrib1hvNV, vFup) @@ -2366,7 +2367,7 @@ GO(glEndOcclusionQueryNV, vFv) GO(glGenOcclusionQueriesNV, vFip) GO(glGetOcclusionQueryivNV, vFuup) GO(glGetOcclusionQueryuivNV, vFuup) -GO(glIsOcclusionQueryNV, iFu) +GO(glIsOcclusionQueryNV, CFu) //NV_parameter_buffer_object GO(glProgramBufferParametersIivNV, vFuuuip) GO(glProgramBufferParametersIuivNV, vFuuuip) @@ -2382,8 +2383,8 @@ GO(glGetVideoi64vNV, vFuup) GO(glGetVideoivNV, vFuup) GO(glGetVideoui64vNV, vFuup) GO(glGetVideouivNV, vFuup) -GO(glPresentFrameDualFillNV, vFuLuuuuuuuuuuu) -GO(glPresentFrameKeyedNV, vFuLuuuuuuuuu) +GO(glPresentFrameDualFillNV, vFuUuuuuuuuuuuu) +GO(glPresentFrameKeyedNV, vFuUuuuuuuuuu) //NV_primitive_restart GO(glPrimitiveRestartIndexNV, vFu) GO(glPrimitiveRestartNV, vFv) @@ -2410,14 +2411,14 @@ GO(glGetIntegerui64vNV, vFup) GO(glGetNamedBufferParameterui64vNV, vFuup) GO(glGetUniformui64vNV, vFuip) GO(glIsBufferResidentNV, CFu) -GO(glIsNamedBufferResidentNV, iFu) +GO(glIsNamedBufferResidentNV, CFu) GO(glMakeBufferNonResidentNV, vFu) GO(glMakeBufferResidentNV, vFuu) GO(glMakeNamedBufferNonResidentNV, vFu) GO(glMakeNamedBufferResidentNV, vFuu) -GO(glProgramUniformui64NV, vFuiL) +GO(glProgramUniformui64NV, vFuiU) GO(glProgramUniformui64vNV, vFuiip) -GO(glUniformui64NV, vFiL) +GO(glUniformui64NV, vFiU) GO(glUniformui64vNV, vFiip) //NV_texture_barrier GO(glTextureBarrierNV, vFv) @@ -2446,7 +2447,7 @@ GO(glBindTransformFeedbackNV, vFuu) GO(glDeleteTransformFeedbacksNV, vFip) GO(glDrawTransformFeedbackNV, vFuu) GO(glGenTransformFeedbacksNV, vFip) -GO(glIsTransformFeedbackNV, iFu) +GO(glIsTransformFeedbackNV, CFu) GO(glPauseTransformFeedbackNV, vFv) GO(glResumeTransformFeedbackNV, vFv) //NV_vdpau_interop @@ -2456,7 +2457,7 @@ GO(glVDPAUInitNV, vFpp) GO(glVDPAUIsSurfaceNV, CFl) GO(glVDPAUMapSurfacesNV, vFip) GO(glVDPAURegisterOutputSurfaceNV, lFpuip) -GO(glVDPAURegisterVideoSurfaceNV, uFpuip) +GO(glVDPAURegisterVideoSurfaceNV, lFpuip) GO(glVDPAUSurfaceAccessNV, vFlu) GO(glVDPAUUnmapSurfacesNV, vFip) GO(glVDPAUUnregisterSurfaceNV, vFl) @@ -2466,25 +2467,25 @@ GO(glVertexArrayRangeNV, vFip) //NV_vertex_attrib_integer_64bit GO(glGetVertexAttribLi64vNV, vFuup) GO(glGetVertexAttribLui64vNV, vFuup) -GO(glVertexAttribL1i64NV, vFul) +GO(glVertexAttribL1i64NV, vFuI) GO(glVertexAttribL1i64vNV, vFup) -GO(glVertexAttribL1ui64NV, vFuL) +GO(glVertexAttribL1ui64NV, vFuU) GO(glVertexAttribL1ui64vNV, vFup) -GO(glVertexAttribL2i64NV, vFull) +GO(glVertexAttribL2i64NV, vFuII) GO(glVertexAttribL2i64vNV, vFup) -GO(glVertexAttribL2ui64NV, vFuLL) +GO(glVertexAttribL2ui64NV, vFuUU) GO(glVertexAttribL2ui64vNV, vFup) -GO(glVertexAttribL3i64NV, vFulll) +GO(glVertexAttribL3i64NV, vFuIII) GO(glVertexAttribL3i64vNV, vFup) -GO(glVertexAttribL3ui64NV, vFuLLL) +GO(glVertexAttribL3ui64NV, vFuUUU) GO(glVertexAttribL3ui64vNV, vFup) -GO(glVertexAttribL4i64NV, vFullll) +GO(glVertexAttribL4i64NV, vFuIIII) GO(glVertexAttribL4i64vNV, vFup) -GO(glVertexAttribL4ui64NV, vFuLLLL) +GO(glVertexAttribL4ui64NV, vFuUUUU) GO(glVertexAttribL4ui64vNV, vFup) GO(glVertexAttribLFormatNV, vFuiui) //NV_vertex_buffer_unified_memory -GO(glBufferAddressRangeNV, vFuuLl) +GO(glBufferAddressRangeNV, vFuuUl) GO(glColorFormatNV, vFiui) GO(glEdgeFlagFormatNV, vFi) GO(glFogCoordFormatNV, vFui) @@ -2511,7 +2512,7 @@ GO(glGetVertexAttribPointervNV, vFuup) GO(glGetVertexAttribdvNV, vFuup) GO(glGetVertexAttribfvNV, vFuup) GO(glGetVertexAttribivNV, vFuup) -GO(glIsProgramNV, iFu) +GO(glIsProgramNV, CFu) GO(glLoadProgramNV, vFuuip) GO(glProgramParameter4dNV, vFuudddd) GO(glProgramParameter4dvNV, vFuup) @@ -2603,21 +2604,21 @@ GO(glMultiTexCoord1bOES, vFuc) GO(glMultiTexCoord1bvOES, vFup) GO(glMultiTexCoord2bOES, vFucc) GO(glMultiTexCoord2bvOES, vFup) -GO(glMultiTexCoord3bOES, vFuiii) +GO(glMultiTexCoord3bOES, vFuccc) GO(glMultiTexCoord3bvOES, vFup) GO(glMultiTexCoord4bOES, vFucccc) GO(glMultiTexCoord4bvOES, vFup) -GO(glTexCoord1bOES, vFi) +GO(glTexCoord1bOES, vFc) GO(glTexCoord1bvOES, vFp) -GO(glTexCoord2bOES, vFii) +GO(glTexCoord2bOES, vFcc) GO(glTexCoord2bvOES, vFp) -GO(glTexCoord3bOES, vFiii) +GO(glTexCoord3bOES, vFccc) GO(glTexCoord3bvOES, vFp) -GO(glTexCoord4bOES, vFiiii) +GO(glTexCoord4bOES, vFcccc) GO(glTexCoord4bvOES, vFp) GO(glVertex2bOES, vFcc) GO(glVertex2bvOES, vFp) -GO(glVertex3bOES, vFii) +GO(glVertex3bOES, vFccc) GO(glVertex3bvOES, vFp) GO(glVertex4bOES, vFcccc) GO(glVertex4bvOES, vFp) @@ -2816,7 +2817,7 @@ GO(glListParameterivSGIX, vFuup) //SGIX_pixel_texture GO(glPixelTexGenSGIX, vFu) //SGIX_polynomial_ffd -GO(glDeformSGIX, vFi) +GO(glDeformSGIX, vFu) GO(glDeformationMap3dSGIX, vFuddiiddiiddiip) GO(glDeformationMap3fSGIX, vFuffiiffiiffiip) GO(glLoadIdentityDeformationMapSGIX, vFu) @@ -2845,9 +2846,9 @@ GO(glGlobalAlphaFactordSUN, vFd) GO(glGlobalAlphaFactorfSUN, vFf) GO(glGlobalAlphaFactoriSUN, vFi) GO(glGlobalAlphaFactorsSUN, vFw) -GO(glGlobalAlphaFactorubSUN, vFu) +GO(glGlobalAlphaFactorubSUN, vFC) GO(glGlobalAlphaFactoruiSUN, vFu) -GO(glGlobalAlphaFactorusSUN, vFu) +GO(glGlobalAlphaFactorusSUN, vFW) //SUN_mesh_array GO(glDrawMeshArraysSUN, vFuiii) //SUN_triangle_list @@ -2907,7 +2908,7 @@ GO(glPolygonOffsetClamp, vFfff) GO(glPolygonOffsetClampEXT, vFfff) //GL_EXT_multisampled_render_to_texture -GO(glRenderbufferStorageMultisampleEXT, vFilill) +GO(glRenderbufferStorageMultisampleEXT, vFuiuii) GO(glFramebufferTexture2DMultisampleEXT, vFiiiuil) //GL_KTX_buffer_region @@ -2920,7 +2921,7 @@ GO(glDrawBufferRegion, vFuiiiiii) //GL_ARB_sparse_buffer GO(glBufferPageCommitmentARB, vFullC) GO(glNamedBufferPageCommitmentARB, vFullC) -GO(glNamedBufferPageCommitmentEXT, vFuppi) +GO(glNamedBufferPageCommitmentEXT, vFullC) //GL_ARB_sparse_texture GO(TexPageCommitmentARB, vFiiiiiiiii) @@ -2987,7 +2988,7 @@ GO(glXGetVisualConfigs,pFpp) GO(glXGetVisualFromFBConfig, pFpp) GO(glXGetVisualFromFBConfigSGIX, pFpp) GO(glXHyperpipeAttribSGIX,iFpiiip) -//GO(glXHyperpipeConfigSGIX,iFpii?p) +//GO(glXHyperpipeConfigSGIX, iFpiipp) GO(glXImportContextEXT, pFpu) GO(glXIsDirect,iFpp) GO(glXJoinSwapGroupNV, iFppu) @@ -3016,16 +3017,16 @@ GO(glXReleaseTexImageEXT, vFppi) GO(glXReleaseVideoCaptureDeviceNV, vFpp) GO(glXReleaseVideoDeviceNV, iFpip) GO(glXReleaseVideoImageNV, iFpp) -//GO(glXRender,vFv) -//GO(glXRenderLarge,vFv) +//GO(glXRender, vFv) +//GO(glXRenderLarge, vFv) GO(glXResetFrameCountNV, iFpi) GO(glXSelectEvent, vFppu) GO(glXSelectEventSGIX, vFppu) GO(glXSendPbufferToVideoNV, iFppipi) GO(glXSwapBuffers,vFpp) GO(glXUseXFont,vFpiii) -//GO(glXVendorPrivate,vFv) -//GO(glXVendorPrivateWithReply,vFv) +//GO(glXVendorPrivate, vFv) +//GO(glXVendorPrivateWithReply, vFv) GO(glXWaitGL,vFv) GO(glXWaitVideoSyncSGI, iFiip) GO(glXWaitX,vFv) @@ -3065,12 +3066,23 @@ GO(glXFreeMemoryNV, vFp) //GLX_ARB_???? GO(glSpecializeShaderARB, vFupupp) +//GLX_AMD_gpu_association +GO(glXGetGPUIDsAMD, uFup) +GO(glXGetGPUInfoAMD, iFuiuup) +GO(glXGetContextGPUIDAMD, uFp) +GO(glXCreateAssociatedContextAMD, pFup) +GO(glXCreateAssociatedContextAttribsAMD, pFupp) +GO(glXDeleteAssociatedContextAMD, iFp) +GO(glXMakeAssociatedContextCurrentAMD, iFp) +GO(glXGetCurrentAssociatedContextAMD, pFv) +GO(glXBlitContextFramebufferAMD, vFpiiiiiiiiuu) + //GL_EXT_debug_label GO(glGetObjectLabelEXT, vFuuipp) GO(glLabelObjectEXT, vFuuip) //GL_EXT_debug_marker -GO(glInsertEventMarkerEXT, vFlp) +GO(glInsertEventMarkerEXT, vFip) GO(glPushGroupMarkerEXT, vFip) GO(glPopGroupMarkerEXT, vFv) @@ -3082,8 +3094,8 @@ GO(glResolveMultisampleFramebufferAPPLE, vFv) GO(glTexPageCommitmentARB, vFuiiiiiiiC) //GL_ARB_sample_locations -GO(glFramebufferSampleLocationsfvARB, vFiulp) -GO(glNamedFramebufferSampleLocationsfvARB, vFuulp) +GO(glFramebufferSampleLocationsfvARB, vFuuip) +GO(glNamedFramebufferSampleLocationsfvARB, vFuuip) GO(glEvaluateDepthValuesARB, vFv) //GL_ARB_parallel_shader_compile @@ -3094,42 +3106,42 @@ GO(glMultiDrawArraysIndirectCountARB, vFuplii) GO(glMultiDrawElementsIndirectCountARB, vFuuplii) //GL_ARB_gpu_shader_int64 -GO(glUniform1i64ARB, vFil) -GO(glUniform2i64ARB, vFill) -GO(glUniform3i64ARB, vFilll) -GO(glUniform4i64ARB, vFillll) -GO(glUniform1i64vARB, vFilp) -GO(glUniform2i64vARB,vFilp) -GO(glUniform3i64vARB,vFilp) +GO(glUniform1i64ARB, vFiI) +GO(glUniform2i64ARB, vFiII) +GO(glUniform3i64ARB, vFiIII) +GO(glUniform4i64ARB, vFiIIII) +GO(glUniform1i64vARB, vFiip) +GO(glUniform2i64vARB, vFiip) +GO(glUniform3i64vARB, vFiip) GO(glUniform4i64vARB, vFiip) -GO(glUniform1ui64ARB,vFiU) -GO(glUniform2ui64ARB, vFiLL) -GO(glUniform3ui64ARB, vFiLLL) -GO(glUniform4ui64ARB, vFiLLLL) -GO(glUniform1ui64vARB, vFilp) -GO(glUniform2ui64vARB, vFilp) -GO(glUniform3ui64vARB, vFilp) -GO(glUniform4ui64vARB, vFilp) +GO(glUniform1ui64ARB, vFiU) +GO(glUniform2ui64ARB, vFiUU) +GO(glUniform3ui64ARB, vFiUUU) +GO(glUniform4ui64ARB, vFiUUUU) +GO(glUniform1ui64vARB, vFiip) +GO(glUniform2ui64vARB, vFiip) +GO(glUniform3ui64vARB, vFiip) +GO(glUniform4ui64vARB, vFiip) GO(glGetUniformi64vARB, vFuip) GO(glGetUniformui64vARB, vFuip) GO(glGetnUniformi64vARB, vFuiip) GO(glGetnUniformui64vARB, vFuiip) -GO(glProgramUniform1i64ARB, vFuil) -GO(glProgramUniform2i64ARB, vFuill) -GO(glProgramUniform3i64ARB, vFuilll) -GO(glProgramUniform4i64ARB, vFuillll) -GO(glProgramUniform1i64vARB, vFuilp) -GO(glProgramUniform2i64vARB, vFuilp) -GO(glProgramUniform3i64vARB, vFuilp) +GO(glProgramUniform1i64ARB, vFuiI) +GO(glProgramUniform2i64ARB, vFuiII) +GO(glProgramUniform3i64ARB, vFuiIII) +GO(glProgramUniform4i64ARB, vFuiIIII) +GO(glProgramUniform1i64vARB, vFuiip) +GO(glProgramUniform2i64vARB, vFuiip) +GO(glProgramUniform3i64vARB, vFuiip) GO(glProgramUniform4i64vARB, vFuiip) GO(glProgramUniform1ui64ARB, vFuiU) -GO(glProgramUniform2ui64ARB, vFuiLL) -GO(glProgramUniform3ui64ARB, vFuiLLL) -GO(glProgramUniform4ui64ARB, vFuiLLLL) -GO(glProgramUniform1ui64vARB, vFuilp) -GO(glProgramUniform2ui64vARB, vFuilp) -GO(glProgramUniform3ui64vARB, vFuilp) -GO(glProgramUniform4ui64vARB, vFuilp) +GO(glProgramUniform2ui64ARB, vFuiUU) +GO(glProgramUniform3ui64ARB, vFuiUUU) +GO(glProgramUniform4ui64ARB, vFuiUUUU) +GO(glProgramUniform1ui64vARB, vFuiip) +GO(glProgramUniform2ui64vARB, vFuiip) +GO(glProgramUniform3ui64vARB, vFuiip) +GO(glProgramUniform4ui64vARB, vFuiip) //GL_ARB_compute_variable_group_size GO(glDispatchComputeGroupSizeARB, vFuuuuuu) @@ -3142,21 +3154,21 @@ GO(glGetTextureHandleARB, UFu) GO(glGetTextureSamplerHandleARB, UFuu) GO(glMakeTextureHandleResidentARB, vFU) GO(glMakeTextureHandleNonResidentARB, vFU) -GO(glGetImageHandleARB, UFuiiii) -GO(glMakeImageHandleResidentARB, vFUi) +GO(glGetImageHandleARB, UFuiCiu) +GO(glMakeImageHandleResidentARB, vFUu) GO(glMakeImageHandleNonResidentARB, vFU) GO(glUniformHandleui64ARB, vFiU) -GO(glUniformHandleui64vARB, vFilp) +GO(glUniformHandleui64vARB, vFiip) GO(glProgramUniformHandleui64ARB, vFuiU) -GO(glProgramUniformHandleui64vARB, vFuilp) -GO(glIsTextureHandleResidentARB, iFU) -GO(glIsImageHandleResidentARB, iFU) +GO(glProgramUniformHandleui64vARB, vFuiip) +GO(glIsTextureHandleResidentARB, CFU) +GO(glIsImageHandleResidentARB, CFU) GO(glVertexAttribL1ui64ARB, vFuU) GO(glVertexAttribL1ui64vARB, vFup) -GO(glGetVertexAttribLui64vARB, vFuip) +GO(glGetVertexAttribLui64vARB, vFuup) //GL_OES_EGL_image -GO(glEGLImageTargetTexture2DOES, vFip) +GO(glEGLImageTargetTexture2DOES, vFup) GO(glEGLImageTargetRenderbufferStorageOES, vFup) //GL_MESA_program_debug @@ -3167,7 +3179,7 @@ GO(glGetProgramRegisterfvMESA, vFilpp) GO(glBlendEquationSeparateATI, vFuu) //GL_AMD_interleaved_elements -GO(glVertexAttribParameteriAMD, vFuii) +GO(glVertexAttribParameteriAMD, vFuui) //GL_AMD_occlusion_query_event GO(glQueryObjectParameteruiAMD, vFuuuu) @@ -3196,23 +3208,23 @@ GO(glMultiDrawArraysIndirectBindlessCountNV, vFupiiii) GO(glMultiDrawElementsIndirectBindlessCountNV, vFuupiiii) //GL_NV_blend_equation_advanced -GO(glBlendParameteriNV, vFii) +GO(glBlendParameteriNV, vFui) GO(glBlendBarrierNV, vFv) //GL_NV_command_list -GO(glCreateStatesNV, vFlp) -GO(glDeleteStatesNV, vFlp) -GO(glIsStateNV, iFu) -GO(glStateCaptureNV, vFui) +GO(glCreateStatesNV, vFip) +GO(glDeleteStatesNV, vFip) +GO(glIsStateNV, CFu) +GO(glStateCaptureNV, vFuu) GO(glGetCommandHeaderNV, uFuu) GO(glGetStageIndexNV, WFu) GO(glDrawCommandsNV, vFuuppu) GO(glDrawCommandsAddressNV, vFuppu) GO(glDrawCommandsStatesNV, vFuppppu) GO(glDrawCommandsStatesAddressNV, vFppppu) -GO(glCreateCommandListsNV, vFlp) -GO(glDeleteCommandListsNV, vFlp) -GO(glIsCommandListNV, iFu) +GO(glCreateCommandListsNV, vFip) +GO(glDeleteCommandListsNV, vFip) +GO(glIsCommandListNV, CFu) GO(glListDrawCommandsStatesClientNV, vFuuppppu) GO(glCommandListSegmentsNV, vFuu) GO(glCompileCommandListNV, vFu) @@ -3225,17 +3237,17 @@ GO(glSubpixelPrecisionBiasNV, vFuu) GO(glFragmentCoverageColorNV, vFu) //GL_NV_framebuffer_mixed_samples -GO(glCoverageModulationTableNV, vFlp) +GO(glCoverageModulationTableNV, vFip) GO(glGetCoverageModulationTableNV, vFip) -GO(glCoverageModulationNV, vFi) +GO(glCoverageModulationNV, vFu) //GL_NV_internalformat_sample_query GO(glGetInternalformatSampleivNV, vFuuiuip) //GL_NV_path_rendering -GO(glGenPathsNV, uFl) -GO(glDeletePathsNV, vFul) -GO(glIsPathNV, iFu) +GO(glGenPathsNV, uFi) +GO(glDeletePathsNV, vFui) +GO(glIsPathNV, CFu) GO(glPathCommandsNV, vFuipiup) GO(glPathCoordsNV, vFuiup) GO(glPathSubCommandsNV, vFuiiipiup) @@ -3246,25 +3258,25 @@ GO(glPathGlyphRangeNV, vFuupuuiuuf) GO(glWeightPathsNV, vFuipp) GO(glCopyPathNV, vFuu) GO(glInterpolatePathsNV, vFuuuf) -GO(glTransformPathNV, vFuuip) -GO(glPathParameterivNV, vFuip) -GO(glPathParameteriNV, vFuii) -GO(glPathParameterfvNV, vFuip) -GO(glPathParameterfNV, vFuif) -GO(glPathDashArrayNV, vFulp) +GO(glTransformPathNV, vFuuup) +GO(glPathParameterivNV, vFuup) +GO(glPathParameteriNV, vFuui) +GO(glPathParameterfvNV, vFuup) +GO(glPathParameterfNV, vFuuf) +GO(glPathDashArrayNV, vFuip) GO(glPathStencilFuncNV, vFuiu) GO(glPathStencilDepthOffsetNV, vFff) GO(glStencilFillPathNV, vFuuu) GO(glStencilStrokePathNV, vFuiu) GO(glStencilFillPathInstancedNV, vFiupuuuup) GO(glStencilStrokePathInstancedNV, vFiupuiuup) -GO(glPathCoverDepthFuncNV, vFi) -GO(glCoverFillPathNV, vFui) -GO(glCoverStrokePathNV, vFui) -GO(glCoverFillPathInstancedNV, vFlipuiip) +GO(glPathCoverDepthFuncNV, vFu) +GO(glCoverFillPathNV, vFuu) +GO(glCoverStrokePathNV, vFuu) +GO(glCoverFillPathInstancedNV, vFiupuuup) GO(glCoverStrokePathInstancedNV, vFiupuuup) -GO(glGetPathParameterivNV, vFuip) -GO(glGetPathParameterfvNV, vFuip) +GO(glGetPathParameterivNV, vFuup) +GO(glGetPathParameterfvNV, vFuup) GO(glGetPathCommandsNV, vFup) GO(glGetPathCoordsNV, vFup) GO(glGetPathDashArrayNV, vFup) @@ -3275,12 +3287,12 @@ GO(glIsPointInFillPathNV, CFuuff) GO(glIsPointInStrokePathNV, CFuff) GO(glGetPathLengthNV, fFuii) GO(glPointAlongPathNV, CFuiifpppp) -GO(glMatrixLoad3x2fNV, vFip) -GO(glMatrixLoad3x3fNV, vFip) -GO(glMatrixLoadTranspose3x3fNV, vFip) -GO(glMatrixMult3x2fNV, vFip) -GO(glMatrixMult3x3fNV, vFip) -GO(glMatrixMultTranspose3x3fNV, vFip) +GO(glMatrixLoad3x2fNV, vFup) +GO(glMatrixLoad3x3fNV, vFup) +GO(glMatrixLoadTranspose3x3fNV, vFup) +GO(glMatrixMult3x2fNV, vFup) +GO(glMatrixMult3x3fNV, vFup) +GO(glMatrixMultTranspose3x3fNV, vFup) GO(glStencilThenCoverFillPathNV, vFuuuu) GO(glStencilThenCoverStrokePathNV, vFuiuu) GO(glStencilThenCoverFillPathInstancedNV, vFiupuuuuup) @@ -3292,14 +3304,15 @@ GO(glProgramPathFragmentInputGenNV, vFuiuip) GO(glGetProgramResourcefvNV, vFuuuipipp) GO(glPathColorGenNV, vFuuup) GO(glPathTexGenNV, vFuuip) -GO(glPathFogGenNV, vFi) -GO(glGetPathColorGenivNV, vFiip) -GO(glGetPathColorGenfvNV, vFiip) -GO(glGetPathTexGenivNV, vFiip) -GO(glGetPathTexGenfvNV, vFiip) +GO(glPathFogGenNV, vFu) +GO(glGetPathColorGenivNV, vFuup) +GO(glGetPathColorGenfvNV, vFuup) +GO(glGetPathTexGenivNV, vFuup) +GO(glGetPathTexGenfvNV, vFuup) + //GL_NV_sample_locations -GO(glFramebufferSampleLocationsfvNV, vFiulp) +GO(glFramebufferSampleLocationsfvNV, vFuuip) GO(glNamedFramebufferSampleLocationsfvNV, vFuuip) GO(glResolveDepthValuesNV, vFv) @@ -3350,45 +3363,45 @@ GO(glWindowRectanglesEXT, vFuip) // GL_EXT_memory_object GO(glGetUnsignedBytevEXT, vFup) GO(glGetUnsignedBytei_vEXT, vFuup) -GO(glDeleteMemoryObjectsEXT, vFlp) -GO(glIsMemoryObjectEXT, iFu) -GO(glCreateMemoryObjectsEXT, vFlp) -GO(glMemoryObjectParameterivEXT, vFuip) -GO(glGetMemoryObjectParameterivEXT, vFuip) -GO(glTexStorageMem2DEXT, vFuiuiiuL) -GO(glTexStorageMem2DMultisampleEXT, vFuiuiiCuL) -GO(glTexStorageMem3DEXT, vFuiuiiiuL) -GO(glTexStorageMem3DMultisampleEXT, vFuiuiiiCuL) -GO(glBufferStorageMemEXT, vFuluL) -GO(glTextureStorageMem2DEXT, vFuiuiiuL) -GO(glTextureStorageMem2DMultisampleEXT, vFuiuiiCuL) -GO(glTextureStorageMem3DEXT, vFuiuiiiuL) -GO(glTextureStorageMem3DMultisampleEXT, vFuiuiiiCuL) -GO(glNamedBufferStorageMemEXT, vFuluL) -GO(glTexStorageMem1DEXT, vFuiuiuL) -GO(glTextureStorageMem1DEXT, vFuiuiuL) +GO(glDeleteMemoryObjectsEXT, vFip) +GO(glIsMemoryObjectEXT, CFu) +GO(glCreateMemoryObjectsEXT, vFip) +GO(glMemoryObjectParameterivEXT, vFuup) +GO(glGetMemoryObjectParameterivEXT, vFuup) +GO(glTexStorageMem2DEXT, vFuiuiiuU) +GO(glTexStorageMem2DMultisampleEXT, vFuiuiiCuU) +GO(glTexStorageMem3DEXT, vFuiuiiiuU) +GO(glTexStorageMem3DMultisampleEXT, vFuiuiiiCuU) +GO(glBufferStorageMemEXT, vFuluU) +GO(glTextureStorageMem2DEXT, vFuiuiiuU) +GO(glTextureStorageMem2DMultisampleEXT, vFuiuiiCuU) +GO(glTextureStorageMem3DEXT, vFuiuiiiuU) +GO(glTextureStorageMem3DMultisampleEXT, vFuiuiiiCuU) +GO(glNamedBufferStorageMemEXT, vFuluU) +GO(glTexStorageMem1DEXT, vFuiuiuU) +GO(glTextureStorageMem1DEXT, vFuiuiuU) // GL_EXT_semaphore -GO(glGenSemaphoresEXT, vFlp) -GO(glDeleteSemaphoresEXT, vFlp) -GO(glIsSemaphoreEXT, iFu) +GO(glGenSemaphoresEXT, vFip) +GO(glDeleteSemaphoresEXT, vFip) +GO(glIsSemaphoreEXT, CFu) GO(glSemaphoreParameterui64vEXT, vFuup) -GO(glGetSemaphoreParameterui64vEXT, vFuip) +GO(glGetSemaphoreParameterui64vEXT, vFuup) GO(glWaitSemaphoreEXT, vFuupupp) GO(glSignalSemaphoreEXT, vFuupupp) // GL_EXT_memory_object_fd -GO(glImportMemoryFdEXT, vFuLui) +GO(glImportMemoryFdEXT, vFuUui) // GL_KHR_parallel_shader_compile GO(glMaxShaderCompilerThreadsKHR, vFu) // GL_AMD_framebuffer_multisample_advanced -GO(glRenderbufferStorageMultisampleAdvancedAMD, vFillill) -GO(glNamedRenderbufferStorageMultisampleAdvancedAMD, vFullill) +GO(glRenderbufferStorageMultisampleAdvancedAMD, vFuiiuii) +GO(glNamedRenderbufferStorageMultisampleAdvancedAMD, vFuiiuii) // GL_EXT_semaphore_fd -GO(glImportSemaphoreFdEXT, vFuii) +GO(glImportSemaphoreFdEXT, vFuui) // GLX_SGI_make_current_read GO(glXMakeCurrentReadSGI, iFpppp) @@ -3410,41 +3423,41 @@ GO(glBufferStorageExternalEXT, vFullpu) GO(glNamedBufferStorageExternalEXT, vFullpu) // GL_EXT_memory_object_win32 -GO(glImportMemoryWin32HandleEXT, vFuLup) -GO(glImportMemoryWin32NameEXT, vFuLup) +GO(glImportMemoryWin32HandleEXT, vFuUup) +GO(glImportMemoryWin32NameEXT, vFuUup) // GL_EXT_semaphore_win32 GO(glImportSemaphoreWin32HandleEXT, vFuup) -GO(glImportSemaphoreWin32NameEXT, vFuip) +GO(glImportSemaphoreWin32NameEXT, vFuup) // GL_EXT_shader_framebuffer_fetch_non_coherent GO(glFramebufferFetchBarrierEXT, vFv) // GL_EXT_win32_keyed_mutex -GO(glAcquireKeyedMutexWin32EXT, CFuLu) -GO(glReleaseKeyedMutexWin32EXT, CFuL) +GO(glAcquireKeyedMutexWin32EXT, CFuUu) +GO(glReleaseKeyedMutexWin32EXT, CFuU) // GL_INTEL_framebuffer_CMAA GO(glApplyFramebufferAttachmentCMAAINTEL, vFv) // GL_NV_alpha_to_coverage_dither_control -GO(glAlphaToCoverageDitherControlNV, vFi) +GO(glAlphaToCoverageDitherControlNV, vFu) // GL_NV_clip_space_w_scaling GO(glViewportPositionWScaleNV, vFuff) // GL_NV_conservative_raster_dilate -GO(glConservativeRasterParameterfNV, vFif) +GO(glConservativeRasterParameterfNV, vFuf) // GL_NV_conservative_raster_pre_snap_triangles -GO(glConservativeRasterParameteriNV, vFii) +GO(glConservativeRasterParameteriNV, vFui) // GL_NV_draw_vulkan_image -GO(glDrawVkImageNV, vFLufffffffff) +GO(glDrawVkImageNV, vFUufffffffff) GOM(glGetVkProcAddrNV, pFEp) GO(glWaitVkSemaphoreNV, vFU) GO(glSignalVkSemaphoreNV, vFU) -GO(glSignalVkFenceNV, vFL) +GO(glSignalVkFenceNV, vFU) // GL_NV_gpu_multicast GO(glRenderGpuMaskNV, vFu) @@ -3455,18 +3468,18 @@ GO(glMulticastBlitFramebufferNV, vFuuiiiiiiiiuu) GO(glMulticastFramebufferSampleLocationsfvNV, vFuuuip) GO(glMulticastBarrierNV, vFv) GO(glMulticastWaitSyncNV, vFuu) -GO(glMulticastGetQueryObjectivNV, vFuuip) +GO(glMulticastGetQueryObjectivNV, vFuuup) GO(glMulticastGetQueryObjectuivNV, vFuuup) GO(glMulticastGetQueryObjecti64vNV, vFuuup) GO(glMulticastGetQueryObjectui64vNV, vFuuup) // GL_NV_memory_attachment GO(glGetMemoryObjectDetachedResourcesuivNV, vFuuiip) -GO(glResetMemoryObjectParameterNV, vFui) -GO(glTexAttachMemoryNV, vFiuU) -GO(glBufferAttachMemoryNV, vFuuL) +GO(glResetMemoryObjectParameterNV, vFuu) +GO(glTexAttachMemoryNV, vFuuU) +GO(glBufferAttachMemoryNV, vFuuU) GO(glTextureAttachMemoryNV, vFuuU) -GO(glNamedBufferAttachMemoryNV, vFuuL) +GO(glNamedBufferAttachMemoryNV, vFuuU) // GL_NV_mesh_shader GO(glDrawMeshTasksNV, vFuu) @@ -3478,7 +3491,7 @@ GO(glMultiDrawMeshTasksIndirectCountNV, vFllii) GO(glQueryResourceNV, iFuiup) // GL_NV_query_resource_tag -GO(glGenQueryResourceTagNV, vFlp) +GO(glGenQueryResourceTagNV, vFip) GO(glDeleteQueryResourceTagNV, vFip) GO(glQueryResourceTagNV, vFip) @@ -3491,7 +3504,7 @@ GO(glBindShadingRateImageNV, vFu) GO(glShadingRateImagePaletteNV, vFuuip) GO(glGetShadingRateImagePaletteNV, vFuup) GO(glShadingRateImageBarrierNV, vFC) -GO(glShadingRateSampleOrderNV, vFi) +GO(glShadingRateSampleOrderNV, vFu) GO(glShadingRateSampleOrderCustomNV, vFuup) GO(glGetShadingRateSampleLocationivNV, vFuuup) @@ -3658,7 +3671,7 @@ GO(glTexScissorFuncINTEL, vFiii) // GL_NVX_linked_gpu_multicast GO(glLGPUNamedBufferSubDataNVX, vFuullp) -GO(glLGPUCopyImageSubDataNVX, vFuuuiiiiiuiiiiilll) +GO(glLGPUCopyImageSubDataNVX, vFuuuuiiiiuuiiiiiii) GO(glLGPUInterlockNVX, vFv) // GL_NV_3dvision_settings @@ -3915,12 +3928,12 @@ GO(wglSwapIntervalEXT, iFi) GO(wglGetSwapIntervalEXT, iFv) // GL_MESA_framebuffer_flip_y -GO(glFramebufferParameteriMESA, vFiii) -GO(glGetFramebufferParameterivMESA, vFiip) +GO(glFramebufferParameteriMESA, vFuui) +GO(glGetFramebufferParameterivMESA, vFuup) // GL_NVX_gpu_multicast2 GO(glUploadGpuMaskNVX, vFu) -GO(glMulticastViewportArrayvNVX, vFuulp) +GO(glMulticastViewportArrayvNVX, vFuuip) GO(glMulticastViewportPositionWScaleNVX, vFuuff) GO(glMulticastScissorArrayvNVX, vFuuip) GO(glAsyncCopyBufferSubDataNVX, uFippuuuulllipp) @@ -3928,15 +3941,15 @@ GO(glAsyncCopyImageSubDataNVX, uFippuuuuiiiiuuiiiiiiiipp) // GL_NVX_progress_fence GO(glCreateProgressFenceNVX, uFv) -GO(glSignalSemaphoreui64NVX, vFulpp) +GO(glSignalSemaphoreui64NVX, vFuipp) GO(glWaitSemaphoreui64NVX, vFuipp) GO(glClientWaitSemaphoreui64NVX, vFipp) // GL_NV_memory_object_sparse -GO(glBufferPageCommitmentMemNV, vFulluLC) -GO(glTexPageCommitmentMemNV, vFuiiiiiiiiuLC) -GO(glNamedBufferPageCommitmentMemNV, vFulluLC) -GO(glTexturePageCommitmentMemNV, vFuiiiiiiiiuLC) +GO(glBufferPageCommitmentMemNV, vFulluUC) +GO(glTexPageCommitmentMemNV, vFuiiiiiiiiuUC) +GO(glNamedBufferPageCommitmentMemNV, vFulluUC) +GO(glTexturePageCommitmentMemNV, vFuiiiiiiiiuUC) // GL_NV_vdpau_interop2 GO(glVDPAURegisterVideoSurfaceWithPictureStructureNV, lFpuipC) diff --git a/src/wrapped/wrappedlibglu.c b/src/wrapped/wrappedlibglu.c index c3467ba4af79c55fcc1fba22795655e1fbd7dd25..d57526127920a591446a8dc654740d84ae4ec3b4 100644 --- a/src/wrapped/wrappedlibglu.c +++ b/src/wrapped/wrappedlibglu.c @@ -110,12 +110,12 @@ static void* findglu_callback5Fct(void* fct) // except for GLU_TESS_COMBINE and GLU_TESS_COMBINE_DATA #define GLU_TESS_COMBINE 100105 #define GLU_TESS_COMBINE_DATA 100111 -void EXPORT my_gluQuadricCallback(x64emu_t* emu, void* a, int32_t b, void* cb) +void EXPORT my_gluQuadricCallback(x64emu_t* emu, void* a, uint32_t b, void* cb) { (void)emu; my->gluQuadricCallback(a, b, findglu_callbackFct(cb)); } -void EXPORT my_gluTessCallback(x64emu_t* emu, void* a, int32_t b, void* cb) +void EXPORT my_gluTessCallback(x64emu_t* emu, void* a, uint32_t b, void* cb) { (void)emu; if(b==GLU_TESS_COMBINE) @@ -125,7 +125,7 @@ void EXPORT my_gluTessCallback(x64emu_t* emu, void* a, int32_t b, void* cb) else my->gluTessCallback(a, b, findglu_callbackFct(cb)); } -void EXPORT my_gluNurbsCallback(x64emu_t* emu, void* a, int32_t b, void* cb) +void EXPORT my_gluNurbsCallback(x64emu_t* emu, void* a, uint32_t b, void* cb) { (void)emu; my->gluNurbsCallback(a, b, findglu_callbackFct(cb)); diff --git a/src/wrapped/wrappedlibglu_private.h b/src/wrapped/wrappedlibglu_private.h index a7c6b4ad6de5c6e41ca7813999a7ab4001ac66ec..d40c0793798c3bbeaae8eabb4c34954cc3c8294e 100644 --- a/src/wrapped/wrappedlibglu_private.h +++ b/src/wrapped/wrappedlibglu_private.h @@ -1,63 +1,64 @@ -#if defined(GO) && defined(GOM) && defined(GO2) && defined(DATA) +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif GO(gluBeginCurve,vFp) -GO(gluBeginPolygon,vFp) -GO(gluBeginSurface,vFp) -GO(gluBeginTrim,vFp) -GO(gluBuild1DMipmapLevels,iFiiiiiiiip) -GO(gluBuild1DMipmaps,iFiiiiip) -GO(gluBuild2DMipmapLevels,iFiiiiiiiiip) -GO(gluBuild2DMipmaps,iFiiiiiip) -GO(gluBuild3DMipmapLevels,iFiiiiiiiiiip) -GO(gluBuild3DMipmaps,iFiiiiiiip) -GO(gluCheckExtension,iFpp) -GO(gluCylinder,vFpdddii) -GO(gluDeleteNurbsRenderer,vFp) -GO(gluDeleteQuadric,vFp) -GO(gluDeleteTess,vFp) -GO(gluDisk,vFpddii) -GO(gluEndCurve,vFp) -GO(gluEndPolygon,vFp) -GO(gluEndSurface,vFp) -GO(gluEndTrim,vFp) -GO(gluErrorString,pFi) -GO(gluGetNurbsProperty,vFpip) -GO(gluGetString,pFi) -GO(gluGetTessProperty,vFpip) -GO(gluLoadSamplingMatrices,vFpppp) -GO(gluLookAt,vFddddddddd) -GO(gluNewNurbsRenderer,pFv) -GO(gluNewQuadric,pFv) -GO(gluNewTess,pFv) -GO(gluNextContour,vFpi) -GOM(gluNurbsCallback,vFEpip) -GO(gluNurbsCallbackData,vFpp) // to check -GO(gluNurbsCallbackDataEXT,vFpp) // to check -GO(gluNurbsCurve,vFpipipii) -GO(gluNurbsProperty,vFpif) -GO(gluNurbsSurface,vFpipipiipiii) -GO(gluOrtho2D,vFdddd) -GO(gluPartialDisk,vFpddiidd) -GO(gluPerspective,vFdddd) -GO(gluPickMatrix,vFddddp) -GO(gluProject,iFdddpppppp) -GO(gluPwlCurve,vFpipii) -GOM(gluQuadricCallback,vFEpip) -GO(gluQuadricDrawStyle,vFpi) -GO(gluQuadricNormals,vFpi) -GO(gluQuadricOrientation,vFpi) -GO(gluQuadricTexture,vFpi) -GO(gluScaleImage,iFiiiipiiip) -GO(gluSphere,vFpdii) -GO(gluTessBeginContour,vFp) -GO(gluTessBeginPolygon,vFpp) -GOM(gluTessCallback,vFEpip) -GO(gluTessEndContour,vFp) -GO(gluTessEndPolygon,vFp) -GO(gluTessNormal,vFpddd) -GO(gluTessProperty,vFpid) -GO(gluTessVertex,vFppp) -GO(gluUnProject,iFdddpppppp) -GO(gluUnProject4,iFddddpppddpppp) +GO(gluBeginPolygon, vFp) +GO(gluBeginSurface, vFp) +GO(gluBeginTrim, vFp) +GO(gluBuild1DMipmapLevels, iFuiiuuiiip) +GO(gluBuild1DMipmaps, iFuiiuup) +GO(gluBuild2DMipmapLevels, iFuiiiuuiiip) +GO(gluBuild2DMipmaps, iFuiiiuup) +GO(gluBuild3DMipmapLevels, iFuiiiiuuiiip) +GO(gluBuild3DMipmaps, iFuiiiiuup) +GO(gluCheckExtension, CFpp) +GO(gluCylinder, vFpdddii) +GO(gluDeleteNurbsRenderer, vFp) +GO(gluDeleteQuadric, vFp) +GO(gluDeleteTess, vFp) +GO(gluDisk, vFpddii) +GO(gluEndCurve, vFp) +GO(gluEndPolygon, vFp) +GO(gluEndSurface, vFp) +GO(gluEndTrim, vFp) +GO(gluErrorString, pFu) +GO(gluGetNurbsProperty, vFpup) +GO(gluGetString, pFu) +GO(gluGetTessProperty, vFpup) +GO(gluLoadSamplingMatrices, vFpppp) +GO(gluLookAt, vFddddddddd) +GO(gluNewNurbsRenderer, pFv) +GO(gluNewQuadric, pFv) +GO(gluNewTess, pFv) +GO(gluNextContour, vFpu) +GOM(gluNurbsCallback, vFEpup) +GO(gluNurbsCallbackData, vFpp) +GO(gluNurbsCallbackDataEXT, vFpp) +GO(gluNurbsCurve, vFpipipiu) +GO(gluNurbsProperty, vFpuf) +GO(gluNurbsSurface, vFpipipiipiiu) +GO(gluOrtho2D, vFdddd) +GO(gluPartialDisk, vFpddiidd) +GO(gluPerspective, vFdddd) +GO(gluPickMatrix, vFddddp) +GO(gluProject, iFdddpppppp) +GO(gluPwlCurve, vFpipiu) +GOM(gluQuadricCallback, vFEpup) +GO(gluQuadricDrawStyle, vFpu) +GO(gluQuadricNormals, vFpu) +GO(gluQuadricOrientation, vFpu) +GO(gluQuadricTexture, vFpC) +GO(gluScaleImage, iFuiiupiiup) +GO(gluSphere, vFpdii) +GO(gluTessBeginContour, vFp) +GO(gluTessBeginPolygon, vFpp) +GOM(gluTessCallback, vFEpup) +GO(gluTessEndContour, vFp) +GO(gluTessEndPolygon, vFp) +GO(gluTessNormal, vFpddd) +GO(gluTessProperty, vFpud) +GO(gluTessVertex, vFppp) +GO(gluUnProject, iFdddpppppp) +GO(gluUnProject4, iFddddpppddpppp) -#endif \ No newline at end of file diff --git a/src/wrapped/wrappedlibharfbuzz_private.h b/src/wrapped/wrappedlibharfbuzz_private.h index 464d827345739e141bb707f7c902ee805b5c45cd..b638a3efba215887e6ed22801053769bef51ba9b 100644 --- a/src/wrapped/wrappedlibharfbuzz_private.h +++ b/src/wrapped/wrappedlibharfbuzz_private.h @@ -224,7 +224,7 @@ GOM(hb_ft_face_create, pFEpp) GO(hb_ft_face_create_cached, pFp) GO(hb_ft_face_create_referenced, pFp) GO(hb_ft_font_changed, vFp) -//GO(hb_ft_font_create, +//GOM(hb_ft_font_create, pFEpp) GO(hb_ft_font_create_referenced, pFp) GO(hb_ft_font_get_face, pFp) GO(hb_ft_font_get_load_flags, iFp) @@ -235,8 +235,8 @@ GO(hb_ft_font_unlock_face, vFp) GO(hb_ft_hb_font_changed, iFp) GO(hb_glib_blob_create, pFp) GO(hb_glib_get_unicode_funcs, pFv) -GO(hb_glib_script_from_script, uFu) -GO(hb_glib_script_to_script, uFu) +GO(hb_glib_script_from_script, iFu) +GO(hb_glib_script_to_script, uFi) GO(hb_glyph_info_get_glyph_flags, uFp) GO(hb_graphite2_face_get_gr_face, pFp) GO(hb_graphite2_font_get_gr_font, pFp) @@ -260,7 +260,7 @@ GO(hb_map_is_empty, iFp) GO(hb_map_is_equal, iFpp) GO(hb_map_reference, pFp) GO(hb_map_set, vFpuu) -//GO(hb_map_set_user_data, +//GOM(hb_map_set_user_data, iFEppppi) GO(hb_ot_color_glyph_get_layers, uFpuupp) GO(hb_ot_color_glyph_reference_png, pFpu) GO(hb_ot_color_glyph_reference_svg, pFpu) @@ -389,7 +389,7 @@ GO(hb_set_previous, iFpp) GO(hb_set_previous_range, iFppp) GO(hb_set_reference, pFp) GO(hb_set_set, vFpp) -//GO(hb_set_set_user_data, +//GOM(hb_set_set_user_data, iFEppppi) GO(hb_set_subtract, vFpp) GO(hb_set_symmetric_difference, vFpp) GO(hb_set_union, vFpp) @@ -406,7 +406,7 @@ GO(hb_shape_plan_get_empty, pFv) GO(hb_shape_plan_get_shaper, pFp) GO(hb_shape_plan_get_user_data, pFpp) GO(hb_shape_plan_reference, pFp) -//GO(hb_shape_plan_set_user_data, +//GOM(hb_shape_plan_set_user_data, iFEppppi) GO(hb_style_get_value, fFpu) GO(hb_tag_from_string, uFpi) GO(hb_tag_to_string, vFup) diff --git a/src/wrapped/wrappedlibm.c b/src/wrapped/wrappedlibm.c index f1941cc4a51ba663b2a5c41432acdd2503216021..e190f9ed252513100bb9307a01c3626d32e79def 100644 --- a/src/wrapped/wrappedlibm.c +++ b/src/wrapped/wrappedlibm.c @@ -16,13 +16,8 @@ #include "debug.h" #include "emu/x64emu_private.h" -const char* libmName = -#ifdef ANDROID - "libm.so" -#else - "libm.so.6" -#endif - ; +const char* libmName = "libm.so.6"; +#define ALTNAME "libm.so" #define LIBNAME libm @@ -191,6 +186,14 @@ EXPORT double my_llrintl(x64emu_t* emu, double val) } return llrint(val); } +EXPORT double my_nexttoward(x64emu_t* emu, double val, double to) +{ + return nexttoward(val, to); +} +EXPORT float my_nexttowardf(x64emu_t* emu, float val, double to) +{ + return nexttowardf(val, to); +} #endif #ifdef ANDROID diff --git a/src/wrapped/wrappedlibm_private.h b/src/wrapped/wrappedlibm_private.h index 2849d57d321a1b2d1cc9f7ddd9af1a3f4d7368f0..2c4c2d41cc1972b7e219171ee978f01ed3b7f56a 100644 --- a/src/wrapped/wrappedlibm_private.h +++ b/src/wrapped/wrappedlibm_private.h @@ -10,61 +10,32 @@ GOW(acosh, dFd) GOW(acoshf, fFf) GOM(__acoshf_finite, fFf) GOM(__acosh_finite, dFd) -#ifdef HAVE_LD80BITS -GOW(acoshl, DFD) -#else -GO2(acoshl, KFK, acosh) -#endif -#ifdef HAVE_LD80BITS -GOW(acosl, DFD) -#else -GO2(acosl, KFK, acos) -#endif +GOWD(acoshl, DFD, acosh) +GOWD(acosl, DFD, acos) GOW(asin, dFd) GOW(asinf, fFf) GOM(__asinf_finite, fFf) GOM(__asin_finite, dFd) GOW(asinh, dFd) GOW(asinhf, fFf) -#ifdef HAVE_LD80BITS -GOW(asinhl, DFD) -#else -GO2(asinhl, KFK, asinh) -#endif -#ifdef HAVE_LD80BITS -GOW(asinl, DFD) -#else -GO2(asinl, KFK, asin) -#endif +GOWD(asinhl, DFD, asinh) +GOWD(asinl, DFD, asin) GO(atan, dFd) GOW(atan2, dFdd) GOW(atan2f, fFff) GOM(__atan2f_finite, fFff) GOM(__atan2_finite, dFdd) -#ifdef HAVE_LD80BITS -GOW(atan2l, lFDD) -#else -GO2(atan2l, lFKK, atan2) -#endif +GOWD(atan2l, lFDD, atan2) GOW(atanf, fFf) GOW(atanh, dFd) GOW(atanhf, fFf) // __atanhf_finite // __atanh_finite -#ifdef HAVE_LD80BITS -GOW(atanhl, DFD) -GOW(atanl, DFD) -#else -GO2(atanhl, KFK, atanh) -GO2(atanl, KFK, atan) -#endif +GOWD(atanhl, DFD, atanh) +GOWD(atanl, DFD, atan) GOW(cabs, XFX) GOW(cabsf, xFx) -#ifdef HAVE_LD80BITS -GOW(cabsl, DFY) -#else -GO2(cabsl, KFy, cabs) -#endif +GOWD(cabsl, DFY, cabs) GOW(cacos, XFX) GOW(cacosf, xFx) GOW(cacosh, XFX) @@ -88,36 +59,19 @@ GOW(catanhf, xFx) // catanl // Weak GOW(cbrt, dFd) GOW(cbrtf, fFf) -#ifdef HAVE_LD80BITS -GOW(cbrtl, DFD) -#else -GO2(cbrtl, KFK, cbrt) -#endif +GOWD(cbrtl, DFD, cbrt) GOW(ccos, XFX) GOW(ccosf, xFx) GOW(ccosh, XFX) GOW(ccoshf, xFx) -#ifdef HAVE_LD80BITS -GOW(ccoshl, YFY) -GOW(ccosl, YFY) -#else -GO2(ccoshl, yFy, ccosh) -GO2(ccosl, yFy, ccos) -#endif +GOWD(ccoshl, YFY, ccosh) +GOWD(ccosl, YFY, ccos) GOW(ceil, dFd) GOW(ceilf, fFf) -#ifdef HAVE_LD80BITS -GOW(ceill, DFD) // Weak -#else -GO2(ceill, KFK, ceil) -#endif +GOWD(ceill, DFD, ceil) GOW(cexp, XFX) GOW(cexpf, xFx) -#ifdef HAVE_LD80BITS -GOW(cexpl, YFY) -#else -GO2(cexpl, yFy, cexp) -#endif +GOWD(cexpl, YFY, cexp) // cimag // Weak // cimagf // Weak // cimagl // Weak @@ -129,11 +83,7 @@ GOW(clog, XFX) // clog10l // Weak // __clog10l GOW(clogf, xFx) -#ifdef HAVE_LD80BITS -GOW(clogl, YFY) -#else -GO2(clogl, yFy, clog) -#endif +GOWD(clogl, YFY, clog) // conj // Weak // conjf // Weak // conjl // Weak @@ -146,20 +96,11 @@ GOW(cosh, dFd) GOW(coshf, fFf) GOM(__coshf_finite, fFf) GOM(__cosh_finite, dFd) -#ifdef HAVE_LD80BITS -GOW(coshl, DFD) -GOW(cosl, DFD) -#else -GO2(coshl, KFK, cosh) -GO2(cosl, KFK, cos) -#endif +GOWD(coshl, DFD, cosh) +GOWD(cosl, DFD, cos) GOW(cpow, XFXX) GOW(cpowf, xFxx) -#ifdef HAVE_LD80BITS -GOW(cpowl, YFYY) -#else -GO2(cpowl, yFyy, cpow) -#endif +GOWD(cpowl, YFYY, cpow) GOW(cproj, XFX) GOW(cprojf, xFx) // cprojl // Weak @@ -170,31 +111,17 @@ GOW(csin, XFX) GOW(csinf, xFx) GOW(csinh, XFX) GOW(csinhf, xFx) -#ifdef HAVE_LD80BITS -GOW(csinhl, YFY) -GOW(csinl, YFY) -#else -GO2(csinhl, yFy, csinh) -GO2(csinl, yFy, csin) -#endif +GOWD(csinhl, YFY, csinh) +GOWD(csinl, YFY, csin) GOW(csqrt, XFX) GOW(csqrtf, xFx) -#ifdef HAVE_LD80BITS -GOW(csqrtl, YFY) -#else -GO2(csqrtl, yFy, csqrt) -#endif +GOWD(csqrtl, YFY, csqrt) GOW(ctan, XFX) GOW(ctanf, xFx) GOW(ctanh, XFX) GOW(ctanhf, xFx) -#ifdef HAVE_LD80BITS -GOW(ctanhl, YFY) -GOW(ctanl, YFY) -#else -GO2(ctanhl, yFy, ctanh) -GO2(ctanl, yFy, ctan) -#endif +GOWD(ctanhl, YFY, ctanh) +GOWD(ctanl, YFY, ctan) // __cxa_finalize // Weak // drem // Weak // dremf // Weak @@ -202,17 +129,9 @@ GO2(ctanl, yFy, ctan) GOW(erf, dFd) GOW(erfc, dFd) GOW(erfcf, fFf) -#ifdef HAVE_LD80BITS -GOW(erfcl, DFD) -#else -GO2(erfcl, KFK, erfc) -#endif +GOWD(erfcl, DFD, erfc) GOW(erff, fFf) -#ifdef HAVE_LD80BITS -GOW(erfl, DFD) -#else -GO2(erfl, KFK, erf) -#endif +GOWD(erfl, DFD, erf) GOW(exp, dFd) GOW(exp10, dFd) GOW(exp10f, fFf) @@ -223,26 +142,14 @@ GOW(exp2, dFd) GOW(exp2f, fFf) GOM(__exp2f_finite, fFf) GOM(__exp2_finite, dFd) -#ifdef HAVE_LD80BITS -GOW(exp2l, DFD) -#else -GO2(exp2l, KFK, exp2) -#endif +GOWD(exp2l, DFD, exp2) GOW(expf, fFf) GOM(__expf_finite, fFf) GOM(__exp_finite, dFd) -#ifdef HAVE_LD80BITS -GOW(expl, DFD) -#else -GO2(expl, KFK, exp) -#endif +GOWD(expl, DFD, exp) GOW(expm1, dFd) GOW(expm1f, fFf) -#ifdef HAVE_LD80BITS -GOW(expm1l, DFD) -#else -GO2(expm1l, KFK, expm1) -#endif +GOWD(expm1l, DFD, expm1) GOW(fabs, dFd) GOW(fabsf, fFf) // fabsl // Weak @@ -271,18 +178,10 @@ GO(__finitef, iFf) // __finitel GOW(floor, dFd) GOW(floorf, fFf) -#ifdef HAVE_LD80BITS -GOW(floorl, DFD) -#else -GO2(floorl, KFK, floor) -#endif +GOWD(floorl, DFD, floor) GOW(fma, dFddd) GOW(fmaf, fFfff) -#ifdef HAVE_LD80BITS -GOW(fmal, DFDDD) -#else -GO2(fmal, KFKKK, fma) -#endif +GOWD(fmal, DFDDD, fma) GOW(fmax, dFdd) GOW(fmaxf, fFff) // fmaxl // Weak @@ -293,20 +192,12 @@ GOW(fmod, dFdd) GOW(fmodf, fFff) GOM(__fmodf_finite, fFff) GOM(__fmod_finite, dFdd) -#ifdef HAVE_LD80BITS -GOW(fmodl, DFDD) -#else -GO2(fmodl, KFKK, fmod) -#endif +GOWD(fmodl, DFDD, fmod) GO(__fpclassify, iFd) GO(__fpclassifyf, iFf) GOW(frexp, dFdp) GOW(frexpf, fFfp) -#ifdef HAVE_LD80BITS -GOW(frexpl, DFDp) -#else -GO2(frexpl, KFKp, frexp) -#endif +GOWD(frexpl, DFDp, frexp) // gamma // Weak // gammaf // Weak // __gammaf_r_finite @@ -317,11 +208,7 @@ GOW(hypot, dFdd) GOW(hypotf, fFff) GOM(__hypotf_finite, fFff) GOM(__hypot_finite, dFdd) -#ifdef HAVE_LD80BITS -GOW(hypotl, DFDD) -#else -GO2(hypotl, KFKK, hypot) -#endif +GOWD(hypotl, DFDD, hypot) GOW(ilogb, iFd) GOW(ilogbf, iFf) // ilogbl // Weak @@ -343,32 +230,16 @@ GO(jn, dFid) GO(jnf, fFif) // __jnf_finite // __jn_finite -#ifdef HAVE_LD80BITS -GO(jnl, DFiD) -#else -GO2(jnl, KFiK, jn) -#endif +GOD(jnl, DFiD, jn) GOW(ldexp, dFdi) GOW(ldexpf, fFfi) -#ifdef HAVE_LD80BITS -GOW(ldexpl, DFD) -#else -GO2(ldexpl, KFK, ldexp) -#endif +GOWD(ldexpl, DFD, ldexp) GOW(lgamma, dFd) GOW(lgammaf, fFf) GOW(lgammaf_r, fFfp) // __lgammaf_r_finite -#ifdef HAVE_LD80BITS -GOW(lgammal, DFD) -#else -GO2(lgammal, KFK, lgamma) -#endif -#ifdef HAVE_LD80BITS -GOW(lgammal_r, DFDp) -#else -GO2(lgammal_r, KFKp, lgamma_r) -#endif +GOWD(lgammal, DFD, lgamma) +GOWD(lgammal_r, DFDp, lgamma_r) GOW(lgamma_r, dFdp) // __lgamma_r_finite #ifdef STATICBUILD @@ -378,11 +249,7 @@ DATAV(_LIB_VERSION, 8) #endif GOWM(llrint, IFEd) GOWM(llrintf, IFEf) -#ifdef HAVE_LD80BITS GOWM(llrintl, IFED) -#else -GOWM(llrintl, IFEK) -#endif GOW(llround, IFd) GOW(llroundf, IFf) // llroundl // Weak @@ -391,48 +258,28 @@ GOW(log10, dFd) GOW(log10f, fFf) GOM(__log10f_finite, fFf) GOM(__log10_finite, dFd) -#ifdef HAVE_LD80BITS -GOW(log10l, DFD) -#else -GO2(log10l, KFK, log10) //Weak -#endif +GOWD(log10l, DFD, log10) //Weak GOW(log1p, dFd) GOW(log1pf, fFf) -#ifdef HAVE_LD80BITS -GOW(log1pl, DFD) -#else -GO2(log1pl, KFK, log1p) -#endif +GOWD(log1pl, DFD, log1p) GOW(log2, dFd) GOW(log2f, fFf) GOM(__log2f_finite, fFf) GOM(__log2_finite, dFd) -#ifdef HAVE_LD80BITS -GOW(log2l, DFD) -#else -GO2(log2l, KFK, log2) -#endif +GOWD(log2l, DFD, log2) GOW(logb, dFd) GOW(logbf, fFf) // logbl // Weak GOW(logf, fFf) GOM(__logf_finite, fFf) GOM(__log_finite, dFd) -#ifdef HAVE_LD80BITS -GOW(logl, DFD) -#else -GO2(logl, KFK, log) -#endif +GOWD(logl, DFD, log) GOWM(lrint, iFEd) GOWM(lrintf, iFEf) // lrintl // Weak GOW(lround, iFd) GOW(lroundf, iFf) -#ifdef HAVE_LD80BITS -GOW(lroundl, lFD) -#else -GO2(lroundl, lFK, lround) -#endif +GOWD(lroundl, lFD, lround) // matherr // Weak GOW(modf, dFdp) GOW(modff, fFfp) @@ -445,30 +292,18 @@ GOWM(nearbyintf, fFEf) // nearbyintl // Weak GOW(nextafter, dFdd) GOW(nextafterf, fFff) -#ifdef HAVE_LD80BITS -GOW(nextafterl, DFDD) -#else -GO2(nextafterl, KFKK, nextafter) -#endif -GOW(nexttoward, dFdD) -GOW(nexttowardf, fFfD) +GOWD(nextafterl, DFDD, nextafter) +GOWD(nexttoward, dFdD, my_nexttoward) // This loses precision +GOWD(nexttowardf, fFfD, my_nexttowardf) // This loses precision // nexttowardl // Weak GOW(pow, dFdd) GOWM(pow10, dFd) GOWM(pow10f, fFf) -#ifdef HAVE_LD80BITS GOWM(pow10l, DFD) -#else -GOWM(pow10l, KFK) -#endif GOW(powf, fFff) GOM(__powf_finite, fFff) GOM(__pow_finite, dFdd) -#ifdef HAVE_LD80BITS -GOW(powl, DFDD) -#else -GO2(powl, KFKK, pow) -#endif +GOWD(powl, DFDD, pow) GOW(remainder, dFdd) GOW(remainderf, fFff) // __remainderf_finite @@ -485,11 +320,7 @@ GOW(roundf, fFf) GO(roundeven, dFd) //since C23 GO(roundevenf, fFf) //GO(roundevenl, DFD) -#ifdef HAVE_LD80BITS -GOW(roundl, DFD) -#else -GO2(roundl, KFK, round) -#endif +GOWD(roundl, DFD, round) // scalb // Weak // scalbf // Weak // __scalbf_finite @@ -510,50 +341,28 @@ DATAB(signgam, 8) GOW(sin, dFd) GOW(sincos, vFdpp) GOW(sincosf, vFfpp) -#ifdef HAVE_LD80BITS -GOW(sincosl, vFDpp) -#else -GO2(sincosl, vFKpp, sincos) -#endif +GOWD(sincosl, vFDpp, sincos) GOW(sinf, fFf) GOW(sinh, dFd) GOW(sinhf, fFf) GOM(__sinhf_finite, fFf) GOM(__sinh_finite, dFd) -#ifdef HAVE_LD80BITS -GOW(sinhl, DFD) -GOW(sinl, DFD) -#else -GO2(sinhl, KFK, sinh) -GO2(sinl, KFK, sin) -#endif +GOWD(sinhl, DFD, sinh) +GOWD(sinl, DFD, sin) GOW(sqrt, dFd) GOW(sqrtf, fFf) GOM(__sqrtf_finite, fFf) GOM(__sqrt_finite, dFd) -#ifdef HAVE_LD80BITS -GOW(sqrtl, DFD) -#else -GO2(sqrtl, KFK, sqrt) // Weak -#endif +GOWD(sqrtl, DFD, sqrt) GO(tan, dFd) GOW(tanf, fFf) GOW(tanh, dFd) GOW(tanhf, fFf) -#ifdef HAVE_LD80BITS -GOW(tanhl, DFD) -GOW(tanl, DFD) -#else -GO2(tanhl, KFK, tanh) -GO2(tanl, KFK, tan) -#endif +GOWD(tanhl, DFD, tanh) +GOWD(tanl, DFD, tan) GOW(tgamma, dFd) GOW(tgammaf, fFf) -#ifdef HAVE_LD80BITS -GOW(tgammal, DFD) -#else -GO2(tgammal, KFK, tgamma) -#endif +GOWD(tgammal, DFD, tgamma) GOW(trunc, dFd) GOW(truncf, fFf) // truncl // Weak @@ -571,8 +380,4 @@ GO(yn, dFid) GO(ynf, fFif) // __ynf_finite // __yn_finite -#ifdef HAVE_LD80BITS -GO(ynl, DFiD) -#else -GO2(ynl, KFiK, yn) -#endif +GOD(ynl, DFiD, yn) diff --git a/src/wrapped/wrappedlibnettle8.c b/src/wrapped/wrappedlibnettle8.c index d18ec684cfde3d090d7c3a9ac01f929c3599a738..785c3366626c0be4b9cba5292d639ce627af92b6 100644 --- a/src/wrapped/wrappedlibnettle8.c +++ b/src/wrapped/wrappedlibnettle8.c @@ -131,22 +131,22 @@ EXPORT int my_nettle_ccm_decrypt_message(x64emu_t* emu, void* cipher, void* f, s return my->nettle_ccm_decrypt_message(cipher, findnettle_cipher_funcFct(f), nlen, nonce, alen, adata, tlen, mlen, dst, src); } -EXPORT int my_nettle_cfb_decrypt(x64emu_t* emu, void* cipher, void* f, size_t blen, void* iv, size_t len, void* dst, void* src) +EXPORT void my_nettle_cfb_decrypt(x64emu_t* emu, void* cipher, void* f, size_t blen, void* iv, size_t len, void* dst, void* src) { my->nettle_cfb_decrypt(cipher, findnettle_cipher_funcFct(f), blen, iv, len, dst, src); } -EXPORT int my_nettle_cfb_encrypt(x64emu_t* emu, void* cipher, void* f, size_t blen, void* iv, size_t len, void* dst, void* src) +EXPORT void my_nettle_cfb_encrypt(x64emu_t* emu, void* cipher, void* f, size_t blen, void* iv, size_t len, void* dst, void* src) { my->nettle_cfb_encrypt(cipher, findnettle_cipher_funcFct(f), blen, iv, len, dst, src); } -EXPORT int my_nettle_cfb8_decrypt(x64emu_t* emu, void* cipher, void* f, size_t blen, void* iv, size_t len, void* dst, void* src) +EXPORT void my_nettle_cfb8_decrypt(x64emu_t* emu, void* cipher, void* f, size_t blen, void* iv, size_t len, void* dst, void* src) { my->nettle_cfb8_decrypt(cipher, findnettle_cipher_funcFct(f), blen, iv, len, dst, src); } -EXPORT int my_nettle_cfb8_encrypt(x64emu_t* emu, void* cipher, void* f, size_t blen, void* iv, size_t len, void* dst, void* src) +EXPORT void my_nettle_cfb8_encrypt(x64emu_t* emu, void* cipher, void* f, size_t blen, void* iv, size_t len, void* dst, void* src) { my->nettle_cfb8_encrypt(cipher, findnettle_cipher_funcFct(f), blen, iv, len, dst, src); } diff --git a/src/wrapped/wrappedlibogg.c b/src/wrapped/wrappedlibogg.c index f922d8af9b76cc2d6ed06f8c1d6fccd54f32ae5b..b41fe78a4193ca687c9c434c8478057b53df98f2 100644 --- a/src/wrapped/wrappedlibogg.c +++ b/src/wrapped/wrappedlibogg.c @@ -12,6 +12,8 @@ #include "x64emu.h" const char* liboggName = "libogg.so.0"; +#define ALTNAME "libogg.so" + #define LIBNAME libogg #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibpthread.c b/src/wrapped/wrappedlibpthread.c index 2d25d66ca79a59e22fe13714712fbcc5a4ae41b3..1effff5071594d29b7e08abb94bd670a6290d888 100644 --- a/src/wrapped/wrappedlibpthread.c +++ b/src/wrapped/wrappedlibpthread.c @@ -18,12 +18,9 @@ #include "box64context.h" #include "librarian.h" -const char* libpthreadName = -#ifdef ANDROID - "libc.so"; -#else - "libpthread.so.0"; -#endif +const char* libpthreadName = "libpthread.so.0"; +#define ALTNAME "libc.so" + #define LIBNAME libpthread //EXPORT int my_pthread_attr_setschedparam(x64emu_t* emu, void* attr, void* param) diff --git a/src/wrapped/wrappedlibpthread_private.h b/src/wrapped/wrappedlibpthread_private.h index da7d0200a9cd8641655221f600874b3be798cad5..cdb241c69f1def8eea60c73148f5fb1a4082115a 100644 --- a/src/wrapped/wrappedlibpthread_private.h +++ b/src/wrapped/wrappedlibpthread_private.h @@ -60,6 +60,7 @@ GOM(pthread_attr_setschedpolicy, iFEpi) GOM(pthread_attr_setscope, iFEpi) GOM(pthread_attr_setstackaddr, iFEpp) #endif +GO2(pthread_attr_setaffinity_np@GLIBC_2.3.3, iFEpp, my_pthread_attr_setaffinity_np_old) GOM(pthread_attr_setstack, iFEppL) GOM(pthread_attr_setstacksize, iFEpL) #ifdef NOALIGN @@ -110,11 +111,18 @@ GOM(pthread_cond_init, iFEpp) GOM(pthread_cond_signal, iFEp) GOM(pthread_cond_timedwait, iFEppp) GOM(pthread_cond_wait, iFEpp) +GO2(pthread_cond_broadcast@GLIBC_2.2.5, iFEp, my_pthread_cond_broadcast_old) +GO2(pthread_cond_destroy@GLIBC_2.2.5, iFEp, my_pthread_cond_destroy_old) +GO2(pthread_cond_init@GLIBC_2.2.5, iFEpp, my_pthread_cond_init_old) +GO2(pthread_cond_signal@GLIBC_2.2.5, iFEp, my_pthread_cond_signal_old) +GO2(pthread_cond_timedwait@GLIBC_2.2.5, iFEppp, my_pthread_cond_timedwait_old) +GO2(pthread_cond_wait@GLIBC_2.2.5, iFEpp, my_pthread_cond_wait_old) GOM(pthread_create, iFEpppp) GOM(pthread_cond_clockwait, iFEppip) GO(pthread_detach, iFL) GO(pthread_equal, iFLL) GO(pthread_exit, vFp) +GO2(pthread_getaffinity_np@GLIBC_2.3.3, iFEpp, my_pthread_getaffinity_np_old) GOM(pthread_getaffinity_np, iFEpLp) #ifdef NOALIGN GO(pthread_getattr_np, iFLp) @@ -232,6 +240,7 @@ GO(pthread_rwlock_unlock, iFp) GO(__pthread_rwlock_wrlock, iFp) GO(pthread_rwlock_wrlock, iFp) GO(pthread_self, LFv) +GO2(pthread_setaffinity_np@GLIBC_2.3.3, iFEpp, my_pthread_setaffinity_np_old) GOM(pthread_setaffinity_np, iFEpLp) GO(pthread_setcancelstate, iFip) GO(pthread_setcanceltype, iFip) @@ -262,7 +271,7 @@ GO(sem_clockwait, iFppp) GO(sem_destroy, iFp) GO(sem_getvalue, iFpp) GO(sem_init, iFpiu) -GO(sem_open, pFpOM) +GO(sem_open, pFpONN) GO(sem_post, iFp) GO(sem_timedwait, iFpp) GO(sem_trywait, iFp) diff --git a/src/wrapped/wrappedlibresolv_private.h b/src/wrapped/wrappedlibresolv_private.h index 8f2fceb22e61492ae6511f73b579302891134e95..8890e6e513eb3d9bae9e84dac9244e41a446b7b9 100644 --- a/src/wrapped/wrappedlibresolv_private.h +++ b/src/wrapped/wrappedlibresolv_private.h @@ -1,5 +1,5 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif GO(__b64_ntop, iFpLpL) @@ -9,15 +9,15 @@ GO(__dn_count_labels, iFp) GO(__dn_expand, iFppppi) GOW(dn_expand, iFppppi) GO(__dn_skipname, iFpp) -GO(__fp_nquery, vFpip) -GO(__fp_query, vFpp) -//GO(__fp_resstat -//GO(_gethtbyaddr -//GO(_gethtbyname -//GO(_gethtbyname2 -//GO(_gethtent -//GO(_getlong -//GO(_getshort +GO(__fp_nquery, vFpiS) +GO(__fp_query, vFpS) +GO(__fp_resstat, vFpS) +//GO(_gethtbyaddr, +//GO(_gethtbyname, +//GO(_gethtbyname2, +//GO(_gethtent, +//GO(_getlong, +//GO(_getshort, GO(__hostalias, pFp) GO(inet_neta, pFupL) GO(inet_net_ntop, pFipipL) @@ -25,70 +25,70 @@ GO(inet_net_pton, iFippL) GO(__loc_aton, iFpp) GO(__loc_ntoa, pFpp) GO(ns_datetosecs, uFpp) -//GO(ns_format_ttl +GO(ns_format_ttl, iFLpL) GO(__ns_get16, uFp) GOW(ns_get16, uFp) GO(__ns_get32, LFp) GOW(ns_get32, LFp) GO(ns_initparse, iFpip) -//GO(ns_makecanon -//GO(ns_msg_getflag +GO(ns_makecanon, iFppL) +//GO(ns_msg_getflag, GO(ns_name_compress, iFppLpp) GO(ns_name_ntol, iFppL) GO(__ns_name_ntop, iFppL) -GOW(ns_name_ntop,iFppL) +GOW(ns_name_ntop, iFppL) GO(ns_name_pack, iFppipp) GO(ns_name_pton, iFppL) -GO(ns_name_rollback, iFpp) +GO(ns_name_rollback, vFppp) GO(ns_name_skip, iFpp) GO(ns_name_uncompress, iFppppL) GO(__ns_name_unpack, iFppppL) GOW(ns_name_unpack, iFppppL) -GO(ns_parserr, iFpiip) -//GO(ns_parse_ttl +GO(ns_parserr, iFpuip) +GO(ns_parse_ttl, iFpp) GO(ns_put16, vFup) GO(ns_put32, vFLp) -//GO(ns_samedomain -//GO(ns_samename -GO(ns_skiprr, iFppii) -//GO(ns_sprintrr -//GO(ns_sprintrrf -//GO(ns_subdomain -GO(__p_cdname, pFppp) -GO(__p_cdnname, pFppip) +GO(ns_samedomain, iFpp) +GO(ns_samename, iFpp) +GO(ns_skiprr, iFppui) +GO(ns_sprintrr, iFpppppL) +GO(ns_sprintrrf, iFpLpuuLpLpppL) +GO(ns_subdomain, iFpp) +GO(__p_cdname, pFppS) +GO(__p_cdnname, pFppiS) GO(__p_class, pFi) //DATA(__p_class_syms, 4) -GO(__p_fqname, pFppp) +GO(__p_fqname, pFppS) GO(__p_fqnname, pFppipi) GO(__p_option, pFL) GO(__p_query, vFp) GO(__p_rcode, pFi) -//GO(__p_secstodate -GO(__p_time, pFL) +//GO(__p_secstodate, +GO(__p_time, pFu) GO(__p_type, pFi) //DATA(__p_type_syms, 4) -GO(__putlong, vFLp) +GO(__putlong, vFup) GO(__putshort, vFWp) GO(__res_close, vFv) -//GO(__res_context_hostalias -//GO(__res_context_query -//GO(__res_context_search +//GO(__res_context_hostalias, +//GO(__res_context_query, +//GO(__res_context_search, GO(__res_dnok, iFp) -//GO(res_gethostbyaddr -//GO(res_gethostbyname -//GO(res_gethostbyname2 +//GO(res_gethostbyaddr, +//GO(res_gethostbyname, +//GO(res_gethostbyname2, GO(__res_hnok, iFp) -//GO(__res_hostalias +GO(__res_hostalias, pFpppL) GO(__res_isourserver, iFp) GO(__res_mailok, iFp) GO(__res_mkquery, iFipiipippi) GOW(res_mkquery, iFipiipippi) GO(__res_nameinquery, iFpiipp) -//GO(__res_nmkquery +//GO(__res_nmkquery, GO(__res_nquery, iFppiipi) -//GO(__res_nquerydomain +//GO(__res_nquerydomain, GO(__res_nsearch, iFppiipi) -//GO(__res_nsend +//GO(__res_nsend, //DATA(_res_opcodes, 4) GO(__res_ownok, iFp) GO(__res_queriesmatch, iFpppp) @@ -99,9 +99,9 @@ GOW(res_querydomain, iFppiipi) GO2(__res_search, iFpiipi, res_search) GOW(res_search, iFpiipi) GO(__res_send, iFpipi) -//GO(res_send_setqhook -//GO(res_send_setrhook -//GO(_sethtent +//GO(res_send_setqhook, +//GO(res_send_setrhook, +//GO(_sethtent, GO(__sym_ntop, pFpip) GO(__sym_ntos, pFpip) GO(__sym_ston, iFppp) diff --git a/src/wrapped/wrappedlibrt.c b/src/wrapped/wrappedlibrt.c index 1ca32859657912ecfa1149a103188c0f6a60d16b..438b33129929e877aac14eb8e680a6e68949f527 100644 --- a/src/wrapped/wrappedlibrt.c +++ b/src/wrapped/wrappedlibrt.c @@ -162,4 +162,9 @@ EXPORT int my_lio_listio(x64emu_t* emu, int mode, void* list[], int nent, struct extern int __mq_open_2(const char*, int); #endif +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibrt_private.h b/src/wrapped/wrappedlibrt_private.h index 0f9082971cd22d5f00a49321d0efd78aba3a7870..574453f7f6afd94bae13a8d71a8e621463bb0594 100644 --- a/src/wrapped/wrappedlibrt_private.h +++ b/src/wrapped/wrappedlibrt_private.h @@ -32,7 +32,7 @@ GOM(lio_listio, iFEipip) GO(mq_close, iFi) GO(mq_getattr, iFip) GO(mq_notify, iFip) -GO(mq_open, iFpOM) +GO(mq_open, iFpONN) GO(__mq_open_2, iFpO) GO(mq_receive, lFipLp) GO(mq_send, iFipLu) diff --git a/src/wrapped/wrappedlibsndfile.c b/src/wrapped/wrappedlibsndfile.c index eaa54230617ffe7ec18b9799100ff188d42d7e29..6e265b66a11ca2b55e58c7a1492f44082cbcd8e8 100644 --- a/src/wrapped/wrappedlibsndfile.c +++ b/src/wrapped/wrappedlibsndfile.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libsndfileName = "libsndfile.so"; -#else - const char* libsndfileName = "libsndfile.so.1"; -#endif +const char* libsndfileName = "libsndfile.so.1"; +#define ALTNAME "libsndfile.so" #define LIBNAME libsndfile diff --git a/src/wrapped/wrappedlibssl3.c b/src/wrapped/wrappedlibssl3.c index 4c75d921ce196cd103475d250bb7cb34a8a1960f..658fd2fdd2751df8285da0f13c72ec30c060788c 100644 --- a/src/wrapped/wrappedlibssl3.c +++ b/src/wrapped/wrappedlibssl3.c @@ -34,10 +34,10 @@ GO(4) // pem_passwd_cb #define GO(A) \ -static uintptr_t my3_pem_passwd_cb_fct_##A = 0; \ -static int my3_pem_passwd_cb_##A(void* buf, int size, int rwflag, void* password) \ +static uintptr_t my3_pem_passwd_cb_fct_##A = 0; \ +static int my3_pem_passwd_cb_##A(void* buf, int size, int rwflag, void* password) \ { \ - return (int)RunFunctionFmt(my3_pem_passwd_cb_fct_##A, "piip", buf, size, rwflag, password); \ + return (int)RunFunctionFmt(my3_pem_passwd_cb_fct_##A, "piip", buf, size, rwflag, password); \ } SUPER() #undef GO @@ -68,10 +68,10 @@ static void* reverse_pem_passwd_cb_Fct(void* fct) // anonymous #define GO(A) \ -static uintptr_t my3_anonymous_fct_##A = 0; \ -static void* my3_anonymous_##A(void* a, void* b, void* c, void *d) \ +static uintptr_t my3_anonymous_fct_##A = 0; \ +static void* my3_anonymous_##A(void* a, void* b, void* c, void *d) \ { \ - return (void*)RunFunctionFmt(my3_anonymous_fct_##A, "pppp", a, b, c, d); \ + return (void*)RunFunctionFmt(my3_anonymous_fct_##A, "pppp", a, b, c, d); \ } SUPER() #undef GO @@ -93,10 +93,10 @@ static void* find_anonymous_Fct(void* fct) // verify #define GO(A) \ -static uintptr_t my3_verify_fct_##A = 0; \ -static int my3_verify_##A(int a, void* b) \ -{ \ - return (int)RunFunctionFmt(my3_verify_fct_##A, "ip", a, b); \ +static uintptr_t my3_verify_fct_##A = 0; \ +static int my3_verify_##A(int a, void* b) \ +{ \ + return (int)RunFunctionFmt(my3_verify_fct_##A, "ip", a, b); \ } SUPER() #undef GO @@ -129,8 +129,8 @@ static void* reverse_verify_Fct(void* fct) #define GO(A) \ static uintptr_t my3_ex_new_fct_##A = 0; \ static void my3_ex_new_##A(void* parent, void* ptr, void* ad, int idx, long argl, void* argp) \ -{ \ - RunFunctionFmt(my3_ex_new_fct_##A, "pppilp", parent, ptr, ad, idx, argl, argp); \ +{ \ + RunFunctionFmt(my3_ex_new_fct_##A, "pppilp", parent, ptr, ad, idx, argl, argp); \ } SUPER() #undef GO @@ -151,10 +151,10 @@ static void* find_ex_new_Fct(void* fct) // ex_free #define GO(A) \ -static uintptr_t my3_ex_free_fct_##A = 0; \ -static void my3_ex_free_##A(void* parent, void* ptr, void* ad, int idx, long argl, void* argp) \ +static uintptr_t my3_ex_free_fct_##A = 0; \ +static void my3_ex_free_##A(void* parent, void* ptr, void* ad, int idx, long argl, void* argp) \ { \ - RunFunctionFmt(my3_ex_free_fct_##A, "pppilp", parent, ptr, ad, idx, argl, argp); \ + RunFunctionFmt(my3_ex_free_fct_##A, "pppilp", parent, ptr, ad, idx, argl, argp); \ } SUPER() #undef GO @@ -175,10 +175,10 @@ static void* find_ex_free_Fct(void* fct) // ex_dup #define GO(A) \ -static uintptr_t my3_ex_dup_fct_##A = 0; \ -static int my3_ex_dup_##A(void* to, void* from, void* from_d, int idx, long argl, void* argp) \ +static uintptr_t my3_ex_dup_fct_##A = 0; \ +static int my3_ex_dup_##A(void* to, void* from, void* from_d, int idx, long argl, void* argp) \ { \ - return (int) RunFunctionFmt(my3_ex_dup_fct_##A, "pppilp", to, from, from_d, idx, argl, argp); \ + return (int) RunFunctionFmt(my3_ex_dup_fct_##A, "pppilp", to, from, from_d, idx, argl, argp); \ } SUPER() #undef GO @@ -199,10 +199,10 @@ static void* find_ex_dup_Fct(void* fct) // client_cb #define GO(A) \ -static uintptr_t my3_client_cb_fct_##A = 0; \ -static uint32_t my3_client_cb_##A(void* ssl, void* hint, void* identity, uint32_t id_len, void* psk, uint32_t psk_len) \ +static uintptr_t my3_client_cb_fct_##A = 0; \ +static uint32_t my3_client_cb_##A(void* ssl, void* hint, void* identity, uint32_t id_len, void* psk, uint32_t psk_len) \ { \ - return RunFunctionFmt(my3_client_cb_fct_##A, "pppupu", ssl, hint, identity, id_len, psk, psk_len); \ + return RunFunctionFmt(my3_client_cb_fct_##A, "pppupu", ssl, hint, identity, id_len, psk, psk_len); \ } SUPER() #undef GO @@ -223,10 +223,10 @@ static void* find_client_cb_Fct(void* fct) // proto_select #define GO(A) \ -static uintptr_t my3_proto_select_fct_##A = 0; \ -static int my3_proto_select_##A(void* s, void* out, void* outlen, void* in, uint32_t inlen, void* arg) \ +static uintptr_t my3_proto_select_fct_##A = 0; \ +static int my3_proto_select_##A(void* s, void* out, void* outlen, void* in, uint32_t inlen, void* arg) \ { \ - return (int)RunFunctionFmt(my3_proto_select_fct_##A, "ppppup", s, out, outlen, in, inlen, arg); \ + return (int)RunFunctionFmt(my3_proto_select_fct_##A, "ppppup", s, out, outlen, in, inlen, arg); \ } SUPER() #undef GO @@ -247,9 +247,9 @@ static void* find_proto_select_Fct(void* fct) // client_cert #define GO(A) \ -static uintptr_t my3_client_cert_fct_##A = 0; \ -static int my3_client_cert_##A(void* a, void* b, void* c) \ -{ \ +static uintptr_t my3_client_cert_fct_##A = 0; \ +static int my3_client_cert_##A(void* a, void* b, void* c) \ +{ \ return (int)RunFunctionFmt(my3_client_cert_fct_##A, "ppp", a, b, c); \ } SUPER() @@ -274,7 +274,7 @@ static void* find_client_cert_Fct(void* fct) static uintptr_t my3_alpn_select_cb_fct_##A = 0; \ static int my3_alpn_select_cb_##A(void* a, void* b, void* c, void* d, uint32_t e, void* f) \ { \ - return (int)RunFunctionFmt(my3_alpn_select_cb_fct_##A, "ppppup", a, b, c, d, e, f); \ + return (int)RunFunctionFmt(my3_alpn_select_cb_fct_##A, "ppppup", a, b, c, d, e, f); \ } SUPER() #undef GO @@ -338,6 +338,236 @@ static void* find_msg_cb_Fct(void* fct) printf_log(LOG_NONE, "Warning, no more slot for libSSL msg_cb callback\n"); return NULL; } +// info_cb +#define GO(A) \ +static uintptr_t my3_info_cb_fct_##A = 0; \ +static void my3_info_cb_##A(void* a, int b, int c) \ +{ \ + RunFunctionFmt(my3_info_cb_fct_##A, "pii", a, b, c); \ +} +SUPER() +#undef GO +static void* find_info_cb_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my3_info_cb_fct_##A == (uintptr_t)fct) return my3_info_cb_##A; + SUPER() + #undef GO + #define GO(A) if(my3_info_cb_fct_##A == 0) {my3_info_cb_fct_##A = (uintptr_t)fct; return my3_info_cb_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libSSL info_cb callback\n"); + return NULL; +} +// new_seesion_cb +#define GO(A) \ +static uintptr_t my_new_seesion_cb_fct_##A = 0; \ +static int my_new_seesion_cb_##A(void* a, void* b) \ +{ \ + return (int)RunFunctionFmt(my_new_seesion_cb_fct_##A, "pp", a, b); \ +} +SUPER() +#undef GO +static void* find_new_seesion_cb_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_new_seesion_cb_fct_##A == (uintptr_t)fct) return my_new_seesion_cb_##A; + SUPER() + #undef GO + #define GO(A) if(my_new_seesion_cb_fct_##A == 0) {my_new_seesion_cb_fct_##A = (uintptr_t)fct; return my_new_seesion_cb_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for ssl3 new_seesion_cb callback\n"); + return NULL; +} +// psk_use_session_cb +#define GO(A) \ +static uintptr_t my_psk_use_session_cb_fct_##A = 0; \ +static int my_psk_use_session_cb_##A(void* a, void* b, void* c, void* d, void* e) \ +{ \ + return (int)RunFunctionFmt(my_psk_use_session_cb_fct_##A, "ppppp", a, b, c, d, e); \ +} +SUPER() +#undef GO +static void* find_psk_use_session_cb_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_psk_use_session_cb_fct_##A == (uintptr_t)fct) return my_psk_use_session_cb_##A; + SUPER() + #undef GO + #define GO(A) if(my_psk_use_session_cb_fct_##A == 0) {my_psk_use_session_cb_fct_##A = (uintptr_t)fct; return my_psk_use_session_cb_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for ssl3 psk_use_session_cb callback\n"); + return NULL; +} +// app_verify_cookie_cb +#define GO(A) \ +static uintptr_t my_app_verify_cookie_cb_fct_##A = 0; \ +static int my_app_verify_cookie_cb_##A(void* a, void* b, uint32_t c) \ +{ \ + return (int)RunFunctionFmt(my_app_verify_cookie_cb_fct_##A, "ppu", a, b, c); \ +} +SUPER() +#undef GO +static void* find_app_verify_cookie_cb_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_app_verify_cookie_cb_fct_##A == (uintptr_t)fct) return my_app_verify_cookie_cb_##A; + SUPER() + #undef GO + #define GO(A) if(my_app_verify_cookie_cb_fct_##A == 0) {my_app_verify_cookie_cb_fct_##A = (uintptr_t)fct; return my_app_verify_cookie_cb_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for ssl3 app_verify_cookie_cb callback\n"); + return NULL; +} +// set_cookie_generate_cb +#define GO(A) \ +static uintptr_t my_set_cookie_generate_cb_fct_##A = 0; \ +static int my_set_cookie_generate_cb_##A(void* a, void* b, void* c) \ +{ \ + return (int)RunFunctionFmt(my_set_cookie_generate_cb_fct_##A, "ppp", a, b, c); \ +} +SUPER() +#undef GO +static void* find_set_cookie_generate_cb_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_set_cookie_generate_cb_fct_##A == (uintptr_t)fct) return my_set_cookie_generate_cb_##A; + SUPER() + #undef GO + #define GO(A) if(my_set_cookie_generate_cb_fct_##A == 0) {my_set_cookie_generate_cb_fct_##A = (uintptr_t)fct; return my_set_cookie_generate_cb_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for ssl3 set_cookie_generate_cb callback\n"); + return NULL; +} +// psk_server_cb +#define GO(A) \ +static uintptr_t my_psk_server_cb_fct_##A = 0; \ +static uint32_t my_psk_server_cb_##A(void* a, void* b, void* c, uint32_t d) \ +{ \ + return (uint32_t)RunFunctionFmt(my_psk_server_cb_fct_##A, "pppu", a, b, c, d); \ +} +SUPER() +#undef GO +static void* find_psk_server_cb_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_psk_server_cb_fct_##A == (uintptr_t)fct) return my_psk_server_cb_##A; + SUPER() + #undef GO + #define GO(A) if(my_psk_server_cb_fct_##A == 0) {my_psk_server_cb_fct_##A = (uintptr_t)fct; return my_psk_server_cb_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for ssl3 psk_server_cb callback\n"); + return NULL; +} +// read_write +#define GO(A) \ +static uintptr_t my_read_write_fct_##A = 0; \ +static int my_read_write_##A(void* a, void* b, int c) \ +{ \ + return (int)RunFunctionFmt(my_read_write_fct_##A, "ppi", a, b, c); \ +} +SUPER() +#undef GO +static void* find_read_write_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_read_write_fct_##A == (uintptr_t)fct) return my_read_write_##A; + SUPER() + #undef GO + #define GO(A) if(my_read_write_fct_##A == 0) {my_read_write_fct_##A = (uintptr_t)fct; return my_read_write_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for ssl3 read_write callback\n"); + return NULL; +} +// puts +#define GO(A) \ +static uintptr_t my_puts_fct_##A = 0; \ +static int my_puts_##A(void* a, void* b) \ +{ \ + return (int)RunFunctionFmt(my_puts_fct_##A, "pp", a, b); \ +} +SUPER() +#undef GO +static void* find_puts_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_puts_fct_##A == (uintptr_t)fct) return my_puts_##A; + SUPER() + #undef GO + #define GO(A) if(my_puts_fct_##A == 0) {my_puts_fct_##A = (uintptr_t)fct; return my_puts_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for ssl3 puts callback\n"); + return NULL; +} +// ctrl +#define GO(A) \ +static uintptr_t my_ctrl_fct_##A = 0; \ +static long my_ctrl_##A(void* a, int b, long c, void* d) \ +{ \ + return (long)RunFunctionFmt(my_ctrl_fct_##A, "pilp", a, b, c, d); \ +} +SUPER() +#undef GO +static void* find_ctrl_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_ctrl_fct_##A == (uintptr_t)fct) return my_ctrl_##A; + SUPER() + #undef GO + #define GO(A) if(my_ctrl_fct_##A == 0) {my_ctrl_fct_##A = (uintptr_t)fct; return my_ctrl_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for ssl3 ctrl callback\n"); + return NULL; +} +// create_destroy +#define GO(A) \ +static uintptr_t my_create_destroy_fct_##A = 0; \ +static int my_create_destroy_##A(void* a) \ +{ \ + return (int)RunFunctionFmt(my_create_destroy_fct_##A, "p", a); \ +} +SUPER() +#undef GO +static void* find_create_destroy_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_create_destroy_fct_##A == (uintptr_t)fct) return my_create_destroy_##A; + SUPER() + #undef GO + #define GO(A) if(my_create_destroy_fct_##A == 0) {my_create_destroy_fct_##A = (uintptr_t)fct; return my_create_destroy_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for ssl3 create_destroy callback\n"); + return NULL; +} #undef SUPER @@ -437,6 +667,66 @@ EXPORT void my3_SSL_set_msg_callback(x64emu_t* emu, void* ctx, void* cb) my->SSL_set_msg_callback(ctx, find_msg_cb_Fct(cb)); } +EXPORT void my3_SSL_CTX_sess_set_new_cb(x64emu_t* emu, void *ctx, void* f) +{ + my->SSL_CTX_sess_set_new_cb(ctx, find_new_seesion_cb_Fct(f)); +} + +EXPORT void my3_SSL_set_info_callback(x64emu_t* emmu, void* ctx, void* f) +{ + my->SSL_set_info_callback(ctx, find_info_cb_Fct(f)); +} + +EXPORT void my3_SSL_set_psk_use_session_callback(x64emu_t* emu, void* ctx, void* f) +{ + my->SSL_set_psk_use_session_callback(ctx, find_psk_use_session_cb_Fct(f)); +} + +EXPORT void my3_SSL_CTX_set_cookie_verify_cb(x64emu_t* emu, void* ctx, void* f) +{ + my->SSL_CTX_set_cookie_verify_cb(ctx, find_app_verify_cookie_cb_Fct(f)); +} + +EXPORT void my3_SSL_CTX_set_cookie_generate_cb(x64emu_t* emu, void* ctx, void* f) +{ + my->SSL_CTX_set_cookie_generate_cb(ctx, find_set_cookie_generate_cb_Fct(f)); +} + +EXPORT void my3_SSL_set_psk_server_callback(x64emu_t* emu, void* ctx, void* f) +{ + my->SSL_set_psk_server_callback(ctx, find_psk_server_cb_Fct(f)); +} + +EXPORT int my3_BIO_meth_set_write(x64emu_t* emu, void* biom, void* f) +{ + return my->BIO_meth_set_write(biom, find_read_write_Fct(f)); +} + +EXPORT int my3_BIO_meth_set_read(x64emu_t* emu, void* biom, void* f) +{ + return my->BIO_meth_set_read(biom, find_read_write_Fct(f)); +} + +EXPORT int my3_BIO_meth_set_puts(x64emu_t* emu, void* biom, void* f) +{ + return my->BIO_meth_set_puts(biom, find_puts_Fct(f)); +} + +EXPORT int my3_BIO_meth_set_ctrl(x64emu_t* emu, void* biom, void* f) +{ + return my->BIO_meth_set_ctrl(biom, find_ctrl_Fct(f)); +} + +EXPORT int my3_BIO_meth_set_create(x64emu_t* emu, void* biom, void* f) +{ + return my->BIO_meth_set_create(biom, find_create_destroy_Fct(f)); +} + +EXPORT int my3_BIO_meth_set_destroy(x64emu_t* emu, void* biom, void* f) +{ + return my->BIO_meth_set_destroy(biom, find_create_destroy_Fct(f)); +} + #define ALTMY my3_ #define NEEDED_LIBS "libcrypto.so.3", "libpthread.so.0" diff --git a/src/wrapped/wrappedlibssl3_private.h b/src/wrapped/wrappedlibssl3_private.h index ef44cf78a46d8944aa44ab8da180e1b66f675c20..11d9b09fe825cf32b487a11fbf0d517f2d02044e 100644 --- a/src/wrapped/wrappedlibssl3_private.h +++ b/src/wrapped/wrappedlibssl3_private.h @@ -1,13 +1,28 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif -//GO(BIO_f_ssl, -//GO(BIO_new_buffer_ssl_connect, -//GO(BIO_new_ssl, -//GO(BIO_new_ssl_connect, -//GO(BIO_ssl_copy_session_id, -//GO(BIO_ssl_shutdown, +GO(BIO_f_ssl, pFv) +GO(BIO_ADDR_free, vFp) +GO(BIO_ADDR_new, pFv) +GO(BIO_get_data, pFp) +GO(BIO_get_shutdown, iFp) +GO(BIO_new_buffer_ssl_connect, pFp) +GO(BIO_new_ssl, pFpi) +GO(BIO_new_ssl_connect, pFp) +GO(BIO_meth_free, vFp) +GO(BIO_meth_new, pFip) +GOM(BIO_meth_set_create, iFEpp) +GOM(BIO_meth_set_ctrl, iFEpp) +GOM(BIO_meth_set_destroy, iFEpp) +GOM(BIO_meth_set_puts, iFEpp) +GOM(BIO_meth_set_read, iFEpp) +GOM(BIO_meth_set_write, iFEpp) +GO(BIO_set_data, vFpp) +GO(BIO_set_init, vFpi) +GO(BIO_set_shutdown, vFpi) +GO(BIO_ssl_copy_session_id, iFpp) +GO(BIO_ssl_shutdown, vFp) //GO(custom_ext_add, //GO(custom_ext_init, //GO(custom_ext_parse, @@ -56,27 +71,28 @@ GO(d2i_SSL_SESSION, pFppl) //GO(dtls1_stop_timer, //GO(dtls1_write_app_data_bytes, //GO(dtls1_write_bytes, -//GO(DTLS_client_method, +GO(DTLS_client_method, pFv) GO(DTLS_method, pFv) GO(DTLS_server_method, pFv) GO(DTLSv1_2_client_method, pFv) GO(DTLSv1_2_method, pFv) GO(DTLSv1_2_server_method, pFv) GO(DTLSv1_client_method, pFv) +GO(DTLSv1_listen, iFpp) GO(DTLSv1_method, pFv) GO(DTLSv1_server_method, pFv) -//GO(ERR_load_SSL_strings, +GO(ERR_load_SSL_strings, iFv) //GO(_fini, GO(i2d_SSL_SESSION, iFpp) //GO(_init, //GO(n_ssl3_mac, //GO(OBJ_bsearch_ssl_cipher_id, GO(OPENSSL_init_ssl, iFUp) -//GO(PEM_read_bio_SSL_SESSION, -//GO(PEM_read_SSL_SESSION, -//GO(PEM_write_bio_SSL_SESSION, -//GO(PEM_write_SSL_SESSION, -//GO(SRP_Calc_A_param, +//GOM(PEM_read_bio_SSL_SESSION, pFEpppp) +//GOM(PEM_read_SSL_SESSION, pFESppp) +GO(PEM_write_bio_SSL_SESSION, iFpp) +GO(PEM_write_SSL_SESSION, iFSp) +GO(SRP_Calc_A_param, iFp) //GO(SRP_generate_client_master_secret, //GO(SRP_generate_server_master_secret, //GO(srp_verify_server_param, @@ -188,15 +204,15 @@ GO(SSL_add_client_CA, iFpp) //GO(ssl_add_clienthello_renegotiate_ext, //GO(ssl_add_clienthello_tlsext, //GO(ssl_add_clienthello_use_srtp_ext, -//GO(SSL_add_dir_cert_subjects_to_stack, -//GO(SSL_add_file_cert_subjects_to_stack, +GO(SSL_add_dir_cert_subjects_to_stack, iFpp) +GO(SSL_add_file_cert_subjects_to_stack, iFpp) //GO(ssl_add_serverhello_renegotiate_ext, //GO(ssl_add_serverhello_tlsext, //GO(ssl_add_serverhello_use_srtp_ext, -//GO(SSL_alert_desc_string, -//GO(SSL_alert_desc_string_long, -//GO(SSL_alert_type_string, -//GO(SSL_alert_type_string_long, +GO(SSL_alert_desc_string, pFi) +GO(SSL_alert_desc_string_long, pFi) +GO(SSL_alert_type_string, pFi) +GO(SSL_alert_type_string_long, pFi) //GO(ssl_bad_method, //GO(ssl_build_cert_chain, //GO(ssl_bytes_to_cipher_list, @@ -209,7 +225,7 @@ GOM(SSL_callback_ctrl, lFEpip) //GO(ssl_cert_free, //GO(ssl_cert_inst, //GO(ssl_cert_new, -//GO(SSL_certs_clear, +GO(SSL_certs_clear, vFp) //GO(ssl_cert_select_current, //GO(ssl_cert_set0_chain, //GO(ssl_cert_set1_chain, @@ -218,7 +234,7 @@ GOM(SSL_callback_ctrl, lFEpip) //GO(ssl_cert_set_current, //GO(ssl_cert_set_default_md, //GO(ssl_cert_type, -//GO(SSL_check_chain, +GO(SSL_check_chain, iFpppp) //GO(ssl_check_clienthello_tlsext_late, GO(SSL_check_private_key, iFp) //GO(ssl_check_serverhello_tlsext, @@ -243,210 +259,213 @@ GO(SSL_clear, iFp) //GO(ssl_clear_bad_session, //GO(ssl_clear_cipher_ctx, //GO(ssl_clear_hash_ctx, -//GO(SSL_COMP_add_compression_method, +GO(SSL_COMP_add_compression_method, iFip) //GO(SSL_COMP_free_compression_methods, -//GO(SSL_COMP_get_compression_methods, -//GO(SSL_COMP_get_name, -//GO(SSL_COMP_set0_compression_methods, -//GO(SSL_CONF_cmd, -//GO(SSL_CONF_cmd_argv, -//GO(SSL_CONF_cmd_value_type, -//GO(SSL_CONF_CTX_clear_flags, -//GO(SSL_CONF_CTX_finish, -//GO(SSL_CONF_CTX_free, -//GO(SSL_CONF_CTX_new, -//GO(SSL_CONF_CTX_set1_prefix, -//GO(SSL_CONF_CTX_set_flags, -//GO(SSL_CONF_CTX_set_ssl, -//GO(SSL_CONF_CTX_set_ssl_ctx, +GO(SSL_COMP_get_compression_methods, pFv) +GO(SSL_COMP_get_name, pFp) +GO(SSL_COMP_set0_compression_methods, pFp) +GO(SSL_CONF_cmd, iFppp) +GO(SSL_CONF_cmd_argv, iFppp) +GO(SSL_CONF_cmd_value_type, iFpp) +GO(SSL_CONF_CTX_clear_flags, uFpu) +GO(SSL_CONF_CTX_finish, iFp) +GO(SSL_CONF_CTX_free, vFp) +GO(SSL_CONF_CTX_new, pFv) +GO(SSL_CONF_CTX_set1_prefix, iFpp) +GO(SSL_CONF_CTX_set_flags, uFpu) +GO(SSL_CONF_CTX_set_ssl, vFpp) +GO(SSL_CONF_CTX_set_ssl_ctx, vFpp) GO(SSL_connect, iFp) -//GO(SSL_copy_session_id, +GO(SSL_copy_session_id, iFpp) //GO(ssl_create_cipher_list, GO(SSL_ctrl, lFpilp) GO(SSL_CTX_add_client_CA, iFpp) -//GO(SSL_CTX_add_client_custom_ext, -//GO(SSL_CTX_add_server_custom_ext, -//GO(SSL_CTX_add_session, +//GOM(SSL_CTX_add_client_custom_ext, iFEpuppppp) +//GOM(SSL_CTX_add_server_custom_ext, iFEpuppppp) +GO(SSL_CTX_add_session, iFpp) GOM(SSL_CTX_callback_ctrl, lFEpip) GO(SSL_CTX_check_private_key, iFp) GO(SSL_CTX_clear_options, UFpU) GO(SSL_CTX_config, iFpp) GO(SSL_CTX_ctrl, lFpilp) -//GO(SSL_CTX_flush_sessions, +GO(SSL_CTX_flush_sessions, vFpl) GO(SSL_CTX_free, vFp) -//GO(SSL_CTX_get0_certificate, +GO(SSL_CTX_get0_certificate, pFp) GO(SSL_CTX_get0_param, pFp) -//GO(SSL_CTX_get0_privatekey, +GO(SSL_CTX_get0_privatekey, pFp) GO(SSL_CTX_get_cert_store, pFp) -//GO(SSL_CTX_get_client_CA_list, -//GO(SSL_CTX_get_client_cert_cb, +GO(SSL_CTX_get_client_CA_list, pFp) +//GOM(SSL_CTX_get_client_cert_cb, pFEp) GOM(SSL_CTX_get_default_passwd_cb, pFEp) GO(SSL_CTX_get_default_passwd_cb_userdata, pFp) GO(SSL_CTX_get_ex_data, pFpi) //GO(SSL_CTX_get_ex_new_index, -//GO(SSL_CTX_get_info_callback, +//GOM(SSL_CTX_get_info_callback, pFEp) GO(SSL_CTX_get_num_tickets, LFp) -GO(SSL_CTX_get_options, UFp) -//GO(SSL_CTX_get_quiet_shutdown, +GO(SSL_CTX_get_options, UFp) +GO(SSL_CTX_get_quiet_shutdown, iFp) GO(SSL_CTX_get_security_level, iFp) -//GO(SSL_CTX_get_ssl_method, -//GO(SSL_CTX_get_timeout, +GO(SSL_CTX_get_ssl_method, pFp) +GO(SSL_CTX_get_timeout, lFp) GOM(SSL_CTX_get_verify_callback, pFEp) -//GO(SSL_CTX_get_verify_depth, +GO(SSL_CTX_get_verify_depth, iFp) GO(SSL_CTX_get_verify_mode, iFp) +GO(SSL_CTX_load_verify_dir, iFpp) GO(SSL_CTX_load_verify_locations, iFppp) GO(SSL_CTX_new, pFp) -//GO(SSL_CTX_remove_session, -//GO(SSL_CTX_sess_get_get_cb, -//GO(SSL_CTX_sess_get_new_cb, -//GO(SSL_CTX_sess_get_remove_cb, -//GO(SSL_CTX_sessions, -//GO(SSL_CTX_sess_set_get_cb, -//GO(SSL_CTX_sess_set_new_cb, -//GO(SSL_CTX_sess_set_remove_cb, -//GO(SSL_CTX_set1_param, +GO(SSL_CTX_remove_session, iFpp) +//GOM(SSL_CTX_sess_get_get_cb, pFEp) +//GOM(SSL_CTX_sess_get_new_cb, pFEp) +//GOM(SSL_CTX_sess_get_remove_cb, pFEp) +GO(SSL_CTX_sessions, pFp) +//GOM(SSL_CTX_sess_set_get_cb, vFEpp) +GOM(SSL_CTX_sess_set_new_cb, vFEpp) +//GOM(SSL_CTX_sess_set_remove_cb, vFEpp) +GO(SSL_CTX_set1_param, iFpp) GO(SSL_CTX_set_alpn_protos, iFppu) GOM(SSL_CTX_set_alpn_select_cb, vFEppp) -//GO(SSL_CTX_set_cert_cb, +//GOM(SSL_CTX_set_cert_cb, vFEppp) GO(SSL_CTX_set_cert_store, vFpp) GOM(SSL_CTX_set_cert_verify_callback, vFEppp) GO(SSL_CTX_set_ciphersuites, iFpp) GO(SSL_CTX_set_cipher_list, iFpp) GO(SSL_CTX_set_client_CA_list, vFpp) GOM(SSL_CTX_set_client_cert_cb, vFEpp) -//GO(SSL_CTX_set_client_cert_engine, -//GO(SSL_CTX_set_cookie_generate_cb, -//GO(SSL_CTX_set_cookie_verify_cb, +GO(SSL_CTX_set_client_cert_engine, iFpp) +GOM(SSL_CTX_set_cookie_generate_cb, vFEpp) +GOM(SSL_CTX_set_cookie_verify_cb, vFEpp) GOM(SSL_CTX_set_default_passwd_cb, vFEpp) GO(SSL_CTX_set_default_passwd_cb_userdata, vFpp) GO(SSL_CTX_set_default_verify_paths, iFp) -//GO(SSL_CTX_set_ex_data, -//GO(SSL_CTX_set_generate_session_id, -//GO(SSL_CTX_set_info_callback, +GO(SSL_CTX_set_ex_data, iFpip) +//GOM(SSL_CTX_set_generate_session_id, iFEpp) +//GOM(SSL_CTX_set_info_callback, vFEpp) GOM(SSL_CTX_set_keylog_callback, vFEpp) GOM(SSL_CTX_set_msg_callback, vFEpp) -//GO(SSL_CTX_set_next_protos_advertised_cb, +//GOM(SSL_CTX_set_next_protos_advertised_cb, vFEppp) GOM(SSL_CTX_set_next_proto_select_cb, vFEppp) GO(SSL_CTX_set_num_tickets, iFpL) -GO(SSL_CTX_set_options, lFpl) +GO(SSL_CTX_set_options, UFpU) GO(SSL_CTX_set_post_handshake_auth, vFpi) -//GO(SSL_CTX_set_psk_client_callback, -//GO(SSL_CTX_set_psk_server_callback, -//GO(SSL_CTX_set_purpose, +//GOM(SSL_CTX_set_psk_client_callback, vFEpp) +//GOM(SSL_CTX_set_psk_server_callback, vFEpp) +GO(SSL_CTX_set_purpose, iFpi) GO(SSL_CTX_set_quiet_shutdown, vFpi) GO(SSL_CTX_set_security_level, vFpi) GO(SSL_CTX_set_session_id_context, iFppu) -//GO(SSL_CTX_set_srp_cb_arg, -//GO(SSL_CTX_set_srp_client_pwd_callback, -//GO(SSL_CTX_set_srp_password, -//GO(SSL_CTX_set_srp_strength, -//GO(SSL_CTX_set_srp_username, -//GO(SSL_CTX_set_srp_username_callback, -//GO(SSL_CTX_set_srp_verify_param_callback, -//GO(SSL_CTX_set_ssl_version, -//GO(SSL_CTX_set_timeout, -//GO(SSL_CTX_set_tlsext_use_srtp, -//GO(SSL_CTX_set_tmp_dh_callback, +GO(SSL_CTX_set_srp_cb_arg, iFpp) +//GOM(SSL_CTX_set_srp_client_pwd_callback, iFEpp) +GO(SSL_CTX_set_srp_password, iFpp) +GO(SSL_CTX_set_srp_strength, iFpi) +GO(SSL_CTX_set_srp_username, iFpp) +//GOM(SSL_CTX_set_srp_username_callback, iFEpp) +//GOM(SSL_CTX_set_srp_verify_param_callback, iFEpp) +GO(SSL_CTX_set_ssl_version, iFpp) +GO(SSL_CTX_set_timeout, lFpl) +GO(SSL_CTX_set_tlsext_use_srtp, iFpp) +//GOM(SSL_CTX_set_tmp_dh_callback, vFEpp) //GO(SSL_CTX_set_tmp_ecdh_callback, //GO(SSL_CTX_set_tmp_rsa_callback, -//GO(SSL_CTX_set_trust, +GO(SSL_CTX_set_trust, iFpi) GOM(SSL_CTX_set_verify, vFEpip) GO(SSL_CTX_set_verify_depth, vFpi) -//GO(SSL_CTX_SRP_CTX_free, -//GO(SSL_CTX_SRP_CTX_init, +GO(SSL_CTX_SRP_CTX_free, iFp) +GO(SSL_CTX_SRP_CTX_init, iFp) GO(SSL_CTX_use_certificate, iFpp) GO(SSL_CTX_use_certificate_ASN1, iFpip) GO(SSL_CTX_use_certificate_chain_file, iFpp) GO(SSL_CTX_use_certificate_file, iFppi) GO(SSL_CTX_use_PrivateKey, iFpp) -GO(SSL_CTX_use_PrivateKey_ASN1, iFuppi) +GO(SSL_CTX_use_PrivateKey_ASN1, iFippl) GO(SSL_CTX_use_PrivateKey_file, iFppi) -//GO(SSL_CTX_use_psk_identity_hint, +GO(SSL_CTX_use_psk_identity_hint, iFpp) GO(SSL_CTX_use_RSAPrivateKey, iFpp) GO(SSL_CTX_use_RSAPrivateKey_ASN1, iFppl) GO(SSL_CTX_use_RSAPrivateKey_file, iFppi) -//GO(SSL_CTX_use_serverinfo, -//GO(SSL_CTX_use_serverinfo_file, +GO(SSL_CTX_use_serverinfo, iFppL) +GO(SSL_CTX_use_serverinfo_file, iFpp) //GO(ssl_do_client_cert_cb, GO(SSL_do_handshake, iFp) -//GO(SSL_dup, -//GO(SSL_dup_CA_list, -//GO(SSL_export_keying_material, -//GO(SSL_extension_supported, +GO(SSL_dup, pFp) +GO(SSL_dup_CA_list, pFp) +GO(SSL_export_keying_material, iFppLpLpLi) +GO(SSL_extension_supported, iFu) //GO(ssl_fill_hello_random, GO(SSL_free, vFp) //GO(ssl_free_wbio_buffer, -GO(SSL_get0_alpn_selected, iFppp) +GO(SSL_get0_alpn_selected, vFppp) GO(SSL_get0_next_proto_negotiated, vFppp) GO(SSL_get0_param, pFp) GO(SSL_get0_peer_certificate, pFp) -GO(SSL_get0_session, pFp) +GO(SSL_get0_session, pFp) // Warning: failed to confirm GO(SSL_get0_verified_chain, pFp) GO(SSL_get1_peer_certificate, pFp) GO(SSL_get1_session, pFp) //GO(ssl_get_algorithm2, GO(SSL_get_certificate, pFp) //GO(ssl_get_cipher_by_char, -//GO(SSL_get_cipher_list, +GO(SSL_get_cipher_list, pFpi) GO(SSL_get_ciphers, pFp) //GO(ssl_get_ciphers_by_id, GO(SSL_get_client_CA_list, pFp) GO(SSL_get_client_ciphers, pFp) +GO(SSL_get_client_random, LFppL) GO(SSL_get_current_cipher, pFp) GO(SSL_get_current_compression, pFp) -//GO(SSL_get_current_expansion, -//GO(SSL_get_default_timeout, +GO(SSL_get_current_expansion, pFp) +GO(SSL_get_default_timeout, lFp) GO(SSL_get_error, iFpi) GO(SSL_get_ex_data, pFpi) GO(SSL_get_ex_data_X509_STORE_CTX_idx, iFv) -GOM(SSL_get_ex_new_index, iFElpppp) -//GO(SSL_get_fd, +GOM(SSL_get_ex_new_index, iFElpppp) // Warning: failed to confirm +GO(SSL_get_fd, iFp) GO(SSL_get_finished, LFppL) //GO(ssl_get_handshake_digest, -//GO(SSL_get_info_callback, +//GOM(SSL_get_info_callback, pFEp) //GO(ssl_get_new_session, GO(SSL_get_peer_cert_chain, pFp) GO(SSL_get_peer_finished, LFppL) //GO(ssl_get_prev_session, GO(SSL_get_privatekey, pFp) -//GO(SSL_get_psk_identity, -//GO(SSL_get_psk_identity_hint, -//GO(SSL_get_quiet_shutdown, +GO(SSL_get_psk_identity, pFp) +GO(SSL_get_psk_identity_hint, pFp) +GO(SSL_get_quiet_shutdown, iFp) GO(SSL_get_rbio, pFp) -//GO(SSL_get_read_ahead, -//GO(SSL_get_rfd, -//GO(SSL_get_selected_srtp_profile, +GO(SSL_get_read_ahead, iFp) +GO(SSL_get_rfd, iFp) +GO(SSL_get_selected_srtp_profile, pFp) //GO(ssl_get_server_cert_serverinfo, GO(SSL_get_servername, pFpi) GO(SSL_get_servername_type, iFp) //GO(ssl_get_server_send_pkey, GO(SSL_get_session, pFp) -//GO(SSL_get_shared_ciphers, -//GO(SSL_get_shared_sigalgs, +GO(SSL_get_shared_ciphers, pFppi) +GO(SSL_get_shared_sigalgs, iFpippppp) GO(SSL_get_shutdown, iFp) -//GO(SSL_get_sigalgs, +GO(SSL_get_sigalgs, iFpippppp) //GO(ssl_get_sign_pkey, -//GO(SSL_get_srp_g, -//GO(SSL_get_srp_N, -//GO(SSL_get_srp_userinfo, -//GO(SSL_get_srp_username, -//GO(SSL_get_srtp_profiles, +GO(SSL_get_srp_g, pFp) +GO(SSL_get_srp_N, pFp) +GO(SSL_get_srp_userinfo, pFp) +GO(SSL_get_srp_username, pFp) +GO(SSL_get_srtp_profiles, pFp) GO(SSL_get_SSL_CTX, pFp) -//GO(SSL_get_ssl_method, +GO(SSL_get_ssl_method, pFp) GOM(SSL_get_verify_callback, pFEp) GO(SSL_get_verify_depth, iFp) GO(SSL_get_verify_mode, iFp) -GO(SSL_get_verify_result, iFp) +GO(SSL_get_verify_result, lFp) GO(SSL_get_version, pFp) GO(SSL_get_wbio, pFp) -//GO(SSL_get_wfd, -//GO(SSL_has_matching_session_id, +GO(SSL_get_wfd, iFp) +GO(SSL_has_matching_session_id, iFppu) +GO(SSL_in_init, iFp) //GO(ssl_init_wbio_buffer, GO(SSL_is_init_finished, iFp) GO(SSL_is_server, iFp) GO(SSL_library_init, iFv) //GO(ssl_load_ciphers, -//GO(SSL_load_client_CA_file, +GO(SSL_load_client_CA_file, pFp) GO(SSL_load_error_strings, vFv) GO(SSL_new, pFp) //GO(ssl_ok, @@ -466,84 +485,87 @@ GO(SSL_renegotiate, iFp) GO(SSL_renegotiate_abbreviated, iFp) GO(SSL_renegotiate_pending, iFp) //GO(ssl_replace_hash, -//GO(SSL_rstate_string, -//GO(SSL_rstate_string_long, +GO(SSL_rstate_string, pFp) +GO(SSL_rstate_string_long, pFp) GO(SSL_select_next_proto, iFpppupu) //GO(ssl_sess_cert_free, //GO(ssl_sess_cert_new, GO(ssl_session_dup, pFp) GO(SSL_SESSION_dup, pFp) GO(SSL_SESSION_free, vFp) -//GO(SSL_SESSION_get0_peer, -//GO(SSL_SESSION_get_compress_id, -//GO(SSL_SESSION_get_ex_data, +GO(SSL_SESSION_get0_peer, pFp) +GO(SSL_SESSION_get_compress_id, uFp) +GO(SSL_SESSION_get_ex_data, pFpi) //GO(SSL_SESSION_get_ex_new_index, GO(SSL_SESSION_get_id, pFpp) +GO(SSL_SESSION_get_master_key, LFppL) GO(SSL_SESSION_get_ticket_lifetime_hint, LFp) GO(SSL_SESSION_get_time, lFp) GO(SSL_SESSION_get_timeout, lFp) GO(SSL_SESSION_has_ticket, iFp) +GO(SSL_SESSION_is_resumable, iFp) GO(SSL_SESSION_new, pFv) -//GO(SSL_SESSION_print, -//GO(SSL_SESSION_print_fp, +GO(SSL_SESSION_print, iFpp) +GO(SSL_SESSION_print_fp, iFSp) GO(SSL_session_reused, iFp) -//GO(SSL_SESSION_set1_id_context, -//GO(SSL_SESSION_set_ex_data, -//GO(SSL_SESSION_set_time, -//GO(SSL_SESSION_set_timeout, +GO(SSL_SESSION_set1_id_context, iFppu) +GO(SSL_SESSION_set_ex_data, iFpip) +GO(SSL_SESSION_set_time, lFpl) +GO(SSL_SESSION_set_timeout, lFpl) GO(SSL_SESSION_up_ref, iFp) -//GO(SSL_set1_param, +GO(SSL_set1_param, iFpp) GO(SSL_set_accept_state, vFp) -//GO(SSL_set_alpn_protos, +GO(SSL_set_alpn_protos, iFppu) GO(SSL_set_bio, vFppp) -//GO(SSL_set_cert_cb, +//GOM(SSL_set_cert_cb, vFEppp) //GO(ssl_set_cert_masks, GO(SSL_set_cipher_list, iFpp) GO(SSL_set_client_CA_list, vFpp) //GO(ssl_set_client_disabled, GO(SSL_set_connect_state, vFp) -//GO(SSL_set_debug, +GO(SSL_set_debug, vFpi) GO(SSL_set_ex_data, iFpip) GO(SSL_set_fd, iFpi) -//GO(SSL_set_generate_session_id, -//GO(SSL_set_info_callback, +//GOM(SSL_set_generate_session_id, iFEpp) +GOM(SSL_set_info_callback, vFEpp) GOM(SSL_set_msg_callback, vFEpp) GO(SSL_set_options, UFpU) //GO(ssl_set_peer_cert_type, GO(SSL_set_post_handshake_auth, vFpi) GOM(SSL_set_psk_client_callback, vFEpp) -//GO(SSL_set_psk_server_callback, -//GO(SSL_set_purpose, +GOM(SSL_set_psk_use_session_callback, vFEpp) +GOM(SSL_set_psk_server_callback, vFEpp) +GO(SSL_set_purpose, iFpi) GO(SSL_set_quiet_shutdown, vFpi) GO(SSL_set_read_ahead, vFpi) GO(SSL_set_rfd, iFpi) GO(SSL_set_session, iFpp) -//GO(SSL_set_session_id_context, -//GO(SSL_set_session_secret_cb, -//GO(SSL_set_session_ticket_ext, -//GO(SSL_set_session_ticket_ext_cb, -GO(SSL_set_shutdown, iFp) -//GO(SSL_set_srp_server_param, -//GO(SSL_set_srp_server_param_pw, +GO(SSL_set_session_id_context, iFppu) +//GOM(SSL_set_session_secret_cb, iFEppp) +GO(SSL_set_session_ticket_ext, iFppi) +//GOM(SSL_set_session_ticket_ext_cb, iFEppp) +GO(SSL_set_shutdown, vFpi) +GO(SSL_set_srp_server_param, iFpppppp) +GO(SSL_set_srp_server_param_pw, iFpppp) GO(SSL_set_SSL_CTX, pFpp) -//GO(SSL_set_ssl_method, +GO(SSL_set_ssl_method, iFpp) //GO(SSL_set_state, -//GO(SSL_set_tlsext_use_srtp, -//GO(SSL_set_tmp_dh_callback, +GO(SSL_set_tlsext_use_srtp, iFpp) +//GOM(SSL_set_tmp_dh_callback, vFEpp) //GO(SSL_set_tmp_ecdh_callback, //GO(SSL_set_tmp_rsa_callback, -//GO(SSL_set_trust, +GO(SSL_set_trust, iFpi) GOM(SSL_set_verify, vFEpip) GO(SSL_set_verify_depth, vFpi) -//GO(SSL_set_verify_result, +GO(SSL_set_verify_result, vFpl) GO(SSL_set_wfd, iFpi) GO(SSL_shutdown, iFp) -//GO(SSL_SRP_CTX_free, -//GO(SSL_SRP_CTX_init, -//GO(SSL_srp_server_param_with_username, +GO(SSL_SRP_CTX_free, iFp) +GO(SSL_SRP_CTX_init, iFp) +GO(SSL_srp_server_param_with_username, iFpp) GO(SSL_state, iFp) -//GO(SSL_state_string, -//GO(SSL_state_string_long, +GO(SSL_state_string, pFp) +GO(SSL_state_string_long, pFp) //GO(ssl_undefined_const_function, //GO(ssl_undefined_function, //GO(ssl_undefined_void_function, @@ -552,9 +574,9 @@ GO(SSL_use_certificate, iFpp) GO(SSL_use_certificate_ASN1, iFppi) GO(SSL_use_certificate_file, iFppi) GO(SSL_use_PrivateKey, iFpp) -GO(SSL_use_PrivateKey_ASN1, iFppl) +GO(SSL_use_PrivateKey_ASN1, iFippl) GO(SSL_use_PrivateKey_file, iFppi) -//GO(SSL_use_psk_identity_hint, +GO(SSL_use_psk_identity_hint, iFpp) GO(SSL_use_RSAPrivateKey, iFpp) GO(SSL_use_RSAPrivateKey_ASN1, iFppl) GO(SSL_use_RSAPrivateKey_file, iFppi) @@ -571,7 +593,7 @@ GO(SSLv3_server_method, pFv) //GO(ssl_verify_alarm_type, //GO(ssl_verify_cert_chain, GO(SSL_version, iFp) -//GO(SSL_want, +GO(SSL_want, iFp) GO(SSL_write, iFppi) GO(SSL_write_ex, iFppLp) //GO(tls12_check_peer_sigalg, diff --git a/src/wrapped/wrappedlibssl_private.h b/src/wrapped/wrappedlibssl_private.h index fa2a083b3e19c108b51519efa3430b0055373cb3..9b86cc3445e696ff53a4b862412c31679d965312 100644 --- a/src/wrapped/wrappedlibssl_private.h +++ b/src/wrapped/wrappedlibssl_private.h @@ -430,7 +430,7 @@ GO(SSL_get_version, pFp) //GO(SSL_get_wfd, //GO(SSL_has_matching_session_id, //GO(ssl_init_wbio_buffer, -GO(SSL_in_init, iFP) +GO(SSL_in_init, iFp) GO(SSL_is_init_finished, iFp) GO(SSL_is_server, iFp) GO(SSL_library_init, iFv) diff --git a/src/wrapped/wrappedlibusb1.c b/src/wrapped/wrappedlibusb1.c index 77010dc3d284458bba452f6745d53b23719890f1..683931be6fa07017d276c298501a334b697e8475 100644 --- a/src/wrapped/wrappedlibusb1.c +++ b/src/wrapped/wrappedlibusb1.c @@ -18,11 +18,8 @@ #include "emu/x64emu_private.h" #include "myalign.h" -#ifdef ANDROID - const char* libusb1Name = "libusb-1.0.so"; -#else - const char* libusb1Name = "libusb-1.0.so.0"; -#endif +const char* libusb1Name = "libusb-1.0.so.0"; +#define ALTNAME "libusb-1.0.so" #define LIBNAME libusb1 @@ -152,4 +149,10 @@ EXPORT int my_libusb_cancel_transfer(x64emu_t* emu, my_libusb_transfer_t* t) return my->libusb_cancel_transfer(t); } +EXPORT void my_libusb_free_transfer(x64emu_t* emu, my_libusb_transfer_t* t) +{ + t->callback = findtransfertFct(t->callback); + my->libusb_free_transfer(t); +} + #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibusb1_private.h b/src/wrapped/wrappedlibusb1_private.h index 6aa06dbf05de8b7723769265df72d4a9fdf6af13..4f295bb3b18ba656014c55fea18db1be0266c6a7 100644 --- a/src/wrapped/wrappedlibusb1_private.h +++ b/src/wrapped/wrappedlibusb1_private.h @@ -1,7 +1,8 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif +GO(libusb_alloc_streams, iFpupi) GOM(libusb_alloc_transfer, pFEi) GO(libusb_attach_kernel_driver, iFpi) GO(libusb_bulk_transfer, iFpCpipu) @@ -11,6 +12,8 @@ GO(libusb_clear_halt, iFpC) GO(libusb_close, vFp) GO(libusb_control_transfer, iFpCCWWpWu) GO(libusb_detach_kernel_driver, iFpi) +GO(libusb_dev_mem_alloc, pFpL) +GO(libusb_dev_mem_free, iFppL) GO(libusb_error_name, pFi) GO(libusb_event_handler_active, iFp) GO(libusb_event_handling_ok, iFp) @@ -19,11 +22,16 @@ GO(libusb_free_bos_descriptor, vFp) GO(libusb_free_config_descriptor, vFp) GO(libusb_free_container_id_descriptor, vFp) GO(libusb_free_device_list, vFpi) +GO(libusb_free_interface_association_descriptors, vFp) +GO(libusb_free_platform_descriptor, vFp) +GO(libusb_free_pollfds, vFp) GO(libusb_free_ss_endpoint_companion_descriptor, vFp) -GO(libusb_free_ss_usb_device_capability_descriptor, iFppp) -GO(libusb_free_transfer, vFp) +GO(libusb_free_ss_usb_device_capability_descriptor, vFp) +GO(libusb_free_streams, iFppi) +GOM(libusb_free_transfer, vFp) GO(libusb_free_usb_2_0_extension_descriptor, vFp) GO(libusb_get_active_config_descriptor, iFpp) +GO(libusb_get_active_interface_association_descriptors, iFpp) GO(libusb_get_bos_descriptor, iFpp) GO(libusb_get_bus_number, CFp) GO(libusb_get_config_descriptor, iFpCp) @@ -35,10 +43,13 @@ GO(libusb_get_device_address, CFp) GO(libusb_get_device_descriptor, iFpp) GO(libusb_get_device_list, lFpp) GO(libusb_get_device_speed, iFp) +GO(libusb_get_interface_association_descriptors, iFpCp) +GO(libusb_get_max_alt_packet_size, iFpiiC) GO(libusb_get_max_iso_packet_size, iFpC) GO(libusb_get_max_packet_size, iFpC) GO(libusb_get_next_timeout, iFpp) GO(libusb_get_parent, pFp) +GO(libusb_get_platform_descriptor, iFppp) GO(libusb_get_pollfds, pFp) GO(libusb_get_port_number, CFp) GO(libusb_get_port_numbers, iFppi) @@ -55,10 +66,12 @@ GO(libusb_handle_events_timeout, iFpp) GO(libusb_handle_events_timeout_completed, iFppp) GO(libusb_has_capability, iFu) GO(libusb_hotplug_deregister_callback, vFpi) +GO(libusb_hotplug_get_user_data, pFpi) GOM(libusb_hotplug_register_callback, iFEpiiiiippp) GO(libusb_init, iFp) +//GOM(libusb_init_context, iFppi) +GO(libusb_interrupt_event_handler, vFp) GO(libusb_interrupt_transfer, iFpCpipu) -GO(libusb_interrupt_event_handler, iFp) // since 1.0.21 (API_VERSION > 0x01000105) GO(libusb_kernel_driver_active, iFpi) GO(libusb_lock_events, vFp) GO(libusb_lock_event_waiters, vFp) @@ -73,6 +86,8 @@ GO(libusb_set_configuration, iFpi) GO(libusb_set_debug, vFpi) GO(libusb_set_interface_alt_setting, iFpii) GO(libusb_setlocale, iFp) +//GOM(libusb_set_log_cb, vFppi) +//GO(libusb_set_option, iFpuV) //GOM(libusb_set_pollfd_notifiers, vFpppp) GO(libusb_strerror, pFi) GOM(libusb_submit_transfer, iFEp) @@ -83,3 +98,4 @@ GO(libusb_unlock_events, vFp) GO(libusb_unlock_event_waiters, vFp) GO(libusb_unref_device, vFp) GO(libusb_wait_for_event, iFpp) +GO(libusb_wrap_sys_device, iFplp) diff --git a/src/wrapped/wrappedlibvorbis.c b/src/wrapped/wrappedlibvorbis.c index 0807e5bf73f541da939b87342710aaeed2246b5a..26d6dcfd6fd9272f3815932a22c5ab7d157460b9 100644 --- a/src/wrapped/wrappedlibvorbis.c +++ b/src/wrapped/wrappedlibvorbis.c @@ -17,11 +17,8 @@ #include "librarian.h" #include "myalign.h" -#ifdef ANDROID - const char* libvorbisName = "libvorbis.so"; -#else - const char* libvorbisName = "libvorbis.so.0"; -#endif +const char* libvorbisName = "libvorbis.so.0"; +#define ALTNAME "libvorbis.so" #define LIBNAME libvorbis diff --git a/src/wrapped/wrappedlibx11.c b/src/wrapped/wrappedlibx11.c index 83bed6c513d30b010f6945dbeca5b4dc66be648c..7da51e85afd24d2f49d2f9f3510c5d7ed58d806b 100644 --- a/src/wrapped/wrappedlibx11.c +++ b/src/wrapped/wrappedlibx11.c @@ -17,11 +17,8 @@ #include "emu/x64emu_private.h" #include "myalign.h" -#ifdef ANDROID - const char* libx11Name = "libX11.so"; -#else - const char* libx11Name = "libX11.so.6"; -#endif +const char* libx11Name = "libX11.so.6"; +#define ALTNAME "libX11.so" #define LIBNAME libx11 @@ -715,16 +712,16 @@ void* my_XCreateImage(x64emu_t* emu, void* disp, void* vis, uint32_t depth, int3 int32_t my_XInitImage(x64emu_t* emu, void* img); -void* my_XGetImage(x64emu_t* emu, void* disp, void* drawable, int32_t x, int32_t y +void* my_XGetImage(x64emu_t* emu, void* disp, size_t drawable, int32_t x, int32_t y , uint32_t w, uint32_t h, uint32_t plane, int32_t fmt); -int32_t my_XPutImage(x64emu_t* emu, void* disp, void* drawable, void* gc, void* image +int32_t my_XPutImage(x64emu_t* emu, void* disp, size_t drawable, void* gc, void* image , int32_t src_x, int32_t src_y, int32_t dst_x, int32_t dst_y , uint32_t w, uint32_t h); -void* my_XGetSubImage(x64emu_t* emu, void* disp, void* drawable +void* my_XGetSubImage(x64emu_t* emu, void* disp, size_t drawable , int32_t x, int32_t y - , uint32_t w, uint32_t h, uint32_t plane, int32_t fmt + , uint32_t w, uint32_t h, size_t plane, int32_t fmt , void* image, int32_t dst_x, int32_t dst_y); void my_XDestroyImage(x64emu_t* emu, void* image); @@ -1266,7 +1263,7 @@ EXPORT int32_t my_XInitImage(x64emu_t* emu, void* img) return ret; } -EXPORT void* my_XGetImage(x64emu_t* emu, void* disp, void* drawable, int32_t x, int32_t y +EXPORT void* my_XGetImage(x64emu_t* emu, void* disp, size_t drawable, int32_t x, int32_t y , uint32_t w, uint32_t h, uint32_t plane, int32_t fmt) { @@ -1278,7 +1275,13 @@ EXPORT void* my_XGetImage(x64emu_t* emu, void* disp, void* drawable, int32_t x, return img; } -EXPORT int32_t my_XPutImage(x64emu_t* emu, void* disp, void* drawable, void* gc, void* image +EXPORT void my__XInitImageFuncPtrs(x64emu_t* emu, XImage* img) +{ + my->_XInitImageFuncPtrs(img); + BridgeImageFunc(emu, img); +} + +EXPORT int32_t my_XPutImage(x64emu_t* emu, void* disp, size_t drawable, void* gc, void* image , int32_t src_x, int32_t src_y, int32_t dst_x, int32_t dst_y , uint32_t w, uint32_t h) { @@ -1289,9 +1292,9 @@ EXPORT int32_t my_XPutImage(x64emu_t* emu, void* disp, void* drawable, void* gc, return r; } -EXPORT void* my_XGetSubImage(x64emu_t* emu, void* disp, void* drawable +EXPORT void* my_XGetSubImage(x64emu_t* emu, void* disp, size_t drawable , int32_t x, int32_t y - , uint32_t w, uint32_t h, uint32_t plane, int32_t fmt + , uint32_t w, uint32_t h, size_t plane, int32_t fmt , void* image, int32_t dst_x, int32_t dst_y) { @@ -1371,9 +1374,9 @@ EXPORT int my_XAddConnectionWatch(x64emu_t* emu, void* display, char* f, void* d return my->XAddConnectionWatch(display, findXConnectionWatchProcFct(f), data); } -EXPORT int my_XRemoveConnectionWatch(x64emu_t* emu, void* display, char* f, void* data) +EXPORT void my_XRemoveConnectionWatch(x64emu_t* emu, void* display, char* f, void* data) { - return my->XRemoveConnectionWatch(display, findXConnectionWatchProcFct(f), data); + my->XRemoveConnectionWatch(display, findXConnectionWatchProcFct(f), data); } EXPORT void* my_XSetAfterFunction(x64emu_t* emu, void* display, void* f) @@ -1549,6 +1552,7 @@ EXPORT void* my_XOpenDisplay(x64emu_t* emu, void* d) if(!ret) return ret; + if(box64_x11sync) {my->XSynchronize(ret, 1); printf_log(LOG_INFO, "Forcing Syncronized opration on Display %p\n", ret);} bridge_t* system = emu->context->system; #define GO(A, W)\ @@ -1595,7 +1599,7 @@ EXPORT void* my_XOpenDisplay(x64emu_t* emu, void* d) return ret; } -EXPORT void* my__XGetRequest(x64emu_t* emu, my_XDisplay_t* dpy, int type, size_t len) +EXPORT void* my__XGetRequest(x64emu_t* emu, my_XDisplay_t* dpy, uint8_t type, size_t len) { // check if asynchandler needs updated wrapping struct my_XInternalAsync * p = dpy->async_handlers; diff --git a/src/wrapped/wrappedlibx11_private.h b/src/wrapped/wrappedlibx11_private.h index 0e945e11caa784a84394bfb2bd28083f76687e63..266bbee003e0352c3fb42b11c5a3f0e7ad34eabf 100644 --- a/src/wrapped/wrappedlibx11_private.h +++ b/src/wrapped/wrappedlibx11_private.h @@ -1,43 +1,29 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif -// all those bss stuff are suspicious -//DATAB(__bss_end__, 4) -//DATAB(_bss_end__, 4) -//DATAB(__bss_start, 4) -//DATAB(__bss_start__, 4) -//DATA(__data_start, 4) -//DATA(_edata, 4) -//DATAB(_end, 4) -//DATAB(__end__, 4) -// __exidx_end // type r -// __exidx_start // type r -// _fini -// _init -// KeySymToUcs4 -DATAB(_qfree, 4) -//GO(_Utf8GetConvByName, -//GO(XActivateScreenSaver +DATAB(_qfree, 4) // Warning: failed to confirm + +GO(XActivateScreenSaver, iFp) GOM(XAddConnectionWatch, iFEppp) GO(XAddExtension, pFp) -GO(XAddHost, vFpp) -GO(XAddHosts, vFppi) +GO(XAddHost, iFpp) +GO(XAddHosts, iFppi) GO(XAddPixel, vFpl) -GO(XAddToExtensionList, vFpp) -//GO(XAddToSaveSet +GO(XAddToExtensionList, iFpp) +GO(XAddToSaveSet, iFpL) GO(XAllocClassHint, pFv) -GO(XAllocColor, iFppp) +GO(XAllocColor, iFpLp) GO(XAllocColorCells, iFpLipupu) GO(XAllocColorPlanes, iFpLipiiiippp) GO(XAllocIconSize, pFv) GO(_XAllocID, LFp) GO(_XAllocIDs, vFppi) -GO(XAllocNamedColor, iFppppp) -//GO(_XAllocScratch, +GO(XAllocNamedColor, iFpLppp) +GO(_XAllocScratch, pFpL) GO(XAllocSizeHints, pFv) GO(XAllocStandardColormap, pFv) -//GO(_XAllocTemp, +GO(_XAllocTemp, pFpL) GO(XAllocWMHints, pFv) GO(XAllowEvents, iFpiL) GO(XAllPlanes, LFv) @@ -50,99 +36,99 @@ GO(XBitmapBitOrder, iFp) GO(XBitmapPad, iFp) GO(XBitmapUnit, iFp) GO(XBlackPixel, LFpi) -//GO(XBlackPixelOfScreen -//GO(XCellsOfScreen +GO(XBlackPixelOfScreen, LFp) +GO(XCellsOfScreen, iFp) GO(XChangeActivePointerGrab, iFpuLL) GO(XChangeGC, iFppLp) GO(XChangeKeyboardControl, iFpLp) GO(XChangeKeyboardMapping, iFpiipi) GO(XChangePointerControl, iFpiiiii) GO(XChangeProperty, iFpLLLiipi) -//GO(XChangeSaveSet +GO(XChangeSaveSet, iFpLi) GO(XChangeWindowAttributes, iFpLLp) GOM(XCheckIfEvent, iFEpppp) GO(XCheckMaskEvent, iFplp) GO(XCheckTypedEvent, iFpip) GO(XCheckTypedWindowEvent, iFpLip) -GO(XCheckWindowEvent, iFpplp) +GO(XCheckWindowEvent, iFpLlp) GO(XCirculateSubwindows, iFpLi) -//GO(XCirculateSubwindowsDown -//GO(XCirculateSubwindowsUp +GO(XCirculateSubwindowsDown, iFpL) +GO(XCirculateSubwindowsUp, iFpL) GO(XClearArea, iFpLiiuui) -GO(XClearWindow, iFpp) +GO(XClearWindow, iFpL) GO(XClipBox, iFpp) GO(XCloseDisplay, iFp) GO(XCloseIM, iFp) //GO(_XCloseLC, GO(XCloseOM, iFp) //GO(_XcmsAddCmapRec, -//GO(XcmsAddColorSpace -//GO(XcmsAddFunctionSet -//GO(XcmsAllocColor -//GO(XcmsAllocNamedColor +//GOM(XcmsAddColorSpace, iFEp) +GO(XcmsAddFunctionSet, iFp) +GO(XcmsAllocColor, iFpLpL) +GO(XcmsAllocNamedColor, iFpLpppL) //GO(_XcmsArcTangent, -//GO(XcmsCCCOfColormap -//GO(XcmsCIELabClipab -//GO(XcmsCIELabClipL -//GO(XcmsCIELabClipLab +//GOM(XcmsCCCOfColormap, pFEpL) +//GOM(XcmsCIELabClipab, iFEppuup) +//GOM(XcmsCIELabClipL, iFEppuup) +//GOM(XcmsCIELabClipLab, iFEppuup) DATA(XcmsCIELabColorSpace, 6*sizeof(void*)) -//GO(_XcmsCIELab_prefix // type r, -//GO(XcmsCIELabQueryMaxC -//GO(XcmsCIELabQueryMaxL -//GO(XcmsCIELabQueryMaxLC +//DATA(_XcmsCIELab_prefix, +//GOM(XcmsCIELabQueryMaxC, iFEpddp) +//GOM(XcmsCIELabQueryMaxL, iFEpddp) +//GOM(XcmsCIELabQueryMaxLC, iFEpdp) //GO(_XcmsCIELabQueryMaxLCRGB, -//GO(XcmsCIELabQueryMinL -//GO(XcmsCIELabToCIEXYZ -//GO(XcmsCIELabWhiteShiftColors -//GO(XcmsCIELuvClipL -//GO(XcmsCIELuvClipLuv -//GO(XcmsCIELuvClipuv +//GOM(XcmsCIELabQueryMinL, iFEpddp) +//GOM(XcmsCIELabToCIEXYZ, iFEpppu) +//GOM(XcmsCIELabWhiteShiftColors, iFEpppLpup) +//GOM(XcmsCIELuvClipL, iFEppuup) +//GOM(XcmsCIELuvClipLuv, iFEppuup) +//GOM(XcmsCIELuvClipuv, iFEppuup) DATA(XcmsCIELuvColorSpace, 6*sizeof(void*)) -//GO(_XcmsCIELuv_prefix // type r, -//GO(XcmsCIELuvQueryMaxC -//GO(XcmsCIELuvQueryMaxL -//GO(XcmsCIELuvQueryMaxLC +//DATA(_XcmsCIELuv_prefix, +//GOM(XcmsCIELuvQueryMaxC, iFEpddp) +//GOM(XcmsCIELuvQueryMaxL, iFEpddp) +//GOM(XcmsCIELuvQueryMaxLC, iFEpdp) //GO(_XcmsCIELuvQueryMaxLCRGB, -//GO(XcmsCIELuvQueryMinL -//GO(XcmsCIELuvToCIEuvY -//GO(XcmsCIELuvWhiteShiftColors +//GOM(XcmsCIELuvQueryMinL, iFEpddp) +//GOM(XcmsCIELuvToCIEuvY, iFEpppu) +//GOM(XcmsCIELuvWhiteShiftColors, iFEpppLpup) DATA(XcmsCIEuvYColorSpace, 6*sizeof(void*)) -//GO(_XcmsCIEuvY_prefix // type r, -//GO(XcmsCIEuvYToCIELuv -//GO(XcmsCIEuvYToCIEXYZ -//GO(XcmsCIEuvYToTekHVC +//DATA(_XcmsCIEuvY_prefix, +//GOM(XcmsCIEuvYToCIELuv, iFEpppu) +//GOM(XcmsCIEuvYToCIEXYZ, iFEpppu) +//GOM(XcmsCIEuvYToTekHVC, iFEpppu) //GO(_XcmsCIEuvY_ValidSpec, DATA(XcmsCIExyYColorSpace, 6*sizeof(void*)) // probably need some wrapping -//GO(_XcmsCIExyY_prefix // type r, -//GO(XcmsCIExyYToCIEXYZ +//DATA(_XcmsCIExyY_prefix, +//GOM(XcmsCIExyYToCIEXYZ, iFEpppu) DATA(XcmsCIEXYZColorSpace, 6*sizeof(void*)) -//GO(_XcmsCIEXYZ_prefix // type r, -//GO(XcmsCIEXYZToCIELab -//GO(XcmsCIEXYZToCIEuvY -//GO(XcmsCIEXYZToCIExyY -//GO(XcmsCIEXYZToRGBi +//DATA(_XcmsCIEXYZ_prefix, +//GOM(XcmsCIEXYZToCIELab, iFEpppu) +//GOM(XcmsCIEXYZToCIEuvY, iFEpppu) +//GOM(XcmsCIEXYZToCIExyY, iFEpppu) +//GOM(XcmsCIEXYZToRGBi, iFEppup) //GO(_XcmsCIEXYZ_ValidSpec, -//GO(XcmsClientWhitePointOfCCC -//GO(XcmsConvertColors +//GOM(XcmsClientWhitePointOfCCC, pFEp) +//GOM(XcmsConvertColors, iFEppuLp) //GO(_XcmsConvertColorsWithWhitePt, //GO(_XcmsCopyCmapRecAndFree, //GO(_XcmsCopyISOLatin1Lowered, //GO(_XcmsCopyPointerArray, //GO(_XcmsCosine, -//GO(XcmsCreateCCC +//GOM(XcmsCreateCCC, pFEpipppppp) //GO(_XcmsCubeRoot, DATA(_XcmsDDColorSpaces, 6*sizeof(void*)) DATA(_XcmsDDColorSpacesInit, 6*sizeof(void*)) //GO(_XcmsDDConvertColors, -//GO(XcmsDefaultCCC +//GOM(XcmsDefaultCCC, pFEpi) //GO(_XcmsDeleteCmapRec, DATA(_XcmsDIColorSpaces, 6*sizeof(void*)) DATA(_XcmsDIColorSpacesInit, 6*sizeof(void*)) //GO(_XcmsDIConvertColors, -//GO(XcmsDisplayOfCCC +//GOM(XcmsDisplayOfCCC, pFEp) //GO(_XcmsEqualWhitePts, GO(XcmsFormatOfPrefix, LFp) -//GO(XcmsFreeCCC +GOM(XcmsFreeCCC, vFp) //GO(_XcmsFreeIntensityMaps, //GO(_XcmsFreePointerArray, //GO(_XcmsGetElement, @@ -155,72 +141,72 @@ GO(XcmsLookupColor, iFpLpppL) //GO(_XcmsLRGB_InitScrnDefault, GO(XcmsPrefixOfFormat, pFL) //GO(_XcmsPushPointerArray, -//GO(XcmsQueryBlack -//GO(XcmsQueryBlue +//GOM(XcmsQueryBlack, iFEpLp) +//GOM(XcmsQueryBlue, iFEpLp) GO(XcmsQueryColor, iFpLpL) GO(XcmsQueryColors, iFpLpuL) -//GO(XcmsQueryGreen -//GO(XcmsQueryRed -//GO(XcmsQueryWhite +//GOM(XcmsQueryGreen, iFEpLp) +//GOM(XcmsQueryRed, iFEpLp) +//GOM(XcmsQueryWhite, iFEpLp) DATA(_XcmsRegColorSpaces, 6*sizeof(void*)) //GO(_XcmsRegFormatOfPrefix, //GO(_XcmsResolveColor, //GO(_XcmsResolveColorString, DATA(XcmsRGBColorSpace, 6*sizeof(void*)) DATA(XcmsRGBiColorSpace, 6*sizeof(void*)) -//GO(_XcmsRGBi_prefix // type r, -//GO(XcmsRGBiToCIEXYZ -//GO(XcmsRGBiToRGB -//GO(_XcmsRGB_prefix // type r, -//GO(XcmsRGBToRGBi +//DATA(_XcmsRGBi_prefix, +//GOM(XcmsRGBiToCIEXYZ, iFEppup) +//GOM(XcmsRGBiToRGB, iFEppup) +//DATA(_XcmsRGB_prefix, +//GOM(XcmsRGBToRGBi, iFEppup) //GO(_XcmsRGB_to_XColor, DATA(_XcmsSCCFuncSets, 3*sizeof(void*)) DATA(_XcmsSCCFuncSetsInit, 3*sizeof(void*)) -//GO(XcmsScreenNumberOfCCC -//GO(XcmsScreenWhitePointOfCCC -//GO(XcmsSetCCCOfColormap -//GO(XcmsSetCompressionProc +//GOM(XcmsScreenNumberOfCCC, iFEp) +//GOM(XcmsScreenWhitePointOfCCC, pFEp) +//GOM(XcmsSetCCCOfColormap, pFEpLp) +//GOM(XcmsSetCompressionProc, pFEppp) //GO(_XcmsSetGetColor, //GO(_XcmsSetGetColors, -//GO(XcmsSetWhiteAdjustProc -//GO(XcmsSetWhitePoint +//GOM(XcmsSetWhiteAdjustProc, pFEppp) +//GOM(XcmsSetWhitePoint, iFEpp) //GO(_XcmsSine, //GO(_XcmsSquareRoot, GO(XcmsStoreColor, iFpLp) GO(XcmsStoreColors, iFpLpup) //GO(_XcmsTekHVC_CheckModify, -//GO(XcmsTekHVCClipC -//GO(XcmsTekHVCClipV -//GO(XcmsTekHVCClipVC +//GOM(XcmsTekHVCClipC, iFEppuup) +//GOM(XcmsTekHVCClipV, iFEppuup) +//GOM(XcmsTekHVCClipVC, iFEppuup) DATA(XcmsTekHVCColorSpace, 6*sizeof(void*)) -//GO(_XcmsTekHVC_prefix // type r, -//GO(XcmsTekHVCQueryMaxC -//GO(XcmsTekHVCQueryMaxV -//GO(XcmsTekHVCQueryMaxVC +//DATA(_XcmsTekHVC_prefix, +//GOM(XcmsTekHVCQueryMaxC, iFEpddp) +//GOM(XcmsTekHVCQueryMaxV, iFEpddp) +//GOM(XcmsTekHVCQueryMaxVC, iFEpdp) //GO(_XcmsTekHVCQueryMaxVCRGB, -//GO(XcmsTekHVCQueryMaxVSamples -//GO(XcmsTekHVCQueryMinV -//GO(XcmsTekHVCToCIEuvY -//GO(XcmsTekHVCWhiteShiftColors +//GOM(XcmsTekHVCQueryMaxVSamples, iFEpdpu) +//GOM(XcmsTekHVCQueryMinV, iFEpddp) +//GOM(XcmsTekHVCToCIEuvY, iFEpppu) +//GOM(XcmsTekHVCWhiteShiftColors, iFEpppLpup) DATA(XcmsUNDEFINEDColorSpace, 6*sizeof(void*)) //GO(_XcmsUnresolveColor, -//GO(XcmsVisualOfCCC +//GOM(XcmsVisualOfCCC, pFEp) //GO(_XColor_to_XcmsRGB, GO(XConfigureWindow, iFpLup) GO(XConnectionNumber, iFp) //GO(_XConnectXCB, -//GO(XContextDependentDrawing +GO(XContextDependentDrawing, iFp) GO(XContextualDrawing, iFp) GO(XConvertCase, vFLpp) GO(XConvertSelection, iFpLLLLL) GO(XCopyArea, iFpLLpiiuuii) GO(XCopyColormapAndFree, LFpL) -//GO(_XCopyEventCookie, +GO(_XCopyEventCookie, iFppp) GO(XCopyGC, iFppLp) GO(XCopyPlane, iFpLLpiiuuiiL) //GO(_XCopyToArg, GO(XCreateBitmapFromData, LFpLpuu) -GO(XCreateColormap, pFpppi) +GO(XCreateColormap, LFpLpi) GO(XCreateFontCursor, LFpu) GO(XCreateFontSet, pFppppp) GO(XCreateGC, pFpLLp) @@ -229,22 +215,23 @@ GOM(XCreateIC, pFEpV) // use vararg GOM(XCreateImage, pFEppuiipuuii) GO(dummy_XCreateImage, pFppuiipuuii) // to have the wrapper DATAB(_XCreateMutex_fn, sizeof(void*)) -GO(XCreateOC, pFp) +GO(XCreateOC, pFppppppppppppppppppp) // is pFpV GO(XCreatePixmap, LFpLuuu) GO(XCreatePixmapCursor, LFpLLppuu) GO(XCreatePixmapFromBitmapData, LFpLpuuLLu) GO(XCreateRegion, pFv) GO(XCreateSimpleWindow, LFpLiiuuuLL) -GO(XCreateWindow, pFppiiuuuiupLp) +GO(XCreateWindow, LFpLiiuuuiupLp) DATAB(_Xdebug, sizeof(void*)) GO(XDefaultColormap, LFpi) GO(XDefaultColormapOfScreen, LFp) GO(XDefaultDepth, iFpi) GO(XDefaultDepthOfScreen, iFp) -//GO(_XDefaultError, +GO(_XDefaultError, iFpp) GO(XDefaultGC, pFpi) GO(XDefaultGCOfScreen, pFp) GO(_XDefaultIOError, iFp) +GO(_XDefaultIOErrorExit, vFpp) //GO(_XDefaultOpenIM, //GO(_XDefaultOpenOM, GO(XDefaultRootWindow, LFp) @@ -253,46 +240,46 @@ GO(XDefaultScreenOfDisplay, pFp) GO(XDefaultString, pFv) GO(XDefaultVisual, pFpi) GO(XDefaultVisualOfScreen, pFp) -//GO(_XDefaultWireError, +GO(_XDefaultWireError, iFppp) GO(XDefineCursor, iFpLL) GO(XDeleteContext, iFpLi) -//GO(XDeleteModifiermapEntry +GO(XDeleteModifiermapEntry, pFpCi) GO(XDeleteProperty, iFpLL) -//GO(_XDeq, +GO(_XDeq, vFppp) GOM(_XDeqAsyncHandler, vFEpp) GO(XDestroyIC, vFp) GOM(XDestroyImage, iFEp) //need to unbridge GO(XDestroyOC, vFp) GO(XDestroyRegion, iFp) -GO(XDestroySubwindows, iFpp) -GO(XDestroyWindow, iFpp) -//GO(XDirectionalDependentDrawing -GO(XDisableAccessControl, vFp) +GO(XDestroySubwindows, iFpL) +GO(XDestroyWindow, iFpL) +GO(XDirectionalDependentDrawing, iFp) +GO(XDisableAccessControl, iFp) GO(XDisplayCells, iFpi) GO(XDisplayHeight, iFpi) GO(XDisplayHeightMM, iFpi) GO(XDisplayKeycodes, iFppp) -//GO(XDisplayMotionBufferSize +GO(XDisplayMotionBufferSize, LFp) GO(XDisplayName, pFp) GO(XDisplayOfIM, pFp) GO(XDisplayOfOM, pFp) GO(XDisplayOfScreen, pFp) -//GO(XDisplayPlanes +GO(XDisplayPlanes, iFpi) GO(XDisplayString, pFp) GO(XDisplayWidth, iFpi) GO(XDisplayWidthMM, iFpi) -//GO(XDoesBackingStore -//GO(XDoesSaveUnders -GO(XDrawArc, iFpppiiuuii) -//GO(XDrawArcs -//GO(XDrawImageString -//GO(XDrawImageString16 +GO(XDoesBackingStore, iFp) +GO(XDoesSaveUnders, iFp) +GO(XDrawArc, iFpLpiiuuii) +GO(XDrawArcs, iFpLppi) +GO(XDrawImageString, iFpLpiipi) +GO(XDrawImageString16, iFpLpiipi) GO(XDrawLine, iFpLpiiii) -GO(XDrawLines, iFppppii) +GO(XDrawLines, iFpLppii) GO(XDrawPoint, iFpLpii) GO(XDrawPoints, iFpLppii) -GO(XDrawRectangle, iFpppiiuu) -GO(XDrawRectangles, iFppppi) +GO(XDrawRectangle, iFpLpiiuu) +GO(XDrawRectangles, iFpLppi) GO(XDrawSegments, iFpLppi) GO(XDrawString, iFpLpiipi) GO(XDrawString16, iFpLpiipi) @@ -300,42 +287,42 @@ GO(XDrawText, iFpLpiipi) GO(XDrawText16, iFpLpiipi) GO(_XEatData, vFpL) GO(_XEatDataWords, vFpL) -//GO(XEHeadOfExtensionList +//GO(XEHeadOfExtensionList, GO(XEmptyRegion, iFp) -GO(XEnableAccessControl, vFp) +GO(XEnableAccessControl, iFp) GO(_XEnq, vFpp) GO(XEqualRegion, iFpp) -//GO(_XError, +GO(_XError, iFpp) DATAB(_XErrorFunction, sizeof(void*)) -//GO(XESetBeforeFlush +//GOM(XESetBeforeFlush, pFEpip) GOM(XESetCloseDisplay, pFEpip) -//GO(XESetCopyEventCookie -//GO(XESetCopyGC -//GO(XESetCreateFont -//GO(XESetCreateGC +//GOM(XESetCopyEventCookie, pFEpip) +//GOM(XESetCopyGC, pFEpip) +//GOM(XESetCreateFont, pFEpip) +//GOM(XESetCreateGC, pFEpip) GOM(XESetError, pFEpip) -//GO(XESetErrorString +//GOM(XESetErrorString, pFEpip) GOM(XESetEventToWire, pFEpip) -//GO(XESetFlushGC -//GO(XESetFreeFont -//GO(XESetFreeGC -//GO(XESetPrintErrorValues -//GO(XESetWireToError +//GOM(XESetFlushGC, pFEpip) +//GOM(XESetFreeFont, pFEpip) +//GOM(XESetFreeGC, pFEpip) +//GOM(XESetPrintErrorValues, pFEpip) +//GOM(XESetWireToError, pFEpip) GOM(XESetWireToEvent, pFEpip) -//GO(XESetWireToEventCookie +//GOM(XESetWireToEventCookie, pFEpip) GO(XEventMaskOfScreen, lFp) +GO(_XEventsQueued, iFpi) GO(XEventsQueued, iFpi) -//GO(_XEventsQueued, -//GO(_Xevent_to_mask // type r, -//GO(_XEventToWire, +//DATA(_Xevent_to_mask, +GO(_XEventToWire, iFppp) GO(XExtendedMaxRequestSize, lFp) GO(XExtentsOfFontSet, pFp) //GO(_XF86BigfontFreeFontMetrics, -//GO(_XF86LoadQueryLocaleFont, +GO(_XF86LoadQueryLocaleFont, iFpppp) GO(XFetchBuffer, pFppi) GO(XFetchBytes, pFpp) -//GO(_XFetchEventCookie, -GO(XFetchName, iFppp) +GO(_XFetchEventCookie, iFpp) +GO(XFetchName, iFpLp) GO(XFillArc, iFpLpiiuuii) GO(XFillArcs, iFpLppi) GO(XFillPolygon, iFpLppiii) @@ -343,23 +330,23 @@ GO(XFillRectangle, iFpLpiiuu) GO(XFillRectangles, iFpLppi) GO(XFilterEvent, iFpL) GO(XFindContext, iFpLip) -//GO(XFindOnExtensionList -GO(XFlush, iFp) +GO(XFindOnExtensionList, pFpi) GO(_XFlush, vFp) +GO(XFlush, iFp) GO(XFlushGC, vFpp) GO(_XFlushGCCache, vFpp) GO(XFontsOfFontSet, iFppp) GO(XForceScreenSaver, iFpi) GO(XFree, iFp) //GO(_XFreeAtomTable, -GO(XFreeColormap, iFpp) +GO(XFreeColormap, iFpL) GO(XFreeColors, iFpLpiL) GO(XFreeCursor, iFpL) DATAB(_XFreeDisplayLock_fn, sizeof(void*)) //GO(_XFreeDisplayStructure, -//GO(_XFreeEventCookies, +GO(_XFreeEventCookies, vFp) GO(XFreeEventData, vFpp) -//GO(_XFreeExtData, +GO(_XFreeExtData, iFp) GO(XFreeExtensionList, iFp) GO(XFreeFont, iFpp) GO(XFreeFontInfo, iFppi) @@ -371,7 +358,8 @@ GO(XFreeModifiermap, iFp) DATAB(_XFreeMutex_fn, sizeof(void*)) GO(XFreePixmap, iFpL) GO(XFreeStringList, vFp) -//GO(_XFreeTemp, +GO(_XFreeTemp, vFppL) +GO(XFreeThreads, iFv) //GO(_XFreeX11XCBStructure, GO(XGContextFromGC, LFp) GO(XGeometry, iFpippuuuiipppp) @@ -380,7 +368,7 @@ GO(_XGetAsyncReply, pFppppiii) GO(XGetAtomName, pFpL) GO(XGetAtomNames, iFppip) //GO(_XGetBitsPerPixel, -GO(XGetClassHint, iFppp) +GO(XGetClassHint, iFpLp) GO(XGetCommand, iFpLpp) GO(XGetDefault, pFppp) GO(XGetErrorDatabaseText, iFpppppi) @@ -394,7 +382,7 @@ GO(_XGetHostname, iFpi) GO(XGetIconName, iFpLp) GO(XGetIconSizes, iFpLpp) GO(XGetICValues, pFpppppppppp) // use varargs... -GOM(XGetImage, pFEppiiuuLi) // return an XImage with callbacks that needs wrapping +GOM(XGetImage, pFEpLiiuuLi) // return an XImage with callbacks that needs wrapping GO(XGetIMValues, pFppppppp) // use varargs GO(XGetInputFocus, iFppp) GO(XGetKeyboardControl, iFpp) @@ -402,36 +390,36 @@ GO(XGetKeyboardMapping, pFpCip) //GO(_XGetLCValues, GO(XGetModifierMapping, pFp) GO(XGetMotionEvents, pFpLLLp) -GO(XGetNormalHints, iFppp) +GO(XGetNormalHints, iFpLp) GO(XGetOCValues, pFpppppppppp) // use varargs GO(XGetOMValues, pFp) //GOM(XGetPixel, LFEpii) // need unbridging GO(dummy_XGetPixel, LFpii) // for the wrapper GO(XGetPointerControl, iFpppp) GO(XGetPointerMapping, iFppi) -GOM(_XGetRequest, pFEpuL) +GOM(_XGetRequest, pFEpCL) GO(XGetRGBColormaps, iFpLppL) //GO(_XGetScanlinePad, GO(XGetScreenSaver, iFppppp) GO(XGetSelectionOwner, LFpL) -//GO(XGetSizeHints +GO(XGetSizeHints, iFpLpL) GO(XGetStandardColormap, iFpLpL) -GOM(XGetSubImage, pFEppiiuuuipii) +GOM(XGetSubImage, pFEpLiiuuLipii) GO(XGetTextProperty, iFpLpL) GO(XGetTransientForHint, iFpLp) GO(XGetVisualInfo, pFplpp) -GO(XGetWindowAttributes, iFppp) -//GO(_XGetWindowAttributes, +GO(_XGetWindowAttributes, iFpLp) +GO(XGetWindowAttributes, iFpLp) GO(XGetWindowProperty, iFpLLlliLppppp) -//GO(XGetWMClientMachine +GO(XGetWMClientMachine, iFpLp) GO(XGetWMColormapWindows, iFpLpp) GO(XGetWMHints, pFpL) -GO(XGetWMIconName, iFppp) +GO(XGetWMIconName, iFpLp) GO(XGetWMName, iFpLp) GO(XGetWMNormalHints, iFpLpp) GO(XGetWMProtocols, iFpLpp) GO(XGetWMSizeHints, iFpLppL) -//GO(XGetZoomHints +GO(XGetZoomHints, iFpLp) DATAB(_Xglobal_lock, sizeof(void*)) GO(XGrabButton, iFpuuLiuiiLL) GO(XGrabKey, iFpiuLiii) @@ -442,16 +430,137 @@ DATAB(_XHeadOfDisplayList, sizeof(void*)) GO(XHeightMMOfScreen, iFp) GO(XHeightOfScreen, iFp) DATAB(_Xi18n_lock, sizeof(void*)) -GO(XIconifyWindow, iFppi) +GO(XIconifyWindow, iFpLi) GOM(XIfEvent, iFEpppp) GO(XImageByteOrder, iFp) +//GO(_XimCbDispatch, +//GO(_XimCheckCreateICValues, +//GO(_XimCheckDataSize, +//GO(_XimCheckICMode, +//GO(_XimCheckIfLocalProcessing, +//GO(_XimCheckIfThaiProcessing, +//GO(_XimCheckIMMode, +//GO(_XimCheckLocalInputStyle, +//GO(_XimCommitCallback, //GO(_XIMCompileResourceList, +//GO(_XimConnect, +//GO(_Ximctstombs, +//GO(_Ximctstoutf8, +//GO(_Ximctstowcs, +//GO(_XimDecodeICATTRIBUTE, +//GO(_XimDecodeIMATTRIBUTE, +//GO(_XimDecodeLocalICAttr, +//GO(_XimDecodeLocalIMAttr, +//GO(_XimDestroyIMStructureList, +//GO(_XimDispatchInit, +//GO(_XimEncodeICATTRIBUTE, +//GO(_XimEncodeIMATTRIBUTE, +//GO(_XimEncodeLocalICAttr, +//GO(_XimEncodeLocalIMAttr, +//GO(_XimError, +//GO(_XimErrorCallback, +//GO(_XimExtension, +//GO(_XimFilterWaitEvent, +//GO(_XimFlush, +//GO(_XimForwardEvent, +//GO(_XimForwardEventCallback, +//GO(_XimFreeCommitInfo, +//GO(_XimFreeProtoIntrCallback, +//GO(_XimFreeTransIntrCallback, +//GO(_XimGetAttributeID, //GO(_XimGetCharCode, +//GO(_XimGetCurrentICValues, +//GO(_XimGetCurrentIMValues, +//GO(_XimGetICValueData, +//GO(_XimGetIMValueData, //GO(_XimGetLocaleCode, +//GO(_XimGetMyEndian, +//GO(_XimGetResourceListRec, +//GO(_XimGetResourceListRecByQuark, +//GO(_XimGetWindowEventmask, +//GO(_XimICOfXICID, +//DATA(_XimImSportRec, +//GO(_XimInitialResourceInfo, +//GO(_XimLcctstombs, +//GO(_XimLcctstoutf8, +//GO(_XimLcctstowcs, +//GO(_XimLocalCreateIC, +//GO(_XimLocalFilter, +//GO(_XimLocalGetICValues, +//GO(_XimLocalGetIMValues, +//GO(_XimLocalIMFree, +//GO(_XimLocalMbLookupString, +//GO(_XimLocalOpenIM, +//GO(_XimLocalSetICValues, +//GO(_XimLocalSetIMValues, +//GO(_XimLocalUtf8LookupString, +//GO(_XimLocalWcLookupString, //GO(_XimLookupMBText, //GO(_XimLookupUTF8Text, //GO(_XimLookupWCText, +//GO(_XimMakeICAttrIDList, +//GO(_XimMakeIMAttrIDList, GO(XIMOfIC, pFp) +//GO(_XimOpenIM, +//GO(_XimParseStringFile, +//GO(_XimProcError, +//GO(_XimProcSyncReply, +//GO(_XimProtoCreateIC, +//GO(_XimProtoEventToWire, +//GO(_XimProtoIMFree, +//GO(_XimProtoMbLookupString, +//GO(_XimProtoOpenIM, +//GO(_XimProtoUtf8LookupString, +//GO(_XimProtoWcLookupString, +//GO(_XimProtoWireToEvent, +//GO(_XimRead, +//GO(_XimRegisterDispatcher, +//GO(_XimRegisterFilter, +//GO(_XimRegisterIMInstantiateCallback, +//GO(_XimRegisterServerFilter, +//GO(_XimRegisterTriggerKeysCallback, +//GO(_XimRegProtoIntrCallback, +//GO(_XimReregisterFilter, +//GO(_XimResetIMInstantiateCallback, +//GO(_XimRespSyncReply, +//GO(_XimServerDestroy, +//GO(_XimSetCurrentICValues, +//GO(_XimSetCurrentIMValues, +//GO(_XimSetEventMaskCallback, +//GO(_XimSetHeader, +//GO(_XimSetICDefaults, +//GO(_XimSetICMode, +//GO(_XimSetICResourceList, +//GO(_XimSetICValueData, +//GO(_XimSetIMMode, +//GO(_XimSetIMResourceList, +//GO(_XimSetIMValueData, +//GO(_XimSetInnerICResourceList, +//GO(_XimSetInnerIMResourceList, +//GO(_XimSetLocalIMDefaults, +//GO(_XimShutdown, +//GO(_XimSync, +//GO(_XimSyncCallback, +//GO(_XimThaiCloseIM, +//GO(_XimThaiCreateIC, +//GO(_XimThaiFilter, +//GO(_XimThaiIMFree, +//GO(_XimThaiOpenIM, +//GO(_XimTransCallDispatcher, +//GO(_XimTransConf, +//GO(_XimTransFilterWaitEvent, +//GO(_XimTransFlush, +//GO(_XimTransInternalConnection, +//DATA(_XimTransportRec, +//GO(_XimTransRead, +//GO(_XimTransRegisterDispatcher, +//GO(_XimTransWrite, +//GO(_XimTriggerNotify, +//GO(_XimUnregisterFilter, +//GO(_XimUnRegisterIMInstantiateCallback, +//GO(_XimUnregisterServerFilter, +//GO(_XimWrite, +//GO(_XimXConf, //GO(_XimXTransBytesReadable, //GO(_XimXTransClose, //GO(_XimXTransCloseForCloning, @@ -460,10 +569,8 @@ GO(XIMOfIC, pFp) //GO(_XimXTransFreeConnInfo, //GO(_XimXTransGetConnectionNumber, //GO(_XimXTransGetHostname, -//GO(_XimXTransGetMyAddr, //GO(_XimXTransGetPeerAddr, //GO(_XimXTransIsLocal, -//GO(_XimXTransOpenCLTSClient, //GO(_XimXTransOpenCOTSClient, //GO(_XimXTransRead, //GO(_XimXTransReadv, @@ -475,137 +582,135 @@ DATA(_XimXTransSocketTCPFuncs, sizeof(void*)) DATA(_XimXTransSocketUNIXFuncs, sizeof(void*)) //GO(_XimXTransWrite, //GO(_XimXTransWritev, -//GO(_XInitDefaultIM, -//GO(_XInitDefaultOM, DATAB(_XInitDisplayLock_fn, sizeof(void*)) -//GO(_XInitDynamicIM, -//GO(_XInitDynamicOM, GO(XInitExtension, pFpp) +//GO(_XInitIM, GOM(XInitImage, iFEp) -//GO(_XInitImageFuncPtrs, +GOM(_XInitImageFuncPtrs, iFEp) //GO(_XInitKeysymDB, +//GO(_XInitOM, GO(XInitThreads, iFv) GO(XInsertModifiermapEntry, pFpCi) -GO(XInstallColormap, iFpp) +GO(XInstallColormap, iFpL) GO(XInternalConnectionNumbers, iFppp) GO(XInternAtom, LFppi) GO(XInternAtoms, iFppiip) GO(XIntersectRegion, iFppp) GO(_XIOError, iFp) DATAB(_XIOErrorFunction, sizeof(void*)) -//GO(_XIsEventCookie, +GO(_XIsEventCookie, iFpp) GO(XkbAddDeviceLedInfo, pFpuu) -//GO(XkbAddGeomColor -//GO(XkbAddGeomDoodad -//GO(XkbAddGeomKey -//GO(XkbAddGeomKeyAlias -//GO(XkbAddGeomOutline -//GO(XkbAddGeomOverlay -//GO(XkbAddGeomOverlayKey -//GO(XkbAddGeomOverlayRow -//GO(XkbAddGeomProperty -//GO(XkbAddGeomRow -//GO(XkbAddGeomSection -//GO(XkbAddGeomShape +GO(XkbAddGeomColor, pFppu) +GO(XkbAddGeomDoodad, pFppL) +GO(XkbAddGeomKey, pFp) +GO(XkbAddGeomKeyAlias, pFppp) +GO(XkbAddGeomOutline, pFpi) +GO(XkbAddGeomOverlay, pFpLi) +GO(XkbAddGeomOverlayKey, pFpppp) +GO(XkbAddGeomOverlayRow, pFpii) +GO(XkbAddGeomProperty, pFppp) +GO(XkbAddGeomRow, pFpi) +GO(XkbAddGeomSection, pFpLiii) +GO(XkbAddGeomShape, pFpLi) GO(XkbAddKeyType, pFpLiii) -//GO(XkbAllocClientMap +GO(XkbAllocClientMap, iFpuu) GO(XkbAllocCompatMap, iFpuu) GO(XkbAllocControls, iFpu) GO(XkbAllocDeviceInfo, pFuuu) -//GO(XkbAllocGeomColors -//GO(XkbAllocGeomDoodads -//GO(XkbAllocGeometry -//GO(XkbAllocGeomKeyAliases -//GO(XkbAllocGeomKeys -//GO(XkbAllocGeomOutlines -//GO(XkbAllocGeomOverlayKeys -//GO(XkbAllocGeomOverlayRows -//GO(XkbAllocGeomOverlays -//GO(XkbAllocGeomPoints -//GO(XkbAllocGeomProps -//GO(XkbAllocGeomRows -//GO(XkbAllocGeomSectionDoodads -//GO(XkbAllocGeomSections -//GO(XkbAllocGeomShapes +GO(XkbAllocGeomColors, iFpi) +GO(XkbAllocGeomDoodads, iFpi) +GO(XkbAllocGeometry, iFpp) +GO(XkbAllocGeomKeyAliases, iFpi) +GO(XkbAllocGeomKeys, iFpi) +GO(XkbAllocGeomOutlines, iFpi) +GO(XkbAllocGeomOverlayKeys, iFpi) +GO(XkbAllocGeomOverlayRows, iFpi) +GO(XkbAllocGeomOverlays, iFpi) +GO(XkbAllocGeomPoints, iFpi) +GO(XkbAllocGeomProps, iFpi) +GO(XkbAllocGeomRows, iFpi) +GO(XkbAllocGeomSectionDoodads, iFpi) +GO(XkbAllocGeomSections, iFpi) +GO(XkbAllocGeomShapes, iFpi) GO(XkbAllocIndicatorMaps, iFp) GO(XkbAllocKeyboard, pFv) GO(XkbAllocNames, iFpuii) -//GO(XkbAllocServerMap +GO(XkbAllocServerMap, iFpuu) GO(XkbApplyCompatMapToKey, iFpCp) GO(XkbApplyVirtualModChanges, iFpup) -GO(XkbBell, iFppip) +GO(XkbBell, iFpLiL) GO(XkbBellEvent, iFpLiL) GO(XkbChangeDeviceInfo, iFppp) -//GO(XkbChangeEnabledControls +GO(XkbChangeEnabledControls, iFpuuu) GO(XkbChangeKeycodeRange, iFpiip) GO(XkbChangeMap, iFppp) GO(XkbChangeNames, iFppp) GO(XkbChangeTypesOfKey, iFpiiupp) GO(XkbComputeEffectiveMap, iFppp) -//GO(XkbComputeRowBounds -//GO(XkbComputeSectionBounds -//GO(XkbComputeShapeBounds -//GO(XkbComputeShapeTop +GO(XkbComputeRowBounds, iFppp) +GO(XkbComputeSectionBounds, iFpp) +GO(XkbComputeShapeBounds, iFp) +GO(XkbComputeShapeTop, iFpp) //GO(_XkbCopyFromReadBuffer, GO(XkbCopyKeyType, iFpp) GO(XkbCopyKeyTypes, iFppi) -//GO(XkbDeviceBell +GO(XkbDeviceBell, iFpLiiiiL) GO(XkbDeviceBellEvent, iFpLiiiiL) -//GO(XkbFindOverlayForKey +GO(XkbFindOverlayForKey, pFppp) GO(XkbForceBell, iFpi) GO(XkbForceDeviceBell, iFpiiii) GO(XkbFreeClientMap, vFpui) -//GO(XkbFreeCompatMap +GO(XkbFreeCompatMap, vFpui) GO(XkbFreeComponentList, vFp) -//GO(XkbFreeControls +GO(XkbFreeControls, vFpui) GO(XkbFreeDeviceInfo, vFpui) -//GO(XkbFreeGeomColors -//GO(XkbFreeGeomDoodads -//GO(XkbFreeGeometry -//GO(XkbFreeGeomKeyAliases -//GO(XkbFreeGeomKeys -//GO(XkbFreeGeomOutlines -//GO(XkbFreeGeomOverlayKeys -//GO(XkbFreeGeomOverlayRows -//GO(XkbFreeGeomOverlays -//GO(XkbFreeGeomPoints -//GO(XkbFreeGeomProperties -//GO(XkbFreeGeomRows -//GO(XkbFreeGeomSections -//GO(XkbFreeGeomShapes +GO(XkbFreeGeomColors, vFpiii) +GO(XkbFreeGeomDoodads, vFpii) +GO(XkbFreeGeometry, vFpui) +GO(XkbFreeGeomKeyAliases, vFpiii) +GO(XkbFreeGeomKeys, vFpiii) +GO(XkbFreeGeomOutlines, vFpiii) +GO(XkbFreeGeomOverlayKeys, vFpiii) +GO(XkbFreeGeomOverlayRows, vFpiii) +GO(XkbFreeGeomOverlays, vFpiii) +GO(XkbFreeGeomPoints, vFpiii) +GO(XkbFreeGeomProperties, vFpiii) +GO(XkbFreeGeomRows, vFpiii) +GO(XkbFreeGeomSections, vFpiii) +GO(XkbFreeGeomShapes, vFpiii) GO(XkbFreeIndicatorMaps, vFp) GO(XkbFreeKeyboard, vFpui) GO(XkbFreeNames, vFpui) //GO(_XkbFreeReadBuffer, -//GO(XkbFreeServerMap +GO(XkbFreeServerMap, vFpui) DATA(_XkbGetAtomNameFunc, sizeof(void*)) -//GO(XkbGetAutoRepeatRate +GO(XkbGetAutoRepeatRate, iFpupp) GO(XkbGetAutoResetControls, iFppp) //GO(_XkbGetCharset, -//GO(XkbGetCompatMap +GO(XkbGetCompatMap, iFpup) GO(XkbGetControls, iFpLp) //GO(_XkbGetConverters, GO(XkbGetDetectableAutoRepeat, iFpp) GO(XkbGetDeviceButtonActions, iFppiuu) GO(XkbGetDeviceInfo, pFpuuuu) -//GO(XkbGetDeviceInfoChanges -//GO(XkbGetDeviceLedInfo -//GO(XkbGetGeometry -//GO(XkbGetIndicatorMap +GO(XkbGetDeviceInfoChanges, iFppp) +GO(XkbGetDeviceLedInfo, iFppuuu) +GO(XkbGetGeometry, iFpp) +GO(XkbGetIndicatorMap, iFpLp) GO(XkbGetIndicatorState, iFpup) -//GO(XkbGetKeyActions -//GO(XkbGetKeyBehaviors +GO(XkbGetKeyActions, iFpuup) +GO(XkbGetKeyBehaviors, iFpuup) GO(XkbGetKeyboard, pFpuu) GO(XkbGetKeyboardByName, pFpupuui) -//GO(XkbGetKeyExplicitComponents -//GO(XkbGetKeyModifierMap -//GO(XkbGetKeySyms -//GO(XkbGetKeyTypes +GO(XkbGetKeyExplicitComponents, iFpuup) +GO(XkbGetKeyModifierMap, iFpuup) +GO(XkbGetKeySyms, iFpuup) +GO(XkbGetKeyTypes, iFpuup) GO(XkbGetKeyVirtualModMap, iFpuup) GO(XkbGetMap, pFpuu) -//GO(XkbGetMapChanges +GO(XkbGetMapChanges, iFppp) GO(XkbGetNamedDeviceIndicator, iFpuuuLpppp) -//GO(XkbGetNamedGeometry +GO(XkbGetNamedGeometry, iFppL) GO(XkbGetNamedIndicator, iFpLpppp) GO(XkbGetNames, iFpup) GO(XkbGetPerClientControls, iFpp) @@ -613,7 +718,7 @@ GO(XkbGetPerClientControls, iFpp) //GO(_XkbGetReadBufferPtr, GO(XkbGetState, iFpup) GO(XkbGetUpdatedMap, iFpup) -//GO(XkbGetVirtualMods +GO(XkbGetVirtualMods, iFpup) GO(XkbGetXlibControls, uFp) GO(XkbIgnoreExtension, iFi) GO(XkbInitCanonicalKeyTypes, iFpui) @@ -626,8 +731,8 @@ GO(XkbLatchGroup, iFpuu) GO(XkbLatchModifiers, iFpuuu) GO(XkbLibraryVersion, iFpp) GO(XkbListComponents, pFpupp) -//GO(XkbLockGroup -//GO(XkbLockModifiers +GO(XkbLockGroup, iFpuu) +GO(XkbLockModifiers, iFpuuu) GO(XkbLookupKeyBinding, iFpLupip) GO(XkbLookupKeySym, iFpCupp) GO(XkbNoteControlsChanges, vFppu) @@ -638,7 +743,9 @@ GO(XkbNoteNameChanges, vFppu) GO(XkbOpenDisplay, pFpppppp) //GO(_XkbPeekAtReadBuffer, GO(XkbQueryExtension, iFpppppp) +//GO(_XkbReadBufferCopy32, //GO(_XkbReadBufferCopyKeySyms, +//GO(_XkbReadCopyData32, //GO(_XkbReadCopyKeySyms, //GO(_XkbReadGetCompatMapReply, //GO(_XkbReadGetGeometryReply, @@ -652,30 +759,30 @@ GO(XkbResizeKeyActions, pFpii) GO(XkbResizeKeySyms, pFpii) GO(XkbResizeKeyType, iFpiiii) GO(XkbSelectEventDetails, iFpuuLL) -GO(XkbSelectEvents, iFpuLL) -//GO(XkbSetAtomFuncs -//GO(XkbSetAutoRepeatRate +GO(XkbSelectEvents, iFpuuu) +//GOM(XkbSetAtomFuncs, vFEpp) +GO(XkbSetAutoRepeatRate, iFpuuu) GO(XkbSetAutoResetControls, iFpupp) GO(XkbSetCompatMap, iFpupi) -//GO(XkbSetControlslib +GO(XkbSetControls, iFpLp) GO(XkbSetDebuggingFlags, iFpuupuupp) GO(XkbSetDetectableAutoRepeat, iFpip) GO(XkbSetDeviceButtonActions, iFppuu) GO(XkbSetDeviceInfo, iFpup) GO(XkbSetDeviceLedInfo, iFppuuu) -//GO(XkbSetGeometry +GO(XkbSetGeometry, iFpup) GO(XkbSetIgnoreLockMods, iFpuuuuu) -//GO(XkbSetIndicatorMap +GO(XkbSetIndicatorMap, iFpLp) GO(XkbSetMap, iFpup) GO(XkbSetNamedDeviceIndicator, iFpuuuLiiip) GO(XkbSetNamedIndicator, iFpLiiip) GO(XkbSetNames, iFpuuup) GO(XkbSetPerClientControls, iFpup) -//GO(XkbSetServerInternalMods +GO(XkbSetServerInternalMods, iFpuuuuu) GO(XkbSetXlibControls, uFpuu) //GO(_XkbSkipReadBufferData, -GO(XkbToControl, CFC) -//GO(XkbTranslateKey +GO(XkbToControl, cFc) +//GO(XkbTranslateKey, GO(XkbTranslateKeyCode, iFpCupp) GO(XkbTranslateKeySym, iFppupip) GO(XkbUpdateActionVirtualMods, iFppu) @@ -683,16 +790,17 @@ GO(XkbUpdateKeyTypeVirtualMods, vFppup) GO(XkbUpdateMapFromCore, iFpCiipp) GO(XkbUseExtension, iFppp) GO(XkbVirtualModsToReal, iFpup) +//GO(_XkbWriteCopyData32, //GO(_XkbWriteCopyKeySyms, GO(XkbXlibControlsImplemented, uFv) -GO(XKeycodeToKeysym, LFpCi) //GO(_XKeycodeToKeysym, +GO(XKeycodeToKeysym, LFpCi) //GO(_XKeyInitialize, -GO(XKeysymToKeycode, CFpL) //GO(_XKeysymToKeycode, +GO(XKeysymToKeycode, CFpL) //GO(_XKeysymToModifiers, GO(XKeysymToString, pFL) -//GO(_XkeyTable // type r, +//DATA(_XkeyTable, GO(XKillClient, iFpL) GO(XLastKnownRequestProcessed, LFp) //GO(_XlcAddCharSet, @@ -713,12 +821,13 @@ GO(XLastKnownRequestProcessed, LFp) //GO(_XlcCreateLocaleDataBase, //GO(_XlcCurrentLC, //GO(_XlcDbg_printValue, +//GO(_XlcDefaultLoader, //GO(_XlcDefaultMapModifiers, //GO(_XlcDeInitLoader, //GO(_XlcDestroyLC, //GO(_XlcDestroyLocaleDataBase, -//GO(_XlcDynamicLoad, //GO(_XlcFileName, +//GO(_XlcGenericLoader, DATA(_XlcGenericMethods, sizeof(void*)) //GO(_XlcGetCharSet, //GO(_XlcGetCharSetWithSide, @@ -745,6 +854,7 @@ DATA(_XlcPublicMethods, sizeof(void*)) //GO(_XlcResolveLocaleName, //GO(_XlcSetConverter, //GO(_XlcSetValues, +//GO(_XlcUtf8Loader, //GO(_XlcValidModSyntax, //GO(_XlcVaToArgList, //GO(_Xlcwcstombs, @@ -759,43 +869,53 @@ GO(XListPixmapFormats, pFpp) GO(XListProperties, pFpLp) GO(XLoadFont, LFpp) GO(XLoadQueryFont, pFpp) -// xlocaledir +GO(xlocaledir, vFpi) GO(XLocaleOfFontSet, pFp) GO(XLocaleOfIM, pFp) GO(XLocaleOfOM, pFp) GO(XLockDisplay, vFp) DATAB(_XLockMutex_fn, sizeof(void*)) GO(XLookupColor, iFpLppp) -GO(XLookupKeysym, LFpi) //GO(_XLookupKeysym, -GO(XLookupString, iFppipp) +GO(XLookupKeysym, LFpi) //GO(_XLookupString, -GO(XLowerWindow, iFpp) -GO(XMapRaised, iFpp) -GO(XMapSubwindows, iFpp) -GO(XMapWindow, iFpp) +GO(XLookupString, iFppipp) +GO(XLowerWindow, iFpL) +GO(XMapRaised, iFpL) +GO(XMapSubwindows, iFpL) +GO(XMapWindow, iFpL) GO(XMaskEvent, iFplp) GO(XMatchVisualInfo, iFpiiip) -//GO(XMaxCmapsOfScreen -GO(XMaxRequestSize, iFp) -//GO(XmbDrawImageString -GO(XmbDrawString, vFppppiipi) -//GO(XmbDrawText +GO(XMaxCmapsOfScreen, iFp) +GO(XMaxRequestSize, lFp) +//GO(_XmbDefaultDrawImageString, +//GO(_XmbDefaultDrawString, +//GO(_XmbDefaultTextEscapement, +//GO(_XmbDefaultTextExtents, +//GO(_XmbDefaultTextPerCharExtents, +GO(XmbDrawImageString, vFpLppiipi) +GO(XmbDrawString, vFpLppiipi) +GO(XmbDrawText, vFpLpiipi) +//GO(_XmbGenericDrawImageString, +//GO(_XmbGenericDrawString, +//GO(_XmbGenericTextEscapement, +//GO(_XmbGenericTextExtents, +//GO(_XmbGenericTextPerCharExtents, GO(_Xmblen, iFpi) GO(XmbLookupString, iFpppipp) GO(XmbResetIC, pFp) -GO(XmbSetWMProperties, vFpppppippp) +GO(XmbSetWMProperties, vFpLpppippp) //GO(_Xmbstoutf8, //GO(_Xmbstowcs, GO(XmbTextEscapement, iFppi) GO(XmbTextExtents, iFppipp) -GO(XmbTextListToTextProperty, iFppiip) //GO(_XmbTextListToTextProperty, -GO(XmbTextPerCharExtents, iFppippppp) -GO(XmbTextPropertyToTextList, iFpppp) +GO(XmbTextListToTextProperty, iFppiup) +GO(XmbTextPerCharExtents, iFppippippp) //GO(_XmbTextPropertyToTextList, +GO(XmbTextPropertyToTextList, iFpppp) GO(_Xmbtowc, iFppi) -//GO(XMinCmapsOfScreen +GO(XMinCmapsOfScreen, iFp) GO(XMoveResizeWindow, iFpLiiuu) GO(XMoveWindow, iFpLii) GO(XNewModifiermap, pFi) @@ -805,6 +925,12 @@ GO(XNoOp, iFp) //GO(_XNoticeCreateBitmap, //GO(_XNoticePutBitmap, GO(XOffsetRegion, iFpii) +//GO(_XomConvert, +//GO(_XomGenericDrawString, +//GO(_XomGenericOpenOM, +//GO(_XomGenericTextExtents, +//GO(_XomGetFontDataFromFontSet, +//GO(_XomInitConverter, GO(XOMOfOC, pFp) GOM(XOpenDisplay, pFEp) GO(XOpenIM, pFpppp) @@ -816,29 +942,29 @@ GO(XParseGeometry, iFppppp) GO(XPeekEvent, iFpp) GOM(XPeekIfEvent, iFEpppp) GO(XPending, iFp) -//GO(Xpermalloc +GO(Xpermalloc, pFu) GO(XPlanesOfScreen, iFp) -GO(XPointInRegion, iFpp) -//GO(_XPollfdCacheAdd, -//GO(_XPollfdCacheDel, -//GO(_XPollfdCacheInit, +GO(XPointInRegion, iFpii) +GO(_XPollfdCacheAdd, vFpi) +GO(_XPollfdCacheDel, vFpi) +GO(_XPollfdCacheInit, iFp) GO(XPolygonRegion, pFpii) +//GOM(_XProcessInternalConnection, vFEpp) GO(XProcessInternalConnection, vFpi) -//GO(_XProcessInternalConnection, -//GO(_XProcessWindowAttributes, +GO(_XProcessWindowAttributes, vFppLp) GO(XProtocolRevision, iFp) GO(XProtocolVersion, iFp) +GO(_XPutBackEvent, iFpp) GO(XPutBackEvent, iFpp) -//GO(_XPutBackEvent, -GOM(XPutImage, iFEppppiiiiuu) -//GO(XPutPixel +GOM(XPutImage, iFEpLppiiiiuu) +//GO(XPutPixel, GO(XQLength, iFp) -GO(XQueryBestCursor, iFppuupp) +GO(XQueryBestCursor, iFpLuupp) GO(XQueryBestSize, iFpiLuupp) -//GO(XQueryBestStipple +GO(XQueryBestStipple, iFpLuupp) GO(XQueryBestTile, iFpLuupp) -GO(XQueryColor, iFppp) -GO(XQueryColors, iFpppi) +GO(XQueryColor, iFpLp) +GO(XQueryColors, iFpLpi) GOM(XQueryExtension, iFEppppp) GO(XQueryFont, pFpL) GO(XQueryKeymap, iFpp) @@ -846,24 +972,24 @@ GO(XQueryPointer, iFpLppppppp) GO(XQueryTextExtents, iFpLpipppp) GO(XQueryTextExtents16, iFpLpipppp) GO(XQueryTree, iFpLpppp) -GO(XRaiseWindow, iFpp) -GO(_XRead, iFppi) +GO(XRaiseWindow, iFpL) +GO(_XRead, iFppl) GO(XReadBitmapFile, iFpLpppppp) GO(XReadBitmapFileData, iFpppppp) GO(_XReadEvents, vFp) -GO(_XReadPad, vFppi) +GO(_XReadPad, vFppl) GO(XRebindKeysym, iFpLpipi) GO(XRecolorCursor, iFpLpp) GO(XReconfigureWMWindow, iFpLiup) GO(XRectInRegion, iFpiiuu) -GO(XRefreshKeyboardMapping, iFp) //GO(_XRefreshKeyboardMapping, +GO(XRefreshKeyboardMapping, iFp) //GO(_XRegisterFilterByMask, //GO(_XRegisterFilterByType, GOM(XRegisterIMInstantiateCallback, iFEpppppp) -//GO(_XRegisterInternalConnection, -GOM(XRemoveConnectionWatch, iFEppp) -//GO(XRemoveFromSaveSet +//GOM(_XRegisterInternalConnection, iFEpipp) +GOM(XRemoveConnectionWatch, vFEppp) +GO(XRemoveFromSaveSet, iFpL) GO(XRemoveHost, iFpp) GO(XRemoveHosts, iFppi) GO(XReparentWindow, iFpLLii) @@ -877,7 +1003,7 @@ GO(XrmCombineDatabase, vFppi) GO(XrmCombineFileDatabase, iFppi) //GO(_XrmDefaultInitParseInfo, GO(XrmDestroyDatabase, vFp) -//GOM(XrmEnumerateDatabase +//GOM(XrmEnumerateDatabase, iFEpppipp) GO(XrmGetDatabase, pFp) GO(XrmGetFileDatabase, pFp) GO(XrmGetResource, iFppppp) @@ -885,25 +1011,25 @@ GO(XrmGetStringDatabase, pFp) GO(XrmInitialize, vFv) //GO(_XrmInitParseInfo, //GO(_XrmInternalStringToQuark, -//GO(XrmLocaleOfDatabase -//GO(XrmMergeDatabases -//GO(XrmParseCommand -//GO(XrmPermStringToQuark -//GO(XrmPutFileDatabase -//GO(XrmPutLineResource -//GO(XrmPutResource -//GO(XrmPutStringResource -//GO(XrmQGetResource -//GO(XrmQGetSearchList -//GO(XrmQGetSearchResource -//GO(XrmQPutResource -//GO(XrmQPutStringResource -//GO(XrmQuarkToString -//GO(XrmSetDatabase -//GO(XrmStringToBindingQuarkList -//GO(XrmStringToQuark -//GO(XrmStringToQuarkList -GO(XrmUniqueQuark, iFv) //typedef int XrmQuark, *XrmQuarkList; +GO(XrmLocaleOfDatabase, pFp) +GO(XrmMergeDatabases, vFpp) +GO(XrmParseCommand, vFppippp) +GO(XrmPermStringToQuark, iFp) +GO(XrmPutFileDatabase, vFpp) +GO(XrmPutLineResource, vFpp) +GO(XrmPutResource, vFpppp) +GO(XrmPutStringResource, vFppp) +GO(XrmQGetResource, iFppppp) +GO(XrmQGetSearchList, iFppppi) +GO(XrmQGetSearchResource, iFpiipp) +GO(XrmQPutResource, vFpppip) +GO(XrmQPutStringResource, vFpppp) +GO(XrmQuarkToString, pFi) +GO(XrmSetDatabase, vFpp) +GO(XrmStringToBindingQuarkList, vFppp) +GO(XrmStringToQuark, iFp) +GO(XrmStringToQuarkList, vFpp) +GO(XrmUniqueQuark, iFv) GO(XRootWindow, LFpi) GO(XRootWindowOfScreen, LFp) GO(XRotateBuffers, iFpi) @@ -912,48 +1038,49 @@ GO(XSaveContext, iFpLip) GO(XScreenCount, iFp) GO(XScreenNumberOfScreen, iFp) GO(XScreenOfDisplay, pFpi) -//GO(_XScreenOfWindow, +GO(_XScreenOfWindow, pFpL) GO(XScreenResourceString, pFp) GO(XSelectInput, iFpLl) -GO(_XSend, vFppi) +GO(_XSend, vFppl) GO(XSendEvent, iFpLilp) GO(XServerVendor, pFp) -GO(XSetAccessControl, vFpi) +GO(XSetAccessControl, iFpi) GOM(XSetAfterFunction, pFEpp) GO(XSetArcMode, iFppi) GO(XSetAuthorization, vFpipi) GO(XSetBackground, iFppL) GO(XSetClassHint, iFpLp) -GO(XSetClipMask, iFppp) +GO(XSetClipMask, iFppL) GO(XSetClipOrigin, iFppii) +GO(_XSetClipRectangles, vFppiipii) GO(XSetClipRectangles, iFppiipii) -//GO(_XSetClipRectangles, GO(XSetCloseDownMode, iFpi) GO(XSetCommand, iFpLpi) GO(XSetDashes, iFppipi) GOM(XSetErrorHandler, pFEp) GO(XSetFillRule, iFppi) -GO(XSetFillStyle, iFppp) +GO(XSetFillStyle, iFppi) GO(XSetFont, iFppL) GO(XSetFontPath, iFppi) GO(XSetForeground, iFppL) GO(XSetFunction, iFppi) GO(XSetGraphicsExposures, iFppi) GO(XSetICFocus, vFp) -GO(XSetIconName, iFppp) +GO(XSetIconName, iFpLp) GO(XSetIconSizes, iFpLpi) -GOM(XSetICValues, pFEpV) // use vaarg +GOM(XSetICValues, pFEpV) //GO(_XSetImage, -GOM(XSetIMValues, pFEpV) // use vaarg +GOM(XSetIMValues, pFEpV) GO(XSetInputFocus, iFpLiL) +//GOM(XSetIOErrorExitHandler, vFEppp) GOM(XSetIOErrorHandler, pFEp) -GO(_XSetLastRequestRead, uFpp) +GO(_XSetLastRequestRead, LFpp) GO(XSetLineAttributes, iFppuiii) GO(XSetLocaleModifiers, pFp) GO(XSetModifierMapping, iFpp) -GO(XSetNormalHints, iFpppp) +GO(XSetNormalHints, iFpLp) GO(XSetOCValues, pFpppppppppppppppp) // use vaarg -GO(XSetOMValues, pFp) +GO(XSetOMValues, pFpppppppppppppppp) // use vaarg GO(XSetPlaneMask, iFppL) GO(XSetPointerMapping, iFppi) GO(XSetRegion, iFppp) @@ -964,22 +1091,22 @@ GO(XSetSizeHints, iFpLpL) GO(XSetStandardColormap, vFpLpL) GO(XSetStandardProperties, iFpLppLpip) GO(XSetState, iFppLLiL) -GO(XSetStipple, iFppp) +GO(XSetStipple, iFppL) GO(XSetSubwindowMode, iFppi) GO(XSetTextProperty, vFpLpL) GO(XSetTile, iFppL) GO(XSetTransientForHint, iFpLL) GO(XSetTSOrigin, iFppii) -GO(XSetWindowBackground, iFppu) -GO(XSetWindowBackgroundPixmap, iFppp) +GO(XSetWindowBackground, iFpLL) +GO(XSetWindowBackgroundPixmap, iFpLL) GO(XSetWindowBorder, iFpLL) GO(XSetWindowBorderPixmap, iFpLL) GO(XSetWindowBorderWidth, iFpLu) GO(XSetWindowColormap, iFpLL) -GO(XSetWMClientMachine, vFppp) +GO(XSetWMClientMachine, vFpLp) GO(XSetWMColormapWindows, iFpLpi) GO(XSetWMHints, iFpLp) -GO(XSetWMIconName, vFppp) +GO(XSetWMIconName, vFpLp) GO(XSetWMName, vFpLp) GO(XSetWMNormalHints, vFpLp) GO(XSetWMProperties, vFpLpppippp) @@ -991,12 +1118,12 @@ GO(XStoreBuffer, iFppii) GO(XStoreBytes, iFppi) GO(XStoreColor, iFpLp) GO(XStoreColors, iFpLpi) -//GO(_XStoreEventCookie, +GO(_XStoreEventCookie, vFpp) GO(XStoreName, iFpLp) GO(XStoreNamedColor, iFpLpLi) GO(XStringListToTextProperty, iFpip) GO(XStringToKeysym, LFp) -//GOM(XSubImage, pFEpiiuu) // need unbridging +//GOM(XSubImage, pFEpiiuu) // need unbridging GO(dummy_XSubImage, pFpiiuu) // for the wrapper GO(XSubtractRegion, iFppp) GO(XSupportsLocale, iFv) @@ -1014,7 +1141,7 @@ GO(XTranslateCoordinates, iFpLLiippp) //GO(_XTranslateKey, //GO(_XTranslateKeySym, //GO(_XTryShapeBitmapCursor, -GO(XUndefineCursor, iFpp) +GO(XUndefineCursor, iFpL) GO(XUngrabButton, iFpuuL) GO(XUngrabKey, iFpiuL) GO(XUngrabKeyboard, iFpL) @@ -1023,45 +1150,65 @@ GO(XUngrabServer, iFp) GO(XUninstallColormap, iFpL) GO(XUnionRectWithRegion, iFppp) GO(XUnionRegion, iFppp) -//GO(_XUnknownCopyEventCookie, -//GO(_XUnknownNativeEvent, -//GO(_XUnknownWireEvent, -//GO(_XUnknownWireEventCookie, +GO(_XUnknownCopyEventCookie, iFppp) +GO(_XUnknownNativeEvent, iFppp) +GO(_XUnknownWireEvent, iFppp) +GO(_XUnknownWireEventCookie, iFppp) GO(XUnloadFont, iFpL) GO(XUnlockDisplay, vFp) -DATAB(_XUnlockMutex_fn, sizeof(void*)) -GO(XUnmapSubwindows, iFpp) +DATA(_XUnlockMutex_fn, sizeof(void*)) +GO(XUnmapSubwindows, iFpL) GO(XUnmapWindow, iFpL) //GO(_XUnregisterFilter, GOM(XUnregisterIMInstantiateCallback, iFEpppppp) -//GO(_XUnregisterInternalConnection, +GO(_XUnregisterInternalConnection, vFpi) //GO(_XUnresolveColor, GO(XUnsetICFocus, vFp) //GO(_XUpdateAtomCache, //GO(_XUpdateGCCache, +//GO(_Xutf8DefaultDrawImageString, +//GO(_Xutf8DefaultDrawString, +//GO(_Xutf8DefaultTextEscapement, +//GO(_Xutf8DefaultTextExtents, +//GO(_Xutf8DefaultTextPerCharExtents, GO(Xutf8DrawImageString, vFpLppiipi) -GO(Xutf8DrawString, vFppppiipi) +GO(Xutf8DrawString, vFpLppiipi) GO(Xutf8DrawText, vFpLpiipi) +//GO(_Xutf8GenericDrawImageString, +//GO(_Xutf8GenericDrawString, +//GO(_Xutf8GenericTextEscapement, +//GO(_Xutf8GenericTextExtents, +//GO(_Xutf8GenericTextPerCharExtents, GO(Xutf8LookupString, iFpppipp) GO(Xutf8ResetIC, pFp) GO(Xutf8SetWMProperties, vFpLpppippp) GO(Xutf8TextEscapement, iFppi) GO(Xutf8TextExtents, iFppipp) -GO(Xutf8TextListToTextProperty, iFppiup) //GO(_Xutf8TextListToTextProperty, +GO(Xutf8TextListToTextProperty, iFppiup) GO(Xutf8TextPerCharExtents, iFppippippp) -GO(Xutf8TextPropertyToTextList, iFpppp) //GO(_Xutf8TextPropertyToTextList, +GO(Xutf8TextPropertyToTextList, iFpppp) GOM(XVaCreateNestedList, pFEiV) GO(XVendorRelease, iFp) -GO(_XVIDtoVisual, pFpp) +GO(_XVIDtoVisual, pFpL) GO(XVisualIDFromVisual, LFp) GO(XWarpPointer, iFpLLiiuuii) +//GO(_XwcDefaultDrawImageString, +//GO(_XwcDefaultDrawString, +//GO(_XwcDefaultTextEscapement, +//GO(_XwcDefaultTextExtents, +//GO(_XwcDefaultTextPerCharExtents, GO(XwcDrawImageString, vFpLppiipi) -GO(XwcDrawString, vFppppiipi) +GO(XwcDrawString, vFpLppiipi) GO(XwcDrawText, vFpLpiipi) -GO(XwcFreeStringList, vFp) //GO(_XwcFreeStringList, +GO(XwcFreeStringList, vFp) +//GO(_XwcGenericDrawImageString, +//GO(_XwcGenericDrawString, +//GO(_XwcGenericTextEscapement, +//GO(_XwcGenericTextExtents, +//GO(_XwcGenericTextPerCharExtents, GO(XwcLookupString, iFpppipp) GO(XwcResetIC, pFp) //GO(_Xwcscmp, @@ -1072,25 +1219,25 @@ GO(XwcResetIC, pFp) //GO(_Xwcstombs, GO(XwcTextEscapement, iFppi) GO(XwcTextExtents, iFppipp) -GO(XwcTextListToTextProperty, iFppiup) //GO(_XwcTextListToTextProperty, +GO(XwcTextListToTextProperty, iFppiup) GO(XwcTextPerCharExtents, iFppippippp) -GO(XwcTextPropertyToTextList, iFpppp) //GO(_XwcTextPropertyToTextList, -GO(_Xwctomb, iFpu) +GO(XwcTextPropertyToTextList, iFpppp) +GO(_Xwctomb, iFpi) GO(XWhitePixel, LFpi) GO(XWhitePixelOfScreen, LFp) -//GO(XWidthMMOfScreen +GO(XWidthMMOfScreen, iFp) GO(XWidthOfScreen, iFp) GO(XWindowEvent, iFpLlp) GO(_XWireToEvent, iFppp) -GO(XWithdrawWindow, iFppi) +GO(XWithdrawWindow, iFpLi) GO(XWMGeometry, iFpippupppppp) GO(XWriteBitmapFile, iFppLuuii) GO(XXorRegion, iFppp) GO(_XData32, iFppu) -GO(_XRead32, iFppL) +GO(_XRead32, vFppl) GO(dummy_putpixel, iFpiiL) GO(dummy_addpixel, iFpl) diff --git a/src/wrapped/wrappedlibx11xcb.c b/src/wrapped/wrappedlibx11xcb.c index bac92703f2982c0c863619dd079963ce43f53b78..c9bab0b73a2b73a801e03b5229346a80b05100d3 100644 --- a/src/wrapped/wrappedlibx11xcb.c +++ b/src/wrapped/wrappedlibx11xcb.c @@ -18,6 +18,7 @@ #include "myalign.h" const char* libx11xcbName = "libX11-xcb.so.1"; +#define ALTNAME "libX11-xcb.so" #define LIBNAME libx11xcb #define ADDED_FUNCTIONS() \ diff --git a/src/wrapped/wrappedlibxau.c b/src/wrapped/wrappedlibxau.c index b03e75ebc597e54509a3fdb5d254ceec87ecacb0..3d3c72c39912a4397bdccbb3826fcc7df142e7a5 100644 --- a/src/wrapped/wrappedlibxau.c +++ b/src/wrapped/wrappedlibxau.c @@ -11,11 +11,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* libxauName = "libXau.so"; -#else - const char* libxauName = "libXau.so.6"; -#endif +const char* libxauName = "libXau.so.6"; +#define ALTNAME "libXau.so" #define LIBNAME libxau diff --git a/src/wrapped/wrappedlibxaw.c b/src/wrapped/wrappedlibxaw.c new file mode 100644 index 0000000000000000000000000000000000000000..d2d7ed4fa8fb5f69cf93a3c3e23ac59fb5ce546a --- /dev/null +++ b/src/wrapped/wrappedlibxaw.c @@ -0,0 +1,21 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "wrapper.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" + +const char* libxawName = "libXaw.so.7"; +#define ALTNAME "libXaw.so" + +#define LIBNAME libxaw + +#define NEEDED_LIBS "libX11.so.6", "libXext.so.6", "libXmu.so.6", "libXt.so.6" + +#include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibxaw_private.h b/src/wrapped/wrappedlibxaw_private.h new file mode 100644 index 0000000000000000000000000000000000000000..23de1591ddbc9e3c2f9b4af9aa9a5ee5414fcbba --- /dev/null +++ b/src/wrapped/wrappedlibxaw_private.h @@ -0,0 +1,189 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +//GO(XawAddPixmapLoader, +GO(XawAsciiSave, iFp) +GO(XawAsciiSaveAsFile, iFpp) +GO(XawAsciiSourceChanged, iFp) +GO(XawAsciiSourceFreeString, vFp) +//GO(_Xaw_atowc, +//GO(XawBooleanExpression, +//GO(XawCallProcAction, +//GO(XawCreateDisplayList, +//GO(XawCreateDisplayListClass, +//GO(XawDeclareAction, +//GO(XawDeclareDisplayListProc, +//DATA(_XawDefaultTextTranslations, +//GO(XawDestroyDisplayList, +//GOM(XawDialogAddButton, vFEpppp) +GO(XawDialogGetValueString, pFp) +//GO(XawDisplayListInitialize, +//GO(XawDisplayListString, +//GO(XawFindArgVal, +//DATAB(XawFmt8Bit, 8) +//DATAB(XawFmtWide, 8) +GO(XawFormDoLayout, vFpc) +//GO(XawFreeParamsStruct, +//GO(XawGetActionResList, +//GO(XawGetActionVarList, +//GO(XawGetDisplayListClass, +//GO(_XawGetPageSize, +//GO(XawGetValuesAction, +GO(_XawImCallVendorShellExtResize, vFp) +GO(_XawImDestroy, vFpp) +GO(_XawImGetImAreaHeight, iFp) +GO(_XawImGetShellHeight, WFp) +GO(_XawImInitialize, vFpp) +GO(_XawImRealize, vFp) +GO(_XawImReconnect, vFp) +GO(_XawImRegister, vFp) +GO(_XawImResizeVendorShell, vFp) +GO(_XawImSetFocusValues, vFppu) +GO(_XawImSetValues, vFppu) +GO(_XawImUnregister, vFp) +GO(_XawImUnsetFocus, vFp) +GO(_XawImWcLookupString, iFpppip) +GO(XawInitializeDefaultConverters, vFv) +GO(XawInitializeWidgetSet, vFv) +//GO(_Xaw_iswalnum, +GO(XawListChange, vFppiic) +GO(XawListHighlight, vFpi) +GO(XawListShowCurrent, pFp) +GO(XawListUnhighlight, vFp) +//GO(XawLoadPixmap, +GO(_XawLookupString, iFpppip) +GO(_XawMultiSave, iFp) +GO(_XawMultiSaveAsFile, iFpp) +GO(_XawMultiSinkPosToXY, vFplpp) +GO(_XawMultiSourceFreeString, vFp) +//GOM(XawOpenApplication, pFEpppppppp) +GO(XawPanedAllowResize, vFpc) +GO(XawPanedGetMinMax, vFppp) +GO(XawPanedGetNumSub, iFp) +GO(XawPanedSetMinMax, vFpii) +GO(XawPanedSetRefigureMode, vFpc) +//GO(XawParseBoolean, +//GO(XawParseParamsString, +//GO(XawPixmapFromXPixmap, +//GO(XawPixmapsInitialize, +//GO(XawPrintActionErrorMsg, +//GO(XawReshapeWidget, +//GO(XawRunDisplayList, +GO(XawScrollbarSetThumb, vFpff) +//GO(XawSetValuesAction, +GO(XawSimpleMenuAddGlobalActions, vFp) +GO(XawSimpleMenuClearActiveEntry, vFp) +GO(XawSimpleMenuGetActiveEntry, pFp) +//GO(_XawSourceAddText, +//GO(_XawSourceRemoveText, +//GO(_XawSourceSetUndoErase, +//GO(_XawSourceSetUndoMerge, +//DATA(_XawTextActionsTable, +//DATA(_XawTextActionsTableCount, 4) +//GO(_XawTextAlterSelection, +//GOM(_XawTextBuildLineTable, vFEplc) +//GO(_XawTextCheckResize, +//GO(_XawTextClearAndCenterDisplay, +GO(XawTextDisableRedisplay, vFp) +GO(XawTextDisplay, vFp) +GO(XawTextDisplayCaret, vFpc) +//GO(_XawTextDoReplaceAction, +//GO(_XawTextDoSearchAction, +GO(XawTextEnableRedisplay, vFp) +//GO(_XawTextExecuteUpdate, +//GOM(_XawTextFormat, iFEp) +GO(XawTextGetInsertionPoint, lFp) +GO(XawTextGetSelectionPos, vFppp) +GO(XawTextGetSink, pFp) +GO(XawTextGetSource, pFp) +//GOM(_XawTextGetSTRING, pFEpll) +//GO(_XawTextGetText, +//GO(_XawTextInsertFile, +//GO(_XawTextInsertFileAction, +GO(XawTextInvalidate, vFpll) +//DATAB(xaw_text_kill_ring, 8) +GO(XawTextLastPosition, lFp) +GO(_XawTextMBToWC, pFppp) +//GOM(_XawTextNeedsUpdating, vFEpll) +//GO(_XawTextPopdownSearchAction, +GO(_XawTextPosToXY, vFplpp) +//GO(_XawTextPrepareToUpdate, +//GO(_XawTextReplace, +GO(XawTextReplace, iFpllp) +//GOM(_XawTextSaltAwaySelection, vFEppi) +//GO(XawTextScroll, +//GO(_XawTextSearch, +GO(XawTextSearch, lFpup) +//GO(_XawTextSelectionList, +//GO(_XawTextSetField, +GO(XawTextSetInsertionPoint, vFpl) +//GO(_XawTextSetLineAndColumnNumber, +//GO(_XawTextSetScrollBars, +//GO(_XawTextSetSelection, +GO(XawTextSetSelection, vFpll) +GO(XawTextSetSelectionArray, vFpp) +//GO(_XawTextSetSource, +GO(XawTextSetSource, vFppl) +//GO(_XawTextShowPosition, +//GOM(XawTextSinkAddProperty, pFEpp) +GO(XawTextSinkBeginPaint, iFp) +//GO(_XawTextSinkClearToBackground, +GO(XawTextSinkClearToBackground, vFpwwWW) +//GOM(XawTextSinkCombineProperty, pFEpppi) +//GOM(XawTextSinkConvertPropertyList, pFEpppLi) +//GOM(XawTextSinkCopyProperty, pFEpi) +//GO(_XawTextSinkDisplayText, +GO(XawTextSinkDisplayText, vFpwwllc) +GO(XawTextSinkDoPaint, vFp) +GO(XawTextSinkEndPaint, iFp) +GO(XawTextSinkFindDistance, vFplilppp) +GO(XawTextSinkFindPosition, vFpliicppp) +GO(XawTextSinkGetCursorBounds, vFpp) +//GOM(XawTextSinkGetProperty, pFEpi) +GO(XawTextSinkInsertCursor, vFpwwu) +GO(XawTextSinkMaxHeight, iFpi) +GO(XawTextSinkMaxLines, iFpW) +GO(XawTextSinkPreparePaint, vFpiilli) +GO(XawTextSinkResolve, vFpliip) +GO(XawTextSinkSetTabs, vFpip) +GO(XawTextSourceAddAnchor, pFpl) +GO(XawTextSourceAddEntity, pFpiiplui) +GO(XawTextSourceAnchorAndEntity, iFplpp) +//GO(_XawTextSourceChanged, +GO(XawTextSourceClearEntities, vFpll) +GO(XawTextSourceConvertSelection, cFppppppp) +//GO(_XawTextSourceFindAnchor, +GO(XawTextSourceFindAnchor, pFpl) +//GO(_XawTextSourceNewLineAtEOF, +GO(XawTextSourceNextAnchor, pFpp) +GO(XawTextSourcePrevAnchor, pFpp) +GO(XawTextSourceRead, lFplpi) +GO(XawTextSourceRemoveAnchor, pFpp) +GO(XawTextSourceReplace, iFpllp) +GO(XawTextSourceScan, lFpluuic) +GO(XawTextSourceSearch, lFplup) +GO(XawTextSourceSetSelection, vFpllL) +//GO(_XawTextSrcToggleUndo, +//GO(_XawTextSrcUndo, +GO(XawTextTopPosition, lFp) +GO(XawTextUnsetSelection, vFp) +//GO(_XawTextVScroll, +GO(_XawTextWCToMB, pFppp) +//GO(_XawTextZapSelection, +GO(XawTipDisable, vFp) +GO(XawTipEnable, vFp) +GO(XawToggleChangeRadioGroup, vFpp) +GO(XawToggleGetCurrent, pFp) +GO(XawToggleSetCurrent, vFpp) +GO(XawToggleUnsetCurrent, vFp) +GO(XawTreeForceLayout, vFp) +//GO(XawTypeToStringWarning, +//DATA(xawvendorShellExtClassRec, +//GO(XawVendorShellExtResize, +//DATA(xawvendorShellExtWidgetClass, +//GO(XawVendorStructureNotifyHandler, +GO(XawViewportSetCoordinates, vFpww) +GO(XawViewportSetLocation, vFpff) +//DATA(XawWidgetArray, +//DATA(XawWidgetCount, 4) diff --git a/src/wrapped/wrappedlibxcb.c b/src/wrapped/wrappedlibxcb.c index 46b78d7e51b581f1d9a58f1c21131115067513e0..96a47c5af228af6c7957a98415527852a93ead5f 100644 --- a/src/wrapped/wrappedlibxcb.c +++ b/src/wrapped/wrappedlibxcb.c @@ -17,11 +17,8 @@ #include "emu/x64emu_private.h" #include "myalign.h" -#ifdef ANDROID - const char* libxcbName = "libxcb.so"; -#else - const char* libxcbName = "libxcb.so.1"; -#endif +const char* libxcbName = "libxcb.so.1"; +#define ALTNAME "libxcb.so" #define LIBNAME libxcb diff --git a/src/wrapped/wrappedlibxcb_private.h b/src/wrapped/wrappedlibxcb_private.h index 1f90a8718f8f7d81c6e9271205b0e3159b446dbe..f3cb01e569e576f816e190363c1dfab319828794 100644 --- a/src/wrapped/wrappedlibxcb_private.h +++ b/src/wrapped/wrappedlibxcb_private.h @@ -82,7 +82,7 @@ GO(xcb_change_property_checked, uFbCuuuCup) //GO(xcb_change_property_data_end, //GO(xcb_change_property_data_length, //GO(xcb_change_property_sizeof, -//GO(xcb_change_save_set, +GO(xcb_change_save_set, uFbCu) //GO(xcb_change_save_set_checked, GO(xcb_change_window_attributes, uFbuup) //GO(xcb_change_window_attributes_aux, @@ -417,7 +417,7 @@ GO(xcb_poly_arc, pFbuuup) //GO(xcb_poly_fill_arc_checked, //GO(xcb_poly_fill_arc_sizeof, GO(xcb_poly_fill_rectangle, pFbuuup) -//GO(xcb_poly_fill_rectangle_checked, +GO(xcb_poly_fill_rectangle_checked, pFbuuup) //GO(xcb_poly_fill_rectangle_rectangles, //GO(xcb_poly_fill_rectangle_rectangles_iterator, //GO(xcb_poly_fill_rectangle_rectangles_length, diff --git a/src/wrapped/wrappedlibxcbdri2.c b/src/wrapped/wrappedlibxcbdri2.c index 4745c51c09d018df2ebaa2a48142b2d6b4c1dab2..335b8b3e0e5163d818baec719ae668a84b499d2b 100644 --- a/src/wrapped/wrappedlibxcbdri2.c +++ b/src/wrapped/wrappedlibxcbdri2.c @@ -18,6 +18,8 @@ #include "emu/x64emu_private.h" const char* libxcbdri2Name = "libxcb-dri2.so.0"; +#define ALTNAME "libxcb-dri2.so" + #define LIBNAME libxcbdri2 #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibxcbdri3.c b/src/wrapped/wrappedlibxcbdri3.c index b351dbefc11ccc5a7c163b1f68bebf63b2cc78c4..d6ae5d385afeb0fc45a5577fc521427e0b9078a0 100644 --- a/src/wrapped/wrappedlibxcbdri3.c +++ b/src/wrapped/wrappedlibxcbdri3.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbdri3Name = "libxcb-dri3.so"; -#else - const char* libxcbdri3Name = "libxcb-dri3.so.0"; -#endif +const char* libxcbdri3Name = "libxcb-dri3.so.0"; +#define ALTNAME "libxcb-dri3.so" #define LIBNAME libxcbdri3 diff --git a/src/wrapped/wrappedlibxcbglx.c b/src/wrapped/wrappedlibxcbglx.c index 806c58df4326e00eb97474e48316547c2383f1e1..d67714feaaea0dddbce289a3f15da5e055c1bcfd 100644 --- a/src/wrapped/wrappedlibxcbglx.c +++ b/src/wrapped/wrappedlibxcbglx.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbglxName = "libxcb-glx.so"; -#else - const char* libxcbglxName = "libxcb-glx.so.0"; -#endif +const char* libxcbglxName = "libxcb-glx.so.0"; +#define ALTNAME "libxcb-glx.so" #define LIBNAME libxcbglx diff --git a/src/wrapped/wrappedlibxcbicccm.c b/src/wrapped/wrappedlibxcbicccm.c index 29c9b55e91e8ccbb14edb46972307dfd7aa7e858..7b380dbab0816f0dd9fb908dafb7eef068ae84f6 100644 --- a/src/wrapped/wrappedlibxcbicccm.c +++ b/src/wrapped/wrappedlibxcbicccm.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbicccmName = "libxcb-icccm.so"; -#else - const char* libxcbicccmName = "libxcb-icccm.so.4"; -#endif +const char* libxcbicccmName = "libxcb-icccm.so.4"; +#define ALTNAME "libxcb-icccm.so" #define LIBNAME libxcbicccm diff --git a/src/wrapped/wrappedlibxcbimage.c b/src/wrapped/wrappedlibxcbimage.c index 6ef51ed717c802561ff2ee9d7ce756f41f3f9d08..30ae19315733b75f689e874df3771de52e8c08d9 100644 --- a/src/wrapped/wrappedlibxcbimage.c +++ b/src/wrapped/wrappedlibxcbimage.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbimageName = "libxcb-image.so"; -#else - const char* libxcbimageName = "libxcb-image.so.0"; -#endif +const char* libxcbimageName = "libxcb-image.so.0"; +#define ALTNAME "libxcb-image.so" #define LIBNAME libxcbimage diff --git a/src/wrapped/wrappedlibxcbkeysyms.c b/src/wrapped/wrappedlibxcbkeysyms.c index 72c0022c97526b6bc71753e2b623c5d337067c9e..08894bb457ea50cba2b2f3c2f54b720ef9098f68 100644 --- a/src/wrapped/wrappedlibxcbkeysyms.c +++ b/src/wrapped/wrappedlibxcbkeysyms.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbkeysymsName = "libxcb-keysyms.so"; -#else - const char* libxcbkeysymsName = "libxcb-keysyms.so.1"; -#endif +const char* libxcbkeysymsName = "libxcb-keysyms.so.1"; +#define altname "libxcb-keysyms.so" #define LIBNAME libxcbkeysyms diff --git a/src/wrapped/wrappedlibxcbpresent.c b/src/wrapped/wrappedlibxcbpresent.c index 4f63285ab6b84c557c408e4a665f63a29371974c..d142d5070e2f539dc19257fc2069d0d58d2013b6 100644 --- a/src/wrapped/wrappedlibxcbpresent.c +++ b/src/wrapped/wrappedlibxcbpresent.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbpresentName = "libxcb-present.so"; -#else - const char* libxcbpresentName = "libxcb-present.so.0"; -#endif +const char* libxcbpresentName = "libxcb-present.so.0"; +#define ALTNAME "libxcb-present.so" #define LIBNAME libxcbpresent diff --git a/src/wrapped/wrappedlibxcbrandr.c b/src/wrapped/wrappedlibxcbrandr.c index d4c8cbb8d55deccd927109698bc369073178a741..910867f43a7dd5ec065d59a87e7a219bd8a7586c 100644 --- a/src/wrapped/wrappedlibxcbrandr.c +++ b/src/wrapped/wrappedlibxcbrandr.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbrandrName = "libxcb-randr.so"; -#else - const char* libxcbrandrName = "libxcb-randr.so.0"; -#endif +const char* libxcbrandrName = "libxcb-randr.so.0"; +#define ALTNAME "libxcb-randr.so" #define LIBNAME libxcbrandr diff --git a/src/wrapped/wrappedlibxcbrender.c b/src/wrapped/wrappedlibxcbrender.c index 5deeed1a74dba87e8140d390b529d0a991ca5bf1..225d33413ac3fff7e80fa4babdda12b0e055254a 100644 --- a/src/wrapped/wrappedlibxcbrender.c +++ b/src/wrapped/wrappedlibxcbrender.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbrenderName = "libxcb-render.so"; -#else - const char* libxcbrenderName = "libxcb-render.so.0"; -#endif +const char* libxcbrenderName = "libxcb-render.so.0"; +#define ALTNAME "libxcb-render.so" #define LIBNAME libxcbrender diff --git a/src/wrapped/wrappedlibxcbrenderutil.c b/src/wrapped/wrappedlibxcbrenderutil.c index 6a1f7d89c9df93c33a424838b9f5c1331a274d13..79449a3c2d65d45293cb5eb4b2a4e5c156677d95 100644 --- a/src/wrapped/wrappedlibxcbrenderutil.c +++ b/src/wrapped/wrappedlibxcbrenderutil.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbrenderutilName = "libxcb-render-util.so"; -#else - const char* libxcbrenderutilName = "libxcb-render-util.so.0"; -#endif +const char* libxcbrenderutilName = "libxcb-render-util.so.0"; +#define ALTNAME "libxcb-render-util.so" #define LIBNAME libxcbrenderutil diff --git a/src/wrapped/wrappedlibxcbshape.c b/src/wrapped/wrappedlibxcbshape.c index f1eb4e878de148b135ce1d08d3fa2abd719fe74b..687fc83580f7317469c89206db371a6fcb5a0bd2 100644 --- a/src/wrapped/wrappedlibxcbshape.c +++ b/src/wrapped/wrappedlibxcbshape.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbshapeName = "libxcb-shape.so"; -#else - const char* libxcbshapeName = "libxcb-shape.so.0"; -#endif +const char* libxcbshapeName = "libxcb-shape.so.0"; +#define ALTNAME "libxcb-shape.so" #define LIBNAME libxcbshape diff --git a/src/wrapped/wrappedlibxcbshm.c b/src/wrapped/wrappedlibxcbshm.c index 886d2aa16be4e4d70a99f753a5b0e3672f31e298..1895c7bc8d2fa0ef035d3fa394b0bc51cbc8f9a3 100644 --- a/src/wrapped/wrappedlibxcbshm.c +++ b/src/wrapped/wrappedlibxcbshm.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbshmName = "libxcb-shm.so"; -#else - const char* libxcbshmName = "libxcb-shm.so.0"; -#endif +const char* libxcbshmName = "libxcb-shm.so.0"; +#define ALTNAME "libxcb-shm.so" #define LIBNAME libxcbshm diff --git a/src/wrapped/wrappedlibxcbsync.c b/src/wrapped/wrappedlibxcbsync.c index 81e4687066261bc6f1d28cf8ca8f19413e589151..762e861f6f64917b1e892e534ab31fa5c3d3874b 100644 --- a/src/wrapped/wrappedlibxcbsync.c +++ b/src/wrapped/wrappedlibxcbsync.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbsyncName = "libxcb-sync.so"; -#else - const char* libxcbsyncName = "libxcb-sync.so.1"; -#endif +const char* libxcbsyncName = "libxcb-sync.so.1"; +#define ALTNAME "libxcb-sync.so" #define LIBNAME libxcbsync diff --git a/src/wrapped/wrappedlibxcbutil.c b/src/wrapped/wrappedlibxcbutil.c index 943d8b95cf5554a3b986faf07fb717b16af7f434..7535a387e7dd6c75cc2ee5ff19dc047b619252d2 100644 --- a/src/wrapped/wrappedlibxcbutil.c +++ b/src/wrapped/wrappedlibxcbutil.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbutilName = "libxcb-util.so"; -#else - const char* libxcbutilName = "libxcb-util.so.1"; -#endif +const char* libxcbutilName = "libxcb-util.so.1"; +#define ALTNAME "libxcb-util.so" #define LIBNAME libxcbutil diff --git a/src/wrapped/wrappedlibxcbxfixes.c b/src/wrapped/wrappedlibxcbxfixes.c index ac95078318687ca8e3b39ee358044ad8b61da294..ecf58b8be0f65f28eaca6f17aefcd92f69c9276e 100644 --- a/src/wrapped/wrappedlibxcbxfixes.c +++ b/src/wrapped/wrappedlibxcbxfixes.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbxfixesName = "libxcb-xfixes.so"; -#else - const char* libxcbxfixesName = "libxcb-xfixes.so.0"; -#endif +const char* libxcbxfixesName = "libxcb-xfixes.so.0"; +#define ALTNAME "libxcb-xfixes.so" #define LIBNAME libxcbxfixes diff --git a/src/wrapped/wrappedlibxcbxinerama.c b/src/wrapped/wrappedlibxcbxinerama.c index 856d7e256cc2c142c5be5b11d32ca85a653f5868..064588e32c73aaf6dfd0d11d5473a76a975c6c27 100644 --- a/src/wrapped/wrappedlibxcbxinerama.c +++ b/src/wrapped/wrappedlibxcbxinerama.c @@ -17,11 +17,9 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbxineramaName = "libxcb-xinerama.so"; -#else - const char* libxcbxineramaName = "libxcb-xinerama.so.0"; -#endif +const char* libxcbxineramaName = "libxcb-xinerama.so.0"; +#define ALTNAME "libxcb-xinerama.so" + #define LIBNAME libxcbxinerama #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibxcbxinput_private.h b/src/wrapped/wrappedlibxcbxinput_private.h index 573255069f02833fc2189f59c36c8b1d95e20bfa..993fc23538d6d26e47a83ac6a4d8b19f3f33e070 100644 --- a/src/wrapped/wrappedlibxcbxinput_private.h +++ b/src/wrapped/wrappedlibxcbxinput_private.h @@ -335,7 +335,7 @@ GO(xcb_input_xi_query_version, uFbWW) GO(xcb_input_xi_query_version_reply, pFbup) //GO(xcb_input_button_class_state, GO(xcb_input_button_class_labels_length, iFp) -GO(xcb_input_button_class_labels_end, pFp) +GO(xcb_input_button_class_labels_end, HFp) GO(xcb_input_button_class_labels, pFp) //GO(xcb_input_button_class_next, //GO(xcb_input_button_class_end, @@ -359,14 +359,14 @@ GO(xcb_input_button_class_labels, pFp) //GO(xcb_input_device_class_data_serialize, //GO(xcb_input_device_class_data_unpack, GO(xcb_input_device_class_next, vFp) -GO(xcb_input_device_class_end, HFpp) +GO(xcb_input_device_class_end, HFH) GO(xcb_input_xi_device_info_classes_length, iFp) GO(xcb_input_xi_device_info_classes_iterator, HFp) GO(xcb_input_xi_device_info_name, pFp) GO(xcb_input_xi_device_info_name_length, iFp) GO(xcb_input_xi_device_info_name_end, pFp) GO(xcb_input_xi_device_info_next, vFp) -GO(xcb_input_xi_device_info_end, HFpp) +GO(xcb_input_xi_device_info_end, HFH) GO(xcb_input_xi_query_device, uFbu) GO(xcb_input_xi_query_device_unchecked, uFbu) GO(xcb_input_xi_query_device_infos_length, iFp) diff --git a/src/wrapped/wrappedlibxcbxkb.c b/src/wrapped/wrappedlibxcbxkb.c index cc7672b0dd062bdbaf6f763db7a780d2a80d9049..4076642477690bd447b57a1b55acb006a52101f8 100644 --- a/src/wrapped/wrappedlibxcbxkb.c +++ b/src/wrapped/wrappedlibxcbxkb.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbxkbName = "libxcb-xkb.so"; -#else - const char* libxcbxkbName = "libxcb-xkb.so.1"; -#endif +const char* libxcbxkbName = "libxcb-xkb.so.1"; +#define ALTNAME "libxcb-xkb.so" #define LIBNAME libxcbxkb diff --git a/src/wrapped/wrappedlibxcbxtest.c b/src/wrapped/wrappedlibxcbxtest.c index 211efb4bdf3f28f50c6c41c7fb530ab08072b8c6..e9c98f7e5cb2b8f1f36d32db679a4a6a08a5424c 100644 --- a/src/wrapped/wrappedlibxcbxtest.c +++ b/src/wrapped/wrappedlibxcbxtest.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxcbxtestName = "libxcb-xtest.so"; -#else - const char* libxcbxtestName = "libxcb-xtest.so.0"; -#endif +const char* libxcbxtestName = "libxcb-xtest.so.0"; +#define ALTNAME "libxcb-xtest.so" #define LIBNAME libxcbxtest diff --git a/src/wrapped/wrappedlibxcomposite.c b/src/wrapped/wrappedlibxcomposite.c index 0521f933047540f7647170c59c50a48eb6f60b17..1fa7f55a12cfa836bae39b1582bf971155b5636c 100644 --- a/src/wrapped/wrappedlibxcomposite.c +++ b/src/wrapped/wrappedlibxcomposite.c @@ -12,11 +12,8 @@ #include "x64emu.h" #include "debug.h" -#ifdef ANDROID - const char* libxcompositeName = "libXcomposite.so"; -#else - const char* libxcompositeName = "libXcomposite.so.1"; -#endif +const char* libxcompositeName = "libXcomposite.so.1"; +#define ALTNAME "libXcomposite.so" #define LIBNAME libxcomposite diff --git a/src/wrapped/wrappedlibxcomposite_private.h b/src/wrapped/wrappedlibxcomposite_private.h index 9c52d04f6f3623c99607b997616bd338b750af73..c60a4c38cef59e0adbb9c5bc48e34003ec87b0e7 100644 --- a/src/wrapped/wrappedlibxcomposite_private.h +++ b/src/wrapped/wrappedlibxcomposite_private.h @@ -1,5 +1,5 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif GO(XCompositeCreateRegionFromBorderClip, LFpL) diff --git a/src/wrapped/wrappedlibxcursor.c b/src/wrapped/wrappedlibxcursor.c index b70911a8c80a491a86124b9bf71c1ec8a096cc15..c9d7992114fc9c8eadb8cfe865b3061ffda812c0 100644 --- a/src/wrapped/wrappedlibxcursor.c +++ b/src/wrapped/wrappedlibxcursor.c @@ -11,19 +11,12 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* libxcursorName = "libXcursor.so"; -#else - const char* libxcursorName = "libXcursor.so.1"; -#endif +const char* libxcursorName = "libXcursor.so.1"; +#define ALTNAME "libXcursor.so" #define LIBNAME libxcursor -#ifdef ANDROID -#define NEEDED_LIBS "libX11.so", "libXfixes.so", "libXrender.so" -#else #define NEEDED_LIBS "libX11.so.6", "libXfixes.so.3", "libXrender.so.1" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibxcursor_private.h b/src/wrapped/wrappedlibxcursor_private.h index 493b933c6c7a0b62d047f35c1efd2c59caef6bc6..417b3f140aa50967687e4dcccc4439ebc9dc3ad2 100644 --- a/src/wrapped/wrappedlibxcursor_private.h +++ b/src/wrapped/wrappedlibxcursor_private.h @@ -1,10 +1,10 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error Meh.... +#error Meh... #endif GO(XcursorAnimateCreate, pFp) GO(XcursorAnimateDestroy, vFp) -GO(XcursorAnimateNext, pFp) +GO(XcursorAnimateNext, LFp) GO(XcursorCommentCreate, pFui) GO(XcursorCommentDestroy, vFp) GO(XcursorCommentsCreate, pFi) @@ -13,20 +13,20 @@ GO(XcursorCommentsDestroy, vFp) //GO(_XcursorCreateGlyphCursor, GO(XcursorCursorsCreate, pFpi) GO(XcursorCursorsDestroy, vFp) -GO(XcursorFileLoad, pFppp) -GO(XcursorFileLoadAllImages, pFp) -GO(XcursorFileLoadImage, pFpi) -GO(XcursorFileLoadImages, pFpi) +GO(XcursorFileLoad, iFSpp) +GO(XcursorFileLoadAllImages, pFS) +GO(XcursorFileLoadImage, pFSi) +GO(XcursorFileLoadImages, pFSi) GO(XcursorFilenameLoad, iFppp) GO(XcursorFilenameLoadAllImages, pFp) -GO(XcursorFilenameLoadCursor, pFpp) +GO(XcursorFilenameLoadCursor, LFpp) GO(XcursorFilenameLoadCursors, pFpp) GO(XcursorFilenameLoadImage, pFpi) GO(XcursorFilenameLoadImages, pFpi) GO(XcursorFilenameSave, iFppp) GO(XcursorFilenameSaveImages, iFpp) -GO(XcursorFileSave, iFppp) -GO(XcursorFileSaveImages, iFpp) +GO(XcursorFileSave, iFSpp) +GO(XcursorFileSaveImages, iFSp) GO(XcursorGetDefaultSize, iFp) //GO(_XcursorGetDisplayInfo, GO(XcursorGetTheme, pFp) @@ -34,31 +34,31 @@ GO(XcursorGetThemeCore, iFp) GO(XcursorImageCreate, pFii) GO(XcursorImageDestroy, vFp) //GOM(XcursorImageHash, vFEpp) // needs unbridge XImage (first p) -GO(XcursorImageLoadCursor, pFpp) +GO(XcursorImageLoadCursor, LFpp) GO(XcursorImagesCreate, pFi) GO(XcursorImagesDestroy, vFp) -GO(XcursorImagesLoadCursor, pFpp) +GO(XcursorImagesLoadCursor, LFpp) GO(XcursorImagesLoadCursors, pFpp) GO(XcursorImagesSetName, vFpp) -GO(XcursorLibraryLoadCursor, pFpp) +GO(XcursorLibraryLoadCursor, LFpp) GO(XcursorLibraryLoadCursors, pFpp) GO(XcursorLibraryLoadImage, pFppi) GO(XcursorLibraryLoadImages, pFppi) GO(XcursorLibraryPath, pFv) GO(XcursorLibraryShape, iFp) -GO(XcursorNoticeCreateBitmap, vFppuu) -//GOM(XcursorNoticePutBitmap, vFEppp) //needs unbridge XImage (last p) +GO(XcursorNoticeCreateBitmap, vFpLuu) +//GOM(XcursorNoticePutBitmap, vFEpLp) //needs unbridge XImage (last p) GO(XcursorSetDefaultSize, iFpi) GO(XcursorSetTheme, iFpp) GO(XcursorSetThemeCore, iFpi) -GO(XcursorShapeLoadCursor, pFpu) +GO(XcursorShapeLoadCursor, LFpu) GO(XcursorShapeLoadCursors, pFpu) GO(XcursorShapeLoadImage, pFupi) GO(XcursorShapeLoadImages, pFupi) GO(XcursorSupportsAnim, iFp) GO(XcursorSupportsARGB, iFp) -GO(XcursorTryShapeBitmapCursor, pFpppppuu) -GO(XcursorTryShapeCursor, pFpppuupp) +GO(XcursorTryShapeBitmapCursor, LFpLLppuu) +GO(XcursorTryShapeCursor, LFpLLuupp) GO(XcursorXcFileLoad, iFppp) GO(XcursorXcFileLoadAllImages, pFp) GO(XcursorXcFileLoadImage, pFpi) diff --git a/src/wrapped/wrappedlibxdamage.c b/src/wrapped/wrappedlibxdamage.c index 8637f2a6b4df06e893ecd3f408c424443b9002b7..71be3d3564ad2c798905acf1e07dda37afc1e1b3 100644 --- a/src/wrapped/wrappedlibxdamage.c +++ b/src/wrapped/wrappedlibxdamage.c @@ -12,11 +12,8 @@ #include "x64emu.h" #include "debug.h" -#ifdef ANDROID - const char* libxdamageName = "libXdamage.so"; -#else - const char* libxdamageName = "libXdamage.so.1"; -#endif +const char* libxdamageName = "libXdamage.so.1"; +#define ALTNAME "libXdamage.so" #define LIBNAME libxdamage diff --git a/src/wrapped/wrappedlibxdmcp.c b/src/wrapped/wrappedlibxdmcp.c index 39a47d0a9da26eaf2294542efbddbb83c6f901fd..c7822f0dc04a5d850773a72ed5afedc69e8283e2 100644 --- a/src/wrapped/wrappedlibxdmcp.c +++ b/src/wrapped/wrappedlibxdmcp.c @@ -11,11 +11,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* libxdmcpName = "libXdmcp.so"; -#else - const char* libxdmcpName = "libXdmcp.so.6"; -#endif +const char* libxdmcpName = "libXdmcp.so.6"; +#define ALTNAME "libXdmcp.so" #define LIBNAME libxdmcp diff --git a/src/wrapped/wrappedlibxext.c b/src/wrapped/wrappedlibxext.c index 0b7cfd926704f29f27d3348e85325e90b0b226a1..9d48a9a9e1801ed275b1529e8e6deaed105bb7bc 100644 --- a/src/wrapped/wrappedlibxext.c +++ b/src/wrapped/wrappedlibxext.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxextName = "libXext.so"; -#else - const char* libxextName = "libXext.so.6"; -#endif +const char* libxextName = "libXext.so.6"; +#define ALTNAME "libXext.so" #define LIBNAME libxext @@ -344,7 +341,7 @@ EXPORT void* my_XShmCreateImage(x64emu_t* emu, void* disp, void* vis, uint32_t d return img; } -EXPORT int32_t my_XShmPutImage(x64emu_t* emu, void* disp, void* drawable, void* gc, void* image +EXPORT int32_t my_XShmPutImage(x64emu_t* emu, void* disp, size_t drawable, void* gc, void* image , int32_t src_x, int32_t src_y, int32_t dst_x, int32_t dst_y , uint32_t w, uint32_t h, int32_t sendevt) { @@ -355,7 +352,7 @@ EXPORT int32_t my_XShmPutImage(x64emu_t* emu, void* disp, void* drawable, void* return r; } -EXPORT int32_t my_XShmGetImage(x64emu_t* emu, void* disp, void* drawable, void* image, int32_t x, int32_t y, uint32_t plane) +EXPORT int32_t my_XShmGetImage(x64emu_t* emu, void* disp, size_t drawable, void* image, int32_t x, int32_t y, size_t plane) { UnbridgeImageFunc(emu, (XImage*)image); int32_t r = my->XShmGetImage(disp, drawable, image, x, y, plane); diff --git a/src/wrapped/wrappedlibxext_private.h b/src/wrapped/wrappedlibxext_private.h index 7d9810685ba2928321fd5208adce0d18d10541be..d6dfa2d3e406549158bc890840bb3d4f9cdfcad9 100644 --- a/src/wrapped/wrappedlibxext_private.h +++ b/src/wrapped/wrappedlibxext_private.h @@ -1,119 +1,119 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error Meh.... +#error Meh... #endif GO(DPMSCapable, iFp) GO(DPMSDisable, iFp) GO(DPMSEnable, iFp) -GO(DPMSForceLevel, iFpu) +GO(DPMSForceLevel, iFpW) GO(DPMSGetTimeouts, iFpppp) GO(DPMSGetVersion, iFppp) GO(DPMSInfo, iFppp) GO(DPMSQueryExtension, iFppp) -GO(DPMSSetTimeouts, iFpuuu) -//GO(XagCreateAssociation, -//GO(XagCreateEmbeddedApplicationGroup, -//GO(XagCreateNonembeddedApplicationGroup, -//GO(XagDestroyApplicationGroup, -//GO(XagDestroyAssociation, -//GO(XagGetApplicationGroupAttributes, -//GO(XagQueryApplicationGroup, -//GO(XagQueryVersion, -//GO(XcupGetReservedColormapEntries, -//GO(XcupQueryVersion, -//GO(XcupStoreColors, -GO(XdbeAllocateBackBufferName, pFppu) +GO(DPMSSetTimeouts, iFpWWW) +GO(XagCreateAssociation, iFppp) +GO(XagCreateEmbeddedApplicationGroup, iFpLLLLp) +GO(XagCreateNonembeddedApplicationGroup, iFpp) +GO(XagDestroyApplicationGroup, iFpL) +GO(XagDestroyAssociation, iFpL) +//GOM(XagGetApplicationGroupAttributes, iFEpLV) +GO(XagQueryApplicationGroup, iFpLp) +GO(XagQueryVersion, iFppp) +GO(XcupGetReservedColormapEntries, iFpipp) +GO(XcupQueryVersion, iFppp) +GO(XcupStoreColors, iFpLpi) +GO(XdbeAllocateBackBufferName, LFpLC) GO(XdbeBeginIdiom, iFp) -GO(XdbeDeallocateBackBufferName, iFpp) +GO(XdbeDeallocateBackBufferName, iFpL) GO(XdbeEndIdiom, iFp) GO(XdbeFreeVisualInfo, vFp) -GO(XdbeGetBackBufferAttributes, pFpp) +GO(XdbeGetBackBufferAttributes, pFpL) GO(XdbeGetVisualInfo, pFppp) GO(XdbeQueryExtension, iFppp) GO(XdbeSwapBuffers, iFppi) -//GO(XeviGetVisualInfo, -//GO(XeviQueryExtension, -//GO(XeviQueryVersion, +GO(XeviGetVisualInfo, iFppipp) +GO(XeviQueryExtension, iFp) +GO(XeviQueryVersion, iFppp) GOM(XextAddDisplay, pFEppppip) GO(XextCreateExtension, pFv) GO(XextDestroyExtension, vFp) -DATAB(_XExtensionErrorFunction, 4) +DATAB(_XExtensionErrorFunction, sizeof(void*)) GO(XextFindDisplay, pFpp) GO(XextRemoveDisplay, iFpp) -//GO(XGEQueryExtension, -//GO(XGEQueryVersion, -//GO(XLbxGetEventBase, -//GO(XLbxQueryExtension, -//GO(XLbxQueryVersion, -//GO(XmbufChangeBufferAttributes, -//GO(XmbufChangeWindowAttributes, -//GO(XmbufClearBufferArea, -//GO(XmbufCreateBuffers, -//GO(XmbufCreateStereoWindow, -//GO(XmbufDestroyBuffers, -//GO(XmbufDisplayBuffers, -//GO(XmbufGetBufferAttributes, -//GO(XmbufGetScreenInfo, -//GO(XmbufGetVersion, -//GO(XmbufGetWindowAttributes, -//GO(XmbufQueryExtension, +GO(XGEQueryExtension, iFppp) +GO(XGEQueryVersion, iFppp) +GO(XLbxGetEventBase, iFp) +GO(XLbxQueryExtension, iFpppp) +GO(XLbxQueryVersion, iFppp) +GO(XmbufChangeBufferAttributes, vFpLLp) +GO(XmbufChangeWindowAttributes, vFpLLp) +GO(XmbufClearBufferArea, vFpLiiuui) +GO(XmbufCreateBuffers, iFpLiiip) +//GOM(XmbufCreateStereoWindow, LFEpLiiuuuiupLppp) +GO(XmbufDestroyBuffers, vFpL) +GO(XmbufDisplayBuffers, vFpipii) +GO(XmbufGetBufferAttributes, iFpLp) +GO(XmbufGetScreenInfo, iFpLpppp) +GO(XmbufGetVersion, iFppp) +GO(XmbufGetWindowAttributes, iFpLp) +GO(XmbufQueryExtension, iFppp) GO(XMissingExtension, iFpp) -//GO(XMITMiscGetBugMode, -//GO(XMITMiscQueryExtension, -//GO(XMITMiscSetBugMode, -//GO(XSecurityAllocXauth, -//GO(XSecurityFreeXauth, -//GO(XSecurityGenerateAuthorization, -//GO(XSecurityQueryExtension, -//GO(XSecurityRevokeAuthorization, +GO(XMITMiscGetBugMode, iFp) +GO(XMITMiscQueryExtension, iFppp) +GO(XMITMiscSetBugMode, iFpi) +GO(XSecurityAllocXauth, pFv) +GO(XSecurityFreeXauth, vFp) +GO(XSecurityGenerateAuthorization, pFppLpp) +GO(XSecurityQueryExtension, iFppp) +GO(XSecurityRevokeAuthorization, iFpL) GOM(XSetExtensionErrorHandler, pFEp) -GO(XShapeCombineMask, vFppiiipi) -GO(XShapeCombineRectangles, vFppiiipiii) -GO(XShapeCombineRegion, vFppiiipi) -GO(XShapeCombineShape, vFppiiipii) -GO(XShapeGetRectangles, pFppipp) -GO(XShapeInputSelected, uFpp) -GO(XShapeOffsetShape, vFppiii) +GO(XShapeCombineMask, vFpLiiiLi) +GO(XShapeCombineRectangles, vFpLiiipiii) +GO(XShapeCombineRegion, vFpLiiipi) +GO(XShapeCombineShape, vFpLiiiLii) +GO(XShapeGetRectangles, pFpLipp) +GO(XShapeInputSelected, LFpL) +GO(XShapeOffsetShape, vFpLiii) GO(XShapeQueryExtension, iFppp) -GO(XShapeQueryExtents, iFpppppppppppp) +GO(XShapeQueryExtents, iFpLpppppppppp) GO(XShapeQueryVersion, iFppp) -GO(XShapeSelectInput, vFppu) +GO(XShapeSelectInput, vFpLL) GO(XShmAttach, iFpp) GOM(XShmCreateImage, pFEppuippuu) //need brige/unbridge... -GO(XShmCreatePixmap, pFppppuuu) +GO(XShmCreatePixmap, LFpLppuuu) GO(XShmDetach, iFpp) GO(XShmGetEventBase, iFp) -GOM(XShmGetImage, iFEpppiiu) //need brige/unbridge... +GOM(XShmGetImage, iFEpLpiiL) //need brige/unbridge... GO(XShmPixmapFormat, iFp) -GOM(XShmPutImage, iFEppppiiiiuui) //need brige/unbridge... +GOM(XShmPutImage, iFEpLppiiiiuui) //need brige/unbridge... GO(XShmQueryExtension, iFp) GO(XShmQueryVersion, iFpppp) GO(XSyncAwait, iFppi) -//GO(XSyncAwaitFence, -GO(XSyncChangeAlarm, iFpuLp) +GO(XSyncAwaitFence, iFppi) +GO(XSyncChangeAlarm, iFpLLp) GO(XSyncChangeCounter, iFpuU) -GO(XSyncCreateAlarm, uFpLp) // XSyncAlarm is an XID +GO(XSyncCreateAlarm, LFpLp) // XSyncAlarm is an XID GO(XSyncCreateCounter, uFpU) // XSyncValue is a struct of 2 int -//GO(XSyncCreateFence, -GO(XSyncDestroyAlarm, iFpu) -GO(XSyncDestroyCounter, iFpu) -//GO(XSyncDestroyFence, +GO(XSyncCreateFence, LFpLi) +GO(XSyncDestroyAlarm, iFpL) +GO(XSyncDestroyCounter, iFpL) +GO(XSyncDestroyFence, iFpL) GO(XSyncFreeSystemCounterList, vFp) -GO(XSyncGetPriority, iFpup) +GO(XSyncGetPriority, iFpLp) GO(XSyncInitialize, iFppp) GO(XSyncIntsToValue, vFpui) GO(XSyncIntToValue, vFpi) GO(XSyncListSystemCounters, pFpp) -//GO(XSyncMaxValue, -//GO(XSyncMinValue, -GO(XSyncQueryAlarm, iFpup) -GO(XSyncQueryCounter, iFpup) +GO(XSyncMaxValue, vFp) +GO(XSyncMinValue, vFp) +GO(XSyncQueryAlarm, iFpLp) +GO(XSyncQueryCounter, iFpLp) GO(XSyncQueryExtension, iFppp) -//GO(XSyncQueryFence, -//GO(XSyncResetFence, +GO(XSyncQueryFence, iFpLp) +GO(XSyncResetFence, iFpL) GO(XSyncSetCounter, iFpuU) // XSyncCounter is an XID -GO(XSyncSetPriority, iFpui) -//GO(XSyncTriggerFence, +GO(XSyncSetPriority, iFpLi) +GO(XSyncTriggerFence, iFpL) //GO(XSyncValueAdd, //GO(XSyncValueEqual, //GO(XSyncValueGreaterOrEqual, @@ -127,13 +127,13 @@ GO(XSyncValueIsZero, iFp) //GO(XSyncValueLow32, //GO(XSyncValueSubtract, DATA(XTestFakeAckType, sizeof(void*)) -//GO(XTestFakeInput, -//GO(XTestFlush, -//GO(XTestGetInput, +GO(XTestFakeInput, iFppii) +GO(XTestFlush, iFp) +GO(XTestGetInput, iFpi) DATAB(XTestInputActionType, sizeof(void*)) -//GO(XTestMovePointer, -//GO(XTestPressButton, -//GO(XTestPressKey, -//GO(XTestQueryInputSize, -//GO(XTestReset, -//GO(XTestStopInput, +GO(XTestMovePointer, iFpipppu) +GO(XTestPressButton, iFpiLuu) +GO(XTestPressKey, iFpiLuu) +GO(XTestQueryInputSize, iFpp) +GO(XTestReset, iFp) +GO(XTestStopInput, iFp) diff --git a/src/wrapped/wrappedlibxfixes.c b/src/wrapped/wrappedlibxfixes.c index 1def73a25d24dbcf8e501ea88a0fd3db0aeb7411..b68766c32db6c4d97ae1cf7b3dd3dfa1ca79d63b 100644 --- a/src/wrapped/wrappedlibxfixes.c +++ b/src/wrapped/wrappedlibxfixes.c @@ -11,18 +11,11 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* libxfixesName = "libXfixes.so"; -#else - const char* libxfixesName = "libXfixes.so.3"; -#endif +const char* libxfixesName = "libXfixes.so.3"; +#define ALTNAME "libXfixes.so" #define LIBNAME libxfixes -#ifdef ANDROID -#define NEEDED_LIBS "libX11.so", "libxcb.so", "libXau.so", "libXdmcp.so" -#else #define NEEDED_LIBS "libX11.so.6", "libxcb.so.1", "libXau.so.6", "libXdmcp.so.6" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibxfixes_private.h b/src/wrapped/wrappedlibxfixes_private.h index b388944bafab4aff75998e69e13f57d7d2e0e344..1a5eae0fb3468bfd344806d8f57bf215f6652f59 100644 --- a/src/wrapped/wrappedlibxfixes_private.h +++ b/src/wrapped/wrappedlibxfixes_private.h @@ -1,42 +1,42 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error Meh.... +#error Meh... #endif -GO(XFixesChangeCursor, vFppp) -GO(XFixesChangeCursorByName, vFppp) -GO(XFixesChangeSaveSet, vFppiii) -GO(XFixesCopyRegion, vFppp) -GO(XFixesCreatePointerBarrier, pFppiiiiiip) -GO(XFixesCreateRegion, pFppi) -GO(XFixesCreateRegionFromBitmap, pFpp) -GO(XFixesCreateRegionFromGC, pFpp) -GO(XFixesCreateRegionFromPicture, pFpp) -GO(XFixesCreateRegionFromWindow, pFppi) -GO(XFixesDestroyPointerBarrier, vFpp) -GO(XFixesDestroyRegion, vFpp) -GO(XFixesExpandRegion, vFpppuuuu) +GO(XFixesChangeCursor, vFpLL) +GO(XFixesChangeCursorByName, vFpLp) +GO(XFixesChangeSaveSet, vFpLiii) +GO(XFixesCopyRegion, vFpLL) +GO(XFixesCreatePointerBarrier, LFpLiiiiiip) +GO(XFixesCreateRegion, LFppi) +GO(XFixesCreateRegionFromBitmap, LFpL) +GO(XFixesCreateRegionFromGC, LFpp) +GO(XFixesCreateRegionFromPicture, LFpL) +GO(XFixesCreateRegionFromWindow, LFpLi) +GO(XFixesDestroyPointerBarrier, vFpL) +GO(XFixesDestroyRegion, vFpL) +GO(XFixesExpandRegion, vFpLLuuuu) DATA(XFixesExtensionInfo, sizeof(void*)) //B DATA(XFixesExtensionName, sizeof(void*)) //D -GO(XFixesFetchRegion, pFppp) -GO(XFixesFetchRegionAndBounds, pFpppp) -GO(XFixesFindDisplay, pFp) +GO(XFixesFetchRegion, pFpLp) +GO(XFixesFetchRegionAndBounds, pFpLpp) +GO(XFixesFindDisplay, pFp) // Warning: failed to confirm GO(XFixesGetCursorImage, pFp) -GO(XFixesGetCursorName, pFppp) -GO(XFixesHideCursor, vFpp) -GO(XFixesIntersectRegion, vFpppp) -GO(XFixesInvertRegion, vFpppp) +GO(XFixesGetCursorName, pFpLp) +GO(XFixesHideCursor, vFpL) +GO(XFixesIntersectRegion, vFpLLL) +GO(XFixesInvertRegion, vFpLpL) GO(XFixesQueryExtension, iFppp) GO(XFixesQueryVersion, iFppp) -GO(XFixesRegionExtents, vFppp) -GO(XFixesSelectCursorInput, vFppu) -GO(XFixesSelectSelectionInput, vFpppu) -GO(XFixesSetCursorName, vFppp) -GO(XFixesSetGCClipRegion, vFppiip) -GO(XFixesSetPictureClipRegion, vFppiip) -GO(XFixesSetRegion, vFpppi) -GO(XFixesSetWindowShapeRegion, vFppiiip) -GO(XFixesShowCursor, vFpp) -GO(XFixesSubtractRegion, vFpppp) -GO(XFixesTranslateRegion, vFppii) -GO(XFixesUnionRegion, vFpppp) +GO(XFixesRegionExtents, vFpLL) +GO(XFixesSelectCursorInput, vFpLL) +GO(XFixesSelectSelectionInput, vFpLLL) +GO(XFixesSetCursorName, vFpLp) +GO(XFixesSetGCClipRegion, vFppiiL) +GO(XFixesSetPictureClipRegion, vFpLiiL) +GO(XFixesSetRegion, vFpLpi) +GO(XFixesSetWindowShapeRegion, vFpLiiiL) +GO(XFixesShowCursor, vFpL) +GO(XFixesSubtractRegion, vFpLLL) +GO(XFixesTranslateRegion, vFpLii) +GO(XFixesUnionRegion, vFpLLL) GO(XFixesVersion, iFv) diff --git a/src/wrapped/wrappedlibxft.c b/src/wrapped/wrappedlibxft.c index 633e40669ecdaf3dde569cf6f5d16ab37447ec53..bfe1dd64e6c3c55647a55cb96c44ed00ccdc3cc1 100644 --- a/src/wrapped/wrappedlibxft.c +++ b/src/wrapped/wrappedlibxft.c @@ -6,23 +6,58 @@ #include "wrappedlibs.h" +#include "debug.h" #include "wrapper.h" #include "bridge.h" #include "librarian/library_private.h" #include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box64context.h" +#include "emu/x64emu_private.h" +#include "myalign.h" -#ifdef ANDROID - const char* libxftName = "libXft.so"; -#else - const char* libxftName = "libXft.so.2"; -#endif +const char* libxftName = "libXft.so.2"; +#define ALTNAME "libXft.so" #define LIBNAME libxft +typedef void(*vFp_t)(void*); +typedef void*(*pFpp_t)(void*, void*); +typedef void*(*pFpipp_t)(void*, int, void*, void*); + +#define ADDED_FUNCTIONS() \ + GO(XftFontMatch, pFpipp_t) \ + GO(XftFontOpenPattern, pFpp_t) \ + GO(FcPatternDestroy, vFp_t) + +#include "generated/wrappedlibxfttypes.h" + +#include "wrappercallback.h" + +void* my_FcPatternBuild(x64emu_t* emu, void* pattern, uint64_t* b); // from fontconfig +EXPORT void* my_XftFontOpen(x64emu_t* emu, void* dpy, int screen, uintptr_t* b) +{ + int result; + void* pat = my_FcPatternBuild(emu, NULL, b); + void* match = my->XftFontMatch(dpy, screen, pat, &result); + my->FcPatternDestroy(pat); + if(!match) + return NULL; + void* ret = my->XftFontOpenPattern(dpy, match); + if(!ret) + my->FcPatternDestroy(match); + return ret; +} + + #ifdef ANDROID #define NEEDED_LIBS "libX11.so", "libfontconfig.so", "libXrender.so", "libfreetype.so" #else #define NEEDED_LIBS "libX11.so.6", "libfontconfig.so.1", "libXrender.so.1", "libfreetype.so.6" #endif + + #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibxft_private.h b/src/wrapped/wrappedlibxft_private.h index 843213b7a35b2ce3cecc5e4c0a15e428b21ab381..5c920e9e4f314907a74854639e57c1de32e936d5 100644 --- a/src/wrapped/wrappedlibxft_private.h +++ b/src/wrapped/wrappedlibxft_private.h @@ -1,81 +1,81 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error Meh.... +#error Meh... #endif -//GO(XftCharExists, -//GO(XftCharFontSpecRender, -//GO(XftCharIndex, -//GO(XftCharSpecRender, -GO(XftColorAllocName, iFppupp) -//GO(XftColorAllocValue, -GO(XftColorFree, vFppup) -//GO(XftDefaultHasRender, -//GO(XftDefaultSet, -//GO(XftDefaultSubstitute, -GO(XftDrawChange, vFpp) -//GO(XftDrawCharFontSpec, -//GO(XftDrawCharSpec, -//GO(XftDrawColormap, -GO(XftDrawCreate, pFpppp) -//GO(XftDrawCreateAlpha, -//GO(XftDrawCreateBitmap, +GO(XftCharExists, iFppu) +GO(XftCharFontSpecRender, vFpiLLiipi) +GO(XftCharIndex, uFppu) +GO(XftCharSpecRender, vFpiLpLiipi) +GO(XftColorAllocName, iFppLpp) +GO(XftColorAllocValue, iFppLpp) +GO(XftColorFree, vFppLp) +GO(XftDefaultHasRender, iFp) +GO(XftDefaultSet, iFpp) +GO(XftDefaultSubstitute, vFpip) +GO(XftDrawChange, vFpL) +GO(XftDrawCharFontSpec, vFpppi) +GO(XftDrawCharSpec, vFppppi) +GO(XftDrawColormap, LFp) +GO(XftDrawCreate, pFpLpL) +GO(XftDrawCreateAlpha, pFpLi) +GO(XftDrawCreateBitmap, pFpL) GO(XftDrawDestroy, vFp) -//GO(XftDrawDisplay, -//GO(XftDrawDrawable, -//GO(XftDrawGlyphFontSpec, -//GO(XftDrawGlyphs, -//GO(XftDrawGlyphSpec, -//GO(XftDrawPicture, +GO(XftDrawDisplay, pFp) +GO(XftDrawDrawable, LFp) +GO(XftDrawGlyphFontSpec, vFpppi) +GO(XftDrawGlyphs, vFpppiipi) +GO(XftDrawGlyphSpec, vFppppi) +GO(XftDrawPicture, LFp) GO(XftDrawRect, vFppiiuu) GO(XftDrawSetClip, iFpp) -//GO(XftDrawSetClipRectangles, -//GO(XftDrawSetSubwindowMode, -//GO(XftDrawSrcPicture, +GO(XftDrawSetClipRectangles, iFpiipi) +GO(XftDrawSetSubwindowMode, vFpi) +GO(XftDrawSrcPicture, LFpp) GO(XftDrawString16, vFpppiipi) GO(XftDrawString32, vFpppiipi) -//GO(XftDrawString8, -//GO(XftDrawStringUtf16, -//GO(XftDrawStringUtf8, -//GO(XftDrawVisual, -//GO(XftFontCheckGlyph, +GO(XftDrawString8, vFpppiipi) +GO(XftDrawStringUtf16, vFpppiipui) +GO(XftDrawStringUtf8, vFpppiipi) +GO(XftDrawVisual, pFp) +GO(XftFontCheckGlyph, iFppiupp) GO(XftFontClose, vFpp) GO(XftFontCopy, pFpp) -//GO(XftFontInfoCreate, -//GO(XftFontInfoDestroy, -//GO(XftFontInfoEqual, -//GO(XftFontInfoHash, -//GO(XftFontLoadGlyphs, +GO(XftFontInfoCreate, pFpp) +GO(XftFontInfoDestroy, vFpp) +GO(XftFontInfoEqual, iFpp) +GO(XftFontInfoHash, uFp) +GO(XftFontLoadGlyphs, vFppipi) GO(XftFontMatch, pFpipp) -GO(XftFontOpen, pFpippppppppppppppppp) // use ... -//GO(XftFontOpenInfo, +GOM(XftFontOpen, pFEpiV) +GO(XftFontOpenInfo, pFppp) GO(XftFontOpenName, pFpip) GO(XftFontOpenPattern, pFpp) GO(XftFontOpenXlfd, pFpip) -//GO(XftFontUnloadGlyphs, -//GO(XftGetVersion, -//GO(XftGlyphExtents, -//GO(XftGlyphFontSpecRender, -//GO(XftGlyphRender, -//GO(XftGlyphSpecRender, -//GO(XftInit, -//GO(XftInitFtLibrary, -//GO(XftListFonts, -//GO(XftLockFace, -//GO(XftNameParse, +GO(XftFontUnloadGlyphs, vFpppi) +GO(XftGetVersion, iFv) +GO(XftGlyphExtents, vFpppip) +GO(XftGlyphFontSpecRender, vFpiLLiipi) +GO(XftGlyphRender, vFpiLpLiiiipi) +GO(XftGlyphSpecRender, vFpiLpLiipi) +GO(XftInit, iFp) +GO(XftInitFtLibrary, iFv) +GO(XftListFonts, pFpipppppppppppppp) // actually pFpiV +GO(XftLockFace, pFp) +GO(XftNameParse, pFp) GO(XftNameUnparse, iFppi) GO(XftTextExtents16, vFpppip) GO(XftTextExtents32, vFpppip) -//GO(XftTextExtents8, -//GO(XftTextExtentsUtf16, -//GO(XftTextExtentsUtf8, -//GO(XftTextRender16, -//GO(XftTextRender16BE, -//GO(XftTextRender16LE, -//GO(XftTextRender32, -//GO(XftTextRender32BE, -//GO(XftTextRender32LE, -//GO(XftTextRender8, -//GO(XftTextRenderUtf16, -//GO(XftTextRenderUtf8, -//GO(XftUnlockFace, -//GO(XftXlfdParse, +GO(XftTextExtents8, vFpppip) +GO(XftTextExtentsUtf16, vFpppuip) +GO(XftTextExtentsUtf8, vFpppip) +GO(XftTextRender16, vFpiLpLiiiipi) +GO(XftTextRender16BE, vFpiLpLiiiipi) +GO(XftTextRender16LE, vFpiLpLiiiipi) +GO(XftTextRender32, vFpiLpLiiiipi) +GO(XftTextRender32BE, vFpiLpLiiiipi) +GO(XftTextRender32LE, vFpiLpLiiiipi) +GO(XftTextRender8, vFpiLpLiiiipi) +GO(XftTextRenderUtf16, vFpiLpLiiiipui) +GO(XftTextRenderUtf8, vFpiLpLiiiipi) +GO(XftUnlockFace, vFp) +GO(XftXlfdParse, pFpii) diff --git a/src/wrapped/wrappedlibxi.c b/src/wrapped/wrappedlibxi.c index 271048cd0c753ead76338ab5ad75ffc81b4da400..83d26428ac6df8ef1f290c0a83af2dc9d4b587a5 100644 --- a/src/wrapped/wrappedlibxi.c +++ b/src/wrapped/wrappedlibxi.c @@ -11,11 +11,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* libxiName = "libXi.so"; -#else - const char* libxiName = "libXi.so.6"; -#endif +const char* libxiName = "libXi.so.6"; +#define ALTNAME "libXi.so" #define LIBNAME libxi diff --git a/src/wrapped/wrappedlibxi_private.h b/src/wrapped/wrappedlibxi_private.h index 6e10da5fdefceaae20af862ddd356509d2f74d8c..1f5169db57ff5bd56856515892dd0d6c1294201f 100644 --- a/src/wrapped/wrappedlibxi_private.h +++ b/src/wrapped/wrappedlibxi_private.h @@ -1,88 +1,88 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error Meh.... +#error Meh... #endif -//GO(XAllowDeviceEvents, -//GO(XChangeDeviceControl, -//GO(XChangeDeviceDontPropagateList, -//GO(XChangeDeviceKeyMapping, -GO(XChangeDeviceProperty, vFppppiipi) -//GO(XChangeFeedbackControl, -//GO(XChangeKeyboardDevice, -//GO(XChangePointerDevice, +GO(XAllowDeviceEvents, iFppiL) +GO(XChangeDeviceControl, iFppip) +GO(XChangeDeviceDontPropagateList, iFpLipi) +GO(XChangeDeviceKeyMapping, iFppiipi) +GO(XChangeDeviceProperty, vFppLLiipi) +GO(XChangeFeedbackControl, iFppLp) +GO(XChangeKeyboardDevice, iFpp) +GO(XChangePointerDevice, iFppii) GO(XCloseDevice, iFpp) -GO(XDeleteDeviceProperty, vFppp) -//GO(XDeviceBell, -//GO(XFreeDeviceControl, -GO(XFreeDeviceList, iFp) -GO(XFreeDeviceMotionEvents, iFv) +GO(XDeleteDeviceProperty, vFppL) +GO(XDeviceBell, iFppLLi) +GO(XFreeDeviceControl, vFp) +GO(XFreeDeviceList, vFp) +GO(XFreeDeviceMotionEvents, vFp) GO(XFreeDeviceState, vFp) -//GO(XFreeFeedbackList, -GO(XGetDeviceButtonMapping, iFpppi) -//GO(XGetDeviceControl, -//GO(XGetDeviceDontPropagateList, -//GO(XGetDeviceFocus, -//GO(XGetDeviceKeyMapping, -//GO(XGetDeviceModifierMapping, -GO(XGetDeviceMotionEvents, pFppuuppp) -GO(XGetDeviceProperty, iFpppllipppppp) +GO(XFreeFeedbackList, vFp) +GO(XGetDeviceButtonMapping, iFpppu) +GO(XGetDeviceControl, pFppi) +GO(XGetDeviceDontPropagateList, pFpLp) +GO(XGetDeviceFocus, iFppppp) +GO(XGetDeviceKeyMapping, pFppCip) +GO(XGetDeviceModifierMapping, pFpp) +GO(XGetDeviceMotionEvents, pFppLLppp) +GO(XGetDeviceProperty, iFppLlliLppppp) GO(XGetExtensionVersion, pFpp) -//GO(XGetFeedbackControl, -//GO(XGetSelectedExtensionEvents, -GO(XGrabDevice, iFpppiipiiu) -//GO(XGrabDeviceButton, -//GO(XGrabDeviceKey, -//GO(XIAllowEvents, -//GO(XIAllowTouchEvents, -GO(XIBarrierReleasePointer, vFpipp) +GO(XGetFeedbackControl, pFppp) +GO(XGetSelectedExtensionEvents, iFpLpppp) +GO(XGrabDevice, iFppLiipiiL) +GO(XGrabDeviceButton, iFppuupLiupii) +GO(XGrabDeviceKey, iFppuupLiupii) +GO(XIAllowEvents, iFpiiL) +GO(XIAllowTouchEvents, iFpiuLi) +GO(XIBarrierReleasePointer, vFpiLu) GO(XIBarrierReleasePointers, vFppi) -//GO(XIChangeHierarchy, -GO(XIChangeProperty, vFpippiipi) -GO(XIDefineCursor, iFpipp) -GO(XIDeleteProperty, vFpip) +GO(XIChangeHierarchy, iFppi) +GO(XIChangeProperty, vFpiLLiipi) +GO(XIDefineCursor, iFpiLL) +GO(XIDeleteProperty, vFpiL) GO(XIFreeDeviceInfo, vFp) -GO(XIGetClientPointer, iFppp) -//GO(XIGetFocus, -GO(XIGetProperty, iFpipllipppppp) -GO(XIGetSelectedEvents, iFpppi) -GO(XIGrabButton, iFpiippiiipip) -GO(XIGrabDevice, iFpipLpiiip) -//GO(XIGrabEnter, -//GO(XIGrabFocusIn, -GO(XIGrabKeycode, iFpiipiiipip) -GO(XIGrabTouchBegin, iFpipipip) -//GO(XIListProperties, +GO(XIGetClientPointer, iFpLp) +GO(XIGetFocus, iFpip) +GO(XIGetProperty, iFpiLlliLppppp) +GO(XIGetSelectedEvents, pFpLp) +GO(XIGrabButton, iFpiiLLiiipip) +GO(XIGrabDevice, iFpiLLLiiip) +GO(XIGrabEnter, iFpiLLiiipip) +GO(XIGrabFocusIn, iFpiLiiipip) +GO(XIGrabKeycode, iFpiiLiiipip) +GO(XIGrabTouchBegin, iFpiLipip) +GO(XIListProperties, pFpip) GO(XIQueryDevice, pFpip) -GO(XIQueryPointer, iFpipppppppppp) +GO(XIQueryPointer, iFpiLppppppppp) GO(XIQueryVersion, iFppp) -GO(XISelectEvents, iFpppi) -GO(XISetClientPointer, iFppi) -//GO(XISetFocus, -GO(XIUndefineCursor, iFpip) -GO(XIUngrabButton, iFpiipip) +GO(XISelectEvents, iFpLpi) +GO(XISetClientPointer, iFpLi) +GO(XISetFocus, iFpiLL) +GO(XIUndefineCursor, iFpiL) +GO(XIUngrabButton, iFpiiLip) GO(XIUngrabDevice, iFpiL) -//GO(XIUngrabEnter, -//GO(XIUngrabFocusIn, -GO(XIUngrabKeycode, iFpiipip) -GO(XIUngrabTouchBegin, iFpipip) -GO(XIWarpPointer, iFpippddiidd) -//GO(XListDeviceProperties, +GO(XIUngrabEnter, iFpiLip) +GO(XIUngrabFocusIn, iFpiLip) +GO(XIUngrabKeycode, iFpiiLip) +GO(XIUngrabTouchBegin, iFpiLip) +GO(XIWarpPointer, iFpiLLdduudd) +GO(XListDeviceProperties, pFppp) GO(XListInputDevices, pFpp) -GO(XOpenDevice, pFpp) +GO(XOpenDevice, pFpL) GO(XQueryDeviceState, pFpp) -GO(XSelectExtensionEvent, iFpppi) -//GO(XSendExtensionEvent, +GO(XSelectExtensionEvent, iFpLpi) +GO(XSendExtensionEvent, iFppLiipp) GO(XSetDeviceButtonMapping, iFpppi) -//GO(XSetDeviceFocus, -//GO(XSetDeviceMode, -//GO(XSetDeviceModifierMapping, -//GO(XSetDeviceValuators, -GO(XUngrabDevice, iFppu) -//GO(XUngrabDeviceButton, -//GO(XUngrabDeviceKey, +GO(XSetDeviceFocus, iFppLiL) +GO(XSetDeviceMode, iFppi) +GO(XSetDeviceModifierMapping, iFppp) +GO(XSetDeviceValuators, iFpppii) +GO(XUngrabDevice, iFppL) +GO(XUngrabDeviceButton, iFppuupL) +GO(XUngrabDeviceKey, iFppuupL) GO(_XiGetDevicePresenceNotifyEvent, iFp) -//GO(_xibadclass, -//GO(_xibaddevice, -//GO(_xibadevent, -//GO(_xibadmode, -//GO(_xidevicebusy, +GO(_xibadclass, vFpp) +GO(_xibaddevice, vFpp) +GO(_xibadevent, vFpp) +GO(_xibadmode, vFpp) +GO(_xidevicebusy, vFpp) diff --git a/src/wrapped/wrappedlibxmu.c b/src/wrapped/wrappedlibxmu.c index f4229dfd2e5911791153d638f02c310ab1150fcd..a520f9206d4d54281863170a6a04a63a76018d2b 100644 --- a/src/wrapped/wrappedlibxmu.c +++ b/src/wrapped/wrappedlibxmu.c @@ -11,18 +11,11 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* libxmuName = "libXmu.so"; -#else - const char* libxmuName = "libXmu.so.6"; -#endif +const char* libxmuName = "libXmu.so.6"; +#define ALTNAME "libXmu.so" #define LIBNAME libxmu -#ifdef ANDROID -#define NEEDED_LIBS "libX11.so", "libXext.so" -#else #define NEEDED_LIBS "libX11.so.6", "libXext.so.6" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibxpm.c b/src/wrapped/wrappedlibxpm.c index 418ee87bd55f972ac2085498b21a64d1c1265e07..22fde5e24ca4d6fdfef84433b505f29413636951 100644 --- a/src/wrapped/wrappedlibxpm.c +++ b/src/wrapped/wrappedlibxpm.c @@ -11,18 +11,11 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* libxpmName = "libXpm.so"; -#else - const char* libxpmName = "libXpm.so.4"; -#endif +const char* libxpmName = "libXpm.so.4"; +#define ALTNAME "libXpm.so" #define LIBNAME libxpm -#ifdef ANDROID - #define NEEDED_LIBS "libX11.so", "libXext.so" -#else - #define NEEDED_LIBS "libX11.so.6", "libXext.so.6" -#endif +#define NEEDED_LIBS "libX11.so.6", "libXext.so.6" #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibxpresent.c b/src/wrapped/wrappedlibxpresent.c index 2a5ec87da8a2e93b22638ce4a07964b58e4f279b..a1ef31d53b8f381e2351fa1dca68369ea098722a 100644 --- a/src/wrapped/wrappedlibxpresent.c +++ b/src/wrapped/wrappedlibxpresent.c @@ -12,11 +12,8 @@ #include "x64emu.h" #include "debug.h" -#ifdef ANDROID - const char* libxpresentName = "libXpresent.so"; -#else - const char* libxpresentName = "libXpresent.so.1"; -#endif +const char* libxpresentName = "libXpresent.so.1"; +#define ALTNAME "libXpresent.so" #define LIBNAME libxpresent diff --git a/src/wrapped/wrappedlibxrandr.c b/src/wrapped/wrappedlibxrandr.c index eb8a4185d7e25b4b8e53465d4a2c4c9d024c60aa..271af6b2dc9b8ba25b895f2e112d950533be58a6 100644 --- a/src/wrapped/wrappedlibxrandr.c +++ b/src/wrapped/wrappedlibxrandr.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxrandrName = "libXrandr.so"; -#else - const char* libxrandrName = "libXrandr.so.2"; -#endif +const char* libxrandrName = "libXrandr.so.2"; +#define ALTNAME "libXrandr.so" #define LIBNAME libxrandr diff --git a/src/wrapped/wrappedlibxrandr_private.h b/src/wrapped/wrappedlibxrandr_private.h index d71c6285f49f8c6cc556af8b14e3ce36e063e028..7c671b7510f53eed7b15c8e0c5bb7cf788a085df 100644 --- a/src/wrapped/wrappedlibxrandr_private.h +++ b/src/wrapped/wrappedlibxrandr_private.h @@ -1,73 +1,73 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif -GO(XRRQueryVersion,iFppp) -GO(XRRFreeScreenConfigInfo,vFp) -GO(XRRGetCrtcInfo, pFppu) -GO(XRRListOutputProperties, pFpup) +GO(XRRQueryVersion, iFppp) +GO(XRRFreeScreenConfigInfo, vFp) +GO(XRRGetCrtcInfo, pFppL) +GO(XRRListOutputProperties, pFpLp) GO(XRRQueryExtension, iFppp) -//GO(XRRAllocModeInfo -//GO(XRRGetProviderProperty -//GO(XRRListProviderProperties -GO(XRRRotations,uFpip) -//GO(XRRSetCrtcTransform -GO(XRRGetCrtcGammaSize, iFpu) -GO(XRRConfigRotations,uFpp) -GO(XRRGetProviderInfo, pFppp) -//GO(XRRConfigureOutputProperty -//GO(XRRSetOutputPrimary +GO(XRRAllocModeInfo, pFpi) +GO(XRRGetProviderProperty, iFpLLlliiLppppp) +GO(XRRListProviderProperties, pFpLp) +GO(XRRRotations, WFpip) +GO(XRRSetCrtcTransform, vFpLpppi) +GO(XRRGetCrtcGammaSize, iFpL) +GO(XRRConfigRotations, WFpp) +GO(XRRGetProviderInfo, pFppL) +GO(XRRConfigureOutputProperty, vFpLLiiip) +GO(XRRSetOutputPrimary, vFpLL) GO(XRRFreeOutputInfo, vFp) -GO(XRRUpdateConfiguration,iFp) -GO(XRRGetScreenResources, pFpp) -GO(XRRConfigSizes,pFpp) -//GO(XRRQueryProviderProperty -//GO(XRRDeleteOutputProperty -//GO(XRRDeleteProviderProperty -GO(XRRSetScreenConfig,iFpppiuu) +GO(XRRUpdateConfiguration, iFp) +GO(XRRGetScreenResources, pFpL) +GO(XRRConfigSizes, pFpp) +GO(XRRQueryProviderProperty, pFpLL) +GO(XRRDeleteOutputProperty, vFpLL) +GO(XRRDeleteProviderProperty, vFpLL) +GO(XRRSetScreenConfig, iFppLiWL) GO(XRRAllocGamma, pFi) -GO(XRRSetScreenSize, vFppiiii) -GO(XRRSetScreenConfigAndRate,iFpppiuwu) +GO(XRRSetScreenSize, vFpLiiii) +GO(XRRSetScreenConfigAndRate, iFppLiWwL) GO(XRRFreeScreenResources, vFp) -GO(XRRGetOutputPrimary, uFpp) -//GO(XRRCreateMode -GO(XRRConfigCurrentRate,wFp) -//GO(XRRDestroyMode -GO(XRRSetCrtcConfig, iFppuuiiuupi) -GO(XRRConfigCurrentConfiguration,uFpp) -GO(XRRSizes,pFpip) -//GO(XRRAddOutputMode +GO(XRRGetOutputPrimary, LFpL) +GO(XRRCreateMode, LFpLp) +GO(XRRConfigCurrentRate, wFp) +GO(XRRDestroyMode, vFpL) +GO(XRRSetCrtcConfig, iFppLLiiLWpi) +GO(XRRConfigCurrentConfiguration, WFpp) +GO(XRRSizes, pFpip) +GO(XRRAddOutputMode, vFpLL) GO(XRRFreePanning, vFp) GO(XRRFreeProviderResources, vFp) -//GO(XRRChangeProviderProperty -GO(XRRGetPanning, pFppu) -//GO(XRRSetProviderOffloadSink -GO(XRRGetScreenResourcesCurrent, pFpp) -GO(XRRConfigTimes,uFpp) -GO(XRRSetCrtcGamma, vFppp) -//GO(XRRSetProviderOutputSource -GO(XRRGetScreenSizeRange, iFpppppp) -GO(XRRRates,pFpiip) +GO(XRRChangeProviderProperty, vFpLLLiipi) +GO(XRRGetPanning, pFppL) +GO(XRRSetProviderOffloadSink, iFpLL) +GO(XRRGetScreenResourcesCurrent, pFpL) +GO(XRRConfigTimes, LFpp) +GO(XRRSetCrtcGamma, vFpLp) +GO(XRRSetProviderOutputSource, iFpLL) +GO(XRRGetScreenSizeRange, iFpLpppp) +GO(XRRRates, pFpiip) GO(XRRFreeProviderInfo, vFp) -GO(XRRConfigRates,pFpip) -GO(XRRQueryOutputProperty, pFpup) -GO(XRRGetOutputProperty, iFpupiiiipppppp) +GO(XRRConfigRates, pFpip) +GO(XRRQueryOutputProperty, pFpLL) +GO(XRRGetOutputProperty, iFpLLlliiLppppp) GO(XRRFreeGamma, vFp) -GO(XRRRootToScreen,iFpp) -GO(XRRGetScreenInfo,pFpp) +GO(XRRRootToScreen, iFpL) +GO(XRRGetScreenInfo, pFpL) GO(XRRFreeCrtcInfo, vFp) -GO(XRRGetProviderResources, pFpp) -//GO(XRRFreeModeInfo -//GO(XRRChangeOutputProperty -GO(XRRGetCrtcGamma, pFpu) -GO(XRRSetPanning, pFppu) -GO(XRRSelectInput,vFppi) -GO(XRRGetCrtcTransform, iFppp) -GO(XRRTimes,uFpip) -//GO(XRRDeleteOutputMode -GO(XRRGetOutputInfo, pFppu) -//GO(XRRConfigureProviderProperty +GO(XRRGetProviderResources, pFpL) +GO(XRRFreeModeInfo, vFp) +GO(XRRChangeOutputProperty, vFpLLLiipi) +GO(XRRGetCrtcGamma, pFpL) +GO(XRRSetPanning, iFppLp) +GO(XRRSelectInput, vFpLi) +GO(XRRGetCrtcTransform, iFpLp) +GO(XRRTimes, LFpip) +GO(XRRDeleteOutputMode, vFpLL) +GO(XRRGetOutputInfo, pFppL) +GO(XRRConfigureProviderProperty, vFpLLiiip) GO(XRRAllocateMonitor, pFpi) -GO(XRRGetMonitors, pFppip) -GO(XRRSetMonitor, vFppp) -GO(XRRFreeMonitors, vFp) \ No newline at end of file +GO(XRRGetMonitors, pFpLip) +GO(XRRSetMonitor, vFpLp) +GO(XRRFreeMonitors, vFp) diff --git a/src/wrapped/wrappedlibxrender.c b/src/wrapped/wrappedlibxrender.c index 3c25b2df1a98967b56b69c7cfe1b1b2a45e1c522..4b92d240bd218c0600ca2810f2c636647a175ea1 100644 --- a/src/wrapped/wrappedlibxrender.c +++ b/src/wrapped/wrappedlibxrender.c @@ -11,18 +11,11 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* libxrenderName = "libXrender.so"; -#else - const char* libxrenderName = "libXrender.so.1"; -#endif +const char* libxrenderName = "libXrender.so.1"; +#define ALTNAME "libXrender.so" #define LIBNAME libxrender -#ifdef ANDROID -#define NEEDED_LIBS "libX11.so" -#else #define NEEDED_LIBS "libX11.so.6" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibxrender_private.h b/src/wrapped/wrappedlibxrender_private.h index 5c2567005f9ddef7ac7c2cde67b12b0b153415b4..1b913a47e59b4d95d99c73e1f01dad9a08b7b77a 100644 --- a/src/wrapped/wrappedlibxrender_private.h +++ b/src/wrapped/wrappedlibxrender_private.h @@ -1,51 +1,51 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error Meh.... +#error Meh... #endif -GO(XRenderAddGlyphs, vFppppipi) -GO(XRenderAddTraps, vFppiipi) -GO(XRenderChangePicture, vFppLp) -GO(XRenderComposite, vFpipppiiiiiiuu) -GO(XRenderCompositeDoublePoly, vFpipppiiiipii) -GO(XRenderCompositeString16, vFpippppiiiipi) -GO(XRenderCompositeString32, vFpippppiiiipi) -GO(XRenderCompositeString8, vFpippppiiiipi) -GO(XRenderCompositeText16, vFpipppiiiipi) -GO(XRenderCompositeText32, vFpipppiiiipi) -GO(XRenderCompositeText8, vFpipppiiiipi) -GO(XRenderCompositeTrapezoids, vFpipppiipi) -GO(XRenderCompositeTriangles, vFpipppiipi) -GO(XRenderCompositeTriFan, vFpipppiipi) -GO(XRenderCompositeTriStrip, vFpipppiipi) -GO(XRenderCreateAnimCursor, pFpip) -GO(XRenderCreateConicalGradient, pFppppi) -GO(XRenderCreateCursor, pFppii) -GO(XRenderCreateGlyphSet, pFpp) -GO(XRenderCreateLinearGradient, pFppppi) -GO(XRenderCreatePicture, pFpppup) -GO(XRenderCreateRadialGradient, pFppppi) -GO(XRenderCreateSolidFill, pFpp) +GO(XRenderAddGlyphs, vFpLppipi) +GO(XRenderAddTraps, vFpLiipi) +GO(XRenderChangePicture, vFpLLp) +GO(XRenderComposite, vFpiLLLiiiiiiuu) +GO(XRenderCompositeDoublePoly, vFpiLLpiiiipii) +GO(XRenderCompositeString16, vFpiLLpLiiiipi) +GO(XRenderCompositeString32, vFpiLLpLiiiipi) +GO(XRenderCompositeString8, vFpiLLpLiiiipi) +GO(XRenderCompositeText16, vFpiLLpiiiipi) +GO(XRenderCompositeText32, vFpiLLpiiiipi) +GO(XRenderCompositeText8, vFpiLLpiiiipi) +GO(XRenderCompositeTrapezoids, vFpiLLpiipi) +GO(XRenderCompositeTriangles, vFpiLLpiipi) +GO(XRenderCompositeTriFan, vFpiLLpiipi) +GO(XRenderCompositeTriStrip, vFpiLLpiipi) +GO(XRenderCreateAnimCursor, LFpip) +GO(XRenderCreateConicalGradient, LFppppi) +GO(XRenderCreateCursor, LFpLuu) +GO(XRenderCreateGlyphSet, LFpp) +GO(XRenderCreateLinearGradient, LFppppi) +GO(XRenderCreatePicture, LFpLpLp) +GO(XRenderCreateRadialGradient, LFppppi) +GO(XRenderCreateSolidFill, LFpp) DATAB(XRenderExtensionInfo, sizeof(void*)) DATA(XRenderExtensionName, sizeof(void*)) //D -GO(XRenderFillRectangle, vFpippiiuu) -GO(XRenderFillRectangles, vFpipppi) +GO(XRenderFillRectangle, vFpiLpiiuu) +GO(XRenderFillRectangles, vFpiLppi) GO(XRenderFindDisplay, pFp) -GO(XRenderFindFormat, pFpupi) +GO(XRenderFindFormat, pFpLpi) GO(XRenderFindStandardFormat, pFpi) GO(XRenderFindVisualFormat, pFpp) -GO(XRenderFreeGlyphs, vFpppi) -GO(XRenderFreeGlyphSet, vFpp) -GO(XRenderFreePicture, vFpp) +GO(XRenderFreeGlyphs, vFpLpi) +GO(XRenderFreeGlyphSet, vFpL) +GO(XRenderFreePicture, vFpL) GO(XRenderParseColor, iFppp) GO(XRenderQueryExtension, iFppp) -GO(XRenderQueryFilters, pFpp) +GO(XRenderQueryFilters, pFpL) GO(XRenderQueryFormats, iFp) GO(XRenderQueryPictIndexValues, pFppp) GO(XRenderQuerySubpixelOrder, iFpi) GO(XRenderQueryVersion, iFppp) -GO(XRenderReferenceGlyphSet, pFpp) -GO(XRenderSetPictureClipRectangles, vFppiipi) -GO(XRenderSetPictureClipRegion, vFppp) -GO(XRenderSetPictureFilter, vFppppi) -GO(XRenderSetPictureTransform, vFppp) +GO(XRenderReferenceGlyphSet, LFpL) +GO(XRenderSetPictureClipRectangles, vFpLiipi) +GO(XRenderSetPictureClipRegion, vFpLp) +GO(XRenderSetPictureFilter, vFpLppi) +GO(XRenderSetPictureTransform, vFpLp) GO(XRenderSetSubpixelOrder, iFpii) diff --git a/src/wrapped/wrappedlibxss.c b/src/wrapped/wrappedlibxss.c index b635936954948182258d0710203bc6ef5379b4be..aea2d7d2a4eca1ea5ab9962f43687820be7d87b2 100644 --- a/src/wrapped/wrappedlibxss.c +++ b/src/wrapped/wrappedlibxss.c @@ -11,18 +11,11 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* libxssName = "libXss.so"; -#else - const char* libxssName = "libXss.so.1"; -#endif +const char* libxssName = "libXss.so.1"; +#define ALTNAME "libXss.so" #define LIBNAME libxss -#ifdef ANDROID -#define NEEDED_LIBS "libX11.so", "libXext.so" -#else #define NEEDED_LIBS "libX11.so.6", "libXext.so.6" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibxss_private.h b/src/wrapped/wrappedlibxss_private.h index d345f049e9a454d09e5e02821bbfc492791c665c..62c0e9c28f50b39d344c353027ce6919920012c1 100644 --- a/src/wrapped/wrappedlibxss_private.h +++ b/src/wrapped/wrappedlibxss_private.h @@ -1,15 +1,15 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error Meh.... +#error Meh... #endif GO(XScreenSaverAllocInfo, pFv) -GO(XScreenSaverGetRegistered, uFpipp) +GO(XScreenSaverGetRegistered, iFpipp) GO(XScreenSaverQueryExtension, iFppp) -GO(XScreenSaverQueryInfo, iFppp) +GO(XScreenSaverQueryInfo, iFpLp) GO(XScreenSaverQueryVersion, iFppp) -GO(XScreenSaverRegister, vFpiup) -GO(XScreenSaverSelectInput, vFppu) -GO(XScreenSaverSetAttributes, vFppiiuuuiupup) +GO(XScreenSaverRegister, iFpiLL) +GO(XScreenSaverSelectInput, vFpLL) +GO(XScreenSaverSetAttributes, vFpLiiuuuiupLp) //need GOM? GO(XScreenSaverSuspend, vFpi) GO(XScreenSaverUnregister, iFpi) -GO(XScreenSaverUnsetAttributes, vFpp) +GO(XScreenSaverUnsetAttributes, vFpL) diff --git a/src/wrapped/wrappedlibxt.c b/src/wrapped/wrappedlibxt.c index 382b03a0bd89f4df99b469bc3a4a78a58617bcc3..2c851ddb584bb3618d1684b6c559f44a265a8465 100644 --- a/src/wrapped/wrappedlibxt.c +++ b/src/wrapped/wrappedlibxt.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxtName = "libXt.so"; -#else - const char* libxtName = "libXt.so.6"; -#endif +const char* libxtName = "libXt.so.6"; +#define ALTNAME "libXt.so" #define LIBNAME libxt diff --git a/src/wrapped/wrappedlibxtst.c b/src/wrapped/wrappedlibxtst.c index ba71efef087ac718dd7a90e7d0fe2c6cbfb54f75..4e83eabc99b7d7018abca723b83694ee766f4093 100644 --- a/src/wrapped/wrappedlibxtst.c +++ b/src/wrapped/wrappedlibxtst.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxtstName = "libXtst.so"; -#else - const char* libxtstName = "libXtst.so.6"; -#endif +const char* libxtstName = "libXtst.so.6"; +#define ALTNAME "libXtst.so" #define LIBNAME libxtst diff --git a/src/wrapped/wrappedlibxxf86vm.c b/src/wrapped/wrappedlibxxf86vm.c index 729248246148d0cd974633ee1ef7e741eddac4ce..aeb97060e8997ece122c64d04479d4d80f975772 100644 --- a/src/wrapped/wrappedlibxxf86vm.c +++ b/src/wrapped/wrappedlibxxf86vm.c @@ -17,11 +17,8 @@ #include "box64context.h" #include "emu/x64emu_private.h" -#ifdef ANDROID - const char* libxxf86vmName = "libXxf86vm.so"; -#else - const char* libxxf86vmName = "libXxf86vm.so.1"; -#endif +const char* libxxf86vmName = "libXxf86vm.so.1"; +#define ALTNAME "libXxf86vm.so" #define LIBNAME libxxf86vm diff --git a/src/wrapped/wrappedlibxxf86vm_private.h b/src/wrapped/wrappedlibxxf86vm_private.h index b418072b29187e039640624f5b6d952941c44547..5dd5a76eac267867ff1ad323cd0c0c4382e0e66f 100644 --- a/src/wrapped/wrappedlibxxf86vm_private.h +++ b/src/wrapped/wrappedlibxxf86vm_private.h @@ -1,5 +1,5 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif GO(XF86VidModeGetViewPort, iFpipp) @@ -17,7 +17,7 @@ GO(XF86VidModeSetGammaRamp, iFpiippp) GO(XF86VidModeGetPermissions, iFpip) GO(XF86VidModeModModeLine, iFpip) GO(XF86VidModeSetViewPort, iFpiii) -GO(XF86VidModeSwitchMode, iFpip) +GO(XF86VidModeSwitchMode, iFpii) GO(XF86VidModeAddModeLine, iFpipp) GO(XF86VidModeSwitchToMode, iFpip) GO(XF86VidModeQueryExtension, iFppp) diff --git a/src/wrapped/wrappedlibz.c b/src/wrapped/wrappedlibz.c index 843ab95a177dfff58d8a4e0d8a082eca402f1bae..d9a07d82463e981577d951c9748554fe40d8e062 100644 --- a/src/wrapped/wrappedlibz.c +++ b/src/wrapped/wrappedlibz.c @@ -15,11 +15,8 @@ #include "emu/x64emu_private.h" #include "box64context.h" -#ifdef ANDROID - const char* libzName = "libz.so"; -#else - const char* libzName = "libz.so.1"; -#endif +const char* libzName = "libz.so.1"; +#define ALTNAME "libz.so" #define LIBNAME libz diff --git a/src/wrapped/wrappedmpg123.c b/src/wrapped/wrappedmpg123.c index 642c01fa7833364f429cd53d6ef3f08ec3f8a88f..1d069781c4a0d97e447be4becf3a9bf73112d6f4 100644 --- a/src/wrapped/wrappedmpg123.c +++ b/src/wrapped/wrappedmpg123.c @@ -17,13 +17,9 @@ #include "box64context.h" #include "emu/x64emu_private.h" -const char* mpg123Name = -#ifdef ANDROID - "libmpg123.so" -#else - "libmpg123.so.0" -#endif - ; +const char* mpg123Name = "libmpg123.so.0"; +#define ALTNAME "libmpg123.so" + #define LIBNAME mpg123 #define ADDED_FUNCTIONS() \ diff --git a/src/wrapped/wrappedopenal.c b/src/wrapped/wrappedopenal.c index 75695c6c7dd1c05523950f1d84b74ba0d6496c9b..fb478f335b5caae56b4e66744b39bfc011c8ae3d 100644 --- a/src/wrapped/wrappedopenal.c +++ b/src/wrapped/wrappedopenal.c @@ -63,8 +63,6 @@ void my_alRequestFoldbackStop(x64emu_t* emu); #include "wrappedlib_init.h" - - void fillALProcWrapper() { int cnt, ret; diff --git a/src/wrapped/wrappedopenal_private.h b/src/wrapped/wrappedopenal_private.h index b0749c1e9b85c4d03e3f72280cf010a39faa883f..60aa4c0df872518c771890adb64dce4b304e2fd5 100644 --- a/src/wrapped/wrappedopenal_private.h +++ b/src/wrapped/wrappedopenal_private.h @@ -2,166 +2,166 @@ #error Meh... #endif -GO(alDopplerFactor,vFf) -GO(alDopplerVelocity,vFf) -GO(alSpeedOfSound,vFf) -GO(alDistanceModel,vFi) -GO(alEnable,vFi) -GO(alDisable,vFi) -GO(alIsEnabled,cFi) -GO(alGetString,pFi) -GO(alGetBooleanv,vFip) -GO(alGetIntegerv,vFip) -GO(alGetFloatv,vFip) -GO(alGetDoublev,vFip) -GO(alGetBoolean, CFi) -GO(alGetInteger,iFi) -GO(alGetFloat,fFi) -GO(alGetDouble,dFi) -GO(alGetError,iFv) -GO(alIsExtensionPresent, CFp) -GOM(alGetProcAddress,pFEp) -GO(alGetEnumValue,iFp) -GO(alListenerf,vFif) -GO(alListener3f,vFifff) -GO(alListenerfv,vFip) -GO(alListeneri,vFii) -GO(alListener3i,vFiiii) -GO(alListeneriv,vFip) -GO(alGetListenerf,vFip) -GO(alGetListener3f,vFippp) -GO(alGetListenerfv,vFip) -GO(alGetListeneri,vFip) -GO(alGetListener3i,vFippp) -GO(alGetListeneriv,vFip) -GO(alGenSources,vFip) -GO(alDeleteSources,vFip) -GO(alIsSource,cFu) -GO(alSourcef,vFuif) -GO(alSource3f,vFuifff) -GO(alSourcefv,vFuip) -GO(alSourcei,vFuii) -GO(alSource3i,vFuiiii) -GO(alSourceiv,vFuip) -GO(alGetSourcef,vFuip) -GO(alGetSource3f,vFuippp) -GO(alGetSourcefv,vFuip) -GO(alGetSourcei,vFuip) -GO(alGetSource3i,vFuippp) -GO(alGetSourceiv,vFuip) -GO(alSourcePlayv,vFip) -GO(alSourceStopv,vFip) -GO(alSourceRewindv,vFip) -GO(alSourcePausev,vFip) -GO(alSourcePlay,vFu) -GO(alSourceStop,vFu) -GO(alSourceRewind,vFu) -GO(alSourcePause,vFu) -GO(alSourceQueueBuffers,vFuip) -GO(alSourceUnqueueBuffers,vFuip) -GO(alGenBuffers,vFip) -GO(alDeleteBuffers,vFip) -GO(alIsBuffer, CFu) -GO(alBufferData,vFuipii) -GO(alBufferf,vFuif) -GO(alBuffer3f,vFuifff) -GO(alBufferfv,vFuip) -GO(alBufferi,vFuii) -GO(alBuffer3i,vFuiiii) -GO(alBufferiv,vFuip) -GO(alGetBufferf,vFuip) -GO(alGetBuffer3f,vFuippp) -GO(alGetBufferfv,vFuip) -GO(alGetBufferi,vFuip) -GO(alGetBuffer3i,vFuippp) -GO(alGetBufferiv,vFuip) +GO(alDopplerFactor, vFf) +GO(alDopplerVelocity, vFf) +GO(alSpeedOfSound, vFf) +GO(alDistanceModel, vFi) +GO(alEnable, vFi) +GO(alDisable, vFi) +GO(alIsEnabled, cFi) +GO(alGetString, pFi) +GO(alGetBooleanv, vFip) +GO(alGetIntegerv, vFip) +GO(alGetFloatv, vFip) +GO(alGetDoublev, vFip) +GO(alGetBoolean, cFi) +GO(alGetInteger, iFi) +GO(alGetFloat, fFi) +GO(alGetDouble, dFi) +GO(alGetError, iFv) +GO(alIsExtensionPresent, cFp) +GOM(alGetProcAddress, pFEp) +GO(alGetEnumValue, iFp) +GO(alListenerf, vFif) +GO(alListener3f, vFifff) +GO(alListenerfv, vFip) +GO(alListeneri, vFii) +GO(alListener3i, vFiiii) +GO(alListeneriv, vFip) +GO(alGetListenerf, vFip) +GO(alGetListener3f, vFippp) +GO(alGetListenerfv, vFip) +GO(alGetListeneri, vFip) +GO(alGetListener3i, vFippp) +GO(alGetListeneriv, vFip) +GO(alGenSources, vFip) +GO(alDeleteSources, vFip) +GO(alIsSource, cFu) +GO(alSourcef, vFuif) +GO(alSource3f, vFuifff) +GO(alSourcefv, vFuip) +GO(alSourcei, vFuii) +GO(alSource3i, vFuiiii) +GO(alSourceiv, vFuip) +GO(alGetSourcef, vFuip) +GO(alGetSource3f, vFuippp) +GO(alGetSourcefv, vFuip) +GO(alGetSourcei, vFuip) +GO(alGetSource3i, vFuippp) +GO(alGetSourceiv, vFuip) +GO(alSourcePlayv, vFip) +GO(alSourceStopv, vFip) +GO(alSourceRewindv, vFip) +GO(alSourcePausev, vFip) +GO(alSourcePlay, vFu) +GO(alSourceStop, vFu) +GO(alSourceRewind, vFu) +GO(alSourcePause, vFu) +GO(alSourceQueueBuffers, vFuip) +GO(alSourceUnqueueBuffers, vFuip) +GO(alGenBuffers, vFip) +GO(alDeleteBuffers, vFip) +GO(alIsBuffer, cFu) +GO(alBufferData, vFuipii) +GO(alBufferf, vFuif) +GO(alBuffer3f, vFuifff) +GO(alBufferfv, vFuip) +GO(alBufferi, vFuii) +GO(alBuffer3i, vFuiiii) +GO(alBufferiv, vFuip) +GO(alGetBufferf, vFuip) +GO(alGetBuffer3f, vFuippp) +GO(alGetBufferfv, vFuip) +GO(alGetBufferi, vFuip) +GO(alGetBuffer3i, vFuippp) +GO(alGetBufferiv, vFuip) -GO(alcCreateContext,pFpp) -GO(alcMakeContextCurrent, CFp) -GO(alcProcessContext,vFp) -GO(alcSuspendContext,vFp) -GO(alcDestroyContext,vFp) -GO(alcGetCurrentContext,pFv) -GO(alcGetContextsDevice,pFp) -GO(alcOpenDevice,pFp) -GO(alcCloseDevice,iFp) -GO(alcGetError,iFp) -GO(alcIsExtensionPresent, CFpp) -GOM(alcGetProcAddress,pFEpp) -GO(alcGetEnumValue,iFpp) -GO(alcGetString,pFpi) -GO(alcGetIntegerv,vFpiip) -GO(alcCaptureOpenDevice,pFpuii) -GO(alcCaptureCloseDevice, CFp) -GO(alcCaptureStart,vFp) -GO(alcCaptureStop,vFp) -GO(alcCaptureSamples,vFppi) +GO(alcCreateContext, pFpp) +GO(alcMakeContextCurrent, cFp) +GO(alcProcessContext, vFp) +GO(alcSuspendContext, vFp) +GO(alcDestroyContext, vFp) +GO(alcGetCurrentContext, pFv) +GO(alcGetContextsDevice, pFp) +GO(alcOpenDevice, pFp) +GO(alcCloseDevice, cFp) +GO(alcGetError, iFp) +GO(alcIsExtensionPresent, cFpp) +GOM(alcGetProcAddress, pFEpp) +GO(alcGetEnumValue, iFpp) +GO(alcGetString, pFpi) +GO(alcGetIntegerv, vFpiip) +GO(alcCaptureOpenDevice, pFpuii) +GO(alcCaptureCloseDevice, cFp) +GO(alcCaptureStart, vFp) +GO(alcCaptureStop, vFp) +GO(alcCaptureSamples, vFppi) GO(alcGetThreadContext, pFv) -GO(alcSetThreadContext, CFp) +GO(alcSetThreadContext, cFp) GO(alcLoopbackOpenDeviceSOFT, pFp) -GO(alcIsRenderFormatSupportedSOFT, CFpiii) +GO(alcIsRenderFormatSupportedSOFT, cFpiii) GO(alcRenderSamplesSOFT, vFppi) GO(alcDevicePauseSOFT, vFp) GO(alcDeviceResumeSOFT, vFp) GO(alcGetStringiSOFT, pFpii) -GO(alcResetDeviceSOFT, CFpp) +GO(alcResetDeviceSOFT, cFpp) GO(alcGetInteger64vSOFT, vFpiip) -GO(alBufferDataStatic,vFiipii) -GO(alBufferSubDataSOFT,vFuipii) -GOM(alRequestFoldbackStart,vFEiiipp) -GOM(alRequestFoldbackStop,vFEv) -GO(alBufferSamplesSOFT,vFuuiiiip) -GO(alBufferSubSamplesSOFT,vFuiiiip) -GO(alGetBufferSamplesSOFT,vFuiiiip) -GO(alIsBufferFormatSupportedSOFT, CFi) -GO(alSourcedSOFT,vFuid) -GO(alSource3dSOFT,vFuiddd) -GO(alSourcedvSOFT,vFuip) -GO(alGetSourcedSOFT,vFuip) -GO(alGetSource3dSOFT,vFuippp) -GO(alGetSourcedvSOFT,vFuip) -GO(alSourcei64SOFT, vFuil) -GO(alSource3i64SOFT, vFuilll) -GO(alSourcei64vSOFT,vFuip) -GO(alGetSourcei64SOFT,vFuip) -GO(alGetSource3i64SOFT,vFuippp) -GO(alGetSourcei64vSOFT,vFuip) -GO(alDeferUpdatesSOFT,vFv) -GO(alProcessUpdatesSOFT,vFv) -GO(alGetStringiSOFT,pFii) +GO(alBufferDataStatic, vFuipii) +GO(alBufferSubDataSOFT, vFuipii) +GOM(alRequestFoldbackStart, vFEiiipp) +GOM(alRequestFoldbackStop, vFEv) +GO(alBufferSamplesSOFT, vFuuiiiip) +GO(alBufferSubSamplesSOFT, vFuiiiip) +GO(alGetBufferSamplesSOFT, vFuiiiip) +GO(alIsBufferFormatSupportedSOFT, cFi) +GO(alSourcedSOFT, vFuid) +GO(alSource3dSOFT, vFuiddd) +GO(alSourcedvSOFT, vFuip) +GO(alGetSourcedSOFT, vFuip) +GO(alGetSource3dSOFT, vFuippp) +GO(alGetSourcedvSOFT, vFuip) +GO(alSourcei64SOFT, vFuiI) +GO(alSource3i64SOFT, vFuiIII) +GO(alSourcei64vSOFT, vFuip) +GO(alGetSourcei64SOFT, vFuip) +GO(alGetSource3i64SOFT, vFuippp) +GO(alGetSourcei64vSOFT, vFuip) +GO(alDeferUpdatesSOFT, vFv) +GO(alProcessUpdatesSOFT, vFv) +GO(alGetStringiSOFT, pFii) -GO(alGenEffects,vFip) -GO(alDeleteEffects,vFip) -GO(alIsEffect,cFu) -GO(alEffecti,vFuii) -GO(alEffectiv,vFuip) -GO(alEffectf,vFuif) -GO(alEffectfv,vFuip) -GO(alGetEffecti,vFuip) -GO(alGetEffectiv,vFuip) -GO(alGetEffectf,vFuip) -GO(alGetEffectfv,vFuip) -GO(alGenFilters,vFip) -GO(alDeleteFilters,vFip) -GO(alIsFilter,cFu) -GO(alFilteri,vFuii) -GO(alFilteriv,vFuip) -GO(alFilterf,vFuif) -GO(alFilterfv,vFuip) -GO(alGetFilteri,vFuip) -GO(alGetFilteriv,vFuip) -GO(alGetFilterf,vFuip) -GO(alGetFilterfv,vFuip) -GO(alGenAuxiliaryEffectSlots,vFip) -GO(alDeleteAuxiliaryEffectSlots,vFip) -GO(alIsAuxiliaryEffectSlot, CFu) -GO(alAuxiliaryEffectSloti,vFuii) -GO(alAuxiliaryEffectSlotiv,vFuip) -GO(alAuxiliaryEffectSlotf,vFuif) -GO(alAuxiliaryEffectSlotfv,vFuip) -GO(alGetAuxiliaryEffectSloti,vFuip) -GO(alGetAuxiliaryEffectSlotiv,vFuip) -GO(alGetAuxiliaryEffectSlotf,vFuip) -GO(alGetAuxiliaryEffectSlotfv,vFuip) +GO(alGenEffects, vFip) +GO(alDeleteEffects, vFip) +GO(alIsEffect, cFu) +GO(alEffecti, vFuii) +GO(alEffectiv, vFuip) +GO(alEffectf, vFuif) +GO(alEffectfv, vFuip) +GO(alGetEffecti, vFuip) +GO(alGetEffectiv, vFuip) +GO(alGetEffectf, vFuip) +GO(alGetEffectfv, vFuip) +GO(alGenFilters, vFip) +GO(alDeleteFilters, vFip) +GO(alIsFilter, cFu) +GO(alFilteri, vFuii) +GO(alFilteriv, vFuip) +GO(alFilterf, vFuif) +GO(alFilterfv, vFuip) +GO(alGetFilteri, vFuip) +GO(alGetFilteriv, vFuip) +GO(alGetFilterf, vFuip) +GO(alGetFilterfv, vFuip) +GO(alGenAuxiliaryEffectSlots, vFip) +GO(alDeleteAuxiliaryEffectSlots, vFip) +GO(alIsAuxiliaryEffectSlot, cFu) +GO(alAuxiliaryEffectSloti, vFuii) +GO(alAuxiliaryEffectSlotiv, vFuip) +GO(alAuxiliaryEffectSlotf, vFuif) +GO(alAuxiliaryEffectSlotfv, vFuip) +GO(alGetAuxiliaryEffectSloti, vFuip) +GO(alGetAuxiliaryEffectSlotiv, vFuip) +GO(alGetAuxiliaryEffectSlotf, vFuip) +GO(alGetAuxiliaryEffectSlotfv, vFuip) diff --git a/src/wrapped/wrappedpangocairo.c b/src/wrapped/wrappedpangocairo.c index bd4464d90fc95e86a8df950d904b043f544ebe67..8bc12819f257130dd393c65610b3659aefef6855 100644 --- a/src/wrapped/wrappedpangocairo.c +++ b/src/wrapped/wrappedpangocairo.c @@ -12,21 +12,16 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* pangocairoName = "libpangocairo-1.0.so"; -#else - const char* pangocairoName = "libpangocairo-1.0.so.0"; -#endif +const char* pangocairoName = "libpangocairo-1.0.so.0"; +#define ALTNAME "libpangocairo-1.0.so" + #define LIBNAME pangocairo #define PRE_INIT \ if(box64_nogtk) \ return -1; -#ifdef ANDROID -#define NEEDED_LIBS "libpango-1.0.so" -#else + #define NEEDED_LIBS "libpango-1.0.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedpng16.c b/src/wrapped/wrappedpng16.c index c1953f833c30a9a60cd8ea68f65cfdc9ea654193..89cb5fe3621211614a94f310486104d8a8050b0c 100644 --- a/src/wrapped/wrappedpng16.c +++ b/src/wrapped/wrappedpng16.c @@ -17,13 +17,9 @@ #include "box64context.h" #include "emu/x64emu_private.h" -const char* png16Name = -#ifdef ANDROID - "libpng16.so" -#else - "libpng16.so.16" -#endif - ; +const char* png16Name = "libpng16.so.16"; +#define ALTNAME "libpng16.so" + #define LIBNAME png16 #include "generated/wrappedpng16types.h" diff --git a/src/wrapped/wrappedpsl5_private.h b/src/wrapped/wrappedpsl5_private.h index 9b6c691d54234c666ce623736ef9778bf70b47cf..69bdb53a9003343b5fcb9808090668c1ec8a48f1 100644 --- a/src/wrapped/wrappedpsl5_private.h +++ b/src/wrapped/wrappedpsl5_private.h @@ -1,7 +1,26 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -error Meh... +#error Meh... #endif -GO(psl_str_to_utf8lower, pFp) +GO(psl_builtin, pFv) +GO(psl_builtin_filename, pFv) +GO(psl_builtin_file_time, lFv) +GO(psl_builtin_outdated, iFv) +GO(psl_builtin_sha1sum, pFv) +GO(psl_check_version_number, iFi) +GO(psl_dist_filename, pFv) +GO(psl_free, vFp) +GO(psl_free_string, vFp) +GO(psl_get_version, pFv) GO(psl_is_cookie_domain_acceptable, iFppp) +GO(psl_is_public_suffix, iFpp) +GO(psl_is_public_suffix2, iFppi) GO(psl_latest, pFp) +GO(psl_load_file, pFp) +GO(psl_load_fp, pFp) +GO(psl_registrable_domain, pFpp) +GO(psl_str_to_utf8lower, iFpppp) +GO(psl_suffix_count, iFp) +GO(psl_suffix_exception_count, iFp) +GO(psl_suffix_wildcard_count, iFp) +GO(psl_unregistrable_domain, pFpp) diff --git a/src/wrapped/wrappedpulse.c b/src/wrapped/wrappedpulse.c index cbdb538f46e97e65dd7ae4e5d916beaeb01b09fc..d902a5385c424801b9aedcf672d191245310a29e 100644 --- a/src/wrapped/wrappedpulse.c +++ b/src/wrapped/wrappedpulse.c @@ -17,11 +17,8 @@ #include "librarian.h" #include "myalign.h" -#ifdef ANDROID - const char* pulseName = "libpulse.so"; -#else - const char* pulseName = "libpulse.so.0"; -#endif +const char* pulseName = "libpulse.so.0"; +#define ALTNAME "libpulse.so" #define LIBNAME pulse diff --git a/src/wrapped/wrappedpulse_private.h b/src/wrapped/wrappedpulse_private.h index fed2e1aa5571da95ee01c518404848f7a44b8415..aa739805e90a7af7facda7669022671f36e07b11 100644 --- a/src/wrapped/wrappedpulse_private.h +++ b/src/wrapped/wrappedpulse_private.h @@ -12,7 +12,7 @@ GO(pa_channel_map_can_fade, iFp) GO(pa_channel_map_compatible, iFpp) GO(pa_channel_map_equal, iFpp) GO(pa_channel_map_init, pFp) -GO(pa_channel_map_init_auto, pFpui) +GO(pa_channel_map_init_auto, pFpuu) GO(pa_channel_map_init_extend, pFpuu) GO(pa_channel_map_init_mono, pFp) GO(pa_channel_map_init_stereo, pFp) @@ -24,27 +24,27 @@ GO(pa_channel_map_to_pretty_name, pFp) GO(pa_channel_map_valid, iFp) GO(pa_channel_position_to_pretty_string, pFi) GO(pa_channel_position_to_string, pFi) -//GO(pa_context_add_autoload, -GOM(pa_context_connect, iFEppip) +//GOM(pa_context_add_autoload, pFppupppp) +GOM(pa_context_connect, iFEppup) GO(pa_context_disconnect, vFp) GOM(pa_context_drain, pFEppp) GO(pa_context_errno, iFp) GOM(pa_context_exit_daemon, pFEppp) -//GO(pa_context_get_autoload_info_by_index, -//GO(pa_context_get_autoload_info_by_name, -//GO(pa_context_get_autoload_info_list, +//GOM(pa_context_get_autoload_info_by_index, pFpupp) +//GOM(pa_context_get_autoload_info_by_name, pFppupp) +//GOM(pa_context_get_autoload_info_list, pFppp) GOM(pa_context_get_card_info_by_index, pFEpupp) -//GO(pa_context_get_card_info_by_name, +//GOM(pa_context_get_card_info_by_name, pFpppp) GOM(pa_context_get_card_info_list, pFEppp) GOM(pa_context_get_client_info, pFEpupp) GOM(pa_context_get_client_info_list, pFEppp) GO(pa_context_get_index, uFp) -//GO(pa_context_get_module_info, +//GOM(pa_context_get_module_info, pFpupp) GOM(pa_context_get_module_info_list, pFEppp) GO(pa_context_get_protocol_version, uFp) -//GO(pa_context_get_sample_info_by_index, -//GO(pa_context_get_sample_info_by_name, -//GO(pa_context_get_sample_info_list, +//GOM(pa_context_get_sample_info_by_index, pFpupp) +//GOM(pa_context_get_sample_info_by_name, pFpppp) +//GOM(pa_context_get_sample_info_list, pFppp) GO(pa_context_get_server, pFp) GOM(pa_context_get_server_info, pFEppp) GO(pa_context_get_server_protocol_version, uFp) @@ -61,27 +61,27 @@ GOM(pa_context_get_source_output_info_list, pFEppp) GO(pa_context_get_state, uFp) GO(pa_context_is_local, iFp) GO(pa_context_is_pending, iFp) -//GO(pa_context_kill_client, -//GO(pa_context_kill_sink_input, -//GO(pa_context_kill_source_output, +//GOM(pa_context_kill_client, pFpupp) +//GOM(pa_context_kill_sink_input, pFpupp) +//GOM(pa_context_kill_source_output, pFpupp) GOM(pa_context_load_module, pFEppppp) GOM(pa_context_move_sink_input_by_index, pFEpuupp) -//GO(pa_context_move_sink_input_by_name, +//GOM(pa_context_move_sink_input_by_name, pFpuppp) GOM(pa_context_move_source_output_by_index, pFEpuupp) -//GO(pa_context_move_source_output_by_name, +//GOM(pa_context_move_source_output_by_name, pFpuppp) GOM(pa_context_new, pFEpp) GOM(pa_context_new_with_proplist, pFEppp) -//GO(pa_context_play_sample, -//GO(pa_context_play_sample_with_proplist, +//GOM(pa_context_play_sample, pFpppupp) +//GOM(pa_context_play_sample_with_proplist, pFpppuppp) GOM(pa_context_proplist_remove, pFEpppp) -GOM(pa_context_proplist_update, pFEpippp) +GOM(pa_context_proplist_update, pFEpuppp) GO(pa_context_ref, pFp) -//GO(pa_context_remove_autoload_by_index, -//GO(pa_context_remove_autoload_by_name, -//GO(pa_context_remove_sample, +//GOM(pa_context_remove_autoload_by_index, pFpupp) +//GOM(pa_context_remove_autoload_by_name, pFppupp) +//GOM(pa_context_remove_sample, pFpppp) GOM(pa_context_rttime_new, pFEpUpp) GOM(pa_context_set_card_profile_by_index, pFEpuppp) -//GO(pa_context_set_card_profile_by_name, +//GOM(pa_context_set_card_profile_by_name, pFppppp) GOM(pa_context_set_default_sink, pFEpppp) GOM(pa_context_set_default_source, pFEpppp) GOM(pa_context_set_event_callback, vFEppp) @@ -89,24 +89,24 @@ GOM(pa_context_set_name, pFEpppp) GOM(pa_context_set_sink_input_mute, pFEpuipp) GOM(pa_context_set_sink_input_volume, pFEpuppp) GOM(pa_context_set_sink_mute_by_index, pFEpuipp) -//GO(pa_context_set_sink_mute_by_name, +//GOM(pa_context_set_sink_mute_by_name, pFppipp) GOM(pa_context_set_sink_port_by_index, pFEpuppp) GOM(pa_context_set_sink_port_by_name, pFEppppp) GOM(pa_context_set_sink_volume_by_index, pFEpuppp) -//GO(pa_context_set_sink_volume_by_name, +//GOM(pa_context_set_sink_volume_by_name, pFppppp) GOM(pa_context_set_source_mute_by_index, pFEpuipp) -//GO(pa_context_set_source_mute_by_name, +//GOM(pa_context_set_source_mute_by_name, pFppipp) GOM(pa_context_set_source_port_by_index, pFEpuppp) GOM(pa_context_set_source_volume_by_index, pFEpuppp) GOM(pa_context_set_source_volume_by_name, pFEppppp) GOM(pa_context_set_state_callback, vFEppp) GOM(pa_context_set_subscribe_callback, vFEppp) -//GO(pa_context_stat, +//GOM(pa_context_stat, pFppp) GOM(pa_context_subscribe, pFEpupp) -//GO(pa_context_suspend_sink_by_index, -//GO(pa_context_suspend_sink_by_name, -//GO(pa_context_suspend_source_by_index, -//GO(pa_context_suspend_source_by_name, +//GOM(pa_context_suspend_sink_by_index, pFpuipp) +//GOM(pa_context_suspend_sink_by_name, pFppipp) +//GOM(pa_context_suspend_source_by_index, pFpuipp) +//GOM(pa_context_suspend_source_by_name, pFppipp) GOM(pa_context_unload_module, pFEpupp) GO(pa_context_unref, vFp) GO(pa_cvolume_avg, uFp) @@ -123,7 +123,7 @@ GO(pa_cvolume_scale, pFpu) GO(pa_cvolume_set, pFpuu) GO(pa_cvolume_set_balance, pFppf) GO(pa_cvolume_set_fade, pFppf) -GO(pa_cvolume_snprint, pFplp) +GO(pa_cvolume_snprint, pFpLp) GO(pa_cvolume_valid, iFp) GOM(pa_ext_device_restore_read_formats, pFEpiupp) GOM(pa_ext_device_restore_read_formats_all, pFEppp) @@ -145,7 +145,7 @@ GO(pa_get_host_name, pFpL) GO(pa_get_library_version, pFv) GO(pa_gettimeofday, pFp) GO(pa_get_user_name, pFpL) -//GO(pa_locale_to_utf8, +GO(pa_locale_to_utf8, pFp) GOM(pa_mainloop_api_once, vFEppp) GO(pa_mainloop_dispatch, iFp) GOM(pa_mainloop_free, vFEp) @@ -227,7 +227,7 @@ GO(pa_stream_new_with_proplist, pFppppp) GO(pa_stream_peek, iFppp) GOM(pa_stream_prebuf, pFEppp) GOM(pa_stream_proplist_remove, pFEpppp) -GOM(pa_stream_proplist_update, pFEpippp) +GOM(pa_stream_proplist_update, pFEpuppp) GO(pa_stream_readable_size, LFp) GO(pa_stream_ref, pFp) GOM(pa_stream_set_buffer_attr, pFEpppp) @@ -249,7 +249,7 @@ GO(pa_stream_unref, vFp) GOM(pa_stream_update_sample_rate, pFEpupp) GOM(pa_stream_update_timing_info, pFEppp) GO(pa_stream_writable_size, LFp) -GOM(pa_stream_write, iFEppLpIi) +GOM(pa_stream_write, iFEppLpIu) GO(pa_strerror, pFi) GO(pa_sw_cvolume_divide, pFppp) GO(pa_sw_cvolume_multiply, pFppp) diff --git a/src/wrapped/wrappedpulsesimple.c b/src/wrapped/wrappedpulsesimple.c index b448040a0f5ee0216f3c810f47fbcf8268727771..0b99b8e4c0bbb1bc647320b99c85c2296ca145ef 100644 --- a/src/wrapped/wrappedpulsesimple.c +++ b/src/wrapped/wrappedpulsesimple.c @@ -17,11 +17,8 @@ #include "librarian.h" #include "myalign.h" -#ifdef ANDROID - const char* pulsesimpleName = "libpulse-simple.so"; -#else - const char* pulsesimpleName = "libpulse-simple.so.0"; -#endif +const char* pulsesimpleName = "libpulse-simple.so.0"; +#define ALTNAME "libpulse-simple.so" #define LIBNAME pulsesimple @@ -29,10 +26,6 @@ if(box64_nopulse) \ return -1; -#ifdef ANDROID -#define NEEDED_LIBS "libpulse.so" -#else #define NEEDED_LIBS "libpulse.so.0" -#endif #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedpulsesimple_private.h b/src/wrapped/wrappedpulsesimple_private.h index fb602d826ebcdeedd55e93ae1325a1c27e99ae45..c2bd718d076067aff64deef5bec5c8ce34ce84f4 100644 --- a/src/wrapped/wrappedpulsesimple_private.h +++ b/src/wrapped/wrappedpulsesimple_private.h @@ -6,6 +6,6 @@ GO(pa_simple_drain, iFpp) GO(pa_simple_flush, iFpp) GO(pa_simple_free, vFp) GO(pa_simple_get_latency, UFpp) -GO(pa_simple_new, pFppipppppp) +GO(pa_simple_new, pFppupppppp) GO(pa_simple_read, iFppLp) GO(pa_simple_write, iFppLp) diff --git a/src/wrapped/wrappedsdl2.c b/src/wrapped/wrappedsdl2.c index 33cbfab6f0439d4b53a8e7fd55745f704018fae1..5c3a8056f95f86a46c0212cc86910fc2cf1ece12 100644 --- a/src/wrapped/wrappedsdl2.c +++ b/src/wrapped/wrappedsdl2.c @@ -237,19 +237,15 @@ EXPORT int64_t my2_SDL_OpenAudio(x64emu_t* emu, void* d, void* o) return ret; } -EXPORT int64_t my2_SDL_OpenAudioDevice(x64emu_t* emu, void* device, int64_t iscapture, void* d, void* o, int64_t allowed) +EXPORT uint32_t my2_SDL_OpenAudioDevice(x64emu_t* emu, void* device, int iscapture, void* d, void* o, int allowed) { - SDL2_AudioSpec *desired = (SDL2_AudioSpec*)d; + SDL2_AudioSpec* desired = (SDL2_AudioSpec*)d; // create a callback - void *fnc = (void*)desired->callback; + void* fnc = (void*)desired->callback; desired->callback = find_AudioCallback_Fct(fnc); - int ret = my->SDL_OpenAudioDevice(device, iscapture, desired, (SDL2_AudioSpec*)o, allowed); - if (ret<=0) { - // error, clean the callback... - desired->callback = fnc; - return ret; - } + uint32_t ret = my->SDL_OpenAudioDevice(device, iscapture, desired, (SDL2_AudioSpec*)o, allowed); + // put back stuff in place? desired->callback = fnc; @@ -288,10 +284,10 @@ EXPORT void *my2_SDL_LoadWAV_RW(x64emu_t* emu, void* a, int b, void* c, void* d, RWNativeEnd2(rw); return r; } -EXPORT int64_t my2_SDL_GameControllerAddMappingsFromRW(x64emu_t* emu, void* a, int b) +EXPORT int my2_SDL_GameControllerAddMappingsFromRW(x64emu_t* emu, void* a, int b) { SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); - int64_t r = my->SDL_GameControllerAddMappingsFromRW(rw, b); + int r = my->SDL_GameControllerAddMappingsFromRW(rw, b); if(b==0) RWNativeEnd2(rw); return r; @@ -416,7 +412,7 @@ EXPORT void *my2_SDL_RWFromMem(x64emu_t* emu, void* a, int b) return AddNativeRW2(emu, (SDL2_RWops_t*)r); } -EXPORT int64_t my2_SDL_RWseek(x64emu_t* emu, void* a, int64_t offset, int64_t whence) +EXPORT int64_t my2_SDL_RWseek(x64emu_t* emu, void* a, int64_t offset, int whence) { //sdl2_my_t *my = (sdl2_my_t *)emu->context->sdl2lib->priv.w.p2; SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); @@ -431,17 +427,17 @@ EXPORT int64_t my2_SDL_RWtell(x64emu_t* emu, void* a) RWNativeEnd2(rw); return ret; } -EXPORT uint64_t my2_SDL_RWread(x64emu_t* emu, void* a, void* ptr, uint64_t size, uint64_t maxnum) +EXPORT size_t my2_SDL_RWread(x64emu_t* emu, void* a, void* ptr, size_t size, size_t maxnum) { SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); - uint64_t ret = RWNativeRead2(rw, ptr, size, maxnum); + size_t ret = RWNativeRead2(rw, ptr, size, maxnum); RWNativeEnd2(rw); return ret; } -EXPORT uint64_t my2_SDL_RWwrite(x64emu_t* emu, void* a, const void* ptr, uint64_t size, uint64_t maxnum) +EXPORT size_t my2_SDL_RWwrite(x64emu_t* emu, void* a, const void* ptr, size_t size, size_t maxnum) { SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); - uint64_t ret = RWNativeWrite2(rw, ptr, size, maxnum); + size_t ret = RWNativeWrite2(rw, ptr, size, maxnum); RWNativeEnd2(rw); return ret; } @@ -550,7 +546,6 @@ static int get_sdl_priv(x64emu_t* emu, const char *sym_str, void **w, void **f) *f = dlsym(emu->context->box64lib, "my2_"#sym); \ return *f != NULL; \ } - #define GOS(sym, _w) GOM(sym, _w) #define DATA if(0); @@ -559,7 +554,6 @@ static int get_sdl_priv(x64emu_t* emu, const char *sym_str, void **w, void **f) #undef GO #undef GOM #undef GO2 - #undef GOS #undef DATA return 0; } diff --git a/src/wrapped/wrappedsdl2_private.h b/src/wrapped/wrappedsdl2_private.h index b3c100cad54ccb5fa670bf15bbefc6bfb234412d..237c191292e26f2c3d8c14dc54ef6680d9e531d3 100644 --- a/src/wrapped/wrappedsdl2_private.h +++ b/src/wrapped/wrappedsdl2_private.h @@ -153,6 +153,7 @@ GO(SDL_GameControllerGetStringForButton, pFi) GO(SDL_GameControllerGetTouchpadFinger, iFpiipppp) GO(SDL_GameControllerGetType, uFp) GO(SDL_GameControllerGetVendor, WFp) +GO(SDL_GameControllerHasAxis, iFpu) GO(SDL_GameControllerHasButton, uFpi) GO(SDL_GameControllerHasLED, iFp) GO(SDL_GameControllerHasRumble, iFp) @@ -483,7 +484,7 @@ GO(SDL_NumHaptics, iFv) GO(SDL_NumJoysticks, iFv) GO(SDL_NumSensors, iFv) GOM(SDL_OpenAudio, iFEpp) -GOM(SDL_OpenAudioDevice, iFEpippi) +GOM(SDL_OpenAudioDevice, uFEpippi) GO(SDL_PauseAudio, vFi) GO(SDL_PauseAudioDevice, vFui) GO(SDL_PeepEvents, iFpiuuu) @@ -731,8 +732,8 @@ GOM(SDL_WriteU8, uFEpu) GOM(SDL_RWseek, IFEpIi) GOM(SDL_RWtell, IFEp) -GOM(SDL_RWread, uFEppuu) -GOM(SDL_RWwrite, uFEppuu) +GOM(SDL_RWread, LFEppLL) +GOM(SDL_RWwrite, LFEppLL) GOM(SDL_RWclose, iFEp) GO2(SDL_mutexP, iFp, SDL_LockMutex) diff --git a/src/wrapped/wrappedtermuxexec_private.h b/src/wrapped/wrappedtermuxexec_private.h index a0ed8e1f1fa82d030b88054fe84e2ab24b79bb47..4c8e334bfbe8f305df3f19bddc4c62dc26a1a5e6 100644 --- a/src/wrapped/wrappedtermuxexec_private.h +++ b/src/wrapped/wrappedtermuxexec_private.h @@ -1,4 +1,4 @@ -#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA) && defined(GOS)) +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) #error Meh... #endif diff --git a/src/wrapped/wrappedudev1.c b/src/wrapped/wrappedudev1.c index b16b3a596211807fbf6d201667587edf32b512a4..fc20efe21dab120d470e47fe5d4d6d67d08e5732 100644 --- a/src/wrapped/wrappedudev1.c +++ b/src/wrapped/wrappedudev1.c @@ -35,23 +35,14 @@ GO(3) \ GO(4) // log_fn ... -#ifdef CONVERT_VALIST #define GO(A) \ static uintptr_t my_log_fn_fct_##A = 0; \ -static void my_log_fn_##A(void* udev, int p, void *f, int l, void* fn, void* fmt, x64_va_list_t args) \ +static void my_log_fn_##A(void* udev, int p, void *f, int l, void* fn, void* fmt, va_list args) \ { \ - CONVERT_VALIST(args) \ - RunFunction(my_log_fn_fct_##A, 7, udev, p, f, l, fn, fmt, VARARGS); \ + char buff[1024] = {0}; \ + vsnprintf(buff, 1023, fmt, args); \ + RunFunction(my_log_fn_fct_##A, 7, udev, p, f, l, fn, "%s", buff); \ } -#else -#define GO(A) \ -static uintptr_t my_log_fn_fct_##A = 0; \ -static void my_log_fn_##A(void* udev, int p, void *f, int l, void* fn, void* fmt, x64_va_list_t args) \ -{ \ - CREATE_VALIST_FROM_VALIST(args, thread_get_emu()->scratch); \ - RunFunction(my_log_fn_fct_##A, 7, udev, p, f, l, fn, fmt, VARARGS); \ -} -#endif SUPER() #undef GO static void* find_log_fn_Fct(void* fct) diff --git a/src/wrapped/wrappedudev1_private.h b/src/wrapped/wrappedudev1_private.h index 3a6f1d9a4f2f36f5bd4f51c21ac4cc5c4204f3ab..0eb88ce3b8773b38d09226a44d039d2ccef3328a 100644 --- a/src/wrapped/wrappedudev1_private.h +++ b/src/wrapped/wrappedudev1_private.h @@ -1,12 +1,12 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error Meh.... +#error Meh... #endif GO(udev_device_ref, pFp) GO(udev_device_unref, pFp) GO(udev_device_get_udev, pFp) GO(udev_device_new_from_syspath, pFpp) -GO(udev_device_new_from_devnum, pFpCu) +GO(udev_device_new_from_devnum, pFpcU) GO(udev_device_new_from_subsystem_sysname, pFppp) GO(udev_device_new_from_environment, pFp) GO(udev_device_get_parent, pFp) @@ -24,7 +24,7 @@ GO(udev_device_get_properties_list_entry, pFp) GO(udev_device_get_tags_list_entry, pFp) GO(udev_device_get_property_value, pFpp) GO(udev_device_get_driver, pFp) -GO(udev_device_get_devnum, uFp) +GO(udev_device_get_devnum, UFp) GO(udev_device_get_action, pFp) GO(udev_device_get_sysattr_value, pFpp) GO(udev_device_get_sysattr_list_entry, pFp) @@ -69,7 +69,7 @@ GO(udev_new, pFv) GO(udev_ref, pFp) GO(udev_unref, pFp) GO(udev_queue_ref, pFp) -GO(udev_queue_unref, vFp) +GO(udev_queue_unref, pFp) GO(udev_queue_get_udev, pFp) GO(udev_queue_new, pFp) GO(udev_queue_get_kernel_seqnum, UFp) @@ -93,4 +93,4 @@ GO(udev_hwdb_ref, pFp) GO(udev_hwdb_unref, pFp) GO(udev_hwdb_new, pFp) GO(udev_hwdb_get_properties_list_entry, pFppu) -GO(udev_util_encode_string, iFppL) \ No newline at end of file +GO(udev_util_encode_string, iFppL) diff --git a/src/wrapped/wrappedvorbisfile.c b/src/wrapped/wrappedvorbisfile.c index 5ab7a55764610ca43cd0f7f5145d7982462494a7..402190477e1ab9272f0b20d7ac23a49e22f3e0dc 100644 --- a/src/wrapped/wrappedvorbisfile.c +++ b/src/wrapped/wrappedvorbisfile.c @@ -18,11 +18,8 @@ #include "myalign.h" #include "bridge.h" -#ifdef ANDROID - const char* vorbisfileName = "libvorbisfile.so"; -#else - const char* vorbisfileName = "libvorbisfile.so.3"; -#endif +const char* vorbisfileName = "libvorbisfile.so.3"; +#define ALTNAME "libvorbisfile.so" #define LIBNAME vorbisfile @@ -164,10 +161,4 @@ EXPORT int32_t my_ov_test_callbacks(x64emu_t* emu, void* datasource, void* vf, v return ret; } -#ifdef PANDORA -// No really ok, because it will depends on the order of initialisation -#define PRE_INIT \ - vorbisfileName = (box86->sdl1mixerlib || box86->sdl2mixerlib)?vorbisfileNameAlt:vorbisfileNameReg; -#endif - #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedvulkan.c b/src/wrapped/wrappedvulkan.c index 82f137f2f1066aa0c8c4b3d2109605b37083b1c5..28bcb26038b80253398f71b32614095a180e6f11 100644 --- a/src/wrapped/wrappedvulkan.c +++ b/src/wrapped/wrappedvulkan.c @@ -685,6 +685,7 @@ DESTROY(vkDestroyDebugUtilsMessengerEXT) DESTROY64(vkDestroySurfaceKHR) +CREATE(vkCreateSamplerYcbcrConversionKHR) DESTROY64(vkDestroySamplerYcbcrConversionKHR) DESTROY64(vkDestroyValidationCacheEXT) diff --git a/src/wrapped/wrappedvulkan_private.h b/src/wrapped/wrappedvulkan_private.h index 436ee0d934dcd1fe4aa673a4240f677384a83608..8d8b0200a51bfa23fff48aeff9536e6a2695b4d6 100644 --- a/src/wrapped/wrappedvulkan_private.h +++ b/src/wrapped/wrappedvulkan_private.h @@ -983,3 +983,11 @@ GO(vkCmdSetRenderingInputAttachmentIndicesKHR, vFpp) // VK_KHR_line_rasterization GO(vkCmdSetLineStippleKHR, vFpuW) + +// VK_KHR_external_semaphore_win32 +GO(vkGetSemaphoreWin32HandleKHR, iFppp) +GO(vkImportSemaphoreWin32HandleKHR, iFpp) + +// VK_KHR_win32_keyed_mutex +GO(wine_vkAcquireKeyedMutex, iFpUUu) +GO(wine_vkReleaseKeyedMutex, iFpUU) \ No newline at end of file diff --git a/src/wrapped/wrappedwaylandclient.c b/src/wrapped/wrappedwaylandclient.c index 4fe3b8f61d230672ac3d23ec16ed014fd4875f22..1250c5c902d389c2494c8ef5a4a9512b5390be31 100644 --- a/src/wrapped/wrappedwaylandclient.c +++ b/src/wrapped/wrappedwaylandclient.c @@ -3,6 +3,7 @@ #include #define _GNU_SOURCE /* See feature_test_macros(7) */ #include +#include #include "wrappedlibs.h" @@ -34,6 +35,40 @@ GO(2) \ GO(3) \ GO(4) +//wl_log_func_t +#ifdef CONVERT_VALIST +#define GO(A) \ +static uintptr_t my_wl_log_func_t_fct_##A = 0; \ +static void my_wl_log_func_t_##A(void* fmt, x64_va_list_t args) \ +{ \ + CONVERT_VALIST(args) \ + RunFunction(my_wl_log_func_t_fct_##A, 2, fmt, VARARGS); \ + } + #else +#define GO(A) \ +static uintptr_t my_wl_log_func_t_fct_##A = 0; \ +static void my_wl_log_func_t_##A(void* fmt, x64_va_list_t args) \ +{ \ + CREATE_VALIST_FROM_VALIST(args, thread_get_emu()->scratch); \ + RunFunction(my_wl_log_func_t_fct_##A, 2, fmt, VARARGS); \ +} +#endif +SUPER() +#undef GO +static void* find_wl_log_func_t_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_wl_log_func_t_fct_##A == (uintptr_t)fct) return my_wl_log_func_t_##A; + SUPER() + #undef GO + #define GO(A) if(my_wl_log_func_t_fct_##A == 0) {my_wl_log_func_t_fct_##A = (uintptr_t)fct; return my_wl_log_func_t_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_log_func_t callback\n"); + return NULL; +} + // wl_registry_listener ... typedef struct my_wl_registry_listener_s { uintptr_t global; //vFppupu @@ -561,4 +596,9 @@ EXPORT int my_wl_proxy_add_listener(x64emu_t* emu, void* proxy, void** l, void* return my->wl_proxy_add_listener(proxy, l, data); } +EXPORT void my_wl_log_set_handler_client(x64emu_t* emu, void* f) +{ + my->wl_log_set_handler_client(find_wl_log_func_t_Fct(f)); +} + #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedwaylandclient_private.h b/src/wrapped/wrappedwaylandclient_private.h index ba81df11db87a3a0cd8cf0abd9083baaef6777d5..aa67f11c662341edcc36b455318ddc2122645755 100644 --- a/src/wrapped/wrappedwaylandclient_private.h +++ b/src/wrapped/wrappedwaylandclient_private.h @@ -1,18 +1,18 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif GO(wl_array_add, pFpL) -//GO(wl_array_copy, +GO(wl_array_copy, iFpp) GO(wl_array_init, vFp) GO(wl_array_release, vFp) DATA(wl_buffer_interface, 40) -//DATA(wl_callback_interface, +//DATA(wl_callback_interface, 0) DATA(wl_compositor_interface, 40) -//DATA(wl_data_device_interface, -//DATA(wl_data_device_manager_interface, -//DATA(wl_data_offer_interface, -//DATA(wl_data_source_interface, +//DATA(wl_data_device_interface, 0) +//DATA(wl_data_device_manager_interface, 0) +//DATA(wl_data_offer_interface, 0) +//DATA(wl_data_source_interface, 0) GO(wl_display_cancel_read, vFp) GO(wl_display_connect, pFp) GO(wl_display_connect_to_fd, pFi) @@ -25,7 +25,7 @@ GO(wl_display_dispatch_queue_pending, iFpp) GO(wl_display_flush, iFp) GO(wl_display_get_error, iFp) GO(wl_display_get_fd, iFp) -//GO(wl_display_get_protocol_error, +GO(wl_display_get_protocol_error, uFppp) DATA(wl_display_interface, 40) GO(wl_display_prepare_read, iFp) GO(wl_display_prepare_read_queue, iFpp) @@ -34,36 +34,36 @@ GO(wl_display_roundtrip, iFp) GO(wl_display_roundtrip_queue, iFpp) GO(wl_event_queue_destroy, vFp) DATA(wl_keyboard_interface, 40) -//GO(wl_list_empty, +GO(wl_list_empty, iFp) GO(wl_list_init, vFp) GO(wl_list_insert, vFpp) -//GO(wl_list_insert_list, -//GO(wl_list_length, +GO(wl_list_insert_list, vFpp) +GO(wl_list_length, iFp) GO(wl_list_remove, vFp) -//GO(wl_log_set_handler_client, +GOM(wl_log_set_handler_client, vFEp) DATA(wl_output_interface, 40) DATA(wl_pointer_interface, 40) -//GO(wl_proxy_add_dispatcher, +//GOM(wl_proxy_add_dispatcher, iFEpppp) GOM(wl_proxy_add_listener, iFEppp) GO(wl_proxy_create, pFpp) GO(wl_proxy_create_wrapper, pFp) GO(wl_proxy_destroy, vFp) -//GO(wl_proxy_get_class, +GO(wl_proxy_get_class, pFp) GO(wl_proxy_get_id, uFp) GO(wl_proxy_get_listener, pFp) -//GO(wl_proxy_get_tag, +GO(wl_proxy_get_tag, pFp) GO(wl_proxy_get_user_data, pFp) GO(wl_proxy_get_version, uFp) GO(wl_proxy_marshal, vFpupppppppppp) //VAARGS GO(wl_proxy_marshal_array, vFpup) GO(wl_proxy_marshal_array_constructor, pFpupp) GO(wl_proxy_marshal_array_constructor_versioned, pFpuppu) -//GO(wl_proxy_marshal_array_flags, +GO(wl_proxy_marshal_array_flags, pFpupuup) GO(wl_proxy_marshal_constructor, pFpupppppppppppppppp) //VAARGS GO(wl_proxy_marshal_constructor_versioned, pFpupupppppppppppppppp) //VAARGS GO(wl_proxy_marshal_flags, pFpupuupppppppppppppppppppp) //VAARGS GO(wl_proxy_set_queue, vFpp) -//GO(wl_proxy_set_tag, +GO(wl_proxy_set_tag, vFpp) GO(wl_proxy_set_user_data, vFpp) GO(wl_proxy_wrapper_destroy, vFp) DATA(wl_region_interface, 40) diff --git a/src/wrapped/wrappedxinerama.c b/src/wrapped/wrappedxinerama.c index a3807b85c97122cfb494a5bc366479731a4187a4..ac53ac3ba8ca3111a7e952c18195a411b88477ad 100644 --- a/src/wrapped/wrappedxinerama.c +++ b/src/wrapped/wrappedxinerama.c @@ -11,11 +11,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* xineramaName = "libXinerama.so"; -#else - const char* xineramaName = "libXinerama.so.1"; -#endif +const char* xineramaName = "libXinerama.so.1"; +#define ALTNAME "libXinerama.so" #define LIBNAME xinerama diff --git a/src/wrapped/wrappedxinerama_private.h b/src/wrapped/wrappedxinerama_private.h index ddc9c299b176d35ab3dceaca7895e9d96462e6fa..16acfa440e668ff2a72b2966eac752141a3923dc 100644 --- a/src/wrapped/wrappedxinerama_private.h +++ b/src/wrapped/wrappedxinerama_private.h @@ -1,5 +1,5 @@ #if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) -#error meh! +#error Meh... #endif GO(XineramaIsActive, iFp) @@ -7,8 +7,8 @@ GO(XineramaQueryExtension, iFppp) GO(XineramaQueryScreens, pFpp) GO(XineramaQueryVersion, iFppp) GO(XPanoramiXAllocInfo, pFv) -GO(XPanoramiXGetScreenCount, iFppp) -GO(XPanoramiXGetScreenSize, iFppip) -GO(XPanoramiXGetState, iFppp) +GO(XPanoramiXGetScreenCount, iFpLp) +GO(XPanoramiXGetScreenSize, iFpLip) +GO(XPanoramiXGetState, iFpLp) GO(XPanoramiXQueryExtension, iFppp) GO(XPanoramiXQueryVersion, iFppp) diff --git a/src/wrapped/wrappedxkbcommon.c b/src/wrapped/wrappedxkbcommon.c index c0be8c64e97829090c6d992868d6db8fd8b717d3..5515e0b8eb27f2030b2ad233d8ec667ee97169a3 100644 --- a/src/wrapped/wrappedxkbcommon.c +++ b/src/wrapped/wrappedxkbcommon.c @@ -12,6 +12,8 @@ #include "x64emu.h" const char* xkbcommonName = "libxkbcommon.so.0"; +#define ALTNAME "libxkbcommon.so" + #define LIBNAME xkbcommon #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedxkbcommon_private.h b/src/wrapped/wrappedxkbcommon_private.h index ccbc71ed7e3af32b9ff2243d5560f6ce16bdb4f4..d06f296c12c35bc2490aae4aa752eb243449502c 100644 --- a/src/wrapped/wrappedxkbcommon_private.h +++ b/src/wrapped/wrappedxkbcommon_private.h @@ -7,7 +7,7 @@ GO(xkb_compose_state_feed, iFpu) //GO(xkb_compose_state_get_compose_table, //GO(xkb_compose_state_get_one_sym, GO(xkb_compose_state_get_status, iFp) -//GO(xkb_compose_state_get_utf8, +GO(xkb_compose_state_get_utf8, iFppL) GO(xkb_compose_state_new, pFpi) //GO(xkb_compose_state_ref, GO(xkb_compose_state_reset, vFp) diff --git a/src/wrapped/wrappedxkbcommonx11.c b/src/wrapped/wrappedxkbcommonx11.c index 04f945e27db4ba8967ee5cfbcd204c5ea6a4ea57..81c8e5be431ecd96bd5f9a282f027230d2d7c50e 100644 --- a/src/wrapped/wrappedxkbcommonx11.c +++ b/src/wrapped/wrappedxkbcommonx11.c @@ -12,6 +12,8 @@ #include "x64emu.h" const char* xkbcommonx11Name = "libxkbcommon-x11.so.0"; +#define ALTNAME "libxkbcommon-x11.so" + #define LIBNAME xkbcommonx11 #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedxkbregistry.c b/src/wrapped/wrappedxkbregistry.c index 437b8a848a06da65be3847d7f070f260d94d4d0d..94287fbfa6d34be9eae61730e9da97c8e4b285df 100644 --- a/src/wrapped/wrappedxkbregistry.c +++ b/src/wrapped/wrappedxkbregistry.c @@ -12,6 +12,8 @@ #include "x64emu.h" const char* xkbregistryName = "libxkbregistry.so.0"; +#define ALTNAME "libxkbregistry.so" + #define LIBNAME xkbregistry #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedxml2.c b/src/wrapped/wrappedxml2.c index 1c352c6b2bf32acc70beaa30c33d67a162f5f437..8c52e0b0abbdce0392dd8e72c662eaebef2ef873 100644 --- a/src/wrapped/wrappedxml2.c +++ b/src/wrapped/wrappedxml2.c @@ -18,13 +18,9 @@ #include "callback.h" #include "myalign.h" -const char* xml2Name = -#ifdef ANDROID - "libxml2.so" -#else - "libxml2.so.2" -#endif - ; +const char* xml2Name = "libxml2.so.2"; +#define ALTNAME "libxml2.so" + #define LIBNAME xml2 diff --git a/src/wrapped/wrappedxshmfence.c b/src/wrapped/wrappedxshmfence.c index e6f83b841dc4b32e16a7450132a706b8c5ab3a69..91c4e20d4a6f25bb359a7b2b24e1f5a8371763a0 100644 --- a/src/wrapped/wrappedxshmfence.c +++ b/src/wrapped/wrappedxshmfence.c @@ -11,11 +11,8 @@ #include "librarian/library_private.h" #include "x64emu.h" -#ifdef ANDROID - const char* xshmfenceName = "libxshmfence.so"; -#else - const char* xshmfenceName = "libxshmfence.so.1"; -#endif +const char* xshmfenceName = "libxshmfence.so.1"; +#define ALTNAME "libxshmfence.so" #define LIBNAME xshmfence diff --git a/src/wrapped/wrappedxslt.c b/src/wrapped/wrappedxslt.c index 35bcc75109bb3f208812a5578392c2da300f36f7..01cff424f93a304fbcf171948ab1bb800aa77d47 100644 --- a/src/wrapped/wrappedxslt.c +++ b/src/wrapped/wrappedxslt.c @@ -17,13 +17,9 @@ #include "callback.h" #include "globalsymbols.h" -const char *xsltName = -#ifdef ANDROID - "libxslt.so" -#else - "libxslt.so.1" -#endif - ; +const char *xsltName = "libxslt.so.1"; +#define ALTNAME "libxslt.so" + #define LIBNAME xslt #define ADDED_FUNCTIONS() \ diff --git a/src/wrapped32/generated/converter32.c b/src/wrapped32/generated/converter32.c new file mode 100644 index 0000000000000000000000000000000000000000..6748be0be4e1a703e4126b563d482dbc6e013598 --- /dev/null +++ b/src/wrapped32/generated/converter32.c @@ -0,0 +1,767 @@ +// Manually created for now +#include "converter32.h" + +void from_struct_p(struct_p_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_p(ptr_t d, const struct_p_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; +} + +void from_struct_l(struct_l_t *dest, ptr_t s) { + if(!s) return; + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_long(*(long_t*)src); src += 4; +} +void to_struct_l(ptr_t d, const struct_l_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(long_t*)dest = to_long(src->L0); dest += 4; +} + +void from_struct_L(struct_L_t *dest, ptr_t s) { + if(!s) return; + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(ulong_t*)src); src += 4; +} +void to_struct_L(ptr_t d, const struct_L_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; +} + +void from_struct_ll(struct_ll_t *dest, ptr_t s) { + if(!s) return; + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_long(*(long_t*)src); src += 4; + dest->L1 = from_long(*(long_t*)src); src += 4; +} +void to_struct_ll(ptr_t d, const struct_ll_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(long_t*)dest = to_long(src->L0); dest += 4; + *(long_t*)dest = to_long(src->L1); dest += 4; +} + +void from_struct_LL(struct_LL_t *dest, ptr_t s) { + if(!s) return; + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(ulong_t*)src); src += 4; + dest->L1 = from_ulong(*(ulong_t*)src); src += 4; +} +void to_struct_LL(ptr_t d, const struct_LL_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; + *(ulong_t*)dest = to_ulong(src->L1); dest += 4; +} +void from_struct_LC(struct_LC_t *dest, ptr_t s) { + if(!s) return; + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(ulong_t*)src); src += 4; + dest->C1 = *(uint8_t*)src; src += 1; +} +void to_struct_LC(ptr_t d, const struct_LC_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; + *(uint8_t*)dest = to_ulong(src->C1); dest += 1; +} + +void from_struct_liu(struct_liu_t *dest, ptr_t s) { + if(!s) return; + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->l0 = from_long(*(long_t*)src); src += 4; + dest->i1 = *(int*)src; src += 4; + dest->u2 = *(uint32_t*)src; src += 4; +} +void to_struct_liu(ptr_t d, const struct_liu_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(long_t*)dest = to_long(src->l0); dest += 4; + *(int*)dest = src->i1; dest += 2; + *(uint32_t*)dest = src->u2; dest += 2; +} + +void from_struct_llll(struct_llll_t *dest, ptr_t s) { + if(!s) return; + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->l0 = from_long(*(ulong_t*)src); src += 4; + dest->l1 = from_long(*(ulong_t*)src); src += 4; + dest->l2 = from_long(*(ulong_t*)src); src += 4; + dest->l3 = from_long(*(ulong_t*)src); src += 4; +} +void to_struct_llll(ptr_t d, const struct_llll_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_long(src->l0); dest += 4; + *(ulong_t*)dest = to_long(src->l1); dest += 4; + *(ulong_t*)dest = to_long(src->l2); dest += 4; + *(ulong_t*)dest = to_long(src->l3); dest += 4; +} + +void from_struct_LLLL(struct_LLLL_t *dest, ptr_t s) { + if(!s) return; + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(ulong_t*)src); src += 4; + dest->L1 = from_ulong(*(ulong_t*)src); src += 4; + dest->L2 = from_ulong(*(ulong_t*)src); src += 4; + dest->L3 = from_ulong(*(ulong_t*)src); src += 4; +} +void to_struct_LLLL(ptr_t d, const struct_LLLL_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; + *(ulong_t*)dest = to_ulong(src->L1); dest += 4; + *(ulong_t*)dest = to_ulong(src->L2); dest += 4; + *(ulong_t*)dest = to_ulong(src->L3); dest += 4; +} + +void from_struct_LLLLLLLLLL(struct_LLLLLLLLLL_t *dest, ptr_t s) { + if(!s) return; + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(ulong_t*)src); src += 4; + dest->L1 = from_ulong(*(ulong_t*)src); src += 4; + dest->L2 = from_ulong(*(ulong_t*)src); src += 4; + dest->L3 = from_ulong(*(ulong_t*)src); src += 4; + dest->L4 = from_ulong(*(ulong_t*)src); src += 4; + dest->L5 = from_ulong(*(ulong_t*)src); src += 4; + dest->L6 = from_ulong(*(ulong_t*)src); src += 4; + dest->L7 = from_ulong(*(ulong_t*)src); src += 4; + dest->L8 = from_ulong(*(ulong_t*)src); src += 4; + dest->L9 = from_ulong(*(ulong_t*)src); src += 4; +} +void to_struct_LLLLLLLLLL(ptr_t d, const struct_LLLLLLLLLL_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; + *(ulong_t*)dest = to_ulong(src->L1); dest += 4; + *(ulong_t*)dest = to_ulong(src->L2); dest += 4; + *(ulong_t*)dest = to_ulong(src->L3); dest += 4; + *(ulong_t*)dest = to_ulong(src->L4); dest += 4; + *(ulong_t*)dest = to_ulong(src->L5); dest += 4; + *(ulong_t*)dest = to_ulong(src->L6); dest += 4; + *(ulong_t*)dest = to_ulong(src->L7); dest += 4; + *(ulong_t*)dest = to_ulong(src->L8); dest += 4; + *(ulong_t*)dest = to_ulong(src->L9); dest += 4; +} + +void from_struct_LLLLLLLLLLLLLLLLLL(struct_LLLLLLLLLLLLLLLLLL_t *dest, ptr_t s) { + if(!s) return; + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(ulong_t*)src); src += 4; + dest->L1 = from_ulong(*(ulong_t*)src); src += 4; + dest->L2 = from_ulong(*(ulong_t*)src); src += 4; + dest->L3 = from_ulong(*(ulong_t*)src); src += 4; + dest->L4 = from_ulong(*(ulong_t*)src); src += 4; + dest->L5 = from_ulong(*(ulong_t*)src); src += 4; + dest->L6 = from_ulong(*(ulong_t*)src); src += 4; + dest->L7 = from_ulong(*(ulong_t*)src); src += 4; + dest->L8 = from_ulong(*(ulong_t*)src); src += 4; + dest->L9 = from_ulong(*(ulong_t*)src); src += 4; + dest->L10 = from_ulong(*(ulong_t*)src); src += 4; + dest->L11 = from_ulong(*(ulong_t*)src); src += 4; + dest->L12 = from_ulong(*(ulong_t*)src); src += 4; + dest->L13 = from_ulong(*(ulong_t*)src); src += 4; + dest->L14 = from_ulong(*(ulong_t*)src); src += 4; + dest->L15 = from_ulong(*(ulong_t*)src); src += 4; + dest->L16 = from_ulong(*(ulong_t*)src); src += 4; + dest->L17 = from_ulong(*(ulong_t*)src); src += 4; +} +void to_struct_LLLLLLLLLLLLLLLLLL(ptr_t d, const struct_LLLLLLLLLLLLLLLLLL_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; + *(ulong_t*)dest = to_ulong(src->L1); dest += 4; + *(ulong_t*)dest = to_ulong(src->L2); dest += 4; + *(ulong_t*)dest = to_ulong(src->L3); dest += 4; + *(ulong_t*)dest = to_ulong(src->L4); dest += 4; + *(ulong_t*)dest = to_ulong(src->L5); dest += 4; + *(ulong_t*)dest = to_ulong(src->L6); dest += 4; + *(ulong_t*)dest = to_ulong(src->L7); dest += 4; + *(ulong_t*)dest = to_ulong(src->L8); dest += 4; + *(ulong_t*)dest = to_ulong(src->L9); dest += 4; + *(ulong_t*)dest = to_ulong(src->L10); dest += 4; + *(ulong_t*)dest = to_ulong(src->L11); dest += 4; + *(ulong_t*)dest = to_ulong(src->L12); dest += 4; + *(ulong_t*)dest = to_ulong(src->L13); dest += 4; + *(ulong_t*)dest = to_ulong(src->L14); dest += 4; + *(ulong_t*)dest = to_ulong(src->L15); dest += 4; + *(ulong_t*)dest = to_ulong(src->L16); dest += 4; + *(ulong_t*)dest = to_ulong(src->L17); dest += 4; +} + +void from_struct_h(struct_h_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->h0 = from_hash(*(ulong_t*)src); src += 4; +} +void to_struct_h(ptr_t d, const struct_h_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_hash(src->h0); dest += 4; +} + +void from_struct_H(struct_H_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->H0 = from_hash_d(*(ulong_t*)src); src += 4; +} +void to_struct_H(ptr_t d, const struct_H_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_hash_d(src->H0); dest += 4; +} + +void from_struct_ppppp(struct_ppppp_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; + dest->p1 = from_ptrv(*(ptr_t*)src); src += 4; + dest->p2 = from_ptrv(*(ptr_t*)src); src += 4; + dest->p3 = from_ptrv(*(ptr_t*)src); src += 4; + dest->p4 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_ppppp(ptr_t d, const struct_ppppp_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p1); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p2); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p3); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p4); dest += 4; +} + +void from_struct_iiiiiiiiilt(struct_iiiiiiiiilt_t* dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->i0 = *(int*)src; src += 4; + dest->i1 = *(int*)src; src += 4; + dest->i2 = *(int*)src; src += 4; + dest->i3 = *(int*)src; src += 4; + dest->i4 = *(int*)src; src += 4; + dest->i5 = *(int*)src; src += 4; + dest->i6 = *(int*)src; src += 4; + dest->i7 = *(int*)src; src += 4; + dest->i8 = *(int*)src; src += 4; + dest->l9 = from_long(*(long_t*)src); src += 4; + dest->p10 = *(void**)src; src += 4; +} +void to_struct_iiiiiiiiilt(ptr_t d, const struct_iiiiiiiiilt_t* src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(int*)dest = src->i0; dest += 4; + *(int*)dest = src->i1; dest += 4; + *(int*)dest = src->i2; dest += 4; + *(int*)dest = src->i3; dest += 4; + *(int*)dest = src->i4; dest += 4; + *(int*)dest = src->i5; dest += 4; + *(int*)dest = src->i6; dest += 4; + *(int*)dest = src->i7; dest += 4; + *(int*)dest = src->i8; dest += 4; + *(long_t*)dest = to_long(src->l9); dest += 4; + *(ptr_t*)dest = to_cstring(src->p10); dest += 4; +} +void from_struct_up(struct_up_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->u0 = *(uint32_t*)src; src += 4; + dest->p1 = *(void**)src; src += 4; +} +void to_struct_up(ptr_t d, const struct_up_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(uint32_t*)dest = src->u0; dest += 4; + *(ptr_t*)dest = to_ptrv(src->p1); dest += 4; +} +void from_struct_LWWWcc(struct_LWWWcc_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(uint32_t*)src); src += 4; + dest->W1 = *(uint16_t*)src; src += 2; + dest->W2 = *(uint16_t*)src; src += 2; + dest->W3 = *(uint16_t*)src; src += 2; + dest->c4 = *(char*)src; src += 1; + dest->c5 = *(char*)src; src += 1; +} +void to_struct_LWWWcc(ptr_t d, const struct_LWWWcc_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(uint32_t*)dest = to_ulong(src->L0); dest += 4; + *(uint16_t*)dest = src->W1; dest += 2; + *(uint16_t*)dest = src->W2; dest += 2; + *(uint16_t*)dest = src->W3; dest += 2; + *(char*)dest = src->c4; dest += 1; + *(char*)dest = src->c5; dest += 1; +} +void from_struct_pLiL(struct_pLiL_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; + dest->L1 = from_ulong(*(ulong_t*)src); src += 4; + dest->i2 = *(int*)src; src += 4; + dest->L3 = from_ulong(*(ulong_t*)src); src += 4; +} +void to_struct_pLiL(ptr_t d, const struct_pLiL_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(ulong_t*)dest = to_ulong(src->L1); dest += 4; + *(int*)dest = src->i2; dest += 4; + *(ulong_t*)dest = to_ulong(src->L3); dest += 4; +} +void from_struct_Lip(struct_Lip_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(ulong_t*)src); src += 4; + dest->i1 = *(int*)src; src += 4; + dest->p2 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_Lip(ptr_t d, const struct_Lip_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; + *(int*)dest = src->i1; dest += 4; + *(ptr_t*)dest = to_ptrv(src->p2); dest += 4; +} +void from_struct_Lipi(struct_Lipi_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(ulong_t*)src); src += 4; + dest->i1 = *(int*)src; src += 4; + dest->p2 = from_ptrv(*(ptr_t*)src); src += 4; + dest->i3 = *(int*)src; src += 4; +} +void to_struct_Lipi(ptr_t d, const struct_Lipi_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; + *(int*)dest = src->i1; dest += 4; + *(ptr_t*)dest = to_ptrv(src->p2); dest += 4; + *(int*)dest = src->i3; dest += 4; +} +void from_struct_LLii(struct_LLii_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(ulong_t*)src); src += 4; + dest->L1 = from_ulong(*(ulong_t*)src); src += 4; + dest->i2 = *(int*)src; src += 4; + dest->i3 = *(int*)src; src += 4; +} +void to_struct_LLii(ptr_t d, const struct_LLii_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; + *(ulong_t*)dest = to_ulong(src->L1); dest += 4; + *(int*)dest = src->i2; dest += 4; + *(int*)dest = src->i3; dest += 4; +} +void from_struct_uuipWCCp(struct_uuipWCCp_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->u0 = *(uint32_t*)src; src += 4; + dest->u1 = *(uint32_t*)src; src += 4; + dest->i2 = *(int*)src; src += 4; + dest->p3 = from_ptrv(*(ptr_t*)src); src += 4; + dest->u4 = *(uint16_t*)src; src += 2; + dest->u5 = *(uint8_t*)src; src += 1; + dest->u6 = *(uint8_t*)src; src += 1; + dest->p7 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_uuipWCCp(ptr_t d, const struct_uuipWCCp_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(uint32_t*)dest = src->u0; dest += 4; + *(uint32_t*)dest = src->u1; dest += 4; + *(int*)dest = src->i2; dest += 4; + *(ptr_t*)dest = to_ptrv(src->p3); dest += 4; + *(uint16_t*)dest = src->u4; dest += 2; + *(uint8_t*)dest = src->u5; dest += 1; + *(uint8_t*)dest = src->u6; dest += 1; + *(ptr_t*)dest = to_ptrv(src->p7); dest += 4; +} + +void from_struct_pLiLLLii(struct_pLiLLLii_t *dest, ptr_t s) +{ + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; + dest->L1 = from_ulong(*(ulong_t*)src); src += 4; + dest->i2 = *(int*)src; src += 4; + dest->L3 = from_ulong(*(ulong_t*)src); src += 4; + dest->L4 = from_ulong(*(ulong_t*)src); src += 4; + dest->L5 = from_ulong(*(ulong_t*)src); src += 4; + dest->i6 = *(int*)src; src += 4; + dest->i7 = *(int*)src; src += 4; +} +void to_struct_pLiLLLii(ptr_t d, const struct_pLiLLLii_t *src) +{ + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(ulong_t*)dest = to_ulong(src->L1); dest += 4; + *(int*)dest = src->i2; dest += 4; + *(ulong_t*)dest = to_ulong(src->L3); dest += 4; + *(ulong_t*)dest = to_ulong(src->L4); dest += 4; + *(ulong_t*)dest = to_ulong(src->L5); dest += 4; + *(int*)dest = src->i6; dest += 4; + *(int*)dest = src->i7; dest += 4; +} + +void from_struct_WWpWpWpWp(struct_WWpWpWpWp_t *dest, ptr_t s) +{ + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->W0 = *(uint16_t*)src; src += 2; + dest->W1 = *(uint16_t*)src; src += 2; + dest->p2 = from_ptrv(*(ptr_t*)src); src += 4; + dest->W3 = *(uint16_t*)src; src += 4; // align + dest->p4 = from_ptrv(*(ptr_t*)src); src += 4; + dest->W5 = *(uint16_t*)src; src += 4; // align + dest->p6 = from_ptrv(*(ptr_t*)src); src += 4; + dest->W7 = *(uint16_t*)src; src += 4; // align + dest->p8 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_WWpWpWpWp(ptr_t d, const struct_WWpWpWpWp_t *src) +{ + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(uint16_t*)dest = src->W0; dest += 2; + *(uint16_t*)dest = src->W1; dest += 2; + *(ptr_t*)dest = to_ptrv(src->p2); dest += 4; + *(uint16_t*)dest = src->W3; dest += 4; // align + *(ptr_t*)dest = to_ptrv(src->p4); dest += 4; + *(uint16_t*)dest = src->W5; dest += 4; // align + *(ptr_t*)dest = to_ptrv(src->p6); dest += 4; + *(uint16_t*)dest = src->W7; dest += 4; // align + *(ptr_t*)dest = to_ptrv(src->p8); dest += 4; +} + +void from_struct_pi(struct_pi_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; + dest->i1 = *(int*)src; src += 4; +} +void to_struct_pi(ptr_t d, const struct_pi_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(int*)dest = src->i1; dest += 4; +} + +void from_struct_pp(struct_pp_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; + dest->p1 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_pp(ptr_t d, const struct_pp_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p1); dest += 4; +} + +void from_struct_ppi(struct_ppi_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; + dest->p1 = from_ptrv(*(ptr_t*)src); src += 4; + dest->i2 = *(int*)src; src += 4; +} +void to_struct_ppi(ptr_t d, const struct_ppi_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p1); dest += 4; + *(int*)dest = src->i2; dest += 4; +} + +void from_struct_ip(struct_ip_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->i0 = *(int*)src; src += 4; + dest->p1 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_ip(ptr_t d, const struct_ip_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(int*)dest = src->i0; dest += 4; + *(ptr_t*)dest = to_ptrv(src->p1); dest += 4; +} + +void from_struct_iip(struct_iip_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->i0 = *(int*)src; src += 4; + dest->i1 = *(int*)src; src += 4; + dest->p2 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_iip(ptr_t d, const struct_iip_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(int*)dest = src->i0; dest += 4; + *(int*)dest = src->i1; dest += 4; + *(ptr_t*)dest = to_ptrv(src->p2); dest += 4; +} + +void from_struct_puu(struct_puu_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; + dest->u1 = *(uint32_t*)src; src += 4; + dest->u2 = *(uint32_t*)src; src += 4; +} +void to_struct_puu(ptr_t d, const struct_puu_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(uint32_t*)dest = src->u1; dest += 4; + *(uint32_t*)dest = src->u2; dest += 4; +} + +void from_struct_piiL(struct_piiL_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; + dest->i1 = *(int*)src; src += 4; + dest->i2 = *(int*)src; src += 4; + dest->L3 = from_ulong(*(ulong_t*)src); src += 4; +} +void to_struct_piiL(ptr_t d, const struct_piiL_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(int*)dest = src->i1; dest += 4; + *(int*)dest = src->i2; dest += 4; + *(ulong_t*)dest = to_ulong(src->L3); dest += 4; +} + +void from_struct_piip(struct_piip_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; + dest->i1 = *(int*)src; src += 4; + dest->i2 = *(int*)src; src += 4; + dest->p3 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_piip(ptr_t d, const struct_piip_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(int*)dest = src->i1; dest += 4; + *(int*)dest = src->i2; dest += 4; + *(ptr_t*)dest = to_ptrv(src->p3); dest += 4; +} + +void from_struct_ppup(struct_ppup_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; + dest->p1 = from_ptrv(*(ptr_t*)src); src += 4; + dest->u2 = *(uint32_t*)src; src += 4; + dest->p3 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_ppup(ptr_t d, const struct_ppup_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(ptr_t*)dest = to_ptrv(src->p1); dest += 4; + *(uint32_t*)dest = src->u2; dest += 4; + *(ptr_t*)dest = to_ptrv(src->p3); dest += 4; +} +void from_struct_iiiiiLi(struct_iiiiiLi_t* dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->i0 = *(int*)src; src += 4; + dest->i1 = *(int*)src; src += 4; + dest->i2 = *(int*)src; src += 4; + dest->i3 = *(int*)src; src += 4; + dest->i4 = *(int*)src; src += 4; + dest->L5 = from_ulong(*(long_t*)src); src += 4; + dest->i6 = *(int*)src; src += 4; +} +void to_struct_iiiiiLi(ptr_t d, const struct_iiiiiLi_t* src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(int*)dest = src->i0; dest += 4; + *(int*)dest = src->i1; dest += 4; + *(int*)dest = src->i2; dest += 4; + *(int*)dest = src->i3; dest += 4; + *(int*)dest = src->i4; dest += 4; + *(ulong_t*)dest = to_ulong(src->L5); dest += 4; + *(int*)dest = src->i6; dest += 4; +} +void from_struct_iLLLiiiiiiiLLiiLiiiiLic(struct_iLLLiiiiiiiLLiiLiiiiLic_t* dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->i0 = *(int*)src; src += 4; + dest->L1 = from_ulong(*(long_t*)src); src += 4; + dest->L2 = from_ulong(*(long_t*)src); src += 4; + dest->L3 = from_ulong(*(long_t*)src); src += 4; + dest->i4 = *(int*)src; src += 4; + dest->i5 = *(int*)src; src += 4; + dest->i6 = *(int*)src; src += 4; + dest->i7 = *(int*)src; src += 4; + dest->i8 = *(int*)src; src += 4; + dest->i9 = *(int*)src; src += 4; + dest->i10 = *(int*)src; src += 4; + dest->L11 = from_ulong(*(long_t*)src); src += 4; + dest->L12 = from_ulong(*(long_t*)src); src += 4; + dest->i13 = *(int*)src; src += 4; + dest->i14 = *(int*)src; src += 4; + dest->L15 = from_ulong(*(long_t*)src); src += 4; + dest->i16 = *(int*)src; src += 4; + dest->i17 = *(int*)src; src += 4; + dest->i18 = *(int*)src; src += 4; + dest->i19 = *(int*)src; src += 4; + dest->L20 = from_ulong(*(long_t*)src); src += 4; + dest->i21 = *(int*)src; src += 4; + dest->c22 = *(int8_t*)src; src += 1; +} +void to_struct_iLLLiiiiiiiLLiiLiiiiLic(ptr_t d, const struct_iLLLiiiiiiiLLiiLiiiiLic_t* src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(int*)dest = src->i0; dest += 4; + *(ulong_t*)dest = to_ulong(src->L1); dest += 4; + *(ulong_t*)dest = to_ulong(src->L2); dest += 4; + *(ulong_t*)dest = to_ulong(src->L3); dest += 4; + *(int*)dest = src->i4; dest += 4; + *(int*)dest = src->i5; dest += 4; + *(int*)dest = src->i6; dest += 4; + *(int*)dest = src->i7; dest += 4; + *(int*)dest = src->i8; dest += 4; + *(int*)dest = src->i9; dest += 4; + *(int*)dest = src->i10; dest += 4; + *(ulong_t*)dest = to_ulong(src->L11); dest += 4; + *(ulong_t*)dest = to_ulong(src->L12); dest += 4; + *(int*)dest = src->i13; dest += 4; + *(int*)dest = src->i14; dest += 4; + *(ulong_t*)dest = to_ulong(src->L15); dest += 4; + *(int*)dest = src->i16; dest += 4; + *(int*)dest = src->i17; dest += 4; + *(int*)dest = src->i18; dest += 4; + *(int*)dest = src->i19; dest += 4; + *(ulong_t*)dest = to_ulong(src->L20); dest += 4; + *(int*)dest = src->i21; dest += 4; + *(int8_t*)dest = src->c22; dest += 1; +} +void from_struct_LLLLiiiLLilliLL(struct_LLLLiiiLLilliLL_t* dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(long_t*)src); src += 4; + dest->L1 = from_ulong(*(long_t*)src); src += 4; + dest->L2 = from_ulong(*(long_t*)src); src += 4; + dest->L3 = from_ulong(*(long_t*)src); src += 4; + dest->i4 = *(int*)src; src += 4; + dest->i5 = *(int*)src; src += 4; + dest->i6 = *(int*)src; src += 4; + dest->i7 = *(int*)src; src += 4; + dest->L8 = from_ulong(*(long_t*)src); src += 4; + dest->L9 = from_ulong(*(long_t*)src); src += 4; + dest->i10 = *(int*)src; src += 4; + dest->l11 = from_long(*(long_t*)src); src += 4; + dest->l12 = from_long(*(long_t*)src); src += 4; + dest->i13 = *(int*)src; src += 4; + dest->L14 = from_ulong(*(long_t*)src); src += 4; + dest->L15 = from_ulong(*(long_t*)src); src += 4; +} +void to_struct_LLLLiiiLLilliLL(ptr_t d, const struct_LLLLiiiLLilliLL_t* src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; + *(ulong_t*)dest = to_ulong(src->L1); dest += 4; + *(ulong_t*)dest = to_ulong(src->L2); dest += 4; + *(ulong_t*)dest = to_ulong(src->L3); dest += 4; + *(int*)dest = src->i4; dest += 4; + *(int*)dest = src->i5; dest += 4; + *(int*)dest = src->i6; dest += 4; + *(int*)dest = src->i7; dest += 4; + *(ulong_t*)dest = to_ulong(src->L8); dest += 4; + *(ulong_t*)dest = to_ulong(src->L9); dest += 4; + *(int*)dest = src->i10; dest += 4; + *(ulong_t*)dest = to_long(src->l11); dest += 4; + *(ulong_t*)dest = to_long(src->l12); dest += 4; + *(int*)dest = src->i13; dest += 4; + *(ulong_t*)dest = to_ulong(src->L14); dest += 4; + *(ulong_t*)dest = to_ulong(src->L15); dest += 4; +} + +void from_struct_iiuuLip(struct_iiuuLip_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->i0 = *(int*)src; src += 4; + dest->i1 = *(int*)src; src += 4; + dest->u2 = *(uint32_t*)src; src += 4; + dest->u3 = *(uint32_t*)src; src += 4; + dest->L4 = from_ulong(*(long_t*)src); src += 4; + dest->i5 = *(int*)src; src += 4; + dest->p6 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_iiuuLip(ptr_t d, const struct_iiuuLip_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(int*)dest = src->i0; dest += 4; + *(int*)dest = src->i1; dest += 4; + *(uint32_t*)dest = src->u2; dest += 4; + *(uint32_t*)dest = src->u3; dest += 4; + *(ulong_t*)dest = to_ulong(src->L4); dest += 4; + *(int*)dest = src->i5; dest += 4; + *(ptr_t*)dest = to_ptrv(src->p6); dest += 4; +} + +void from_struct_pLiiiLLLii(struct_pLiiiLLLii_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->p0 = from_ptrv(*(ptr_t*)src); src += 4; + dest->L1 = from_ulong(*(long_t*)src); src += 4; + dest->i2 = *(int*)src; src += 4; + dest->i3 = *(int*)src; src += 4; + dest->i4 = *(int*)src; src += 4; + dest->L5 = from_ulong(*(long_t*)src); src += 4; + dest->L6 = from_ulong(*(long_t*)src); src += 4; + dest->L7 = from_ulong(*(long_t*)src); src += 4; + dest->i8 = *(int*)src; src += 4; + dest->i9 = *(int*)src; src += 4; +} +void to_struct_pLiiiLLLii(ptr_t d, const struct_pLiiiLLLii_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ptr_t*)dest = to_ptrv(src->p0); dest += 4; + *(ulong_t*)dest = to_ulong(src->L1); dest += 4; + *(int*)dest = src->i2; dest += 4; + *(int*)dest = src->i3; dest += 4; + *(int*)dest = src->i4; dest += 4; + *(ulong_t*)dest = to_ulong(src->L5); dest += 4; + *(ulong_t*)dest = to_ulong(src->L6); dest += 4; + *(ulong_t*)dest = to_ulong(src->L7); dest += 4; + *(int*)dest = src->i8; dest += 4; + *(int*)dest = src->i9; dest += 4; +} + +void from_struct_LiiuL(struct_LiiuL_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->L0 = from_ulong(*(long_t*)src); src += 4; + dest->i1 = *(int*)src; src += 4; + dest->i2 = *(int*)src; src += 4; + dest->u3 = *(uint32_t*)src; src += 4; + dest->L4 = from_ulong(*(long_t*)src); src += 4; +} +void to_struct_LiiuL(ptr_t d, const struct_LiiuL_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(ulong_t*)dest = to_ulong(src->L0); dest += 4; + *(int*)dest = src->i1; dest += 4; + *(int*)dest = src->i2; dest += 4; + *(uint32_t*)dest = src->u3; dest += 4; + *(ulong_t*)dest = to_ulong(src->L4); dest += 4; +} + +void from_struct_WWWWWWWWWuip(struct_WWWWWWWWWuip_t *dest, ptr_t s) { + uint8_t* src = (uint8_t*)from_ptrv(s); + dest->W0 = *(uint16_t*)src; src += 2; + dest->W1 = *(uint16_t*)src; src += 2; + dest->W2 = *(uint16_t*)src; src += 2; + dest->W3 = *(uint16_t*)src; src += 2; + dest->W4 = *(uint16_t*)src; src += 2; + dest->W5 = *(uint16_t*)src; src += 2; + dest->W6 = *(uint16_t*)src; src += 2; + dest->W7 = *(uint16_t*)src; src += 2; + dest->W8 = *(uint16_t*)src; src += 2; + dest->u9 = *(uint32_t*)src; src += 4; + dest->i10 = *(int*)src; src += 4; + dest->p11 = from_ptrv(*(ptr_t*)src); src += 4; +} +void to_struct_WWWWWWWWWuip(ptr_t d, const struct_WWWWWWWWWuip_t *src) { + if (!src) return; + uint8_t* dest = (uint8_t*)from_ptrv(d); + *(uint16_t*)dest = src->W0; dest += 2; + *(uint16_t*)dest = src->W1; dest += 2; + *(uint16_t*)dest = src->W2; dest += 2; + *(uint16_t*)dest = src->W3; dest += 2; + *(uint16_t*)dest = src->W4; dest += 2; + *(uint16_t*)dest = src->W5; dest += 2; + *(uint16_t*)dest = src->W6; dest += 2; + *(uint16_t*)dest = src->W7; dest += 2; + *(uint16_t*)dest = src->W8; dest += 2; + *(uint32_t*)dest = src->u9; dest += 4; + *(int*)dest = src->i10; dest += 4; + *(ulong_t*)dest = to_ptrv(src->p11); dest += 4; +} diff --git a/src/wrapped32/generated/converter32.h b/src/wrapped32/generated/converter32.h new file mode 100644 index 0000000000000000000000000000000000000000..6c8edb6b853e0cf30ac8ea8ab49aadfd7b5d9e54 --- /dev/null +++ b/src/wrapped32/generated/converter32.h @@ -0,0 +1,390 @@ +// Manually created for now +#ifndef __CONVERTER_H_ +#define __CONVERTER_H_ + +#include "box32.h" + +typedef struct struct_p_s { + void *p0; +} struct_p_t; +void from_struct_p(struct_p_t *dest, ptr_t src); +void to_struct_p(ptr_t dest, const struct_p_t *src); +typedef struct struct_l_s { + long L0; +} struct_l_t; +void from_struct_l(struct_l_t *dest, ptr_t src); +void to_struct_l(ptr_t dest, const struct_l_t *src); +typedef struct struct_L_s { + unsigned long L0; +} struct_L_t; +void from_struct_L(struct_L_t *dest, ptr_t src); +void to_struct_L(ptr_t dest, const struct_L_t *src); +typedef struct struct_ll_s { + long L0; + long L1; +} struct_ll_t; +void from_struct_ll(struct_ll_t *dest, ptr_t src); +void to_struct_ll(ptr_t dest, const struct_ll_t *src); +typedef struct struct_LL_s { + unsigned long L0; + unsigned long L1; +} struct_LL_t; +void from_struct_LL(struct_LL_t *dest, ptr_t src); +void to_struct_LL(ptr_t dest, const struct_LL_t *src); +typedef struct struct_LC_s { + unsigned long L0; + uint8_t C1; +} struct_LC_t; +void from_struct_LC(struct_LC_t *dest, ptr_t src); +void to_struct_LC(ptr_t dest, const struct_LC_t *src); +typedef struct struct_liu_s { + long l0; + int i1; + uint32_t u2; +} struct_liu_t; +void from_struct_liu(struct_liu_t *dest, ptr_t src); +void to_struct_liu(ptr_t dest, const struct_liu_t *src); +typedef struct struct_llll_s { + long l0; + long l1; + long l2; + long l3; +} struct_llll_t; +void from_struct_llll(struct_llll_t *dest, ptr_t src); +void to_struct_llll(ptr_t dest, const struct_llll_t *src); +typedef struct struct_LLLL_s { + unsigned long L0; + unsigned long L1; + unsigned long L2; + unsigned long L3; +} struct_LLLL_t; +void from_struct_LLLL(struct_LLLL_t *dest, ptr_t src); +void to_struct_LLLL(ptr_t dest, const struct_LLLL_t *src); +typedef struct struct_LLLLLLLLLL_s { + unsigned long L0; + unsigned long L1; + unsigned long L2; + unsigned long L3; + unsigned long L4; + unsigned long L5; + unsigned long L6; + unsigned long L7; + unsigned long L8; + unsigned long L9; +} struct_LLLLLLLLLL_t; +void from_struct_LLLLLLLLLL(struct_LLLLLLLLLL_t *dest, ptr_t src); +void to_struct_LLLLLLLLLL(ptr_t dest, const struct_LLLLLLLLLL_t *src); +typedef struct struct_LLLLLLLLLLLLLLLLLL_s { + unsigned long L0; + unsigned long L1; + unsigned long L2; + unsigned long L3; + unsigned long L4; + unsigned long L5; + unsigned long L6; + unsigned long L7; + unsigned long L8; + unsigned long L9; + unsigned long L10; + unsigned long L11; + unsigned long L12; + unsigned long L13; + unsigned long L14; + unsigned long L15; + unsigned long L16; + unsigned long L17; +} struct_LLLLLLLLLLLLLLLLLL_t; +void from_struct_LLLLLLLLLLLLLLLLLL(struct_LLLLLLLLLLLLLLLLLL_t *dest, ptr_t src); +void to_struct_LLLLLLLLLLLLLLLLLL(ptr_t dest, const struct_LLLLLLLLLLLLLLLLLL_t *src); +typedef struct struct_h_s { + uintptr_t h0; +} struct_h_t; +void from_struct_h(struct_h_t *dest, ptr_t src); +void to_struct_h(ptr_t dest, const struct_h_t *src); +typedef struct struct_H_s { + uintptr_t H0; +} struct_H_t; +void from_struct_H(struct_H_t *dest, ptr_t src); +void to_struct_H(ptr_t dest, const struct_H_t *src); +typedef struct struct_ppppp_s { + void* p0; + void* p1; + void* p2; + void* p3; + void* p4; +} struct_ppppp_t; +void from_struct_ppppp(struct_ppppp_t *dest, ptr_t src); +void to_struct_ppppp(ptr_t dest, const struct_ppppp_t *src); +typedef struct struct_iiiiiiiiilt_s { + int i0; + int i1; + int i2; + int i3; + int i4; + int i5; + int i6; + int i7; + int i8; + long l9; + void* p10; +} struct_iiiiiiiiilt_t; +void from_struct_iiiiiiiiilt(struct_iiiiiiiiilt_t* dest, ptr_t src); +void to_struct_iiiiiiiiilt(ptr_t dest, const struct_iiiiiiiiilt_t* src); +typedef struct struct_up_s { + uint32_t u0; + void* p1; +} struct_up_t; +void from_struct_up(struct_up_t *dest, ptr_t src); +void to_struct_up(ptr_t dest, const struct_up_t *src); +typedef struct struct_LWWWcc_s { + unsigned long L0; + unsigned short W1; + unsigned short W2; + unsigned short W3; + char c4; + char c5; +} struct_LWWWcc_t; +void from_struct_LWWWcc(struct_LWWWcc_t *dest, ptr_t src); +void to_struct_LWWWcc(ptr_t dest, const struct_LWWWcc_t *src); +typedef struct struct_pLiL_s { + void* p0; + unsigned long L1; + int i2; + unsigned long L3; +} struct_pLiL_t; +void from_struct_pLiL(struct_pLiL_t *dest, ptr_t src); +void to_struct_pLiL(ptr_t dest, const struct_pLiL_t *src); +typedef struct struct_Lip_s { + unsigned long L0; + int i1; + void* p2; +} struct_Lip_t; +void from_struct_Lip(struct_Lip_t *dest, ptr_t src); +void to_struct_Lip(ptr_t dest, const struct_Lip_t *src); +typedef struct struct_Lipi_s { + unsigned long L0; + int i1; + void* p2; + int i3; +} struct_Lipi_t; +void from_struct_Lipi(struct_Lipi_t *dest, ptr_t src); +void to_struct_Lipi(ptr_t dest, const struct_Lipi_t *src); +typedef struct struct_LLii_s { + unsigned long L0; + unsigned long L1; + int i2; + int i3; +} struct_LLii_t; +void from_struct_LLii(struct_LLii_t *dest, ptr_t src); +void to_struct_LLii(ptr_t dest, const struct_LLii_t *src); +typedef struct struct_uuipWCCp_s { + uint32_t u0; + uint32_t u1; + int i2; + void* p3; + uint16_t u4; + uint8_t u5; + uint8_t u6; + void* p7; +} struct_uuipWCCp_t; +void from_struct_uuipWCCp(struct_uuipWCCp_t *dest, ptr_t src); +void to_struct_uuipWCCp(ptr_t dest, const struct_uuipWCCp_t *src); +typedef struct struct_pLiLLLii_s { + void* p0; + unsigned long L1; + int i2; + unsigned long L3; + unsigned long L4; + unsigned long L5; + int i6; + int i7; +} struct_pLiLLLii_t; +void from_struct_pLiLLLii(struct_pLiLLLii_t *dest, ptr_t src); +void to_struct_pLiLLLii(ptr_t dest, const struct_pLiLLLii_t *src); +typedef struct struct_WWpWpWpWp_s { + uint16_t W0; + uint16_t W1; + void* p2; + uint16_t W3; + void* p4; + uint16_t W5; + void* p6; + uint16_t W7; + void* p8; +} struct_WWpWpWpWp_t; +void from_struct_WWpWpWpWp(struct_WWpWpWpWp_t *dest, ptr_t src); +void to_struct_WWpWpWpWp(ptr_t dest, const struct_WWpWpWpWp_t *src); +typedef struct struct_ip_s { + int i0; + void* p1; +} struct_ip_t; +void from_struct_ip(struct_ip_t *dest, ptr_t src); +void to_struct_ip(ptr_t dest, const struct_ip_t *src); +typedef struct struct_pi_s { + void* p0; + int i1; +} struct_pi_t; +void from_struct_pi(struct_pi_t *dest, ptr_t src); +void to_struct_pi(ptr_t dest, const struct_pi_t *src); +typedef struct struct_pp_s { + void* p0; + void* p1; +} struct_pp_t; +void from_struct_pp(struct_pp_t *dest, ptr_t src); +void to_struct_pp(ptr_t dest, const struct_pp_t *src); +typedef struct struct_ppi_s { + void* p0; + void* p1; + int i2; +} struct_ppi_t; +void from_struct_ppi(struct_ppi_t *dest, ptr_t src); +void to_struct_ppi(ptr_t dest, const struct_ppi_t *src); +typedef struct struct_iip_s { + int i0; + int i1; + void* p2; +} struct_iip_t; +void from_struct_iip(struct_iip_t *dest, ptr_t src); +void to_struct_iip(ptr_t dest, const struct_iip_t *src); +typedef struct struct_puu_s { + void* p0; + uint32_t u1; + uint32_t u2; +} struct_puu_t; +void from_struct_puu(struct_puu_t *dest, ptr_t src); +void to_struct_puu(ptr_t dest, const struct_puu_t *src); +typedef struct struct_piiL_s { + void* p0; + int i1; + int i2; + unsigned long L3; +} struct_piiL_t; +void from_struct_piiL(struct_piiL_t *dest, ptr_t src); +void to_struct_piiL(ptr_t dest, const struct_piiL_t *src); +typedef struct struct_piip_s { + void* p0; + int i1; + int i2; + void* p3; +} struct_piip_t; +void from_struct_piip(struct_piip_t *dest, ptr_t src); +void to_struct_piip(ptr_t dest, const struct_piip_t *src); +typedef struct struct_ppup_s { + void* p0; + void* p1; + uint32_t u2; + void* p3; +} struct_ppup_t; +void from_struct_ppup(struct_ppup_t *dest, ptr_t src); +void to_struct_ppup(ptr_t dest, const struct_ppup_t *src); +typedef struct struct_iiiiiLi_s { + int i0; + int i1; + int i2; + int i3; + int i4; + unsigned long L5; + int i6; +} struct_iiiiiLi_t; +void from_struct_iiiiiLi(struct_iiiiiLi_t* dest, ptr_t src); +void to_struct_iiiiiLi(ptr_t dest, const struct_iiiiiLi_t* src); +typedef struct struct_iLLLiiiiiiiLLiiLiiiiLic_s { + int i0; + unsigned long L1; + unsigned long L2; + unsigned long L3; + int i4; + int i5; + int i6; + int i7; + int i8; + int i9; + int i10; + unsigned long L11; + unsigned long L12; + int i13; + int i14; + unsigned long L15; + int i16; + int i17; + int i18; + int i19; + unsigned long L20; + int i21; + int8_t c22; +} struct_iLLLiiiiiiiLLiiLiiiiLic_t; +void from_struct_iLLLiiiiiiiLLiiLiiiiLic(struct_iLLLiiiiiiiLLiiLiiiiLic_t* dest, ptr_t src); +void to_struct_iLLLiiiiiiiLLiiLiiiiLic(ptr_t dest, const struct_iLLLiiiiiiiLLiiLiiiiLic_t* src); +typedef struct struct_LLLLiiiLLilliLL_s { + unsigned long L0; + unsigned long L1; + unsigned long L2; + unsigned long L3; + int i4; + int i5; + int i6; + int i7; + unsigned long L8; + unsigned long L9; + int i10; + long l11; + long l12; + int i13; + unsigned long L14; + unsigned long L15; +} struct_LLLLiiiLLilliLL_t; +void from_struct_LLLLiiiLLilliLL(struct_LLLLiiiLLilliLL_t* dest, ptr_t src); +void to_struct_LLLLiiiLLilliLL(ptr_t dest, const struct_LLLLiiiLLilliLL_t* src); +typedef struct struct_iiuuLip_s { + int i0; + int i1; + uint32_t u2; + uint32_t u3; + unsigned long L4; + int i5; + void* p6; +} struct_iiuuLip_t; +void from_struct_iiuuLip(struct_iiuuLip_t *dest, ptr_t src); +void to_struct_iiuuLip(ptr_t dest, const struct_iiuuLip_t *src); +typedef struct struct_pLiiiLLLii_s { + void* p0; + unsigned long L1; + int i2; + int i3; + int i4; + unsigned long L5; + unsigned long L6; + unsigned long L7; + int i8; + int i9; +} struct_pLiiiLLLii_t; +void from_struct_pLiiiLLLii(struct_pLiiiLLLii_t *dest, ptr_t src); +void to_struct_pLiiiLLLii(ptr_t dest, const struct_pLiiiLLLii_t *src); +typedef struct struct_LiiuL_s { + unsigned long L0; + int i1; + int i2; + uint32_t u3; + unsigned long L4; +} struct_LiiuL_t; +void from_struct_LiiuL(struct_LiiuL_t *dest, ptr_t src); +void to_struct_LiiuL(ptr_t dest, const struct_LiiuL_t *src); +typedef struct struct_WWWWWWWWWuip_s { + uint16_t W0; + uint16_t W1; + uint16_t W2; + uint16_t W3; + uint16_t W4; + uint16_t W5; + uint16_t W6; + uint16_t W7; + uint16_t W8; + uint32_t u9; + int i10; + void* p11; + unsigned long L4; +} struct_WWWWWWWWWuip_t; +void from_struct_WWWWWWWWWuip(struct_WWWWWWWWWuip_t *dest, ptr_t src); +void to_struct_WWWWWWWWWuip(ptr_t dest, const struct_WWWWWWWWWuip_t *src); + +#endif // __CONVERTER_H_ diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt new file mode 100644 index 0000000000000000000000000000000000000000..3dc35be9968ba00b9ed816465a3206a50fdc8b94 --- /dev/null +++ b/src/wrapped32/generated/functions_list.txt @@ -0,0 +1,2569 @@ +#() vEv -> vEv +#() vFv -> vFv +#() vFc -> vFc +#() vFw -> vFw +#() vEi -> vEi +#() vFi -> vFi +#() vFC -> vFC +#() vFW -> vFW +#() vEu -> vEu +#() vFu -> vFu +#() vFU -> vFU +#() vFf -> vFf +#() vFd -> vFd +#() vEl -> vEl +#() vFl -> vFl +#() vEp -> vEp +#() vFp -> vFp +#() vEA -> vEA +#() vES -> vES +#() vFS -> vFS +#() vFX -> vFX +#() cFc -> cFc +#() cFi -> cFi +#() cFu -> cFu +#() cFp -> cFp +#() wFp -> wFp +#() iEv -> iEv +#() iFv -> iFv +#() iEi -> iEi +#() iFi -> iFi +#() iEI -> iEI +#() iEu -> iEu +#() iFu -> iFu +#() iEf -> iEf +#() iEd -> iEd +#() iEl -> iEl +#() iEL -> iEL +#() iEp -> iEp +#() iFp -> iFp +#() iEh -> iEh +#() iES -> iES +#() iFX -> iFX +#() IEf -> IEf +#() IEd -> IEd +#() IEp -> IEp +#() IFp -> IFp +#() IES -> IES +#() CFv -> CFv +#() CFi -> CFi +#() CFu -> CFu +#() CFU -> CFU +#() CFl -> CFl +#() CFp -> CFp +#() WFi -> WFi +#() WEW -> WEW +#() WFu -> WFu +#() WFp -> WFp +#() uEv -> uEv +#() uFv -> uFv +#() uEi -> uEi +#() uFi -> uFi +#() uEu -> uEu +#() uFu -> uFu +#() uEU -> uEU +#() uEp -> uEp +#() uFp -> uFp +#() uES -> uES +#() uFX -> uFX +#() UFv -> UFv +#() UFi -> UFi +#() UFu -> UFu +#() UEp -> UEp +#() UFp -> UFp +#() UEs -> UEs +#() fFi -> fFi +#() fEf -> fEf +#() fFf -> fFf +#() dEv -> dEv +#() dFi -> dFi +#() dEd -> dEd +#() dFd -> dFd +#() dEp -> dEp +#() dFp -> dFp +#() lEv -> lEv +#() lFu -> lFu +#() lEl -> lEl +#() lFl -> lFl +#() lEp -> lEp +#() lFp -> lFp +#() lES -> lES +#() lFX -> lFX +#() LEv -> LEv +#() LFv -> LFv +#() LEL -> LEL +#() LEp -> LEp +#() LFp -> LFp +#() LFX -> LFX +#() pEv -> pEv +#() pFv -> pFv +#() pEi -> pEi +#() pFi -> pFi +#() pEu -> pEu +#() pFu -> pFu +#() pEl -> pEl +#() pFl -> pFl +#() pEL -> pEL +#() pFL -> pFL +#() pEp -> pEp +#() pFp -> pFp +#() pFX -> pFX +#() hEv -> hEv +#() hFv -> hFv +#() aEa -> aEa +#() tEi -> tEi +#() tEu -> tEu +#() tEp -> tEp +#() tFp -> tFp +#() XFv -> XFv +#() XFp -> XFp +#() vFbp_ -> vFB +#() iFbp_ -> iFB +#() iFBp_ -> iFB +#() LErl_ -> LEB +#() pErl_ -> pEB +#() lFrll_ -> lFB +#() iEBllll_ -> iEB +#() vFbuuipWCCp_ -> vFB +#() vFbWWpWpWpWp_ -> vFB +#() LEbiiiiiiiiilt_ -> LEB +#() LEriiiiiiiiilt_ -> LEB +#() pEriiiiiiiiilt_ -> pEB +#() vEEv -> vEEv +#() vFEv -> vFEv +#() vEEp -> vEEp +#() vFEp -> vFEp +#() vFEX -> vFEX +#() vFcc -> vFcc +#() vFww -> vFww +#() vFii -> vFii +#() vFiI -> vFiI +#() vFiW -> vFiW +#() vFiu -> vFiu +#() vFiU -> vFiU +#() vFif -> vFif +#() vFid -> vFid +#() vFip -> vFip +#() vFWW -> vFWW +#() vFuc -> vFuc +#() vFuw -> vFuw +#() vFui -> vFui +#() vFuI -> vFuI +#() vFuC -> vFuC +#() vFuW -> vFuW +#() vFuu -> vFuu +#() vFuU -> vFuU +#() vFuf -> vFuf +#() vFud -> vFud +#() vFul -> vFul +#() vFup -> vFup +#() vFUu -> vFUu +#() vFfC -> vFfC +#() vFff -> vFff +#() vFdd -> vFdd +#() vFlu -> vFlu +#() vFlp -> vFlp +#() vEpi -> vEpi +#() vFpi -> vFpi +#() vFpC -> vFpC +#() vFpu -> vFpu +#() vFpl -> vFpl +#() vEpL -> vEpL +#() vFpL -> vFpL +#() vEpp -> vEpp +#() vFpp -> vFpp +#() vESp -> vESp +#() vFXi -> vFXi +#() vFXL -> vFXL +#() vFXp -> vFXp +#() cFpp -> cFpp +#() wFpi -> wFpi +#() iEEv -> iEEv +#() iEEi -> iEEi +#() iEEL -> iEEL +#() iEEp -> iEEp +#() iFEp -> iFEp +#() iEEh -> iEEh +#() iEEO -> iEEO +#() iFEX -> iFEX +#() iEii -> iEii +#() iFii -> iFii +#() iEiI -> iEiI +#() iEiu -> iEiu +#() iFiu -> iFiu +#() iEil -> iEil +#() iEip -> iEip +#() iFip -> iFip +#() iEiS -> iEiS +#() iEui -> iEui +#() iFui -> iFui +#() iEuu -> iEuu +#() iEuL -> iEuL +#() iEup -> iEup +#() iFup -> iFup +#() iEua -> iEua +#() iFpw -> iFpw +#() iEpi -> iEpi +#() iFpi -> iFpi +#() iFpI -> iFpI +#() iEpu -> iEpu +#() iFpu -> iFpu +#() iFpU -> iFpU +#() iFpf -> iFpf +#() iFpd -> iFpd +#() iFpl -> iFpl +#() iEpL -> iEpL +#() iFpL -> iFpL +#() iEpp -> iEpp +#() iFpp -> iFpp +#() iEpV -> iEpV +#() iEpO -> iEpO +#() iEpS -> iEpS +#() iEhi -> iEhi +#() iEhp -> iEhp +#() iEhh -> iEhh +#() iESi -> iESi +#() iESU -> iESU +#() iESp -> iESp +#() iFXi -> iFXi +#() iFXW -> iFXW +#() iFXL -> iFXL +#() iFXp -> iFXp +#() IFEp -> IFEp +#() IEII -> IEII +#() IFpu -> IFpu +#() CFip -> CFip +#() CFCi -> CFCi +#() CFui -> CFui +#() CFuu -> CFuu +#() CFuU -> CFuU +#() CFpi -> CFpi +#() CFpu -> CFpu +#() CFpp -> CFpp +#() CFXL -> CFXL +#() WFpp -> WFpp +#() uFEp -> uFEp +#() uFii -> uFii +#() uEiS -> uEiS +#() uFuu -> uFuu +#() uFup -> uFup +#() uEua -> uEua +#() uEuS -> uEuS +#() uFpi -> uFpi +#() uFpu -> uFpu +#() uFpp -> uFpp +#() uFXL -> uFXL +#() UEuu -> UEuu +#() UFuu -> UFuu +#() UEUU -> UEUU +#() UEss -> UEss +#() fEif -> fEif +#() fEfi -> fEfi +#() fFfi -> fFfi +#() fEff -> fEff +#() fFff -> fFff +#() fEfD -> fEfD +#() fEfp -> fEfp +#() dEid -> dEid +#() dEdi -> dEdi +#() dFdi -> dFdi +#() dEdd -> dEdd +#() dFdd -> dFdd +#() dEdD -> dEdD +#() dEdp -> dEdp +#() dEll -> dEll +#() dFpp -> dFpp +#() lEEi -> lEEi +#() lEEV -> lEEV +#() lEES -> lEES +#() lEii -> lEii +#() lFiL -> lFiL +#() lFui -> lFui +#() lFll -> lFll +#() lEpi -> lEpi +#() lFpu -> lFpu +#() lFpl -> lFpl +#() lFpL -> lFpL +#() LEEL -> LEEL +#() LFEp -> LFEp +#() LFLi -> LFLi +#() LEpL -> LEpL +#() LEpp -> LEpp +#() LFXi -> LFXi +#() LFXu -> LFXu +#() LFXL -> LFXL +#() LFXp -> LFXp +#() pFEv -> pFEv +#() pEEv -> pEEv +#() pEEu -> pEEu +#() pFEp -> pFEp +#() pEEp -> pEEp +#() pEES -> pEES +#() pFEX -> pFEX +#() pFii -> pFii +#() pFiu -> pFiu +#() pFip -> pFip +#() pFuu -> pFuu +#() pFup -> pFup +#() pELL -> pELL +#() pFLL -> pFLL +#() pEpi -> pEpi +#() pFpi -> pFpi +#() pFpu -> pFpu +#() pEpL -> pEpL +#() pFpL -> pFpL +#() pEpp -> pEpp +#() pFpp -> pFpp +#() pFXi -> pFXi +#() pFXu -> pFXu +#() pFXL -> pFXL +#() pFXp -> pFXp +#() hFEp -> hFEp +#() hEpa -> hEpa +#() SEip -> SEip +#() SEpp -> SEpp +#() tEip -> tEip +#() tEia -> tEia +#() tEpL -> tEpL +#() tEpp -> tEpp +#() vFuBp_ -> vFuB +#() vFpbp_ -> vFpB +#() vFbp_p -> vFBp +#() iEEbp_ -> iEEB +#() iFibp_ -> iFiB +#() iFLbp_ -> iFLB +#() iFpbp_ -> iFpB +#() iFpbl_ -> iFpB +#() iFpBL_ -> iFpB +#() iFpbL_ -> iFpB +#() iEHBp_ -> iEHB +#() iFbp_i -> iFBi +#() iFbp_p -> iFBp +#() iFXbL_ -> iFXB +#() fEpBp_ -> fEpB +#() dEpBp_ -> dEpB +#() LFpbp_ -> LFpB +#() LFpbL_ -> LFpB +#() pErl_p -> pEBp +#() vFBll_l -> vFBl +#() iEuBLL_ -> iEuB +#() iEprll_ -> iEpB +#() iEpbup_ -> iEpB +#() iEprLL_ -> iEpB +#() iFbpi_i -> iFBi +#() iEBll_p -> iEBp +#() iFXbip_ -> iFXB +#() iESBliu_ -> iESB +#() iFbppi_i -> iFBi +#() iFXbiip_ -> iFXB +#() iErLL_BLL_ -> iEBB +#() LFXrLiiuL_ -> LFXB +#() vFbll_rllll_ -> vFBB +#() iFXbiiuuLip_ -> iFXB +#() iFpruuipWCCp_ -> iFpB +#() pEriiiiiiiiilt_p -> pEBp +#() iEiBLLLLLLLLLLLLLLLLLL_ -> iEiB +#() vEEip -> vEEip +#() vFEip -> vFEip +#() vEEpi -> vEEpi +#() vEEpu -> vEEpu +#() vFEpp -> vFEpp +#() vFEpV -> vFEpV +#() vFEXp -> vFEXp +#() vFccc -> vFccc +#() vFwww -> vFwww +#() vFiii -> vFiii +#() vFiif -> vFiif +#() vFiip -> vFiip +#() vFiII -> vFiII +#() vFiui -> vFiui +#() vFiuu -> vFiuu +#() vFiup -> vFiup +#() vFiUU -> vFiUU +#() vFiff -> vFiff +#() vFidd -> vFidd +#() vFilu -> vFilu +#() vFill -> vFill +#() vFilp -> vFilp +#() vFipu -> vFipu +#() vFipp -> vFipp +#() vFCCC -> vFCCC +#() vFWWW -> vFWWW +#() vFucc -> vFucc +#() vFuww -> vFuww +#() vFuii -> vFuii +#() vFuiI -> vFuiI +#() vFuiu -> vFuiu +#() vFuiU -> vFuiU +#() vFuif -> vFuif +#() vFuid -> vFuid +#() vFuip -> vFuip +#() vFuII -> vFuII +#() vFuWW -> vFuWW +#() vFuui -> vFuui +#() vFuuC -> vFuuC +#() vFuuu -> vFuuu +#() vFuuU -> vFuuU +#() vFuuf -> vFuuf +#() vFuud -> vFuud +#() vFuup -> vFuup +#() vFuUU -> vFuUU +#() vFuff -> vFuff +#() vFudd -> vFudd +#() vFull -> vFull +#() vFulp -> vFulp +#() vFupp -> vFupp +#() vFfff -> vFfff +#() vEfpp -> vEfpp +#() vFddd -> vFddd +#() vEdpp -> vEdpp +#() vFlii -> vFlii +#() vFlip -> vFlip +#() vFllp -> vFllp +#() vFlpp -> vFlpp +#() vEpii -> vEpii +#() vFpii -> vFpii +#() vFpip -> vFpip +#() vFpui -> vFpui +#() vFpuI -> vFpuI +#() vFpuC -> vFpuC +#() vFpuu -> vFpuu +#() vFpuU -> vFpuU +#() vFpuf -> vFpuf +#() vFpud -> vFpud +#() vFpul -> vFpul +#() vFpup -> vFpup +#() vFpdd -> vFpdd +#() vFplp -> vFplp +#() vFppi -> vFppi +#() vEppu -> vEppu +#() vFppL -> vFppL +#() vFppp -> vFppp +#() vFXiL -> vFXiL +#() vFXLi -> vFXLi +#() vFXLL -> vFXLL +#() vFXLp -> vFXLp +#() vFXpi -> vFXpi +#() vFXpl -> vFXpl +#() vFXpL -> vFXpL +#() vFXpp -> vFXpp +#() iEEip -> iEEip +#() iFEip -> iFEip +#() iEEup -> iEEup +#() iFEup -> iFEup +#() iEEpi -> iEEpi +#() iFEpi -> iFEpi +#() iFEpu -> iFEpu +#() iFEpl -> iFEpl +#() iEEpL -> iEEpL +#() iFEpL -> iFEpL +#() iEEpp -> iEEpp +#() iFEpp -> iFEpp +#() iEEpV -> iEEpV +#() iFEpX -> iFEpX +#() iEEhi -> iEEhi +#() iEEhp -> iEEhp +#() iFEXp -> iFEXp +#() iEiii -> iEiii +#() iEiiI -> iEiiI +#() iEiil -> iEiil +#() iEiip -> iEiip +#() iFiip -> iFiip +#() iEiiO -> iEiiO +#() iEiII -> iEiII +#() iEiuu -> iEiuu +#() iEiup -> iEiup +#() iEill -> iEill +#() iEiLi -> iEiLi +#() iFipi -> iFipi +#() iEipi -> iEipi +#() iEipu -> iEipu +#() iFipu -> iFipu +#() iEipL -> iEipL +#() iEipp -> iEipp +#() iFipp -> iFipp +#() iFuip -> iFuip +#() iEuui -> iEuui +#() iEuuu -> iEuuu +#() iFuup -> iFuup +#() iEuLa -> iEuLa +#() iFfff -> iFfff +#() iELLi -> iELLi +#() iFpii -> iFpii +#() iEpiu -> iEpiu +#() iFpiu -> iFpiu +#() iFpil -> iFpil +#() iEpip -> iEpip +#() iFpip -> iFpip +#() iFpuC -> iFpuC +#() iEpuu -> iEpuu +#() iFpuu -> iFpuu +#() iFpuU -> iFpuU +#() iFpup -> iFpup +#() iFpUU -> iFpUU +#() iFpfu -> iFpfu +#() iFpff -> iFpff +#() iFpli -> iFpli +#() iFpll -> iFpll +#() iEpLi -> iEpLi +#() iEpLu -> iEpLu +#() iEpLp -> iEpLp +#() iFpLp -> iFpLp +#() iEppi -> iEppi +#() iFppi -> iFppi +#() iEppu -> iEppu +#() iFppu -> iFppu +#() iFppd -> iFppd +#() iEppL -> iEppL +#() iFppL -> iFppL +#() iEppp -> iEppp +#() iFppp -> iFppp +#() iEppa -> iEppa +#() iEpOu -> iEpOu +#() iEhip -> iEhip +#() iEhpL -> iEhpL +#() iEhpp -> iEhpp +#() iESIi -> iESIi +#() iESli -> iESli +#() iFXii -> iFXii +#() iFXiL -> iFXiL +#() iFXip -> iFXip +#() iFXuu -> iFXuu +#() iFXup -> iFXup +#() iFXLi -> iFXLi +#() iFXLu -> iFXLu +#() iFXLf -> iFXLf +#() iFXLl -> iFXLl +#() iFXLL -> iFXLL +#() iFXLp -> iFXLp +#() iFXpi -> iFXpi +#() iFXpu -> iFXpu +#() iFXpl -> iFXpl +#() iFXpL -> iFXpL +#() iFXpp -> iFXpp +#() IEiIi -> IEiIi +#() IFpIi -> IFpIi +#() CFipp -> CFipp +#() CFuUu -> CFuUu +#() CFuff -> CFuff +#() WFXip -> WFXip +#() uFEpu -> uFEpu +#() uFEpL -> uFEpL +#() uFilp -> uFilp +#() uFipu -> uFipu +#() uFuuu -> uFuuu +#() uFuup -> uFuup +#() uFupp -> uFupp +#() uFpii -> uFpii +#() uFpuU -> uFpuU +#() uEpup -> uEpup +#() uFpup -> uFpup +#() uFppu -> uFppu +#() uFppp -> uFppp +#() uFXuu -> uFXuu +#() fFuii -> fFuii +#() fEfff -> fEfff +#() fEffp -> fEffp +#() dEddd -> dEddd +#() dEddp -> dEddp +#() lEili -> lEili +#() lEipL -> lEipL +#() lFlll -> lFlll +#() lElpi -> lElpi +#() lFpLL -> lFpLL +#() lFppi -> lFppi +#() lFppL -> lFppL +#() LFEpi -> LFEpi +#() LFEpp -> LFEpp +#() LFpii -> LFpii +#() LEpip -> LEpip +#() LFppi -> LFppi +#() LEppL -> LEppL +#() LFppL -> LFppL +#() LFXip -> LFXip +#() LFXCi -> LFXCi +#() LFXLi -> LFXLi +#() LFXLC -> LFXLC +#() LFXpi -> LFXpi +#() LFXpp -> LFXpp +#() pEEip -> pEEip +#() pFEiV -> pFEiV +#() pEEpi -> pEEpi +#() pFEpi -> pFEpi +#() pEEpp -> pEEpp +#() pFEpp -> pFEpp +#() pFEpV -> pFEpV +#() pFEpX -> pFEpX +#() pFEXi -> pFEXi +#() pFEXL -> pFEXL +#() pFEXp -> pFEXp +#() pEipi -> pEipi +#() pEipL -> pEipL +#() pFipp -> pFipp +#() pFulu -> pFulu +#() pFupi -> pFupi +#() pFupp -> pFupp +#() pFLpi -> pFLpi +#() pFpcU -> pFpcU +#() pEpii -> pEpii +#() pFpii -> pFpii +#() pFpiu -> pFpiu +#() pEpiL -> pEpiL +#() pFpiL -> pFpiL +#() pFpip -> pFpip +#() pEpiS -> pEpiS +#() pEpII -> pEpII +#() pFpuu -> pFpuu +#() pFpup -> pFpup +#() pEpLL -> pEpLL +#() pEppi -> pEppi +#() pFppu -> pFppu +#() pEppL -> pEppL +#() pFppL -> pFppL +#() pFppp -> pFppp +#() pEpOM -> pEpOM +#() pFXii -> pFXii +#() pFXip -> pFXip +#() pFXLp -> pFXLp +#() pFXpi -> pFXpi +#() pFXpp -> pFXpp +#() aEipa -> aEipa +#() SEEpp -> SEEpp +#() SEppS -> SEppS +#() tEipu -> tEipu +#() vFibp_i -> vFiBi +#() vFuibp_ -> vFuiB +#() vFuuBp_ -> vFuuB +#() vFuubp_ -> vFuuB +#() vFpbp_i -> vFpBi +#() vFbp_pp -> vFBpp +#() vFXLbL_ -> vFXLB +#() vFXbL_i -> vFXBi +#() iFpibl_ -> iFpiB +#() iFplbl_ -> iFplB +#() iEppBp_ -> iEppB +#() iFppbp_ -> iFppB +#() iFppbL_ -> iFppB +#() iFpbp_i -> iFpBi +#() iFpbL_p -> iFpBp +#() iEBp_LL -> iEBLL +#() iFbp_pi -> iFBpi +#() iFbp_pI -> iFBpI +#() iFbp_pu -> iFBpu +#() iFbp_pd -> iFBpd +#() iFbp_pl -> iFBpl +#() iFbp_pp -> iFBpp +#() iFbp_Si -> iFBSi +#() iFXibL_ -> iFXiB +#() iFXLbp_ -> iFXLB +#() iFXLbL_ -> iFXLB +#() iFXbL_i -> iFXBi +#() iFXbp_i -> iFXBi +#() iFXBL_p -> iFXBp +#() iFXbp_p -> iFXBp +#() iFXbL_p -> iFXBp +#() IEpBp_i -> IEpBi +#() UEpBp_i -> UEpBi +#() fEpBp_p -> fEpBp +#() fEpBp_a -> fEpBa +#() dEpBp_i -> dEpBi +#() dEpBp_a -> dEpBa +#() lEpBp_i -> lEpBi +#() lFpbp_L -> lFpBL +#() LEpBp_i -> LEpBi +#() pEppbp_ -> pEppB +#() pEppBp_ -> pEppB +#() pFppbp_ -> pFppB +#() pFXLbL_ -> pFXLB +#() iFXLbpp_ -> iFXLB +#() iFXbLC_i -> iFXBi +#() vFLbL_bL_ -> vFLBB +#() iFpbl_bl_ -> iFpBB +#() iFpbL_bL_ -> iFpBB +#() iFbp_bp_p -> iFBBp +#() iFXbiip_i -> iFXBi +#() iFXbLip_L -> iFXBL +#() vFXLbpLiL_ -> vFXLB +#() vFXLrpLiL_ -> vFXLB +#() iFXLbpLiL_ -> iFXLB +#() iFXLbLLii_ -> iFXLB +#() pFXrLiiuL_p -> pFXBp +#() iFXLbLWWWcc_ -> iFXLB +#() iEirLLLL_BLLLL_ -> iEiBB +#() pEppriiiiiiiiilt_ -> pEppB +#() vEEipp -> vEEipp +#() vFEipp -> vFEipp +#() vEEipV -> vEEipV +#() vEEpup -> vEEpup +#() vFEpup -> vFEpup +#() vFEpll -> vFEpll +#() vEEppp -> vEEppp +#() vFEppp -> vFEppp +#() vFEXLp -> vFEXLp +#() vFcccc -> vFcccc +#() vFwwww -> vFwwww +#() vFiiii -> vFiiii +#() vFiiip -> vFiiip +#() vFiiCp -> vFiiCp +#() vFiill -> vFiill +#() vFiIII -> vFiIII +#() vFiuip -> vFiuip +#() vFiuuu -> vFiuuu +#() vFiulp -> vFiulp +#() vFiupV -> vFiupV +#() vFiUUU -> vFiUUU +#() vFifff -> vFifff +#() vFiddd -> vFiddd +#() vFilip -> vFilip +#() vFilpu -> vFilpu +#() vFilpp -> vFilpp +#() vFipup -> vFipup +#() vFipll -> vFipll +#() vFippp -> vFippp +#() vFCCCC -> vFCCCC +#() vFWWWW -> vFWWWW +#() vFuccc -> vFuccc +#() vFuwww -> vFuwww +#() vFuiii -> vFuiii +#() vFuiip -> vFuiip +#() vFuiII -> vFuiII +#() vFuiui -> vFuiui +#() vFuiuC -> vFuiuC +#() vFuiuu -> vFuiuu +#() vFuiup -> vFuiup +#() vFuiUU -> vFuiUU +#() vFuifi -> vFuifi +#() vFuiff -> vFuiff +#() vFuidd -> vFuidd +#() vFuilp -> vFuilp +#() vFuipu -> vFuipu +#() vFuipp -> vFuipp +#() vFuIII -> vFuIII +#() vFuWWW -> vFuWWW +#() vFuuii -> vFuuii +#() vFuuiu -> vFuuiu +#() vFuuil -> vFuuil +#() vFuuip -> vFuuip +#() vFuuCu -> vFuuCu +#() vFuuCp -> vFuuCp +#() vFuuui -> vFuuui +#() vFuuuu -> vFuuuu +#() vFuuuf -> vFuuuf +#() vFuuud -> vFuuud +#() vFuuul -> vFuuul +#() vFuuup -> vFuuup +#() vFuuUl -> vFuuUl +#() vFuuff -> vFuuff +#() vFuuli -> vFuuli +#() vFuupi -> vFuupi +#() vFuupp -> vFuupp +#() vFuUui -> vFuUui +#() vFuUup -> vFuUup +#() vFuUUU -> vFuUUU +#() vFufff -> vFufff +#() vFuddd -> vFuddd +#() vFuluU -> vFuluU +#() vFullC -> vFullC +#() vFullp -> vFullp +#() vFulpu -> vFulpu +#() vFulpp -> vFulpp +#() vFupii -> vFupii +#() vFuppi -> vFuppi +#() vFuppu -> vFuppu +#() vFUUpi -> vFUUpi +#() vFffff -> vFffff +#() vFdddd -> vFdddd +#() vFllii -> vFllii +#() vFLiii -> vFLiii +#() vFpiip -> vFpiip +#() vFpipi -> vFpipi +#() vFpipp -> vFpipp +#() vFpdii -> vFpdii +#() vFpddd -> vFpddd +#() vFplpp -> vFplpp +#() vEppip -> vEppip +#() vFppui -> vFppui +#() vFpppp -> vFpppp +#() vFXiiL -> vFXiiL +#() vFXiLu -> vFXiLu +#() vFXLii -> vFXLii +#() vFXLip -> vFXLip +#() vFXLLL -> vFXLLL +#() vFXLLp -> vFXLLp +#() vFXLpi -> vFXLpi +#() vFXLpL -> vFXLpL +#() vFXpip -> vFXpip +#() vFXppL -> vFXppL +#() cFpiii -> cFpiii +#() iEEiip -> iEEiip +#() iEEiiN -> iEEiiN +#() iEEipp -> iEEipp +#() iFEipp -> iFEipp +#() iEEipV -> iEEipV +#() iEEpii -> iEEpii +#() iEEpip -> iEEpip +#() iFEpip -> iFEpip +#() iFEpui -> iFEpui +#() iFEpuu -> iFEpuu +#() iEEpup -> iEEpup +#() iEEpLi -> iEEpLi +#() iFEpLi -> iFEpLi +#() iEEppi -> iEEppi +#() iFEppu -> iFEppu +#() iEEppL -> iEEppL +#() iEEppp -> iEEppp +#() iFEppp -> iFEppp +#() iEEppV -> iEEppV +#() iFEppV -> iFEppV +#() iEEpON -> iEEpON +#() iEEhup -> iEEhup +#() iEESpp -> iEESpp +#() iEESpV -> iEESpV +#() iFEXip -> iFEXip +#() iFEXlp -> iFEXlp +#() iFEXLp -> iFEXLp +#() iFEXpp -> iFEXpp +#() iFiiii -> iFiiii +#() iFiiiu -> iFiiiu +#() iEiiip -> iEiiip +#() iEiiiN -> iEiiiN +#() iEiiII -> iEiiII +#() iEiIIi -> iEiIIi +#() iEilli -> iEilli +#() iEipii -> iEipii +#() iEipip -> iEipip +#() iEipui -> iEipui +#() iEipup -> iEipup +#() iEippi -> iEippi +#() iEippL -> iEippL +#() iFippp -> iFippp +#() iEipON -> iEipON +#() iFuiup -> iFuiup +#() iEuupi -> iEuupi +#() iFuppp -> iFuppp +#() iFpiii -> iFpiii +#() iFpiiL -> iFpiiL +#() iFpiip -> iFpiip +#() iFpiuu -> iFpiuu +#() iFpili -> iFpili +#() iEpipp -> iEpipp +#() iFpipp -> iFpipp +#() iFpCCC -> iFpCCC +#() iFpWWu -> iFpWWu +#() iFpuLp -> iFpuLp +#() iFpupi -> iFpupi +#() iFpupp -> iFpupp +#() iFppii -> iFppii +#() iFppiU -> iFppiU +#() iFppip -> iFppip +#() iFppuw -> iFppuw +#() iFppui -> iFppui +#() iFppuu -> iFppuu +#() iFppup -> iFppup +#() iFppLi -> iFppLi +#() iFpppi -> iFpppi +#() iFpppu -> iFpppu +#() iEpppL -> iEpppL +#() iFpppp -> iFpppp +#() iESpiL -> iESpiL +#() iFXiii -> iFXiii +#() iFXiiL -> iFXiiL +#() iFXiip -> iFXiip +#() iFXiuL -> iFXiuL +#() iFXiLL -> iFXiLL +#() iFXipi -> iFXipi +#() iFXipp -> iFXipp +#() iFXWWW -> iFXWWW +#() iFXuuu -> iFXuuu +#() iFXuuL -> iFXuuL +#() iFXuup -> iFXuup +#() iFXuLL -> iFXuLL +#() iFXupp -> iFXupp +#() iFXLii -> iFXLii +#() iFXLiL -> iFXLiL +#() iFXLip -> iFXLip +#() iFXLuu -> iFXLuu +#() iFXLLL -> iFXLLL +#() iFXLLp -> iFXLLp +#() iFXLpi -> iFXLpi +#() iFXpii -> iFXpii +#() iFXpip -> iFXpip +#() iFXpLp -> iFXpLp +#() iFXppi -> iFXppi +#() iFXppp -> iFXppp +#() IFEpIi -> IFEpIi +#() CFuuff -> CFuuff +#() uFEuip -> uFEuip +#() uFEpii -> uFEpii +#() uFuuuu -> uFuuuu +#() uFpCCC -> uFpCCC +#() uFppip -> uFppip +#() uFpppi -> uFpppi +#() lEEipi -> lEEipi +#() lEEppL -> lEEppL +#() lEiipL -> lEiipL +#() lEipLi -> lEipLi +#() lEipLI -> lEipLI +#() lEipLl -> lEipLl +#() lEipLL -> lEipLL +#() lFpuip -> lFpuip +#() LFEpLp -> LFEpLp +#() LFEXii -> LFEXii +#() LEpLLS -> LEpLLS +#() LEppLp -> LEppLp +#() LEppLa -> LEppLa +#() LFXCii -> LFXCii +#() LFXLuu -> LFXLuu +#() LFXpLp -> LFXpLp +#() pFEupp -> pFEupp +#() pFEpip -> pFEpip +#() pEEppi -> pEEppi +#() pFEppi -> pFEppi +#() pEEppp -> pEEppp +#() pFEppp -> pFEppp +#() pFEXip -> pFEXip +#() pFEXLL -> pFEXLL +#() pFEXLp -> pFEXLp +#() pFEXpL -> pFEXpL +#() pFEXpp -> pFEXpp +#() pFiiiu -> pFiiiu +#() pFifff -> pFifff +#() pFillu -> pFillu +#() pEippu -> pEippu +#() pFullu -> pFullu +#() pEpiLL -> pEpiLL +#() pFpuii -> pFpuii +#() pFpupp -> pFpupp +#() pEpLiS -> pEpLiS +#() pEpLpL -> pEpLpL +#() pEppLL -> pEppLL +#() pFpppL -> pFpppL +#() pFpppp -> pFpppp +#() pFXiii -> pFXiii +#() pFXiip -> pFXiip +#() pFXCip -> pFXCip +#() pFXLpp -> pFXLpp +#() pFXppp -> pFXppp +#() vFuibp_i -> vFuiBi +#() vFuuuBp_ -> vFuuuB +#() vFbp_ppp -> vFBppp +#() vFXLLbL_ -> vFXLLB +#() iFplibl_ -> iFpliB +#() iFpppbp_ -> iFpppB +#() iFppbL_p -> iFppBp +#() iFbp_pii -> iFBpii +#() iFbp_pip -> iFBpip +#() iFBp_pui -> iFBpui +#() iFXLiBp_ -> iFXLiB +#() iFXLbp_i -> iFXLBi +#() iFXLbL_i -> iFXLBi +#() iFXLbp_p -> iFXLBp +#() IEpBp_ii -> IEpBii +#() uFppibp_ -> uFppiB +#() UEpBp_ii -> UEpBii +#() lEiibl_L -> lEiiBL +#() LEpbp_Lp -> LEpBLp +#() iEEpprLL_ -> iEEppB +#() iEpurLL_p -> iEpuBp +#() iFppbL_bL_ -> iFppBB +#() iFrpuu_Lui -> iFBLui +#() iFbp_bp_pi -> iFBBpi +#() iFXbL_ibp_ -> iFXBiB +#() vFbp_ppbup_ -> vFBppB +#() vFXLbpLiL_L -> vFXLBL +#() iFXLbpLiL_L -> iFXLBL +#() iEiirLL_BLL_ -> iEiiBB +#() iEuirLL_BLL_ -> iEuiBB +#() iFXLpbLWWWcc_ -> iFXLpB +#() iFXLbLWWWcc_i -> iFXLBi +#() iFXLuriiiiiLi_ -> iFXLuB +#() vFXLbLLLLLLLLLL_L -> vFXLBL +#() iFXLbLLLLLLLLLL_L -> iFXLBL +#() LEpLpriiiiiiiiilt_ -> LEpLpB +#() iFXipBWWWWWWWWWuip_ -> iFXipB +#() iFXLbLWWWcc_bLWWWcc_ -> iFXLBB +#() iFpruuipWCCp_buuipWCCp_i -> iFpBBi +#() iFXpLriLLLiiiiiiiLLiiLiiiiLic_ -> iFXpLB +#() iFXpLbiLLLiiiiiiiLLiiLiiiiLic_ -> iFXpLB +#() pFXLLbiLLLiiiiiiiLLiiLiiiiLic_ -> pFXLLB +#() vEEiipp -> vEEiipp +#() vEEiipV -> vEEiipV +#() vFEuipu -> vFEuipu +#() vFEuipp -> vFEuipp +#() vEEpLLp -> vEEpLLp +#() vEEppiV -> vEEppiV +#() vFiiiii -> vFiiiii +#() vFiiiiu -> vFiiiiu +#() vFiiuii -> vFiiuii +#() vFiiuup -> vFiiuup +#() vFiillu -> vFiillu +#() vFiilll -> vFiilll +#() vFiipll -> vFiipll +#() vFiIIII -> vFiIIII +#() vFiuiip -> vFiuiip +#() vFiuuuu -> vFiuuuu +#() vFiulpp -> vFiulpp +#() vFiUUUU -> vFiUUUU +#() vFiffff -> vFiffff +#() vFidddd -> vFidddd +#() vFilill -> vFilill +#() vFilipi -> vFilipi +#() vFilipl -> vFilipl +#() vFipipu -> vFipipu +#() vFipipp -> vFipipp +#() vFipupi -> vFipupi +#() vFucccc -> vFucccc +#() vFuwwww -> vFuwwww +#() vFuiiii -> vFuiiii +#() vFuiiiu -> vFuiiiu +#() vFuiiip -> vFuiiip +#() vFuiiCp -> vFuiiCp +#() vFuiiup -> vFuiiup +#() vFuiill -> vFuiill +#() vFuiIII -> vFuiIII +#() vFuiuii -> vFuiuii +#() vFuiuip -> vFuiuip +#() vFuiuCi -> vFuiuCi +#() vFuiuCu -> vFuiuCu +#() vFuiuuu -> vFuiuuu +#() vFuiuup -> vFuiuup +#() vFuiupi -> vFuiupi +#() vFuiUUU -> vFuiUUU +#() vFuifff -> vFuifff +#() vFuiddd -> vFuiddd +#() vFuipii -> vFuipii +#() vFuipip -> vFuipip +#() vFuipup -> vFuipup +#() vFuippp -> vFuippp +#() vFuIIII -> vFuIIII +#() vFuCCCC -> vFuCCCC +#() vFuCuip -> vFuCuip +#() vFuCuup -> vFuCuup +#() vFuWWWW -> vFuWWWW +#() vFuuiii -> vFuuiii +#() vFuuiip -> vFuuiip +#() vFuuiui -> vFuuiui +#() vFuuiuu -> vFuuiuu +#() vFuuiup -> vFuuiup +#() vFuuifi -> vFuuifi +#() vFuuipC -> vFuuipC +#() vFuuipu -> vFuuipu +#() vFuuipp -> vFuuipp +#() vFuuuii -> vFuuuii +#() vFuuuiu -> vFuuuiu +#() vFuuuil -> vFuuuil +#() vFuuuip -> vFuuuip +#() vFuuuui -> vFuuuui +#() vFuuuuu -> vFuuuuu +#() vFuuuup -> vFuuuup +#() vFuuuli -> vFuuuli +#() vFuuull -> vFuuull +#() vFuulll -> vFuulll +#() vFuullp -> vFuullp +#() vFuupii -> vFuupii +#() vFuUUUU -> vFuUUUU +#() vFuffff -> vFuffff +#() vFudddd -> vFudddd +#() vFullpu -> vFullpu +#() vFupiii -> vFupiii +#() vFupupp -> vFupupp +#() vFuplii -> vFuplii +#() vFuppip -> vFuppip +#() vFupppp -> vFupppp +#() vFfffff -> vFfffff +#() vFddddp -> vFddddp +#() vFluipp -> vFluipp +#() vFpilpp -> vFpilpp +#() vFpipiu -> vFpipiu +#() vFpuipp -> vFpuipp +#() vFpddii -> vFpddii +#() vFppWui -> vFppWui +#() vFpppii -> vFpppii +#() vFppppu -> vFppppu +#() vFppppp -> vFppppp +#() vFXLiii -> vFXLiii +#() vFXLiiL -> vFXLiiL +#() vFXLppi -> vFXLppi +#() vFXpiiL -> vFXpiiL +#() iEEiiip -> iEEiiip +#() iEEipii -> iEEipii +#() iEEippL -> iEEippL +#() iEEpipp -> iEEpipp +#() iEEpipV -> iEEpipV +#() iFEpupu -> iFEpupu +#() iEEpLpp -> iEEpLpp +#() iFEpLpp -> iFEpLpp +#() iEEpLpV -> iEEpLpV +#() iFEpLpV -> iFEpLpV +#() iFEpplp -> iFEpplp +#() iEEpppi -> iEEpppi +#() iEEpppp -> iEEpppp +#() iFEpppp -> iFEpppp +#() iFEXipp -> iFEXipp +#() iFEXLip -> iFEXLip +#() iFEXLlp -> iFEXLlp +#() iFEXLLp -> iFEXLLp +#() iFEXLpi -> iFEXLpi +#() iFEXLpp -> iFEXLpp +#() iFEXpLp -> iFEXpLp +#() iFEXppu -> iFEXppu +#() iFEXppp -> iFEXppp +#() iEiiipu -> iEiiipu +#() iEiiipp -> iEiiipp +#() iEiLLLL -> iEiLLLL +#() iEipLLi -> iEipLLi +#() iEippLi -> iEippLi +#() iEipppi -> iEipppi +#() iEipppp -> iEipppp +#() iFuiuup -> iFuiuup +#() iFpiiuu -> iFpiiuu +#() iFpippp -> iFpippp +#() iFpCCCC -> iFpCCCC +#() iFpuipp -> iFpuipp +#() iFppiUi -> iFppiUi +#() iFppipp -> iFppipp +#() iFpppip -> iFpppip +#() iEpppLp -> iEpppLp +#() iFppppp -> iFppppp +#() iFXiiii -> iFXiiii +#() iFXiiip -> iFXiiip +#() iFXiuLi -> iFXiuLi +#() iFXiLip -> iFXiLip +#() iFXiLuu -> iFXiLuu +#() iFXuuLL -> iFXuuLL +#() iFXLLii -> iFXLLii +#() iFXLpii -> iFXLpii +#() iFXLpLi -> iFXLpLi +#() iFXLppi -> iFXLppi +#() iFXpipi -> iFXpipi +#() iFXpppp -> iFXpppp +#() IFXpIII -> IFXpIII +#() uEEippu -> uEEippu +#() uEpLLLS -> uEpLLLS +#() UFuiCiu -> UFuiCiu +#() lFpuipC -> lFpuipC +#() LFEppLL -> LFEppLL +#() LFEXLpi -> LFEXLpi +#() LEpLppa -> LEpLppa +#() LFXLuuu -> LFXLuuu +#() LFXLpuu -> LFXLpuu +#() LFXpppi -> LFXpppi +#() pFEppip -> pFEppip +#() pFEXipp -> pFEXipp +#() pFEXlpp -> pFEXlpp +#() pFEXppi -> pFEXppi +#() pFuiupp -> pFuiupp +#() pFpiiuu -> pFpiiuu +#() pFpippp -> pFpippp +#() pFpuiii -> pFpuiii +#() pFpuuip -> pFpuuip +#() pFppuup -> pFppuup +#() pFppupp -> pFppupp +#() pFXLipp -> pFXLipp +#() pFXpipi -> pFXpipi +#() pFXppip -> pFXppip +#() vFiuibp_i -> vFiuiBi +#() vFXibL_ii -> vFXiBii +#() iEEBh_ppp -> iEEBppp +#() iFppppbp_ -> iFppppB +#() iFbp_piip -> iFBpiip +#() iFbp_puip -> iFBpuip +#() iFbp_pppi -> iFBpppi +#() iFXiibL_i -> iFXiiBi +#() iFXCupbL_ -> iFXCupB +#() iFXLbL_ii -> iFXLBii +#() LEpbp_LLp -> LEpBLLp +#() LEpBp_LLp -> LEpBLLp +#() iEippprLL_ -> iEipppB +#() iEpurLL_pL -> iEpuBpL +#() iFppppbup_ -> iFppppB +#() iFiiuBp_Bp_ -> iFiiuBB +#() iFbp_bp_pip -> iFBBpip +#() vFbp_ppibup_ -> vFBppiB +#() iFEXbpLiL_pp -> iFEXBpp +#() iFpppbp_bup_ -> iFpppBB +#() LFXLrLiiuL_Lp -> LFXLBLp +#() pFEXLrLiiuL_i -> pFEXLBi +#() iFXLiuriiiiiLi_ -> iFXLiuB +#() LELbp_bL_bp_bL_ -> LELBBBB +#() vFXLbLLLLLLLLLL_iL -> vFXLBiL +#() iFXiiiBpLiiiLLLii_ -> iFXiiiB +#() LEpLpriiiiiiiiilt_a -> LEpLpBa +#() iFXLpbLWWWcc_bLWWWcc_ -> iFXLpBB +#() iFXLpBLWWWcc_BLWWWcc_ -> iFXLpBB +#() vFEiiipp -> vFEiiipp +#() vFEuippp -> vFEuippp +#() vFEupupi -> vFEupupi +#() vFiiiiii -> vFiiiiii +#() vFiiiuil -> vFiiiuil +#() vFiiilpi -> vFiiilpi +#() vFiiuilp -> vFiiuilp +#() vFiffiff -> vFiffiff +#() vFiddidd -> vFiddidd +#() vFilipli -> vFilipli +#() vFiliplu -> vFiliplu +#() vFipiplp -> vFipiplp +#() vFCCCCff -> vFCCCCff +#() vFuiiiii -> vFuiiiii +#() vFuiiiip -> vFuiiiip +#() vFuiiuii -> vFuiiuii +#() vFuiiuup -> vFuiiuup +#() vFuiIIII -> vFuiIIII +#() vFuiuiii -> vFuiuiii +#() vFuiuiiC -> vFuiuiiC +#() vFuiuiil -> vFuiuiil +#() vFuiuiuu -> vFuiuiuu +#() vFuiuiuU -> vFuiuiuU +#() vFuiuCip -> vFuiuCip +#() vFuiuuip -> vFuiuuip +#() vFuiuuuu -> vFuiuuuu +#() vFuiupii -> vFuiupii +#() vFuiupiu -> vFuiupiu +#() vFuiUUUU -> vFuiUUUU +#() vFuiffff -> vFuiffff +#() vFuidddd -> vFuidddd +#() vFuipiup -> vFuipiup +#() vFuCuuip -> vFuCuuip +#() vFuuiiii -> vFuuiiii +#() vFuuiuii -> vFuuiuii +#() vFuuiuil -> vFuuiuil +#() vFuuiuip -> vFuuiuip +#() vFuuiuCu -> vFuuiuCu +#() vFuuiuup -> vFuuiuup +#() vFuuuiii -> vFuuuiii +#() vFuuuiup -> vFuuuiup +#() vFuuuipC -> vFuuuipC +#() vFuuuipp -> vFuuuipp +#() vFuuuuii -> vFuuuuii +#() vFuuuuip -> vFuuuuip +#() vFuuuuuu -> vFuuuuuu +#() vFuuuull -> vFuuuull +#() vFuuuppi -> vFuuuppi +#() vFuuuppp -> vFuuuppp +#() vFuuffff -> vFuuffff +#() vFuudddd -> vFuudddd +#() vFuupiii -> vFuupiii +#() vFuupupp -> vFuupupp +#() vFuuplii -> vFuuplii +#() vFuffiip -> vFuffiip +#() vFufffff -> vFufffff +#() vFuddiip -> vFuddiip +#() vFulluUC -> vFulluUC +#() vFupiiii -> vFupiiii +#() vFffffff -> vFffffff +#() vFdddddd -> vFdddddd +#() vFpipipV -> vFpipipV +#() vFpdddii -> vFpdddii +#() vFpppppp -> vFpppppp +#() vFXiLppi -> vFXiLppi +#() vFXLiiii -> vFXLiiii +#() vFXLiiiL -> vFXLiiiL +#() vFXLiipi -> vFXLiipi +#() vFXLpppi -> vFXLpppi +#() iEEiippi -> iEEiippi +#() iEEuppLp -> iEEuppLp +#() iFEpiuuu -> iFEpiuuu +#() iEEpiLpp -> iEEpiLpp +#() iEEpipOi -> iEEpipOi +#() iFEpuuup -> iFEpuuup +#() iFEplluu -> iFEplluu +#() iFEpLlpp -> iFEpLlpp +#() iFEppipp -> iFEppipp +#() iEEppupi -> iEEppupi +#() iFEppllp -> iFEppllp +#() iEEpppLp -> iEEpppLp +#() iFEXLilp -> iFEXLilp +#() iFEXLpiL -> iFEXLpiL +#() iFEXpiip -> iFEXpiip +#() iFEXpiup -> iFEXpiup +#() iFEXpppp -> iFEXpppp +#() iFuiiuup -> iFuiiuup +#() iFpiippp -> iFpiippp +#() iFppiiii -> iFppiiii +#() iFppuIII -> iFppuIII +#() iFppulll -> iFppulll +#() iFpppppp -> iFpppppp +#() iFXiiiii -> iFXiiiii +#() iFXiiLip -> iFXiiLip +#() iFXiippp -> iFXiippp +#() iFXuuuuu -> iFXuuuuu +#() iFXLiiiL -> iFXLiiiL +#() iFXLiiip -> iFXLiiip +#() iFXLiiuu -> iFXLiiuu +#() iFXLuupp -> iFXLuupp +#() iFXLupip -> iFXLupip +#() iFXLLLLL -> iFXLLLLL +#() iFXLppii -> iFXLppii +#() iFXLpppp -> iFXLpppp +#() iFXpIppp -> iFXpIppp +#() iFXpuiii -> iFXpuiii +#() iFXpLiWL -> iFXpLiWL +#() iFXpLLiL -> iFXpLLiL +#() iFXppppi -> iFXppppi +#() iFXppppp -> iFXppppp +#() uFEpippi -> uFEpippi +#() uFupuufp -> uFupuufp +#() lEipLipu -> lEipLipu +#() lEipLipp -> lEipLipp +#() pFEpiiuu -> pFEpiiuu +#() pEEpLLiN -> pEEpLLiN +#() pEEppLLp -> pEEppLLp +#() pFEXpppp -> pFEXpppp +#() pFWCiWCi -> pFWCiWCi +#() pFpiiiiu -> pFpiiiiu +#() XFpppppp -> XFpppppp +#() iFpppbp_pp -> iFpppBpp +#() iFXibL_ppu -> iFXiBppu +#() iFXLiiibL_ -> iFXLiiiB +#() iFXLLLLbL_ -> iFXLLLLB +#() iFXLbL_ipi -> iFXLBipi +#() iFXbL_upip -> iFXBupip +#() iFppbL_pbL_p -> iFppBpBp +#() iFrpuu_Lrpuu_Lui -> iFBLBLui +#() iFXbLip_uubLip_L -> iFXBuuBL +#() vFbp_bppup_ippbp_ -> vFBBippB +#() vFEuuippp -> vFEuuippp +#() vFEupupip -> vFEupupip +#() vFiiiiiip -> vFiiiiiip +#() vFiiiiuup -> vFiiiiuup +#() vFiiuilil -> vFiiuilil +#() vFiiffffp -> vFiiffffp +#() vFiuulipi -> vFiuulipi +#() vFiupuuup -> vFiupuuup +#() vFilipliu -> vFilipliu +#() vFilulipi -> vFilulipi +#() vFCCCCfff -> vFCCCCfff +#() vFuiiiiii -> vFuiiiiii +#() vFuiiiiiC -> vFuiiiiiC +#() vFuiiiuip -> vFuiiiuip +#() vFuiiiuup -> vFuiiiuup +#() vFuiuiiii -> vFuiuiiii +#() vFuiuiiiC -> vFuiuiiiC +#() vFuiuiiip -> vFuiuiiip +#() vFuiuiiuU -> vFuiuiiuU +#() vFuiuCiuu -> vFuiuCiuu +#() vFuiupiiu -> vFuiupiiu +#() vFuiupuip -> vFuiupuip +#() vFuipiiii -> vFuipiiii +#() vFuipffff -> vFuipffff +#() vFuipdddd -> vFuipdddd +#() vFuuiiiii -> vFuuiiiii +#() vFuuiiiiC -> vFuuiiiiC +#() vFuuiiiiu -> vFuuiiiiu +#() vFuuiiiip -> vFuuiiiip +#() vFuuiiuup -> vFuuiiuup +#() vFuuiCiui -> vFuuiCiui +#() vFuuiCiuu -> vFuuiCiuu +#() vFuuiuiii -> vFuuiuiii +#() vFuuiuiiC -> vFuuiuiiC +#() vFuuipppp -> vFuuipppp +#() vFuuuiiii -> vFuuuiiii +#() vFuuuiiCp -> vFuuuiiCp +#() vFuuuiuil -> vFuuuiuil +#() vFuuuiupi -> vFuuuiupi +#() vFuuuuuuu -> vFuuuuuuu +#() vFuuuulll -> vFuuuulll +#() vFuuuffff -> vFuuuffff +#() vFuuudddd -> vFuuudddd +#() vFuuffiip -> vFuuffiip +#() vFuuddiip -> vFuuddiip +#() vFuulluup -> vFuulluup +#() vFuupiiii -> vFuupiiii +#() vFuuppppp -> vFuuppppp +#() vFuffffff -> vFuffffff +#() vFudddddd -> vFudddddd +#() vFlliiiip -> vFlliiiip +#() vFpipipiu -> vFpipipiu +#() vFpddiidd -> vFpddiidd +#() vFXLiiiLi -> vFXLiiiLi +#() vFXLiiipi -> vFXLiiipi +#() vFXLiiuui -> vFXLiiuui +#() vFXLLuuuu -> vFXLLuuuu +#() vFXLppipi -> vFXLppipi +#() vFXpiipii -> vFXpiipii +#() vFXppiiii -> vFXppiiii +#() iEEpLiipV -> iEEpLiipV +#() iEEpLiLpV -> iEEpLiLpV +#() iFEpppipp -> iFEpppipp +#() iFEpppupp -> iFEpppupp +#() iEEpppppp -> iEEpppppp +#() iFEXLpiiL -> iFEXLpiiL +#() iFEXLpppp -> iFEXLpppp +#() iFEXppppp -> iFEXppppp +#() iFuiiiuup -> iFuiiiuup +#() iFpiuuuiu -> iFpiuuuiu +#() iFpWCiWCi -> iFpWCiWCi +#() iEpupupui -> iEpupupui +#() iFXiuLiii -> iFXiuLiii +#() iFXiLuupp -> iFXiLuupp +#() iFXLiiiiL -> iFXLiiiiL +#() iFXLiiuui -> iFXLiiuui +#() iFXLpiiii -> iFXLpiiii +#() iFXLpiiuu -> iFXLpiiuu +#() iFXLpiipi -> iFXLpiipi +#() iFXLppiii -> iFXLppiii +#() iFXpiipii -> iFXpiipii +#() iFXpLiWwL -> iFXpLiWwL +#() iFXpLuuii -> iFXpLuuii +#() uFuippppp -> uFuippppp +#() lEEipLpLL -> lEEipLpLL +#() pFEpiiiiu -> pFEpiiiiu +#() pFEpLiiii -> pFEpLiiii +#() pEEpLiiiI -> pEEpLiiiI +#() pFEpLiiiI -> pFEpLiiiI +#() pEEpLiiil -> pEEpLiiil +#() pFEpXppip -> pFEpXppip +#() vFXLLiiibl_ -> vFXLLiiiB +#() iFXiLibiip_ip -> iFXiLiBip +#() iFXLibL_ubL_u -> iFXLiBuBu +#() vFXLpiibpiip_i -> vFXLpiiBi +#() iFXLpiibpiiL_i -> iFXLpiiBi +#() LFXLLuubLWWWcc_bLWWWcc_ -> LFXLLuuBB +#() LFXLLbLWWWcc_bLWWWcc_uu -> LFXLLBBuu +#() vFiiiiuuip -> vFiiiiuuip +#() vFiilliilp -> vFiilliilp +#() vFiupuiuup -> vFiupuiuup +#() vFiupuuuup -> vFiupuuuup +#() vFuiiiiiii -> vFuiiiiiii +#() vFuiiiiiiC -> vFuiiiiiiC +#() vFuiiiiuup -> vFuiiiiuup +#() vFuiiipiup -> vFuiiipiup +#() vFuiuiiiii -> vFuiuiiiii +#() vFuiuiiiip -> vFuiuiiiip +#() vFuiuiiiuU -> vFuiuiiiuU +#() vFuiuiiCuU -> vFuiuiiCuU +#() vFuiuiuuuu -> vFuiuiuuuu +#() vFuCCCCfff -> vFuCCCCfff +#() vFuuiiiiiC -> vFuuiiiiiC +#() vFuuiiiuip -> vFuuiiiuip +#() vFuuiiiuup -> vFuuiiiuup +#() vFuuiiuupp -> vFuuiiuupp +#() vFuuiuiiii -> vFuuiuiiii +#() vFuuiuiiiC -> vFuuiuiiiC +#() vFuuiuiiip -> vFuuiuiiip +#() vFuuuiiiiu -> vFuuuiiiiu +#() vFuuuiuCil -> vFuuuiuCil +#() vFuuuipipp -> vFuuuipipp +#() vFuuuuuuuu -> vFuuuuuuuu +#() vFuuufffff -> vFuuufffff +#() vFffffffff -> vFffffffff +#() vFXiLLiipi -> vFXiLLiipi +#() vFXiLpiiuu -> vFXiLpiiuu +#() vFXLiiiLii -> vFXLiiiLii +#() vFXLLLiipi -> vFXLLLiipi +#() vFXLppiipi -> vFXLppiipi +#() vFXppuulll -> vFXppuulll +#() iEEpippppp -> iEEpippppp +#() iEEpLiLppp -> iEEpLiLppp +#() iFEppipppp -> iFEppipppp +#() iFuiiiiuup -> iFuiiiiuup +#() iFpuippupp -> iFpuippupp +#() iFpuuiiuuu -> iFpuuiiuuu +#() iFXuupuupp -> iFXuupuupp +#() iFXLpipppp -> iFXLpipppp +#() iFXLppLpip -> iFXLppLpip +#() iFXpIIIppp -> iFXpIIIppp +#() CFuiifpppp -> CFuiifpppp +#() uFuipppppp -> uFuipppppp +#() uFuupuuiuf -> uFuupuuiuf +#() uFulpppppp -> uFulpppppp +#() LFEXLppuuu -> LFEXLppuuu +#() LFXLpuuLLu -> LFXLpuuLLu +#() iFXLLiippBL_ -> iFXLLiippB +#() iFXLpppbL_pp -> iFXLpppBpp +#() vFiiiiiiiii -> vFiiiiiiiii +#() vFiiiiiiill -> vFiiiiiiill +#() vFiiiiillli -> vFiiiiillli +#() vFiiilllilp -> vFiiilllilp +#() vFiupuiuuup -> vFiupuiuuup +#() vFiupuuuuup -> vFiupuuuuup +#() vFuiiiiiiii -> vFuiiiiiiii +#() vFuiiiiiiiC -> vFuiiiiiiiC +#() vFuiiiiiuip -> vFuiiiiiuip +#() vFuiiiiiuup -> vFuiiiiiuup +#() vFuiuiiiiip -> vFuiuiiiiip +#() vFuiuiiiCuU -> vFuiuiiiCuU +#() vFuiupuffup -> vFuiupuffup +#() vFuuiiiiiii -> vFuuiiiiiii +#() vFuuiiiiiiC -> vFuuiiiiiiC +#() vFuuiiiiuup -> vFuuiiiiuup +#() vFuuiuiiiii -> vFuuiuiiiii +#() vFuuiuiiiip -> vFuuiuiiiip +#() vFuuuiiiiCp -> vFuuuiiiiCp +#() vFuuuuuuuuu -> vFuuuuuuuuu +#() vFuupuuiuuf -> vFuupuuiuuf +#() vFuffffffff -> vFuffffffff +#() vFffCCCCfff -> vFffCCCCfff +#() vFddddddddd -> vFddddddddd +#() vFXiLLpiipi -> vFXiLLpiipi +#() vFXLiiipiii -> vFXLiiipiii +#() iFEXLLLiipi -> iFEXLLLiipi +#() iFuiiuuiiip -> iFuiiuuiiip +#() iFuiiupiiup -> iFuiiupiiup +#() iFdddpppppp -> iFdddpppppp +#() iFppippippp -> iFppippippp +#() iFXuuuLiiip -> iFXuuuLiiip +#() iFXuuuLpppp -> iFXuuuLpppp +#() iFXLiuiiLLL -> iFXLiuiiLLL +#() iFXLLiiuuii -> iFXLLiiuuii +#() iFXLpiiuuii -> iFXLpiiuuii +#() uFuulpiuiuf -> uFuulpiuiuf +#() LFXLiiiiiip -> LFXLiiiiiip +#() LFXLiiuuuLL -> LFXLiiuuuLL +#() pFEuiiiuuuu -> pFEuiiiuuuu +#() pFEXLiiuuLi -> pFEXLiiuuLi +#() pFpiiiiuuuu -> pFpiiiiuuuu +#() iFXLbL_pppppp -> iFXLBpppppp +#() iFXiLiiibiip_ip -> iFXiLiiiBip +#() iFXiLLLiiibiip_ -> iFXiLLLiiiB +#() iFXLbL_bL_ppppp -> iFXLBBppppp +#() vFXiLLrLiiuL_iipi -> vFXiLLBiipi +#() pFEXbpLiLLLii_uippuu -> pFEXBuippuu +#() vFEXLpppippp -> vFEXLpppippp +#() vFiiiiiiiiii -> vFiiiiiiiiii +#() vFiiiiiiiiui -> vFiiiiiiiiui +#() vFiiiiiiiiuu -> vFiiiiiiiiuu +#() vFiiillliiip -> vFiiillliiip +#() vFuiiiiiiiii -> vFuiiiiiiiii +#() vFuiiiiiiiip -> vFuiiiiiiiip +#() vFuiiiiiiuup -> vFuiiiiiiuup +#() vFuiuiiiiuup -> vFuiuiiiiuup +#() vFuuiiiiiiii -> vFuuiiiiiiii +#() vFuuiiiiiuip -> vFuuiiiiiuip +#() vFuuiiiiiuup -> vFuuiiiiiuup +#() vFuuiuiiiiip -> vFuuiuiiiiip +#() vFuuuuuuuCCC -> vFuuuuuuuCCC +#() vFuuuuuuuuuu -> vFuuuuuuuuuu +#() vFuupuiupuuf -> vFuupuiupuuf +#() vFuffiiffiip -> vFuffiiffiip +#() vFuddiiddiip -> vFuddiiddiip +#() vFffffffffff -> vFffffffffff +#() iFuiiiuuiiip -> iFuiiiuuiiip +#() iFppuuiiuuuu -> iFppuuiiuuuu +#() iFXiLLdduudd -> iFXiLLdduudd +#() iFXuuLiuiiLL -> iFXuuLiuiiLL +#() iFXLLpiiuuii -> iFXLLpiiuuii +#() pFEpiiiiuuuu -> pFEpiiiiuuuu +#() pFpppppppppp -> pFpppppppppp +#() pFXpuiipuuii -> pFXpuiipuuii +#() iFXiiLiiibiip_ip -> iFXiiLiiiBip +#() iFXiLLiiibiip_ip -> iFXiLLiiiBip +#() vFiiiiillliip -> vFiiiiillliip +#() vFiiiiilllilp -> vFiiiiilllilp +#() vFuiiiiiiiuip -> vFuiiiiiiiuip +#() vFuiiiiiiiuup -> vFuiiiiiiiuup +#() vFuiiiillliip -> vFuiiiillliip +#() vFuiuiiiiiuup -> vFuiuiiiiiuup +#() vFuuiiiiiiuup -> vFuuiiiiiiuup +#() vFuuupupppppp -> vFuuupupppppp +#() vFuuffiiffiip -> vFuuffiiffiip +#() vFuufffffffff -> vFuufffffffff +#() vFuuddiiddiip -> vFuuddiiddiip +#() vFuUuuuuuuuuu -> vFuUuuuuuuuuu +#() vFuffffffffff -> vFuffffffffff +#() vFUufffffffff -> vFUufffffffff +#() vFpiiiiiiiiuu -> vFpiiiiiiiiuu +#() vFpipipiipiiu -> vFpipipiipiiu +#() iFEXLppiiiiuu -> iFEXLppiiiiuu +#() iFEXpLLiiLWpi -> iFEXpLLiiLWpi +#() iFuiiiiuuiiip -> iFuiiiiuuiiip +#() iFXLLpiiuuiiL -> iFXLLpiiuuiiL +#() pFEXpuiipuuii -> pFEXpuiipuuii +#() iFXiiLLiiibiip_ip -> iFXiiLLiiiBip +#() vFXiLLrLiiuL_iiiipi -> vFXiLLBiiiipi +#() iFXLibL_iiiibL_bL_bL_ -> iFXLiBiiiiBBB +#() vFuiiiiiiiiuUC -> vFuiiiiiiiiuUC +#() vFuiiiiiiiuuip -> vFuiiiiiiiuuip +#() vFuuiiiiiiiiuu -> vFuuiiiiiiiiuu +#() vFuuiiiiiiiuip -> vFuuiiiiiiiuip +#() vFuuiiiiiiiuup -> vFuuiiiiiiiuup +#() vFuuuuuuuuuuuu -> vFuuuuuuuuuuuu +#() vFffffffffffff -> vFffffffffffff +#() vFXiLLpiiiipii -> vFXiLLpiiiipii +#() iFEXLppiiiiuui -> iFEXLppiiiiuui +#() iFXLpppppppppp -> iFXLpppppppppp +#() pFEXLiiuuLipii -> pFEXLiiuuLipii +#() vFXiLLrLiiuL_Liiiipi -> vFXiLLBLiiiipi +#() vFuiiiiiiiiiuup -> vFuiiiiiiiiiuup +#() vFuuuuuuuuuuuuu -> vFuuuuuuuuuuuuu +#() vFuUuuuuuuuuuuu -> vFuUuuuuuuuuuuu +#() vFuffffffffffff -> vFuffffffffffff +#() vFXiLLLiiiiiiuu -> vFXiLLLiiiiiiuu +#() iFEXLLlliLppppp -> iFEXLLlliLppppp +#() iFddddpppddpppp -> iFddddpppddpppp +#() iFXippuuuiipppp -> iFXippuuuiipppp +#() uFippuuuulllipp -> uFippuuuulllipp +#() LFEXLiiuuuiupLp -> LFEXLiiuuuiupLp +#() iFXLLlliiLBL_pBL_BL_Bp_ -> iFXLLlliiLBpBBB +#() vFuffiiffiiffiip -> vFuffiiffiiffiip +#() vFuddiiddiiddiip -> vFuddiiddiiddiip +#() vFuiiiiiuiiiiilll -> vFuiiiiiuiiiiilll +#() vFuuiiiiuuiiiiiii -> vFuuiiiiuuiiiiiii +#() vFfffffffffffffff -> vFfffffffffffffff +#() vFuuuuiiiiuuiiiiiii -> vFuuuuiiiiuuiiiiiii +#() vFXpuiiiiipuiiiiiiii -> vFXpuiiiiipuiiiiiiii +#() uFippuuuuiiiiuuiiiiiiiipp -> uFippuuuuiiiiuuiiiiiiiipp +#defined(HAVE_LD80BITS) DED -> DED +#defined(HAVE_LD80BITS) DEDD -> DEDD +#defined(HAVE_LD80BITS) DEDp -> DEDp +#defined(HAVE_LD80BITS) DEpBp_a -> DEpBa +#!defined(HAVE_LD80BITS) KEK -> KEK +#!defined(HAVE_LD80BITS) KEKK -> KEKK +#!defined(HAVE_LD80BITS) KEKp -> KEKp +#!defined(HAVE_LD80BITS) KEpBp_a -> KEpBa +#() iEEvpp -> iEEpp +#() iEEvpV -> iEEpV +#() UEsvvs -> UEss +#() pEEppv -> pEEpp +#() LEpBp_iv -> LEpBp_i +#() iEEivpV -> iEEipV +#() iEESvpp -> iEESpp +#() iEESvpV -> iEESpV +#() iEEpvvpV -> iEEppV +#() iEEpLvvpp -> iEEpLpp +wrappedcrashhandler: +wrappedexpat: +- vFpp: + - XML_SetCharacterDataHandler +- vFppp: + - XML_SetDoctypeDeclHandler + - XML_SetElementHandler +- uFpii: + - XML_ParseBuffer +wrappedfontconfig: +- uFpu: + - FcFreeTypeCharIndex +- iFppiUi: + - FcPatternAdd +wrappedfreetype: +- iFp: + - FT_Done_Face + - FT_Has_PS_Glyph_Names +- uFp: + - FT_Get_Sfnt_Name_Count +- pFp: + - FT_Get_Postscript_Name + - FT_Get_X11_Font_Format +- vFpp: + - FT_Matrix_Multiply + - FT_Outline_Get_CBox + - FT_Outline_Transform +- iFpi: + - FT_Select_Charmap + - FT_Select_Size +- iFpu: + - FT_Render_Glyph +- iFpl: + - FT_Outline_Embolden +- iFpp: + - FT_Get_PS_Font_Info + - FT_Get_WinFNT_Header + - FT_Request_Size + - FT_Set_Charmap +- uFpL: + - FT_Get_Char_Index +- LFpp: + - FT_Get_First_Char +- pFpi: + - FT_Get_Sfnt_Table +- vFpll: + - FT_Outline_Translate +- vFppp: + - FT_Set_Transform +- iFpip: + - FT_Get_Sfnt_Name +- iFpui: + - FT_Load_Glyph +- iFpuu: + - FT_Set_Pixel_Sizes +- iFpLi: + - FT_Load_Char +- iFppp: + - FT_Get_BDF_Property + - FT_Outline_Get_Bitmap +- LFpLp: + - FT_Get_Next_Char +- iFpupu: + - FT_Get_Glyph_Name +- iFpplp: + - FT_New_Face + - FT_Open_Face +- iFpuuup: + - FT_Get_Kerning +- iFplluu: + - FT_Set_Char_Size +- iFpLlpp: + - FT_Load_Sfnt_Table +- iFppllp: + - FT_New_Memory_Face +wrappedldlinux: +- pFv: + - ___tls_get_addr +- pFp: + - __tls_get_addr +wrappedlibasound: +- iFp: + - snd_device_name_free_hint +- iFipp: + - snd_device_name_hint +- iFpppp: + - snd_pcm_mmap_begin +wrappedlibc: +- vEv: +- vEp: + - freeaddrinfo + - regfree +- iEv: +- iEi: + - __close_nocancel +- iEL: +- iEp: + - posix_spawn_file_actions_destroy + - posix_spawn_file_actions_init + - sysinfo +- iEO: +- uEp: +- uES: + - getwc +- UEp: +- lEi: + - __sysconf + - sysconf +- lEp: + - atol +- lEV: +- lES: + - ftell +- LEL: +- pEv: + - __ctype_b_loc + - __ctype_tolower_loc + - __ctype_toupper_loc + - __errno_location + - localeconv +- pFv: + - __h_errno_location +- pEu: + - getpwuid +- pEL: +- pFp: + - gethostbyname +- pEp: + - getprotobyname + - getpwnam + - gmtime + - localtime +- pES: + - getmntent +- iEbp_: + - getifaddrs +- pEriiiiiiiiilt_: + - asctime +- vEip: +- vEpi: +- vEpu: +- vEpp: +- iEip: + - futimens + - futimes +- iEup: + - getrlimit + - setrlimit +- iEpi: + - backtrace + - posix_spawn_file_actions_addclose +- iEpL: +- iEpp: + - alphasort64 + - execvp + - statvfs + - statvfs64 + - utimes +- iEpV: + - execl + - execlp +- IEII: +- UEUU: +- pEip: + - signal +- pELL: + - aligned_alloc +- pEpi: + - backtrace_symbols +- pEpp: + - __cmsg_nxthdr + - __gmtime_r + - gmtime_r + - localtime_r +- SEpp: +- iErLL_BLL_: +- vEipp: + - vsyslog +- vEipV: +- vEpup: + - _ITM_addUserCommitAction +- vEppu: +- iEvpp: +- iEvpV: +- iEiip: +- iEiiN: +- iEipp: +- iEpii: + - posix_spawn_file_actions_adddup2 +- iEpLi: +- iEppi: + - regcomp +- iEppp: + - execvpe + - vswscanf +- iEppV: + - __isoc99_fscanf + - swscanf +- iEpON: +- iESpp: +- iESpV: + - fscanf +- lEipi: + - readv + - recvmsg + - sendmsg + - writev +- lEipL: +- lEppL: +- pEpii: +- pEpII: +- pEpLL: +- pEppv: + - __realpath_chk +- KEpBp_a: + - __strtold_l + - strtold_l +- lEpBp_i: + - wcstol +- LEpBp_i: + - wcstoul +- vEiipp: + - __vsyslog_chk +- vEiipV: + - __syslog_chk +- vEpLLp: +- vEppiV: +- iEivpV: +- iEiiip: +- iEipii: +- iEippi: + - utimensat +- iEippL: + - readlinkat +- iEpipp: +- iEpipV: +- iEpLpp: +- iEpLpV: +- iEpppp: + - getaddrinfo +- iESvpp: +- iESvpV: +- uEippu: + - regerror +- LEpBp_iv: +- iEiippi: +- iEipppp: + - getopt_long +- iEuppLp: + - getgrgid_r + - getpwuid_r +- iEpvvpV: +- iEpiLpp: +- iEpipOi: + - posix_spawn_file_actions_addopen +- iEppupi: + - regexec +- iEpppLp: + - getgrnam_r + - getpwnam_r +- pEpLLiN: +- pEppLLp: +- iEpLvvpp: +- iEpLiipV: +- iEpLiLpV: +- iFpppupp: + - gethostbyname_r +- iEpppppp: + - posix_spawn +- lEipLpLL: + - process_vm_readv + - process_vm_writev +- pEpLiiiI: +- pEpLiiil: +- iEpippppp: +- iEpLiLppp: +wrappedlibdl: +- iEp: + - dlclose +- pEv: + - dlerror +- iEpp: + - _dl_find_object + - dladdr +- pEpi: + - dlopen +- pEpp: + - dlsym +- iEpip: + - dlinfo +- pEppi: + - dlmopen +- pEppp: + - dlvsym +- iEpppi: + - dladdr1 +wrappedlibgl: +- iFi: + - glXSwapIntervalMESA +- pFp: + - glGetVkProcAddrNV + - glXGetProcAddress + - glXGetProcAddressARB +- vFip: + - glVDPAUMapSurfacesNV + - glVDPAUUnmapSurfacesNV +- vFpp: + - glDebugMessageCallback + - glDebugMessageCallbackAMD + - glDebugMessageCallbackARB + - glDebugMessageCallbackKHR +- iFpp: + - eglDebugMessageControlKHR +- pFXp: + - glXGetVisualFromFBConfig +- vFipp: + - glProgramCallbackMESA +- vFppp: + - eglSetBlobCacheFuncsANDROID +- vFXpi: + - glXSwapIntervalEXT +- uFuip: + - glCreateShaderProgramv +- pFXip: + - glXChooseVisual + - glXGetFBConfigs +- vFuipu: + - glTransformFeedbackVaryings + - glTransformFeedbackVaryingsEXT +- vFuipp: + - glCompileShaderIncludeARB + - glGetUniformIndices + - glShaderSource + - glShaderSourceARB +- pFXipp: + - glXChooseFBConfig +- pFXppi: + - glXCreateContext +- vFuippp: + - glBindVertexBuffers +- vFupupi: + - glMultiDrawElements + - glMultiDrawElementsEXT +- vFuuippp: + - glBindBuffersRange + - glVertexArrayVertexBuffers +- vFupupip: + - glMultiDrawElementsBaseVertex +wrappedlibglu: +- vFpup: + - gluNurbsCallback + - gluQuadricCallback + - gluTessCallback +wrappedlibm: +- UEs: + - cacosf + - cacoshf + - casinf + - casinhf + - catanf + - catanhf + - ccosf + - ccoshf + - cexpf + - clogf + - cprojf + - csinf + - csinhf + - csqrtf + - ctanf + - ctanhf +- fEf: + - __acosf_finite + - __acoshf_finite + - __asinf_finite + - __coshf_finite + - __exp2f_finite + - __expf_finite + - __log10f_finite + - __log2f_finite + - __logf_finite + - __sinhf_finite + - __sqrtf_finite +- dEd: + - __acos_finite + - __acosh_finite + - __asin_finite + - __cosh_finite + - __exp2_finite + - __exp_finite + - __log10_finite + - __log2_finite + - __log_finite + - __sinh_finite + - __sqrt_finite +- DED: + - pow10l +- KEK: + - acoshl + - acosl + - asinhl + - asinl + - atanhl + - cbrtl + - erfcl + - erfl + - ldexpl + - lgammal + - logl + - pow10l + - tgammal +- fEff: + - __atan2f_finite + - __hypotf_finite + - __powf_finite +- dEdd: + - __atan2_finite + - __hypot_finite + - __pow_finite +- KEKK: + - fmodl + - powl +- KEKp: + - frexpl + - lgammal_r +- UEsvvs: + - cpowf +wrappedlibpthread: +- vEv: + - __pthread_initialize +- vEp: + - __pthread_register_cancel + - __pthread_unregister_cancel + - __pthread_unwind_next +- iEp: + - __pthread_mutex_destroy + - __pthread_mutex_lock + - __pthread_mutex_trylock + - __pthread_mutex_unlock + - __pthread_mutexattr_init + - pthread_attr_destroy + - pthread_attr_init + - pthread_cond_broadcast + - pthread_cond_broadcast@GLIBC_2.0 + - pthread_cond_destroy + - pthread_cond_destroy@GLIBC_2.0 + - pthread_cond_signal + - pthread_cond_signal@GLIBC_2.0 + - pthread_mutex_destroy + - pthread_mutex_lock + - pthread_mutex_trylock + - pthread_mutex_unlock + - pthread_mutexattr_init + - pthread_rwlock_destroy + - pthread_rwlock_unlock + - pthread_rwlock_wrlock + - sem_close + - sem_destroy + - sem_post + - sem_trywait + - sem_wait +- iEh: + - pthread_detach +- vEpi: + - _pthread_cleanup_pop + - _pthread_cleanup_pop_restore +- iEpi: + - pthread_attr_setdetachstate + - pthread_attr_setinheritsched + - pthread_attr_setschedpolicy + - pthread_attr_setscope + - pthread_mutexattr_setkind_np +- iEpL: + - pthread_attr_setguardsize + - pthread_attr_setstacksize +- iEpp: + - __pthread_key_create + - __pthread_mutex_init + - __pthread_once + - __pthread_rwlock_init + - pthread_attr_getdetachstate + - pthread_attr_getguardsize + - pthread_attr_getinheritsched + - pthread_attr_getschedparam + - pthread_attr_getschedpolicy + - pthread_attr_getscope + - pthread_attr_getstackaddr + - pthread_attr_getstacksize + - pthread_attr_setschedparam + - pthread_attr_setstackaddr + - pthread_cond_init + - pthread_cond_init@GLIBC_2.0 + - pthread_cond_wait + - pthread_cond_wait@GLIBC_2.0 + - pthread_key_create + - pthread_mutex_init + - pthread_mutex_timedlock + - pthread_once + - pthread_rwlock_init + - sem_getvalue +- iEhi: + - pthread_kill@GLIBC_2.0 +- iEhp: + - pthread_getattr_np +- iEprLL_: + - sem_timedwait +- vEppp: + - _pthread_cleanup_push + - _pthread_cleanup_push_defer +- iEpiu: + - sem_init +- iEpup: + - pthread_attr_setaffinity_np +- iEppL: + - pthread_attr_setstack +- iEppp: + - __pthread_atfork + - pthread_atfork + - pthread_attr_getstack +- iEhup: + - pthread_getaffinity_np + - pthread_setaffinity_np +- pEpOM: + - sem_open +- iEpprLL_: + - pthread_cond_timedwait + - pthread_cond_timedwait@GLIBC_2.0 +- iEBh_ppp: + - pthread_create +wrappedlibrt: +- iEuBLL_: + - __clock_gettime +wrappedlibuuid: +wrappedlibx11: +- vFp: + - XFreeStringList +- vFX: + - XLockDisplay +- iFp: + - XDestroyImage + - XFreeExtensionList + - XFreeModifiermap + - XInitImage + - XRefreshKeyboardMapping + - _XInitImageFuncPtrs +- iFX: + - XCloseDisplay + - XGrabServer +- LFp: + - XVisualIDFromVisual +- pFp: + - XSetErrorHandler + - XSetIOErrorHandler +- pFX: + - XGetModifierMapping +- XFp: + - XOpenDisplay +- vFXp: + - XFreeEventData +- iFpL: + - XFilterEvent +- iFXp: + - XFreeFont + - XGetEventData + - XNextEvent + - XPeekEvent +- LFpi: + - XLookupKeysym +- pFiV: + - XVaCreateNestedList +- pFpV: + - XCreateIC + - XGetIMValues + - XSetICValues + - XSetIMValues +- pFXi: + - XSynchronize +- pFXL: + - XGetWMHints +- pFXp: + - XListExtensions + - XLoadQueryFont +- vFXLp: + - XSetWMNormalHints +- iFpip: + - XStringListToTextProperty +- iFXip: + - XCheckTypedEvent +- iFXlp: + - XMaskEvent +- iFXLp: + - XGetWindowAttributes + - XSetWMHints +- LFXii: + - XGetPixel +- pFXip: + - XESetCloseDisplay + - XESetEventToWire + - XESetWireToEvent +- iFXLip: + - XCheckTypedWindowEvent +- iFXLlp: + - XCheckWindowEvent + - XWindowEvent +- iFXLLp: + - XChangeWindowAttributes +- iFXLpi: + - XQueryColors + - XSetWMProtocols + - XStoreColors +- iFXLpp: + - XGetWMNormalHints +- iFXppp: + - XCheckIfEvent + - XIfEvent +- LFXLpi: + - XCreateColormap +- pFXlpp: + - XGetVisualInfo +- iFXbpLiL_pp: + - XmbTextPropertyToTextList +- iFppipp: + - XLookupString +- iFXLilp: + - XSendEvent +- iFXLpiL: + - XFreeColors +- iFXpiip: + - XInternAtoms +- iFXpiup: + - XmbTextListToTextProperty + - Xutf8TextListToTextProperty +- iFXpppp: + - XQueryExtension +- pFpiiuu: + - XSubImage +- pFXpppp: + - XCreateFontSet +- iFpppipp: + - XmbLookupString + - Xutf8LookupString +- iFXLpppp: + - XQueryTree +- iFXppppp: + - XRegisterIMInstantiateCallback + - XUnregisterIMInstantiateCallback +- iFppipppp: + - XTextExtents +- iFXLLLiipi: + - XChangeProperty +- pFXLiiuuLi: + - XGetImage +- vFXLpppippp: + - XSetWMProperties + - Xutf8SetWMProperties +- iFXLppiiiiuu: + - XPutImage +- pFXpuiipuuii: + - XCreateImage +- pFXLiiuuLipii: + - XGetSubImage +- iFXLLlliLppppp: + - XGetWindowProperty +- LFXLiiuuuiupLp: + - XCreateWindow +wrappedlibxcomposite: +wrappedlibxcursor: +- vFp: + - XcursorCursorsDestroy +- pFXi: + - XcursorCursorsCreate +wrappedlibxext: +- vFp: + - XdbeFreeVisualInfo + - XextDestroyExtension +- pFv: + - XextCreateExtension +- pFp: + - XSetExtensionErrorHandler +- iFpX: + - XextRemoveDisplay +- iFXp: + - XShmAttach + - XShmDetach +- pFpX: + - XextFindDisplay +- pFXpp: + - XdbeGetVisualInfo +- iFXLpiiL: + - XShmGetImage +- pFpXppip: + - XextAddDisplay +- LFXLppuuu: + - XShmCreatePixmap +- pFXbpLiLLLii_uippuu: + - XShmCreateImage +- iFXLppiiiiuui: + - XShmPutImage +wrappedlibxfixes: +- iFXpp: + - XFixesQueryExtension +wrappedlibxi: +- vFp: + - XIFreeDeviceInfo +- iFXp: + - XCloseDevice +- pFXL: + - XOpenDevice +- pFXip: + - XIQueryDevice +- pFXLp: + - XIGetSelectedEvents +- iFXLpi: + - XISelectEvents +- iFXppu: + - XGetDeviceButtonMapping +wrappedlibxrandr: +- vFp: + - XRRFreeProviderInfo + - XRRFreeProviderResources +- pFXL: + - XRRGetProviderResources + - XRRGetScreenResources + - XRRGetScreenResourcesCurrent +- iFXpp: + - XRRQueryExtension +- pFXLL: + - XRRQueryOutputProperty +- pFXLp: + - XRRListOutputProperties +- pFXpL: + - XRRGetCrtcInfo + - XRRGetOutputInfo + - XRRGetPanning + - XRRGetProviderInfo +- iFXpLp: + - XRRSetPanning +- iFXpLLiiLWpi: + - XRRSetCrtcConfig +wrappedlibxrender: +- pFXi: + - XRenderFindStandardFormat +- pFXp: + - XRenderFindVisualFormat +- pFXLrLiiuL_i: + - XRenderFindFormat +wrappedlibxss: +wrappedlibxxf86vm: +- iFXipp: + - XF86VidModeGetAllModeLines +wrappedopenal: +- vFv: + - alRequestFoldbackStop +- pFp: + - alGetProcAddress +- pFpp: + - alcGetProcAddress +- vFiiipp: + - alRequestFoldbackStart +wrappedsdl1: +- vFv: + - SDL_Quit +- vFp: + - SDL_FreeSurface + - SDL_KillThread + - SDL_UnloadObject + - SDL_UnlockSurface +- iFv: + - SDL_Has3DNow + - SDL_Has3DNowExt + - SDL_HasAltiVec + - SDL_HasMMX + - SDL_HasMMXExt + - SDL_HasRDTSC + - SDL_HasSSE + - SDL_HasSSE2 +- iFp: + - SDL_ConvertAudio + - SDL_Flip + - SDL_LockSurface + - SDL_PollEvent + - SDL_PushEvent + - SDL_RemoveTimer +- uFp: + - SDL_ReadLE32 +- pFv: + - SDL_GetVideoInfo + - SDL_GetVideoSurface +- pFp: + - SDL_GL_GetProcAddress + - SDL_LoadObject +- vFpp: + - SDL_WM_SetIcon +- iFup: + - SDL_SetTimer +- iFpp: + - SDL_OpenAudio +- pFpi: + - SDL_LoadBMP_RW + - SDL_RWFromMem +- pFpu: + - SDL_ListModes +- pFpp: + - SDL_CreateThread + - SDL_LoadFunction + - SDL_RWFromFile +- iFpuu: + - SDL_SetColorKey +- pFupp: + - SDL_AddTimer +- iFpiuu: + - SDL_PeepEvents +- uFpCCC: + - SDL_MapRGB +- pFiiiu: + - SDL_SetVideoMode +- vFupppp: + - SDL_GetRGB +- iFpWCiWCi: + - SDL_BuildAudioCVT +- pFpiiiiuuuu: + - SDL_CreateRGBSurfaceFrom +wrappedsdl2: +% J SDL2_GUID_t uuuu +- vFp: + - SDL_FreeSurface +- iFp: + - SDL_PollEvent + - SDL_PushEvent + - SDL_RWclose +- IFp: + - SDL_RWsize + - SDL_RWtell +- pFv: + - SDL_GetBasePath +- pFp: + - SDL_GL_GetProcAddress +- hFp: + - SDL_GetThreadID +- JFi: + - SDL_JoystickGetDeviceGUID +- JFp: + - SDL_JoystickGetGUIDFromString +- vFpp: + - SDL_AddEventWatch + - SDL_DelEventWatch + - SDL_SetEventFilter + - SDL_SetWindowIcon +- vFpV: + - SDL_Log +- iFip: + - SDL_GetCurrentDisplayMode + - SDL_GetDesktopDisplayMode +- iFpi: + - SDL_GameControllerAddMappingsFromRW + - SDL_WaitEventTimeout +- iFpp: + - SDL_GetWindowDisplayMode + - SDL_GetWindowWMInfo + - SDL_OpenAudio + - SDL_SetWindowDisplayMode + - SDL_ShowMessageBox +- pFpi: + - SDL_LoadBMP_RW + - SDL_notreal +- pFpp: + - SDL_CreateTextureFromSurface + - SDL_RWFromFile +- iFiip: + - SDL_GetDisplayMode +- iFpiu: + - SDL_SetColorKey +- iFppu: + - SDL_FillRect +- iFppV: + - SDL_sscanf +- IFpIi: + - SDL_RWseek +- pFipp: + - SDL_GetClosestDisplayMode +- pFpii: + - SDL_CreateColorCursor +- pFpuu: + - SDL_ConvertSurfaceFormat +- pFppu: + - SDL_ConvertSurface +- pFppp: + - SDL_CreateThread +- iFpLpp: + - SDL_vsnprintf +- iFpLpV: + - SDL_snprintf +- LFppLL: + - SDL_RWread + - SDL_RWwrite +- iFpiuuu: + - SDL_PeepEvents +- uFpippi: + - SDL_OpenAudioDevice +- pFpiiiiu: + - SDL_CreateRGBSurfaceWithFormatFrom +- pFuiiiuuuu: + - SDL_CreateRGBSurface +- pFpiiiiuuuu: + - SDL_CreateRGBSurfaceFrom +% JFEi -> pFEpi +% JFEp -> pFEpp +wrappedsdl2image: +- pFp: + - IMG_Load + - IMG_LoadBMP_RW + - IMG_LoadCUR_RW + - IMG_LoadGIF_RW + - IMG_LoadICO_RW + - IMG_LoadJPG_RW + - IMG_LoadLBM_RW + - IMG_LoadPCX_RW + - IMG_LoadPNG_RW + - IMG_LoadPNM_RW + - IMG_LoadTGA_RW + - IMG_LoadTIF_RW + - IMG_LoadWEBP_RW + - IMG_LoadXCF_RW + - IMG_LoadXPM_RW + - IMG_LoadXV_RW +- pFpi: + - IMG_Load_RW +- pFpip: + - IMG_LoadTyped_RW +- pFppi: + - IMG_LoadTexture_RW +- pFppip: + - IMG_LoadTextureTyped_RW +wrappedtcmallocminimal: +- pFp: +- iFpL: + - munmap +- pFpLiiii: + - mmap +- pFpLiiiI: + - mmap64 +wrappedudev0: +wrappedudev1: +- vFpp: + - udev_set_log_fn +wrappedxinerama: diff --git a/src/wrapped32/generated/wrappedcrashhandlerdefs32.h b/src/wrapped32/generated/wrappedcrashhandlerdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..120becb3339e1122b050b0c3088166382c035f94 --- /dev/null +++ b/src/wrapped32/generated/wrappedcrashhandlerdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedcrashhandlerDEFS32_H_ +#define __wrappedcrashhandlerDEFS32_H_ + + +#endif // __wrappedcrashhandlerDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedcrashhandlertypes32.h b/src/wrapped32/generated/wrappedcrashhandlertypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..905288e5b37f170c4cd6db01443a641117748cc3 --- /dev/null +++ b/src/wrapped32/generated/wrappedcrashhandlertypes32.h @@ -0,0 +1,17 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedcrashhandlerTYPES32_H_ +#define __wrappedcrashhandlerTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedcrashhandlerTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedcrashhandlerundefs32.h b/src/wrapped32/generated/wrappedcrashhandlerundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..8e122843fbea2df1e3d4f9890398e2638016a964 --- /dev/null +++ b/src/wrapped32/generated/wrappedcrashhandlerundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedcrashhandlerUNDEFS32_H_ +#define __wrappedcrashhandlerUNDEFS32_H_ + + +#endif // __wrappedcrashhandlerUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedexpatdefs32.h b/src/wrapped32/generated/wrappedexpatdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..af198fb7868e42fd37c086dafed4803166f65854 --- /dev/null +++ b/src/wrapped32/generated/wrappedexpatdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedexpatDEFS32_H_ +#define __wrappedexpatDEFS32_H_ + + +#endif // __wrappedexpatDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedexpattypes32.h b/src/wrapped32/generated/wrappedexpattypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..df0307a2a99b0e08a7e1cf3f00c2ef39ce00ff9f --- /dev/null +++ b/src/wrapped32/generated/wrappedexpattypes32.h @@ -0,0 +1,24 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedexpatTYPES32_H_ +#define __wrappedexpatTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFpp_t)(void*, void*); +typedef void (*vFppp_t)(void*, void*, void*); +typedef uint32_t (*uFpii_t)(void*, int32_t, int32_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(XML_SetCharacterDataHandler, vFpp_t) \ + GO(XML_SetDoctypeDeclHandler, vFppp_t) \ + GO(XML_SetElementHandler, vFppp_t) \ + GO(XML_ParseBuffer, uFpii_t) + +#endif // __wrappedexpatTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedexpatundefs32.h b/src/wrapped32/generated/wrappedexpatundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..71e08a01d3985b03c2b9c76112bc81c173ba2af2 --- /dev/null +++ b/src/wrapped32/generated/wrappedexpatundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedexpatUNDEFS32_H_ +#define __wrappedexpatUNDEFS32_H_ + + +#endif // __wrappedexpatUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedfontconfigdefs32.h b/src/wrapped32/generated/wrappedfontconfigdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..170be551eddf23448b7eab71641d2c0c00951035 --- /dev/null +++ b/src/wrapped32/generated/wrappedfontconfigdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedfontconfigDEFS32_H_ +#define __wrappedfontconfigDEFS32_H_ + + +#endif // __wrappedfontconfigDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedfontconfigtypes32.h b/src/wrapped32/generated/wrappedfontconfigtypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..f147d625e89bdc1ac8fb4fafd69cec699343404c --- /dev/null +++ b/src/wrapped32/generated/wrappedfontconfigtypes32.h @@ -0,0 +1,21 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedfontconfigTYPES32_H_ +#define __wrappedfontconfigTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef uint32_t (*uFpu_t)(void*, uint32_t); +typedef int32_t (*iFppiUi_t)(void*, void*, int32_t, uint64_t, int32_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(FcFreeTypeCharIndex, uFpu_t) \ + GO(FcPatternAdd, iFppiUi_t) + +#endif // __wrappedfontconfigTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedfontconfigundefs32.h b/src/wrapped32/generated/wrappedfontconfigundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..52ed712bf0aa8a7a6da40ae38cf45b6bbc673bc7 --- /dev/null +++ b/src/wrapped32/generated/wrappedfontconfigundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedfontconfigUNDEFS32_H_ +#define __wrappedfontconfigUNDEFS32_H_ + + +#endif // __wrappedfontconfigUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedfreetypedefs32.h b/src/wrapped32/generated/wrappedfreetypedefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..895104149ece207ec894b77636a897f38a7d87bc --- /dev/null +++ b/src/wrapped32/generated/wrappedfreetypedefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedfreetypeDEFS32_H_ +#define __wrappedfreetypeDEFS32_H_ + + +#endif // __wrappedfreetypeDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedfreetypetypes32.h b/src/wrapped32/generated/wrappedfreetypetypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..8d1776196b14e453d355602f29839bbd507e76ce --- /dev/null +++ b/src/wrapped32/generated/wrappedfreetypetypes32.h @@ -0,0 +1,77 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedfreetypeTYPES32_H_ +#define __wrappedfreetypeTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef int32_t (*iFp_t)(void*); +typedef uint32_t (*uFp_t)(void*); +typedef void* (*pFp_t)(void*); +typedef void (*vFpp_t)(void*, void*); +typedef int32_t (*iFpi_t)(void*, int32_t); +typedef int32_t (*iFpu_t)(void*, uint32_t); +typedef int32_t (*iFpl_t)(void*, intptr_t); +typedef int32_t (*iFpp_t)(void*, void*); +typedef uint32_t (*uFpL_t)(void*, uintptr_t); +typedef uintptr_t (*LFpp_t)(void*, void*); +typedef void* (*pFpi_t)(void*, int32_t); +typedef void (*vFpll_t)(void*, intptr_t, intptr_t); +typedef void (*vFppp_t)(void*, void*, void*); +typedef int32_t (*iFpip_t)(void*, int32_t, void*); +typedef int32_t (*iFpui_t)(void*, uint32_t, int32_t); +typedef int32_t (*iFpuu_t)(void*, uint32_t, uint32_t); +typedef int32_t (*iFpLi_t)(void*, uintptr_t, int32_t); +typedef int32_t (*iFppp_t)(void*, void*, void*); +typedef uintptr_t (*LFpLp_t)(void*, uintptr_t, void*); +typedef int32_t (*iFpupu_t)(void*, uint32_t, void*, uint32_t); +typedef int32_t (*iFpplp_t)(void*, void*, intptr_t, void*); +typedef int32_t (*iFpuuup_t)(void*, uint32_t, uint32_t, uint32_t, void*); +typedef int32_t (*iFplluu_t)(void*, intptr_t, intptr_t, uint32_t, uint32_t); +typedef int32_t (*iFpLlpp_t)(void*, uintptr_t, intptr_t, void*, void*); +typedef int32_t (*iFppllp_t)(void*, void*, intptr_t, intptr_t, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(FT_Done_Face, iFp_t) \ + GO(FT_Has_PS_Glyph_Names, iFp_t) \ + GO(FT_Get_Sfnt_Name_Count, uFp_t) \ + GO(FT_Get_Postscript_Name, pFp_t) \ + GO(FT_Get_X11_Font_Format, pFp_t) \ + GO(FT_Matrix_Multiply, vFpp_t) \ + GO(FT_Outline_Get_CBox, vFpp_t) \ + GO(FT_Outline_Transform, vFpp_t) \ + GO(FT_Select_Charmap, iFpi_t) \ + GO(FT_Select_Size, iFpi_t) \ + GO(FT_Render_Glyph, iFpu_t) \ + GO(FT_Outline_Embolden, iFpl_t) \ + GO(FT_Get_PS_Font_Info, iFpp_t) \ + GO(FT_Get_WinFNT_Header, iFpp_t) \ + GO(FT_Request_Size, iFpp_t) \ + GO(FT_Set_Charmap, iFpp_t) \ + GO(FT_Get_Char_Index, uFpL_t) \ + GO(FT_Get_First_Char, LFpp_t) \ + GO(FT_Get_Sfnt_Table, pFpi_t) \ + GO(FT_Outline_Translate, vFpll_t) \ + GO(FT_Set_Transform, vFppp_t) \ + GO(FT_Get_Sfnt_Name, iFpip_t) \ + GO(FT_Load_Glyph, iFpui_t) \ + GO(FT_Set_Pixel_Sizes, iFpuu_t) \ + GO(FT_Load_Char, iFpLi_t) \ + GO(FT_Get_BDF_Property, iFppp_t) \ + GO(FT_Outline_Get_Bitmap, iFppp_t) \ + GO(FT_Get_Next_Char, LFpLp_t) \ + GO(FT_Get_Glyph_Name, iFpupu_t) \ + GO(FT_New_Face, iFpplp_t) \ + GO(FT_Open_Face, iFpplp_t) \ + GO(FT_Get_Kerning, iFpuuup_t) \ + GO(FT_Set_Char_Size, iFplluu_t) \ + GO(FT_Load_Sfnt_Table, iFpLlpp_t) \ + GO(FT_New_Memory_Face, iFppllp_t) + +#endif // __wrappedfreetypeTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedfreetypeundefs32.h b/src/wrapped32/generated/wrappedfreetypeundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..a37e684bc70da60e5508f11774245cba11d63a32 --- /dev/null +++ b/src/wrapped32/generated/wrappedfreetypeundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedfreetypeUNDEFS32_H_ +#define __wrappedfreetypeUNDEFS32_H_ + + +#endif // __wrappedfreetypeUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedldlinuxdefs32.h b/src/wrapped32/generated/wrappedldlinuxdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..6c726b5635f7e793e2fb29af89d01845833eef7a --- /dev/null +++ b/src/wrapped32/generated/wrappedldlinuxdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedldlinuxDEFS32_H_ +#define __wrappedldlinuxDEFS32_H_ + + +#endif // __wrappedldlinuxDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedldlinuxtypes32.h b/src/wrapped32/generated/wrappedldlinuxtypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..66048730ce78ce99a9963d090896c59e6f1ea3c5 --- /dev/null +++ b/src/wrapped32/generated/wrappedldlinuxtypes32.h @@ -0,0 +1,21 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedldlinuxTYPES32_H_ +#define __wrappedldlinuxTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void* (*pFv_t)(void); +typedef void* (*pFp_t)(void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(___tls_get_addr, pFv_t) \ + GO(__tls_get_addr, pFp_t) + +#endif // __wrappedldlinuxTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedldlinuxundefs32.h b/src/wrapped32/generated/wrappedldlinuxundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..20d6542b2942d57f64edef2af1e7a13639ee440f --- /dev/null +++ b/src/wrapped32/generated/wrappedldlinuxundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedldlinuxUNDEFS32_H_ +#define __wrappedldlinuxUNDEFS32_H_ + + +#endif // __wrappedldlinuxUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibasounddefs32.h b/src/wrapped32/generated/wrappedlibasounddefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..79a9382c0b3d8ddd6bdcc71689f7f7621b2012ed --- /dev/null +++ b/src/wrapped32/generated/wrappedlibasounddefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibasoundDEFS32_H_ +#define __wrappedlibasoundDEFS32_H_ + + +#endif // __wrappedlibasoundDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibasoundtypes32.h b/src/wrapped32/generated/wrappedlibasoundtypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..298952d0714970c1af2147e6d8249e1a4f86c7a6 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibasoundtypes32.h @@ -0,0 +1,23 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibasoundTYPES32_H_ +#define __wrappedlibasoundTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef int32_t (*iFp_t)(void*); +typedef int32_t (*iFipp_t)(int32_t, void*, void*); +typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(snd_device_name_free_hint, iFp_t) \ + GO(snd_device_name_hint, iFipp_t) \ + GO(snd_pcm_mmap_begin, iFpppp_t) + +#endif // __wrappedlibasoundTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibasoundundefs32.h b/src/wrapped32/generated/wrappedlibasoundundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..386c2078ed6447bc211bfc79d50b93e2ba4c4785 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibasoundundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibasoundUNDEFS32_H_ +#define __wrappedlibasoundUNDEFS32_H_ + + +#endif // __wrappedlibasoundUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibcdefs32.h b/src/wrapped32/generated/wrappedlibcdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..9a15408b023adac05b0debe4dc8f13de781b19b2 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibcdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibcDEFS32_H_ +#define __wrappedlibcDEFS32_H_ + + +#endif // __wrappedlibcDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibctypes32.h b/src/wrapped32/generated/wrappedlibctypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..315161003799f4ae3bfc45c017427bef2b43ce99 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibctypes32.h @@ -0,0 +1,205 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibcTYPES32_H_ +#define __wrappedlibcTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vEv_t)(void); +typedef void (*vEp_t)(void*); +typedef int32_t (*iEv_t)(void); +typedef int32_t (*iEi_t)(int32_t); +typedef int32_t (*iEL_t)(uintptr_t); +typedef int32_t (*iEp_t)(void*); +typedef int32_t (*iEO_t)(int32_t); +typedef uint32_t (*uEp_t)(void*); +typedef uint32_t (*uES_t)(void*); +typedef uint64_t (*UEp_t)(void*); +typedef intptr_t (*lEi_t)(int32_t); +typedef intptr_t (*lEp_t)(void*); +typedef intptr_t (*lEV_t)(...); +typedef intptr_t (*lES_t)(void*); +typedef uintptr_t (*LEL_t)(uintptr_t); +typedef void* (*pEv_t)(void); +typedef void* (*pFv_t)(void); +typedef void* (*pEu_t)(uint32_t); +typedef void* (*pEL_t)(uintptr_t); +typedef void* (*pFp_t)(void*); +typedef void* (*pEp_t)(void*); +typedef void* (*pES_t)(void*); +typedef int32_t (*iEbp__t)(struct_p_t*); +typedef void* (*pEriiiiiiiiilt__t)(struct_iiiiiiiiilt_t*); +typedef void (*vEip_t)(int32_t, void*); +typedef void (*vEpi_t)(void*, int32_t); +typedef void (*vEpu_t)(void*, uint32_t); +typedef void (*vEpp_t)(void*, void*); +typedef int32_t (*iEip_t)(int32_t, void*); +typedef int32_t (*iEup_t)(uint32_t, void*); +typedef int32_t (*iEpi_t)(void*, int32_t); +typedef int32_t (*iEpL_t)(void*, uintptr_t); +typedef int32_t (*iEpp_t)(void*, void*); +typedef int32_t (*iEpV_t)(void*, ...); +typedef int64_t (*IEII_t)(int64_t, int64_t); +typedef uint64_t (*UEUU_t)(uint64_t, uint64_t); +typedef void* (*pEip_t)(int32_t, void*); +typedef void* (*pELL_t)(uintptr_t, uintptr_t); +typedef void* (*pEpi_t)(void*, int32_t); +typedef void* (*pEpp_t)(void*, void*); +typedef void* (*SEpp_t)(void*, void*); +typedef int32_t (*iErLL_BLL__t)(struct_LL_t*, struct_LL_t*); +typedef void (*vEipp_t)(int32_t, void*, void*); +typedef void (*vEipV_t)(int32_t, void*, ...); +typedef void (*vEpup_t)(void*, uint32_t, void*); +typedef void (*vEppu_t)(void*, void*, uint32_t); +typedef int32_t (*iEvpp_t)(void, void*, void*); +typedef int32_t (*iEvpV_t)(void, void*, ...); +typedef int32_t (*iEiip_t)(int32_t, int32_t, void*); +typedef int32_t (*iEiiN_t)(int32_t, int32_t, ...); +typedef int32_t (*iEipp_t)(int32_t, void*, void*); +typedef int32_t (*iEpii_t)(void*, int32_t, int32_t); +typedef int32_t (*iEpLi_t)(void*, uintptr_t, int32_t); +typedef int32_t (*iEppi_t)(void*, void*, int32_t); +typedef int32_t (*iEppp_t)(void*, void*, void*); +typedef int32_t (*iEppV_t)(void*, void*, ...); +typedef int32_t (*iEpON_t)(void*, int32_t, ...); +typedef int32_t (*iESpp_t)(void*, void*, void*); +typedef int32_t (*iESpV_t)(void*, void*, ...); +typedef intptr_t (*lEipi_t)(int32_t, void*, int32_t); +typedef intptr_t (*lEipL_t)(int32_t, void*, uintptr_t); +typedef intptr_t (*lEppL_t)(void*, void*, uintptr_t); +typedef void* (*pEpii_t)(void*, int32_t, int32_t); +typedef void* (*pEpII_t)(void*, int64_t, int64_t); +typedef void* (*pEpLL_t)(void*, uintptr_t, uintptr_t); +typedef void* (*pEppv_t)(void*, void*, void); +typedef double (*KEpBp_a_t)(void*, struct_p_t*, void*); +typedef intptr_t (*lEpBp_i_t)(void*, struct_p_t*, int32_t); +typedef uintptr_t (*LEpBp_i_t)(void*, struct_p_t*, int32_t); +typedef void (*vEiipp_t)(int32_t, int32_t, void*, void*); +typedef void (*vEiipV_t)(int32_t, int32_t, void*, ...); +typedef void (*vEpLLp_t)(void*, uintptr_t, uintptr_t, void*); +typedef void (*vEppiV_t)(void*, void*, int32_t, ...); +typedef int32_t (*iEivpV_t)(int32_t, void, void*, ...); +typedef int32_t (*iEiiip_t)(int32_t, int32_t, int32_t, void*); +typedef int32_t (*iEipii_t)(int32_t, void*, int32_t, int32_t); +typedef int32_t (*iEippi_t)(int32_t, void*, void*, int32_t); +typedef int32_t (*iEippL_t)(int32_t, void*, void*, uintptr_t); +typedef int32_t (*iEpipp_t)(void*, int32_t, void*, void*); +typedef int32_t (*iEpipV_t)(void*, int32_t, void*, ...); +typedef int32_t (*iEpLpp_t)(void*, uintptr_t, void*, void*); +typedef int32_t (*iEpLpV_t)(void*, uintptr_t, void*, ...); +typedef int32_t (*iEpppp_t)(void*, void*, void*, void*); +typedef int32_t (*iESvpp_t)(void*, void, void*, void*); +typedef int32_t (*iESvpV_t)(void*, void, void*, ...); +typedef uint32_t (*uEippu_t)(int32_t, void*, void*, uint32_t); +typedef uintptr_t (*LEpBp_iv_t)(void*, struct_p_t*, int32_t, void); +typedef int32_t (*iEiippi_t)(int32_t, int32_t, void*, void*, int32_t); +typedef int32_t (*iEipppp_t)(int32_t, void*, void*, void*, void*); +typedef int32_t (*iEuppLp_t)(uint32_t, void*, void*, uintptr_t, void*); +typedef int32_t (*iEpvvpV_t)(void*, void, void, void*, ...); +typedef int32_t (*iEpiLpp_t)(void*, int32_t, uintptr_t, void*, void*); +typedef int32_t (*iEpipOi_t)(void*, int32_t, void*, int32_t, int32_t); +typedef int32_t (*iEppupi_t)(void*, void*, uint32_t, void*, int32_t); +typedef int32_t (*iEpppLp_t)(void*, void*, void*, uintptr_t, void*); +typedef void* (*pEpLLiN_t)(void*, uintptr_t, uintptr_t, int32_t, ...); +typedef void* (*pEppLLp_t)(void*, void*, uintptr_t, uintptr_t, void*); +typedef int32_t (*iEpLvvpp_t)(void*, uintptr_t, void, void, void*, void*); +typedef int32_t (*iEpLiipV_t)(void*, uintptr_t, int32_t, int32_t, void*, ...); +typedef int32_t (*iEpLiLpV_t)(void*, uintptr_t, int32_t, uintptr_t, void*, ...); +typedef int32_t (*iFpppupp_t)(void*, void*, void*, uint32_t, void*, void*); +typedef int32_t (*iEpppppp_t)(void*, void*, void*, void*, void*, void*); +typedef intptr_t (*lEipLpLL_t)(int32_t, void*, uintptr_t, void*, uintptr_t, uintptr_t); +typedef void* (*pEpLiiiI_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int64_t); +typedef void* (*pEpLiiil_t)(void*, uintptr_t, int32_t, int32_t, int32_t, intptr_t); +typedef int32_t (*iEpippppp_t)(void*, int32_t, void*, void*, void*, void*, void*); +typedef int32_t (*iEpLiLppp_t)(void*, uintptr_t, int32_t, uintptr_t, void*, void*, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(freeaddrinfo, vEp_t) \ + GO(regfree, vEp_t) \ + GO(__close_nocancel, iEi_t) \ + GO(posix_spawn_file_actions_destroy, iEp_t) \ + GO(posix_spawn_file_actions_init, iEp_t) \ + GO(sysinfo, iEp_t) \ + GO(getwc, uES_t) \ + GO(__sysconf, lEi_t) \ + GO(sysconf, lEi_t) \ + GO(atol, lEp_t) \ + GO(ftell, lES_t) \ + GO(__ctype_b_loc, pEv_t) \ + GO(__ctype_tolower_loc, pEv_t) \ + GO(__ctype_toupper_loc, pEv_t) \ + GO(__errno_location, pEv_t) \ + GO(localeconv, pEv_t) \ + GO(__h_errno_location, pFv_t) \ + GO(getpwuid, pEu_t) \ + GO(gethostbyname, pFp_t) \ + GO(getprotobyname, pEp_t) \ + GO(getpwnam, pEp_t) \ + GO(gmtime, pEp_t) \ + GO(localtime, pEp_t) \ + GO(getmntent, pES_t) \ + GO(getifaddrs, iEbp__t) \ + GO(asctime, pEriiiiiiiiilt__t) \ + GO(futimens, iEip_t) \ + GO(futimes, iEip_t) \ + GO(getrlimit, iEup_t) \ + GO(setrlimit, iEup_t) \ + GO(backtrace, iEpi_t) \ + GO(posix_spawn_file_actions_addclose, iEpi_t) \ + GO(alphasort64, iEpp_t) \ + GO(execvp, iEpp_t) \ + GO(statvfs, iEpp_t) \ + GO(statvfs64, iEpp_t) \ + GO(utimes, iEpp_t) \ + GO(execl, iEpV_t) \ + GO(execlp, iEpV_t) \ + GO(signal, pEip_t) \ + GO(aligned_alloc, pELL_t) \ + GO(backtrace_symbols, pEpi_t) \ + GO(__cmsg_nxthdr, pEpp_t) \ + GO(__gmtime_r, pEpp_t) \ + GO(gmtime_r, pEpp_t) \ + GO(localtime_r, pEpp_t) \ + GO(vsyslog, vEipp_t) \ + GO(_ITM_addUserCommitAction, vEpup_t) \ + GO(posix_spawn_file_actions_adddup2, iEpii_t) \ + GO(regcomp, iEppi_t) \ + GO(execvpe, iEppp_t) \ + GO(vswscanf, iEppp_t) \ + GO(__isoc99_fscanf, iEppV_t) \ + GO(swscanf, iEppV_t) \ + GO(fscanf, iESpV_t) \ + GO(readv, lEipi_t) \ + GO(recvmsg, lEipi_t) \ + GO(sendmsg, lEipi_t) \ + GO(writev, lEipi_t) \ + GO(__realpath_chk, pEppv_t) \ + GO(__strtold_l, KEpBp_a_t) \ + GO(strtold_l, KEpBp_a_t) \ + GO(wcstol, lEpBp_i_t) \ + GO(wcstoul, LEpBp_i_t) \ + GO(__vsyslog_chk, vEiipp_t) \ + GO(__syslog_chk, vEiipV_t) \ + GO(utimensat, iEippi_t) \ + GO(readlinkat, iEippL_t) \ + GO(getaddrinfo, iEpppp_t) \ + GO(regerror, uEippu_t) \ + GO(getopt_long, iEipppp_t) \ + GO(getgrgid_r, iEuppLp_t) \ + GO(getpwuid_r, iEuppLp_t) \ + GO(posix_spawn_file_actions_addopen, iEpipOi_t) \ + GO(regexec, iEppupi_t) \ + GO(getgrnam_r, iEpppLp_t) \ + GO(getpwnam_r, iEpppLp_t) \ + GO(gethostbyname_r, iFpppupp_t) \ + GO(posix_spawn, iEpppppp_t) \ + GO(process_vm_readv, lEipLpLL_t) \ + GO(process_vm_writev, lEipLpLL_t) + +#endif // __wrappedlibcTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibcundefs32.h b/src/wrapped32/generated/wrappedlibcundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..a2a8943f8b3ac888bdbd4c9efae4523df99cc78f --- /dev/null +++ b/src/wrapped32/generated/wrappedlibcundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibcUNDEFS32_H_ +#define __wrappedlibcUNDEFS32_H_ + + +#endif // __wrappedlibcUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibdldefs32.h b/src/wrapped32/generated/wrappedlibdldefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..d28fcd9799fa780930728315735389645a55198e --- /dev/null +++ b/src/wrapped32/generated/wrappedlibdldefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibdlDEFS32_H_ +#define __wrappedlibdlDEFS32_H_ + + +#endif // __wrappedlibdlDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibdltypes32.h b/src/wrapped32/generated/wrappedlibdltypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..ecb896d383228097d73b150a57c9a90cfeada287 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibdltypes32.h @@ -0,0 +1,36 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibdlTYPES32_H_ +#define __wrappedlibdlTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef int32_t (*iEp_t)(void*); +typedef void* (*pEv_t)(void); +typedef int32_t (*iEpp_t)(void*, void*); +typedef void* (*pEpi_t)(void*, int32_t); +typedef void* (*pEpp_t)(void*, void*); +typedef int32_t (*iEpip_t)(void*, int32_t, void*); +typedef void* (*pEppi_t)(void*, void*, int32_t); +typedef void* (*pEppp_t)(void*, void*, void*); +typedef int32_t (*iEpppi_t)(void*, void*, void*, int32_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(dlclose, iEp_t) \ + GO(dlerror, pEv_t) \ + GO(_dl_find_object, iEpp_t) \ + GO(dladdr, iEpp_t) \ + GO(dlopen, pEpi_t) \ + GO(dlsym, pEpp_t) \ + GO(dlinfo, iEpip_t) \ + GO(dlmopen, pEppi_t) \ + GO(dlvsym, pEppp_t) \ + GO(dladdr1, iEpppi_t) + +#endif // __wrappedlibdlTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibdlundefs32.h b/src/wrapped32/generated/wrappedlibdlundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..f7d7a4d77b2960528f3d5b727855de44e2c7ccf2 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibdlundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibdlUNDEFS32_H_ +#define __wrappedlibdlUNDEFS32_H_ + + +#endif // __wrappedlibdlUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibgldefs32.h b/src/wrapped32/generated/wrappedlibgldefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..6e6b748da12648b4ef508315fe3d4e3b8e8e3458 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibgldefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibglDEFS32_H_ +#define __wrappedlibglDEFS32_H_ + + +#endif // __wrappedlibglDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibgltypes32.h b/src/wrapped32/generated/wrappedlibgltypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..14b082ee199f5f3408cd0029fc19bc7dea5f4587 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibgltypes32.h @@ -0,0 +1,68 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibglTYPES32_H_ +#define __wrappedlibglTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef int32_t (*iFi_t)(int32_t); +typedef void* (*pFp_t)(void*); +typedef void (*vFip_t)(int32_t, void*); +typedef void (*vFpp_t)(void*, void*); +typedef int32_t (*iFpp_t)(void*, void*); +typedef void* (*pFXp_t)(void*, void*); +typedef void (*vFipp_t)(int32_t, void*, void*); +typedef void (*vFppp_t)(void*, void*, void*); +typedef void (*vFXpi_t)(void*, void*, int32_t); +typedef uint32_t (*uFuip_t)(uint32_t, int32_t, void*); +typedef void* (*pFXip_t)(void*, int32_t, void*); +typedef void (*vFuipu_t)(uint32_t, int32_t, void*, uint32_t); +typedef void (*vFuipp_t)(uint32_t, int32_t, void*, void*); +typedef void* (*pFXipp_t)(void*, int32_t, void*, void*); +typedef void* (*pFXppi_t)(void*, void*, void*, int32_t); +typedef void (*vFuippp_t)(uint32_t, int32_t, void*, void*, void*); +typedef void (*vFupupi_t)(uint32_t, void*, uint32_t, void*, int32_t); +typedef void (*vFuuippp_t)(uint32_t, uint32_t, int32_t, void*, void*, void*); +typedef void (*vFupupip_t)(uint32_t, void*, uint32_t, void*, int32_t, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(glXSwapIntervalMESA, iFi_t) \ + GO(glGetVkProcAddrNV, pFp_t) \ + GO(glXGetProcAddress, pFp_t) \ + GO(glXGetProcAddressARB, pFp_t) \ + GO(glVDPAUMapSurfacesNV, vFip_t) \ + GO(glVDPAUUnmapSurfacesNV, vFip_t) \ + GO(glDebugMessageCallback, vFpp_t) \ + GO(glDebugMessageCallbackAMD, vFpp_t) \ + GO(glDebugMessageCallbackARB, vFpp_t) \ + GO(glDebugMessageCallbackKHR, vFpp_t) \ + GO(eglDebugMessageControlKHR, iFpp_t) \ + GO(glXGetVisualFromFBConfig, pFXp_t) \ + GO(glProgramCallbackMESA, vFipp_t) \ + GO(eglSetBlobCacheFuncsANDROID, vFppp_t) \ + GO(glXSwapIntervalEXT, vFXpi_t) \ + GO(glCreateShaderProgramv, uFuip_t) \ + GO(glXChooseVisual, pFXip_t) \ + GO(glXGetFBConfigs, pFXip_t) \ + GO(glTransformFeedbackVaryings, vFuipu_t) \ + GO(glTransformFeedbackVaryingsEXT, vFuipu_t) \ + GO(glCompileShaderIncludeARB, vFuipp_t) \ + GO(glGetUniformIndices, vFuipp_t) \ + GO(glShaderSource, vFuipp_t) \ + GO(glShaderSourceARB, vFuipp_t) \ + GO(glXChooseFBConfig, pFXipp_t) \ + GO(glXCreateContext, pFXppi_t) \ + GO(glBindVertexBuffers, vFuippp_t) \ + GO(glMultiDrawElements, vFupupi_t) \ + GO(glMultiDrawElementsEXT, vFupupi_t) \ + GO(glBindBuffersRange, vFuuippp_t) \ + GO(glVertexArrayVertexBuffers, vFuuippp_t) \ + GO(glMultiDrawElementsBaseVertex, vFupupip_t) + +#endif // __wrappedlibglTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibgludefs32.h b/src/wrapped32/generated/wrappedlibgludefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..75f7410f054e925f3d11c2862ab0107439630c53 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibgludefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibgluDEFS32_H_ +#define __wrappedlibgluDEFS32_H_ + + +#endif // __wrappedlibgluDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibglundefs32.h b/src/wrapped32/generated/wrappedlibglundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..6007d8163625cac0d15aa05281a609bde934d883 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibglundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibglUNDEFS32_H_ +#define __wrappedlibglUNDEFS32_H_ + + +#endif // __wrappedlibglUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibglutypes32.h b/src/wrapped32/generated/wrappedlibglutypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..c73f16c28d09af8f73b3cd03cf60abfb60c66a74 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibglutypes32.h @@ -0,0 +1,21 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibgluTYPES32_H_ +#define __wrappedlibgluTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFpup_t)(void*, uint32_t, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(gluNurbsCallback, vFpup_t) \ + GO(gluQuadricCallback, vFpup_t) \ + GO(gluTessCallback, vFpup_t) + +#endif // __wrappedlibgluTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibgluundefs32.h b/src/wrapped32/generated/wrappedlibgluundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..875c4685a41626bccfb9294c56b46aa94d1f34e3 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibgluundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibgluUNDEFS32_H_ +#define __wrappedlibgluUNDEFS32_H_ + + +#endif // __wrappedlibgluUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibmdefs32.h b/src/wrapped32/generated/wrappedlibmdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..278ad52448fe91df6ebcca4a8f961fd9c292bb2a --- /dev/null +++ b/src/wrapped32/generated/wrappedlibmdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibmDEFS32_H_ +#define __wrappedlibmDEFS32_H_ + + +#endif // __wrappedlibmDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibmtypes32.h b/src/wrapped32/generated/wrappedlibmtypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..98f7b9693750d7fbb9ec9f8935e0b4d821fdac4c --- /dev/null +++ b/src/wrapped32/generated/wrappedlibmtypes32.h @@ -0,0 +1,90 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibmTYPES32_H_ +#define __wrappedlibmTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef uint64_t (*UEs_t)(void*); +typedef float (*fEf_t)(float); +typedef double (*dEd_t)(double); +typedef long double (*DED_t)(long double); +typedef double (*KEK_t)(double); +typedef float (*fEff_t)(float, float); +typedef double (*dEdd_t)(double, double); +typedef double (*KEKK_t)(double, double); +typedef double (*KEKp_t)(double, void*); +typedef uint64_t (*UEsvvs_t)(void*, void, void, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(cacosf, UEs_t) \ + GO(cacoshf, UEs_t) \ + GO(casinf, UEs_t) \ + GO(casinhf, UEs_t) \ + GO(catanf, UEs_t) \ + GO(catanhf, UEs_t) \ + GO(ccosf, UEs_t) \ + GO(ccoshf, UEs_t) \ + GO(cexpf, UEs_t) \ + GO(clogf, UEs_t) \ + GO(cprojf, UEs_t) \ + GO(csinf, UEs_t) \ + GO(csinhf, UEs_t) \ + GO(csqrtf, UEs_t) \ + GO(ctanf, UEs_t) \ + GO(ctanhf, UEs_t) \ + GO(__acosf_finite, fEf_t) \ + GO(__acoshf_finite, fEf_t) \ + GO(__asinf_finite, fEf_t) \ + GO(__coshf_finite, fEf_t) \ + GO(__exp2f_finite, fEf_t) \ + GO(__expf_finite, fEf_t) \ + GO(__log10f_finite, fEf_t) \ + GO(__log2f_finite, fEf_t) \ + GO(__logf_finite, fEf_t) \ + GO(__sinhf_finite, fEf_t) \ + GO(__sqrtf_finite, fEf_t) \ + GO(__acos_finite, dEd_t) \ + GO(__acosh_finite, dEd_t) \ + GO(__asin_finite, dEd_t) \ + GO(__cosh_finite, dEd_t) \ + GO(__exp2_finite, dEd_t) \ + GO(__exp_finite, dEd_t) \ + GO(__log10_finite, dEd_t) \ + GO(__log2_finite, dEd_t) \ + GO(__log_finite, dEd_t) \ + GO(__sinh_finite, dEd_t) \ + GO(__sqrt_finite, dEd_t) \ + GO(pow10l, DED_t) \ + GO(acoshl, KEK_t) \ + GO(acosl, KEK_t) \ + GO(asinhl, KEK_t) \ + GO(asinl, KEK_t) \ + GO(atanhl, KEK_t) \ + GO(cbrtl, KEK_t) \ + GO(erfcl, KEK_t) \ + GO(erfl, KEK_t) \ + GO(ldexpl, KEK_t) \ + GO(lgammal, KEK_t) \ + GO(logl, KEK_t) \ + GO(pow10l, KEK_t) \ + GO(tgammal, KEK_t) \ + GO(__atan2f_finite, fEff_t) \ + GO(__hypotf_finite, fEff_t) \ + GO(__powf_finite, fEff_t) \ + GO(__atan2_finite, dEdd_t) \ + GO(__hypot_finite, dEdd_t) \ + GO(__pow_finite, dEdd_t) \ + GO(fmodl, KEKK_t) \ + GO(powl, KEKK_t) \ + GO(frexpl, KEKp_t) \ + GO(lgammal_r, KEKp_t) \ + GO(cpowf, UEsvvs_t) + +#endif // __wrappedlibmTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibmundefs32.h b/src/wrapped32/generated/wrappedlibmundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..716879429ddbd72abe9d4805ce58e6953b9955b0 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibmundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibmUNDEFS32_H_ +#define __wrappedlibmUNDEFS32_H_ + + +#endif // __wrappedlibmUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibpthreaddefs32.h b/src/wrapped32/generated/wrappedlibpthreaddefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..4f9db3f669c1386b7f11cdeea43e49603a3cf42e --- /dev/null +++ b/src/wrapped32/generated/wrappedlibpthreaddefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibpthreadDEFS32_H_ +#define __wrappedlibpthreadDEFS32_H_ + + +#endif // __wrappedlibpthreadDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibpthreadtypes32.h b/src/wrapped32/generated/wrappedlibpthreadtypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..de6f60335a4714afe87226e61864d48a29bed16a --- /dev/null +++ b/src/wrapped32/generated/wrappedlibpthreadtypes32.h @@ -0,0 +1,118 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibpthreadTYPES32_H_ +#define __wrappedlibpthreadTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vEv_t)(void); +typedef void (*vEp_t)(void*); +typedef int32_t (*iEp_t)(void*); +typedef int32_t (*iEh_t)(uintptr_t); +typedef void (*vEpi_t)(void*, int32_t); +typedef int32_t (*iEpi_t)(void*, int32_t); +typedef int32_t (*iEpL_t)(void*, uintptr_t); +typedef int32_t (*iEpp_t)(void*, void*); +typedef int32_t (*iEhi_t)(uintptr_t, int32_t); +typedef int32_t (*iEhp_t)(uintptr_t, void*); +typedef int32_t (*iEprLL__t)(void*, struct_LL_t*); +typedef void (*vEppp_t)(void*, void*, void*); +typedef int32_t (*iEpiu_t)(void*, int32_t, uint32_t); +typedef int32_t (*iEpup_t)(void*, uint32_t, void*); +typedef int32_t (*iEppL_t)(void*, void*, uintptr_t); +typedef int32_t (*iEppp_t)(void*, void*, void*); +typedef int32_t (*iEhup_t)(uintptr_t, uint32_t, void*); +typedef void* (*pEpOM_t)(void*, int32_t, ...); +typedef int32_t (*iEpprLL__t)(void*, void*, struct_LL_t*); +typedef int32_t (*iEBh_ppp_t)(struct_h_t*, void*, void*, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(__pthread_initialize, vEv_t) \ + GO(__pthread_register_cancel, vEp_t) \ + GO(__pthread_unregister_cancel, vEp_t) \ + GO(__pthread_unwind_next, vEp_t) \ + GO(__pthread_mutex_destroy, iEp_t) \ + GO(__pthread_mutex_lock, iEp_t) \ + GO(__pthread_mutex_trylock, iEp_t) \ + GO(__pthread_mutex_unlock, iEp_t) \ + GO(__pthread_mutexattr_init, iEp_t) \ + GO(pthread_attr_destroy, iEp_t) \ + GO(pthread_attr_init, iEp_t) \ + GO(pthread_cond_broadcast, iEp_t) \ + GO(pthread_cond_broadcast@GLIBC_2.0, iEp_t) \ + GO(pthread_cond_destroy, iEp_t) \ + GO(pthread_cond_destroy@GLIBC_2.0, iEp_t) \ + GO(pthread_cond_signal, iEp_t) \ + GO(pthread_cond_signal@GLIBC_2.0, iEp_t) \ + GO(pthread_mutex_destroy, iEp_t) \ + GO(pthread_mutex_lock, iEp_t) \ + GO(pthread_mutex_trylock, iEp_t) \ + GO(pthread_mutex_unlock, iEp_t) \ + GO(pthread_mutexattr_init, iEp_t) \ + GO(pthread_rwlock_destroy, iEp_t) \ + GO(pthread_rwlock_unlock, iEp_t) \ + GO(pthread_rwlock_wrlock, iEp_t) \ + GO(sem_close, iEp_t) \ + GO(sem_destroy, iEp_t) \ + GO(sem_post, iEp_t) \ + GO(sem_trywait, iEp_t) \ + GO(sem_wait, iEp_t) \ + GO(pthread_detach, iEh_t) \ + GO(_pthread_cleanup_pop, vEpi_t) \ + GO(_pthread_cleanup_pop_restore, vEpi_t) \ + GO(pthread_attr_setdetachstate, iEpi_t) \ + GO(pthread_attr_setinheritsched, iEpi_t) \ + GO(pthread_attr_setschedpolicy, iEpi_t) \ + GO(pthread_attr_setscope, iEpi_t) \ + GO(pthread_mutexattr_setkind_np, iEpi_t) \ + GO(pthread_attr_setguardsize, iEpL_t) \ + GO(pthread_attr_setstacksize, iEpL_t) \ + GO(__pthread_key_create, iEpp_t) \ + GO(__pthread_mutex_init, iEpp_t) \ + GO(__pthread_once, iEpp_t) \ + GO(__pthread_rwlock_init, iEpp_t) \ + GO(pthread_attr_getdetachstate, iEpp_t) \ + GO(pthread_attr_getguardsize, iEpp_t) \ + GO(pthread_attr_getinheritsched, iEpp_t) \ + GO(pthread_attr_getschedparam, iEpp_t) \ + GO(pthread_attr_getschedpolicy, iEpp_t) \ + GO(pthread_attr_getscope, iEpp_t) \ + GO(pthread_attr_getstackaddr, iEpp_t) \ + GO(pthread_attr_getstacksize, iEpp_t) \ + GO(pthread_attr_setschedparam, iEpp_t) \ + GO(pthread_attr_setstackaddr, iEpp_t) \ + GO(pthread_cond_init, iEpp_t) \ + GO(pthread_cond_init@GLIBC_2.0, iEpp_t) \ + GO(pthread_cond_wait, iEpp_t) \ + GO(pthread_cond_wait@GLIBC_2.0, iEpp_t) \ + GO(pthread_key_create, iEpp_t) \ + GO(pthread_mutex_init, iEpp_t) \ + GO(pthread_mutex_timedlock, iEpp_t) \ + GO(pthread_once, iEpp_t) \ + GO(pthread_rwlock_init, iEpp_t) \ + GO(sem_getvalue, iEpp_t) \ + GO(pthread_kill@GLIBC_2.0, iEhi_t) \ + GO(pthread_getattr_np, iEhp_t) \ + GO(sem_timedwait, iEprLL__t) \ + GO(_pthread_cleanup_push, vEppp_t) \ + GO(_pthread_cleanup_push_defer, vEppp_t) \ + GO(sem_init, iEpiu_t) \ + GO(pthread_attr_setaffinity_np, iEpup_t) \ + GO(pthread_attr_setstack, iEppL_t) \ + GO(__pthread_atfork, iEppp_t) \ + GO(pthread_atfork, iEppp_t) \ + GO(pthread_attr_getstack, iEppp_t) \ + GO(pthread_getaffinity_np, iEhup_t) \ + GO(pthread_setaffinity_np, iEhup_t) \ + GO(sem_open, pEpOM_t) \ + GO(pthread_cond_timedwait, iEpprLL__t) \ + GO(pthread_cond_timedwait@GLIBC_2.0, iEpprLL__t) \ + GO(pthread_create, iEBh_ppp_t) + +#endif // __wrappedlibpthreadTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibpthreadundefs32.h b/src/wrapped32/generated/wrappedlibpthreadundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..0dfc159f4a07fbbbd9cfbca8e65ceed3224ff463 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibpthreadundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibpthreadUNDEFS32_H_ +#define __wrappedlibpthreadUNDEFS32_H_ + + +#endif // __wrappedlibpthreadUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibrtdefs32.h b/src/wrapped32/generated/wrappedlibrtdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..f812f2e2a0f0ed6863d86058ec34b15c8b001cea --- /dev/null +++ b/src/wrapped32/generated/wrappedlibrtdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibrtDEFS32_H_ +#define __wrappedlibrtDEFS32_H_ + + +#endif // __wrappedlibrtDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibrttypes32.h b/src/wrapped32/generated/wrappedlibrttypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..b9886aeb0a2248d922df1b318ee6403691769a81 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibrttypes32.h @@ -0,0 +1,19 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibrtTYPES32_H_ +#define __wrappedlibrtTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef int32_t (*iEuBLL__t)(uint32_t, struct_LL_t*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(__clock_gettime, iEuBLL__t) + +#endif // __wrappedlibrtTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibrtundefs32.h b/src/wrapped32/generated/wrappedlibrtundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..c82749d31857b901752cb9160087e6437376e8a9 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibrtundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibrtUNDEFS32_H_ +#define __wrappedlibrtUNDEFS32_H_ + + +#endif // __wrappedlibrtUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibuuiddefs32.h b/src/wrapped32/generated/wrappedlibuuiddefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..d965081622171d5fa5bc1519defa39ed432a791a --- /dev/null +++ b/src/wrapped32/generated/wrappedlibuuiddefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibuuidDEFS32_H_ +#define __wrappedlibuuidDEFS32_H_ + + +#endif // __wrappedlibuuidDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibuuidtypes32.h b/src/wrapped32/generated/wrappedlibuuidtypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..10e237dd93f5bd23b4cb95eb7b32e04715bc9021 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibuuidtypes32.h @@ -0,0 +1,17 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibuuidTYPES32_H_ +#define __wrappedlibuuidTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedlibuuidTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibuuidundefs32.h b/src/wrapped32/generated/wrappedlibuuidundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..dd05c73402a09e931ce7e6565660f42df0cbad7d --- /dev/null +++ b/src/wrapped32/generated/wrappedlibuuidundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibuuidUNDEFS32_H_ +#define __wrappedlibuuidUNDEFS32_H_ + + +#endif // __wrappedlibuuidUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibx11defs32.h b/src/wrapped32/generated/wrappedlibx11defs32.h new file mode 100644 index 0000000000000000000000000000000000000000..8328f1dc43fda885979f7307e10984f3d8b95bf6 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibx11defs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibx11DEFS32_H_ +#define __wrappedlibx11DEFS32_H_ + + +#endif // __wrappedlibx11DEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibx11types32.h b/src/wrapped32/generated/wrappedlibx11types32.h new file mode 100644 index 0000000000000000000000000000000000000000..ae0d36f13329d1f92defe5839bf86236adc7d7a5 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibx11types32.h @@ -0,0 +1,148 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibx11TYPES32_H_ +#define __wrappedlibx11TYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFp_t)(void*); +typedef void (*vFX_t)(void*); +typedef int32_t (*iFp_t)(void*); +typedef int32_t (*iFX_t)(void*); +typedef uintptr_t (*LFp_t)(void*); +typedef void* (*pFp_t)(void*); +typedef void* (*pFX_t)(void*); +typedef void* (*XFp_t)(void*); +typedef void (*vFXp_t)(void*, void*); +typedef int32_t (*iFpL_t)(void*, uintptr_t); +typedef int32_t (*iFXp_t)(void*, void*); +typedef uintptr_t (*LFpi_t)(void*, int32_t); +typedef void* (*pFiV_t)(int32_t, ...); +typedef void* (*pFpV_t)(void*, ...); +typedef void* (*pFXi_t)(void*, int32_t); +typedef void* (*pFXL_t)(void*, uintptr_t); +typedef void* (*pFXp_t)(void*, void*); +typedef void (*vFXLp_t)(void*, uintptr_t, void*); +typedef int32_t (*iFpip_t)(void*, int32_t, void*); +typedef int32_t (*iFXip_t)(void*, int32_t, void*); +typedef int32_t (*iFXlp_t)(void*, intptr_t, void*); +typedef int32_t (*iFXLp_t)(void*, uintptr_t, void*); +typedef uintptr_t (*LFXii_t)(void*, int32_t, int32_t); +typedef void* (*pFXip_t)(void*, int32_t, void*); +typedef int32_t (*iFXLip_t)(void*, uintptr_t, int32_t, void*); +typedef int32_t (*iFXLlp_t)(void*, uintptr_t, intptr_t, void*); +typedef int32_t (*iFXLLp_t)(void*, uintptr_t, uintptr_t, void*); +typedef int32_t (*iFXLpi_t)(void*, uintptr_t, void*, int32_t); +typedef int32_t (*iFXLpp_t)(void*, uintptr_t, void*, void*); +typedef int32_t (*iFXppp_t)(void*, void*, void*, void*); +typedef uintptr_t (*LFXLpi_t)(void*, uintptr_t, void*, int32_t); +typedef void* (*pFXlpp_t)(void*, intptr_t, void*, void*); +typedef int32_t (*iFXbpLiL_pp_t)(void*, struct_pLiL_t*, void*, void*); +typedef int32_t (*iFppipp_t)(void*, void*, int32_t, void*, void*); +typedef int32_t (*iFXLilp_t)(void*, uintptr_t, int32_t, intptr_t, void*); +typedef int32_t (*iFXLpiL_t)(void*, uintptr_t, void*, int32_t, uintptr_t); +typedef int32_t (*iFXpiip_t)(void*, void*, int32_t, int32_t, void*); +typedef int32_t (*iFXpiup_t)(void*, void*, int32_t, uint32_t, void*); +typedef int32_t (*iFXpppp_t)(void*, void*, void*, void*, void*); +typedef void* (*pFpiiuu_t)(void*, int32_t, int32_t, uint32_t, uint32_t); +typedef void* (*pFXpppp_t)(void*, void*, void*, void*, void*); +typedef int32_t (*iFpppipp_t)(void*, void*, void*, int32_t, void*, void*); +typedef int32_t (*iFXLpppp_t)(void*, uintptr_t, void*, void*, void*, void*); +typedef int32_t (*iFXppppp_t)(void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFppipppp_t)(void*, void*, int32_t, void*, void*, void*, void*); +typedef int32_t (*iFXLLLiipi_t)(void*, uintptr_t, uintptr_t, uintptr_t, int32_t, int32_t, void*, int32_t); +typedef void* (*pFXLiiuuLi_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uintptr_t, int32_t); +typedef void (*vFXLpppippp_t)(void*, uintptr_t, void*, void*, void*, int32_t, void*, void*, void*); +typedef int32_t (*iFXLppiiiiuu_t)(void*, uintptr_t, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); +typedef void* (*pFXpuiipuuii_t)(void*, void*, uint32_t, int32_t, int32_t, void*, uint32_t, uint32_t, int32_t, int32_t); +typedef void* (*pFXLiiuuLipii_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uintptr_t, int32_t, void*, int32_t, int32_t); +typedef int32_t (*iFXLLlliLppppp_t)(void*, uintptr_t, uintptr_t, intptr_t, intptr_t, int32_t, uintptr_t, void*, void*, void*, void*, void*); +typedef uintptr_t (*LFXLiiuuuiupLp_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, int32_t, uint32_t, void*, uintptr_t, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(XFreeStringList, vFp_t) \ + GO(XLockDisplay, vFX_t) \ + GO(XDestroyImage, iFp_t) \ + GO(XFreeExtensionList, iFp_t) \ + GO(XFreeModifiermap, iFp_t) \ + GO(XInitImage, iFp_t) \ + GO(XRefreshKeyboardMapping, iFp_t) \ + GO(_XInitImageFuncPtrs, iFp_t) \ + GO(XCloseDisplay, iFX_t) \ + GO(XGrabServer, iFX_t) \ + GO(XVisualIDFromVisual, LFp_t) \ + GO(XSetErrorHandler, pFp_t) \ + GO(XSetIOErrorHandler, pFp_t) \ + GO(XGetModifierMapping, pFX_t) \ + GO(XOpenDisplay, XFp_t) \ + GO(XFreeEventData, vFXp_t) \ + GO(XFilterEvent, iFpL_t) \ + GO(XFreeFont, iFXp_t) \ + GO(XGetEventData, iFXp_t) \ + GO(XNextEvent, iFXp_t) \ + GO(XPeekEvent, iFXp_t) \ + GO(XLookupKeysym, LFpi_t) \ + GO(XVaCreateNestedList, pFiV_t) \ + GO(XCreateIC, pFpV_t) \ + GO(XGetIMValues, pFpV_t) \ + GO(XSetICValues, pFpV_t) \ + GO(XSetIMValues, pFpV_t) \ + GO(XSynchronize, pFXi_t) \ + GO(XGetWMHints, pFXL_t) \ + GO(XListExtensions, pFXp_t) \ + GO(XLoadQueryFont, pFXp_t) \ + GO(XSetWMNormalHints, vFXLp_t) \ + GO(XStringListToTextProperty, iFpip_t) \ + GO(XCheckTypedEvent, iFXip_t) \ + GO(XMaskEvent, iFXlp_t) \ + GO(XGetWindowAttributes, iFXLp_t) \ + GO(XSetWMHints, iFXLp_t) \ + GO(XGetPixel, LFXii_t) \ + GO(XESetCloseDisplay, pFXip_t) \ + GO(XESetEventToWire, pFXip_t) \ + GO(XESetWireToEvent, pFXip_t) \ + GO(XCheckTypedWindowEvent, iFXLip_t) \ + GO(XCheckWindowEvent, iFXLlp_t) \ + GO(XWindowEvent, iFXLlp_t) \ + GO(XChangeWindowAttributes, iFXLLp_t) \ + GO(XQueryColors, iFXLpi_t) \ + GO(XSetWMProtocols, iFXLpi_t) \ + GO(XStoreColors, iFXLpi_t) \ + GO(XGetWMNormalHints, iFXLpp_t) \ + GO(XCheckIfEvent, iFXppp_t) \ + GO(XIfEvent, iFXppp_t) \ + GO(XCreateColormap, LFXLpi_t) \ + GO(XGetVisualInfo, pFXlpp_t) \ + GO(XmbTextPropertyToTextList, iFXbpLiL_pp_t) \ + GO(XLookupString, iFppipp_t) \ + GO(XSendEvent, iFXLilp_t) \ + GO(XFreeColors, iFXLpiL_t) \ + GO(XInternAtoms, iFXpiip_t) \ + GO(XmbTextListToTextProperty, iFXpiup_t) \ + GO(Xutf8TextListToTextProperty, iFXpiup_t) \ + GO(XQueryExtension, iFXpppp_t) \ + GO(XSubImage, pFpiiuu_t) \ + GO(XCreateFontSet, pFXpppp_t) \ + GO(XmbLookupString, iFpppipp_t) \ + GO(Xutf8LookupString, iFpppipp_t) \ + GO(XQueryTree, iFXLpppp_t) \ + GO(XRegisterIMInstantiateCallback, iFXppppp_t) \ + GO(XUnregisterIMInstantiateCallback, iFXppppp_t) \ + GO(XTextExtents, iFppipppp_t) \ + GO(XChangeProperty, iFXLLLiipi_t) \ + GO(XGetImage, pFXLiiuuLi_t) \ + GO(XSetWMProperties, vFXLpppippp_t) \ + GO(Xutf8SetWMProperties, vFXLpppippp_t) \ + GO(XPutImage, iFXLppiiiiuu_t) \ + GO(XCreateImage, pFXpuiipuuii_t) \ + GO(XGetSubImage, pFXLiiuuLipii_t) \ + GO(XGetWindowProperty, iFXLLlliLppppp_t) \ + GO(XCreateWindow, LFXLiiuuuiupLp_t) + +#endif // __wrappedlibx11TYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibx11undefs32.h b/src/wrapped32/generated/wrappedlibx11undefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..ae79adf85515679c7062a9907e3c5806121d88d8 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibx11undefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibx11UNDEFS32_H_ +#define __wrappedlibx11UNDEFS32_H_ + + +#endif // __wrappedlibx11UNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxcompositedefs32.h b/src/wrapped32/generated/wrappedlibxcompositedefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..599b1179d17507a810171d8f3c431bb784e7873a --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxcompositedefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxcompositeDEFS32_H_ +#define __wrappedlibxcompositeDEFS32_H_ + + +#endif // __wrappedlibxcompositeDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxcompositetypes32.h b/src/wrapped32/generated/wrappedlibxcompositetypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..d5d42870016fc38a94b343826d1b02602136301a --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxcompositetypes32.h @@ -0,0 +1,17 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxcompositeTYPES32_H_ +#define __wrappedlibxcompositeTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedlibxcompositeTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibxcompositeundefs32.h b/src/wrapped32/generated/wrappedlibxcompositeundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..f8fade03af6b01468b26ecc709e43a5605d10594 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxcompositeundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxcompositeUNDEFS32_H_ +#define __wrappedlibxcompositeUNDEFS32_H_ + + +#endif // __wrappedlibxcompositeUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxcursordefs32.h b/src/wrapped32/generated/wrappedlibxcursordefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..e822befd33124834e110834c9bf583e653586eb7 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxcursordefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxcursorDEFS32_H_ +#define __wrappedlibxcursorDEFS32_H_ + + +#endif // __wrappedlibxcursorDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxcursortypes32.h b/src/wrapped32/generated/wrappedlibxcursortypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..8433e9824e339ba364b24991800fae3d38d7c9e1 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxcursortypes32.h @@ -0,0 +1,21 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxcursorTYPES32_H_ +#define __wrappedlibxcursorTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFp_t)(void*); +typedef void* (*pFXi_t)(void*, int32_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(XcursorCursorsDestroy, vFp_t) \ + GO(XcursorCursorsCreate, pFXi_t) + +#endif // __wrappedlibxcursorTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibxcursorundefs32.h b/src/wrapped32/generated/wrappedlibxcursorundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..7ae3f43fd096c46755f148690c4843e8e9bb3dfb --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxcursorundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxcursorUNDEFS32_H_ +#define __wrappedlibxcursorUNDEFS32_H_ + + +#endif // __wrappedlibxcursorUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxextdefs32.h b/src/wrapped32/generated/wrappedlibxextdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..459b2b4509356260244382f447a5d0c10126acab --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxextdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxextDEFS32_H_ +#define __wrappedlibxextDEFS32_H_ + + +#endif // __wrappedlibxextDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxexttypes32.h b/src/wrapped32/generated/wrappedlibxexttypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..ef459e28860fc828db2db15df2bec1227c9323c2 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxexttypes32.h @@ -0,0 +1,43 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxextTYPES32_H_ +#define __wrappedlibxextTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFp_t)(void*); +typedef void* (*pFv_t)(void); +typedef void* (*pFp_t)(void*); +typedef int32_t (*iFpX_t)(void*, void*); +typedef int32_t (*iFXp_t)(void*, void*); +typedef void* (*pFpX_t)(void*, void*); +typedef void* (*pFXpp_t)(void*, void*, void*); +typedef int32_t (*iFXLpiiL_t)(void*, uintptr_t, void*, int32_t, int32_t, uintptr_t); +typedef void* (*pFpXppip_t)(void*, void*, void*, void*, int32_t, void*); +typedef uintptr_t (*LFXLppuuu_t)(void*, uintptr_t, void*, void*, uint32_t, uint32_t, uint32_t); +typedef void* (*pFXbpLiLLLii_uippuu_t)(void*, struct_pLiLLLii_t*, uint32_t, int32_t, void*, void*, uint32_t, uint32_t); +typedef int32_t (*iFXLppiiiiuui_t)(void*, uintptr_t, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(XdbeFreeVisualInfo, vFp_t) \ + GO(XextDestroyExtension, vFp_t) \ + GO(XextCreateExtension, pFv_t) \ + GO(XSetExtensionErrorHandler, pFp_t) \ + GO(XextRemoveDisplay, iFpX_t) \ + GO(XShmAttach, iFXp_t) \ + GO(XShmDetach, iFXp_t) \ + GO(XextFindDisplay, pFpX_t) \ + GO(XdbeGetVisualInfo, pFXpp_t) \ + GO(XShmGetImage, iFXLpiiL_t) \ + GO(XextAddDisplay, pFpXppip_t) \ + GO(XShmCreatePixmap, LFXLppuuu_t) \ + GO(XShmCreateImage, pFXbpLiLLLii_uippuu_t) \ + GO(XShmPutImage, iFXLppiiiiuui_t) + +#endif // __wrappedlibxextTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibxextundefs32.h b/src/wrapped32/generated/wrappedlibxextundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..e7f1599ec557c22a35be3e77b07025957ae71806 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxextundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxextUNDEFS32_H_ +#define __wrappedlibxextUNDEFS32_H_ + + +#endif // __wrappedlibxextUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxfixesdefs32.h b/src/wrapped32/generated/wrappedlibxfixesdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..9216f73af3557745bcfd4b7b9779236d22ee1c5f --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxfixesdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxfixesDEFS32_H_ +#define __wrappedlibxfixesDEFS32_H_ + + +#endif // __wrappedlibxfixesDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxfixestypes32.h b/src/wrapped32/generated/wrappedlibxfixestypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..3dde4e94a53883e5ed3a64e61e93c313b69679ea --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxfixestypes32.h @@ -0,0 +1,19 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxfixesTYPES32_H_ +#define __wrappedlibxfixesTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef int32_t (*iFXpp_t)(void*, void*, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(XFixesQueryExtension, iFXpp_t) + +#endif // __wrappedlibxfixesTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibxfixesundefs32.h b/src/wrapped32/generated/wrappedlibxfixesundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..2cb82d4bfa5d0c5c45248c53a2f0e6f3969bc133 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxfixesundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxfixesUNDEFS32_H_ +#define __wrappedlibxfixesUNDEFS32_H_ + + +#endif // __wrappedlibxfixesUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxidefs32.h b/src/wrapped32/generated/wrappedlibxidefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..de50f7373972641041fce71ac8c6bb666367d2d4 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxidefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxiDEFS32_H_ +#define __wrappedlibxiDEFS32_H_ + + +#endif // __wrappedlibxiDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxitypes32.h b/src/wrapped32/generated/wrappedlibxitypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..0e74b840279dacc35e0124c9b6daf8cc1ba70edb --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxitypes32.h @@ -0,0 +1,31 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxiTYPES32_H_ +#define __wrappedlibxiTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFp_t)(void*); +typedef int32_t (*iFXp_t)(void*, void*); +typedef void* (*pFXL_t)(void*, uintptr_t); +typedef void* (*pFXip_t)(void*, int32_t, void*); +typedef void* (*pFXLp_t)(void*, uintptr_t, void*); +typedef int32_t (*iFXLpi_t)(void*, uintptr_t, void*, int32_t); +typedef int32_t (*iFXppu_t)(void*, void*, void*, uint32_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(XIFreeDeviceInfo, vFp_t) \ + GO(XCloseDevice, iFXp_t) \ + GO(XOpenDevice, pFXL_t) \ + GO(XIQueryDevice, pFXip_t) \ + GO(XIGetSelectedEvents, pFXLp_t) \ + GO(XISelectEvents, iFXLpi_t) \ + GO(XGetDeviceButtonMapping, iFXppu_t) + +#endif // __wrappedlibxiTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibxiundefs32.h b/src/wrapped32/generated/wrappedlibxiundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..6ae08459ad140ba2acf88e84b990628258d918e5 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxiundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxiUNDEFS32_H_ +#define __wrappedlibxiUNDEFS32_H_ + + +#endif // __wrappedlibxiUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxrandrdefs32.h b/src/wrapped32/generated/wrappedlibxrandrdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..6d811e636c1d86f509cc7ebe12e37d08d442a22f --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxrandrdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxrandrDEFS32_H_ +#define __wrappedlibxrandrDEFS32_H_ + + +#endif // __wrappedlibxrandrDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxrandrtypes32.h b/src/wrapped32/generated/wrappedlibxrandrtypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..0de1eca33541845fe80030bee097032681fcde0d --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxrandrtypes32.h @@ -0,0 +1,39 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxrandrTYPES32_H_ +#define __wrappedlibxrandrTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFp_t)(void*); +typedef void* (*pFXL_t)(void*, uintptr_t); +typedef int32_t (*iFXpp_t)(void*, void*, void*); +typedef void* (*pFXLL_t)(void*, uintptr_t, uintptr_t); +typedef void* (*pFXLp_t)(void*, uintptr_t, void*); +typedef void* (*pFXpL_t)(void*, void*, uintptr_t); +typedef int32_t (*iFXpLp_t)(void*, void*, uintptr_t, void*); +typedef int32_t (*iFXpLLiiLWpi_t)(void*, void*, uintptr_t, uintptr_t, int32_t, int32_t, uintptr_t, uint16_t, void*, int32_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(XRRFreeProviderInfo, vFp_t) \ + GO(XRRFreeProviderResources, vFp_t) \ + GO(XRRGetProviderResources, pFXL_t) \ + GO(XRRGetScreenResources, pFXL_t) \ + GO(XRRGetScreenResourcesCurrent, pFXL_t) \ + GO(XRRQueryExtension, iFXpp_t) \ + GO(XRRQueryOutputProperty, pFXLL_t) \ + GO(XRRListOutputProperties, pFXLp_t) \ + GO(XRRGetCrtcInfo, pFXpL_t) \ + GO(XRRGetOutputInfo, pFXpL_t) \ + GO(XRRGetPanning, pFXpL_t) \ + GO(XRRGetProviderInfo, pFXpL_t) \ + GO(XRRSetPanning, iFXpLp_t) \ + GO(XRRSetCrtcConfig, iFXpLLiiLWpi_t) + +#endif // __wrappedlibxrandrTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibxrandrundefs32.h b/src/wrapped32/generated/wrappedlibxrandrundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..9059dc7c83e470d5e051809451f419d273551bda --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxrandrundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxrandrUNDEFS32_H_ +#define __wrappedlibxrandrUNDEFS32_H_ + + +#endif // __wrappedlibxrandrUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxrenderdefs32.h b/src/wrapped32/generated/wrappedlibxrenderdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..d46f6fa87254bbabc44b7a84b383915bf5d97ac9 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxrenderdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxrenderDEFS32_H_ +#define __wrappedlibxrenderDEFS32_H_ + + +#endif // __wrappedlibxrenderDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxrendertypes32.h b/src/wrapped32/generated/wrappedlibxrendertypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..04ddf45d2dd47fa9a8137531c9174a0054819db0 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxrendertypes32.h @@ -0,0 +1,23 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxrenderTYPES32_H_ +#define __wrappedlibxrenderTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void* (*pFXi_t)(void*, int32_t); +typedef void* (*pFXp_t)(void*, void*); +typedef void* (*pFXLrLiiuL_i_t)(void*, uintptr_t, struct_LiiuL_t*, int32_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(XRenderFindStandardFormat, pFXi_t) \ + GO(XRenderFindVisualFormat, pFXp_t) \ + GO(XRenderFindFormat, pFXLrLiiuL_i_t) + +#endif // __wrappedlibxrenderTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibxrenderundefs32.h b/src/wrapped32/generated/wrappedlibxrenderundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..ee386074acfdf37bbc4cde8acd2e7dc212a4dfce --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxrenderundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxrenderUNDEFS32_H_ +#define __wrappedlibxrenderUNDEFS32_H_ + + +#endif // __wrappedlibxrenderUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxssdefs32.h b/src/wrapped32/generated/wrappedlibxssdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..38a3d5ba63833c00a1febf510a27acf004403375 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxssdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxssDEFS32_H_ +#define __wrappedlibxssDEFS32_H_ + + +#endif // __wrappedlibxssDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxsstypes32.h b/src/wrapped32/generated/wrappedlibxsstypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..d1fdc5b660b1f64e99c7239ff6ebd48658f5ba00 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxsstypes32.h @@ -0,0 +1,17 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxssTYPES32_H_ +#define __wrappedlibxssTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedlibxssTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibxssundefs32.h b/src/wrapped32/generated/wrappedlibxssundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..5ecfd684d2fcf6e46ec98bbd8e42b4b5bc797d16 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxssundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxssUNDEFS32_H_ +#define __wrappedlibxssUNDEFS32_H_ + + +#endif // __wrappedlibxssUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxxf86vmdefs32.h b/src/wrapped32/generated/wrappedlibxxf86vmdefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..a58bfacb5faa13909c8be5cf33a5753735516ecb --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxxf86vmdefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxxf86vmDEFS32_H_ +#define __wrappedlibxxf86vmDEFS32_H_ + + +#endif // __wrappedlibxxf86vmDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedlibxxf86vmtypes32.h b/src/wrapped32/generated/wrappedlibxxf86vmtypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..2611329c22f2dabcf07a4e86d31997c5eff35208 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxxf86vmtypes32.h @@ -0,0 +1,19 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxxf86vmTYPES32_H_ +#define __wrappedlibxxf86vmTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef int32_t (*iFXipp_t)(void*, int32_t, void*, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(XF86VidModeGetAllModeLines, iFXipp_t) + +#endif // __wrappedlibxxf86vmTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedlibxxf86vmundefs32.h b/src/wrapped32/generated/wrappedlibxxf86vmundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..cde7beca2dad4dd5098bdc8777f7f1cc73b26d19 --- /dev/null +++ b/src/wrapped32/generated/wrappedlibxxf86vmundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedlibxxf86vmUNDEFS32_H_ +#define __wrappedlibxxf86vmUNDEFS32_H_ + + +#endif // __wrappedlibxxf86vmUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedopenaldefs32.h b/src/wrapped32/generated/wrappedopenaldefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..3a9356063af7a2aed2e63e055394b4d3b11e495d --- /dev/null +++ b/src/wrapped32/generated/wrappedopenaldefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedopenalDEFS32_H_ +#define __wrappedopenalDEFS32_H_ + + +#endif // __wrappedopenalDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedopenaltypes32.h b/src/wrapped32/generated/wrappedopenaltypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..7ebb634188b5636abb6ccca7ef7c7a9bc7527380 --- /dev/null +++ b/src/wrapped32/generated/wrappedopenaltypes32.h @@ -0,0 +1,25 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedopenalTYPES32_H_ +#define __wrappedopenalTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFv_t)(void); +typedef void* (*pFp_t)(void*); +typedef void* (*pFpp_t)(void*, void*); +typedef void (*vFiiipp_t)(int32_t, int32_t, int32_t, void*, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(alRequestFoldbackStop, vFv_t) \ + GO(alGetProcAddress, pFp_t) \ + GO(alcGetProcAddress, pFpp_t) \ + GO(alRequestFoldbackStart, vFiiipp_t) + +#endif // __wrappedopenalTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedopenalundefs32.h b/src/wrapped32/generated/wrappedopenalundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..4d2b0c231e8df9edce284555e435e80fb80923c8 --- /dev/null +++ b/src/wrapped32/generated/wrappedopenalundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedopenalUNDEFS32_H_ +#define __wrappedopenalUNDEFS32_H_ + + +#endif // __wrappedopenalUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedsdl1defs32.h b/src/wrapped32/generated/wrappedsdl1defs32.h new file mode 100644 index 0000000000000000000000000000000000000000..d02a83856ebbca0f3bb5ef09329b9deec0b0bcfb --- /dev/null +++ b/src/wrapped32/generated/wrappedsdl1defs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedsdl1DEFS32_H_ +#define __wrappedsdl1DEFS32_H_ + + +#endif // __wrappedsdl1DEFS32_H_ diff --git a/src/wrapped32/generated/wrappedsdl1types32.h b/src/wrapped32/generated/wrappedsdl1types32.h new file mode 100644 index 0000000000000000000000000000000000000000..ae4cfa622f4adb10638d149dabfc38beff7350a5 --- /dev/null +++ b/src/wrapped32/generated/wrappedsdl1types32.h @@ -0,0 +1,79 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedsdl1TYPES32_H_ +#define __wrappedsdl1TYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFv_t)(void); +typedef void (*vFp_t)(void*); +typedef int32_t (*iFv_t)(void); +typedef int32_t (*iFp_t)(void*); +typedef uint32_t (*uFp_t)(void*); +typedef void* (*pFv_t)(void); +typedef void* (*pFp_t)(void*); +typedef void (*vFpp_t)(void*, void*); +typedef int32_t (*iFup_t)(uint32_t, void*); +typedef int32_t (*iFpp_t)(void*, void*); +typedef void* (*pFpi_t)(void*, int32_t); +typedef void* (*pFpu_t)(void*, uint32_t); +typedef void* (*pFpp_t)(void*, void*); +typedef int32_t (*iFpuu_t)(void*, uint32_t, uint32_t); +typedef void* (*pFupp_t)(uint32_t, void*, void*); +typedef int32_t (*iFpiuu_t)(void*, int32_t, uint32_t, uint32_t); +typedef uint32_t (*uFpCCC_t)(void*, uint8_t, uint8_t, uint8_t); +typedef void* (*pFiiiu_t)(int32_t, int32_t, int32_t, uint32_t); +typedef void (*vFupppp_t)(uint32_t, void*, void*, void*, void*); +typedef int32_t (*iFpWCiWCi_t)(void*, uint16_t, uint8_t, int32_t, uint16_t, uint8_t, int32_t); +typedef void* (*pFpiiiiuuuu_t)(void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(SDL_Quit, vFv_t) \ + GO(SDL_FreeSurface, vFp_t) \ + GO(SDL_KillThread, vFp_t) \ + GO(SDL_UnloadObject, vFp_t) \ + GO(SDL_UnlockSurface, vFp_t) \ + GO(SDL_Has3DNow, iFv_t) \ + GO(SDL_Has3DNowExt, iFv_t) \ + GO(SDL_HasAltiVec, iFv_t) \ + GO(SDL_HasMMX, iFv_t) \ + GO(SDL_HasMMXExt, iFv_t) \ + GO(SDL_HasRDTSC, iFv_t) \ + GO(SDL_HasSSE, iFv_t) \ + GO(SDL_HasSSE2, iFv_t) \ + GO(SDL_ConvertAudio, iFp_t) \ + GO(SDL_Flip, iFp_t) \ + GO(SDL_LockSurface, iFp_t) \ + GO(SDL_PollEvent, iFp_t) \ + GO(SDL_PushEvent, iFp_t) \ + GO(SDL_RemoveTimer, iFp_t) \ + GO(SDL_ReadLE32, uFp_t) \ + GO(SDL_GetVideoInfo, pFv_t) \ + GO(SDL_GetVideoSurface, pFv_t) \ + GO(SDL_GL_GetProcAddress, pFp_t) \ + GO(SDL_LoadObject, pFp_t) \ + GO(SDL_WM_SetIcon, vFpp_t) \ + GO(SDL_SetTimer, iFup_t) \ + GO(SDL_OpenAudio, iFpp_t) \ + GO(SDL_LoadBMP_RW, pFpi_t) \ + GO(SDL_RWFromMem, pFpi_t) \ + GO(SDL_ListModes, pFpu_t) \ + GO(SDL_CreateThread, pFpp_t) \ + GO(SDL_LoadFunction, pFpp_t) \ + GO(SDL_RWFromFile, pFpp_t) \ + GO(SDL_SetColorKey, iFpuu_t) \ + GO(SDL_AddTimer, pFupp_t) \ + GO(SDL_PeepEvents, iFpiuu_t) \ + GO(SDL_MapRGB, uFpCCC_t) \ + GO(SDL_SetVideoMode, pFiiiu_t) \ + GO(SDL_GetRGB, vFupppp_t) \ + GO(SDL_BuildAudioCVT, iFpWCiWCi_t) \ + GO(SDL_CreateRGBSurfaceFrom, pFpiiiiuuuu_t) + +#endif // __wrappedsdl1TYPES32_H_ diff --git a/src/wrapped32/generated/wrappedsdl1undefs32.h b/src/wrapped32/generated/wrappedsdl1undefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..f08371b0433d22bd9792da340ecf0b6d6a90df99 --- /dev/null +++ b/src/wrapped32/generated/wrappedsdl1undefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedsdl1UNDEFS32_H_ +#define __wrappedsdl1UNDEFS32_H_ + + +#endif // __wrappedsdl1UNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedsdl2defs32.h b/src/wrapped32/generated/wrappedsdl2defs32.h new file mode 100644 index 0000000000000000000000000000000000000000..ea9404db581e69bc532d53bdcb61c19bc3110c34 --- /dev/null +++ b/src/wrapped32/generated/wrappedsdl2defs32.h @@ -0,0 +1,12 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedsdl2DEFS32_H_ +#define __wrappedsdl2DEFS32_H_ + +#define JFEi pFEpi +#define JFEi_32 pFEpi_32 +#define JFEp pFEpp +#define JFEp_32 pFEpp_32 + +#endif // __wrappedsdl2DEFS32_H_ diff --git a/src/wrapped32/generated/wrappedsdl2imagedefs32.h b/src/wrapped32/generated/wrappedsdl2imagedefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..c11135c437c561ddc0fc07c6eaf1fb2e857f8c29 --- /dev/null +++ b/src/wrapped32/generated/wrappedsdl2imagedefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedsdl2imageDEFS32_H_ +#define __wrappedsdl2imageDEFS32_H_ + + +#endif // __wrappedsdl2imageDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedsdl2imagetypes32.h b/src/wrapped32/generated/wrappedsdl2imagetypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..74fe53d9a2ecfcc6211c78ab60a7a5a9be44c61b --- /dev/null +++ b/src/wrapped32/generated/wrappedsdl2imagetypes32.h @@ -0,0 +1,42 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedsdl2imageTYPES32_H_ +#define __wrappedsdl2imageTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void* (*pFp_t)(void*); +typedef void* (*pFpi_t)(void*, int32_t); +typedef void* (*pFpip_t)(void*, int32_t, void*); +typedef void* (*pFppi_t)(void*, void*, int32_t); +typedef void* (*pFppip_t)(void*, void*, int32_t, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(IMG_Load, pFp_t) \ + GO(IMG_LoadBMP_RW, pFp_t) \ + GO(IMG_LoadCUR_RW, pFp_t) \ + GO(IMG_LoadGIF_RW, pFp_t) \ + GO(IMG_LoadICO_RW, pFp_t) \ + GO(IMG_LoadJPG_RW, pFp_t) \ + GO(IMG_LoadLBM_RW, pFp_t) \ + GO(IMG_LoadPCX_RW, pFp_t) \ + GO(IMG_LoadPNG_RW, pFp_t) \ + GO(IMG_LoadPNM_RW, pFp_t) \ + GO(IMG_LoadTGA_RW, pFp_t) \ + GO(IMG_LoadTIF_RW, pFp_t) \ + GO(IMG_LoadWEBP_RW, pFp_t) \ + GO(IMG_LoadXCF_RW, pFp_t) \ + GO(IMG_LoadXPM_RW, pFp_t) \ + GO(IMG_LoadXV_RW, pFp_t) \ + GO(IMG_Load_RW, pFpi_t) \ + GO(IMG_LoadTyped_RW, pFpip_t) \ + GO(IMG_LoadTexture_RW, pFppi_t) \ + GO(IMG_LoadTextureTyped_RW, pFppip_t) + +#endif // __wrappedsdl2imageTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedsdl2imageundefs32.h b/src/wrapped32/generated/wrappedsdl2imageundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..67b76871a5d954b64cedf93c007b2befe17ca20e --- /dev/null +++ b/src/wrapped32/generated/wrappedsdl2imageundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedsdl2imageUNDEFS32_H_ +#define __wrappedsdl2imageUNDEFS32_H_ + + +#endif // __wrappedsdl2imageUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedsdl2types32.h b/src/wrapped32/generated/wrappedsdl2types32.h new file mode 100644 index 0000000000000000000000000000000000000000..627bb6c8d131a0031f2c460811eb64b4dd26a2cf --- /dev/null +++ b/src/wrapped32/generated/wrappedsdl2types32.h @@ -0,0 +1,98 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedsdl2TYPES32_H_ +#define __wrappedsdl2TYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFp_t)(void*); +typedef int32_t (*iFp_t)(void*); +typedef int64_t (*IFp_t)(void*); +typedef void* (*pFv_t)(void); +typedef void* (*pFp_t)(void*); +typedef uintptr_t (*hFp_t)(void*); +typedef SDL2_GUID_t (*JFi_t)(int32_t); +typedef SDL2_GUID_t (*JFp_t)(void*); +typedef void (*vFpp_t)(void*, void*); +typedef void (*vFpV_t)(void*, ...); +typedef int32_t (*iFip_t)(int32_t, void*); +typedef int32_t (*iFpi_t)(void*, int32_t); +typedef int32_t (*iFpp_t)(void*, void*); +typedef void* (*pFpi_t)(void*, int32_t); +typedef void* (*pFpp_t)(void*, void*); +typedef int32_t (*iFiip_t)(int32_t, int32_t, void*); +typedef int32_t (*iFpiu_t)(void*, int32_t, uint32_t); +typedef int32_t (*iFppu_t)(void*, void*, uint32_t); +typedef int32_t (*iFppV_t)(void*, void*, ...); +typedef int64_t (*IFpIi_t)(void*, int64_t, int32_t); +typedef void* (*pFipp_t)(int32_t, void*, void*); +typedef void* (*pFpii_t)(void*, int32_t, int32_t); +typedef void* (*pFpuu_t)(void*, uint32_t, uint32_t); +typedef void* (*pFppu_t)(void*, void*, uint32_t); +typedef void* (*pFppp_t)(void*, void*, void*); +typedef int32_t (*iFpLpp_t)(void*, uintptr_t, void*, void*); +typedef int32_t (*iFpLpV_t)(void*, uintptr_t, void*, ...); +typedef uintptr_t (*LFppLL_t)(void*, void*, uintptr_t, uintptr_t); +typedef int32_t (*iFpiuuu_t)(void*, int32_t, uint32_t, uint32_t, uint32_t); +typedef uint32_t (*uFpippi_t)(void*, int32_t, void*, void*, int32_t); +typedef void* (*pFpiiiiu_t)(void*, int32_t, int32_t, int32_t, int32_t, uint32_t); +typedef void* (*pFuiiiuuuu_t)(uint32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void* (*pFpiiiiuuuu_t)(void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(SDL_FreeSurface, vFp_t) \ + GO(SDL_PollEvent, iFp_t) \ + GO(SDL_PushEvent, iFp_t) \ + GO(SDL_RWclose, iFp_t) \ + GO(SDL_RWsize, IFp_t) \ + GO(SDL_RWtell, IFp_t) \ + GO(SDL_GetBasePath, pFv_t) \ + GO(SDL_GL_GetProcAddress, pFp_t) \ + GO(SDL_GetThreadID, hFp_t) \ + GO(SDL_JoystickGetDeviceGUID, JFi_t) \ + GO(SDL_JoystickGetGUIDFromString, JFp_t) \ + GO(SDL_AddEventWatch, vFpp_t) \ + GO(SDL_DelEventWatch, vFpp_t) \ + GO(SDL_SetEventFilter, vFpp_t) \ + GO(SDL_SetWindowIcon, vFpp_t) \ + GO(SDL_Log, vFpV_t) \ + GO(SDL_GetCurrentDisplayMode, iFip_t) \ + GO(SDL_GetDesktopDisplayMode, iFip_t) \ + GO(SDL_GameControllerAddMappingsFromRW, iFpi_t) \ + GO(SDL_WaitEventTimeout, iFpi_t) \ + GO(SDL_GetWindowDisplayMode, iFpp_t) \ + GO(SDL_GetWindowWMInfo, iFpp_t) \ + GO(SDL_OpenAudio, iFpp_t) \ + GO(SDL_SetWindowDisplayMode, iFpp_t) \ + GO(SDL_ShowMessageBox, iFpp_t) \ + GO(SDL_LoadBMP_RW, pFpi_t) \ + GO(SDL_notreal, pFpi_t) \ + GO(SDL_CreateTextureFromSurface, pFpp_t) \ + GO(SDL_RWFromFile, pFpp_t) \ + GO(SDL_GetDisplayMode, iFiip_t) \ + GO(SDL_SetColorKey, iFpiu_t) \ + GO(SDL_FillRect, iFppu_t) \ + GO(SDL_sscanf, iFppV_t) \ + GO(SDL_RWseek, IFpIi_t) \ + GO(SDL_GetClosestDisplayMode, pFipp_t) \ + GO(SDL_CreateColorCursor, pFpii_t) \ + GO(SDL_ConvertSurfaceFormat, pFpuu_t) \ + GO(SDL_ConvertSurface, pFppu_t) \ + GO(SDL_CreateThread, pFppp_t) \ + GO(SDL_vsnprintf, iFpLpp_t) \ + GO(SDL_snprintf, iFpLpV_t) \ + GO(SDL_RWread, LFppLL_t) \ + GO(SDL_RWwrite, LFppLL_t) \ + GO(SDL_PeepEvents, iFpiuuu_t) \ + GO(SDL_OpenAudioDevice, uFpippi_t) \ + GO(SDL_CreateRGBSurfaceWithFormatFrom, pFpiiiiu_t) \ + GO(SDL_CreateRGBSurface, pFuiiiuuuu_t) \ + GO(SDL_CreateRGBSurfaceFrom, pFpiiiiuuuu_t) + +#endif // __wrappedsdl2TYPES32_H_ diff --git a/src/wrapped32/generated/wrappedsdl2undefs32.h b/src/wrapped32/generated/wrappedsdl2undefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..13a187a7b460215ce6d716a2f5eebada700d97b1 --- /dev/null +++ b/src/wrapped32/generated/wrappedsdl2undefs32.h @@ -0,0 +1,12 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedsdl2UNDEFS32_H_ +#define __wrappedsdl2UNDEFS32_H_ + +#undef JFEi +#undef JFEi_32 +#undef JFEp +#undef JFEp_32 + +#endif // __wrappedsdl2UNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedtcmallocminimaldefs32.h b/src/wrapped32/generated/wrappedtcmallocminimaldefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..4f69b0089070aa093abfdfd524e8516246db916f --- /dev/null +++ b/src/wrapped32/generated/wrappedtcmallocminimaldefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedtcmallocminimalDEFS32_H_ +#define __wrappedtcmallocminimalDEFS32_H_ + + +#endif // __wrappedtcmallocminimalDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedtcmallocminimaltypes32.h b/src/wrapped32/generated/wrappedtcmallocminimaltypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..93898fa70ca6b78fd8d3a5ff82eb8248d539fd0b --- /dev/null +++ b/src/wrapped32/generated/wrappedtcmallocminimaltypes32.h @@ -0,0 +1,24 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedtcmallocminimalTYPES32_H_ +#define __wrappedtcmallocminimalTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void* (*pFp_t)(void*); +typedef int32_t (*iFpL_t)(void*, uintptr_t); +typedef void* (*pFpLiiii_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int32_t); +typedef void* (*pFpLiiiI_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int64_t); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(munmap, iFpL_t) \ + GO(mmap, pFpLiiii_t) \ + GO(mmap64, pFpLiiiI_t) + +#endif // __wrappedtcmallocminimalTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedtcmallocminimalundefs32.h b/src/wrapped32/generated/wrappedtcmallocminimalundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..c2b7d5ee6e94885fa6b5e90e2356ab72804abf83 --- /dev/null +++ b/src/wrapped32/generated/wrappedtcmallocminimalundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedtcmallocminimalUNDEFS32_H_ +#define __wrappedtcmallocminimalUNDEFS32_H_ + + +#endif // __wrappedtcmallocminimalUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedudev0defs32.h b/src/wrapped32/generated/wrappedudev0defs32.h new file mode 100644 index 0000000000000000000000000000000000000000..da982e118eb7a70d503a3e136deeb83f27c6b260 --- /dev/null +++ b/src/wrapped32/generated/wrappedudev0defs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedudev0DEFS32_H_ +#define __wrappedudev0DEFS32_H_ + + +#endif // __wrappedudev0DEFS32_H_ diff --git a/src/wrapped32/generated/wrappedudev0types32.h b/src/wrapped32/generated/wrappedudev0types32.h new file mode 100644 index 0000000000000000000000000000000000000000..e5c033bbece761e6dd016744c4394cf2efbb484f --- /dev/null +++ b/src/wrapped32/generated/wrappedudev0types32.h @@ -0,0 +1,17 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedudev0TYPES32_H_ +#define __wrappedudev0TYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedudev0TYPES32_H_ diff --git a/src/wrapped32/generated/wrappedudev0undefs32.h b/src/wrapped32/generated/wrappedudev0undefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..b14de87dd43d3b0a9dda40d9c8d3ea98e651c43f --- /dev/null +++ b/src/wrapped32/generated/wrappedudev0undefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedudev0UNDEFS32_H_ +#define __wrappedudev0UNDEFS32_H_ + + +#endif // __wrappedudev0UNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedudev1defs32.h b/src/wrapped32/generated/wrappedudev1defs32.h new file mode 100644 index 0000000000000000000000000000000000000000..065f83e3079031865a09a9ac95283808525230a0 --- /dev/null +++ b/src/wrapped32/generated/wrappedudev1defs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedudev1DEFS32_H_ +#define __wrappedudev1DEFS32_H_ + + +#endif // __wrappedudev1DEFS32_H_ diff --git a/src/wrapped32/generated/wrappedudev1types32.h b/src/wrapped32/generated/wrappedudev1types32.h new file mode 100644 index 0000000000000000000000000000000000000000..774e668abb82b68443ce5dcde7489c44986c97a0 --- /dev/null +++ b/src/wrapped32/generated/wrappedudev1types32.h @@ -0,0 +1,19 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedudev1TYPES32_H_ +#define __wrappedudev1TYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + +typedef void (*vFpp_t)(void*, void*); + +#define SUPER() ADDED_FUNCTIONS() \ + GO(udev_set_log_fn, vFpp_t) + +#endif // __wrappedudev1TYPES32_H_ diff --git a/src/wrapped32/generated/wrappedudev1undefs32.h b/src/wrapped32/generated/wrappedudev1undefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..7e3d7433836847a5c980003e08366a1f91160a96 --- /dev/null +++ b/src/wrapped32/generated/wrappedudev1undefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedudev1UNDEFS32_H_ +#define __wrappedudev1UNDEFS32_H_ + + +#endif // __wrappedudev1UNDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedxineramadefs32.h b/src/wrapped32/generated/wrappedxineramadefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..d334187a2d73dfe3d5ae8896d03535cc70d8237a --- /dev/null +++ b/src/wrapped32/generated/wrappedxineramadefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedxineramaDEFS32_H_ +#define __wrappedxineramaDEFS32_H_ + + +#endif // __wrappedxineramaDEFS32_H_ diff --git a/src/wrapped32/generated/wrappedxineramatypes32.h b/src/wrapped32/generated/wrappedxineramatypes32.h new file mode 100644 index 0000000000000000000000000000000000000000..31abe348abfa57d3760d3f695fe656e72a68c5ff --- /dev/null +++ b/src/wrapped32/generated/wrappedxineramatypes32.h @@ -0,0 +1,17 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedxineramaTYPES32_H_ +#define __wrappedxineramaTYPES32_H_ + +#ifndef LIBNAME +#error You should only #include this file inside a wrapped*.c file +#endif +#ifndef ADDED_FUNCTIONS +#define ADDED_FUNCTIONS() +#endif + + +#define SUPER() ADDED_FUNCTIONS() + +#endif // __wrappedxineramaTYPES32_H_ diff --git a/src/wrapped32/generated/wrappedxineramaundefs32.h b/src/wrapped32/generated/wrappedxineramaundefs32.h new file mode 100644 index 0000000000000000000000000000000000000000..18d75dea8555e3e092e8d265c42909bb52a230e2 --- /dev/null +++ b/src/wrapped32/generated/wrappedxineramaundefs32.h @@ -0,0 +1,8 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __wrappedxineramaUNDEFS32_H_ +#define __wrappedxineramaUNDEFS32_H_ + + +#endif // __wrappedxineramaUNDEFS32_H_ diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c new file mode 100644 index 0000000000000000000000000000000000000000..42aeb33051d2a1bcd896d6cb5e0da68266877b31 --- /dev/null +++ b/src/wrapped32/generated/wrapper32.c @@ -0,0 +1,3393 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#include +#include +#include +#include + +#include "wrapper32.h" +#include "emu/x64emu_private.h" +#include "emu/x87emu_private.h" +#include "regs.h" +#include "x64emu.h" +#include "box32.h" +#include "converter32.h" + +typedef union ui64_s { + int64_t i; + uint64_t u; + uint32_t d[2]; +} ui64_t; + +typedef struct _2uint_struct_s { + uint32_t a; + uint32_t b; +} _2uint_struct_t; + +extern void* my__IO_2_1_stderr_; +extern void* my__IO_2_1_stdin_ ; +extern void* my__IO_2_1_stdout_; + +static void* io_convert32(void* v) +{ + if(!v) + return v; + if(v==my__IO_2_1_stderr_) + return stderr; + if(v==my__IO_2_1_stdin_) + return stdin; + if(v==my__IO_2_1_stdout_) + return stdout; + return v; +} + +static void* io_convert_from(void* v) +{ + if(!v) + return v; + if(v==stderr) + return my__IO_2_1_stderr_; + if(v==stdin) + return my__IO_2_1_stdin_; + if(v==stdout) + return my__IO_2_1_stdout_; + return v; +} + +typedef struct my_GValue_s +{ + int g_type; + union { + int v_int; + int64_t v_int64; + uint64_t v_uint64; + float v_float; + double v_double; + void* v_pointer; + } data[2]; +} my_GValue_t; + +static void alignGValue(my_GValue_t* v, void* value) +{ + v->g_type = *(int*)value; + memcpy(v->data, value+4, 2*sizeof(double)); +} +static void unalignGValue(void* value, my_GValue_t* v) +{ + *(int*)value = v->g_type; + memcpy(value+4, v->data, 2*sizeof(double)); +} + +void* VulkanFromx86(void* src, void** save); +void VulkanTox86(void* src, void* save); + +#define ST0val ST0.d + +int of_convert32(int); + +void* getDisplay(void*); +void* addDisplay(void*); + +typedef void (*vEv_t)(void); +typedef void (*vFv_t)(void); +typedef void (*vFc_t)(int8_t); +typedef void (*vFw_t)(int16_t); +typedef void (*vEi_t)(int32_t); +typedef void (*vFi_t)(int32_t); +typedef void (*vFC_t)(uint8_t); +typedef void (*vFW_t)(uint16_t); +typedef void (*vEu_t)(uint32_t); +typedef void (*vFu_t)(uint32_t); +typedef void (*vFU_t)(uint64_t); +typedef void (*vFf_t)(float); +typedef void (*vFd_t)(double); +typedef void (*vEl_t)(intptr_t); +typedef void (*vFl_t)(intptr_t); +typedef void (*vEp_t)(void*); +typedef void (*vFp_t)(void*); +typedef void (*vEA_t)(void*); +typedef void (*vES_t)(void*); +typedef void (*vFS_t)(void*); +typedef void (*vFX_t)(void*); +typedef int8_t (*cFc_t)(int8_t); +typedef int8_t (*cFi_t)(int32_t); +typedef int8_t (*cFu_t)(uint32_t); +typedef int8_t (*cFp_t)(void*); +typedef int16_t (*wFp_t)(void*); +typedef int32_t (*iEv_t)(void); +typedef int32_t (*iFv_t)(void); +typedef int32_t (*iEi_t)(int32_t); +typedef int32_t (*iFi_t)(int32_t); +typedef int32_t (*iEI_t)(int64_t); +typedef int32_t (*iEu_t)(uint32_t); +typedef int32_t (*iFu_t)(uint32_t); +typedef int32_t (*iEf_t)(float); +typedef int32_t (*iEd_t)(double); +typedef int32_t (*iEl_t)(intptr_t); +typedef int32_t (*iEL_t)(uintptr_t); +typedef int32_t (*iEp_t)(void*); +typedef int32_t (*iFp_t)(void*); +typedef int32_t (*iEh_t)(uintptr_t); +typedef int32_t (*iES_t)(void*); +typedef int32_t (*iFX_t)(void*); +typedef int64_t (*IEf_t)(float); +typedef int64_t (*IEd_t)(double); +typedef int64_t (*IEp_t)(void*); +typedef int64_t (*IFp_t)(void*); +typedef int64_t (*IES_t)(void*); +typedef uint8_t (*CFv_t)(void); +typedef uint8_t (*CFi_t)(int32_t); +typedef uint8_t (*CFu_t)(uint32_t); +typedef uint8_t (*CFU_t)(uint64_t); +typedef uint8_t (*CFl_t)(intptr_t); +typedef uint8_t (*CFp_t)(void*); +typedef uint16_t (*WFi_t)(int32_t); +typedef uint16_t (*WEW_t)(uint16_t); +typedef uint16_t (*WFu_t)(uint32_t); +typedef uint16_t (*WFp_t)(void*); +typedef uint32_t (*uEv_t)(void); +typedef uint32_t (*uFv_t)(void); +typedef uint32_t (*uEi_t)(int32_t); +typedef uint32_t (*uFi_t)(int32_t); +typedef uint32_t (*uEu_t)(uint32_t); +typedef uint32_t (*uFu_t)(uint32_t); +typedef uint32_t (*uEU_t)(uint64_t); +typedef uint32_t (*uEp_t)(void*); +typedef uint32_t (*uFp_t)(void*); +typedef uint32_t (*uES_t)(void*); +typedef uint32_t (*uFX_t)(void*); +typedef uint64_t (*UFv_t)(void); +typedef uint64_t (*UFi_t)(int32_t); +typedef uint64_t (*UFu_t)(uint32_t); +typedef uint64_t (*UEp_t)(void*); +typedef uint64_t (*UFp_t)(void*); +typedef uint64_t (*UEs_t)(void*); +typedef float (*fFi_t)(int32_t); +typedef float (*fEf_t)(float); +typedef float (*fFf_t)(float); +typedef double (*dEv_t)(void); +typedef double (*dFi_t)(int32_t); +typedef double (*dEd_t)(double); +typedef double (*dFd_t)(double); +typedef double (*dEp_t)(void*); +typedef double (*dFp_t)(void*); +typedef intptr_t (*lEv_t)(void); +typedef intptr_t (*lFu_t)(uint32_t); +typedef intptr_t (*lEl_t)(intptr_t); +typedef intptr_t (*lFl_t)(intptr_t); +typedef intptr_t (*lEp_t)(void*); +typedef intptr_t (*lFp_t)(void*); +typedef intptr_t (*lES_t)(void*); +typedef intptr_t (*lFX_t)(void*); +typedef uintptr_t (*LEv_t)(void); +typedef uintptr_t (*LFv_t)(void); +typedef uintptr_t (*LEL_t)(uintptr_t); +typedef uintptr_t (*LEp_t)(void*); +typedef uintptr_t (*LFp_t)(void*); +typedef uintptr_t (*LFX_t)(void*); +typedef void* (*pEv_t)(void); +typedef void* (*pFv_t)(void); +typedef void* (*pEi_t)(int32_t); +typedef void* (*pFi_t)(int32_t); +typedef void* (*pEu_t)(uint32_t); +typedef void* (*pFu_t)(uint32_t); +typedef void* (*pEl_t)(intptr_t); +typedef void* (*pFl_t)(intptr_t); +typedef void* (*pEL_t)(uintptr_t); +typedef void* (*pFL_t)(uintptr_t); +typedef void* (*pEp_t)(void*); +typedef void* (*pFp_t)(void*); +typedef void* (*pFX_t)(void*); +typedef uintptr_t (*hEv_t)(void); +typedef uintptr_t (*hFv_t)(void); +typedef void* (*aEa_t)(void*); +typedef char* (*tEi_t)(int32_t); +typedef char* (*tEu_t)(uint32_t); +typedef char* (*tEp_t)(void*); +typedef char* (*tFp_t)(void*); +typedef void* (*XFv_t)(void); +typedef void* (*XFp_t)(void*); +typedef void (*vFbp__t)(struct_p_t*); +typedef int32_t (*iFbp__t)(struct_p_t*); +typedef int32_t (*iFBp__t)(struct_p_t*); +typedef uintptr_t (*LErl__t)(struct_l_t*); +typedef void* (*pErl__t)(struct_l_t*); +typedef intptr_t (*lFrll__t)(struct_ll_t*); +typedef int32_t (*iEBllll__t)(struct_llll_t*); +typedef void (*vFbuuipWCCp__t)(struct_uuipWCCp_t*); +typedef void (*vFbWWpWpWpWp__t)(struct_WWpWpWpWp_t*); +typedef uintptr_t (*LEbiiiiiiiiilt__t)(struct_iiiiiiiiilt_t*); +typedef uintptr_t (*LEriiiiiiiiilt__t)(struct_iiiiiiiiilt_t*); +typedef void* (*pEriiiiiiiiilt__t)(struct_iiiiiiiiilt_t*); +typedef void (*vEEv_t)(x64emu_t*); +typedef void (*vFEv_t)(x64emu_t*); +typedef void (*vEEp_t)(x64emu_t*, void*); +typedef void (*vFEp_t)(x64emu_t*, void*); +typedef void (*vFEX_t)(x64emu_t*, void*); +typedef void (*vFcc_t)(int8_t, int8_t); +typedef void (*vFww_t)(int16_t, int16_t); +typedef void (*vFii_t)(int32_t, int32_t); +typedef void (*vFiI_t)(int32_t, int64_t); +typedef void (*vFiW_t)(int32_t, uint16_t); +typedef void (*vFiu_t)(int32_t, uint32_t); +typedef void (*vFiU_t)(int32_t, uint64_t); +typedef void (*vFif_t)(int32_t, float); +typedef void (*vFid_t)(int32_t, double); +typedef void (*vFip_t)(int32_t, void*); +typedef void (*vFWW_t)(uint16_t, uint16_t); +typedef void (*vFuc_t)(uint32_t, int8_t); +typedef void (*vFuw_t)(uint32_t, int16_t); +typedef void (*vFui_t)(uint32_t, int32_t); +typedef void (*vFuI_t)(uint32_t, int64_t); +typedef void (*vFuC_t)(uint32_t, uint8_t); +typedef void (*vFuW_t)(uint32_t, uint16_t); +typedef void (*vFuu_t)(uint32_t, uint32_t); +typedef void (*vFuU_t)(uint32_t, uint64_t); +typedef void (*vFuf_t)(uint32_t, float); +typedef void (*vFud_t)(uint32_t, double); +typedef void (*vFul_t)(uint32_t, intptr_t); +typedef void (*vFup_t)(uint32_t, void*); +typedef void (*vFUu_t)(uint64_t, uint32_t); +typedef void (*vFfC_t)(float, uint8_t); +typedef void (*vFff_t)(float, float); +typedef void (*vFdd_t)(double, double); +typedef void (*vFlu_t)(intptr_t, uint32_t); +typedef void (*vFlp_t)(intptr_t, void*); +typedef void (*vEpi_t)(void*, int32_t); +typedef void (*vFpi_t)(void*, int32_t); +typedef void (*vFpC_t)(void*, uint8_t); +typedef void (*vFpu_t)(void*, uint32_t); +typedef void (*vFpl_t)(void*, intptr_t); +typedef void (*vEpL_t)(void*, uintptr_t); +typedef void (*vFpL_t)(void*, uintptr_t); +typedef void (*vEpp_t)(void*, void*); +typedef void (*vFpp_t)(void*, void*); +typedef void (*vESp_t)(void*, void*); +typedef void (*vFXi_t)(void*, int32_t); +typedef void (*vFXL_t)(void*, uintptr_t); +typedef void (*vFXp_t)(void*, void*); +typedef int8_t (*cFpp_t)(void*, void*); +typedef int16_t (*wFpi_t)(void*, int32_t); +typedef int32_t (*iEEv_t)(x64emu_t*); +typedef int32_t (*iEEi_t)(x64emu_t*, int32_t); +typedef int32_t (*iEEL_t)(x64emu_t*, uintptr_t); +typedef int32_t (*iEEp_t)(x64emu_t*, void*); +typedef int32_t (*iFEp_t)(x64emu_t*, void*); +typedef int32_t (*iEEh_t)(x64emu_t*, uintptr_t); +typedef int32_t (*iEEO_t)(x64emu_t*, int32_t); +typedef int32_t (*iFEX_t)(x64emu_t*, void*); +typedef int32_t (*iEii_t)(int32_t, int32_t); +typedef int32_t (*iFii_t)(int32_t, int32_t); +typedef int32_t (*iEiI_t)(int32_t, int64_t); +typedef int32_t (*iEiu_t)(int32_t, uint32_t); +typedef int32_t (*iFiu_t)(int32_t, uint32_t); +typedef int32_t (*iEil_t)(int32_t, intptr_t); +typedef int32_t (*iEip_t)(int32_t, void*); +typedef int32_t (*iFip_t)(int32_t, void*); +typedef int32_t (*iEiS_t)(int32_t, void*); +typedef int32_t (*iEui_t)(uint32_t, int32_t); +typedef int32_t (*iFui_t)(uint32_t, int32_t); +typedef int32_t (*iEuu_t)(uint32_t, uint32_t); +typedef int32_t (*iEuL_t)(uint32_t, uintptr_t); +typedef int32_t (*iEup_t)(uint32_t, void*); +typedef int32_t (*iFup_t)(uint32_t, void*); +typedef int32_t (*iEua_t)(uint32_t, void*); +typedef int32_t (*iFpw_t)(void*, int16_t); +typedef int32_t (*iEpi_t)(void*, int32_t); +typedef int32_t (*iFpi_t)(void*, int32_t); +typedef int32_t (*iFpI_t)(void*, int64_t); +typedef int32_t (*iEpu_t)(void*, uint32_t); +typedef int32_t (*iFpu_t)(void*, uint32_t); +typedef int32_t (*iFpU_t)(void*, uint64_t); +typedef int32_t (*iFpf_t)(void*, float); +typedef int32_t (*iFpd_t)(void*, double); +typedef int32_t (*iFpl_t)(void*, intptr_t); +typedef int32_t (*iEpL_t)(void*, uintptr_t); +typedef int32_t (*iFpL_t)(void*, uintptr_t); +typedef int32_t (*iEpp_t)(void*, void*); +typedef int32_t (*iFpp_t)(void*, void*); +typedef int32_t (*iEpV_t)(void*, void*); +typedef int32_t (*iEpO_t)(void*, int32_t); +typedef int32_t (*iEpS_t)(void*, void*); +typedef int32_t (*iEhi_t)(uintptr_t, int32_t); +typedef int32_t (*iEhp_t)(uintptr_t, void*); +typedef int32_t (*iEhh_t)(uintptr_t, uintptr_t); +typedef int32_t (*iESi_t)(void*, int32_t); +typedef int32_t (*iESU_t)(void*, uint64_t); +typedef int32_t (*iESp_t)(void*, void*); +typedef int32_t (*iFXi_t)(void*, int32_t); +typedef int32_t (*iFXW_t)(void*, uint16_t); +typedef int32_t (*iFXL_t)(void*, uintptr_t); +typedef int32_t (*iFXp_t)(void*, void*); +typedef int64_t (*IFEp_t)(x64emu_t*, void*); +typedef int64_t (*IEII_t)(int64_t, int64_t); +typedef int64_t (*IFpu_t)(void*, uint32_t); +typedef uint8_t (*CFip_t)(int32_t, void*); +typedef uint8_t (*CFCi_t)(uint8_t, int32_t); +typedef uint8_t (*CFui_t)(uint32_t, int32_t); +typedef uint8_t (*CFuu_t)(uint32_t, uint32_t); +typedef uint8_t (*CFuU_t)(uint32_t, uint64_t); +typedef uint8_t (*CFpi_t)(void*, int32_t); +typedef uint8_t (*CFpu_t)(void*, uint32_t); +typedef uint8_t (*CFpp_t)(void*, void*); +typedef uint8_t (*CFXL_t)(void*, uintptr_t); +typedef uint16_t (*WFpp_t)(void*, void*); +typedef uint32_t (*uFEp_t)(x64emu_t*, void*); +typedef uint32_t (*uFii_t)(int32_t, int32_t); +typedef uint32_t (*uEiS_t)(int32_t, void*); +typedef uint32_t (*uFuu_t)(uint32_t, uint32_t); +typedef uint32_t (*uFup_t)(uint32_t, void*); +typedef uint32_t (*uEua_t)(uint32_t, void*); +typedef uint32_t (*uEuS_t)(uint32_t, void*); +typedef uint32_t (*uFpi_t)(void*, int32_t); +typedef uint32_t (*uFpu_t)(void*, uint32_t); +typedef uint32_t (*uFpp_t)(void*, void*); +typedef uint32_t (*uFXL_t)(void*, uintptr_t); +typedef uint64_t (*UEuu_t)(uint32_t, uint32_t); +typedef uint64_t (*UFuu_t)(uint32_t, uint32_t); +typedef uint64_t (*UEUU_t)(uint64_t, uint64_t); +typedef uint64_t (*UEss_t)(void*, void*); +typedef float (*fEif_t)(int32_t, float); +typedef float (*fEfi_t)(float, int32_t); +typedef float (*fFfi_t)(float, int32_t); +typedef float (*fEff_t)(float, float); +typedef float (*fFff_t)(float, float); +typedef float (*fEfD_t)(float, long double); +typedef float (*fEfp_t)(float, void*); +typedef double (*dEid_t)(int32_t, double); +typedef double (*dEdi_t)(double, int32_t); +typedef double (*dFdi_t)(double, int32_t); +typedef double (*dEdd_t)(double, double); +typedef double (*dFdd_t)(double, double); +typedef double (*dEdD_t)(double, long double); +typedef double (*dEdp_t)(double, void*); +typedef double (*dEll_t)(intptr_t, intptr_t); +typedef double (*dFpp_t)(void*, void*); +typedef intptr_t (*lEEi_t)(x64emu_t*, int32_t); +typedef intptr_t (*lEEV_t)(x64emu_t*, void*); +typedef intptr_t (*lEES_t)(x64emu_t*, void*); +typedef intptr_t (*lEii_t)(int32_t, int32_t); +typedef intptr_t (*lFiL_t)(int32_t, uintptr_t); +typedef intptr_t (*lFui_t)(uint32_t, int32_t); +typedef intptr_t (*lFll_t)(intptr_t, intptr_t); +typedef intptr_t (*lEpi_t)(void*, int32_t); +typedef intptr_t (*lFpu_t)(void*, uint32_t); +typedef intptr_t (*lFpl_t)(void*, intptr_t); +typedef intptr_t (*lFpL_t)(void*, uintptr_t); +typedef uintptr_t (*LEEL_t)(x64emu_t*, uintptr_t); +typedef uintptr_t (*LFEp_t)(x64emu_t*, void*); +typedef uintptr_t (*LFLi_t)(uintptr_t, int32_t); +typedef uintptr_t (*LEpL_t)(void*, uintptr_t); +typedef uintptr_t (*LEpp_t)(void*, void*); +typedef uintptr_t (*LFXi_t)(void*, int32_t); +typedef uintptr_t (*LFXu_t)(void*, uint32_t); +typedef uintptr_t (*LFXL_t)(void*, uintptr_t); +typedef uintptr_t (*LFXp_t)(void*, void*); +typedef void* (*pFEv_t)(x64emu_t*); +typedef void* (*pEEv_t)(x64emu_t*); +typedef void* (*pEEu_t)(x64emu_t*, uint32_t); +typedef void* (*pFEp_t)(x64emu_t*, void*); +typedef void* (*pEEp_t)(x64emu_t*, void*); +typedef void* (*pEES_t)(x64emu_t*, void*); +typedef void* (*pFEX_t)(x64emu_t*, void*); +typedef void* (*pFii_t)(int32_t, int32_t); +typedef void* (*pFiu_t)(int32_t, uint32_t); +typedef void* (*pFip_t)(int32_t, void*); +typedef void* (*pFuu_t)(uint32_t, uint32_t); +typedef void* (*pFup_t)(uint32_t, void*); +typedef void* (*pELL_t)(uintptr_t, uintptr_t); +typedef void* (*pFLL_t)(uintptr_t, uintptr_t); +typedef void* (*pEpi_t)(void*, int32_t); +typedef void* (*pFpi_t)(void*, int32_t); +typedef void* (*pFpu_t)(void*, uint32_t); +typedef void* (*pEpL_t)(void*, uintptr_t); +typedef void* (*pFpL_t)(void*, uintptr_t); +typedef void* (*pEpp_t)(void*, void*); +typedef void* (*pFpp_t)(void*, void*); +typedef void* (*pFXi_t)(void*, int32_t); +typedef void* (*pFXu_t)(void*, uint32_t); +typedef void* (*pFXL_t)(void*, uintptr_t); +typedef void* (*pFXp_t)(void*, void*); +typedef uintptr_t (*hFEp_t)(x64emu_t*, void*); +typedef uintptr_t (*hEpa_t)(void*, void*); +typedef void* (*SEip_t)(int32_t, void*); +typedef void* (*SEpp_t)(void*, void*); +typedef char* (*tEip_t)(int32_t, void*); +typedef char* (*tEia_t)(int32_t, void*); +typedef char* (*tEpL_t)(void*, uintptr_t); +typedef char* (*tEpp_t)(void*, void*); +typedef void (*vFuBp__t)(uint32_t, struct_p_t*); +typedef void (*vFpbp__t)(void*, struct_p_t*); +typedef void (*vFbp_p_t)(struct_p_t*, void*); +typedef int32_t (*iEEbp__t)(x64emu_t*, struct_p_t*); +typedef int32_t (*iFibp__t)(int32_t, struct_p_t*); +typedef int32_t (*iFLbp__t)(uintptr_t, struct_p_t*); +typedef int32_t (*iFpbp__t)(void*, struct_p_t*); +typedef int32_t (*iFpbl__t)(void*, struct_l_t*); +typedef int32_t (*iFpBL__t)(void*, struct_L_t*); +typedef int32_t (*iFpbL__t)(void*, struct_L_t*); +typedef int32_t (*iEHBp__t)(uintptr_t, struct_p_t*); +typedef int32_t (*iFbp_i_t)(struct_p_t*, int32_t); +typedef int32_t (*iFbp_p_t)(struct_p_t*, void*); +typedef int32_t (*iFXbL__t)(void*, struct_L_t*); +typedef float (*fEpBp__t)(void*, struct_p_t*); +typedef double (*dEpBp__t)(void*, struct_p_t*); +typedef uintptr_t (*LFpbp__t)(void*, struct_p_t*); +typedef uintptr_t (*LFpbL__t)(void*, struct_L_t*); +typedef void* (*pErl_p_t)(struct_l_t*, void*); +typedef void (*vFBll_l_t)(struct_ll_t*, intptr_t); +typedef int32_t (*iEuBLL__t)(uint32_t, struct_LL_t*); +typedef int32_t (*iEprll__t)(void*, struct_ll_t*); +typedef int32_t (*iEpbup__t)(void*, struct_up_t*); +typedef int32_t (*iEprLL__t)(void*, struct_LL_t*); +typedef int32_t (*iFbpi_i_t)(struct_pi_t*, int32_t); +typedef int32_t (*iEBll_p_t)(struct_ll_t*, void*); +typedef int32_t (*iFXbip__t)(void*, struct_ip_t*); +typedef int32_t (*iESBliu__t)(void*, struct_liu_t*); +typedef int32_t (*iFbppi_i_t)(struct_ppi_t*, int32_t); +typedef int32_t (*iFXbiip__t)(void*, struct_iip_t*); +typedef int32_t (*iErLL_BLL__t)(struct_LL_t*, struct_LL_t*); +typedef uintptr_t (*LFXrLiiuL__t)(void*, struct_LiiuL_t*); +typedef void (*vFbll_rllll__t)(struct_ll_t*, struct_llll_t*); +typedef int32_t (*iFXbiiuuLip__t)(void*, struct_iiuuLip_t*); +typedef int32_t (*iFpruuipWCCp__t)(void*, struct_uuipWCCp_t*); +typedef void* (*pEriiiiiiiiilt_p_t)(struct_iiiiiiiiilt_t*, void*); +typedef int32_t (*iEiBLLLLLLLLLLLLLLLLLL__t)(int32_t, struct_LLLLLLLLLLLLLLLLLL_t*); +typedef void (*vEEip_t)(x64emu_t*, int32_t, void*); +typedef void (*vFEip_t)(x64emu_t*, int32_t, void*); +typedef void (*vEEpi_t)(x64emu_t*, void*, int32_t); +typedef void (*vEEpu_t)(x64emu_t*, void*, uint32_t); +typedef void (*vFEpp_t)(x64emu_t*, void*, void*); +typedef void (*vFEpV_t)(x64emu_t*, void*, void*); +typedef void (*vFEXp_t)(x64emu_t*, void*, void*); +typedef void (*vFccc_t)(int8_t, int8_t, int8_t); +typedef void (*vFwww_t)(int16_t, int16_t, int16_t); +typedef void (*vFiii_t)(int32_t, int32_t, int32_t); +typedef void (*vFiif_t)(int32_t, int32_t, float); +typedef void (*vFiip_t)(int32_t, int32_t, void*); +typedef void (*vFiII_t)(int32_t, int64_t, int64_t); +typedef void (*vFiui_t)(int32_t, uint32_t, int32_t); +typedef void (*vFiuu_t)(int32_t, uint32_t, uint32_t); +typedef void (*vFiup_t)(int32_t, uint32_t, void*); +typedef void (*vFiUU_t)(int32_t, uint64_t, uint64_t); +typedef void (*vFiff_t)(int32_t, float, float); +typedef void (*vFidd_t)(int32_t, double, double); +typedef void (*vFilu_t)(int32_t, intptr_t, uint32_t); +typedef void (*vFill_t)(int32_t, intptr_t, intptr_t); +typedef void (*vFilp_t)(int32_t, intptr_t, void*); +typedef void (*vFipu_t)(int32_t, void*, uint32_t); +typedef void (*vFipp_t)(int32_t, void*, void*); +typedef void (*vFCCC_t)(uint8_t, uint8_t, uint8_t); +typedef void (*vFWWW_t)(uint16_t, uint16_t, uint16_t); +typedef void (*vFucc_t)(uint32_t, int8_t, int8_t); +typedef void (*vFuww_t)(uint32_t, int16_t, int16_t); +typedef void (*vFuii_t)(uint32_t, int32_t, int32_t); +typedef void (*vFuiI_t)(uint32_t, int32_t, int64_t); +typedef void (*vFuiu_t)(uint32_t, int32_t, uint32_t); +typedef void (*vFuiU_t)(uint32_t, int32_t, uint64_t); +typedef void (*vFuif_t)(uint32_t, int32_t, float); +typedef void (*vFuid_t)(uint32_t, int32_t, double); +typedef void (*vFuip_t)(uint32_t, int32_t, void*); +typedef void (*vFuII_t)(uint32_t, int64_t, int64_t); +typedef void (*vFuWW_t)(uint32_t, uint16_t, uint16_t); +typedef void (*vFuui_t)(uint32_t, uint32_t, int32_t); +typedef void (*vFuuC_t)(uint32_t, uint32_t, uint8_t); +typedef void (*vFuuu_t)(uint32_t, uint32_t, uint32_t); +typedef void (*vFuuU_t)(uint32_t, uint32_t, uint64_t); +typedef void (*vFuuf_t)(uint32_t, uint32_t, float); +typedef void (*vFuud_t)(uint32_t, uint32_t, double); +typedef void (*vFuup_t)(uint32_t, uint32_t, void*); +typedef void (*vFuUU_t)(uint32_t, uint64_t, uint64_t); +typedef void (*vFuff_t)(uint32_t, float, float); +typedef void (*vFudd_t)(uint32_t, double, double); +typedef void (*vFull_t)(uint32_t, intptr_t, intptr_t); +typedef void (*vFulp_t)(uint32_t, intptr_t, void*); +typedef void (*vFupp_t)(uint32_t, void*, void*); +typedef void (*vFfff_t)(float, float, float); +typedef void (*vEfpp_t)(float, void*, void*); +typedef void (*vFddd_t)(double, double, double); +typedef void (*vEdpp_t)(double, void*, void*); +typedef void (*vFlii_t)(intptr_t, int32_t, int32_t); +typedef void (*vFlip_t)(intptr_t, int32_t, void*); +typedef void (*vFllp_t)(intptr_t, intptr_t, void*); +typedef void (*vFlpp_t)(intptr_t, void*, void*); +typedef void (*vEpii_t)(void*, int32_t, int32_t); +typedef void (*vFpii_t)(void*, int32_t, int32_t); +typedef void (*vFpip_t)(void*, int32_t, void*); +typedef void (*vFpui_t)(void*, uint32_t, int32_t); +typedef void (*vFpuI_t)(void*, uint32_t, int64_t); +typedef void (*vFpuC_t)(void*, uint32_t, uint8_t); +typedef void (*vFpuu_t)(void*, uint32_t, uint32_t); +typedef void (*vFpuU_t)(void*, uint32_t, uint64_t); +typedef void (*vFpuf_t)(void*, uint32_t, float); +typedef void (*vFpud_t)(void*, uint32_t, double); +typedef void (*vFpul_t)(void*, uint32_t, intptr_t); +typedef void (*vFpup_t)(void*, uint32_t, void*); +typedef void (*vFpdd_t)(void*, double, double); +typedef void (*vFplp_t)(void*, intptr_t, void*); +typedef void (*vFppi_t)(void*, void*, int32_t); +typedef void (*vEppu_t)(void*, void*, uint32_t); +typedef void (*vFppL_t)(void*, void*, uintptr_t); +typedef void (*vFppp_t)(void*, void*, void*); +typedef void (*vFXiL_t)(void*, int32_t, uintptr_t); +typedef void (*vFXLi_t)(void*, uintptr_t, int32_t); +typedef void (*vFXLL_t)(void*, uintptr_t, uintptr_t); +typedef void (*vFXLp_t)(void*, uintptr_t, void*); +typedef void (*vFXpi_t)(void*, void*, int32_t); +typedef void (*vFXpl_t)(void*, void*, intptr_t); +typedef void (*vFXpL_t)(void*, void*, uintptr_t); +typedef void (*vFXpp_t)(void*, void*, void*); +typedef int32_t (*iEEip_t)(x64emu_t*, int32_t, void*); +typedef int32_t (*iFEip_t)(x64emu_t*, int32_t, void*); +typedef int32_t (*iEEup_t)(x64emu_t*, uint32_t, void*); +typedef int32_t (*iFEup_t)(x64emu_t*, uint32_t, void*); +typedef int32_t (*iEEpi_t)(x64emu_t*, void*, int32_t); +typedef int32_t (*iFEpi_t)(x64emu_t*, void*, int32_t); +typedef int32_t (*iFEpu_t)(x64emu_t*, void*, uint32_t); +typedef int32_t (*iFEpl_t)(x64emu_t*, void*, intptr_t); +typedef int32_t (*iEEpL_t)(x64emu_t*, void*, uintptr_t); +typedef int32_t (*iFEpL_t)(x64emu_t*, void*, uintptr_t); +typedef int32_t (*iEEpp_t)(x64emu_t*, void*, void*); +typedef int32_t (*iFEpp_t)(x64emu_t*, void*, void*); +typedef int32_t (*iEEpV_t)(x64emu_t*, void*, void*); +typedef int32_t (*iFEpX_t)(x64emu_t*, void*, void*); +typedef int32_t (*iEEhi_t)(x64emu_t*, uintptr_t, int32_t); +typedef int32_t (*iEEhp_t)(x64emu_t*, uintptr_t, void*); +typedef int32_t (*iFEXp_t)(x64emu_t*, void*, void*); +typedef int32_t (*iEiii_t)(int32_t, int32_t, int32_t); +typedef int32_t (*iEiiI_t)(int32_t, int32_t, int64_t); +typedef int32_t (*iEiil_t)(int32_t, int32_t, intptr_t); +typedef int32_t (*iEiip_t)(int32_t, int32_t, void*); +typedef int32_t (*iFiip_t)(int32_t, int32_t, void*); +typedef int32_t (*iEiiO_t)(int32_t, int32_t, int32_t); +typedef int32_t (*iEiII_t)(int32_t, int64_t, int64_t); +typedef int32_t (*iEiuu_t)(int32_t, uint32_t, uint32_t); +typedef int32_t (*iEiup_t)(int32_t, uint32_t, void*); +typedef int32_t (*iEill_t)(int32_t, intptr_t, intptr_t); +typedef int32_t (*iEiLi_t)(int32_t, uintptr_t, int32_t); +typedef int32_t (*iFipi_t)(int32_t, void*, int32_t); +typedef int32_t (*iEipi_t)(int32_t, void*, int32_t); +typedef int32_t (*iEipu_t)(int32_t, void*, uint32_t); +typedef int32_t (*iFipu_t)(int32_t, void*, uint32_t); +typedef int32_t (*iEipL_t)(int32_t, void*, uintptr_t); +typedef int32_t (*iEipp_t)(int32_t, void*, void*); +typedef int32_t (*iFipp_t)(int32_t, void*, void*); +typedef int32_t (*iFuip_t)(uint32_t, int32_t, void*); +typedef int32_t (*iEuui_t)(uint32_t, uint32_t, int32_t); +typedef int32_t (*iEuuu_t)(uint32_t, uint32_t, uint32_t); +typedef int32_t (*iFuup_t)(uint32_t, uint32_t, void*); +typedef int32_t (*iEuLa_t)(uint32_t, uintptr_t, void*); +typedef int32_t (*iFfff_t)(float, float, float); +typedef int32_t (*iELLi_t)(uintptr_t, uintptr_t, int32_t); +typedef int32_t (*iFpii_t)(void*, int32_t, int32_t); +typedef int32_t (*iEpiu_t)(void*, int32_t, uint32_t); +typedef int32_t (*iFpiu_t)(void*, int32_t, uint32_t); +typedef int32_t (*iFpil_t)(void*, int32_t, intptr_t); +typedef int32_t (*iEpip_t)(void*, int32_t, void*); +typedef int32_t (*iFpip_t)(void*, int32_t, void*); +typedef int32_t (*iFpuC_t)(void*, uint32_t, uint8_t); +typedef int32_t (*iEpuu_t)(void*, uint32_t, uint32_t); +typedef int32_t (*iFpuu_t)(void*, uint32_t, uint32_t); +typedef int32_t (*iFpuU_t)(void*, uint32_t, uint64_t); +typedef int32_t (*iFpup_t)(void*, uint32_t, void*); +typedef int32_t (*iFpUU_t)(void*, uint64_t, uint64_t); +typedef int32_t (*iFpfu_t)(void*, float, uint32_t); +typedef int32_t (*iFpff_t)(void*, float, float); +typedef int32_t (*iFpli_t)(void*, intptr_t, int32_t); +typedef int32_t (*iFpll_t)(void*, intptr_t, intptr_t); +typedef int32_t (*iEpLi_t)(void*, uintptr_t, int32_t); +typedef int32_t (*iEpLu_t)(void*, uintptr_t, uint32_t); +typedef int32_t (*iEpLp_t)(void*, uintptr_t, void*); +typedef int32_t (*iFpLp_t)(void*, uintptr_t, void*); +typedef int32_t (*iEppi_t)(void*, void*, int32_t); +typedef int32_t (*iFppi_t)(void*, void*, int32_t); +typedef int32_t (*iEppu_t)(void*, void*, uint32_t); +typedef int32_t (*iFppu_t)(void*, void*, uint32_t); +typedef int32_t (*iFppd_t)(void*, void*, double); +typedef int32_t (*iEppL_t)(void*, void*, uintptr_t); +typedef int32_t (*iFppL_t)(void*, void*, uintptr_t); +typedef int32_t (*iEppp_t)(void*, void*, void*); +typedef int32_t (*iFppp_t)(void*, void*, void*); +typedef int32_t (*iEppa_t)(void*, void*, void*); +typedef int32_t (*iEpOu_t)(void*, int32_t, uint32_t); +typedef int32_t (*iEhip_t)(uintptr_t, int32_t, void*); +typedef int32_t (*iEhpL_t)(uintptr_t, void*, uintptr_t); +typedef int32_t (*iEhpp_t)(uintptr_t, void*, void*); +typedef int32_t (*iESIi_t)(void*, int64_t, int32_t); +typedef int32_t (*iESli_t)(void*, intptr_t, int32_t); +typedef int32_t (*iFXii_t)(void*, int32_t, int32_t); +typedef int32_t (*iFXiL_t)(void*, int32_t, uintptr_t); +typedef int32_t (*iFXip_t)(void*, int32_t, void*); +typedef int32_t (*iFXuu_t)(void*, uint32_t, uint32_t); +typedef int32_t (*iFXup_t)(void*, uint32_t, void*); +typedef int32_t (*iFXLi_t)(void*, uintptr_t, int32_t); +typedef int32_t (*iFXLu_t)(void*, uintptr_t, uint32_t); +typedef int32_t (*iFXLf_t)(void*, uintptr_t, float); +typedef int32_t (*iFXLl_t)(void*, uintptr_t, intptr_t); +typedef int32_t (*iFXLL_t)(void*, uintptr_t, uintptr_t); +typedef int32_t (*iFXLp_t)(void*, uintptr_t, void*); +typedef int32_t (*iFXpi_t)(void*, void*, int32_t); +typedef int32_t (*iFXpu_t)(void*, void*, uint32_t); +typedef int32_t (*iFXpl_t)(void*, void*, intptr_t); +typedef int32_t (*iFXpL_t)(void*, void*, uintptr_t); +typedef int32_t (*iFXpp_t)(void*, void*, void*); +typedef int64_t (*IEiIi_t)(int32_t, int64_t, int32_t); +typedef int64_t (*IFpIi_t)(void*, int64_t, int32_t); +typedef uint8_t (*CFipp_t)(int32_t, void*, void*); +typedef uint8_t (*CFuUu_t)(uint32_t, uint64_t, uint32_t); +typedef uint8_t (*CFuff_t)(uint32_t, float, float); +typedef uint16_t (*WFXip_t)(void*, int32_t, void*); +typedef uint32_t (*uFEpu_t)(x64emu_t*, void*, uint32_t); +typedef uint32_t (*uFEpL_t)(x64emu_t*, void*, uintptr_t); +typedef uint32_t (*uFilp_t)(int32_t, intptr_t, void*); +typedef uint32_t (*uFipu_t)(int32_t, void*, uint32_t); +typedef uint32_t (*uFuuu_t)(uint32_t, uint32_t, uint32_t); +typedef uint32_t (*uFuup_t)(uint32_t, uint32_t, void*); +typedef uint32_t (*uFupp_t)(uint32_t, void*, void*); +typedef uint32_t (*uFpii_t)(void*, int32_t, int32_t); +typedef uint32_t (*uFpuU_t)(void*, uint32_t, uint64_t); +typedef uint32_t (*uEpup_t)(void*, uint32_t, void*); +typedef uint32_t (*uFpup_t)(void*, uint32_t, void*); +typedef uint32_t (*uFppu_t)(void*, void*, uint32_t); +typedef uint32_t (*uFppp_t)(void*, void*, void*); +typedef uint32_t (*uFXuu_t)(void*, uint32_t, uint32_t); +typedef float (*fFuii_t)(uint32_t, int32_t, int32_t); +typedef float (*fEfff_t)(float, float, float); +typedef float (*fEffp_t)(float, float, void*); +typedef double (*dEddd_t)(double, double, double); +typedef double (*dEddp_t)(double, double, void*); +typedef intptr_t (*lEili_t)(int32_t, intptr_t, int32_t); +typedef intptr_t (*lEipL_t)(int32_t, void*, uintptr_t); +typedef intptr_t (*lFlll_t)(intptr_t, intptr_t, intptr_t); +typedef intptr_t (*lElpi_t)(intptr_t, void*, int32_t); +typedef intptr_t (*lFpLL_t)(void*, uintptr_t, uintptr_t); +typedef intptr_t (*lFppi_t)(void*, void*, int32_t); +typedef intptr_t (*lFppL_t)(void*, void*, uintptr_t); +typedef uintptr_t (*LFEpi_t)(x64emu_t*, void*, int32_t); +typedef uintptr_t (*LFEpp_t)(x64emu_t*, void*, void*); +typedef uintptr_t (*LFpii_t)(void*, int32_t, int32_t); +typedef uintptr_t (*LEpip_t)(void*, int32_t, void*); +typedef uintptr_t (*LFppi_t)(void*, void*, int32_t); +typedef uintptr_t (*LEppL_t)(void*, void*, uintptr_t); +typedef uintptr_t (*LFppL_t)(void*, void*, uintptr_t); +typedef uintptr_t (*LFXip_t)(void*, int32_t, void*); +typedef uintptr_t (*LFXCi_t)(void*, uint8_t, int32_t); +typedef uintptr_t (*LFXLi_t)(void*, uintptr_t, int32_t); +typedef uintptr_t (*LFXLC_t)(void*, uintptr_t, uint8_t); +typedef uintptr_t (*LFXpi_t)(void*, void*, int32_t); +typedef uintptr_t (*LFXpp_t)(void*, void*, void*); +typedef void* (*pEEip_t)(x64emu_t*, int32_t, void*); +typedef void* (*pFEiV_t)(x64emu_t*, int32_t, void*); +typedef void* (*pEEpi_t)(x64emu_t*, void*, int32_t); +typedef void* (*pFEpi_t)(x64emu_t*, void*, int32_t); +typedef void* (*pEEpp_t)(x64emu_t*, void*, void*); +typedef void* (*pFEpp_t)(x64emu_t*, void*, void*); +typedef void* (*pFEpV_t)(x64emu_t*, void*, void*); +typedef void* (*pFEpX_t)(x64emu_t*, void*, void*); +typedef void* (*pFEXi_t)(x64emu_t*, void*, int32_t); +typedef void* (*pFEXL_t)(x64emu_t*, void*, uintptr_t); +typedef void* (*pFEXp_t)(x64emu_t*, void*, void*); +typedef void* (*pEipi_t)(int32_t, void*, int32_t); +typedef void* (*pEipL_t)(int32_t, void*, uintptr_t); +typedef void* (*pFipp_t)(int32_t, void*, void*); +typedef void* (*pFulu_t)(uint32_t, intptr_t, uint32_t); +typedef void* (*pFupi_t)(uint32_t, void*, int32_t); +typedef void* (*pFupp_t)(uint32_t, void*, void*); +typedef void* (*pFLpi_t)(uintptr_t, void*, int32_t); +typedef void* (*pFpcU_t)(void*, int8_t, uint64_t); +typedef void* (*pEpii_t)(void*, int32_t, int32_t); +typedef void* (*pFpii_t)(void*, int32_t, int32_t); +typedef void* (*pFpiu_t)(void*, int32_t, uint32_t); +typedef void* (*pEpiL_t)(void*, int32_t, uintptr_t); +typedef void* (*pFpiL_t)(void*, int32_t, uintptr_t); +typedef void* (*pFpip_t)(void*, int32_t, void*); +typedef void* (*pEpiS_t)(void*, int32_t, void*); +typedef void* (*pEpII_t)(void*, int64_t, int64_t); +typedef void* (*pFpuu_t)(void*, uint32_t, uint32_t); +typedef void* (*pFpup_t)(void*, uint32_t, void*); +typedef void* (*pEpLL_t)(void*, uintptr_t, uintptr_t); +typedef void* (*pEppi_t)(void*, void*, int32_t); +typedef void* (*pFppu_t)(void*, void*, uint32_t); +typedef void* (*pEppL_t)(void*, void*, uintptr_t); +typedef void* (*pFppL_t)(void*, void*, uintptr_t); +typedef void* (*pFppp_t)(void*, void*, void*); +typedef void* (*pEpOM_t)(void*, int32_t, ...); +typedef void* (*pFXii_t)(void*, int32_t, int32_t); +typedef void* (*pFXip_t)(void*, int32_t, void*); +typedef void* (*pFXLp_t)(void*, uintptr_t, void*); +typedef void* (*pFXpi_t)(void*, void*, int32_t); +typedef void* (*pFXpp_t)(void*, void*, void*); +typedef void* (*aEipa_t)(int32_t, void*, void*); +typedef void* (*SEEpp_t)(x64emu_t*, void*, void*); +typedef void* (*SEppS_t)(void*, void*, void*); +typedef char* (*tEipu_t)(int32_t, void*, uint32_t); +typedef void (*vFibp_i_t)(int32_t, struct_p_t*, int32_t); +typedef void (*vFuibp__t)(uint32_t, int32_t, struct_p_t*); +typedef void (*vFuuBp__t)(uint32_t, uint32_t, struct_p_t*); +typedef void (*vFuubp__t)(uint32_t, uint32_t, struct_p_t*); +typedef void (*vFpbp_i_t)(void*, struct_p_t*, int32_t); +typedef void (*vFbp_pp_t)(struct_p_t*, void*, void*); +typedef void (*vFXLbL__t)(void*, uintptr_t, struct_L_t*); +typedef void (*vFXbL_i_t)(void*, struct_L_t*, int32_t); +typedef int32_t (*iFpibl__t)(void*, int32_t, struct_l_t*); +typedef int32_t (*iFplbl__t)(void*, intptr_t, struct_l_t*); +typedef int32_t (*iEppBp__t)(void*, void*, struct_p_t*); +typedef int32_t (*iFppbp__t)(void*, void*, struct_p_t*); +typedef int32_t (*iFppbL__t)(void*, void*, struct_L_t*); +typedef int32_t (*iFpbp_i_t)(void*, struct_p_t*, int32_t); +typedef int32_t (*iFpbL_p_t)(void*, struct_L_t*, void*); +typedef int32_t (*iEBp_LL_t)(struct_p_t*, uintptr_t, uintptr_t); +typedef int32_t (*iFbp_pi_t)(struct_p_t*, void*, int32_t); +typedef int32_t (*iFbp_pI_t)(struct_p_t*, void*, int64_t); +typedef int32_t (*iFbp_pu_t)(struct_p_t*, void*, uint32_t); +typedef int32_t (*iFbp_pd_t)(struct_p_t*, void*, double); +typedef int32_t (*iFbp_pl_t)(struct_p_t*, void*, intptr_t); +typedef int32_t (*iFbp_pp_t)(struct_p_t*, void*, void*); +typedef int32_t (*iFbp_Si_t)(struct_p_t*, void*, int32_t); +typedef int32_t (*iFXibL__t)(void*, int32_t, struct_L_t*); +typedef int32_t (*iFXLbp__t)(void*, uintptr_t, struct_p_t*); +typedef int32_t (*iFXLbL__t)(void*, uintptr_t, struct_L_t*); +typedef int32_t (*iFXbL_i_t)(void*, struct_L_t*, int32_t); +typedef int32_t (*iFXbp_i_t)(void*, struct_p_t*, int32_t); +typedef int32_t (*iFXBL_p_t)(void*, struct_L_t*, void*); +typedef int32_t (*iFXbp_p_t)(void*, struct_p_t*, void*); +typedef int32_t (*iFXbL_p_t)(void*, struct_L_t*, void*); +typedef int64_t (*IEpBp_i_t)(void*, struct_p_t*, int32_t); +typedef uint64_t (*UEpBp_i_t)(void*, struct_p_t*, int32_t); +typedef float (*fEpBp_p_t)(void*, struct_p_t*, void*); +typedef float (*fEpBp_a_t)(void*, struct_p_t*, void*); +typedef double (*dEpBp_i_t)(void*, struct_p_t*, int32_t); +typedef double (*dEpBp_a_t)(void*, struct_p_t*, void*); +typedef intptr_t (*lEpBp_i_t)(void*, struct_p_t*, int32_t); +typedef intptr_t (*lFpbp_L_t)(void*, struct_p_t*, uintptr_t); +typedef uintptr_t (*LEpBp_i_t)(void*, struct_p_t*, int32_t); +typedef void* (*pEppbp__t)(void*, void*, struct_p_t*); +typedef void* (*pEppBp__t)(void*, void*, struct_p_t*); +typedef void* (*pFppbp__t)(void*, void*, struct_p_t*); +typedef void* (*pFXLbL__t)(void*, uintptr_t, struct_L_t*); +typedef int32_t (*iFXLbpp__t)(void*, uintptr_t, struct_pp_t*); +typedef int32_t (*iFXbLC_i_t)(void*, struct_LC_t*, int32_t); +typedef void (*vFLbL_bL__t)(uintptr_t, struct_L_t*, struct_L_t*); +typedef int32_t (*iFpbl_bl__t)(void*, struct_l_t*, struct_l_t*); +typedef int32_t (*iFpbL_bL__t)(void*, struct_L_t*, struct_L_t*); +typedef int32_t (*iFbp_bp_p_t)(struct_p_t*, struct_p_t*, void*); +typedef int32_t (*iFXbiip_i_t)(void*, struct_iip_t*, int32_t); +typedef int32_t (*iFXbLip_L_t)(void*, struct_Lip_t*, uintptr_t); +typedef void (*vFXLbpLiL__t)(void*, uintptr_t, struct_pLiL_t*); +typedef void (*vFXLrpLiL__t)(void*, uintptr_t, struct_pLiL_t*); +typedef int32_t (*iFXLbpLiL__t)(void*, uintptr_t, struct_pLiL_t*); +typedef int32_t (*iFXLbLLii__t)(void*, uintptr_t, struct_LLii_t*); +typedef void* (*pFXrLiiuL_p_t)(void*, struct_LiiuL_t*, void*); +typedef int32_t (*iFXLbLWWWcc__t)(void*, uintptr_t, struct_LWWWcc_t*); +typedef int32_t (*iEirLLLL_BLLLL__t)(int32_t, struct_LLLL_t*, struct_LLLL_t*); +typedef void* (*pEppriiiiiiiiilt__t)(void*, void*, struct_iiiiiiiiilt_t*); +typedef void (*vEEipp_t)(x64emu_t*, int32_t, void*, void*); +typedef void (*vFEipp_t)(x64emu_t*, int32_t, void*, void*); +typedef void (*vEEipV_t)(x64emu_t*, int32_t, void*, void*); +typedef void (*vEEpup_t)(x64emu_t*, void*, uint32_t, void*); +typedef void (*vFEpup_t)(x64emu_t*, void*, uint32_t, void*); +typedef void (*vFEpll_t)(x64emu_t*, void*, intptr_t, intptr_t); +typedef void (*vEEppp_t)(x64emu_t*, void*, void*, void*); +typedef void (*vFEppp_t)(x64emu_t*, void*, void*, void*); +typedef void (*vFEXLp_t)(x64emu_t*, void*, uintptr_t, void*); +typedef void (*vFcccc_t)(int8_t, int8_t, int8_t, int8_t); +typedef void (*vFwwww_t)(int16_t, int16_t, int16_t, int16_t); +typedef void (*vFiiii_t)(int32_t, int32_t, int32_t, int32_t); +typedef void (*vFiiip_t)(int32_t, int32_t, int32_t, void*); +typedef void (*vFiiCp_t)(int32_t, int32_t, uint8_t, void*); +typedef void (*vFiill_t)(int32_t, int32_t, intptr_t, intptr_t); +typedef void (*vFiIII_t)(int32_t, int64_t, int64_t, int64_t); +typedef void (*vFiuip_t)(int32_t, uint32_t, int32_t, void*); +typedef void (*vFiuuu_t)(int32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFiulp_t)(int32_t, uint32_t, intptr_t, void*); +typedef void (*vFiupV_t)(int32_t, uint32_t, void*, void*); +typedef void (*vFiUUU_t)(int32_t, uint64_t, uint64_t, uint64_t); +typedef void (*vFifff_t)(int32_t, float, float, float); +typedef void (*vFiddd_t)(int32_t, double, double, double); +typedef void (*vFilip_t)(int32_t, intptr_t, int32_t, void*); +typedef void (*vFilpu_t)(int32_t, intptr_t, void*, uint32_t); +typedef void (*vFilpp_t)(int32_t, intptr_t, void*, void*); +typedef void (*vFipup_t)(int32_t, void*, uint32_t, void*); +typedef void (*vFipll_t)(int32_t, void*, intptr_t, intptr_t); +typedef void (*vFippp_t)(int32_t, void*, void*, void*); +typedef void (*vFCCCC_t)(uint8_t, uint8_t, uint8_t, uint8_t); +typedef void (*vFWWWW_t)(uint16_t, uint16_t, uint16_t, uint16_t); +typedef void (*vFuccc_t)(uint32_t, int8_t, int8_t, int8_t); +typedef void (*vFuwww_t)(uint32_t, int16_t, int16_t, int16_t); +typedef void (*vFuiii_t)(uint32_t, int32_t, int32_t, int32_t); +typedef void (*vFuiip_t)(uint32_t, int32_t, int32_t, void*); +typedef void (*vFuiII_t)(uint32_t, int32_t, int64_t, int64_t); +typedef void (*vFuiui_t)(uint32_t, int32_t, uint32_t, int32_t); +typedef void (*vFuiuC_t)(uint32_t, int32_t, uint32_t, uint8_t); +typedef void (*vFuiuu_t)(uint32_t, int32_t, uint32_t, uint32_t); +typedef void (*vFuiup_t)(uint32_t, int32_t, uint32_t, void*); +typedef void (*vFuiUU_t)(uint32_t, int32_t, uint64_t, uint64_t); +typedef void (*vFuifi_t)(uint32_t, int32_t, float, int32_t); +typedef void (*vFuiff_t)(uint32_t, int32_t, float, float); +typedef void (*vFuidd_t)(uint32_t, int32_t, double, double); +typedef void (*vFuilp_t)(uint32_t, int32_t, intptr_t, void*); +typedef void (*vFuipu_t)(uint32_t, int32_t, void*, uint32_t); +typedef void (*vFuipp_t)(uint32_t, int32_t, void*, void*); +typedef void (*vFuIII_t)(uint32_t, int64_t, int64_t, int64_t); +typedef void (*vFuWWW_t)(uint32_t, uint16_t, uint16_t, uint16_t); +typedef void (*vFuuii_t)(uint32_t, uint32_t, int32_t, int32_t); +typedef void (*vFuuiu_t)(uint32_t, uint32_t, int32_t, uint32_t); +typedef void (*vFuuil_t)(uint32_t, uint32_t, int32_t, intptr_t); +typedef void (*vFuuip_t)(uint32_t, uint32_t, int32_t, void*); +typedef void (*vFuuCu_t)(uint32_t, uint32_t, uint8_t, uint32_t); +typedef void (*vFuuCp_t)(uint32_t, uint32_t, uint8_t, void*); +typedef void (*vFuuui_t)(uint32_t, uint32_t, uint32_t, int32_t); +typedef void (*vFuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuuuf_t)(uint32_t, uint32_t, uint32_t, float); +typedef void (*vFuuud_t)(uint32_t, uint32_t, uint32_t, double); +typedef void (*vFuuul_t)(uint32_t, uint32_t, uint32_t, intptr_t); +typedef void (*vFuuup_t)(uint32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuUl_t)(uint32_t, uint32_t, uint64_t, intptr_t); +typedef void (*vFuuff_t)(uint32_t, uint32_t, float, float); +typedef void (*vFuuli_t)(uint32_t, uint32_t, intptr_t, int32_t); +typedef void (*vFuupi_t)(uint32_t, uint32_t, void*, int32_t); +typedef void (*vFuupp_t)(uint32_t, uint32_t, void*, void*); +typedef void (*vFuUui_t)(uint32_t, uint64_t, uint32_t, int32_t); +typedef void (*vFuUup_t)(uint32_t, uint64_t, uint32_t, void*); +typedef void (*vFuUUU_t)(uint32_t, uint64_t, uint64_t, uint64_t); +typedef void (*vFufff_t)(uint32_t, float, float, float); +typedef void (*vFuddd_t)(uint32_t, double, double, double); +typedef void (*vFuluU_t)(uint32_t, intptr_t, uint32_t, uint64_t); +typedef void (*vFullC_t)(uint32_t, intptr_t, intptr_t, uint8_t); +typedef void (*vFullp_t)(uint32_t, intptr_t, intptr_t, void*); +typedef void (*vFulpu_t)(uint32_t, intptr_t, void*, uint32_t); +typedef void (*vFulpp_t)(uint32_t, intptr_t, void*, void*); +typedef void (*vFupii_t)(uint32_t, void*, int32_t, int32_t); +typedef void (*vFuppi_t)(uint32_t, void*, void*, int32_t); +typedef void (*vFuppu_t)(uint32_t, void*, void*, uint32_t); +typedef void (*vFUUpi_t)(uint64_t, uint64_t, void*, int32_t); +typedef void (*vFffff_t)(float, float, float, float); +typedef void (*vFdddd_t)(double, double, double, double); +typedef void (*vFllii_t)(intptr_t, intptr_t, int32_t, int32_t); +typedef void (*vFLiii_t)(uintptr_t, int32_t, int32_t, int32_t); +typedef void (*vFpiip_t)(void*, int32_t, int32_t, void*); +typedef void (*vFpipi_t)(void*, int32_t, void*, int32_t); +typedef void (*vFpipp_t)(void*, int32_t, void*, void*); +typedef void (*vFpdii_t)(void*, double, int32_t, int32_t); +typedef void (*vFpddd_t)(void*, double, double, double); +typedef void (*vFplpp_t)(void*, intptr_t, void*, void*); +typedef void (*vEppip_t)(void*, void*, int32_t, void*); +typedef void (*vFppui_t)(void*, void*, uint32_t, int32_t); +typedef void (*vFpppp_t)(void*, void*, void*, void*); +typedef void (*vFXiiL_t)(void*, int32_t, int32_t, uintptr_t); +typedef void (*vFXiLu_t)(void*, int32_t, uintptr_t, uint32_t); +typedef void (*vFXLii_t)(void*, uintptr_t, int32_t, int32_t); +typedef void (*vFXLip_t)(void*, uintptr_t, int32_t, void*); +typedef void (*vFXLLL_t)(void*, uintptr_t, uintptr_t, uintptr_t); +typedef void (*vFXLLp_t)(void*, uintptr_t, uintptr_t, void*); +typedef void (*vFXLpi_t)(void*, uintptr_t, void*, int32_t); +typedef void (*vFXLpL_t)(void*, uintptr_t, void*, uintptr_t); +typedef void (*vFXpip_t)(void*, void*, int32_t, void*); +typedef void (*vFXppL_t)(void*, void*, void*, uintptr_t); +typedef int8_t (*cFpiii_t)(void*, int32_t, int32_t, int32_t); +typedef int32_t (*iEEiip_t)(x64emu_t*, int32_t, int32_t, void*); +typedef int32_t (*iEEiiN_t)(x64emu_t*, int32_t, int32_t, ...); +typedef int32_t (*iEEipp_t)(x64emu_t*, int32_t, void*, void*); +typedef int32_t (*iFEipp_t)(x64emu_t*, int32_t, void*, void*); +typedef int32_t (*iEEipV_t)(x64emu_t*, int32_t, void*, void*); +typedef int32_t (*iEEpii_t)(x64emu_t*, void*, int32_t, int32_t); +typedef int32_t (*iEEpip_t)(x64emu_t*, void*, int32_t, void*); +typedef int32_t (*iFEpip_t)(x64emu_t*, void*, int32_t, void*); +typedef int32_t (*iFEpui_t)(x64emu_t*, void*, uint32_t, int32_t); +typedef int32_t (*iFEpuu_t)(x64emu_t*, void*, uint32_t, uint32_t); +typedef int32_t (*iEEpup_t)(x64emu_t*, void*, uint32_t, void*); +typedef int32_t (*iEEpLi_t)(x64emu_t*, void*, uintptr_t, int32_t); +typedef int32_t (*iFEpLi_t)(x64emu_t*, void*, uintptr_t, int32_t); +typedef int32_t (*iEEppi_t)(x64emu_t*, void*, void*, int32_t); +typedef int32_t (*iFEppu_t)(x64emu_t*, void*, void*, uint32_t); +typedef int32_t (*iEEppL_t)(x64emu_t*, void*, void*, uintptr_t); +typedef int32_t (*iEEppp_t)(x64emu_t*, void*, void*, void*); +typedef int32_t (*iFEppp_t)(x64emu_t*, void*, void*, void*); +typedef int32_t (*iEEppV_t)(x64emu_t*, void*, void*, void*); +typedef int32_t (*iFEppV_t)(x64emu_t*, void*, void*, void*); +typedef int32_t (*iEEpON_t)(x64emu_t*, void*, int32_t, ...); +typedef int32_t (*iEEhup_t)(x64emu_t*, uintptr_t, uint32_t, void*); +typedef int32_t (*iEESpp_t)(x64emu_t*, void*, void*, void*); +typedef int32_t (*iEESpV_t)(x64emu_t*, void*, void*, void*); +typedef int32_t (*iFEXip_t)(x64emu_t*, void*, int32_t, void*); +typedef int32_t (*iFEXlp_t)(x64emu_t*, void*, intptr_t, void*); +typedef int32_t (*iFEXLp_t)(x64emu_t*, void*, uintptr_t, void*); +typedef int32_t (*iFEXpp_t)(x64emu_t*, void*, void*, void*); +typedef int32_t (*iFiiii_t)(int32_t, int32_t, int32_t, int32_t); +typedef int32_t (*iFiiiu_t)(int32_t, int32_t, int32_t, uint32_t); +typedef int32_t (*iEiiip_t)(int32_t, int32_t, int32_t, void*); +typedef int32_t (*iEiiiN_t)(int32_t, int32_t, int32_t, ...); +typedef int32_t (*iEiiII_t)(int32_t, int32_t, int64_t, int64_t); +typedef int32_t (*iEiIIi_t)(int32_t, int64_t, int64_t, int32_t); +typedef int32_t (*iEilli_t)(int32_t, intptr_t, intptr_t, int32_t); +typedef int32_t (*iEipii_t)(int32_t, void*, int32_t, int32_t); +typedef int32_t (*iEipip_t)(int32_t, void*, int32_t, void*); +typedef int32_t (*iEipui_t)(int32_t, void*, uint32_t, int32_t); +typedef int32_t (*iEipup_t)(int32_t, void*, uint32_t, void*); +typedef int32_t (*iEippi_t)(int32_t, void*, void*, int32_t); +typedef int32_t (*iEippL_t)(int32_t, void*, void*, uintptr_t); +typedef int32_t (*iFippp_t)(int32_t, void*, void*, void*); +typedef int32_t (*iEipON_t)(int32_t, void*, int32_t, ...); +typedef int32_t (*iFuiup_t)(uint32_t, int32_t, uint32_t, void*); +typedef int32_t (*iEuupi_t)(uint32_t, uint32_t, void*, int32_t); +typedef int32_t (*iFuppp_t)(uint32_t, void*, void*, void*); +typedef int32_t (*iFpiii_t)(void*, int32_t, int32_t, int32_t); +typedef int32_t (*iFpiiL_t)(void*, int32_t, int32_t, uintptr_t); +typedef int32_t (*iFpiip_t)(void*, int32_t, int32_t, void*); +typedef int32_t (*iFpiuu_t)(void*, int32_t, uint32_t, uint32_t); +typedef int32_t (*iFpili_t)(void*, int32_t, intptr_t, int32_t); +typedef int32_t (*iEpipp_t)(void*, int32_t, void*, void*); +typedef int32_t (*iFpipp_t)(void*, int32_t, void*, void*); +typedef int32_t (*iFpCCC_t)(void*, uint8_t, uint8_t, uint8_t); +typedef int32_t (*iFpWWu_t)(void*, uint16_t, uint16_t, uint32_t); +typedef int32_t (*iFpuLp_t)(void*, uint32_t, uintptr_t, void*); +typedef int32_t (*iFpupi_t)(void*, uint32_t, void*, int32_t); +typedef int32_t (*iFpupp_t)(void*, uint32_t, void*, void*); +typedef int32_t (*iFppii_t)(void*, void*, int32_t, int32_t); +typedef int32_t (*iFppiU_t)(void*, void*, int32_t, uint64_t); +typedef int32_t (*iFppip_t)(void*, void*, int32_t, void*); +typedef int32_t (*iFppuw_t)(void*, void*, uint32_t, int16_t); +typedef int32_t (*iFppui_t)(void*, void*, uint32_t, int32_t); +typedef int32_t (*iFppuu_t)(void*, void*, uint32_t, uint32_t); +typedef int32_t (*iFppup_t)(void*, void*, uint32_t, void*); +typedef int32_t (*iFppLi_t)(void*, void*, uintptr_t, int32_t); +typedef int32_t (*iFpppi_t)(void*, void*, void*, int32_t); +typedef int32_t (*iFpppu_t)(void*, void*, void*, uint32_t); +typedef int32_t (*iEpppL_t)(void*, void*, void*, uintptr_t); +typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); +typedef int32_t (*iESpiL_t)(void*, void*, int32_t, uintptr_t); +typedef int32_t (*iFXiii_t)(void*, int32_t, int32_t, int32_t); +typedef int32_t (*iFXiiL_t)(void*, int32_t, int32_t, uintptr_t); +typedef int32_t (*iFXiip_t)(void*, int32_t, int32_t, void*); +typedef int32_t (*iFXiuL_t)(void*, int32_t, uint32_t, uintptr_t); +typedef int32_t (*iFXiLL_t)(void*, int32_t, uintptr_t, uintptr_t); +typedef int32_t (*iFXipi_t)(void*, int32_t, void*, int32_t); +typedef int32_t (*iFXipp_t)(void*, int32_t, void*, void*); +typedef int32_t (*iFXWWW_t)(void*, uint16_t, uint16_t, uint16_t); +typedef int32_t (*iFXuuu_t)(void*, uint32_t, uint32_t, uint32_t); +typedef int32_t (*iFXuuL_t)(void*, uint32_t, uint32_t, uintptr_t); +typedef int32_t (*iFXuup_t)(void*, uint32_t, uint32_t, void*); +typedef int32_t (*iFXuLL_t)(void*, uint32_t, uintptr_t, uintptr_t); +typedef int32_t (*iFXupp_t)(void*, uint32_t, void*, void*); +typedef int32_t (*iFXLii_t)(void*, uintptr_t, int32_t, int32_t); +typedef int32_t (*iFXLiL_t)(void*, uintptr_t, int32_t, uintptr_t); +typedef int32_t (*iFXLip_t)(void*, uintptr_t, int32_t, void*); +typedef int32_t (*iFXLuu_t)(void*, uintptr_t, uint32_t, uint32_t); +typedef int32_t (*iFXLLL_t)(void*, uintptr_t, uintptr_t, uintptr_t); +typedef int32_t (*iFXLLp_t)(void*, uintptr_t, uintptr_t, void*); +typedef int32_t (*iFXLpi_t)(void*, uintptr_t, void*, int32_t); +typedef int32_t (*iFXpii_t)(void*, void*, int32_t, int32_t); +typedef int32_t (*iFXpip_t)(void*, void*, int32_t, void*); +typedef int32_t (*iFXpLp_t)(void*, void*, uintptr_t, void*); +typedef int32_t (*iFXppi_t)(void*, void*, void*, int32_t); +typedef int32_t (*iFXppp_t)(void*, void*, void*, void*); +typedef int64_t (*IFEpIi_t)(x64emu_t*, void*, int64_t, int32_t); +typedef uint8_t (*CFuuff_t)(uint32_t, uint32_t, float, float); +typedef uint32_t (*uFEuip_t)(x64emu_t*, uint32_t, int32_t, void*); +typedef uint32_t (*uFEpii_t)(x64emu_t*, void*, int32_t, int32_t); +typedef uint32_t (*uFuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t); +typedef uint32_t (*uFpCCC_t)(void*, uint8_t, uint8_t, uint8_t); +typedef uint32_t (*uFppip_t)(void*, void*, int32_t, void*); +typedef uint32_t (*uFpppi_t)(void*, void*, void*, int32_t); +typedef intptr_t (*lEEipi_t)(x64emu_t*, int32_t, void*, int32_t); +typedef intptr_t (*lEEppL_t)(x64emu_t*, void*, void*, uintptr_t); +typedef intptr_t (*lEiipL_t)(int32_t, int32_t, void*, uintptr_t); +typedef intptr_t (*lEipLi_t)(int32_t, void*, uintptr_t, int32_t); +typedef intptr_t (*lEipLI_t)(int32_t, void*, uintptr_t, int64_t); +typedef intptr_t (*lEipLl_t)(int32_t, void*, uintptr_t, intptr_t); +typedef intptr_t (*lEipLL_t)(int32_t, void*, uintptr_t, uintptr_t); +typedef intptr_t (*lFpuip_t)(void*, uint32_t, int32_t, void*); +typedef uintptr_t (*LFEpLp_t)(x64emu_t*, void*, uintptr_t, void*); +typedef uintptr_t (*LFEXii_t)(x64emu_t*, void*, int32_t, int32_t); +typedef uintptr_t (*LEpLLS_t)(void*, uintptr_t, uintptr_t, void*); +typedef uintptr_t (*LEppLp_t)(void*, void*, uintptr_t, void*); +typedef uintptr_t (*LEppLa_t)(void*, void*, uintptr_t, void*); +typedef uintptr_t (*LFXCii_t)(void*, uint8_t, int32_t, int32_t); +typedef uintptr_t (*LFXLuu_t)(void*, uintptr_t, uint32_t, uint32_t); +typedef uintptr_t (*LFXpLp_t)(void*, void*, uintptr_t, void*); +typedef void* (*pFEupp_t)(x64emu_t*, uint32_t, void*, void*); +typedef void* (*pFEpip_t)(x64emu_t*, void*, int32_t, void*); +typedef void* (*pEEppi_t)(x64emu_t*, void*, void*, int32_t); +typedef void* (*pFEppi_t)(x64emu_t*, void*, void*, int32_t); +typedef void* (*pEEppp_t)(x64emu_t*, void*, void*, void*); +typedef void* (*pFEppp_t)(x64emu_t*, void*, void*, void*); +typedef void* (*pFEXip_t)(x64emu_t*, void*, int32_t, void*); +typedef void* (*pFEXLL_t)(x64emu_t*, void*, uintptr_t, uintptr_t); +typedef void* (*pFEXLp_t)(x64emu_t*, void*, uintptr_t, void*); +typedef void* (*pFEXpL_t)(x64emu_t*, void*, void*, uintptr_t); +typedef void* (*pFEXpp_t)(x64emu_t*, void*, void*, void*); +typedef void* (*pFiiiu_t)(int32_t, int32_t, int32_t, uint32_t); +typedef void* (*pFifff_t)(int32_t, float, float, float); +typedef void* (*pFillu_t)(int32_t, intptr_t, intptr_t, uint32_t); +typedef void* (*pEippu_t)(int32_t, void*, void*, uint32_t); +typedef void* (*pFullu_t)(uint32_t, intptr_t, intptr_t, uint32_t); +typedef void* (*pEpiLL_t)(void*, int32_t, uintptr_t, uintptr_t); +typedef void* (*pFpuii_t)(void*, uint32_t, int32_t, int32_t); +typedef void* (*pFpupp_t)(void*, uint32_t, void*, void*); +typedef void* (*pEpLiS_t)(void*, uintptr_t, int32_t, void*); +typedef void* (*pEpLpL_t)(void*, uintptr_t, void*, uintptr_t); +typedef void* (*pEppLL_t)(void*, void*, uintptr_t, uintptr_t); +typedef void* (*pFpppL_t)(void*, void*, void*, uintptr_t); +typedef void* (*pFpppp_t)(void*, void*, void*, void*); +typedef void* (*pFXiii_t)(void*, int32_t, int32_t, int32_t); +typedef void* (*pFXiip_t)(void*, int32_t, int32_t, void*); +typedef void* (*pFXCip_t)(void*, uint8_t, int32_t, void*); +typedef void* (*pFXLpp_t)(void*, uintptr_t, void*, void*); +typedef void* (*pFXppp_t)(void*, void*, void*, void*); +typedef void (*vFuibp_i_t)(uint32_t, int32_t, struct_p_t*, int32_t); +typedef void (*vFuuuBp__t)(uint32_t, uint32_t, uint32_t, struct_p_t*); +typedef void (*vFbp_ppp_t)(struct_p_t*, void*, void*, void*); +typedef void (*vFXLLbL__t)(void*, uintptr_t, uintptr_t, struct_L_t*); +typedef int32_t (*iFplibl__t)(void*, intptr_t, int32_t, struct_l_t*); +typedef int32_t (*iFpppbp__t)(void*, void*, void*, struct_p_t*); +typedef int32_t (*iFppbL_p_t)(void*, void*, struct_L_t*, void*); +typedef int32_t (*iFbp_pii_t)(struct_p_t*, void*, int32_t, int32_t); +typedef int32_t (*iFbp_pip_t)(struct_p_t*, void*, int32_t, void*); +typedef int32_t (*iFBp_pui_t)(struct_p_t*, void*, uint32_t, int32_t); +typedef int32_t (*iFXLiBp__t)(void*, uintptr_t, int32_t, struct_p_t*); +typedef int32_t (*iFXLbp_i_t)(void*, uintptr_t, struct_p_t*, int32_t); +typedef int32_t (*iFXLbL_i_t)(void*, uintptr_t, struct_L_t*, int32_t); +typedef int32_t (*iFXLbp_p_t)(void*, uintptr_t, struct_p_t*, void*); +typedef int64_t (*IEpBp_ii_t)(void*, struct_p_t*, int32_t, int32_t); +typedef uint32_t (*uFppibp__t)(void*, void*, int32_t, struct_p_t*); +typedef uint64_t (*UEpBp_ii_t)(void*, struct_p_t*, int32_t, int32_t); +typedef intptr_t (*lEiibl_L_t)(int32_t, int32_t, struct_l_t*, uintptr_t); +typedef uintptr_t (*LEpbp_Lp_t)(void*, struct_p_t*, uintptr_t, void*); +typedef int32_t (*iEEpprLL__t)(x64emu_t*, void*, void*, struct_LL_t*); +typedef int32_t (*iEpurLL_p_t)(void*, uint32_t, struct_LL_t*, void*); +typedef int32_t (*iFppbL_bL__t)(void*, void*, struct_L_t*, struct_L_t*); +typedef int32_t (*iFrpuu_Lui_t)(struct_puu_t*, uintptr_t, uint32_t, int32_t); +typedef int32_t (*iFbp_bp_pi_t)(struct_p_t*, struct_p_t*, void*, int32_t); +typedef int32_t (*iFXbL_ibp__t)(void*, struct_L_t*, int32_t, struct_p_t*); +typedef void (*vFbp_ppbup__t)(struct_p_t*, void*, void*, struct_up_t*); +typedef void (*vFXLbpLiL_L_t)(void*, uintptr_t, struct_pLiL_t*, uintptr_t); +typedef int32_t (*iFXLbpLiL_L_t)(void*, uintptr_t, struct_pLiL_t*, uintptr_t); +typedef int32_t (*iEiirLL_BLL__t)(int32_t, int32_t, struct_LL_t*, struct_LL_t*); +typedef int32_t (*iEuirLL_BLL__t)(uint32_t, int32_t, struct_LL_t*, struct_LL_t*); +typedef int32_t (*iFXLpbLWWWcc__t)(void*, uintptr_t, void*, struct_LWWWcc_t*); +typedef int32_t (*iFXLbLWWWcc_i_t)(void*, uintptr_t, struct_LWWWcc_t*, int32_t); +typedef int32_t (*iFXLuriiiiiLi__t)(void*, uintptr_t, uint32_t, struct_iiiiiLi_t*); +typedef void (*vFXLbLLLLLLLLLL_L_t)(void*, uintptr_t, struct_LLLLLLLLLL_t*, uintptr_t); +typedef int32_t (*iFXLbLLLLLLLLLL_L_t)(void*, uintptr_t, struct_LLLLLLLLLL_t*, uintptr_t); +typedef uintptr_t (*LEpLpriiiiiiiiilt__t)(void*, uintptr_t, void*, struct_iiiiiiiiilt_t*); +typedef int32_t (*iFXipBWWWWWWWWWuip__t)(void*, int32_t, void*, struct_WWWWWWWWWuip_t*); +typedef int32_t (*iFXLbLWWWcc_bLWWWcc__t)(void*, uintptr_t, struct_LWWWcc_t*, struct_LWWWcc_t*); +typedef int32_t (*iFpruuipWCCp_buuipWCCp_i_t)(void*, struct_uuipWCCp_t*, struct_uuipWCCp_t*, int32_t); +typedef int32_t (*iFXpLriLLLiiiiiiiLLiiLiiiiLic__t)(void*, void*, uintptr_t, struct_iLLLiiiiiiiLLiiLiiiiLic_t*); +typedef int32_t (*iFXpLbiLLLiiiiiiiLLiiLiiiiLic__t)(void*, void*, uintptr_t, struct_iLLLiiiiiiiLLiiLiiiiLic_t*); +typedef void* (*pFXLLbiLLLiiiiiiiLLiiLiiiiLic__t)(void*, uintptr_t, uintptr_t, struct_iLLLiiiiiiiLLiiLiiiiLic_t*); +typedef void (*vEEiipp_t)(x64emu_t*, int32_t, int32_t, void*, void*); +typedef void (*vEEiipV_t)(x64emu_t*, int32_t, int32_t, void*, void*); +typedef void (*vFEuipu_t)(x64emu_t*, uint32_t, int32_t, void*, uint32_t); +typedef void (*vFEuipp_t)(x64emu_t*, uint32_t, int32_t, void*, void*); +typedef void (*vEEpLLp_t)(x64emu_t*, void*, uintptr_t, uintptr_t, void*); +typedef void (*vEEppiV_t)(x64emu_t*, void*, void*, int32_t, void*); +typedef void (*vFiiiii_t)(int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFiiiiu_t)(int32_t, int32_t, int32_t, int32_t, uint32_t); +typedef void (*vFiiuii_t)(int32_t, int32_t, uint32_t, int32_t, int32_t); +typedef void (*vFiiuup_t)(int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFiillu_t)(int32_t, int32_t, intptr_t, intptr_t, uint32_t); +typedef void (*vFiilll_t)(int32_t, int32_t, intptr_t, intptr_t, intptr_t); +typedef void (*vFiipll_t)(int32_t, int32_t, void*, intptr_t, intptr_t); +typedef void (*vFiIIII_t)(int32_t, int64_t, int64_t, int64_t, int64_t); +typedef void (*vFiuiip_t)(int32_t, uint32_t, int32_t, int32_t, void*); +typedef void (*vFiuuuu_t)(int32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFiulpp_t)(int32_t, uint32_t, intptr_t, void*, void*); +typedef void (*vFiUUUU_t)(int32_t, uint64_t, uint64_t, uint64_t, uint64_t); +typedef void (*vFiffff_t)(int32_t, float, float, float, float); +typedef void (*vFidddd_t)(int32_t, double, double, double, double); +typedef void (*vFilill_t)(int32_t, intptr_t, int32_t, intptr_t, intptr_t); +typedef void (*vFilipi_t)(int32_t, intptr_t, int32_t, void*, int32_t); +typedef void (*vFilipl_t)(int32_t, intptr_t, int32_t, void*, intptr_t); +typedef void (*vFipipu_t)(int32_t, void*, int32_t, void*, uint32_t); +typedef void (*vFipipp_t)(int32_t, void*, int32_t, void*, void*); +typedef void (*vFipupi_t)(int32_t, void*, uint32_t, void*, int32_t); +typedef void (*vFucccc_t)(uint32_t, int8_t, int8_t, int8_t, int8_t); +typedef void (*vFuwwww_t)(uint32_t, int16_t, int16_t, int16_t, int16_t); +typedef void (*vFuiiii_t)(uint32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuiiiu_t)(uint32_t, int32_t, int32_t, int32_t, uint32_t); +typedef void (*vFuiiip_t)(uint32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFuiiCp_t)(uint32_t, int32_t, int32_t, uint8_t, void*); +typedef void (*vFuiiup_t)(uint32_t, int32_t, int32_t, uint32_t, void*); +typedef void (*vFuiill_t)(uint32_t, int32_t, int32_t, intptr_t, intptr_t); +typedef void (*vFuiIII_t)(uint32_t, int32_t, int64_t, int64_t, int64_t); +typedef void (*vFuiuii_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t); +typedef void (*vFuiuip_t)(uint32_t, int32_t, uint32_t, int32_t, void*); +typedef void (*vFuiuCi_t)(uint32_t, int32_t, uint32_t, uint8_t, int32_t); +typedef void (*vFuiuCu_t)(uint32_t, int32_t, uint32_t, uint8_t, uint32_t); +typedef void (*vFuiuuu_t)(uint32_t, int32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuiuup_t)(uint32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuiupi_t)(uint32_t, int32_t, uint32_t, void*, int32_t); +typedef void (*vFuiUUU_t)(uint32_t, int32_t, uint64_t, uint64_t, uint64_t); +typedef void (*vFuifff_t)(uint32_t, int32_t, float, float, float); +typedef void (*vFuiddd_t)(uint32_t, int32_t, double, double, double); +typedef void (*vFuipii_t)(uint32_t, int32_t, void*, int32_t, int32_t); +typedef void (*vFuipip_t)(uint32_t, int32_t, void*, int32_t, void*); +typedef void (*vFuipup_t)(uint32_t, int32_t, void*, uint32_t, void*); +typedef void (*vFuippp_t)(uint32_t, int32_t, void*, void*, void*); +typedef void (*vFuIIII_t)(uint32_t, int64_t, int64_t, int64_t, int64_t); +typedef void (*vFuCCCC_t)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t); +typedef void (*vFuCuip_t)(uint32_t, uint8_t, uint32_t, int32_t, void*); +typedef void (*vFuCuup_t)(uint32_t, uint8_t, uint32_t, uint32_t, void*); +typedef void (*vFuWWWW_t)(uint32_t, uint16_t, uint16_t, uint16_t, uint16_t); +typedef void (*vFuuiii_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t); +typedef void (*vFuuiip_t)(uint32_t, uint32_t, int32_t, int32_t, void*); +typedef void (*vFuuiui_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t); +typedef void (*vFuuiuu_t)(uint32_t, uint32_t, int32_t, uint32_t, uint32_t); +typedef void (*vFuuiup_t)(uint32_t, uint32_t, int32_t, uint32_t, void*); +typedef void (*vFuuifi_t)(uint32_t, uint32_t, int32_t, float, int32_t); +typedef void (*vFuuipC_t)(uint32_t, uint32_t, int32_t, void*, uint8_t); +typedef void (*vFuuipu_t)(uint32_t, uint32_t, int32_t, void*, uint32_t); +typedef void (*vFuuipp_t)(uint32_t, uint32_t, int32_t, void*, void*); +typedef void (*vFuuuii_t)(uint32_t, uint32_t, uint32_t, int32_t, int32_t); +typedef void (*vFuuuiu_t)(uint32_t, uint32_t, uint32_t, int32_t, uint32_t); +typedef void (*vFuuuil_t)(uint32_t, uint32_t, uint32_t, int32_t, intptr_t); +typedef void (*vFuuuip_t)(uint32_t, uint32_t, uint32_t, int32_t, void*); +typedef void (*vFuuuui_t)(uint32_t, uint32_t, uint32_t, uint32_t, int32_t); +typedef void (*vFuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuuuup_t)(uint32_t, uint32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuuli_t)(uint32_t, uint32_t, uint32_t, intptr_t, int32_t); +typedef void (*vFuuull_t)(uint32_t, uint32_t, uint32_t, intptr_t, intptr_t); +typedef void (*vFuulll_t)(uint32_t, uint32_t, intptr_t, intptr_t, intptr_t); +typedef void (*vFuullp_t)(uint32_t, uint32_t, intptr_t, intptr_t, void*); +typedef void (*vFuupii_t)(uint32_t, uint32_t, void*, int32_t, int32_t); +typedef void (*vFuUUUU_t)(uint32_t, uint64_t, uint64_t, uint64_t, uint64_t); +typedef void (*vFuffff_t)(uint32_t, float, float, float, float); +typedef void (*vFudddd_t)(uint32_t, double, double, double, double); +typedef void (*vFullpu_t)(uint32_t, intptr_t, intptr_t, void*, uint32_t); +typedef void (*vFupiii_t)(uint32_t, void*, int32_t, int32_t, int32_t); +typedef void (*vFupupp_t)(uint32_t, void*, uint32_t, void*, void*); +typedef void (*vFuplii_t)(uint32_t, void*, intptr_t, int32_t, int32_t); +typedef void (*vFuppip_t)(uint32_t, void*, void*, int32_t, void*); +typedef void (*vFupppp_t)(uint32_t, void*, void*, void*, void*); +typedef void (*vFfffff_t)(float, float, float, float, float); +typedef void (*vFddddp_t)(double, double, double, double, void*); +typedef void (*vFluipp_t)(intptr_t, uint32_t, int32_t, void*, void*); +typedef void (*vFpilpp_t)(void*, int32_t, intptr_t, void*, void*); +typedef void (*vFpipiu_t)(void*, int32_t, void*, int32_t, uint32_t); +typedef void (*vFpuipp_t)(void*, uint32_t, int32_t, void*, void*); +typedef void (*vFpddii_t)(void*, double, double, int32_t, int32_t); +typedef void (*vFppWui_t)(void*, void*, uint16_t, uint32_t, int32_t); +typedef void (*vFpppii_t)(void*, void*, void*, int32_t, int32_t); +typedef void (*vFppppu_t)(void*, void*, void*, void*, uint32_t); +typedef void (*vFppppp_t)(void*, void*, void*, void*, void*); +typedef void (*vFXLiii_t)(void*, uintptr_t, int32_t, int32_t, int32_t); +typedef void (*vFXLiiL_t)(void*, uintptr_t, int32_t, int32_t, uintptr_t); +typedef void (*vFXLppi_t)(void*, uintptr_t, void*, void*, int32_t); +typedef void (*vFXpiiL_t)(void*, void*, int32_t, int32_t, uintptr_t); +typedef int32_t (*iEEiiip_t)(x64emu_t*, int32_t, int32_t, int32_t, void*); +typedef int32_t (*iEEipii_t)(x64emu_t*, int32_t, void*, int32_t, int32_t); +typedef int32_t (*iEEippL_t)(x64emu_t*, int32_t, void*, void*, uintptr_t); +typedef int32_t (*iEEpipp_t)(x64emu_t*, void*, int32_t, void*, void*); +typedef int32_t (*iEEpipV_t)(x64emu_t*, void*, int32_t, void*, void*); +typedef int32_t (*iFEpupu_t)(x64emu_t*, void*, uint32_t, void*, uint32_t); +typedef int32_t (*iEEpLpp_t)(x64emu_t*, void*, uintptr_t, void*, void*); +typedef int32_t (*iFEpLpp_t)(x64emu_t*, void*, uintptr_t, void*, void*); +typedef int32_t (*iEEpLpV_t)(x64emu_t*, void*, uintptr_t, void*, void*); +typedef int32_t (*iFEpLpV_t)(x64emu_t*, void*, uintptr_t, void*, void*); +typedef int32_t (*iFEpplp_t)(x64emu_t*, void*, void*, intptr_t, void*); +typedef int32_t (*iEEpppi_t)(x64emu_t*, void*, void*, void*, int32_t); +typedef int32_t (*iEEpppp_t)(x64emu_t*, void*, void*, void*, void*); +typedef int32_t (*iFEpppp_t)(x64emu_t*, void*, void*, void*, void*); +typedef int32_t (*iFEXipp_t)(x64emu_t*, void*, int32_t, void*, void*); +typedef int32_t (*iFEXLip_t)(x64emu_t*, void*, uintptr_t, int32_t, void*); +typedef int32_t (*iFEXLlp_t)(x64emu_t*, void*, uintptr_t, intptr_t, void*); +typedef int32_t (*iFEXLLp_t)(x64emu_t*, void*, uintptr_t, uintptr_t, void*); +typedef int32_t (*iFEXLpi_t)(x64emu_t*, void*, uintptr_t, void*, int32_t); +typedef int32_t (*iFEXLpp_t)(x64emu_t*, void*, uintptr_t, void*, void*); +typedef int32_t (*iFEXpLp_t)(x64emu_t*, void*, void*, uintptr_t, void*); +typedef int32_t (*iFEXppu_t)(x64emu_t*, void*, void*, void*, uint32_t); +typedef int32_t (*iFEXppp_t)(x64emu_t*, void*, void*, void*, void*); +typedef int32_t (*iEiiipu_t)(int32_t, int32_t, int32_t, void*, uint32_t); +typedef int32_t (*iEiiipp_t)(int32_t, int32_t, int32_t, void*, void*); +typedef int32_t (*iEiLLLL_t)(int32_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); +typedef int32_t (*iEipLLi_t)(int32_t, void*, uintptr_t, uintptr_t, int32_t); +typedef int32_t (*iEippLi_t)(int32_t, void*, void*, uintptr_t, int32_t); +typedef int32_t (*iEipppi_t)(int32_t, void*, void*, void*, int32_t); +typedef int32_t (*iEipppp_t)(int32_t, void*, void*, void*, void*); +typedef int32_t (*iFuiuup_t)(uint32_t, int32_t, uint32_t, uint32_t, void*); +typedef int32_t (*iFpiiuu_t)(void*, int32_t, int32_t, uint32_t, uint32_t); +typedef int32_t (*iFpippp_t)(void*, int32_t, void*, void*, void*); +typedef int32_t (*iFpCCCC_t)(void*, uint8_t, uint8_t, uint8_t, uint8_t); +typedef int32_t (*iFpuipp_t)(void*, uint32_t, int32_t, void*, void*); +typedef int32_t (*iFppiUi_t)(void*, void*, int32_t, uint64_t, int32_t); +typedef int32_t (*iFppipp_t)(void*, void*, int32_t, void*, void*); +typedef int32_t (*iFpppip_t)(void*, void*, void*, int32_t, void*); +typedef int32_t (*iEpppLp_t)(void*, void*, void*, uintptr_t, void*); +typedef int32_t (*iFppppp_t)(void*, void*, void*, void*, void*); +typedef int32_t (*iFXiiii_t)(void*, int32_t, int32_t, int32_t, int32_t); +typedef int32_t (*iFXiiip_t)(void*, int32_t, int32_t, int32_t, void*); +typedef int32_t (*iFXiuLi_t)(void*, int32_t, uint32_t, uintptr_t, int32_t); +typedef int32_t (*iFXiLip_t)(void*, int32_t, uintptr_t, int32_t, void*); +typedef int32_t (*iFXiLuu_t)(void*, int32_t, uintptr_t, uint32_t, uint32_t); +typedef int32_t (*iFXuuLL_t)(void*, uint32_t, uint32_t, uintptr_t, uintptr_t); +typedef int32_t (*iFXLLii_t)(void*, uintptr_t, uintptr_t, int32_t, int32_t); +typedef int32_t (*iFXLpii_t)(void*, uintptr_t, void*, int32_t, int32_t); +typedef int32_t (*iFXLpLi_t)(void*, uintptr_t, void*, uintptr_t, int32_t); +typedef int32_t (*iFXLppi_t)(void*, uintptr_t, void*, void*, int32_t); +typedef int32_t (*iFXpipi_t)(void*, void*, int32_t, void*, int32_t); +typedef int32_t (*iFXpppp_t)(void*, void*, void*, void*, void*); +typedef int64_t (*IFXpIII_t)(void*, void*, int64_t, int64_t, int64_t); +typedef uint32_t (*uEEippu_t)(x64emu_t*, int32_t, void*, void*, uint32_t); +typedef uint32_t (*uEpLLLS_t)(void*, uintptr_t, uintptr_t, uintptr_t, void*); +typedef uint64_t (*UFuiCiu_t)(uint32_t, int32_t, uint8_t, int32_t, uint32_t); +typedef intptr_t (*lFpuipC_t)(void*, uint32_t, int32_t, void*, uint8_t); +typedef uintptr_t (*LFEppLL_t)(x64emu_t*, void*, void*, uintptr_t, uintptr_t); +typedef uintptr_t (*LFEXLpi_t)(x64emu_t*, void*, uintptr_t, void*, int32_t); +typedef uintptr_t (*LEpLppa_t)(void*, uintptr_t, void*, void*, void*); +typedef uintptr_t (*LFXLuuu_t)(void*, uintptr_t, uint32_t, uint32_t, uint32_t); +typedef uintptr_t (*LFXLpuu_t)(void*, uintptr_t, void*, uint32_t, uint32_t); +typedef uintptr_t (*LFXpppi_t)(void*, void*, void*, void*, int32_t); +typedef void* (*pFEppip_t)(x64emu_t*, void*, void*, int32_t, void*); +typedef void* (*pFEXipp_t)(x64emu_t*, void*, int32_t, void*, void*); +typedef void* (*pFEXlpp_t)(x64emu_t*, void*, intptr_t, void*, void*); +typedef void* (*pFEXppi_t)(x64emu_t*, void*, void*, void*, int32_t); +typedef void* (*pFuiupp_t)(uint32_t, int32_t, uint32_t, void*, void*); +typedef void* (*pFpiiuu_t)(void*, int32_t, int32_t, uint32_t, uint32_t); +typedef void* (*pFpippp_t)(void*, int32_t, void*, void*, void*); +typedef void* (*pFpuiii_t)(void*, uint32_t, int32_t, int32_t, int32_t); +typedef void* (*pFpuuip_t)(void*, uint32_t, uint32_t, int32_t, void*); +typedef void* (*pFppuup_t)(void*, void*, uint32_t, uint32_t, void*); +typedef void* (*pFppupp_t)(void*, void*, uint32_t, void*, void*); +typedef void* (*pFXLipp_t)(void*, uintptr_t, int32_t, void*, void*); +typedef void* (*pFXpipi_t)(void*, void*, int32_t, void*, int32_t); +typedef void* (*pFXppip_t)(void*, void*, void*, int32_t, void*); +typedef void (*vFiuibp_i_t)(int32_t, uint32_t, int32_t, struct_p_t*, int32_t); +typedef void (*vFXibL_ii_t)(void*, int32_t, struct_L_t*, int32_t, int32_t); +typedef int32_t (*iEEBh_ppp_t)(x64emu_t*, struct_h_t*, void*, void*, void*); +typedef int32_t (*iFppppbp__t)(void*, void*, void*, void*, struct_p_t*); +typedef int32_t (*iFbp_piip_t)(struct_p_t*, void*, int32_t, int32_t, void*); +typedef int32_t (*iFbp_puip_t)(struct_p_t*, void*, uint32_t, int32_t, void*); +typedef int32_t (*iFbp_pppi_t)(struct_p_t*, void*, void*, void*, int32_t); +typedef int32_t (*iFXiibL_i_t)(void*, int32_t, int32_t, struct_L_t*, int32_t); +typedef int32_t (*iFXCupbL__t)(void*, uint8_t, uint32_t, void*, struct_L_t*); +typedef int32_t (*iFXLbL_ii_t)(void*, uintptr_t, struct_L_t*, int32_t, int32_t); +typedef uintptr_t (*LEpbp_LLp_t)(void*, struct_p_t*, uintptr_t, uintptr_t, void*); +typedef uintptr_t (*LEpBp_LLp_t)(void*, struct_p_t*, uintptr_t, uintptr_t, void*); +typedef int32_t (*iEippprLL__t)(int32_t, void*, void*, void*, struct_LL_t*); +typedef int32_t (*iEpurLL_pL_t)(void*, uint32_t, struct_LL_t*, void*, uintptr_t); +typedef int32_t (*iFppppbup__t)(void*, void*, void*, void*, struct_up_t*); +typedef int32_t (*iFiiuBp_Bp__t)(int32_t, int32_t, uint32_t, struct_p_t*, struct_p_t*); +typedef int32_t (*iFbp_bp_pip_t)(struct_p_t*, struct_p_t*, void*, int32_t, void*); +typedef void (*vFbp_ppibup__t)(struct_p_t*, void*, void*, int32_t, struct_up_t*); +typedef int32_t (*iFEXbpLiL_pp_t)(x64emu_t*, void*, struct_pLiL_t*, void*, void*); +typedef int32_t (*iFpppbp_bup__t)(void*, void*, void*, struct_p_t*, struct_up_t*); +typedef uintptr_t (*LFXLrLiiuL_Lp_t)(void*, uintptr_t, struct_LiiuL_t*, uintptr_t, void*); +typedef void* (*pFEXLrLiiuL_i_t)(x64emu_t*, void*, uintptr_t, struct_LiiuL_t*, int32_t); +typedef int32_t (*iFXLiuriiiiiLi__t)(void*, uintptr_t, int32_t, uint32_t, struct_iiiiiLi_t*); +typedef uintptr_t (*LELbp_bL_bp_bL__t)(uintptr_t, struct_p_t*, struct_L_t*, struct_p_t*, struct_L_t*); +typedef void (*vFXLbLLLLLLLLLL_iL_t)(void*, uintptr_t, struct_LLLLLLLLLL_t*, int32_t, uintptr_t); +typedef int32_t (*iFXiiiBpLiiiLLLii__t)(void*, int32_t, int32_t, int32_t, struct_pLiiiLLLii_t*); +typedef uintptr_t (*LEpLpriiiiiiiiilt_a_t)(void*, uintptr_t, void*, struct_iiiiiiiiilt_t*, void*); +typedef int32_t (*iFXLpbLWWWcc_bLWWWcc__t)(void*, uintptr_t, void*, struct_LWWWcc_t*, struct_LWWWcc_t*); +typedef int32_t (*iFXLpBLWWWcc_BLWWWcc__t)(void*, uintptr_t, void*, struct_LWWWcc_t*, struct_LWWWcc_t*); +typedef void (*vFEiiipp_t)(x64emu_t*, int32_t, int32_t, int32_t, void*, void*); +typedef void (*vFEuippp_t)(x64emu_t*, uint32_t, int32_t, void*, void*, void*); +typedef void (*vFEupupi_t)(x64emu_t*, uint32_t, void*, uint32_t, void*, int32_t); +typedef void (*vFiiiiii_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFiiiuil_t)(int32_t, int32_t, int32_t, uint32_t, int32_t, intptr_t); +typedef void (*vFiiilpi_t)(int32_t, int32_t, int32_t, intptr_t, void*, int32_t); +typedef void (*vFiiuilp_t)(int32_t, int32_t, uint32_t, int32_t, intptr_t, void*); +typedef void (*vFiffiff_t)(int32_t, float, float, int32_t, float, float); +typedef void (*vFiddidd_t)(int32_t, double, double, int32_t, double, double); +typedef void (*vFilipli_t)(int32_t, intptr_t, int32_t, void*, intptr_t, int32_t); +typedef void (*vFiliplu_t)(int32_t, intptr_t, int32_t, void*, intptr_t, uint32_t); +typedef void (*vFipiplp_t)(int32_t, void*, int32_t, void*, intptr_t, void*); +typedef void (*vFCCCCff_t)(uint8_t, uint8_t, uint8_t, uint8_t, float, float); +typedef void (*vFuiiiii_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuiiiip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFuiiuii_t)(uint32_t, int32_t, int32_t, uint32_t, int32_t, int32_t); +typedef void (*vFuiiuup_t)(uint32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuiIIII_t)(uint32_t, int32_t, int64_t, int64_t, int64_t, int64_t); +typedef void (*vFuiuiii_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t); +typedef void (*vFuiuiiC_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, uint8_t); +typedef void (*vFuiuiil_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, intptr_t); +typedef void (*vFuiuiuu_t)(uint32_t, int32_t, uint32_t, int32_t, uint32_t, uint32_t); +typedef void (*vFuiuiuU_t)(uint32_t, int32_t, uint32_t, int32_t, uint32_t, uint64_t); +typedef void (*vFuiuCip_t)(uint32_t, int32_t, uint32_t, uint8_t, int32_t, void*); +typedef void (*vFuiuuip_t)(uint32_t, int32_t, uint32_t, uint32_t, int32_t, void*); +typedef void (*vFuiuuuu_t)(uint32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuiupii_t)(uint32_t, int32_t, uint32_t, void*, int32_t, int32_t); +typedef void (*vFuiupiu_t)(uint32_t, int32_t, uint32_t, void*, int32_t, uint32_t); +typedef void (*vFuiUUUU_t)(uint32_t, int32_t, uint64_t, uint64_t, uint64_t, uint64_t); +typedef void (*vFuiffff_t)(uint32_t, int32_t, float, float, float, float); +typedef void (*vFuidddd_t)(uint32_t, int32_t, double, double, double, double); +typedef void (*vFuipiup_t)(uint32_t, int32_t, void*, int32_t, uint32_t, void*); +typedef void (*vFuCuuip_t)(uint32_t, uint8_t, uint32_t, uint32_t, int32_t, void*); +typedef void (*vFuuiiii_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuuiuii_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, int32_t); +typedef void (*vFuuiuil_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, intptr_t); +typedef void (*vFuuiuip_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, void*); +typedef void (*vFuuiuCu_t)(uint32_t, uint32_t, int32_t, uint32_t, uint8_t, uint32_t); +typedef void (*vFuuiuup_t)(uint32_t, uint32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuuiii_t)(uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t); +typedef void (*vFuuuiup_t)(uint32_t, uint32_t, uint32_t, int32_t, uint32_t, void*); +typedef void (*vFuuuipC_t)(uint32_t, uint32_t, uint32_t, int32_t, void*, uint8_t); +typedef void (*vFuuuipp_t)(uint32_t, uint32_t, uint32_t, int32_t, void*, void*); +typedef void (*vFuuuuii_t)(uint32_t, uint32_t, uint32_t, uint32_t, int32_t, int32_t); +typedef void (*vFuuuuip_t)(uint32_t, uint32_t, uint32_t, uint32_t, int32_t, void*); +typedef void (*vFuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuuuull_t)(uint32_t, uint32_t, uint32_t, uint32_t, intptr_t, intptr_t); +typedef void (*vFuuuppi_t)(uint32_t, uint32_t, uint32_t, void*, void*, int32_t); +typedef void (*vFuuuppp_t)(uint32_t, uint32_t, uint32_t, void*, void*, void*); +typedef void (*vFuuffff_t)(uint32_t, uint32_t, float, float, float, float); +typedef void (*vFuudddd_t)(uint32_t, uint32_t, double, double, double, double); +typedef void (*vFuupiii_t)(uint32_t, uint32_t, void*, int32_t, int32_t, int32_t); +typedef void (*vFuupupp_t)(uint32_t, uint32_t, void*, uint32_t, void*, void*); +typedef void (*vFuuplii_t)(uint32_t, uint32_t, void*, intptr_t, int32_t, int32_t); +typedef void (*vFuffiip_t)(uint32_t, float, float, int32_t, int32_t, void*); +typedef void (*vFufffff_t)(uint32_t, float, float, float, float, float); +typedef void (*vFuddiip_t)(uint32_t, double, double, int32_t, int32_t, void*); +typedef void (*vFulluUC_t)(uint32_t, intptr_t, intptr_t, uint32_t, uint64_t, uint8_t); +typedef void (*vFupiiii_t)(uint32_t, void*, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFffffff_t)(float, float, float, float, float, float); +typedef void (*vFdddddd_t)(double, double, double, double, double, double); +typedef void (*vFpipipV_t)(void*, int32_t, void*, int32_t, void*, void*); +typedef void (*vFpdddii_t)(void*, double, double, double, int32_t, int32_t); +typedef void (*vFpppppp_t)(void*, void*, void*, void*, void*, void*); +typedef void (*vFXiLppi_t)(void*, int32_t, uintptr_t, void*, void*, int32_t); +typedef void (*vFXLiiii_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFXLiiiL_t)(void*, uintptr_t, int32_t, int32_t, int32_t, uintptr_t); +typedef void (*vFXLiipi_t)(void*, uintptr_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFXLpppi_t)(void*, uintptr_t, void*, void*, void*, int32_t); +typedef int32_t (*iEEiippi_t)(x64emu_t*, int32_t, int32_t, void*, void*, int32_t); +typedef int32_t (*iEEuppLp_t)(x64emu_t*, uint32_t, void*, void*, uintptr_t, void*); +typedef int32_t (*iFEpiuuu_t)(x64emu_t*, void*, int32_t, uint32_t, uint32_t, uint32_t); +typedef int32_t (*iEEpiLpp_t)(x64emu_t*, void*, int32_t, uintptr_t, void*, void*); +typedef int32_t (*iEEpipOi_t)(x64emu_t*, void*, int32_t, void*, int32_t, int32_t); +typedef int32_t (*iFEpuuup_t)(x64emu_t*, void*, uint32_t, uint32_t, uint32_t, void*); +typedef int32_t (*iFEplluu_t)(x64emu_t*, void*, intptr_t, intptr_t, uint32_t, uint32_t); +typedef int32_t (*iFEpLlpp_t)(x64emu_t*, void*, uintptr_t, intptr_t, void*, void*); +typedef int32_t (*iFEppipp_t)(x64emu_t*, void*, void*, int32_t, void*, void*); +typedef int32_t (*iEEppupi_t)(x64emu_t*, void*, void*, uint32_t, void*, int32_t); +typedef int32_t (*iFEppllp_t)(x64emu_t*, void*, void*, intptr_t, intptr_t, void*); +typedef int32_t (*iEEpppLp_t)(x64emu_t*, void*, void*, void*, uintptr_t, void*); +typedef int32_t (*iFEXLilp_t)(x64emu_t*, void*, uintptr_t, int32_t, intptr_t, void*); +typedef int32_t (*iFEXLpiL_t)(x64emu_t*, void*, uintptr_t, void*, int32_t, uintptr_t); +typedef int32_t (*iFEXpiip_t)(x64emu_t*, void*, void*, int32_t, int32_t, void*); +typedef int32_t (*iFEXpiup_t)(x64emu_t*, void*, void*, int32_t, uint32_t, void*); +typedef int32_t (*iFEXpppp_t)(x64emu_t*, void*, void*, void*, void*, void*); +typedef int32_t (*iFuiiuup_t)(uint32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef int32_t (*iFpiippp_t)(void*, int32_t, int32_t, void*, void*, void*); +typedef int32_t (*iFppiiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t); +typedef int32_t (*iFppuIII_t)(void*, void*, uint32_t, int64_t, int64_t, int64_t); +typedef int32_t (*iFppulll_t)(void*, void*, uint32_t, intptr_t, intptr_t, intptr_t); +typedef int32_t (*iFpppppp_t)(void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFXiiiii_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef int32_t (*iFXiiLip_t)(void*, int32_t, int32_t, uintptr_t, int32_t, void*); +typedef int32_t (*iFXiippp_t)(void*, int32_t, int32_t, void*, void*, void*); +typedef int32_t (*iFXuuuuu_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef int32_t (*iFXLiiiL_t)(void*, uintptr_t, int32_t, int32_t, int32_t, uintptr_t); +typedef int32_t (*iFXLiiip_t)(void*, uintptr_t, int32_t, int32_t, int32_t, void*); +typedef int32_t (*iFXLiiuu_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t); +typedef int32_t (*iFXLuupp_t)(void*, uintptr_t, uint32_t, uint32_t, void*, void*); +typedef int32_t (*iFXLupip_t)(void*, uintptr_t, uint32_t, void*, int32_t, void*); +typedef int32_t (*iFXLLLLL_t)(void*, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); +typedef int32_t (*iFXLppii_t)(void*, uintptr_t, void*, void*, int32_t, int32_t); +typedef int32_t (*iFXLpppp_t)(void*, uintptr_t, void*, void*, void*, void*); +typedef int32_t (*iFXpIppp_t)(void*, void*, int64_t, void*, void*, void*); +typedef int32_t (*iFXpuiii_t)(void*, void*, uint32_t, int32_t, int32_t, int32_t); +typedef int32_t (*iFXpLiWL_t)(void*, void*, uintptr_t, int32_t, uint16_t, uintptr_t); +typedef int32_t (*iFXpLLiL_t)(void*, void*, uintptr_t, uintptr_t, int32_t, uintptr_t); +typedef int32_t (*iFXppppi_t)(void*, void*, void*, void*, void*, int32_t); +typedef int32_t (*iFXppppp_t)(void*, void*, void*, void*, void*, void*); +typedef uint32_t (*uFEpippi_t)(x64emu_t*, void*, int32_t, void*, void*, int32_t); +typedef uint32_t (*uFupuufp_t)(uint32_t, void*, uint32_t, uint32_t, float, void*); +typedef intptr_t (*lEipLipu_t)(int32_t, void*, uintptr_t, int32_t, void*, uint32_t); +typedef intptr_t (*lEipLipp_t)(int32_t, void*, uintptr_t, int32_t, void*, void*); +typedef void* (*pFEpiiuu_t)(x64emu_t*, void*, int32_t, int32_t, uint32_t, uint32_t); +typedef void* (*pEEpLLiN_t)(x64emu_t*, void*, uintptr_t, uintptr_t, int32_t, ...); +typedef void* (*pEEppLLp_t)(x64emu_t*, void*, void*, uintptr_t, uintptr_t, void*); +typedef void* (*pFEXpppp_t)(x64emu_t*, void*, void*, void*, void*, void*); +typedef void* (*pFWCiWCi_t)(uint16_t, uint8_t, int32_t, uint16_t, uint8_t, int32_t); +typedef void* (*pFpiiiiu_t)(void*, int32_t, int32_t, int32_t, int32_t, uint32_t); +typedef void* (*XFpppppp_t)(void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFpppbp_pp_t)(void*, void*, void*, struct_p_t*, void*, void*); +typedef int32_t (*iFXibL_ppu_t)(void*, int32_t, struct_L_t*, void*, void*, uint32_t); +typedef int32_t (*iFXLiiibL__t)(void*, uintptr_t, int32_t, int32_t, int32_t, struct_L_t*); +typedef int32_t (*iFXLLLLbL__t)(void*, uintptr_t, uintptr_t, uintptr_t, uintptr_t, struct_L_t*); +typedef int32_t (*iFXLbL_ipi_t)(void*, uintptr_t, struct_L_t*, int32_t, void*, int32_t); +typedef int32_t (*iFXbL_upip_t)(void*, struct_L_t*, uint32_t, void*, int32_t, void*); +typedef int32_t (*iFppbL_pbL_p_t)(void*, void*, struct_L_t*, void*, struct_L_t*, void*); +typedef int32_t (*iFrpuu_Lrpuu_Lui_t)(struct_puu_t*, uintptr_t, struct_puu_t*, uintptr_t, uint32_t, int32_t); +typedef int32_t (*iFXbLip_uubLip_L_t)(void*, struct_Lip_t*, uint32_t, uint32_t, struct_Lip_t*, uintptr_t); +typedef void (*vFbp_bppup_ippbp__t)(struct_p_t*, struct_ppup_t*, int32_t, void*, void*, struct_p_t*); +typedef void (*vFEuuippp_t)(x64emu_t*, uint32_t, uint32_t, int32_t, void*, void*, void*); +typedef void (*vFEupupip_t)(x64emu_t*, uint32_t, void*, uint32_t, void*, int32_t, void*); +typedef void (*vFiiiiiip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFiiiiuup_t)(int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFiiuilil_t)(int32_t, int32_t, uint32_t, int32_t, intptr_t, int32_t, intptr_t); +typedef void (*vFiiffffp_t)(int32_t, int32_t, float, float, float, float, void*); +typedef void (*vFiuulipi_t)(int32_t, uint32_t, uint32_t, intptr_t, int32_t, void*, int32_t); +typedef void (*vFiupuuup_t)(int32_t, uint32_t, void*, uint32_t, uint32_t, uint32_t, void*); +typedef void (*vFilipliu_t)(int32_t, intptr_t, int32_t, void*, intptr_t, int32_t, uint32_t); +typedef void (*vFilulipi_t)(int32_t, intptr_t, uint32_t, intptr_t, int32_t, void*, int32_t); +typedef void (*vFCCCCfff_t)(uint8_t, uint8_t, uint8_t, uint8_t, float, float, float); +typedef void (*vFuiiiiii_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuiiiiiC_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint8_t); +typedef void (*vFuiiiuip_t)(uint32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, void*); +typedef void (*vFuiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuiuiiii_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuiuiiiC_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, uint8_t); +typedef void (*vFuiuiiip_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFuiuiiuU_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, uint32_t, uint64_t); +typedef void (*vFuiuCiuu_t)(uint32_t, int32_t, uint32_t, uint8_t, int32_t, uint32_t, uint32_t); +typedef void (*vFuiupiiu_t)(uint32_t, int32_t, uint32_t, void*, int32_t, int32_t, uint32_t); +typedef void (*vFuiupuip_t)(uint32_t, int32_t, uint32_t, void*, uint32_t, int32_t, void*); +typedef void (*vFuipiiii_t)(uint32_t, int32_t, void*, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuipffff_t)(uint32_t, int32_t, void*, float, float, float, float); +typedef void (*vFuipdddd_t)(uint32_t, int32_t, void*, double, double, double, double); +typedef void (*vFuuiiiii_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuuiiiiC_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint8_t); +typedef void (*vFuuiiiiu_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t); +typedef void (*vFuuiiiip_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFuuiiuup_t)(uint32_t, uint32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuiCiui_t)(uint32_t, uint32_t, int32_t, uint8_t, int32_t, uint32_t, int32_t); +typedef void (*vFuuiCiuu_t)(uint32_t, uint32_t, int32_t, uint8_t, int32_t, uint32_t, uint32_t); +typedef void (*vFuuiuiii_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t); +typedef void (*vFuuiuiiC_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, int32_t, uint8_t); +typedef void (*vFuuipppp_t)(uint32_t, uint32_t, int32_t, void*, void*, void*, void*); +typedef void (*vFuuuiiii_t)(uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuuuiiCp_t)(uint32_t, uint32_t, uint32_t, int32_t, int32_t, uint8_t, void*); +typedef void (*vFuuuiuil_t)(uint32_t, uint32_t, uint32_t, int32_t, uint32_t, int32_t, intptr_t); +typedef void (*vFuuuiupi_t)(uint32_t, uint32_t, uint32_t, int32_t, uint32_t, void*, int32_t); +typedef void (*vFuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuuuulll_t)(uint32_t, uint32_t, uint32_t, uint32_t, intptr_t, intptr_t, intptr_t); +typedef void (*vFuuuffff_t)(uint32_t, uint32_t, uint32_t, float, float, float, float); +typedef void (*vFuuudddd_t)(uint32_t, uint32_t, uint32_t, double, double, double, double); +typedef void (*vFuuffiip_t)(uint32_t, uint32_t, float, float, int32_t, int32_t, void*); +typedef void (*vFuuddiip_t)(uint32_t, uint32_t, double, double, int32_t, int32_t, void*); +typedef void (*vFuulluup_t)(uint32_t, uint32_t, intptr_t, intptr_t, uint32_t, uint32_t, void*); +typedef void (*vFuupiiii_t)(uint32_t, uint32_t, void*, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuuppppp_t)(uint32_t, uint32_t, void*, void*, void*, void*, void*); +typedef void (*vFuffffff_t)(uint32_t, float, float, float, float, float, float); +typedef void (*vFudddddd_t)(uint32_t, double, double, double, double, double, double); +typedef void (*vFlliiiip_t)(intptr_t, intptr_t, int32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFpipipiu_t)(void*, int32_t, void*, int32_t, void*, int32_t, uint32_t); +typedef void (*vFpddiidd_t)(void*, double, double, int32_t, int32_t, double, double); +typedef void (*vFXLiiiLi_t)(void*, uintptr_t, int32_t, int32_t, int32_t, uintptr_t, int32_t); +typedef void (*vFXLiiipi_t)(void*, uintptr_t, int32_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFXLiiuui_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, int32_t); +typedef void (*vFXLLuuuu_t)(void*, uintptr_t, uintptr_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFXLppipi_t)(void*, uintptr_t, void*, void*, int32_t, void*, int32_t); +typedef void (*vFXpiipii_t)(void*, void*, int32_t, int32_t, void*, int32_t, int32_t); +typedef void (*vFXppiiii_t)(void*, void*, void*, int32_t, int32_t, int32_t, int32_t); +typedef int32_t (*iEEpLiipV_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, void*, void*); +typedef int32_t (*iEEpLiLpV_t)(x64emu_t*, void*, uintptr_t, int32_t, uintptr_t, void*, void*); +typedef int32_t (*iFEpppipp_t)(x64emu_t*, void*, void*, void*, int32_t, void*, void*); +typedef int32_t (*iFEpppupp_t)(x64emu_t*, void*, void*, void*, uint32_t, void*, void*); +typedef int32_t (*iEEpppppp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFEXLpiiL_t)(x64emu_t*, void*, uintptr_t, void*, int32_t, int32_t, uintptr_t); +typedef int32_t (*iFEXLpppp_t)(x64emu_t*, void*, uintptr_t, void*, void*, void*, void*); +typedef int32_t (*iFEXppppp_t)(x64emu_t*, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFuiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef int32_t (*iFpiuuuiu_t)(void*, int32_t, uint32_t, uint32_t, uint32_t, int32_t, uint32_t); +typedef int32_t (*iFpWCiWCi_t)(void*, uint16_t, uint8_t, int32_t, uint16_t, uint8_t, int32_t); +typedef int32_t (*iEpupupui_t)(void*, uint32_t, void*, uint32_t, void*, uint32_t, int32_t); +typedef int32_t (*iFXiuLiii_t)(void*, int32_t, uint32_t, uintptr_t, int32_t, int32_t, int32_t); +typedef int32_t (*iFXiLuupp_t)(void*, int32_t, uintptr_t, uint32_t, uint32_t, void*, void*); +typedef int32_t (*iFXLiiiiL_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int32_t, uintptr_t); +typedef int32_t (*iFXLiiuui_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, int32_t); +typedef int32_t (*iFXLpiiii_t)(void*, uintptr_t, void*, int32_t, int32_t, int32_t, int32_t); +typedef int32_t (*iFXLpiiuu_t)(void*, uintptr_t, void*, int32_t, int32_t, uint32_t, uint32_t); +typedef int32_t (*iFXLpiipi_t)(void*, uintptr_t, void*, int32_t, int32_t, void*, int32_t); +typedef int32_t (*iFXLppiii_t)(void*, uintptr_t, void*, void*, int32_t, int32_t, int32_t); +typedef int32_t (*iFXpiipii_t)(void*, void*, int32_t, int32_t, void*, int32_t, int32_t); +typedef int32_t (*iFXpLiWwL_t)(void*, void*, uintptr_t, int32_t, uint16_t, int16_t, uintptr_t); +typedef int32_t (*iFXpLuuii_t)(void*, void*, uintptr_t, uint32_t, uint32_t, int32_t, int32_t); +typedef uint32_t (*uFuippppp_t)(uint32_t, int32_t, void*, void*, void*, void*, void*); +typedef intptr_t (*lEEipLpLL_t)(x64emu_t*, int32_t, void*, uintptr_t, void*, uintptr_t, uintptr_t); +typedef void* (*pFEpiiiiu_t)(x64emu_t*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t); +typedef void* (*pFEpLiiii_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, int32_t); +typedef void* (*pEEpLiiiI_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, int64_t); +typedef void* (*pFEpLiiiI_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, int64_t); +typedef void* (*pEEpLiiil_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, intptr_t); +typedef void* (*pFEpXppip_t)(x64emu_t*, void*, void*, void*, void*, int32_t, void*); +typedef void (*vFXLLiiibl__t)(void*, uintptr_t, uintptr_t, int32_t, int32_t, int32_t, struct_l_t*); +typedef int32_t (*iFXiLibiip_ip_t)(void*, int32_t, uintptr_t, int32_t, struct_iip_t*, int32_t, void*); +typedef int32_t (*iFXLibL_ubL_u_t)(void*, uintptr_t, int32_t, struct_L_t*, uint32_t, struct_L_t*, uint32_t); +typedef void (*vFXLpiibpiip_i_t)(void*, uintptr_t, void*, int32_t, int32_t, struct_piip_t*, int32_t); +typedef int32_t (*iFXLpiibpiiL_i_t)(void*, uintptr_t, void*, int32_t, int32_t, struct_piiL_t*, int32_t); +typedef uintptr_t (*LFXLLuubLWWWcc_bLWWWcc__t)(void*, uintptr_t, uintptr_t, uint32_t, uint32_t, struct_LWWWcc_t*, struct_LWWWcc_t*); +typedef uintptr_t (*LFXLLbLWWWcc_bLWWWcc_uu_t)(void*, uintptr_t, uintptr_t, struct_LWWWcc_t*, struct_LWWWcc_t*, uint32_t, uint32_t); +typedef void (*vFiiiiuuip_t)(int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, void*); +typedef void (*vFiilliilp_t)(int32_t, int32_t, intptr_t, intptr_t, int32_t, int32_t, intptr_t, void*); +typedef void (*vFiupuiuup_t)(int32_t, uint32_t, void*, uint32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFiupuuuup_t)(int32_t, uint32_t, void*, uint32_t, uint32_t, uint32_t, uint32_t, void*); +typedef void (*vFuiiiiiii_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuiiiiiiC_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint8_t); +typedef void (*vFuiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuiiipiup_t)(uint32_t, int32_t, int32_t, int32_t, void*, int32_t, uint32_t, void*); +typedef void (*vFuiuiiiii_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuiuiiiip_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFuiuiiiuU_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, uint32_t, uint64_t); +typedef void (*vFuiuiiCuU_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, uint8_t, uint32_t, uint64_t); +typedef void (*vFuiuiuuuu_t)(uint32_t, int32_t, uint32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuCCCCfff_t)(uint32_t, uint8_t, uint8_t, uint8_t, uint8_t, float, float, float); +typedef void (*vFuuiiiiiC_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint8_t); +typedef void (*vFuuiiiuip_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, void*); +typedef void (*vFuuiiiuup_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuiiuupp_t)(uint32_t, uint32_t, int32_t, int32_t, uint32_t, uint32_t, void*, void*); +typedef void (*vFuuiuiiii_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuuiuiiiC_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, uint8_t); +typedef void (*vFuuiuiiip_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFuuuiiiiu_t)(uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t); +typedef void (*vFuuuiuCil_t)(uint32_t, uint32_t, uint32_t, int32_t, uint32_t, uint8_t, int32_t, intptr_t); +typedef void (*vFuuuipipp_t)(uint32_t, uint32_t, uint32_t, int32_t, void*, int32_t, void*, void*); +typedef void (*vFuuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuuufffff_t)(uint32_t, uint32_t, uint32_t, float, float, float, float, float); +typedef void (*vFffffffff_t)(float, float, float, float, float, float, float, float); +typedef void (*vFXiLLiipi_t)(void*, int32_t, uintptr_t, uintptr_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFXiLpiiuu_t)(void*, int32_t, uintptr_t, void*, int32_t, int32_t, uint32_t, uint32_t); +typedef void (*vFXLiiiLii_t)(void*, uintptr_t, int32_t, int32_t, int32_t, uintptr_t, int32_t, int32_t); +typedef void (*vFXLLLiipi_t)(void*, uintptr_t, uintptr_t, uintptr_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFXLppiipi_t)(void*, uintptr_t, void*, void*, int32_t, int32_t, void*, int32_t); +typedef void (*vFXppuulll_t)(void*, void*, void*, uint32_t, uint32_t, intptr_t, intptr_t, intptr_t); +typedef int32_t (*iEEpippppp_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*, void*); +typedef int32_t (*iEEpLiLppp_t)(x64emu_t*, void*, uintptr_t, int32_t, uintptr_t, void*, void*, void*); +typedef int32_t (*iFEppipppp_t)(x64emu_t*, void*, void*, int32_t, void*, void*, void*, void*); +typedef int32_t (*iFuiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef int32_t (*iFpuippupp_t)(void*, uint32_t, int32_t, void*, void*, uint32_t, void*, void*); +typedef int32_t (*iFpuuiiuuu_t)(void*, uint32_t, uint32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t); +typedef int32_t (*iFXuupuupp_t)(void*, uint32_t, uint32_t, void*, uint32_t, uint32_t, void*, void*); +typedef int32_t (*iFXLpipppp_t)(void*, uintptr_t, void*, int32_t, void*, void*, void*, void*); +typedef int32_t (*iFXLppLpip_t)(void*, uintptr_t, void*, void*, uintptr_t, void*, int32_t, void*); +typedef int32_t (*iFXpIIIppp_t)(void*, void*, int64_t, int64_t, int64_t, void*, void*, void*); +typedef uint8_t (*CFuiifpppp_t)(uint32_t, int32_t, int32_t, float, void*, void*, void*, void*); +typedef uint32_t (*uFuipppppp_t)(uint32_t, int32_t, void*, void*, void*, void*, void*, void*); +typedef uint32_t (*uFuupuuiuf_t)(uint32_t, uint32_t, void*, uint32_t, uint32_t, int32_t, uint32_t, float); +typedef uint32_t (*uFulpppppp_t)(uint32_t, intptr_t, void*, void*, void*, void*, void*, void*); +typedef uintptr_t (*LFEXLppuuu_t)(x64emu_t*, void*, uintptr_t, void*, void*, uint32_t, uint32_t, uint32_t); +typedef uintptr_t (*LFXLpuuLLu_t)(void*, uintptr_t, void*, uint32_t, uint32_t, uintptr_t, uintptr_t, uint32_t); +typedef int32_t (*iFXLLiippBL__t)(void*, uintptr_t, uintptr_t, int32_t, int32_t, void*, void*, struct_L_t*); +typedef int32_t (*iFXLpppbL_pp_t)(void*, uintptr_t, void*, void*, void*, struct_L_t*, void*, void*); +typedef void (*vFiiiiiiiii_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFiiiiiiill_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, intptr_t, intptr_t); +typedef void (*vFiiiiillli_t)(int32_t, int32_t, int32_t, int32_t, int32_t, intptr_t, intptr_t, intptr_t, int32_t); +typedef void (*vFiiilllilp_t)(int32_t, int32_t, int32_t, intptr_t, intptr_t, intptr_t, int32_t, intptr_t, void*); +typedef void (*vFiupuiuuup_t)(int32_t, uint32_t, void*, uint32_t, int32_t, uint32_t, uint32_t, uint32_t, void*); +typedef void (*vFiupuuuuup_t)(int32_t, uint32_t, void*, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, void*); +typedef void (*vFuiiiiiiii_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuiiiiiiiC_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint8_t); +typedef void (*vFuiiiiiuip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, void*); +typedef void (*vFuiiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuiuiiiiip_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFuiuiiiCuU_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, uint8_t, uint32_t, uint64_t); +typedef void (*vFuiupuffup_t)(uint32_t, int32_t, uint32_t, void*, uint32_t, float, float, uint32_t, void*); +typedef void (*vFuuiiiiiii_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuuiiiiiiC_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint8_t); +typedef void (*vFuuiiiiuup_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuiuiiiii_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuuiuiiiip_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFuuuiiiiCp_t)(uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint8_t, void*); +typedef void (*vFuuuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuupuuiuuf_t)(uint32_t, uint32_t, void*, uint32_t, uint32_t, int32_t, uint32_t, uint32_t, float); +typedef void (*vFuffffffff_t)(uint32_t, float, float, float, float, float, float, float, float); +typedef void (*vFffCCCCfff_t)(float, float, uint8_t, uint8_t, uint8_t, uint8_t, float, float, float); +typedef void (*vFddddddddd_t)(double, double, double, double, double, double, double, double, double); +typedef void (*vFXiLLpiipi_t)(void*, int32_t, uintptr_t, uintptr_t, void*, int32_t, int32_t, void*, int32_t); +typedef void (*vFXLiiipiii_t)(void*, uintptr_t, int32_t, int32_t, int32_t, void*, int32_t, int32_t, int32_t); +typedef int32_t (*iFEXLLLiipi_t)(x64emu_t*, void*, uintptr_t, uintptr_t, uintptr_t, int32_t, int32_t, void*, int32_t); +typedef int32_t (*iFuiiuuiiip_t)(uint32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, void*); +typedef int32_t (*iFuiiupiiup_t)(uint32_t, int32_t, int32_t, uint32_t, void*, int32_t, int32_t, uint32_t, void*); +typedef int32_t (*iFdddpppppp_t)(double, double, double, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFppippippp_t)(void*, void*, int32_t, void*, void*, int32_t, void*, void*, void*); +typedef int32_t (*iFXuuuLiiip_t)(void*, uint32_t, uint32_t, uint32_t, uintptr_t, int32_t, int32_t, int32_t, void*); +typedef int32_t (*iFXuuuLpppp_t)(void*, uint32_t, uint32_t, uint32_t, uintptr_t, void*, void*, void*, void*); +typedef int32_t (*iFXLiuiiLLL_t)(void*, uintptr_t, int32_t, uint32_t, int32_t, int32_t, uintptr_t, uintptr_t, uintptr_t); +typedef int32_t (*iFXLLiiuuii_t)(void*, uintptr_t, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t); +typedef int32_t (*iFXLpiiuuii_t)(void*, uintptr_t, void*, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t); +typedef uint32_t (*uFuulpiuiuf_t)(uint32_t, uint32_t, intptr_t, void*, int32_t, uint32_t, int32_t, uint32_t, float); +typedef uintptr_t (*LFXLiiiiiip_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); +typedef uintptr_t (*LFXLiiuuuLL_t)(void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, uintptr_t, uintptr_t); +typedef void* (*pFEuiiiuuuu_t)(x64emu_t*, uint32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void* (*pFEXLiiuuLi_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uintptr_t, int32_t); +typedef void* (*pFpiiiiuuuu_t)(void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef int32_t (*iFXLbL_pppppp_t)(void*, uintptr_t, struct_L_t*, void*, void*, void*, void*, void*, void*); +typedef int32_t (*iFXiLiiibiip_ip_t)(void*, int32_t, uintptr_t, int32_t, int32_t, int32_t, struct_iip_t*, int32_t, void*); +typedef int32_t (*iFXiLLLiiibiip__t)(void*, int32_t, uintptr_t, uintptr_t, uintptr_t, int32_t, int32_t, int32_t, struct_iip_t*); +typedef int32_t (*iFXLbL_bL_ppppp_t)(void*, uintptr_t, struct_L_t*, struct_L_t*, void*, void*, void*, void*, void*); +typedef void (*vFXiLLrLiiuL_iipi_t)(void*, int32_t, uintptr_t, uintptr_t, struct_LiiuL_t*, int32_t, int32_t, void*, int32_t); +typedef void* (*pFEXbpLiLLLii_uippuu_t)(x64emu_t*, void*, struct_pLiLLLii_t*, uint32_t, int32_t, void*, void*, uint32_t, uint32_t); +typedef void (*vFEXLpppippp_t)(x64emu_t*, void*, uintptr_t, void*, void*, void*, int32_t, void*, void*, void*); +typedef void (*vFiiiiiiiiii_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFiiiiiiiiui_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t); +typedef void (*vFiiiiiiiiuu_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); +typedef void (*vFiiillliiip_t)(int32_t, int32_t, int32_t, intptr_t, intptr_t, intptr_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFuiiiiiiiii_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuiiiiiiiip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFuiiiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuiuiiiiuup_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuiiiiiiii_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFuuiiiiiuip_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, void*); +typedef void (*vFuuiiiiiuup_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuiuiiiiip_t)(uint32_t, uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); +typedef void (*vFuuuuuuuCCC_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint8_t, uint8_t, uint8_t); +typedef void (*vFuuuuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuupuiupuuf_t)(uint32_t, uint32_t, void*, uint32_t, int32_t, uint32_t, void*, uint32_t, uint32_t, float); +typedef void (*vFuffiiffiip_t)(uint32_t, float, float, int32_t, int32_t, float, float, int32_t, int32_t, void*); +typedef void (*vFuddiiddiip_t)(uint32_t, double, double, int32_t, int32_t, double, double, int32_t, int32_t, void*); +typedef void (*vFffffffffff_t)(float, float, float, float, float, float, float, float, float, float); +typedef int32_t (*iFuiiiuuiiip_t)(uint32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, void*); +typedef int32_t (*iFppuuiiuuuu_t)(void*, void*, uint32_t, uint32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef int32_t (*iFXiLLdduudd_t)(void*, int32_t, uintptr_t, uintptr_t, double, double, uint32_t, uint32_t, double, double); +typedef int32_t (*iFXuuLiuiiLL_t)(void*, uint32_t, uint32_t, uintptr_t, int32_t, uint32_t, int32_t, int32_t, uintptr_t, uintptr_t); +typedef int32_t (*iFXLLpiiuuii_t)(void*, uintptr_t, uintptr_t, void*, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t); +typedef void* (*pFEpiiiiuuuu_t)(x64emu_t*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void* (*pFpppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); +typedef void* (*pFXpuiipuuii_t)(void*, void*, uint32_t, int32_t, int32_t, void*, uint32_t, uint32_t, int32_t, int32_t); +typedef int32_t (*iFXiiLiiibiip_ip_t)(void*, int32_t, int32_t, uintptr_t, int32_t, int32_t, int32_t, struct_iip_t*, int32_t, void*); +typedef int32_t (*iFXiLLiiibiip_ip_t)(void*, int32_t, uintptr_t, uintptr_t, int32_t, int32_t, int32_t, struct_iip_t*, int32_t, void*); +typedef void (*vFiiiiillliip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, intptr_t, intptr_t, intptr_t, int32_t, int32_t, void*); +typedef void (*vFiiiiilllilp_t)(int32_t, int32_t, int32_t, int32_t, int32_t, intptr_t, intptr_t, intptr_t, int32_t, intptr_t, void*); +typedef void (*vFuiiiiiiiuip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, void*); +typedef void (*vFuiiiiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuiiiillliip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, intptr_t, intptr_t, intptr_t, int32_t, int32_t, void*); +typedef void (*vFuiuiiiiiuup_t)(uint32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuiiiiiiuup_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuupupppppp_t)(uint32_t, uint32_t, uint32_t, void*, uint32_t, void*, void*, void*, void*, void*, void*); +typedef void (*vFuuffiiffiip_t)(uint32_t, uint32_t, float, float, int32_t, int32_t, float, float, int32_t, int32_t, void*); +typedef void (*vFuufffffffff_t)(uint32_t, uint32_t, float, float, float, float, float, float, float, float, float); +typedef void (*vFuuddiiddiip_t)(uint32_t, uint32_t, double, double, int32_t, int32_t, double, double, int32_t, int32_t, void*); +typedef void (*vFuUuuuuuuuuu_t)(uint32_t, uint64_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuffffffffff_t)(uint32_t, float, float, float, float, float, float, float, float, float, float); +typedef void (*vFUufffffffff_t)(uint64_t, uint32_t, float, float, float, float, float, float, float, float, float); +typedef void (*vFpiiiiiiiiuu_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); +typedef void (*vFpipipiipiiu_t)(void*, int32_t, void*, int32_t, void*, int32_t, int32_t, void*, int32_t, int32_t, uint32_t); +typedef int32_t (*iFEXLppiiiiuu_t)(x64emu_t*, void*, uintptr_t, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); +typedef int32_t (*iFEXpLLiiLWpi_t)(x64emu_t*, void*, void*, uintptr_t, uintptr_t, int32_t, int32_t, uintptr_t, uint16_t, void*, int32_t); +typedef int32_t (*iFuiiiiuuiiip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, void*); +typedef int32_t (*iFXLLpiiuuiiL_t)(void*, uintptr_t, uintptr_t, void*, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, uintptr_t); +typedef void* (*pFEXpuiipuuii_t)(x64emu_t*, void*, void*, uint32_t, int32_t, int32_t, void*, uint32_t, uint32_t, int32_t, int32_t); +typedef int32_t (*iFXiiLLiiibiip_ip_t)(void*, int32_t, int32_t, uintptr_t, uintptr_t, int32_t, int32_t, int32_t, struct_iip_t*, int32_t, void*); +typedef void (*vFXiLLrLiiuL_iiiipi_t)(void*, int32_t, uintptr_t, uintptr_t, struct_LiiuL_t*, int32_t, int32_t, int32_t, int32_t, void*, int32_t); +typedef int32_t (*iFXLibL_iiiibL_bL_bL__t)(void*, uintptr_t, int32_t, struct_L_t*, int32_t, int32_t, int32_t, int32_t, struct_L_t*, struct_L_t*, struct_L_t*); +typedef void (*vFuiiiiiiiiuUC_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint64_t, uint8_t); +typedef void (*vFuiiiiiiiuuip_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, void*); +typedef void (*vFuuiiiiiiiiuu_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); +typedef void (*vFuuiiiiiiiuip_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, void*); +typedef void (*vFuuiiiiiiiuup_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuuuuuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFffffffffffff_t)(float, float, float, float, float, float, float, float, float, float, float, float); +typedef void (*vFXiLLpiiiipii_t)(void*, int32_t, uintptr_t, uintptr_t, void*, int32_t, int32_t, int32_t, int32_t, void*, int32_t, int32_t); +typedef int32_t (*iFEXLppiiiiuui_t)(x64emu_t*, void*, uintptr_t, void*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t); +typedef int32_t (*iFXLpppppppppp_t)(void*, uintptr_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); +typedef void* (*pFEXLiiuuLipii_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uintptr_t, int32_t, void*, int32_t, int32_t); +typedef void (*vFXiLLrLiiuL_Liiiipi_t)(void*, int32_t, uintptr_t, uintptr_t, struct_LiiuL_t*, uintptr_t, int32_t, int32_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFuiiiiiiiiiuup_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); +typedef void (*vFuuuuuuuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuUuuuuuuuuuuu_t)(uint32_t, uint64_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void (*vFuffffffffffff_t)(uint32_t, float, float, float, float, float, float, float, float, float, float, float, float); +typedef void (*vFXiLLLiiiiiiuu_t)(void*, int32_t, uintptr_t, uintptr_t, uintptr_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t); +typedef int32_t (*iFEXLLlliLppppp_t)(x64emu_t*, void*, uintptr_t, uintptr_t, intptr_t, intptr_t, int32_t, uintptr_t, void*, void*, void*, void*, void*); +typedef int32_t (*iFddddpppddpppp_t)(double, double, double, double, void*, void*, void*, double, double, void*, void*, void*, void*); +typedef int32_t (*iFXippuuuiipppp_t)(void*, int32_t, void*, void*, uint32_t, uint32_t, uint32_t, int32_t, int32_t, void*, void*, void*, void*); +typedef uint32_t (*uFippuuuulllipp_t)(int32_t, void*, void*, uint32_t, uint32_t, uint32_t, uint32_t, intptr_t, intptr_t, intptr_t, int32_t, void*, void*); +typedef uintptr_t (*LFEXLiiuuuiupLp_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, uint32_t, uint32_t, uint32_t, int32_t, uint32_t, void*, uintptr_t, void*); +typedef int32_t (*iFXLLlliiLBL_pBL_BL_Bp__t)(void*, uintptr_t, uintptr_t, intptr_t, intptr_t, int32_t, int32_t, uintptr_t, struct_L_t*, void*, struct_L_t*, struct_L_t*, struct_p_t*); +typedef void (*vFuffiiffiiffiip_t)(uint32_t, float, float, int32_t, int32_t, float, float, int32_t, int32_t, float, float, int32_t, int32_t, void*); +typedef void (*vFuddiiddiiddiip_t)(uint32_t, double, double, int32_t, int32_t, double, double, int32_t, int32_t, double, double, int32_t, int32_t, void*); +typedef void (*vFuiiiiiuiiiiilll_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, intptr_t, intptr_t, intptr_t); +typedef void (*vFuuiiiiuuiiiiiii_t)(uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFfffffffffffffff_t)(float, float, float, float, float, float, float, float, float, float, float, float, float, float, float); +typedef void (*vFuuuuiiiiuuiiiiiii_t)(uint32_t, uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef void (*vFXpuiiiiipuiiiiiiii_t)(void*, void*, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); +typedef uint32_t (*uFippuuuuiiiiuuiiiiiiiipp_t)(int32_t, void*, void*, uint32_t, uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*, void*); + +#if defined(HAVE_LD80BITS) +typedef long double (*DED_t)(long double); +typedef long double (*DEDD_t)(long double, long double); +typedef long double (*DEDp_t)(long double, void*); +typedef long double (*DEpBp_a_t)(void*, struct_p_t*, void*); +#endif + +#if !defined(HAVE_LD80BITS) +typedef double (*KEK_t)(double); +typedef double (*KEKK_t)(double, double); +typedef double (*KEKp_t)(double, void*); +typedef double (*KEpBp_a_t)(void*, struct_p_t*, void*); +#endif + +void vEv_32(x64emu_t *emu, uintptr_t fcn) { vEv_t fn = (vEv_t)fcn; errno = emu->libc_err; fn(); emu->libc_err = errno; } +void vFv_32(x64emu_t *emu, uintptr_t fcn) { vFv_t fn = (vFv_t)fcn; fn(); } +void vFc_32(x64emu_t *emu, uintptr_t fcn) { vFc_t fn = (vFc_t)fcn; fn(from_ptri(int8_t, R_ESP + 4)); } +void vFw_32(x64emu_t *emu, uintptr_t fcn) { vFw_t fn = (vFw_t)fcn; fn(from_ptri(int16_t, R_ESP + 4)); } +void vEi_32(x64emu_t *emu, uintptr_t fcn) { vEi_t fn = (vEi_t)fcn; errno = emu->libc_err; fn(from_ptri(int32_t, R_ESP + 4)); emu->libc_err = errno; } +void vFi_32(x64emu_t *emu, uintptr_t fcn) { vFi_t fn = (vFi_t)fcn; fn(from_ptri(int32_t, R_ESP + 4)); } +void vFC_32(x64emu_t *emu, uintptr_t fcn) { vFC_t fn = (vFC_t)fcn; fn(from_ptri(uint8_t, R_ESP + 4)); } +void vFW_32(x64emu_t *emu, uintptr_t fcn) { vFW_t fn = (vFW_t)fcn; fn(from_ptri(uint16_t, R_ESP + 4)); } +void vEu_32(x64emu_t *emu, uintptr_t fcn) { vEu_t fn = (vEu_t)fcn; errno = emu->libc_err; fn(from_ptri(uint32_t, R_ESP + 4)); emu->libc_err = errno; } +void vFu_32(x64emu_t *emu, uintptr_t fcn) { vFu_t fn = (vFu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4)); } +void vFU_32(x64emu_t *emu, uintptr_t fcn) { vFU_t fn = (vFU_t)fcn; fn(from_ptri(uint64_t, R_ESP + 4)); } +void vFf_32(x64emu_t *emu, uintptr_t fcn) { vFf_t fn = (vFf_t)fcn; fn(from_ptri(float, R_ESP + 4)); } +void vFd_32(x64emu_t *emu, uintptr_t fcn) { vFd_t fn = (vFd_t)fcn; fn(from_ptri(double, R_ESP + 4)); } +void vEl_32(x64emu_t *emu, uintptr_t fcn) { vEl_t fn = (vEl_t)fcn; errno = emu->libc_err; fn(from_long(from_ptri(long_t, R_ESP + 4))); emu->libc_err = errno; } +void vFl_32(x64emu_t *emu, uintptr_t fcn) { vFl_t fn = (vFl_t)fcn; fn(from_long(from_ptri(long_t, R_ESP + 4))); } +void vEp_32(x64emu_t *emu, uintptr_t fcn) { vEp_t fn = (vEp_t)fcn; errno = emu->libc_err; fn(from_ptriv(R_ESP + 4)); emu->libc_err = errno; } +void vFp_32(x64emu_t *emu, uintptr_t fcn) { vFp_t fn = (vFp_t)fcn; fn(from_ptriv(R_ESP + 4)); } +void vEA_32(x64emu_t *emu, uintptr_t fcn) { vEA_t fn = (vEA_t)fcn; errno = emu->libc_err; fn(from_locale_d(from_ptri(ptr_t, R_ESP + 4))); emu->libc_err = errno; } +void vES_32(x64emu_t *emu, uintptr_t fcn) { vES_t fn = (vES_t)fcn; errno = emu->libc_err; fn(io_convert32(from_ptriv(R_ESP + 4))); emu->libc_err = errno; } +void vFS_32(x64emu_t *emu, uintptr_t fcn) { vFS_t fn = (vFS_t)fcn; fn(io_convert32(from_ptriv(R_ESP + 4))); } +void vFX_32(x64emu_t *emu, uintptr_t fcn) { vFX_t fn = (vFX_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4))); } +void cFc_32(x64emu_t *emu, uintptr_t fcn) { cFc_t fn = (cFc_t)fcn; R_EAX = fn(from_ptri(int8_t, R_ESP + 4)); } +void cFi_32(x64emu_t *emu, uintptr_t fcn) { cFi_t fn = (cFi_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4)); } +void cFu_32(x64emu_t *emu, uintptr_t fcn) { cFu_t fn = (cFu_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4)); } +void cFp_32(x64emu_t *emu, uintptr_t fcn) { cFp_t fn = (cFp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4)); } +void wFp_32(x64emu_t *emu, uintptr_t fcn) { wFp_t fn = (wFp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4)); } +void iEv_32(x64emu_t *emu, uintptr_t fcn) { iEv_t fn = (iEv_t)fcn; errno = emu->libc_err; R_EAX = fn(); emu->libc_err = errno; } +void iFv_32(x64emu_t *emu, uintptr_t fcn) { iFv_t fn = (iFv_t)fcn; R_EAX = fn(); } +void iEi_32(x64emu_t *emu, uintptr_t fcn) { iEi_t fn = (iEi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4)); emu->libc_err = errno; } +void iFi_32(x64emu_t *emu, uintptr_t fcn) { iFi_t fn = (iFi_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4)); } +void iEI_32(x64emu_t *emu, uintptr_t fcn) { iEI_t fn = (iEI_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int64_t, R_ESP + 4)); emu->libc_err = errno; } +void iEu_32(x64emu_t *emu, uintptr_t fcn) { iEu_t fn = (iEu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4)); emu->libc_err = errno; } +void iFu_32(x64emu_t *emu, uintptr_t fcn) { iFu_t fn = (iFu_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4)); } +void iEf_32(x64emu_t *emu, uintptr_t fcn) { iEf_t fn = (iEf_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(float, R_ESP + 4)); emu->libc_err = errno; } +void iEd_32(x64emu_t *emu, uintptr_t fcn) { iEd_t fn = (iEd_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(double, R_ESP + 4)); emu->libc_err = errno; } +void iEl_32(x64emu_t *emu, uintptr_t fcn) { iEl_t fn = (iEl_t)fcn; errno = emu->libc_err; R_EAX = fn(from_long(from_ptri(long_t, R_ESP + 4))); emu->libc_err = errno; } +void iEL_32(x64emu_t *emu, uintptr_t fcn) { iEL_t fn = (iEL_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ulong(from_ptri(ulong_t, R_ESP + 4))); emu->libc_err = errno; } +void iEp_32(x64emu_t *emu, uintptr_t fcn) { iEp_t fn = (iEp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4)); emu->libc_err = errno; } +void iFp_32(x64emu_t *emu, uintptr_t fcn) { iFp_t fn = (iFp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4)); } +void iEh_32(x64emu_t *emu, uintptr_t fcn) { iEh_t fn = (iEh_t)fcn; errno = emu->libc_err; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4))); emu->libc_err = errno; } +void iES_32(x64emu_t *emu, uintptr_t fcn) { iES_t fn = (iES_t)fcn; errno = emu->libc_err; R_EAX = fn(io_convert32(from_ptriv(R_ESP + 4))); emu->libc_err = errno; } +void iFX_32(x64emu_t *emu, uintptr_t fcn) { iFX_t fn = (iFX_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4))); } +void IEf_32(x64emu_t *emu, uintptr_t fcn) { IEf_t fn = (IEf_t)fcn; errno = emu->libc_err; ui64_t r; r.i = fn(from_ptri(float, R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; emu->libc_err = errno; } +void IEd_32(x64emu_t *emu, uintptr_t fcn) { IEd_t fn = (IEd_t)fcn; errno = emu->libc_err; ui64_t r; r.i = fn(from_ptri(double, R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; emu->libc_err = errno; } +void IEp_32(x64emu_t *emu, uintptr_t fcn) { IEp_t fn = (IEp_t)fcn; errno = emu->libc_err; ui64_t r; r.i = fn(from_ptriv(R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; emu->libc_err = errno; } +void IFp_32(x64emu_t *emu, uintptr_t fcn) { IFp_t fn = (IFp_t)fcn; ui64_t r; r.i = fn(from_ptriv(R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void IES_32(x64emu_t *emu, uintptr_t fcn) { IES_t fn = (IES_t)fcn; errno = emu->libc_err; ui64_t r; r.i = fn(io_convert32(from_ptriv(R_ESP + 4))); R_EAX = r.d[0]; R_EDX = r.d[1]; emu->libc_err = errno; } +void CFv_32(x64emu_t *emu, uintptr_t fcn) { CFv_t fn = (CFv_t)fcn; R_EAX = (unsigned char)fn(); } +void CFi_32(x64emu_t *emu, uintptr_t fcn) { CFi_t fn = (CFi_t)fcn; R_EAX = (unsigned char)fn(from_ptri(int32_t, R_ESP + 4)); } +void CFu_32(x64emu_t *emu, uintptr_t fcn) { CFu_t fn = (CFu_t)fcn; R_EAX = (unsigned char)fn(from_ptri(uint32_t, R_ESP + 4)); } +void CFU_32(x64emu_t *emu, uintptr_t fcn) { CFU_t fn = (CFU_t)fcn; R_EAX = (unsigned char)fn(from_ptri(uint64_t, R_ESP + 4)); } +void CFl_32(x64emu_t *emu, uintptr_t fcn) { CFl_t fn = (CFl_t)fcn; R_EAX = (unsigned char)fn(from_long(from_ptri(long_t, R_ESP + 4))); } +void CFp_32(x64emu_t *emu, uintptr_t fcn) { CFp_t fn = (CFp_t)fcn; R_EAX = (unsigned char)fn(from_ptriv(R_ESP + 4)); } +void WFi_32(x64emu_t *emu, uintptr_t fcn) { WFi_t fn = (WFi_t)fcn; R_EAX = (unsigned short)fn(from_ptri(int32_t, R_ESP + 4)); } +void WEW_32(x64emu_t *emu, uintptr_t fcn) { WEW_t fn = (WEW_t)fcn; errno = emu->libc_err; R_EAX = (unsigned short)fn(from_ptri(uint16_t, R_ESP + 4)); emu->libc_err = errno; } +void WFu_32(x64emu_t *emu, uintptr_t fcn) { WFu_t fn = (WFu_t)fcn; R_EAX = (unsigned short)fn(from_ptri(uint32_t, R_ESP + 4)); } +void WFp_32(x64emu_t *emu, uintptr_t fcn) { WFp_t fn = (WFp_t)fcn; R_EAX = (unsigned short)fn(from_ptriv(R_ESP + 4)); } +void uEv_32(x64emu_t *emu, uintptr_t fcn) { uEv_t fn = (uEv_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(); emu->libc_err = errno; } +void uFv_32(x64emu_t *emu, uintptr_t fcn) { uFv_t fn = (uFv_t)fcn; R_EAX = (uint32_t)fn(); } +void uEi_32(x64emu_t *emu, uintptr_t fcn) { uEi_t fn = (uEi_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(from_ptri(int32_t, R_ESP + 4)); emu->libc_err = errno; } +void uFi_32(x64emu_t *emu, uintptr_t fcn) { uFi_t fn = (uFi_t)fcn; R_EAX = (uint32_t)fn(from_ptri(int32_t, R_ESP + 4)); } +void uEu_32(x64emu_t *emu, uintptr_t fcn) { uEu_t fn = (uEu_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4)); emu->libc_err = errno; } +void uFu_32(x64emu_t *emu, uintptr_t fcn) { uFu_t fn = (uFu_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4)); } +void uEU_32(x64emu_t *emu, uintptr_t fcn) { uEU_t fn = (uEU_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(from_ptri(uint64_t, R_ESP + 4)); emu->libc_err = errno; } +void uEp_32(x64emu_t *emu, uintptr_t fcn) { uEp_t fn = (uEp_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4)); emu->libc_err = errno; } +void uFp_32(x64emu_t *emu, uintptr_t fcn) { uFp_t fn = (uFp_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4)); } +void uES_32(x64emu_t *emu, uintptr_t fcn) { uES_t fn = (uES_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(io_convert32(from_ptriv(R_ESP + 4))); emu->libc_err = errno; } +void uFX_32(x64emu_t *emu, uintptr_t fcn) { uFX_t fn = (uFX_t)fcn; R_EAX = (uint32_t)fn(getDisplay(from_ptriv(R_ESP + 4))); } +void UFv_32(x64emu_t *emu, uintptr_t fcn) { UFv_t fn = (UFv_t)fcn; ui64_t r; r.u = (uint64_t)fn(); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void UFi_32(x64emu_t *emu, uintptr_t fcn) { UFi_t fn = (UFi_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptri(int32_t, R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void UFu_32(x64emu_t *emu, uintptr_t fcn) { UFu_t fn = (UFu_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptri(uint32_t, R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void UEp_32(x64emu_t *emu, uintptr_t fcn) { UEp_t fn = (UEp_t)fcn; errno = emu->libc_err; ui64_t r; r.u = (uint64_t)fn(from_ptriv(R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; emu->libc_err = errno; } +void UFp_32(x64emu_t *emu, uintptr_t fcn) { UFp_t fn = (UFp_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptriv(R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void UEs_32(x64emu_t *emu, uintptr_t fcn) { UEs_t fn = (UEs_t)fcn; errno = emu->libc_err; ui64_t r; r.u = (uint64_t)fn(from_ptrv(R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; emu->libc_err = errno; } +void fFi_32(x64emu_t *emu, uintptr_t fcn) { fFi_t fn = (fFi_t)fcn; float fl = fn(from_ptri(int32_t, R_ESP + 4)); fpu_do_push(emu); ST0val = fl; } +void fEf_32(x64emu_t *emu, uintptr_t fcn) { fEf_t fn = (fEf_t)fcn; errno = emu->libc_err; float fl = fn(from_ptri(float, R_ESP + 4)); fpu_do_push(emu); ST0val = fl; emu->libc_err = errno; } +void fFf_32(x64emu_t *emu, uintptr_t fcn) { fFf_t fn = (fFf_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4)); fpu_do_push(emu); ST0val = fl; } +void dEv_32(x64emu_t *emu, uintptr_t fcn) { dEv_t fn = (dEv_t)fcn; errno = emu->libc_err; double db = fn(); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void dFi_32(x64emu_t *emu, uintptr_t fcn) { dFi_t fn = (dFi_t)fcn; double db = fn(from_ptri(int32_t, R_ESP + 4)); fpu_do_push(emu); ST0val = db; } +void dEd_32(x64emu_t *emu, uintptr_t fcn) { dEd_t fn = (dEd_t)fcn; errno = emu->libc_err; double db = fn(from_ptri(double, R_ESP + 4)); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void dFd_32(x64emu_t *emu, uintptr_t fcn) { dFd_t fn = (dFd_t)fcn; double db = fn(from_ptri(double, R_ESP + 4)); fpu_do_push(emu); ST0val = db; } +void dEp_32(x64emu_t *emu, uintptr_t fcn) { dEp_t fn = (dEp_t)fcn; errno = emu->libc_err; double db = fn(from_ptriv(R_ESP + 4)); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void dFp_32(x64emu_t *emu, uintptr_t fcn) { dFp_t fn = (dFp_t)fcn; double db = fn(from_ptriv(R_ESP + 4)); fpu_do_push(emu); ST0val = db; } +void lEv_32(x64emu_t *emu, uintptr_t fcn) { lEv_t fn = (lEv_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn()); emu->libc_err = errno; } +void lFu_32(x64emu_t *emu, uintptr_t fcn) { lFu_t fn = (lFu_t)fcn; R_EAX = to_long(fn(from_ptri(uint32_t, R_ESP + 4))); } +void lEl_32(x64emu_t *emu, uintptr_t fcn) { lEl_t fn = (lEl_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_long(from_ptri(long_t, R_ESP + 4)))); emu->libc_err = errno; } +void lFl_32(x64emu_t *emu, uintptr_t fcn) { lFl_t fn = (lFl_t)fcn; R_EAX = to_long(fn(from_long(from_ptri(long_t, R_ESP + 4)))); } +void lEp_32(x64emu_t *emu, uintptr_t fcn) { lEp_t fn = (lEp_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptriv(R_ESP + 4))); emu->libc_err = errno; } +void lFp_32(x64emu_t *emu, uintptr_t fcn) { lFp_t fn = (lFp_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4))); } +void lES_32(x64emu_t *emu, uintptr_t fcn) { lES_t fn = (lES_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(io_convert32(from_ptriv(R_ESP + 4)))); emu->libc_err = errno; } +void lFX_32(x64emu_t *emu, uintptr_t fcn) { lFX_t fn = (lFX_t)fcn; R_EAX = to_long(fn(getDisplay(from_ptriv(R_ESP + 4)))); } +void LEv_32(x64emu_t *emu, uintptr_t fcn) { LEv_t fn = (LEv_t)fcn; errno = emu->libc_err; R_EAX = to_ulong(fn()); emu->libc_err = errno; } +void LFv_32(x64emu_t *emu, uintptr_t fcn) { LFv_t fn = (LFv_t)fcn; R_EAX = to_ulong(fn()); } +void LEL_32(x64emu_t *emu, uintptr_t fcn) { LEL_t fn = (LEL_t)fcn; errno = emu->libc_err; R_EAX = to_ulong(fn(from_ulong(from_ptri(ulong_t, R_ESP + 4)))); emu->libc_err = errno; } +void LEp_32(x64emu_t *emu, uintptr_t fcn) { LEp_t fn = (LEp_t)fcn; errno = emu->libc_err; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4))); emu->libc_err = errno; } +void LFp_32(x64emu_t *emu, uintptr_t fcn) { LFp_t fn = (LFp_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4))); } +void LFX_32(x64emu_t *emu, uintptr_t fcn) { LFX_t fn = (LFX_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)))); } +void pEv_32(x64emu_t *emu, uintptr_t fcn) { pEv_t fn = (pEv_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn()); emu->libc_err = errno; } +void pFv_32(x64emu_t *emu, uintptr_t fcn) { pFv_t fn = (pFv_t)fcn; R_EAX = to_ptrv(fn()); } +void pEi_32(x64emu_t *emu, uintptr_t fcn) { pEi_t fn = (pEi_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4))); emu->libc_err = errno; } +void pFi_32(x64emu_t *emu, uintptr_t fcn) { pFi_t fn = (pFi_t)fcn; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4))); } +void pEu_32(x64emu_t *emu, uintptr_t fcn) { pEu_t fn = (pEu_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4))); emu->libc_err = errno; } +void pFu_32(x64emu_t *emu, uintptr_t fcn) { pFu_t fn = (pFu_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4))); } +void pEl_32(x64emu_t *emu, uintptr_t fcn) { pEl_t fn = (pEl_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_long(from_ptri(long_t, R_ESP + 4)))); emu->libc_err = errno; } +void pFl_32(x64emu_t *emu, uintptr_t fcn) { pFl_t fn = (pFl_t)fcn; R_EAX = to_ptrv(fn(from_long(from_ptri(long_t, R_ESP + 4)))); } +void pEL_32(x64emu_t *emu, uintptr_t fcn) { pEL_t fn = (pEL_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ulong(from_ptri(ulong_t, R_ESP + 4)))); emu->libc_err = errno; } +void pFL_32(x64emu_t *emu, uintptr_t fcn) { pFL_t fn = (pFL_t)fcn; R_EAX = to_ptrv(fn(from_ulong(from_ptri(ulong_t, R_ESP + 4)))); } +void pEp_32(x64emu_t *emu, uintptr_t fcn) { pEp_t fn = (pEp_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4))); emu->libc_err = errno; } +void pFp_32(x64emu_t *emu, uintptr_t fcn) { pFp_t fn = (pFp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4))); } +void pFX_32(x64emu_t *emu, uintptr_t fcn) { pFX_t fn = (pFX_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)))); } +void hEv_32(x64emu_t *emu, uintptr_t fcn) { hEv_t fn = (hEv_t)fcn; errno = emu->libc_err; R_EAX = to_hash(fn()); emu->libc_err = errno; } +void hFv_32(x64emu_t *emu, uintptr_t fcn) { hFv_t fn = (hFv_t)fcn; R_EAX = to_hash(fn()); } +void aEa_32(x64emu_t *emu, uintptr_t fcn) { aEa_t fn = (aEa_t)fcn; errno = emu->libc_err; R_EAX = to_locale(fn(from_locale(from_ptri(ptr_t, R_ESP + 4)))); emu->libc_err = errno; } +void tEi_32(x64emu_t *emu, uintptr_t fcn) { tEi_t fn = (tEi_t)fcn; errno = emu->libc_err; R_EAX = to_cstring(fn(from_ptri(int32_t, R_ESP + 4))); emu->libc_err = errno; } +void tEu_32(x64emu_t *emu, uintptr_t fcn) { tEu_t fn = (tEu_t)fcn; errno = emu->libc_err; R_EAX = to_cstring(fn(from_ptri(uint32_t, R_ESP + 4))); emu->libc_err = errno; } +void tEp_32(x64emu_t *emu, uintptr_t fcn) { tEp_t fn = (tEp_t)fcn; errno = emu->libc_err; R_EAX = to_cstring(fn(from_ptriv(R_ESP + 4))); emu->libc_err = errno; } +void tFp_32(x64emu_t *emu, uintptr_t fcn) { tFp_t fn = (tFp_t)fcn; R_EAX = to_cstring(fn(from_ptriv(R_ESP + 4))); } +void XFv_32(x64emu_t *emu, uintptr_t fcn) { XFv_t fn = (XFv_t)fcn; R_EAX = to_ptrv(addDisplay(fn())); } +void XFp_32(x64emu_t *emu, uintptr_t fcn) { XFp_t fn = (XFp_t)fcn; R_EAX = to_ptrv(addDisplay(fn(from_ptriv(R_ESP + 4)))); } +void vFbp__32(x64emu_t *emu, uintptr_t fcn) { vFbp__t fn = (vFbp__t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFbp__32(x64emu_t *emu, uintptr_t fcn) { iFbp__t fn = (iFbp__t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFBp__32(x64emu_t *emu, uintptr_t fcn) { iFBp__t fn = (iFBp__t)fcn; struct_p_t arg_4={0}; R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void LErl__32(x64emu_t *emu, uintptr_t fcn) { LErl__t fn = (LErl__t)fcn; errno = emu->libc_err; struct_l_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_l(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_ulong(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL)); emu->libc_err = errno; } +void pErl__32(x64emu_t *emu, uintptr_t fcn) { pErl__t fn = (pErl__t)fcn; errno = emu->libc_err; struct_l_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_l(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_ptrv(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL)); emu->libc_err = errno; } +void lFrll__32(x64emu_t *emu, uintptr_t fcn) { lFrll__t fn = (lFrll__t)fcn; struct_ll_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_ll(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_long(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL)); } +void iEBllll__32(x64emu_t *emu, uintptr_t fcn) { iEBllll__t fn = (iEBllll__t)fcn; errno = emu->libc_err; struct_llll_t arg_4={0}; R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_llll(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); emu->libc_err = errno; } +void vFbuuipWCCp__32(x64emu_t *emu, uintptr_t fcn) { vFbuuipWCCp__t fn = (vFbuuipWCCp__t)fcn; struct_uuipWCCp_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_uuipWCCp(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_uuipWCCp(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void vFbWWpWpWpWp__32(x64emu_t *emu, uintptr_t fcn) { vFbWWpWpWpWp__t fn = (vFbWWpWpWpWp__t)fcn; struct_WWpWpWpWp_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_WWpWpWpWp(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_WWpWpWpWp(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void LEbiiiiiiiiilt__32(x64emu_t *emu, uintptr_t fcn) { LEbiiiiiiiiilt__t fn = (LEbiiiiiiiiilt__t)fcn; errno = emu->libc_err; struct_iiiiiiiiilt_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_iiiiiiiiilt(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_ulong(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_iiiiiiiiilt(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); emu->libc_err = errno; } +void LEriiiiiiiiilt__32(x64emu_t *emu, uintptr_t fcn) { LEriiiiiiiiilt__t fn = (LEriiiiiiiiilt__t)fcn; errno = emu->libc_err; struct_iiiiiiiiilt_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_iiiiiiiiilt(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_ulong(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL)); emu->libc_err = errno; } +void pEriiiiiiiiilt__32(x64emu_t *emu, uintptr_t fcn) { pEriiiiiiiiilt__t fn = (pEriiiiiiiiilt__t)fcn; errno = emu->libc_err; struct_iiiiiiiiilt_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_iiiiiiiiilt(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_ptrv(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL)); emu->libc_err = errno; } +void vEEv_32(x64emu_t *emu, uintptr_t fcn) { vEEv_t fn = (vEEv_t)fcn; errno = emu->libc_err; fn(emu); emu->libc_err = errno; } +void vFEv_32(x64emu_t *emu, uintptr_t fcn) { vFEv_t fn = (vFEv_t)fcn; fn(emu); } +void vEEp_32(x64emu_t *emu, uintptr_t fcn) { vEEp_t fn = (vEEp_t)fcn; errno = emu->libc_err; fn(emu, from_ptriv(R_ESP + 4)); emu->libc_err = errno; } +void vFEp_32(x64emu_t *emu, uintptr_t fcn) { vFEp_t fn = (vFEp_t)fcn; fn(emu, from_ptriv(R_ESP + 4)); } +void vFEX_32(x64emu_t *emu, uintptr_t fcn) { vFEX_t fn = (vFEX_t)fcn; fn(emu, getDisplay(from_ptriv(R_ESP + 4))); } +void vFcc_32(x64emu_t *emu, uintptr_t fcn) { vFcc_t fn = (vFcc_t)fcn; fn(from_ptri(int8_t, R_ESP + 4), from_ptri(int8_t, R_ESP + 8)); } +void vFww_32(x64emu_t *emu, uintptr_t fcn) { vFww_t fn = (vFww_t)fcn; fn(from_ptri(int16_t, R_ESP + 4), from_ptri(int16_t, R_ESP + 8)); } +void vFii_32(x64emu_t *emu, uintptr_t fcn) { vFii_t fn = (vFii_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void vFiI_32(x64emu_t *emu, uintptr_t fcn) { vFiI_t fn = (vFiI_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8)); } +void vFiW_32(x64emu_t *emu, uintptr_t fcn) { vFiW_t fn = (vFiW_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint16_t, R_ESP + 8)); } +void vFiu_32(x64emu_t *emu, uintptr_t fcn) { vFiu_t fn = (vFiu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void vFiU_32(x64emu_t *emu, uintptr_t fcn) { vFiU_t fn = (vFiU_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8)); } +void vFif_32(x64emu_t *emu, uintptr_t fcn) { vFif_t fn = (vFif_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(float, R_ESP + 8)); } +void vFid_32(x64emu_t *emu, uintptr_t fcn) { vFid_t fn = (vFid_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(double, R_ESP + 8)); } +void vFip_32(x64emu_t *emu, uintptr_t fcn) { vFip_t fn = (vFip_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void vFWW_32(x64emu_t *emu, uintptr_t fcn) { vFWW_t fn = (vFWW_t)fcn; fn(from_ptri(uint16_t, R_ESP + 4), from_ptri(uint16_t, R_ESP + 8)); } +void vFuc_32(x64emu_t *emu, uintptr_t fcn) { vFuc_t fn = (vFuc_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int8_t, R_ESP + 8)); } +void vFuw_32(x64emu_t *emu, uintptr_t fcn) { vFuw_t fn = (vFuw_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int16_t, R_ESP + 8)); } +void vFui_32(x64emu_t *emu, uintptr_t fcn) { vFui_t fn = (vFui_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void vFuI_32(x64emu_t *emu, uintptr_t fcn) { vFuI_t fn = (vFuI_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8)); } +void vFuC_32(x64emu_t *emu, uintptr_t fcn) { vFuC_t fn = (vFuC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8)); } +void vFuW_32(x64emu_t *emu, uintptr_t fcn) { vFuW_t fn = (vFuW_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint16_t, R_ESP + 8)); } +void vFuu_32(x64emu_t *emu, uintptr_t fcn) { vFuu_t fn = (vFuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void vFuU_32(x64emu_t *emu, uintptr_t fcn) { vFuU_t fn = (vFuU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8)); } +void vFuf_32(x64emu_t *emu, uintptr_t fcn) { vFuf_t fn = (vFuf_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8)); } +void vFud_32(x64emu_t *emu, uintptr_t fcn) { vFud_t fn = (vFud_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(double, R_ESP + 8)); } +void vFul_32(x64emu_t *emu, uintptr_t fcn) { vFul_t fn = (vFul_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8))); } +void vFup_32(x64emu_t *emu, uintptr_t fcn) { vFup_t fn = (vFup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void vFUu_32(x64emu_t *emu, uintptr_t fcn) { vFUu_t fn = (vFUu_t)fcn; fn(from_ptri(uint64_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 12)); } +void vFfC_32(x64emu_t *emu, uintptr_t fcn) { vFfC_t fn = (vFfC_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8)); } +void vFff_32(x64emu_t *emu, uintptr_t fcn) { vFff_t fn = (vFff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8)); } +void vFdd_32(x64emu_t *emu, uintptr_t fcn) { vFdd_t fn = (vFdd_t)fcn; fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12)); } +void vFlu_32(x64emu_t *emu, uintptr_t fcn) { vFlu_t fn = (vFlu_t)fcn; fn(from_long(from_ptri(long_t, R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8)); } +void vFlp_32(x64emu_t *emu, uintptr_t fcn) { vFlp_t fn = (vFlp_t)fcn; fn(from_long(from_ptri(long_t, R_ESP + 4)), from_ptriv(R_ESP + 8)); } +void vEpi_32(x64emu_t *emu, uintptr_t fcn) { vEpi_t fn = (vEpi_t)fcn; errno = emu->libc_err; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); emu->libc_err = errno; } +void vFpi_32(x64emu_t *emu, uintptr_t fcn) { vFpi_t fn = (vFpi_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void vFpC_32(x64emu_t *emu, uintptr_t fcn) { vFpC_t fn = (vFpC_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint8_t, R_ESP + 8)); } +void vFpu_32(x64emu_t *emu, uintptr_t fcn) { vFpu_t fn = (vFpu_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void vFpl_32(x64emu_t *emu, uintptr_t fcn) { vFpl_t fn = (vFpl_t)fcn; fn(from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8))); } +void vEpL_32(x64emu_t *emu, uintptr_t fcn) { vEpL_t fn = (vEpL_t)fcn; errno = emu->libc_err; fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8))); emu->libc_err = errno; } +void vFpL_32(x64emu_t *emu, uintptr_t fcn) { vFpL_t fn = (vFpL_t)fcn; fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8))); } +void vEpp_32(x64emu_t *emu, uintptr_t fcn) { vEpp_t fn = (vEpp_t)fcn; errno = emu->libc_err; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); emu->libc_err = errno; } +void vFpp_32(x64emu_t *emu, uintptr_t fcn) { vFpp_t fn = (vFpp_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); } +void vESp_32(x64emu_t *emu, uintptr_t fcn) { vESp_t fn = (vESp_t)fcn; errno = emu->libc_err; fn(io_convert32(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8)); emu->libc_err = errno; } +void vFXi_32(x64emu_t *emu, uintptr_t fcn) { vFXi_t fn = (vFXi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8)); } +void vFXL_32(x64emu_t *emu, uintptr_t fcn) { vFXL_t fn = (vFXL_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8))); } +void vFXp_32(x64emu_t *emu, uintptr_t fcn) { vFXp_t fn = (vFXp_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8)); } +void cFpp_32(x64emu_t *emu, uintptr_t fcn) { cFpp_t fn = (cFpp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); } +void wFpi_32(x64emu_t *emu, uintptr_t fcn) { wFpi_t fn = (wFpi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void iEEv_32(x64emu_t *emu, uintptr_t fcn) { iEEv_t fn = (iEEv_t)fcn; errno = emu->libc_err; R_EAX = fn(emu); emu->libc_err = errno; } +void iEEi_32(x64emu_t *emu, uintptr_t fcn) { iEEi_t fn = (iEEi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4)); emu->libc_err = errno; } +void iEEL_32(x64emu_t *emu, uintptr_t fcn) { iEEL_t fn = (iEEL_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ulong(from_ptri(ulong_t, R_ESP + 4))); emu->libc_err = errno; } +void iEEp_32(x64emu_t *emu, uintptr_t fcn) { iEEp_t fn = (iEEp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4)); emu->libc_err = errno; } +void iFEp_32(x64emu_t *emu, uintptr_t fcn) { iFEp_t fn = (iFEp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4)); } +void iEEh_32(x64emu_t *emu, uintptr_t fcn) { iEEh_t fn = (iEEh_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_hash(from_ptri(ptr_t, R_ESP + 4))); emu->libc_err = errno; } +void iEEO_32(x64emu_t *emu, uintptr_t fcn) { iEEO_t fn = (iEEO_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, of_convert32(from_ptri(int32_t, R_ESP + 4))); emu->libc_err = errno; } +void iFEX_32(x64emu_t *emu, uintptr_t fcn) { iFEX_t fn = (iFEX_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4))); } +void iEii_32(x64emu_t *emu, uintptr_t fcn) { iEii_t fn = (iEii_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); emu->libc_err = errno; } +void iFii_32(x64emu_t *emu, uintptr_t fcn) { iFii_t fn = (iFii_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void iEiI_32(x64emu_t *emu, uintptr_t fcn) { iEiI_t fn = (iEiI_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8)); emu->libc_err = errno; } +void iEiu_32(x64emu_t *emu, uintptr_t fcn) { iEiu_t fn = (iEiu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); emu->libc_err = errno; } +void iFiu_32(x64emu_t *emu, uintptr_t fcn) { iFiu_t fn = (iFiu_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void iEil_32(x64emu_t *emu, uintptr_t fcn) { iEil_t fn = (iEil_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8))); emu->libc_err = errno; } +void iEip_32(x64emu_t *emu, uintptr_t fcn) { iEip_t fn = (iEip_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); emu->libc_err = errno; } +void iFip_32(x64emu_t *emu, uintptr_t fcn) { iFip_t fn = (iFip_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iEiS_32(x64emu_t *emu, uintptr_t fcn) { iEiS_t fn = (iEiS_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), io_convert32(from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void iEui_32(x64emu_t *emu, uintptr_t fcn) { iEui_t fn = (iEui_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); emu->libc_err = errno; } +void iFui_32(x64emu_t *emu, uintptr_t fcn) { iFui_t fn = (iFui_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void iEuu_32(x64emu_t *emu, uintptr_t fcn) { iEuu_t fn = (iEuu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); emu->libc_err = errno; } +void iEuL_32(x64emu_t *emu, uintptr_t fcn) { iEuL_t fn = (iEuL_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8))); emu->libc_err = errno; } +void iEup_32(x64emu_t *emu, uintptr_t fcn) { iEup_t fn = (iEup_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); emu->libc_err = errno; } +void iFup_32(x64emu_t *emu, uintptr_t fcn) { iFup_t fn = (iFup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iEua_32(x64emu_t *emu, uintptr_t fcn) { iEua_t fn = (iEua_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_locale(from_ptri(ptr_t, R_ESP + 8))); emu->libc_err = errno; } +void iFpw_32(x64emu_t *emu, uintptr_t fcn) { iFpw_t fn = (iFpw_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int16_t, R_ESP + 8)); } +void iEpi_32(x64emu_t *emu, uintptr_t fcn) { iEpi_t fn = (iEpi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); emu->libc_err = errno; } +void iFpi_32(x64emu_t *emu, uintptr_t fcn) { iFpi_t fn = (iFpi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void iFpI_32(x64emu_t *emu, uintptr_t fcn) { iFpI_t fn = (iFpI_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int64_t, R_ESP + 8)); } +void iEpu_32(x64emu_t *emu, uintptr_t fcn) { iEpu_t fn = (iEpu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); emu->libc_err = errno; } +void iFpu_32(x64emu_t *emu, uintptr_t fcn) { iFpu_t fn = (iFpu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void iFpU_32(x64emu_t *emu, uintptr_t fcn) { iFpU_t fn = (iFpU_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint64_t, R_ESP + 8)); } +void iFpf_32(x64emu_t *emu, uintptr_t fcn) { iFpf_t fn = (iFpf_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(float, R_ESP + 8)); } +void iFpd_32(x64emu_t *emu, uintptr_t fcn) { iFpd_t fn = (iFpd_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(double, R_ESP + 8)); } +void iFpl_32(x64emu_t *emu, uintptr_t fcn) { iFpl_t fn = (iFpl_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8))); } +void iEpL_32(x64emu_t *emu, uintptr_t fcn) { iEpL_t fn = (iEpL_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8))); emu->libc_err = errno; } +void iFpL_32(x64emu_t *emu, uintptr_t fcn) { iFpL_t fn = (iFpL_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8))); } +void iEpp_32(x64emu_t *emu, uintptr_t fcn) { iEpp_t fn = (iEpp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); emu->libc_err = errno; } +void iFpp_32(x64emu_t *emu, uintptr_t fcn) { iFpp_t fn = (iFpp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iEpV_32(x64emu_t *emu, uintptr_t fcn) { iEpV_t fn = (iEpV_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptrv(R_ESP + 8)); emu->libc_err = errno; } +void iEpO_32(x64emu_t *emu, uintptr_t fcn) { iEpO_t fn = (iEpO_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), of_convert32(from_ptri(int32_t, R_ESP + 8))); emu->libc_err = errno; } +void iEpS_32(x64emu_t *emu, uintptr_t fcn) { iEpS_t fn = (iEpS_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), io_convert32(from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void iEhi_32(x64emu_t *emu, uintptr_t fcn) { iEhi_t fn = (iEhi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4)), from_ptri(int32_t, R_ESP + 8)); emu->libc_err = errno; } +void iEhp_32(x64emu_t *emu, uintptr_t fcn) { iEhp_t fn = (iEhp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4)), from_ptriv(R_ESP + 8)); emu->libc_err = errno; } +void iEhh_32(x64emu_t *emu, uintptr_t fcn) { iEhh_t fn = (iEhh_t)fcn; errno = emu->libc_err; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4)), from_hash(from_ptri(ptr_t, R_ESP + 8))); emu->libc_err = errno; } +void iESi_32(x64emu_t *emu, uintptr_t fcn) { iESi_t fn = (iESi_t)fcn; errno = emu->libc_err; R_EAX = fn(io_convert32(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8)); emu->libc_err = errno; } +void iESU_32(x64emu_t *emu, uintptr_t fcn) { iESU_t fn = (iESU_t)fcn; errno = emu->libc_err; R_EAX = fn(io_convert32(from_ptriv(R_ESP + 4)), from_ptri(uint64_t, R_ESP + 8)); emu->libc_err = errno; } +void iESp_32(x64emu_t *emu, uintptr_t fcn) { iESp_t fn = (iESp_t)fcn; errno = emu->libc_err; R_EAX = fn(io_convert32(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8)); emu->libc_err = errno; } +void iFXi_32(x64emu_t *emu, uintptr_t fcn) { iFXi_t fn = (iFXi_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8)); } +void iFXW_32(x64emu_t *emu, uintptr_t fcn) { iFXW_t fn = (iFXW_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint16_t, R_ESP + 8)); } +void iFXL_32(x64emu_t *emu, uintptr_t fcn) { iFXL_t fn = (iFXL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8))); } +void iFXp_32(x64emu_t *emu, uintptr_t fcn) { iFXp_t fn = (iFXp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8)); } +void IFEp_32(x64emu_t *emu, uintptr_t fcn) { IFEp_t fn = (IFEp_t)fcn; ui64_t r; r.i = fn(emu, from_ptriv(R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void IEII_32(x64emu_t *emu, uintptr_t fcn) { IEII_t fn = (IEII_t)fcn; errno = emu->libc_err; ui64_t r; r.i = fn(from_ptri(int64_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 12)); R_EAX = r.d[0]; R_EDX = r.d[1]; emu->libc_err = errno; } +void IFpu_32(x64emu_t *emu, uintptr_t fcn) { IFpu_t fn = (IFpu_t)fcn; ui64_t r; r.i = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void CFip_32(x64emu_t *emu, uintptr_t fcn) { CFip_t fn = (CFip_t)fcn; R_EAX = (unsigned char)fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void CFCi_32(x64emu_t *emu, uintptr_t fcn) { CFCi_t fn = (CFCi_t)fcn; R_EAX = (unsigned char)fn(from_ptri(uint8_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void CFui_32(x64emu_t *emu, uintptr_t fcn) { CFui_t fn = (CFui_t)fcn; R_EAX = (unsigned char)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void CFuu_32(x64emu_t *emu, uintptr_t fcn) { CFuu_t fn = (CFuu_t)fcn; R_EAX = (unsigned char)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void CFuU_32(x64emu_t *emu, uintptr_t fcn) { CFuU_t fn = (CFuU_t)fcn; R_EAX = (unsigned char)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8)); } +void CFpi_32(x64emu_t *emu, uintptr_t fcn) { CFpi_t fn = (CFpi_t)fcn; R_EAX = (unsigned char)fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void CFpu_32(x64emu_t *emu, uintptr_t fcn) { CFpu_t fn = (CFpu_t)fcn; R_EAX = (unsigned char)fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void CFpp_32(x64emu_t *emu, uintptr_t fcn) { CFpp_t fn = (CFpp_t)fcn; R_EAX = (unsigned char)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); } +void CFXL_32(x64emu_t *emu, uintptr_t fcn) { CFXL_t fn = (CFXL_t)fcn; R_EAX = (unsigned char)fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8))); } +void WFpp_32(x64emu_t *emu, uintptr_t fcn) { WFpp_t fn = (WFpp_t)fcn; R_EAX = (unsigned short)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); } +void uFEp_32(x64emu_t *emu, uintptr_t fcn) { uFEp_t fn = (uFEp_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptriv(R_ESP + 4)); } +void uFii_32(x64emu_t *emu, uintptr_t fcn) { uFii_t fn = (uFii_t)fcn; R_EAX = (uint32_t)fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void uEiS_32(x64emu_t *emu, uintptr_t fcn) { uEiS_t fn = (uEiS_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(from_ptri(int32_t, R_ESP + 4), io_convert32(from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void uFuu_32(x64emu_t *emu, uintptr_t fcn) { uFuu_t fn = (uFuu_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void uFup_32(x64emu_t *emu, uintptr_t fcn) { uFup_t fn = (uFup_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void uEua_32(x64emu_t *emu, uintptr_t fcn) { uEua_t fn = (uEua_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_locale(from_ptri(ptr_t, R_ESP + 8))); emu->libc_err = errno; } +void uEuS_32(x64emu_t *emu, uintptr_t fcn) { uEuS_t fn = (uEuS_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), io_convert32(from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void uFpi_32(x64emu_t *emu, uintptr_t fcn) { uFpi_t fn = (uFpi_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void uFpu_32(x64emu_t *emu, uintptr_t fcn) { uFpu_t fn = (uFpu_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void uFpp_32(x64emu_t *emu, uintptr_t fcn) { uFpp_t fn = (uFpp_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); } +void uFXL_32(x64emu_t *emu, uintptr_t fcn) { uFXL_t fn = (uFXL_t)fcn; R_EAX = (uint32_t)fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8))); } +void UEuu_32(x64emu_t *emu, uintptr_t fcn) { UEuu_t fn = (UEuu_t)fcn; errno = emu->libc_err; ui64_t r; r.u = (uint64_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); R_EAX = r.d[0]; R_EDX = r.d[1]; emu->libc_err = errno; } +void UFuu_32(x64emu_t *emu, uintptr_t fcn) { UFuu_t fn = (UFuu_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void UEUU_32(x64emu_t *emu, uintptr_t fcn) { UEUU_t fn = (UEUU_t)fcn; errno = emu->libc_err; ui64_t r; r.u = (uint64_t)fn(from_ptri(uint64_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 12)); R_EAX = r.d[0]; R_EDX = r.d[1]; emu->libc_err = errno; } +void UEss_32(x64emu_t *emu, uintptr_t fcn) { UEss_t fn = (UEss_t)fcn; errno = emu->libc_err; ui64_t r; r.u = (uint64_t)fn(from_ptrv(R_ESP + 4), from_ptrv(R_ESP + 4)); R_EAX = r.d[0]; R_EDX = r.d[1]; emu->libc_err = errno; } +void fEif_32(x64emu_t *emu, uintptr_t fcn) { fEif_t fn = (fEif_t)fcn; errno = emu->libc_err; float fl = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(float, R_ESP + 8)); fpu_do_push(emu); ST0val = fl; emu->libc_err = errno; } +void fEfi_32(x64emu_t *emu, uintptr_t fcn) { fEfi_t fn = (fEfi_t)fcn; errno = emu->libc_err; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); fpu_do_push(emu); ST0val = fl; emu->libc_err = errno; } +void fFfi_32(x64emu_t *emu, uintptr_t fcn) { fFfi_t fn = (fFfi_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); fpu_do_push(emu); ST0val = fl; } +void fEff_32(x64emu_t *emu, uintptr_t fcn) { fEff_t fn = (fEff_t)fcn; errno = emu->libc_err; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8)); fpu_do_push(emu); ST0val = fl; emu->libc_err = errno; } +void fFff_32(x64emu_t *emu, uintptr_t fcn) { fFff_t fn = (fFff_t)fcn; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8)); fpu_do_push(emu); ST0val = fl; } +void fEfD_32(x64emu_t *emu, uintptr_t fcn) { fEfD_t fn = (fEfD_t)fcn; errno = emu->libc_err; float fl = fn(from_ptri(float, R_ESP + 4), LD2localLD(from_ptrv(R_ESP + 8))); fpu_do_push(emu); ST0val = fl; emu->libc_err = errno; } +void fEfp_32(x64emu_t *emu, uintptr_t fcn) { fEfp_t fn = (fEfp_t)fcn; errno = emu->libc_err; float fl = fn(from_ptri(float, R_ESP + 4), from_ptriv(R_ESP + 8)); fpu_do_push(emu); ST0val = fl; emu->libc_err = errno; } +void dEid_32(x64emu_t *emu, uintptr_t fcn) { dEid_t fn = (dEid_t)fcn; errno = emu->libc_err; double db = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(double, R_ESP + 8)); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void dEdi_32(x64emu_t *emu, uintptr_t fcn) { dEdi_t fn = (dEdi_t)fcn; errno = emu->libc_err; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(int32_t, R_ESP + 12)); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void dFdi_32(x64emu_t *emu, uintptr_t fcn) { dFdi_t fn = (dFdi_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(int32_t, R_ESP + 12)); fpu_do_push(emu); ST0val = db; } +void dEdd_32(x64emu_t *emu, uintptr_t fcn) { dEdd_t fn = (dEdd_t)fcn; errno = emu->libc_err; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12)); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void dFdd_32(x64emu_t *emu, uintptr_t fcn) { dFdd_t fn = (dFdd_t)fcn; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12)); fpu_do_push(emu); ST0val = db; } +void dEdD_32(x64emu_t *emu, uintptr_t fcn) { dEdD_t fn = (dEdD_t)fcn; errno = emu->libc_err; double db = fn(from_ptri(double, R_ESP + 4), LD2localLD(from_ptrv(R_ESP + 12))); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void dEdp_32(x64emu_t *emu, uintptr_t fcn) { dEdp_t fn = (dEdp_t)fcn; errno = emu->libc_err; double db = fn(from_ptri(double, R_ESP + 4), from_ptriv(R_ESP + 12)); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void dEll_32(x64emu_t *emu, uintptr_t fcn) { dEll_t fn = (dEll_t)fcn; errno = emu->libc_err; double db = fn(from_long(from_ptri(long_t, R_ESP + 4)), from_long(from_ptri(long_t, R_ESP + 8))); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void dFpp_32(x64emu_t *emu, uintptr_t fcn) { dFpp_t fn = (dFpp_t)fcn; double db = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); fpu_do_push(emu); ST0val = db; } +void lEEi_32(x64emu_t *emu, uintptr_t fcn) { lEEi_t fn = (lEEi_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(emu, from_ptri(int32_t, R_ESP + 4))); emu->libc_err = errno; } +void lEEV_32(x64emu_t *emu, uintptr_t fcn) { lEEV_t fn = (lEEV_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(emu, from_ptrv(R_ESP + 4))); emu->libc_err = errno; } +void lEES_32(x64emu_t *emu, uintptr_t fcn) { lEES_t fn = (lEES_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(emu, io_convert32(from_ptriv(R_ESP + 4)))); emu->libc_err = errno; } +void lEii_32(x64emu_t *emu, uintptr_t fcn) { lEii_t fn = (lEii_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8))); emu->libc_err = errno; } +void lFiL_32(x64emu_t *emu, uintptr_t fcn) { lFiL_t fn = (lFiL_t)fcn; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)))); } +void lFui_32(x64emu_t *emu, uintptr_t fcn) { lFui_t fn = (lFui_t)fcn; R_EAX = to_long(fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8))); } +void lFll_32(x64emu_t *emu, uintptr_t fcn) { lFll_t fn = (lFll_t)fcn; R_EAX = to_long(fn(from_long(from_ptri(long_t, R_ESP + 4)), from_long(from_ptri(long_t, R_ESP + 8)))); } +void lEpi_32(x64emu_t *emu, uintptr_t fcn) { lEpi_t fn = (lEpi_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8))); emu->libc_err = errno; } +void lFpu_32(x64emu_t *emu, uintptr_t fcn) { lFpu_t fn = (lFpu_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8))); } +void lFpl_32(x64emu_t *emu, uintptr_t fcn) { lFpl_t fn = (lFpl_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)))); } +void lFpL_32(x64emu_t *emu, uintptr_t fcn) { lFpL_t fn = (lFpL_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)))); } +void LEEL_32(x64emu_t *emu, uintptr_t fcn) { LEEL_t fn = (LEEL_t)fcn; errno = emu->libc_err; R_EAX = to_ulong(fn(emu, from_ulong(from_ptri(ulong_t, R_ESP + 4)))); emu->libc_err = errno; } +void LFEp_32(x64emu_t *emu, uintptr_t fcn) { LFEp_t fn = (LFEp_t)fcn; R_EAX = to_ulong(fn(emu, from_ptriv(R_ESP + 4))); } +void LFLi_32(x64emu_t *emu, uintptr_t fcn) { LFLi_t fn = (LFLi_t)fcn; R_EAX = to_ulong(fn(from_ulong(from_ptri(ulong_t, R_ESP + 4)), from_ptri(int32_t, R_ESP + 8))); } +void LEpL_32(x64emu_t *emu, uintptr_t fcn) { LEpL_t fn = (LEpL_t)fcn; errno = emu->libc_err; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)))); emu->libc_err = errno; } +void LEpp_32(x64emu_t *emu, uintptr_t fcn) { LEpp_t fn = (LEpp_t)fcn; errno = emu->libc_err; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void LFXi_32(x64emu_t *emu, uintptr_t fcn) { LFXi_t fn = (LFXi_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8))); } +void LFXu_32(x64emu_t *emu, uintptr_t fcn) { LFXu_t fn = (LFXu_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8))); } +void LFXL_32(x64emu_t *emu, uintptr_t fcn) { LFXL_t fn = (LFXL_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)))); } +void LFXp_32(x64emu_t *emu, uintptr_t fcn) { LFXp_t fn = (LFXp_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8))); } +void pFEv_32(x64emu_t *emu, uintptr_t fcn) { pFEv_t fn = (pFEv_t)fcn; R_EAX = to_ptrv(fn(emu)); } +void pEEv_32(x64emu_t *emu, uintptr_t fcn) { pEEv_t fn = (pEEv_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu)); emu->libc_err = errno; } +void pEEu_32(x64emu_t *emu, uintptr_t fcn) { pEEu_t fn = (pEEu_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptri(uint32_t, R_ESP + 4))); emu->libc_err = errno; } +void pFEp_32(x64emu_t *emu, uintptr_t fcn) { pFEp_t fn = (pFEp_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4))); } +void pEEp_32(x64emu_t *emu, uintptr_t fcn) { pEEp_t fn = (pEEp_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4))); emu->libc_err = errno; } +void pEES_32(x64emu_t *emu, uintptr_t fcn) { pEES_t fn = (pEES_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, io_convert32(from_ptriv(R_ESP + 4)))); emu->libc_err = errno; } +void pFEX_32(x64emu_t *emu, uintptr_t fcn) { pFEX_t fn = (pFEX_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)))); } +void pFii_32(x64emu_t *emu, uintptr_t fcn) { pFii_t fn = (pFii_t)fcn; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8))); } +void pFiu_32(x64emu_t *emu, uintptr_t fcn) { pFiu_t fn = (pFiu_t)fcn; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8))); } +void pFip_32(x64emu_t *emu, uintptr_t fcn) { pFip_t fn = (pFip_t)fcn; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8))); } +void pFuu_32(x64emu_t *emu, uintptr_t fcn) { pFuu_t fn = (pFuu_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8))); } +void pFup_32(x64emu_t *emu, uintptr_t fcn) { pFup_t fn = (pFup_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8))); } +void pELL_32(x64emu_t *emu, uintptr_t fcn) { pELL_t fn = (pELL_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ulong(from_ptri(ulong_t, R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)))); emu->libc_err = errno; } +void pFLL_32(x64emu_t *emu, uintptr_t fcn) { pFLL_t fn = (pFLL_t)fcn; R_EAX = to_ptrv(fn(from_ulong(from_ptri(ulong_t, R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)))); } +void pEpi_32(x64emu_t *emu, uintptr_t fcn) { pEpi_t fn = (pEpi_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8))); emu->libc_err = errno; } +void pFpi_32(x64emu_t *emu, uintptr_t fcn) { pFpi_t fn = (pFpi_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8))); } +void pFpu_32(x64emu_t *emu, uintptr_t fcn) { pFpu_t fn = (pFpu_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8))); } +void pEpL_32(x64emu_t *emu, uintptr_t fcn) { pEpL_t fn = (pEpL_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)))); emu->libc_err = errno; } +void pFpL_32(x64emu_t *emu, uintptr_t fcn) { pFpL_t fn = (pFpL_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)))); } +void pEpp_32(x64emu_t *emu, uintptr_t fcn) { pEpp_t fn = (pEpp_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void pFpp_32(x64emu_t *emu, uintptr_t fcn) { pFpp_t fn = (pFpp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); } +void pFXi_32(x64emu_t *emu, uintptr_t fcn) { pFXi_t fn = (pFXi_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8))); } +void pFXu_32(x64emu_t *emu, uintptr_t fcn) { pFXu_t fn = (pFXu_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8))); } +void pFXL_32(x64emu_t *emu, uintptr_t fcn) { pFXL_t fn = (pFXL_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)))); } +void pFXp_32(x64emu_t *emu, uintptr_t fcn) { pFXp_t fn = (pFXp_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8))); } +void hFEp_32(x64emu_t *emu, uintptr_t fcn) { hFEp_t fn = (hFEp_t)fcn; R_EAX = to_hash(fn(emu, from_ptriv(R_ESP + 4))); } +void hEpa_32(x64emu_t *emu, uintptr_t fcn) { hEpa_t fn = (hEpa_t)fcn; errno = emu->libc_err; R_EAX = to_hash(fn(from_ptriv(R_ESP + 4), from_locale(from_ptri(ptr_t, R_ESP + 8)))); emu->libc_err = errno; } +void SEip_32(x64emu_t *emu, uintptr_t fcn) { SEip_t fn = (SEip_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(io_convert_from(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)))); emu->libc_err = errno; } +void SEpp_32(x64emu_t *emu, uintptr_t fcn) { SEpp_t fn = (SEpp_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(io_convert_from(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)))); emu->libc_err = errno; } +void tEip_32(x64emu_t *emu, uintptr_t fcn) { tEip_t fn = (tEip_t)fcn; errno = emu->libc_err; R_EAX = to_cstring(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void tEia_32(x64emu_t *emu, uintptr_t fcn) { tEia_t fn = (tEia_t)fcn; errno = emu->libc_err; R_EAX = to_cstring(fn(from_ptri(int32_t, R_ESP + 4), from_locale(from_ptri(ptr_t, R_ESP + 8)))); emu->libc_err = errno; } +void tEpL_32(x64emu_t *emu, uintptr_t fcn) { tEpL_t fn = (tEpL_t)fcn; errno = emu->libc_err; R_EAX = to_cstring(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)))); emu->libc_err = errno; } +void tEpp_32(x64emu_t *emu, uintptr_t fcn) { tEpp_t fn = (tEpp_t)fcn; errno = emu->libc_err; R_EAX = to_cstring(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void vFuBp__32(x64emu_t *emu, uintptr_t fcn) { vFuBp__t fn = (vFuBp__t)fcn; struct_p_t arg_8={0}; fn(from_ptri(uint32_t, R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void vFpbp__32(x64emu_t *emu, uintptr_t fcn) { vFpbp__t fn = (vFpbp__t)fcn; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void vFbp_p_32(x64emu_t *emu, uintptr_t fcn) { vFbp_p_t fn = (vFbp_p_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iEEbp__32(x64emu_t *emu, uintptr_t fcn) { iEEbp__t fn = (iEEbp__t)fcn; errno = emu->libc_err; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(emu, *(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); emu->libc_err = errno; } +void iFibp__32(x64emu_t *emu, uintptr_t fcn) { iFibp__t fn = (iFibp__t)fcn; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptri(int32_t, R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFLbp__32(x64emu_t *emu, uintptr_t fcn) { iFLbp__t fn = (iFLbp__t)fcn; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ulong(from_ptri(ulong_t, R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFpbp__32(x64emu_t *emu, uintptr_t fcn) { iFpbp__t fn = (iFpbp__t)fcn; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFpbl__32(x64emu_t *emu, uintptr_t fcn) { iFpbl__t fn = (iFpbl__t)fcn; struct_l_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_l(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_l(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFpBL__32(x64emu_t *emu, uintptr_t fcn) { iFpBL__t fn = (iFpBL__t)fcn; struct_L_t arg_8={0}; R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFpbL__32(x64emu_t *emu, uintptr_t fcn) { iFpbL__t fn = (iFpbL__t)fcn; struct_L_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_L(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iEHBp__32(x64emu_t *emu, uintptr_t fcn) { iEHBp__t fn = (iEHBp__t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; R_EAX = fn(from_hash_d(from_ptri(ptr_t, R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void iFbp_i_32(x64emu_t *emu, uintptr_t fcn) { iFbp_i_t fn = (iFbp_i_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptri(int32_t, R_ESP + 8)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFbp_p_32(x64emu_t *emu, uintptr_t fcn) { iFbp_p_t fn = (iFbp_p_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFXbL__32(x64emu_t *emu, uintptr_t fcn) { iFXbL__t fn = (iFXbL__t)fcn; struct_L_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_L(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void fEpBp__32(x64emu_t *emu, uintptr_t fcn) { fEpBp__t fn = (fEpBp__t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; float fl = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); fpu_do_push(emu); ST0val = fl; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void dEpBp__32(x64emu_t *emu, uintptr_t fcn) { dEpBp__t fn = (dEpBp__t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; double db = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); fpu_do_push(emu); ST0val = db; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void LFpbp__32(x64emu_t *emu, uintptr_t fcn) { LFpbp__t fn = (LFpbp__t)fcn; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void LFpbL__32(x64emu_t *emu, uintptr_t fcn) { LFpbL__t fn = (LFpbL__t)fcn; struct_L_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_L(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void pErl_p_32(x64emu_t *emu, uintptr_t fcn) { pErl_p_t fn = (pErl_p_t)fcn; errno = emu->libc_err; struct_l_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_l(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_ptrv(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void vFBll_l_32(x64emu_t *emu, uintptr_t fcn) { vFBll_l_t fn = (vFBll_l_t)fcn; struct_ll_t arg_4={0}; fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_long(from_ptri(long_t, R_ESP + 8))); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_ll(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iEuBLL__32(x64emu_t *emu, uintptr_t fcn) { iEuBLL__t fn = (iEuBLL__t)fcn; errno = emu->libc_err; struct_LL_t arg_8={0}; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_LL(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void iEprll__32(x64emu_t *emu, uintptr_t fcn) { iEprll__t fn = (iEprll__t)fcn; errno = emu->libc_err; struct_ll_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_ll(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); emu->libc_err = errno; } +void iEpbup__32(x64emu_t *emu, uintptr_t fcn) { iEpbup__t fn = (iEpbup__t)fcn; errno = emu->libc_err; struct_up_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_up(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_up(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void iEprLL__32(x64emu_t *emu, uintptr_t fcn) { iEprLL__t fn = (iEprLL__t)fcn; errno = emu->libc_err; struct_LL_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_LL(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); emu->libc_err = errno; } +void iFbpi_i_32(x64emu_t *emu, uintptr_t fcn) { iFbpi_i_t fn = (iFbpi_i_t)fcn; struct_pi_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_pi(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptri(int32_t, R_ESP + 8)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_pi(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iEBll_p_32(x64emu_t *emu, uintptr_t fcn) { iEBll_p_t fn = (iEBll_p_t)fcn; errno = emu->libc_err; struct_ll_t arg_4={0}; R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_ll(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); emu->libc_err = errno; } +void iFXbip__32(x64emu_t *emu, uintptr_t fcn) { iFXbip__t fn = (iFXbip__t)fcn; struct_ip_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_ip(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_ip(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iESBliu__32(x64emu_t *emu, uintptr_t fcn) { iESBliu__t fn = (iESBliu__t)fcn; errno = emu->libc_err; struct_liu_t arg_8={0}; R_EAX = fn(io_convert32(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_liu(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void iFbppi_i_32(x64emu_t *emu, uintptr_t fcn) { iFbppi_i_t fn = (iFbppi_i_t)fcn; struct_ppi_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_ppi(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptri(int32_t, R_ESP + 8)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_ppi(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFXbiip__32(x64emu_t *emu, uintptr_t fcn) { iFXbiip__t fn = (iFXbiip__t)fcn; struct_iip_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_iip(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_iip(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iErLL_BLL__32(x64emu_t *emu, uintptr_t fcn) { iErLL_BLL__t fn = (iErLL_BLL__t)fcn; errno = emu->libc_err; struct_LL_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_LL(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); struct_LL_t arg_8={0}; R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_LL(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void LFXrLiiuL__32(x64emu_t *emu, uintptr_t fcn) { LFXrLiiuL__t fn = (LFXrLiiuL__t)fcn; struct_LiiuL_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_LiiuL(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL)); } +void vFbll_rllll__32(x64emu_t *emu, uintptr_t fcn) { vFbll_rllll__t fn = (vFbll_rllll__t)fcn; struct_ll_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_ll(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); struct_llll_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_llll(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_ll(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFXbiiuuLip__32(x64emu_t *emu, uintptr_t fcn) { iFXbiiuuLip__t fn = (iFXbiiuuLip__t)fcn; struct_iiuuLip_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_iiuuLip(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_iiuuLip(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFpruuipWCCp__32(x64emu_t *emu, uintptr_t fcn) { iFpruuipWCCp__t fn = (iFpruuipWCCp__t)fcn; struct_uuipWCCp_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_uuipWCCp(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); } +void pEriiiiiiiiilt_p_32(x64emu_t *emu, uintptr_t fcn) { pEriiiiiiiiilt_p_t fn = (pEriiiiiiiiilt_p_t)fcn; errno = emu->libc_err; struct_iiiiiiiiilt_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_iiiiiiiiilt(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = to_ptrv(fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void iEiBLLLLLLLLLLLLLLLLLL__32(x64emu_t *emu, uintptr_t fcn) { iEiBLLLLLLLLLLLLLLLLLL__t fn = (iEiBLLLLLLLLLLLLLLLLLL__t)fcn; errno = emu->libc_err; struct_LLLLLLLLLLLLLLLLLL_t arg_8={0}; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_LLLLLLLLLLLLLLLLLL(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void vEEip_32(x64emu_t *emu, uintptr_t fcn) { vEEip_t fn = (vEEip_t)fcn; errno = emu->libc_err; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); emu->libc_err = errno; } +void vFEip_32(x64emu_t *emu, uintptr_t fcn) { vFEip_t fn = (vFEip_t)fcn; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void vEEpi_32(x64emu_t *emu, uintptr_t fcn) { vEEpi_t fn = (vEEpi_t)fcn; errno = emu->libc_err; fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); emu->libc_err = errno; } +void vEEpu_32(x64emu_t *emu, uintptr_t fcn) { vEEpu_t fn = (vEEpu_t)fcn; errno = emu->libc_err; fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); emu->libc_err = errno; } +void vFEpp_32(x64emu_t *emu, uintptr_t fcn) { vFEpp_t fn = (vFEpp_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); } +void vFEpV_32(x64emu_t *emu, uintptr_t fcn) { vFEpV_t fn = (vFEpV_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptrv(R_ESP + 8)); } +void vFEXp_32(x64emu_t *emu, uintptr_t fcn) { vFEXp_t fn = (vFEXp_t)fcn; fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8)); } +void vFccc_32(x64emu_t *emu, uintptr_t fcn) { vFccc_t fn = (vFccc_t)fcn; fn(from_ptri(int8_t, R_ESP + 4), from_ptri(int8_t, R_ESP + 8), from_ptri(int8_t, R_ESP + 12)); } +void vFwww_32(x64emu_t *emu, uintptr_t fcn) { vFwww_t fn = (vFwww_t)fcn; fn(from_ptri(int16_t, R_ESP + 4), from_ptri(int16_t, R_ESP + 8), from_ptri(int16_t, R_ESP + 12)); } +void vFiii_32(x64emu_t *emu, uintptr_t fcn) { vFiii_t fn = (vFiii_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void vFiif_32(x64emu_t *emu, uintptr_t fcn) { vFiif_t fn = (vFiif_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(float, R_ESP + 12)); } +void vFiip_32(x64emu_t *emu, uintptr_t fcn) { vFiip_t fn = (vFiip_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFiII_32(x64emu_t *emu, uintptr_t fcn) { vFiII_t fn = (vFiII_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 16)); } +void vFiui_32(x64emu_t *emu, uintptr_t fcn) { vFiui_t fn = (vFiui_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void vFiuu_32(x64emu_t *emu, uintptr_t fcn) { vFiuu_t fn = (vFiuu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void vFiup_32(x64emu_t *emu, uintptr_t fcn) { vFiup_t fn = (vFiup_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFiUU_32(x64emu_t *emu, uintptr_t fcn) { vFiUU_t fn = (vFiUU_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 16)); } +void vFiff_32(x64emu_t *emu, uintptr_t fcn) { vFiff_t fn = (vFiff_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12)); } +void vFidd_32(x64emu_t *emu, uintptr_t fcn) { vFidd_t fn = (vFidd_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16)); } +void vFilu_32(x64emu_t *emu, uintptr_t fcn) { vFilu_t fn = (vFilu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12)); } +void vFill_32(x64emu_t *emu, uintptr_t fcn) { vFill_t fn = (vFill_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12))); } +void vFilp_32(x64emu_t *emu, uintptr_t fcn) { vFilp_t fn = (vFilp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void vFipu_32(x64emu_t *emu, uintptr_t fcn) { vFipu_t fn = (vFipu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void vFipp_32(x64emu_t *emu, uintptr_t fcn) { vFipp_t fn = (vFipp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFCCC_32(x64emu_t *emu, uintptr_t fcn) { vFCCC_t fn = (vFCCC_t)fcn; fn(from_ptri(uint8_t, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12)); } +void vFWWW_32(x64emu_t *emu, uintptr_t fcn) { vFWWW_t fn = (vFWWW_t)fcn; fn(from_ptri(uint16_t, R_ESP + 4), from_ptri(uint16_t, R_ESP + 8), from_ptri(uint16_t, R_ESP + 12)); } +void vFucc_32(x64emu_t *emu, uintptr_t fcn) { vFucc_t fn = (vFucc_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int8_t, R_ESP + 8), from_ptri(int8_t, R_ESP + 12)); } +void vFuww_32(x64emu_t *emu, uintptr_t fcn) { vFuww_t fn = (vFuww_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int16_t, R_ESP + 8), from_ptri(int16_t, R_ESP + 12)); } +void vFuii_32(x64emu_t *emu, uintptr_t fcn) { vFuii_t fn = (vFuii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void vFuiI_32(x64emu_t *emu, uintptr_t fcn) { vFuiI_t fn = (vFuiI_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 12)); } +void vFuiu_32(x64emu_t *emu, uintptr_t fcn) { vFuiu_t fn = (vFuiu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void vFuiU_32(x64emu_t *emu, uintptr_t fcn) { vFuiU_t fn = (vFuiU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12)); } +void vFuif_32(x64emu_t *emu, uintptr_t fcn) { vFuif_t fn = (vFuif_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(float, R_ESP + 12)); } +void vFuid_32(x64emu_t *emu, uintptr_t fcn) { vFuid_t fn = (vFuid_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(double, R_ESP + 12)); } +void vFuip_32(x64emu_t *emu, uintptr_t fcn) { vFuip_t fn = (vFuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFuII_32(x64emu_t *emu, uintptr_t fcn) { vFuII_t fn = (vFuII_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 16)); } +void vFuWW_32(x64emu_t *emu, uintptr_t fcn) { vFuWW_t fn = (vFuWW_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint16_t, R_ESP + 8), from_ptri(uint16_t, R_ESP + 12)); } +void vFuui_32(x64emu_t *emu, uintptr_t fcn) { vFuui_t fn = (vFuui_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void vFuuC_32(x64emu_t *emu, uintptr_t fcn) { vFuuC_t fn = (vFuuC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12)); } +void vFuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuu_t fn = (vFuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void vFuuU_32(x64emu_t *emu, uintptr_t fcn) { vFuuU_t fn = (vFuuU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12)); } +void vFuuf_32(x64emu_t *emu, uintptr_t fcn) { vFuuf_t fn = (vFuuf_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(float, R_ESP + 12)); } +void vFuud_32(x64emu_t *emu, uintptr_t fcn) { vFuud_t fn = (vFuud_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(double, R_ESP + 12)); } +void vFuup_32(x64emu_t *emu, uintptr_t fcn) { vFuup_t fn = (vFuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFuUU_32(x64emu_t *emu, uintptr_t fcn) { vFuUU_t fn = (vFuUU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 16)); } +void vFuff_32(x64emu_t *emu, uintptr_t fcn) { vFuff_t fn = (vFuff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12)); } +void vFudd_32(x64emu_t *emu, uintptr_t fcn) { vFudd_t fn = (vFudd_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16)); } +void vFull_32(x64emu_t *emu, uintptr_t fcn) { vFull_t fn = (vFull_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12))); } +void vFulp_32(x64emu_t *emu, uintptr_t fcn) { vFulp_t fn = (vFulp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void vFupp_32(x64emu_t *emu, uintptr_t fcn) { vFupp_t fn = (vFupp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFfff_32(x64emu_t *emu, uintptr_t fcn) { vFfff_t fn = (vFfff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12)); } +void vEfpp_32(x64emu_t *emu, uintptr_t fcn) { vEfpp_t fn = (vEfpp_t)fcn; errno = emu->libc_err; fn(from_ptri(float, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void vFddd_32(x64emu_t *emu, uintptr_t fcn) { vFddd_t fn = (vFddd_t)fcn; fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20)); } +void vEdpp_32(x64emu_t *emu, uintptr_t fcn) { vEdpp_t fn = (vEdpp_t)fcn; errno = emu->libc_err; fn(from_ptri(double, R_ESP + 4), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void vFlii_32(x64emu_t *emu, uintptr_t fcn) { vFlii_t fn = (vFlii_t)fcn; fn(from_long(from_ptri(long_t, R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void vFlip_32(x64emu_t *emu, uintptr_t fcn) { vFlip_t fn = (vFlip_t)fcn; fn(from_long(from_ptri(long_t, R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFllp_32(x64emu_t *emu, uintptr_t fcn) { vFllp_t fn = (vFllp_t)fcn; fn(from_long(from_ptri(long_t, R_ESP + 4)), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void vFlpp_32(x64emu_t *emu, uintptr_t fcn) { vFlpp_t fn = (vFlpp_t)fcn; fn(from_long(from_ptri(long_t, R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vEpii_32(x64emu_t *emu, uintptr_t fcn) { vEpii_t fn = (vEpii_t)fcn; errno = emu->libc_err; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; } +void vFpii_32(x64emu_t *emu, uintptr_t fcn) { vFpii_t fn = (vFpii_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void vFpip_32(x64emu_t *emu, uintptr_t fcn) { vFpip_t fn = (vFpip_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFpui_32(x64emu_t *emu, uintptr_t fcn) { vFpui_t fn = (vFpui_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void vFpuI_32(x64emu_t *emu, uintptr_t fcn) { vFpuI_t fn = (vFpuI_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 12)); } +void vFpuC_32(x64emu_t *emu, uintptr_t fcn) { vFpuC_t fn = (vFpuC_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12)); } +void vFpuu_32(x64emu_t *emu, uintptr_t fcn) { vFpuu_t fn = (vFpuu_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void vFpuU_32(x64emu_t *emu, uintptr_t fcn) { vFpuU_t fn = (vFpuU_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12)); } +void vFpuf_32(x64emu_t *emu, uintptr_t fcn) { vFpuf_t fn = (vFpuf_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(float, R_ESP + 12)); } +void vFpud_32(x64emu_t *emu, uintptr_t fcn) { vFpud_t fn = (vFpud_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(double, R_ESP + 12)); } +void vFpul_32(x64emu_t *emu, uintptr_t fcn) { vFpul_t fn = (vFpul_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12))); } +void vFpup_32(x64emu_t *emu, uintptr_t fcn) { vFpup_t fn = (vFpup_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFpdd_32(x64emu_t *emu, uintptr_t fcn) { vFpdd_t fn = (vFpdd_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16)); } +void vFplp_32(x64emu_t *emu, uintptr_t fcn) { vFplp_t fn = (vFplp_t)fcn; fn(from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void vFppi_32(x64emu_t *emu, uintptr_t fcn) { vFppi_t fn = (vFppi_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void vEppu_32(x64emu_t *emu, uintptr_t fcn) { vEppu_t fn = (vEppu_t)fcn; errno = emu->libc_err; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); emu->libc_err = errno; } +void vFppL_32(x64emu_t *emu, uintptr_t fcn) { vFppL_t fn = (vFppL_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12))); } +void vFppp_32(x64emu_t *emu, uintptr_t fcn) { vFppp_t fn = (vFppp_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFXiL_32(x64emu_t *emu, uintptr_t fcn) { vFXiL_t fn = (vFXiL_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12))); } +void vFXLi_32(x64emu_t *emu, uintptr_t fcn) { vFXLi_t fn = (vFXLi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); } +void vFXLL_32(x64emu_t *emu, uintptr_t fcn) { vFXLL_t fn = (vFXLL_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12))); } +void vFXLp_32(x64emu_t *emu, uintptr_t fcn) { vFXLp_t fn = (vFXLp_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void vFXpi_32(x64emu_t *emu, uintptr_t fcn) { vFXpi_t fn = (vFXpi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void vFXpl_32(x64emu_t *emu, uintptr_t fcn) { vFXpl_t fn = (vFXpl_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12))); } +void vFXpL_32(x64emu_t *emu, uintptr_t fcn) { vFXpL_t fn = (vFXpL_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12))); } +void vFXpp_32(x64emu_t *emu, uintptr_t fcn) { vFXpp_t fn = (vFXpp_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iEEip_32(x64emu_t *emu, uintptr_t fcn) { iEEip_t fn = (iEEip_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); emu->libc_err = errno; } +void iFEip_32(x64emu_t *emu, uintptr_t fcn) { iFEip_t fn = (iFEip_t)fcn; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iEEup_32(x64emu_t *emu, uintptr_t fcn) { iEEup_t fn = (iEEup_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); emu->libc_err = errno; } +void iFEup_32(x64emu_t *emu, uintptr_t fcn) { iFEup_t fn = (iFEup_t)fcn; R_EAX = fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iEEpi_32(x64emu_t *emu, uintptr_t fcn) { iEEpi_t fn = (iEEpi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); emu->libc_err = errno; } +void iFEpi_32(x64emu_t *emu, uintptr_t fcn) { iFEpi_t fn = (iFEpi_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); } +void iFEpu_32(x64emu_t *emu, uintptr_t fcn) { iFEpu_t fn = (iFEpu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void iFEpl_32(x64emu_t *emu, uintptr_t fcn) { iFEpl_t fn = (iFEpl_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8))); } +void iEEpL_32(x64emu_t *emu, uintptr_t fcn) { iEEpL_t fn = (iEEpL_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8))); emu->libc_err = errno; } +void iFEpL_32(x64emu_t *emu, uintptr_t fcn) { iFEpL_t fn = (iFEpL_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8))); } +void iEEpp_32(x64emu_t *emu, uintptr_t fcn) { iEEpp_t fn = (iEEpp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); emu->libc_err = errno; } +void iFEpp_32(x64emu_t *emu, uintptr_t fcn) { iFEpp_t fn = (iFEpp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); } +void iEEpV_32(x64emu_t *emu, uintptr_t fcn) { iEEpV_t fn = (iEEpV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptrv(R_ESP + 8)); emu->libc_err = errno; } +void iFEpX_32(x64emu_t *emu, uintptr_t fcn) { iFEpX_t fn = (iFEpX_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), getDisplay(from_ptriv(R_ESP + 8))); } +void iEEhi_32(x64emu_t *emu, uintptr_t fcn) { iEEhi_t fn = (iEEhi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_hash(from_ptri(ptr_t, R_ESP + 4)), from_ptri(int32_t, R_ESP + 8)); emu->libc_err = errno; } +void iEEhp_32(x64emu_t *emu, uintptr_t fcn) { iEEhp_t fn = (iEEhp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_hash(from_ptri(ptr_t, R_ESP + 4)), from_ptriv(R_ESP + 8)); emu->libc_err = errno; } +void iFEXp_32(x64emu_t *emu, uintptr_t fcn) { iFEXp_t fn = (iFEXp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8)); } +void iEiii_32(x64emu_t *emu, uintptr_t fcn) { iEiii_t fn = (iEiii_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; } +void iEiiI_32(x64emu_t *emu, uintptr_t fcn) { iEiiI_t fn = (iEiiI_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 12)); emu->libc_err = errno; } +void iEiil_32(x64emu_t *emu, uintptr_t fcn) { iEiil_t fn = (iEiil_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12))); emu->libc_err = errno; } +void iEiip_32(x64emu_t *emu, uintptr_t fcn) { iEiip_t fn = (iEiip_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iFiip_32(x64emu_t *emu, uintptr_t fcn) { iFiip_t fn = (iFiip_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iEiiO_32(x64emu_t *emu, uintptr_t fcn) { iEiiO_t fn = (iEiiO_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), of_convert32(from_ptri(int32_t, R_ESP + 12))); emu->libc_err = errno; } +void iEiII_32(x64emu_t *emu, uintptr_t fcn) { iEiII_t fn = (iEiII_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 16)); emu->libc_err = errno; } +void iEiuu_32(x64emu_t *emu, uintptr_t fcn) { iEiuu_t fn = (iEiuu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); emu->libc_err = errno; } +void iEiup_32(x64emu_t *emu, uintptr_t fcn) { iEiup_t fn = (iEiup_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iEill_32(x64emu_t *emu, uintptr_t fcn) { iEill_t fn = (iEill_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12))); emu->libc_err = errno; } +void iEiLi_32(x64emu_t *emu, uintptr_t fcn) { iEiLi_t fn = (iEiLi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; } +void iFipi_32(x64emu_t *emu, uintptr_t fcn) { iFipi_t fn = (iFipi_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void iEipi_32(x64emu_t *emu, uintptr_t fcn) { iEipi_t fn = (iEipi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; } +void iEipu_32(x64emu_t *emu, uintptr_t fcn) { iEipu_t fn = (iEipu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); emu->libc_err = errno; } +void iFipu_32(x64emu_t *emu, uintptr_t fcn) { iFipu_t fn = (iFipu_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iEipL_32(x64emu_t *emu, uintptr_t fcn) { iEipL_t fn = (iEipL_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12))); emu->libc_err = errno; } +void iEipp_32(x64emu_t *emu, uintptr_t fcn) { iEipp_t fn = (iEipp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iFipp_32(x64emu_t *emu, uintptr_t fcn) { iFipp_t fn = (iFipp_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFuip_32(x64emu_t *emu, uintptr_t fcn) { iFuip_t fn = (iFuip_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iEuui_32(x64emu_t *emu, uintptr_t fcn) { iEuui_t fn = (iEuui_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; } +void iEuuu_32(x64emu_t *emu, uintptr_t fcn) { iEuuu_t fn = (iEuuu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); emu->libc_err = errno; } +void iFuup_32(x64emu_t *emu, uintptr_t fcn) { iFuup_t fn = (iFuup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iEuLa_32(x64emu_t *emu, uintptr_t fcn) { iEuLa_t fn = (iEuLa_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_locale(from_ptri(ptr_t, R_ESP + 12))); emu->libc_err = errno; } +void iFfff_32(x64emu_t *emu, uintptr_t fcn) { iFfff_t fn = (iFfff_t)fcn; R_EAX = fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12)); } +void iELLi_32(x64emu_t *emu, uintptr_t fcn) { iELLi_t fn = (iELLi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ulong(from_ptri(ulong_t, R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; } +void iFpii_32(x64emu_t *emu, uintptr_t fcn) { iFpii_t fn = (iFpii_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void iEpiu_32(x64emu_t *emu, uintptr_t fcn) { iEpiu_t fn = (iEpiu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); emu->libc_err = errno; } +void iFpiu_32(x64emu_t *emu, uintptr_t fcn) { iFpiu_t fn = (iFpiu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFpil_32(x64emu_t *emu, uintptr_t fcn) { iFpil_t fn = (iFpil_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12))); } +void iEpip_32(x64emu_t *emu, uintptr_t fcn) { iEpip_t fn = (iEpip_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iFpip_32(x64emu_t *emu, uintptr_t fcn) { iFpip_t fn = (iFpip_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFpuC_32(x64emu_t *emu, uintptr_t fcn) { iFpuC_t fn = (iFpuC_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12)); } +void iEpuu_32(x64emu_t *emu, uintptr_t fcn) { iEpuu_t fn = (iEpuu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); emu->libc_err = errno; } +void iFpuu_32(x64emu_t *emu, uintptr_t fcn) { iFpuu_t fn = (iFpuu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFpuU_32(x64emu_t *emu, uintptr_t fcn) { iFpuU_t fn = (iFpuU_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12)); } +void iFpup_32(x64emu_t *emu, uintptr_t fcn) { iFpup_t fn = (iFpup_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFpUU_32(x64emu_t *emu, uintptr_t fcn) { iFpUU_t fn = (iFpUU_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 16)); } +void iFpfu_32(x64emu_t *emu, uintptr_t fcn) { iFpfu_t fn = (iFpfu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFpff_32(x64emu_t *emu, uintptr_t fcn) { iFpff_t fn = (iFpff_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12)); } +void iFpli_32(x64emu_t *emu, uintptr_t fcn) { iFpli_t fn = (iFpli_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); } +void iFpll_32(x64emu_t *emu, uintptr_t fcn) { iFpll_t fn = (iFpll_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12))); } +void iEpLi_32(x64emu_t *emu, uintptr_t fcn) { iEpLi_t fn = (iEpLi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; } +void iEpLu_32(x64emu_t *emu, uintptr_t fcn) { iEpLu_t fn = (iEpLu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12)); emu->libc_err = errno; } +void iEpLp_32(x64emu_t *emu, uintptr_t fcn) { iEpLp_t fn = (iEpLp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iFpLp_32(x64emu_t *emu, uintptr_t fcn) { iFpLp_t fn = (iFpLp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void iEppi_32(x64emu_t *emu, uintptr_t fcn) { iEppi_t fn = (iEppi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; } +void iFppi_32(x64emu_t *emu, uintptr_t fcn) { iFppi_t fn = (iFppi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void iEppu_32(x64emu_t *emu, uintptr_t fcn) { iEppu_t fn = (iEppu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); emu->libc_err = errno; } +void iFppu_32(x64emu_t *emu, uintptr_t fcn) { iFppu_t fn = (iFppu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFppd_32(x64emu_t *emu, uintptr_t fcn) { iFppd_t fn = (iFppd_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(double, R_ESP + 12)); } +void iEppL_32(x64emu_t *emu, uintptr_t fcn) { iEppL_t fn = (iEppL_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12))); emu->libc_err = errno; } +void iFppL_32(x64emu_t *emu, uintptr_t fcn) { iFppL_t fn = (iFppL_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12))); } +void iEppp_32(x64emu_t *emu, uintptr_t fcn) { iEppp_t fn = (iEppp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iFppp_32(x64emu_t *emu, uintptr_t fcn) { iFppp_t fn = (iFppp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iEppa_32(x64emu_t *emu, uintptr_t fcn) { iEppa_t fn = (iEppa_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_locale(from_ptri(ptr_t, R_ESP + 12))); emu->libc_err = errno; } +void iEpOu_32(x64emu_t *emu, uintptr_t fcn) { iEpOu_t fn = (iEpOu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), of_convert32(from_ptri(int32_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12)); emu->libc_err = errno; } +void iEhip_32(x64emu_t *emu, uintptr_t fcn) { iEhip_t fn = (iEhip_t)fcn; errno = emu->libc_err; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iEhpL_32(x64emu_t *emu, uintptr_t fcn) { iEhpL_t fn = (iEhpL_t)fcn; errno = emu->libc_err; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12))); emu->libc_err = errno; } +void iEhpp_32(x64emu_t *emu, uintptr_t fcn) { iEhpp_t fn = (iEhpp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_hash(from_ptri(ptr_t, R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iESIi_32(x64emu_t *emu, uintptr_t fcn) { iESIi_t fn = (iESIi_t)fcn; errno = emu->libc_err; R_EAX = fn(io_convert32(from_ptriv(R_ESP + 4)), from_ptri(int64_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 16)); emu->libc_err = errno; } +void iESli_32(x64emu_t *emu, uintptr_t fcn) { iESli_t fn = (iESli_t)fcn; errno = emu->libc_err; R_EAX = fn(io_convert32(from_ptriv(R_ESP + 4)), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; } +void iFXii_32(x64emu_t *emu, uintptr_t fcn) { iFXii_t fn = (iFXii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void iFXiL_32(x64emu_t *emu, uintptr_t fcn) { iFXiL_t fn = (iFXiL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12))); } +void iFXip_32(x64emu_t *emu, uintptr_t fcn) { iFXip_t fn = (iFXip_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFXuu_32(x64emu_t *emu, uintptr_t fcn) { iFXuu_t fn = (iFXuu_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFXup_32(x64emu_t *emu, uintptr_t fcn) { iFXup_t fn = (iFXup_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFXLi_32(x64emu_t *emu, uintptr_t fcn) { iFXLi_t fn = (iFXLi_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); } +void iFXLu_32(x64emu_t *emu, uintptr_t fcn) { iFXLu_t fn = (iFXLu_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12)); } +void iFXLf_32(x64emu_t *emu, uintptr_t fcn) { iFXLf_t fn = (iFXLf_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(float, R_ESP + 12)); } +void iFXLl_32(x64emu_t *emu, uintptr_t fcn) { iFXLl_t fn = (iFXLl_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12))); } +void iFXLL_32(x64emu_t *emu, uintptr_t fcn) { iFXLL_t fn = (iFXLL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12))); } +void iFXLp_32(x64emu_t *emu, uintptr_t fcn) { iFXLp_t fn = (iFXLp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void iFXpi_32(x64emu_t *emu, uintptr_t fcn) { iFXpi_t fn = (iFXpi_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void iFXpu_32(x64emu_t *emu, uintptr_t fcn) { iFXpu_t fn = (iFXpu_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iFXpl_32(x64emu_t *emu, uintptr_t fcn) { iFXpl_t fn = (iFXpl_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12))); } +void iFXpL_32(x64emu_t *emu, uintptr_t fcn) { iFXpL_t fn = (iFXpL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12))); } +void iFXpp_32(x64emu_t *emu, uintptr_t fcn) { iFXpp_t fn = (iFXpp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void IEiIi_32(x64emu_t *emu, uintptr_t fcn) { IEiIi_t fn = (IEiIi_t)fcn; errno = emu->libc_err; ui64_t r; r.i = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 16)); R_EAX = r.d[0]; R_EDX = r.d[1]; emu->libc_err = errno; } +void IFpIi_32(x64emu_t *emu, uintptr_t fcn) { IFpIi_t fn = (IFpIi_t)fcn; ui64_t r; r.i = fn(from_ptriv(R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 16)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void CFipp_32(x64emu_t *emu, uintptr_t fcn) { CFipp_t fn = (CFipp_t)fcn; R_EAX = (unsigned char)fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void CFuUu_32(x64emu_t *emu, uintptr_t fcn) { CFuUu_t fn = (CFuUu_t)fcn; R_EAX = (unsigned char)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 16)); } +void CFuff_32(x64emu_t *emu, uintptr_t fcn) { CFuff_t fn = (CFuff_t)fcn; R_EAX = (unsigned char)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12)); } +void WFXip_32(x64emu_t *emu, uintptr_t fcn) { WFXip_t fn = (WFXip_t)fcn; R_EAX = (unsigned short)fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void uFEpu_32(x64emu_t *emu, uintptr_t fcn) { uFEpu_t fn = (uFEpu_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); } +void uFEpL_32(x64emu_t *emu, uintptr_t fcn) { uFEpL_t fn = (uFEpL_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8))); } +void uFilp_32(x64emu_t *emu, uintptr_t fcn) { uFilp_t fn = (uFilp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void uFipu_32(x64emu_t *emu, uintptr_t fcn) { uFipu_t fn = (uFipu_t)fcn; R_EAX = (uint32_t)fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void uFuuu_32(x64emu_t *emu, uintptr_t fcn) { uFuuu_t fn = (uFuuu_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void uFuup_32(x64emu_t *emu, uintptr_t fcn) { uFuup_t fn = (uFuup_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void uFupp_32(x64emu_t *emu, uintptr_t fcn) { uFupp_t fn = (uFupp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void uFpii_32(x64emu_t *emu, uintptr_t fcn) { uFpii_t fn = (uFpii_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void uFpuU_32(x64emu_t *emu, uintptr_t fcn) { uFpuU_t fn = (uFpuU_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12)); } +void uEpup_32(x64emu_t *emu, uintptr_t fcn) { uEpup_t fn = (uEpup_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void uFpup_32(x64emu_t *emu, uintptr_t fcn) { uFpup_t fn = (uFpup_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void uFppu_32(x64emu_t *emu, uintptr_t fcn) { uFppu_t fn = (uFppu_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void uFppp_32(x64emu_t *emu, uintptr_t fcn) { uFppp_t fn = (uFppp_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void uFXuu_32(x64emu_t *emu, uintptr_t fcn) { uFXuu_t fn = (uFXuu_t)fcn; R_EAX = (uint32_t)fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void fFuii_32(x64emu_t *emu, uintptr_t fcn) { fFuii_t fn = (fFuii_t)fcn; float fl = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); fpu_do_push(emu); ST0val = fl; } +void fEfff_32(x64emu_t *emu, uintptr_t fcn) { fEfff_t fn = (fEfff_t)fcn; errno = emu->libc_err; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12)); fpu_do_push(emu); ST0val = fl; emu->libc_err = errno; } +void fEffp_32(x64emu_t *emu, uintptr_t fcn) { fEffp_t fn = (fEffp_t)fcn; errno = emu->libc_err; float fl = fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptriv(R_ESP + 12)); fpu_do_push(emu); ST0val = fl; emu->libc_err = errno; } +void dEddd_32(x64emu_t *emu, uintptr_t fcn) { dEddd_t fn = (dEddd_t)fcn; errno = emu->libc_err; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20)); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void dEddp_32(x64emu_t *emu, uintptr_t fcn) { dEddp_t fn = (dEddp_t)fcn; errno = emu->libc_err; double db = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptriv(R_ESP + 20)); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void lEili_32(x64emu_t *emu, uintptr_t fcn) { lEili_t fn = (lEili_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12))); emu->libc_err = errno; } +void lEipL_32(x64emu_t *emu, uintptr_t fcn) { lEipL_t fn = (lEipL_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); emu->libc_err = errno; } +void lFlll_32(x64emu_t *emu, uintptr_t fcn) { lFlll_t fn = (lFlll_t)fcn; R_EAX = to_long(fn(from_long(from_ptri(long_t, R_ESP + 4)), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)))); } +void lElpi_32(x64emu_t *emu, uintptr_t fcn) { lElpi_t fn = (lElpi_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_long(from_ptri(long_t, R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); emu->libc_err = errno; } +void lFpLL_32(x64emu_t *emu, uintptr_t fcn) { lFpLL_t fn = (lFpLL_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); } +void lFppi_32(x64emu_t *emu, uintptr_t fcn) { lFppi_t fn = (lFppi_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void lFppL_32(x64emu_t *emu, uintptr_t fcn) { lFppL_t fn = (lFppL_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); } +void LFEpi_32(x64emu_t *emu, uintptr_t fcn) { LFEpi_t fn = (LFEpi_t)fcn; R_EAX = to_ulong(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8))); } +void LFEpp_32(x64emu_t *emu, uintptr_t fcn) { LFEpp_t fn = (LFEpp_t)fcn; R_EAX = to_ulong(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); } +void LFpii_32(x64emu_t *emu, uintptr_t fcn) { LFpii_t fn = (LFpii_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void LEpip_32(x64emu_t *emu, uintptr_t fcn) { LEpip_t fn = (LEpip_t)fcn; errno = emu->libc_err; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12))); emu->libc_err = errno; } +void LFppi_32(x64emu_t *emu, uintptr_t fcn) { LFppi_t fn = (LFppi_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void LEppL_32(x64emu_t *emu, uintptr_t fcn) { LEppL_t fn = (LEppL_t)fcn; errno = emu->libc_err; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); emu->libc_err = errno; } +void LFppL_32(x64emu_t *emu, uintptr_t fcn) { LFppL_t fn = (LFppL_t)fcn; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); } +void LFXip_32(x64emu_t *emu, uintptr_t fcn) { LFXip_t fn = (LFXip_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12))); } +void LFXCi_32(x64emu_t *emu, uintptr_t fcn) { LFXCi_t fn = (LFXCi_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint8_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void LFXLi_32(x64emu_t *emu, uintptr_t fcn) { LFXLi_t fn = (LFXLi_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12))); } +void LFXLC_32(x64emu_t *emu, uintptr_t fcn) { LFXLC_t fn = (LFXLC_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(uint8_t, R_ESP + 12))); } +void LFXpi_32(x64emu_t *emu, uintptr_t fcn) { LFXpi_t fn = (LFXpi_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void LFXpp_32(x64emu_t *emu, uintptr_t fcn) { LFXpp_t fn = (LFXpp_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pEEip_32(x64emu_t *emu, uintptr_t fcn) { pEEip_t fn = (pEEip_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void pFEiV_32(x64emu_t *emu, uintptr_t fcn) { pFEiV_t fn = (pFEiV_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptrv(R_ESP + 8))); } +void pEEpi_32(x64emu_t *emu, uintptr_t fcn) { pEEpi_t fn = (pEEpi_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8))); emu->libc_err = errno; } +void pFEpi_32(x64emu_t *emu, uintptr_t fcn) { pFEpi_t fn = (pFEpi_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8))); } +void pEEpp_32(x64emu_t *emu, uintptr_t fcn) { pEEpp_t fn = (pEEpp_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void pFEpp_32(x64emu_t *emu, uintptr_t fcn) { pFEpp_t fn = (pFEpp_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); } +void pFEpV_32(x64emu_t *emu, uintptr_t fcn) { pFEpV_t fn = (pFEpV_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptrv(R_ESP + 8))); } +void pFEpX_32(x64emu_t *emu, uintptr_t fcn) { pFEpX_t fn = (pFEpX_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), getDisplay(from_ptriv(R_ESP + 8)))); } +void pFEXi_32(x64emu_t *emu, uintptr_t fcn) { pFEXi_t fn = (pFEXi_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8))); } +void pFEXL_32(x64emu_t *emu, uintptr_t fcn) { pFEXL_t fn = (pFEXL_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)))); } +void pFEXp_32(x64emu_t *emu, uintptr_t fcn) { pFEXp_t fn = (pFEXp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8))); } +void pEipi_32(x64emu_t *emu, uintptr_t fcn) { pEipi_t fn = (pEipi_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); emu->libc_err = errno; } +void pEipL_32(x64emu_t *emu, uintptr_t fcn) { pEipL_t fn = (pEipL_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); emu->libc_err = errno; } +void pFipp_32(x64emu_t *emu, uintptr_t fcn) { pFipp_t fn = (pFipp_t)fcn; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pFulu_32(x64emu_t *emu, uintptr_t fcn) { pFulu_t fn = (pFulu_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12))); } +void pFupi_32(x64emu_t *emu, uintptr_t fcn) { pFupi_t fn = (pFupi_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void pFupp_32(x64emu_t *emu, uintptr_t fcn) { pFupp_t fn = (pFupp_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pFLpi_32(x64emu_t *emu, uintptr_t fcn) { pFLpi_t fn = (pFLpi_t)fcn; R_EAX = to_ptrv(fn(from_ulong(from_ptri(ulong_t, R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void pFpcU_32(x64emu_t *emu, uintptr_t fcn) { pFpcU_t fn = (pFpcU_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int8_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12))); } +void pEpii_32(x64emu_t *emu, uintptr_t fcn) { pEpii_t fn = (pEpii_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); emu->libc_err = errno; } +void pFpii_32(x64emu_t *emu, uintptr_t fcn) { pFpii_t fn = (pFpii_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void pFpiu_32(x64emu_t *emu, uintptr_t fcn) { pFpiu_t fn = (pFpiu_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12))); } +void pEpiL_32(x64emu_t *emu, uintptr_t fcn) { pEpiL_t fn = (pEpiL_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); emu->libc_err = errno; } +void pFpiL_32(x64emu_t *emu, uintptr_t fcn) { pFpiL_t fn = (pFpiL_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); } +void pFpip_32(x64emu_t *emu, uintptr_t fcn) { pFpip_t fn = (pFpip_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pEpiS_32(x64emu_t *emu, uintptr_t fcn) { pEpiS_t fn = (pEpiS_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), io_convert32(from_ptriv(R_ESP + 12)))); emu->libc_err = errno; } +void pEpII_32(x64emu_t *emu, uintptr_t fcn) { pEpII_t fn = (pEpII_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 16))); emu->libc_err = errno; } +void pFpuu_32(x64emu_t *emu, uintptr_t fcn) { pFpuu_t fn = (pFpuu_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12))); } +void pFpup_32(x64emu_t *emu, uintptr_t fcn) { pFpup_t fn = (pFpup_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pEpLL_32(x64emu_t *emu, uintptr_t fcn) { pEpLL_t fn = (pEpLL_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); emu->libc_err = errno; } +void pEppi_32(x64emu_t *emu, uintptr_t fcn) { pEppi_t fn = (pEppi_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); emu->libc_err = errno; } +void pFppu_32(x64emu_t *emu, uintptr_t fcn) { pFppu_t fn = (pFppu_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12))); } +void pEppL_32(x64emu_t *emu, uintptr_t fcn) { pEppL_t fn = (pEppL_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); emu->libc_err = errno; } +void pFppL_32(x64emu_t *emu, uintptr_t fcn) { pFppL_t fn = (pFppL_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); } +void pFppp_32(x64emu_t *emu, uintptr_t fcn) { pFppp_t fn = (pFppp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pEpOM_32(x64emu_t *emu, uintptr_t fcn) { pEpOM_t fn = (pEpOM_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), of_convert32(from_ptri(int32_t, R_ESP + 8)), from_ptriv(R_ESP + 12),from_ptriv(R_ESP + 12 + 4))); emu->libc_err = errno; } +void pFXii_32(x64emu_t *emu, uintptr_t fcn) { pFXii_t fn = (pFXii_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void pFXip_32(x64emu_t *emu, uintptr_t fcn) { pFXip_t fn = (pFXip_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pFXLp_32(x64emu_t *emu, uintptr_t fcn) { pFXLp_t fn = (pFXLp_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12))); } +void pFXpi_32(x64emu_t *emu, uintptr_t fcn) { pFXpi_t fn = (pFXpi_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void pFXpp_32(x64emu_t *emu, uintptr_t fcn) { pFXpp_t fn = (pFXpp_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); } +void aEipa_32(x64emu_t *emu, uintptr_t fcn) { aEipa_t fn = (aEipa_t)fcn; errno = emu->libc_err; R_EAX = to_locale(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_locale(from_ptri(ptr_t, R_ESP + 12)))); emu->libc_err = errno; } +void SEEpp_32(x64emu_t *emu, uintptr_t fcn) { SEEpp_t fn = (SEEpp_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(io_convert_from(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)))); emu->libc_err = errno; } +void SEppS_32(x64emu_t *emu, uintptr_t fcn) { SEppS_t fn = (SEppS_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(io_convert_from(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), io_convert32(from_ptriv(R_ESP + 12))))); emu->libc_err = errno; } +void tEipu_32(x64emu_t *emu, uintptr_t fcn) { tEipu_t fn = (tEipu_t)fcn; errno = emu->libc_err; R_EAX = to_cstring(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12))); emu->libc_err = errno; } +void vFibp_i_32(x64emu_t *emu, uintptr_t fcn) { vFibp_i_t fn = (vFibp_i_t)fcn; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); fn(from_ptri(int32_t, R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void vFuibp__32(x64emu_t *emu, uintptr_t fcn) { vFuibp__t fn = (vFuibp__t)fcn; struct_p_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_p(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void vFuuBp__32(x64emu_t *emu, uintptr_t fcn) { vFuuBp__t fn = (vFuuBp__t)fcn; struct_p_t arg_12={0}; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void vFuubp__32(x64emu_t *emu, uintptr_t fcn) { vFuubp__t fn = (vFuubp__t)fcn; struct_p_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_p(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void vFpbp_i_32(x64emu_t *emu, uintptr_t fcn) { vFpbp_i_t fn = (vFpbp_i_t)fcn; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void vFbp_pp_32(x64emu_t *emu, uintptr_t fcn) { vFbp_pp_t fn = (vFbp_pp_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void vFXLbL__32(x64emu_t *emu, uintptr_t fcn) { vFXLbL__t fn = (vFXLbL__t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void vFXbL_i_32(x64emu_t *emu, uintptr_t fcn) { vFXbL_i_t fn = (vFXbL_i_t)fcn; struct_L_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_L(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFpibl__32(x64emu_t *emu, uintptr_t fcn) { iFpibl__t fn = (iFpibl__t)fcn; struct_l_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_l(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_l(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFplbl__32(x64emu_t *emu, uintptr_t fcn) { iFplbl__t fn = (iFplbl__t)fcn; struct_l_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_l(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_l(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iEppBp__32(x64emu_t *emu, uintptr_t fcn) { iEppBp__t fn = (iEppBp__t)fcn; errno = emu->libc_err; struct_p_t arg_12={0}; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); emu->libc_err = errno; } +void iFppbp__32(x64emu_t *emu, uintptr_t fcn) { iFppbp__t fn = (iFppbp__t)fcn; struct_p_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_p(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFppbL__32(x64emu_t *emu, uintptr_t fcn) { iFppbL__t fn = (iFppbL__t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFpbp_i_32(x64emu_t *emu, uintptr_t fcn) { iFpbp_i_t fn = (iFpbp_i_t)fcn; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFpbL_p_32(x64emu_t *emu, uintptr_t fcn) { iFpbL_p_t fn = (iFpbL_p_t)fcn; struct_L_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_L(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptriv(R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iEBp_LL_32(x64emu_t *emu, uintptr_t fcn) { iEBp_LL_t fn = (iEBp_LL_t)fcn; errno = emu->libc_err; struct_p_t arg_4={0}; R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12))); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); emu->libc_err = errno; } +void iFbp_pi_32(x64emu_t *emu, uintptr_t fcn) { iFbp_pi_t fn = (iFbp_pi_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFbp_pI_32(x64emu_t *emu, uintptr_t fcn) { iFbp_pI_t fn = (iFbp_pI_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptri(int64_t, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFbp_pu_32(x64emu_t *emu, uintptr_t fcn) { iFbp_pu_t fn = (iFbp_pu_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFbp_pd_32(x64emu_t *emu, uintptr_t fcn) { iFbp_pd_t fn = (iFbp_pd_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptri(double, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFbp_pl_32(x64emu_t *emu, uintptr_t fcn) { iFbp_pl_t fn = (iFbp_pl_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12))); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFbp_pp_32(x64emu_t *emu, uintptr_t fcn) { iFbp_pp_t fn = (iFbp_pp_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFbp_Si_32(x64emu_t *emu, uintptr_t fcn) { iFbp_Si_t fn = (iFbp_Si_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, io_convert32(from_ptriv(R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFXibL__32(x64emu_t *emu, uintptr_t fcn) { iFXibL__t fn = (iFXibL__t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXLbp__32(x64emu_t *emu, uintptr_t fcn) { iFXLbp__t fn = (iFXLbp__t)fcn; struct_p_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_p(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXLbL__32(x64emu_t *emu, uintptr_t fcn) { iFXLbL__t fn = (iFXLbL__t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXbL_i_32(x64emu_t *emu, uintptr_t fcn) { iFXbL_i_t fn = (iFXbL_i_t)fcn; struct_L_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_L(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFXbp_i_32(x64emu_t *emu, uintptr_t fcn) { iFXbp_i_t fn = (iFXbp_i_t)fcn; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFXBL_p_32(x64emu_t *emu, uintptr_t fcn) { iFXBL_p_t fn = (iFXBL_p_t)fcn; struct_L_t arg_8={0}; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptriv(R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFXbp_p_32(x64emu_t *emu, uintptr_t fcn) { iFXbp_p_t fn = (iFXbp_p_t)fcn; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptriv(R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFXbL_p_32(x64emu_t *emu, uintptr_t fcn) { iFXbL_p_t fn = (iFXbL_p_t)fcn; struct_L_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_L(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptriv(R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void IEpBp_i_32(x64emu_t *emu, uintptr_t fcn) { IEpBp_i_t fn = (IEpBp_i_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; ui64_t r; r.i = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12)); R_EAX = r.d[0]; R_EDX = r.d[1]; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void UEpBp_i_32(x64emu_t *emu, uintptr_t fcn) { UEpBp_i_t fn = (UEpBp_i_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; ui64_t r; r.u = (uint64_t)fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12)); R_EAX = r.d[0]; R_EDX = r.d[1]; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void fEpBp_p_32(x64emu_t *emu, uintptr_t fcn) { fEpBp_p_t fn = (fEpBp_p_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; float fl = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptriv(R_ESP + 12)); fpu_do_push(emu); ST0val = fl; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void fEpBp_a_32(x64emu_t *emu, uintptr_t fcn) { fEpBp_a_t fn = (fEpBp_a_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; float fl = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_locale(from_ptri(ptr_t, R_ESP + 12))); fpu_do_push(emu); ST0val = fl; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void dEpBp_i_32(x64emu_t *emu, uintptr_t fcn) { dEpBp_i_t fn = (dEpBp_i_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; double db = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12)); fpu_do_push(emu); ST0val = db; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void dEpBp_a_32(x64emu_t *emu, uintptr_t fcn) { dEpBp_a_t fn = (dEpBp_a_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; double db = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_locale(from_ptri(ptr_t, R_ESP + 12))); fpu_do_push(emu); ST0val = db; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void lEpBp_i_32(x64emu_t *emu, uintptr_t fcn) { lEpBp_i_t fn = (lEpBp_i_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12))); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void lFpbp_L_32(x64emu_t *emu, uintptr_t fcn) { lFpbp_L_t fn = (lFpbp_L_t)fcn; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = to_long(fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 12)))); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void LEpBp_i_32(x64emu_t *emu, uintptr_t fcn) { LEpBp_i_t fn = (LEpBp_i_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12))); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void pEppbp__32(x64emu_t *emu, uintptr_t fcn) { pEppbp__t fn = (pEppbp__t)fcn; errno = emu->libc_err; struct_p_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_p(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); emu->libc_err = errno; } +void pEppBp__32(x64emu_t *emu, uintptr_t fcn) { pEppBp__t fn = (pEppBp__t)fcn; errno = emu->libc_err; struct_p_t arg_12={0}; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); emu->libc_err = errno; } +void pFppbp__32(x64emu_t *emu, uintptr_t fcn) { pFppbp__t fn = (pFppbp__t)fcn; struct_p_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_p(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void pFXLbL__32(x64emu_t *emu, uintptr_t fcn) { pFXLbL__t fn = (pFXLbL__t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXLbpp__32(x64emu_t *emu, uintptr_t fcn) { iFXLbpp__t fn = (iFXLbpp__t)fcn; struct_pp_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_pp(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_pp(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXbLC_i_32(x64emu_t *emu, uintptr_t fcn) { iFXbLC_i_t fn = (iFXbLC_i_t)fcn; struct_LC_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_LC(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_LC(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void vFLbL_bL__32(x64emu_t *emu, uintptr_t fcn) { vFLbL_bL__t fn = (vFLbL_bL__t)fcn; struct_L_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_L(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(from_ulong(from_ptri(ulong_t, R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFpbl_bl__32(x64emu_t *emu, uintptr_t fcn) { iFpbl_bl__t fn = (iFpbl_bl__t)fcn; struct_l_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_l(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); struct_l_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_l(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_l(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_l(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFpbL_bL__32(x64emu_t *emu, uintptr_t fcn) { iFpbL_bL__t fn = (iFpbL_bL__t)fcn; struct_L_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_L(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFbp_bp_p_32(x64emu_t *emu, uintptr_t fcn) { iFbp_bp_p_t fn = (iFbp_bp_p_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptriv(R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFXbiip_i_32(x64emu_t *emu, uintptr_t fcn) { iFXbiip_i_t fn = (iFXbiip_i_t)fcn; struct_iip_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_iip(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_iip(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFXbLip_L_32(x64emu_t *emu, uintptr_t fcn) { iFXbLip_L_t fn = (iFXbLip_L_t)fcn; struct_Lip_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_Lip(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 12))); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_Lip(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void vFXLbpLiL__32(x64emu_t *emu, uintptr_t fcn) { vFXLbpLiL__t fn = (vFXLbpLiL__t)fcn; struct_pLiL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_pLiL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_pLiL(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void vFXLrpLiL__32(x64emu_t *emu, uintptr_t fcn) { vFXLrpLiL__t fn = (vFXLrpLiL__t)fcn; struct_pLiL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_pLiL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); } +void iFXLbpLiL__32(x64emu_t *emu, uintptr_t fcn) { iFXLbpLiL__t fn = (iFXLbpLiL__t)fcn; struct_pLiL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_pLiL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_pLiL(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXLbLLii__32(x64emu_t *emu, uintptr_t fcn) { iFXLbLLii__t fn = (iFXLbLLii__t)fcn; struct_LLii_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LLii(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_LLii(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void pFXrLiiuL_p_32(x64emu_t *emu, uintptr_t fcn) { pFXrLiiuL_p_t fn = (pFXrLiiuL_p_t)fcn; struct_LiiuL_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_LiiuL(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptriv(R_ESP + 12))); } +void iFXLbLWWWcc__32(x64emu_t *emu, uintptr_t fcn) { iFXLbLWWWcc__t fn = (iFXLbLWWWcc__t)fcn; struct_LWWWcc_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LWWWcc(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iEirLLLL_BLLLL__32(x64emu_t *emu, uintptr_t fcn) { iEirLLLL_BLLLL__t fn = (iEirLLLL_BLLLL__t)fcn; errno = emu->libc_err; struct_LLLL_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_LLLL(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); struct_LLLL_t arg_12={0}; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_LLLL(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); emu->libc_err = errno; } +void pEppriiiiiiiiilt__32(x64emu_t *emu, uintptr_t fcn) { pEppriiiiiiiiilt__t fn = (pEppriiiiiiiiilt__t)fcn; errno = emu->libc_err; struct_iiiiiiiiilt_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_iiiiiiiiilt(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL)); emu->libc_err = errno; } +void vEEipp_32(x64emu_t *emu, uintptr_t fcn) { vEEipp_t fn = (vEEipp_t)fcn; errno = emu->libc_err; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void vFEipp_32(x64emu_t *emu, uintptr_t fcn) { vFEipp_t fn = (vFEipp_t)fcn; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vEEipV_32(x64emu_t *emu, uintptr_t fcn) { vEEipV_t fn = (vEEipV_t)fcn; errno = emu->libc_err; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptrv(R_ESP + 12)); emu->libc_err = errno; } +void vEEpup_32(x64emu_t *emu, uintptr_t fcn) { vEEpup_t fn = (vEEpup_t)fcn; errno = emu->libc_err; fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void vFEpup_32(x64emu_t *emu, uintptr_t fcn) { vFEpup_t fn = (vFEpup_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFEpll_32(x64emu_t *emu, uintptr_t fcn) { vFEpll_t fn = (vFEpll_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12))); } +void vEEppp_32(x64emu_t *emu, uintptr_t fcn) { vEEppp_t fn = (vEEppp_t)fcn; errno = emu->libc_err; fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void vFEppp_32(x64emu_t *emu, uintptr_t fcn) { vFEppp_t fn = (vFEppp_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void vFEXLp_32(x64emu_t *emu, uintptr_t fcn) { vFEXLp_t fn = (vFEXLp_t)fcn; fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void vFcccc_32(x64emu_t *emu, uintptr_t fcn) { vFcccc_t fn = (vFcccc_t)fcn; fn(from_ptri(int8_t, R_ESP + 4), from_ptri(int8_t, R_ESP + 8), from_ptri(int8_t, R_ESP + 12), from_ptri(int8_t, R_ESP + 16)); } +void vFwwww_32(x64emu_t *emu, uintptr_t fcn) { vFwwww_t fn = (vFwwww_t)fcn; fn(from_ptri(int16_t, R_ESP + 4), from_ptri(int16_t, R_ESP + 8), from_ptri(int16_t, R_ESP + 12), from_ptri(int16_t, R_ESP + 16)); } +void vFiiii_32(x64emu_t *emu, uintptr_t fcn) { vFiiii_t fn = (vFiiii_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFiiip_32(x64emu_t *emu, uintptr_t fcn) { vFiiip_t fn = (vFiiip_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFiiCp_32(x64emu_t *emu, uintptr_t fcn) { vFiiCp_t fn = (vFiiCp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFiill_32(x64emu_t *emu, uintptr_t fcn) { vFiill_t fn = (vFiill_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16))); } +void vFiIII_32(x64emu_t *emu, uintptr_t fcn) { vFiIII_t fn = (vFiIII_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 16), from_ptri(int64_t, R_ESP + 24)); } +void vFiuip_32(x64emu_t *emu, uintptr_t fcn) { vFiuip_t fn = (vFiuip_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFiuuu_32(x64emu_t *emu, uintptr_t fcn) { vFiuuu_t fn = (vFiuuu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void vFiulp_32(x64emu_t *emu, uintptr_t fcn) { vFiulp_t fn = (vFiulp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } +void vFiupV_32(x64emu_t *emu, uintptr_t fcn) { vFiupV_t fn = (vFiupV_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptrv(R_ESP + 16)); } +void vFiUUU_32(x64emu_t *emu, uintptr_t fcn) { vFiUUU_t fn = (vFiUUU_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 16), from_ptri(uint64_t, R_ESP + 24)); } +void vFifff_32(x64emu_t *emu, uintptr_t fcn) { vFifff_t fn = (vFifff_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16)); } +void vFiddd_32(x64emu_t *emu, uintptr_t fcn) { vFiddd_t fn = (vFiddd_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(double, R_ESP + 24)); } +void vFilip_32(x64emu_t *emu, uintptr_t fcn) { vFilip_t fn = (vFilip_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFilpu_32(x64emu_t *emu, uintptr_t fcn) { vFilpu_t fn = (vFilpu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void vFilpp_32(x64emu_t *emu, uintptr_t fcn) { vFilpp_t fn = (vFilpp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFipup_32(x64emu_t *emu, uintptr_t fcn) { vFipup_t fn = (vFipup_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFipll_32(x64emu_t *emu, uintptr_t fcn) { vFipll_t fn = (vFipll_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16))); } +void vFippp_32(x64emu_t *emu, uintptr_t fcn) { vFippp_t fn = (vFippp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFCCCC_32(x64emu_t *emu, uintptr_t fcn) { vFCCCC_t fn = (vFCCCC_t)fcn; fn(from_ptri(uint8_t, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16)); } +void vFWWWW_32(x64emu_t *emu, uintptr_t fcn) { vFWWWW_t fn = (vFWWWW_t)fcn; fn(from_ptri(uint16_t, R_ESP + 4), from_ptri(uint16_t, R_ESP + 8), from_ptri(uint16_t, R_ESP + 12), from_ptri(uint16_t, R_ESP + 16)); } +void vFuccc_32(x64emu_t *emu, uintptr_t fcn) { vFuccc_t fn = (vFuccc_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int8_t, R_ESP + 8), from_ptri(int8_t, R_ESP + 12), from_ptri(int8_t, R_ESP + 16)); } +void vFuwww_32(x64emu_t *emu, uintptr_t fcn) { vFuwww_t fn = (vFuwww_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int16_t, R_ESP + 8), from_ptri(int16_t, R_ESP + 12), from_ptri(int16_t, R_ESP + 16)); } +void vFuiii_32(x64emu_t *emu, uintptr_t fcn) { vFuiii_t fn = (vFuiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFuiip_32(x64emu_t *emu, uintptr_t fcn) { vFuiip_t fn = (vFuiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFuiII_32(x64emu_t *emu, uintptr_t fcn) { vFuiII_t fn = (vFuiII_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 12), from_ptri(int64_t, R_ESP + 20)); } +void vFuiui_32(x64emu_t *emu, uintptr_t fcn) { vFuiui_t fn = (vFuiui_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFuiuC_32(x64emu_t *emu, uintptr_t fcn) { vFuiuC_t fn = (vFuiuC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16)); } +void vFuiuu_32(x64emu_t *emu, uintptr_t fcn) { vFuiuu_t fn = (vFuiuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void vFuiup_32(x64emu_t *emu, uintptr_t fcn) { vFuiup_t fn = (vFuiup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFuiUU_32(x64emu_t *emu, uintptr_t fcn) { vFuiUU_t fn = (vFuiUU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12), from_ptri(uint64_t, R_ESP + 20)); } +void vFuifi_32(x64emu_t *emu, uintptr_t fcn) { vFuifi_t fn = (vFuifi_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFuiff_32(x64emu_t *emu, uintptr_t fcn) { vFuiff_t fn = (vFuiff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16)); } +void vFuidd_32(x64emu_t *emu, uintptr_t fcn) { vFuidd_t fn = (vFuidd_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20)); } +void vFuilp_32(x64emu_t *emu, uintptr_t fcn) { vFuilp_t fn = (vFuilp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } +void vFuipu_32(x64emu_t *emu, uintptr_t fcn) { vFuipu_t fn = (vFuipu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void vFuipp_32(x64emu_t *emu, uintptr_t fcn) { vFuipp_t fn = (vFuipp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFuIII_32(x64emu_t *emu, uintptr_t fcn) { vFuIII_t fn = (vFuIII_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 16), from_ptri(int64_t, R_ESP + 24)); } +void vFuWWW_32(x64emu_t *emu, uintptr_t fcn) { vFuWWW_t fn = (vFuWWW_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint16_t, R_ESP + 8), from_ptri(uint16_t, R_ESP + 12), from_ptri(uint16_t, R_ESP + 16)); } +void vFuuii_32(x64emu_t *emu, uintptr_t fcn) { vFuuii_t fn = (vFuuii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFuuiu_32(x64emu_t *emu, uintptr_t fcn) { vFuuiu_t fn = (vFuuiu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void vFuuil_32(x64emu_t *emu, uintptr_t fcn) { vFuuil_t fn = (vFuuil_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16))); } +void vFuuip_32(x64emu_t *emu, uintptr_t fcn) { vFuuip_t fn = (vFuuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFuuCu_32(x64emu_t *emu, uintptr_t fcn) { vFuuCu_t fn = (vFuuCu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void vFuuCp_32(x64emu_t *emu, uintptr_t fcn) { vFuuCp_t fn = (vFuuCp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFuuui_32(x64emu_t *emu, uintptr_t fcn) { vFuuui_t fn = (vFuuui_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuuu_t fn = (vFuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void vFuuuf_32(x64emu_t *emu, uintptr_t fcn) { vFuuuf_t fn = (vFuuuf_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(float, R_ESP + 16)); } +void vFuuud_32(x64emu_t *emu, uintptr_t fcn) { vFuuud_t fn = (vFuuud_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(double, R_ESP + 16)); } +void vFuuul_32(x64emu_t *emu, uintptr_t fcn) { vFuuul_t fn = (vFuuul_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16))); } +void vFuuup_32(x64emu_t *emu, uintptr_t fcn) { vFuuup_t fn = (vFuuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFuuUl_32(x64emu_t *emu, uintptr_t fcn) { vFuuUl_t fn = (vFuuUl_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 20))); } +void vFuuff_32(x64emu_t *emu, uintptr_t fcn) { vFuuff_t fn = (vFuuff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16)); } +void vFuuli_32(x64emu_t *emu, uintptr_t fcn) { vFuuli_t fn = (vFuuli_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16)); } +void vFuupi_32(x64emu_t *emu, uintptr_t fcn) { vFuupi_t fn = (vFuupi_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFuupp_32(x64emu_t *emu, uintptr_t fcn) { vFuupp_t fn = (vFuupp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFuUui_32(x64emu_t *emu, uintptr_t fcn) { vFuUui_t fn = (vFuUui_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuUup_32(x64emu_t *emu, uintptr_t fcn) { vFuUup_t fn = (vFuUup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuUUU_32(x64emu_t *emu, uintptr_t fcn) { vFuUUU_t fn = (vFuUUU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 16), from_ptri(uint64_t, R_ESP + 24)); } +void vFufff_32(x64emu_t *emu, uintptr_t fcn) { vFufff_t fn = (vFufff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16)); } +void vFuddd_32(x64emu_t *emu, uintptr_t fcn) { vFuddd_t fn = (vFuddd_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(double, R_ESP + 24)); } +void vFuluU_32(x64emu_t *emu, uintptr_t fcn) { vFuluU_t fn = (vFuluU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint64_t, R_ESP + 16)); } +void vFullC_32(x64emu_t *emu, uintptr_t fcn) { vFullC_t fn = (vFullC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)), from_ptri(uint8_t, R_ESP + 16)); } +void vFullp_32(x64emu_t *emu, uintptr_t fcn) { vFullp_t fn = (vFullp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } +void vFulpu_32(x64emu_t *emu, uintptr_t fcn) { vFulpu_t fn = (vFulpu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void vFulpp_32(x64emu_t *emu, uintptr_t fcn) { vFulpp_t fn = (vFulpp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFupii_32(x64emu_t *emu, uintptr_t fcn) { vFupii_t fn = (vFupii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFuppi_32(x64emu_t *emu, uintptr_t fcn) { vFuppi_t fn = (vFuppi_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFuppu_32(x64emu_t *emu, uintptr_t fcn) { vFuppu_t fn = (vFuppu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void vFUUpi_32(x64emu_t *emu, uintptr_t fcn) { vFUUpi_t fn = (vFUUpi_t)fcn; fn(from_ptri(uint64_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 12), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFffff_32(x64emu_t *emu, uintptr_t fcn) { vFffff_t fn = (vFffff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16)); } +void vFdddd_32(x64emu_t *emu, uintptr_t fcn) { vFdddd_t fn = (vFdddd_t)fcn; fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptri(double, R_ESP + 28)); } +void vFllii_32(x64emu_t *emu, uintptr_t fcn) { vFllii_t fn = (vFllii_t)fcn; fn(from_long(from_ptri(long_t, R_ESP + 4)), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFLiii_32(x64emu_t *emu, uintptr_t fcn) { vFLiii_t fn = (vFLiii_t)fcn; fn(from_ulong(from_ptri(ulong_t, R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFpiip_32(x64emu_t *emu, uintptr_t fcn) { vFpiip_t fn = (vFpiip_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFpipi_32(x64emu_t *emu, uintptr_t fcn) { vFpipi_t fn = (vFpipi_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFpipp_32(x64emu_t *emu, uintptr_t fcn) { vFpipp_t fn = (vFpipp_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFpdii_32(x64emu_t *emu, uintptr_t fcn) { vFpdii_t fn = (vFpdii_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFpddd_32(x64emu_t *emu, uintptr_t fcn) { vFpddd_t fn = (vFpddd_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(double, R_ESP + 24)); } +void vFplpp_32(x64emu_t *emu, uintptr_t fcn) { vFplpp_t fn = (vFplpp_t)fcn; fn(from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vEppip_32(x64emu_t *emu, uintptr_t fcn) { vEppip_t fn = (vEppip_t)fcn; errno = emu->libc_err; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void vFppui_32(x64emu_t *emu, uintptr_t fcn) { vFppui_t fn = (vFppui_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFpppp_32(x64emu_t *emu, uintptr_t fcn) { vFpppp_t fn = (vFpppp_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFXiiL_32(x64emu_t *emu, uintptr_t fcn) { vFXiiL_t fn = (vFXiiL_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); } +void vFXiLu_32(x64emu_t *emu, uintptr_t fcn) { vFXiLu_t fn = (vFXiLu_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16)); } +void vFXLii_32(x64emu_t *emu, uintptr_t fcn) { vFXLii_t fn = (vFXLii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFXLip_32(x64emu_t *emu, uintptr_t fcn) { vFXLip_t fn = (vFXLip_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFXLLL_32(x64emu_t *emu, uintptr_t fcn) { vFXLLL_t fn = (vFXLLL_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16))); } +void vFXLLp_32(x64emu_t *emu, uintptr_t fcn) { vFXLLp_t fn = (vFXLLp_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } +void vFXLpi_32(x64emu_t *emu, uintptr_t fcn) { vFXLpi_t fn = (vFXLpi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void vFXLpL_32(x64emu_t *emu, uintptr_t fcn) { vFXLpL_t fn = (vFXLpL_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); } +void vFXpip_32(x64emu_t *emu, uintptr_t fcn) { vFXpip_t fn = (vFXpip_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vFXppL_32(x64emu_t *emu, uintptr_t fcn) { vFXppL_t fn = (vFXppL_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); } +void cFpiii_32(x64emu_t *emu, uintptr_t fcn) { cFpiii_t fn = (cFpiii_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iEEiip_32(x64emu_t *emu, uintptr_t fcn) { iEEiip_t fn = (iEEiip_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iEEiiN_32(x64emu_t *emu, uintptr_t fcn) { iEEiiN_t fn = (iEEiiN_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iEEipp_32(x64emu_t *emu, uintptr_t fcn) { iEEipp_t fn = (iEEipp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iFEipp_32(x64emu_t *emu, uintptr_t fcn) { iFEipp_t fn = (iFEipp_t)fcn; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iEEipV_32(x64emu_t *emu, uintptr_t fcn) { iEEipV_t fn = (iEEipV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptrv(R_ESP + 12)); emu->libc_err = errno; } +void iEEpii_32(x64emu_t *emu, uintptr_t fcn) { iEEpii_t fn = (iEEpii_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; } +void iEEpip_32(x64emu_t *emu, uintptr_t fcn) { iEEpip_t fn = (iEEpip_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iFEpip_32(x64emu_t *emu, uintptr_t fcn) { iFEpip_t fn = (iFEpip_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFEpui_32(x64emu_t *emu, uintptr_t fcn) { iFEpui_t fn = (iFEpui_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void iFEpuu_32(x64emu_t *emu, uintptr_t fcn) { iFEpuu_t fn = (iFEpuu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iEEpup_32(x64emu_t *emu, uintptr_t fcn) { iEEpup_t fn = (iEEpup_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iEEpLi_32(x64emu_t *emu, uintptr_t fcn) { iEEpLi_t fn = (iEEpLi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; } +void iFEpLi_32(x64emu_t *emu, uintptr_t fcn) { iFEpLi_t fn = (iFEpLi_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); } +void iEEppi_32(x64emu_t *emu, uintptr_t fcn) { iEEppi_t fn = (iEEppi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); emu->libc_err = errno; } +void iFEppu_32(x64emu_t *emu, uintptr_t fcn) { iFEppu_t fn = (iFEppu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); } +void iEEppL_32(x64emu_t *emu, uintptr_t fcn) { iEEppL_t fn = (iEEppL_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12))); emu->libc_err = errno; } +void iEEppp_32(x64emu_t *emu, uintptr_t fcn) { iEEppp_t fn = (iEEppp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iFEppp_32(x64emu_t *emu, uintptr_t fcn) { iFEppp_t fn = (iFEppp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iEEppV_32(x64emu_t *emu, uintptr_t fcn) { iEEppV_t fn = (iEEppV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptrv(R_ESP + 12)); emu->libc_err = errno; } +void iFEppV_32(x64emu_t *emu, uintptr_t fcn) { iFEppV_t fn = (iFEppV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptrv(R_ESP + 12)); } +void iEEpON_32(x64emu_t *emu, uintptr_t fcn) { iEEpON_t fn = (iEEpON_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), of_convert32(from_ptri(int32_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iEEhup_32(x64emu_t *emu, uintptr_t fcn) { iEEhup_t fn = (iEEhup_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_hash(from_ptri(ptr_t, R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iEESpp_32(x64emu_t *emu, uintptr_t fcn) { iEESpp_t fn = (iEESpp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, io_convert32(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iEESpV_32(x64emu_t *emu, uintptr_t fcn) { iEESpV_t fn = (iEESpV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, io_convert32(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptrv(R_ESP + 12)); emu->libc_err = errno; } +void iFEXip_32(x64emu_t *emu, uintptr_t fcn) { iFEXip_t fn = (iFEXip_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFEXlp_32(x64emu_t *emu, uintptr_t fcn) { iFEXlp_t fn = (iFEXlp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void iFEXLp_32(x64emu_t *emu, uintptr_t fcn) { iFEXLp_t fn = (iFEXLp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); } +void iFEXpp_32(x64emu_t *emu, uintptr_t fcn) { iFEXpp_t fn = (iFEXpp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); } +void iFiiii_32(x64emu_t *emu, uintptr_t fcn) { iFiiii_t fn = (iFiiii_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFiiiu_32(x64emu_t *emu, uintptr_t fcn) { iFiiiu_t fn = (iFiiiu_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void iEiiip_32(x64emu_t *emu, uintptr_t fcn) { iEiiip_t fn = (iEiiip_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void iEiiiN_32(x64emu_t *emu, uintptr_t fcn) { iEiiiN_t fn = (iEiiiN_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void iEiiII_32(x64emu_t *emu, uintptr_t fcn) { iEiiII_t fn = (iEiiII_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 12), from_ptri(int64_t, R_ESP + 20)); emu->libc_err = errno; } +void iEiIIi_32(x64emu_t *emu, uintptr_t fcn) { iEiIIi_t fn = (iEiIIi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 24)); emu->libc_err = errno; } +void iEilli_32(x64emu_t *emu, uintptr_t fcn) { iEilli_t fn = (iEilli_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16)); emu->libc_err = errno; } +void iEipii_32(x64emu_t *emu, uintptr_t fcn) { iEipii_t fn = (iEipii_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); emu->libc_err = errno; } +void iEipip_32(x64emu_t *emu, uintptr_t fcn) { iEipip_t fn = (iEipip_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void iEipui_32(x64emu_t *emu, uintptr_t fcn) { iEipui_t fn = (iEipui_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); emu->libc_err = errno; } +void iEipup_32(x64emu_t *emu, uintptr_t fcn) { iEipup_t fn = (iEipup_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void iEippi_32(x64emu_t *emu, uintptr_t fcn) { iEippi_t fn = (iEippi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); emu->libc_err = errno; } +void iEippL_32(x64emu_t *emu, uintptr_t fcn) { iEippL_t fn = (iEippL_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); emu->libc_err = errno; } +void iFippp_32(x64emu_t *emu, uintptr_t fcn) { iFippp_t fn = (iFippp_t)fcn; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iEipON_32(x64emu_t *emu, uintptr_t fcn) { iEipON_t fn = (iEipON_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), of_convert32(from_ptri(int32_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void iFuiup_32(x64emu_t *emu, uintptr_t fcn) { iFuiup_t fn = (iFuiup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iEuupi_32(x64emu_t *emu, uintptr_t fcn) { iEuupi_t fn = (iEuupi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); emu->libc_err = errno; } +void iFuppp_32(x64emu_t *emu, uintptr_t fcn) { iFuppp_t fn = (iFuppp_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFpiii_32(x64emu_t *emu, uintptr_t fcn) { iFpiii_t fn = (iFpiii_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFpiiL_32(x64emu_t *emu, uintptr_t fcn) { iFpiiL_t fn = (iFpiiL_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); } +void iFpiip_32(x64emu_t *emu, uintptr_t fcn) { iFpiip_t fn = (iFpiip_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFpiuu_32(x64emu_t *emu, uintptr_t fcn) { iFpiuu_t fn = (iFpiuu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void iFpili_32(x64emu_t *emu, uintptr_t fcn) { iFpili_t fn = (iFpili_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16)); } +void iEpipp_32(x64emu_t *emu, uintptr_t fcn) { iEpipp_t fn = (iEpipp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void iFpipp_32(x64emu_t *emu, uintptr_t fcn) { iFpipp_t fn = (iFpipp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFpCCC_32(x64emu_t *emu, uintptr_t fcn) { iFpCCC_t fn = (iFpCCC_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16)); } +void iFpWWu_32(x64emu_t *emu, uintptr_t fcn) { iFpWWu_t fn = (iFpWWu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint16_t, R_ESP + 8), from_ptri(uint16_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void iFpuLp_32(x64emu_t *emu, uintptr_t fcn) { iFpuLp_t fn = (iFpuLp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } +void iFpupi_32(x64emu_t *emu, uintptr_t fcn) { iFpupi_t fn = (iFpupi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFpupp_32(x64emu_t *emu, uintptr_t fcn) { iFpupp_t fn = (iFpupp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFppii_32(x64emu_t *emu, uintptr_t fcn) { iFppii_t fn = (iFppii_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFppiU_32(x64emu_t *emu, uintptr_t fcn) { iFppiU_t fn = (iFppiU_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint64_t, R_ESP + 16)); } +void iFppip_32(x64emu_t *emu, uintptr_t fcn) { iFppip_t fn = (iFppip_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFppuw_32(x64emu_t *emu, uintptr_t fcn) { iFppuw_t fn = (iFppuw_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int16_t, R_ESP + 16)); } +void iFppui_32(x64emu_t *emu, uintptr_t fcn) { iFppui_t fn = (iFppui_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFppuu_32(x64emu_t *emu, uintptr_t fcn) { iFppuu_t fn = (iFppuu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void iFppup_32(x64emu_t *emu, uintptr_t fcn) { iFppup_t fn = (iFppup_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFppLi_32(x64emu_t *emu, uintptr_t fcn) { iFppLi_t fn = (iFppLi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16)); } +void iFpppi_32(x64emu_t *emu, uintptr_t fcn) { iFpppi_t fn = (iFpppi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFpppu_32(x64emu_t *emu, uintptr_t fcn) { iFpppu_t fn = (iFpppu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void iEpppL_32(x64emu_t *emu, uintptr_t fcn) { iEpppL_t fn = (iEpppL_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); emu->libc_err = errno; } +void iFpppp_32(x64emu_t *emu, uintptr_t fcn) { iFpppp_t fn = (iFpppp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iESpiL_32(x64emu_t *emu, uintptr_t fcn) { iESpiL_t fn = (iESpiL_t)fcn; errno = emu->libc_err; R_EAX = fn(io_convert32(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); emu->libc_err = errno; } +void iFXiii_32(x64emu_t *emu, uintptr_t fcn) { iFXiii_t fn = (iFXiii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFXiiL_32(x64emu_t *emu, uintptr_t fcn) { iFXiiL_t fn = (iFXiiL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); } +void iFXiip_32(x64emu_t *emu, uintptr_t fcn) { iFXiip_t fn = (iFXiip_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFXiuL_32(x64emu_t *emu, uintptr_t fcn) { iFXiuL_t fn = (iFXiuL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); } +void iFXiLL_32(x64emu_t *emu, uintptr_t fcn) { iFXiLL_t fn = (iFXiLL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16))); } +void iFXipi_32(x64emu_t *emu, uintptr_t fcn) { iFXipi_t fn = (iFXipi_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFXipp_32(x64emu_t *emu, uintptr_t fcn) { iFXipp_t fn = (iFXipp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFXWWW_32(x64emu_t *emu, uintptr_t fcn) { iFXWWW_t fn = (iFXWWW_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint16_t, R_ESP + 8), from_ptri(uint16_t, R_ESP + 12), from_ptri(uint16_t, R_ESP + 16)); } +void iFXuuu_32(x64emu_t *emu, uintptr_t fcn) { iFXuuu_t fn = (iFXuuu_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void iFXuuL_32(x64emu_t *emu, uintptr_t fcn) { iFXuuL_t fn = (iFXuuL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); } +void iFXuup_32(x64emu_t *emu, uintptr_t fcn) { iFXuup_t fn = (iFXuup_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFXuLL_32(x64emu_t *emu, uintptr_t fcn) { iFXuLL_t fn = (iFXuLL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16))); } +void iFXupp_32(x64emu_t *emu, uintptr_t fcn) { iFXupp_t fn = (iFXupp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFXLii_32(x64emu_t *emu, uintptr_t fcn) { iFXLii_t fn = (iFXLii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFXLiL_32(x64emu_t *emu, uintptr_t fcn) { iFXLiL_t fn = (iFXLiL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); } +void iFXLip_32(x64emu_t *emu, uintptr_t fcn) { iFXLip_t fn = (iFXLip_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFXLuu_32(x64emu_t *emu, uintptr_t fcn) { iFXLuu_t fn = (iFXLuu_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void iFXLLL_32(x64emu_t *emu, uintptr_t fcn) { iFXLLL_t fn = (iFXLLL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16))); } +void iFXLLp_32(x64emu_t *emu, uintptr_t fcn) { iFXLLp_t fn = (iFXLLp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } +void iFXLpi_32(x64emu_t *emu, uintptr_t fcn) { iFXLpi_t fn = (iFXLpi_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFXpii_32(x64emu_t *emu, uintptr_t fcn) { iFXpii_t fn = (iFXpii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFXpip_32(x64emu_t *emu, uintptr_t fcn) { iFXpip_t fn = (iFXpip_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFXpLp_32(x64emu_t *emu, uintptr_t fcn) { iFXpLp_t fn = (iFXpLp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } +void iFXppi_32(x64emu_t *emu, uintptr_t fcn) { iFXppi_t fn = (iFXppi_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFXppp_32(x64emu_t *emu, uintptr_t fcn) { iFXppp_t fn = (iFXppp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void IFEpIi_32(x64emu_t *emu, uintptr_t fcn) { IFEpIi_t fn = (IFEpIi_t)fcn; ui64_t r; r.i = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 16)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void CFuuff_32(x64emu_t *emu, uintptr_t fcn) { CFuuff_t fn = (CFuuff_t)fcn; R_EAX = (unsigned char)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16)); } +void uFEuip_32(x64emu_t *emu, uintptr_t fcn) { uFEuip_t fn = (uFEuip_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12)); } +void uFEpii_32(x64emu_t *emu, uintptr_t fcn) { uFEpii_t fn = (uFEpii_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12)); } +void uFuuuu_32(x64emu_t *emu, uintptr_t fcn) { uFuuuu_t fn = (uFuuuu_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void uFpCCC_32(x64emu_t *emu, uintptr_t fcn) { uFpCCC_t fn = (uFpCCC_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16)); } +void uFppip_32(x64emu_t *emu, uintptr_t fcn) { uFppip_t fn = (uFppip_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void uFpppi_32(x64emu_t *emu, uintptr_t fcn) { uFpppi_t fn = (uFpppi_t)fcn; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void lEEipi_32(x64emu_t *emu, uintptr_t fcn) { lEEipi_t fn = (lEEipi_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); emu->libc_err = errno; } +void lEEppL_32(x64emu_t *emu, uintptr_t fcn) { lEEppL_t fn = (lEEppL_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); emu->libc_err = errno; } +void lEiipL_32(x64emu_t *emu, uintptr_t fcn) { lEiipL_t fn = (lEiipL_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)))); emu->libc_err = errno; } +void lEipLi_32(x64emu_t *emu, uintptr_t fcn) { lEipLi_t fn = (lEipLi_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16))); emu->libc_err = errno; } +void lEipLI_32(x64emu_t *emu, uintptr_t fcn) { lEipLI_t fn = (lEipLI_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int64_t, R_ESP + 16))); emu->libc_err = errno; } +void lEipLl_32(x64emu_t *emu, uintptr_t fcn) { lEipLl_t fn = (lEipLl_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16)))); emu->libc_err = errno; } +void lEipLL_32(x64emu_t *emu, uintptr_t fcn) { lEipLL_t fn = (lEipLL_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)))); emu->libc_err = errno; } +void lFpuip_32(x64emu_t *emu, uintptr_t fcn) { lFpuip_t fn = (lFpuip_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16))); } +void LFEpLp_32(x64emu_t *emu, uintptr_t fcn) { LFEpLp_t fn = (LFEpLp_t)fcn; R_EAX = to_ulong(fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12))); } +void LFEXii_32(x64emu_t *emu, uintptr_t fcn) { LFEXii_t fn = (LFEXii_t)fcn; R_EAX = to_ulong(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void LEpLLS_32(x64emu_t *emu, uintptr_t fcn) { LEpLLS_t fn = (LEpLLS_t)fcn; errno = emu->libc_err; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), io_convert32(from_ptriv(R_ESP + 16)))); emu->libc_err = errno; } +void LEppLp_32(x64emu_t *emu, uintptr_t fcn) { LEppLp_t fn = (LEppLp_t)fcn; errno = emu->libc_err; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16))); emu->libc_err = errno; } +void LEppLa_32(x64emu_t *emu, uintptr_t fcn) { LEppLa_t fn = (LEppLa_t)fcn; errno = emu->libc_err; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_locale(from_ptri(ptr_t, R_ESP + 16)))); emu->libc_err = errno; } +void LFXCii_32(x64emu_t *emu, uintptr_t fcn) { LFXCii_t fn = (LFXCii_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint8_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16))); } +void LFXLuu_32(x64emu_t *emu, uintptr_t fcn) { LFXLuu_t fn = (LFXLuu_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16))); } +void LFXpLp_32(x64emu_t *emu, uintptr_t fcn) { LFXpLp_t fn = (LFXpLp_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16))); } +void pFEupp_32(x64emu_t *emu, uintptr_t fcn) { pFEupp_t fn = (pFEupp_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pFEpip_32(x64emu_t *emu, uintptr_t fcn) { pFEpip_t fn = (pFEpip_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pEEppi_32(x64emu_t *emu, uintptr_t fcn) { pEEppi_t fn = (pEEppi_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); emu->libc_err = errno; } +void pFEppi_32(x64emu_t *emu, uintptr_t fcn) { pFEppi_t fn = (pFEppi_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); } +void pEEppp_32(x64emu_t *emu, uintptr_t fcn) { pEEppp_t fn = (pEEppp_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); emu->libc_err = errno; } +void pFEppp_32(x64emu_t *emu, uintptr_t fcn) { pFEppp_t fn = (pFEppp_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pFEXip_32(x64emu_t *emu, uintptr_t fcn) { pFEXip_t fn = (pFEXip_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pFEXLL_32(x64emu_t *emu, uintptr_t fcn) { pFEXLL_t fn = (pFEXLL_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); } +void pFEXLp_32(x64emu_t *emu, uintptr_t fcn) { pFEXLp_t fn = (pFEXLp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12))); } +void pFEXpL_32(x64emu_t *emu, uintptr_t fcn) { pFEXpL_t fn = (pFEXpL_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)))); } +void pFEXpp_32(x64emu_t *emu, uintptr_t fcn) { pFEXpp_t fn = (pFEXpp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); } +void pFiiiu_32(x64emu_t *emu, uintptr_t fcn) { pFiiiu_t fn = (pFiiiu_t)fcn; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16))); } +void pFifff_32(x64emu_t *emu, uintptr_t fcn) { pFifff_t fn = (pFifff_t)fcn; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16))); } +void pFillu_32(x64emu_t *emu, uintptr_t fcn) { pFillu_t fn = (pFillu_t)fcn; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16))); } +void pEippu_32(x64emu_t *emu, uintptr_t fcn) { pEippu_t fn = (pEippu_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16))); emu->libc_err = errno; } +void pFullu_32(x64emu_t *emu, uintptr_t fcn) { pFullu_t fn = (pFullu_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16))); } +void pEpiLL_32(x64emu_t *emu, uintptr_t fcn) { pEpiLL_t fn = (pEpiLL_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)))); emu->libc_err = errno; } +void pFpuii_32(x64emu_t *emu, uintptr_t fcn) { pFpuii_t fn = (pFpuii_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16))); } +void pFpupp_32(x64emu_t *emu, uintptr_t fcn) { pFpupp_t fn = (pFpupp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } +void pEpLiS_32(x64emu_t *emu, uintptr_t fcn) { pEpLiS_t fn = (pEpLiS_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), io_convert32(from_ptriv(R_ESP + 16)))); emu->libc_err = errno; } +void pEpLpL_32(x64emu_t *emu, uintptr_t fcn) { pEpLpL_t fn = (pEpLpL_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)))); emu->libc_err = errno; } +void pEppLL_32(x64emu_t *emu, uintptr_t fcn) { pEppLL_t fn = (pEppLL_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)))); emu->libc_err = errno; } +void pFpppL_32(x64emu_t *emu, uintptr_t fcn) { pFpppL_t fn = (pFpppL_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)))); } +void pFpppp_32(x64emu_t *emu, uintptr_t fcn) { pFpppp_t fn = (pFpppp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } +void pFXiii_32(x64emu_t *emu, uintptr_t fcn) { pFXiii_t fn = (pFXiii_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16))); } +void pFXiip_32(x64emu_t *emu, uintptr_t fcn) { pFXiip_t fn = (pFXiip_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16))); } +void pFXCip_32(x64emu_t *emu, uintptr_t fcn) { pFXCip_t fn = (pFXCip_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint8_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16))); } +void pFXLpp_32(x64emu_t *emu, uintptr_t fcn) { pFXLpp_t fn = (pFXLpp_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } +void pFXppp_32(x64emu_t *emu, uintptr_t fcn) { pFXppp_t fn = (pFXppp_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } +void vFuibp_i_32(x64emu_t *emu, uintptr_t fcn) { vFuibp_i_t fn = (vFuibp_i_t)fcn; struct_p_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_p(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptri(int32_t, R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void vFuuuBp__32(x64emu_t *emu, uintptr_t fcn) { vFuuuBp__t fn = (vFuuuBp__t)fcn; struct_p_t arg_16={0}; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void vFbp_ppp_32(x64emu_t *emu, uintptr_t fcn) { vFbp_ppp_t fn = (vFbp_ppp_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void vFXLLbL__32(x64emu_t *emu, uintptr_t fcn) { vFXLLbL__t fn = (vFXLLbL__t)fcn; struct_L_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_L(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void iFplibl__32(x64emu_t *emu, uintptr_t fcn) { iFplibl__t fn = (iFplibl__t)fcn; struct_l_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_l(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_l(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void iFpppbp__32(x64emu_t *emu, uintptr_t fcn) { iFpppbp__t fn = (iFpppbp__t)fcn; struct_p_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_p(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void iFppbL_p_32(x64emu_t *emu, uintptr_t fcn) { iFppbL_p_t fn = (iFppbL_p_t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptriv(R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFbp_pii_32(x64emu_t *emu, uintptr_t fcn) { iFbp_pii_t fn = (iFbp_pii_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFbp_pip_32(x64emu_t *emu, uintptr_t fcn) { iFbp_pip_t fn = (iFbp_pip_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFBp_pui_32(x64emu_t *emu, uintptr_t fcn) { iFBp_pui_t fn = (iFBp_pui_t)fcn; struct_p_t arg_4={0}; R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFXLiBp__32(x64emu_t *emu, uintptr_t fcn) { iFXLiBp__t fn = (iFXLiBp__t)fcn; struct_p_t arg_16={0}; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void iFXLbp_i_32(x64emu_t *emu, uintptr_t fcn) { iFXLbp_i_t fn = (iFXLbp_i_t)fcn; struct_p_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_p(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptri(int32_t, R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXLbL_i_32(x64emu_t *emu, uintptr_t fcn) { iFXLbL_i_t fn = (iFXLbL_i_t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptri(int32_t, R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXLbp_p_32(x64emu_t *emu, uintptr_t fcn) { iFXLbp_p_t fn = (iFXLbp_p_t)fcn; struct_p_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_p(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptriv(R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void IEpBp_ii_32(x64emu_t *emu, uintptr_t fcn) { IEpBp_ii_t fn = (IEpBp_ii_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; ui64_t r; r.i = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); R_EAX = r.d[0]; R_EDX = r.d[1]; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void uFppibp__32(x64emu_t *emu, uintptr_t fcn) { uFppibp__t fn = (uFppibp__t)fcn; struct_p_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_p(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void UEpBp_ii_32(x64emu_t *emu, uintptr_t fcn) { UEpBp_ii_t fn = (UEpBp_ii_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; ui64_t r; r.u = (uint64_t)fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); R_EAX = r.d[0]; R_EDX = r.d[1]; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void lEiibl_L_32(x64emu_t *emu, uintptr_t fcn) { lEiibl_L_t fn = (lEiibl_L_t)fcn; errno = emu->libc_err; struct_l_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_l(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 16)))); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_l(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); emu->libc_err = errno; } +void LEpbp_Lp_32(x64emu_t *emu, uintptr_t fcn) { LEpbp_Lp_t fn = (LEpbp_Lp_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16))); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void iEEpprLL__32(x64emu_t *emu, uintptr_t fcn) { iEEpprLL__t fn = (iEEpprLL__t)fcn; errno = emu->libc_err; struct_LL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL); emu->libc_err = errno; } +void iEpurLL_p_32(x64emu_t *emu, uintptr_t fcn) { iEpurLL_p_t fn = (iEpurLL_p_t)fcn; errno = emu->libc_err; struct_LL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void iFppbL_bL__32(x64emu_t *emu, uintptr_t fcn) { iFppbL_bL__t fn = (iFppbL_bL__t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); struct_L_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_L(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void iFrpuu_Lui_32(x64emu_t *emu, uintptr_t fcn) { iFrpuu_Lui_t fn = (iFrpuu_Lui_t)fcn; struct_puu_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_puu(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFbp_bp_pi_32(x64emu_t *emu, uintptr_t fcn) { iFbp_bp_pi_t fn = (iFbp_bp_pi_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFXbL_ibp__32(x64emu_t *emu, uintptr_t fcn) { iFXbL_ibp__t fn = (iFXbL_ibp__t)fcn; struct_L_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_L(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); struct_p_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_p(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void vFbp_ppbup__32(x64emu_t *emu, uintptr_t fcn) { vFbp_ppbup__t fn = (vFbp_ppbup__t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); struct_up_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_up(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_up(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void vFXLbpLiL_L_32(x64emu_t *emu, uintptr_t fcn) { vFXLbpLiL_L_t fn = (vFXLbpLiL_L_t)fcn; struct_pLiL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_pLiL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 16))); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_pLiL(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXLbpLiL_L_32(x64emu_t *emu, uintptr_t fcn) { iFXLbpLiL_L_t fn = (iFXLbpLiL_L_t)fcn; struct_pLiL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_pLiL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 16))); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_pLiL(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iEiirLL_BLL__32(x64emu_t *emu, uintptr_t fcn) { iEiirLL_BLL__t fn = (iEiirLL_BLL__t)fcn; errno = emu->libc_err; struct_LL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); struct_LL_t arg_16={0}; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_LL(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); emu->libc_err = errno; } +void iEuirLL_BLL__32(x64emu_t *emu, uintptr_t fcn) { iEuirLL_BLL__t fn = (iEuirLL_BLL__t)fcn; errno = emu->libc_err; struct_LL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); struct_LL_t arg_16={0}; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_LL(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); emu->libc_err = errno; } +void iFXLpbLWWWcc__32(x64emu_t *emu, uintptr_t fcn) { iFXLpbLWWWcc__t fn = (iFXLpbLWWWcc__t)fcn; struct_LWWWcc_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_LWWWcc(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void iFXLbLWWWcc_i_32(x64emu_t *emu, uintptr_t fcn) { iFXLbLWWWcc_i_t fn = (iFXLbLWWWcc_i_t)fcn; struct_LWWWcc_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LWWWcc(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptri(int32_t, R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXLuriiiiiLi__32(x64emu_t *emu, uintptr_t fcn) { iFXLuriiiiiLi__t fn = (iFXLuriiiiiLi__t)fcn; struct_iiiiiLi_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_iiiiiLi(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); } +void vFXLbLLLLLLLLLL_L_32(x64emu_t *emu, uintptr_t fcn) { vFXLbLLLLLLLLLL_L_t fn = (vFXLbLLLLLLLLLL_L_t)fcn; struct_LLLLLLLLLL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LLLLLLLLLL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 16))); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_LLLLLLLLLL(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXLbLLLLLLLLLL_L_32(x64emu_t *emu, uintptr_t fcn) { iFXLbLLLLLLLLLL_L_t fn = (iFXLbLLLLLLLLLL_L_t)fcn; struct_LLLLLLLLLL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LLLLLLLLLL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 16))); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_LLLLLLLLLL(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void LEpLpriiiiiiiiilt__32(x64emu_t *emu, uintptr_t fcn) { LEpLpriiiiiiiiilt__t fn = (LEpLpriiiiiiiiilt__t)fcn; errno = emu->libc_err; struct_iiiiiiiiilt_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_iiiiiiiiilt(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL)); emu->libc_err = errno; } +void iFXipBWWWWWWWWWuip__32(x64emu_t *emu, uintptr_t fcn) { iFXipBWWWWWWWWWuip__t fn = (iFXipBWWWWWWWWWuip__t)fcn; struct_WWWWWWWWWuip_t arg_16={0}; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_WWWWWWWWWuip(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void iFXLbLWWWcc_bLWWWcc__32(x64emu_t *emu, uintptr_t fcn) { iFXLbLWWWcc_bLWWWcc__t fn = (iFXLbLWWWcc_bLWWWcc__t)fcn; struct_LWWWcc_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LWWWcc(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); struct_LWWWcc_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_LWWWcc(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void iFpruuipWCCp_buuipWCCp_i_32(x64emu_t *emu, uintptr_t fcn) { iFpruuipWCCp_buuipWCCp_i_t fn = (iFpruuipWCCp_buuipWCCp_i_t)fcn; struct_uuipWCCp_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_uuipWCCp(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); struct_uuipWCCp_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_uuipWCCp(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptri(int32_t, R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_uuipWCCp(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXpLriLLLiiiiiiiLLiiLiiiiLic__32(x64emu_t *emu, uintptr_t fcn) { iFXpLriLLLiiiiiiiLLiiLiiiiLic__t fn = (iFXpLriLLLiiiiiiiLLiiLiiiiLic__t)fcn; struct_iLLLiiiiiiiLLiiLiiiiLic_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_iLLLiiiiiiiLLiiLiiiiLic(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); } +void iFXpLbiLLLiiiiiiiLLiiLiiiiLic__32(x64emu_t *emu, uintptr_t fcn) { iFXpLbiLLLiiiiiiiLLiiLiiiiLic__t fn = (iFXpLbiLLLiiiiiiiLLiiLiiiiLic__t)fcn; struct_iLLLiiiiiiiLLiiLiiiiLic_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_iLLLiiiiiiiLLiiLiiiiLic(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_iLLLiiiiiiiLLiiLiiiiLic(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void pFXLLbiLLLiiiiiiiLLiiLiiiiLic__32(x64emu_t *emu, uintptr_t fcn) { pFXLLbiLLLiiiiiiiLLiiLiiiiLic__t fn = (pFXLLbiLLLiiiiiiiLLiiLiiiiLic__t)fcn; struct_iLLLiiiiiiiLLiiLiiiiLic_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_iLLLiiiiiiiLLiiLiiiiLic(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL)); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_iLLLiiiiiiiLLiiLiiiiLic(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void vEEiipp_32(x64emu_t *emu, uintptr_t fcn) { vEEiipp_t fn = (vEEiipp_t)fcn; errno = emu->libc_err; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void vEEiipV_32(x64emu_t *emu, uintptr_t fcn) { vEEiipV_t fn = (vEEiipV_t)fcn; errno = emu->libc_err; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptrv(R_ESP + 16)); emu->libc_err = errno; } +void vFEuipu_32(x64emu_t *emu, uintptr_t fcn) { vFEuipu_t fn = (vFEuipu_t)fcn; fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void vFEuipp_32(x64emu_t *emu, uintptr_t fcn) { vFEuipp_t fn = (vFEuipp_t)fcn; fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void vEEpLLp_32(x64emu_t *emu, uintptr_t fcn) { vEEpLLp_t fn = (vEEpLLp_t)fcn; errno = emu->libc_err; fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void vEEppiV_32(x64emu_t *emu, uintptr_t fcn) { vEEppiV_t fn = (vEEppiV_t)fcn; errno = emu->libc_err; fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptrv(R_ESP + 16)); emu->libc_err = errno; } +void vFiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFiiiii_t fn = (vFiiiii_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFiiiiu_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiu_t fn = (vFiiiiu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFiiuii_32(x64emu_t *emu, uintptr_t fcn) { vFiiuii_t fn = (vFiiuii_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFiiuup_t fn = (vFiiuup_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFiillu_32(x64emu_t *emu, uintptr_t fcn) { vFiillu_t fn = (vFiillu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16)), from_ptri(uint32_t, R_ESP + 20)); } +void vFiilll_32(x64emu_t *emu, uintptr_t fcn) { vFiilll_t fn = (vFiilll_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16)), from_long(from_ptri(long_t, R_ESP + 20))); } +void vFiipll_32(x64emu_t *emu, uintptr_t fcn) { vFiipll_t fn = (vFiipll_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_long(from_ptri(long_t, R_ESP + 20))); } +void vFiIIII_32(x64emu_t *emu, uintptr_t fcn) { vFiIIII_t fn = (vFiIIII_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 16), from_ptri(int64_t, R_ESP + 24), from_ptri(int64_t, R_ESP + 32)); } +void vFiuiip_32(x64emu_t *emu, uintptr_t fcn) { vFiuiip_t fn = (vFiuiip_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFiuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFiuuuu_t fn = (vFiuuuu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFiulpp_32(x64emu_t *emu, uintptr_t fcn) { vFiulpp_t fn = (vFiulpp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFiUUUU_32(x64emu_t *emu, uintptr_t fcn) { vFiUUUU_t fn = (vFiUUUU_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 16), from_ptri(uint64_t, R_ESP + 24), from_ptri(uint64_t, R_ESP + 32)); } +void vFiffff_32(x64emu_t *emu, uintptr_t fcn) { vFiffff_t fn = (vFiffff_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20)); } +void vFidddd_32(x64emu_t *emu, uintptr_t fcn) { vFidddd_t fn = (vFidddd_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(double, R_ESP + 24), from_ptri(double, R_ESP + 32)); } +void vFilill_32(x64emu_t *emu, uintptr_t fcn) { vFilill_t fn = (vFilill_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_long(from_ptri(long_t, R_ESP + 20))); } +void vFilipi_32(x64emu_t *emu, uintptr_t fcn) { vFilipi_t fn = (vFilipi_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFilipl_32(x64emu_t *emu, uintptr_t fcn) { vFilipl_t fn = (vFilipl_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_long(from_ptri(long_t, R_ESP + 20))); } +void vFipipu_32(x64emu_t *emu, uintptr_t fcn) { vFipipu_t fn = (vFipipu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFipipp_32(x64emu_t *emu, uintptr_t fcn) { vFipipp_t fn = (vFipipp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFipupi_32(x64emu_t *emu, uintptr_t fcn) { vFipupi_t fn = (vFipupi_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFucccc_32(x64emu_t *emu, uintptr_t fcn) { vFucccc_t fn = (vFucccc_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int8_t, R_ESP + 8), from_ptri(int8_t, R_ESP + 12), from_ptri(int8_t, R_ESP + 16), from_ptri(int8_t, R_ESP + 20)); } +void vFuwwww_32(x64emu_t *emu, uintptr_t fcn) { vFuwwww_t fn = (vFuwwww_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int16_t, R_ESP + 8), from_ptri(int16_t, R_ESP + 12), from_ptri(int16_t, R_ESP + 16), from_ptri(int16_t, R_ESP + 20)); } +void vFuiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuiiii_t fn = (vFuiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuiiiu_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiu_t fn = (vFuiiiu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFuiiip_32(x64emu_t *emu, uintptr_t fcn) { vFuiiip_t fn = (vFuiiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuiiCp_32(x64emu_t *emu, uintptr_t fcn) { vFuiiCp_t fn = (vFuiiCp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuiiup_32(x64emu_t *emu, uintptr_t fcn) { vFuiiup_t fn = (vFuiiup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuiill_32(x64emu_t *emu, uintptr_t fcn) { vFuiill_t fn = (vFuiill_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_long(from_ptri(long_t, R_ESP + 20))); } +void vFuiIII_32(x64emu_t *emu, uintptr_t fcn) { vFuiIII_t fn = (vFuiIII_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 12), from_ptri(int64_t, R_ESP + 20), from_ptri(int64_t, R_ESP + 28)); } +void vFuiuii_32(x64emu_t *emu, uintptr_t fcn) { vFuiuii_t fn = (vFuiuii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuiuip_32(x64emu_t *emu, uintptr_t fcn) { vFuiuip_t fn = (vFuiuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuiuCi_32(x64emu_t *emu, uintptr_t fcn) { vFuiuCi_t fn = (vFuiuCi_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuiuCu_32(x64emu_t *emu, uintptr_t fcn) { vFuiuCu_t fn = (vFuiuCu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFuiuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuiuuu_t fn = (vFuiuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFuiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuiuup_t fn = (vFuiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuiupi_32(x64emu_t *emu, uintptr_t fcn) { vFuiupi_t fn = (vFuiupi_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuiUUU_32(x64emu_t *emu, uintptr_t fcn) { vFuiUUU_t fn = (vFuiUUU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12), from_ptri(uint64_t, R_ESP + 20), from_ptri(uint64_t, R_ESP + 28)); } +void vFuifff_32(x64emu_t *emu, uintptr_t fcn) { vFuifff_t fn = (vFuifff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20)); } +void vFuiddd_32(x64emu_t *emu, uintptr_t fcn) { vFuiddd_t fn = (vFuiddd_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptri(double, R_ESP + 28)); } +void vFuipii_32(x64emu_t *emu, uintptr_t fcn) { vFuipii_t fn = (vFuipii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuipip_32(x64emu_t *emu, uintptr_t fcn) { vFuipip_t fn = (vFuipip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuipup_32(x64emu_t *emu, uintptr_t fcn) { vFuipup_t fn = (vFuipup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuippp_32(x64emu_t *emu, uintptr_t fcn) { vFuippp_t fn = (vFuippp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuIIII_32(x64emu_t *emu, uintptr_t fcn) { vFuIIII_t fn = (vFuIIII_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int64_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 16), from_ptri(int64_t, R_ESP + 24), from_ptri(int64_t, R_ESP + 32)); } +void vFuCCCC_32(x64emu_t *emu, uintptr_t fcn) { vFuCCCC_t fn = (vFuCCCC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptri(uint8_t, R_ESP + 20)); } +void vFuCuip_32(x64emu_t *emu, uintptr_t fcn) { vFuCuip_t fn = (vFuCuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuCuup_32(x64emu_t *emu, uintptr_t fcn) { vFuCuup_t fn = (vFuCuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuWWWW_32(x64emu_t *emu, uintptr_t fcn) { vFuWWWW_t fn = (vFuWWWW_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint16_t, R_ESP + 8), from_ptri(uint16_t, R_ESP + 12), from_ptri(uint16_t, R_ESP + 16), from_ptri(uint16_t, R_ESP + 20)); } +void vFuuiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuiii_t fn = (vFuuiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuuiip_32(x64emu_t *emu, uintptr_t fcn) { vFuuiip_t fn = (vFuuiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuuiui_32(x64emu_t *emu, uintptr_t fcn) { vFuuiui_t fn = (vFuuiui_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuuiuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuu_t fn = (vFuuiuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFuuiup_32(x64emu_t *emu, uintptr_t fcn) { vFuuiup_t fn = (vFuuiup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuuifi_32(x64emu_t *emu, uintptr_t fcn) { vFuuifi_t fn = (vFuuifi_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuuipC_32(x64emu_t *emu, uintptr_t fcn) { vFuuipC_t fn = (vFuuipC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint8_t, R_ESP + 20)); } +void vFuuipu_32(x64emu_t *emu, uintptr_t fcn) { vFuuipu_t fn = (vFuuipu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFuuipp_32(x64emu_t *emu, uintptr_t fcn) { vFuuipp_t fn = (vFuuipp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuuuii_32(x64emu_t *emu, uintptr_t fcn) { vFuuuii_t fn = (vFuuuii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuuuiu_32(x64emu_t *emu, uintptr_t fcn) { vFuuuiu_t fn = (vFuuuiu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFuuuil_32(x64emu_t *emu, uintptr_t fcn) { vFuuuil_t fn = (vFuuuil_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_long(from_ptri(long_t, R_ESP + 20))); } +void vFuuuip_32(x64emu_t *emu, uintptr_t fcn) { vFuuuip_t fn = (vFuuuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuuuui_32(x64emu_t *emu, uintptr_t fcn) { vFuuuui_t fn = (vFuuuui_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuu_t fn = (vFuuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFuuuup_32(x64emu_t *emu, uintptr_t fcn) { vFuuuup_t fn = (vFuuuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuuuli_32(x64emu_t *emu, uintptr_t fcn) { vFuuuli_t fn = (vFuuuli_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20)); } +void vFuuull_32(x64emu_t *emu, uintptr_t fcn) { vFuuull_t fn = (vFuuull_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_long(from_ptri(long_t, R_ESP + 20))); } +void vFuulll_32(x64emu_t *emu, uintptr_t fcn) { vFuulll_t fn = (vFuulll_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16)), from_long(from_ptri(long_t, R_ESP + 20))); } +void vFuullp_32(x64emu_t *emu, uintptr_t fcn) { vFuullp_t fn = (vFuullp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16)), from_ptriv(R_ESP + 20)); } +void vFuupii_32(x64emu_t *emu, uintptr_t fcn) { vFuupii_t fn = (vFuupii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuUUUU_32(x64emu_t *emu, uintptr_t fcn) { vFuUUUU_t fn = (vFuUUUU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 16), from_ptri(uint64_t, R_ESP + 24), from_ptri(uint64_t, R_ESP + 32)); } +void vFuffff_32(x64emu_t *emu, uintptr_t fcn) { vFuffff_t fn = (vFuffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20)); } +void vFudddd_32(x64emu_t *emu, uintptr_t fcn) { vFudddd_t fn = (vFudddd_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(double, R_ESP + 24), from_ptri(double, R_ESP + 32)); } +void vFullpu_32(x64emu_t *emu, uintptr_t fcn) { vFullpu_t fn = (vFullpu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFupiii_32(x64emu_t *emu, uintptr_t fcn) { vFupiii_t fn = (vFupiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFupupp_32(x64emu_t *emu, uintptr_t fcn) { vFupupp_t fn = (vFupupp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFuplii_32(x64emu_t *emu, uintptr_t fcn) { vFuplii_t fn = (vFuplii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFuppip_32(x64emu_t *emu, uintptr_t fcn) { vFuppip_t fn = (vFuppip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFupppp_32(x64emu_t *emu, uintptr_t fcn) { vFupppp_t fn = (vFupppp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFfffff_32(x64emu_t *emu, uintptr_t fcn) { vFfffff_t fn = (vFfffff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20)); } +void vFddddp_32(x64emu_t *emu, uintptr_t fcn) { vFddddp_t fn = (vFddddp_t)fcn; fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptri(double, R_ESP + 28), from_ptriv(R_ESP + 36)); } +void vFluipp_32(x64emu_t *emu, uintptr_t fcn) { vFluipp_t fn = (vFluipp_t)fcn; fn(from_long(from_ptri(long_t, R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFpilpp_32(x64emu_t *emu, uintptr_t fcn) { vFpilpp_t fn = (vFpilpp_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFpipiu_32(x64emu_t *emu, uintptr_t fcn) { vFpipiu_t fn = (vFpipiu_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFpuipp_32(x64emu_t *emu, uintptr_t fcn) { vFpuipp_t fn = (vFpuipp_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFpddii_32(x64emu_t *emu, uintptr_t fcn) { vFpddii_t fn = (vFpddii_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFppWui_32(x64emu_t *emu, uintptr_t fcn) { vFppWui_t fn = (vFppWui_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint16_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFpppii_32(x64emu_t *emu, uintptr_t fcn) { vFpppii_t fn = (vFpppii_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFppppu_32(x64emu_t *emu, uintptr_t fcn) { vFppppu_t fn = (vFppppu_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void vFppppp_32(x64emu_t *emu, uintptr_t fcn) { vFppppp_t fn = (vFppppp_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFXLiii_32(x64emu_t *emu, uintptr_t fcn) { vFXLiii_t fn = (vFXLiii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFXLiiL_32(x64emu_t *emu, uintptr_t fcn) { vFXLiiL_t fn = (vFXLiiL_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ulong(from_ptri(ulong_t, R_ESP + 20))); } +void vFXLppi_32(x64emu_t *emu, uintptr_t fcn) { vFXLppi_t fn = (vFXLppi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFXpiiL_32(x64emu_t *emu, uintptr_t fcn) { vFXpiiL_t fn = (vFXpiiL_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ulong(from_ptri(ulong_t, R_ESP + 20))); } +void iEEiiip_32(x64emu_t *emu, uintptr_t fcn) { iEEiiip_t fn = (iEEiiip_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void iEEipii_32(x64emu_t *emu, uintptr_t fcn) { iEEipii_t fn = (iEEipii_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); emu->libc_err = errno; } +void iEEippL_32(x64emu_t *emu, uintptr_t fcn) { iEEippL_t fn = (iEEippL_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16))); emu->libc_err = errno; } +void iEEpipp_32(x64emu_t *emu, uintptr_t fcn) { iEEpipp_t fn = (iEEpipp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void iEEpipV_32(x64emu_t *emu, uintptr_t fcn) { iEEpipV_t fn = (iEEpipV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptrv(R_ESP + 16)); emu->libc_err = errno; } +void iFEpupu_32(x64emu_t *emu, uintptr_t fcn) { iFEpupu_t fn = (iFEpupu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void iEEpLpp_32(x64emu_t *emu, uintptr_t fcn) { iEEpLpp_t fn = (iEEpLpp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void iFEpLpp_32(x64emu_t *emu, uintptr_t fcn) { iFEpLpp_t fn = (iFEpLpp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iEEpLpV_32(x64emu_t *emu, uintptr_t fcn) { iEEpLpV_t fn = (iEEpLpV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptrv(R_ESP + 16)); emu->libc_err = errno; } +void iFEpLpV_32(x64emu_t *emu, uintptr_t fcn) { iFEpLpV_t fn = (iFEpLpV_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptrv(R_ESP + 16)); } +void iFEpplp_32(x64emu_t *emu, uintptr_t fcn) { iFEpplp_t fn = (iFEpplp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } +void iEEpppi_32(x64emu_t *emu, uintptr_t fcn) { iEEpppi_t fn = (iEEpppi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); emu->libc_err = errno; } +void iEEpppp_32(x64emu_t *emu, uintptr_t fcn) { iEEpppp_t fn = (iEEpppp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void iFEpppp_32(x64emu_t *emu, uintptr_t fcn) { iFEpppp_t fn = (iFEpppp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFEXipp_32(x64emu_t *emu, uintptr_t fcn) { iFEXipp_t fn = (iFEXipp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFEXLip_32(x64emu_t *emu, uintptr_t fcn) { iFEXLip_t fn = (iFEXLip_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFEXLlp_32(x64emu_t *emu, uintptr_t fcn) { iFEXLlp_t fn = (iFEXLlp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } +void iFEXLLp_32(x64emu_t *emu, uintptr_t fcn) { iFEXLLp_t fn = (iFEXLLp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } +void iFEXLpi_32(x64emu_t *emu, uintptr_t fcn) { iFEXLpi_t fn = (iFEXLpi_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16)); } +void iFEXLpp_32(x64emu_t *emu, uintptr_t fcn) { iFEXLpp_t fn = (iFEXLpp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iFEXpLp_32(x64emu_t *emu, uintptr_t fcn) { iFEXpLp_t fn = (iFEXpLp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16)); } +void iFEXppu_32(x64emu_t *emu, uintptr_t fcn) { iFEXppu_t fn = (iFEXppu_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); } +void iFEXppp_32(x64emu_t *emu, uintptr_t fcn) { iFEXppp_t fn = (iFEXppp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); } +void iEiiipu_32(x64emu_t *emu, uintptr_t fcn) { iEiiipu_t fn = (iEiiipu_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); emu->libc_err = errno; } +void iEiiipp_32(x64emu_t *emu, uintptr_t fcn) { iEiiipp_t fn = (iEiiipp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); emu->libc_err = errno; } +void iEiLLLL_32(x64emu_t *emu, uintptr_t fcn) { iEiLLLL_t fn = (iEiLLLL_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ulong(from_ptri(ulong_t, R_ESP + 20))); emu->libc_err = errno; } +void iEipLLi_32(x64emu_t *emu, uintptr_t fcn) { iEipLLi_t fn = (iEipLLi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20)); emu->libc_err = errno; } +void iEippLi_32(x64emu_t *emu, uintptr_t fcn) { iEippLi_t fn = (iEippLi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20)); emu->libc_err = errno; } +void iEipppi_32(x64emu_t *emu, uintptr_t fcn) { iEipppi_t fn = (iEipppi_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); emu->libc_err = errno; } +void iEipppp_32(x64emu_t *emu, uintptr_t fcn) { iEipppp_t fn = (iEipppp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); emu->libc_err = errno; } +void iFuiuup_32(x64emu_t *emu, uintptr_t fcn) { iFuiuup_t fn = (iFuiuup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iFpiiuu_32(x64emu_t *emu, uintptr_t fcn) { iFpiiuu_t fn = (iFpiiuu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void iFpippp_32(x64emu_t *emu, uintptr_t fcn) { iFpippp_t fn = (iFpippp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iFpCCCC_32(x64emu_t *emu, uintptr_t fcn) { iFpCCCC_t fn = (iFpCCCC_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptri(uint8_t, R_ESP + 20)); } +void iFpuipp_32(x64emu_t *emu, uintptr_t fcn) { iFpuipp_t fn = (iFpuipp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iFppiUi_32(x64emu_t *emu, uintptr_t fcn) { iFppiUi_t fn = (iFppiUi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint64_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 24)); } +void iFppipp_32(x64emu_t *emu, uintptr_t fcn) { iFppipp_t fn = (iFppipp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iFpppip_32(x64emu_t *emu, uintptr_t fcn) { iFpppip_t fn = (iFpppip_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iEpppLp_32(x64emu_t *emu, uintptr_t fcn) { iEpppLp_t fn = (iEpppLp_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20)); emu->libc_err = errno; } +void iFppppp_32(x64emu_t *emu, uintptr_t fcn) { iFppppp_t fn = (iFppppp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iFXiiii_32(x64emu_t *emu, uintptr_t fcn) { iFXiiii_t fn = (iFXiiii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void iFXiiip_32(x64emu_t *emu, uintptr_t fcn) { iFXiiip_t fn = (iFXiiip_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iFXiuLi_32(x64emu_t *emu, uintptr_t fcn) { iFXiuLi_t fn = (iFXiuLi_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20)); } +void iFXiLip_32(x64emu_t *emu, uintptr_t fcn) { iFXiLip_t fn = (iFXiLip_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iFXiLuu_32(x64emu_t *emu, uintptr_t fcn) { iFXiLuu_t fn = (iFXiLuu_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void iFXuuLL_32(x64emu_t *emu, uintptr_t fcn) { iFXuuLL_t fn = (iFXuuLL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ulong(from_ptri(ulong_t, R_ESP + 20))); } +void iFXLLii_32(x64emu_t *emu, uintptr_t fcn) { iFXLLii_t fn = (iFXLLii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void iFXLpii_32(x64emu_t *emu, uintptr_t fcn) { iFXLpii_t fn = (iFXLpii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void iFXLpLi_32(x64emu_t *emu, uintptr_t fcn) { iFXLpLi_t fn = (iFXLpLi_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20)); } +void iFXLppi_32(x64emu_t *emu, uintptr_t fcn) { iFXLppi_t fn = (iFXLppi_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void iFXpipi_32(x64emu_t *emu, uintptr_t fcn) { iFXpipi_t fn = (iFXpipi_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void iFXpppp_32(x64emu_t *emu, uintptr_t fcn) { iFXpppp_t fn = (iFXpppp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void IFXpIII_32(x64emu_t *emu, uintptr_t fcn) { IFXpIII_t fn = (IFXpIII_t)fcn; ui64_t r; r.i = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int64_t, R_ESP + 12), from_ptri(int64_t, R_ESP + 20), from_ptri(int64_t, R_ESP + 28)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void uEEippu_32(x64emu_t *emu, uintptr_t fcn) { uEEippu_t fn = (uEEippu_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16)); emu->libc_err = errno; } +void uEpLLLS_32(x64emu_t *emu, uintptr_t fcn) { uEpLLLS_t fn = (uEpLLLS_t)fcn; errno = emu->libc_err; R_EAX = (uint32_t)fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), io_convert32(from_ptriv(R_ESP + 20))); emu->libc_err = errno; } +void UFuiCiu_32(x64emu_t *emu, uintptr_t fcn) { UFuiCiu_t fn = (UFuiCiu_t)fcn; ui64_t r; r.u = (uint64_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); R_EAX = r.d[0]; R_EDX = r.d[1]; } +void lFpuipC_32(x64emu_t *emu, uintptr_t fcn) { lFpuipC_t fn = (lFpuipC_t)fcn; R_EAX = to_long(fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint8_t, R_ESP + 20))); } +void LFEppLL_32(x64emu_t *emu, uintptr_t fcn) { LFEppLL_t fn = (LFEppLL_t)fcn; R_EAX = to_ulong(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)))); } +void LFEXLpi_32(x64emu_t *emu, uintptr_t fcn) { LFEXLpi_t fn = (LFEXLpi_t)fcn; R_EAX = to_ulong(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16))); } +void LEpLppa_32(x64emu_t *emu, uintptr_t fcn) { LEpLppa_t fn = (LEpLppa_t)fcn; errno = emu->libc_err; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_locale(from_ptri(ptr_t, R_ESP + 20)))); emu->libc_err = errno; } +void LFXLuuu_32(x64emu_t *emu, uintptr_t fcn) { LFXLuuu_t fn = (LFXLuuu_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20))); } +void LFXLpuu_32(x64emu_t *emu, uintptr_t fcn) { LFXLpuu_t fn = (LFXLpuu_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20))); } +void LFXpppi_32(x64emu_t *emu, uintptr_t fcn) { LFXpppi_t fn = (LFXpppi_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20))); } +void pFEppip_32(x64emu_t *emu, uintptr_t fcn) { pFEppip_t fn = (pFEppip_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16))); } +void pFEXipp_32(x64emu_t *emu, uintptr_t fcn) { pFEXipp_t fn = (pFEXipp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } +void pFEXlpp_32(x64emu_t *emu, uintptr_t fcn) { pFEXlpp_t fn = (pFEXlpp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16))); } +void pFEXppi_32(x64emu_t *emu, uintptr_t fcn) { pFEXppi_t fn = (pFEXppi_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16))); } +void pFuiupp_32(x64emu_t *emu, uintptr_t fcn) { pFuiupp_t fn = (pFuiupp_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20))); } +void pFpiiuu_32(x64emu_t *emu, uintptr_t fcn) { pFpiiuu_t fn = (pFpiiuu_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20))); } +void pFpippp_32(x64emu_t *emu, uintptr_t fcn) { pFpippp_t fn = (pFpippp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20))); } +void pFpuiii_32(x64emu_t *emu, uintptr_t fcn) { pFpuiii_t fn = (pFpuiii_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20))); } +void pFpuuip_32(x64emu_t *emu, uintptr_t fcn) { pFpuuip_t fn = (pFpuuip_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20))); } +void pFppuup_32(x64emu_t *emu, uintptr_t fcn) { pFppuup_t fn = (pFppuup_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20))); } +void pFppupp_32(x64emu_t *emu, uintptr_t fcn) { pFppupp_t fn = (pFppupp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20))); } +void pFXLipp_32(x64emu_t *emu, uintptr_t fcn) { pFXLipp_t fn = (pFXLipp_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20))); } +void pFXpipi_32(x64emu_t *emu, uintptr_t fcn) { pFXpipi_t fn = (pFXpipi_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20))); } +void pFXppip_32(x64emu_t *emu, uintptr_t fcn) { pFXppip_t fn = (pFXppip_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20))); } +void vFiuibp_i_32(x64emu_t *emu, uintptr_t fcn) { vFiuibp_i_t fn = (vFiuibp_i_t)fcn; struct_p_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_p(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, from_ptri(int32_t, R_ESP + 20)); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void vFXibL_ii_32(x64emu_t *emu, uintptr_t fcn) { vFXibL_ii_t fn = (vFXibL_ii_t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iEEBh_ppp_32(x64emu_t *emu, uintptr_t fcn) { iEEBh_ppp_t fn = (iEEBh_ppp_t)fcn; errno = emu->libc_err; struct_h_t arg_4={0}; R_EAX = fn(emu, *(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_h(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); emu->libc_err = errno; } +void iFppppbp__32(x64emu_t *emu, uintptr_t fcn) { iFppppbp__t fn = (iFppppbp__t)fcn; struct_p_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_p(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void iFbp_piip_32(x64emu_t *emu, uintptr_t fcn) { iFbp_piip_t fn = (iFbp_piip_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFbp_puip_32(x64emu_t *emu, uintptr_t fcn) { iFbp_puip_t fn = (iFbp_puip_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFbp_pppi_32(x64emu_t *emu, uintptr_t fcn) { iFbp_pppi_t fn = (iFbp_pppi_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); } +void iFXiibL_i_32(x64emu_t *emu, uintptr_t fcn) { iFXiibL_i_t fn = (iFXiibL_i_t)fcn; struct_L_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_L(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, from_ptri(int32_t, R_ESP + 20)); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void iFXCupbL__32(x64emu_t *emu, uintptr_t fcn) { iFXCupbL__t fn = (iFXCupbL__t)fcn; struct_L_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_L(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void iFXLbL_ii_32(x64emu_t *emu, uintptr_t fcn) { iFXLbL_ii_t fn = (iFXLbL_ii_t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void LEpbp_LLp_32(x64emu_t *emu, uintptr_t fcn) { LEpbp_LLp_t fn = (LEpbp_LLp_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20))); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void LEpBp_LLp_32(x64emu_t *emu, uintptr_t fcn) { LEpBp_LLp_t fn = (LEpBp_LLp_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20))); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void iEippprLL__32(x64emu_t *emu, uintptr_t fcn) { iEippprLL__t fn = (iEippprLL__t)fcn; errno = emu->libc_err; struct_LL_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_LL(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL); emu->libc_err = errno; } +void iEpurLL_pL_32(x64emu_t *emu, uintptr_t fcn) { iEpurLL_pL_t fn = (iEpurLL_pL_t)fcn; errno = emu->libc_err; struct_LL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptriv(R_ESP + 16), from_ulong(from_ptri(ulong_t, R_ESP + 20))); emu->libc_err = errno; } +void iFppppbup__32(x64emu_t *emu, uintptr_t fcn) { iFppppbup__t fn = (iFppppbup__t)fcn; struct_up_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_up(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_up(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void iFiiuBp_Bp__32(x64emu_t *emu, uintptr_t fcn) { iFiiuBp_Bp__t fn = (iFiiuBp_Bp__t)fcn; struct_p_t arg_16={0}; struct_p_t arg_20={0}; R_EAX = fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void iFbp_bp_pip_32(x64emu_t *emu, uintptr_t fcn) { iFbp_bp_pip_t fn = (iFbp_bp_pip_t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void vFbp_ppibup__32(x64emu_t *emu, uintptr_t fcn) { vFbp_ppibup__t fn = (vFbp_ppibup__t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); struct_up_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_up(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_up(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void iFEXbpLiL_pp_32(x64emu_t *emu, uintptr_t fcn) { iFEXbpLiL_pp_t fn = (iFEXbpLiL_pp_t)fcn; struct_pLiL_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_pLiL(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_pLiL(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFpppbp_bup__32(x64emu_t *emu, uintptr_t fcn) { iFpppbp_bup__t fn = (iFpppbp_bup__t)fcn; struct_p_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_p(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); struct_up_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_up(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_up(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void LFXLrLiiuL_Lp_32(x64emu_t *emu, uintptr_t fcn) { LFXLrLiiuL_Lp_t fn = (LFXLrLiiuL_Lp_t)fcn; struct_LiiuL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LiiuL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20))); } +void pFEXLrLiiuL_i_32(x64emu_t *emu, uintptr_t fcn) { pFEXLrLiiuL_i_t fn = (pFEXLrLiiuL_i_t)fcn; struct_LiiuL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LiiuL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptri(int32_t, R_ESP + 16))); } +void iFXLiuriiiiiLi__32(x64emu_t *emu, uintptr_t fcn) { iFXLiuriiiiiLi__t fn = (iFXLiuriiiiiLi__t)fcn; struct_iiiiiLi_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_iiiiiLi(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL); } +void LELbp_bL_bp_bL__32(x64emu_t *emu, uintptr_t fcn) { LELbp_bL_bp_bL__t fn = (LELbp_bL_bp_bL__t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_p(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); struct_p_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_p(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); struct_L_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_L(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); R_EAX = to_ulong(fn(from_ulong(from_ptri(ulong_t, R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); emu->libc_err = errno; } +void vFXLbLLLLLLLLLL_iL_32(x64emu_t *emu, uintptr_t fcn) { vFXLbLLLLLLLLLL_iL_t fn = (vFXLbLLLLLLLLLL_iL_t)fcn; struct_LLLLLLLLLL_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_LLLLLLLLLL(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptri(int32_t, R_ESP + 16), from_ulong(from_ptri(ulong_t, R_ESP + 20))); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_LLLLLLLLLL(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXiiiBpLiiiLLLii__32(x64emu_t *emu, uintptr_t fcn) { iFXiiiBpLiiiLLLii__t fn = (iFXiiiBpLiiiLLLii__t)fcn; struct_pLiiiLLLii_t arg_20={0}; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_pLiiiLLLii(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void LEpLpriiiiiiiiilt_a_32(x64emu_t *emu, uintptr_t fcn) { LEpLpriiiiiiiiilt_a_t fn = (LEpLpriiiiiiiiilt_a_t)fcn; errno = emu->libc_err; struct_iiiiiiiiilt_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_iiiiiiiiilt(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, from_locale(from_ptri(ptr_t, R_ESP + 20)))); emu->libc_err = errno; } +void iFXLpbLWWWcc_bLWWWcc__32(x64emu_t *emu, uintptr_t fcn) { iFXLpbLWWWcc_bLWWWcc__t fn = (iFXLpbLWWWcc_bLWWWcc__t)fcn; struct_LWWWcc_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_LWWWcc(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); struct_LWWWcc_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_LWWWcc(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void iFXLpBLWWWcc_BLWWWcc__32(x64emu_t *emu, uintptr_t fcn) { iFXLpBLWWWcc_BLWWWcc__t fn = (iFXLpBLWWWcc_BLWWWcc__t)fcn; struct_LWWWcc_t arg_16={0}; struct_LWWWcc_t arg_20={0}; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void vFEiiipp_32(x64emu_t *emu, uintptr_t fcn) { vFEiiipp_t fn = (vFEiiipp_t)fcn; fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFEuippp_32(x64emu_t *emu, uintptr_t fcn) { vFEuippp_t fn = (vFEuippp_t)fcn; fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void vFEupupi_32(x64emu_t *emu, uintptr_t fcn) { vFEupupi_t fn = (vFEupupi_t)fcn; fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void vFiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiii_t fn = (vFiiiiii_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFiiiuil_32(x64emu_t *emu, uintptr_t fcn) { vFiiiuil_t fn = (vFiiiuil_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_long(from_ptri(long_t, R_ESP + 24))); } +void vFiiilpi_32(x64emu_t *emu, uintptr_t fcn) { vFiiilpi_t fn = (vFiiilpi_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFiiuilp_32(x64emu_t *emu, uintptr_t fcn) { vFiiuilp_t fn = (vFiiuilp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_long(from_ptri(long_t, R_ESP + 20)), from_ptriv(R_ESP + 24)); } +void vFiffiff_32(x64emu_t *emu, uintptr_t fcn) { vFiffiff_t fn = (vFiffiff_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24)); } +void vFiddidd_32(x64emu_t *emu, uintptr_t fcn) { vFiddidd_t fn = (vFiddidd_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(int32_t, R_ESP + 24), from_ptri(double, R_ESP + 28), from_ptri(double, R_ESP + 36)); } +void vFilipli_32(x64emu_t *emu, uintptr_t fcn) { vFilipli_t fn = (vFilipli_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_long(from_ptri(long_t, R_ESP + 20)), from_ptri(int32_t, R_ESP + 24)); } +void vFiliplu_32(x64emu_t *emu, uintptr_t fcn) { vFiliplu_t fn = (vFiliplu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_long(from_ptri(long_t, R_ESP + 20)), from_ptri(uint32_t, R_ESP + 24)); } +void vFipiplp_32(x64emu_t *emu, uintptr_t fcn) { vFipiplp_t fn = (vFipiplp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_long(from_ptri(long_t, R_ESP + 20)), from_ptriv(R_ESP + 24)); } +void vFCCCCff_32(x64emu_t *emu, uintptr_t fcn) { vFCCCCff_t fn = (vFCCCCff_t)fcn; fn(from_ptri(uint8_t, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24)); } +void vFuiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiii_t fn = (vFuiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFuiiiip_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiip_t fn = (vFuiiiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuiiuii_32(x64emu_t *emu, uintptr_t fcn) { vFuiiuii_t fn = (vFuiiuii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFuiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuiiuup_t fn = (vFuiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuiIIII_32(x64emu_t *emu, uintptr_t fcn) { vFuiIIII_t fn = (vFuiIIII_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int64_t, R_ESP + 12), from_ptri(int64_t, R_ESP + 20), from_ptri(int64_t, R_ESP + 28), from_ptri(int64_t, R_ESP + 36)); } +void vFuiuiii_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiii_t fn = (vFuiuiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFuiuiiC_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiC_t fn = (vFuiuiiC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint8_t, R_ESP + 24)); } +void vFuiuiil_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiil_t fn = (vFuiuiil_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_long(from_ptri(long_t, R_ESP + 24))); } +void vFuiuiuu_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiuu_t fn = (vFuiuiuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24)); } +void vFuiuiuU_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiuU_t fn = (vFuiuiuU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint64_t, R_ESP + 24)); } +void vFuiuCip_32(x64emu_t *emu, uintptr_t fcn) { vFuiuCip_t fn = (vFuiuCip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuiuuip_32(x64emu_t *emu, uintptr_t fcn) { vFuiuuip_t fn = (vFuiuuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuiuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuiuuuu_t fn = (vFuiuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24)); } +void vFuiupii_32(x64emu_t *emu, uintptr_t fcn) { vFuiupii_t fn = (vFuiupii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFuiupiu_32(x64emu_t *emu, uintptr_t fcn) { vFuiupiu_t fn = (vFuiupiu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24)); } +void vFuiUUUU_32(x64emu_t *emu, uintptr_t fcn) { vFuiUUUU_t fn = (vFuiUUUU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12), from_ptri(uint64_t, R_ESP + 20), from_ptri(uint64_t, R_ESP + 28), from_ptri(uint64_t, R_ESP + 36)); } +void vFuiffff_32(x64emu_t *emu, uintptr_t fcn) { vFuiffff_t fn = (vFuiffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24)); } +void vFuidddd_32(x64emu_t *emu, uintptr_t fcn) { vFuidddd_t fn = (vFuidddd_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptri(double, R_ESP + 28), from_ptri(double, R_ESP + 36)); } +void vFuipiup_32(x64emu_t *emu, uintptr_t fcn) { vFuipiup_t fn = (vFuipiup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuCuuip_32(x64emu_t *emu, uintptr_t fcn) { vFuCuuip_t fn = (vFuCuuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuuiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiii_t fn = (vFuuiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFuuiuii_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuii_t fn = (vFuuiuii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFuuiuil_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuil_t fn = (vFuuiuil_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_long(from_ptri(long_t, R_ESP + 24))); } +void vFuuiuip_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuip_t fn = (vFuuiuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuuiuCu_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuCu_t fn = (vFuuiuCu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint8_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24)); } +void vFuuiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuup_t fn = (vFuuiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuuuiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuuiii_t fn = (vFuuuiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFuuuiup_32(x64emu_t *emu, uintptr_t fcn) { vFuuuiup_t fn = (vFuuuiup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuuuipC_32(x64emu_t *emu, uintptr_t fcn) { vFuuuipC_t fn = (vFuuuipC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(uint8_t, R_ESP + 24)); } +void vFuuuipp_32(x64emu_t *emu, uintptr_t fcn) { vFuuuipp_t fn = (vFuuuipp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuuuuii_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuii_t fn = (vFuuuuii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFuuuuip_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuip_t fn = (vFuuuuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuuuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuuu_t fn = (vFuuuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24)); } +void vFuuuull_32(x64emu_t *emu, uintptr_t fcn) { vFuuuull_t fn = (vFuuuull_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_long(from_ptri(long_t, R_ESP + 20)), from_long(from_ptri(long_t, R_ESP + 24))); } +void vFuuuppi_32(x64emu_t *emu, uintptr_t fcn) { vFuuuppi_t fn = (vFuuuppi_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFuuuppp_32(x64emu_t *emu, uintptr_t fcn) { vFuuuppp_t fn = (vFuuuppp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuuffff_32(x64emu_t *emu, uintptr_t fcn) { vFuuffff_t fn = (vFuuffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24)); } +void vFuudddd_32(x64emu_t *emu, uintptr_t fcn) { vFuudddd_t fn = (vFuudddd_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptri(double, R_ESP + 28), from_ptri(double, R_ESP + 36)); } +void vFuupiii_32(x64emu_t *emu, uintptr_t fcn) { vFuupiii_t fn = (vFuupiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFuupupp_32(x64emu_t *emu, uintptr_t fcn) { vFuupupp_t fn = (vFuupupp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFuuplii_32(x64emu_t *emu, uintptr_t fcn) { vFuuplii_t fn = (vFuuplii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFuffiip_32(x64emu_t *emu, uintptr_t fcn) { vFuffiip_t fn = (vFuffiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFufffff_32(x64emu_t *emu, uintptr_t fcn) { vFufffff_t fn = (vFufffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24)); } +void vFuddiip_32(x64emu_t *emu, uintptr_t fcn) { vFuddiip_t fn = (vFuddiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } +void vFulluUC_32(x64emu_t *emu, uintptr_t fcn) { vFulluUC_t fn = (vFulluUC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint64_t, R_ESP + 20), from_ptri(uint8_t, R_ESP + 28)); } +void vFupiiii_32(x64emu_t *emu, uintptr_t fcn) { vFupiiii_t fn = (vFupiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFffffff_32(x64emu_t *emu, uintptr_t fcn) { vFffffff_t fn = (vFffffff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24)); } +void vFdddddd_32(x64emu_t *emu, uintptr_t fcn) { vFdddddd_t fn = (vFdddddd_t)fcn; fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptri(double, R_ESP + 28), from_ptri(double, R_ESP + 36), from_ptri(double, R_ESP + 44)); } +void vFpipipV_32(x64emu_t *emu, uintptr_t fcn) { vFpipipV_t fn = (vFpipipV_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptrv(R_ESP + 24)); } +void vFpdddii_32(x64emu_t *emu, uintptr_t fcn) { vFpdddii_t fn = (vFpdddii_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(double, R_ESP + 24), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36)); } +void vFpppppp_32(x64emu_t *emu, uintptr_t fcn) { vFpppppp_t fn = (vFpppppp_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFXiLppi_32(x64emu_t *emu, uintptr_t fcn) { vFXiLppi_t fn = (vFXiLppi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFXLiiii_32(x64emu_t *emu, uintptr_t fcn) { vFXLiiii_t fn = (vFXLiiii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFXLiiiL_32(x64emu_t *emu, uintptr_t fcn) { vFXLiiiL_t fn = (vFXLiiiL_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ulong(from_ptri(ulong_t, R_ESP + 24))); } +void vFXLiipi_32(x64emu_t *emu, uintptr_t fcn) { vFXLiipi_t fn = (vFXLiipi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFXLpppi_32(x64emu_t *emu, uintptr_t fcn) { vFXLpppi_t fn = (vFXLpppi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void iEEiippi_32(x64emu_t *emu, uintptr_t fcn) { iEEiippi_t fn = (iEEiippi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); emu->libc_err = errno; } +void iEEuppLp_32(x64emu_t *emu, uintptr_t fcn) { iEEuppLp_t fn = (iEEuppLp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20)); emu->libc_err = errno; } +void iFEpiuuu_32(x64emu_t *emu, uintptr_t fcn) { iFEpiuuu_t fn = (iFEpiuuu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void iEEpiLpp_32(x64emu_t *emu, uintptr_t fcn) { iEEpiLpp_t fn = (iEEpiLpp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); emu->libc_err = errno; } +void iEEpipOi_32(x64emu_t *emu, uintptr_t fcn) { iEEpipOi_t fn = (iEEpipOi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), of_convert32(from_ptri(int32_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20)); emu->libc_err = errno; } +void iFEpuuup_32(x64emu_t *emu, uintptr_t fcn) { iFEpuuup_t fn = (iFEpuuup_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iFEplluu_32(x64emu_t *emu, uintptr_t fcn) { iFEplluu_t fn = (iFEplluu_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20)); } +void iFEpLlpp_32(x64emu_t *emu, uintptr_t fcn) { iFEpLlpp_t fn = (iFEpLlpp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iFEppipp_32(x64emu_t *emu, uintptr_t fcn) { iFEppipp_t fn = (iFEppipp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iEEppupi_32(x64emu_t *emu, uintptr_t fcn) { iEEppupi_t fn = (iEEppupi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); emu->libc_err = errno; } +void iFEppllp_32(x64emu_t *emu, uintptr_t fcn) { iFEppllp_t fn = (iFEppllp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16)), from_ptriv(R_ESP + 20)); } +void iEEpppLp_32(x64emu_t *emu, uintptr_t fcn) { iEEpppLp_t fn = (iEEpppLp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20)); emu->libc_err = errno; } +void iFEXLilp_32(x64emu_t *emu, uintptr_t fcn) { iFEXLilp_t fn = (iFEXLilp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_ptriv(R_ESP + 20)); } +void iFEXLpiL_32(x64emu_t *emu, uintptr_t fcn) { iFEXLpiL_t fn = (iFEXLpiL_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ulong(from_ptri(ulong_t, R_ESP + 20))); } +void iFEXpiip_32(x64emu_t *emu, uintptr_t fcn) { iFEXpiip_t fn = (iFEXpiip_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iFEXpiup_32(x64emu_t *emu, uintptr_t fcn) { iFEXpiup_t fn = (iFEXpiup_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iFEXpppp_32(x64emu_t *emu, uintptr_t fcn) { iFEXpppp_t fn = (iFEXpppp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20)); } +void iFuiiuup_32(x64emu_t *emu, uintptr_t fcn) { iFuiiuup_t fn = (iFuiiuup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iFpiippp_32(x64emu_t *emu, uintptr_t fcn) { iFpiippp_t fn = (iFpiippp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iFppiiii_32(x64emu_t *emu, uintptr_t fcn) { iFppiiii_t fn = (iFppiiii_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void iFppuIII_32(x64emu_t *emu, uintptr_t fcn) { iFppuIII_t fn = (iFppuIII_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int64_t, R_ESP + 16), from_ptri(int64_t, R_ESP + 24), from_ptri(int64_t, R_ESP + 32)); } +void iFppulll_32(x64emu_t *emu, uintptr_t fcn) { iFppulll_t fn = (iFppulll_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_long(from_ptri(long_t, R_ESP + 20)), from_long(from_ptri(long_t, R_ESP + 24))); } +void iFpppppp_32(x64emu_t *emu, uintptr_t fcn) { iFpppppp_t fn = (iFpppppp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iFXiiiii_32(x64emu_t *emu, uintptr_t fcn) { iFXiiiii_t fn = (iFXiiiii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void iFXiiLip_32(x64emu_t *emu, uintptr_t fcn) { iFXiiLip_t fn = (iFXiiLip_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iFXiippp_32(x64emu_t *emu, uintptr_t fcn) { iFXiippp_t fn = (iFXiippp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iFXuuuuu_32(x64emu_t *emu, uintptr_t fcn) { iFXuuuuu_t fn = (iFXuuuuu_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24)); } +void iFXLiiiL_32(x64emu_t *emu, uintptr_t fcn) { iFXLiiiL_t fn = (iFXLiiiL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ulong(from_ptri(ulong_t, R_ESP + 24))); } +void iFXLiiip_32(x64emu_t *emu, uintptr_t fcn) { iFXLiiip_t fn = (iFXLiiip_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iFXLiiuu_32(x64emu_t *emu, uintptr_t fcn) { iFXLiiuu_t fn = (iFXLiiuu_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24)); } +void iFXLuupp_32(x64emu_t *emu, uintptr_t fcn) { iFXLuupp_t fn = (iFXLuupp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iFXLupip_32(x64emu_t *emu, uintptr_t fcn) { iFXLupip_t fn = (iFXLupip_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iFXLLLLL_32(x64emu_t *emu, uintptr_t fcn) { iFXLLLLL_t fn = (iFXLLLLL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ulong(from_ptri(ulong_t, R_ESP + 20)), from_ulong(from_ptri(ulong_t, R_ESP + 24))); } +void iFXLppii_32(x64emu_t *emu, uintptr_t fcn) { iFXLppii_t fn = (iFXLppii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void iFXLpppp_32(x64emu_t *emu, uintptr_t fcn) { iFXLpppp_t fn = (iFXLpppp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iFXpIppp_32(x64emu_t *emu, uintptr_t fcn) { iFXpIppp_t fn = (iFXpIppp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int64_t, R_ESP + 12), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } +void iFXpuiii_32(x64emu_t *emu, uintptr_t fcn) { iFXpuiii_t fn = (iFXpuiii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void iFXpLiWL_32(x64emu_t *emu, uintptr_t fcn) { iFXpLiWL_t fn = (iFXpLiWL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptri(uint16_t, R_ESP + 20), from_ulong(from_ptri(ulong_t, R_ESP + 24))); } +void iFXpLLiL_32(x64emu_t *emu, uintptr_t fcn) { iFXpLLiL_t fn = (iFXpLLiL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ulong(from_ptri(ulong_t, R_ESP + 24))); } +void iFXppppi_32(x64emu_t *emu, uintptr_t fcn) { iFXppppi_t fn = (iFXppppi_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void iFXppppp_32(x64emu_t *emu, uintptr_t fcn) { iFXppppp_t fn = (iFXppppp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void uFEpippi_32(x64emu_t *emu, uintptr_t fcn) { uFEpippi_t fn = (uFEpippi_t)fcn; R_EAX = (uint32_t)fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); } +void uFupuufp_32(x64emu_t *emu, uintptr_t fcn) { uFupuufp_t fn = (uFupuufp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void lEipLipu_32(x64emu_t *emu, uintptr_t fcn) { lEipLipu_t fn = (lEipLipu_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(uint32_t, R_ESP + 24))); emu->libc_err = errno; } +void lEipLipp_32(x64emu_t *emu, uintptr_t fcn) { lEipLipp_t fn = (lEipLipp_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24))); emu->libc_err = errno; } +void pFEpiiuu_32(x64emu_t *emu, uintptr_t fcn) { pFEpiiuu_t fn = (pFEpiiuu_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20))); } +void pEEpLLiN_32(x64emu_t *emu, uintptr_t fcn) { pEEpLLiN_t fn = (pEEpLLiN_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20))); emu->libc_err = errno; } +void pEEppLLp_32(x64emu_t *emu, uintptr_t fcn) { pEEppLLp_t fn = (pEEppLLp_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20))); emu->libc_err = errno; } +void pFEXpppp_32(x64emu_t *emu, uintptr_t fcn) { pFEXpppp_t fn = (pFEXpppp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20))); } +void pFWCiWCi_32(x64emu_t *emu, uintptr_t fcn) { pFWCiWCi_t fn = (pFWCiWCi_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint16_t, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint16_t, R_ESP + 16), from_ptri(uint8_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24))); } +void pFpiiiiu_32(x64emu_t *emu, uintptr_t fcn) { pFpiiiiu_t fn = (pFpiiiiu_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24))); } +void XFpppppp_32(x64emu_t *emu, uintptr_t fcn) { XFpppppp_t fn = (XFpppppp_t)fcn; R_EAX = to_ptrv(addDisplay(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)))); } +void iFpppbp_pp_32(x64emu_t *emu, uintptr_t fcn) { iFpppbp_pp_t fn = (iFpppbp_pp_t)fcn; struct_p_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_p(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void iFXibL_ppu_32(x64emu_t *emu, uintptr_t fcn) { iFXibL_ppu_t fn = (iFXibL_ppu_t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(uint32_t, R_ESP + 24)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXLiiibL__32(x64emu_t *emu, uintptr_t fcn) { iFXLiiibL__t fn = (iFXLiiibL__t)fcn; struct_L_t arg_24={0}; if (*(ptr_t*)(from_ptr((R_ESP + 24)))) from_struct_L(&arg_24, *(ptr_t*)(from_ptr((R_ESP + 24)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), *(ptr_t*)(from_ptr((R_ESP + 24))) ? &arg_24 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 24)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 24))), &arg_24); } +void iFXLLLLbL__32(x64emu_t *emu, uintptr_t fcn) { iFXLLLLbL__t fn = (iFXLLLLbL__t)fcn; struct_L_t arg_24={0}; if (*(ptr_t*)(from_ptr((R_ESP + 24)))) from_struct_L(&arg_24, *(ptr_t*)(from_ptr((R_ESP + 24)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ulong(from_ptri(ulong_t, R_ESP + 20)), *(ptr_t*)(from_ptr((R_ESP + 24))) ? &arg_24 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 24)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 24))), &arg_24); } +void iFXLbL_ipi_32(x64emu_t *emu, uintptr_t fcn) { iFXLbL_ipi_t fn = (iFXLbL_ipi_t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXbL_upip_32(x64emu_t *emu, uintptr_t fcn) { iFXbL_upip_t fn = (iFXbL_upip_t)fcn; struct_L_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_L(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void iFppbL_pbL_p_32(x64emu_t *emu, uintptr_t fcn) { iFppbL_pbL_p_t fn = (iFppbL_pbL_p_t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); struct_L_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_L(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptriv(R_ESP + 16), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL, from_ptriv(R_ESP + 24)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void iFrpuu_Lrpuu_Lui_32(x64emu_t *emu, uintptr_t fcn) { iFrpuu_Lrpuu_Lui_t fn = (iFrpuu_Lrpuu_Lui_t)fcn; struct_puu_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_puu(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); struct_puu_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_puu(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(uint32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void iFXbLip_uubLip_L_32(x64emu_t *emu, uintptr_t fcn) { iFXbLip_uubLip_L_t fn = (iFXbLip_uubLip_L_t)fcn; struct_Lip_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_Lip(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); struct_Lip_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_Lip(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 24))); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_Lip(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_Lip(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void vFbp_bppup_ippbp__32(x64emu_t *emu, uintptr_t fcn) { vFbp_bppup_ippbp__t fn = (vFbp_bppup_ippbp__t)fcn; struct_p_t arg_4={0}; if (*(ptr_t*)(from_ptr((R_ESP + 4)))) from_struct_p(&arg_4, *(ptr_t*)(from_ptr((R_ESP + 4)))); struct_ppup_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_ppup(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); struct_p_t arg_24={0}; if (*(ptr_t*)(from_ptr((R_ESP + 24)))) from_struct_p(&arg_24, *(ptr_t*)(from_ptr((R_ESP + 24)))); fn(*(ptr_t*)(from_ptr((R_ESP + 4))) ? &arg_4 : NULL, *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), *(ptr_t*)(from_ptr((R_ESP + 24))) ? &arg_24 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 4)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 4))), &arg_4); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_ppup(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); if (*(ptr_t*)(from_ptr((R_ESP + 24)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 24))), &arg_24); } +void vFEuuippp_32(x64emu_t *emu, uintptr_t fcn) { vFEuuippp_t fn = (vFEuuippp_t)fcn; fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFEupupip_32(x64emu_t *emu, uintptr_t fcn) { vFEupupip_t fn = (vFEupupip_t)fcn; fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFiiiiiip_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiiip_t fn = (vFiiiiiip_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiuup_t fn = (vFiiiiuup_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFiiuilil_32(x64emu_t *emu, uintptr_t fcn) { vFiiuilil_t fn = (vFiiuilil_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_long(from_ptri(long_t, R_ESP + 20)), from_ptri(int32_t, R_ESP + 24), from_long(from_ptri(long_t, R_ESP + 28))); } +void vFiiffffp_32(x64emu_t *emu, uintptr_t fcn) { vFiiffffp_t fn = (vFiiffffp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFiuulipi_32(x64emu_t *emu, uintptr_t fcn) { vFiuulipi_t fn = (vFiuulipi_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFiupuuup_32(x64emu_t *emu, uintptr_t fcn) { vFiupuuup_t fn = (vFiupuuup_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFilipliu_32(x64emu_t *emu, uintptr_t fcn) { vFilipliu_t fn = (vFilipliu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_long(from_ptri(long_t, R_ESP + 20)), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28)); } +void vFilulipi_32(x64emu_t *emu, uintptr_t fcn) { vFilulipi_t fn = (vFilulipi_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(uint32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFCCCCfff_32(x64emu_t *emu, uintptr_t fcn) { vFCCCCfff_t fn = (vFCCCCfff_t)fcn; fn(from_ptri(uint8_t, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28)); } +void vFuiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiii_t fn = (vFuiiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFuiiiiiC_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiC_t fn = (vFuiiiiiC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint8_t, R_ESP + 28)); } +void vFuiiiuip_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiuip_t fn = (vFuiiiuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFuiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiuup_t fn = (vFuiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFuiuiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiii_t fn = (vFuiuiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFuiuiiiC_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiC_t fn = (vFuiuiiiC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint8_t, R_ESP + 28)); } +void vFuiuiiip_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiip_t fn = (vFuiuiiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFuiuiiuU_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiuU_t fn = (vFuiuiiuU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint64_t, R_ESP + 28)); } +void vFuiuCiuu_32(x64emu_t *emu, uintptr_t fcn) { vFuiuCiuu_t fn = (vFuiuCiuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28)); } +void vFuiupiiu_32(x64emu_t *emu, uintptr_t fcn) { vFuiupiiu_t fn = (vFuiupiiu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28)); } +void vFuiupuip_32(x64emu_t *emu, uintptr_t fcn) { vFuiupuip_t fn = (vFuiupuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFuipiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuipiiii_t fn = (vFuipiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFuipffff_32(x64emu_t *emu, uintptr_t fcn) { vFuipffff_t fn = (vFuipffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28)); } +void vFuipdddd_32(x64emu_t *emu, uintptr_t fcn) { vFuipdddd_t fn = (vFuipdddd_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(double, R_ESP + 16), from_ptri(double, R_ESP + 24), from_ptri(double, R_ESP + 32), from_ptri(double, R_ESP + 40)); } +void vFuuiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiii_t fn = (vFuuiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFuuiiiiC_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiC_t fn = (vFuuiiiiC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint8_t, R_ESP + 28)); } +void vFuuiiiiu_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiu_t fn = (vFuuiiiiu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28)); } +void vFuuiiiip_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiip_t fn = (vFuuiiiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFuuiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiuup_t fn = (vFuuiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFuuiCiui_32(x64emu_t *emu, uintptr_t fcn) { vFuuiCiui_t fn = (vFuuiCiui_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFuuiCiuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuiCiuu_t fn = (vFuuiCiuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28)); } +void vFuuiuiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuiii_t fn = (vFuuiuiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFuuiuiiC_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuiiC_t fn = (vFuuiuiiC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint8_t, R_ESP + 28)); } +void vFuuipppp_32(x64emu_t *emu, uintptr_t fcn) { vFuuipppp_t fn = (vFuuipppp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFuuuiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuuiiii_t fn = (vFuuuiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFuuuiiCp_32(x64emu_t *emu, uintptr_t fcn) { vFuuuiiCp_t fn = (vFuuuiiCp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint8_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFuuuiuil_32(x64emu_t *emu, uintptr_t fcn) { vFuuuiuil_t fn = (vFuuuiuil_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_long(from_ptri(long_t, R_ESP + 28))); } +void vFuuuiupi_32(x64emu_t *emu, uintptr_t fcn) { vFuuuiupi_t fn = (vFuuuiupi_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFuuuuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuu_t fn = (vFuuuuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28)); } +void vFuuuulll_32(x64emu_t *emu, uintptr_t fcn) { vFuuuulll_t fn = (vFuuuulll_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_long(from_ptri(long_t, R_ESP + 20)), from_long(from_ptri(long_t, R_ESP + 24)), from_long(from_ptri(long_t, R_ESP + 28))); } +void vFuuuffff_32(x64emu_t *emu, uintptr_t fcn) { vFuuuffff_t fn = (vFuuuffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28)); } +void vFuuudddd_32(x64emu_t *emu, uintptr_t fcn) { vFuuudddd_t fn = (vFuuudddd_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(double, R_ESP + 16), from_ptri(double, R_ESP + 24), from_ptri(double, R_ESP + 32), from_ptri(double, R_ESP + 40)); } +void vFuuffiip_32(x64emu_t *emu, uintptr_t fcn) { vFuuffiip_t fn = (vFuuffiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFuuddiip_32(x64emu_t *emu, uintptr_t fcn) { vFuuddiip_t fn = (vFuuddiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void vFuulluup_32(x64emu_t *emu, uintptr_t fcn) { vFuulluup_t fn = (vFuulluup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16)), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFuupiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuupiiii_t fn = (vFuupiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFuuppppp_32(x64emu_t *emu, uintptr_t fcn) { vFuuppppp_t fn = (vFuuppppp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFuffffff_32(x64emu_t *emu, uintptr_t fcn) { vFuffffff_t fn = (vFuffffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28)); } +void vFudddddd_32(x64emu_t *emu, uintptr_t fcn) { vFudddddd_t fn = (vFudddddd_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(double, R_ESP + 24), from_ptri(double, R_ESP + 32), from_ptri(double, R_ESP + 40), from_ptri(double, R_ESP + 48)); } +void vFlliiiip_32(x64emu_t *emu, uintptr_t fcn) { vFlliiiip_t fn = (vFlliiiip_t)fcn; fn(from_long(from_ptri(long_t, R_ESP + 4)), from_long(from_ptri(long_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void vFpipipiu_32(x64emu_t *emu, uintptr_t fcn) { vFpipipiu_t fn = (vFpipipiu_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28)); } +void vFpddiidd_32(x64emu_t *emu, uintptr_t fcn) { vFpddiidd_t fn = (vFpddiidd_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(double, R_ESP + 32), from_ptri(double, R_ESP + 40)); } +void vFXLiiiLi_32(x64emu_t *emu, uintptr_t fcn) { vFXLiiiLi_t fn = (vFXLiiiLi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ulong(from_ptri(ulong_t, R_ESP + 24)), from_ptri(int32_t, R_ESP + 28)); } +void vFXLiiipi_32(x64emu_t *emu, uintptr_t fcn) { vFXLiiipi_t fn = (vFXLiiipi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFXLiiuui_32(x64emu_t *emu, uintptr_t fcn) { vFXLiiuui_t fn = (vFXLiiuui_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFXLLuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFXLLuuuu_t fn = (vFXLLuuuu_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28)); } +void vFXLppipi_32(x64emu_t *emu, uintptr_t fcn) { vFXLppipi_t fn = (vFXLppipi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFXpiipii_32(x64emu_t *emu, uintptr_t fcn) { vFXpiipii_t fn = (vFXpiipii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void vFXppiiii_32(x64emu_t *emu, uintptr_t fcn) { vFXppiiii_t fn = (vFXppiiii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void iEEpLiipV_32(x64emu_t *emu, uintptr_t fcn) { iEEpLiipV_t fn = (iEEpLiipV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptrv(R_ESP + 24)); emu->libc_err = errno; } +void iEEpLiLpV_32(x64emu_t *emu, uintptr_t fcn) { iEEpLiLpV_t fn = (iEEpLiLpV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20), from_ptrv(R_ESP + 24)); emu->libc_err = errno; } +void iFEpppipp_32(x64emu_t *emu, uintptr_t fcn) { iFEpppipp_t fn = (iFEpppipp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iFEpppupp_32(x64emu_t *emu, uintptr_t fcn) { iFEpppupp_t fn = (iFEpppupp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iEEpppppp_32(x64emu_t *emu, uintptr_t fcn) { iEEpppppp_t fn = (iEEpppppp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); emu->libc_err = errno; } +void iFEXLpiiL_32(x64emu_t *emu, uintptr_t fcn) { iFEXLpiiL_t fn = (iFEXLpiiL_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ulong(from_ptri(ulong_t, R_ESP + 24))); } +void iFEXLpppp_32(x64emu_t *emu, uintptr_t fcn) { iFEXLpppp_t fn = (iFEXLpppp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iFEXppppp_32(x64emu_t *emu, uintptr_t fcn) { iFEXppppp_t fn = (iFEXppppp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } +void iFuiiiuup_32(x64emu_t *emu, uintptr_t fcn) { iFuiiiuup_t fn = (iFuiiiuup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } +void iFpiuuuiu_32(x64emu_t *emu, uintptr_t fcn) { iFpiuuuiu_t fn = (iFpiuuuiu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28)); } +void iFpWCiWCi_32(x64emu_t *emu, uintptr_t fcn) { iFpWCiWCi_t fn = (iFpWCiWCi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint16_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint16_t, R_ESP + 20), from_ptri(uint8_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void iEpupupui_32(x64emu_t *emu, uintptr_t fcn) { iEpupupui_t fn = (iEpupupui_t)fcn; errno = emu->libc_err; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); emu->libc_err = errno; } +void iFXiuLiii_32(x64emu_t *emu, uintptr_t fcn) { iFXiuLiii_t fn = (iFXiuLiii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void iFXiLuupp_32(x64emu_t *emu, uintptr_t fcn) { iFXiLuupp_t fn = (iFXiLuupp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } +void iFXLiiiiL_32(x64emu_t *emu, uintptr_t fcn) { iFXLiiiiL_t fn = (iFXLiiiiL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ulong(from_ptri(ulong_t, R_ESP + 28))); } +void iFXLiiuui_32(x64emu_t *emu, uintptr_t fcn) { iFXLiiuui_t fn = (iFXLiiuui_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void iFXLpiiii_32(x64emu_t *emu, uintptr_t fcn) { iFXLpiiii_t fn = (iFXLpiiii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void iFXLpiiuu_32(x64emu_t *emu, uintptr_t fcn) { iFXLpiiuu_t fn = (iFXLpiiuu_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28)); } +void iFXLpiipi_32(x64emu_t *emu, uintptr_t fcn) { iFXLpiipi_t fn = (iFXLpiipi_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void iFXLppiii_32(x64emu_t *emu, uintptr_t fcn) { iFXLppiii_t fn = (iFXLppiii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void iFXpiipii_32(x64emu_t *emu, uintptr_t fcn) { iFXpiipii_t fn = (iFXpiipii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void iFXpLiWwL_32(x64emu_t *emu, uintptr_t fcn) { iFXpLiWwL_t fn = (iFXpLiWwL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptri(uint16_t, R_ESP + 20), from_ptri(int16_t, R_ESP + 24), from_ulong(from_ptri(ulong_t, R_ESP + 28))); } +void iFXpLuuii_32(x64emu_t *emu, uintptr_t fcn) { iFXpLuuii_t fn = (iFXpLuuii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); } +void uFuippppp_32(x64emu_t *emu, uintptr_t fcn) { uFuippppp_t fn = (uFuippppp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } +void lEEipLpLL_32(x64emu_t *emu, uintptr_t fcn) { lEEipLpLL_t fn = (lEEipLpLL_t)fcn; errno = emu->libc_err; R_EAX = to_long(fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ulong(from_ptri(ulong_t, R_ESP + 20)), from_ulong(from_ptri(ulong_t, R_ESP + 24)))); emu->libc_err = errno; } +void pFEpiiiiu_32(x64emu_t *emu, uintptr_t fcn) { pFEpiiiiu_t fn = (pFEpiiiiu_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24))); } +void pFEpLiiii_32(x64emu_t *emu, uintptr_t fcn) { pFEpLiiii_t fn = (pFEpLiiii_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24))); } +void pEEpLiiiI_32(x64emu_t *emu, uintptr_t fcn) { pEEpLiiiI_t fn = (pEEpLiiiI_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int64_t, R_ESP + 24))); emu->libc_err = errno; } +void pFEpLiiiI_32(x64emu_t *emu, uintptr_t fcn) { pFEpLiiiI_t fn = (pFEpLiiiI_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int64_t, R_ESP + 24))); } +void pEEpLiiil_32(x64emu_t *emu, uintptr_t fcn) { pEEpLiiil_t fn = (pEEpLiiil_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_long(from_ptri(long_t, R_ESP + 24)))); emu->libc_err = errno; } +void pFEpXppip_32(x64emu_t *emu, uintptr_t fcn) { pFEpXppip_t fn = (pFEpXppip_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), getDisplay(from_ptriv(R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24))); } +void vFXLLiiibl__32(x64emu_t *emu, uintptr_t fcn) { vFXLLiiibl__t fn = (vFXLLiiibl__t)fcn; struct_l_t arg_28={0}; if (*(ptr_t*)(from_ptr((R_ESP + 28)))) from_struct_l(&arg_28, *(ptr_t*)(from_ptr((R_ESP + 28)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), *(ptr_t*)(from_ptr((R_ESP + 28))) ? &arg_28 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 28)))) to_struct_l(*(ptr_t*)(from_ptr((R_ESP + 28))), &arg_28); } +void iFXiLibiip_ip_32(x64emu_t *emu, uintptr_t fcn) { iFXiLibiip_ip_t fn = (iFXiLibiip_ip_t)fcn; struct_iip_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_iip(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL, from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_iip(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void iFXLibL_ubL_u_32(x64emu_t *emu, uintptr_t fcn) { iFXLibL_ubL_u_t fn = (iFXLibL_ubL_u_t)fcn; struct_L_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_L(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); struct_L_t arg_24={0}; if (*(ptr_t*)(from_ptr((R_ESP + 24)))) from_struct_L(&arg_24, *(ptr_t*)(from_ptr((R_ESP + 24)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, from_ptri(uint32_t, R_ESP + 20), *(ptr_t*)(from_ptr((R_ESP + 24))) ? &arg_24 : NULL, from_ptri(uint32_t, R_ESP + 28)); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); if (*(ptr_t*)(from_ptr((R_ESP + 24)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 24))), &arg_24); } +void vFXLpiibpiip_i_32(x64emu_t *emu, uintptr_t fcn) { vFXLpiibpiip_i_t fn = (vFXLpiibpiip_i_t)fcn; struct_piip_t arg_24={0}; if (*(ptr_t*)(from_ptr((R_ESP + 24)))) from_struct_piip(&arg_24, *(ptr_t*)(from_ptr((R_ESP + 24)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), *(ptr_t*)(from_ptr((R_ESP + 24))) ? &arg_24 : NULL, from_ptri(int32_t, R_ESP + 28)); if (*(ptr_t*)(from_ptr((R_ESP + 24)))) to_struct_piip(*(ptr_t*)(from_ptr((R_ESP + 24))), &arg_24); } +void iFXLpiibpiiL_i_32(x64emu_t *emu, uintptr_t fcn) { iFXLpiibpiiL_i_t fn = (iFXLpiibpiiL_i_t)fcn; struct_piiL_t arg_24={0}; if (*(ptr_t*)(from_ptr((R_ESP + 24)))) from_struct_piiL(&arg_24, *(ptr_t*)(from_ptr((R_ESP + 24)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), *(ptr_t*)(from_ptr((R_ESP + 24))) ? &arg_24 : NULL, from_ptri(int32_t, R_ESP + 28)); if (*(ptr_t*)(from_ptr((R_ESP + 24)))) to_struct_piiL(*(ptr_t*)(from_ptr((R_ESP + 24))), &arg_24); } +void LFXLLuubLWWWcc_bLWWWcc__32(x64emu_t *emu, uintptr_t fcn) { LFXLLuubLWWWcc_bLWWWcc__t fn = (LFXLLuubLWWWcc_bLWWWcc__t)fcn; struct_LWWWcc_t arg_24={0}; if (*(ptr_t*)(from_ptr((R_ESP + 24)))) from_struct_LWWWcc(&arg_24, *(ptr_t*)(from_ptr((R_ESP + 24)))); struct_LWWWcc_t arg_28={0}; if (*(ptr_t*)(from_ptr((R_ESP + 28)))) from_struct_LWWWcc(&arg_28, *(ptr_t*)(from_ptr((R_ESP + 28)))); R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), *(ptr_t*)(from_ptr((R_ESP + 24))) ? &arg_24 : NULL, *(ptr_t*)(from_ptr((R_ESP + 28))) ? &arg_28 : NULL)); if (*(ptr_t*)(from_ptr((R_ESP + 24)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 24))), &arg_24); if (*(ptr_t*)(from_ptr((R_ESP + 28)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 28))), &arg_28); } +void LFXLLbLWWWcc_bLWWWcc_uu_32(x64emu_t *emu, uintptr_t fcn) { LFXLLbLWWWcc_bLWWWcc_uu_t fn = (LFXLLbLWWWcc_bLWWWcc_uu_t)fcn; struct_LWWWcc_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_LWWWcc(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); struct_LWWWcc_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_LWWWcc(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL, from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28))); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_LWWWcc(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); } +void vFiiiiuuip_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiuuip_t fn = (vFiiiiuuip_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } +void vFiilliilp_32(x64emu_t *emu, uintptr_t fcn) { vFiilliilp_t fn = (vFiilliilp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_long(from_ptri(long_t, R_ESP + 28)), from_ptriv(R_ESP + 32)); } +void vFiupuiuup_32(x64emu_t *emu, uintptr_t fcn) { vFiupuiuup_t fn = (vFiupuiuup_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } +void vFiupuuuup_32(x64emu_t *emu, uintptr_t fcn) { vFiupuuuup_t fn = (vFiupuuuup_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } +void vFuiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiii_t fn = (vFuiiiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32)); } +void vFuiiiiiiC_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiC_t fn = (vFuiiiiiiC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(uint8_t, R_ESP + 32)); } +void vFuiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiuup_t fn = (vFuiiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } +void vFuiiipiup_32(x64emu_t *emu, uintptr_t fcn) { vFuiiipiup_t fn = (vFuiiipiup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } +void vFuiuiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiii_t fn = (vFuiuiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32)); } +void vFuiuiiiip_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiip_t fn = (vFuiuiiiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } +void vFuiuiiiuU_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiuU_t fn = (vFuiuiiiuU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint64_t, R_ESP + 32)); } +void vFuiuiiCuU_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiCuU_t fn = (vFuiuiiCuU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint8_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint64_t, R_ESP + 32)); } +void vFuiuiuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiuuuu_t fn = (vFuiuiuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32)); } +void vFuCCCCfff_32(x64emu_t *emu, uintptr_t fcn) { vFuCCCCfff_t fn = (vFuCCCCfff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptri(uint8_t, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32)); } +void vFuuiiiiiC_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiC_t fn = (vFuuiiiiiC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(uint8_t, R_ESP + 32)); } +void vFuuiiiuip_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiuip_t fn = (vFuuiiiuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } +void vFuuiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiuup_t fn = (vFuuiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } +void vFuuiiuupp_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiuupp_t fn = (vFuuiiuupp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32)); } +void vFuuiuiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuiiii_t fn = (vFuuiuiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32)); } +void vFuuiuiiiC_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuiiiC_t fn = (vFuuiuiiiC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(uint8_t, R_ESP + 32)); } +void vFuuiuiiip_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuiiip_t fn = (vFuuiuiiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } +void vFuuuiiiiu_32(x64emu_t *emu, uintptr_t fcn) { vFuuuiiiiu_t fn = (vFuuuiiiiu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32)); } +void vFuuuiuCil_32(x64emu_t *emu, uintptr_t fcn) { vFuuuiuCil_t fn = (vFuuuiuCil_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint8_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_long(from_ptri(long_t, R_ESP + 32))); } +void vFuuuipipp_32(x64emu_t *emu, uintptr_t fcn) { vFuuuipipp_t fn = (vFuuuipipp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32)); } +void vFuuuuuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuuu_t fn = (vFuuuuuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32)); } +void vFuuufffff_32(x64emu_t *emu, uintptr_t fcn) { vFuuufffff_t fn = (vFuuufffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32)); } +void vFffffffff_32(x64emu_t *emu, uintptr_t fcn) { vFffffffff_t fn = (vFffffffff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32)); } +void vFXiLLiipi_32(x64emu_t *emu, uintptr_t fcn) { vFXiLLiipi_t fn = (vFXiLLiipi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28), from_ptri(int32_t, R_ESP + 32)); } +void vFXiLpiiuu_32(x64emu_t *emu, uintptr_t fcn) { vFXiLpiiuu_t fn = (vFXiLpiiuu_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32)); } +void vFXLiiiLii_32(x64emu_t *emu, uintptr_t fcn) { vFXLiiiLii_t fn = (vFXLiiiLii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ulong(from_ptri(ulong_t, R_ESP + 24)), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32)); } +void vFXLLLiipi_32(x64emu_t *emu, uintptr_t fcn) { vFXLLLiipi_t fn = (vFXLLLiipi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28), from_ptri(int32_t, R_ESP + 32)); } +void vFXLppiipi_32(x64emu_t *emu, uintptr_t fcn) { vFXLppiipi_t fn = (vFXLppiipi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28), from_ptri(int32_t, R_ESP + 32)); } +void vFXppuulll_32(x64emu_t *emu, uintptr_t fcn) { vFXppuulll_t fn = (vFXppuulll_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_long(from_ptri(long_t, R_ESP + 24)), from_long(from_ptri(long_t, R_ESP + 28)), from_long(from_ptri(long_t, R_ESP + 32))); } +void iEEpippppp_32(x64emu_t *emu, uintptr_t fcn) { iEEpippppp_t fn = (iEEpippppp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); emu->libc_err = errno; } +void iEEpLiLppp_32(x64emu_t *emu, uintptr_t fcn) { iEEpLiLppp_t fn = (iEEpLiLppp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); emu->libc_err = errno; } +void iFEppipppp_32(x64emu_t *emu, uintptr_t fcn) { iFEppipppp_t fn = (iFEppipppp_t)fcn; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); } +void iFuiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { iFuiiiiuup_t fn = (iFuiiiiuup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } +void iFpuippupp_32(x64emu_t *emu, uintptr_t fcn) { iFpuippupp_t fn = (iFpuippupp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32)); } +void iFpuuiiuuu_32(x64emu_t *emu, uintptr_t fcn) { iFpuuiiuuu_t fn = (iFpuuiiuuu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32)); } +void iFXuupuupp_32(x64emu_t *emu, uintptr_t fcn) { iFXuupuupp_t fn = (iFXuupuupp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32)); } +void iFXLpipppp_32(x64emu_t *emu, uintptr_t fcn) { iFXLpipppp_t fn = (iFXLpipppp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32)); } +void iFXLppLpip_32(x64emu_t *emu, uintptr_t fcn) { iFXLppLpip_t fn = (iFXLppLpip_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ulong(from_ptri(ulong_t, R_ESP + 20)), from_ptriv(R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptriv(R_ESP + 32)); } +void iFXpIIIppp_32(x64emu_t *emu, uintptr_t fcn) { iFXpIIIppp_t fn = (iFXpIIIppp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int64_t, R_ESP + 12), from_ptri(int64_t, R_ESP + 20), from_ptri(int64_t, R_ESP + 28), from_ptriv(R_ESP + 36), from_ptriv(R_ESP + 40), from_ptriv(R_ESP + 44)); } +void CFuiifpppp_32(x64emu_t *emu, uintptr_t fcn) { CFuiifpppp_t fn = (CFuiifpppp_t)fcn; R_EAX = (unsigned char)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32)); } +void uFuipppppp_32(x64emu_t *emu, uintptr_t fcn) { uFuipppppp_t fn = (uFuipppppp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32)); } +void uFuupuuiuf_32(x64emu_t *emu, uintptr_t fcn) { uFuupuuiuf_t fn = (uFuupuuiuf_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(float, R_ESP + 32)); } +void uFulpppppp_32(x64emu_t *emu, uintptr_t fcn) { uFulpppppp_t fn = (uFulpppppp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_long(from_ptri(long_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32)); } +void LFEXLppuuu_32(x64emu_t *emu, uintptr_t fcn) { LFEXLppuuu_t fn = (LFEXLppuuu_t)fcn; R_EAX = to_ulong(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28))); } +void LFXLpuuLLu_32(x64emu_t *emu, uintptr_t fcn) { LFXLpuuLLu_t fn = (LFXLpuuLLu_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ulong(from_ptri(ulong_t, R_ESP + 24)), from_ulong(from_ptri(ulong_t, R_ESP + 28)), from_ptri(uint32_t, R_ESP + 32))); } +void iFXLLiippBL__32(x64emu_t *emu, uintptr_t fcn) { iFXLLiippBL__t fn = (iFXLLiippBL__t)fcn; struct_L_t arg_32={0}; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), *(ptr_t*)(from_ptr((R_ESP + 32))) ? &arg_32 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 32)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 32))), &arg_32); } +void iFXLpppbL_pp_32(x64emu_t *emu, uintptr_t fcn) { iFXLpppbL_pp_t fn = (iFXLpppbL_pp_t)fcn; struct_L_t arg_24={0}; if (*(ptr_t*)(from_ptr((R_ESP + 24)))) from_struct_L(&arg_24, *(ptr_t*)(from_ptr((R_ESP + 24)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), *(ptr_t*)(from_ptr((R_ESP + 24))) ? &arg_24 : NULL, from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32)); if (*(ptr_t*)(from_ptr((R_ESP + 24)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 24))), &arg_24); } +void vFiiiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiiiiii_t fn = (vFiiiiiiiii_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36)); } +void vFiiiiiiill_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiiiill_t fn = (vFiiiiiiill_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_long(from_ptri(long_t, R_ESP + 32)), from_long(from_ptri(long_t, R_ESP + 36))); } +void vFiiiiillli_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiillli_t fn = (vFiiiiillli_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_long(from_ptri(long_t, R_ESP + 24)), from_long(from_ptri(long_t, R_ESP + 28)), from_long(from_ptri(long_t, R_ESP + 32)), from_ptri(int32_t, R_ESP + 36)); } +void vFiiilllilp_32(x64emu_t *emu, uintptr_t fcn) { vFiiilllilp_t fn = (vFiiilllilp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_long(from_ptri(long_t, R_ESP + 20)), from_long(from_ptri(long_t, R_ESP + 24)), from_ptri(int32_t, R_ESP + 28), from_long(from_ptri(long_t, R_ESP + 32)), from_ptriv(R_ESP + 36)); } +void vFiupuiuuup_32(x64emu_t *emu, uintptr_t fcn) { vFiupuiuuup_t fn = (vFiupuiuuup_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void vFiupuuuuup_32(x64emu_t *emu, uintptr_t fcn) { vFiupuuuuup_t fn = (vFiupuuuuup_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void vFuiiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiii_t fn = (vFuiiiiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36)); } +void vFuiiiiiiiC_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiC_t fn = (vFuiiiiiiiC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint8_t, R_ESP + 36)); } +void vFuiiiiiuip_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiuip_t fn = (vFuiiiiiuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void vFuiiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiuup_t fn = (vFuiiiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void vFuiuiiiiip_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiiip_t fn = (vFuiuiiiiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void vFuiuiiiCuU_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiCuU_t fn = (vFuiuiiiCuU_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint8_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint64_t, R_ESP + 36)); } +void vFuiupuffup_32(x64emu_t *emu, uintptr_t fcn) { vFuiupuffup_t fn = (vFuiupuffup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void vFuuiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiii_t fn = (vFuuiiiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36)); } +void vFuuiiiiiiC_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiiC_t fn = (vFuuiiiiiiC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint8_t, R_ESP + 36)); } +void vFuuiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiuup_t fn = (vFuuiiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void vFuuiuiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuiiiii_t fn = (vFuuiuiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36)); } +void vFuuiuiiiip_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuiiiip_t fn = (vFuuiuiiiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void vFuuuiiiiCp_32(x64emu_t *emu, uintptr_t fcn) { vFuuuiiiiCp_t fn = (vFuuuiiiiCp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(uint8_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void vFuuuuuuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuuuu_t fn = (vFuuuuuuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36)); } +void vFuupuuiuuf_32(x64emu_t *emu, uintptr_t fcn) { vFuupuuiuuf_t fn = (vFuupuuiuuf_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(float, R_ESP + 36)); } +void vFuffffffff_32(x64emu_t *emu, uintptr_t fcn) { vFuffffffff_t fn = (vFuffffffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32), from_ptri(float, R_ESP + 36)); } +void vFffCCCCfff_32(x64emu_t *emu, uintptr_t fcn) { vFffCCCCfff_t fn = (vFffCCCCfff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12), from_ptri(uint8_t, R_ESP + 16), from_ptri(uint8_t, R_ESP + 20), from_ptri(uint8_t, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32), from_ptri(float, R_ESP + 36)); } +void vFddddddddd_32(x64emu_t *emu, uintptr_t fcn) { vFddddddddd_t fn = (vFddddddddd_t)fcn; fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptri(double, R_ESP + 28), from_ptri(double, R_ESP + 36), from_ptri(double, R_ESP + 44), from_ptri(double, R_ESP + 52), from_ptri(double, R_ESP + 60), from_ptri(double, R_ESP + 68)); } +void vFXiLLpiipi_32(x64emu_t *emu, uintptr_t fcn) { vFXiLLpiipi_t fn = (vFXiLLpiipi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptriv(R_ESP + 32), from_ptri(int32_t, R_ESP + 36)); } +void vFXLiiipiii_32(x64emu_t *emu, uintptr_t fcn) { vFXLiiipiii_t fn = (vFXLiiipiii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36)); } +void iFEXLLLiipi_32(x64emu_t *emu, uintptr_t fcn) { iFEXLLLiipi_t fn = (iFEXLLLiipi_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28), from_ptri(int32_t, R_ESP + 32)); } +void iFuiiuuiiip_32(x64emu_t *emu, uintptr_t fcn) { iFuiiuuiiip_t fn = (iFuiiuuiiip_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void iFuiiupiiup_32(x64emu_t *emu, uintptr_t fcn) { iFuiiupiiup_t fn = (iFuiiupiiup_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void iFdddpppppp_32(x64emu_t *emu, uintptr_t fcn) { iFdddpppppp_t fn = (iFdddpppppp_t)fcn; R_EAX = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32), from_ptriv(R_ESP + 36), from_ptriv(R_ESP + 40), from_ptriv(R_ESP + 44), from_ptriv(R_ESP + 48)); } +void iFppippippp_32(x64emu_t *emu, uintptr_t fcn) { iFppippippp_t fn = (iFppippippp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32), from_ptriv(R_ESP + 36)); } +void iFXuuuLiiip_32(x64emu_t *emu, uintptr_t fcn) { iFXuuuLiiip_t fn = (iFXuuuLiiip_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ulong(from_ptri(ulong_t, R_ESP + 20)), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); } +void iFXuuuLpppp_32(x64emu_t *emu, uintptr_t fcn) { iFXuuuLpppp_t fn = (iFXuuuLpppp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ulong(from_ptri(ulong_t, R_ESP + 20)), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32), from_ptriv(R_ESP + 36)); } +void iFXLiuiiLLL_32(x64emu_t *emu, uintptr_t fcn) { iFXLiuiiLLL_t fn = (iFXLiuiiLLL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ulong(from_ptri(ulong_t, R_ESP + 28)), from_ulong(from_ptri(ulong_t, R_ESP + 32)), from_ulong(from_ptri(ulong_t, R_ESP + 36))); } +void iFXLLiiuuii_32(x64emu_t *emu, uintptr_t fcn) { iFXLLiiuuii_t fn = (iFXLLiiuuii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36)); } +void iFXLpiiuuii_32(x64emu_t *emu, uintptr_t fcn) { iFXLpiiuuii_t fn = (iFXLpiiuuii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36)); } +void uFuulpiuiuf_32(x64emu_t *emu, uintptr_t fcn) { uFuulpiuiuf_t fn = (uFuulpiuiuf_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_long(from_ptri(long_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(float, R_ESP + 36)); } +void LFXLiiiiiip_32(x64emu_t *emu, uintptr_t fcn) { LFXLiiiiiip_t fn = (LFXLiiiiiip_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptriv(R_ESP + 36))); } +void LFXLiiuuuLL_32(x64emu_t *emu, uintptr_t fcn) { LFXLiiuuuLL_t fn = (LFXLiiuuuLL_t)fcn; R_EAX = to_ulong(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ulong(from_ptri(ulong_t, R_ESP + 32)), from_ulong(from_ptri(ulong_t, R_ESP + 36)))); } +void pFEuiiiuuuu_32(x64emu_t *emu, uintptr_t fcn) { pFEuiiiuuuu_t fn = (pFEuiiiuuuu_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32))); } +void pFEXLiiuuLi_32(x64emu_t *emu, uintptr_t fcn) { pFEXLiiuuLi_t fn = (pFEXLiiuuLi_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ulong(from_ptri(ulong_t, R_ESP + 28)), from_ptri(int32_t, R_ESP + 32))); } +void pFpiiiiuuuu_32(x64emu_t *emu, uintptr_t fcn) { pFpiiiiuuuu_t fn = (pFpiiiiuuuu_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36))); } +void iFXLbL_pppppp_32(x64emu_t *emu, uintptr_t fcn) { iFXLbL_pppppp_t fn = (iFXLbL_pppppp_t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32), from_ptriv(R_ESP + 36)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); } +void iFXiLiiibiip_ip_32(x64emu_t *emu, uintptr_t fcn) { iFXiLiiibiip_ip_t fn = (iFXiLiiibiip_ip_t)fcn; struct_iip_t arg_28={0}; if (*(ptr_t*)(from_ptr((R_ESP + 28)))) from_struct_iip(&arg_28, *(ptr_t*)(from_ptr((R_ESP + 28)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), *(ptr_t*)(from_ptr((R_ESP + 28))) ? &arg_28 : NULL, from_ptri(int32_t, R_ESP + 32), from_ptriv(R_ESP + 36)); if (*(ptr_t*)(from_ptr((R_ESP + 28)))) to_struct_iip(*(ptr_t*)(from_ptr((R_ESP + 28))), &arg_28); } +void iFXiLLLiiibiip__32(x64emu_t *emu, uintptr_t fcn) { iFXiLLLiiibiip__t fn = (iFXiLLLiiibiip__t)fcn; struct_iip_t arg_36={0}; if (*(ptr_t*)(from_ptr((R_ESP + 36)))) from_struct_iip(&arg_36, *(ptr_t*)(from_ptr((R_ESP + 36)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ulong(from_ptri(ulong_t, R_ESP + 20)), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), *(ptr_t*)(from_ptr((R_ESP + 36))) ? &arg_36 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 36)))) to_struct_iip(*(ptr_t*)(from_ptr((R_ESP + 36))), &arg_36); } +void iFXLbL_bL_ppppp_32(x64emu_t *emu, uintptr_t fcn) { iFXLbL_bL_ppppp_t fn = (iFXLbL_bL_ppppp_t)fcn; struct_L_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_L(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); struct_L_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_L(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32), from_ptriv(R_ESP + 36)); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); } +void vFXiLLrLiiuL_iipi_32(x64emu_t *emu, uintptr_t fcn) { vFXiLLrLiiuL_iipi_t fn = (vFXiLLrLiiuL_iipi_t)fcn; struct_LiiuL_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_LiiuL(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL, from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptriv(R_ESP + 32), from_ptri(int32_t, R_ESP + 36)); } +void pFEXbpLiLLLii_uippuu_32(x64emu_t *emu, uintptr_t fcn) { pFEXbpLiLLLii_uippuu_t fn = (pFEXbpLiLLLii_uippuu_t)fcn; struct_pLiLLLii_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_pLiLLLii(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32))); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_pLiLLLii(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); } +void vFEXLpppippp_32(x64emu_t *emu, uintptr_t fcn) { vFEXLpppippp_t fn = (vFEXLpppippp_t)fcn; fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32), from_ptriv(R_ESP + 36)); } +void vFiiiiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiiiiiii_t fn = (vFiiiiiiiiii_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40)); } +void vFiiiiiiiiui_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiiiiiui_t fn = (vFiiiiiiiiui_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40)); } +void vFiiiiiiiiuu_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiiiiiuu_t fn = (vFiiiiiiiiuu_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40)); } +void vFiiillliiip_32(x64emu_t *emu, uintptr_t fcn) { vFiiillliiip_t fn = (vFiiillliiip_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_long(from_ptri(long_t, R_ESP + 16)), from_long(from_ptri(long_t, R_ESP + 20)), from_long(from_ptri(long_t, R_ESP + 24)), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptriv(R_ESP + 40)); } +void vFuiiiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiii_t fn = (vFuiiiiiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40)); } +void vFuiiiiiiiip_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiip_t fn = (vFuiiiiiiiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptriv(R_ESP + 40)); } +void vFuiiiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiuup_t fn = (vFuiiiiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptriv(R_ESP + 40)); } +void vFuiuiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiiuup_t fn = (vFuiuiiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptriv(R_ESP + 40)); } +void vFuuiiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiiii_t fn = (vFuuiiiiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40)); } +void vFuuiiiiiuip_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiuip_t fn = (vFuuiiiiiuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptriv(R_ESP + 40)); } +void vFuuiiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiuup_t fn = (vFuuiiiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptriv(R_ESP + 40)); } +void vFuuiuiiiiip_32(x64emu_t *emu, uintptr_t fcn) { vFuuiuiiiiip_t fn = (vFuuiuiiiiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptriv(R_ESP + 40)); } +void vFuuuuuuuCCC_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuuCCC_t fn = (vFuuuuuuuCCC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint8_t, R_ESP + 32), from_ptri(uint8_t, R_ESP + 36), from_ptri(uint8_t, R_ESP + 40)); } +void vFuuuuuuuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuuuuu_t fn = (vFuuuuuuuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40)); } +void vFuupuiupuuf_32(x64emu_t *emu, uintptr_t fcn) { vFuupuiupuuf_t fn = (vFuupuiupuuf_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(float, R_ESP + 40)); } +void vFuffiiffiip_32(x64emu_t *emu, uintptr_t fcn) { vFuffiiffiip_t fn = (vFuffiiffiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptriv(R_ESP + 40)); } +void vFuddiiddiip_32(x64emu_t *emu, uintptr_t fcn) { vFuddiiddiip_t fn = (vFuddiiddiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(double, R_ESP + 32), from_ptri(double, R_ESP + 40), from_ptri(int32_t, R_ESP + 48), from_ptri(int32_t, R_ESP + 52), from_ptriv(R_ESP + 56)); } +void vFffffffffff_32(x64emu_t *emu, uintptr_t fcn) { vFffffffffff_t fn = (vFffffffffff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32), from_ptri(float, R_ESP + 36), from_ptri(float, R_ESP + 40)); } +void iFuiiiuuiiip_32(x64emu_t *emu, uintptr_t fcn) { iFuiiiuuiiip_t fn = (iFuiiiuuiiip_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptriv(R_ESP + 40)); } +void iFppuuiiuuuu_32(x64emu_t *emu, uintptr_t fcn) { iFppuuiiuuuu_t fn = (iFppuuiiuuuu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40)); } +void iFXiLLdduudd_32(x64emu_t *emu, uintptr_t fcn) { iFXiLLdduudd_t fn = (iFXiLLdduudd_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(double, R_ESP + 20), from_ptri(double, R_ESP + 28), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(double, R_ESP + 44), from_ptri(double, R_ESP + 52)); } +void iFXuuLiuiiLL_32(x64emu_t *emu, uintptr_t fcn) { iFXuuLiuiiLL_t fn = (iFXuuLiuiiLL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ulong(from_ptri(ulong_t, R_ESP + 36)), from_ulong(from_ptri(ulong_t, R_ESP + 40))); } +void iFXLLpiiuuii_32(x64emu_t *emu, uintptr_t fcn) { iFXLLpiiuuii_t fn = (iFXLLpiiuuii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40)); } +void pFEpiiiiuuuu_32(x64emu_t *emu, uintptr_t fcn) { pFEpiiiiuuuu_t fn = (pFEpiiiiuuuu_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36))); } +void pFpppppppppp_32(x64emu_t *emu, uintptr_t fcn) { pFpppppppppp_t fn = (pFpppppppppp_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32), from_ptriv(R_ESP + 36), from_ptriv(R_ESP + 40))); } +void pFXpuiipuuii_32(x64emu_t *emu, uintptr_t fcn) { pFXpuiipuuii_t fn = (pFXpuiipuuii_t)fcn; R_EAX = to_ptrv(fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40))); } +void iFXiiLiiibiip_ip_32(x64emu_t *emu, uintptr_t fcn) { iFXiiLiiibiip_ip_t fn = (iFXiiLiiibiip_ip_t)fcn; struct_iip_t arg_32={0}; if (*(ptr_t*)(from_ptr((R_ESP + 32)))) from_struct_iip(&arg_32, *(ptr_t*)(from_ptr((R_ESP + 32)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), *(ptr_t*)(from_ptr((R_ESP + 32))) ? &arg_32 : NULL, from_ptri(int32_t, R_ESP + 36), from_ptriv(R_ESP + 40)); if (*(ptr_t*)(from_ptr((R_ESP + 32)))) to_struct_iip(*(ptr_t*)(from_ptr((R_ESP + 32))), &arg_32); } +void iFXiLLiiibiip_ip_32(x64emu_t *emu, uintptr_t fcn) { iFXiLLiiibiip_ip_t fn = (iFXiLLiiibiip_ip_t)fcn; struct_iip_t arg_32={0}; if (*(ptr_t*)(from_ptr((R_ESP + 32)))) from_struct_iip(&arg_32, *(ptr_t*)(from_ptr((R_ESP + 32)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), *(ptr_t*)(from_ptr((R_ESP + 32))) ? &arg_32 : NULL, from_ptri(int32_t, R_ESP + 36), from_ptriv(R_ESP + 40)); if (*(ptr_t*)(from_ptr((R_ESP + 32)))) to_struct_iip(*(ptr_t*)(from_ptr((R_ESP + 32))), &arg_32); } +void vFiiiiillliip_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiillliip_t fn = (vFiiiiillliip_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_long(from_ptri(long_t, R_ESP + 24)), from_long(from_ptri(long_t, R_ESP + 28)), from_long(from_ptri(long_t, R_ESP + 32)), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptriv(R_ESP + 44)); } +void vFiiiiilllilp_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiilllilp_t fn = (vFiiiiilllilp_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_long(from_ptri(long_t, R_ESP + 24)), from_long(from_ptri(long_t, R_ESP + 28)), from_long(from_ptri(long_t, R_ESP + 32)), from_ptri(int32_t, R_ESP + 36), from_long(from_ptri(long_t, R_ESP + 40)), from_ptriv(R_ESP + 44)); } +void vFuiiiiiiiuip_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiuip_t fn = (vFuiiiiiiiuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptriv(R_ESP + 44)); } +void vFuiiiiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiuup_t fn = (vFuiiiiiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptriv(R_ESP + 44)); } +void vFuiiiillliip_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiillliip_t fn = (vFuiiiillliip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_long(from_ptri(long_t, R_ESP + 24)), from_long(from_ptri(long_t, R_ESP + 28)), from_long(from_ptri(long_t, R_ESP + 32)), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptriv(R_ESP + 44)); } +void vFuiuiiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuiuiiiiiuup_t fn = (vFuiuiiiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptriv(R_ESP + 44)); } +void vFuuiiiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiiuup_t fn = (vFuuiiiiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptriv(R_ESP + 44)); } +void vFuuupupppppp_32(x64emu_t *emu, uintptr_t fcn) { vFuuupupppppp_t fn = (vFuuupupppppp_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32), from_ptriv(R_ESP + 36), from_ptriv(R_ESP + 40), from_ptriv(R_ESP + 44)); } +void vFuuffiiffiip_32(x64emu_t *emu, uintptr_t fcn) { vFuuffiiffiip_t fn = (vFuuffiiffiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptriv(R_ESP + 44)); } +void vFuufffffffff_32(x64emu_t *emu, uintptr_t fcn) { vFuufffffffff_t fn = (vFuufffffffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32), from_ptri(float, R_ESP + 36), from_ptri(float, R_ESP + 40), from_ptri(float, R_ESP + 44)); } +void vFuuddiiddiip_32(x64emu_t *emu, uintptr_t fcn) { vFuuddiiddiip_t fn = (vFuuddiiddiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(double, R_ESP + 36), from_ptri(double, R_ESP + 44), from_ptri(int32_t, R_ESP + 52), from_ptri(int32_t, R_ESP + 56), from_ptriv(R_ESP + 60)); } +void vFuUuuuuuuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuUuuuuuuuuu_t fn = (vFuUuuuuuuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(uint32_t, R_ESP + 44), from_ptri(uint32_t, R_ESP + 48)); } +void vFuffffffffff_32(x64emu_t *emu, uintptr_t fcn) { vFuffffffffff_t fn = (vFuffffffffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32), from_ptri(float, R_ESP + 36), from_ptri(float, R_ESP + 40), from_ptri(float, R_ESP + 44)); } +void vFUufffffffff_32(x64emu_t *emu, uintptr_t fcn) { vFUufffffffff_t fn = (vFUufffffffff_t)fcn; fn(from_ptri(uint64_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32), from_ptri(float, R_ESP + 36), from_ptri(float, R_ESP + 40), from_ptri(float, R_ESP + 44), from_ptri(float, R_ESP + 48)); } +void vFpiiiiiiiiuu_32(x64emu_t *emu, uintptr_t fcn) { vFpiiiiiiiiuu_t fn = (vFpiiiiiiiiuu_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(uint32_t, R_ESP + 44)); } +void vFpipipiipiiu_32(x64emu_t *emu, uintptr_t fcn) { vFpipipiipiiu_t fn = (vFpipipiipiiu_t)fcn; fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptriv(R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptri(uint32_t, R_ESP + 44)); } +void iFEXLppiiiiuu_32(x64emu_t *emu, uintptr_t fcn) { iFEXLppiiiiuu_t fn = (iFEXLppiiiiuu_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40)); } +void iFEXpLLiiLWpi_32(x64emu_t *emu, uintptr_t fcn) { iFEXpLLiiLWpi_t fn = (iFEXpLLiiLWpi_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ulong(from_ptri(ulong_t, R_ESP + 28)), from_ptri(uint16_t, R_ESP + 32), from_ptriv(R_ESP + 36), from_ptri(int32_t, R_ESP + 40)); } +void iFuiiiiuuiiip_32(x64emu_t *emu, uintptr_t fcn) { iFuiiiiuuiiip_t fn = (iFuiiiiuuiiip_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptriv(R_ESP + 44)); } +void iFXLLpiiuuiiL_32(x64emu_t *emu, uintptr_t fcn) { iFXLLpiiuuiiL_t fn = (iFXLLpiiuuiiL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ulong(from_ptri(ulong_t, R_ESP + 44))); } +void pFEXpuiipuuii_32(x64emu_t *emu, uintptr_t fcn) { pFEXpuiipuuii_t fn = (pFEXpuiipuuii_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40))); } +void iFXiiLLiiibiip_ip_32(x64emu_t *emu, uintptr_t fcn) { iFXiiLLiiibiip_ip_t fn = (iFXiiLLiiibiip_ip_t)fcn; struct_iip_t arg_36={0}; if (*(ptr_t*)(from_ptr((R_ESP + 36)))) from_struct_iip(&arg_36, *(ptr_t*)(from_ptr((R_ESP + 36)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ulong(from_ptri(ulong_t, R_ESP + 20)), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), *(ptr_t*)(from_ptr((R_ESP + 36))) ? &arg_36 : NULL, from_ptri(int32_t, R_ESP + 40), from_ptriv(R_ESP + 44)); if (*(ptr_t*)(from_ptr((R_ESP + 36)))) to_struct_iip(*(ptr_t*)(from_ptr((R_ESP + 36))), &arg_36); } +void vFXiLLrLiiuL_iiiipi_32(x64emu_t *emu, uintptr_t fcn) { vFXiLLrLiiuL_iiiipi_t fn = (vFXiLLrLiiuL_iiiipi_t)fcn; struct_LiiuL_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_LiiuL(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL, from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptriv(R_ESP + 40), from_ptri(int32_t, R_ESP + 44)); } +void iFXLibL_iiiibL_bL_bL__32(x64emu_t *emu, uintptr_t fcn) { iFXLibL_iiiibL_bL_bL__t fn = (iFXLibL_iiiibL_bL_bL__t)fcn; struct_L_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_L(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); struct_L_t arg_36={0}; if (*(ptr_t*)(from_ptr((R_ESP + 36)))) from_struct_L(&arg_36, *(ptr_t*)(from_ptr((R_ESP + 36)))); struct_L_t arg_40={0}; if (*(ptr_t*)(from_ptr((R_ESP + 40)))) from_struct_L(&arg_40, *(ptr_t*)(from_ptr((R_ESP + 40)))); struct_L_t arg_44={0}; if (*(ptr_t*)(from_ptr((R_ESP + 44)))) from_struct_L(&arg_44, *(ptr_t*)(from_ptr((R_ESP + 44)))); R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), *(ptr_t*)(from_ptr((R_ESP + 36))) ? &arg_36 : NULL, *(ptr_t*)(from_ptr((R_ESP + 40))) ? &arg_40 : NULL, *(ptr_t*)(from_ptr((R_ESP + 44))) ? &arg_44 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); if (*(ptr_t*)(from_ptr((R_ESP + 36)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 36))), &arg_36); if (*(ptr_t*)(from_ptr((R_ESP + 40)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 40))), &arg_40); if (*(ptr_t*)(from_ptr((R_ESP + 44)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 44))), &arg_44); } +void vFuiiiiiiiiuUC_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiiuUC_t fn = (vFuiiiiiiiiuUC_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(uint64_t, R_ESP + 44), from_ptri(uint8_t, R_ESP + 52)); } +void vFuiiiiiiiuuip_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiuuip_t fn = (vFuiiiiiiiuuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptriv(R_ESP + 48)); } +void vFuuiiiiiiiiuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiiiiuu_t fn = (vFuuiiiiiiiiuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptri(uint32_t, R_ESP + 44), from_ptri(uint32_t, R_ESP + 48)); } +void vFuuiiiiiiiuip_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiiiuip_t fn = (vFuuiiiiiiiuip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptriv(R_ESP + 48)); } +void vFuuiiiiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiiiiuup_t fn = (vFuuiiiiiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(uint32_t, R_ESP + 44), from_ptriv(R_ESP + 48)); } +void vFuuuuuuuuuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuuuuuuu_t fn = (vFuuuuuuuuuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(uint32_t, R_ESP + 44), from_ptri(uint32_t, R_ESP + 48)); } +void vFffffffffffff_32(x64emu_t *emu, uintptr_t fcn) { vFffffffffffff_t fn = (vFffffffffffff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32), from_ptri(float, R_ESP + 36), from_ptri(float, R_ESP + 40), from_ptri(float, R_ESP + 44), from_ptri(float, R_ESP + 48)); } +void vFXiLLpiiiipii_32(x64emu_t *emu, uintptr_t fcn) { vFXiLLpiiiipii_t fn = (vFXiLLpiiiipii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptriv(R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptri(int32_t, R_ESP + 48)); } +void iFEXLppiiiiuui_32(x64emu_t *emu, uintptr_t fcn) { iFEXLppiiiiuui_t fn = (iFEXLppiiiiuui_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44)); } +void iFXLpppppppppp_32(x64emu_t *emu, uintptr_t fcn) { iFXLpppppppppp_t fn = (iFXLpppppppppp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28), from_ptriv(R_ESP + 32), from_ptriv(R_ESP + 36), from_ptriv(R_ESP + 40), from_ptriv(R_ESP + 44), from_ptriv(R_ESP + 48)); } +void pFEXLiiuuLipii_32(x64emu_t *emu, uintptr_t fcn) { pFEXLiiuuLipii_t fn = (pFEXLiiuuLipii_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ulong(from_ptri(ulong_t, R_ESP + 28)), from_ptri(int32_t, R_ESP + 32), from_ptriv(R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44))); } +void vFXiLLrLiiuL_Liiiipi_32(x64emu_t *emu, uintptr_t fcn) { vFXiLLrLiiuL_Liiiipi_t fn = (vFXiLLrLiiuL_Liiiipi_t)fcn; struct_LiiuL_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_LiiuL(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL, from_ulong(from_ptri(ulong_t, R_ESP + 24)), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptriv(R_ESP + 44), from_ptri(int32_t, R_ESP + 48)); } +void vFuiiiiiiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiiiiiuup_t fn = (vFuiiiiiiiiiuup_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptri(uint32_t, R_ESP + 44), from_ptri(uint32_t, R_ESP + 48), from_ptriv(R_ESP + 52)); } +void vFuuuuuuuuuuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuuuuuuuu_t fn = (vFuuuuuuuuuuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(uint32_t, R_ESP + 44), from_ptri(uint32_t, R_ESP + 48), from_ptri(uint32_t, R_ESP + 52)); } +void vFuUuuuuuuuuuuu_32(x64emu_t *emu, uintptr_t fcn) { vFuUuuuuuuuuuuu_t fn = (vFuUuuuuuuuuuuu_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(uint32_t, R_ESP + 44), from_ptri(uint32_t, R_ESP + 48), from_ptri(uint32_t, R_ESP + 52), from_ptri(uint32_t, R_ESP + 56)); } +void vFuffffffffffff_32(x64emu_t *emu, uintptr_t fcn) { vFuffffffffffff_t fn = (vFuffffffffffff_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32), from_ptri(float, R_ESP + 36), from_ptri(float, R_ESP + 40), from_ptri(float, R_ESP + 44), from_ptri(float, R_ESP + 48), from_ptri(float, R_ESP + 52)); } +void vFXiLLLiiiiiiuu_32(x64emu_t *emu, uintptr_t fcn) { vFXiLLLiiiiiiuu_t fn = (vFXiLLLiiiiiiuu_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ulong(from_ptri(ulong_t, R_ESP + 20)), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptri(uint32_t, R_ESP + 48), from_ptri(uint32_t, R_ESP + 52)); } +void iFEXLLlliLppppp_32(x64emu_t *emu, uintptr_t fcn) { iFEXLLlliLppppp_t fn = (iFEXLLlliLppppp_t)fcn; R_EAX = fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16)), from_long(from_ptri(long_t, R_ESP + 20)), from_ptri(int32_t, R_ESP + 24), from_ulong(from_ptri(ulong_t, R_ESP + 28)), from_ptriv(R_ESP + 32), from_ptriv(R_ESP + 36), from_ptriv(R_ESP + 40), from_ptriv(R_ESP + 44), from_ptriv(R_ESP + 48)); } +void iFddddpppddpppp_32(x64emu_t *emu, uintptr_t fcn) { iFddddpppddpppp_t fn = (iFddddpppddpppp_t)fcn; R_EAX = fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptri(double, R_ESP + 28), from_ptriv(R_ESP + 36), from_ptriv(R_ESP + 40), from_ptriv(R_ESP + 44), from_ptri(double, R_ESP + 48), from_ptri(double, R_ESP + 56), from_ptriv(R_ESP + 64), from_ptriv(R_ESP + 68), from_ptriv(R_ESP + 72), from_ptriv(R_ESP + 76)); } +void iFXippuuuiipppp_32(x64emu_t *emu, uintptr_t fcn) { iFXippuuuiipppp_t fn = (iFXippuuuiipppp_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptriv(R_ESP + 40), from_ptriv(R_ESP + 44), from_ptriv(R_ESP + 48), from_ptriv(R_ESP + 52)); } +void uFippuuuulllipp_32(x64emu_t *emu, uintptr_t fcn) { uFippuuuulllipp_t fn = (uFippuuuulllipp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_long(from_ptri(long_t, R_ESP + 32)), from_long(from_ptri(long_t, R_ESP + 36)), from_long(from_ptri(long_t, R_ESP + 40)), from_ptri(int32_t, R_ESP + 44), from_ptriv(R_ESP + 48), from_ptriv(R_ESP + 52)); } +void LFEXLiiuuuiupLp_32(x64emu_t *emu, uintptr_t fcn) { LFEXLiiuuuiupLp_t fn = (LFEXLiiuuuiupLp_t)fcn; R_EAX = to_ulong(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptriv(R_ESP + 40), from_ulong(from_ptri(ulong_t, R_ESP + 44)), from_ptriv(R_ESP + 48))); } +void iFXLLlliiLBL_pBL_BL_Bp__32(x64emu_t *emu, uintptr_t fcn) { iFXLLlliiLBL_pBL_BL_Bp__t fn = (iFXLLlliiLBL_pBL_BL_Bp__t)fcn; struct_L_t arg_36={0}; struct_L_t arg_44={0}; struct_L_t arg_48={0}; struct_p_t arg_52={0}; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_long(from_ptri(long_t, R_ESP + 16)), from_long(from_ptri(long_t, R_ESP + 20)), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ulong(from_ptri(ulong_t, R_ESP + 32)), *(ptr_t*)(from_ptr((R_ESP + 36))) ? &arg_36 : NULL, from_ptriv(R_ESP + 40), *(ptr_t*)(from_ptr((R_ESP + 44))) ? &arg_44 : NULL, *(ptr_t*)(from_ptr((R_ESP + 48))) ? &arg_48 : NULL, *(ptr_t*)(from_ptr((R_ESP + 52))) ? &arg_52 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 36)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 36))), &arg_36); if (*(ptr_t*)(from_ptr((R_ESP + 44)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 44))), &arg_44); if (*(ptr_t*)(from_ptr((R_ESP + 48)))) to_struct_L(*(ptr_t*)(from_ptr((R_ESP + 48))), &arg_48); if (*(ptr_t*)(from_ptr((R_ESP + 52)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 52))), &arg_52); } +void vFuffiiffiiffiip_32(x64emu_t *emu, uintptr_t fcn) { vFuffiiffiiffiip_t fn = (vFuffiiffiiffiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(float, R_ESP + 40), from_ptri(float, R_ESP + 44), from_ptri(int32_t, R_ESP + 48), from_ptri(int32_t, R_ESP + 52), from_ptriv(R_ESP + 56)); } +void vFuddiiddiiddiip_32(x64emu_t *emu, uintptr_t fcn) { vFuddiiddiiddiip_t fn = (vFuddiiddiiddiip_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(double, R_ESP + 8), from_ptri(double, R_ESP + 16), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(double, R_ESP + 32), from_ptri(double, R_ESP + 40), from_ptri(int32_t, R_ESP + 48), from_ptri(int32_t, R_ESP + 52), from_ptri(double, R_ESP + 56), from_ptri(double, R_ESP + 64), from_ptri(int32_t, R_ESP + 72), from_ptri(int32_t, R_ESP + 76), from_ptriv(R_ESP + 80)); } +void vFuiiiiiuiiiiilll_32(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiuiiiiilll_t fn = (vFuiiiiiuiiiiilll_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptri(int32_t, R_ESP + 48), from_long(from_ptri(long_t, R_ESP + 52)), from_long(from_ptri(long_t, R_ESP + 56)), from_long(from_ptri(long_t, R_ESP + 60))); } +void vFuuiiiiuuiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuiiiiuuiiiiiii_t fn = (vFuuiiiiuuiiiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(uint32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptri(int32_t, R_ESP + 48), from_ptri(int32_t, R_ESP + 52), from_ptri(int32_t, R_ESP + 56), from_ptri(int32_t, R_ESP + 60)); } +void vFfffffffffffffff_32(x64emu_t *emu, uintptr_t fcn) { vFfffffffffffffff_t fn = (vFfffffffffffffff_t)fcn; fn(from_ptri(float, R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(float, R_ESP + 12), from_ptri(float, R_ESP + 16), from_ptri(float, R_ESP + 20), from_ptri(float, R_ESP + 24), from_ptri(float, R_ESP + 28), from_ptri(float, R_ESP + 32), from_ptri(float, R_ESP + 36), from_ptri(float, R_ESP + 40), from_ptri(float, R_ESP + 44), from_ptri(float, R_ESP + 48), from_ptri(float, R_ESP + 52), from_ptri(float, R_ESP + 56), from_ptri(float, R_ESP + 60)); } +void vFuuuuiiiiuuiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFuuuuiiiiuuiiiiiii_t fn = (vFuuuuiiiiuuiiiiiii_t)fcn; fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(uint32_t, R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptri(int32_t, R_ESP + 48), from_ptri(int32_t, R_ESP + 52), from_ptri(int32_t, R_ESP + 56), from_ptri(int32_t, R_ESP + 60), from_ptri(int32_t, R_ESP + 64), from_ptri(int32_t, R_ESP + 68)); } +void vFXpuiiiiipuiiiiiiii_32(x64emu_t *emu, uintptr_t fcn) { vFXpuiiiiipuiiiiiiii_t fn = (vFXpuiiiiipuiiiiiiii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptriv(R_ESP + 36), from_ptri(uint32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptri(int32_t, R_ESP + 48), from_ptri(int32_t, R_ESP + 52), from_ptri(int32_t, R_ESP + 56), from_ptri(int32_t, R_ESP + 60), from_ptri(int32_t, R_ESP + 64), from_ptri(int32_t, R_ESP + 68), from_ptri(int32_t, R_ESP + 72)); } +void uFippuuuuiiiiuuiiiiiiiipp_32(x64emu_t *emu, uintptr_t fcn) { uFippuuuuiiiiuuiiiiiiiipp_t fn = (uFippuuuuiiiiuuiiiiiiiipp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptri(uint32_t, R_ESP + 28), from_ptri(int32_t, R_ESP + 32), from_ptri(int32_t, R_ESP + 36), from_ptri(int32_t, R_ESP + 40), from_ptri(int32_t, R_ESP + 44), from_ptri(uint32_t, R_ESP + 48), from_ptri(uint32_t, R_ESP + 52), from_ptri(int32_t, R_ESP + 56), from_ptri(int32_t, R_ESP + 60), from_ptri(int32_t, R_ESP + 64), from_ptri(int32_t, R_ESP + 68), from_ptri(int32_t, R_ESP + 72), from_ptri(int32_t, R_ESP + 76), from_ptri(int32_t, R_ESP + 80), from_ptri(int32_t, R_ESP + 84), from_ptriv(R_ESP + 88), from_ptriv(R_ESP + 92)); } + +#if defined(HAVE_LD80BITS) +void DED_32(x64emu_t *emu, uintptr_t fcn) { DED_t fn = (DED_t)fcn; errno = emu->libc_err; long double ld = fn(LD2localLD(from_ptrv(R_ESP + 4))); fpu_do_push(emu); ST0val = ld; emu->libc_err = errno; } +void DEDD_32(x64emu_t *emu, uintptr_t fcn) { DEDD_t fn = (DEDD_t)fcn; errno = emu->libc_err; long double ld = fn(LD2localLD(from_ptrv(R_ESP + 4)), LD2localLD(from_ptrv(R_ESP + 16))); fpu_do_push(emu); ST0val = ld; emu->libc_err = errno; } +void DEDp_32(x64emu_t *emu, uintptr_t fcn) { DEDp_t fn = (DEDp_t)fcn; errno = emu->libc_err; long double ld = fn(LD2localLD(from_ptrv(R_ESP + 4)), from_ptriv(R_ESP + 16)); fpu_do_push(emu); ST0val = ld; emu->libc_err = errno; } +void DEpBp_a_32(x64emu_t *emu, uintptr_t fcn) { DEpBp_a_t fn = (DEpBp_a_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; long double ld = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_locale(from_ptri(ptr_t, R_ESP + 12))); fpu_do_push(emu); ST0val = ld; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +#endif + +#if !defined(HAVE_LD80BITS) +void KEK_32(x64emu_t *emu, uintptr_t fcn) { KEK_t fn = (KEK_t)fcn; errno = emu->libc_err; double db = fn(FromLD(from_ptrv(R_ESP + 4))); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void KEKK_32(x64emu_t *emu, uintptr_t fcn) { KEKK_t fn = (KEKK_t)fcn; errno = emu->libc_err; double db = fn(FromLD(from_ptrv(R_ESP + 4)), FromLD(from_ptrv(R_ESP + 16))); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void KEKp_32(x64emu_t *emu, uintptr_t fcn) { KEKp_t fn = (KEKp_t)fcn; errno = emu->libc_err; double db = fn(FromLD(from_ptrv(R_ESP + 4)), from_ptriv(R_ESP + 16)); fpu_do_push(emu); ST0val = db; emu->libc_err = errno; } +void KEpBp_a_32(x64emu_t *emu, uintptr_t fcn) { KEpBp_a_t fn = (KEpBp_a_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; double db = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_locale(from_ptri(ptr_t, R_ESP + 12))); fpu_do_push(emu); ST0val = db; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +#endif + +void iEEvpp_32(x64emu_t *emu, uintptr_t fcn) { iEEpp_t fn = (iEEpp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12)); emu->libc_err = errno; } +void iEEvpV_32(x64emu_t *emu, uintptr_t fcn) { iEEpV_t fn = (iEEpV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 8), from_ptrv(R_ESP + 12)); emu->libc_err = errno; } +void UEsvvs_32(x64emu_t *emu, uintptr_t fcn) { UEss_t fn = (UEss_t)fcn; errno = emu->libc_err; ui64_t r; r.u = (uint64_t)fn(from_ptrv(R_ESP + 4), from_ptrv(R_ESP + 12)); R_EAX = r.d[0]; R_EDX = r.d[1]; emu->libc_err = errno; } +void pEEppv_32(x64emu_t *emu, uintptr_t fcn) { pEEpp_t fn = (pEEpp_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8))); emu->libc_err = errno; } +void LEpBp_iv_32(x64emu_t *emu, uintptr_t fcn) { LEpBp_i_t fn = (LEpBp_i_t)fcn; errno = emu->libc_err; struct_p_t arg_8={0}; R_EAX = to_ulong(fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, from_ptri(int32_t, R_ESP + 12))); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_p(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); emu->libc_err = errno; } +void iEEivpV_32(x64emu_t *emu, uintptr_t fcn) { iEEipV_t fn = (iEEipV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 12), from_ptrv(R_ESP + 16)); emu->libc_err = errno; } +void iEESvpp_32(x64emu_t *emu, uintptr_t fcn) { iEESpp_t fn = (iEESpp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, io_convert32(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16)); emu->libc_err = errno; } +void iEESvpV_32(x64emu_t *emu, uintptr_t fcn) { iEESpV_t fn = (iEESpV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, io_convert32(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 12), from_ptrv(R_ESP + 16)); emu->libc_err = errno; } +void iEEpvvpV_32(x64emu_t *emu, uintptr_t fcn) { iEEppV_t fn = (iEEppV_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 16), from_ptrv(R_ESP + 20)); emu->libc_err = errno; } +void iEEpLvvpp_32(x64emu_t *emu, uintptr_t fcn) { iEEpLpp_t fn = (iEEpLpp_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); emu->libc_err = errno; } + +int isRetX87Wrapper32(wrapper_t fun) { + if (fun == &fFi_32) return 1; + if (fun == &fEf_32) return 1; + if (fun == &fFf_32) return 1; + if (fun == &dEv_32) return 1; + if (fun == &dFi_32) return 1; + if (fun == &dEd_32) return 1; + if (fun == &dFd_32) return 1; + if (fun == &dEp_32) return 1; + if (fun == &dFp_32) return 1; + if (fun == &fEif_32) return 1; + if (fun == &fEfi_32) return 1; + if (fun == &fFfi_32) return 1; + if (fun == &fEff_32) return 1; + if (fun == &fFff_32) return 1; + if (fun == &fEfD_32) return 1; + if (fun == &fEfp_32) return 1; + if (fun == &dEid_32) return 1; + if (fun == &dEdi_32) return 1; + if (fun == &dFdi_32) return 1; + if (fun == &dEdd_32) return 1; + if (fun == &dFdd_32) return 1; + if (fun == &dEdD_32) return 1; + if (fun == &dEdp_32) return 1; + if (fun == &dEll_32) return 1; + if (fun == &dFpp_32) return 1; + if (fun == &fEpBp__32) return 1; + if (fun == &dEpBp__32) return 1; + if (fun == &fFuii_32) return 1; + if (fun == &fEfff_32) return 1; + if (fun == &fEffp_32) return 1; + if (fun == &dEddd_32) return 1; + if (fun == &dEddp_32) return 1; + if (fun == &fEpBp_p_32) return 1; + if (fun == &fEpBp_a_32) return 1; + if (fun == &dEpBp_i_32) return 1; + if (fun == &dEpBp_a_32) return 1; +#if defined(HAVE_LD80BITS) + if (fun == &DED_32) return 1; + if (fun == &DEDD_32) return 1; + if (fun == &DEDp_32) return 1; + if (fun == &DEpBp_a_32) return 1; +#endif +#if !defined(HAVE_LD80BITS) + if (fun == &KEK_32) return 1; + if (fun == &KEKK_32) return 1; + if (fun == &KEKp_32) return 1; + if (fun == &KEpBp_a_32) return 1; +#endif + return 0; +} diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h new file mode 100644 index 0000000000000000000000000000000000000000..d0b0c2dff98856f1822633ac8c3f702adf33f74c --- /dev/null +++ b/src/wrapped32/generated/wrapper32.h @@ -0,0 +1,1672 @@ +/********************************************************************* + * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) * + *********************************************************************/ +#ifndef __WRAPPER32_H_ +#define __WRAPPER32_H_ +#include +#include + +typedef struct x64emu_s x64emu_t; + +// the generic wrapper pointer functions +typedef void (*wrapper_t)(x64emu_t* emu, uintptr_t fnc); + +// list of defined wrappers +// E = current x64emu struct +// v = void +// C = unsigned byte c = char +// W = unsigned short w = short +// u = uint32, i = int32 +// U = uint64, I = int64 +// L = unsigned long, l = signed long (long is an int with the size of a pointer) +// p = pointer +// h = hash (32<->64bits) +// H = hash (32<->64bits) that will be deleted from hashmaps +// a = locale +// A = locale that will be deleted from hashmaps +// f = float, d = double, D = long double, K = fake long double +// V = vaargs, s = address on the stack (doesn't move forward the pointer) +// O = libc O_ flags bitfield +// o = stdout +// S = _IO_2_1_stdXXX_ pointer (or FILE*) +// 2 = struct of 2 uint +// N = ... automatically sending 1 arg +// M = ... automatically sending 2 args +// P = Vulkan struct pointer +// r..._ = pointer to read-only structure +// B..._ = pointer to write-only structure +// b..._ = pointer to read-write structure +// t = char* as a return value (copies to a lower address if the return address is too high) +// X = Display* + +void vEv_32(x64emu_t *emu, uintptr_t fnc); +void vFv_32(x64emu_t *emu, uintptr_t fnc); +void vFc_32(x64emu_t *emu, uintptr_t fnc); +void vFw_32(x64emu_t *emu, uintptr_t fnc); +void vEi_32(x64emu_t *emu, uintptr_t fnc); +void vFi_32(x64emu_t *emu, uintptr_t fnc); +void vFC_32(x64emu_t *emu, uintptr_t fnc); +void vFW_32(x64emu_t *emu, uintptr_t fnc); +void vEu_32(x64emu_t *emu, uintptr_t fnc); +void vFu_32(x64emu_t *emu, uintptr_t fnc); +void vFU_32(x64emu_t *emu, uintptr_t fnc); +void vFf_32(x64emu_t *emu, uintptr_t fnc); +void vFd_32(x64emu_t *emu, uintptr_t fnc); +void vEl_32(x64emu_t *emu, uintptr_t fnc); +void vFl_32(x64emu_t *emu, uintptr_t fnc); +void vEp_32(x64emu_t *emu, uintptr_t fnc); +void vFp_32(x64emu_t *emu, uintptr_t fnc); +void vEA_32(x64emu_t *emu, uintptr_t fnc); +void vES_32(x64emu_t *emu, uintptr_t fnc); +void vFS_32(x64emu_t *emu, uintptr_t fnc); +void vFX_32(x64emu_t *emu, uintptr_t fnc); +void cFc_32(x64emu_t *emu, uintptr_t fnc); +void cFi_32(x64emu_t *emu, uintptr_t fnc); +void cFu_32(x64emu_t *emu, uintptr_t fnc); +void cFp_32(x64emu_t *emu, uintptr_t fnc); +void wFp_32(x64emu_t *emu, uintptr_t fnc); +void iEv_32(x64emu_t *emu, uintptr_t fnc); +void iFv_32(x64emu_t *emu, uintptr_t fnc); +void iEi_32(x64emu_t *emu, uintptr_t fnc); +void iFi_32(x64emu_t *emu, uintptr_t fnc); +void iEI_32(x64emu_t *emu, uintptr_t fnc); +void iEu_32(x64emu_t *emu, uintptr_t fnc); +void iFu_32(x64emu_t *emu, uintptr_t fnc); +void iEf_32(x64emu_t *emu, uintptr_t fnc); +void iEd_32(x64emu_t *emu, uintptr_t fnc); +void iEl_32(x64emu_t *emu, uintptr_t fnc); +void iEL_32(x64emu_t *emu, uintptr_t fnc); +void iEp_32(x64emu_t *emu, uintptr_t fnc); +void iFp_32(x64emu_t *emu, uintptr_t fnc); +void iEh_32(x64emu_t *emu, uintptr_t fnc); +void iES_32(x64emu_t *emu, uintptr_t fnc); +void iFX_32(x64emu_t *emu, uintptr_t fnc); +void IEf_32(x64emu_t *emu, uintptr_t fnc); +void IEd_32(x64emu_t *emu, uintptr_t fnc); +void IEp_32(x64emu_t *emu, uintptr_t fnc); +void IFp_32(x64emu_t *emu, uintptr_t fnc); +void IES_32(x64emu_t *emu, uintptr_t fnc); +void CFv_32(x64emu_t *emu, uintptr_t fnc); +void CFi_32(x64emu_t *emu, uintptr_t fnc); +void CFu_32(x64emu_t *emu, uintptr_t fnc); +void CFU_32(x64emu_t *emu, uintptr_t fnc); +void CFl_32(x64emu_t *emu, uintptr_t fnc); +void CFp_32(x64emu_t *emu, uintptr_t fnc); +void WFi_32(x64emu_t *emu, uintptr_t fnc); +void WEW_32(x64emu_t *emu, uintptr_t fnc); +void WFu_32(x64emu_t *emu, uintptr_t fnc); +void WFp_32(x64emu_t *emu, uintptr_t fnc); +void uEv_32(x64emu_t *emu, uintptr_t fnc); +void uFv_32(x64emu_t *emu, uintptr_t fnc); +void uEi_32(x64emu_t *emu, uintptr_t fnc); +void uFi_32(x64emu_t *emu, uintptr_t fnc); +void uEu_32(x64emu_t *emu, uintptr_t fnc); +void uFu_32(x64emu_t *emu, uintptr_t fnc); +void uEU_32(x64emu_t *emu, uintptr_t fnc); +void uEp_32(x64emu_t *emu, uintptr_t fnc); +void uFp_32(x64emu_t *emu, uintptr_t fnc); +void uES_32(x64emu_t *emu, uintptr_t fnc); +void uFX_32(x64emu_t *emu, uintptr_t fnc); +void UFv_32(x64emu_t *emu, uintptr_t fnc); +void UFi_32(x64emu_t *emu, uintptr_t fnc); +void UFu_32(x64emu_t *emu, uintptr_t fnc); +void UEp_32(x64emu_t *emu, uintptr_t fnc); +void UFp_32(x64emu_t *emu, uintptr_t fnc); +void UEs_32(x64emu_t *emu, uintptr_t fnc); +void fFi_32(x64emu_t *emu, uintptr_t fnc); +void fEf_32(x64emu_t *emu, uintptr_t fnc); +void fFf_32(x64emu_t *emu, uintptr_t fnc); +void dEv_32(x64emu_t *emu, uintptr_t fnc); +void dFi_32(x64emu_t *emu, uintptr_t fnc); +void dEd_32(x64emu_t *emu, uintptr_t fnc); +void dFd_32(x64emu_t *emu, uintptr_t fnc); +void dEp_32(x64emu_t *emu, uintptr_t fnc); +void dFp_32(x64emu_t *emu, uintptr_t fnc); +void lEv_32(x64emu_t *emu, uintptr_t fnc); +void lFu_32(x64emu_t *emu, uintptr_t fnc); +void lEl_32(x64emu_t *emu, uintptr_t fnc); +void lFl_32(x64emu_t *emu, uintptr_t fnc); +void lEp_32(x64emu_t *emu, uintptr_t fnc); +void lFp_32(x64emu_t *emu, uintptr_t fnc); +void lES_32(x64emu_t *emu, uintptr_t fnc); +void lFX_32(x64emu_t *emu, uintptr_t fnc); +void LEv_32(x64emu_t *emu, uintptr_t fnc); +void LFv_32(x64emu_t *emu, uintptr_t fnc); +void LEL_32(x64emu_t *emu, uintptr_t fnc); +void LEp_32(x64emu_t *emu, uintptr_t fnc); +void LFp_32(x64emu_t *emu, uintptr_t fnc); +void LFX_32(x64emu_t *emu, uintptr_t fnc); +void pEv_32(x64emu_t *emu, uintptr_t fnc); +void pFv_32(x64emu_t *emu, uintptr_t fnc); +void pEi_32(x64emu_t *emu, uintptr_t fnc); +void pFi_32(x64emu_t *emu, uintptr_t fnc); +void pEu_32(x64emu_t *emu, uintptr_t fnc); +void pFu_32(x64emu_t *emu, uintptr_t fnc); +void pEl_32(x64emu_t *emu, uintptr_t fnc); +void pFl_32(x64emu_t *emu, uintptr_t fnc); +void pEL_32(x64emu_t *emu, uintptr_t fnc); +void pFL_32(x64emu_t *emu, uintptr_t fnc); +void pEp_32(x64emu_t *emu, uintptr_t fnc); +void pFp_32(x64emu_t *emu, uintptr_t fnc); +void pFX_32(x64emu_t *emu, uintptr_t fnc); +void hEv_32(x64emu_t *emu, uintptr_t fnc); +void hFv_32(x64emu_t *emu, uintptr_t fnc); +void aEa_32(x64emu_t *emu, uintptr_t fnc); +void tEi_32(x64emu_t *emu, uintptr_t fnc); +void tEu_32(x64emu_t *emu, uintptr_t fnc); +void tEp_32(x64emu_t *emu, uintptr_t fnc); +void tFp_32(x64emu_t *emu, uintptr_t fnc); +void XFv_32(x64emu_t *emu, uintptr_t fnc); +void XFp_32(x64emu_t *emu, uintptr_t fnc); +void vFbp__32(x64emu_t *emu, uintptr_t fnc); +void iFbp__32(x64emu_t *emu, uintptr_t fnc); +void iFBp__32(x64emu_t *emu, uintptr_t fnc); +void LErl__32(x64emu_t *emu, uintptr_t fnc); +void pErl__32(x64emu_t *emu, uintptr_t fnc); +void lFrll__32(x64emu_t *emu, uintptr_t fnc); +void iEBllll__32(x64emu_t *emu, uintptr_t fnc); +void vFbuuipWCCp__32(x64emu_t *emu, uintptr_t fnc); +void vFbWWpWpWpWp__32(x64emu_t *emu, uintptr_t fnc); +void LEbiiiiiiiiilt__32(x64emu_t *emu, uintptr_t fnc); +void LEriiiiiiiiilt__32(x64emu_t *emu, uintptr_t fnc); +void pEriiiiiiiiilt__32(x64emu_t *emu, uintptr_t fnc); +void vEEv_32(x64emu_t *emu, uintptr_t fnc); +void vFEv_32(x64emu_t *emu, uintptr_t fnc); +void vEEp_32(x64emu_t *emu, uintptr_t fnc); +void vFEp_32(x64emu_t *emu, uintptr_t fnc); +void vFEX_32(x64emu_t *emu, uintptr_t fnc); +void vFcc_32(x64emu_t *emu, uintptr_t fnc); +void vFww_32(x64emu_t *emu, uintptr_t fnc); +void vFii_32(x64emu_t *emu, uintptr_t fnc); +void vFiI_32(x64emu_t *emu, uintptr_t fnc); +void vFiW_32(x64emu_t *emu, uintptr_t fnc); +void vFiu_32(x64emu_t *emu, uintptr_t fnc); +void vFiU_32(x64emu_t *emu, uintptr_t fnc); +void vFif_32(x64emu_t *emu, uintptr_t fnc); +void vFid_32(x64emu_t *emu, uintptr_t fnc); +void vFip_32(x64emu_t *emu, uintptr_t fnc); +void vFWW_32(x64emu_t *emu, uintptr_t fnc); +void vFuc_32(x64emu_t *emu, uintptr_t fnc); +void vFuw_32(x64emu_t *emu, uintptr_t fnc); +void vFui_32(x64emu_t *emu, uintptr_t fnc); +void vFuI_32(x64emu_t *emu, uintptr_t fnc); +void vFuC_32(x64emu_t *emu, uintptr_t fnc); +void vFuW_32(x64emu_t *emu, uintptr_t fnc); +void vFuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuU_32(x64emu_t *emu, uintptr_t fnc); +void vFuf_32(x64emu_t *emu, uintptr_t fnc); +void vFud_32(x64emu_t *emu, uintptr_t fnc); +void vFul_32(x64emu_t *emu, uintptr_t fnc); +void vFup_32(x64emu_t *emu, uintptr_t fnc); +void vFUu_32(x64emu_t *emu, uintptr_t fnc); +void vFfC_32(x64emu_t *emu, uintptr_t fnc); +void vFff_32(x64emu_t *emu, uintptr_t fnc); +void vFdd_32(x64emu_t *emu, uintptr_t fnc); +void vFlu_32(x64emu_t *emu, uintptr_t fnc); +void vFlp_32(x64emu_t *emu, uintptr_t fnc); +void vEpi_32(x64emu_t *emu, uintptr_t fnc); +void vFpi_32(x64emu_t *emu, uintptr_t fnc); +void vFpC_32(x64emu_t *emu, uintptr_t fnc); +void vFpu_32(x64emu_t *emu, uintptr_t fnc); +void vFpl_32(x64emu_t *emu, uintptr_t fnc); +void vEpL_32(x64emu_t *emu, uintptr_t fnc); +void vFpL_32(x64emu_t *emu, uintptr_t fnc); +void vEpp_32(x64emu_t *emu, uintptr_t fnc); +void vFpp_32(x64emu_t *emu, uintptr_t fnc); +void vESp_32(x64emu_t *emu, uintptr_t fnc); +void vFXi_32(x64emu_t *emu, uintptr_t fnc); +void vFXL_32(x64emu_t *emu, uintptr_t fnc); +void vFXp_32(x64emu_t *emu, uintptr_t fnc); +void cFpp_32(x64emu_t *emu, uintptr_t fnc); +void wFpi_32(x64emu_t *emu, uintptr_t fnc); +void iEEv_32(x64emu_t *emu, uintptr_t fnc); +void iEEi_32(x64emu_t *emu, uintptr_t fnc); +void iEEL_32(x64emu_t *emu, uintptr_t fnc); +void iEEp_32(x64emu_t *emu, uintptr_t fnc); +void iFEp_32(x64emu_t *emu, uintptr_t fnc); +void iEEh_32(x64emu_t *emu, uintptr_t fnc); +void iEEO_32(x64emu_t *emu, uintptr_t fnc); +void iFEX_32(x64emu_t *emu, uintptr_t fnc); +void iEii_32(x64emu_t *emu, uintptr_t fnc); +void iFii_32(x64emu_t *emu, uintptr_t fnc); +void iEiI_32(x64emu_t *emu, uintptr_t fnc); +void iEiu_32(x64emu_t *emu, uintptr_t fnc); +void iFiu_32(x64emu_t *emu, uintptr_t fnc); +void iEil_32(x64emu_t *emu, uintptr_t fnc); +void iEip_32(x64emu_t *emu, uintptr_t fnc); +void iFip_32(x64emu_t *emu, uintptr_t fnc); +void iEiS_32(x64emu_t *emu, uintptr_t fnc); +void iEui_32(x64emu_t *emu, uintptr_t fnc); +void iFui_32(x64emu_t *emu, uintptr_t fnc); +void iEuu_32(x64emu_t *emu, uintptr_t fnc); +void iEuL_32(x64emu_t *emu, uintptr_t fnc); +void iEup_32(x64emu_t *emu, uintptr_t fnc); +void iFup_32(x64emu_t *emu, uintptr_t fnc); +void iEua_32(x64emu_t *emu, uintptr_t fnc); +void iFpw_32(x64emu_t *emu, uintptr_t fnc); +void iEpi_32(x64emu_t *emu, uintptr_t fnc); +void iFpi_32(x64emu_t *emu, uintptr_t fnc); +void iFpI_32(x64emu_t *emu, uintptr_t fnc); +void iEpu_32(x64emu_t *emu, uintptr_t fnc); +void iFpu_32(x64emu_t *emu, uintptr_t fnc); +void iFpU_32(x64emu_t *emu, uintptr_t fnc); +void iFpf_32(x64emu_t *emu, uintptr_t fnc); +void iFpd_32(x64emu_t *emu, uintptr_t fnc); +void iFpl_32(x64emu_t *emu, uintptr_t fnc); +void iEpL_32(x64emu_t *emu, uintptr_t fnc); +void iFpL_32(x64emu_t *emu, uintptr_t fnc); +void iEpp_32(x64emu_t *emu, uintptr_t fnc); +void iFpp_32(x64emu_t *emu, uintptr_t fnc); +void iEpV_32(x64emu_t *emu, uintptr_t fnc); +void iEpO_32(x64emu_t *emu, uintptr_t fnc); +void iEpS_32(x64emu_t *emu, uintptr_t fnc); +void iEhi_32(x64emu_t *emu, uintptr_t fnc); +void iEhp_32(x64emu_t *emu, uintptr_t fnc); +void iEhh_32(x64emu_t *emu, uintptr_t fnc); +void iESi_32(x64emu_t *emu, uintptr_t fnc); +void iESU_32(x64emu_t *emu, uintptr_t fnc); +void iESp_32(x64emu_t *emu, uintptr_t fnc); +void iFXi_32(x64emu_t *emu, uintptr_t fnc); +void iFXW_32(x64emu_t *emu, uintptr_t fnc); +void iFXL_32(x64emu_t *emu, uintptr_t fnc); +void iFXp_32(x64emu_t *emu, uintptr_t fnc); +void IFEp_32(x64emu_t *emu, uintptr_t fnc); +void IEII_32(x64emu_t *emu, uintptr_t fnc); +void IFpu_32(x64emu_t *emu, uintptr_t fnc); +void CFip_32(x64emu_t *emu, uintptr_t fnc); +void CFCi_32(x64emu_t *emu, uintptr_t fnc); +void CFui_32(x64emu_t *emu, uintptr_t fnc); +void CFuu_32(x64emu_t *emu, uintptr_t fnc); +void CFuU_32(x64emu_t *emu, uintptr_t fnc); +void CFpi_32(x64emu_t *emu, uintptr_t fnc); +void CFpu_32(x64emu_t *emu, uintptr_t fnc); +void CFpp_32(x64emu_t *emu, uintptr_t fnc); +void CFXL_32(x64emu_t *emu, uintptr_t fnc); +void WFpp_32(x64emu_t *emu, uintptr_t fnc); +void uFEp_32(x64emu_t *emu, uintptr_t fnc); +void uFii_32(x64emu_t *emu, uintptr_t fnc); +void uEiS_32(x64emu_t *emu, uintptr_t fnc); +void uFuu_32(x64emu_t *emu, uintptr_t fnc); +void uFup_32(x64emu_t *emu, uintptr_t fnc); +void uEua_32(x64emu_t *emu, uintptr_t fnc); +void uEuS_32(x64emu_t *emu, uintptr_t fnc); +void uFpi_32(x64emu_t *emu, uintptr_t fnc); +void uFpu_32(x64emu_t *emu, uintptr_t fnc); +void uFpp_32(x64emu_t *emu, uintptr_t fnc); +void uFXL_32(x64emu_t *emu, uintptr_t fnc); +void UEuu_32(x64emu_t *emu, uintptr_t fnc); +void UFuu_32(x64emu_t *emu, uintptr_t fnc); +void UEUU_32(x64emu_t *emu, uintptr_t fnc); +void UEss_32(x64emu_t *emu, uintptr_t fnc); +void fEif_32(x64emu_t *emu, uintptr_t fnc); +void fEfi_32(x64emu_t *emu, uintptr_t fnc); +void fFfi_32(x64emu_t *emu, uintptr_t fnc); +void fEff_32(x64emu_t *emu, uintptr_t fnc); +void fFff_32(x64emu_t *emu, uintptr_t fnc); +void fEfD_32(x64emu_t *emu, uintptr_t fnc); +void fEfp_32(x64emu_t *emu, uintptr_t fnc); +void dEid_32(x64emu_t *emu, uintptr_t fnc); +void dEdi_32(x64emu_t *emu, uintptr_t fnc); +void dFdi_32(x64emu_t *emu, uintptr_t fnc); +void dEdd_32(x64emu_t *emu, uintptr_t fnc); +void dFdd_32(x64emu_t *emu, uintptr_t fnc); +void dEdD_32(x64emu_t *emu, uintptr_t fnc); +void dEdp_32(x64emu_t *emu, uintptr_t fnc); +void dEll_32(x64emu_t *emu, uintptr_t fnc); +void dFpp_32(x64emu_t *emu, uintptr_t fnc); +void lEEi_32(x64emu_t *emu, uintptr_t fnc); +void lEEV_32(x64emu_t *emu, uintptr_t fnc); +void lEES_32(x64emu_t *emu, uintptr_t fnc); +void lEii_32(x64emu_t *emu, uintptr_t fnc); +void lFiL_32(x64emu_t *emu, uintptr_t fnc); +void lFui_32(x64emu_t *emu, uintptr_t fnc); +void lFll_32(x64emu_t *emu, uintptr_t fnc); +void lEpi_32(x64emu_t *emu, uintptr_t fnc); +void lFpu_32(x64emu_t *emu, uintptr_t fnc); +void lFpl_32(x64emu_t *emu, uintptr_t fnc); +void lFpL_32(x64emu_t *emu, uintptr_t fnc); +void LEEL_32(x64emu_t *emu, uintptr_t fnc); +void LFEp_32(x64emu_t *emu, uintptr_t fnc); +void LFLi_32(x64emu_t *emu, uintptr_t fnc); +void LEpL_32(x64emu_t *emu, uintptr_t fnc); +void LEpp_32(x64emu_t *emu, uintptr_t fnc); +void LFXi_32(x64emu_t *emu, uintptr_t fnc); +void LFXu_32(x64emu_t *emu, uintptr_t fnc); +void LFXL_32(x64emu_t *emu, uintptr_t fnc); +void LFXp_32(x64emu_t *emu, uintptr_t fnc); +void pFEv_32(x64emu_t *emu, uintptr_t fnc); +void pEEv_32(x64emu_t *emu, uintptr_t fnc); +void pEEu_32(x64emu_t *emu, uintptr_t fnc); +void pFEp_32(x64emu_t *emu, uintptr_t fnc); +void pEEp_32(x64emu_t *emu, uintptr_t fnc); +void pEES_32(x64emu_t *emu, uintptr_t fnc); +void pFEX_32(x64emu_t *emu, uintptr_t fnc); +void pFii_32(x64emu_t *emu, uintptr_t fnc); +void pFiu_32(x64emu_t *emu, uintptr_t fnc); +void pFip_32(x64emu_t *emu, uintptr_t fnc); +void pFuu_32(x64emu_t *emu, uintptr_t fnc); +void pFup_32(x64emu_t *emu, uintptr_t fnc); +void pELL_32(x64emu_t *emu, uintptr_t fnc); +void pFLL_32(x64emu_t *emu, uintptr_t fnc); +void pEpi_32(x64emu_t *emu, uintptr_t fnc); +void pFpi_32(x64emu_t *emu, uintptr_t fnc); +void pFpu_32(x64emu_t *emu, uintptr_t fnc); +void pEpL_32(x64emu_t *emu, uintptr_t fnc); +void pFpL_32(x64emu_t *emu, uintptr_t fnc); +void pEpp_32(x64emu_t *emu, uintptr_t fnc); +void pFpp_32(x64emu_t *emu, uintptr_t fnc); +void pFXi_32(x64emu_t *emu, uintptr_t fnc); +void pFXu_32(x64emu_t *emu, uintptr_t fnc); +void pFXL_32(x64emu_t *emu, uintptr_t fnc); +void pFXp_32(x64emu_t *emu, uintptr_t fnc); +void hFEp_32(x64emu_t *emu, uintptr_t fnc); +void hEpa_32(x64emu_t *emu, uintptr_t fnc); +void SEip_32(x64emu_t *emu, uintptr_t fnc); +void SEpp_32(x64emu_t *emu, uintptr_t fnc); +void tEip_32(x64emu_t *emu, uintptr_t fnc); +void tEia_32(x64emu_t *emu, uintptr_t fnc); +void tEpL_32(x64emu_t *emu, uintptr_t fnc); +void tEpp_32(x64emu_t *emu, uintptr_t fnc); +void vFuBp__32(x64emu_t *emu, uintptr_t fnc); +void vFpbp__32(x64emu_t *emu, uintptr_t fnc); +void vFbp_p_32(x64emu_t *emu, uintptr_t fnc); +void iEEbp__32(x64emu_t *emu, uintptr_t fnc); +void iFibp__32(x64emu_t *emu, uintptr_t fnc); +void iFLbp__32(x64emu_t *emu, uintptr_t fnc); +void iFpbp__32(x64emu_t *emu, uintptr_t fnc); +void iFpbl__32(x64emu_t *emu, uintptr_t fnc); +void iFpBL__32(x64emu_t *emu, uintptr_t fnc); +void iFpbL__32(x64emu_t *emu, uintptr_t fnc); +void iEHBp__32(x64emu_t *emu, uintptr_t fnc); +void iFbp_i_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_p_32(x64emu_t *emu, uintptr_t fnc); +void iFXbL__32(x64emu_t *emu, uintptr_t fnc); +void fEpBp__32(x64emu_t *emu, uintptr_t fnc); +void dEpBp__32(x64emu_t *emu, uintptr_t fnc); +void LFpbp__32(x64emu_t *emu, uintptr_t fnc); +void LFpbL__32(x64emu_t *emu, uintptr_t fnc); +void pErl_p_32(x64emu_t *emu, uintptr_t fnc); +void vFBll_l_32(x64emu_t *emu, uintptr_t fnc); +void iEuBLL__32(x64emu_t *emu, uintptr_t fnc); +void iEprll__32(x64emu_t *emu, uintptr_t fnc); +void iEpbup__32(x64emu_t *emu, uintptr_t fnc); +void iEprLL__32(x64emu_t *emu, uintptr_t fnc); +void iFbpi_i_32(x64emu_t *emu, uintptr_t fnc); +void iEBll_p_32(x64emu_t *emu, uintptr_t fnc); +void iFXbip__32(x64emu_t *emu, uintptr_t fnc); +void iESBliu__32(x64emu_t *emu, uintptr_t fnc); +void iFbppi_i_32(x64emu_t *emu, uintptr_t fnc); +void iFXbiip__32(x64emu_t *emu, uintptr_t fnc); +void iErLL_BLL__32(x64emu_t *emu, uintptr_t fnc); +void LFXrLiiuL__32(x64emu_t *emu, uintptr_t fnc); +void vFbll_rllll__32(x64emu_t *emu, uintptr_t fnc); +void iFXbiiuuLip__32(x64emu_t *emu, uintptr_t fnc); +void iFpruuipWCCp__32(x64emu_t *emu, uintptr_t fnc); +void pEriiiiiiiiilt_p_32(x64emu_t *emu, uintptr_t fnc); +void iEiBLLLLLLLLLLLLLLLLLL__32(x64emu_t *emu, uintptr_t fnc); +void vEEip_32(x64emu_t *emu, uintptr_t fnc); +void vFEip_32(x64emu_t *emu, uintptr_t fnc); +void vEEpi_32(x64emu_t *emu, uintptr_t fnc); +void vEEpu_32(x64emu_t *emu, uintptr_t fnc); +void vFEpp_32(x64emu_t *emu, uintptr_t fnc); +void vFEpV_32(x64emu_t *emu, uintptr_t fnc); +void vFEXp_32(x64emu_t *emu, uintptr_t fnc); +void vFccc_32(x64emu_t *emu, uintptr_t fnc); +void vFwww_32(x64emu_t *emu, uintptr_t fnc); +void vFiii_32(x64emu_t *emu, uintptr_t fnc); +void vFiif_32(x64emu_t *emu, uintptr_t fnc); +void vFiip_32(x64emu_t *emu, uintptr_t fnc); +void vFiII_32(x64emu_t *emu, uintptr_t fnc); +void vFiui_32(x64emu_t *emu, uintptr_t fnc); +void vFiuu_32(x64emu_t *emu, uintptr_t fnc); +void vFiup_32(x64emu_t *emu, uintptr_t fnc); +void vFiUU_32(x64emu_t *emu, uintptr_t fnc); +void vFiff_32(x64emu_t *emu, uintptr_t fnc); +void vFidd_32(x64emu_t *emu, uintptr_t fnc); +void vFilu_32(x64emu_t *emu, uintptr_t fnc); +void vFill_32(x64emu_t *emu, uintptr_t fnc); +void vFilp_32(x64emu_t *emu, uintptr_t fnc); +void vFipu_32(x64emu_t *emu, uintptr_t fnc); +void vFipp_32(x64emu_t *emu, uintptr_t fnc); +void vFCCC_32(x64emu_t *emu, uintptr_t fnc); +void vFWWW_32(x64emu_t *emu, uintptr_t fnc); +void vFucc_32(x64emu_t *emu, uintptr_t fnc); +void vFuww_32(x64emu_t *emu, uintptr_t fnc); +void vFuii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiI_32(x64emu_t *emu, uintptr_t fnc); +void vFuiu_32(x64emu_t *emu, uintptr_t fnc); +void vFuiU_32(x64emu_t *emu, uintptr_t fnc); +void vFuif_32(x64emu_t *emu, uintptr_t fnc); +void vFuid_32(x64emu_t *emu, uintptr_t fnc); +void vFuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuII_32(x64emu_t *emu, uintptr_t fnc); +void vFuWW_32(x64emu_t *emu, uintptr_t fnc); +void vFuui_32(x64emu_t *emu, uintptr_t fnc); +void vFuuC_32(x64emu_t *emu, uintptr_t fnc); +void vFuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuU_32(x64emu_t *emu, uintptr_t fnc); +void vFuuf_32(x64emu_t *emu, uintptr_t fnc); +void vFuud_32(x64emu_t *emu, uintptr_t fnc); +void vFuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuUU_32(x64emu_t *emu, uintptr_t fnc); +void vFuff_32(x64emu_t *emu, uintptr_t fnc); +void vFudd_32(x64emu_t *emu, uintptr_t fnc); +void vFull_32(x64emu_t *emu, uintptr_t fnc); +void vFulp_32(x64emu_t *emu, uintptr_t fnc); +void vFupp_32(x64emu_t *emu, uintptr_t fnc); +void vFfff_32(x64emu_t *emu, uintptr_t fnc); +void vEfpp_32(x64emu_t *emu, uintptr_t fnc); +void vFddd_32(x64emu_t *emu, uintptr_t fnc); +void vEdpp_32(x64emu_t *emu, uintptr_t fnc); +void vFlii_32(x64emu_t *emu, uintptr_t fnc); +void vFlip_32(x64emu_t *emu, uintptr_t fnc); +void vFllp_32(x64emu_t *emu, uintptr_t fnc); +void vFlpp_32(x64emu_t *emu, uintptr_t fnc); +void vEpii_32(x64emu_t *emu, uintptr_t fnc); +void vFpii_32(x64emu_t *emu, uintptr_t fnc); +void vFpip_32(x64emu_t *emu, uintptr_t fnc); +void vFpui_32(x64emu_t *emu, uintptr_t fnc); +void vFpuI_32(x64emu_t *emu, uintptr_t fnc); +void vFpuC_32(x64emu_t *emu, uintptr_t fnc); +void vFpuu_32(x64emu_t *emu, uintptr_t fnc); +void vFpuU_32(x64emu_t *emu, uintptr_t fnc); +void vFpuf_32(x64emu_t *emu, uintptr_t fnc); +void vFpud_32(x64emu_t *emu, uintptr_t fnc); +void vFpul_32(x64emu_t *emu, uintptr_t fnc); +void vFpup_32(x64emu_t *emu, uintptr_t fnc); +void vFpdd_32(x64emu_t *emu, uintptr_t fnc); +void vFplp_32(x64emu_t *emu, uintptr_t fnc); +void vFppi_32(x64emu_t *emu, uintptr_t fnc); +void vEppu_32(x64emu_t *emu, uintptr_t fnc); +void vFppL_32(x64emu_t *emu, uintptr_t fnc); +void vFppp_32(x64emu_t *emu, uintptr_t fnc); +void vFXiL_32(x64emu_t *emu, uintptr_t fnc); +void vFXLi_32(x64emu_t *emu, uintptr_t fnc); +void vFXLL_32(x64emu_t *emu, uintptr_t fnc); +void vFXLp_32(x64emu_t *emu, uintptr_t fnc); +void vFXpi_32(x64emu_t *emu, uintptr_t fnc); +void vFXpl_32(x64emu_t *emu, uintptr_t fnc); +void vFXpL_32(x64emu_t *emu, uintptr_t fnc); +void vFXpp_32(x64emu_t *emu, uintptr_t fnc); +void iEEip_32(x64emu_t *emu, uintptr_t fnc); +void iFEip_32(x64emu_t *emu, uintptr_t fnc); +void iEEup_32(x64emu_t *emu, uintptr_t fnc); +void iFEup_32(x64emu_t *emu, uintptr_t fnc); +void iEEpi_32(x64emu_t *emu, uintptr_t fnc); +void iFEpi_32(x64emu_t *emu, uintptr_t fnc); +void iFEpu_32(x64emu_t *emu, uintptr_t fnc); +void iFEpl_32(x64emu_t *emu, uintptr_t fnc); +void iEEpL_32(x64emu_t *emu, uintptr_t fnc); +void iFEpL_32(x64emu_t *emu, uintptr_t fnc); +void iEEpp_32(x64emu_t *emu, uintptr_t fnc); +void iFEpp_32(x64emu_t *emu, uintptr_t fnc); +void iEEpV_32(x64emu_t *emu, uintptr_t fnc); +void iFEpX_32(x64emu_t *emu, uintptr_t fnc); +void iEEhi_32(x64emu_t *emu, uintptr_t fnc); +void iEEhp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXp_32(x64emu_t *emu, uintptr_t fnc); +void iEiii_32(x64emu_t *emu, uintptr_t fnc); +void iEiiI_32(x64emu_t *emu, uintptr_t fnc); +void iEiil_32(x64emu_t *emu, uintptr_t fnc); +void iEiip_32(x64emu_t *emu, uintptr_t fnc); +void iFiip_32(x64emu_t *emu, uintptr_t fnc); +void iEiiO_32(x64emu_t *emu, uintptr_t fnc); +void iEiII_32(x64emu_t *emu, uintptr_t fnc); +void iEiuu_32(x64emu_t *emu, uintptr_t fnc); +void iEiup_32(x64emu_t *emu, uintptr_t fnc); +void iEill_32(x64emu_t *emu, uintptr_t fnc); +void iEiLi_32(x64emu_t *emu, uintptr_t fnc); +void iFipi_32(x64emu_t *emu, uintptr_t fnc); +void iEipi_32(x64emu_t *emu, uintptr_t fnc); +void iEipu_32(x64emu_t *emu, uintptr_t fnc); +void iFipu_32(x64emu_t *emu, uintptr_t fnc); +void iEipL_32(x64emu_t *emu, uintptr_t fnc); +void iEipp_32(x64emu_t *emu, uintptr_t fnc); +void iFipp_32(x64emu_t *emu, uintptr_t fnc); +void iFuip_32(x64emu_t *emu, uintptr_t fnc); +void iEuui_32(x64emu_t *emu, uintptr_t fnc); +void iEuuu_32(x64emu_t *emu, uintptr_t fnc); +void iFuup_32(x64emu_t *emu, uintptr_t fnc); +void iEuLa_32(x64emu_t *emu, uintptr_t fnc); +void iFfff_32(x64emu_t *emu, uintptr_t fnc); +void iELLi_32(x64emu_t *emu, uintptr_t fnc); +void iFpii_32(x64emu_t *emu, uintptr_t fnc); +void iEpiu_32(x64emu_t *emu, uintptr_t fnc); +void iFpiu_32(x64emu_t *emu, uintptr_t fnc); +void iFpil_32(x64emu_t *emu, uintptr_t fnc); +void iEpip_32(x64emu_t *emu, uintptr_t fnc); +void iFpip_32(x64emu_t *emu, uintptr_t fnc); +void iFpuC_32(x64emu_t *emu, uintptr_t fnc); +void iEpuu_32(x64emu_t *emu, uintptr_t fnc); +void iFpuu_32(x64emu_t *emu, uintptr_t fnc); +void iFpuU_32(x64emu_t *emu, uintptr_t fnc); +void iFpup_32(x64emu_t *emu, uintptr_t fnc); +void iFpUU_32(x64emu_t *emu, uintptr_t fnc); +void iFpfu_32(x64emu_t *emu, uintptr_t fnc); +void iFpff_32(x64emu_t *emu, uintptr_t fnc); +void iFpli_32(x64emu_t *emu, uintptr_t fnc); +void iFpll_32(x64emu_t *emu, uintptr_t fnc); +void iEpLi_32(x64emu_t *emu, uintptr_t fnc); +void iEpLu_32(x64emu_t *emu, uintptr_t fnc); +void iEpLp_32(x64emu_t *emu, uintptr_t fnc); +void iFpLp_32(x64emu_t *emu, uintptr_t fnc); +void iEppi_32(x64emu_t *emu, uintptr_t fnc); +void iFppi_32(x64emu_t *emu, uintptr_t fnc); +void iEppu_32(x64emu_t *emu, uintptr_t fnc); +void iFppu_32(x64emu_t *emu, uintptr_t fnc); +void iFppd_32(x64emu_t *emu, uintptr_t fnc); +void iEppL_32(x64emu_t *emu, uintptr_t fnc); +void iFppL_32(x64emu_t *emu, uintptr_t fnc); +void iEppp_32(x64emu_t *emu, uintptr_t fnc); +void iFppp_32(x64emu_t *emu, uintptr_t fnc); +void iEppa_32(x64emu_t *emu, uintptr_t fnc); +void iEpOu_32(x64emu_t *emu, uintptr_t fnc); +void iEhip_32(x64emu_t *emu, uintptr_t fnc); +void iEhpL_32(x64emu_t *emu, uintptr_t fnc); +void iEhpp_32(x64emu_t *emu, uintptr_t fnc); +void iESIi_32(x64emu_t *emu, uintptr_t fnc); +void iESli_32(x64emu_t *emu, uintptr_t fnc); +void iFXii_32(x64emu_t *emu, uintptr_t fnc); +void iFXiL_32(x64emu_t *emu, uintptr_t fnc); +void iFXip_32(x64emu_t *emu, uintptr_t fnc); +void iFXuu_32(x64emu_t *emu, uintptr_t fnc); +void iFXup_32(x64emu_t *emu, uintptr_t fnc); +void iFXLi_32(x64emu_t *emu, uintptr_t fnc); +void iFXLu_32(x64emu_t *emu, uintptr_t fnc); +void iFXLf_32(x64emu_t *emu, uintptr_t fnc); +void iFXLl_32(x64emu_t *emu, uintptr_t fnc); +void iFXLL_32(x64emu_t *emu, uintptr_t fnc); +void iFXLp_32(x64emu_t *emu, uintptr_t fnc); +void iFXpi_32(x64emu_t *emu, uintptr_t fnc); +void iFXpu_32(x64emu_t *emu, uintptr_t fnc); +void iFXpl_32(x64emu_t *emu, uintptr_t fnc); +void iFXpL_32(x64emu_t *emu, uintptr_t fnc); +void iFXpp_32(x64emu_t *emu, uintptr_t fnc); +void IEiIi_32(x64emu_t *emu, uintptr_t fnc); +void IFpIi_32(x64emu_t *emu, uintptr_t fnc); +void CFipp_32(x64emu_t *emu, uintptr_t fnc); +void CFuUu_32(x64emu_t *emu, uintptr_t fnc); +void CFuff_32(x64emu_t *emu, uintptr_t fnc); +void WFXip_32(x64emu_t *emu, uintptr_t fnc); +void uFEpu_32(x64emu_t *emu, uintptr_t fnc); +void uFEpL_32(x64emu_t *emu, uintptr_t fnc); +void uFilp_32(x64emu_t *emu, uintptr_t fnc); +void uFipu_32(x64emu_t *emu, uintptr_t fnc); +void uFuuu_32(x64emu_t *emu, uintptr_t fnc); +void uFuup_32(x64emu_t *emu, uintptr_t fnc); +void uFupp_32(x64emu_t *emu, uintptr_t fnc); +void uFpii_32(x64emu_t *emu, uintptr_t fnc); +void uFpuU_32(x64emu_t *emu, uintptr_t fnc); +void uEpup_32(x64emu_t *emu, uintptr_t fnc); +void uFpup_32(x64emu_t *emu, uintptr_t fnc); +void uFppu_32(x64emu_t *emu, uintptr_t fnc); +void uFppp_32(x64emu_t *emu, uintptr_t fnc); +void uFXuu_32(x64emu_t *emu, uintptr_t fnc); +void fFuii_32(x64emu_t *emu, uintptr_t fnc); +void fEfff_32(x64emu_t *emu, uintptr_t fnc); +void fEffp_32(x64emu_t *emu, uintptr_t fnc); +void dEddd_32(x64emu_t *emu, uintptr_t fnc); +void dEddp_32(x64emu_t *emu, uintptr_t fnc); +void lEili_32(x64emu_t *emu, uintptr_t fnc); +void lEipL_32(x64emu_t *emu, uintptr_t fnc); +void lFlll_32(x64emu_t *emu, uintptr_t fnc); +void lElpi_32(x64emu_t *emu, uintptr_t fnc); +void lFpLL_32(x64emu_t *emu, uintptr_t fnc); +void lFppi_32(x64emu_t *emu, uintptr_t fnc); +void lFppL_32(x64emu_t *emu, uintptr_t fnc); +void LFEpi_32(x64emu_t *emu, uintptr_t fnc); +void LFEpp_32(x64emu_t *emu, uintptr_t fnc); +void LFpii_32(x64emu_t *emu, uintptr_t fnc); +void LEpip_32(x64emu_t *emu, uintptr_t fnc); +void LFppi_32(x64emu_t *emu, uintptr_t fnc); +void LEppL_32(x64emu_t *emu, uintptr_t fnc); +void LFppL_32(x64emu_t *emu, uintptr_t fnc); +void LFXip_32(x64emu_t *emu, uintptr_t fnc); +void LFXCi_32(x64emu_t *emu, uintptr_t fnc); +void LFXLi_32(x64emu_t *emu, uintptr_t fnc); +void LFXLC_32(x64emu_t *emu, uintptr_t fnc); +void LFXpi_32(x64emu_t *emu, uintptr_t fnc); +void LFXpp_32(x64emu_t *emu, uintptr_t fnc); +void pEEip_32(x64emu_t *emu, uintptr_t fnc); +void pFEiV_32(x64emu_t *emu, uintptr_t fnc); +void pEEpi_32(x64emu_t *emu, uintptr_t fnc); +void pFEpi_32(x64emu_t *emu, uintptr_t fnc); +void pEEpp_32(x64emu_t *emu, uintptr_t fnc); +void pFEpp_32(x64emu_t *emu, uintptr_t fnc); +void pFEpV_32(x64emu_t *emu, uintptr_t fnc); +void pFEpX_32(x64emu_t *emu, uintptr_t fnc); +void pFEXi_32(x64emu_t *emu, uintptr_t fnc); +void pFEXL_32(x64emu_t *emu, uintptr_t fnc); +void pFEXp_32(x64emu_t *emu, uintptr_t fnc); +void pEipi_32(x64emu_t *emu, uintptr_t fnc); +void pEipL_32(x64emu_t *emu, uintptr_t fnc); +void pFipp_32(x64emu_t *emu, uintptr_t fnc); +void pFulu_32(x64emu_t *emu, uintptr_t fnc); +void pFupi_32(x64emu_t *emu, uintptr_t fnc); +void pFupp_32(x64emu_t *emu, uintptr_t fnc); +void pFLpi_32(x64emu_t *emu, uintptr_t fnc); +void pFpcU_32(x64emu_t *emu, uintptr_t fnc); +void pEpii_32(x64emu_t *emu, uintptr_t fnc); +void pFpii_32(x64emu_t *emu, uintptr_t fnc); +void pFpiu_32(x64emu_t *emu, uintptr_t fnc); +void pEpiL_32(x64emu_t *emu, uintptr_t fnc); +void pFpiL_32(x64emu_t *emu, uintptr_t fnc); +void pFpip_32(x64emu_t *emu, uintptr_t fnc); +void pEpiS_32(x64emu_t *emu, uintptr_t fnc); +void pEpII_32(x64emu_t *emu, uintptr_t fnc); +void pFpuu_32(x64emu_t *emu, uintptr_t fnc); +void pFpup_32(x64emu_t *emu, uintptr_t fnc); +void pEpLL_32(x64emu_t *emu, uintptr_t fnc); +void pEppi_32(x64emu_t *emu, uintptr_t fnc); +void pFppu_32(x64emu_t *emu, uintptr_t fnc); +void pEppL_32(x64emu_t *emu, uintptr_t fnc); +void pFppL_32(x64emu_t *emu, uintptr_t fnc); +void pFppp_32(x64emu_t *emu, uintptr_t fnc); +void pEpOM_32(x64emu_t *emu, uintptr_t fnc); +void pFXii_32(x64emu_t *emu, uintptr_t fnc); +void pFXip_32(x64emu_t *emu, uintptr_t fnc); +void pFXLp_32(x64emu_t *emu, uintptr_t fnc); +void pFXpi_32(x64emu_t *emu, uintptr_t fnc); +void pFXpp_32(x64emu_t *emu, uintptr_t fnc); +void aEipa_32(x64emu_t *emu, uintptr_t fnc); +void SEEpp_32(x64emu_t *emu, uintptr_t fnc); +void SEppS_32(x64emu_t *emu, uintptr_t fnc); +void tEipu_32(x64emu_t *emu, uintptr_t fnc); +void vFibp_i_32(x64emu_t *emu, uintptr_t fnc); +void vFuibp__32(x64emu_t *emu, uintptr_t fnc); +void vFuuBp__32(x64emu_t *emu, uintptr_t fnc); +void vFuubp__32(x64emu_t *emu, uintptr_t fnc); +void vFpbp_i_32(x64emu_t *emu, uintptr_t fnc); +void vFbp_pp_32(x64emu_t *emu, uintptr_t fnc); +void vFXLbL__32(x64emu_t *emu, uintptr_t fnc); +void vFXbL_i_32(x64emu_t *emu, uintptr_t fnc); +void iFpibl__32(x64emu_t *emu, uintptr_t fnc); +void iFplbl__32(x64emu_t *emu, uintptr_t fnc); +void iEppBp__32(x64emu_t *emu, uintptr_t fnc); +void iFppbp__32(x64emu_t *emu, uintptr_t fnc); +void iFppbL__32(x64emu_t *emu, uintptr_t fnc); +void iFpbp_i_32(x64emu_t *emu, uintptr_t fnc); +void iFpbL_p_32(x64emu_t *emu, uintptr_t fnc); +void iEBp_LL_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_pi_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_pI_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_pu_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_pd_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_pl_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_pp_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_Si_32(x64emu_t *emu, uintptr_t fnc); +void iFXibL__32(x64emu_t *emu, uintptr_t fnc); +void iFXLbp__32(x64emu_t *emu, uintptr_t fnc); +void iFXLbL__32(x64emu_t *emu, uintptr_t fnc); +void iFXbL_i_32(x64emu_t *emu, uintptr_t fnc); +void iFXbp_i_32(x64emu_t *emu, uintptr_t fnc); +void iFXBL_p_32(x64emu_t *emu, uintptr_t fnc); +void iFXbp_p_32(x64emu_t *emu, uintptr_t fnc); +void iFXbL_p_32(x64emu_t *emu, uintptr_t fnc); +void IEpBp_i_32(x64emu_t *emu, uintptr_t fnc); +void UEpBp_i_32(x64emu_t *emu, uintptr_t fnc); +void fEpBp_p_32(x64emu_t *emu, uintptr_t fnc); +void fEpBp_a_32(x64emu_t *emu, uintptr_t fnc); +void dEpBp_i_32(x64emu_t *emu, uintptr_t fnc); +void dEpBp_a_32(x64emu_t *emu, uintptr_t fnc); +void lEpBp_i_32(x64emu_t *emu, uintptr_t fnc); +void lFpbp_L_32(x64emu_t *emu, uintptr_t fnc); +void LEpBp_i_32(x64emu_t *emu, uintptr_t fnc); +void pEppbp__32(x64emu_t *emu, uintptr_t fnc); +void pEppBp__32(x64emu_t *emu, uintptr_t fnc); +void pFppbp__32(x64emu_t *emu, uintptr_t fnc); +void pFXLbL__32(x64emu_t *emu, uintptr_t fnc); +void iFXLbpp__32(x64emu_t *emu, uintptr_t fnc); +void iFXbLC_i_32(x64emu_t *emu, uintptr_t fnc); +void vFLbL_bL__32(x64emu_t *emu, uintptr_t fnc); +void iFpbl_bl__32(x64emu_t *emu, uintptr_t fnc); +void iFpbL_bL__32(x64emu_t *emu, uintptr_t fnc); +void iFbp_bp_p_32(x64emu_t *emu, uintptr_t fnc); +void iFXbiip_i_32(x64emu_t *emu, uintptr_t fnc); +void iFXbLip_L_32(x64emu_t *emu, uintptr_t fnc); +void vFXLbpLiL__32(x64emu_t *emu, uintptr_t fnc); +void vFXLrpLiL__32(x64emu_t *emu, uintptr_t fnc); +void iFXLbpLiL__32(x64emu_t *emu, uintptr_t fnc); +void iFXLbLLii__32(x64emu_t *emu, uintptr_t fnc); +void pFXrLiiuL_p_32(x64emu_t *emu, uintptr_t fnc); +void iFXLbLWWWcc__32(x64emu_t *emu, uintptr_t fnc); +void iEirLLLL_BLLLL__32(x64emu_t *emu, uintptr_t fnc); +void pEppriiiiiiiiilt__32(x64emu_t *emu, uintptr_t fnc); +void vEEipp_32(x64emu_t *emu, uintptr_t fnc); +void vFEipp_32(x64emu_t *emu, uintptr_t fnc); +void vEEipV_32(x64emu_t *emu, uintptr_t fnc); +void vEEpup_32(x64emu_t *emu, uintptr_t fnc); +void vFEpup_32(x64emu_t *emu, uintptr_t fnc); +void vFEpll_32(x64emu_t *emu, uintptr_t fnc); +void vEEppp_32(x64emu_t *emu, uintptr_t fnc); +void vFEppp_32(x64emu_t *emu, uintptr_t fnc); +void vFEXLp_32(x64emu_t *emu, uintptr_t fnc); +void vFcccc_32(x64emu_t *emu, uintptr_t fnc); +void vFwwww_32(x64emu_t *emu, uintptr_t fnc); +void vFiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFiiCp_32(x64emu_t *emu, uintptr_t fnc); +void vFiill_32(x64emu_t *emu, uintptr_t fnc); +void vFiIII_32(x64emu_t *emu, uintptr_t fnc); +void vFiuip_32(x64emu_t *emu, uintptr_t fnc); +void vFiuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFiulp_32(x64emu_t *emu, uintptr_t fnc); +void vFiupV_32(x64emu_t *emu, uintptr_t fnc); +void vFiUUU_32(x64emu_t *emu, uintptr_t fnc); +void vFifff_32(x64emu_t *emu, uintptr_t fnc); +void vFiddd_32(x64emu_t *emu, uintptr_t fnc); +void vFilip_32(x64emu_t *emu, uintptr_t fnc); +void vFilpu_32(x64emu_t *emu, uintptr_t fnc); +void vFilpp_32(x64emu_t *emu, uintptr_t fnc); +void vFipup_32(x64emu_t *emu, uintptr_t fnc); +void vFipll_32(x64emu_t *emu, uintptr_t fnc); +void vFippp_32(x64emu_t *emu, uintptr_t fnc); +void vFCCCC_32(x64emu_t *emu, uintptr_t fnc); +void vFWWWW_32(x64emu_t *emu, uintptr_t fnc); +void vFuccc_32(x64emu_t *emu, uintptr_t fnc); +void vFuwww_32(x64emu_t *emu, uintptr_t fnc); +void vFuiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiII_32(x64emu_t *emu, uintptr_t fnc); +void vFuiui_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuC_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuiup_32(x64emu_t *emu, uintptr_t fnc); +void vFuiUU_32(x64emu_t *emu, uintptr_t fnc); +void vFuifi_32(x64emu_t *emu, uintptr_t fnc); +void vFuiff_32(x64emu_t *emu, uintptr_t fnc); +void vFuidd_32(x64emu_t *emu, uintptr_t fnc); +void vFuilp_32(x64emu_t *emu, uintptr_t fnc); +void vFuipu_32(x64emu_t *emu, uintptr_t fnc); +void vFuipp_32(x64emu_t *emu, uintptr_t fnc); +void vFuIII_32(x64emu_t *emu, uintptr_t fnc); +void vFuWWW_32(x64emu_t *emu, uintptr_t fnc); +void vFuuii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuil_32(x64emu_t *emu, uintptr_t fnc); +void vFuuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuCu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuCp_32(x64emu_t *emu, uintptr_t fnc); +void vFuuui_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuf_32(x64emu_t *emu, uintptr_t fnc); +void vFuuud_32(x64emu_t *emu, uintptr_t fnc); +void vFuuul_32(x64emu_t *emu, uintptr_t fnc); +void vFuuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuUl_32(x64emu_t *emu, uintptr_t fnc); +void vFuuff_32(x64emu_t *emu, uintptr_t fnc); +void vFuuli_32(x64emu_t *emu, uintptr_t fnc); +void vFuupi_32(x64emu_t *emu, uintptr_t fnc); +void vFuupp_32(x64emu_t *emu, uintptr_t fnc); +void vFuUui_32(x64emu_t *emu, uintptr_t fnc); +void vFuUup_32(x64emu_t *emu, uintptr_t fnc); +void vFuUUU_32(x64emu_t *emu, uintptr_t fnc); +void vFufff_32(x64emu_t *emu, uintptr_t fnc); +void vFuddd_32(x64emu_t *emu, uintptr_t fnc); +void vFuluU_32(x64emu_t *emu, uintptr_t fnc); +void vFullC_32(x64emu_t *emu, uintptr_t fnc); +void vFullp_32(x64emu_t *emu, uintptr_t fnc); +void vFulpu_32(x64emu_t *emu, uintptr_t fnc); +void vFulpp_32(x64emu_t *emu, uintptr_t fnc); +void vFupii_32(x64emu_t *emu, uintptr_t fnc); +void vFuppi_32(x64emu_t *emu, uintptr_t fnc); +void vFuppu_32(x64emu_t *emu, uintptr_t fnc); +void vFUUpi_32(x64emu_t *emu, uintptr_t fnc); +void vFffff_32(x64emu_t *emu, uintptr_t fnc); +void vFdddd_32(x64emu_t *emu, uintptr_t fnc); +void vFllii_32(x64emu_t *emu, uintptr_t fnc); +void vFLiii_32(x64emu_t *emu, uintptr_t fnc); +void vFpiip_32(x64emu_t *emu, uintptr_t fnc); +void vFpipi_32(x64emu_t *emu, uintptr_t fnc); +void vFpipp_32(x64emu_t *emu, uintptr_t fnc); +void vFpdii_32(x64emu_t *emu, uintptr_t fnc); +void vFpddd_32(x64emu_t *emu, uintptr_t fnc); +void vFplpp_32(x64emu_t *emu, uintptr_t fnc); +void vEppip_32(x64emu_t *emu, uintptr_t fnc); +void vFppui_32(x64emu_t *emu, uintptr_t fnc); +void vFpppp_32(x64emu_t *emu, uintptr_t fnc); +void vFXiiL_32(x64emu_t *emu, uintptr_t fnc); +void vFXiLu_32(x64emu_t *emu, uintptr_t fnc); +void vFXLii_32(x64emu_t *emu, uintptr_t fnc); +void vFXLip_32(x64emu_t *emu, uintptr_t fnc); +void vFXLLL_32(x64emu_t *emu, uintptr_t fnc); +void vFXLLp_32(x64emu_t *emu, uintptr_t fnc); +void vFXLpi_32(x64emu_t *emu, uintptr_t fnc); +void vFXLpL_32(x64emu_t *emu, uintptr_t fnc); +void vFXpip_32(x64emu_t *emu, uintptr_t fnc); +void vFXppL_32(x64emu_t *emu, uintptr_t fnc); +void cFpiii_32(x64emu_t *emu, uintptr_t fnc); +void iEEiip_32(x64emu_t *emu, uintptr_t fnc); +void iEEiiN_32(x64emu_t *emu, uintptr_t fnc); +void iEEipp_32(x64emu_t *emu, uintptr_t fnc); +void iFEipp_32(x64emu_t *emu, uintptr_t fnc); +void iEEipV_32(x64emu_t *emu, uintptr_t fnc); +void iEEpii_32(x64emu_t *emu, uintptr_t fnc); +void iEEpip_32(x64emu_t *emu, uintptr_t fnc); +void iFEpip_32(x64emu_t *emu, uintptr_t fnc); +void iFEpui_32(x64emu_t *emu, uintptr_t fnc); +void iFEpuu_32(x64emu_t *emu, uintptr_t fnc); +void iEEpup_32(x64emu_t *emu, uintptr_t fnc); +void iEEpLi_32(x64emu_t *emu, uintptr_t fnc); +void iFEpLi_32(x64emu_t *emu, uintptr_t fnc); +void iEEppi_32(x64emu_t *emu, uintptr_t fnc); +void iFEppu_32(x64emu_t *emu, uintptr_t fnc); +void iEEppL_32(x64emu_t *emu, uintptr_t fnc); +void iEEppp_32(x64emu_t *emu, uintptr_t fnc); +void iFEppp_32(x64emu_t *emu, uintptr_t fnc); +void iEEppV_32(x64emu_t *emu, uintptr_t fnc); +void iFEppV_32(x64emu_t *emu, uintptr_t fnc); +void iEEpON_32(x64emu_t *emu, uintptr_t fnc); +void iEEhup_32(x64emu_t *emu, uintptr_t fnc); +void iEESpp_32(x64emu_t *emu, uintptr_t fnc); +void iEESpV_32(x64emu_t *emu, uintptr_t fnc); +void iFEXip_32(x64emu_t *emu, uintptr_t fnc); +void iFEXlp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXpp_32(x64emu_t *emu, uintptr_t fnc); +void iFiiii_32(x64emu_t *emu, uintptr_t fnc); +void iFiiiu_32(x64emu_t *emu, uintptr_t fnc); +void iEiiip_32(x64emu_t *emu, uintptr_t fnc); +void iEiiiN_32(x64emu_t *emu, uintptr_t fnc); +void iEiiII_32(x64emu_t *emu, uintptr_t fnc); +void iEiIIi_32(x64emu_t *emu, uintptr_t fnc); +void iEilli_32(x64emu_t *emu, uintptr_t fnc); +void iEipii_32(x64emu_t *emu, uintptr_t fnc); +void iEipip_32(x64emu_t *emu, uintptr_t fnc); +void iEipui_32(x64emu_t *emu, uintptr_t fnc); +void iEipup_32(x64emu_t *emu, uintptr_t fnc); +void iEippi_32(x64emu_t *emu, uintptr_t fnc); +void iEippL_32(x64emu_t *emu, uintptr_t fnc); +void iFippp_32(x64emu_t *emu, uintptr_t fnc); +void iEipON_32(x64emu_t *emu, uintptr_t fnc); +void iFuiup_32(x64emu_t *emu, uintptr_t fnc); +void iEuupi_32(x64emu_t *emu, uintptr_t fnc); +void iFuppp_32(x64emu_t *emu, uintptr_t fnc); +void iFpiii_32(x64emu_t *emu, uintptr_t fnc); +void iFpiiL_32(x64emu_t *emu, uintptr_t fnc); +void iFpiip_32(x64emu_t *emu, uintptr_t fnc); +void iFpiuu_32(x64emu_t *emu, uintptr_t fnc); +void iFpili_32(x64emu_t *emu, uintptr_t fnc); +void iEpipp_32(x64emu_t *emu, uintptr_t fnc); +void iFpipp_32(x64emu_t *emu, uintptr_t fnc); +void iFpCCC_32(x64emu_t *emu, uintptr_t fnc); +void iFpWWu_32(x64emu_t *emu, uintptr_t fnc); +void iFpuLp_32(x64emu_t *emu, uintptr_t fnc); +void iFpupi_32(x64emu_t *emu, uintptr_t fnc); +void iFpupp_32(x64emu_t *emu, uintptr_t fnc); +void iFppii_32(x64emu_t *emu, uintptr_t fnc); +void iFppiU_32(x64emu_t *emu, uintptr_t fnc); +void iFppip_32(x64emu_t *emu, uintptr_t fnc); +void iFppuw_32(x64emu_t *emu, uintptr_t fnc); +void iFppui_32(x64emu_t *emu, uintptr_t fnc); +void iFppuu_32(x64emu_t *emu, uintptr_t fnc); +void iFppup_32(x64emu_t *emu, uintptr_t fnc); +void iFppLi_32(x64emu_t *emu, uintptr_t fnc); +void iFpppi_32(x64emu_t *emu, uintptr_t fnc); +void iFpppu_32(x64emu_t *emu, uintptr_t fnc); +void iEpppL_32(x64emu_t *emu, uintptr_t fnc); +void iFpppp_32(x64emu_t *emu, uintptr_t fnc); +void iESpiL_32(x64emu_t *emu, uintptr_t fnc); +void iFXiii_32(x64emu_t *emu, uintptr_t fnc); +void iFXiiL_32(x64emu_t *emu, uintptr_t fnc); +void iFXiip_32(x64emu_t *emu, uintptr_t fnc); +void iFXiuL_32(x64emu_t *emu, uintptr_t fnc); +void iFXiLL_32(x64emu_t *emu, uintptr_t fnc); +void iFXipi_32(x64emu_t *emu, uintptr_t fnc); +void iFXipp_32(x64emu_t *emu, uintptr_t fnc); +void iFXWWW_32(x64emu_t *emu, uintptr_t fnc); +void iFXuuu_32(x64emu_t *emu, uintptr_t fnc); +void iFXuuL_32(x64emu_t *emu, uintptr_t fnc); +void iFXuup_32(x64emu_t *emu, uintptr_t fnc); +void iFXuLL_32(x64emu_t *emu, uintptr_t fnc); +void iFXupp_32(x64emu_t *emu, uintptr_t fnc); +void iFXLii_32(x64emu_t *emu, uintptr_t fnc); +void iFXLiL_32(x64emu_t *emu, uintptr_t fnc); +void iFXLip_32(x64emu_t *emu, uintptr_t fnc); +void iFXLuu_32(x64emu_t *emu, uintptr_t fnc); +void iFXLLL_32(x64emu_t *emu, uintptr_t fnc); +void iFXLLp_32(x64emu_t *emu, uintptr_t fnc); +void iFXLpi_32(x64emu_t *emu, uintptr_t fnc); +void iFXpii_32(x64emu_t *emu, uintptr_t fnc); +void iFXpip_32(x64emu_t *emu, uintptr_t fnc); +void iFXpLp_32(x64emu_t *emu, uintptr_t fnc); +void iFXppi_32(x64emu_t *emu, uintptr_t fnc); +void iFXppp_32(x64emu_t *emu, uintptr_t fnc); +void IFEpIi_32(x64emu_t *emu, uintptr_t fnc); +void CFuuff_32(x64emu_t *emu, uintptr_t fnc); +void uFEuip_32(x64emu_t *emu, uintptr_t fnc); +void uFEpii_32(x64emu_t *emu, uintptr_t fnc); +void uFuuuu_32(x64emu_t *emu, uintptr_t fnc); +void uFpCCC_32(x64emu_t *emu, uintptr_t fnc); +void uFppip_32(x64emu_t *emu, uintptr_t fnc); +void uFpppi_32(x64emu_t *emu, uintptr_t fnc); +void lEEipi_32(x64emu_t *emu, uintptr_t fnc); +void lEEppL_32(x64emu_t *emu, uintptr_t fnc); +void lEiipL_32(x64emu_t *emu, uintptr_t fnc); +void lEipLi_32(x64emu_t *emu, uintptr_t fnc); +void lEipLI_32(x64emu_t *emu, uintptr_t fnc); +void lEipLl_32(x64emu_t *emu, uintptr_t fnc); +void lEipLL_32(x64emu_t *emu, uintptr_t fnc); +void lFpuip_32(x64emu_t *emu, uintptr_t fnc); +void LFEpLp_32(x64emu_t *emu, uintptr_t fnc); +void LFEXii_32(x64emu_t *emu, uintptr_t fnc); +void LEpLLS_32(x64emu_t *emu, uintptr_t fnc); +void LEppLp_32(x64emu_t *emu, uintptr_t fnc); +void LEppLa_32(x64emu_t *emu, uintptr_t fnc); +void LFXCii_32(x64emu_t *emu, uintptr_t fnc); +void LFXLuu_32(x64emu_t *emu, uintptr_t fnc); +void LFXpLp_32(x64emu_t *emu, uintptr_t fnc); +void pFEupp_32(x64emu_t *emu, uintptr_t fnc); +void pFEpip_32(x64emu_t *emu, uintptr_t fnc); +void pEEppi_32(x64emu_t *emu, uintptr_t fnc); +void pFEppi_32(x64emu_t *emu, uintptr_t fnc); +void pEEppp_32(x64emu_t *emu, uintptr_t fnc); +void pFEppp_32(x64emu_t *emu, uintptr_t fnc); +void pFEXip_32(x64emu_t *emu, uintptr_t fnc); +void pFEXLL_32(x64emu_t *emu, uintptr_t fnc); +void pFEXLp_32(x64emu_t *emu, uintptr_t fnc); +void pFEXpL_32(x64emu_t *emu, uintptr_t fnc); +void pFEXpp_32(x64emu_t *emu, uintptr_t fnc); +void pFiiiu_32(x64emu_t *emu, uintptr_t fnc); +void pFifff_32(x64emu_t *emu, uintptr_t fnc); +void pFillu_32(x64emu_t *emu, uintptr_t fnc); +void pEippu_32(x64emu_t *emu, uintptr_t fnc); +void pFullu_32(x64emu_t *emu, uintptr_t fnc); +void pEpiLL_32(x64emu_t *emu, uintptr_t fnc); +void pFpuii_32(x64emu_t *emu, uintptr_t fnc); +void pFpupp_32(x64emu_t *emu, uintptr_t fnc); +void pEpLiS_32(x64emu_t *emu, uintptr_t fnc); +void pEpLpL_32(x64emu_t *emu, uintptr_t fnc); +void pEppLL_32(x64emu_t *emu, uintptr_t fnc); +void pFpppL_32(x64emu_t *emu, uintptr_t fnc); +void pFpppp_32(x64emu_t *emu, uintptr_t fnc); +void pFXiii_32(x64emu_t *emu, uintptr_t fnc); +void pFXiip_32(x64emu_t *emu, uintptr_t fnc); +void pFXCip_32(x64emu_t *emu, uintptr_t fnc); +void pFXLpp_32(x64emu_t *emu, uintptr_t fnc); +void pFXppp_32(x64emu_t *emu, uintptr_t fnc); +void vFuibp_i_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuBp__32(x64emu_t *emu, uintptr_t fnc); +void vFbp_ppp_32(x64emu_t *emu, uintptr_t fnc); +void vFXLLbL__32(x64emu_t *emu, uintptr_t fnc); +void iFplibl__32(x64emu_t *emu, uintptr_t fnc); +void iFpppbp__32(x64emu_t *emu, uintptr_t fnc); +void iFppbL_p_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_pii_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_pip_32(x64emu_t *emu, uintptr_t fnc); +void iFBp_pui_32(x64emu_t *emu, uintptr_t fnc); +void iFXLiBp__32(x64emu_t *emu, uintptr_t fnc); +void iFXLbp_i_32(x64emu_t *emu, uintptr_t fnc); +void iFXLbL_i_32(x64emu_t *emu, uintptr_t fnc); +void iFXLbp_p_32(x64emu_t *emu, uintptr_t fnc); +void IEpBp_ii_32(x64emu_t *emu, uintptr_t fnc); +void uFppibp__32(x64emu_t *emu, uintptr_t fnc); +void UEpBp_ii_32(x64emu_t *emu, uintptr_t fnc); +void lEiibl_L_32(x64emu_t *emu, uintptr_t fnc); +void LEpbp_Lp_32(x64emu_t *emu, uintptr_t fnc); +void iEEpprLL__32(x64emu_t *emu, uintptr_t fnc); +void iEpurLL_p_32(x64emu_t *emu, uintptr_t fnc); +void iFppbL_bL__32(x64emu_t *emu, uintptr_t fnc); +void iFrpuu_Lui_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_bp_pi_32(x64emu_t *emu, uintptr_t fnc); +void iFXbL_ibp__32(x64emu_t *emu, uintptr_t fnc); +void vFbp_ppbup__32(x64emu_t *emu, uintptr_t fnc); +void vFXLbpLiL_L_32(x64emu_t *emu, uintptr_t fnc); +void iFXLbpLiL_L_32(x64emu_t *emu, uintptr_t fnc); +void iEiirLL_BLL__32(x64emu_t *emu, uintptr_t fnc); +void iEuirLL_BLL__32(x64emu_t *emu, uintptr_t fnc); +void iFXLpbLWWWcc__32(x64emu_t *emu, uintptr_t fnc); +void iFXLbLWWWcc_i_32(x64emu_t *emu, uintptr_t fnc); +void iFXLuriiiiiLi__32(x64emu_t *emu, uintptr_t fnc); +void vFXLbLLLLLLLLLL_L_32(x64emu_t *emu, uintptr_t fnc); +void iFXLbLLLLLLLLLL_L_32(x64emu_t *emu, uintptr_t fnc); +void LEpLpriiiiiiiiilt__32(x64emu_t *emu, uintptr_t fnc); +void iFXipBWWWWWWWWWuip__32(x64emu_t *emu, uintptr_t fnc); +void iFXLbLWWWcc_bLWWWcc__32(x64emu_t *emu, uintptr_t fnc); +void iFpruuipWCCp_buuipWCCp_i_32(x64emu_t *emu, uintptr_t fnc); +void iFXpLriLLLiiiiiiiLLiiLiiiiLic__32(x64emu_t *emu, uintptr_t fnc); +void iFXpLbiLLLiiiiiiiLLiiLiiiiLic__32(x64emu_t *emu, uintptr_t fnc); +void pFXLLbiLLLiiiiiiiLLiiLiiiiLic__32(x64emu_t *emu, uintptr_t fnc); +void vEEiipp_32(x64emu_t *emu, uintptr_t fnc); +void vEEiipV_32(x64emu_t *emu, uintptr_t fnc); +void vFEuipu_32(x64emu_t *emu, uintptr_t fnc); +void vFEuipp_32(x64emu_t *emu, uintptr_t fnc); +void vEEpLLp_32(x64emu_t *emu, uintptr_t fnc); +void vEEppiV_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiu_32(x64emu_t *emu, uintptr_t fnc); +void vFiiuii_32(x64emu_t *emu, uintptr_t fnc); +void vFiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFiillu_32(x64emu_t *emu, uintptr_t fnc); +void vFiilll_32(x64emu_t *emu, uintptr_t fnc); +void vFiipll_32(x64emu_t *emu, uintptr_t fnc); +void vFiIIII_32(x64emu_t *emu, uintptr_t fnc); +void vFiuiip_32(x64emu_t *emu, uintptr_t fnc); +void vFiuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFiulpp_32(x64emu_t *emu, uintptr_t fnc); +void vFiUUUU_32(x64emu_t *emu, uintptr_t fnc); +void vFiffff_32(x64emu_t *emu, uintptr_t fnc); +void vFidddd_32(x64emu_t *emu, uintptr_t fnc); +void vFilill_32(x64emu_t *emu, uintptr_t fnc); +void vFilipi_32(x64emu_t *emu, uintptr_t fnc); +void vFilipl_32(x64emu_t *emu, uintptr_t fnc); +void vFipipu_32(x64emu_t *emu, uintptr_t fnc); +void vFipipp_32(x64emu_t *emu, uintptr_t fnc); +void vFipupi_32(x64emu_t *emu, uintptr_t fnc); +void vFucccc_32(x64emu_t *emu, uintptr_t fnc); +void vFuwwww_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiu_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiCp_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiup_32(x64emu_t *emu, uintptr_t fnc); +void vFuiill_32(x64emu_t *emu, uintptr_t fnc); +void vFuiIII_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuCi_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuCu_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuiupi_32(x64emu_t *emu, uintptr_t fnc); +void vFuiUUU_32(x64emu_t *emu, uintptr_t fnc); +void vFuifff_32(x64emu_t *emu, uintptr_t fnc); +void vFuiddd_32(x64emu_t *emu, uintptr_t fnc); +void vFuipii_32(x64emu_t *emu, uintptr_t fnc); +void vFuipip_32(x64emu_t *emu, uintptr_t fnc); +void vFuipup_32(x64emu_t *emu, uintptr_t fnc); +void vFuippp_32(x64emu_t *emu, uintptr_t fnc); +void vFuIIII_32(x64emu_t *emu, uintptr_t fnc); +void vFuCCCC_32(x64emu_t *emu, uintptr_t fnc); +void vFuCuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuCuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuWWWW_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiui_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuifi_32(x64emu_t *emu, uintptr_t fnc); +void vFuuipC_32(x64emu_t *emu, uintptr_t fnc); +void vFuuipu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuipp_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuiu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuil_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuui_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuli_32(x64emu_t *emu, uintptr_t fnc); +void vFuuull_32(x64emu_t *emu, uintptr_t fnc); +void vFuulll_32(x64emu_t *emu, uintptr_t fnc); +void vFuullp_32(x64emu_t *emu, uintptr_t fnc); +void vFuupii_32(x64emu_t *emu, uintptr_t fnc); +void vFuUUUU_32(x64emu_t *emu, uintptr_t fnc); +void vFuffff_32(x64emu_t *emu, uintptr_t fnc); +void vFudddd_32(x64emu_t *emu, uintptr_t fnc); +void vFullpu_32(x64emu_t *emu, uintptr_t fnc); +void vFupiii_32(x64emu_t *emu, uintptr_t fnc); +void vFupupp_32(x64emu_t *emu, uintptr_t fnc); +void vFuplii_32(x64emu_t *emu, uintptr_t fnc); +void vFuppip_32(x64emu_t *emu, uintptr_t fnc); +void vFupppp_32(x64emu_t *emu, uintptr_t fnc); +void vFfffff_32(x64emu_t *emu, uintptr_t fnc); +void vFddddp_32(x64emu_t *emu, uintptr_t fnc); +void vFluipp_32(x64emu_t *emu, uintptr_t fnc); +void vFpilpp_32(x64emu_t *emu, uintptr_t fnc); +void vFpipiu_32(x64emu_t *emu, uintptr_t fnc); +void vFpuipp_32(x64emu_t *emu, uintptr_t fnc); +void vFpddii_32(x64emu_t *emu, uintptr_t fnc); +void vFppWui_32(x64emu_t *emu, uintptr_t fnc); +void vFpppii_32(x64emu_t *emu, uintptr_t fnc); +void vFppppu_32(x64emu_t *emu, uintptr_t fnc); +void vFppppp_32(x64emu_t *emu, uintptr_t fnc); +void vFXLiii_32(x64emu_t *emu, uintptr_t fnc); +void vFXLiiL_32(x64emu_t *emu, uintptr_t fnc); +void vFXLppi_32(x64emu_t *emu, uintptr_t fnc); +void vFXpiiL_32(x64emu_t *emu, uintptr_t fnc); +void iEEiiip_32(x64emu_t *emu, uintptr_t fnc); +void iEEipii_32(x64emu_t *emu, uintptr_t fnc); +void iEEippL_32(x64emu_t *emu, uintptr_t fnc); +void iEEpipp_32(x64emu_t *emu, uintptr_t fnc); +void iEEpipV_32(x64emu_t *emu, uintptr_t fnc); +void iFEpupu_32(x64emu_t *emu, uintptr_t fnc); +void iEEpLpp_32(x64emu_t *emu, uintptr_t fnc); +void iFEpLpp_32(x64emu_t *emu, uintptr_t fnc); +void iEEpLpV_32(x64emu_t *emu, uintptr_t fnc); +void iFEpLpV_32(x64emu_t *emu, uintptr_t fnc); +void iFEpplp_32(x64emu_t *emu, uintptr_t fnc); +void iEEpppi_32(x64emu_t *emu, uintptr_t fnc); +void iEEpppp_32(x64emu_t *emu, uintptr_t fnc); +void iFEpppp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXipp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLip_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLlp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLLp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLpi_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLpp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXpLp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXppu_32(x64emu_t *emu, uintptr_t fnc); +void iFEXppp_32(x64emu_t *emu, uintptr_t fnc); +void iEiiipu_32(x64emu_t *emu, uintptr_t fnc); +void iEiiipp_32(x64emu_t *emu, uintptr_t fnc); +void iEiLLLL_32(x64emu_t *emu, uintptr_t fnc); +void iEipLLi_32(x64emu_t *emu, uintptr_t fnc); +void iEippLi_32(x64emu_t *emu, uintptr_t fnc); +void iEipppi_32(x64emu_t *emu, uintptr_t fnc); +void iEipppp_32(x64emu_t *emu, uintptr_t fnc); +void iFuiuup_32(x64emu_t *emu, uintptr_t fnc); +void iFpiiuu_32(x64emu_t *emu, uintptr_t fnc); +void iFpippp_32(x64emu_t *emu, uintptr_t fnc); +void iFpCCCC_32(x64emu_t *emu, uintptr_t fnc); +void iFpuipp_32(x64emu_t *emu, uintptr_t fnc); +void iFppiUi_32(x64emu_t *emu, uintptr_t fnc); +void iFppipp_32(x64emu_t *emu, uintptr_t fnc); +void iFpppip_32(x64emu_t *emu, uintptr_t fnc); +void iEpppLp_32(x64emu_t *emu, uintptr_t fnc); +void iFppppp_32(x64emu_t *emu, uintptr_t fnc); +void iFXiiii_32(x64emu_t *emu, uintptr_t fnc); +void iFXiiip_32(x64emu_t *emu, uintptr_t fnc); +void iFXiuLi_32(x64emu_t *emu, uintptr_t fnc); +void iFXiLip_32(x64emu_t *emu, uintptr_t fnc); +void iFXiLuu_32(x64emu_t *emu, uintptr_t fnc); +void iFXuuLL_32(x64emu_t *emu, uintptr_t fnc); +void iFXLLii_32(x64emu_t *emu, uintptr_t fnc); +void iFXLpii_32(x64emu_t *emu, uintptr_t fnc); +void iFXLpLi_32(x64emu_t *emu, uintptr_t fnc); +void iFXLppi_32(x64emu_t *emu, uintptr_t fnc); +void iFXpipi_32(x64emu_t *emu, uintptr_t fnc); +void iFXpppp_32(x64emu_t *emu, uintptr_t fnc); +void IFXpIII_32(x64emu_t *emu, uintptr_t fnc); +void uEEippu_32(x64emu_t *emu, uintptr_t fnc); +void uEpLLLS_32(x64emu_t *emu, uintptr_t fnc); +void UFuiCiu_32(x64emu_t *emu, uintptr_t fnc); +void lFpuipC_32(x64emu_t *emu, uintptr_t fnc); +void LFEppLL_32(x64emu_t *emu, uintptr_t fnc); +void LFEXLpi_32(x64emu_t *emu, uintptr_t fnc); +void LEpLppa_32(x64emu_t *emu, uintptr_t fnc); +void LFXLuuu_32(x64emu_t *emu, uintptr_t fnc); +void LFXLpuu_32(x64emu_t *emu, uintptr_t fnc); +void LFXpppi_32(x64emu_t *emu, uintptr_t fnc); +void pFEppip_32(x64emu_t *emu, uintptr_t fnc); +void pFEXipp_32(x64emu_t *emu, uintptr_t fnc); +void pFEXlpp_32(x64emu_t *emu, uintptr_t fnc); +void pFEXppi_32(x64emu_t *emu, uintptr_t fnc); +void pFuiupp_32(x64emu_t *emu, uintptr_t fnc); +void pFpiiuu_32(x64emu_t *emu, uintptr_t fnc); +void pFpippp_32(x64emu_t *emu, uintptr_t fnc); +void pFpuiii_32(x64emu_t *emu, uintptr_t fnc); +void pFpuuip_32(x64emu_t *emu, uintptr_t fnc); +void pFppuup_32(x64emu_t *emu, uintptr_t fnc); +void pFppupp_32(x64emu_t *emu, uintptr_t fnc); +void pFXLipp_32(x64emu_t *emu, uintptr_t fnc); +void pFXpipi_32(x64emu_t *emu, uintptr_t fnc); +void pFXppip_32(x64emu_t *emu, uintptr_t fnc); +void vFiuibp_i_32(x64emu_t *emu, uintptr_t fnc); +void vFXibL_ii_32(x64emu_t *emu, uintptr_t fnc); +void iEEBh_ppp_32(x64emu_t *emu, uintptr_t fnc); +void iFppppbp__32(x64emu_t *emu, uintptr_t fnc); +void iFbp_piip_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_puip_32(x64emu_t *emu, uintptr_t fnc); +void iFbp_pppi_32(x64emu_t *emu, uintptr_t fnc); +void iFXiibL_i_32(x64emu_t *emu, uintptr_t fnc); +void iFXCupbL__32(x64emu_t *emu, uintptr_t fnc); +void iFXLbL_ii_32(x64emu_t *emu, uintptr_t fnc); +void LEpbp_LLp_32(x64emu_t *emu, uintptr_t fnc); +void LEpBp_LLp_32(x64emu_t *emu, uintptr_t fnc); +void iEippprLL__32(x64emu_t *emu, uintptr_t fnc); +void iEpurLL_pL_32(x64emu_t *emu, uintptr_t fnc); +void iFppppbup__32(x64emu_t *emu, uintptr_t fnc); +void iFiiuBp_Bp__32(x64emu_t *emu, uintptr_t fnc); +void iFbp_bp_pip_32(x64emu_t *emu, uintptr_t fnc); +void vFbp_ppibup__32(x64emu_t *emu, uintptr_t fnc); +void iFEXbpLiL_pp_32(x64emu_t *emu, uintptr_t fnc); +void iFpppbp_bup__32(x64emu_t *emu, uintptr_t fnc); +void LFXLrLiiuL_Lp_32(x64emu_t *emu, uintptr_t fnc); +void pFEXLrLiiuL_i_32(x64emu_t *emu, uintptr_t fnc); +void iFXLiuriiiiiLi__32(x64emu_t *emu, uintptr_t fnc); +void LELbp_bL_bp_bL__32(x64emu_t *emu, uintptr_t fnc); +void vFXLbLLLLLLLLLL_iL_32(x64emu_t *emu, uintptr_t fnc); +void iFXiiiBpLiiiLLLii__32(x64emu_t *emu, uintptr_t fnc); +void LEpLpriiiiiiiiilt_a_32(x64emu_t *emu, uintptr_t fnc); +void iFXLpbLWWWcc_bLWWWcc__32(x64emu_t *emu, uintptr_t fnc); +void iFXLpBLWWWcc_BLWWWcc__32(x64emu_t *emu, uintptr_t fnc); +void vFEiiipp_32(x64emu_t *emu, uintptr_t fnc); +void vFEuippp_32(x64emu_t *emu, uintptr_t fnc); +void vFEupupi_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiuil_32(x64emu_t *emu, uintptr_t fnc); +void vFiiilpi_32(x64emu_t *emu, uintptr_t fnc); +void vFiiuilp_32(x64emu_t *emu, uintptr_t fnc); +void vFiffiff_32(x64emu_t *emu, uintptr_t fnc); +void vFiddidd_32(x64emu_t *emu, uintptr_t fnc); +void vFilipli_32(x64emu_t *emu, uintptr_t fnc); +void vFiliplu_32(x64emu_t *emu, uintptr_t fnc); +void vFipiplp_32(x64emu_t *emu, uintptr_t fnc); +void vFCCCCff_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiuii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuiIIII_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiC_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiil_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiuU_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuCip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuiupii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiupiu_32(x64emu_t *emu, uintptr_t fnc); +void vFuiUUUU_32(x64emu_t *emu, uintptr_t fnc); +void vFuiffff_32(x64emu_t *emu, uintptr_t fnc); +void vFuidddd_32(x64emu_t *emu, uintptr_t fnc); +void vFuipiup_32(x64emu_t *emu, uintptr_t fnc); +void vFuCuuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuil_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuCu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuiup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuipC_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuipp_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuuii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuull_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuppi_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuppp_32(x64emu_t *emu, uintptr_t fnc); +void vFuuffff_32(x64emu_t *emu, uintptr_t fnc); +void vFuudddd_32(x64emu_t *emu, uintptr_t fnc); +void vFuupiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuupupp_32(x64emu_t *emu, uintptr_t fnc); +void vFuuplii_32(x64emu_t *emu, uintptr_t fnc); +void vFuffiip_32(x64emu_t *emu, uintptr_t fnc); +void vFufffff_32(x64emu_t *emu, uintptr_t fnc); +void vFuddiip_32(x64emu_t *emu, uintptr_t fnc); +void vFulluUC_32(x64emu_t *emu, uintptr_t fnc); +void vFupiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFffffff_32(x64emu_t *emu, uintptr_t fnc); +void vFdddddd_32(x64emu_t *emu, uintptr_t fnc); +void vFpipipV_32(x64emu_t *emu, uintptr_t fnc); +void vFpdddii_32(x64emu_t *emu, uintptr_t fnc); +void vFpppppp_32(x64emu_t *emu, uintptr_t fnc); +void vFXiLppi_32(x64emu_t *emu, uintptr_t fnc); +void vFXLiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFXLiiiL_32(x64emu_t *emu, uintptr_t fnc); +void vFXLiipi_32(x64emu_t *emu, uintptr_t fnc); +void vFXLpppi_32(x64emu_t *emu, uintptr_t fnc); +void iEEiippi_32(x64emu_t *emu, uintptr_t fnc); +void iEEuppLp_32(x64emu_t *emu, uintptr_t fnc); +void iFEpiuuu_32(x64emu_t *emu, uintptr_t fnc); +void iEEpiLpp_32(x64emu_t *emu, uintptr_t fnc); +void iEEpipOi_32(x64emu_t *emu, uintptr_t fnc); +void iFEpuuup_32(x64emu_t *emu, uintptr_t fnc); +void iFEplluu_32(x64emu_t *emu, uintptr_t fnc); +void iFEpLlpp_32(x64emu_t *emu, uintptr_t fnc); +void iFEppipp_32(x64emu_t *emu, uintptr_t fnc); +void iEEppupi_32(x64emu_t *emu, uintptr_t fnc); +void iFEppllp_32(x64emu_t *emu, uintptr_t fnc); +void iEEpppLp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLilp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLpiL_32(x64emu_t *emu, uintptr_t fnc); +void iFEXpiip_32(x64emu_t *emu, uintptr_t fnc); +void iFEXpiup_32(x64emu_t *emu, uintptr_t fnc); +void iFEXpppp_32(x64emu_t *emu, uintptr_t fnc); +void iFuiiuup_32(x64emu_t *emu, uintptr_t fnc); +void iFpiippp_32(x64emu_t *emu, uintptr_t fnc); +void iFppiiii_32(x64emu_t *emu, uintptr_t fnc); +void iFppuIII_32(x64emu_t *emu, uintptr_t fnc); +void iFppulll_32(x64emu_t *emu, uintptr_t fnc); +void iFpppppp_32(x64emu_t *emu, uintptr_t fnc); +void iFXiiiii_32(x64emu_t *emu, uintptr_t fnc); +void iFXiiLip_32(x64emu_t *emu, uintptr_t fnc); +void iFXiippp_32(x64emu_t *emu, uintptr_t fnc); +void iFXuuuuu_32(x64emu_t *emu, uintptr_t fnc); +void iFXLiiiL_32(x64emu_t *emu, uintptr_t fnc); +void iFXLiiip_32(x64emu_t *emu, uintptr_t fnc); +void iFXLiiuu_32(x64emu_t *emu, uintptr_t fnc); +void iFXLuupp_32(x64emu_t *emu, uintptr_t fnc); +void iFXLupip_32(x64emu_t *emu, uintptr_t fnc); +void iFXLLLLL_32(x64emu_t *emu, uintptr_t fnc); +void iFXLppii_32(x64emu_t *emu, uintptr_t fnc); +void iFXLpppp_32(x64emu_t *emu, uintptr_t fnc); +void iFXpIppp_32(x64emu_t *emu, uintptr_t fnc); +void iFXpuiii_32(x64emu_t *emu, uintptr_t fnc); +void iFXpLiWL_32(x64emu_t *emu, uintptr_t fnc); +void iFXpLLiL_32(x64emu_t *emu, uintptr_t fnc); +void iFXppppi_32(x64emu_t *emu, uintptr_t fnc); +void iFXppppp_32(x64emu_t *emu, uintptr_t fnc); +void uFEpippi_32(x64emu_t *emu, uintptr_t fnc); +void uFupuufp_32(x64emu_t *emu, uintptr_t fnc); +void lEipLipu_32(x64emu_t *emu, uintptr_t fnc); +void lEipLipp_32(x64emu_t *emu, uintptr_t fnc); +void pFEpiiuu_32(x64emu_t *emu, uintptr_t fnc); +void pEEpLLiN_32(x64emu_t *emu, uintptr_t fnc); +void pEEppLLp_32(x64emu_t *emu, uintptr_t fnc); +void pFEXpppp_32(x64emu_t *emu, uintptr_t fnc); +void pFWCiWCi_32(x64emu_t *emu, uintptr_t fnc); +void pFpiiiiu_32(x64emu_t *emu, uintptr_t fnc); +void XFpppppp_32(x64emu_t *emu, uintptr_t fnc); +void iFpppbp_pp_32(x64emu_t *emu, uintptr_t fnc); +void iFXibL_ppu_32(x64emu_t *emu, uintptr_t fnc); +void iFXLiiibL__32(x64emu_t *emu, uintptr_t fnc); +void iFXLLLLbL__32(x64emu_t *emu, uintptr_t fnc); +void iFXLbL_ipi_32(x64emu_t *emu, uintptr_t fnc); +void iFXbL_upip_32(x64emu_t *emu, uintptr_t fnc); +void iFppbL_pbL_p_32(x64emu_t *emu, uintptr_t fnc); +void iFrpuu_Lrpuu_Lui_32(x64emu_t *emu, uintptr_t fnc); +void iFXbLip_uubLip_L_32(x64emu_t *emu, uintptr_t fnc); +void vFbp_bppup_ippbp__32(x64emu_t *emu, uintptr_t fnc); +void vFEuuippp_32(x64emu_t *emu, uintptr_t fnc); +void vFEupupip_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFiiuilil_32(x64emu_t *emu, uintptr_t fnc); +void vFiiffffp_32(x64emu_t *emu, uintptr_t fnc); +void vFiuulipi_32(x64emu_t *emu, uintptr_t fnc); +void vFiupuuup_32(x64emu_t *emu, uintptr_t fnc); +void vFilipliu_32(x64emu_t *emu, uintptr_t fnc); +void vFilulipi_32(x64emu_t *emu, uintptr_t fnc); +void vFCCCCfff_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiC_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiiC_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiuU_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuCiuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuiupiiu_32(x64emu_t *emu, uintptr_t fnc); +void vFuiupuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuipiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuipffff_32(x64emu_t *emu, uintptr_t fnc); +void vFuipdddd_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiC_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiCiui_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiCiuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuiiC_32(x64emu_t *emu, uintptr_t fnc); +void vFuuipppp_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuiiCp_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuiuil_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuiupi_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuulll_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuffff_32(x64emu_t *emu, uintptr_t fnc); +void vFuuudddd_32(x64emu_t *emu, uintptr_t fnc); +void vFuuffiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuddiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuulluup_32(x64emu_t *emu, uintptr_t fnc); +void vFuupiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuppppp_32(x64emu_t *emu, uintptr_t fnc); +void vFuffffff_32(x64emu_t *emu, uintptr_t fnc); +void vFudddddd_32(x64emu_t *emu, uintptr_t fnc); +void vFlliiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFpipipiu_32(x64emu_t *emu, uintptr_t fnc); +void vFpddiidd_32(x64emu_t *emu, uintptr_t fnc); +void vFXLiiiLi_32(x64emu_t *emu, uintptr_t fnc); +void vFXLiiipi_32(x64emu_t *emu, uintptr_t fnc); +void vFXLiiuui_32(x64emu_t *emu, uintptr_t fnc); +void vFXLLuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFXLppipi_32(x64emu_t *emu, uintptr_t fnc); +void vFXpiipii_32(x64emu_t *emu, uintptr_t fnc); +void vFXppiiii_32(x64emu_t *emu, uintptr_t fnc); +void iEEpLiipV_32(x64emu_t *emu, uintptr_t fnc); +void iEEpLiLpV_32(x64emu_t *emu, uintptr_t fnc); +void iFEpppipp_32(x64emu_t *emu, uintptr_t fnc); +void iFEpppupp_32(x64emu_t *emu, uintptr_t fnc); +void iEEpppppp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLpiiL_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLpppp_32(x64emu_t *emu, uintptr_t fnc); +void iFEXppppp_32(x64emu_t *emu, uintptr_t fnc); +void iFuiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void iFpiuuuiu_32(x64emu_t *emu, uintptr_t fnc); +void iFpWCiWCi_32(x64emu_t *emu, uintptr_t fnc); +void iEpupupui_32(x64emu_t *emu, uintptr_t fnc); +void iFXiuLiii_32(x64emu_t *emu, uintptr_t fnc); +void iFXiLuupp_32(x64emu_t *emu, uintptr_t fnc); +void iFXLiiiiL_32(x64emu_t *emu, uintptr_t fnc); +void iFXLiiuui_32(x64emu_t *emu, uintptr_t fnc); +void iFXLpiiii_32(x64emu_t *emu, uintptr_t fnc); +void iFXLpiiuu_32(x64emu_t *emu, uintptr_t fnc); +void iFXLpiipi_32(x64emu_t *emu, uintptr_t fnc); +void iFXLppiii_32(x64emu_t *emu, uintptr_t fnc); +void iFXpiipii_32(x64emu_t *emu, uintptr_t fnc); +void iFXpLiWwL_32(x64emu_t *emu, uintptr_t fnc); +void iFXpLuuii_32(x64emu_t *emu, uintptr_t fnc); +void uFuippppp_32(x64emu_t *emu, uintptr_t fnc); +void lEEipLpLL_32(x64emu_t *emu, uintptr_t fnc); +void pFEpiiiiu_32(x64emu_t *emu, uintptr_t fnc); +void pFEpLiiii_32(x64emu_t *emu, uintptr_t fnc); +void pEEpLiiiI_32(x64emu_t *emu, uintptr_t fnc); +void pFEpLiiiI_32(x64emu_t *emu, uintptr_t fnc); +void pEEpLiiil_32(x64emu_t *emu, uintptr_t fnc); +void pFEpXppip_32(x64emu_t *emu, uintptr_t fnc); +void vFXLLiiibl__32(x64emu_t *emu, uintptr_t fnc); +void iFXiLibiip_ip_32(x64emu_t *emu, uintptr_t fnc); +void iFXLibL_ubL_u_32(x64emu_t *emu, uintptr_t fnc); +void vFXLpiibpiip_i_32(x64emu_t *emu, uintptr_t fnc); +void iFXLpiibpiiL_i_32(x64emu_t *emu, uintptr_t fnc); +void LFXLLuubLWWWcc_bLWWWcc__32(x64emu_t *emu, uintptr_t fnc); +void LFXLLbLWWWcc_bLWWWcc_uu_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiuuip_32(x64emu_t *emu, uintptr_t fnc); +void vFiilliilp_32(x64emu_t *emu, uintptr_t fnc); +void vFiupuiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFiupuuuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiiC_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiipiup_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiiuU_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiCuU_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuCCCCfff_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiiC_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiuupp_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuiiiC_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuiiiiu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuiuCil_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuipipp_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuuuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuufffff_32(x64emu_t *emu, uintptr_t fnc); +void vFffffffff_32(x64emu_t *emu, uintptr_t fnc); +void vFXiLLiipi_32(x64emu_t *emu, uintptr_t fnc); +void vFXiLpiiuu_32(x64emu_t *emu, uintptr_t fnc); +void vFXLiiiLii_32(x64emu_t *emu, uintptr_t fnc); +void vFXLLLiipi_32(x64emu_t *emu, uintptr_t fnc); +void vFXLppiipi_32(x64emu_t *emu, uintptr_t fnc); +void vFXppuulll_32(x64emu_t *emu, uintptr_t fnc); +void iEEpippppp_32(x64emu_t *emu, uintptr_t fnc); +void iEEpLiLppp_32(x64emu_t *emu, uintptr_t fnc); +void iFEppipppp_32(x64emu_t *emu, uintptr_t fnc); +void iFuiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void iFpuippupp_32(x64emu_t *emu, uintptr_t fnc); +void iFpuuiiuuu_32(x64emu_t *emu, uintptr_t fnc); +void iFXuupuupp_32(x64emu_t *emu, uintptr_t fnc); +void iFXLpipppp_32(x64emu_t *emu, uintptr_t fnc); +void iFXLppLpip_32(x64emu_t *emu, uintptr_t fnc); +void iFXpIIIppp_32(x64emu_t *emu, uintptr_t fnc); +void CFuiifpppp_32(x64emu_t *emu, uintptr_t fnc); +void uFuipppppp_32(x64emu_t *emu, uintptr_t fnc); +void uFuupuuiuf_32(x64emu_t *emu, uintptr_t fnc); +void uFulpppppp_32(x64emu_t *emu, uintptr_t fnc); +void LFEXLppuuu_32(x64emu_t *emu, uintptr_t fnc); +void LFXLpuuLLu_32(x64emu_t *emu, uintptr_t fnc); +void iFXLLiippBL__32(x64emu_t *emu, uintptr_t fnc); +void iFXLpppbL_pp_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiiiill_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiillli_32(x64emu_t *emu, uintptr_t fnc); +void vFiiilllilp_32(x64emu_t *emu, uintptr_t fnc); +void vFiupuiuuup_32(x64emu_t *emu, uintptr_t fnc); +void vFiupuuuuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiiiC_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiiCuU_32(x64emu_t *emu, uintptr_t fnc); +void vFuiupuffup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiiiC_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuiiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuiiiiCp_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuuuuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuupuuiuuf_32(x64emu_t *emu, uintptr_t fnc); +void vFuffffffff_32(x64emu_t *emu, uintptr_t fnc); +void vFffCCCCfff_32(x64emu_t *emu, uintptr_t fnc); +void vFddddddddd_32(x64emu_t *emu, uintptr_t fnc); +void vFXiLLpiipi_32(x64emu_t *emu, uintptr_t fnc); +void vFXLiiipiii_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLLLiipi_32(x64emu_t *emu, uintptr_t fnc); +void iFuiiuuiiip_32(x64emu_t *emu, uintptr_t fnc); +void iFuiiupiiup_32(x64emu_t *emu, uintptr_t fnc); +void iFdddpppppp_32(x64emu_t *emu, uintptr_t fnc); +void iFppippippp_32(x64emu_t *emu, uintptr_t fnc); +void iFXuuuLiiip_32(x64emu_t *emu, uintptr_t fnc); +void iFXuuuLpppp_32(x64emu_t *emu, uintptr_t fnc); +void iFXLiuiiLLL_32(x64emu_t *emu, uintptr_t fnc); +void iFXLLiiuuii_32(x64emu_t *emu, uintptr_t fnc); +void iFXLpiiuuii_32(x64emu_t *emu, uintptr_t fnc); +void uFuulpiuiuf_32(x64emu_t *emu, uintptr_t fnc); +void LFXLiiiiiip_32(x64emu_t *emu, uintptr_t fnc); +void LFXLiiuuuLL_32(x64emu_t *emu, uintptr_t fnc); +void pFEuiiiuuuu_32(x64emu_t *emu, uintptr_t fnc); +void pFEXLiiuuLi_32(x64emu_t *emu, uintptr_t fnc); +void pFpiiiiuuuu_32(x64emu_t *emu, uintptr_t fnc); +void iFXLbL_pppppp_32(x64emu_t *emu, uintptr_t fnc); +void iFXiLiiibiip_ip_32(x64emu_t *emu, uintptr_t fnc); +void iFXiLLLiiibiip__32(x64emu_t *emu, uintptr_t fnc); +void iFXLbL_bL_ppppp_32(x64emu_t *emu, uintptr_t fnc); +void vFXiLLrLiiuL_iipi_32(x64emu_t *emu, uintptr_t fnc); +void pFEXbpLiLLLii_uippuu_32(x64emu_t *emu, uintptr_t fnc); +void vFEXLpppippp_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiiiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiiiiiui_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiiiiiuu_32(x64emu_t *emu, uintptr_t fnc); +void vFiiillliiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiiuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiuiiiiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuuuuuCCC_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuuuuuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuupuiupuuf_32(x64emu_t *emu, uintptr_t fnc); +void vFuffiiffiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuddiiddiip_32(x64emu_t *emu, uintptr_t fnc); +void vFffffffffff_32(x64emu_t *emu, uintptr_t fnc); +void iFuiiiuuiiip_32(x64emu_t *emu, uintptr_t fnc); +void iFppuuiiuuuu_32(x64emu_t *emu, uintptr_t fnc); +void iFXiLLdduudd_32(x64emu_t *emu, uintptr_t fnc); +void iFXuuLiuiiLL_32(x64emu_t *emu, uintptr_t fnc); +void iFXLLpiiuuii_32(x64emu_t *emu, uintptr_t fnc); +void pFEpiiiiuuuu_32(x64emu_t *emu, uintptr_t fnc); +void pFpppppppppp_32(x64emu_t *emu, uintptr_t fnc); +void pFXpuiipuuii_32(x64emu_t *emu, uintptr_t fnc); +void iFXiiLiiibiip_ip_32(x64emu_t *emu, uintptr_t fnc); +void iFXiLLiiibiip_ip_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiillliip_32(x64emu_t *emu, uintptr_t fnc); +void vFiiiiilllilp_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiiiuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiillliip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiuiiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuupupppppp_32(x64emu_t *emu, uintptr_t fnc); +void vFuuffiiffiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuufffffffff_32(x64emu_t *emu, uintptr_t fnc); +void vFuuddiiddiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuUuuuuuuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuffffffffff_32(x64emu_t *emu, uintptr_t fnc); +void vFUufffffffff_32(x64emu_t *emu, uintptr_t fnc); +void vFpiiiiiiiiuu_32(x64emu_t *emu, uintptr_t fnc); +void vFpipipiipiiu_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLppiiiiuu_32(x64emu_t *emu, uintptr_t fnc); +void iFEXpLLiiLWpi_32(x64emu_t *emu, uintptr_t fnc); +void iFuiiiiuuiiip_32(x64emu_t *emu, uintptr_t fnc); +void iFXLLpiiuuiiL_32(x64emu_t *emu, uintptr_t fnc); +void pFEXpuiipuuii_32(x64emu_t *emu, uintptr_t fnc); +void iFXiiLLiiibiip_ip_32(x64emu_t *emu, uintptr_t fnc); +void vFXiLLrLiiuL_iiiipi_32(x64emu_t *emu, uintptr_t fnc); +void iFXLibL_iiiibL_bL_bL__32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiiiiuUC_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiiiuuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiiiiiuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiiiiuip_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuuuuuuuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFffffffffffff_32(x64emu_t *emu, uintptr_t fnc); +void vFXiLLpiiiipii_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLppiiiiuui_32(x64emu_t *emu, uintptr_t fnc); +void iFXLpppppppppp_32(x64emu_t *emu, uintptr_t fnc); +void pFEXLiiuuLipii_32(x64emu_t *emu, uintptr_t fnc); +void vFXiLLrLiiuL_Liiiipi_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiiiiiuup_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuuuuuuuuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuUuuuuuuuuuuu_32(x64emu_t *emu, uintptr_t fnc); +void vFuffffffffffff_32(x64emu_t *emu, uintptr_t fnc); +void vFXiLLLiiiiiiuu_32(x64emu_t *emu, uintptr_t fnc); +void iFEXLLlliLppppp_32(x64emu_t *emu, uintptr_t fnc); +void iFddddpppddpppp_32(x64emu_t *emu, uintptr_t fnc); +void iFXippuuuiipppp_32(x64emu_t *emu, uintptr_t fnc); +void uFippuuuulllipp_32(x64emu_t *emu, uintptr_t fnc); +void LFEXLiiuuuiupLp_32(x64emu_t *emu, uintptr_t fnc); +void iFXLLlliiLBL_pBL_BL_Bp__32(x64emu_t *emu, uintptr_t fnc); +void vFuffiiffiiffiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuddiiddiiddiip_32(x64emu_t *emu, uintptr_t fnc); +void vFuiiiiiuiiiiilll_32(x64emu_t *emu, uintptr_t fnc); +void vFuuiiiiuuiiiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFfffffffffffffff_32(x64emu_t *emu, uintptr_t fnc); +void vFuuuuiiiiuuiiiiiii_32(x64emu_t *emu, uintptr_t fnc); +void vFXpuiiiiipuiiiiiiii_32(x64emu_t *emu, uintptr_t fnc); +void uFippuuuuiiiiuuiiiiiiiipp_32(x64emu_t *emu, uintptr_t fnc); + +#if defined(HAVE_LD80BITS) +void DED_32(x64emu_t *emu, uintptr_t fnc); +void DEDD_32(x64emu_t *emu, uintptr_t fnc); +void DEDp_32(x64emu_t *emu, uintptr_t fnc); +void DEpBp_a_32(x64emu_t *emu, uintptr_t fnc); +#endif + +#if !defined(HAVE_LD80BITS) +void KEK_32(x64emu_t *emu, uintptr_t fnc); +void KEKK_32(x64emu_t *emu, uintptr_t fnc); +void KEKp_32(x64emu_t *emu, uintptr_t fnc); +void KEpBp_a_32(x64emu_t *emu, uintptr_t fnc); +#endif + +void iEEvpp_32(x64emu_t *emu, uintptr_t fnc); +void iEEvpV_32(x64emu_t *emu, uintptr_t fnc); +void UEsvvs_32(x64emu_t *emu, uintptr_t fnc); +void pEEppv_32(x64emu_t *emu, uintptr_t fnc); +void LEpBp_iv_32(x64emu_t *emu, uintptr_t fnc); +void iEEivpV_32(x64emu_t *emu, uintptr_t fnc); +void iEESvpp_32(x64emu_t *emu, uintptr_t fnc); +void iEESvpV_32(x64emu_t *emu, uintptr_t fnc); +void iEEpvvpV_32(x64emu_t *emu, uintptr_t fnc); +void iEEpLvvpp_32(x64emu_t *emu, uintptr_t fnc); +#endif // __WRAPPER32_H_ diff --git a/src/wrapped32/wrappedcrashhandler.c b/src/wrapped32/wrappedcrashhandler.c new file mode 100755 index 0000000000000000000000000000000000000000..8e8e68fa1ba3c0916a3d7995945ca8265a98a969 --- /dev/null +++ b/src/wrapped32/wrappedcrashhandler.c @@ -0,0 +1,32 @@ +#define _GNU_SOURCE +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" + +static const char* crashhandlerName = "crashhandler.so"; +#define LIBNAME crashhandler + +#define PRE_INIT \ + if(!box64_dummy_crashhandler) \ + return -1; \ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);\ + else + + +#include "wrappedlib_init32.h" + diff --git a/src/wrapped32/wrappedcrashhandler_private.h b/src/wrapped32/wrappedcrashhandler_private.h new file mode 100755 index 0000000000000000000000000000000000000000..52ed57d653f4e6aa4a51732e61a1aec7e7bf7c77 --- /dev/null +++ b/src/wrapped32/wrappedcrashhandler_private.h @@ -0,0 +1,49 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh.... +#endif + +//GO(Breakpad_SetSteamID, +//DATAB(__bss_start, +//GO(CreateInterface, +//DATAB(_edata, +//DATAB(_end, +//GO(_fini, +//GO(_init, +//GO(SteamRealPath, +//GO(__wrap_access, +//GO(__wrap_chmod, +//GO(__wrap_chown, +//GO(__wrap_dlmopen, +//GO(__wrap_dlopen, +//GO(__wrap_fopen, +//GO(__wrap_fopen64, +//GO(__wrap_freopen, +//GO(__wrap_lchown, +//GO(__wrap_link, +//GO(__wrap_lstat, +//GO(__wrap_lstat64, +//GO(__wrap___lxstat, +//GO(__wrap___lxstat64, +//GO(__wrap_mkdir, +//GO(__wrap_mkfifo, +//GO(__wrap_mknod, +//GO(__wrap_mount, +//GO(__wrap_open, +//GO(__wrap_open64, +//GO(__wrap_opendir, +//GO(__wrap_rename, +//GO(__wrap_rmdir, +//GO(__wrap_scandir, +//GO(__wrap_scandir64, +//GO(__wrap_stat, +//GO(__wrap_stat64, +//GO(__wrap_statfs, +//GO(__wrap_statfs64, +//GO(__wrap_statvfs, +//GO(__wrap_statvfs64, +//GO(__wrap_symlink, +//GO(__wrap_unlink, +//GO(__wrap_utime, +//GO(__wrap_utimes, +//GO(__wrap___xstat, +//GO(__wrap___xstat64, diff --git a/src/wrapped32/wrappedexpat.c b/src/wrapped32/wrappedexpat.c new file mode 100644 index 0000000000000000000000000000000000000000..e63d394fb6117d46f58721e57d155e452be53e2d --- /dev/null +++ b/src/wrapped32/wrappedexpat.c @@ -0,0 +1,795 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" + +static const char* expatName = "libexpat.so.1"; +#define LIBNAME expat + +#include "generated/wrappedexpattypes32.h" + +#include "wrappercallback32.h" + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// StartElementHandler ... +#define GO(A) \ +static uintptr_t my_StartElementHandler_fct_##A = 0; \ +static void* my_StartElementHandler_##A(void* data, void* name, void** attr) \ +{ \ + int cnt = 0; \ + while(attr[cnt]) cnt+=2; \ + ++cnt; \ + ptr_t attr_s[cnt]; \ + for(int i=0; iXML_SetElementHandler(p, find_StartElementHandler_Fct(start), find_End_Fct(end)); +} + +EXPORT void my32_XML_SetCharacterDataHandler(x64emu_t* emu, void* p, void* h) +{ + my->XML_SetCharacterDataHandler(p, find_CharData_Fct(h)); +} + +//EXPORT void my32_XML_SetNamespaceDeclHandler(x64emu_t* emu, void* p, void* start, void* end) +//{ +// my->XML_SetNamespaceDeclHandler(p, find_StartNamespaceDecl_Fct(start), find_EndNamespaceDecl_Fct(end)); +//} + +//EXPORT void my32_XML_SetEntityDeclHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetEntityDeclHandler(p, find_EntityDecl_Fct(f)); +//} + +//EXPORT void my32_XML_SetStartDoctypeDeclHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetStartDoctypeDeclHandler(p, find_StartDoctypeDecl_Fct(f)); +//} + +//EXPORT void my32_XML_SetEndDoctypeDeclHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetEndDoctypeDeclHandler(p, find_EndDoctypeDecl_Fct(f)); +//} + +//EXPORT void my32_XML_SetElementDeclHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetElementDeclHandler(p, find_ElementDecl_Fct(f)); +//} + +//EXPORT void my32_XML_SetDefaultHandlerExpand(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetDefaultHandlerExpand(p, find_Default_Fct(f)); +//} + +//EXPORT void my32_XML_SetCommentHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetCommentHandler(p, find_Comment_Fct(f)); +//} + +//EXPORT void my32_XML_SetProcessingInstructionHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetProcessingInstructionHandler(p, find_ProcessingInstruction_Fct(f)); +//} + +//EXPORT void my32_XML_SetStartElementHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetStartElementHandler(p, find_StartElement_Fct(f)); +//} + +//EXPORT void my32_XML_SetEndElementHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetEndElementHandler(p, find_EndElement_Fct(f)); +//} + +//EXPORT void my32_XML_SetUnknownEncodingHandler(x64emu_t* emu, void* p, void* f, void* d) +//{ +// my->XML_SetUnknownEncodingHandler(p, find_UnknownEncoding_Fct(f), d); +//} + +//EXPORT void my32_XML_SetUnparsedEntityDeclHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetUnparsedEntityDeclHandler(p, find_UnparsedEntityDecl_Fct(f)); +//} + +//EXPORT void my32_XML_SetNotationDeclHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetNotationDeclHandler(p, find_NotationDecl_Fct(f)); +//} + +//EXPORT void my32_XML_SetStartNamespaceDeclHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetStartNamespaceDeclHandler(p, find_StartNamespaceDecl_Fct(f)); +//} + +//EXPORT void my32_XML_SetEndNamespaceDeclHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetEndNamespaceDeclHandler(p, find_EndNamespaceDecl_Fct(f)); +//} + +//EXPORT void my32_XML_SetStartCdataSectionHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetStartCdataSectionHandler(p, find_StartCdataSection_Fct(f)); +//} + +//EXPORT void my32_XML_SetEndCdataSectionHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetEndCdataSectionHandler(p, find_EndCdataSection_Fct(f)); +//} + +//EXPORT void my32_XML_SetDefaultHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetDefaultHandler(p, find_Default_Fct(f)); +//} + +//EXPORT void my32_XML_SetNotStandaloneHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetNotStandaloneHandler(p, find_NotStandalone_Fct(f)); +//} + +//EXPORT void my32_XML_SetExternalEntityRefHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetExternalEntityRefHandler(p, find_ExternalEntityRef_Fct(f)); +//} + +//EXPORT void my32_XML_SetXmlDeclHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetXmlDeclHandler(p, find_XmlDecl_Fct(f)); +//} + +//EXPORT void my32_XML_SetAttlistDeclHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetAttlistDeclHandler(p, find_AttlistDecl_Fct(f)); +//} + +//EXPORT void my32_XML_SetSkippedEntityHandler(x64emu_t* emu, void* p, void* f) +//{ +// my->XML_SetSkippedEntityHandler(p, find_SkippedEntity_Fct(f)); +//} + +EXPORT void my32_XML_SetDoctypeDeclHandler(x64emu_t* emu, void* p, void* start, void* end) +{ + (void)emu; + my->XML_SetDoctypeDeclHandler(p, find_StartDoctypeDecl_Fct(start), find_EndDoctypeDecl_Fct(end)); +} + +// this function will call the callbacks with many structures created on the stack, wich might be a 64bits walue on the initial thred +// so using a swapcontext trick to use a 32bits stack temporarily +// TODO: generalise this on main? +static void func1(uint32_t* ret, void* p, int a, int b) +{ + *ret = my->XML_ParseBuffer(p, a, b); +} +ucontext_t uctx_main, uctx_func1; + +#ifndef ANDROID +EXPORT uint32_t my32_XML_ParseBuffer(x64emu_t* emu, void* p, int a, int b) +{ + getcontext(&uctx_func1); + size_t stack_size = 1024*1024; + void* func1_stack = mmap(NULL, stack_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_32BIT|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); + uctx_func1.uc_stack.ss_sp = func1_stack; + uctx_func1.uc_stack.ss_size = stack_size; + uctx_func1.uc_link = &uctx_main; + uint32_t ret = 0; + makecontext(&uctx_func1, (void*)func1, 4, &ret, p, a, b); + swapcontext(&uctx_main, &uctx_func1); + munmap(func1_stack, stack_size); + return ret; +} +#endif + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedexpat_private.h b/src/wrapped32/wrappedexpat_private.h new file mode 100644 index 0000000000000000000000000000000000000000..5de7b18fedd53168d5cc2cd3c70a6355c9bf48fc --- /dev/null +++ b/src/wrapped32/wrappedexpat_private.h @@ -0,0 +1,71 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +//GO(_INTERNAL_trim_to_complete_utf8_characters, +//GO(XML_DefaultCurrent, vFp) +GO(XML_ErrorString, pFu) +//GO(XML_ExpatVersion, pFv) +//GO(XML_ExpatVersionInfo, pFp) // return a struct of 3 int. Use shadow pointer on ARM64 and x86_64 +//GO(XML_ExternalEntityParserCreate, pFppp) +//GO(XML_FreeContentModel, vFpp) +//GO(XML_GetBase, pFp) +GO(XML_GetBuffer, pFpi) +//GO(XML_GetCurrentByteCount, iFp) +//GO(XML_GetCurrentByteIndex, lFp) +//GO(XML_GetCurrentColumnNumber, LFp) +GO(XML_GetCurrentLineNumber, LFp) +GO(XML_GetErrorCode, uFp) +//GO(XML_GetFeatureList, pFv) +//GO(XML_GetIdAttributeIndex, iFp) +//GO(XML_GetInputContext, pFppp) +//GO(XML_GetParsingStatus, vFpp) +//GO(XML_GetSpecifiedAttributeCount, iFp) +//GO(XML_MemFree, vFpp) +//GO(XML_MemMalloc, pFpL) +//GO(XML_MemRealloc, pFppL) +//GO(XML_Parse, uFppii) +GOM(XML_ParseBuffer, uFEpii) +GO(XML_ParserCreate, pFp) +//GO(XML_ParserCreate_MM, pFpppp) // return a structure +//GO(XML_ParserCreateNS, pFpc) +GO(XML_ParserFree, vFp) +//GO(XML_ParserReset, CFpp) +//GO(XML_ResumeParser, uFp) +//GOM(XML_SetAttlistDeclHandler, vFEpp) +//GO(XML_SetBase, uFpp) +//GOM(XML_SetCdataSectionHandler, vFEppp) +GOM(XML_SetCharacterDataHandler, vFEpp) +//GOM(XML_SetCommentHandler, vFEpp) +//GOM(XML_SetDefaultHandler, vFEpp) +//GOM(XML_SetDefaultHandlerExpand, vFEpp) +GOM(XML_SetDoctypeDeclHandler, vFEppp) +//GOM(XML_SetElementDeclHandler, vFEpp) +GOM(XML_SetElementHandler, vFEppp) +//GO(XML_SetEncoding, uFpp) +//GOM(XML_SetEndCdataSectionHandler, vFEpp) +//GOM(XML_SetEndDoctypeDeclHandler, vFEpp) +//GOM(XML_SetEndElementHandler, vFEpp) +//GOM(XML_SetEndNamespaceDeclHandler, vFEpp) +//GOM(XML_SetEntityDeclHandler, vFEpp) +//GOM(XML_SetExternalEntityRefHandler, vFEpp) +//GO(XML_SetExternalEntityRefHandlerArg, vFpp) +//GO(XML_SetHashSalt, iFpL) +//GOM(XML_SetNamespaceDeclHandler, vFEppp) +//GOM(XML_SetNotationDeclHandler, vFEpp) +//GOM(XML_SetNotStandaloneHandler, vFEpp) +//GO(XML_SetParamEntityParsing, iFpu) +//GOM(XML_SetProcessingInstructionHandler, vFEpp) +//GO(XML_SetReturnNSTriplet, vFpi) +//GOM(XML_SetSkippedEntityHandler, vFEpp) +//GOM(XML_SetStartCdataSectionHandler, vFEpp) +//GOM(XML_SetStartDoctypeDeclHandler, vFEpp) +//GOM(XML_SetStartElementHandler, vFEpp) +//GOM(XML_SetStartNamespaceDeclHandler, vFEpp) +//GOM(XML_SetUnknownEncodingHandler, vFEppp) +//GOM(XML_SetUnparsedEntityDeclHandler, vFEpp) +GO(XML_SetUserData, vFpp) +//GOM(XML_SetXmlDeclHandler, vFEpp) +//GO(XML_StopParser, uFpC) +//GO(XML_UseForeignDTD, uFpC) +//GO(XML_UseParserAsHandlerArg, vFp) diff --git a/src/wrapped32/wrappedfontconfig.c b/src/wrapped32/wrappedfontconfig.c new file mode 100644 index 0000000000000000000000000000000000000000..6a103768424ce72d4d812b57e30a10ebf8547b3e --- /dev/null +++ b/src/wrapped32/wrappedfontconfig.c @@ -0,0 +1,240 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" + +typedef struct FcValue_s { + int type; + union { + const char *s; + int i; + int b; + double d; + void *m; //const FcMatrix + void *c; //const FcCharSet + void *f; + void *l; //const FcLangSet + } u; +} FcValue_t; + +typedef struct FcPattern_s { + int num; + int size; + intptr_t elts_offset; + int ref; +} FcPattern_t; + +typedef struct FcFontSet_s { + int nfont; + int sfont; + FcPattern_t **fonts; +} FcFontSet_t; + +typedef struct FcStrSet_s { + int ref; + int num; + int size; + void **strs; +} FcStrSet_t; + +typedef struct FcBlanks_s { + int nblank; + int sblank; + void *blanks; +} FcBlanks_t; + +typedef struct FcConfig_s { + FcStrSet_t *configDirs; + FcBlanks_t *blanks; + FcStrSet_t *fontDirs; + FcStrSet_t *cacheDirs; + FcStrSet_t *configFiles; + void *substPattern; //FcSubst + void *substFont; //FcSubst + void *substScan; //FcSubst + int maxObjects; + FcStrSet_t *acceptGlobs; + FcStrSet_t *rejectGlobs; + FcFontSet_t *acceptPatterns; + FcFontSet_t *rejectPatterns; + FcFontSet_t *fonts[2]; + time_t rescanTime; + int rescanInterval; + int ref; + void *expr_pool; //FcExprPage +} FcConfig_t; + +// 32bits structures + +typedef struct __attribute__((packed, aligned(4))) FcValue_32_s { + int type; + union { + ptr_t s;//const char * + int i; + int b; + double d; + ptr_t m; //const FcMatrix* + ptr_t c; //const FcCharSet* + ptr_t f; //void* + ptr_t l; //const FcLangSet* + } u; +} FcValue_32_t; + +typedef struct FcPattern_32_s { + int num; + int size; + long_t elts_offset; + int ref; +} FcPattern_32_t; + +typedef struct FcFontSet_32_s { + int nfont; + int sfont; + ptr_t fonts;//FcPattern_t ** +} FcFontSet_32_t; + +typedef struct FcStrSet_32_s { + int ref; + int num; + int size; + ptr_t strs; //void ** +} FcStrSet_32_t; + +typedef struct FcBlanks_32_s { + int nblank; + int sblank; + ptr_t blanks; //void * +} FcBlanks_32_t; + +typedef struct FcConfig_32_s { + ptr_t configDirs; //FcStrSet_t* + ptr_t blanks; //FcBlanks_t* + ptr_t fontDirs; //FcStrSet_t* + ptr_t cacheDirs; //FcStrSet_t* + ptr_t configFiles; //FcStrSet_t* + ptr_t substPattern; //FcSubst* + ptr_t substFont; //FcSubst* + ptr_t substScan; //FcSubst* + int maxObjects; + ptr_t acceptGlobs; //FcStrSet_t* + ptr_t rejectGlobs; //FcStrSet_t* + ptr_t acceptPatterns; //FcFontSet_t* + ptr_t rejectPatterns; //FcFontSet_t* + ptr_t fonts[2]; //FcFontSet_t* + long_t rescanTime; + int rescanInterval; + int ref; + ptr_t expr_pool; //FcExprPage* +} FcConfig_32_t; + +#ifdef ANDROID + static const char* fontconfigName = "libfontconfig.so"; +#else + static const char* fontconfigName = "libfontconfig.so.1"; +#endif + +#define LIBNAME fontconfig + +#define ADDED_STRUCT() \ + iFppSi_t FcPatternAdd_; \ + +#define ADDED_INIT() \ + my->FcPatternAdd_ = (void*)my->FcPatternAdd;\ + +typedef int (*iFppSi_t)(void*, void*, FcValue_t, int); + +#include "generated/wrappedfontconfigtypes32.h" + +#include "wrappercallback32.h" + +//EXPORT void* my_FcObjectSetVaBuild(x64emu_t* emu, void* first, x64_va_list_t V) +//{ +// #ifdef CONVERT_VALIST +// CONVERT_VALIST(V); +// #else +// CREATE_VALIST_FROM_VALIST(V, emu->scratch); +// #endif +// return my->FcObjectSetVaBuild(first, VARARGS); +//} +//EXPORT void* my_FcObjectSetBuild(x64emu_t* emu, void* first, uint64_t* b) +//{ +// if(!first) +// return my->FcObjectSetBuild(first, NULL); +// CREATE_VALIST_FROM_VAARG(b, emu->scratch, 1); +// return my->FcObjectSetVaBuild(first, VARARGS); +//} + +//EXPORT void* my_FcPatternVaBuild(x64emu_t* emu, void* pattern, x64_va_list_t V) +//{ +// #ifdef CONVERT_VALIST +// CONVERT_VALIST(V); +// #else +// CREATE_VALIST_FROM_VALIST(V, emu->scratch); +// #endif +// return my->FcPatternVaBuild(pattern, VARARGS); +//} +//EXPORT void* my_FcPatternBuild(x64emu_t* emu, void* pattern, uint64_t* b) +//{ +// if(!pattern) +// return my->FcPatternBuild(pattern, NULL); +// CREATE_VALIST_FROM_VAARG(b, emu->scratch, 1); +// return my->FcPatternVaBuild(pattern, VARARGS); +//} + +typedef union fcvalue_32s { + ptr_t p; + double d; + int i; +} fcvalue_32_t; +EXPORT int my32_FcPatternAdd(void* p, void* object, int type, fcvalue_32_t t, int append) +{ + // adjusting value "t" of the FcValue + FcValue_t val = {0}; + val.type = type; + switch(type) { + case 3: + case 5: + case 6: + case 7: + case 8: + case 9: + val.u.c = from_ptrv(t.p); + break; + case 2: + val.u.d = t.d; + case 1: + case 4: // just in case + val.u.i = t.i; + break; + } + return my->FcPatternAdd_(p, object, val, append); +} + +void inplace_FT_FaceRec_shrink(void* face); +void inplace_FT_FaceRec_enlarge(void* face); +EXPORT uint32_t my32_FcFreeTypeCharIndex(x64emu_t* emu, void* face, uint32_t u) +{ + inplace_FT_FaceRec_enlarge(face); + uint32_t ret = my->FcFreeTypeCharIndex(face, u); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +#define NEEDED_LIBS "libexpat.so.1", "libfreetype.so.6" + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedfontconfig_private.h b/src/wrapped32/wrappedfontconfig_private.h new file mode 100644 index 0000000000000000000000000000000000000000..c18ada7a9253b74afc76612ac09235d55ab4c2f1 --- /dev/null +++ b/src/wrapped32/wrappedfontconfig_private.h @@ -0,0 +1,204 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +// FcValue is a typedef with int+union, with biggest part is a double => so 3 "u32" on the stack + +GO(FcAtomicCreate, pFp) +GO(FcAtomicDeleteNew, vFp) +GO(FcAtomicDestroy, vFp) +GO(FcAtomicLock, iFp) +GO(FcAtomicNewFile, pFp) +GO(FcAtomicOrigFile, pFp) +GO(FcAtomicReplaceOrig, iFp) +GO(FcAtomicUnlock, vFp) +GO(FcBlanksAdd, iFpu) +GO(FcBlanksCreate, pFv) +GO(FcBlanksDestroy, vFp) +GO(FcBlanksIsMember, iFpu) +GO(FcCacheCopySet, pFp) //GO(FcCacheCopySet, biibp__Fp) +GO(FcCacheDir, pFp) +GO(FcCacheNumFont, iFp) +GO(FcCacheNumSubdir, iFp) +GO(FcCacheSubdir, pFpi) +GO(FcCharSetAddChar, iFpu) +GO(FcCharSetCopy, pFp) +GO(FcCharSetCount, uFp) +GO(FcCharSetCoverage, uFpup) +GO(FcCharSetCreate, pFv) +GO(FcCharSetDestroy, vFp) +GO(FcCharSetEqual, iFpp) +GO(FcCharSetFirstPage, uFppp) // second p is a fixed sized array +GO(FcCharSetHasChar, iFpu) +GO(FcCharSetIntersect, pFpp) +GO(FcCharSetIntersectCount, uFpp) +GO(FcCharSetIsSubset, iFpp) +GO(FcCharSetMerge, iFppp) +GO(FcCharSetNew, pFv) +GO(FcCharSetNextPage, uFppp) +GO(FcCharSetSubtract, pFpp) +GO(FcCharSetSubtractCount, uFpp) +GO(FcCharSetUnion, pFpp) +GO(FcConfigAppFontAddDir, iFpp) +GO(FcConfigAppFontAddFile, iFpp) +GO(FcConfigAppFontClear, vFp) +GO(FcConfigBuildFonts, iFp) +GO(FcConfigCreate, pFv) +GO(FcConfigDestroy, vFp) +GO(FcConfigEnableHome, iFi) +GO(FcConfigFilename, pFp) +GO(FcConfigGetBlanks, pFp) +GO(FcConfigGetCache, pFp) +GO(FcConfigGetCacheDirs, pFp) +GO(FcConfigGetConfigDirs, pFp) +GO(FcConfigGetConfigFiles, pFp) +GO(FcConfigGetCurrent, pFv) // need wrapping for FcConfig? +GO(FcConfigGetFontDirs, pFp) +//GO(FcConfigGetFonts, biibp__Fpu) +GO(FcConfigGetRescanInterval, iFp) +//GO(FcConfigGetRescanInverval, +GO(FcConfigGetSysRoot, pFp) +GO(FcConfigHome, pFv) +GO(FcConfigParseAndLoad, iFppi) +GO(FcConfigReference, pFp) +GO(FcConfigSetCurrent, iFp) +GO(FcConfigSetRescanInterval, iFpi) +//GO(FcConfigSetRescanInverval, +GO(FcConfigSubstitute, iFppu) // might need wrapping, 1st arg is FcConfig +GO(FcConfigSubstituteWithPat, iFpppu) +GO(FcConfigUptoDate, iFp) +GO(FcDefaultSubstitute, vFp) +GO(FcDirCacheLoad, pFppbp_) +//GO(FcDirCacheLoadFile, pFpp) +GO(FcDirCacheRead, pFpip) +GO(FcDirCacheUnlink, iFpp) +GO(FcDirCacheUnload, vFp) +GO(FcDirCacheValid, iFp) +//GO(FcDirSave, iFbiibp__pp) +//GO(FcDirScan, iFbiibp__ppppi) +GO(FcFileIsDir, iFp) +//GO(FcFileScan, iFbiibp__ppppi) +GO(FcFini, vFv) +GO(FcFontList, pFppp) // need wrapping of returned FcFontSet? GO(FcFontList, biibp__Fppbiibp__) +GO(FcFontMatch, pFppp) +GO(FcFontRenderPrepare, pFppp) +//GO(FcFontSetAdd, iFbiibp__p) +//GO(FcFontSetCreate, biibp__Fv) +GO(FcFontSetDestroy, vFp) //GO(FcFontSetDestroy, vFbiibp__) +//GO(FcFontSetList, biibp__Fpbbiibp___ipbiibp__) +//GO(FcFontSetMatch, pFpbbiibp___ipp) +//GO(FcFontSetPrint, vFbiibp__) +//GO(FcFontSetSort, biibp__Fpbbiibp___ipibp_p) +//GO(FcFontSetSortDestroy, vFbiibp__) +//GO(FcFontSort, biibp__Fppibp_p) +GOM(FcFreeTypeCharIndex, uFEpu) +//GO(FcFreeTypeCharSet, +//GO(FcFreeTypeCharSetAndSpacing, +GO(FcFreeTypeQuery, pFpupp) +//GO(FcFreeTypeQueryFace, pFppip) +GO(FcGetLangs, pFv) +GO(FcGetVersion, iFv) +GO(FcInit, iFv) +GO(FcInitBringUptoDate, iFv) +GO(FcInitLoadConfig, pFv) +GO(FcInitLoadConfigAndFonts, pFv) +GO(FcInitReinitialize, iFv) +GO(FcLangGetCharSet, pFp) +GO(FcLangSetAdd, iFpp) +GO(FcLangSetCompare, uFpp) +GO(FcLangSetContains, iFpp) +GO(FcLangSetCopy, pFp) +GO(FcLangSetCreate, pFv) +GO(FcLangSetDestroy, vFp) +GO(FcLangSetEqual, iFpp) +GO(FcLangSetGetLangs, pFp) +GO(FcLangSetHash, uFp) +GO(FcLangSetHasLang, uFpp) +GO(FcMatrixCopy, pFp) +GO(FcMatrixEqual, iFpp) +GO(FcMatrixMultiply, vFppp) +GO(FcMatrixRotate, vFpdd) +GO(FcMatrixScale, vFpdd) +GO(FcMatrixShear, vFpdd) +GO(FcNameConstant, iFpp) +//GO(FcNameGetConstant, bppi_Fp) +//GO(FcNameGetObjectType, bpi_Fp) +GO(FcNameParse, pFp) +GO(FcNameRegisterConstants, iFbppi_i) +GO(FcNameRegisterObjectTypes, iFbpi_i) +GO(FcNameUnparse, pFp) +GO(FcNameUnregisterConstants, iFbppi_i) +GO(FcNameUnregisterObjectTypes, iFbpi_i) +GO(FcObjectSetAdd, iFpp) //GO(FcObjectSetAdd, iFbiibp__p) +//GOM(FcObjectSetBuild, biibp__FEpV) +GO(FcObjectSetCreate, pFv) //GO(FcObjectSetCreate, biibp__Fv) +GO(FcObjectSetDestroy, vFp) //GO(FcObjectSetDestroy, vFbiibp__) +//GOM(FcObjectSetVaBuild, biibp__FEpp) +GOM(FcPatternAdd, iFppiUi) //%noE //need M for the iU that is a an FcValue +GO(FcPatternAddBool, iFppi) +GO(FcPatternAddCharSet, iFppp) +GO(FcPatternAddDouble, iFppd) +//GO(FcPatternAddFTFace, iFppp) +GO(FcPatternAddInteger, iFppi) +GO(FcPatternAddLangSet, iFppp) +GO(FcPatternAddMatrix, iFppp) +GO(FcPatternAddString, iFppp) +//GO(FcPatternAddWeak, iFppiLi) +//GOM(FcPatternBuild, pFEpV) +GO(FcPatternCreate, pFv) +GO(FcPatternDel, iFpp) +GO(FcPatternDestroy, vFp) +GO(FcPatternDuplicate, pFp) +GO(FcPatternEqual, iFpp) +//GO(FcPatternEqualSubset, iFppbiibp__) +//GO(FcPatternFilter, pFpbiibp__) +GO(FcPatternFormat, pFpp) +GO(FcPatternGet, uFppip) +GO(FcPatternGetBool, uFppip) +GO(FcPatternGetCharSet, uFppibp_) +GO(FcPatternGetDouble, uFppip) +//GO(FcPatternGetFTFace, iFppip) +GO(FcPatternGetInteger, uFppip) +GO(FcPatternGetLangSet, uFppibp_) +GO(FcPatternGetMatrix, uFppibp_) +GO(FcPatternGetString, uFppibp_) +GO(FcPatternHash, uFp) +GO(FcPatternPrint, vFp) +GO(FcPatternReference, vFp) +GO(FcPatternRemove, iFppi) +//GOM(FcPatternVaBuild, pFEpp) +GO(FcStrBasename, pFp) +GO(FcStrCmp, iFpp) +GO(FcStrCmpIgnoreCase, iFpp) +GO(FcStrCopy, pFp) +GO(FcStrCopyFilename, pFp) +GO(FcStrDirname, pFp) +GO(FcStrDowncase, pFp) +GO(FcStrFree, vFp) +GO(FcStrListCreate, pFp) +GO(FcStrListDone, vFp) +GO(FcStrListFirst, vFp) +GO(FcStrListNext, pFp) +GO(FcStrPlus, pFpp) +GO(FcStrSetAdd, iFpp) +GO(FcStrSetAddFilename, iFpp) +GO(FcStrSetCreate, pFv) +GO(FcStrSetDel, iFpp) +GO(FcStrSetDestroy, vFp) +GO(FcStrSetEqual, iFpp) +GO(FcStrSetMember, iFpp) +GO(FcStrStr, pFpp) +GO(FcStrStrIgnoreCase, pFpp) +GO(FcUcs4ToUtf8, iFup) +GO(FcUtf16Len, iFpuipp) +GO(FcUtf16ToUcs4, iFpupi) +GO(FcUtf8Len, iFpipp) +GO(FcUtf8ToUcs4, iFppi) +//GO(FcValueDestroy, +//GO(FcValueEqual, +//GO(FcValuePrint, +//GO(FcValueSave, +GO(FcWeightFromOpenTypeDouble, dFd) +GO(FcWeightToOpenTypeDouble, dFd) +//GO(_fini, +//GO(_init, diff --git a/src/wrapped32/wrappedfreetype.c b/src/wrapped32/wrappedfreetype.c new file mode 100644 index 0000000000000000000000000000000000000000..82a7c9423161a685b6a09b0d976d864266664d0e --- /dev/null +++ b/src/wrapped32/wrappedfreetype.c @@ -0,0 +1,1968 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" + +static const char* freetypeName = +#ifdef ANDROID + "libfreetype.so" +#else + "libfreetype.so.6" +#endif + ; +#define LIBNAME freetype + +typedef void (*vFp_t)(void*); + + +// 64bits FreeType structures +typedef union FT_StreamDesc_s +{ + long value; + void* pointer; +} FT_StreamDesc_t; + +typedef struct FT_StreamRec_s +{ + unsigned char* base; + unsigned long size; + unsigned long pos; + FT_StreamDesc_t descriptor; + FT_StreamDesc_t pathname; + void* read; + void* close; + void* memory; + unsigned char* cursor; + unsigned char* limit; +} FT_StreamRec_t; + +typedef struct FT_BBox_s +{ + signed long xMin, yMin; + signed long xMax, yMax; +} FT_BBox_t; +typedef struct FT_Generic_s +{ + void* data; + vFp_t finalizer; +} FT_Generic_t; +typedef struct FT_ListRec_s +{ + void* head; + void* tail; +} FT_ListRec_t; + +typedef struct FT_Vector_s +{ + long x; + long y; +} FT_Vector_t; + +typedef struct FT_Bitmap_Size_s +{ + short height; + short width; + long size; + long x_ppem; + long y_ppem; +} FT_Bitmap_Size_t; + +typedef struct FT_Glyph_Metrics_s +{ + long width; + long height; + long horiBearingX; + long horiBearingY; + long horiAdvance; + long vertBearingX; + long vertBearingY; + long vertAdvance; +} FT_Glyph_Metrics_t; + +typedef struct FT_Outline_s +{ + unsigned short n_contours; + unsigned short n_points; + FT_Vector_t* points; + unsigned char* tags; + unsigned short* contours; + int flags; +} FT_Outline_t; + +typedef struct FT_Bitmap_s +{ + unsigned int rows; + unsigned int width; + int pitch; + unsigned char* buffer; + unsigned short num_grays; + unsigned char pixel_mode; + unsigned char palette_mode; + void* palette; +} FT_Bitmap_t; + +typedef struct FT_GlyphSlotRec_s +{ + void* library; //FT_Library + void* face; //FT_Face + struct FT_GlyphSlotRec_s* next; + uint32_t glyph_index; + FT_Generic_t generic; + FT_Glyph_Metrics_t metrics; + long linearHoriAdvance; + long linearVertAdvance; + FT_Vector_t advance; + int format; + FT_Bitmap_t bitmap; + int bitmap_left; + int bitmap_top; + FT_Outline_t outline; + uint32_t num_subglyphs; + void* subglyphs; //FT_SubGlyph + void* control_data; + long control_len; + long lsb_delta; + long rsb_delta; + void* other; + void* internal; +} FT_GlyphSlotRec_t; + +typedef struct FT_CharMapRec_s +{ + void* face; //FT_FaceRec_t* + int encoding; + uint16_t platform_id; + uint16_t encoding_id; +} FT_CharMapRec_t; + +typedef struct FT_Size_Metrics_s +{ + uint16_t x_ppem; + uint16_t y_ppem; + long x_scale; + long y_scale; + long ascender; + long descender; + long height; + long max_advance; +} FT_Size_Metrics_t; + +typedef struct FT_SizeRec_s +{ + void* face; //FT_FaceRec_t* + FT_Generic_t generic; + FT_Size_Metrics_t metrics; + void* internal; //FT_Size_Internal +} FT_SizeRec_t; + +typedef struct FT_FaceRec_s +{ + signed long num_faces; + signed long face_index; + signed long face_flags; + signed long style_flags; + signed long num_glyphs; + char* family_name; + char* style_name; + int num_fixed_sizes; + FT_Bitmap_Size_t* available_sizes; + int num_charmaps; + FT_CharMapRec_t** charmaps; + FT_Generic_t generic; + FT_BBox_t bbox; + uint16_t units_per_EM; + int16_t ascender; + int16_t descender; + int16_t height; + int16_t max_advance_width; + int16_t max_advance_height; + int16_t underline_position; + int16_t underline_thickness; + FT_GlyphSlotRec_t* glyph; + FT_SizeRec_t* size; + void* charmap; //FT_CharMapRec_t* + /*@private begin */ + void* driver; + void* memory; + FT_StreamDesc_t* stream; + FT_ListRec_t sizes_list; + FT_Generic_t autohint; /* face-specific auto-hinter data */ + void* extensions; /* unused */ + void* internal; +} FT_FaceRec_t; + +typedef struct FT_MemoryRec_s +{ + void* user; + void* alloc; + void* free; + void* realloc; +} FT_MemoryRec_t; + +typedef struct PS_PrivateRec_s +{ + int unique_id; + int lenIV; + uint8_t num_blue_values; + uint8_t num_other_blues; + uint8_t num_family_blues; + uint8_t num_family_other_blues; + int16_t blue_values[14]; + int16_t other_blues[10]; + int16_t family_blues [14]; + int16_t family_other_blues[10]; + long blue_scale; + int blue_shift; + int blue_fuzz; + uint16_t standard_width[1]; + uint16_t standard_height[1]; + uint8_t num_snap_widths; + uint8_t num_snap_heights; + uint8_t force_bold; + uint8_t round_stem_up; + int16_t snap_widths [13]; + int16_t snap_heights[13]; + long expansion_factor; + long language_group; + long password; + int16_t min_feature[2]; +} PS_PrivateRec_t; + +typedef struct BDF_PropertyRec_s +{ + int type; + union { + void* atom; //const char* + int integer; + uint32_t cardinal; + + } u; +} BDF_PropertyRec_t; + +typedef struct FT_Size_RequestRec_s +{ + int type; + long width; + long height; + uint32_t horiResolution; + uint32_t vertResolution; +} FT_Size_RequestRec_t; + +typedef struct FT_Parameter_s +{ + unsigned long tag; + void* data; +} FT_Parameter_t; + +typedef struct FT_Open_Args_s +{ + uint32_t flags; + uint8_t* memory_base; + long memory_size; + char* pathname; + FT_StreamRec_t* stream; + void* driver; //FT_ModuleRec + int num_params; + FT_Parameter_t* params; +} FT_Open_Args_t; + +typedef struct FT_WinFNT_HeaderRec_s +{ + uint16_t version; + unsigned long file_size; + uint8_t copyright[60]; + uint16_t file_type; + uint16_t nominal_point_size; + uint16_t vertical_resolution; + uint16_t horizontal_resolution; + uint16_t ascent; + uint16_t internal_leading; + uint16_t external_leading; + uint8_t italic; + uint8_t underline; + uint8_t strike_out; + uint16_t weight; + uint8_t charset; + uint16_t pixel_width; + uint16_t pixel_height; + uint8_t pitch_and_family; + uint16_t avg_width; + uint16_t max_width; + uint8_t first_char; + uint8_t last_char; + uint8_t default_char; + uint8_t break_char; + uint16_t bytes_per_row; + unsigned long device_offset; + unsigned long face_name_offset; + unsigned long bits_pointer; + unsigned long bits_offset; + uint8_t reserved; + unsigned long flags; + uint16_t A_space; + uint16_t B_space; + uint16_t C_space; + uint16_t color_table_offset; + unsigned long reserved1[4]; +} FT_WinFNT_HeaderRec_t; + +typedef struct FT_Matrix_s +{ + long xx, xy; + long yx, yy; +} FT_Matrix_t; + +// =============================================== +// 32bits FreeType structures +// =============================================== + +typedef union __attribute__((packed, aligned(4))) FT_StreamDesc_32_s +{ + long_t value; + ptr_t pointer; //void* +} FT_StreamDesc_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_StreamRec_32_s +{ + ptr_t base; //unsigned char* + ulong_t size; + ulong_t pos; + + FT_StreamDesc_32_t descriptor; + FT_StreamDesc_32_t pathname; + ptr_t read; //void* + ptr_t close; //void* + + ptr_t memory; //void* + ptr_t cursor; //unsigned char* + ptr_t limit; //unsigned char* + +} FT_StreamRec_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_BBox_32_s +{ + long_t xMin, yMin; + long_t xMax, yMax; +} FT_BBox_32_t; +typedef struct __attribute__((packed, aligned(4))) FT_Generic_32_s +{ + ptr_t data; //void* + ptr_t finalizer; //vFp_t +} FT_Generic_32_t; +typedef struct __attribute__((packed, aligned(4))) FT_ListRec_32_s +{ + ptr_t head; //void* + ptr_t tail; //void* +} FT_ListRec_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_Vector_32_s +{ + long_t x; + long_t y; +} FT_Vector_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_Bitmap_Size_32_s +{ + short height; + short width; + long_t size; + long_t x_ppem; + long_t y_ppem; +} FT_Bitmap_Size_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_Glyph_Metrics_32_s +{ + long_t width; + long_t height; + long_t horiBearingX; + long_t horiBearingY; + long_t horiAdvance; + long_t vertBearingX; + long_t vertBearingY; + long_t vertAdvance; +} FT_Glyph_Metrics_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_Outline_32_s +{ + unsigned short n_contours; + unsigned short n_points; + ptr_t points; //FT_Vector_32_t* + ptr_t tags; //unsigned char* + ptr_t contours; //unsigned short* + int flags; +} FT_Outline_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_Bitmap_32_s +{ + unsigned int rows; + unsigned int width; + int pitch; + ptr_t buffer; //unsigned char* + unsigned short num_grays; + unsigned char pixel_mode; + unsigned char palette_mode; + ptr_t palette; //void* +} FT_Bitmap_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_GlyphSlotRec_32_s +{ + ptr_t library; //FT_Library + ptr_t face; //FT_Face + ptr_t next; //struct FT_GlyphSlotRec_s* + uint32_t glyph_index; + FT_Generic_32_t generic; //0x10 + FT_Glyph_Metrics_32_t metrics; //0x18 + long_t linearHoriAdvance; //0x38 + long_t linearVertAdvance; + FT_Vector_32_t advance; //0x40 + int format; + FT_Bitmap_32_t bitmap; //0x4c + int bitmap_left; + int bitmap_top; + FT_Outline_32_t outline; + uint32_t num_subglyphs; + ptr_t subglyphs; //FT_SubGlyph + ptr_t control_data; + long_t control_len; + long_t lsb_delta; + long_t rsb_delta; + ptr_t other; + ptr_t internal; +} FT_GlyphSlotRec_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_CharMapRec_32_s +{ + ptr_t face; //FT_FaceRec_t* + int encoding; + uint16_t platform_id; + uint16_t encoding_id; +} FT_CharMapRec_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_Size_Metrics_32_s +{ + uint16_t x_ppem; + uint16_t y_ppem; + long_t x_scale; + long_t y_scale; + long_t ascender; + long_t descender; + long_t height; + long_t max_advance; +} FT_Size_Metrics_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_SizeRec_32_s +{ + ptr_t face; //FT_FaceRec_t* + FT_Generic_32_t generic; + FT_Size_Metrics_32_t metrics; + ptr_t internal; //FT_Size_Internal +} FT_SizeRec_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_FaceRec_32_s +{ + long_t num_faces; + long_t face_index; + long_t face_flags; + long_t style_flags; + long_t num_glyphs; //0x10 + ptr_t family_name; //char* + ptr_t style_name; //char* + int num_fixed_sizes; + ptr_t available_sizes; //FT_Bitmap_32_t* //0x20 + int num_charmaps; + ptr_t charmaps; //FT_CharMapRec_32_t** + FT_Generic_32_t generic; //0x28 + FT_BBox_32_t bbox; //0x30 + uint16_t units_per_EM; //0x40 + int16_t ascender; + int16_t descender; + int16_t height; + int16_t max_advance_width; + int16_t max_advance_height; + int16_t underline_position; + int16_t underline_thickness; + ptr_t glyph; //FT_GlyphSlotRec_t* //0x50 + ptr_t size; //FT_SizeRec_32_t* + ptr_t charmap; //void* + /*@private begin */ + ptr_t driver; //void* //0x5c + ptr_t memory; //void* + ptr_t stream; //FT_StreamDesc_t* + FT_ListRec_32_t sizes_list; + FT_Generic_32_t autohint; /* face-specific auto-hinter data */ + ptr_t extensions; /* unused */ //void* + ptr_t internal; //void* +} FT_FaceRec_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_MemoryRec_32_s +{ + ptr_t user; //void* + ptr_t alloc; //void* + ptr_t free; //void* + ptr_t realloc;//void* +} FT_MemoryRec_32_t; + +typedef struct __attribute__((packed, aligned(4))) PS_PrivateRec_32_s +{ + int unique_id; + int lenIV; + uint8_t num_blue_values; + uint8_t num_other_blues; + uint8_t num_family_blues; + uint8_t num_family_other_blues; + int16_t blue_values[14]; + int16_t other_blues[10]; + int16_t family_blues [14]; + int16_t family_other_blues[10]; + long_t blue_scale; + int blue_shift; + int blue_fuzz; + uint16_t standard_width[1]; + uint16_t standard_height[1]; + uint8_t num_snap_widths; + uint8_t num_snap_heights; + uint8_t force_bold; + uint8_t round_stem_up; + int16_t snap_widths [13]; + int16_t snap_heights[13]; + long_t expansion_factor; + long_t language_group; + long_t password; + int16_t min_feature[2]; +} PS_PrivateRec_32_t; + +typedef struct __attribute__((packed, aligned(4))) BDF_PropertyRec_32_s +{ + int type; + union { + ptr_t atom; //const char* + int integer; + uint32_t cardinal; + + } u; +} BDF_PropertyRec_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_Size_RequestRec_32_s +{ + int type; + long_t width; + long_t height; + uint32_t horiResolution; + uint32_t vertResolution; +} FT_Size_RequestRec_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_Parameter_32_s +{ + ulong_t tag; + ptr_t data; //void* +} FT_Parameter_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_Open_Args_32_s +{ + uint32_t flags; + ptr_t memory_base; //uint8_t* + long_t memory_size; + ptr_t pathname; //char* + ptr_t stream; //FT_StreamRec_t* + ptr_t driver; //FT_ModuleRec + int num_params; + ptr_t params; //FT_Parameter_t* +} FT_Open_Args_32_t; + +typedef struct FT_WinFNT_HeaderRec_32_s // removed the packed attribute +{ + uint16_t version; + ulong_t file_size; + uint8_t copyright[60]; + uint16_t file_type; + uint16_t nominal_point_size; + uint16_t vertical_resolution; + uint16_t horizontal_resolution; + uint16_t ascent; + uint16_t internal_leading; + uint16_t external_leading; + uint8_t italic; + uint8_t underline; + uint8_t strike_out; + uint16_t weight; + uint8_t charset; + uint16_t pixel_width; + uint16_t pixel_height; + uint8_t pitch_and_family; + uint16_t avg_width; + uint16_t max_width; + uint8_t first_char; + uint8_t last_char; + uint8_t default_char; + uint8_t break_char; + uint16_t bytes_per_row; + ulong_t device_offset; + ulong_t face_name_offset; + ulong_t bits_pointer; + ulong_t bits_offset; + uint8_t reserved; + ulong_t flags; + uint16_t A_space; + uint16_t B_space; + uint16_t C_space; + uint16_t color_table_offset; + ulong_t reserved1[4]; +} FT_WinFNT_HeaderRec_32_t; + +typedef struct __attribute__((packed, aligned(4))) FT_Matrix_32_s +{ + long_t xx, xy; + long_t yx, yy; +} FT_Matrix_32_t; + +// ================================== +// Convertions +// ================================== + +void convert_FT_StreamRec_to_32(void* d, void* s) +{ + FT_StreamRec_t* src = s; + FT_StreamRec_32_t* dst = d; + + dst-> base = to_ptrv(src->base); + dst-> size = to_ulong(src->size); + dst-> pos = to_ulong(src->pos); + dst-> descriptor.value = to_long(src->descriptor.value); + dst-> descriptor.pointer = to_ptrv(src->descriptor.pointer); + dst-> pathname.value = to_long(src->pathname.value); + dst-> pathname.pointer = to_ptrv(src->pathname.pointer); + dst-> read = to_ptrv(src->read); + dst-> close = to_ptrv(src->close); + dst-> memory = to_ptrv(src->memory); + dst-> cursor = to_ptrv(src->cursor); + dst-> limit = to_ptrv(src->limit); +} +void convert_FT_StreamRec_to_64(void* d, void* s) +{ + FT_StreamRec_32_t* src = s; + FT_StreamRec_t* dst = d; + + dst-> limit = from_ptrv(src->limit); + dst-> cursor = from_ptrv(src->cursor); + dst-> memory = from_ptrv(src->memory); + dst-> close = from_ptrv(src->close); + dst-> read = from_ptrv(src->read); + dst-> pathname.pointer = from_ptrv(src->pathname.pointer); + dst-> pathname.value = from_long(src->pathname.value); + dst-> descriptor.pointer = from_ptrv(src->descriptor.pointer); + dst-> descriptor.value = from_long(src->descriptor.value); + dst-> pos = from_ulong(src->pos); + dst-> size = from_ulong(src->size); + dst-> base = from_ptrv(src->base); +} + +void convert_FT_GlyphSlot_to_32(void* d, void* s) +{ + FT_GlyphSlotRec_t* src = s; + FT_GlyphSlotRec_32_t* dst = d; + + dst->library = to_ptrv(src->library); + dst->face = to_ptrv(src->face); + dst->next = to_ptrv(src->next); + dst->glyph_index = src->glyph_index; + dst->generic.data = to_ptrv(src->generic.data); + dst->generic.finalizer = to_ptrv(src->generic.finalizer); + dst->metrics.width = to_long(src->metrics.width); + dst->metrics.height = to_long(src->metrics.height); + dst->metrics.horiBearingX = to_long(src->metrics.horiBearingX); + dst->metrics.horiBearingY = to_long(src->metrics.horiBearingY); + dst->metrics.horiAdvance = to_long(src->metrics.horiAdvance); + dst->metrics.vertBearingX = to_long(src->metrics.vertBearingX); + dst->metrics.vertBearingY = to_long(src->metrics.vertBearingY); + dst->metrics.vertAdvance = to_long(src->metrics.vertAdvance); + dst->linearHoriAdvance = to_long(src->linearHoriAdvance); + dst->linearVertAdvance = to_long(src->linearVertAdvance); + dst->advance.x = to_long(src->advance.x); + dst->advance.y = to_long(src->advance.y); + dst->format = src->format; + dst->bitmap.rows = src->bitmap.rows; + dst->bitmap.width = src->bitmap.width; + dst->bitmap.pitch = src->bitmap.pitch; + dst->bitmap.buffer = to_ptrv(src->bitmap.buffer); + dst->bitmap.num_grays = src->bitmap.num_grays; + dst->bitmap.pixel_mode = src->bitmap.pixel_mode; + dst->bitmap.palette_mode = src->bitmap.palette_mode; + dst->bitmap.palette = to_ptrv(src->bitmap.palette); + dst->bitmap_left = src->bitmap_left; + dst->bitmap_top = src->bitmap_top; + dst->outline.n_contours = src->outline.n_contours; + for(int i=0; ioutline.n_points; ++i) { + ((FT_Vector_32_t*)src->outline.points)[i].x = to_long(src->outline.points[i].x); + ((FT_Vector_32_t*)src->outline.points)[i].y = to_long(src->outline.points[i].y); + } + dst->outline.n_points = src->outline.n_points; + dst->outline.points = to_ptrv(src->outline.points); + dst->outline.tags = to_ptrv(src->outline.tags); + dst->outline.contours = to_ptrv(src->outline.contours); + dst->outline.flags = src->outline.flags; + dst->num_subglyphs = src->num_subglyphs; + dst->subglyphs = to_ptrv(src->subglyphs); + dst->control_data = to_ptrv(src->control_data); + dst->control_len = to_long(src->control_len); + dst->lsb_delta = to_long(src->lsb_delta); + dst->rsb_delta = to_long(src->rsb_delta); + dst->other = to_ptrv(src->other); + dst->internal = to_ptrv(src->internal); +} + +void convert_FT_GlyphSlot_to_64(void* d, void* s) +{ + FT_GlyphSlotRec_32_t* src = s; + FT_GlyphSlotRec_t* dst = d; + + dst->internal = from_ptrv(src->internal); + dst->other = from_ptrv(src->other); + dst->rsb_delta = from_long(src->rsb_delta); + dst->lsb_delta = from_long(src->lsb_delta); + dst->control_len = from_long(src->control_len); + dst->control_data = from_ptrv(src->control_data); + dst->subglyphs = from_ptrv(src->subglyphs); + dst->num_subglyphs = src->num_subglyphs; + dst->outline.flags = src->outline.flags; + dst->outline.contours = from_ptrv(src->outline.contours); + dst->outline.tags = from_ptrv(src->outline.tags); + dst->outline.points = from_ptrv(src->outline.points); + dst->outline.n_points = src->outline.n_points; + for(int i=dst->outline.n_points-1; i>=0; --i) { + dst->outline.points[i].y = from_long(((FT_Vector_32_t*)dst->outline.points)[i].y); + dst->outline.points[i].x = from_long(((FT_Vector_32_t*)dst->outline.points)[i].x); + } + dst->outline.n_contours = src->outline.n_contours; + dst->bitmap_top = src->bitmap_top; + dst->bitmap_left = src->bitmap_left; + dst->bitmap.palette = from_ptrv(src->bitmap.palette); + dst->bitmap.palette_mode = src->bitmap.palette_mode; + dst->bitmap.pixel_mode = src->bitmap.pixel_mode; + dst->bitmap.num_grays = src->bitmap.num_grays; + dst->bitmap.buffer = from_ptrv(src->bitmap.buffer); + dst->bitmap.pitch = src->bitmap.pitch; + dst->bitmap.width = src->bitmap.width; + dst->bitmap.rows = src->bitmap.rows; + dst->format = src->format; + dst->advance.y = from_long(src->advance.y); + dst->advance.x = from_long(src->advance.x); + dst->linearVertAdvance = from_long(src->linearVertAdvance); + dst->linearHoriAdvance = from_long(src->linearHoriAdvance); + dst->metrics.vertAdvance = from_long(src->metrics.vertAdvance); + dst->metrics.vertBearingY = from_long(src->metrics.vertBearingY); + dst->metrics.vertBearingX = from_long(src->metrics.vertBearingX); + dst->metrics.horiAdvance = from_long(src->metrics.horiAdvance); + dst->metrics.horiBearingY = from_long(src->metrics.horiBearingY); + dst->metrics.horiBearingX = from_long(src->metrics.horiBearingX); + dst->metrics.height = from_long(src->metrics.height); + dst->metrics.width = from_long(src->metrics.width); + dst->generic.finalizer = from_ptrv(src->generic.finalizer); + dst->generic.data = from_ptrv(src->generic.data); + dst->glyph_index = src->glyph_index; + dst->next = from_ptrv(src->next); // no shinking of the whole chain? + dst->face = from_ptrv(src->face); + dst->library = from_ptrv(src->library); +} + +void inplace_FT_GlyphSlot_shrink(void* a) +{ + if(!a) return; + FT_GlyphSlotRec_t* src = a; + FT_GlyphSlotRec_32_t* dst = a; + void* next = src->next; + + convert_FT_GlyphSlot_to_32(dst, src); + + inplace_FT_GlyphSlot_shrink(next); +} + +void inplace_FT_GlyphSlot_enlarge(void* a) +{ + if(!a) return; + FT_GlyphSlotRec_32_t* src = a; + FT_GlyphSlotRec_t* dst = a; + void* next = from_ptrv(src->next); + + convert_FT_GlyphSlot_to_64(dst, src); + + inplace_FT_GlyphSlot_enlarge(next); +} + +void convert_FT_CharMapRec_to_32(void* d, void* s) +{ + FT_CharMapRec_t* src = s; + FT_CharMapRec_32_t* dst = d; + + dst->face = to_ptrv(src->face); + dst->encoding = src->encoding; + dst->platform_id = src->platform_id; + dst->encoding_id = src->encoding_id; +} +void convert_FT_CharMapRec_to_64(void* d, void* s) +{ + FT_CharMapRec_32_t* src = s; + FT_CharMapRec_t* dst = d; + + dst->encoding_id = src->encoding_id; + dst->platform_id = src->platform_id; + dst->encoding = src->encoding; + dst->face = from_ptrv(src->face); +} + +void inplace_FT_CharMapRec_shrink(void* a) +{ + if(!a) return; + + convert_FT_CharMapRec_to_32(a, a); +} +void inplace_FT_CharMapRec_enlarge(void* a) +{ + if(!a) return; + + convert_FT_CharMapRec_to_64(a, a); +} + +void convert_FT_SizeRec_to_32(void* d, void* s) +{ + FT_SizeRec_t* src = s; + FT_SizeRec_32_t* dst = d; + + dst->face = to_ptrv(src->face); + dst->generic.data = to_ptrv(src->generic.data); + dst->generic.finalizer = to_ptrv(src->generic.finalizer); + dst->metrics.x_ppem = src->metrics.x_ppem; + dst->metrics.y_ppem = src->metrics.y_ppem; + dst->metrics.x_scale = to_long(src->metrics.x_scale); + dst->metrics.y_scale = to_long(src->metrics.y_scale); + dst->metrics.ascender = to_long(src->metrics.ascender); + dst->metrics.descender = to_long(src->metrics.descender); + dst->metrics.height = to_long(src->metrics.height); + dst->metrics.max_advance = to_long(src->metrics.max_advance); + dst->internal = to_ptrv(src->internal); +} +void convert_FT_SizeRec_to_64(void* d, void* s) +{ + FT_SizeRec_32_t* src = s; + FT_SizeRec_t* dst = d; + + dst->internal = from_ptrv(src->internal); + dst->metrics.max_advance = from_long(src->metrics.max_advance); + dst->metrics.height = from_long(src->metrics.height); + dst->metrics.descender = from_long(src->metrics.descender); + dst->metrics.ascender = from_long(src->metrics.ascender); + dst->metrics.y_scale = from_long(src->metrics.y_scale); + dst->metrics.x_scale = from_long(src->metrics.x_scale); + dst->metrics.y_ppem = src->metrics.y_ppem; + dst->metrics.x_ppem = src->metrics.x_ppem; + dst->generic.finalizer = from_ptrv(src->generic.finalizer); + dst->generic.data = from_ptrv(src->generic.data); + dst->face = from_ptrv(src->face); +} + +void inplace_FT_SizeRec_shrink(void* a) +{ + if(!a) return; + + convert_FT_SizeRec_to_32(a, a); +} +void inplace_FT_SizeRec_enlarge(void* a) +{ + if(!a) return; + + convert_FT_SizeRec_to_64(a, a); +} + + +void inplace_FT_FaceRec_shrink(void* a) +{ + if(!a) return; + FT_FaceRec_t* src = a; + FT_FaceRec_32_t* dst = a; + void* glyphslot = src->glyph; + + dst->num_faces = to_long(src->num_faces); + dst->face_index = to_long(src->face_index); + dst->face_flags = to_long(src->face_flags); + dst->style_flags = to_long(src->style_flags); + dst->num_glyphs = to_long(src->num_glyphs); + dst->family_name = to_ptrv(src->family_name); + dst->style_name = to_ptrv(src->style_name); + { + FT_Bitmap_Size_32_t* dst_sizes = (void*)src->available_sizes; + for(int i=0; inum_fixed_sizes; ++i) { + dst_sizes[i].height = src->available_sizes[i].height; + dst_sizes[i].width = src->available_sizes[i].width; + dst_sizes[i].size = to_long(src->available_sizes[i].size); + dst_sizes[i].x_ppem = to_long(src->available_sizes[i].x_ppem); + dst_sizes[i].y_ppem = to_long(src->available_sizes[i].y_ppem); + } + } + dst->num_fixed_sizes = src->num_fixed_sizes; + dst->available_sizes = to_ptrv(src->available_sizes); + //convert charmaps content then pointers array + for(int i=0; inum_charmaps; ++i) + inplace_FT_CharMapRec_shrink(src->charmaps[i]); + for(int i=0; inum_charmaps; ++i) + ((ptr_t*)src->charmaps)[i] = to_ptrv(src->charmaps[i]); + dst->num_charmaps = src->num_charmaps; + dst->charmaps = to_ptrv(src->charmaps); + dst->generic.data = to_ptrv(src->generic.data); + dst->generic.finalizer = to_ptrv(src->generic.finalizer); + dst->bbox.xMin = to_long(src->bbox.xMin); + dst->bbox.yMin = to_long(src->bbox.yMin); + dst->bbox.xMax = to_long(src->bbox.xMax); + dst->bbox.yMax = to_long(src->bbox.yMax); + dst->units_per_EM = src->units_per_EM; + dst->ascender = src->ascender; + dst->descender = src->descender; + dst->height = src->height; + dst->max_advance_width = src->max_advance_width; + dst->max_advance_height = src->max_advance_height; + dst->underline_position = src->underline_position; + dst->underline_thickness = src->underline_thickness; + inplace_FT_SizeRec_shrink(src->size); + dst->glyph = to_ptrv(src->glyph); + dst->size = to_ptrv(src->size); + dst->charmap = to_ptrv(src->charmap); + dst->driver = to_ptrv(src->driver); + dst->memory = to_ptrv(src->memory); + ((FT_StreamDesc_32_t*)src->stream)->value = to_long(src->stream->value); + ((FT_StreamDesc_32_t*)src->stream)->pointer = to_ptrv(src->stream->pointer); + dst->stream = to_ptrv(src->stream); + dst->sizes_list.head = to_ptrv(src->sizes_list.head); + dst->sizes_list.tail = to_ptrv(src->sizes_list.tail); + dst->autohint.data = to_ptrv(src->autohint.data); + dst->autohint.finalizer = to_ptrv(src->autohint.finalizer); + dst->extensions = to_ptrv(src->extensions); + dst->internal = to_ptrv(src->internal); + + inplace_FT_GlyphSlot_shrink(glyphslot); +} + +void inplace_FT_FaceRec_enlarge(void* a) +{ + if(!a) return; + FT_FaceRec_32_t* src = a; + FT_FaceRec_t* dst = a; + void* glyphslot = from_ptrv(src->glyph); + + dst->internal = from_ptrv(src->internal); + dst->extensions = from_ptrv(src->extensions); + dst->autohint.finalizer = from_ptrv(src->autohint.finalizer); + dst->autohint.data = from_ptrv(src->autohint.data); + dst->sizes_list.tail = from_ptrv(src->sizes_list.tail); + dst->sizes_list.head = from_ptrv(src->sizes_list.head); + dst->stream = from_ptrv(src->stream); + dst->stream->pointer = from_ptrv(((FT_StreamDesc_32_t*)dst->stream)->pointer); + dst->stream->value = from_long(((FT_StreamDesc_32_t*)dst->stream)->value); + dst->memory = from_ptrv(src->memory); + dst->driver = from_ptrv(src->driver); + dst->charmap = from_ptrv(src->charmap); + dst->size = from_ptrv(src->size); + inplace_FT_SizeRec_enlarge(dst->size); + dst->glyph = from_ptrv(src->glyph); + dst->underline_thickness = src->underline_thickness; + dst->underline_position = src->underline_position; + dst->max_advance_height = src->max_advance_height; + dst->max_advance_width = src->max_advance_width; + dst->height = src->height; + dst->descender = src->descender; + dst->ascender = src->ascender; + dst->units_per_EM = src->units_per_EM; + dst->bbox.yMax = from_long(src->bbox.yMax); + dst->bbox.xMax = from_long(src->bbox.xMax); + dst->bbox.yMin = from_long(src->bbox.yMin); + dst->bbox.xMin = from_long(src->bbox.xMin); + dst->generic.finalizer = from_ptrv(src->generic.finalizer); + dst->generic.data = from_ptrv(src->generic.data); + dst->charmaps = from_ptrv(src->charmaps); + dst->num_charmaps = src->num_charmaps; + //convert charmaps pointer array then content + for(int i=dst->num_charmaps-1; i>=0; --i) + dst->charmaps[i] = from_ptrv(((ptr_t*)dst->charmaps)[i]); + for(int i=dst->num_charmaps-1; i>=0; --i) + inplace_FT_CharMapRec_enlarge(dst->charmaps[i]); + dst->available_sizes = from_ptrv(src->available_sizes); + dst->num_fixed_sizes = src->num_fixed_sizes; + { + FT_Bitmap_Size_32_t* src_sizes = (void*)dst->available_sizes; + for(int i=dst->num_fixed_sizes-1; i>=0; --i) { + dst->available_sizes[i].height = src_sizes[i].height; + dst->available_sizes[i].width = src_sizes[i].width; + dst->available_sizes[i].size = from_long(src_sizes[i].size); + dst->available_sizes[i].x_ppem = from_long(src_sizes[i].x_ppem); + dst->available_sizes[i].y_ppem = from_long(src_sizes[i].y_ppem); + } + } + dst->style_name = from_ptrv(src->style_name); + dst->family_name = from_ptrv(src->family_name); + dst->num_glyphs = from_long(src->num_glyphs); + dst->style_flags = from_long(src->style_flags); + dst->face_flags = from_long(src->face_flags); + dst->face_index = from_long(src->face_index); + dst->num_faces = from_long(src->num_faces); + + inplace_FT_GlyphSlot_enlarge(glyphslot); +} + +void convert_PS_PrivateRec_to_32(void* d, void* s) +{ + PS_PrivateRec_t* src = s; + PS_PrivateRec_32_t* dst = d; + + dst->unique_id = src->unique_id; + dst->lenIV = src->lenIV; + dst->num_blue_values = src->num_blue_values; + dst->num_other_blues = src->num_other_blues; + dst->num_family_blues = src->num_family_blues; + dst->num_family_other_blues = src->num_family_other_blues; + memcpy(dst->blue_values, src->blue_values, sizeof(dst->blue_values)); + memcpy(dst->other_blues, src->other_blues, sizeof(dst->other_blues)); + memcpy(dst->family_blues, src->family_blues, sizeof(dst->family_blues)); + memcpy(dst->family_other_blues, src->family_other_blues, sizeof(dst->family_other_blues)); + dst->blue_scale = src->blue_scale; + dst->blue_shift = src->blue_shift; + dst->blue_fuzz = src->blue_fuzz; + dst->standard_width[0] = src->standard_width[0]; + dst->standard_height[0] = src->standard_height[0]; + dst->num_snap_widths = src->num_snap_widths; + dst->num_snap_heights = src->num_snap_heights; + dst->force_bold = src->force_bold; + dst->round_stem_up = src->round_stem_up; + memcpy(dst->snap_widths, src->snap_widths, sizeof(dst->snap_widths)); + memcpy(dst->snap_heights, src->snap_heights, sizeof(dst->snap_heights)); + dst->expansion_factor = src->expansion_factor; + dst->language_group = src->language_group; + dst->password = src->password; + dst->min_feature[0] = src->min_feature[0]; + dst->min_feature[1] = src->min_feature[1]; +} + +void convert_BDF_PropertyRec_to_32(void* d, void* s) +{ + BDF_PropertyRec_t* src = s; + BDF_PropertyRec_32_t* dst = d; + + dst->type = src->type; + switch(dst->type) { + case 0: break; + case 1: dst->u.atom = to_ptrv(src->u.atom); break; + case 2: dst->u.integer = src->u.integer; break; + case 3: dst->u.cardinal = src->u.cardinal; break; + } +} + +void convert_FT_Size_RequestRec_to_64(void* d, void* s) +{ + FT_Size_RequestRec_t* src = s; + FT_Size_RequestRec_32_t* dst = d; + + dst->type = src->type; + dst->width = from_long(src->width); + dst->height = from_long(src->height); + dst->horiResolution = src->horiResolution; + dst->vertResolution = src->vertResolution; +} + +void convert_FT_WinFNT_HeaderRec_to_32(void* d, void* s) +{ + FT_WinFNT_HeaderRec_t* src = s; + FT_WinFNT_HeaderRec_32_t* dst = d; + + dst->version = src->version; + dst->file_size = to_ulong(src->file_size); + memcpy(dst->copyright, src->copyright, sizeof(dst->copyright)); + dst->file_type = src->file_type; + dst->nominal_point_size = src->nominal_point_size; + dst->vertical_resolution = src->vertical_resolution; + dst->horizontal_resolution = src->horizontal_resolution; + dst->ascent = src->ascent; + dst->internal_leading = src->internal_leading; + dst->external_leading = src->external_leading; + dst->italic = src->italic; + dst->underline = src->underline; + dst->strike_out = src->strike_out; + dst->weight = src->weight; + dst->charset = src->charset; + dst->pixel_width = src->pixel_width; + dst->pixel_height = src->pixel_height; + dst->pitch_and_family = src->pitch_and_family; + dst->avg_width = src->avg_width; + dst->max_width = src->max_width; + dst->first_char = src->first_char; + dst->last_char = src->last_char; + dst->default_char = src->default_char; + dst->break_char = src->break_char; + dst->bytes_per_row = src->bytes_per_row; + dst->device_offset = to_ulong(src->device_offset); + dst->face_name_offset = to_ulong(src->face_name_offset); + dst->bits_pointer = to_ulong(src->bits_pointer); + dst->bits_offset = to_ulong(src->bits_offset); + dst->reserved = src->reserved; + dst->flags = to_ulong(src->flags); + dst->A_space = src->A_space; + dst->B_space = src->B_space; + dst->C_space = src->C_space; + dst->color_table_offset = src->color_table_offset; + dst->reserved1[0] = to_ulong(src->reserved1[0]); + dst->reserved1[1] = to_ulong(src->reserved1[1]); + dst->reserved1[2] = to_ulong(src->reserved1[2]); + dst->reserved1[3] = to_ulong(src->reserved1[3]); +} + +void convert_FT_Matrix_to_32(void* d, void* s) +{ + FT_Matrix_t* src = s; + FT_Matrix_32_t* dst = d; + + dst->xx = to_long(src->xx); + dst->xy = to_long(src->xy); + dst->yx = to_long(src->yx); + dst->yy = to_long(src->yy); +} +void convert_FT_Matrix_to_64(void* d, void* s) +{ + FT_Matrix_32_t* src = s; + FT_Matrix_t* dst = d; + + dst->yy = from_long(src->yy); + dst->yx = from_long(src->yx); + dst->xy = from_long(src->xy); + dst->xx = from_long(src->xx); +} + +void convert_FT_Bitmap_to_32(void* d, void* s) +{ + FT_Bitmap_t* src = s; + FT_Bitmap_32_t* dst = d; + + dst->rows = src->rows; + dst->width = src->width; + dst->pitch = src->pitch; + dst->buffer = to_ptrv(src->buffer); + dst->num_grays = src->num_grays; + dst->pixel_mode = src->pixel_mode; + dst->palette_mode = src->palette_mode; + dst->palette = to_ptrv(src->palette); +} +void convert_FT_Bitmap_to_64(void* d, void* s) +{ + FT_Bitmap_32_t* src = s; + FT_Bitmap_t* dst = d; + + dst->palette = from_ptrv(src->palette); + dst->palette_mode = src->palette_mode; + dst->pixel_mode = src->pixel_mode; + dst->num_grays = src->num_grays; + dst->buffer = from_ptrv(src->buffer); + dst->pitch = src->pitch; + dst->width = src->width; + dst->rows = src->rows; +} + +// ================================== +// Wrapping +// ================================== + +#define ADDED_FUNCTIONS() \ + +#include "generated/wrappedfreetypetypes32.h" + +#include "wrappercallback32.h" + +// utility functions +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// FT_Generic_Finalizer +#define GO(A) \ +static uintptr_t my_FT_Generic_Finalizer_fct_##A = 0; \ +static void my_FT_Generic_Finalizer_##A(void* object) \ +{ \ + RunFunctionFmt(my_FT_Generic_Finalizer_fct_##A, "p", object); \ +} +SUPER() +#undef GO +static void* find_FT_Generic_Finalizer_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_FT_Generic_Finalizer_fct_##A == (uintptr_t)fct) return my_FT_Generic_Finalizer_##A; + SUPER() + #undef GO + #define GO(A) if(my_FT_Generic_Finalizer_fct_##A == 0) {my_FT_Generic_Finalizer_fct_##A = (uintptr_t)fct; return my_FT_Generic_Finalizer_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libfreetype FT_Generic_Finalizer callback\n"); + return NULL; +} +// FTC_Face_Requester +#define GO(A) \ +static uintptr_t my_FTC_Face_Requester_fct_##A = 0; \ +static int my_FTC_Face_Requester_##A(void* face_id, void* lib, void* req, void* aface) \ +{ \ + int ret = (int)RunFunctionFmt(my_FTC_Face_Requester_fct_##A, "pppp", face_id, lib, req, aface); \ + if(aface && *(void**)aface) { \ + FT_FaceRec_t *f = *(FT_FaceRec_t**)aface; \ + f->generic.finalizer = find_FT_Generic_Finalizer_Fct(f->generic.finalizer); \ + } \ + return ret; \ +} +SUPER() +#undef GO +static void* find_FTC_Face_Requester_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_FTC_Face_Requester_fct_##A == (uintptr_t)fct) return my_FTC_Face_Requester_##A; + SUPER() + #undef GO + #define GO(A) if(my_FTC_Face_Requester_fct_##A == 0) {my_FTC_Face_Requester_fct_##A = (uintptr_t)fct; return my_FTC_Face_Requester_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libfreetype FTC_Face_Requester callback\n"); + return NULL; +} +// FT_Alloc +#define GO(A) \ +static uintptr_t my_FT_Alloc_fct_##A = 0; \ +static void* my_FT_Alloc_##A(void* memory, long size) \ +{ \ + return (void*)RunFunctionFmt(my_FT_Alloc_fct_##A, "pl", memory, size); \ +} +SUPER() +#undef GO +static void* find_FT_Alloc_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_FT_Alloc_fct_##A == (uintptr_t)fct) return my_FT_Alloc_##A; + SUPER() + #undef GO + #define GO(A) if(my_FT_Alloc_fct_##A == 0) {my_FT_Alloc_fct_##A = (uintptr_t)fct; return my_FT_Alloc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libfreetype FT_Alloc callback\n"); + return NULL; +} +// FT_Free +#define GO(A) \ +static uintptr_t my_FT_Free_fct_##A = 0; \ +static void my_FT_Free_##A(void* memory, void* p) \ +{ \ + RunFunctionFmt(my_FT_Free_fct_##A, "pp", memory, p); \ +} +SUPER() +#undef GO +static void* find_FT_Free_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_FT_Free_fct_##A == (uintptr_t)fct) return my_FT_Free_##A; + SUPER() + #undef GO + #define GO(A) if(my_FT_Free_fct_##A == 0) {my_FT_Free_fct_##A = (uintptr_t)fct; return my_FT_Free_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libfreetype FT_Free callback\n"); + return NULL; +} +// FT_Realloc +#define GO(A) \ +static uintptr_t my_FT_Realloc_fct_##A = 0; \ +static void* my_FT_Realloc_##A(void* memory, long cur, long size, void* p) \ +{ \ + return (void*)RunFunctionFmt(my_FT_Realloc_fct_##A, "pllp", memory, cur, size, p); \ +} +SUPER() +#undef GO +static void* find_FT_Realloc_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_FT_Realloc_fct_##A == (uintptr_t)fct) return my_FT_Realloc_##A; + SUPER() + #undef GO + #define GO(A) if(my_FT_Realloc_fct_##A == 0) {my_FT_Realloc_fct_##A = (uintptr_t)fct; return my_FT_Realloc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libfreetype FT_Realloc callback\n"); + return NULL; +} +// FT_Outline_MoveToFunc +#define GO(A) \ +static uintptr_t my_FT_Outline_MoveToFunc_fct_##A = 0; \ +static int my_FT_Outline_MoveToFunc_##A(void* to, void* user) \ +{ \ + return (int)RunFunctionFmt(my_FT_Outline_MoveToFunc_fct_##A, "pp", to, user); \ +} +SUPER() +#undef GO +static void* find_FT_Outline_MoveToFunc_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_FT_Outline_MoveToFunc_fct_##A == (uintptr_t)fct) return my_FT_Outline_MoveToFunc_##A; + SUPER() + #undef GO + #define GO(A) if(my_FT_Outline_MoveToFunc_fct_##A == 0) {my_FT_Outline_MoveToFunc_fct_##A = (uintptr_t)fct; return my_FT_Outline_MoveToFunc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libfreetype FT_Outline_MoveToFunc callback\n"); + return NULL; +} + +// FT_Outline_LineToFunc +#define GO(A) \ +static uintptr_t my_FT_Outline_LineToFunc_fct_##A = 0; \ +static int my_FT_Outline_LineToFunc_##A(void* to, void* user) \ +{ \ + return (int)RunFunctionFmt(my_FT_Outline_LineToFunc_fct_##A, "pp", to, user); \ +} +SUPER() +#undef GO +static void* find_FT_Outline_LineToFunc_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_FT_Outline_LineToFunc_fct_##A == (uintptr_t)fct) return my_FT_Outline_LineToFunc_##A; + SUPER() + #undef GO + #define GO(A) if(my_FT_Outline_LineToFunc_fct_##A == 0) {my_FT_Outline_LineToFunc_fct_##A = (uintptr_t)fct; return my_FT_Outline_LineToFunc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libfreetype FT_Outline_LineToFunc callback\n"); + return NULL; +} + +// FT_Outline_ConicToFunc +#define GO(A) \ +static uintptr_t my_FT_Outline_ConicToFunc_fct_##A = 0; \ +static int my_FT_Outline_ConicToFunc_##A(void* ctl, void* to, void* user) \ +{ \ + return (int)RunFunctionFmt(my_FT_Outline_ConicToFunc_fct_##A, "ppp", ctl, to, user); \ +} +SUPER() +#undef GO +static void* find_FT_Outline_ConicToFunc_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_FT_Outline_ConicToFunc_fct_##A == (uintptr_t)fct) return my_FT_Outline_ConicToFunc_##A; + SUPER() + #undef GO + #define GO(A) if(my_FT_Outline_ConicToFunc_fct_##A == 0) {my_FT_Outline_ConicToFunc_fct_##A = (uintptr_t)fct; return my_FT_Outline_ConicToFunc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libfreetype FT_Outline_ConicToFunc callback\n"); + return NULL; +} + +// FT_Outline_CubicToFunc +#define GO(A) \ +static uintptr_t my_FT_Outline_CubicToFunc_fct_##A = 0; \ +static int my_FT_Outline_CubicToFunc_##A(void* ctl1, void* ctl2, void* to, void* user) \ +{ \ + return (int)RunFunctionFmt(my_FT_Outline_CubicToFunc_fct_##A, "pppp", ctl1, ctl2, to, user); \ +} +SUPER() +#undef GO +static void* find_FT_Outline_CubicToFunc_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_FT_Outline_CubicToFunc_fct_##A == (uintptr_t)fct) return my_FT_Outline_CubicToFunc_##A; + SUPER() + #undef GO + #define GO(A) if(my_FT_Outline_CubicToFunc_fct_##A == 0) {my_FT_Outline_CubicToFunc_fct_##A = (uintptr_t)fct; return my_FT_Outline_CubicToFunc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libfreetype FT_Outline_CubicToFunc callback\n"); + return NULL; +} + +// structures +#define GO(A) \ +static FT_MemoryRec_t my_FT_MemoryRec_struct_##A = {0}; \ +static FT_MemoryRec_t* my_FT_MemoryRec_ref_##A = NULL; +SUPER() +#undef GO +static void wrap_FT_MemoryRec(FT_MemoryRec_t* dst, FT_MemoryRec_t* src) { + dst->user = src->user; + dst->alloc = find_FT_Alloc_Fct(src->alloc); + dst->free = find_FT_Free_Fct(src->free); + dst->realloc = find_FT_Realloc_Fct(src->realloc); +} +static FT_MemoryRec_t* find_FT_MemoryRec_Struct(FT_MemoryRec_t* s) +{ + if(!s) return NULL; + #define GO(A) if(my_FT_MemoryRec_ref_##A == s) return &my_FT_MemoryRec_struct_##A; + SUPER() + #undef GO + #define GO(A) if(!my_FT_MemoryRec_ref_##A) {wrap_FT_MemoryRec(&my_FT_MemoryRec_struct_##A, s); my_FT_MemoryRec_ref_##A = s; return &my_FT_MemoryRec_struct_##A;} + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libfreetype Struct FT_MemoryRec wrapping\n"); + return s; +} + + +#undef SUPER + +static uintptr_t my_iofunc = 0; +static unsigned long my_FT_Stream_IoFunc(FT_StreamRec_t* stream, unsigned long offset, unsigned char* buffer, unsigned long count ) +{ + static FT_StreamRec_32_t stream_s; + convert_FT_StreamRec_to_32(&stream_s, stream); + unsigned char* buffer_s = buffer; + if((uintptr_t)buffer_s>=0x100000000LL) { + buffer_s = malloc(count); + memcpy(buffer_s, buffer, count); + } + unsigned long ret = (unsigned long)RunFunctionFmt(my_iofunc, "pLpL", &stream_s, offset, buffer_s, count); + convert_FT_StreamRec_to_64(stream, &stream_s); + if(buffer_s!=buffer) { + memcpy(buffer, buffer_s, count); + free(buffer_s); + } + return ret; +} + +static uintptr_t my_closefunc = 0; +static void my_FT_Stream_CloseFunc(FT_StreamRec_t* stream) +{ + static FT_StreamRec_32_t stream_s; + convert_FT_StreamRec_to_32(&stream_s, stream); + RunFunctionFmt(my_closefunc, "p", &stream_s); + convert_FT_StreamRec_to_64(stream, &stream_s); +} + +EXPORT int my32_FT_Open_Face(x64emu_t* emu, void* library, FT_Open_Args_32_t* args, long face_index, ptr_t* aface) +{ + (void)emu; + void* aface_l = NULL; + FT_Open_Args_t args_l = {0}; + // keep streams alive and in low memory, as they are living until FT_Face_Done is done. A better way would be to dynamicaly allocate it + // and free when done, but needs to detect when stream is actualy allocated on box side... + static FT_StreamRec_t streams[16] = {0}; + static int streams_idx = 0; + FT_StreamRec_t *stream = &streams[streams_idx]; + streams_idx = (streams_idx+1)&15; + FT_Parameter_t params[50]; + args_l.flags = args->flags; + args_l.memory_base = from_ptrv(args->memory_base); + args_l.memory_size = from_long(args->memory_size); + args_l.pathname = from_ptrv(args->pathname); + args_l.stream = args->stream?stream:NULL; + if(args->stream) + convert_FT_StreamRec_to_64(stream, from_ptrv(args->stream)); + args_l.driver = from_ptrv(args->driver); + args_l.num_params = args->num_params; + args_l.params = args->params?params:NULL; + for(int i=0; args_l.num_params; ++i) { + params[i].tag = from_ulong(((FT_Parameter_32_t*)from_ptrv(args->params))[i].tag); + params[i].data = from_ptrv(((FT_Parameter_32_t*)from_ptrv(args->params))[i].data); + } + int wrapstream = (args->flags&0x02)?1:0; + if(wrapstream) { + my_iofunc = (uintptr_t)args_l.stream->read; + if(my_iofunc) { + args_l.stream->read = GetNativeFnc(my_iofunc); + if(!args_l.stream->read) + args_l.stream->read = my_FT_Stream_IoFunc; + } + my_closefunc = (uintptr_t)args_l.stream->close; + if(my_closefunc) { + args_l.stream->close = GetNativeFnc(my_closefunc); + if(!args_l.stream->close) + args_l.stream->close = my_FT_Stream_CloseFunc; + } + } + int ret = my->FT_Open_Face(library, &args_l, face_index, &aface_l); + /*if(wrapstream) { + args->stream->read = (void*)my_iofunc; + args->stream->close = (void*)my_closefunc; + }*/ + *aface = to_ptrv(aface_l); + inplace_FT_FaceRec_shrink(aface_l); + return ret; +} + +//EXPORT int my_FTC_Manager_New(x64emu_t* emu, void* l, uint32_t max_faces, uint32_t max_sizes, uintptr_t max_bytes, void* req, void* data, void* aman) +//{ +// (void)emu; +// return my->FTC_Manager_New(l, max_faces, max_sizes, max_bytes, find_FTC_Face_Requester_Fct(req), data, aman); +//} + +//EXPORT int my_FT_New_Library(x64emu_t* emu, FT_MemoryRec_t* memory, void* p) +//{ +// return my->FT_New_Library(find_FT_MemoryRec_Struct(memory), p); +//} + +typedef struct my_FT_Outline_Funcs_s +{ + void* move_to; + void* line_to; + void* conic_to; + void* cubic_to; + int shift; + signed long delta; +} my_FT_Outline_Funcs_t; + +//EXPORT int my32_FT_Outline_Decompose(x64emu_t* emu, void* outline, my_FT_Outline_Funcs_t* tbl, void* data) +//{ +// my_FT_Outline_Funcs_t f = {0}; +// if(tbl) { +// f.move_to = find_FT_Outline_MoveToFunc_Fct(tbl->move_to); +// f.line_to = find_FT_Outline_LineToFunc_Fct(tbl->line_to); +// f.conic_to = find_FT_Outline_ConicToFunc_Fct(tbl->conic_to); +// f.cubic_to = find_FT_Outline_CubicToFunc_Fct(tbl->cubic_to); +// f.shift = tbl->shift; +// f.delta = tbl->delta; +// } +// return my->FT_Outline_Decompose(outline, tbl?(&f):tbl, data); +//} + +EXPORT int my32_FT_New_Face(x64emu_t* emu, void* lib, void* name, long index, ptr_t* face) +{ + FT_FaceRec_t* res = NULL; + int ret = my->FT_New_Face(lib, name, index, &res); + if(ret) return ret; + *face = to_ptrv(res); + inplace_FT_FaceRec_shrink(res); + return ret; +} + +EXPORT int my32_FT_New_Memory_Face(x64emu_t* emu, void* lib, void* base, long size, long index, ptr_t* face) +{ + FT_FaceRec_t* res = NULL; + int ret = my->FT_New_Memory_Face(lib, base, size, index, &res); + if(ret) return ret; + *face = to_ptrv(res); + inplace_FT_FaceRec_shrink(res); + return ret; +} + +EXPORT uint32_t my32_FT_Get_Sfnt_Name_Count(x64emu_t* emu, void* face) +{ + inplace_FT_FaceRec_enlarge(face); + uint32_t ret = my->FT_Get_Sfnt_Name_Count(face); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT uint32_t my32_FT_Get_Sfnt_Name(x64emu_t* emu, void* face, uint32_t idx, void* name) +{ + inplace_FT_FaceRec_enlarge(face); + uint32_t ret = my->FT_Get_Sfnt_Name(face, idx, name); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT int my32_FT_Get_Glyph_Name(x64emu_t* emu, void* face, uint32_t index, void* buff, uint32_t size) +{ + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Get_Glyph_Name(face, index, buff, size); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT void* my32_FT_Get_X11_Font_Format(x64emu_t* emu, void* face) +{ + inplace_FT_FaceRec_enlarge(face); + void* ret = my->FT_Get_X11_Font_Format(face); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT void* my32_FT_Get_Postscript_Name(x64emu_t* emu, void* face) +{ + inplace_FT_FaceRec_enlarge(face); + void* ret = my->FT_Get_Postscript_Name(face); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT int my32_FT_Load_Sfnt_Table(x64emu_t* emu, void* face, unsigned long tag, long offset, void* buff, ulong_t* length) +{ + unsigned long len_l = 0; + if(length) len_l = from_ulong(*length); + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Load_Sfnt_Table(face, tag, offset, buff, length?(&len_l):NULL); + inplace_FT_FaceRec_shrink(face); + if(length) *length = to_ulong(len_l); + return ret; +} + +EXPORT unsigned long my32_FT_Get_First_Char(x64emu_t* emu, void* face, uint32_t* index) +{ + inplace_FT_FaceRec_enlarge(face); + unsigned long ret = my->FT_Get_First_Char(face, index); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT int my32_FT_Get_PS_Font_Info(x64emu_t* emu, void* face, PS_PrivateRec_32_t* info) +{ + PS_PrivateRec_t info_l = {0}; + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Get_PS_Font_Info(face, &info_l); + inplace_FT_FaceRec_shrink(face); + convert_PS_PrivateRec_to_32(info, &info_l); + return ret; +} + +EXPORT int my32_FT_Select_Charmap(x64emu_t* emu, void* face, int encoding) +{ + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Select_Charmap(face, encoding); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT void* my32_FT_Get_Sfnt_Table(x64emu_t* emu, void* face, int tag) +{ + inplace_FT_FaceRec_enlarge(face); + void* ret = my->FT_Get_Sfnt_Table(face, tag); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT int my32_FT_Select_Size(x64emu_t* emu, void* face, int index) +{ + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Select_Size(face, index); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT unsigned long my32_FT_Get_Next_Char(x64emu_t* emu, void* face, unsigned long code, void* buff) +{ + inplace_FT_FaceRec_enlarge(face); + unsigned long ret = my->FT_Get_Next_Char(face, code, buff); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT int my32_FT_Has_PS_Glyph_Names(x64emu_t* emu, void* face) +{ + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Has_PS_Glyph_Names(face); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT int my32_FT_Get_BDF_Property(x64emu_t* emu, void* face, void* name, BDF_PropertyRec_32_t* prop) +{ + BDF_PropertyRec_t prop_l = {0}; + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Get_BDF_Property(face, name, &prop_l); + inplace_FT_FaceRec_shrink(face); + convert_BDF_PropertyRec_to_32(prop, &prop_l); + return ret; +} + +EXPORT int my32_FT_Done_Face(x64emu_t* emu, void* face) +{ + inplace_FT_FaceRec_enlarge(face); + return my->FT_Done_Face(face); +} + +EXPORT void my32_FT_Set_Transform(x64emu_t* emu, void* face, FT_Matrix_32_t* matrix, FT_Vector_32_t* delta) +{ + FT_Matrix_t matrix_l = {0}; + FT_Vector_t delta_l = {0}; + inplace_FT_FaceRec_enlarge(face); + if(matrix) + convert_FT_Matrix_to_64(&delta_l, matrix); + if(delta) { + delta_l.x = from_long(delta->x); + delta_l.y = from_long(delta->y); + } + my->FT_Set_Transform(face, matrix?(&matrix_l):NULL, delta?(&delta_l):NULL); + inplace_FT_FaceRec_shrink(face); +} + + +EXPORT int my32_FT_Get_Kerning(x64emu_t* emu, void* face, uint32_t left, uint32_t right, uint32_t kern, FT_Vector_32_t* kerning) +{ + FT_Vector_t kerning_l = {0}; + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Get_Kerning(face, left, right, kern, &kerning_l); + inplace_FT_FaceRec_shrink(face); + kerning->x = kerning_l.x; + kerning->y = kerning_l.y; + return ret; +} + +EXPORT int my32_FT_Set_Char_Size(x64emu_t* emu, void* face, long char_width, long char_height, uint32_t horz, uint32_t vert) +{ + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Set_Char_Size(face, char_width, char_height, horz, vert); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT int my32_FT_Set_Pixel_Sizes(x64emu_t* emu, void* face, uint32_t width, uint32_t height) +{ + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Set_Pixel_Sizes(face, width, height); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT int my32_FT_Request_Size(x64emu_t* emu, void* face, FT_Size_RequestRec_32_t* req) +{ + FT_Size_RequestRec_t req_l = {0}; + convert_FT_Size_RequestRec_to_64(&req_l, req); + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Request_Size(face, &req_l); + inplace_FT_FaceRec_enlarge(face); + return ret; +} + +EXPORT uint32_t my32_FT_Get_Char_Index(x64emu_t* emu, void* face, unsigned long code) +{ + inplace_FT_FaceRec_enlarge(face); + uint32_t ret = my->FT_Get_Char_Index(face, code); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT int my32_FT_Load_Char(x64emu_t* emu, void* face, unsigned long code, int flags) +{ + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Load_Char(face, code, flags); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT int my32_FT_Load_Glyph(x64emu_t* emu, void* face, uint32_t index, int flags) +{ + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Load_Glyph(face, index, flags); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT int my32_FT_Set_Charmap(x64emu_t* emu, void* face, void* charmap) +{ + // do not enlarge charmap, as it's already part of the face and so is expanded already + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Set_Charmap(face, charmap); + inplace_FT_FaceRec_shrink(face); + return ret; +} + +EXPORT void my32_FT_Outline_Get_CBox(x64emu_t* emu, FT_Outline_32_t* outline, FT_BBox_32_t* bbox) +{ + // convert outline to 64 + int n = outline->n_points; + FT_Outline_t outline_l; + FT_Vector_t vector[n]; + outline_l.n_contours = outline->n_contours; + outline_l.n_points = outline->n_points; + outline_l.points = vector; + FT_Vector_32_t* vec = from_ptrv(outline->points); + for(int i=0; itags); + outline_l.contours = from_ptrv(outline->contours); + outline_l.flags = outline->flags; + // + FT_BBox_t res = {0}; + my->FT_Outline_Get_CBox(&outline_l, &res); + bbox->xMin = to_long(res.xMin); + bbox->yMin = to_long(res.yMin); + bbox->xMax = to_long(res.xMax); + bbox->yMax = to_long(res.yMax); +} + +EXPORT int my32_FT_Render_Glyph(x64emu_t* emu, FT_GlyphSlotRec_32_t* glyph, uint32_t mode) +{ + #if 1 + void* face = from_ptrv(glyph->face); + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Render_Glyph(glyph, mode); + inplace_FT_FaceRec_shrink(face); + #else + FT_GlyphSlotRec_t slot = {0}; + convert_FT_GlyphSlot_to_64(&slot, glyph); + int ret = my->FT_Render_Glyph(&slot, mode); + convert_FT_GlyphSlot_to_32(glyph, &slot); + #endif + return ret; +} + +EXPORT int my32_FT_Get_WinFNT_Header(x64emu_t* emu, void* face, FT_WinFNT_HeaderRec_32_t* aheader) +{ + FT_WinFNT_HeaderRec_t aheader_l = {0}; + inplace_FT_FaceRec_enlarge(face); + int ret = my->FT_Get_WinFNT_Header(face, &aheader_l); + inplace_FT_FaceRec_shrink(face); + if(!ret) + convert_FT_WinFNT_HeaderRec_to_32(aheader, &aheader_l); + return ret; +} + +EXPORT void my32_FT_Matrix_Multiply(x64emu_t* emu, FT_Matrix_32_t* a, FT_Matrix_32_t* b) +{ + FT_Matrix_t a_l, b_l; + convert_FT_Matrix_to_64(&a_l, a); + convert_FT_Matrix_to_64(&b_l, b); + my->FT_Matrix_Multiply(&a_l, &b_l); + convert_FT_Matrix_to_32(b, &b_l); +} + +EXPORT int my32_FT_Outline_Get_Bitmap(x64emu_t* emu, void* lib, FT_Outline_32_t* outline, FT_Bitmap_32_t* bitmap) +{ + FT_Bitmap_t bitmap_l; + // convert outline to 64 + int n = outline->n_points; + FT_Outline_t outline_l; + FT_Vector_t vector[n]; + outline_l.n_contours = outline->n_contours; + outline_l.n_points = outline->n_points; + outline_l.points = vector; + FT_Vector_32_t* vec = from_ptrv(outline->points); + for(int i=0; itags); + outline_l.contours = from_ptrv(outline->contours); + outline_l.flags = outline->flags; + // + convert_FT_Bitmap_to_64(&bitmap_l, bitmap); + + int ret = my->FT_Outline_Get_Bitmap(lib, &outline_l, &bitmap_l); + convert_FT_Bitmap_to_32(bitmap, &bitmap_l); + return ret; +} + +EXPORT void my32_FT_Outline_Transform(x64emu_t* emu, FT_Outline_32_t* outline, FT_Matrix_32_t* matrix) +{ + FT_Matrix_t matrix_l; + // convert outline to 64 + int n = outline->n_points; + FT_Outline_t outline_l; + FT_Vector_t vector[n]; + outline_l.n_contours = outline->n_contours; + outline_l.n_points = outline->n_points; + outline_l.points = vector; + FT_Vector_32_t* vec = from_ptrv(outline->points); + for(int i=0; itags); + outline_l.contours = from_ptrv(outline->contours); + outline_l.flags = outline->flags; + // + convert_FT_Matrix_to_64(&matrix_l, matrix); + my->FT_Outline_Transform(&outline_l, &matrix_l); + // convert outline to 32 + outline->n_contours = outline_l.n_contours; + outline->n_points = outline_l.n_points; + for(int i=0; itags = to_ptrv(outline_l.tags); + outline->contours = to_ptrv(outline_l.contours); + outline->flags = outline_l.flags; +} + +EXPORT void my32_FT_Outline_Translate(x64emu_t* emu, FT_Outline_32_t* outline, long x, long y) +{ + // convert outline to 64 + int n = outline->n_points; + FT_Outline_t outline_l; + FT_Vector_t vector[n]; + outline_l.n_contours = outline->n_contours; + outline_l.n_points = outline->n_points; + outline_l.points = vector; + FT_Vector_32_t* vec = from_ptrv(outline->points); + for(int i=0; itags); + outline_l.contours = from_ptrv(outline->contours); + outline_l.flags = outline->flags; + // + my->FT_Outline_Translate(&outline_l, x, y); + // convert outline to 32 + outline->n_contours = outline_l.n_contours; + outline->n_points = outline_l.n_points; + for(int i=0; itags = to_ptrv(outline_l.tags); + outline->contours = to_ptrv(outline_l.contours); + outline->flags = outline_l.flags; +} + +EXPORT void my32_FT_Outline_Embolden(x64emu_t* emu, FT_Outline_32_t* outline, long strength) +{ + // convert outline to 64 + int n = outline->n_points; + FT_Outline_t outline_l; + FT_Vector_t vector[n]; + outline_l.n_contours = outline->n_contours; + outline_l.n_points = outline->n_points; + outline_l.points = vector; + FT_Vector_32_t* vec = from_ptrv(outline->points); + for(int i=0; itags); + outline_l.contours = from_ptrv(outline->contours); + outline_l.flags = outline->flags; + // + my->FT_Outline_Embolden(&outline_l, strength); + // convert outline to 32 + outline->n_contours = outline_l.n_contours; + outline->n_points = outline_l.n_points; + for(int i=0; itags = to_ptrv(outline_l.tags); + outline->contours = to_ptrv(outline_l.contours); + outline->flags = outline_l.flags; +} + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedfreetype_private.h b/src/wrapped32/wrappedfreetype_private.h new file mode 100644 index 0000000000000000000000000000000000000000..c42424f0a4069e9b771ca14eafb934b82581f86b --- /dev/null +++ b/src/wrapped32/wrappedfreetype_private.h @@ -0,0 +1,213 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif + +// FT_Bitmap is struct uuipWCCp + +//GO(FT_Activate_Size, iFp) +//GO(FT_Add_Default_Modules, vFp) +//GO(FT_Add_Module, +//GO(FT_Angle_Diff, lFll) +//GO(FT_Atan2, lFll) +//GO(FT_Attach_File, iFpp) +//GO(FT_Attach_Stream, iFpp) +GO(FT_Bitmap_Convert, iFpruuipWCCp_buuipWCCp_i) +//GO(FT_Bitmap_Copy, iFppp) +GO(FT_Bitmap_Done, iFpruuipWCCp_) +//GO(FT_Bitmap_Embolden, iFppll) +GO(FT_Bitmap_Init, vFbuuipWCCp_) +GO(FT_Bitmap_New, vFbuuipWCCp_) +//GO(FT_CeilFix, +//GO(FT_ClassicKern_Free, +//GO(FT_ClassicKern_Validate, +GO(FT_Cos, lFl) +GO(FT_DivFix, lFll) +GOM(FT_Done_Face, iFEp) +GO(FT_Done_FreeType, iFp) +//GO(FT_Done_Glyph, vFp) +//GO(FT_Done_Library, iFp) +//GO(FT_Done_MM_Var, iFpp) +//GO(FT_Done_Size, iFp) +//GO(FT_Face_CheckTrueTypePatents, +//GO(FT_Face_GetCharsOfVariant, +//GO(FT_Face_GetCharVariantIndex, uFpuu) +//GO(FT_Face_GetCharVariantIsDefault, +//GO(FT_Face_GetVariantSelectors, +//GO(FT_Face_GetVariantsOfChar, +//GO(FT_Face_Properties, iFpup) +//GO(FT_Face_SetUnpatentedHinting, +GO(FT_FloorFix, lFl) +//GO(FT_Get_Advance, iFpiup) +//GO(FT_Get_Advances, iFpuuip) +//GO(FT_Get_BDF_Charset_ID, +GOM(FT_Get_BDF_Property, iFEppp) +GOM(FT_Get_Char_Index, uFEpL) +//GO(FT_Get_Charmap_Index, iFp) +//GO(FT_Get_Color_Glyph_Layer, iFpupp) +//GO(FT_Get_Color_Glyph_Paint, iFpuip) +//GO(FT_Get_Color_Glyph_ClipBox, iFpup) +//GO(FT_Get_Colorline_Stops, iFppp) +//GO(FT_Get_CID_From_Glyph_Index, +//GO(FT_Get_CID_Is_Internally_CID_Keyed, +//GO(FT_Get_CID_Registry_Ordering_Supplement, +//GO(FT_Get_CMap_Format, +//GO(FT_Get_CMap_Language_ID, +GOM(FT_Get_First_Char, LFEpp) +//GO(FT_Get_Font_Format, pFp) +//GO(FT_Get_FSType_Flags, WFp) +//GO(FT_Get_Gasp, +//GO(FT_Get_Glyph, iFpp) +GOM(FT_Get_Glyph_Name, iFEpupu) +GOM(FT_Get_Kerning, iFEpuuup) +//GO(FT_Get_MM_Blend_Coordinates, +//GO(FT_Get_MM_Var, iFpp) +//GO(FT_Get_Module, pFpp) +//GO(FT_Get_Multi_Master, +//GO(FT_Get_Name_Index, uFpp) +GOM(FT_Get_Next_Char, LFEpLp) +//GO(FT_Get_Paint, iFppip) // FT_OpaquePaint is a struct with "pi" +//GO(FT_Get_Paint_Layers, iFppp) +//GO(FT_Get_PFR_Advance, +//GO(FT_Get_PFR_Kerning, +//GO(FT_Get_PFR_Metrics, +GOM(FT_Get_Postscript_Name, pFEp) +GOM(FT_Get_PS_Font_Info, iFEpp) +//GO(FT_Get_PS_Font_Private, +//GO(FT_Get_PS_Font_Value, +//GO(FT_Get_Renderer, pFpu) +//GO(FT_Get_Sfnt_LangTag, +GOM(FT_Get_Sfnt_Name, iFEpip) +GOM(FT_Get_Sfnt_Name_Count, uFEp) +GOM(FT_Get_Sfnt_Table, pFEpi) +//GO(FT_Get_SubGlyph_Info, iFpuppppp) +//GO(FT_Get_Track_Kerning, iFplip) +//GO(FT_Get_Transform, vFppp) +GO(FT_Get_TrueType_Engine_Type, uFp) +//GO(FT_Get_Var_Blend_Coordinates, iFpup) +//GO(FT_Get_Var_Design_Coordinates, +GOM(FT_Get_WinFNT_Header, iFEpp) +GOM(FT_Get_X11_Font_Format, pFEp) +//GO(FT_Glyph_Copy, iFpp) +//GO(FT_Glyph_Get_CBox, vFpup) +//GO(FT_GlyphSlot_Embolden, vFp) +//GO(FT_GlyphSlot_Oblique, vFp) +//GO(FT_GlyphSlot_Own_Bitmap, iFp) +//GO(FT_Glyph_Stroke, iFppC) +//GO(FT_Glyph_StrokeBorder, iFppCC) +//GO(FT_Glyph_To_Bitmap, iFpupC) +//GO(FT_Glyph_Transform, iFppp) +//GO(FT_Gzip_Uncompress, +GOM(FT_Has_PS_Glyph_Names, iFEp) +GO(FT_Init_FreeType, iFBp_) +GO(FT_Library_SetLcdFilter, iFpu) +//GO(FT_Library_SetLcdFilterWeights, iFpp) +GO(FT_Library_Version, vFpppp) +//GO(FT_List_Add, +//GO(FT_List_Finalize, +//GO(FT_List_Find, pFpp) +//GO(FT_List_Insert, +//GO(FT_List_Iterate, +//GO(FT_List_Remove, +//GO(FT_List_Up, vFpp) +GOM(FT_Load_Char, iFEpLi) +GOM(FT_Load_Glyph, iFEpui) +GOM(FT_Load_Sfnt_Table, iFEpLlpp) +//GO(FT_Matrix_Invert, iFp) +GOM(FT_Matrix_Multiply, vFEpp) +GO(FT_MulDiv, lFlll) +GO(FT_MulFix, lFll) +GOM(FT_New_Face, iFEpplp) +//GOM(FT_New_Library, iFEpp) +GOM(FT_New_Memory_Face, iFEppllp) +//GO(FT_New_Size, iFpp) +GOM(FT_Open_Face, iFEpplp) +//GO(FT_OpenType_Free, vFpp) +//GO(FT_OpenType_Validate, iFpuppppp) +//GO(FT_Outline_Check, iFp) +//GO(FT_Outline_Copy, iFpp) +//GOM(FT_Outline_Decompose, iFEppp) +//GO(FT_Outline_Done, iFpp) +//GO(FT_Outline_Done_Internal, +GOM(FT_Outline_Embolden, iFEpl) +//GO(FT_Outline_EmboldenXY, iFpll) +//GO(FT_Outline_Get_BBox, iFpp) +GOM(FT_Outline_Get_Bitmap, iFEppp) +GOM(FT_Outline_Get_CBox, vFEpp) +//GO(FT_Outline_GetInsideBorder, +//GO(FT_Outline_Get_Orientation, uFp) +//GO(FT_Outline_GetOutsideBorder, uFp) +//GO(FT_Outline_New, iFpuip) +//GO(FT_Outline_New_Internal, +//GO(FT_Outline_Render, iFppp) +//GO(FT_Outline_Reverse, vFp) +GOM(FT_Outline_Transform, vFEpp) +GOM(FT_Outline_Translate, vFEpll) +//GO(FT_Palette_Select, iFpWp) +//GO(FT_Property_Get, iFpppp) +GO(FT_Property_Set, iFpppp) +//GO(FT_Reference_Face, iFp) +//GO(FT_Reference_Library, +//GO(FT_Remove_Module, iFpp) +GOM(FT_Render_Glyph, iFEpu) +GOM(FT_Request_Size, iFEpp) +//GO(FT_RoundFix, +GOM(FT_Select_Charmap, iFEpi) +GOM(FT_Select_Size, iFEpi) +GOM(FT_Set_Charmap, iFEpp) +GOM(FT_Set_Char_Size, iFEplluu) +//GO(FT_Set_Debug_Hook, +//GO(FT_Set_Default_Properties, vFp) +//GO(FT_Set_MM_Blend_Coordinates, +//GO(FT_Set_MM_Design_Coordinates, iFpup) +GOM(FT_Set_Pixel_Sizes, iFEpuu) +//GO(FT_Set_Renderer, iFppup) +GOM(FT_Set_Transform, vFEppp) +//GO(FT_Set_Var_Blend_Coordinates, +//GO(FT_Set_Var_Design_Coordinates, iFpup) +//GO(FT_Sfnt_Table_Info, iFpupp) +//GO(FT_Sin, lFl) +//GO(FT_Stream_OpenBzip2, +//GO(FT_Stream_OpenGzip, +//GO(FT_Stream_OpenLZW, +//GO(FT_Stroker_BeginSubPath, iFppC) +//GO(FT_Stroker_ConicTo, iFppp) +//GO(FT_Stroker_CubicTo, iFpppp) +//GO(FT_Stroker_Done, vFp) +//GO(FT_Stroker_EndSubPath, iFp) +//GO(FT_Stroker_Export, vFpp) +//GO(FT_Stroker_ExportBorder, vFpup) +//GO(FT_Stroker_GetBorderCounts, iFpupp) +//GO(FT_Stroker_GetCounts, iFppp) +//GO(FT_Stroker_LineTo, iFpp) +//GO(FT_Stroker_New, iFpp) +//GO(FT_Stroker_ParseOutline, iFppC) +//GO(FT_Stroker_Rewind, vFp) +//GO(FT_Stroker_Set, vFpluul) +//GO(FT_Tan, lFl) +//GO(FT_TrueTypeGX_Free, +//GO(FT_TrueTypeGX_Validate, +//GO(FT_Vector_From_Polar, vFpll) +GO(FT_Vector_Length, lFrll_) +//GO(FT_Vector_Polarize, vFppp) +//GO(FT_Vector_Rotate, vFpl) +GO(FT_Vector_Transform, vFbll_rllll_) +GO(FT_Vector_Unit, vFBll_l) + +//GO(FTC_CMapCache_Lookup, uFppiu) +//GO(FTC_CMapCache_New, iFpp) +//GO(FTC_ImageCache_Lookup, iFppupp) +//GO(FTC_ImageCache_LookupScaler, iFppLupp) +//GO(FTC_ImageCache_New, iFpp) +//GO(FTC_Manager_Done, vFp) +//GO(FTC_Manager_LookupFace, iFppp) +//GO(FTC_Manager_LookupSize, iFppp) +//GOM(FTC_Manager_New, iFEpuuLppp) +//GO(FTC_Manager_RemoveFaceID, vFpp) +//GO(FTC_Manager_Reset, vFp) +//GO(FTC_Node_Unref, vFpp) +//GO(FTC_SBitCache_Lookup, iFppupp) +//GO(FTC_SBitCache_LookupScaler, iFppLupp) +//GO(FTC_SBitCache_New, iFpp) + +//GO(TT_New_Context, +//GO(TT_RunIns, diff --git a/src/wrapped32/wrappedldlinux.c b/src/wrapped32/wrappedldlinux.c new file mode 100755 index 0000000000000000000000000000000000000000..b9773d998835d0b7fd128cfd2bfce25c7bc2ed2f --- /dev/null +++ b/src/wrapped32/wrappedldlinux.c @@ -0,0 +1,58 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "elfloader.h" +#include "box32context.h" + +typedef struct __attribute__((packed, aligned(4))) my32_tls_s { + int i; + uint32_t o; +} my32_tls_t; + +EXPORT void* my32___tls_get_addr(x64emu_t* emu, void* p) +{ + my32_tls_t *t = (my32_tls_t*)p; + return GetDTatOffset(emu->context, t->i, t->o); +} + +EXPORT void* my32____tls_get_addr(x64emu_t* emu) +{ + // the GNU version (with 3 '_') use register for the parameter! + my32_tls_t *t = (my32_tls_t*)from_ptrv(R_EAX); + return GetDTatOffset(emu->context, t->i, t->o); +} + +EXPORT ptr_t my32___libc_stack_end; +static void stSetup32(box64context_t* context) +{ + my32___libc_stack_end = to_ptrv(context->stack); // is this the end, or should I add stasz? +} + +// don't try to load the actual ld-linux (because name is variable), just use box64 itself, as it's linked to ld-linux +static const char* ldlinuxName = "ld-linux.so.3"; +#define LIBNAME ldlinux + +// fake (ignored) _r_data structure +EXPORT void* my32__r_debug[5]; + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#define CUSTOM_INIT \ + stSetup32(box64); \ + +#include "wrappedlib_init32.h" + diff --git a/src/wrapped32/wrappedldlinux_private.h b/src/wrapped32/wrappedldlinux_private.h new file mode 100755 index 0000000000000000000000000000000000000000..cfff7731db0e81dd0285263b4cb895bc22968a20 --- /dev/null +++ b/src/wrapped32/wrappedldlinux_private.h @@ -0,0 +1,25 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif + +// _dl_allocate_tls +// _dl_allocate_tls_init +// _dl_argv //type B +// _dl_cache_libcmp +// _dl_deallocate_tls +// _dl_debug_state +// _dl_get_tls_static_info +// _dl_make_stack_executable +// _dl_mcount +// _dl_rtld_di_serinfo +// _dl_tls_setup +DATA(__libc_enable_secure, 4) +DATA(__libc_stack_end, 4) +DATA(__pointer_chk_guard, 4) +DATAM(_r_debug, 20) //type B +DATA(_rtld_global, 4) +DATA(_rtld_global_ro, 4) +DATA(__stack_chk_guard, 4) +// defini dans glibc/sysdeps/i386/dl-tls.h +GOM(___tls_get_addr, pFEv) //the parameter tls_index is in a register (EAX?) +GOM(__tls_get_addr, pFEp) //same, but the parameter is in the stack diff --git a/src/wrapped32/wrappedlib_init32.h b/src/wrapped32/wrappedlib_init32.h new file mode 100644 index 0000000000000000000000000000000000000000..0f91ee94542cae12b1eb7b349d746f0a8a6cfae3 --- /dev/null +++ b/src/wrapped32/wrappedlib_init32.h @@ -0,0 +1,333 @@ +#ifndef LIBNAME +#error Meh +#endif + +#include "debug.h" +#include "librarian/library_inner.h" + +#define FUNC3(M,N) wrapped##M##N +#define FUNC2(M,N) FUNC3(M,N) +#define FUNC(N) FUNC2(LIBNAME,N) +#define QUOTE(M) #M +#define PRIVATE2(P) QUOTE(wrapped##P##_private.h) +#define PRIVATE(P) PRIVATE2(P) +#define MAPNAME3(N,M) N##M +#define MAPNAME2(N,M) MAPNAME3(N,M) +#define MAPNAME(N) MAPNAME2(LIBNAME,N) + +// prepare the maps +#define _DOIT(P,Q) QUOTE(generated/wrapped##P##Q.h) +#define DOIT(P,Q) _DOIT(P,Q) +#include DOIT(LIBNAME,defs32) + +// regular symbol mapped to itself +#define GO(N, W) +// regular symbol mapped to itself, but weak +#define GOW(N, W) +// symbol mapped to my32_symbol +#define GOM(N, W) +// symbol mapped to my32_symbol, but weak +#define GOWM(N, W) +// regular symbol mapped to itself, that returns a structure +#define GOS(N, W) +// weak symbol mapped to itself, that returns a structure +#define GOWS(N, W) +// symbol mapped to another one +#define GO2(N, W, O) +// weak symbol mapped to another one +#define GOW2(N, W, O) +// data +#define DATA(N, S) +// data, Weak (type V) +#define DATAV(N, S) +// data, Uninitialized (type B) +#define DATAB(N, S) +// data, "my32_" type +#define DATAM(N, S) + +// #define the 4 maps first +#undef GO +#undef GOW +#ifdef STATICBUILD +#define GO(N, W) {#N, W##_32, 0, &N}, +#define GOW(N, W) {#N, W##_32, 1, &N}, +#else +#define GO(N, W) {#N, W##_32, 0}, +#define GOW(N, W) {#N, W##_32, 1}, +#endif +static const map_onesymbol_t MAPNAME(symbolmap)[] = { + #include PRIVATE(LIBNAME) +}; +#undef GO +#undef GOW +#undef GOM +#undef GOWM +#define GO(N, W) +#define GOW(N, W) +#ifdef STATICBUILD +#define GOM(N, W) {#N, W##_32, 0, &my32_##N}, +#define GOWM(N, W) {#N, W##_32, 1, &my32_##N}, +#else +#define GOM(N, W) {#N, W##_32, 0}, +#define GOWM(N, W) {#N, W##_32, 1}, +#endif +static const map_onesymbol_t MAPNAME(mysymbolmap)[] = { + #include PRIVATE(LIBNAME) +}; +#undef GOM +#undef GOWM +#define GOM(N, W) +#define GOWM(N, W) +#undef GOS +#undef GOWS +#ifdef STATICBUILD +#define GOS(N, W) {#N, W##_32, 0, &my32_##N}, +#define GOWS(N, W) {#N, W##_32, 1, &my32_##N}, +#else +#define GOS(N, W) {#N, W##_32, 0}, +#define GOWS(N, W) {#N, W##_32, 1}, +#endif +static const map_onesymbol_t MAPNAME(stsymbolmap)[] = { + #include PRIVATE(LIBNAME) +}; +#undef GOS +#undef GOWS +#define GOS(N, W) +#define GOWS(N, W) +#undef GO2 +#undef GOW2 +#ifdef STATICBUILD +#define GO2(N, W, O) {#N, W##_32, 0, #O, &O}, +#define GOW2(N, W, O) {#N, W##_32, 1, #O, &O}, +#else +#define GO2(N, W, O) {#N, W##_32, 0, #O}, +#define GOW2(N, W, O) {#N, W##_32, 1, #O}, +#endif +static const map_onesymbol2_t MAPNAME(symbol2map)[] = { + #include PRIVATE(LIBNAME) +}; +#undef GO2 +#define GO2(N, W, O) +#undef GOW2 +#define GOW2(N, W, O) +#undef DATA +#undef DATAV +#undef DATAB +#ifdef STATICBUILD +#define DATA(N, S) {#N, S, 0, (void*)&N}, +#define DATAV(N, S) {#N, S, 1, (void*)&N}, +#define DATAB(N, S) {#N, S, 0, (void*)&N}, +#else +#define DATA(N, S) {#N, S, 0}, +#define DATAV(N, S) {#N, S, 1}, +#define DATAB(N, S) {#N, S, 0}, +#endif +static const map_onedata_t MAPNAME(datamap)[] = { + #include PRIVATE(LIBNAME) +}; +#undef DATA +#undef DATAV +#undef DATAB +#define DATA(N, S) +#define DATAV(N, S) +#define DATAB(N, S) +#undef DATAM +#ifdef STATICBUILD +#define DATAM(N, S) {#N, S, 0, &my32_##N}, +#else +#define DATAM(N, S) {#N, S, 0}, +#endif +static const map_onedata_t MAPNAME(mydatamap)[] = { + #include PRIVATE(LIBNAME) +}; + +#undef GO +#undef GOW +#undef GOM +#undef GOWM +#undef GO2 +#undef GOS +#undef GOWS +#undef DATA +#undef DATAV +#undef DATAB +#undef DATAM + +#include DOIT(LIBNAME,undefs32) +#undef DOIT +#undef _DOIT + +#if !defined(ALTNAME) && defined(ALTNAME2) +#error Please define ALTNAME before defining ALTNAME2 +#endif + +#define COUNT_NARGS(...) COUNT_NARGS_AUX(__VA_ARGS__, 5, 4, 3, 2, 1, 0) +#define COUNT_NARGS_AUX(_1, _2, _3, _4, _5, n, ...) COUNT_NARGS_AUX##n(This should not appear, too many libraries) +#define COUNT_NARGS_AUX1(v1, v2) 1 +#define COUNT_NARGS_AUX2(v1, v2) 2 +#define COUNT_NARGS_AUX3(v1, v2) 3 +#define COUNT_NARGS_AUX4(v1, v2) 4 +#define COUNT_NARGS_AUX5(v1, v2) 5 + +int FUNC(_init32)(library_t* lib, box64context_t* box64) +{ + (void)box64; + + // Init first + box_free(lib->path); lib->path=NULL; +#ifdef PRE_INIT + PRE_INIT +#endif + { +#ifndef STATICBUILD + lib->w.lib = dlopen(MAPNAME(Name), RTLD_LAZY | RTLD_GLOBAL); + if(!lib->w.lib) { +#ifdef ALTNAME + lib->w.lib = dlopen(ALTNAME, RTLD_LAZY | RTLD_GLOBAL); + if(!lib->w.lib) { +#ifdef ALTNAME2 + lib->w.lib = dlopen(ALTNAME2, RTLD_LAZY | RTLD_GLOBAL); + if(!lib->w.lib) +#endif +#endif + return -1; +#ifdef ALTNAME +#ifdef ALTNAME2 + else lib->path = box_strdup(ALTNAME2); +#endif + } else lib->path = box_strdup(ALTNAME); +#endif + } else lib->path = box_strdup(MAPNAME(Name)); +#else + lib->path = box_strdup(MAPNAME(Name)); +#endif + } + WrappedLib_CommonInit(lib); + + khint_t k; + int ret; + int cnt; + + // populates maps... +#ifdef STATICBUILD +#define DOIT(mapname) \ + cnt = sizeof(MAPNAME(mapname))/sizeof(map_onesymbol_t); \ + for (int i = 0; i < cnt; ++i) { \ + if (MAPNAME(mapname)[i].weak) { \ + k = kh_put(symbolmap, lib->w.w##mapname, MAPNAME(mapname)[i].name, &ret); \ + kh_value(lib->w.w##mapname, k).w = MAPNAME(mapname)[i].w; \ + kh_value(lib->w.w##mapname, k).resolved = 0; \ + kh_value(lib->w.w##mapname, k).addr = (uintptr_t)MAPNAME(mapname)[i].addr; \ + } else { \ + k = kh_put(symbolmap, lib->w.mapname, MAPNAME(mapname)[i].name, &ret); \ + kh_value(lib->w.mapname, k).w = MAPNAME(mapname)[i].w; \ + kh_value(lib->w.mapname, k).resolved = 0; \ + kh_value(lib->w.mapname, k).addr = (uintptr_t)MAPNAME(mapname)[i].addr; \ + } \ + if (strchr(MAPNAME(mapname)[i].name, '@')) \ + AddDictionnary(box64->versym, MAPNAME(mapname)[i].name); \ + } +#else +#define DOIT(mapname) \ + cnt = sizeof(MAPNAME(mapname))/sizeof(map_onesymbol_t); \ + for (int i = 0; i < cnt; ++i) { \ + if (MAPNAME(mapname)[i].weak) { \ + k = kh_put(symbolmap, lib->w.w##mapname, MAPNAME(mapname)[i].name, &ret); \ + kh_value(lib->w.w##mapname, k).w = MAPNAME(mapname)[i].w; \ + kh_value(lib->w.w##mapname, k).resolved = 0; \ + } else { \ + k = kh_put(symbolmap, lib->w.mapname, MAPNAME(mapname)[i].name, &ret); \ + kh_value(lib->w.mapname, k).w = MAPNAME(mapname)[i].w; \ + kh_value(lib->w.mapname, k).resolved = 0; \ + } \ + if (strchr(MAPNAME(mapname)[i].name, '@')) \ + AddDictionnary(box64->versym, MAPNAME(mapname)[i].name); \ + } +#endif + DOIT(symbolmap) + DOIT(mysymbolmap) +#undef DOIT + cnt = sizeof(MAPNAME(stsymbolmap))/sizeof(map_onesymbol_t); + for (int i=0; iw.stsymbolmap, MAPNAME(stsymbolmap)[i].name, &ret); + kh_value(lib->w.stsymbolmap, k).w = MAPNAME(stsymbolmap)[i].w; + #ifdef STATICBUILD + kh_value(lib->w.stsymbolmap, k).resolved = 1; + kh_value(lib->w.stsymbolmap, k).addr = (uintptr_t)MAPNAME(stsymbolmap)[i].addr; + #else + kh_value(lib->w.stsymbolmap, k).resolved = 0; + #endif + if(strchr(MAPNAME(stsymbolmap)[i].name, '@')) + AddDictionnary(box64->versym, MAPNAME(stsymbolmap)[i].name); + } + cnt = sizeof(MAPNAME(symbol2map))/sizeof(map_onesymbol2_t); + for (int i=0; iw.symbol2map, MAPNAME(symbol2map)[i].name, &ret); + kh_value(lib->w.symbol2map, k).name = MAPNAME(symbol2map)[i].name2; + kh_value(lib->w.symbol2map, k).w = MAPNAME(symbol2map)[i].w; + kh_value(lib->w.symbol2map, k).weak = MAPNAME(symbol2map)[i].weak; + #ifdef STATICBUILD + kh_value(lib->w.symbol2map, k).resolved = 1; + kh_value(lib->w.symbol2map, k).addr = (uintptr_t)MAPNAME(symbol2map)[i].addr; + #else + kh_value(lib->w.symbol2map, k).resolved = 0; + #endif + if(strchr(MAPNAME(symbol2map)[i].name, '@')) + AddDictionnary(box64->versym, MAPNAME(symbol2map)[i].name); + } + cnt = sizeof(MAPNAME(datamap))/sizeof(map_onedata_t); + for (int i=0; iw.wdatamap, MAPNAME(datamap)[i].name, &ret); + #ifdef STATICBUILD + kh_value(lib->w.wdatamap, k).size = MAPNAME(datamap)[i].sz; + kh_value(lib->w.wdatamap, k).addr = (uintptr_t)MAPNAME(datamap)[i].addr; + #else + kh_value(lib->w.wdatamap, k) = MAPNAME(datamap)[i].sz; + #endif + } else { + k = kh_put(datamap, lib->w.datamap, MAPNAME(datamap)[i].name, &ret); + #ifdef STATICBUILD + kh_value(lib->w.datamap, k).size = MAPNAME(datamap)[i].sz; + kh_value(lib->w.datamap, k).addr = (uintptr_t)MAPNAME(datamap)[i].addr; + #else + kh_value(lib->w.datamap, k) = MAPNAME(datamap)[i].sz; + #endif + } + } + cnt = sizeof(MAPNAME(mydatamap))/sizeof(map_onedata_t); + for (int i=0; iw.mydatamap, MAPNAME(mydatamap)[i].name, &ret); + #ifdef STATICBUILD + kh_value(lib->w.mydatamap, k).size = MAPNAME(mydatamap)[i].sz; + kh_value(lib->w.mydatamap, k).addr = (uintptr_t)MAPNAME(mydatamap)[i].addr; + #else + kh_value(lib->w.mydatamap, k) = MAPNAME(mydatamap)[i].sz; + #endif + } +#ifdef ALTMY + SETALT(ALTMY); +#endif +#ifdef HAS_MY + getMy(lib); +#endif +#ifdef CUSTOM_INIT + CUSTOM_INIT +#endif +#ifdef NEEDED_LIBS + setNeededLibs(lib, COUNT_NARGS(NEEDED_LIBS), NEEDED_LIBS); +#endif + + return 0; +} + +void FUNC(_fini32)(library_t* lib) +{ +#ifdef HAS_MY + freeMy(); +#endif +#ifdef CUSTOM_FINI + CUSTOM_FINI +#endif + WrappedLib_FinishFini(lib); +} diff --git a/src/wrapped32/wrappedlibasound.c b/src/wrapped32/wrappedlibasound.c new file mode 100644 index 0000000000000000000000000000000000000000..c572ae85861c2888ebf1d818062a1489cdfa2f2e --- /dev/null +++ b/src/wrapped32/wrappedlibasound.c @@ -0,0 +1,377 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box64context.h" +#include "emu/x64emu_private.h" +#include "bridge.h" +#include "box32.h" + +#define LIBNAME libasound +static const char* libasoundName = "libasound.so.2"; + +typedef int (*iFpp_t)(void*, void*); +typedef size_t(*LFv_t)(); + +#define ADDED_FUNCTIONS() \ + GO(snd_pcm_hw_params_current, iFpp_t) \ + GO(snd_pcm_hw_params_get_channels, iFpp_t) \ + GO(snd_pcm_hw_params_sizeof, LFv_t) \ + +#include "generated/wrappedlibasoundtypes32.h" + +EXPORT uintptr_t my32_snd_lib_error = 0; +static void default_error_handler(const char *file, int line, const char *function, int err, const char *fmt, va_list ap) +{ + (void)file; (void)line; (void)function; (void)err; + vprintf(fmt, ap); +} + +#define ADDED_INIT() \ + my32_snd_lib_error = AddCheckBridge(my_lib->w.bridge, vFpipipV_32, default_error_handler, 0, "ASoundCustomErrorHandler"); + +#define ADDED_FINI() \ + my32_snd_lib_error = 0; // no removing of bridge + +#include "wrappercallback32.h" + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) + +// snd_async_callback_t +#define GO(A) \ +static uintptr_t my32_async_fct_##A = 0; \ +static void* my32_async_##A(void* handler) \ +{ \ + return (void*)RunFunctionFmt(my32_async_fct_##A, "p", handler); \ +} +SUPER() +#undef GO +static void* findAsyncFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_async_fct_##A == (uintptr_t)fct) return my32_async_##A; + SUPER() + #undef GO + #define GO(A) if(my32_async_fct_##A == 0) {my32_async_fct_##A = (uintptr_t)fct; return my32_async_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Asound Async callback\n"); + return NULL; +} +// snd_mixer_elem_callback_t +#define GO(A) \ +static uintptr_t my32_elem_fct_##A = 0; \ +static int my32_elem_##A(void* elem, uint32_t mask) \ +{ \ + return (int)RunFunctionFmt(my32_elem_fct_##A, "pu", elem, mask); \ +} +SUPER() +#undef GO +static void* findElemFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_elem_fct_##A == (uintptr_t)fct) return my32_elem_##A; + SUPER() + #undef GO + #define GO(A) if(my32_elem_fct_##A == 0) {my32_elem_fct_##A = (uintptr_t)fct; return my32_elem_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Asound Elem callback\n"); + return NULL; +} +// snd_pcm_hook_func_t +#define GO(A) \ +static uintptr_t my32_pcm_hook_fct_##A = 0; \ +static int my32_pcm_hook_##A(void* a) \ +{ \ + return (int)RunFunctionFmt(my32_pcm_hook_fct_##A, "p", a); \ +} +SUPER() +#undef GO +static void* findPCMHookFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_pcm_hook_fct_##A == (uintptr_t)fct) return my32_elem_##A; + SUPER() + #undef GO + #define GO(A) if(my32_pcm_hook_fct_##A == 0) {my32_pcm_hook_fct_##A = (uintptr_t)fct; return my32_pcm_hook_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Asound PCMHook callback\n"); + return NULL; +} +// snd_mixer_compare_t +#define GO(A) \ +static uintptr_t my32_mixer_compare_fct_##A = 0; \ +static int my32_mixer_compare_##A(void* a) \ +{ \ + return (int)RunFunctionFmt(my32_mixer_compare_fct_##A, "p", a); \ +} +SUPER() +#undef GO +static void* findMixerCompareFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_mixer_compare_fct_##A == (uintptr_t)fct) return my32_elem_##A; + SUPER() + #undef GO + #define GO(A) if(my32_mixer_compare_fct_##A == 0) {my32_mixer_compare_fct_##A = (uintptr_t)fct; return my32_mixer_compare_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Asound Mixer Compare callback\n"); + return NULL; +} +// private_free +#define GO(A) \ +static uintptr_t my32_private_free_fct_##A = 0; \ +static int my32_private_free_##A(void* a) \ +{ \ + return (int)RunFunctionFmt(my32_private_free_fct_##A, "p", a); \ +} +SUPER() +#undef GO +static void* findPrivateFreeFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_private_free_fct_##A == (uintptr_t)fct) return my32_elem_##A; + SUPER() + #undef GO + #define GO(A) if(my32_private_free_fct_##A == 0) {my32_private_free_fct_##A = (uintptr_t)fct; return my32_private_free_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Asound PrivateFree callback\n"); + return NULL; +} +// snd_mixer_event_t +#define GO(A) \ +static uintptr_t my32_mixer_event_fct_##A = 0; \ +static int my32_mixer_event_##A(void* a, uint32_t b, void* c, void* d) \ +{ \ + return (int)RunFunctionFmt(my32_mixer_event_fct_##A, "pupp", a, b, c, d); \ +} +SUPER() +#undef GO +static void* findMixerEventFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_mixer_event_fct_##A == (uintptr_t)fct) return my32_elem_##A; + SUPER() + #undef GO + #define GO(A) if(my32_mixer_event_fct_##A == 0) {my32_mixer_event_fct_##A = (uintptr_t)fct; return my32_mixer_event_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Asound MixerEvent callback\n"); + return NULL; +} + + +//EXPORT int my32_snd_async_add_handler(x64emu_t *emu, void *handler, int fd, void* callback, void *private_data) +//{ +// return my->snd_async_add_handler(handler, fd, findAsyncFct(callback), private_data); +//} + +//EXPORT int my32_snd_async_add_pcm_handler(x64emu_t *emu, void *handler, void* pcm, void* callback, void *private_data) +//{ +// return my->snd_async_add_pcm_handler(handler, pcm, findAsyncFct(callback), private_data); +//} + +static void* current_error_handler = NULL; +static void dummy32_error_handler(const char *file, int line, const char *function, int err, const char *fmt, ...) +{ + (void)function; (void)err; + va_list ap; + + fprintf(stderr, "Warning: this is a dummy snd_lib error handler\n"); + fprintf(stderr, "Error in file %s on line %i: ", file, line); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); +} + +static void empty_error_handler(const char *file, int line, const char *function, int err, const char *fmt, ...) +{ + (void)file; (void)line; (void)function; (void)err; (void)fmt; + // do nothing +} + +//EXPORT int my32_snd_lib_error_set_handler(x64emu_t* emu, void* handler) +//{ +// current_error_handler = handler; +// void *error_handler; +// uint8_t *code = (uint8_t *)handler; +// if (code) { +// if ((code[0] == 0xC3) || ((code[0] == 0xF3) && (code[1] == 0xC3))) { +// error_handler = &empty_error_handler; +// } else { +// error_handler = &dummy32_error_handler; +// printf_log(LOG_NONE, "Warning: snd_lib_error_set_handler: using dummy error handler\n"); +// } +// } else error_handler = NULL; +// +// return my->snd_lib_error_set_handler(error_handler); +//} + +//EXPORT void my32_snd_mixer_elem_set_callback(x64emu_t* emu, void* handler, void* f) +//{ +// my->snd_mixer_elem_set_callback(handler, findElemFct(f)); +//} + +//EXPORT int my32_snd_pcm_hook_add(x64emu_t* emu, void* hook, void* pcm, uint32_t type, void* f, void* data) +//{ +// return my->snd_pcm_hook_add(hook, pcm, type, findPCMHookFct(f), data); +//} + +//EXPORT int my32_snd_mixer_set_compare(x64emu_t* emu, void* mixer, void* f) +//{ +// return my->snd_mixer_set_compare(mixer, findMixerCompareFct(f)); +//} + +//EXPORT int my32_snd_mixer_elem_new(x64emu_t* emu, void* elem, uint32_t type, int weight, void* data, void* f) +//{ +// return my->snd_mixer_elem_new(elem, type, weight, data, findPrivateFreeFct(f)); +//} + +//EXPORT void* my32_snd_mixer_class_get_event(x64emu_t* emu, void* class) +//{ +// void* ret = my->snd_mixer_class_get_event(class); +// AddAutomaticBridge(my_lib->w.bridge, iFpupp, ret, 0, "snd_event_t"); +// return ret; +//} + +//EXPORT void* my32_snd_mixer_class_get_compare(x64emu_t* emu, void* class) +//{ +// void* ret = my->snd_mixer_class_get_compare(class); +// AddAutomaticBridge(my_lib->w.bridge, iFpp, ret, 0, "snd_mixer_compare_t"); +// return ret; +//} + +//EXPORT int my32_snd_mixer_class_set_event(x64emu_t* emu, void* class, void* f) +//{ +// return my->snd_mixer_class_set_event(class, findMixerEventFct(f)); +//} + +//EXPORT int my32_snd_mixer_class_set_private_free(x64emu_t* emu, void* class, void* f) +//{ +// return my->snd_mixer_class_set_private_free(class, findPrivateFreeFct(f)); +//} + +//EXPORT int my32_snd_mixer_class_set_compare(x64emu_t* emu, void* class, void* f) +//{ +// return my->snd_mixer_class_set_compare(class, findMixerCompareFct(f)); +//} + +typedef struct _my_snd_pcm_channel_area_s { + void *addr; + unsigned int first; + unsigned int step; +} my_snd_pcm_channel_area_t; +typedef struct __attribute__((packed, aligned(4))) _my_snd_pcm_channel_area_32_s { + ptr_t addr; + unsigned int first; + unsigned int step; +} my_snd_pcm_channel_area_32_t; + +EXPORT int my32_snd_pcm_mmap_begin(x64emu_t* emu, void* pcm, ptr_t* areas, ulong_t* offset, ulong_t* frames) +{ + my_snd_pcm_channel_area_t *l_areas; + unsigned long l_offset; + unsigned long l_frames = from_ulong(*frames); + int ret = my->snd_pcm_mmap_begin(pcm, &l_areas, &l_offset, &l_frames); + if(ret) + return ret; + *offset = to_ulong(l_offset); + *frames = to_ulong(l_frames); + static my_snd_pcm_channel_area_32_t my_areas[15] = {0}; + static void* last_pcm = NULL; + static int last_nch = 0; + // get the number of channels + unsigned int nch = 0; + if(pcm==last_pcm) + nch = last_nch; + else { + void* hw=alloca(my->snd_pcm_hw_params_sizeof()); + my->snd_pcm_hw_params_current(pcm, hw); + my->snd_pcm_hw_params_get_channels(hw, &nch); + last_pcm = pcm; + last_nch = nch; + } + if(nch>15) {printf_log(LOG_INFO, "Warning, too many channels in pcm of 32bits alsa: %d\n", nch); nch=15; } + for(int i=0; isnd_device_name_hint(card, iface, &hints_l); + if(ret) return ret; + *hints = to_ptrv(hints_l); + // inplace shrink + int n = 0; + while(hints_l[n]) ++n; + ++n; + for(int i=0; i=0; --i) + hints_l[i] = from_ptrv(hints[i]); + return my->snd_device_name_free_hint(hints_l); +} + +void* my_dlopen(x64emu_t* emu, void *filename, int flag); // defined in wrappedlibdl.c +char* my_dlerror(x64emu_t* emu); +int my_dlclose(x64emu_t* emu, void *handle); +void* my_dlvsym(x64emu_t* emu, void *handle, void *symbol, void *version); +EXPORT void * my32_snd_dlopen(x64emu_t* emu, void* name, int mode, void* errbuf, size_t errbuflen) +{ + void* ret = my_dlopen(emu, name, mode); // Does NULL name (so dlopen libasound) need special treatment? + if(!ret && errbuf) { + strncpy(errbuf, my_dlerror(emu), errbuflen); + } + return ret; +} +EXPORT int my32_snd_dlclose(x64emu_t* emu, void* handle) +{ + return my_dlclose(emu, handle); +} +EXPORT void* my32_snd_dlsym(x64emu_t* emu, void* handle, void* name, void* version) +{ + return my_dlvsym(emu, handle, name, version); +} + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibasound_private.h b/src/wrapped32/wrappedlibasound_private.h new file mode 100644 index 0000000000000000000000000000000000000000..1de9210f045c1c31085cb383f1de15196fc62b80 --- /dev/null +++ b/src/wrapped32/wrappedlibasound_private.h @@ -0,0 +1,1279 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +//DATAB(alsa_lisp_nil, 4) +//DATAB(alsa_lisp_t, 4) +//DATAM(snd_config, 4) +//DATAB(_snd_config_hook_load_dlsym_config_hook_001, 4) +//DATAB(_snd_config_hook_load_for_all_cards_dlsym_config_hook_001, 4) +//DATAB(__snd_ctl_hw_open_dlsym_control_001, 4) +//DATAB(__snd_ctl_shm_open_dlsym_control_001, 4) +//DATAB(_snd_func_card_driver_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_card_id_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_card_inum_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_card_name_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_concat_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_datadir_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_getenv_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_iadd_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_igetenv_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_imul_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_pcm_args_by_class_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_pcm_id_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_private_card_driver_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_private_pcm_subdevice_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_private_string_dlsym_config_evaluate_001, 4) +//DATAB(_snd_func_refer_dlsym_config_evaluate_001, 4) +//DATAB(__snd_hwdep_hw_open_dlsym_hwdep_001, 4) +//DATAB(__snd_pcm_adpcm_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_alaw_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_asym_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_copy_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_dmix_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_dshare_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_dsnoop_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_empty_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_file_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_hook_ctl_elems_install_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_hooks_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_hw_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_iec958_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_ladspa_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_lfloat_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_linear_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_mmap_emul_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_mulaw_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_multi_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_null_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_plug_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_rate_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_route_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_share_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_shm_open_dlsym_pcm_001, 4) +//DATAB(__snd_pcm_softvol_open_dlsym_pcm_001, 4) +//DATAB(__snd_rawmidi_hw_open_dlsym_rawmidi_001, 4) +//DATAB(__snd_rawmidi_virtual_open_dlsym_rawmidi_001, 4) +//DATAB(__snd_seq_hw_open_dlsym_seq_001, 4) +//DATAB(__snd_timer_hw_open_dlsym_timer_001, 4) +//DATAB(__snd_timer_query_hw_open_dlsym_timer_query_001, 4) + +GO(snd_asoundlib_version, pFv) +//GOM(snd_dlopen, pFEpipL) +//GOM(snd_dlsym, pFEppp) +//GOM(snd_dlclose, iFEp) +//GOM(snd_async_add_handler, iFEbp_ipp) +GO(snd_async_del_handler, iFp) +GO(snd_async_handler_get_fd, iFp) +GO(snd_async_handler_get_signo, iFp) +GO(snd_async_handler_get_callback_private, pFp) +GO(snd_shm_area_create, pFip) +GO(snd_shm_area_share, pFp) +GO(snd_shm_area_destroy, iFp) +GO(snd_user_file, iFpbp_) +GO(snd_input_stdio_open, iFbp_pp) +GO(snd_input_stdio_attach, iFbp_Si) +GO(snd_input_buffer_open, iFbp_pl) +GO(snd_input_close, iFp) +//GOM(snd_input_scanf, iFEppV) +GO(snd_input_gets, pFppL) +GO(snd_input_getc, iFp) +GO(snd_input_ungetc, iFpi) +GO(snd_output_stdio_open, iFbp_pp) +GO(snd_output_stdio_attach, iFbp_Si) +GO(snd_output_buffer_open, iFbp_) +GO(snd_output_buffer_string, LFpbp_) +GO(snd_output_close, iFp) +//GOM(snd_output_printf, iFEppV) +//GOM(snd_output_vprintf, iFEppp) +GO(snd_output_puts, iFpp) +GO(snd_output_putc, iFpi) +GO(snd_output_flush, iFp) +GO(snd_strerror, pFi) +//GOM(snd_lib_error_set_handler, iFEp) +GO(snd_config_top, iFbp_) +GO(snd_config_load, iFpp) +GO(snd_config_load_override, iFpp) +GO(snd_config_save, iFpp) +GO(snd_config_update, iFv) +GO(snd_config_update_r, iFbp_bp_p) +GO(snd_config_update_free, iFp) +GO(snd_config_update_free_global, iFv) +GO(snd_config_search, iFppbp_) +//GOM(snd_config_searchv, iFEpbp_V) +GO(snd_config_search_definition, iFpppbp_) +GO(snd_config_expand, iFppppbp_) +GO(snd_config_evaluate, iFpppbp_) +GO(snd_config_add, iFpp) +GO(snd_config_delete, iFp) +GO(snd_config_delete_compound_members, iFp) +GO(snd_config_copy, iFbp_p) +GO(snd_config_make, iFbp_pu) +GO(snd_config_make_integer, iFbp_p) +GO(snd_config_make_integer64, iFbp_p) +GO(snd_config_make_real, iFbp_p) +GO(snd_config_make_string, iFbp_p) +GO(snd_config_make_pointer, iFbp_p) +GO(snd_config_make_compound, iFbp_pi) +GO(snd_config_imake_integer, iFbp_pl) +GO(snd_config_imake_integer64, iFbp_pI) +GO(snd_config_imake_real, iFbp_pd) +GO(snd_config_imake_string, iFbp_pp) +GO(snd_config_imake_pointer, iFbp_pp) +GO(snd_config_get_type, uFp) +GO(snd_config_set_id, iFpp) +GO(snd_config_set_integer, iFpl) +GO(snd_config_set_integer64, iFpI) +GO(snd_config_set_real, iFpd) +GO(snd_config_set_string, iFpp) +GO(snd_config_set_ascii, iFpp) +GO(snd_config_set_pointer, iFpp) +GO(snd_config_get_id, iFpbp_) +GO(snd_config_get_integer, iFpbl_) +GO(snd_config_get_integer64, iFpp) +GO(snd_config_get_real, iFpp) +GO(snd_config_get_ireal, iFpp) +GO(snd_config_get_string, iFpbp_) +GO(snd_config_get_ascii, iFpbp_) +GO(snd_config_get_pointer, iFpbp_) +GO(snd_config_test_id, iFpp) +GO(snd_config_iterator_first, pFp) +GO(snd_config_iterator_next, pFp) +GO(snd_config_iterator_end, pFp) +GO(snd_config_iterator_entry, pFp) +GO(snd_config_get_bool_ascii, iFp) +GO(snd_config_get_bool, iFp) +GO(snd_config_get_ctl_iface_ascii, iFp) +GO(snd_config_get_ctl_iface, iFp) +GOM(snd_device_name_free_hint, iFEp) +GO(snd_device_name_get_hint, pFpp) +GOM(snd_device_name_hint, iFEipp) +//GOM(snd_names_list, iFEpbp_) +//GOM(snd_names_list_free, vFEp) +GO(snd_pcm_format_mask_sizeof, LFv) +GO(snd_pcm_subformat_mask_sizeof, LFv) +GO(snd_pcm_status_sizeof, LFv) +//GOM(snd_async_add_pcm_handler, iFEbp_ppp) +GO(snd_async_handler_get_pcm, pFp) +GO(snd_pcm_access_mask_any, vFp) +GO(snd_pcm_access_mask_copy, vFpp) +GO(snd_pcm_access_mask_empty, iFp) +GO(snd_pcm_access_mask_free, vFp) +GO(snd_pcm_access_mask_malloc, iFbp_) +GO(snd_pcm_access_mask_none, vFp) +GO(snd_pcm_access_mask_reset, vFpu) +GO(snd_pcm_access_mask_set, vFpu) +GO(snd_pcm_access_mask_test, iFpu) +GO(snd_pcm_access_name, pFu) +GO(snd_pcm_area_copy, iFrpuu_Lrpuu_Lui) +GO(snd_pcm_area_silence, iFrpuu_Lui) +//GO(snd_pcm_areas_copy, iFbpuu_Lbpuu_LuLi) // it's arrays, 1 per channel, not simple pointers +//GO(snd_pcm_areas_silence, iFbpuu_LuLi) // same +GO(snd_pcm_avail, lFp) +GO(snd_pcm_avail_delay, iFpbl_bl_) +GO(snd_pcm_avail_update, lFp) +GO(snd_pcm_build_linear_format, iFiiii) +GO(snd_pcm_bytes_to_frames, lFpl) +GO(snd_pcm_bytes_to_samples, lFpl) +GO(snd_pcm_chmap_type_name, pFu) +GO(snd_pcm_chmap_name, pFu) +GO(snd_pcm_chmap_long_name, pFu) +GO(snd_pcm_chmap_print, iFpLp) +GO(snd_pcm_chmap_from_string, uFp) +GO(snd_pcm_chmap_parse_string, pFp) +GO(snd_pcm_close, iFp) +GO(snd_pcm_delay, iFpBL_) +GO(snd_pcm_drain, iFp) +GO(snd_pcm_drop, iFp) +GO(snd_pcm_dump, iFpp) +GO(snd_pcm_dump_hw_setup, iFpp) +GO(snd_pcm_dump_setup, iFpp) +GO(snd_pcm_dump_sw_setup, iFpp) +GO(snd_pcm_format_big_endian, iFi) +GO(snd_pcm_format_cpu_endian, iFi) +GO(snd_pcm_format_description, pFi) +GO(snd_pcm_format_float, iFi) +GO(snd_pcm_format_linear, iFi) +GO(snd_pcm_format_little_endian, iFi) +GO(snd_pcm_format_mask_any, vFp) +GO(snd_pcm_format_mask_copy, vFpp) +GO(snd_pcm_format_mask_empty, iFp) +GO(snd_pcm_format_mask_free, vFp) +GO(snd_pcm_format_mask_malloc, iFbp_) +GO(snd_pcm_format_mask_none, vFp) +GO(snd_pcm_format_mask_reset, vFpi) +GO(snd_pcm_format_mask_set, vFpi) +GO(snd_pcm_format_mask_test, iFpi) +GO(snd_pcm_format_name, pFi) +GO(snd_pcm_format_physical_width, iFi) +GO(snd_pcm_format_set_silence, iFipu) +GO(snd_pcm_format_signed, iFi) +GO(snd_pcm_format_silence, CFi) +GO(snd_pcm_format_silence_16, WFi) +GO(snd_pcm_format_silence_32, uFi) +GO(snd_pcm_format_silence_64, UFi) +GO(snd_pcm_format_size, lFiL) +GO(snd_pcm_format_unsigned, iFi) +GO(snd_pcm_format_value, iFp) +GO(snd_pcm_format_width, iFi) +GO(snd_pcm_forward, lFpL) +GO(snd_pcm_frames_to_bytes, lFpl) +GO(snd_pcm_get_params, iFpbL_bL_) +GO(snd_pcm_get_chmap, pFp) +//GOM(snd_pcm_hook_add, iFEbp_pupp) +GO(snd_pcm_hook_get_pcm, pFp) +GO(snd_pcm_hook_get_private, pFp) +GO(snd_pcm_hook_remove, iFp) +GO(snd_pcm_hook_set_private, vFpp) +GO(snd_pcm_hw_free, iFp) +GO(snd_pcm_hw_params, iFpp) +GO(snd_pcm_hw_params_any, iFpp) +GO(snd_pcm_hw_params_can_mmap_sample_resolution, iFp) +GO(snd_pcm_hw_params_can_overrange, iFp) +GO(snd_pcm_hw_params_can_pause, iFp) +GO(snd_pcm_hw_params_can_resume, iFp) +GO(snd_pcm_hw_params_can_sync_start, iFp) +GO(snd_pcm_hw_params_copy, vFpp) +GO(snd_pcm_hw_params_current, iFpp) +GO(snd_pcm_hw_params_dump, iFpp) +GO(snd_pcm_hw_params_free, vFp) +GO(snd_pcm_hw_params_get_access, iFpp) +GO(snd_pcm_hw_params_get_access_mask, iFpp) +GO(snd_pcm_hw_params_get_buffer_size, iFpBL_) +GO(snd_pcm_hw_params_get_buffer_size_max, iFpBL_) +GO(snd_pcm_hw_params_get_buffer_size_min, iFpBL_) +GO(snd_pcm_hw_params_get_buffer_time, iFppp) +GO(snd_pcm_hw_params_get_buffer_time_max, iFppp) +GO(snd_pcm_hw_params_get_buffer_time_min, iFppp) +GO(snd_pcm_hw_params_get_channels, iFpp) +GO(snd_pcm_hw_params_get_channels_max, iFpp) +GO(snd_pcm_hw_params_get_channels_min, iFpp) +GO(snd_pcm_hw_params_get_export_buffer, iFppp) +GO(snd_pcm_hw_params_get_fifo_size, iFp) +GO(snd_pcm_hw_params_get_format, iFpp) +GO(snd_pcm_hw_params_get_format_mask, vFpp) +GO(snd_pcm_hw_params_get_min_align, iFpBL_) +GO(snd_pcm_hw_params_get_period_size, iFpbL_p) +GO(snd_pcm_hw_params_get_period_size_max, iFpbL_p) +GO(snd_pcm_hw_params_get_period_size_min, iFpbL_p) +GO(snd_pcm_hw_params_get_period_time, iFppp) +GO(snd_pcm_hw_params_get_period_time_max, iFppp) +GO(snd_pcm_hw_params_get_period_time_min, iFppp) +GO(snd_pcm_hw_params_get_periods, iFppp) +GO(snd_pcm_hw_params_get_periods_max, iFppp) +GO(snd_pcm_hw_params_get_periods_min, iFppp) +GO(snd_pcm_hw_params_get_rate, iFppp) +GO(snd_pcm_hw_params_get_rate_max, iFppp) +GO(snd_pcm_hw_params_get_rate_min, iFppp) +GO(snd_pcm_hw_params_get_rate_numden, iFppp) +GO(snd_pcm_hw_params_get_rate_resample, iFppp) +GO(snd_pcm_hw_params_get_sbits, iFp) +GO(snd_pcm_hw_params_get_subformat, iFpp) +GO(snd_pcm_hw_params_get_subformat_mask, vFpp) +GO(snd_pcm_hw_params_get_tick_time, iFppp) +GO(snd_pcm_hw_params_get_tick_time_max, iFppp) +GO(snd_pcm_hw_params_get_tick_time_min, iFppp) +GO(snd_pcm_hw_params_is_batch, iFp) +GO(snd_pcm_hw_params_is_block_transfer, iFp) +GO(snd_pcm_hw_params_is_double, iFp) +GO(snd_pcm_hw_params_is_half_duplex, iFp) +GO(snd_pcm_hw_params_is_joint_duplex, iFp) +GO(snd_pcm_hw_params_malloc, iFBp_) +GO(snd_pcm_hw_params_set_access, iFppu) +GO(snd_pcm_hw_params_set_access_first, iFppp) +GO(snd_pcm_hw_params_set_access_last, iFppp) +GO(snd_pcm_hw_params_set_access_mask, iFppp) +GO(snd_pcm_hw_params_set_buffer_size, iFppL) +GO(snd_pcm_hw_params_set_buffer_size_first, iFppbL_) +GO(snd_pcm_hw_params_set_buffer_size_last, iFppbL_) +GO(snd_pcm_hw_params_set_buffer_size_max, iFppbL_) +GO(snd_pcm_hw_params_set_buffer_size_min, iFppbL_) +GO(snd_pcm_hw_params_set_buffer_size_minmax, iFppbL_bL_) +GO(snd_pcm_hw_params_set_buffer_size_near, iFppbL_) +GO(snd_pcm_hw_params_set_buffer_time, iFppui) +GO(snd_pcm_hw_params_set_buffer_time_first, iFpppp) +GO(snd_pcm_hw_params_set_buffer_time_last, iFpppp) +GO(snd_pcm_hw_params_set_buffer_time_max, iFpppp) +GO(snd_pcm_hw_params_set_buffer_time_min, iFpppp) +GO(snd_pcm_hw_params_set_buffer_time_minmax, iFpppppp) +GO(snd_pcm_hw_params_set_buffer_time_near, iFpppp) +GO(snd_pcm_hw_params_set_channels, iFppu) +GO(snd_pcm_hw_params_set_channels_first, iFppp) +GO(snd_pcm_hw_params_set_channels_last, iFppp) +GO(snd_pcm_hw_params_set_channels_max, iFppp) +GO(snd_pcm_hw_params_set_channels_min, iFppp) +GO(snd_pcm_hw_params_set_channels_minmax, iFpppp) +GO(snd_pcm_hw_params_set_channels_near, iFppp) +GO(snd_pcm_hw_params_set_export_buffer, iFppu) +GO(snd_pcm_hw_params_set_format, iFppi) +GO(snd_pcm_hw_params_set_format_first, iFppp) +GO(snd_pcm_hw_params_set_format_last, iFppp) +GO(snd_pcm_hw_params_set_format_mask, iFppp) +GO(snd_pcm_hw_params_set_period_size, iFppLi) +GO(snd_pcm_hw_params_set_period_size_first, iFppbL_p) +GO(snd_pcm_hw_params_set_period_size_integer, iFpp) +GO(snd_pcm_hw_params_set_period_size_last, iFppbL_p) +GO(snd_pcm_hw_params_set_period_size_max, iFppbL_p) +GO(snd_pcm_hw_params_set_period_size_min, iFppbL_p) +GO(snd_pcm_hw_params_set_period_size_minmax, iFppbL_pbL_p) +GO(snd_pcm_hw_params_set_period_size_near, iFppbL_p) +GO(snd_pcm_hw_params_set_period_time, iFppui) +GO(snd_pcm_hw_params_set_period_time_first, iFpppp) +GO(snd_pcm_hw_params_set_period_time_last, iFpppp) +GO(snd_pcm_hw_params_set_period_time_max, iFpppp) +GO(snd_pcm_hw_params_set_period_time_min, iFpppp) +GO(snd_pcm_hw_params_set_period_time_minmax, iFpppppp) +GO(snd_pcm_hw_params_set_period_time_near, iFpppp) +GO(snd_pcm_hw_params_set_periods, iFppui) +GO(snd_pcm_hw_params_set_periods_first, iFpppp) +GO(snd_pcm_hw_params_set_periods_integer, iFpp) +GO(snd_pcm_hw_params_set_periods_last, iFpppp) +GO(snd_pcm_hw_params_set_periods_max, iFpppp) +GO(snd_pcm_hw_params_set_periods_min, iFpppp) +GO(snd_pcm_hw_params_set_periods_minmax, iFpppppp) +GO(snd_pcm_hw_params_set_periods_near, iFpppp) +GO(snd_pcm_hw_params_set_rate, iFppui) +GO(snd_pcm_hw_params_set_rate_first, iFpppp) +GO(snd_pcm_hw_params_set_rate_last, iFpppp) +GO(snd_pcm_hw_params_set_rate_max, iFpppp) +GO(snd_pcm_hw_params_set_rate_min, iFpppp) +GO(snd_pcm_hw_params_set_rate_minmax, iFpppppp) +GO(snd_pcm_hw_params_set_rate_near, iFpppp) +GO(snd_pcm_hw_params_set_rate_resample, iFppu) +GO(snd_pcm_hw_params_set_subformat, iFppi) +GO(snd_pcm_hw_params_set_subformat_first, iFppp) +GO(snd_pcm_hw_params_set_subformat_last, iFppp) +GO(snd_pcm_hw_params_set_subformat_mask, iFppp) +GO(snd_pcm_hw_params_set_tick_time, iFppui) +GO(snd_pcm_hw_params_set_tick_time_first, iFpppp) +GO(snd_pcm_hw_params_set_tick_time_last, iFpppp) +GO(snd_pcm_hw_params_set_tick_time_max, iFpppp) +GO(snd_pcm_hw_params_set_tick_time_min, iFpppp) +GO(snd_pcm_hw_params_set_tick_time_minmax, iFpppppp) +GO(snd_pcm_hw_params_set_tick_time_near, iFpppp) +GO(snd_pcm_hw_params_test_access, iFppu) +GO(snd_pcm_hw_params_test_buffer_size, iFppL) +GO(snd_pcm_hw_params_test_buffer_time, iFppui) +GO(snd_pcm_hw_params_test_channels, iFppu) +GO(snd_pcm_hw_params_test_format, iFppi) +GO(snd_pcm_hw_params_test_period_size, iFppLi) +GO(snd_pcm_hw_params_test_period_time, iFppui) +GO(snd_pcm_hw_params_test_periods, iFppui) +GO(snd_pcm_hw_params_test_rate, iFppui) +GO(snd_pcm_hw_params_test_subformat, iFppi) +GO(snd_pcm_hw_params_test_tick_time, iFppui) +GO(snd_pcm_hwsync, iFp) +GO(snd_pcm_info, iFpp) +GO(snd_pcm_info_copy, vFpp) +GO(snd_pcm_info_free, vFp) +GO(snd_pcm_info_get_card, iFp) +GO(snd_pcm_info_get_class, uFp) +GO(snd_pcm_info_get_device, uFp) +GO(snd_pcm_info_get_id, pFp) +GO(snd_pcm_info_get_name, pFp) +GO(snd_pcm_info_get_stream, uFp) +GO(snd_pcm_info_get_subclass, uFp) +GO(snd_pcm_info_get_subdevice, uFp) +GO(snd_pcm_info_get_subdevice_name, pFp) +GO(snd_pcm_info_get_subdevices_avail, uFp) +GO(snd_pcm_info_get_subdevices_count, uFp) +//GOS(snd_pcm_info_get_sync, pFpp) +GO(snd_pcm_info_malloc, iFBp_) +GO(snd_pcm_info_sizeof, LFv) +GO(snd_pcm_access_mask_sizeof, LFv) +GO(snd_pcm_info_set_device, vFpu) +GO(snd_pcm_info_set_stream, vFpu) +GO(snd_pcm_info_set_subdevice, vFpu) +GO(snd_pcm_link, iFpp) +GO(snd_pcm_meter_add_scope, iFpp) +GO(snd_pcm_meter_get_boundary, LFp) +GO(snd_pcm_meter_get_bufsize, LFp) +GO(snd_pcm_meter_get_channels, uFp) +GO(snd_pcm_meter_get_now, LFp) +GO(snd_pcm_meter_get_rate, uFp) +GO(snd_pcm_meter_search_scope, pFpp) +GOM(snd_pcm_mmap_begin, iFEpppp) +GO(snd_pcm_mmap_commit, lFpLL) +GO(snd_pcm_mmap_readi, lFppL) +GO(snd_pcm_mmap_readn, lFpbp_L) +GO(snd_pcm_mmap_writei, lFppL) +GO(snd_pcm_mmap_writen, lFpbp_L) +GO(snd_pcm_name, pFp) +GO(snd_pcm_nonblock, iFpi) +GO(snd_pcm_open, iFBp_pui) +GO(snd_pcm_open_lconf, iFbp_puip) +GO(snd_pcm_pause, iFpi) +GO(snd_pcm_poll_descriptors, iFppu) +GO(snd_pcm_poll_descriptors_count, iFp) +GO(snd_pcm_poll_descriptors_revents, iFppup) +GO(snd_pcm_prepare, iFp) +GO(snd_pcm_readi, lFppL) +GO(snd_pcm_readn, lFpbp_L) +GO(snd_pcm_recover, iFpii) +GO(snd_pcm_reset, iFp) +GO(snd_pcm_resume, iFp) +GO(snd_pcm_rewind, lFpL) +GO(snd_pcm_samples_to_bytes, lFpl) +//GOM(snd_pcm_scope_get_callback_private, pFEp) +GO(snd_pcm_scope_get_name, pFp) +GO(snd_pcm_scope_malloc, iFBp_) +GO(snd_pcm_scope_s16_get_channel_buffer, pFpu) +GO(snd_pcm_scope_s16_open, iFppbp_) +//GOM(snd_pcm_scope_set_callback_private, vFEpp) +GO(snd_pcm_hw_params_sizeof, LFv) +GO(snd_pcm_sw_params_sizeof, LFv) +GO(snd_pcm_hw_params_is_monotonic, iFp) +GO(snd_pcm_scope_set_name, vFpp) +//GOM(snd_pcm_scope_set_ops, vFEpbppppppp_) +GO(snd_pcm_set_chmap, iFpp) +GO(snd_pcm_set_params, iFpiuuuiu) +GO(snd_pcm_start, iFp) +GO(snd_pcm_start_mode_name, pFu) +GO(snd_pcm_state, uFp) +GO(snd_pcm_state_name, pFu) +GO(snd_pcm_status, iFpp) +GO(snd_pcm_status_copy, vFpp) +GO(snd_pcm_status_dump, iFpp) +GO(snd_pcm_status_free, vFp) +GO(snd_pcm_status_get_avail, LFp) +GO(snd_pcm_status_get_avail_max, LFp) +GO(snd_pcm_status_get_delay, lFp) +//GO(snd_pcm_status_get_htstamp, vFpp) +GO(snd_pcm_status_get_overrange, LFp) +GO(snd_pcm_status_get_state, uFp) +//GO(snd_pcm_status_get_trigger_htstamp, vFpp) +//GO(snd_pcm_status_get_trigger_tstamp, vFpp) +//GO(snd_pcm_status_get_tstamp, vFpp) +GO(snd_pcm_status_malloc, iFbp_) +GO(snd_pcm_stream, uFp) +GO(snd_pcm_stream_name, pFu) +GO(snd_pcm_subformat_description, pFi) +GO(snd_pcm_subformat_mask_any, vFp) +GO(snd_pcm_subformat_mask_copy, vFpp) +GO(snd_pcm_subformat_mask_empty, iFp) +GO(snd_pcm_subformat_mask_free, vFp) +GO(snd_pcm_subformat_mask_malloc, iFbp_) +GO(snd_pcm_subformat_mask_none, vFp) +GO(snd_pcm_subformat_mask_reset, vFpi) +GO(snd_pcm_subformat_mask_set, vFpi) +GO(snd_pcm_subformat_mask_test, iFpi) +GO(snd_pcm_subformat_name, pFi) +GO(snd_pcm_sw_params, iFpp) +GO(snd_pcm_sw_params_copy, vFpp) +GO(snd_pcm_sw_params_current, iFpp) +GO(snd_pcm_sw_params_dump, iFpp) +GO(snd_pcm_sw_params_free, vFp) +GO(snd_pcm_sw_params_get_avail_min, iFpbL_) +GO(snd_pcm_sw_params_get_boundary, iFpbL_) +GO(snd_pcm_sw_params_get_silence_size, iFpbL_) +GO(snd_pcm_sw_params_get_silence_threshold, iFpbL_) +GO(snd_pcm_sw_params_get_sleep_min, iFpp) +GO(snd_pcm_sw_params_get_start_mode, uFp) +GO(snd_pcm_sw_params_get_start_threshold, iFpbL_) +GO(snd_pcm_sw_params_get_stop_threshold, iFpbL_) +GO(snd_pcm_sw_params_get_tstamp_mode, iFpp) +GO(snd_pcm_sw_params_get_xfer_align, iFpbL_) +GO(snd_pcm_sw_params_get_xrun_mode, uFp) +GO(snd_pcm_sw_params_malloc, iFbp_) +GO(snd_pcm_sw_params_set_avail_min, iFppL) +GO(snd_pcm_sw_params_set_period_event, iFppi) +GO(snd_pcm_sw_params_set_silence_size, iFppL) +GO(snd_pcm_sw_params_set_silence_threshold, iFppL) +GO(snd_pcm_sw_params_set_sleep_min, iFppu) +GO(snd_pcm_sw_params_set_start_mode, iFppu) +GO(snd_pcm_sw_params_set_start_threshold, iFppL) +GO(snd_pcm_sw_params_set_stop_threshold, iFppL) +GO(snd_pcm_sw_params_set_tstamp_mode, iFppu) +GO(snd_pcm_sw_params_set_tstamp_type, iFppu) +GO(snd_pcm_sw_params_set_xfer_align, iFppL) +GO(snd_pcm_sw_params_set_xrun_mode, iFppu) +GO(snd_pcm_tstamp_mode_name, pFu) +GO(snd_pcm_type, uFp) +GO(snd_pcm_type_name, pFu) +GO(snd_pcm_unlink, iFp) +GO(snd_pcm_wait, iFpi) +GO(snd_pcm_writei, lFppL) +GO(snd_pcm_writen, lFpbp_L) +GO(snd_pcm_xrun_mode_name, pFu) +GO(snd_spcm_init, iFpuuiiuuu) +GO(snd_spcm_init_duplex, iFppuuiiuuuu) +GO(snd_spcm_init_get_params, iFppbL_bL_) +GO(snd_rawmidi_open, iFbp_bp_pi) +GO(snd_rawmidi_open_lconf, iFbp_bp_pip) +GO(snd_rawmidi_close, iFp) +GO(snd_rawmidi_poll_descriptors_count, iFp) +GO(snd_rawmidi_poll_descriptors, iFppu) +GO(snd_rawmidi_poll_descriptors_revents, iFppup) +GO(snd_rawmidi_nonblock, iFpi) +GO(snd_rawmidi_info_sizeof, LFv) +GO(snd_rawmidi_info_malloc, iFbp_) +GO(snd_rawmidi_info_free, vFp) +GO(snd_rawmidi_info_copy, vFpp) +GO(snd_rawmidi_info_get_device, uFp) +GO(snd_rawmidi_info_get_subdevice, uFp) +GO(snd_rawmidi_info_get_stream, uFp) +GO(snd_rawmidi_info_get_card, iFp) +GO(snd_rawmidi_info_get_flags, uFp) +GO(snd_rawmidi_info_get_id, pFp) +GO(snd_rawmidi_info_get_name, pFp) +GO(snd_rawmidi_info_get_subdevice_name, pFp) +GO(snd_rawmidi_info_get_subdevices_count, uFp) +GO(snd_rawmidi_info_get_subdevices_avail, uFp) +GO(snd_rawmidi_info_set_device, vFpu) +GO(snd_rawmidi_info_set_subdevice, vFpu) +GO(snd_rawmidi_info_set_stream, vFpu) +GO(snd_rawmidi_info, iFpp) +GO(snd_rawmidi_params_sizeof, LFv) +GO(snd_rawmidi_params_malloc, iFbp_) +GO(snd_rawmidi_params_free, vFp) +GO(snd_rawmidi_params_copy, vFpp) +GO(snd_rawmidi_params_set_buffer_size, iFppL) +GO(snd_rawmidi_params_get_buffer_size, LFp) +GO(snd_rawmidi_params_set_avail_min, iFppL) +GO(snd_rawmidi_params_get_avail_min, LFp) +GO(snd_rawmidi_params_set_no_active_sensing, iFppi) +GO(snd_rawmidi_params_get_no_active_sensing, iFp) +GO(snd_rawmidi_params, iFpp) +GO(snd_rawmidi_params_current, iFpp) +GO(snd_rawmidi_status_sizeof, LFv) +GO(snd_rawmidi_status_malloc, iFbp_) +GO(snd_rawmidi_status_free, vFp) +GO(snd_rawmidi_status_copy, vFpp) +//GO(snd_rawmidi_status_get_tstamp, vFpp) +GO(snd_rawmidi_status_get_avail, LFp) +GO(snd_rawmidi_status_get_xruns, LFp) +GO(snd_rawmidi_status, iFpp) +GO(snd_rawmidi_drain, iFp) +GO(snd_rawmidi_drop, iFp) +GO(snd_rawmidi_write, lFppL) +GO(snd_rawmidi_read, lFppL) +GO(snd_rawmidi_name, pFp) +GO(snd_rawmidi_type, uFp) +GO(snd_rawmidi_stream, uFp) +GO(snd_timer_query_open, iFbp_pi) +GO(snd_timer_query_open_lconf, iFbp_pip) +GO(snd_timer_query_close, iFp) +GO(snd_timer_query_next_device, iFpp) +GO(snd_timer_query_info, iFpp) +GO(snd_timer_query_params, iFpp) +GO(snd_timer_query_status, iFpp) +GO(snd_timer_open, iFbp_pi) +GO(snd_timer_open_lconf, iFbp_pip) +GO(snd_timer_close, iFp) +//GOM(snd_async_add_timer_handler, iFEbp_ppp) +GO(snd_async_handler_get_timer, pFp) +GO(snd_timer_poll_descriptors_count, iFp) +GO(snd_timer_poll_descriptors, iFppu) +GO(snd_timer_poll_descriptors_revents, iFppup) +GO(snd_timer_info, iFpp) +GO(snd_timer_params, iFpp) +GO(snd_timer_status, iFpp) +GO(snd_timer_start, iFp) +GO(snd_timer_stop, iFp) +GO(snd_timer_continue, iFp) +GO(snd_timer_read, lFppL) +GO(snd_timer_id_sizeof, LFv) +GO(snd_timer_id_malloc, iFbp_) +GO(snd_timer_id_free, vFp) +GO(snd_timer_id_copy, vFpp) +GO(snd_timer_id_set_class, vFpi) +GO(snd_timer_id_get_class, iFp) +GO(snd_timer_id_set_sclass, vFpi) +GO(snd_timer_id_get_sclass, iFp) +GO(snd_timer_id_set_card, vFpi) +GO(snd_timer_id_get_card, iFp) +GO(snd_timer_id_set_device, vFpi) +GO(snd_timer_id_get_device, iFp) +GO(snd_timer_id_set_subdevice, vFpi) +GO(snd_timer_id_get_subdevice, iFp) +GO(snd_timer_ginfo_sizeof, LFv) +GO(snd_timer_ginfo_malloc, iFbp_) +GO(snd_timer_ginfo_free, vFp) +GO(snd_timer_ginfo_copy, vFpp) +GO(snd_timer_ginfo_set_tid, iFpp) +GO(snd_timer_ginfo_get_tid, pFp) +GO(snd_timer_ginfo_get_flags, uFp) +GO(snd_timer_ginfo_get_card, iFp) +GO(snd_timer_ginfo_get_id, pFp) +GO(snd_timer_ginfo_get_name, pFp) +GO(snd_timer_ginfo_get_resolution, LFp) +GO(snd_timer_ginfo_get_resolution_min, LFp) +GO(snd_timer_ginfo_get_resolution_max, LFp) +GO(snd_timer_ginfo_get_clients, uFp) +GO(snd_timer_info_sizeof, LFv) +GO(snd_timer_info_malloc, iFbp_) +GO(snd_timer_info_free, vFp) +GO(snd_timer_info_copy, vFpp) +GO(snd_timer_info_is_slave, iFp) +GO(snd_timer_info_get_card, iFp) +GO(snd_timer_info_get_id, pFp) +GO(snd_timer_info_get_name, pFp) +GO(snd_timer_info_get_resolution, lFp) +GO(snd_timer_params_sizeof, LFv) +GO(snd_timer_params_malloc, iFbp_) +GO(snd_timer_params_free, vFp) +GO(snd_timer_params_copy, vFpp) +GO(snd_timer_params_set_auto_start, iFpi) +GO(snd_timer_params_get_auto_start, iFp) +GO(snd_timer_params_set_exclusive, iFpi) +GO(snd_timer_params_get_exclusive, iFp) +GO(snd_timer_params_set_early_event, iFpi) +GO(snd_timer_params_get_early_event, iFp) +GO(snd_timer_params_set_ticks, vFpl) +GO(snd_timer_params_get_ticks, lFp) +GO(snd_timer_params_set_queue_size, vFpl) +GO(snd_timer_params_get_queue_size, lFp) +GO(snd_timer_params_set_filter, vFpu) +GO(snd_timer_params_get_filter, uFp) +GO(snd_timer_status_sizeof, LFv) +GO(snd_timer_status_malloc, iFbp_) +GO(snd_timer_status_free, vFp) +GO(snd_timer_status_copy, vFpp) +//GOS(snd_timer_status_get_timestamp, pFpp) +GO(snd_timer_status_get_resolution, lFp) +GO(snd_timer_status_get_lost, lFp) +GO(snd_timer_status_get_overrun, lFp) +GO(snd_timer_status_get_queue, lFp) +GO(snd_timer_info_get_ticks, lFp) +GO(snd_hwdep_open, iFbp_pi) +GO(snd_hwdep_close, iFp) +GO(snd_hwdep_poll_descriptors, iFppu) +GO(snd_hwdep_poll_descriptors_revents, iFppup) +GO(snd_hwdep_nonblock, iFpi) +GO(snd_hwdep_info, iFpp) +GO(snd_hwdep_dsp_status, iFpp) +GO(snd_hwdep_dsp_load, iFpp) +GO(snd_hwdep_ioctl, iFpup) +GO(snd_hwdep_write, lFppL) +GO(snd_hwdep_read, lFppL) +GO(snd_hwdep_info_sizeof, LFv) +GO(snd_hwdep_dsp_status_sizeof, LFv) +GO(snd_hwdep_dsp_status_malloc, iFbp_) +GO(snd_hwdep_dsp_status_free, vFp) +GO(snd_hwdep_dsp_status_copy, vFpp) +GO(snd_hwdep_dsp_status_get_version, uFp) +GO(snd_hwdep_dsp_status_get_id, pFp) +GO(snd_hwdep_dsp_status_get_num_dsps, uFp) +GO(snd_hwdep_dsp_status_get_dsp_loaded, uFp) +GO(snd_hwdep_dsp_status_get_chip_ready, uFp) +GO(snd_hwdep_dsp_image_sizeof, LFv) +GO(snd_hwdep_dsp_image_malloc, iFbp_) +GO(snd_hwdep_dsp_image_free, vFp) +GO(snd_hwdep_dsp_image_copy, vFpp) +GO(snd_hwdep_dsp_image_get_index, uFp) +GO(snd_hwdep_dsp_image_get_name, pFp) +GO(snd_hwdep_dsp_image_get_image, pFp) +GO(snd_hwdep_dsp_image_get_length, LFp) +GO(snd_hwdep_dsp_image_set_index, vFpu) +GO(snd_hwdep_dsp_image_set_name, vFpp) +GO(snd_hwdep_dsp_image_set_image, vFpp) +GO(snd_hwdep_dsp_image_set_length, vFpL) +GO(snd_card_load, iFi) +GO(snd_card_next, iFp) +GO(snd_card_get_index, iFp) +GO(snd_card_get_name, iFibp_) +GO(snd_card_get_longname, iFibp_) +GO(snd_ctl_open, iFbp_pi) +GO(snd_ctl_open_lconf, iFbp_pip) +GO(snd_ctl_close, iFp) +GO(snd_ctl_nonblock, iFpi) +//GOM(snd_async_add_ctl_handler, iFEbp_ppp) +GO(snd_async_handler_get_ctl, pFp) +GO(snd_ctl_poll_descriptors_count, iFp) +GO(snd_ctl_poll_descriptors, iFppu) +GO(snd_ctl_poll_descriptors_revents, iFppup) +GO(snd_ctl_subscribe_events, iFpi) +GO(snd_ctl_card_info, iFpp) +GO(snd_ctl_elem_list, iFpp) +GO(snd_ctl_elem_info, iFpp) +GO(snd_ctl_elem_read, iFpp) +GO(snd_ctl_elem_write, iFpp) +GO(snd_ctl_elem_lock, iFpp) +GO(snd_ctl_elem_unlock, iFpp) +GO(snd_ctl_elem_tlv_read, iFpppu) +GO(snd_ctl_elem_tlv_write, iFppp) +GO(snd_ctl_elem_tlv_command, iFppp) +GO(snd_ctl_hwdep_next_device, iFpp) +GO(snd_ctl_hwdep_info, iFpp) +GO(snd_ctl_pcm_next_device, iFpp) +GO(snd_ctl_pcm_info, iFpp) +GO(snd_ctl_pcm_prefer_subdevice, iFpi) +GO(snd_ctl_rawmidi_next_device, iFpp) +GO(snd_ctl_rawmidi_info, iFpp) +GO(snd_ctl_rawmidi_prefer_subdevice, iFpi) +GO(snd_ctl_set_power_state, iFpu) +GO(snd_ctl_get_power_state, iFpp) +GO(snd_ctl_read, iFpp) +GO(snd_ctl_wait, iFpi) +GO(snd_ctl_name, pFp) +GO(snd_ctl_type, uFp) +GO(snd_ctl_elem_type_name, pFu) +GO(snd_ctl_elem_iface_name, pFu) +GO(snd_ctl_event_type_name, pFu) +GO(snd_ctl_event_elem_get_mask, uFp) +GO(snd_ctl_event_elem_get_numid, uFp) +GO(snd_ctl_event_elem_get_id, vFpp) +GO(snd_ctl_event_elem_get_interface, uFp) +GO(snd_ctl_event_elem_get_device, uFp) +GO(snd_ctl_event_elem_get_subdevice, uFp) +GO(snd_ctl_event_elem_get_name, pFp) +GO(snd_ctl_event_elem_get_index, uFp) +GO(snd_ctl_elem_list_alloc_space, iFpu) +GO(snd_ctl_elem_list_free_space, vFp) +GO(snd_ctl_elem_id_sizeof, LFv) +GO(snd_ctl_elem_id_malloc, iFbp_) +GO(snd_ctl_elem_id_free, vFp) +GO(snd_ctl_elem_id_clear, vFp) +GO(snd_ctl_elem_id_copy, vFpp) +GO(snd_ctl_elem_id_get_numid, uFp) +GO(snd_ctl_elem_id_get_interface, uFp) +GO(snd_ctl_elem_id_get_device, uFp) +GO(snd_ctl_elem_id_get_subdevice, uFp) +GO(snd_ctl_elem_id_get_name, pFp) +GO(snd_ctl_elem_id_get_index, uFp) +GO(snd_ctl_elem_id_set_numid, vFpu) +GO(snd_ctl_elem_id_set_interface, vFpu) +GO(snd_ctl_elem_id_set_device, vFpu) +GO(snd_ctl_elem_id_set_subdevice, vFpu) +GO(snd_ctl_elem_id_set_name, vFpp) +GO(snd_ctl_elem_id_set_index, vFpu) +GO(snd_ctl_card_info_sizeof, LFv) +GO(snd_ctl_card_info_malloc, iFBp_) +GO(snd_ctl_card_info_free, vFp) +GO(snd_ctl_card_info_clear, vFp) +GO(snd_ctl_card_info_copy, vFpp) +GO(snd_ctl_card_info_get_card, iFp) +GO(snd_ctl_card_info_get_id, pFp) +GO(snd_ctl_card_info_get_driver, pFp) +GO(snd_ctl_card_info_get_name, pFp) +GO(snd_ctl_card_info_get_longname, pFp) +GO(snd_ctl_card_info_get_mixername, pFp) +GO(snd_ctl_card_info_get_components, pFp) +GO(snd_ctl_event_sizeof, LFv) +GO(snd_ctl_event_malloc, iFbp_) +GO(snd_ctl_event_free, vFp) +GO(snd_ctl_event_clear, vFp) +GO(snd_ctl_event_copy, vFpp) +GO(snd_ctl_event_get_type, uFp) +GO(snd_ctl_elem_list_sizeof, LFv) +GO(snd_ctl_elem_list_malloc, iFbp_) +GO(snd_ctl_elem_list_free, vFp) +GO(snd_ctl_elem_list_clear, vFp) +GO(snd_ctl_elem_list_copy, vFpp) +GO(snd_ctl_elem_list_set_offset, vFpu) +GO(snd_ctl_elem_list_get_used, uFp) +GO(snd_ctl_elem_list_get_count, uFp) +GO(snd_ctl_elem_list_get_id, vFpup) +GO(snd_ctl_elem_list_get_numid, uFpu) +GO(snd_ctl_elem_list_get_interface, uFpu) +GO(snd_ctl_elem_list_get_device, uFpu) +GO(snd_ctl_elem_list_get_subdevice, uFpu) +GO(snd_ctl_elem_list_get_name, pFpu) +GO(snd_ctl_elem_list_get_index, uFpu) +GO(snd_ctl_elem_info_sizeof, LFv) +GO(snd_ctl_elem_info_malloc, iFbp_) +GO(snd_ctl_elem_info_free, vFp) +GO(snd_ctl_elem_info_clear, vFp) +GO(snd_ctl_elem_info_copy, vFpp) +GO(snd_ctl_elem_info_get_type, uFp) +GO(snd_ctl_elem_info_is_readable, iFp) +GO(snd_ctl_elem_info_is_writable, iFp) +GO(snd_ctl_elem_info_is_volatile, iFp) +GO(snd_ctl_elem_info_is_inactive, iFp) +GO(snd_ctl_elem_info_is_locked, iFp) +GO(snd_ctl_elem_info_is_tlv_readable, iFp) +GO(snd_ctl_elem_info_is_tlv_writable, iFp) +GO(snd_ctl_elem_info_is_tlv_commandable, iFp) +GO(snd_ctl_elem_info_is_owner, iFp) +GO(snd_ctl_elem_info_is_user, iFp) +GO(snd_ctl_elem_info_get_owner, iFp) +GO(snd_ctl_elem_info_get_count, uFp) +GO(snd_ctl_elem_info_get_min, lFp) +GO(snd_ctl_elem_info_get_max, lFp) +GO(snd_ctl_elem_info_get_step, lFp) +GO(snd_ctl_elem_info_get_min64, IFp) +GO(snd_ctl_elem_info_get_max64, IFp) +GO(snd_ctl_elem_info_get_step64, IFp) +GO(snd_ctl_elem_info_get_items, uFp) +GO(snd_ctl_elem_info_set_item, vFpu) +GO(snd_ctl_elem_info_get_item_name, pFp) +GO(snd_ctl_elem_info_get_dimensions, iFp) +GO(snd_ctl_elem_info_get_dimension, iFpu) +GO(snd_ctl_elem_info_get_id, vFpp) +GO(snd_ctl_elem_info_get_numid, uFp) +GO(snd_ctl_elem_info_get_interface, uFp) +GO(snd_ctl_elem_info_get_device, uFp) +GO(snd_ctl_elem_info_get_subdevice, uFp) +GO(snd_ctl_elem_info_get_name, pFp) +GO(snd_ctl_elem_info_get_index, uFp) +GO(snd_ctl_elem_info_set_id, vFpp) +GO(snd_ctl_elem_info_set_numid, vFpu) +GO(snd_ctl_elem_info_set_interface, vFpu) +GO(snd_ctl_elem_info_set_device, vFpu) +GO(snd_ctl_elem_info_set_subdevice, vFpu) +GO(snd_ctl_elem_info_set_name, vFpp) +GO(snd_ctl_elem_info_set_index, vFpu) +GO(snd_ctl_elem_add_integer, iFppulll) +GO(snd_ctl_elem_add_integer64, iFppuIII) +GO(snd_ctl_elem_add_boolean, iFppu) +GO(snd_ctl_elem_add_iec958, iFpp) +GO(snd_ctl_elem_remove, iFpp) +GO(snd_ctl_elem_value_sizeof, LFv) +GO(snd_ctl_elem_value_malloc, iFbp_) +GO(snd_ctl_elem_value_free, vFp) +GO(snd_ctl_elem_value_clear, vFp) +GO(snd_ctl_elem_value_copy, vFpp) +GO(snd_ctl_elem_value_get_id, vFpp) +GO(snd_ctl_elem_value_get_numid, uFp) +GO(snd_ctl_elem_value_get_interface, uFp) +GO(snd_ctl_elem_value_get_device, uFp) +GO(snd_ctl_elem_value_get_subdevice, uFp) +GO(snd_ctl_elem_value_get_name, pFp) +GO(snd_ctl_elem_value_get_index, uFp) +GO(snd_ctl_elem_value_set_id, vFpp) +GO(snd_ctl_elem_value_set_numid, vFpu) +GO(snd_ctl_elem_value_set_interface, vFpu) +GO(snd_ctl_elem_value_set_device, vFpu) +GO(snd_ctl_elem_value_set_subdevice, vFpu) +GO(snd_ctl_elem_value_set_name, vFpp) +GO(snd_ctl_elem_value_set_index, vFpu) +GO(snd_ctl_elem_value_get_boolean, iFpu) +GO(snd_ctl_elem_value_get_integer, lFpu) +GO(snd_ctl_elem_value_get_integer64, IFpu) +GO(snd_ctl_elem_value_get_enumerated, uFpu) +GO(snd_ctl_elem_value_get_byte, CFpu) +GO(snd_ctl_elem_value_set_boolean, vFpul) +GO(snd_ctl_elem_value_set_integer, vFpul) +GO(snd_ctl_elem_value_set_integer64, vFpuI) +GO(snd_ctl_elem_value_set_enumerated, vFpuu) +GO(snd_ctl_elem_value_set_byte, vFpuC) +GO(snd_ctl_elem_set_bytes, vFppL) +GO(snd_ctl_elem_value_get_bytes, pFp) +GO(snd_ctl_elem_value_get_iec958, vFpp) +GO(snd_ctl_elem_value_set_iec958, vFpp) +GO(snd_hctl_compare_fast, iFpp) +GO(snd_hctl_open, iFbp_pi) +GO(snd_hctl_open_ctl, iFbp_p) +GO(snd_hctl_close, iFp) +GO(snd_hctl_nonblock, iFpi) +GO(snd_hctl_poll_descriptors_count, iFp) +GO(snd_hctl_poll_descriptors, iFppu) +GO(snd_hctl_poll_descriptors_revents, iFppup) +GO(snd_hctl_get_count, uFp) +//GOM(snd_hctl_set_compare, iFEpp) +GO(snd_hctl_first_elem, pFp) +GO(snd_hctl_last_elem, pFp) +GO(snd_hctl_find_elem, pFpp) +//GOM(snd_hctl_set_callback, vFEpp) +GO(snd_hctl_set_callback_private, vFpp) +GO(snd_hctl_get_callback_private, pFp) +GO(snd_hctl_load, iFp) +GO(snd_hctl_free, iFp) +GO(snd_hctl_handle_events, iFp) +GO(snd_hctl_name, pFp) +GO(snd_hctl_wait, iFpi) +GO(snd_hctl_ctl, pFp) +GO(snd_hctl_elem_next, pFp) +GO(snd_hctl_elem_prev, pFp) +GO(snd_hctl_elem_info, iFpp) +GO(snd_hctl_elem_read, iFpp) +GO(snd_hctl_elem_write, iFpp) +GO(snd_hctl_elem_tlv_read, iFppu) +GO(snd_hctl_elem_tlv_write, iFpp) +GO(snd_hctl_elem_tlv_command, iFpp) +GO(snd_hctl_elem_get_hctl, pFp) +GO(snd_hctl_elem_get_id, vFpp) +GO(snd_hctl_elem_get_numid, uFp) +GO(snd_hctl_elem_get_interface, uFp) +GO(snd_hctl_elem_get_device, uFp) +GO(snd_hctl_elem_get_subdevice, uFp) +GO(snd_hctl_elem_get_name, pFp) +GO(snd_hctl_elem_get_index, uFp) +//GOM(snd_hctl_elem_set_callback, vFEpp) +GO(snd_hctl_elem_get_callback_private, pFp) +GO(snd_hctl_elem_set_callback_private, vFpp) +GO(snd_sctl_build, iFbp_pppi) +GO(snd_sctl_free, iFp) +GO(snd_sctl_install, iFp) +GO(snd_sctl_remove, iFp) +GO(snd_mixer_open, iFbp_i) +GO(snd_mixer_close, iFp) +GO(snd_mixer_first_elem, pFp) +GO(snd_mixer_last_elem, pFp) +GO(snd_mixer_handle_events, iFp) +GO(snd_mixer_attach, iFpp) +GO(snd_mixer_attach_hctl, iFpp) +GO(snd_mixer_detach, iFpp) +GO(snd_mixer_detach_hctl, iFpp) +GO(snd_mixer_get_hctl, iFppbp_) +GO(snd_mixer_poll_descriptors_count, iFp) +GO(snd_mixer_poll_descriptors, iFppu) +GO(snd_mixer_poll_descriptors_revents, iFppup) +GO(snd_mixer_load, iFp) +GO(snd_mixer_free, vFp) +GO(snd_mixer_wait, iFpi) +//GOM(snd_mixer_set_compare, iFEpp) +//GOM(snd_mixer_set_callback, vFEpp) +GO(snd_mixer_get_callback_private, pFp) +GO(snd_mixer_set_callback_private, vFpp) +GO(snd_mixer_get_count, uFp) +GO(snd_mixer_class_unregister, iFp) +GO(snd_mixer_elem_next, pFp) +GO(snd_mixer_elem_prev, pFp) +//GOM(snd_mixer_elem_set_callback, vFEpp) +GO(snd_mixer_elem_get_callback_private, pFp) +GO(snd_mixer_elem_set_callback_private, vFpp) +GO(snd_mixer_elem_get_type, uFp) +GO(snd_mixer_class_register, iFpp) +//GO(snd_mixer_add_elem, iFpp) +//GO(snd_mixer_remove_elem, iFpp) +//GOM(snd_mixer_elem_new, iFEbp_uipp) +GO(snd_mixer_elem_add, iFpp) +GO(snd_mixer_elem_remove, iFp) +GO(snd_mixer_elem_free, vFp) +GO(snd_mixer_elem_info, iFp) +GO(snd_mixer_elem_value, iFp) +GO(snd_mixer_elem_attach, iFpp) +GO(snd_mixer_elem_detach, iFpp) +GO(snd_mixer_elem_empty, iFp) +GO(snd_mixer_elem_get_private, pFp) +GO(snd_mixer_class_sizeof, LFv) +GO(snd_mixer_class_malloc, iFBp_) +GO(snd_mixer_class_free, vFp) +GO(snd_mixer_class_copy, vFpp) +GO(snd_mixer_class_get_mixer, pFp) +//GOM(snd_mixer_class_get_event, pFEp) +GO(snd_mixer_class_get_private, pFp) +//GOM(snd_mixer_class_get_compare, pFEp) +//GOM(snd_mixer_class_set_event, iFEpp) +GO(snd_mixer_class_set_private, iFpp) +//GOM(snd_mixer_class_set_private_free, iFEpp) +//GOM(snd_mixer_class_set_compare, iFEpp) +GO(snd_mixer_selem_channel_name, pFi) +//GO(snd_mixer_selem_register, iFpbiuppp_bp_) +GO(snd_mixer_selem_get_id, vFpp) +GO(snd_mixer_selem_get_name, pFp) +GO(snd_mixer_selem_get_index, uFp) +GO(snd_mixer_find_selem, pFpp) +GO(snd_mixer_selem_ask_playback_dB_vol, iFplibl_) +GO(snd_mixer_selem_ask_playback_vol_dB, iFplbl_) +GO(snd_mixer_selem_is_active, iFp) +GO(snd_mixer_selem_is_playback_mono, iFp) +GO(snd_mixer_selem_has_playback_channel, iFpi) +GO(snd_mixer_selem_is_capture_mono, iFp) +GO(snd_mixer_selem_has_capture_channel, iFpi) +GO(snd_mixer_selem_get_capture_group, iFp) +GO(snd_mixer_selem_has_common_volume, iFp) +GO(snd_mixer_selem_has_playback_volume, iFp) +GO(snd_mixer_selem_has_playback_volume_joined, iFp) +GO(snd_mixer_selem_has_capture_volume, iFp) +GO(snd_mixer_selem_has_capture_volume_joined, iFp) +GO(snd_mixer_selem_has_common_switch, iFp) +GO(snd_mixer_selem_has_playback_switch, iFp) +GO(snd_mixer_selem_has_playback_switch_joined, iFp) +GO(snd_mixer_selem_has_capture_switch, iFp) +GO(snd_mixer_selem_has_capture_switch_joined, iFp) +GO(snd_mixer_selem_has_capture_switch_exclusive, iFp) +GO(snd_mixer_selem_get_playback_volume, iFpibl_) +GO(snd_mixer_selem_get_capture_volume, iFpibl_) +GO(snd_mixer_selem_get_playback_dB, iFpibl_) +GO(snd_mixer_selem_get_capture_dB, iFpibl_) +GO(snd_mixer_selem_get_playback_switch, iFpip) +GO(snd_mixer_selem_get_capture_switch, iFpip) +GO(snd_mixer_selem_set_playback_volume, iFpil) +GO(snd_mixer_selem_set_capture_volume, iFpil) +GO(snd_mixer_selem_set_playback_dB, iFpili) +GO(snd_mixer_selem_set_capture_dB, iFpili) +GO(snd_mixer_selem_set_playback_volume_all, iFpl) +GO(snd_mixer_selem_set_capture_volume_all, iFpl) +GO(snd_mixer_selem_set_playback_dB_all, iFpli) +GO(snd_mixer_selem_set_capture_dB_all, iFpli) +GO(snd_mixer_selem_set_playback_switch, iFpii) +GO(snd_mixer_selem_set_capture_switch, iFpii) +GO(snd_mixer_selem_set_playback_switch_all, iFpi) +GO(snd_mixer_selem_set_capture_switch_all, iFpi) +GO(snd_mixer_selem_get_playback_volume_range, iFpbl_bl_) +GO(snd_mixer_selem_get_playback_dB_range, iFpbl_bl_) +GO(snd_mixer_selem_set_playback_volume_range, iFpll) +GO(snd_mixer_selem_get_capture_volume_range, iFpbl_bl_) +GO(snd_mixer_selem_get_capture_dB_range, iFpbl_bl_) +GO(snd_mixer_selem_set_capture_volume_range, iFpll) +GO(snd_mixer_selem_is_enumerated, iFp) +GO(snd_mixer_selem_is_enum_playback, iFp) +GO(snd_mixer_selem_is_enum_capture, iFp) +GO(snd_mixer_selem_get_enum_items, iFp) +GO(snd_mixer_selem_get_enum_item_name, iFpuLp) +GO(snd_mixer_selem_get_enum_item, iFpip) +GO(snd_mixer_selem_set_enum_item, iFpiu) +GO(snd_mixer_selem_id_sizeof, LFv) +GO(snd_mixer_selem_id_malloc, iFbp_) +GO(snd_mixer_selem_id_free, vFp) +GO(snd_mixer_selem_id_copy, vFpp) +GO(snd_mixer_selem_id_get_name, pFp) +GO(snd_mixer_selem_id_get_index, uFp) +GO(snd_mixer_selem_id_set_name, vFpp) +GO(snd_mixer_selem_id_set_index, vFpu) +GO(snd_seq_open, iFbp_pii) +GO(snd_seq_open_lconf, iFbp_piip) +GO(snd_seq_name, pFp) +GO(snd_seq_type, uFp) +GO(snd_seq_close, iFp) +GO(snd_seq_poll_descriptors_count, iFpw) +GO(snd_seq_poll_descriptors, iFppuw) +GO(snd_seq_poll_descriptors_revents, iFppup) +GO(snd_seq_nonblock, iFpi) +GO(snd_seq_client_id, iFp) +GO(snd_seq_get_output_buffer_size, LFp) +GO(snd_seq_get_input_buffer_size, LFp) +GO(snd_seq_set_output_buffer_size, iFpL) +GO(snd_seq_set_input_buffer_size, iFpL) +GO(snd_seq_system_info_sizeof, LFv) +GO(snd_seq_system_info_malloc, iFbp_) +GO(snd_seq_system_info_free, vFp) +GO(snd_seq_system_info_copy, vFpp) +GO(snd_seq_system_info_get_queues, iFp) +GO(snd_seq_system_info_get_clients, iFp) +GO(snd_seq_system_info_get_ports, iFp) +GO(snd_seq_system_info_get_channels, iFp) +GO(snd_seq_system_info_get_cur_clients, iFp) +GO(snd_seq_system_info_get_cur_queues, iFp) +GO(snd_seq_system_info, iFpp) +GO(snd_seq_client_info_sizeof, LFv) +GO(snd_seq_client_info_malloc, iFbp_) +GO(snd_seq_client_info_free, vFp) +GO(snd_seq_client_info_copy, vFpp) +GO(snd_seq_client_info_get_client, iFp) +GO(snd_seq_client_info_get_type, uFp) +GO(snd_seq_client_info_get_name, pFp) +GO(snd_seq_client_info_get_broadcast_filter, iFp) +GO(snd_seq_client_info_get_error_bounce, iFp) +GO(snd_seq_client_info_get_event_filter, pFp) +GO(snd_seq_client_info_get_num_ports, iFp) +GO(snd_seq_client_info_get_event_lost, iFp) +GO(snd_seq_client_info_set_client, vFpi) +GO(snd_seq_client_info_set_name, vFpp) +GO(snd_seq_client_info_set_broadcast_filter, vFpi) +GO(snd_seq_client_info_set_error_bounce, vFpi) +GO(snd_seq_client_info_set_event_filter, vFpp) +GO(snd_seq_get_client_info, iFpp) +GO(snd_seq_get_any_client_info, iFpip) +GO(snd_seq_set_client_info, iFpp) +GO(snd_seq_query_next_client, iFpp) +GO(snd_seq_client_pool_sizeof, LFv) +GO(snd_seq_client_pool_malloc, iFbp_) +GO(snd_seq_client_pool_free, vFp) +GO(snd_seq_client_pool_copy, vFpp) +GO(snd_seq_client_pool_get_client, iFp) +GO(snd_seq_client_pool_get_output_pool, LFp) +GO(snd_seq_client_pool_get_input_pool, LFp) +GO(snd_seq_client_pool_get_output_room, LFp) +GO(snd_seq_client_pool_get_output_free, LFp) +GO(snd_seq_client_pool_get_input_free, LFp) +GO(snd_seq_client_pool_set_output_pool, vFpL) +GO(snd_seq_client_pool_set_input_pool, vFpL) +GO(snd_seq_client_pool_set_output_room, vFpL) +GO(snd_seq_get_client_pool, iFpp) +GO(snd_seq_set_client_pool, iFpp) +GO(snd_seq_port_info_sizeof, LFv) +GO(snd_seq_port_info_malloc, iFbp_) +GO(snd_seq_port_info_free, vFp) +GO(snd_seq_port_info_copy, vFpp) +GO(snd_seq_port_info_get_client, iFp) +GO(snd_seq_port_info_get_port, iFp) +GO(snd_seq_port_info_get_addr, pFp) +GO(snd_seq_port_info_get_name, pFp) +GO(snd_seq_port_info_get_capability, uFp) +GO(snd_seq_port_info_get_type, uFp) +GO(snd_seq_port_info_get_midi_channels, iFp) +GO(snd_seq_port_info_get_midi_voices, iFp) +GO(snd_seq_port_info_get_synth_voices, iFp) +GO(snd_seq_port_info_get_read_use, iFp) +GO(snd_seq_port_info_get_write_use, iFp) +GO(snd_seq_port_info_get_port_specified, iFp) +GO(snd_seq_port_info_get_timestamping, iFp) +GO(snd_seq_port_info_get_timestamp_real, iFp) +GO(snd_seq_port_info_get_timestamp_queue, iFp) +GO(snd_seq_port_info_set_client, vFpi) +GO(snd_seq_port_info_set_port, vFpi) +GO(snd_seq_port_info_set_addr, vFpp) +GO(snd_seq_port_info_set_name, vFpp) +GO(snd_seq_port_info_set_capability, vFpu) +GO(snd_seq_port_info_set_type, vFpu) +GO(snd_seq_port_info_set_midi_channels, vFpi) +GO(snd_seq_port_info_set_midi_voices, vFpi) +GO(snd_seq_port_info_set_synth_voices, vFpi) +GO(snd_seq_port_info_set_port_specified, vFpi) +GO(snd_seq_port_info_set_timestamping, vFpi) +GO(snd_seq_port_info_set_timestamp_real, vFpi) +GO(snd_seq_port_info_set_timestamp_queue, vFpi) +GO(snd_seq_create_port, iFpp) +GO(snd_seq_delete_port, iFpi) +GO(snd_seq_get_port_info, iFpip) +GO(snd_seq_get_any_port_info, iFpiip) +GO(snd_seq_set_port_info, iFpip) +GO(snd_seq_query_next_port, iFpp) +GO(snd_seq_port_subscribe_sizeof, LFv) +GO(snd_seq_port_subscribe_malloc, iFbp_) +GO(snd_seq_port_subscribe_free, vFp) +GO(snd_seq_port_subscribe_copy, vFpp) +GO(snd_seq_port_subscribe_get_sender, pFp) +GO(snd_seq_port_subscribe_get_dest, pFp) +GO(snd_seq_port_subscribe_get_queue, iFp) +GO(snd_seq_port_subscribe_get_exclusive, iFp) +GO(snd_seq_port_subscribe_get_time_update, iFp) +GO(snd_seq_port_subscribe_get_time_real, iFp) +GO(snd_seq_port_subscribe_set_sender, vFpp) +GO(snd_seq_port_subscribe_set_dest, vFpp) +GO(snd_seq_port_subscribe_set_queue, vFpi) +GO(snd_seq_port_subscribe_set_exclusive, vFpi) +GO(snd_seq_port_subscribe_set_time_update, vFpi) +GO(snd_seq_port_subscribe_set_time_real, vFpi) +GO(snd_seq_get_port_subscription, iFpp) +GO(snd_seq_subscribe_port, iFpp) +GO(snd_seq_unsubscribe_port, iFpp) +GO(snd_seq_query_subscribe_sizeof, LFv) +GO(snd_seq_query_subscribe_malloc, iFbp_) +GO(snd_seq_query_subscribe_free, vFp) +GO(snd_seq_query_subscribe_copy, vFpp) +GO(snd_seq_query_subscribe_get_client, iFp) +GO(snd_seq_query_subscribe_get_port, iFp) +GO(snd_seq_query_subscribe_get_root, pFp) +GO(snd_seq_query_subscribe_get_type, uFp) +GO(snd_seq_query_subscribe_get_index, iFp) +GO(snd_seq_query_subscribe_get_num_subs, iFp) +GO(snd_seq_query_subscribe_get_addr, pFp) +GO(snd_seq_query_subscribe_get_queue, iFp) +GO(snd_seq_query_subscribe_get_exclusive, iFp) +GO(snd_seq_query_subscribe_get_time_update, iFp) +GO(snd_seq_query_subscribe_get_time_real, iFp) +GO(snd_seq_query_subscribe_set_client, vFpi) +GO(snd_seq_query_subscribe_set_port, vFpi) +GO(snd_seq_query_subscribe_set_root, vFpp) +GO(snd_seq_query_subscribe_set_type, vFpu) +GO(snd_seq_query_subscribe_set_index, vFpi) +GO(snd_seq_query_port_subscribers, iFpp) +GO(snd_seq_queue_info_sizeof, LFv) +GO(snd_seq_queue_info_malloc, iFbp_) +GO(snd_seq_queue_info_free, vFp) +GO(snd_seq_queue_info_copy, vFpp) +GO(snd_seq_queue_info_get_queue, iFp) +GO(snd_seq_queue_info_get_name, pFp) +GO(snd_seq_queue_info_get_owner, iFp) +GO(snd_seq_queue_info_get_locked, iFp) +GO(snd_seq_queue_info_get_flags, uFp) +GO(snd_seq_queue_info_set_name, vFpp) +GO(snd_seq_queue_info_set_owner, vFpi) +GO(snd_seq_queue_info_set_locked, vFpi) +GO(snd_seq_queue_info_set_flags, vFpu) +GO(snd_seq_create_queue, iFpp) +GO(snd_seq_alloc_named_queue, iFpp) +GO(snd_seq_alloc_queue, iFp) +GO(snd_seq_free_queue, iFpi) +GO(snd_seq_get_queue_info, iFpip) +GO(snd_seq_set_queue_info, iFpip) +GO(snd_seq_query_named_queue, iFpp) +GO(snd_seq_get_queue_usage, iFpi) +GO(snd_seq_set_queue_usage, iFpii) +GO(snd_seq_queue_status_sizeof, LFv) +GO(snd_seq_queue_status_malloc, iFbp_) +GO(snd_seq_queue_status_free, vFp) +GO(snd_seq_queue_status_copy, vFpp) +GO(snd_seq_queue_status_get_queue, iFp) +GO(snd_seq_queue_status_get_events, iFp) +GO(snd_seq_queue_status_get_tick_time, uFp) +GO(snd_seq_queue_status_get_real_time, pFp) +GO(snd_seq_queue_status_get_status, uFp) +GO(snd_seq_get_queue_status, iFpip) +GO(snd_seq_queue_tempo_sizeof, LFv) +GO(snd_seq_queue_tempo_malloc, iFbp_) +GO(snd_seq_queue_tempo_free, vFp) +GO(snd_seq_queue_tempo_copy, vFpp) +GO(snd_seq_queue_tempo_get_queue, iFp) +GO(snd_seq_queue_tempo_get_tempo, uFp) +GO(snd_seq_queue_tempo_get_ppq, iFp) +GO(snd_seq_queue_tempo_get_skew, uFp) +GO(snd_seq_queue_tempo_get_skew_base, uFp) +GO(snd_seq_queue_tempo_set_tempo, vFpu) +GO(snd_seq_queue_tempo_set_ppq, vFpi) +GO(snd_seq_queue_tempo_set_skew, vFpu) +GO(snd_seq_queue_tempo_set_skew_base, vFpu) +GO(snd_seq_get_queue_tempo, iFpip) +GO(snd_seq_set_queue_tempo, iFpip) +GO(snd_seq_queue_timer_sizeof, LFv) +GO(snd_seq_queue_timer_malloc, iFbp_) +GO(snd_seq_queue_timer_free, vFp) +GO(snd_seq_queue_timer_copy, vFpp) +GO(snd_seq_queue_timer_get_queue, iFp) +GO(snd_seq_queue_timer_get_type, uFp) +GO(snd_seq_queue_timer_get_id, pFp) +GO(snd_seq_queue_timer_get_resolution, uFp) +GO(snd_seq_queue_timer_set_type, vFpu) +GO(snd_seq_queue_timer_set_id, vFpp) +GO(snd_seq_queue_timer_set_resolution, vFpu) +GO(snd_seq_get_queue_timer, iFpip) +GO(snd_seq_set_queue_timer, iFpip) +GO(snd_seq_free_event, iFp) +//GO(snd_seq_event_length, lFp) +//GO(snd_seq_event_output, iFpp) +//GO(snd_seq_event_output_buffer, iFpp) +GO(snd_seq_event_output_direct, iFpp) +GO(snd_seq_event_input, iFpbp_) //TODO: does snd_seq_event needs wrapping? +GO(snd_seq_event_input_pending, iFpi) +GO(snd_seq_drain_output, iFp) +GO(snd_seq_event_output_pending, iFp) +//GO(snd_seq_extract_output, iFpp) +GO(snd_seq_drop_output, iFp) +GO(snd_seq_drop_output_buffer, iFp) +GO(snd_seq_drop_input, iFp) +GO(snd_seq_drop_input_buffer, iFp) +GO(snd_seq_remove_events_sizeof, LFv) +GO(snd_seq_remove_events_malloc, iFbp_) +GO(snd_seq_remove_events_free, vFp) +GO(snd_seq_remove_events_copy, vFpp) +GO(snd_seq_remove_events_get_condition, uFp) +GO(snd_seq_remove_events_get_queue, iFp) +GO(snd_seq_remove_events_get_time, pFp) +GO(snd_seq_remove_events_get_dest, pFp) +GO(snd_seq_remove_events_get_channel, iFp) +GO(snd_seq_remove_events_get_event_type, iFp) +GO(snd_seq_remove_events_get_tag, iFp) +GO(snd_seq_remove_events_set_condition, vFpu) +GO(snd_seq_remove_events_set_queue, vFpi) +GO(snd_seq_remove_events_set_time, vFpp) +GO(snd_seq_remove_events_set_dest, vFpp) +GO(snd_seq_remove_events_set_channel, vFpi) +GO(snd_seq_remove_events_set_event_type, vFpi) +GO(snd_seq_remove_events_set_tag, vFpi) +GO(snd_seq_remove_events, iFpp) +GO(snd_seq_set_bit, vFip) +GO(snd_seq_change_bit, iFip) +GO(snd_seq_get_bit, iFip) +GO(snd_midi_event_new, iFLbp_) +GO(snd_midi_event_resize_buffer, iFpL) +GO(snd_midi_event_free, vFp) +GO(snd_midi_event_init, vFp) +GO(snd_midi_event_reset_encode, vFp) +GO(snd_midi_event_reset_decode, vFp) +GO(snd_midi_event_no_status, vFpi) +//GO(snd_midi_event_encode, lFpplp) +GO(snd_midi_event_encode_byte, iFpip) +//GO(snd_midi_event_decode, lFpplp) +//GO(snd_seq_control_queue, iFpiiip) +GO(snd_seq_create_simple_port, iFppuu) +GO(snd_seq_delete_simple_port, iFpi) +GO(snd_seq_connect_from, iFpiii) +GO(snd_seq_connect_to, iFpiii) +GO(snd_seq_disconnect_from, iFpiii) +GO(snd_seq_disconnect_to, iFpiii) +GO(snd_seq_set_client_name, iFpp) +GO(snd_seq_set_client_event_filter, iFpi) +GO(snd_seq_set_client_pool_output_room, iFpL) +GO(snd_seq_set_client_pool_input, iFpL) +GO(snd_seq_reset_pool_output, iFp) +GO(snd_seq_reset_pool_input, iFp) +GO(snd_seq_sync_output_queue, iFp) +GO(snd_seq_parse_address, iFppp) + +GO(snd_hwdep_info_get_iface, uFp) +//DATAM(snd_lib_error, 4) +GO(superdummy_error_handler, vFpipipV) // dummy to have the bridge definition diff --git a/src/wrapped32/wrappedlibc.c b/src/wrapped32/wrappedlibc.c new file mode 100755 index 0000000000000000000000000000000000000000..02867120d366e3da2694d91e6d5f7367daf5de03 --- /dev/null +++ b/src/wrapped32/wrappedlibc.c @@ -0,0 +1,3187 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "box64stack.h" +#include "x64emu.h" +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "callback.h" +#include "librarian.h" +#include "librarian/library_private.h" +#include "emu/x64emu_private.h" +#include "box32context.h" +#include "myalign32.h" +#include "signals.h" +#include "fileutils.h" +#include "auxval.h" +#include "elfloader.h" +#include "bridge.h" +#include "globalsymbols.h" +#include "box32.h" +#include "converter32.h" + +// need to undef all read / read64 stuffs! +#undef pread +#undef pwrite +#undef lseek +#undef fseeko +#undef ftello +#undef fseekpos +#undef fsetpos +#undef fgetpos +#undef fopen +#undef statfs +#undef fstatfs +#undef freopen +#undef truncate +#undef ftruncate +#undef tmpfile +#undef lockf +#undef fscanf +#undef scanf +#undef sscanf +#undef vfscanf +#undef vscanf +#undef vsscanf +#undef getc +#undef putc +#undef mkstemp +#undef mkstemps +#undef mkostemp +#undef mkostemps +#undef open +#undef openat +#undef read +#undef write +#undef creat +#undef scandir +#undef mmap +#undef fcntl +#undef stat +#undef __xstat +#undef xstat +#undef scandir +#undef ftw +#undef nftw +#undef glob + +#define MY32_F_GETLK 5 +#define MY32_F_SETLK 6 +#define MY32_F_SETLKW 7 +#define MY32_F_GETLK64 12 +#define MY32_F_SETLK64 13 +#define MY32_F_SETLKW64 14 + +#define LIBNAME libc + +static const char* libcName = +#ifdef ANDROID + "libc.so" +#else + "libc.so.6" +#endif + ; + +static library_t* my_lib = NULL; + +extern int fix_64bit_inodes; +typedef int32_t (*iFiiV_t)(int32_t, int32_t, ...); +#if 0 +typedef int (*iFL_t)(unsigned long); +typedef void (*vFpp_t)(void*, void*); +typedef void (*vFpp_t)(void*, void*); +typedef void (*vFipp_t)(int32_t, void*, void*); +typedef int32_t (*iFpi_t)(void*, int32_t); +typedef int32_t (*iFpp_t)(void*, void*); +typedef int32_t (*iFpL_t)(void*, size_t); +typedef int32_t (*iFiip_t)(int32_t, int32_t, void*); +typedef int32_t (*iFipp_t)(int32_t, void*, void*); +typedef int32_t (*iFppi_t)(void*, void*, int32_t); +typedef int32_t (*iFpup_t)(void*, uint32_t, void*); +typedef int32_t (*iFpuu_t)(void*, uint32_t, uint32_t); +typedef int32_t (*iFiiII_t)(int, int, int64_t, int64_t); +typedef int32_t (*iFiiiV_t)(int, int, int, ...); +typedef int32_t (*iFippi_t)(int32_t, void*, void*, int32_t); +typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); +typedef int32_t (*iFpipp_t)(void*, int32_t, void*, void*); +typedef int32_t (*iFppii_t)(void*, void*, int32_t, int32_t); +typedef int32_t (*iFipuu_t)(int32_t, void*, uint32_t, uint32_t); +typedef int32_t (*iFipiI_t)(int32_t, void*, int32_t, int64_t); +typedef int32_t (*iFipuup_t)(int32_t, void*, uint32_t, uint32_t, void*); +typedef void* (*pFp_t)(void*); +typedef void* (*pFu_t)(uint32_t); +#define SUPER() \ + GO(_ITM_addUserCommitAction, iFpup_t) \ + GO(_IO_file_stat, iFpp_t) + +#endif + +//#include "wrappercallback.h" + +// utility functions +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) \ +GO(5) \ +GO(6) \ +GO(7) \ +GO(8) \ +GO(9) \ +GO(10) \ +GO(11) \ +GO(12) \ +GO(13) \ +GO(14) \ +GO(15) + +// compare +#define GO(A) \ +static uintptr_t my32_compare_fct_##A = 0; \ +static int my32_compare_##A(void* a, void* b) \ +{ \ + return (int)RunFunctionFmt(my32_compare_fct_##A, "pp", a, b); \ +} +SUPER() +#undef GO +static void* findcompareFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_compare_fct_##A == (uintptr_t)fct) return my32_compare_##A; + SUPER() + #undef GO + #define GO(A) if(my32_compare_fct_##A == 0) {my32_compare_fct_##A = (uintptr_t)fct; return my32_compare_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc compare callback\n"); + return NULL; +} + +#if 0 +// ftw +#define GO(A) \ +static uintptr_t my32_ftw_fct_##A = 0; \ +static int my32_ftw_##A(void* fpath, void* sb, int flag) \ +{ \ + return (int)RunFunction(my_context, my32_ftw_fct_##A, 3, fpath, sb, flag); \ +} +SUPER() +#undef GO +static void* findftwFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_ftw_fct_##A == (uintptr_t)fct) return my32_ftw_##A; + SUPER() + #undef GO + #define GO(A) if(my32_ftw_fct_##A == 0) {my32_ftw_fct_##A = (uintptr_t)fct; return my32_ftw_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc ftw callback\n"); + return NULL; +} + +// ftw64 +#define GO(A) \ +static uintptr_t my32_ftw64_fct_##A = 0; \ +static int my32_ftw64_##A(void* fpath, void* sb, int flag) \ +{ \ + struct i386_stat64 i386st; \ + UnalignStat64(sb, &i386st); \ + return (int)RunFunction(my_context, my32_ftw64_fct_##A, 3, fpath, &i386st, flag); \ +} +SUPER() +#undef GO +static void* findftw64Fct(void* fct) +{ + if(!fct) return NULL; + #define GO(A) if(my32_ftw64_fct_##A == (uintptr_t)fct) return my32_ftw64_##A; + SUPER() + #undef GO + #define GO(A) if(my32_ftw64_fct_##A == 0) {my32_ftw64_fct_##A = (uintptr_t)fct; return my32_ftw64_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc ftw64 callback\n"); + return NULL; +} + +// nftw +#define GO(A) \ +static uintptr_t my32_nftw_fct_##A = 0; \ +static int my32_nftw_##A(void* fpath, void* sb, int flag, void* ftwbuff) \ +{ \ + return (int)RunFunction(my_context, my32_nftw_fct_##A, 4, fpath, sb, flag, ftwbuff); \ +} +SUPER() +#undef GO +static void* findnftwFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_nftw_fct_##A == (uintptr_t)fct) return my32_nftw_##A; + SUPER() + #undef GO + #define GO(A) if(my32_nftw_fct_##A == 0) {my32_nftw_fct_##A = (uintptr_t)fct; return my32_nftw_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc nftw callback\n"); + return NULL; +} + +// nftw64 +#define GO(A) \ +static uintptr_t my32_nftw64_fct_##A = 0; \ +static int my32_nftw64_##A(void* fpath, void* sb, int flag, void* ftwbuff) \ +{ \ + struct i386_stat64 i386st; \ + UnalignStat64(sb, &i386st); \ + return (int)RunFunction(my_context, my32_nftw64_fct_##A, 4, fpath, &i386st, flag, ftwbuff); \ +} +SUPER() +#undef GO +static void* findnftw64Fct(void* fct) +{ + if(!fct) return NULL; + #define GO(A) if(my32_nftw64_fct_##A == (uintptr_t)fct) return my32_nftw64_##A; + SUPER() + #undef GO + #define GO(A) if(my32_nftw64_fct_##A == 0) {my32_nftw64_fct_##A = (uintptr_t)fct; return my32_nftw64_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc nftw64 callback\n"); + return NULL; +} + +// globerr +#define GO(A) \ +static uintptr_t my32_globerr_fct_##A = 0; \ +static int my32_globerr_##A(void* epath, int eerrno) \ +{ \ + return (int)RunFunction(my_context, my32_globerr_fct_##A, 2, epath, eerrno); \ +} +SUPER() +#undef GO +static void* findgloberrFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_globerr_fct_##A == (uintptr_t)fct) return my32_globerr_##A; + SUPER() + #undef GO + #define GO(A) if(my32_globerr_fct_##A == 0) {my32_globerr_fct_##A = (uintptr_t)fct; return my32_globerr_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc globerr callback\n"); + return NULL; +} +#endif +#undef dirent +// filter_dir +#define GO(A) \ +static uintptr_t my32_filter_dir_fct_##A = 0; \ +static int my32_filter_dir_##A(const struct dirent64* a) \ +{ \ + struct i386_dirent d = {0}; \ + UnalignDirent_32(a, &d); \ + return (int)RunFunctionFmt(my32_filter_dir_fct_##A, "p", &d); \ +} +SUPER() +#undef GO +static void* findfilter_dirFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_filter_dir_fct_##A == (uintptr_t)fct) return my32_filter_dir_##A; + SUPER() + #undef GO + #define GO(A) if(my32_filter_dir_fct_##A == 0) {my32_filter_dir_fct_##A = (uintptr_t)fct; return my32_filter_dir_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc filter_dir callback\n"); + return NULL; +} +// compare_dir +#define GO(A) \ +static uintptr_t my32_compare_dir_fct_##A = 0; \ +static int my32_compare_dir_##A(const struct dirent* a, const struct dirent* b) \ +{ \ + struct i386_dirent d1, d2; \ + UnalignDirent_32(a, &d1); \ + UnalignDirent_32(a, &d2); \ + return (int)RunFunctionFmt(my32_compare_dir_fct_##A, "pp", &d1, &d2); \ +} +SUPER() +#undef GO +int my32_alphasort64(x64emu_t* emu, ptr_t* d1_, ptr_t* d2_); +static void* findcompare_dirFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) { if(p==my32_alphasort64) return alphasort64; else return p; } + #define GO(A) if(my32_compare_dir_fct_##A == (uintptr_t)fct) return my32_compare_dir_##A; + SUPER() + #undef GO + #define GO(A) if(my32_compare_dir_fct_##A == 0) {my32_compare_dir_fct_##A = (uintptr_t)fct; return my32_compare_dir_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc compare_dir callback\n"); + return NULL; +} +// filter64 +#define GO(A) \ +static uintptr_t my32_filter64_fct_##A = 0; \ +static int my32_filter64_##A(const struct dirent64* a) \ +{ \ + return (int)RunFunctionFmt(my32_filter64_fct_##A, "p", a); \ +} +SUPER() +#undef GO +static void* findfilter64Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_filter64_fct_##A == (uintptr_t)fct) return my32_filter64_##A; + SUPER() + #undef GO + #define GO(A) if(my32_filter64_fct_##A == 0) {my32_filter64_fct_##A = (uintptr_t)fct; return my32_filter64_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc filter64 callback\n"); + return NULL; +} +// compare64 +#define GO(A) \ +static uintptr_t my32_compare64_fct_##A = 0; \ +static int my32_compare64_##A(const struct dirent64* a, const struct dirent64* b) \ +{ \ + return (int)RunFunctionFmt(my32_compare64_fct_##A, "pp", a, b); \ +} +SUPER() +#undef GO +static void* findcompare64Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_compare64_fct_##A == (uintptr_t)fct) return my32_compare64_##A; + SUPER() + #undef GO + #define GO(A) if(my32_compare64_fct_##A == 0) {my32_compare64_fct_##A = (uintptr_t)fct; return my32_compare64_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc compare64 callback\n"); + return NULL; +} +#if 0 +// on_exit +#define GO(A) \ +static uintptr_t my32_on_exit_fct_##A = 0; \ +static void my32_on_exit_##A(int a, const void* b) \ +{ \ + RunFunction(my_context, my32_on_exit_fct_##A, 2, a, b); \ +} +SUPER() +#undef GO +static void* findon_exitFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_on_exit_fct_##A == (uintptr_t)fct) return my32_on_exit_##A; + SUPER() + #undef GO + #define GO(A) if(my32_on_exit_fct_##A == 0) {my32_on_exit_fct_##A = (uintptr_t)fct; return my32_on_exit_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libc on_exit callback\n"); + return NULL; +} +#endif +#undef SUPER + +EXPORT int my32_statvfs64(x64emu_t* emu, void* f, void* r) +{ + struct statvfs s = {0}; + int ret = statvfs(f, &s); + if(r) + UnalignStatVFS64_32(&s, r); + return ret; +} + +EXPORT int my32_statvfs(x64emu_t* emu, void* f, void* r) +{ + struct statvfs s = {0}; + int ret = statvfs(f, &s); + if(r) + UnalignStatVFS_32(&s, r); + return ret; +} + +// some my32_XXX declare and defines +#ifdef ANDROID +void my32___libc_init(x64emu_t* emu, void* raw_args , void (*onexit)(void) , int (*main)(int, char**, char**), void const * const structors ); +#else +int32_t my32___libc_start_main(x64emu_t* emu, int *(main) (int, char * *, char * *), + int argc, char * * ubp_av, void (*init) (void), void (*fini) (void), + void (*rtld_fini) (void), void (* stack_end)); // implemented in x64run_private.c +#endif + +EXPORT void my32___libc_init_first(x64emu_t* emu, int argc, char* arg0, char** b) +{ + // do nothing specific for now + return; +} + +uint32_t my32_syscall(x64emu_t *emu); // implemented in x64syscall.c +void EXPORT my32___stack_chk_fail(x64emu_t* emu) +{ + char buff[200]; + void* addr = from_ptrv(*(ptr_t*)from_ptrv(R_ESP)); + const char* name = getAddrFunctionName((uintptr_t)addr); + #ifdef HAVE_TRACE + sprintf(buff, "%p: Stack is corrupted, aborting (prev IP=%p) ESP=0x%x %s\n", addr, (void*)emu->prev2_ip, R_ESP, name); + #else + sprintf(buff, "%p: Stack is corrupted, aborting ESP=0x%x %s\n", addr, R_ESP, name); + #endif + print_cycle_log(LOG_INFO); + StopEmu(emu, buff, 1); +} +void EXPORT my32___gmon_start__(x64emu_t *emu) +{ + printf_log(LOG_DEBUG, "__gmon_start__ called (dummy call)\n"); +} +int EXPORT my32___cxa_atexit(x64emu_t* emu, void* p, void* a, void* d) +{ + AddCleanup1Arg(emu, p, a,FindElfAddress(my_context, (uintptr_t)d)); + return 0; +} +void EXPORT my32___cxa_finalize(x64emu_t* emu, void* p) +{ + if(!p) { + // p is null, call (and remove) all Cleanup functions + CallAllCleanup(emu); + return; + } + CallCleanup(emu, FindElfAddress(my_context, (uintptr_t)p)); +} +int EXPORT my32_atexit(x64emu_t* emu, void *p) +{ + AddCleanup(emu, p); + return 0; +} + + +int my32_getcontext(x64emu_t* emu, void* ucp); +int my32_setcontext(x64emu_t* emu, void* ucp); +void my32_makecontext(x64emu_t* emu, void* ucp, void* fnc, int32_t argc, void* argv); +int my32_swapcontext(x64emu_t* emu, void* ucp1, void* ucp2); + +// All signal and context functions defined in signals.c + +// All fts function defined in myfts.c + +// getauxval implemented in auxval.c + + +// this one is defined in elfloader.c +int my32_dl_iterate_phdr(x64emu_t *emu, void* F, void *data); + +pid_t EXPORT my32_fork(x64emu_t* emu) +{ +/* #if 1 + emu->quit = 1; + emu->fork = 1; + return 0; + #else + return 0; + #endif*/ + // execute atforks prepare functions, in reverse order + for (int i=my_context->atfork_sz-1; i>=0; --i) + if(my_context->atforks[i].prepare) + RunFunctionWithEmu(emu, 0, my_context->atforks[i].prepare, 0); + int type = emu->type; + pid_t v; + v = fork(); + if(type == EMUTYPE_MAIN) + thread_set_emu(emu); + if(v<0) { + printf_log(LOG_NONE, "BOX32: Warning, fork errored... (%d)\n", v); + // error... + } else if(v>0) { + // execute atforks parent functions + for (int i=0; iatfork_sz; --i) + if(my_context->atforks[i].parent) + RunFunctionWithEmu(emu, 0, my_context->atforks[i].parent, 0); + + } else /*if(v==0)*/ { + // execute atforks child functions + for (int i=0; iatfork_sz; --i) + if(my_context->atforks[i].child) + RunFunctionWithEmu(emu, 0, my_context->atforks[i].child, 0); + } + return v; +} +pid_t EXPORT my32___fork(x64emu_t* emu) __attribute__((alias("my32_fork"))); +pid_t EXPORT my32_vfork(x64emu_t* emu) +{ + #if 1 + emu->quit = 1; + emu->fork = 1; // use regular fork... + return 0; + #else + return 0; + #endif +} + +int EXPORT my32_uname(struct utsname *buf) +{ + //TODO: check sizeof(struct utsname) == 390 + int ret = uname(buf); + strcpy(buf->machine, "x86_64"); + return ret; +} + +// X86_O_RDONLY 0x00 +#define X86_O_WRONLY 0x01 // octal 01 +#define X86_O_RDWR 0x02 // octal 02 +#define X86_O_CREAT 0x40 // octal 0100 +#define X86_O_EXCL 0x80 // octal 0200 +#define X86_O_NOCTTY 0x100 // octal 0400 +#define X86_O_TRUNC 0x200 // octal 01000 +#define X86_O_APPEND 0x400 // octal 02000 +#define X86_O_NONBLOCK 0x800 // octal 04000 +#define X86_O_SYNC 0x101000 // octal 04010000 +#define X86_O_DSYNC 0x1000 // octal 010000 +#define X86_O_RSYNC O_SYNC +#define X86_FASYNC 020000 +#define X86_O_DIRECT 040000 +#define X86_O_LARGEFILE 0100000 +#define X86_O_DIRECTORY 0200000 +#define X86_O_NOFOLLOW 0400000 +#define X86_O_NOATIME 01000000 +#define X86_O_CLOEXEC 02000000 +#define X86_O_PATH 010000000 +#define X86_O_TMPFILE 020200000 + +#ifndef O_TMPFILE +#define O_TMPFILE (020000000 | O_DIRECTORY) +#endif +#ifndef O_PATH +#define O_PATH 010000000 +#endif + +#define SUPER() \ + GO(O_WRONLY) \ + GO(O_RDWR) \ + GO(O_CREAT) \ + GO(O_EXCL) \ + GO(O_NOCTTY) \ + GO(O_TRUNC) \ + GO(O_APPEND) \ + GO(O_NONBLOCK) \ + GO(O_SYNC) \ + GO(O_DSYNC) \ + GO(O_RSYNC) \ + GO(FASYNC) \ + GO(O_DIRECT) \ + GO(O_LARGEFILE) \ + GO(O_TMPFILE) \ + GO(O_DIRECTORY) \ + GO(O_NOFOLLOW) \ + GO(O_NOATIME) \ + GO(O_CLOEXEC) \ + GO(O_PATH) \ + +// x86->arm +int of_convert32(int a) +{ + if(!a || a==-1) return a; + int b=0; + #define GO(A) if((a&X86_##A)==X86_##A) {a&=~X86_##A; b|=A;} + SUPER(); + #undef GO + if(a) { + printf_log(LOG_NONE, "Warning, of_convert32(...) left over 0x%x, converted 0x%x\n", a, b); + } + return a|b; +} + +// arm->x86 +int of_unconvert32(int a) +{ + if(!a || a==-1) return a; + int b=0; + #define GO(A) if((a&A)==A) {a&=~A; b|=X86_##A;} + SUPER(); + #undef GO + if(a) { + printf_log(LOG_NONE, "Warning, of_unconvert32(...) left over 0x%x, converted 0x%x\n", a, b); + } + return a|b; +} +#undef SUPER + +EXPORT void* my32__ZGTtnaX (size_t a) { printf("warning _ZGTtnaX called\n"); return NULL; } +EXPORT void my32__ZGTtdlPv (void* a) { printf("warning _ZGTtdlPv called\n"); } +EXPORT uint8_t my32__ITM_RU1(const uint8_t * a) { printf("warning _ITM_RU1 called\n"); return 0; } +EXPORT uint32_t my32__ITM_RU4(const uint32_t * a) { printf("warning _ITM_RU4 called\n"); return 0; } +EXPORT uint64_t my32__ITM_RU8(const uint64_t * a) { printf("warning _ITM_RU8 called\n"); return 0; } +EXPORT void my32__ITM_memcpyRtWn(void * a, const void * b, size_t c) {printf("warning _ITM_memcpyRtWn called\n"); } +EXPORT void my32__ITM_memcpyRnWt(void * a, const void * b, size_t c) {printf("warning _ITM_memcpyRtWn called\n"); } + +EXPORT void my32_longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val); +EXPORT void my32__longjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val) __attribute__((alias("my32_longjmp"))); +EXPORT void my32_siglongjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val) __attribute__((alias("my32_longjmp"))); +EXPORT void my32___longjmp_chk(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int32_t __val) __attribute__((alias("my32_longjmp"))); + +//EXPORT int32_t my32_setjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p); +//EXPORT int32_t my32__setjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p) __attribute__((alias("my32_setjmp"))); +//EXPORT int32_t my32___sigsetjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p) __attribute__((alias("my32_setjmp"))); +#if 0 +EXPORT void my32_exit(x64emu_t *emu, int32_t status) +{ + R_EAX = (uint32_t)status; + emu->quit = 1; +} +EXPORT void my32__exit(x64emu_t *emu, int32_t status) __attribute__((alias("my32_exit"))); +EXPORT void my32__Exit(x64emu_t *emu, int32_t status) __attribute__((alias("my32_exit"))); +#endif +extern int vsyslog(int, const char*, va_list); +EXPORT int my32_vsyslog(x64emu_t* emu, int priority, void* fmt, void* b) { + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vsyslog(priority, (const char*)fmt, VARARGS_32); +} +EXPORT int my32___vsyslog_chk(x64emu_t* emu, int priority, int flag, void* fmt, void* b) { + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vsyslog(priority, (const char*)fmt, VARARGS_32); +} +EXPORT int my32___syslog_chk(x64emu_t* emu, int priority, int flags, void* fmt, void* b) { + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vsyslog(priority, (const char*)fmt, VARARGS_32); +} +EXPORT int my32_printf(x64emu_t *emu, void* fmt, void* b) { + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vprintf((const char*)fmt, VARARGS_32); +} +EXPORT int my32___printf_chk(x64emu_t *emu, void* fmt, void* b) __attribute__((alias("my32_printf"))); + +EXPORT int my32_vprintf(x64emu_t *emu, void* fmt, void* b) { + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vprintf(fmt, VARARGS_32); +} +EXPORT int my32___vprintf_chk(x64emu_t *emu, void* fmt, void* b) __attribute__((alias("my32_vprintf"))); + +EXPORT int my32_vfprintf(x64emu_t *emu, void* F, void* fmt, void* b) { + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vfprintf(F, fmt, VARARGS_32); +} +EXPORT int my32___vfprintf_chk(x64emu_t *emu, void* F, void* fmt, void* b) __attribute__((alias("my32_vfprintf"))); +EXPORT int my32__IO_vfprintf(x64emu_t *emu, void* F, void* fmt, void* b) __attribute__((alias("my32_vfprintf"))); + +EXPORT int my32_dprintf(x64emu_t *emu, int fd, void* fmt, void* V) { + // need to align on arm + myStackAlign32((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + return vdprintf(fd, fmt, VARARGS_32); +} +EXPORT int my32___dprintf_chk(x64emu_t *emu, int fd, void* fmt, void* V) __attribute__((alias("my32_dprintf"))); + +EXPORT int my32_fprintf(x64emu_t *emu, void* F, void* fmt, void* V) { + // need to align on arm + myStackAlign32((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + return vfprintf(F, fmt, VARARGS_32); +} +EXPORT int my32___fprintf_chk(x64emu_t *emu, void* F, void* fmt, void* V) __attribute__((alias("my32_fprintf"))); +extern int box64_stdout_no_w; +EXPORT int my32_wprintf(x64emu_t *emu, void* fmt, void* V) { + // need to align on arm + myStackAlignW32((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + if(box64_stdout_no_w) { + wchar_t buff[2048]; + int ret = vswprintf(buff, 2047, fmt, VARARGS_32); + printf("%S", buff); + return ret; + } + return vwprintf(fmt, VARARGS_32); +} +#if 0 +EXPORT int my32___wprintf_chk(x64emu_t *emu, int flag, void* fmt, void* V) { + #ifndef NOALIGN + // need to align on arm + myStackAlignW((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + void* f = vwprintf; + return ((iFpp_t)f)(fmt, VARARGS_32); + #else + // other platform don't need that + return vwprintf((const wchar_t*)fmt, (va_list)V); + #endif +} +EXPORT int my32_fwprintf(x64emu_t *emu, void* F, void* fmt, void* V) { + #ifndef NOALIGN + // need to align on arm + myStackAlignW((const char*)fmt, V, emu->scratch); + PREPARE_VALIST_32; + void* f = vfwprintf; + return ((iFppp_t)f)(F, fmt, VARARGS_32); + #else + // other platform don't need that + return vfwprintf((FILE*)F, (const wchar_t*)fmt, V); + #endif +} +EXPORT int my32___fwprintf_chk(x64emu_t *emu, void* F, void* fmt, void* V) __attribute__((alias("my32_fwprintf"))); + +EXPORT int my32_vfwprintf(x64emu_t *emu, void* F, void* fmt, void* b) { + #ifndef NOALIGN + myStackAlignW((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vfwprintf; + return ((iFppp_t)f)(F, fmt, VARARGS_32); + #else + return vfwprintf(F, fmt, b); + #endif +} + +EXPORT int my32_vwprintf(x64emu_t *emu, void* fmt, void* b) { + #ifndef NOALIGN + myStackAlignW((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + void* f = vwprintf; + return ((iFpp_t)f)(fmt, VARARGS_32); + #else + void* f = vwprintf; + return ((iFpp_t)f)(fmt, b); + #endif +} +#endif +EXPORT void *my32_div(void *result, int numerator, int denominator) { + *(div_t *)result = div(numerator, denominator); + return result; +} + +EXPORT int my32_snprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, void * b) { + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vsnprintf(buff, s, fmt, VARARGS_32); +} +EXPORT int my32___snprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, void * b) __attribute__((alias("my32_snprintf"))); + +EXPORT int my32___snprintf_chk(x64emu_t* emu, void* buff, size_t s, int f1, int f2, void * fmt, void * b) { + (void)f1; (void)f2; + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vsnprintf(buff, s, fmt, VARARGS_32); +} + +EXPORT int my32_sprintf(x64emu_t* emu, void* buff, void * fmt, void * b) { + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vsprintf(buff, fmt, VARARGS_32); +} +EXPORT int my32___sprintf_chk(x64emu_t* emu, void* buff, void * fmt, void * b) __attribute__((alias("my32_sprintf"))); + +EXPORT int my32_asprintf(x64emu_t* emu, ptr_t* buff, void * fmt, void * b) { + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + char* res = NULL; + int ret = vasprintf(&res, fmt, VARARGS_32); + *buff = to_ptrv(res); + return ret; +} +EXPORT int my32___asprintf(x64emu_t* emu, void** buff, void * fmt, void * b) __attribute__((alias("my32_asprintf"))); + +EXPORT int my32_vsprintf(x64emu_t* emu, void* buff, void * fmt, uint32_t * b) { + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + int r = vsprintf(buff, fmt, VARARGS_32); + return r; +} +EXPORT int my32___vsprintf_chk(x64emu_t* emu, void* buff, int flags, size_t len, void * fmt, uint32_t * b) { + // need to align on arm + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + int r = vsprintf(buff, fmt, VARARGS_32); + return r; +} + +EXPORT int my32_vfscanf(x64emu_t* emu, void* stream, void* fmt, void* b) // probably uneeded to do a GOM, a simple wrap should enough +{ + int n = myStackAlignScanf32((const char*)fmt, (uint32_t*)b, emu->scratch, N_SCRATCH); + PREPARE_VALIST_32; + int ret = vfscanf(stream, fmt, VARARGS_32); + if(n) myStackAlignScanf32_final((const char*)fmt, (uint32_t*)b, emu->scratch, N_SCRATCH, ret); + return ret; +} +EXPORT int my32__IO_vfscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vfscanf"))); +EXPORT int my32___isoc99_vfscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vfscanf"))); +EXPORT int my32___isoc99_fscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vfscanf"))); +EXPORT int my32_fscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vfscanf"))); + +EXPORT int my32_vsscanf(x64emu_t* emu, void* buff, void* fmt, void* b) +{ + int n = myStackAlignScanf32((const char*)fmt, (uint32_t*)b, emu->scratch, N_SCRATCH); + PREPARE_VALIST_32; + int ret = vsscanf(buff, fmt, VARARGS_32); + if(ret>0) myStackAlignScanf32_final((const char*)fmt, (uint32_t*)b, emu->scratch, N_SCRATCH, ret); + return ret; +} +EXPORT int my32___isoc99_vsscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vsscanf"))); +EXPORT int my32__vsscanf(x64emu_t* emu, void* buff, void* fmt, void* b) __attribute__((alias("my32_vsscanf"))); +EXPORT int my32_sscanf(x64emu_t* emu, void* buff, void* fmt, void* b) __attribute__((alias("my32_vsscanf"))); +EXPORT int my32___isoc99_sscanf(x64emu_t* emu, void* stream, void* fmt, void* b) __attribute__((alias("my32_vsscanf"))); + +EXPORT int my32_vsnprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, void * b) { + // need to align on arm + myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + int r = vsnprintf(buff, s, fmt, VARARGS_32); + return r; +} +EXPORT int my32___vsnprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, void * b) __attribute__((alias("my32_vsnprintf"))); +EXPORT int my32___vsnprintf_chk(x64emu_t* emu, void* buff, size_t s, void * fmt, void * b) __attribute__((alias("my32_vsnprintf"))); +EXPORT int my32_vasprintf(x64emu_t* emu, ptr_t* strp, void* fmt, void* b) +{ + // need to align on arm + myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + char* res = NULL; + int r = vasprintf(&res, fmt, VARARGS_32); + *strp = to_ptrv(res); + return r; +} +EXPORT int my32___vasprintf_chk(x64emu_t* emu, void* strp, int flags, void* fmt, void* b) +{ + // need to align on arm + myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + int r = vasprintf(strp, fmt, VARARGS_32); + return r; +} + +EXPORT int my32___asprintf_chk(x64emu_t* emu, void* result_ptr, int flags, void* fmt, void* b) +{ + myStackAlign32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vasprintf(result_ptr, fmt, VARARGS_32); +} + +EXPORT int my32_vswprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, uint32_t * b) { + // need to align on arm + myStackAlignW32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + int r = vswprintf(buff, s, fmt, VARARGS_32); + return r; +} +EXPORT int my32___vswprintf(x64emu_t* emu, void* buff, size_t s, void * fmt, uint32_t* b) __attribute__((alias("my32_vswprintf"))); + +EXPORT int my32___vswprintf_chk(x64emu_t* emu, void* buff, size_t s, int flags, size_t m, void * fmt, void * b, va_list V) { + // need to align on arm + myStackAlignW32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + return vswprintf(buff, s, fmt, VARARGS_32); +} + +EXPORT int my32_vswscanf(x64emu_t* emu, void* buff, void* fmt, void* b) +{ + int n = myStackAlignScanfW32((const char*)fmt, (uint32_t*)b, emu->scratch, N_SCRATCH); + PREPARE_VALIST_32; + int ret = vswscanf(buff, fmt, VARARGS_32); + if(n) myStackAlignScanfW32_final((const char*)fmt, (uint32_t*)b, emu->scratch, N_SCRATCH, ret); + return ret; +} + +EXPORT int my32__vswscanf(x64emu_t* emu, void* buff, void* fmt, void* b) __attribute__((alias("my32_vswscanf"))); +EXPORT int my32_swscanf(x64emu_t* emu, void* buff, void* fmt, void* b) __attribute__((alias("my32_vswscanf"))); + +#if 0 +EXPORT void my32_verr(x64emu_t* emu, int eval, void* fmt, void* b) { + #ifndef NOALIGN + myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = verr; + ((vFipp_t)f)(eval, fmt, VARARGS_32); + #else + void* f = verr; + ((vFipp_t)f)(eval, fmt, (uint32_t*)b); + #endif +} + +EXPORT void my32_vwarn(x64emu_t* emu, void* fmt, void* b) { + #ifndef NOALIGN + myStackAlignW((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + void* f = vwarn; + ((vFpp_t)f)(fmt, VARARGS_32); + #else + void* f = vwarn; + ((vFpp_t)f)(fmt, (uint32_t*)b); + #endif +} + +#endif +EXPORT int my32___swprintf_chk(x64emu_t* emu, void* s, uint32_t n, int32_t flag, uint32_t slen, void* fmt, void * b) +{ + myStackAlignW32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + return vswprintf(s, n, fmt, VARARGS_32); +} +EXPORT int my32_swprintf(x64emu_t* emu, void* s, uint32_t n, void* fmt, void *b) +{ + myStackAlignW32((const char*)fmt, b, emu->scratch); + PREPARE_VALIST_32; + int r = vswprintf(s, n, fmt, VARARGS_32); + return r; +} + +EXPORT void my32__ITM_addUserCommitAction(x64emu_t* emu, void* cb, uint32_t b, void* c) +{ + // disabled for now... Are all this _ITM_ stuff really mendatory? + #if 0 + // quick and dirty... Should store the callback to be removed later.... + libc_my32_t *my = (libc_my32_t *)emu->context->libclib->priv.w.p2; + x64emu_t *cbemu = AddCallback(emu, (uintptr_t)cb, 1, c, NULL, NULL, NULL); + my->_ITM_addUserCommitAction(libc1ArgCallback, b, cbemu); + // should keep track of cbemu to remove at some point... + #else + printf("warning _ITM_addUserCommitAction called\n"); + #endif +} + +EXPORT void my32__ITM_registerTMCloneTable(x64emu_t* emu, void* p, uint32_t s) {} +EXPORT void my32__ITM_deregisterTMCloneTable(x64emu_t* emu, void* p) {} + + +struct i386_stat { + uint64_t st_dev; + uint32_t __pad1; + uint32_t st_ino; + uint32_t st_mode; + uint32_t st_nlink; + uint32_t st_uid; + uint32_t st_gid; + uint64_t st_rdev; + uint32_t __pad2; + int32_t st_size; + int32_t st_blksize; + int32_t st_blocks; + int32_t st_atime_sec; + uint32_t st_atime_nsec; + int32_t st_mtime_sec; + uint32_t st_mtime_nsec; + int32_t st_ctime_sec; + uint32_t st_ctime_nsec; + uint32_t __unused4; + uint32_t __unused5; +} __attribute__((packed)); + +static int FillStatFromStat64(int vers, const struct stat64 *st64, void *st32) +{ + struct i386_stat *i386st = (struct i386_stat *)st32; + + if (vers != 3) + { + errno = EINVAL; + return -1; + } + + i386st->st_dev = st64->st_dev; + i386st->__pad1 = 0; + if (fix_64bit_inodes) + { + i386st->st_ino = st64->st_ino ^ (st64->st_ino >> 32); + } + else + { + i386st->st_ino = st64->st_ino; + if ((st64->st_ino >> 32) != 0) + { + errno = EOVERFLOW; + return -1; + } + } + i386st->st_mode = st64->st_mode; + i386st->st_nlink = st64->st_nlink; + i386st->st_uid = st64->st_uid; + i386st->st_gid = st64->st_gid; + i386st->st_rdev = st64->st_rdev; + i386st->__pad2 = 0; + i386st->st_size = st64->st_size; + if ((i386st->st_size >> 31) != (int32_t)(st64->st_size >> 32)) + { + errno = EOVERFLOW; + return -1; + } + i386st->st_blksize = st64->st_blksize; + i386st->st_blocks = st64->st_blocks; + if ((i386st->st_blocks >> 31) != (int32_t)(st64->st_blocks >> 32)) + { + errno = EOVERFLOW; + return -1; + } + i386st->st_atime_sec = st64->st_atim.tv_sec; + i386st->st_atime_nsec = st64->st_atim.tv_nsec; + i386st->st_mtime_sec = st64->st_mtim.tv_sec; + i386st->st_mtime_nsec = st64->st_mtim.tv_nsec; + i386st->st_ctime_sec = st64->st_ctim.tv_sec; + i386st->st_ctime_nsec = st64->st_ctim.tv_nsec; + i386st->__unused4 = 0; + i386st->__unused5 = 0; + return 0; +} + +EXPORT int my32_stat(char* path, void* buf) +{ + struct stat64 st; + int r = stat64(path, &st); + UnalignStat64_32(&st, buf); + return r; +} + +EXPORT int my32_fstat(int fd, void* buf) +{ + struct stat64 st; + int r = fstat64(fd, &st); + UnalignStat64_32(&st, buf); + return r; +} + +EXPORT int my32_lstat(char* path, void* buf) +{ + struct stat64 st; + int r = lstat64(path, &st); + UnalignStat64_32(&st, buf); + return r; +} + +EXPORT int my32___fxstat(x64emu_t *emu, int vers, int fd, void* buf) +{ + struct stat64 st; + int r = fstat64(fd, &st); + if (r) return r; + r = FillStatFromStat64(vers, &st, buf); + return r; +} + +EXPORT int my32___fxstat64(x64emu_t *emu, int vers, int fd, void* buf) +{ + struct stat64 st; + int r = fstat64(fd, &st); + //int r = syscall(__NR_stat64, fd, &st); + UnalignStat64_32(&st, buf); + return r; +} +EXPORT int my32_stat64(x64emu_t* emu, void* path, void* buf) +{ + struct stat64 st; + int r = stat64(path, &st); + UnalignStat64_32(&st, buf); + return r; +} +EXPORT int my32_lstat64(x64emu_t* emu, void* path, void* buf) +{ + struct stat64 st; + int r = lstat64(path, &st); + UnalignStat64_32(&st, buf); + return r; +} + +EXPORT int my32___xstat(x64emu_t* emu, int v, void* path, void* buf) +{ + struct stat64 st; + int r = stat64((const char*)path, &st); + if (r) return r; + r = FillStatFromStat64(v, &st, buf); + return r; +} + +EXPORT int my32___xstat64(x64emu_t* emu, int v, void* path, void* buf) +{ + struct stat64 st; + int r = stat64((const char*)path, &st); + UnalignStat64_32(&st, buf); + return r; +} + +EXPORT int my32___lxstat(x64emu_t* emu, int v, void* name, void* buf) +{ + struct stat64 st; + int r = lstat64((const char*)name, &st); + if (r) return r; + r = FillStatFromStat64(v, &st, buf); + return r; +} + +EXPORT int my32___lxstat64(x64emu_t* emu, int v, void* name, void* buf) +{ + struct stat64 st; + int r = lstat64((const char*)name, &st); + UnalignStat64_32(&st, buf); + return r; +} +#if 0 +EXPORT int my32___fxstatat(x64emu_t* emu, int v, int d, void* path, void* buf, int flags) +{ + struct stat64 st; + int r = fstatat64(d, path, &st, flags); + if (r) return r; + r = FillStatFromStat64(v, &st, buf); + return r; +} +#endif +EXPORT int my32___fxstatat64(x64emu_t* emu, int v, int d, void* path, void* buf, int flags) +{ + struct stat64 st; + int r = fstatat64(d, path, &st, flags); + UnalignStat64_32(&st, buf); + return r; +} +#if 0 +EXPORT int my32__IO_file_stat(x64emu_t* emu, void* f, void* buf) +{ + struct stat64 st; + libc_my32_t *my = (libc_my32_t *)emu->context->libclib->priv.w.p2; + int r = my->_IO_file_stat(f, &st); + UnalignStat64(&st, buf); + return r; +} +#endif +EXPORT int my32_fstatfs(int fd, void* buf) +{ + struct statfs64 st; + int r = fstatfs64(fd, &st); + UnalignStatFS_32(&st, buf); + return r; +} +EXPORT int my32_fstatfs64(int fd, void* buf) +{ + struct statfs64 st; + int r = fstatfs64(fd, &st); + UnalignStatFS64_32(&st, buf); + return r; +} + +EXPORT int my32_statfs(const char* path, void* buf) +{ + struct statfs64 st; + int r = statfs64(path, &st); + UnalignStatFS_32(&st, buf); + return r; +} +EXPORT int my32_statfs64(const char* path, void* buf) +{ + struct statfs64 st; + int r = statfs64(path, &st); + UnalignStatFS64_32(&st, buf); + return r; +} +#if 0 + +#ifdef ANDROID +typedef int (*__compar_d_fn_t)(const void*, const void*, void*); + +static size_t qsort_r_partition(void* base, size_t size, __compar_d_fn_t compar, void* arg, size_t lo, size_t hi) +{ + void* tmp = malloc(size); + void* pivot = ((char*)base) + lo * size; + size_t i = lo; + for (size_t j = lo; j <= hi; j++) + { + void* base_i = ((char*)base) + i * size; + void* base_j = ((char*)base) + j * size; + if (compar(base_j, pivot, arg) < 0) + { + memcpy(tmp, base_i, size); + memcpy(base_i, base_j, size); + memcpy(base_j, tmp, size); + i++; + } + } + void* base_i = ((char *)base) + i * size; + void* base_hi = ((char *)base) + hi * size; + memcpy(tmp, base_i, size); + memcpy(base_i, base_hi, size); + memcpy(base_hi, tmp, size); + free(tmp); + return i; +} + +static void qsort_r_helper(void* base, size_t size, __compar_d_fn_t compar, void* arg, ssize_t lo, ssize_t hi) +{ + if (lo < hi) + { + size_t p = qsort_r_partition(base, size, compar, arg, lo, hi); + qsort_r_helper(base, size, compar, arg, lo, p - 1); + qsort_r_helper(base, size, compar, arg, p + 1, hi); + } +} + +static void qsort_r(void* base, size_t nmemb, size_t size, __compar_d_fn_t compar, void* arg) +{ + return qsort_r_helper(base, size, compar, arg, 0, nmemb - 1); +} +#endif +#endif +typedef struct compare_r_s { + x64emu_t* emu; + uintptr_t f; + void* data; + int r; +} compare_r_t; + +static int my32_compare_r_cb(void* a, void* b, compare_r_t* arg) +{ + return (int)RunFunctionWithEmu(arg->emu, 0, arg->f, 2+arg->r, a, b, arg->data); +} + +#ifndef ANDROID +EXPORT void my32_qsort(x64emu_t* emu, void* base, size_t nmemb, size_t size, void* fnc) +{ + compare_r_t args; + args.emu = emu; args.f = (uintptr_t)fnc; args.r = 0; args.data = NULL; + qsort_r(base, nmemb, size, (__compar_d_fn_t)my32_compare_r_cb, &args); +} +EXPORT void my32_qsort_r(x64emu_t* emu, void* base, size_t nmemb, size_t size, void* fnc, void* data) +{ + compare_r_t args; + args.emu = emu; args.f = (uintptr_t)fnc; args.r = 1; args.data = data; + qsort_r(base, nmemb, size, (__compar_d_fn_t)my32_compare_r_cb, &args); +} +#endif + +EXPORT void* my32_bsearch(x64emu_t* emu, void* key, void* base, size_t nmemb, size_t size, void* fnc) +{ + return bsearch(key, base, nmemb, size, findcompareFct(fnc)); +} + +EXPORT void* my32_lsearch(x64emu_t* emu, void* key, void* base, size_t* nmemb, size_t size, void* fnc) +{ + return lsearch(key, base, nmemb, size, findcompareFct(fnc)); +} +EXPORT void* my32_lfind(x64emu_t* emu, void* key, void* base, size_t* nmemb, size_t size, void* fnc) +{ + return lfind(key, base, nmemb, size, findcompareFct(fnc)); +} + +EXPORT void* my32_readdir(x64emu_t* emu, void* dirp) +{ + struct dirent64 *dp64 = readdir64((DIR *)dirp); + if (!dp64) return NULL; + uint32_t ino32 = dp64->d_ino ^ (dp64->d_ino >> 32); + int32_t off32 = dp64->d_off; + struct i386_dirent *dp32 = (struct i386_dirent *)&(dp64->d_off); + dp32->d_ino = ino32; + dp32->d_off = off32; + dp32->d_reclen -= 8; + return dp32; +} +#if 0 + +EXPORT int32_t my32_readdir_r(x64emu_t* emu, void* dirp, void* entry, void** result) +{ + struct dirent64 d64, *dp64; + if (fix_64bit_inodes && (sizeof(d64.d_name) > 1)) + { + static iFppp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) + { + *result = NULL; + return 0; + } + f = (iFppp_t)dlsym(lib->priv.w.lib, "readdir64_r"); + } + + int r = f(dirp, &d64, &dp64); + if (r || !dp64 || !entry) + { + *result = NULL; + return r; + } + + struct i386_dirent *dp32 = (struct i386_dirent *)entry; + int namelen = dp64->d_reclen - offsetof(struct dirent64, d_name); + if (namelen > sizeof(dp32->d_name)) + { + *result = NULL; + return ENAMETOOLONG; + } + + dp32->d_ino = dp64->d_ino ^ (dp64->d_ino >> 32); + dp32->d_off = dp64->d_off; + dp32->d_reclen = namelen + offsetof(struct i386_dirent, d_name); + dp32->d_type = dp64->d_type; + memcpy(dp32->d_name, dp64->d_name, namelen); + *result = dp32; + return 0; + } + else + { + static iFppp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) + { + *result = NULL; + return 0; + } + f = (iFppp_t)dlsym(lib->priv.w.lib, "readdir_r"); + } + + return f(dirp, entry, result); + } +} +#endif +static int isProcSelf(const char *path, const char* w) +{ + if(strncmp(path, "/proc/", 6)==0) { + char tmp[64]; + // check if self .... + sprintf(tmp, "/proc/self/%s", w); + if(strcmp((const char*)path, tmp)==0) + return 1; + // check if self PID .... + pid_t pid = getpid(); + sprintf(tmp, "/proc/%d/%s", pid, w); + if(strcmp((const char*)path, tmp)==0) + return 1; + } + return 0; +} + +int getNCpu(); + +#ifdef ANDROID +static int shm_open(const char *name, int oflag, mode_t mode) { + return -1; +} +static int shm_unlink(const char *name) { + return -1; +} +#endif + + +#ifdef DYNAREC +static int hasDBFromAddress(uintptr_t addr) +{ + int idx = (addr>>DYNAMAP_SHIFT); + return getDB(idx)?1:0; +} +#endif + +EXPORT ssize_t my32_read(int fd, void* buf, size_t count) +{ + int ret = read(fd, buf, count); +#ifdef DYNAREC + if(ret!=count && ret>0 && box64_dynarec) { + // continue reading... + void* p = buf+ret; + if(hasDBFromAddress((uintptr_t)p)) { + // allow writing the whole block (this happens with HalfLife, libMiles load code directly from .mix and other file like that) + unprotectDB((uintptr_t)p, count-ret, 1); + int l; + do { + l = read(fd, p, count-ret); + if(l>0) { + p+=l; ret+=l; + } + } while(l>0); + } + } +#endif + return ret; +} + +#if 0 +EXPORT int my32_mkstemps64(x64emu_t* emu, char* template, int suffixlen) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "mkstemps64"); + if(f) + return ((iFpi_t)f)(template, suffixlen); + // implement own version... + // TODO: check size of template, and if really XXXXXX is there + char* fname = strdup(template); + do { + strcpy(fname, template); + char num[8]; + sprintf(num, "%06d", rand()%999999); + memcpy(fname+strlen(fname)-suffixlen-6, num, 6); + } while(!FileExist(fname, -1)); + int ret = open64(fname, O_EXCL); + free(fname); + return ret; +} + +EXPORT int32_t my32_ftw(x64emu_t* emu, void* pathname, void* B, int32_t nopenfd) +{ + static iFppi_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return 0; + f = (iFppi_t)dlsym(lib->priv.w.lib, "ftw"); + } + + return f(pathname, findftwFct(B), nopenfd); +} + +EXPORT int32_t my32_nftw(x64emu_t* emu, void* pathname, void* B, int32_t nopenfd, int32_t flags) +{ + static iFppii_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return 0; + f = (iFppii_t)dlsym(lib->priv.w.lib, "nftw"); + } + + return f(pathname, findnftwFct(B), nopenfd, flags); +} + +EXPORT void* my32_ldiv(x64emu_t* emu, void* p, int32_t num, int32_t den) +{ + *((ldiv_t*)p) = ldiv(num, den); + return p; +} +#endif +EXPORT int my32_epoll_create(x64emu_t* emu, int size) +{ + return epoll_create(size); +} +EXPORT int my32_epoll_create1(x64emu_t* emu, int flags) +{ + return epoll_create1(flags); +} +EXPORT int32_t my32_epoll_ctl(x64emu_t* emu, int32_t epfd, int32_t op, int32_t fd, void* event) +{ + struct epoll_event _event[1] = {0}; + if(event && (op!=EPOLL_CTL_DEL)) + AlignEpollEvent32(_event, event, 1); + return epoll_ctl(epfd, op, fd, event?_event:event); +} +EXPORT int32_t my32_epoll_wait(x64emu_t* emu, int32_t epfd, void* events, int32_t maxevents, int32_t timeout) +{ + struct epoll_event _events[maxevents]; + //AlignEpollEvent(_events, events, maxevents); + int32_t ret = epoll_wait(epfd, events?_events:NULL, maxevents, timeout); + if(ret>0) + UnalignEpollEvent32(events, _events, ret); + return ret; +} +#if 0 +EXPORT int32_t my32_glob(x64emu_t *emu, void* pat, int32_t flags, void* errfnc, void* pglob) +{ + static iFpipp_t f = NULL; + if(!f) { + library_t* lib = my_lib; + if(!lib) return 0; + f = (iFpipp_t)dlsym(lib->priv.w.lib, "glob"); + } + + return f(pat, flags, findgloberrFct(errfnc), pglob); +} + +#ifndef ANDROID +EXPORT int32_t my32_glob64(x64emu_t *emu, void* pat, int32_t flags, void* errfnc, void* pglob) +{ + return glob64(pat, flags, findgloberrFct(errfnc), pglob); +} +#endif +#endif +EXPORT int my32_scandir(x64emu_t *emu, void* dir, void* namelist, void* sel, void* comp) +{ + struct dirent64** list; + int ret = scandir64(dir, &list, findfilter64Fct(sel), findcompare64Fct(comp)); + if(ret>=0) + *(ptr_t*)namelist = to_ptrv(list); + if (ret>0) { + // adjust the array of dirent... + ptr_t* dp32_list = (ptr_t*)list; + struct dirent64** dp64_list = list; + for(int i=0; id_ino ^ (dp64->d_ino >> 32); + int32_t off32 = dp64->d_off; + struct i386_dirent *dp32 = (struct i386_dirent *)&(dp64->d_off); + dp32->d_ino = ino32; + dp32->d_off = off32; + dp32->d_reclen -= 8; + *dp32_list = to_ptrv(dp32); + ++dp32_list; + ++dp64; + } + } + return ret; +} +EXPORT int my32_scandir64(x64emu_t *emu, void* dir, void* namelist, void* sel, void* comp) +{ + struct dirent64** list; + int ret = scandir64(dir, &list, findfilter_dirFct(sel), findcompare_dirFct(comp)); + if(ret>=0) + *(ptr_t*)namelist = to_ptrv(list); + if (ret>0) { + // adjust the array of dirent... + ptr_t* dp32_list = (ptr_t*)list; + struct dirent64** dp64_list = list; + for(int i=0; i=strlen("wine-preloader") && strcmp(path+strlen(path)-strlen("wine-preloader"), "wine-preloader")==0) + skip_first++; + // count argv... + int n=skip_first; + while(argv[n]) ++n; + const char** newargv = (const char**)calloc(n+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + for(int i=0; icontext->fullpath; + printf_log(LOG_DEBUG, " => execv(\"%s\", %p [\"%s\", \"%s\", \"%s\"...:%d])\n", emu->context->box64path, newargv, newargv[0], n?newargv[1]:"", (n>1)?newargv[2]:"",n); + int ret = execv(newargv[0], (char* const*)newargv); + free(newargv); + return ret; + } + // count argv and create the 64bits argv version + int n=0; + while(argv[n]) ++n; + char** newargv = (char**)calloc(n+1, sizeof(char*)); + for(int i=0; i<=n; ++i) + newargv[i] = from_ptrv(argv[i]); + return execv(path, (void*)newargv); +} + +EXPORT int32_t my32_execve(x64emu_t* emu, const char* path, ptr_t argv[], ptr_t envp[]) +{ + int self = isProcSelf(path, "exe"); + int x86 = FileIsX86ELF(path); + int x64 = FileIsX64ELF(path); + char** newenvp = NULL; + // hack to update the environ var if needed + if(envp == from_ptrv(my_context->envv32) && environ) + newenvp = environ; + else { + int n=0; + while(envp[n]) ++n; + const char** newenvp = (const char**)calloc(n+1, sizeof(char*)); + for(int i=0; i<=n; ++i) + newenvp[i+1] = from_ptrv(envp[i]); + } + printf_log(LOG_DEBUG, "execve(\"%s\", %p, %p) is x86=%d\n", path, argv, envp, x86); + if (x86 || x64 || self) { + int skip_first = 0; + if(strlen(path)>=strlen("wine-preloader") && strcmp(path+strlen(path)-strlen("wine-preloader"), "wine-preloader")==0) + skip_first++; + // count argv... + int n=skip_first; + while(argv[n]) ++n; + const char** newargv = (const char**)calloc(n+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + for(int i=0; icontext->fullpath; + printf_log(LOG_DEBUG, " => execve(\"%s\", %p [\"%s\", \"%s\", \"%s\"...:%d])\n", emu->context->box64path, newargv, newargv[0], n?newargv[1]:"", (n>1)?newargv[2]:"",n); + int ret = execve(newargv[0], (char* const*)newargv, newenvp); + free(newargv); + return ret; + } + // count argv and create the 64bits argv version + int n=0; + while(argv[n]) ++n; + const char** newargv = (const char**)calloc(n+1, sizeof(char*)); + for(int i=0; i<=n; ++i) + newargv[i] = from_ptrv(argv[i]); + + if(!strcmp(path + strlen(path) - strlen("/uname"), "/uname") + && newargv[1] && (!strcmp(newargv[1], "-m") || !strcmp(newargv[1], "-p") || !strcmp(newargv[1], "-i")) + && !newargv[2]) { + // uname -m is redirected to box32 -m + path = my_context->box64path; + const char *argv2[3] = { my_context->box64path, newargv[1], NULL }; + return execve(path, (void*)argv2, newenvp); + } + + return execve(path, (void*)newargv, newenvp); +} + +// execvp should use PATH to search for the program first +EXPORT int32_t my32_execvp(x64emu_t* emu, const char* path, ptr_t argv[]) +{ + // need to use BOX32_PATH / PATH here... + char* fullpath = ResolveFile(path, &my_context->box64_path); + // use fullpath now + int self = isProcSelf(fullpath, "exe"); + int x86 = FileIsX86ELF(fullpath); + int x64 = FileIsX64ELF(fullpath); + printf_log(LOG_DEBUG, "execvp(\"%s\", %p) is x86=%d\n", fullpath, argv, x86); + if (x86 || x64 || self) { + int skip_first = 0; + if(strlen(fullpath)>=strlen("wine-preloader") && strcmp(fullpath+strlen(fullpath)-strlen("wine-preloader"), "wine-preloader")==0) + skip_first++; + // count argv... + int n=skip_first; + while(argv[n]) ++n; + const char** newargv = (const char**)calloc(n+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + for(int i=0; icontext->fullpath; + printf_log(LOG_DEBUG, " => execv(\"%s\", %p [\"%s\", \"%s\", \"%s\"...:%d])\n", emu->context->box64path, newargv, newargv[0], n?newargv[1]:"", (n>1)?newargv[2]:"",n); + int ret = execv(newargv[0], (char* const*)newargv); + free(newargv); + return ret; + } + // count argv and create the 64bits argv version + int n=0; + while(argv[n]) ++n; + char** newargv = (char**)calloc(n+1, sizeof(char*)); + for(int i=0; i<=n; ++i) + newargv[i] = from_ptrv(argv[i]); + return execv(fullpath, (void*)newargv); +} +// execvp should use PATH to search for the program first +EXPORT int32_t my32_execvpe(x64emu_t* emu, const char* path, ptr_t argv[], ptr_t envp[]) +{ + // need to use BOX32_PATH / PATH here... + char* fullpath = ResolveFile(path, &my_context->box64_path); + // use fullpath now + int self = isProcSelf(fullpath, "exe"); + int x86 = FileIsX86ELF(fullpath); + int x64 = FileIsX64ELF(fullpath); + char** newenvp = NULL; + // hack to update the environ var if needed + if(envp == from_ptrv(my_context->envv32) && environ) + newenvp = environ; + else { + int n=0; + while(envp[n]) ++n; + const char** newenvp = (const char**)calloc(n+1, sizeof(char*)); + for(int i=0; i<=n; ++i) + newenvp[i+1] = from_ptrv(envp[i]); + } + printf_log(LOG_DEBUG, "execvpe(\"%s\", %p, %p) is x86=%d\n", fullpath, argv, envp, x86); + if (x86 || x64 || self) { + int skip_first = 0; + if(strlen(fullpath)>=strlen("wine-preloader") && strcmp(fullpath+strlen(fullpath)-strlen("wine-preloader"), "wine-preloader")==0) + skip_first++; + // count argv... + int n=skip_first; + while(argv[n]) ++n; + const char** newargv = (const char**)calloc(n+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + for(int i=0; icontext->fullpath; + printf_log(LOG_DEBUG, " => execv(\"%s\", %p [\"%s\", \"%s\", \"%s\"...:%d], %p)\n", emu->context->box64path, newargv, newargv[0], n?newargv[1]:"", (n>1)?newargv[2]:"",n, newenvp); + int ret = execve(newargv[0], (char* const*)newargv, (char* const*)newenvp); + free(newargv); + free(newenvp); + return ret; + } + // count argv and create the 64bits argv version + int n=0; + while(argv[n]) ++n; + char** newargv = (char**)calloc(n+1, sizeof(char*)); + for(int i=0; i<=n; ++i) + newargv[i] = from_ptrv(argv[i]); + int ret = execve(fullpath, (void*)newargv, (void*)newenvp); + free(newargv); + free(newenvp); + return ret; +} + +typedef struct +{ + int __allocated; + int __used; + ptr_t __actions;//struct __spawn_action * + int __pad[16]; +} posix_spawn_file_actions_32_t; + +void convert_file_action_to_32(void* d, void* s) +{ + posix_spawn_file_actions_32_t* dst = d; + posix_spawn_file_actions_t* src = s; + dst->__allocated = src->__allocated; + dst->__used = src->__used; + dst->__actions = to_ptrv(src->__actions); +} +void convert_file_action_to_64(void* d, void* s) +{ + posix_spawn_file_actions_t* dst = d; + posix_spawn_file_actions_32_t* src = s; + dst->__actions = from_ptrv(src->__actions); + dst->__used = src->__used; + dst->__allocated = src->__allocated; +} + +EXPORT int my32_posix_spawn_file_actions_init(x64emu_t* emu, posix_spawn_file_actions_32_t* action) +{ + posix_spawn_file_actions_t action_l; + int ret = posix_spawn_file_actions_init(&action_l); + convert_file_action_to_32(action, &action_l); + return ret; +} +EXPORT int my32_posix_spawn_file_actions_addopen(x64emu_t* emu, posix_spawn_file_actions_32_t* action, int fides, const char* path, int oflag, int modes) +{ + posix_spawn_file_actions_t action_l = {0}; + convert_file_action_to_64(&action_l, action); + int ret = posix_spawn_file_actions_addopen(&action_l, fides, path, oflag, modes); + convert_file_action_to_32(action, &action_l); + return ret; +} + +EXPORT int my32_posix_spawn_file_actions_addclose(x64emu_t* emu, posix_spawn_file_actions_32_t* action, int fides) +{ + posix_spawn_file_actions_t action_l = {0}; + convert_file_action_to_64(&action_l, action); + int ret = posix_spawn_file_actions_addclose(&action_l, fides); + convert_file_action_to_32(action, &action_l); + return ret; +} + +EXPORT int my32_posix_spawn_file_actions_adddup2(x64emu_t* emu, posix_spawn_file_actions_32_t* action, int fides, int newfides) +{ + posix_spawn_file_actions_t action_l = {0}; + convert_file_action_to_64(&action_l, action); + int ret = posix_spawn_file_actions_adddup2(&action_l, fides, newfides); + convert_file_action_to_32(action, &action_l); + return ret; +} + +EXPORT int my32_posix_spawn_file_actions_destroy(x64emu_t* emu, posix_spawn_file_actions_32_t* action) +{ + posix_spawn_file_actions_t action_l; + convert_file_action_to_64(&action_l, action); + int ret = posix_spawn_file_actions_destroy(&action_l); + convert_file_action_to_32(action, &action_l); // just in case? + return ret; +} + +EXPORT int32_t my32_posix_spawn(x64emu_t* emu, pid_t* pid, const char* fullpath, + posix_spawn_file_actions_32_t *actions_s, const posix_spawnattr_t* attrp, ptr_t const argv[], ptr_t const envp[]) +{ + posix_spawn_file_actions_t actions_l = {0}; + posix_spawn_file_actions_t *actions = NULL; + if(actions_s) { + actions = &actions_l; + convert_file_action_to_64(actions, actions_s); + } + // use fullpath... + int self = isProcSelf(fullpath, "exe"); + int x86 = FileIsX86ELF(fullpath); + int x64 = FileIsX64ELF(fullpath); + char** newenvp = NULL; + // hack to update the environ var if needed + if(envp == from_ptrv(my_context->envv32) && environ) + newenvp = environ; + else { + int n=0; + while(envp[n]) ++n; + const char** newenvp = (const char**)calloc(n+1, sizeof(char*)); + for(int i=0; i<=n; ++i) + newenvp[i+1] = from_ptrv(envp[i]); + } + printf_log(LOG_DEBUG, "posix_spawn(%p, \"%s\", %p, %p, %p, %p), IsX86=%d / fullpath=\"%s\"\n", pid, fullpath, actions, attrp, argv, envp, x86, fullpath); + if ((x86 || self)) { + // count argv... + int i=0; + while(argv[i]) ++i; + char** newargv = (char**)calloc(i+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + for (int j=0; jcontext->fullpath; + printf_log(LOG_DEBUG, " => posix_spawn(%p, \"%s\", %p, %p, %p [\"%s\", \"%s\"...:%d], %p)\n", pid, newargv[0], actions, attrp, newargv, newargv[1], i?newargv[2]:"", i, envp); + int ret = posix_spawnp(pid, newargv[0], actions, attrp, newargv, newenvp); + printf_log(LOG_DEBUG, "posix_spawn returned %d\n", ret); + //free(newargv); + return ret; + } + // count argv and create the 64bits argv version + int n=0; + while(argv[n]) ++n; + char** newargv = (char**)calloc(n+1, sizeof(char*)); + for(int i=0; i<=n; ++i) + newargv[i] = from_ptrv(argv[i]); + return posix_spawn(pid, fullpath, actions, attrp, newargv, newenvp); +} + +EXPORT int32_t my32_posix_spawnp(x64emu_t* emu, pid_t* pid, const char* path, + posix_spawn_file_actions_32_t *actions_s, const posix_spawnattr_t* attrp, ptr_t const argv[], ptr_t const envp[]) +{ + posix_spawn_file_actions_t actions_l = {0}; + posix_spawn_file_actions_t *actions = NULL; + if(actions_s) { + actions = &actions_l; + convert_file_action_to_64(actions, actions_s); + } + // need to use BOX32_PATH / PATH here... + char* fullpath = ResolveFile(path, &my_context->box64_path); + // use fullpath... + int self = isProcSelf(fullpath, "exe"); + int x86 = FileIsX86ELF(fullpath); + int x64 = FileIsX64ELF(fullpath); + char** newenvp = NULL; + // hack to update the environ var if needed + if(envp == from_ptrv(my_context->envv32) && environ) + newenvp = environ; + else { + int n=0; + while(envp[n]) ++n; + const char** newenvp = (const char**)calloc(n+1, sizeof(char*)); + for(int i=0; i<=n; ++i) + newenvp[i+1] = from_ptrv(envp[i]); + } + printf_log(LOG_DEBUG, "posix_spawnp(%p, \"%s\", %p, %p, %p, %p), IsX86=%d / fullpath=\"%s\"\n", pid, path, actions, attrp, argv, envp, x86, fullpath); + free(fullpath); + if ((x86 || self)) { + // count argv... + int i=0; + while(argv[i]) ++i; + char** newargv = (char**)calloc(i+2, sizeof(char*)); + newargv[0] = x64?emu->context->box64path:emu->context->box64path; + for (int j=0; jcontext->fullpath; + printf_log(LOG_DEBUG, " => posix_spawnp(%p, \"%s\", %p, %p, %p [\"%s\", \"%s\"...:%d], %p)\n", pid, newargv[0], actions, attrp, newargv, newargv[1], i?newargv[2]:"", i, envp); + int ret = posix_spawnp(pid, newargv[0], actions, attrp, newargv, newenvp); + printf_log(LOG_DEBUG, "posix_spawnp returned %d\n", ret); + //free(newargv); + return ret; + } + // count argv and create the 64bits argv version + int n=0; + while(argv[n]) ++n; + char** newargv = (char**)calloc(n+1, sizeof(char*)); + for(int i=0; i<=n; ++i) + newargv[i] = from_ptrv(argv[i]); + return posix_spawnp(pid, path, actions, attrp, newargv, newenvp); +} + +EXPORT void my32__Jv_RegisterClasses() {} + +EXPORT int32_t my32___cxa_thread_atexit_impl(x64emu_t* emu, void* dtor, void* obj, void* dso) +{ + printf_log(LOG_INFO, "Warning, call to __cxa_thread_atexit_impl(%p, %p, %p) ignored\n", dtor, obj, dso); + return 0; +} +#ifndef ANDROID +extern void __chk_fail(); +EXPORT unsigned long int my32___fdelt_chk (unsigned long int d) +{ + if (d >= FD_SETSIZE) + __chk_fail (); + + return d / __NFDBITS; +} +#endif + +EXPORT int my32_getrlimit(x64emu_t* emu, int what, uint32_t* pr) +{ + struct rlimit64 l = {0}; + int ret = getrlimit64(what, &l); + if(pr) { + pr[0] = (l.rlim_cur<0x100000000LL)?l.rlim_cur:0xffffffff; + pr[1] = (l.rlim_max<0x100000000LL)?l.rlim_max:0xffffffff; + } + return ret; +} +EXPORT int my32_setrlimit(x64emu_t* emu, int what, uint32_t* pr) +{ + struct rlimit64 l = {0}; + l.rlim_cur = (pr[0]!=0xffffffff)?pr[0]:0xffffffffffffffffLL; + l.rlim_max = (pr[1]!=0xffffffff)?pr[1]:0xffffffffffffffffLL; + return setrlimit64(what, &l); +} + +EXPORT void* my32_localtime(x64emu_t* emu, void* t) +{ + struct_L_t t_ = {0}; + static struct_iiiiiiiiilt_t res_ = {0}; + if(t) from_struct_L(&t_, to_ptrv(t)); + void* ret = localtime(t?((void*)&t_):NULL); + if(ret) { + to_struct_iiiiiiiiilt(to_ptrv(&res_), ret); + return &res_; + } + return NULL; +} + +EXPORT void* my32_localtime_r(x64emu_t* emu, void* t, void* res) +{ + struct_L_t t_ = {0}; + struct_iiiiiiiiilt_t res_ = {0}; + if(t) from_struct_L(&t_, to_ptrv(t)); + if(res) from_struct_iiiiiiiiilt(&res_, to_ptrv(res)); + void* ret = localtime_r(t?((void*)&t_):NULL, res?((void*)&res_):NULL); + if(ret==&res_) { + to_struct_iiiiiiiiilt(to_ptrv(res), &res_); + return res; + } + return NULL; +} + +EXPORT void* my32_gmtime(x64emu_t* emu, void* t) +{ + struct_L_t t_ = {0}; + static struct_iiiiiiiiilt_t res_ = {0}; + if(t) from_struct_L(&t_, to_ptrv(t)); + void* ret = gmtime(t?((void*)&t_):NULL); + if(ret) { + to_struct_iiiiiiiiilt(to_ptrv(&res_), ret); + return &res_; + } + return NULL; +} + +EXPORT void* my32_gmtime_r(x64emu_t* emu, void* t, void* res) +{ + struct_L_t t_ = {0}; + struct_iiiiiiiiilt_t res_ = {0}; + if(t) from_struct_L(&t_, to_ptrv(t)); + if(res) from_struct_iiiiiiiiilt(&res_, to_ptrv(res)); + void* ret = gmtime_r(t?((void*)&t_):NULL, res?((void*)&res_):NULL); + if(ret==&res_) { + to_struct_iiiiiiiiilt(to_ptrv(res), &res_); + return res; + } + return NULL; +} + +EXPORT void* my32_asctime(void* t) +{ + static char ret[200]; + char* r = asctime(t); + if(!r) return NULL; + strncpy(ret, r, sizeof(ret)-1); + return &ret; +} + +EXPORT int my32_utimensat(int dirfd, void* name, void* times, int flags) +{ + struct timespec times_l[2] = {0}; + from_struct_LL((struct_LL_t*)×_l[0], to_ptrv(times)); + from_struct_LL((struct_LL_t*)×_l[1], to_ptrv(times)+8); + return utimensat(dirfd, name, times_l, flags); +} + +#ifndef ANDROID +struct mallinfo { + int arena; + int ordblks; + int smblks; + int hblks; + int hblkhd; + int usmblks; + int fsmblks; + int uordblks; + int fordblks; + int keepcost; +}; +#endif + +EXPORT void* my32_mallinfo(x86emu_t* emu, void* p) +{ + (void)emu; + static struct mallinfo(*p_mallinfo)() = NULL; + if(!p_mallinfo) p_mallinfo = dlsym(NULL, "mallinfo"); + *((struct mallinfo*)p) = p_mallinfo(); + return p; +} + + +EXPORT void* my32_getpwuid(x64emu_t* emu, uint32_t uid) +{ + static struct i386_passwd ret; + struct passwd* p = getpwuid(uid); + if(p) { + ret.pw_name = to_cstring(p->pw_name); + ret.pw_passwd = to_cstring(p->pw_passwd); + ret.pw_uid = p->pw_uid; + ret.pw_gid = p->pw_gid; + ret.pw_gecos = to_cstring(p->pw_gecos); + ret.pw_dir = to_cstring(p->pw_dir); + ret.pw_shell = to_cstring(p->pw_shell); + return &ret; + } + return NULL; +} + +EXPORT int my32_getpwuid_r(x64emu_t* emu, uint32_t uid, struct i386_passwd* pwd, char *buf, size_t buflen, ptr_t* result) +{ + struct passwd _result = {0}; + struct passwd *r = NULL; + int ret = getpwuid_r(uid, &_result, buf, buflen, &r); + if(!r) { + *result = 0; + return ret; + } + *result = to_ptrv(pwd); + struct i386_passwd *res = pwd; + res->pw_name = to_ptrv(r->pw_name); + res->pw_passwd = to_ptrv(r->pw_passwd); + res->pw_uid = r->pw_uid; + res->pw_gid = r->pw_gid; + res->pw_gecos = to_ptrv(r->pw_gecos); + res->pw_dir = to_ptrv(r->pw_dir); + res->pw_shell = to_ptrv(r->pw_shell); + return ret; +} + +EXPORT int my32_getgrnam_r(x64emu_t* emu, const char* name, struct i386_group *grp, char *buf, size_t buflen, ptr_t* result) +{ + struct group _result = {0}; + struct group *r = NULL; + int ret = getgrnam_r(name, &_result, buf, buflen, &r); + if(!r) { + *result = 0; + return ret; + } + *result = to_ptrv(grp); + struct i386_group *res = grp; + res->gr_name = to_ptrv(r->gr_name); + res->gr_passwd = to_ptrv(r->gr_passwd); + res->gr_gid = r->gr_gid; + res->gr_mem = to_ptrv(r->gr_mem); + return ret; +} + +EXPORT int my32_getgrgid_r(x64emu_t* emu, gid_t gid, struct i386_group *grp, char *buf, size_t buflen, ptr_t* result) +{ + struct group _result = {0}; + struct group *r = NULL; + int ret = getgrgid_r(gid, &_result, buf, buflen, &r); + if(!r) { + *result = 0; + return ret; + } + *result = to_ptrv(grp); + struct i386_group *res = grp; + res->gr_name = to_ptrv(r->gr_name); + res->gr_passwd = to_ptrv(r->gr_passwd); + res->gr_gid = r->gr_gid; + res->gr_mem = to_ptrv(r->gr_mem); + return ret; +} + +#if 0 +EXPORT int32_t my32_recvmmsg(x64emu_t* emu, int32_t fd, void* msgvec, uint32_t vlen, uint32_t flags, void* timeout) +{ + // Implemented starting glibc 2.12+ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "recvmmsg"); + if(f) + return ((iFipuup_t)f)(fd, msgvec, vlen, flags, timeout); + // Use the syscall + return syscall(__NR_recvmmsg, fd, msgvec, vlen, flags, timeout); +} + +EXPORT int32_t my32___sendmmsg(x64emu_t* emu, int32_t fd, void* msgvec, uint32_t vlen, uint32_t flags) +{ + // Implemented starting glibc 2.14+ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "__sendmmsg"); + if(f) + return ((iFipuu_t)f)(fd, msgvec, vlen, flags); + // Use the syscall + return syscall(__NR_sendmmsg, fd, msgvec, vlen, flags); +} +#endif +EXPORT int32_t my32___register_atfork(x64emu_t *emu, void* prepare, void* parent, void* child, void* handle) +{ + // this is partly incorrect, because the emulated funcionts should be executed by actual fork and not by my32_atfork... + if(my_context->atfork_sz==my_context->atfork_cap) { + my_context->atfork_cap += 4; + my_context->atforks = (atfork_fnc_t*)realloc(my_context->atforks, my_context->atfork_cap*sizeof(atfork_fnc_t)); + } + my_context->atforks[my_context->atfork_sz].prepare = (uintptr_t)prepare; + my_context->atforks[my_context->atfork_sz].parent = (uintptr_t)parent; + my_context->atforks[my_context->atfork_sz].child = (uintptr_t)child; + my_context->atforks[my_context->atfork_sz].handle = handle; + return 0; +} + +EXPORT uint64_t my32___umoddi3(uint64_t a, uint64_t b) +{ + return a%b; +} +EXPORT uint64_t my32___udivdi3(uint64_t a, uint64_t b) +{ + return a/b; +} +EXPORT int64_t my32___divdi3(int64_t a, int64_t b) +{ + return a/b; +} + +EXPORT int32_t my32___poll_chk(void* a, uint32_t b, int c, int l) +{ + return poll(a, b, c); // no check... +} + +EXPORT int32_t my32_fcntl64(x64emu_t* emu, int32_t a, int32_t b, uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4, uint32_t d5, uint32_t d6) +{ + // Implemented starting glibc 2.14+ + library_t* lib = my_lib; + if(!lib) return 0; + if(b==F_SETFL) + d1 = of_convert32(d1); + if (b == MY32_F_GETLK64 || b == MY32_F_SETLK64 || b == MY32_F_SETLKW64) { + my_flock64_t fl = {0}; + AlignFlock64_32(&fl, from_ptrv(d1)); + int ret = fcntl(a, b - (MY32_F_GETLK64 - MY32_F_GETLK), &fl); + UnalignFlock64_32(from_ptrv(d1), &fl); + return ret; + } + if (b == MY32_F_GETLK || b == MY32_F_SETLK || b == MY32_F_SETLKW) { + struct flock fl = {0}; + AlignFlock_32(&fl, from_ptrv(d1)); + int ret = fcntl(a, b, &fl); + UnalignFlock_32(from_ptrv(d1), &fl); + return ret; + } + //TODO: check if better to use the syscall or regular fcntl? + //return syscall(__NR_fcntl64, a, b, d1); // should be enough + int ret = fcntl(a, b, d1); + + if(b==F_GETFL && ret!=-1) + ret = of_unconvert32(ret); + + return ret; +} + +EXPORT int32_t my32_fcntl(x64emu_t* emu, int32_t a, int32_t b, uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4, uint32_t d5, uint32_t d6) +{ + if(b==F_SETFL && d1==0xFFFFF7FF) { + // special case for ~O_NONBLOCK... + int flags = fcntl(a, F_GETFL); + if(flags&X86_O_NONBLOCK) { + flags &= ~O_NONBLOCK; + return fcntl(a, b, flags); + } + return 0; + } + if(b==F_SETFL) + d1 = of_convert32(d1); + if (b == MY32_F_GETLK64 || b == MY32_F_SETLK64 || b == MY32_F_SETLKW64) { + my_flock64_t fl = {0}; + AlignFlock64_32(&fl, from_ptrv(d1)); + int ret = fcntl(a, b - (MY32_F_GETLK64 - MY32_F_GETLK), &fl); + UnalignFlock64_32(from_ptrv(d1), &fl); + return ret; + } + if (b == MY32_F_GETLK || b == MY32_F_SETLK || b == MY32_F_SETLKW) { + struct flock fl = {0}; + AlignFlock_32(&fl, from_ptrv(d1)); + int ret = fcntl(a, b, &fl); + UnalignFlock_32(from_ptrv(d1), &fl); + return ret; + } + int ret = fcntl(a, b, d1); + if(b==F_GETFL && ret!=-1) + ret = of_unconvert32(ret); + + return ret; +} +EXPORT int32_t my32___fcntl(x64emu_t* emu, int32_t a, int32_t b, uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4, uint32_t d5, uint32_t d6) __attribute__((alias("my32_fcntl"))); +#if 0 +EXPORT int32_t my32_preadv64(x64emu_t* emu, int32_t fd, void* v, int32_t c, int64_t o) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "preadv64"); + if(f) + return ((iFipiI_t)f)(fd, v, c, o); + return syscall(__NR_preadv, fd, v, c,(uint32_t)(o&0xffffffff), (uint32_t)((o>>32)&0xffffffff)); +} + +EXPORT int32_t my32_pwritev64(x64emu_t* emu, int32_t fd, void* v, int32_t c, int64_t o) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "pwritev64"); + if(f) + return ((iFipiI_t)f)(fd, v, c, o); + #ifdef __arm__ + return syscall(__NR_pwritev, fd, v, c, 0, (uint32_t)(o&0xffffffff), (uint32_t)((o>>32)&0xffffffff)); + // on arm, 64bits args needs to be on even/odd register, so need to put a 0 for aligment + #else + return syscall(__NR_pwritev, fd, v, c,(uint32_t)(o&0xffffffff), (uint32_t)((o>>32)&0xffffffff)); + #endif +} + +EXPORT int32_t my32_accept4(x64emu_t* emu, int32_t fd, void* a, void* l, int32_t flags) +{ + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "accept4"); + if(f) + return ((iFippi_t)f)(fd, a, l, flags); + if(!flags) + return accept(fd, a, l); + return syscall(__NR_accept4, fd, a, l, flags); +} + +EXPORT int my32_getopt(int argc, char* const argv[], const char *optstring) +{ + int ret = getopt(argc, argv, optstring); + my32_checkGlobalOpt(); + return ret; +} + +#endif +EXPORT int my32_getopt_long(int argc, char* const argv[], const char* optstring, const struct option *longopts, int *longindex) +{ + int ret = getopt_long(argc, argv, optstring, longopts, longindex); + my32_checkGlobalOpt(); + return ret; +} + +EXPORT int my32_getopt_long_only(int argc, char* const argv[], const char* optstring, const struct option *longopts, int *longindex) +{ + int ret = getopt_long_only(argc, argv, optstring, longopts, longindex); + my32_checkGlobalOpt(); + return ret; +} + +EXPORT int my32_alphasort64(x64emu_t* emu, ptr_t* d1_, ptr_t* d2_) +{ + const struct dirent64* d1 = NULL; + const struct dirent64* d2 = NULL; + if(d1_) d1 = (struct dirent64*)from_ptrv(*d1_); + if(d2_) d2 = (struct dirent64*)from_ptrv(*d2_); + return alphasort64(d1_?(&d1):NULL, d2_?(&d2):NULL); +} + +#ifndef ANDROID +EXPORT void* my32___ctype_b_loc(x64emu_t* emu) +{ + const unsigned short** src =__ctype_b_loc(); + if(*src != emu->ref_ctype) { + memcpy(emu->libctype, &((*src)[-128]), 384*sizeof(short)); + emu->ref_ctype = *src; + emu->ctype = emu->libctype+128; + } + return &emu->ctype; +} +EXPORT void* my32___ctype_tolower_loc(x64emu_t* emu) +{ + const int** src =__ctype_tolower_loc(); + if(*src != emu->ref_tolower) { + memcpy(emu->libctolower, &((*src)[-128]), 384*sizeof(int)); + emu->ref_tolower = *src; + emu->tolower = emu->libctolower+128; + } + return &emu->tolower; +} +EXPORT void* my32___ctype_toupper_loc(x64emu_t* emu) +{ + const int** src =__ctype_toupper_loc(); + if(*src != emu->ref_toupper) { + memcpy(emu->libctoupper, &((*src)[-128]), 384*sizeof(int)); + emu->ref_toupper = *src; + emu->toupper = emu->libctoupper+128; + } + return &emu->toupper; +} +#endif + +// Backtrace stuff: TODO in 32bits + +//#include "elfs/elfdwarf_private.h" +EXPORT int my32_backtrace(x64emu_t* emu, void** buffer, int size) +{ + if (!size) return 0; + #if 0 + dwarf_unwind_t *unwind = init_dwarf_unwind_registers(emu); + int idx = 0; + char success = 0; + uintptr_t addr = *(uintptr_t*)R_RSP; + buffer[0] = (void*)addr; + while (++idx < size) { + uintptr_t ret_addr = get_parent_registers(unwind, FindElfAddress(my_context, addr), addr, &success); + if (ret_addr == my_context->exit_bridge) { + // TODO: do something to be able to get the function name + buffer[idx] = (void*)ret_addr; + success = 2; + // See elfdwarf_private.c for the register mapping + unwind->regs[7] = unwind->regs[6]; // mov rsp, rbp + unwind->regs[6] = *(uint64_t*)unwind->regs[7]; // pop rbp + unwind->regs[7] += 8; + ret_addr = *(uint64_t*)unwind->regs[7]; // ret + unwind->regs[7] += 8; + if (++idx < size) buffer[idx] = (void*)ret_addr; + } else if (!success) break; + else buffer[idx] = (void*)ret_addr; + addr = ret_addr; + } + free_dwarf_unwind_registers(&unwind); + return idx; + #else + uintptr_t addr = from_ptr(*(ptr_t*)from_ptrv(R_ESP)); + buffer[0] = (void*)addr; + return 1; + #endif +} + +EXPORT void* my32_backtrace_symbols(x64emu_t* emu, ptr_t* buffer, int size) +{ + (void)emu; + ptr_t* ret = (ptr_t*)calloc(1, size*sizeof(ptr_t) + size*200); // capping each strings to 200 chars, not using box_calloc (program space) + char* s = (char*)(ret+size); + for (int i=0; i=start && (buffer[i]<(start+sz) || !sz)) { + snprintf(s, 200, "%s(%s+%lx) [%p]", ElfName(hdr), symbname, buffer[i] - start, from_ptrv(buffer[i])); + } else if (hdr) { + snprintf(s, 200, "%s+%lx [%p]", ElfName(hdr), buffer[i] - (uintptr_t)GetBaseAddress(hdr), from_ptrv(buffer[i])); + } else { + snprintf(s, 200, "??? [%p]", from_ptrv(buffer[i])); + } + ret[i] = to_ptrv(s); + s += 200; + } + return ret; +} + +struct i386_lconv +{ + ptr_t decimal_point; // char * + ptr_t thousands_sep; // char * + ptr_t grouping; // char * + ptr_t int_curr_symbol; // char * + ptr_t currency_symbol; // char * + ptr_t mon_decimal_point; // char * + ptr_t mon_thousands_sep; // char * + ptr_t mon_grouping; // char * + ptr_t positive_sign; // char * + ptr_t negative_sign; // char * + char int_frac_digits; + char frac_digits; + char p_cs_precedes; + char p_sep_by_space; + char n_cs_precedes; + char n_sep_by_space; + char p_sign_posn; + char n_sign_posn; + char int_p_cs_precedes; + char int_p_sep_by_space; + char int_n_cs_precedes; + char int_n_sep_by_space; + char int_p_sign_posn; + char int_n_sign_posn; +}; +EXPORT void* my32_localeconv(x64emu_t* emu) +{ + static struct i386_lconv ret = {0}; + struct lconv* l = localeconv(); + ret.decimal_point = to_cstring(l->decimal_point); + ret.thousands_sep = to_cstring(l->thousands_sep); + ret.grouping = to_cstring(l->grouping); + ret.int_curr_symbol = to_cstring(l->int_curr_symbol); + ret.currency_symbol = to_cstring(l->currency_symbol); + ret.mon_decimal_point = to_cstring(l->mon_decimal_point); + ret.mon_thousands_sep = to_cstring(l->mon_thousands_sep); + ret.mon_grouping = to_cstring(l->mon_grouping); + ret.positive_sign = to_cstring(l->positive_sign); + ret.negative_sign = to_cstring(l->negative_sign); + memcpy(&ret.int_frac_digits, &l->int_frac_digits, 14); + return &ret; +} + +EXPORT struct __processor_model +{ + unsigned int __cpu_vendor; + unsigned int __cpu_type; + unsigned int __cpu_subtype; + unsigned int __cpu_features[1]; +} my32___cpu_model; + +#include "cpu_info.h" +void InitCpuModel() +{ + // some pseudo random cpu info... + my32___cpu_model.__cpu_vendor = VENDOR_INTEL; + my32___cpu_model.__cpu_type = INTEL_PENTIUM_M; + my32___cpu_model.__cpu_subtype = 0; // N/A + my32___cpu_model.__cpu_features[0] = (1<__jmpbuf; + //restore regs + R_EBX = jpbuff->save_ebx; + R_ESI = jpbuff->save_esi; + R_EDI = jpbuff->save_edi; + R_EBP = jpbuff->save_ebp; + R_ESP = jpbuff->save_esp; + // jmp to saved location, plus restore val to eax + R_EAX = __val; + R_EIP = jpbuff->save_eip; + if(((__jmp_buf_tag_t*)p)->__mask_was_saved) { + sigprocmask(SIG_SETMASK, &((__jmp_buf_tag_t*)p)->__saved_mask, NULL); + } + if(emu->flags.quitonlongjmp) { + emu->flags.longjmp = 1; + emu->quit = 1; + } +} + +EXPORT int32_t my32___sigsetjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p, int savesigs) +{ + jump_buff_i386_t *jpbuff = &((__jmp_buf_tag_t*)p)->__jmpbuf; + // save the buffer + jpbuff->save_ebx = R_EBX; + jpbuff->save_esi = R_ESI; + jpbuff->save_edi = R_EDI; + jpbuff->save_ebp = R_EBP; + jpbuff->save_esp = R_ESP+4; // include "return address" + jpbuff->save_eip = *(uint32_t*)from_ptr(R_ESP); + if(savesigs) { + if(sigprocmask(SIG_SETMASK, NULL, &((__jmp_buf_tag_t*)p)->__saved_mask)) + ((__jmp_buf_tag_t*)p)->__mask_was_saved = 0; + else + ((__jmp_buf_tag_t*)p)->__mask_was_saved = 1; + } else + ((__jmp_buf_tag_t*)p)->__mask_was_saved = 0; + return 0; +} + +EXPORT int32_t my32__setjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p) +{ + return my32___sigsetjmp(emu, p, 0); +} +EXPORT int32_t my32_setjmp(x64emu_t* emu, /*struct __jmp_buf_tag __env[1]*/void *p) +{ + return my32___sigsetjmp(emu, p, 1); +} +EXPORT void my32___explicit_bzero_chk(x64emu_t* emu, void* dst, uint32_t len, uint32_t dstlen) +{ + memset(dst, 0, len); +} + +EXPORT void* my32_getpwnam(x64emu_t* emu, const char* name) +{ + static struct i386_passwd ret; + struct passwd *r = getpwnam(name); + if(!r) + return NULL; + ret.pw_name = to_ptrv(r->pw_name); + ret.pw_passwd = to_ptrv(r->pw_passwd); + ret.pw_uid = r->pw_uid; + ret.pw_gid = r->pw_gid; + ret.pw_gecos = to_ptrv(r->pw_gecos); + ret.pw_dir = to_ptrv(r->pw_dir); + ret.pw_shell = to_ptrv(r->pw_shell); + return &ret; +} + +EXPORT int my32_getpwnam_r(x64emu_t* emu, const char *name, struct i386_passwd *pwd, char *buf, size_t buflen, ptr_t *result) +{ + struct passwd _result = {0}; + struct passwd *r = NULL; + int ret = getpwnam_r(name, &_result, buf, buflen, &r); + if(!r) { + *result = 0; + return ret; + } + *result = to_ptrv(pwd); + struct i386_passwd *res = pwd; + res->pw_name = to_ptrv(r->pw_name); + res->pw_passwd = to_ptrv(r->pw_passwd); + res->pw_uid = r->pw_uid; + res->pw_gid = r->pw_gid; + res->pw_gecos = to_ptrv(r->pw_gecos); + res->pw_dir = to_ptrv(r->pw_dir); + res->pw_shell = to_ptrv(r->pw_shell); + return ret; +} + +EXPORT void* my32_realpath(x64emu_t* emu, void* path, void* resolved_path) +{ + + if(isProcSelf(path, "exe")) { + return realpath(emu->context->fullpath, resolved_path); + } + return realpath(path, resolved_path); +} + +EXPORT int my32_readlinkat(x64emu_t* emu, int fd, void* path, void* buf, size_t bufsize) +{ + if(isProcSelf(path, "exe")) { + strncpy(buf, emu->context->fullpath, bufsize); + size_t l = strlen(emu->context->fullpath); + return (l>bufsize)?bufsize:(l+1); + } + return readlinkat(fd, path, buf, bufsize); +} + +struct i386_mntent { + ptr_t mnt_fsname; // char * + ptr_t mnt_dir; // char * + ptr_t mnt_type; // char * + ptr_t mnt_opts; // char * + int mnt_freq; + int mnt_passno; +}; + +EXPORT void* my32_getmntent(x64emu_t* emu, void* f) +{ + static struct i386_mntent ret; + struct mntent* r = getmntent(f); + if(!r) return NULL; + ret.mnt_fsname = to_cstring(r->mnt_fsname); + ret.mnt_dir = to_cstring(r->mnt_dir); + ret.mnt_type = to_cstring(r->mnt_type); + ret.mnt_opts = to_cstring(r->mnt_opts); + ret.mnt_freq = r->mnt_freq; + ret.mnt_passno = r->mnt_passno; + return &ret; +} + +void* my_mmap64(x64emu_t* emu, void *addr, size_t length, int prot, int flags, int fd, ssize_t offset); +void* my_mremap(x64emu_t* emu, void* old_addr, size_t old_size, size_t new_size, int flags, void* new_addr); +int my_munmap(x64emu_t* emu, void* addr, size_t length); +int my_mprotect(x64emu_t* emu, void *addr, size_t len, int prot); + +EXPORT void* my32_mmap64(x64emu_t* emu, void *addr, size_t length, int prot, int flags, int fd, int64_t offset) +{ + void* ret = my_mmap64(emu, addr, length, prot, flags|MAP_32BIT, fd, offset); + if((ret!=MAP_FAILED && ((uintptr_t)ret>0xffffffff) || ((uintptr_t)ret+length>0xffffffff))) { + my_munmap(emu, ret, length); + errno = EEXIST; + return MAP_FAILED; + } + if((ret!=MAP_FAILED) && addr && (retr, 3, cookie->cookie, buf, size); +} +static ssize_t my32_cookie_write(void *p, const char *buf, size_t size) +{ + my32_cookie_t* cookie = (my32_cookie_t*)p; + return (ssize_t)RunFunction(my_context, cookie->w, 3, cookie->cookie, buf, size); +} +static int my32_cookie_seek(void *p, off64_t *offset, int whence) +{ + my32_cookie_t* cookie = (my32_cookie_t*)p; + return RunFunction(my_context, cookie->s, 3, cookie->cookie, offset, whence); +} +static int my32_cookie_close(void *p) +{ + my32_cookie_t* cookie = (my32_cookie_t*)p; + int ret = 0; + if(cookie->c) + ret = RunFunction(my_context, cookie->c, 1, cookie->cookie); + free(cookie); + return ret; +} +EXPORT void* my32_fopencookie(x64emu_t* emu, void* cookie, void* mode, void* read, void* write, void* seek, void* close) +{ + cookie_io_functions_t io_funcs = {read?my32_cookie_read:NULL, write?my32_cookie_write:NULL, seek?my32_cookie_seek:NULL, my32_cookie_close}; + my32_cookie_t *cb = (my32_cookie_t*)calloc(1, sizeof(my32_cookie_t)); + cb->r = (uintptr_t)read; + cb->w = (uintptr_t)write; + cb->s = (uintptr_t)seek; + cb->c = (uintptr_t)close; + cb->cookie = cookie; + return fopencookie(cb, mode, io_funcs); +} +#endif + +EXPORT long my32_prlimit64(void* pid, uint32_t res, void* new_rlim, void* old_rlim) +{ + return syscall(__NR_prlimit64, pid, res, new_rlim, old_rlim); +} +#endif +EXPORT void* my32_reallocarray(void* ptr, size_t nmemb, size_t size) +{ + return realloc(ptr, nmemb*size); +} +#if 0 +#ifndef __OPEN_NEEDS_MODE +# define __OPEN_NEEDS_MODE(oflag) \ + (((oflag) & O_CREAT) != 0) +// || ((oflag) & __O_TMPFILE) == __O_TMPFILE) +#endif +EXPORT int my32___open_nocancel(x64emu_t* emu, void* file, int oflag, int* b) +{ + int mode = 0; + if (__OPEN_NEEDS_MODE (oflag)) + mode = b[0]; + return openat(AT_FDCWD, file, oflag, mode); +} + +EXPORT int my32___libc_alloca_cutoff(x64emu_t* emu, size_t size) +{ + // not always implemented on old linux version... + library_t* lib = my_lib; + if(!lib) return 0; + void* f = dlsym(lib->priv.w.lib, "__libc_alloca_cutoff"); + if(f) + return ((iFL_t)f)(size); + // approximate version but it's better than nothing.... + return (size<=(65536*4)); +} + +// DL functions from wrappedlibdl.c +void* my32_dlopen(x64emu_t* emu, void *filename, int flag); +int my32_dlclose(x64emu_t* emu, void *handle); +void* my32_dlsym(x64emu_t* emu, void *handle, void *symbol); +EXPORT int my32___libc_dlclose(x64emu_t* emu, void* handle) +{ + return my32_dlclose(emu, handle); +} +EXPORT void* my32___libc_dlopen_mode(x64emu_t* emu, void* name, int mode) +{ + return my32_dlopen(emu, name, mode); +} +EXPORT void* my32___libc_dlsym(x64emu_t* emu, void* handle, void* name) +{ + return my32_dlsym(emu, handle, name); +} +#endif +// all obstack function defined in obstack.c file +void obstackSetup(); + +EXPORT int my32_nanosleep(const struct timespec *req, struct timespec *rem) +{ + if(!req) + return 0; // workaround for some strange calls + return nanosleep(req, rem); +} + +EXPORT int my32_utimes(x64emu_t* emu, const char* name, uint32_t* times) +{ + struct timeval tm[2]; + tm[0].tv_sec = times[0]; + tm[0].tv_usec = times[1]; + tm[1].tv_sec = times[2]; + tm[1].tv_usec = times[3]; + return utimes(name, tm); +} + +EXPORT int my32_futimes(x64emu_t* emu, int fd, uint32_t* times) +{ + struct timeval tm[2]; + tm[0].tv_sec = times[0]; + tm[0].tv_usec = times[1]; + tm[1].tv_sec = times[2]; + tm[1].tv_usec = times[3]; + return futimes(fd, tm); +} + +EXPORT int my32_futimens(x64emu_t* emu, int fd, uint32_t* times) +{ + struct timespec tm[2]; + tm[0].tv_sec = times[0]; + tm[0].tv_nsec = times[1]; + tm[1].tv_sec = times[2]; + tm[1].tv_nsec = times[3]; + return futimens(fd, tm); +} + +EXPORT long my32_strtol(const char* s, char** endp, int base) +{ + long ret = strtol(s, endp, base); + if (retINT_MAX) { + ret = INT_MAX; + errno = ERANGE; + } + return ret; +} + +EXPORT unsigned long my32_strtoul(const char* s, char** endp, int base) +{ + unsigned long ret = strtoul(s, endp, base); + if(ret>UINT_MAX) { + ret = UINT_MAX; + errno = ERANGE; + } + return ret; +} + +EXPORT long my32_wcstol(const wchar_t* s, wchar_t** endp, int base) +{ + long ret = wcstol(s, endp, base); + if (retINT_MAX) { + ret = INT_MAX; + errno = ERANGE; + } + return ret; +} + +EXPORT unsigned long my32_wcstoul(const wchar_t* s, wchar_t** endp, int base) +{ + unsigned long ret = wcstoul(s, endp, base); + if(ret>UINT_MAX) { + ret = UINT_MAX; + errno = ERANGE; + } + return ret; +} + +EXPORT long my32_ftell(x64emu_t* emu, FILE* f) +{ + long ret = ftell(f); + if(ret==-1) + return ret; + if(ret==LONG_MAX) + return INT_MAX; + if(ret>INT_MAX) { + ret = -1; + errno = ERANGE; + } + return ret; +} + +// wrapped malloc using calloc, it seems x86 malloc set alloc'd block to zero somehow +EXPORT void* my32_malloc(unsigned long size) +{ + return calloc(1, size); +} + +struct sysinfo_32 { + long_t uptime; + ulong_t loads[3]; + ulong_t totalram; + ulong_t freeram; + ulong_t sharedram; + ulong_t bufferram; + ulong_t totalswap; + ulong_t freeswap; + uint16_t procs; + uint16_t pad; + ulong_t totalhigh; + ulong_t freehigh; + uint32_t mem_unit; + // removed padding +}; + +EXPORT int my32_sysinfo(struct sysinfo_32* p) +{ + struct sysinfo info = {0}; + int ret = sysinfo(&info); + p->uptime = from_long(info.uptime); + p->loads[0] = from_ulong(info.loads[0]); + p->loads[1] = from_ulong(info.loads[1]); + p->loads[2] = from_ulong(info.loads[2]); + p->totalram = from_ulong(info.totalram); + p->freeram = from_ulong(info.freeram); + p->sharedram = from_ulong(info.sharedram); + p->bufferram = from_ulong(info.bufferram); + p->totalswap = from_ulong(info.totalswap); + p->freeswap = from_ulong(info.freeswap); + p->procs = info.procs; + p->pad = info.pad; + p->totalhigh = from_ulong(info.totalhigh); + p->freehigh = from_ulong(info.freehigh); + p->mem_unit = info.mem_unit; + return ret; +} + +EXPORT ssize_t my32_process_vm_readv(x64emu_t* emu, int pid, struct i386_iovec* local_iovec, size_t liovect, struct i386_iovec* remote_iovec, size_t riovect, unsigned long flags) +{ + struct iovec local_iovec_l[liovect]; + struct iovec remove_iovec_l[riovect]; + for (int i=0; ipriv.w.lib, "getentropy"); + if(f) + return ((iFpL_t)f)(buffer, length); + // custom implementation + if(length>256) { + errno = EIO; + return -1; + } + int ret = my32_getrandom(emu, buffer, length, GRND_RANDOM); + if(ret!=length) { + errno = EIO; + return -1; + } + return 0; +} + +EXPORT void my32_mcount(void* frompc, void* selfpc) +{ + // stub doing nothing... + return; +} + +#ifndef ANDROID +union semun { + int val; /* Value for SETVAL */ + struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ + unsigned short *array; /* Array for GETALL, SETALL */ + struct seminfo *__buf; /* Buffer for IPC_INFO + (Linux-specific) */ +}; +#endif + +EXPORT int my32_semctl(x64emu_t* emu, int semid, int semnum, int cmd, union semun b) +{ + iFiiiV_t f = semctl; + return ((iFiiiV_t)f)(semid, semnum, cmd, b); +} + +#ifndef ANDROID +EXPORT int my32_on_exit(x64emu_t* emu, void* f, void* args) +{ + return on_exit(findon_exitFct(f), args); +} +#endif +#endif + +EXPORT ptr_t my32_environ = 0; //char** +EXPORT ptr_t my32__environ = 0; //char** +EXPORT ptr_t my32___environ = 0; //char** + +EXPORT char* my32___progname = NULL; +EXPORT char* my32___progname_full = NULL; +EXPORT char* my32_program_invocation_name = NULL; +EXPORT char* my32_program_invocation_short_name = NULL; + +EXPORT ptr_t my32_stdin = 0; +EXPORT ptr_t my32_stdout = 0; +EXPORT ptr_t my32_stderr = 0; + +EXPORT long_t my32_timezone = 0; +EXPORT void my32_tzset() +{ + tzset(); + my32_timezone = to_long(timezone); // this might not be usefull, and we can probably just redirect to the original symbol +} + +EXPORT int my32___libc_single_threaded = 0; + +EXPORT char my32__libc_intl_domainname[] = "libc"; + +EXPORT void* my32___errno_location(x64emu_t* emu) +{ + // TODO: Find a better way to do this + // cannot use __thread as it makes the address not 32bits + //emu->libc_err = errno; + return &emu->libc_err; +} + +#define PRE_INIT\ + if(1) \ + my_lib = lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);\ + else + +#ifdef ANDROID +//#define NEEDED_LIBS \ +// "libm.so", "libdl.so" +#else +#define NEEDED_LIBS \ + "ld-linux.so.2", "libpthread.so.0", "librt.so.1", "libdl.so.2" +#endif + +extern void* my__IO_2_1_stderr_; +extern void* my__IO_2_1_stdin_ ; +extern void* my__IO_2_1_stdout_; + +#define CUSTOM_INIT \ + box64->libclib = lib; \ + my_lib = lib; \ + InitCpuModel(); \ + ctSetup(); \ + /*obstackSetup();*/ \ + my32_environ = my32__environ = my32___environ = box64->envv32; \ + my32___progname_full = my32_program_invocation_name = box64->argv[0]; \ + my32___progname = my32_program_invocation_short_name = \ + strrchr(box64->argv[0], '/'); \ + my32_stdin = to_ptrv(my__IO_2_1_stdin_); \ + my32_stdout = to_ptrv(my__IO_2_1_stdout_); \ + my32_stderr = to_ptrv(my__IO_2_1_stderr_); + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibc_private.h b/src/wrapped32/wrappedlibc_private.h new file mode 100755 index 0000000000000000000000000000000000000000..b86ae7348cff59b5e1dc8f444c87a73dc5b6c8b7 --- /dev/null +++ b/src/wrapped32/wrappedlibc_private.h @@ -0,0 +1,2193 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA) && defined(GOS)) +#error Meh... +#endif + +// FILE* is S +// locale_t needs special handling, with to_locale / from_locale (and is a / A) +// struct utimbuf is: LL +// struct timespec is: LL +// struct timeval is: LL +// struct itimerval is LLLL +// struct tm is: iiiiiiiiilt +// struct tms is: llll +// struct rusage is LLLLLLLLLLLLLLLLLL (2 timeval + 14 longs) +// time_t is: L +// socklen_t is u +// struct sockaddr is fine, no wrap needed +// wctype_t is h (used with locale_t) + +// a64l +GO(abort, vEv) +GO(abs, iEi) +GOW(accept, iEipp) +GOW(accept4, iEippi) +GOW(access, iEpi) +// acct +//GOW(addmntent, iEpp) +// addseverity +// adjtime // Weak +// adjtimex // Weak +// __adjtimex +// advance // Weak +// __aeabi_assert +// __aeabi_atexit +// __aeabi_errno_addr +// __aeabi_localeconv +// __aeabi_MB_CUR_MAX +// __aeabi_memclr +// __aeabi_memclr4 +// __aeabi_memclr8 +// __aeabi_memcpy +// __aeabi_memcpy4 +// __aeabi_memcpy8 +// __aeabi_memmove +// __aeabi_memmove4 +// __aeabi_memmove8 +// __aeabi_memset +// __aeabi_memset4 +// __aeabi_memset8 +//DATAV(__after_morecore_hook, 4) +GO(alarm, uEu) +GO2(aligned_alloc, pELL, memalign) +GO(alphasort, iEpp) +GOM(alphasort64, iEEpp) +//DATA(argp_err_exit_status, 4) +// argp_error // Weak +// argp_failure // Weak +// argp_help // Weak +// argp_parse // Weak +// argp_program_bug_address // type B +// argp_program_version // type B +// argp_program_version_hook // type B +// argp_state_help // Weak +// argp_usage // Weak +// argz_add // Weak +// argz_add_sep // Weak +// argz_append // Weak +// __argz_count +// argz_count // Weak +// argz_create // Weak +//GOW(argz_create_sep, iEpipp) +// argz_delete +// argz_extract // Weak +//GOW(argz_insert, iEpppp) +// __argz_next +//GOW(argz_next, pEpLp) +// argz_replace // Weak +// __argz_stringify +//GOW(argz_stringify, vEpLi) +GOM(asctime, pEriiiiiiiiilt_) //%noE +GOW(asctime_r, pEriiiiiiiiilt_p) +GOWM(asprintf, iEEppV) //%% +//GOM(__asprintf, iEEppV) //%% +GOM(__asprintf_chk, iEEpipV) //%% +// __assert +GO(__assert_fail, vEppip) +//GO(__assert_perror_fail, vEipup) +GO(atof, dEp) +GO(atoi, iEp) +GO2(atol, lEp, atoi) +GO(atoll, IEp) +// authdes_create +// authdes_getucred +// authdes_pk_create +// _authenticate +// authnone_create +// authunix_create +// authunix_create_default +GOWM(backtrace, iEEpi) +//GO(__backtrace, iEpi) +//GO(__backtrace_symbols, pEpi) +GOWM(backtrace_symbols, pEEpi) +//GO(__backtrace_symbols_fd, vEpii) +//GOW(backtrace_symbols_fd, vEpii) +GO(basename, pEp) +//GOW(bcmp, iEppL) +//GO(bcopy, vEppL) +// bdflush +GOW(bind, iEipu) +// bindresvport +GOW(bindtextdomain, tEpp) +GOW(bind_textdomain_codeset, tEpp) +//GOW(brk, iEp) +// __bsd_getpgrp +// bsd_signal // Weak +GOM(bsearch, pEEppLLp) //%% +GOW(btowc, uEi) +GOW(bzero, vEpL) +GO(__bzero, vEpL) +GOW(calloc, pELL) +// callrpc +//GOW(canonicalize_file_name, pEp) +// capget +// capset +//GO(catclose, iEp) +//GO(catgets, pEpiip) +//GO(catopen, pEpi) +// cbc_crypt +GO(cfgetispeed, uEp) +GO(cfgetospeed, uEp) +//GO(cfmakeraw, vEp) +//GOW(cfree, vEp) +GO(cfsetispeed, iEpu) +GO(cfsetospeed, iEpu) +GO(cfsetspeed, iEpi) +GOW(chdir, iEp) +//DATA(__check_rhosts_file, 4) +// chflags +// __chk_fail +GOW(chmod, iEpu) +GOW(chown, iEpuu) +GO(chroot, iEp) +GOW(clearenv, iEv) +GO(clearerr, vES) +//GO(clearerr_unlocked, vEp) +// clnt_broadcast +// clnt_create +// clnt_pcreateerror +// clnt_perrno +// clnt_perror +// clntraw_create +// clnt_spcreateerror +// clnt_sperrno +// clnt_sperror +// clnttcp_create +// clntudp_bufcreate +// clntudp_create +// clntunix_create +GO(clock, lEv) +// clone // Weak +// __clone +GOW(close, iEi) +// __close // Weak +GOW(closedir, iEp) +GO(closelog, vEv) +GOM(__cmsg_nxthdr, pEpp) //%noE +//GO(confstr, uEipu) +// __confstr_chk +GOW(connect, iEipu) +GOW(__connect, iEipu) +// copysign // Weak +// copysignf // Weak +// copysignl // Weak +//GOW(creat, iEpu) +//GO(creat64, iEpu) +// create_module // Weak +GO(ctermid, pEp) +GO(ctime, pErl_) +GO(ctime_r, pErl_p) +DATAM(__ctype_b, 4) +GOM(__ctype_b_loc, pEEv) +GOW(__ctype_get_mb_cur_max, LEv) +DATAM(__ctype_tolower, 4) +GOM(__ctype_tolower_loc, pEEv) +DATAM(__ctype_toupper, 4) +GOM(__ctype_toupper_loc, pEEv) +// __curbrk // type B +//GO(cuserid, pEp) +GOM(__cxa_atexit, iEEppp) //%% +GOM(atexit, iEEp) //%% just in case +GOM(__cxa_finalize, vEEp) //%% +DATAM(__cpu_model, 16) +GOM(__cxa_thread_atexit_impl, iEEppp) //%% +// __cyg_profile_func_enter +// __cyg_profile_func_exit +// daemon +DATAV(daylight, 4) +// __daylight // type B +GOW(dcgettext, pEppi) +GO(__dcgettext, pEppi) +//GOW(dcngettext, pEpppui) +// __default_morecore +// __default_rt_sa_restorer_v1 +// __default_rt_sa_restorer_v2 +// __default_sa_restorer_v1 +// __default_sa_restorer_v2 +// delete_module +// des_setparity +GOW(dgettext, pEpp) +GO(__dgettext, pEpp) +GO(difftime, dEll) +GO(dirfd, iEp) +GO(dirname, pEp) +GOS(div, pEpii) //%%,noE +// _dl_addr +GOW2(dl_iterate_phdr, iEEpp, my_dl_iterate_phdr) //%% +// _dl_mcount_wrapper +// _dl_mcount_wrapper_check +// _dl_open_hook // type B +// _dl_starting_up // Weak +// _dl_sym +// _dl_vsym +//GOW(dngettext, pEpppu) +//GOM(dprintf, iEEipV) +GOM(__dprintf_chk, iEEivpV) //%% +GO(drand48, dEv) +// drand48_r +GOW(dup, iEi) +GOW(dup2, iEii) +GO(__dup2, iEii) +GO(dup3, iEiiO) +//GOW(duplocale, pEp) +GO(__duplocale, aEa) +// dysize +//GOW(eaccess, iEpi) +// ecb_crypt +// ecvt +//GO(ecvt_r, iEdipppL) +// endaliasent +// endfsent +GO(endgrent, vEv) +GO(endhostent, vFv) +GOW(endmntent, iES) +// __endmntent +// endnetent +// endnetgrent +GO(endprotoent, vEv) +GO(endpwent, vEv) +// endrpcent +GO(endservent, vEv) +GO(endspent, vEv) +// endttyent +// endusershell +GOW(endutent, vEv) +// endutxent +DATAM(environ, 4) +DATAM(_environ, 4) +DATAM(__environ, 4) // type B +// envz_add +// envz_entry +// envz_get +// envz_merge +// envz_remove +// envz_strip +GOM(epoll_create, iEEi) //%% not needed, but used in syscall +GOM(epoll_create1, iEEO) //%% +GOM(epoll_ctl, iEEiiip) //%% align epool_event structure +// epoll_pwait +GOM(epoll_wait, iEEipii) //%% need realign of epoll_event structure +// erand48 +// erand48_r // Weak +//GO(err, vEippppppppp) +// errno // type B +GOM(__errno_location, pEEv) +//GOW(error, vEiippppppppp) // Simple attempt: there is a vararg, but the alignment will/may be off if it tries some Double in the "printf" part +// error_at_line // Weak +// error_message_count // type B +// error_one_per_line // type B +// error_print_progname // type B +//GO(errx, vEippppppppp) +//GO(ether_aton, pEp) +//GO(ether_aton_r, pEpp) +//GO(ether_hostton, iEpp) +//GO(ether_line, iEppp) +//GO(ether_ntoa, pEp) +//GO(ether_ntoa_r, pEpp) +//GO(ether_ntohost, iEpp) +//GOW(euidaccess, iEpi) +GO(eventfd, iEui) +//GO(eventfd_read, iEip) +//GO(eventfd_write, iEiU) +GO2(execl, iEEpV, my32_execv) +//GO2(execle, iEEpV, my_32execve) // Nope! This one needs wrapping, because is char*, char*, ..., char*[] +GO2(execlp, iEpV, my32_execvp) +GOWM(execv, iEEpp) //%% +GOM(execve, iEEppp) //%% and this one too... +GOWM(execvp, iEEpp) +GOWM(execvpe, iEEppp) +GO(exit, vEi) +GO(_exit, vEi) +GOW(_Exit, vEi) +//GOM(__explicit_bzero_chk, vEEpuu) //%% not always defined +GO(faccessat, iEipii) +// fattach +//GO(__fbufsize, uEp) +GOW(fchdir, iEi) +// fchflags +GOW(fchmod, iEiu) +GO(fchmodat, iEipui) +GOW(fchown, iEiuu) +//GO(fchownat, iEipuii) +GO(fclose, iES) +GOW(fcloseall, iEv) +GOM(fcntl, iEEiiN) //%% this also use a vararg for 3rd argument +GOM(__fcntl, iEEiiN) //%% +GOM(fcntl64, iEEiiN) //%% +//GO(fcvt, pEdipp) +//GO(fcvt_r, iEdipppL) +GO(fdatasync, iEi) +// fdetach +GO(fdopen, SEip) +GOW(fdopendir, pEi) +GOW(feof, iES) +//GO(feof_unlocked, iEp) +GOW(ferror, iES) +//GO(ferror_unlocked, iEp) +//GO(fexecve, iEipp) //TODO: Check if needed to be wrapped, and target checked for x86 / native? +GOW(fflush, iES) +//GO(fflush_unlocked, iES) +GO(ffs, iEi) +// __ffs +GOW(ffsl, iEl) +GO(ffsll, iEI) +GOW(fgetc, iES) +GOW(fgetc_unlocked, iES) +// fgetgrent +// fgetgrent_r // Weak +GO(fgetpos, iESBliu_) +GO(fgetpos64, iESp) +// fgetpwent +// fgetpwent_r // Weak +GOW(fgets, pEpiS) +GO(__fgets_chk, pEpLiS) +// fgetspent +// fgetspent_r // Weak +//GO(fgets_unlocked, pEpip) +// __fgets_unlocked_chk +//GOW(fgetwc, iEp) +//GOW(fgetwc_unlocked, iEp) +//GO(fgetws, pEpip) +// __fgetws_chk +//GO(fgetws_unlocked, pEpip) +// __fgetws_unlocked_chk +GO(fgetxattr, iEippL) +GO(fileno, iES) +GOW(fileno_unlocked, iES) +GOW(finite, iEd) +GO(__finite, iEd) +GOW(finitef, iEf) +// __finitef +// finitel // Weak +// __finitel +// __flbf +//GO(flistxattr, iEipu) +GOW(flock, iEii) +GOW(flockfile, vFS) +GOW(_flushlbf, vEv) +//GO(fmemopen, pEpup) +// fmtmsg +GO(fnmatch, iEppi) +GO2(fopen, SEEpp, my_fopen) //%% +GOW2(fopen64, SEEpp, my_fopen64) //%% +//GOM(fopencookie, pEEpppppp) //%% last 4p are a struct with 4 callbacks... +GOWM(fork, iEEv) //%% +GOM(__fork, iEEv) //%% +// __fortify_fail +GOW(fpathconf, lEii) +//GO(__fpending, uEp) +GOM(fprintf, iEESpV) //%% +GOM(__fprintf_chk, iEESvpV) //%% +// __fpu_control // type B +//GO(__fpurge, vEp) +GOW(fputc, iEiS) +//GO(fputc_unlocked, iEip) +GOW(fputs, iEpS) // Weak +//GO(fputs_unlocked, iEpp) +GO(fputwc, uEiS) +//GO(fputwc_unlocked, iEip) +//GO(fputws, iEpp) +//GO(fputws_unlocked, iEpp) +GOW(fread, LEpLLS) +//GO(__freadable, iEp) +GO(__fread_chk, uEpLLLS) +//GO(__freading, iEp) +//GO(fread_unlocked, uEpuup) +//GO(__fread_unlocked_chk, uEpuuup) +GO(free, vEp) +GOM(freeaddrinfo, vEEp) +//DATAV(__free_hook, 4) +GO(freeifaddrs, vEp) +GOW(freelocale, vEA) +GO(__freelocale, vEA) +GO(fremovexattr, iEip) +GO(freopen, SEppS) +GO(freopen64, SEppS) +// frexp // Weak +// frexpf // Weak +// frexpl // Weak +GOM(fscanf, iEESpV) +GO(fseek, iESli) +GO(fseeko, iESli) +GO(fseeko64, iESIi) +GO(__fsetlocking, iESi) +//GO(fsetpos, iEpp) +//GO(fsetpos64, iEpp) +GO(fsetxattr, iEippLi) +GOWM(fstatfs, iEip) //%%,noE +GOWM(fstatfs64, iEip) //%%,noE +//GO(fstatvfs, iEip) +GOW(fstatvfs64, iEip) // alignment? +GOW(fsync, iEi) +GOWM(ftell, lEES) +GO(ftello, lES) +GO(ftello64, IES) +//GO(ftime, iEp) +GO(ftok, iEpi) +GOW(ftruncate, iEil) +GOW(ftruncate64, iEiI) +//GOW(ftrylockfile, iEp) +//GOM(fts_children, pEEpi) //%% +//GOM(fts_close, iEEp) //%% +//GOM(fts_open, pEEpip) //%% +//GOM(fts_read, pEEp) //%% +// fts_set +//GOM(ftw, iEEppi) //%% +//GOM(ftw64, iEEppi) //%% +GOW(funlockfile, vFS) +GOM(futimens, iEEip) +GOWM(futimes, iEEip) +//GO(futimesat, iEippp) +// fwide +//GOWM(fwprintf, iEEppV) //%% +//GOM(__fwprintf_chk, iEEpvpV) //%% +//GO(__fwritable, iEp) +GOW(fwrite, LEpLLS) +//GO(fwrite_unlocked, uEpuup) +//GO(__fwriting, iEp) +// fwscanf +GOM(__fxstat, iEEiip) //%% +GOM(__fxstat64, iEEiip) //%% need reaalign of struct stat64 +//GOM(__fxstatat, iEEiippi) //%% +GOM(__fxstatat64, iEEiippi) //%% struct stat64 again +// __gai_sigqueue +GO(gai_strerror, tEi) +// __gconv_get_alias_db +// __gconv_get_cache +// __gconv_get_modules_db +// gcvt +GOM(getaddrinfo, iEEpppp) +// getaliasbyname +// getaliasbyname_r +// getaliasent +// getaliasent_r +// get_avphys_pages // Weak +GOW(getc, iES) +GOW(getchar, iEv) +GO(getchar_unlocked, iEv) +GOM(getcontext, iEEp) //%% +//GOW(getc_unlocked, iEp) +GO(get_current_dir_name, pEv) +GOW(getcwd, tEpL) +//GO(__getcwd_chk, pEpLL) +//GO(getdate, pEp) +// getdate_err // type B +// getdate_r // Weak +//GOW(getdelim, iEppip) +//GOW(__getdelim, iEppip) +// getdirentries +// getdirentries64 +//GO(getdomainname, iEpu) +// __getdomainname_chk +GOW(getdtablesize, iEv) +GOW(getegid, uEv) +GO(getenv, tEp) +GOW(geteuid, uEv) +// getfsent +// getfsfile +// getfsspec +GOW(getgid, uEv) +//GO(getgrent, pEv) +// getgrent_r +//GO(getgrgid, pEu) +GOM(getgrgid_r, iEEuppLp) +//GO(getgrnam, pEp) +GOM(getgrnam_r, iEEpppLp) +GO(getgrouplist, iEpipp) +GOW(getgroups, iEip) +// __getgroups_chk +//GO(gethostbyaddr, pFpui) // change h_errno only +GO(gethostbyaddr_r, iFpuippupp) +GOM(gethostbyname, pFEp) +//GO(gethostbyname2, pFpi) +//GO(gethostbyname2_r, iFpippupp) +GOM(gethostbyname_r, iFEpppupp) +//GO(gethostent, pFv) +//GO(gethostent_r, iFppupp) +// gethostid +GOW(gethostname, iEpL) +// __gethostname_chk +GOM(getifaddrs, iEEbp_) +// getipv4sourcefilter +//GOW(getitimer, iEip) +// get_kernel_syms // Weak +//GOW(getline, iEppp) +GO(getloadavg, iEpi) +GO(getlogin, pEv) +GO(getlogin_r, iEpL) +// __getlogin_r_chk +GOM(getmntent, pEES) +// __getmntent_r +//GOW(getmntent_r, pEpppi) +// getmsg +// get_myaddress +GO(getnameinfo, iEpupupui) +// getnetbyaddr +// getnetbyaddr_r +// getnetbyname +// getnetbyname_r +// getnetent +// getnetent_r +// getnetgrent +// getnetgrent_r // Weak +// getnetname +GOW(get_nprocs, iEv) +//GOW(get_nprocs_conf, iEv) +//GOM(getopt, iEipp) //%noE +GOM(getopt_long, iEipppp) //%noE +//GOM(getopt_long_only, iEipppp) //%noE +GOW(getpagesize, iEv) +GO(__getpagesize, iEv) +//GO(getpass, pEp) +GOW(getpeername, iEipp) +GOW(getpgid, iEi) +// __getpgid +GO(getpgrp, iEv) +// get_phys_pages // Weak +GO(getpid, iEv) +GO(__getpid, uEv) +// getpmsg +GOW(getppid, iEv) +GO(getpriority, iEuu) +GO(getrandom, iEpLu) +GOM(getprotobyname, pEEp) +//GO(getprotobyname_r, iEpppup) +//GO(getprotobynumber, pEi) +//GO(getprotobynumber_r, iEippup) +//GO(getprotoent, pEv) +//GO(getprotoent_r, iEppup) +GOW(getpt, iEv) +// getpublickey +// getpw // Weak +//GO(getpwent, pEv) +// getpwent_r +GOM(getpwnam, pEEp) +GOM(getpwnam_r, iEEpppLp) +GOM(getpwuid, pEEu) +GOM(getpwuid_r, iEEuppLp) +GOW(getresgid, iEppp) +GOW(getresuid, iEppp) +GOM(getrlimit, iEEup) +GO(getrlimit64, iEup) +// getrpcbyname +// getrpcbyname_r +// getrpcbynumber +// getrpcbynumber_r +// getrpcent +// getrpcent_r +// getrpcport +GOW(getrusage, iEiBLLLLLLLLLLLLLLLLLL_) +//GOW(gets, pEp) +// __gets_chk +// getsecretkey +//GO(getservbyname, pEpp) +//GO(getservbyname_r, iEppppup) +//GO(getservbyport, pEip) +//GO(getservbyport_r, iEipppup) +// getservent +//GO(getservent_r, iEppup) +GO(getsid, iEi) +GOW(getsockname, iEipp) +GOW(getsockopt, iEiiipp) +// getsourcefilter +//GO(getspent, pEv) +// getspent_r +//GO(getspnam, pEp) +// getspnam_r +// getsubopt +GOW(gettext, pEp) +GOW(gettimeofday, iEBll_p) +//GO(__gettimeofday, iEpp) +// getttyent +// getttynam +GOW(getuid, uEv) +// getusershell +//GOW(getutent, pEv) +//GOW(getutent_r, iEpp) +//GOW(getutid, pEp) +//GOW(getutid_r, iEppp) +//GOW(getutline, pEp) +//GOW(getutline_r, iEppp) +// getutmp +// getutmpx +// getutxent +// getutxid +// getutxline +// getw +GO2(getwc, uES, fgetwc) +GO(getwchar, uEv) +GO(getwchar_unlocked, uEv) +//GOW(getwc_unlocked, iEp) +//GO(getwd, pEp) +// __getwd_chk +GO(getxattr, iEpppL) +//GOM(glob, iEEpipp) //%% +//GOM(glob64, iEEpipp) //%% +//GO(globfree, vEp) +//GO(globfree64, vEp) +// glob_pattern_p // Weak +GOM(gmtime, pEEp) +GO2(__gmtime_r, pEpp, my32_gmtime_r) +GOWM(gmtime_r, pEEpp) +GO(gnu_dev_major, uEU) +GO(gnu_dev_makedev, UEuu) +GO(gnu_dev_minor, uEU) +GOW(gnu_get_libc_release, pEv) +GOW(gnu_get_libc_version, pEv) +// __gnu_mcount_nc +// __gnu_Unwind_Find_exidx +GO(grantpt, iEi) +// group_member // Weak +// gsignal // Weak +// gtty +//GOW(hasmntopt, pEpp) +// hcreate +// hcreate_r +// hdestroy // Weak +// hdestroy_r +//DATA(h_errlist, 4) +// h_errno // type B +GOM(__h_errno_location, pFEv) +//GO(herror, vFp) +// h_nerr // type R +// host2netname +// hsearch +// hsearch_r +//GO(hstrerror, pFi) +GO(htonl, uEu) +GO(htons, WEW) +GO(iconv, LELbp_bL_bp_bL_) +//GO(iconv_canonicalize, pEp) +GO(iconv_close, iEp) +GO(iconv_open, pEpp) +//GO(if_freenameindex, vEp) +//GO(if_indextoname, pEup) +//GO(if_nameindex, pEv) +//GO(if_nametoindex, uEp) +// imaxabs // Weak +GOWS(imaxdiv, pEpII) //%% +DATA(in6addr_any, 16) // type R +//DATA(in6addr_loopback, 16) // type R +// inb // Weak +//GOW(index, pEpi) +// inet6_opt_append +// inet6_opt_find +// inet6_opt_finish +// inet6_opt_get_val +// inet6_opt_init +// inet6_option_alloc +// inet6_option_append +// inet6_option_find +// inet6_option_init +// inet6_option_next +// inet6_option_space +// inet6_opt_next +// inet6_opt_set_val +// inet6_rth_add +// inet6_rth_getaddr +// inet6_rth_init +// inet6_rth_reverse +// inet6_rth_segments +// inet6_rth_space +GO(inet_addr, uEp) +GOW(inet_aton, iEpp) +// inet_lnaof +// inet_makeaddr +// inet_netof +//GO(inet_network, iEp) +// inet_nsap_addr +//GO(inet_nsap_ntoa, pEipp) +GO(inet_ntoa, tEu) +GO(inet_ntop, pEippu) +GO(inet_pton, iEipp) +//GO(initgroups, iEpi) +// init_module +// initstate // Weak +//GOW(initstate_r, iEupup) +// inl // Weak +// innetgr +GO(inotify_add_watch, iEipu) +GO(inotify_init, iEv) +GO(inotify_init1, iEi) +GO(inotify_rm_watch, iEii) +// insque +// __internal_endnetgrent +// __internal_getnetgrent_r +// __internal_setnetgrent +// inw // Weak +//DATA(_IO_2_1_stderr_, 152) //sizeof(struct _IO_FILE_plus) +//DATA(_IO_2_1_stdin_, 152) +//DATA(_IO_2_1_stdout_, 152) +//GO(_IO_adjust_column, uEupi) +// _IO_adjust_wcolumn +GO(ioctl, iEiip) //the vararg is just to have optional arg of various type, but only 1 arg +//GO(_IO_default_doallocate, iES) +//GO(_IO_default_finish, vESi) +//GO(_IO_default_pbackfail, iESi) +//GO(_IO_default_uflow, iES) +//GO(_IO_default_xsgetn, LESpL) +//GO(_IO_default_xsputn, LESpL) +//GO(_IO_doallocbuf, vES) +//GO(_IO_do_write, iESpL) +// _IO_fclose +// _IO_fdopen +// _IO_feof +// _IO_ferror +// _IO_fflush +// _IO_fgetpos +// _IO_fgetpos64 +// _IO_fgets +//GO(_IO_file_attach, pESi) +//GO(_IO_file_close, iES) +//GO(_IO_file_close_it, iES) +//GO(_IO_file_doallocate, iES) +// _IO_file_finish +//GO(_IO_file_fopen, pESppi) +//GO(_IO_file_init, vES) +//DATA(_IO_file_jumps, 4) +//GO(_IO_file_open, pESpiiii) +//GO(_IO_file_overflow, iESi) +//GO(_IO_file_read, lESpl) +//GO(_IO_file_seek, IESIi) +//GO(_IO_file_seekoff, IESIii) +//GO(_IO_file_setbuf, pESpl) +//GOM(_IO_file_stat, iEESp) +//GO(_IO_file_sync, iES) +//GO(_IO_file_underflow, iES) +//GO(_IO_file_write, lESpl) +//GO(_IO_file_xsputn, LESpL) +//GO(_IO_flockfile, vES) +//GO(_IO_flush_all, iEv) +//GO(_IO_flush_all_linebuffered, vEv) +// _IO_fopen +// _IO_fprintf // Weak +// _IO_fputs +// _IO_fread +//GO(_IO_free_backup_area, vES) +// _IO_free_wbackup_area +// _IO_fsetpos +// _IO_fsetpos64 +// _IO_ftell +// _IO_ftrylockfile +//GO(_IO_funlockfile, vES) +// _IO_fwrite +GO(_IO_getc, iES) +// _IO_getline +//GO(_IO_getline_info, LESpLiip) +// _IO_gets +//GO(_IO_init, vESi) +//GO(_IO_init_marker, vEpS) +// _IO_init_wmarker +// _IO_iter_begin +// _IO_iter_end +// _IO_iter_file +// _IO_iter_next +// _IO_least_wmarker +//GO(_IO_link_in, vEp) +//DATA(_IO_list_all, 4) +// _IO_list_lock +// _IO_list_resetlock +// _IO_list_unlock +//GO(_IO_marker_delta, iEp) +//GO(_IO_marker_difference, iEpp) +//GO(_IO_padn, iEpii) +//GO(_IO_peekc_locked, iEp) +GOW(ioperm, iELLi) +GOW(iopl, iEi) +// _IO_popen +// _IO_printf +//GO(_IO_proc_close, iES) +//GO(_IO_proc_open, pESpp) +GO(_IO_putc, iEiS) +// _IO_puts +//GO(_IO_remove_marker, vEp) +//GO(_IO_seekmark, iESpi) +//GO(_IO_seekoff, IESIii) +//GO(_IO_seekpos, IESIi) +// _IO_seekwmark +//GO(_IO_setb, vESppi) +// _IO_setbuffer +// _IO_setvbuf +//GO(_IO_sgetn, uEppu) +// _IO_sprintf +//GO(_IO_sputbackc, iESi) +// _IO_sputbackwc +// _IO_sscanf +//GO(_IO_str_init_readonly, vEppi) +//GO(_IO_str_init_static, vEppup) +//GO(_IO_str_overflow, iESi) +//GO(_IO_str_pbackfail, iESi) +//GO(_IO_str_seekoff, UESUii) +//GO(_IO_str_underflow, iES) +//GO(_IO_sungetc, iEp) +// _IO_sungetwc +//GO(_IO_switch_to_get_mode, iEp) +// _IO_switch_to_main_wget_area +// _IO_switch_to_wbackup_area +// _IO_switch_to_wget_mode +// _IO_ungetc +//GO(_IO_un_link, vEp) +//GO(_IO_unsave_markers, vEp) +// _IO_unsave_wmarkers +//GOM(_IO_vfprintf, iEEpppp) //%% +//GOM(_IO_vfscanf, iEEppp) //%% +// _IO_vsprintf +// _IO_wdefault_doallocate +// _IO_wdefault_finish +// _IO_wdefault_pbackfail +// _IO_wdefault_uflow +// _IO_wdefault_xsgetn +// _IO_wdefault_xsputn +// _IO_wdoallocbuf +// _IO_wdo_write +//DATA(_IO_wfile_jumps, 4) +// _IO_wfile_overflow +// _IO_wfile_seekoff +// _IO_wfile_sync +// _IO_wfile_underflow +// _IO_wfile_xsputn +// _IO_wmarker_delta +// _IO_wsetb +// iruserok +// iruserok_af +GO(isalnum, iEi) +// __isalnum_l +// isalnum_l // Weak +GO(isalpha, iEi) +// __isalpha_l +// isalpha_l // Weak +GO(isascii, iEi) +// __isascii_l // Weak +// isastream +GOW(isatty, iEi) +GO(isblank, iEi) +// __isblank_l +// isblank_l // Weak +GO(iscntrl, iEi) +// __iscntrl_l +// iscntrl_l // Weak +// isctype // Weak +// __isctype +GO(isdigit, iEi) +// __isdigit_l +// isdigit_l // Weak +// isfdtype +GO(isgraph, iEi) +// __isgraph_l +// isgraph_l // Weak +GOW(isinf, iEd) +GO(__isinf, iEd) +GOW(isinff, iEf) +GO(__isinff, iEf) +// isinfl // Weak +// __isinfl +GO(islower, iEi) +// __islower_l +// islower_l // Weak +GOW(isnan, iEd) +GO(__isnan, iEd) +GOW(isnanf, iEf) +GO(__isnanf, iEf) +// isnanl // Weak +// __isnanl +GO2(__isoc99_fscanf, iEEppV, my32_fscanf) +// __isoc99_fwscanf +// __isoc99_scanf +GOM(__isoc99_sscanf, iEEppV) //%% +// __isoc99_swscanf +//GOM(__isoc99_vfscanf, iEEppp) //%% +// __isoc99_vfwscanf +// __isoc99_vscanf +//GOM(__isoc99_vsscanf, iEEppp) //%% TODO: check if ok +// __isoc99_vswscanf +// __isoc99_vwscanf +// __isoc99_wscanf +GO(isprint, iEi) +// __isprint_l +// isprint_l // Weak +GO(ispunct, iEi) +// __ispunct_l +// ispunct_l // Weak +GO(isspace, iEi) +// __isspace_l +// isspace_l // Weak +GO(isupper, iEi) +// __isupper_l +// isupper_l // Weak +GOW(iswalnum, iEu) +// __iswalnum_l +//GOW(iswalnum_l, iEua) +GOW(iswalpha, iEu) +// __iswalpha_l +//GOW(iswalpha_l, iEua) +GOW(iswblank, iEu) +// __iswblank_l +GOW(iswblank_l, iEua) +GOW(iswcntrl, iEu) +// __iswcntrl_l +GOW(iswcntrl_l, iEua) +GOW(iswctype, iEuL) +// __iswctype +GO(__iswctype_l, iEuLa) +// iswctype_l // Weak +GOW(iswdigit, iEu) +// __iswdigit_l +//GOW(iswdigit_l, iEua) +GOW(iswgraph, iEu) +// __iswgraph_l +//GOW(iswgraph_l, iEua) +GOW(iswlower, iEu) +// __iswlower_l +//GOW(iswlower_l, iEua) +GOW(iswprint, iEu) +// __iswprint_l +//GOW(iswprint_l, iEua) +GOW(iswpunct, iEu) +// __iswpunct_l +//GOW(iswpunct_l, iEua) +GOW(iswspace, iEu) +// __iswspace_l +//GOW(iswspace_l, iEua) +GOW(iswupper, iEu) +// __iswupper_l +//GOW(iswupper_l, iEua) +GOW(iswxdigit, iEu) +// __iswxdigit_l +//GOW(iswxdigit_l, iEua) +GO(isxdigit, iEi) +// __isxdigit_l +// isxdigit_l // Weak +// _itoa_lower_digits // type R +// __ivaliduser +GO(jrand48, lEp) +// jrand48_r // Weak +// key_decryptsession +// key_decryptsession_pk +// __key_decryptsession_pk_LOCAL // type B +// key_encryptsession +// key_encryptsession_pk +// __key_encryptsession_pk_LOCAL // type B +// key_gendes +// __key_gendes_LOCAL // type B +// key_get_conv +// key_secretkey_is_set +// key_setnet +// key_setsecret +GOW(kill, iEii) +GO(killpg, iEii) +// klogctl +// l64a +GO(labs, lEl) +// lchmod +GOW(lchown, iEpuu) +// lckpwdf // Weak +// lcong48 +// lcong48_r // Weak +// ldexp // Weak +// ldexpf // Weak +// ldexpl // Weak +//GOS(ldiv, pEEpii) //%% return a struct, so address of stuct is on the stack, as a shadow 1st element +//GOM(lfind, pEEpppLp) //%% +//GO(lgetxattr, iEpppu) +GOM(__libc_alloca_cutoff, iEEL) //%% +// __libc_allocate_rtsig +// __libc_allocate_rtsig_private +//GO(__libc_calloc, pELL) +// __libc_clntudp_bufcreate +GO(__libc_current_sigrtmax, iEv) +// __libc_current_sigrtmax_private +GO(__libc_current_sigrtmin, iEv) +// __libc_current_sigrtmin_private +//GOM(__libc_dlclose, iEEp) //%% +// __libc_dl_error_tsd +//GOM(__libc_dlopen_mode, pEEpi) //%% +//GOM(__libc_dlsym, pEEpp) //%% +// __libc_fatal +// __libc_fork +//GO(__libc_free, vEp) +// __libc_freeres +GOM(__libc_init_first, vEEipV) //%% +DATAM(_libc_intl_domainname, 4) // type R +//GO2(__libc_open, iEEpOu, my_open) +// __libc_longjmp +// __libc_mallinfo +//GO(__libc_malloc, pEL) +// __libc_mallopt +//GO(__libc_memalign, pELL) +// __libc_pthread_init +//GO(__libc_pvalloc, pEL) +// __libc_pwrite +//GO2(__libc_read, lEipL, my_read) //%%,noE +//GO(__libc_realloc, pEpL) +// __libc_sa_len +// __libc_siglongjmp +GOM(__libc_start_main, iEEpippppp) //%% +GO2(__libc_sigaction, iEEipp, my32_sigaction) //%% +// __libc_system +// __libc_thread_freeres +//GO(__libc_valloc, pEL) +GOW(link, iEpp) +//GO(linkat, iEipipi) +GOW(listen, iEii) +//GO(listxattr, iEppu) +// llabs +// lldiv +//GO(llistxattr, iEppu) +// llseek // Weak +// loc1 // type B +// loc2 // type B +GOWM(localeconv, pEEv) +GOM(localtime, pEEp) +GOWM(localtime_r, pEEpp) +GO(lockf, iEiil) +GO(lockf64, iEiiI) +// locs // type B +GOM(longjmp, vEEpi) //%% +GOM(_longjmp, vEEpi) //%% +GOM(__longjmp_chk, vEEpi) //%% +GO(lrand48, lEv) +// lrand48_r +//GO(lremovexattr, iEpp) +//GOM(lsearch, pEEpppLp) //%% +GOW(lseek, lEili) +// __lseek // Weak +GOW(lseek64, IEiIi) +//GO(lsetxattr, iEpppui) +//GO(lutimes, iEpp) +GOM(__lxstat, iEEipp) //%% +GOM(__lxstat64, iEEipp) //%% +GO(madvise, iEpLi) +GOWM(makecontext, vEEppiV) //%% +GOW(mallinfo, pEv) +GOM(malloc, pEL) //%%,noE +// malloc_get_state // Weak +//DATAV(__malloc_hook, 4) +//DATAV(__malloc_initialize_hook, 4) +// malloc_set_state // Weak +// malloc_stats // Weak +GOW(malloc_trim, iEL) +GOW(malloc_usable_size, LEp) +GOW(mallopt, iEii) // Weak +// mallwatch // type B +//GO(mblen, iEpL) +//GOW(mbrlen, LEpLp) +//GO(__mbrlen, LEpLp) +GOW(mbrtowc, LEppLp) +GO(__mbrtowc, LEppLp) +//GOW(mbsinit, iEp) +GOW(mbsnrtowcs, LEpbp_LLp) +// __mbsnrtowcs_chk +GOW(mbsrtowcs, LEpbp_Lp) +// __mbsrtowcs_chk +GO(mbstowcs, LEppL) +// __mbstowcs_chk +GO(mbtowc, iEppL) +// mcheck +// mcheck_check_all +// mcheck_pedantic +// _mcleanup +//GOWM(mcount, vEpp) //%%,noE +// _mcount +GOW(memalign, pELL) +//DATAV(__memalign_hook, 4) +//GOW(memccpy, pEppiL) +GO(memchr, pEpiL) +GO(memcmp, iEppL) +GO(memcpy, pEppL) +GO(__memcpy_chk, pEppLL) +// memfrob +GO(memfd_create, iEpu) +GO(memmem, pEpLpL) +GO(memmove, pEppL) +GO(__memmove_chk, pEppLL) +GO(mempcpy, pEppL) +GO(__mempcpy, pEppL) +// __mempcpy_chk +// __mempcpy_small +GOW(memrchr, pEpiL) +GO(memset, pEpiL) +GO(__memset_chk, pEpiLL) +GO(mincore, iEpLp) +GOW(mkdir, iEpu) +GO(mkdirat, iEipu) +GO(mkdtemp, pEp) +GO(mkfifo, iEpu) +//GO(mkfifoat, iEipu) +//GO(mkostemp, iEpi) +GO(mkostemp64, iEpi) +GO(mkstemp, iEp) +GO(mkstemp64, iEp) +//GO(mktemp, pEp) +GO(mktime, LEbiiiiiiiiilt_) +GO(mlock, iEpL) +//GO(mlockall, iEi) +GOM(mmap, pEEpLiiil) //%% +GOM(mmap64, pEEpLiiiI) //%% +// modf // Weak +// modff // Weak +// modfl // Weak +// moncontrol // Weak +// monstartup // Weak +// __monstartup +//DATA(__morecore, 4) +GOW(mount, iEpppLp) +// mprobe +GOM(mprotect, iEEpLi) //%% +// mrand48 +// mrand48_r +GOWM(mremap, pEEpLLiN) //%% 5th hidden paramerer "void* new_addr" if flags is MREMAP_FIXED +//GO(msgctl, iEiip) +//GOW(msgget, iEpi) +//GOW(msgrcv, lEipLli) +//GOW(msgsnd, iEipLi) +GOW(msync, iEpLi) +// mtrace +GO(munlock, iEpL) +//GO(munlockall, iEv) +GOM(munmap, iEEpL) //%% +// muntrace +GOWM(nanosleep, iErLL_BLL_) //%%,noE +// __nanosleep // Weak +// netname2host +// netname2user +GOW(newlocale, aEipa) +GO(__newlocale, aEipa) +// nfsservctl +//GOM(nftw, iEEppii) //%% +//GOM(nftw64, iEEppii) //%% +//GOW(ngettext, pEppu) +GO(nice, iEi) +// _nl_default_dirname // type R +// _nl_domain_bindings // type B +GO(nl_langinfo, tEi) +GO(__nl_langinfo_l, tEia) +//GOW(nl_langinfo_l, pEup) +//DATAB(_nl_msg_cat_cntr, 4) // type B +// nrand48 +// nrand48_r // Weak +// __nss_configure_lookup +// __nss_database_lookup +// __nss_disable_nscd +// _nss_files_parse_grent +// _nss_files_parse_pwent +// _nss_files_parse_spent +// __nss_group_lookup +// __nss_group_lookup2 +// __nss_hostname_digits_dots +// __nss_hosts_lookup +// __nss_hosts_lookup2 +// __nss_lookup_function +// __nss_next +// __nss_next2 +// __nss_passwd_lookup +// __nss_passwd_lookup2 +// __nss_services_lookup2 +GOW(ntohl, uEu) +GOW(ntohs, WEW) +// ntp_adjtime // Weak +// ntp_gettime +// _null_auth // type B +// _obstack_allocated_p +//DATAM(obstack_alloc_failed_handler, 4) +//GOM(_obstack_begin, iEpLLpp) //%%,noE +// _obstack_begin_1 +//DATA(obstack_exit_failure, 4) +//GOM(_obstack_free, vEpp) //%%,noE +//GOM(obstack_free, vEpp) //%%,noE +// _obstack_memory_used +//GOM(_obstack_newchunk, vEpi) //%%,noE +// obstack_printf // Weak +// __obstack_printf_chk +//GOWM(obstack_vprintf, iEEpppp) //%% +// __obstack_vprintf_chk +//GOWM(on_exit, iEEpp) //%% +//GO2(__on_exit, iEEpp, my_on_exit) //%% +GOW2(open, iEEpON, my_open) //%% +GOW2(__open, iEEpON, my_open) //%% +GO(__open_2, iEpO) +GOW2(open64, iEEpON, my_open64) //%% +// __open64 // Weak +GO(__open64_2, iEpO) +//GOW(openat, iEipON) +// __openat_2 +GOW(openat64, iEipON) +//GO(__openat64_2, iEipON) +// __open_catalog +GOW(opendir, pEp) +GO(openlog, vEpii) +GOW(open_memstream, SEpp) +// open_wmemstream +//DATAB(optarg, 4) +//DATA(opterr, 4) +//DATA(optind, 4) +//DATA(optopt, 4) +// outb // Weak +// outl // Weak +// outw // Weak +//GO(__overflow, iEpi) +GO(parse_printf_format, uEpup) +// passwd2des +GOW(pathconf, lEpi) +GOW(pause, iEv) +GO(pclose, iES) +GO(perror, vEp) +// personality // Weak +GOW(pipe, iEp) +// __pipe +GOW(pipe2, iEpO) // assuming this works the same as pipe, so pointer for array of 2 int +// pivot_root +// pmap_getmaps +// pmap_getport +// pmap_rmtcall +// pmap_set +// pmap_unset +GOW(poll, iEpLi) // poll have an array of struct as 1st argument +GO(__poll, iEpLi) +GO(popen, SEpp) +GO(posix_fadvise, iEilli) +GO(posix_fadvise64, iEiIIi) +GO(posix_fallocate, iEill) +GO(posix_fallocate64, iEiII) +// posix_madvise +GOW(posix_memalign, iEBp_LL) +// posix_openpt // Weak +GOM(posix_spawn, iEEpppppp) +// posix_spawnattr_destroy +// posix_spawnattr_getflags +// posix_spawnattr_getpgroup +// posix_spawnattr_getschedparam +// posix_spawnattr_getschedpolicy +// posix_spawnattr_getsigdefault +// posix_spawnattr_getsigmask +// posix_spawnattr_init +// posix_spawnattr_setflags +// posix_spawnattr_setpgroup +// posix_spawnattr_setschedparam +// posix_spawnattr_setschedpolicy +// posix_spawnattr_setsigdefault +// posix_spawnattr_setsigmask +GOM(posix_spawn_file_actions_addclose, iEEpi) +GOM(posix_spawn_file_actions_adddup2, iEEpii) +GOM(posix_spawn_file_actions_addopen, iEEpipOi) +GOM(posix_spawn_file_actions_destroy, iEEp) +GOM(posix_spawn_file_actions_init, iEEp) +GOM(posix_spawnp, iEEpppppp) //%% +GO(ppoll, iEpurLL_p) +GO(__ppoll_chk, iEpurLL_pL) +GOW(prctl, iEiLLLL) +GOW(pread, lEipLl) +GOW(pread64, lEipLI) +// __pread64 // Weak +// __pread64_chk +//GOM(preadv64, lEEipiI) //%% not always present +// __pread_chk +GOM(printf, iEEpV) //%% +GOM(__printf_chk, iEEvpV) //%% +//GO(__printf_fp, iEppp) // does this needs aligment? +// printf_size +// printf_size_info +// profil // Weak +// __profile_frequency +//DATAM(__progname, 4) +//DATAM(__progname_full, 4) +DATAM(program_invocation_name, 4) +DATAM(program_invocation_short_name, 4) +//GOW(pselect, iEippppp) +// psignal +//GO(ptrace, iEiupp) // will that work??? +//GO(ptsname, pEi) +//GOW(ptsname_r, iEipu) +// __ptsname_r_chk +GOW(putc, iEiS) +GO(putchar, iEi) +GO(putchar_unlocked, iEi) +//GO(putc_unlocked, iEip) +GO(putenv, iEp) +// putgrent +// putmsg +// putpmsg +// putpwent +GOW(puts, iEp) +// putspent +//GOW(pututline, pEp) +// pututxline +// putw +GO(putwc, uEiS) +// putwchar +GO(putwchar_unlocked, uEi) +//GO(putwc_unlocked, iEip) +// pvalloc // Weak +// pwrite // Weak +GOW(pwrite64, lEipLI) +// __pwrite64 // Weak +//GOM(pwritev64, lEEipiI) //%% not always present +// qecvt +#ifdef HAVE_LD80BITS +//GO(qecvt_r, iEDipppL) +#else +//GO(qecvt_r, iEKipppL) +#endif +// qfcvt +#ifdef HAVE_LD80BITS +//GO(qfcvt_r, iEDipppL) +#else +//GO(qfcvt_r, iEKipppL) +#endif +// qgcvt +GOM(qsort, vEEpLLp) //%% +//GOM(qsort_r, vEEpLLpp) //%% +// query_module // Weak +//GO(quotactl, iEipip) +GO(raise, iEi) +GO(rand, iEv) +GOW(random, lEv) +//GOW(random_r, iEpp) +GO(rand_r, iEp) +GOW(rawmemchr, pEpi) +GO(__rawmemchr, pEpi) +// rcmd +// rcmd_af +// __rcmd_errstr // type B +GOM(read, lEipL) //%%,noE +//GOW(__read, lEipL) +// readahead // Weak +GO(__read_chk, lEipLL) +GOWM(readdir, pEEp) //%% +GO(readdir64, pEp) // check if alignement is correct +//GOM(readdir_r, iEEppp) //%% should also be weak +GO2(readlink, lEEppL, my_readlink) //%% +GOM(readlinkat, iEEippL) +// __readlinkat_chk +// __readlink_chk +GOM(readv, lEEipi) +GO(realloc, pEpL) +//DATAV(__realloc_hook, 4) +GOM(realpath, pEEpp) //%% +GO2(__realpath_chk, pEEppv, my32_realpath) +// reboot +// re_comp // Weak +// re_compile_fastmap // Weak +//GOW(re_compile_pattern, pEpup) +GO(recv, lEipLi) +GO(__recv_chk, iEipLLi) +GOW(recvfrom, lEipLipp) +// __recvfrom_chk +//GOM(recvmmsg, iEEipuup) //%% actual recvmmsg is glibc 2.12+. The syscall is Linux 2.6.33+, so use syscall... +GOWM(recvmsg, lEEipi) +// re_exec // Weak +GOWM(regcomp, iEEppi) +GOWM(regerror, uEEippu) +GOM(regexec, iEEppupi) +GOWM(regfree, vEEp) +GOM(__register_atfork, iEEpppp) //%% +// register_printf_function // Weak +// registerrpc +// remap_file_pages // Weak +//GOW(re_match, iEppiip) +// re_match_2 // Weak +GO(remove, iEp) +//GO(removexattr, iEpp) +// remque +GO(rename, iEpp) +GO(renameat, iEipip) +//GO(renameat2, iEipipu) +// _res // type B +//GOW(re_search, iEppiiip) +//GOW(re_search_2, iEppipiiipi) +// re_set_registers // Weak +GOW(re_set_syntax, LEL) +// _res_hconf // type B +GO(__res_iclose, vEpi) +GO(__res_init, iEv) +//GO(__res_maybe_init, iEpi) +//GO(__res_nclose, vEp) +//GO(__res_ninit, iEp) +//DATA(__resp, 4) +// __res_randomid +//GO(__res_state, pEv) +//DATA(re_syntax_options, 4) // type B +// revoke +GO(rewind, vES) +GO(rewinddir, vEp) +// rexec +// rexec_af +// rexecoptions // type B +//GOW(rindex, pEpi) +GOW(rmdir, iEp) +GO(readdir64_r, iEppBp_) +// rpc_createerr // type B +// _rpc_dtablesize +// __rpc_thread_createerr +// __rpc_thread_svc_fdset +// __rpc_thread_svc_max_pollfd +// __rpc_thread_svc_pollfd +//GO(rpmatch, iEp) +// rresvport +// rresvport_af +// rtime +// ruserok +// ruserok_af +// ruserpass +GOW(sbrk, pEl) +GO(__sbrk, pEl) +// scalbn // Weak +// scalbnf // Weak +// scalbnl // Weak +GOM(scandir, iEEpppp) //%% +GOM(scandir64, iEEpppp) //%% +//GO2(scanf, iEpp, vscanf) +//GO(__sched_cpualloc, pEu) //TODO: check, return cpu_set_t* : should this be aligned/changed? +GO(__sched_cpucount, iEup) +//GO(__sched_cpufree, vEp) +GO(sched_getaffinity, iEiup) +GO(sched_getcpu, iEv) +//GO(__sched_getparam, iEip) +//GOW(sched_getparam, iEip) +GO(__sched_get_priority_max, iEi) +GOW(sched_get_priority_max, iEi) +GO(__sched_get_priority_min, iEi) +GOW(sched_get_priority_min, iEi) +GO(__sched_getscheduler, iEi) +GOW(sched_getscheduler, iEi) +//GOW(sched_rr_get_interval, iEip) +GO(sched_setaffinity, iEiup) +//GOW(sched_setparam, iEip) +GO(__sched_setscheduler, iEiip) +GOW(sched_setscheduler, iEiip) +GO(__sched_yield, iEv) +GOW(sched_yield, iEv) +GO(__secure_getenv, tEp) +GO(secure_getenv, tEp) +// seed48 +// seed48_r // Weak +//GO(seekdir, vEpi) +GOW(select, iEippprLL_) +GO(__select, iEippprLL_) +GO(semctl, iEiiiN) +GOW(semget, iEiii) +GOW(semop, iEipL) +//GO(semtimedop, iEipup) +GOW(send, lEipLi) +// __send // Weak +GO(sendfile, lEiibl_L) +GO(sendfile64, lEiipL) +GOWM(sendmsg, lEEipi) +//GOM(__sendmmsg, iEEipuu) //%% actual __sendmmsg is glibc 2.14+. The syscall is Linux 3.0+, so use syscall... +GOW(sendto, lEipLipu) +// setaliasent +GOW(setbuf, vESp) +//GOW(setbuffer, vEppL) +GOM(setcontext, iEEp) //%% +// setdomainname +GO(setegid, iEu) +GOW(setenv, iEppi) +// _seterr_reply +GO(seteuid, iEu) +// setfsent +// setfsgid +// setfsuid +GOW(setgid, iEu) +GO(setgrent, vEv) +GO(setgroups, iEup) +GO(sethostent, vFi) +// sethostid +//GO(sethostname, iEpu) +// setipv4sourcefilter +GOW(setitimer, iEirLLLL_BLLLL_) +GOM(setjmp, iEEp) //%% +GOM(_setjmp, iEEp) //%% +GO(setlinebuf, vES) +GO(setlocale, tEip) +// setlogin +GO(setlogmask, iEi) +GOW(setmntent, SEpp) +// __setmntent +// setnetent +// setnetgrent +GO(setns, iEii) +GOW(setpgid, iEii) +// __setpgid +GO(setpgrp, iEv) +GO(setpriority, iEuui) +GO(setprotoent, vEi) +GO(setpwent, vEv) +GOW(setregid, iEuu) +GOW(setresgid, iEuuu) +GOW(setresuid, iEuuu) +GOW(setreuid, iEuu) +GOM(setrlimit, iEEup) +GO(setrlimit64, iEup) +// setrpcent +// setservent +GOW(setsid, iEv) +GOW(setsockopt, iEiiipu) +// setsourcefilter +GO(setspent, vEv) +// setstate // Weak +//GOW(setstate_r, iEpp) +//GOW(settimeofday, iEpp) +// setttyent +GOW(setuid, iEu) +// setusershell +GOW(setutent, vEv) +// setutxent +GOW(setvbuf, iESpiL) +//GO(setxattr, iEpppui) +// sgetspent +// sgetspent_r // Weak +GOW(shmat, pEipi) +GOW(shmctl, iEiip) +GOW(shmdt, iEp) +GOW(shmget, iEiLi) +GOW(shutdown, iEii) +GOWM(sigaction, iEEipp) //%% +//GOWM(__sigaction, iEEipp) //%% +GO(sigaddset, iEpi) +// __sigaddset +GOWM(sigaltstack, iEEpp) //%% +// sigandset +GOW(sigblock, iEi) +GO(sigdelset, iEpi) +// __sigdelset +GO(sigemptyset, iEp) +GO(sigfillset, iEp) +GO(siggetmask, iEv) +// sighold +// sigignore +GO(siginterrupt, iEii) // no need to wrap this one? +GO(sigisemptyset, iFp) +GO(sigismember, iEpi) +// __sigismember +GOM(siglongjmp, vEEip) //%% +GOW2(signal, pEEip, my_signal) +GO(signalfd, iFipi) +GO(__signbit, iEd) +GO(__signbitf, iEf) +// sigorset +// sigpause // Weak +// __sigpause +//GO(sigpending, iEp) +GOW(sigprocmask, iEipp) +// sigqueue // Weak +// sigrelse +// sigreturn // Weak +GOM(sigset, pEEip) //%% +GOM(__sigsetjmp, iEEp) //%% +GOW(sigsetmask, iEi) +// sigstack +GOW(sigsuspend, iEp) +// __sigsuspend +//GOW(sigtimedwait, iEppp) +//GOW(sigvec, iEipp) +//GOW(sigwait, iEpp) +//GOW(sigwaitinfo, iEpp) +GOW(sleep, uEu) +GOM(snprintf, iEEpLpV) //%% +GOM(__snprintf_chk, iEEpLiipV) //%% +//GOM(__snprintf, iEEpLpV) //%% +// sockatmark +GOW(socket, iEiii) +GOW(socketpair, iEiiip) +//GO(splice, iEipipuu) +GOM(sprintf, iEEppV) //%% +GOM(__sprintf_chk, iEEpvvpV) //%% +// sprofil // Weak +GOW(srand, vEu) +GO(srand48, vEl) +// srand48_r // Weak +GOW(srandom, vEu) +//GOW(srandom_r, iEup) +GOM(sscanf, iEEppV) //%% +// ssignal // Weak +// sstk +GOM(__stack_chk_fail, vEEv) //%% +//GOM(lstat64, iEpp) //%%,noE +//GOM(stat64, iEpp) //%%,noE +GOWM(statfs, iEpp) //%%,noE +// __statfs +GOWM(statfs64, iEpp) //%%,noE +GOM(statvfs, iEEpp) +GOWM(statvfs64, iEEpp) +DATAM(stderr, 4) +DATAM(stdin, 4) +DATAM(stdout, 4) +// step // Weak +// stime +GO(stpcpy, pEpp) +// __stpcpy +GO(__stpcpy_chk, pEppL) +// __stpcpy_small +//GOW(stpncpy, pEppL) +//GO(__stpncpy, pEppL) +//GO(__stpncpy_chk, pEppLL) +GOW(strcasecmp, iEpp) +//GO(__strcasecmp, iEpp) +// __strcasecmp_l +// strcasecmp_l // Weak +GOW(strcasestr, pEpp) +GO(__strcasestr, pEpp) +GO(strcat, pEpp) +GO(__strcat_chk, pEppL) +GO(strchr, pEpi) +GOW(strchrnul, pEpi) +GO(strcmp, iEpp) +GO(strcoll, iEpp) +GO(__strcoll_l, iEppa) +//GOW(strcoll_l, iEppp) +GO(strcpy, pEpp) +GO(__strcpy_chk, pEppL) +// __strcpy_small +GO(strcspn, LEpp) +// __strcspn_c1 +// __strcspn_c2 +// __strcspn_c3 +GOW(strdup, pEp) +GO(__strdup, pEp) +GO(strerror, tEi) +//GO(strerror_l, pEip) +GO(__strerror_r, pEipL) +GOW(strerror_r, pEipL) +//GO(strfmon, lEpLpppppppppp) //vaarg, probably needs align, there are just double... +// __strfmon_l +// strfmon_l // Weak +// strfry +GO(strftime, LEpLpriiiiiiiiilt_) +GO(__strftime_l, LEpLpriiiiiiiiilt_a) +GOW(strftime_l, LEpLpriiiiiiiiilt_a) +GO(strlen, LEp) +GOW(strncasecmp, iEppL) +// __strncasecmp_l +// strncasecmp_l // Weak +GO(strncat, pEppL) +GO(__strncat_chk, pEppLL) +GO(strncmp, iEppL) +GO(strncpy, pEppL) +GO(__strncpy_chk, pEppLL) +GOW(strndup, pEpL) +GO(__strndup, pEpL) +GO(strnlen, LEpL) +GO(strpbrk, pEpp) +// __strpbrk_c2 +// __strpbrk_c3 +GO(strptime, pEppriiiiiiiiilt_) +// strptime_l // Weak +GO(strrchr, pEpi) +//GOW(strsep, pEpp) +// __strsep_1c +// __strsep_2c +// __strsep_3c +// __strsep_g +GO(strsignal, tEi) +GO(strspn, LEpp) +// __strspn_c1 +// __strspn_c2 +// __strspn_c3 +GO(strstr, pEpp) +GO(strtod, dEpBp_) +GO(__strtod_internal, dEpBp_i) +GO(__strtod_l, dEpBp_a) +GOW(strtod_l, dEpBp_a) +GO(strtof, fEpBp_) +GO(__strtof_internal, fEpBp_p) +GO(__strtof_l, fEpBp_a) +//GOW(strtof_l, fEppu) +//GO(strtoimax, IEppi) +GO(strtok, pEpp) +GO(__strtok_r, pEppbp_) +GOW(strtok_r, pEppbp_) +// __strtok_r_1c +GOM(strtol, lEpBp_i) //%%,noE +#ifdef HAVE_LD80BITS +//GO(strtold, DEpp) +//GO(__strtold_internal, DEppi) +GO(__strtold_l, DEpBp_a) +GOW(strtold_l, DEpBp_a) +#else +//GO(strtold, KEpp) +//GO2(__strtold_internal, KEppi, __strtod_internal) +GO2(__strtold_l, KEpBp_a, __strtod_l) +GOW2(strtold_l, KEpBp_a, strtod_l) +#endif +GO2(__strtol_internal, lEpBp_i, my32_strtol) //%%,noE +GO(strtoll, IEpBp_i) +//GO(__strtol_l, lEppiip) +//GOW(strtol_l, lEppiip) +GO(__strtoll_internal, IEpBp_ii) +//GO(__strtoll_l, IEppip) +//GOW(strtoll_l, IEppip) +//GOW(strtoq, IEppi) // is that ok? +GOM(strtoul, LEpBp_i) //%%,noE +GO2(__strtoul_internal, LEpBp_iv, my32_strtoul) //%%,noE +GO(strtoull, UEpBp_i) +//GO(__strtoul_l, uEppip) +//GOW(strtoul_l, LEppip) +GO(__strtoull_internal, UEpBp_ii) +//GO(__strtoull_l, UEppip) +//GOW(strtoull_l, UEppip) +//GO(strtoumax, UEppi) +//GOW(strtouq, UEppi) // ok? +//GOW(strverscmp, iEpp) +// __strverscmp +//GO(strxfrm, uEppu) +GO(__strxfrm_l, LEppLa) +//GO(strxfrm_l, uEppup) +// stty +// svcauthdes_stats // type B +// svcerr_auth +// svcerr_decode +// svcerr_noproc +// svcerr_noprog +// svcerr_progvers +// svcerr_systemerr +// svcerr_weakauth +// svc_exit +// svcfd_create +// svc_fdset // type B +// svc_getreq +// svc_getreq_common +// svc_getreq_poll +// svc_getreqset +// svc_max_pollfd // type B +// svc_pollfd // type B +// svcraw_create +// svc_register +// svc_run +// svc_sendreply +// svctcp_create +// svcudp_bufcreate +// svcudp_create +// svcudp_enablecache +// svcunix_create +// svcunixfd_create +// svc_unregister +//GO(swab, vEppi) +GOM(swapcontext, iEEpp) //%% +// swapoff // Weak +// swapon // Weak +GOM(swprintf, iEEpLpV) //%% +GOM(__swprintf_chk, iEEpLiLpV) //%% +GOM(swscanf, iEEppV) +GOW(symlink, iEpp) +GO(symlinkat, iEpip) +GO(sync, vEv) +GO(syncfs, iEi) +// sync_file_range +GOM(syscall, lEEV) //%% +GOW2(sysconf, lEEi, my_sysconf) +GO2(__sysconf, lEEi, my_sysconf) +// sysctl // Weak +//GO(__sysctl, iEp) +//DATA(_sys_errlist, 4) +//DATA(sys_errlist, 4) +GOM(sysinfo, iEp) //%noE +//GO2(syslog, vEipV, vsyslog) +GOM(__syslog_chk, vEEiipV) +//DATA(_sys_nerr, 4) // type R +//DATA(sys_nerr, 4) // type R +//DATA(sys_sigabbrev, 4) +//DATA(_sys_siglist, 4) +//DATA(sys_siglist, 4) +GOW(system, iEp) // Need to wrap to use box86 if needed? +GO2(__sysv_signal, pEEip, my___sysv_signal) //%% +//GOWM(sysv_signal, pEEip) //%% +GOW(tcdrain, iEi) +GO(tcflow, iEii) +GO(tcflush, iEii) +GOW(tcgetattr, iEip) +GO(tcgetpgrp, iEi) +// tcgetsid +GO(tcsendbreak, iEii) +GO(tcsetattr, iEiip) +GO(tcsetpgrp, iEii) +// tdelete // Weak +// tdestroy // Weak +// tee +//GO(telldir, iEp) +GO(tempnam, pEpp) +//GOW(textdomain, pEp) +// tfind // Weak +GO(time, LErl_) +GO(timegm, LEriiiiiiiiilt_) +// timelocal // Weak +GO(timerfd_create, iEii) +//GO(timerfd_gettime, iEip) +GO(timerfd_settime, iEiirLL_BLL_) +GOW(times, iEBllll_) +DATAM(timezone, 4) +//DATAB(__timezone, 4) // type B +GO(tmpfile, pEv) +GO(tmpfile64, pEv) +GO(tmpnam, pEp) +//GO(tmpnam_r, pEp) +GO(toascii, iEi) +// __toascii_l // Weak +GO(tolower, iEi) +// _tolower +// __tolower_l +//GOW(tolower_l, iEip) +GO(toupper, iEi) +// _toupper +// __toupper_l +//GOW(toupper_l, iEip) +// towctrans // Weak +// __towctrans +// __towctrans_l +// towctrans_l // Weak +GO(towlower, uEu) +GO(__towlower_l, uEua) +GOW(towlower_l, uEua) +GO(towupper, uEu) +GO(__towupper_l, uEua) +GOW(towupper_l, uEua) +// tr_break +//GOW(truncate, iEpu) +GO(truncate64, iESU) +// tsearch // Weak +//GO(ttyname, pEi) +//GOW(ttyname_r, iEipu) +// __ttyname_r_chk +// ttyslot +// twalk // Weak +//DATAV(tzname, 4) +//DATA(__tzname, 4) +GOWM(tzset, vEv) //%%,noE +// ualarm +//GO(__uflow, iEp) +// ulckpwdf // Weak +// ulimit // Weak +GOW(umask, uEu) +//GOW(umount, iEp) +//GOW(umount2, iEpi) +GOWM(uname, iEp) //%%,noE +//GO(__underflow, iEp) +GOW(ungetc, iEiS) +GO(ungetwc, uEuS) +GOW(unlink, iEp) +GO(unlinkat, iEipi) +GO(unlockpt, iEi) +GOW(unsetenv, iEp) +// unshare +//GOW(updwtmp, vEpp) +// updwtmpx +// uselib +GOW(uselocale, aEa) +GO(__uselocale, aEa) +// user2netname +GO(usleep, iEu) +// ustat +GO(utime, iEprll_) +GOM(utimensat, iEippi) //%noE +GOWM(utimes, iEEpp) +//GOW(utmpname, iEp) +// utmpxname +GOW(valloc, pEL) +GOM(vasprintf, iEEppp) //%% +GOM(__vasprintf_chk, iEEpipp) //%% +// vdprintf // Weak +// __vdprintf_chk +//GOM(verr, vEEpV) //%% +// verrx +//GO(versionsort, iEpp) +//GO(versionsort64, iEpp) //need to align dirent64? +GOWM(vfork, iEEv) //%% +// __vfork +GOM(vfprintf, iEESpp) //%% +GOM(__vfprintf_chk, iEESvpp) //%% +//GOWM(vfscanf, iEEppp) //%% +// __vfscanf +//GOWM(vfwprintf, iEEppp) //%% +//GO2(__vfwprintf_chk, iEEpvpp, my_vfwprintf) +//GOW(vfwscanf, iEppp) +// vhangup +// vlimit +// vmsplice +GOM(vprintf, iEEpp) //%% +GOM(__vprintf_chk, iEEvpp) //%% +// vscanf // Weak +GOWM(vsnprintf, iEEpLpp) //%% +GOWM(__vsnprintf, iEEpLpp) //%% +GOM(__vsnprintf_chk, iEEpLvvpp) //%% +GOWM(vsprintf, iEEppp) //%% +GOM(__vsprintf_chk, iEEpiLpp) //%% +//GOM(vsscanf, iEEppp) //%% +// __vsscanf // Weak +GOWM(vswprintf, iEEpLpp) //%% +GOWM(__vswprintf, iEEpLpp) //%% +GOWM(__vswprintf_chk, iEEpLiLppp) //%% +GOM(vswscanf, iEEppp) +GOM(vsyslog, vEEipp) +GOM(__vsyslog_chk, vEEiipp) +// vtimes +//GOM(vwarn, vEEppp) //%% +// vwarnx +//GOM(vwprintf, iEEpp) //%% +//GO2(__vwprintf_chk, iEEvpp, my_vwprintf) +//GO(vwscanf, iEpp) +GOW(wait, iEp) +//GOW(__wait, iEp) +//GOW(wait3, iEpip) +//GOW(wait4, iEipip) +GOW(waitid, iEuupi) // might need to wrap "p", it's a siginfo_t * +GOW(waitpid, iEipi) +GOW(__waitpid, lElpi) +//GO(warn, vEppppppppp) +//GO(warnx, vEppppppppp) +//GOW(wcpcpy, pEpp) +// __wcpcpy_chk +//GOW(wcpncpy, pEpp) +// __wcpncpy_chk +GOW(wcrtomb, LEpip) +// __wcrtomb_chk +GOW(wcscasecmp, iEpp) +// __wcscasecmp_l +//GOW(wcscasecmp_l, iEppp) +GOW(wcscat, pEpp) +GO(__wcscat_chk, pEppL) +GO(wcschr, pEpi) +// wcschrnul // Weak +GO(wcscmp, iEpp) +GOW(wcscoll, iEpp) +GO(__wcscoll_l, iEppa) +GOW(wcscoll_l, iEppa) +GO(wcscpy, pEpp) +GO(__wcscpy_chk, pEppL) +//GO(wcscspn, uEpp) +GO(wcsdup, pEp) +//GO(wcsftime, LEpLpp) +GO(__wcsftime_l, LEpLppa) +GOW(wcsftime_l, LEpLppa) +GOW(wcslen, LEp) +GOW(wcsncasecmp, iEppL) +// __wcsncasecmp_l +//GOW(wcsncasecmp_l, iEppup) +GO(wcsncat, pEppL) +GO(__wcsncat_chk, pEppLL) +GO(wcsncmp, iEppL) +GOW(wcsncpy, pEppL) +GO(__wcsncpy_chk, pEppLL) +GOW(wcsnlen, LEpL) +GOW(wcsnrtombs, LEpBp_LLp) +// __wcsnrtombs_chk +//GO(wcspbrk, pEpp) +GO(wcsrchr, pEpi) +//GOW(wcsrtombs, uEppup) +// __wcsrtombs_chk +//GO(wcsspn, uEpp) +GO(wcsstr, pEpp) +GO(wcstod, dEpBp_) +//GO(__wcstod_internal, dEppi) +// __wcstod_l +// wcstod_l // Weak +GO(wcstof, fEpBp_) +// __wcstof_internal +// __wcstof_l +// wcstof_l // Weak +// wcstoimax +GO(wcstok, pEppBp_) +GOM(wcstol, lEpBp_i) //%noE +//GO(wcstold, DEpp) +// __wcstold_internal +// __wcstold_l +// wcstold_l // Weak +//GO(__wcstol_internal, iEppii) +GO(wcstoll, IEpBp_i) +// __wcstol_l +// wcstol_l // Weak +// __wcstoll_internal +// __wcstoll_l +// wcstoll_l // Weak +GO(wcstombs, LEppL) +// __wcstombs_chk +// wcstoq // Weak +GOM(wcstoul, LEpBp_i) //%noE +//GO(__wcstoul_internal, LEppii) +GO(wcstoull, UEpBp_i) +// __wcstoul_l +// wcstoul_l // Weak +// __wcstoull_internal +// __wcstoull_l +// wcstoull_l // Weak +// wcstoumax +// wcstouq // Weak +// wcswcs // Weak +//GO(wcswidth, iEpu) +//GO(wcsxfrm, uEppu) +//GOW(wcsxfrm_l, uEppup) +GO(__wcsxfrm_l, LEppLa) +GO(wctob, iEu) +//GO(wctomb, iEpi) +//GO(__wctomb_chk, iEpuL) +// wctrans // Weak +// __wctrans_l +// wctrans_l // Weak +//GOW(wctype, uEp) +GO(__wctype_l, hEpa) +GOW(wctype_l, hEpa) +//GO(wcwidth, iEu) +GOW(wmemchr, pEpiL) +GO(wmemcmp, iEppL) +GOW(wmemcpy, pEppL) +GO(__wmemcpy_chk, pEppLL) +GOW(wmemmove, pEppL) +// __wmemmove_chk +// wmempcpy // Weak +// __wmempcpy_chk +GO(wmemset, pEpiL) +// __wmemset_chk +//GO(wordexp, iEppi) +//GO(wordfree, vEp) +// __woverflow +GOM(wprintf, iEEpV) //%% +//GOM(__wprintf_chk, iEEipV) //%% +GOW(write, lEipL) +//GOW(__write, lEipL) +GOWM(writev, lEEipi) +// wscanf +// __wuflow +// __wunderflow +// xdecrypt +// xdr_accepted_reply +// xdr_array +// xdr_authdes_cred +// xdr_authdes_verf +// xdr_authunix_parms +GO(xdr_bool, iEpp) +// xdr_bytes +// xdr_callhdr +// xdr_callmsg +// xdr_char +// xdr_cryptkeyarg +// xdr_cryptkeyarg2 +// xdr_cryptkeyres +// xdr_des_block +// xdr_double +// xdr_enum +// xdr_float +// xdr_free +// xdr_getcredres +// xdr_hyper +GO(xdr_int, iEpp) +// xdr_int16_t +// xdr_int32_t +// xdr_int64_t +// xdr_int8_t +// xdr_keybuf +// xdr_key_netstarg +// xdr_key_netstres +// xdr_keystatus +// xdr_long +// xdr_longlong_t +// xdrmem_create +// xdr_netnamestr +GO(xdr_netobj, iEpbup_) +// xdr_opaque +// xdr_opaque_auth +// xdr_pmap +// xdr_pmaplist +// xdr_pointer +// xdr_quad_t +// xdrrec_create +// xdrrec_endofrecord +// xdrrec_eof +// xdrrec_skiprecord +// xdr_reference +// xdr_rejected_reply +// xdr_replymsg +// xdr_rmtcall_args +// xdr_rmtcallres +// xdr_short +// xdr_sizeof +// xdrstdio_create +// xdr_string +// xdr_u_char +// xdr_u_hyper +GO(xdr_u_int, iEpp) +// xdr_uint16_t +// xdr_uint32_t +// xdr_uint64_t +// xdr_uint8_t +// xdr_u_long +// xdr_u_longlong_t +// xdr_union +// xdr_unixcred +// xdr_u_quad_t +// xdr_u_short +// xdr_vector +GO(xdr_void, iEv) +// xdr_wrapstring +// xencrypt +GO(__xmknod, iEipup) +//GO(__xmknodat, iEiipip) +GO(__xpg_basename, tEp) +// __xpg_sigpause // Weak +GO(__xpg_strerror_r, tEipu) +// xprt_register +// xprt_unregister +GOM(__xstat, iEEipp) //%% +GOM(__xstat64, iEEipp) //%% + +// forcing a custom __gmon_start__ that does nothing +GOM(__gmon_start__, vEEv) //%% + +GOM(_Jv_RegisterClasses, vEv) //%%,noE dummy + +GOM(__fdelt_chk, LEL) //%%,noE + +GOM(getauxval, LEEL) //%% implemented since glibc 2.16 + +//GOM(prlimit64, lEpupp) //%%,noE +GOM(process_vm_readv, lEEipLpLL) +GOM(process_vm_writev, lEEipLpLL) +GOM(reallocarray, pEpLL) //%%,noE +//GOM(__open_nocancel, iEEpOV) //%% +//GO2(__read_nocancel, lEipL, read) +GO2(__close_nocancel, iEi, close) + +//GOM(mkstemps64, iEEpi) //%% not always implemented +//GOM(getentropy, iEEpL) //%% starting from glibc 2.25 + +// not found (libitm???), but it seems OK to declare dummies: + +GOM(_ITM_RU1, uEp) //%%,noE +GOM(_ITM_RU4, uEp) //%%,noE +GOM(_ITM_RU8, UEp) //%%,noE +GOM(_ITM_memcpyRtWn, vEppu) //%%,noE register(2) +GOM(_ITM_memcpyRnWt, vEppu) //%%,noE register(2) +GOM(_ITM_addUserCommitAction, vEEpup) +GOM(_ITM_registerTMCloneTable, vEEpu) //%% +GOM(_ITM_deregisterTMCloneTable, vEEp) //%% + +GOM(__umoddi3, UEUU) //%%,noE +GOM(__udivdi3, UEUU) //%%,noE +GOM(__divdi3, IEII) //%%,noE +//GOM(__poll_chk, iEpuii) //%%,noE + +GO(fallocate64, iEiiII) + +//DATAM(__libc_stack_end, 4) + +//DATAM(___brk_addr, 4) +//DATA(__libc_enable_secure, 4) + +GOM(__register_frame_info, vEpp) //%%,noE faked function +GOM(__deregister_frame_info, pEp) //%%,noE + +GO(name_to_handle_at, iEipppi) // only glibc 2.14+, so may not be present... + +//GOM(modify_ldt, iEEipL) // there is suposedly no glibc wrapper for this one + +#ifdef ANDROID +//GOM(__libc_init, vEEpppp) +GO(__errno, pEv) +#else +// Those symbols don't exist in non-Android builds +//GOM(__libc_init, +//GO(__errno, +#endif + +//GOM(stat, +//GOM(lstat, +//GOM(fstat, +//GO(setprogname, +//GO(getprogname, + +DATAM(__libc_single_threaded, 4) //B type diff --git a/src/wrapped32/wrappedlibdl.c b/src/wrapped32/wrappedlibdl.c new file mode 100755 index 0000000000000000000000000000000000000000..c3a79feb542d06bac96cf4458bfd27c52a482d91 --- /dev/null +++ b/src/wrapped32/wrappedlibdl.c @@ -0,0 +1,165 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "emu/x64emu_private.h" +#include "library.h" +#include "librarian.h" +#include "box32context.h" +#include "elfloader.h" +#include "elfs/elfloader_private.h" +#include "x64emu.h" + + +#define LIBNAME libdl +#ifdef ANDROID + static const char* libdlName = "libdl.so"; +#else + static const char* libdlName = "libdl.so.2"; +#endif + +void* my_dlopen(x64emu_t* emu, void *filename, int flag) EXPORT; +void* my_dlmopen(x64emu_t* emu, void* mlid, void *filename, int flag) EXPORT; +char* my_dlerror(x64emu_t* emu) EXPORT; +void* my_dlsym(x64emu_t* emu, void *handle, void *symbol) EXPORT; +int my_dlclose(x64emu_t* emu, void *handle) EXPORT; +int my32_dladdr(x64emu_t* emu, void *addr, void *info) EXPORT; +int my32_dladdr1(x64emu_t* emu, void *addr, void *info, void** extra_info, int flags) EXPORT; +void* my_dlvsym(x64emu_t* emu, void *handle, void *symbol, const char *vername) EXPORT; +int my32_dlinfo(x64emu_t* emu, void* handle, int request, void* info) EXPORT; + +#ifndef RTLD_DL_SYMENT +#define RTLD_DL_SYMENT 1 +#endif +#ifndef RTLD_DL_LINKMAP +#define RTLD_DL_LINKMAP 2 +#endif + +void dl_clear_error(); +#define CLEARERR dl_clear_error() +void dl_set_error(const char*); +char* dl_last_error(); +library_t* dl_get_library(void* handle); + +typedef struct my_dl_info_32_s +{ + ptr_t dli_fname; // const char* + ptr_t dli_fbase; // void* + ptr_t dli_sname; // const char* + ptr_t dli_saddr; // void* +} my_dl_info_32_t; + +int my32_dladdr1(x64emu_t* emu, void *addr, void *i, void** extra_info, int flags) +{ + //int dladdr(void *addr, my_dl_info_32_t *info); + CLEARERR; + my_dl_info_32_t *info = (my_dl_info_32_t*)i; + printf_log(LOG_DEBUG, "Warning: partially unimplement call to dladdr/dladdr1(%p, %p, %p, %d)\n", addr, info, extra_info, flags); + + //emu->quit = 1; + library_t* lib = NULL; + info->dli_saddr = 0; + info->dli_fname = 0; + void* start = NULL; + const char* fname = NULL; + void* base = NULL; + const char* sname = FindSymbolName(my_context->maplib, addr, &start, NULL, &fname, &base, &lib); + info->dli_saddr = to_ptrv(start); + info->dli_fname = to_ptrv((void*)fname); + info->dli_fbase = to_ptrv(base); + info->dli_sname = to_ptrv((void*)sname); + printf_log(LOG_DEBUG, " dladdr return saddr=%p, fname=\"%s\", sname=\"%s\"\n", start, sname?sname:"", fname?fname:""); + if(flags==RTLD_DL_SYMENT) { + printf_log(LOG_INFO, "Warning, unimplement call to dladdr1 with RTLD_DL_SYMENT flags\n"); + } else if (flags==RTLD_DL_LINKMAP) { + printf_log(LOG_INFO, "Warning, unimplemented call to dladdr1 with RTLD_DL_LINKMAP flags\n"); + *(ptr_t*)extra_info = to_ptrv(getLinkMapLib32(lib)); + } + return (info->dli_sname)?1:0; // success is non-null here... +} +int my32_dladdr(x64emu_t* emu, void *addr, void *i) +{ + return my32_dladdr1(emu, addr, i, NULL, 0); +} + +int my32_dlinfo(x64emu_t* emu, void* handle, int request, void* info) +{ + (void)emu; + printf_dlsym(LOG_DEBUG, "Call to dlinfo(%p, %d, %p)\n", handle, request, info); + CLEARERR; + library_t *lib = dl_get_library(handle); + if(lib==(library_t*)-1LL) { + printf_dlsym(LOG_DEBUG, "dlinfo: %s\n", dl_last_error()); + return -1; + } + //elfheader_t *h = (GetElfIndex(lib)>-1)?my_context->elfs[GetElfIndex(lib)]:NULL; + switch(request) { + case 2: // RTLD_DI_LINKMAP + { + *(linkmap32_t**)info = getLinkMapLib32(lib); + } + return 0; + default: + printf_log(LOG_NONE, "Warning, unsupported call to dlinfo(%p, %d, %p)\n", handle, request, info); + { + char tmp[129] = {0}; + snprintf(tmp, 129, "unsupported call to dlinfo request:%d\n", request); + dl_set_error(tmp); + } + } + return -1; +} + +typedef struct my_dl_find_object_s { + uint64_t dlfo_flags; + ptr_t dlfo_map_start; + ptr_t dlfo_map_end; + ptr_t dlf_link_map; //struct link_map * + ptr_t dlfo_eh_frame; + // other stuff... +} my_dl_find_object_t; + +EXPORT int my32__dl_find_object(x64emu_t* emu, void* addr, my_dl_find_object_t* result) +{ + //printf_log(LOG_INFO, "Unimplemented _dl_find_object called\n"); + uintptr_t start=0, sz=0; + elfheader_t* h = FindElfAddress(my_context, (uintptr_t)addr); + if(h) { + // find an actual elf + const char* name = FindNearestSymbolName(h, addr, &start, &sz); + result->dlfo_map_start = start; + result->dlfo_map_end = start+sz-1; + result->dlfo_eh_frame = h->ehframehdr+h->delta; + result->dlfo_flags = 0; // unused it seems + result->dlf_link_map = to_ptrv(getLinkMapElf32(h)); + return 0; + } + return -1; +} + +//#define CUSTOM_INIT\ +// if(!box32_isglibc234) setNeededLibs(lib, 1, "libc.so.6"); + + +void closeAllDLOpenned(); + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#define CUSTOM_FINI \ + closeAllDLOpenned(); + +// define all standard library functions +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibdl_private.h b/src/wrapped32/wrappedlibdl_private.h new file mode 100755 index 0000000000000000000000000000000000000000..168895d31f4bdd6584c359647e4102a9541975ff --- /dev/null +++ b/src/wrapped32/wrappedlibdl_private.h @@ -0,0 +1,15 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA) && defined(GOS)) +#error Meh... +#endif + +GOM(dladdr, iEEpp) +GOM(dladdr1, iEEpppi) +GO2(dlclose, iEEp, my_dlclose) +GO2(dlerror, pEEv, my_dlerror) +//DATAB(_dlfcn_hook, 4) +GOM(dlinfo, iEEpip) +GO2(dlmopen, pEEppi, my_dlmopen) +GO2(dlopen, pEEpi, my_dlopen) +GO2(dlsym, pEEpp, my_dlsym) +GO2(dlvsym, pEEppp, my_dlvsym) // Weak +GOM(_dl_find_object, iEEpp) diff --git a/src/wrapped32/wrappedlibgl.c b/src/wrapped32/wrappedlibgl.c new file mode 100644 index 0000000000000000000000000000000000000000..25d9ac000262329d7035f92aa99e7c5eec0bcb25 --- /dev/null +++ b/src/wrapped32/wrappedlibgl.c @@ -0,0 +1,1208 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "box32context.h" +#include "librarian.h" +#include "callback.h" +#include "gltools.h" +#include "libtools/my_x11_conv.h" + +extern const char* libglName; +#define LIBNAME libgl + +#include "generated/wrappedlibgltypes32.h" + +#include "wrappercallback32.h" + +void* getDisplay(void* d); // define in 32bits wrappedx11.c + +// FIXME: old wrapped* type of file, cannot use generated/wrappedlibgltypes.h +void* getGLProcAddress32(x64emu_t* emu, glprocaddress_t procaddr, const char* rname); +EXPORT void* my32_glXGetProcAddress(x64emu_t* emu, void* name) +{ + khint_t k; + const char* rname = (const char*)name; + return getGLProcAddress32(emu, my_lib->w.priv, rname); +} +EXPORT void* my32_glXGetProcAddressARB(x64emu_t* emu, void* name) __attribute__((alias("my32_glXGetProcAddress"))); + +typedef int (*iFi_t)(int); +typedef void (*vFpp_t)(void*, void*); +typedef void*(*pFpp_t)(void*, void*); +typedef void (*vFip_t)(int, void*); +typedef void (*vFppp_t)(void*, void*, void*); +typedef void (*vFppi_t)(void*, void*, int); +typedef void*(*pFpip_t)(void*, int, void*); +typedef void (*vFuip_t)(uint32_t, int, void*); +typedef void*(*pFp_t)(void*); +typedef void (*vFuipp_t)(uint32_t, int, void*, void*); +typedef void*(*pFpipp_t)(void*, int, void*, void*); +typedef void*(*pFpppi_t)(void*, void*, void*, int); +typedef void (*vFuipu_t)(uint32_t, int, void*, uint32_t); +typedef void (*vFupupi_t)(uint32_t, void*, uint32_t, void*, int); +typedef void (*vFuippp_t)(uint32_t, int, void*, void*, void*); +typedef void (*vFuuippp_t)(uint32_t, uint32_t, int, void*, void*, void*); +typedef void (*vFupupip_t)(uint32_t, void*, uint32_t, void*, int, void*); +typedef void (*debugProc_t)(int32_t, int32_t, uint32_t, int32_t, int32_t, void*, void*); + +typedef struct gl_wrappers_s { + glprocaddress_t procaddress; + kh_symbolmap_t *glwrappers; // the map of wrapper for glProcs (for GLX or SDL1/2) + kh_symbolmap_t *glmymap; // link to the mysymbolmap of libGL +} gl_wrappers_t; + +KHASH_MAP_INIT_INT64(gl_wrappers, gl_wrappers_t*) + +static kh_gl_wrappers_t *gl_wrappers = NULL; + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// debug_callback ... +#define GO(A) \ +static uintptr_t my_debug_callback_fct_##A = 0; \ +static void my_debug_callback_##A(int32_t a, int32_t b, uint32_t c, int32_t d, int32_t e, const char* f, const void* g) \ +{ \ + RunFunctionFmt(my_debug_callback_fct_##A, "iiuiipp", a, b, c, d, e, f, g); \ +} +SUPER() +#undef GO +static void* find_debug_callback_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_debug_callback_fct_##A == (uintptr_t)fct) return my_debug_callback_##A; + SUPER() + #undef GO + #define GO(A) if(my_debug_callback_fct_##A == 0) {my_debug_callback_fct_##A = (uintptr_t)fct; return my_debug_callback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL debug_callback callback\n"); + return NULL; +} +// egl_debug_callback ... +#define GO(A) \ +static uintptr_t my_egl_debug_callback_fct_##A = 0; \ + static void my_egl_debug_callback_##A(int a, void* b, int c, void* d, void* e, const char* f) \ +{ \ + RunFunctionFmt(my_egl_debug_callback_fct_##A, "ipippp", a, b, c, d, e, f); \ +} +SUPER() +#undef GO +static void* find_egl_debug_callback_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_egl_debug_callback_fct_##A == (uintptr_t)fct) return my_egl_debug_callback_##A; + SUPER() + #undef GO + #define GO(A) if(my_egl_debug_callback_fct_##A == 0) {my_egl_debug_callback_fct_##A = (uintptr_t)fct; return my_egl_debug_callback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL egl_debug_callback callback\n"); + return NULL; +} +// program_callback ... +#define GO(A) \ +static uintptr_t my_program_callback_fct_##A = 0; \ +static void my_program_callback_##A(int32_t a, void* b) \ +{ \ + RunFunctionFmt(my_program_callback_fct_##A, "ip", a, b); \ +} +SUPER() +#undef GO +static void* find_program_callback_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_program_callback_fct_##A == (uintptr_t)fct) return my_program_callback_##A; + SUPER() + #undef GO + #define GO(A) if(my_program_callback_fct_##A == 0) {my_program_callback_fct_##A = (uintptr_t)fct; return my_program_callback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL program_callback callback\n"); + return NULL; +} +// set_blob_func ... +#define GO(A) \ +static uintptr_t my_set_blob_func_fct_##A = 0; \ +static void my_set_blob_func_##A(void* a, ssize_t b, void* c, ssize_t d) \ +{ \ + RunFunctionFmt(my_set_blob_func_fct_##A, "plpl", a, b, c, d); \ +} +SUPER() +#undef GO +static void* find_set_blob_func_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_set_blob_func_fct_##A == (uintptr_t)fct) return my_set_blob_func_##A; + SUPER() + #undef GO + #define GO(A) if(my_set_blob_func_fct_##A == 0) {my_set_blob_func_fct_##A = (uintptr_t)fct; return my_set_blob_func_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL set_blob_func callback\n"); + return NULL; +} +// get_blob_func ... +#define GO(A) \ +static uintptr_t my_get_blob_func_fct_##A = 0; \ +static ssize_t my_get_blob_func_##A(void* a, ssize_t b, void* c, ssize_t d) \ +{ \ + return (ssize_t)RunFunctionFmt(my_get_blob_func_fct_##A, "plpl", a, b, c, d); \ +} +SUPER() +#undef GO +static void* find_get_blob_func_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_get_blob_func_fct_##A == (uintptr_t)fct) return my_get_blob_func_##A; + SUPER() + #undef GO + #define GO(A) if(my_get_blob_func_fct_##A == 0) {my_get_blob_func_fct_##A = (uintptr_t)fct; return my_get_blob_func_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL get_blob_func callback\n"); + return NULL; +} + +// glDebugMessageCallback ... +#define GO(A) \ +static vFpp_t my32_glDebugMessageCallback_fct_##A = NULL; \ +static void my32_glDebugMessageCallback_##A(x64emu_t* emu, void* prod, void* param) \ +{ \ + if(!my32_glDebugMessageCallback_fct_##A) \ + return; \ + my32_glDebugMessageCallback_fct_##A(find_debug_callback_Fct(prod), param); \ +} +SUPER() +#undef GO +static void* find_glDebugMessageCallback_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(my32_glDebugMessageCallback_fct_##A == (vFpp_t)fct) return my32_glDebugMessageCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glDebugMessageCallback_fct_##A == 0) {my32_glDebugMessageCallback_fct_##A = (vFpp_t)fct; return my32_glDebugMessageCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL glDebugMessageCallback callback\n"); + return NULL; +} +// glDebugMessageCallbackARB ... +#define GO(A) \ +static vFpp_t my32_glDebugMessageCallbackARB_fct_##A = NULL; \ +static void my32_glDebugMessageCallbackARB_##A(x64emu_t* emu, void* prod, void* param) \ +{ \ + if(!my32_glDebugMessageCallbackARB_fct_##A) \ + return; \ + my32_glDebugMessageCallbackARB_fct_##A(find_debug_callback_Fct(prod), param); \ +} +SUPER() +#undef GO +static void* find_glDebugMessageCallbackARB_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(my32_glDebugMessageCallbackARB_fct_##A == (vFpp_t)fct) return my32_glDebugMessageCallbackARB_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glDebugMessageCallbackARB_fct_##A == 0) {my32_glDebugMessageCallbackARB_fct_##A = (vFpp_t)fct; return my32_glDebugMessageCallbackARB_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL glDebugMessageCallbackARB callback\n"); + return NULL; +} +// glDebugMessageCallbackAMD ... +#define GO(A) \ +static vFpp_t my32_glDebugMessageCallbackAMD_fct_##A = NULL; \ +static void my32_glDebugMessageCallbackAMD_##A(x64emu_t* emu, void* prod, void* param) \ +{ \ + if(!my32_glDebugMessageCallbackAMD_fct_##A) \ + return; \ + my32_glDebugMessageCallbackAMD_fct_##A(find_debug_callback_Fct(prod), param); \ +} +SUPER() +#undef GO +static void* find_glDebugMessageCallbackAMD_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(my32_glDebugMessageCallbackAMD_fct_##A == (vFpp_t)fct) return my32_glDebugMessageCallbackAMD_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glDebugMessageCallbackAMD_fct_##A == 0) {my32_glDebugMessageCallbackAMD_fct_##A = (vFpp_t)fct; return my32_glDebugMessageCallbackAMD_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL glDebugMessageCallbackAMD callback\n"); + return NULL; +} +// glDebugMessageCallbackKHR ... +#define GO(A) \ +static vFpp_t my32_glDebugMessageCallbackKHR_fct_##A = NULL; \ +static void my32_glDebugMessageCallbackKHR_##A(x64emu_t* emu, void* prod, void* param) \ +{ \ + if(!my32_glDebugMessageCallbackKHR_fct_##A) \ + return; \ + my32_glDebugMessageCallbackKHR_fct_##A(find_debug_callback_Fct(prod), param); \ +} +SUPER() +#undef GO +static void* find_glDebugMessageCallbackKHR_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(my32_glDebugMessageCallbackKHR_fct_##A == (vFpp_t)fct) return my32_glDebugMessageCallbackKHR_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glDebugMessageCallbackKHR_fct_##A == 0) {my32_glDebugMessageCallbackKHR_fct_##A = (vFpp_t)fct; return my32_glDebugMessageCallbackKHR_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL glDebugMessageCallbackKHR callback\n"); + return NULL; +} +// eglDebugMessageControlKHR ... +#define GO(A) \ +static vFpp_t my_eglDebugMessageControlKHR_fct_##A = NULL; \ +static void my_eglDebugMessageControlKHR_##A(x64emu_t* emu, void* prod, void* param) \ +{ \ + if(!my_eglDebugMessageControlKHR_fct_##A) \ + return; \ + my_eglDebugMessageControlKHR_fct_##A(find_egl_debug_callback_Fct(prod), param); \ +} +SUPER() +#undef GO +static void* find_eglDebugMessageControlKHR_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(my_eglDebugMessageControlKHR_fct_##A == (vFpp_t)fct) return my_eglDebugMessageControlKHR_##A; + SUPER() + #undef GO + #define GO(A) if(my_eglDebugMessageControlKHR_fct_##A == 0) {my_eglDebugMessageControlKHR_fct_##A = (vFpp_t)fct; return my_eglDebugMessageControlKHR_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL eglDebugMessageControlKHR callback\n"); + return NULL; +} +// eglSetBlobCacheFuncsANDROID ... +#define GO(A) \ +static vFppp_t my_eglSetBlobCacheFuncsANDROID_fct_##A = NULL; \ +static void my_eglSetBlobCacheFuncsANDROID_##A(x64emu_t* emu, void* dpy, void* set, void* get) \ +{ \ + if(!my_eglSetBlobCacheFuncsANDROID_fct_##A) \ + return; \ + my_eglSetBlobCacheFuncsANDROID_fct_##A(dpy, find_set_blob_func_Fct(set), find_get_blob_func_Fct(get)); \ +} +SUPER() +#undef GO +static void* find_eglSetBlobCacheFuncsANDROID_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(my_eglSetBlobCacheFuncsANDROID_fct_##A == (vFppp_t)fct) return my_eglSetBlobCacheFuncsANDROID_##A; + SUPER() + #undef GO + #define GO(A) if(my_eglSetBlobCacheFuncsANDROID_fct_##A == 0) {my_eglSetBlobCacheFuncsANDROID_fct_##A = (vFppp_t)fct; return my_eglSetBlobCacheFuncsANDROID_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL eglSetBlobCacheFuncsANDROID callback\n"); + return NULL; +} +// glXSwapIntervalMESA ... +#define GO(A) \ +static iFi_t my32_glXSwapIntervalMESA_fct_##A = NULL; \ +static int my32_glXSwapIntervalMESA_##A(int interval) \ +{ \ + if(!my32_glXSwapIntervalMESA_fct_##A) \ + return 0; \ + return my32_glXSwapIntervalMESA_fct_##A(interval); \ +} +SUPER() +#undef GO + +static int my_dummy32_glXSwapIntervalMESA(int interval) +{ + return 5; // GLX_BAD_CONTEXT +} + +static void* find_glXSwapIntervalMESA_Fct(void* fct) +{ + if(!fct) return my_dummy32_glXSwapIntervalMESA; + #define GO(A) if(my32_glXSwapIntervalMESA_fct_##A == (iFi_t)fct) return my32_glXSwapIntervalMESA_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glXSwapIntervalMESA_fct_##A == 0) {my32_glXSwapIntervalMESA_fct_##A = (iFi_t)fct; return my32_glXSwapIntervalMESA_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL glXSwapIntervalMESA callback\n"); + return NULL; +} + +// glXSwapIntervalEXT ... +#define GO(A) \ +static vFppi_t my32_glXSwapIntervalEXT_fct_##A = NULL; \ +static void my32_glXSwapIntervalEXT_##A(void* dpy, void* drawable, int interval) \ +{ \ + if (!my32_glXSwapIntervalEXT_fct_##A) \ + return; \ + my32_glXSwapIntervalEXT_fct_##A(dpy, drawable, interval); \ +} +SUPER() +#undef GO + +static void my_dummy32_glXSwapIntervalEXT(void* dpy, void* drawable, int interval) {} + +static void* find_glXSwapIntervalEXT_Fct(void* fct) +{ + if(!fct) return my_dummy32_glXSwapIntervalEXT; + #define GO(A) if(my32_glXSwapIntervalEXT_fct_##A == (vFppi_t)fct) return my32_glXSwapIntervalEXT_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glXSwapIntervalEXT_fct_##A == 0) {my32_glXSwapIntervalEXT_fct_##A = (vFppi_t)fct; return my32_glXSwapIntervalEXT_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL glXSwapIntervalEXT callback\n"); + return NULL; +} + +// glProgramCallbackMESA ... +#define GO(A) \ +static vFpp_t my32_glProgramCallbackMESA_fct_##A = NULL; \ +static void my32_glProgramCallbackMESA_##A(x64emu_t* emu, void* f, void* data)\ +{ \ + if(!my32_glProgramCallbackMESA_fct_##A) \ + return; \ + my32_glProgramCallbackMESA_fct_##A(find_program_callback_Fct(f), data); \ +} +SUPER() +#undef GO +static void* find_glProgramCallbackMESA_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(my32_glProgramCallbackMESA_fct_##A == (vFpp_t)fct) return my32_glProgramCallbackMESA_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glProgramCallbackMESA_fct_##A == 0) {my32_glProgramCallbackMESA_fct_##A = (vFpp_t)fct; return my32_glProgramCallbackMESA_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL glProgramCallbackMESA callback\n"); + return NULL; +} +void* my_GetVkProcAddr(x64emu_t* emu, void* name, void*(*getaddr)(void*)); // defined in wrappedvulkan.c +// glGetVkProcAddrNV ... +#define GO(A) \ +static pFp_t my32_glGetVkProcAddrNV_fct_##A = NULL; \ +static void* my32_glGetVkProcAddrNV_##A(x64emu_t* emu, void* name) \ +{ \ + if(!my32_glGetVkProcAddrNV_fct_##A) \ + return NULL; \ + return my_GetVkProcAddr(emu, name, my32_glGetVkProcAddrNV_fct_##A); \ +} +SUPER() +#undef GO +static void* find_glGetVkProcAddrNV_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(my32_glGetVkProcAddrNV_fct_##A == (pFp_t)fct) return my32_glGetVkProcAddrNV_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glGetVkProcAddrNV_fct_##A == 0) {my32_glGetVkProcAddrNV_fct_##A = (pFp_t)fct; return my32_glGetVkProcAddrNV_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL glGetVkProcAddrNV callback\n"); + return NULL; +} +// glShaderSource ... +#define GO(A) \ +static vFuipp_t my32_glShaderSource_fct_##A = NULL; \ +static void my32_glShaderSource_##A(x64emu_t* emu, uint32_t shader, int count, ptr_t* string, int* length) \ +{ \ + if(!my32_glShaderSource_fct_##A) \ + return; \ + char* str[count]; \ + if(string) for(int i=0; iw.lib = dlopen(box64_libGL, RTLD_LAZY | RTLD_GLOBAL); \ + lib->path = strdup(box64_libGL); \ + } else if(strstr(lib->name, "libGLX_nvidia.so.0")) { \ + lib->w.lib = dlopen("libGLX_nvidia.so.0", RTLD_LAZY | RTLD_GLOBAL); \ + if(lib->w.lib) lib->path = strdup("libGLX_nvidia.so.0"); \ + } +#define CUSTOM_INIT \ + my_lib = lib; \ + lib->w.priv = dlsym(lib->w.lib, "glXGetProcAddress"); \ + void* symb = dlsym(lib->w.lib, "glDebugMessageCallback"); \ + if(symb) { \ + k = kh_get(symbolmap, lib->w.mysymbolmap, "glDebugMessageCallback"); \ + symbol1_t *s = &kh_value(lib->w.mysymbolmap, k); \ + s->resolved = 1; \ + s->addr = AddBridge(lib->w.bridge, s->w, find_glDebugMessageCallback_Fct(symb), 0, "glDebugMessageCallback"); \ + } \ + symb = dlsym(lib->w.lib, "glXSwapIntervalMESA"); \ + if(symb) { \ + k = kh_get(symbolmap, lib->w.mysymbolmap, "glXSwapIntervalMESA"); \ + symbol1_t *s = &kh_value(lib->w.mysymbolmap, k); \ + s->resolved = 1; \ + s->addr = AddBridge(lib->w.bridge, s->w, find_glXSwapIntervalMESA_Fct(symb), 0, "glXSwapIntervalMESA"); \ + } \ + symb = dlsym(lib->w.lib, "glXSwapIntervalEXT"); \ + if(symb) { \ + k = kh_get(symbolmap, lib->w.mysymbolmap, "glXSwapIntervalEXT"); \ + symbol1_t *s = &kh_value(lib->w.mysymbolmap, k); \ + s->resolved = 1; \ + s->addr = AddBridge(lib->w.bridge, s->w, find_glXSwapIntervalEXT_Fct(symb), 0, "glXSwapIntervalEXT"); \ + } \ + +// creating function for direct access, just in case +EXPORT void my32_glShaderSource(x64emu_t* emu, uint32_t shader, int count, ptr_t* string, int* length) +{ + char* str[count]; + if(string) for(int i=0; iglShaderSource(shader, count, string?str:NULL, length); +} +EXPORT void my32_glShaderSourceARB(x64emu_t* emu, uint32_t shader, int count, ptr_t* string, int* length) +{ + my32_glShaderSource(emu, shader, count, string, length); +} + +EXPORT void* my32_glXChooseFBConfig(x64emu_t* emu, void* dpy, int screen, int* list, int* nelement) +{ + void** res = my->glXChooseFBConfig(dpy, screen, list, nelement); + if(!res) + return NULL; + ptr_t *fbconfig = (ptr_t*)res; + for(int i=0; i<*nelement; ++i) + fbconfig[i] = to_ptrv(res[i]); + return res; +} + +EXPORT void* my32_glXGetVisualFromFBConfig(x64emu_t* emu, void* dpy, void* config) +{ + void* res = my->glXGetVisualFromFBConfig(dpy, config); + if(!res) return NULL; + my_XVisualInfo_32_t* vinfo = (my_XVisualInfo_32_t*)res; + convert_XVisualInfo_to_32(dpy, vinfo, res); + return vinfo; +} + +EXPORT void* my32_glXChooseVisual(x64emu_t* emu, void* dpy, int screen, int* attr) +{ + void* res = my->glXChooseVisual(dpy, screen, attr); + if(!res) return NULL; + my_XVisualInfo_32_t* vinfo = (my_XVisualInfo_32_t*)res; + convert_XVisualInfo_to_32(dpy, vinfo, res); + return vinfo; +} + +EXPORT void* my32_glXCreateContext(x64emu_t* emu, void* dpy, my_XVisualInfo_32_t* info, void* shared, int direct) +{ + my_XVisualInfo_t info_l = {0}; + convert_XVisualInfo_to_64(dpy, &info_l, info); + return my->glXCreateContext(dpy, &info_l, shared, direct); +} + +EXPORT void my32_glMultiDrawElements(x64emu_t* emu, uint32_t mode, void* count, uint32_t type, ptr_t* indices, int drawcount) +{ + void* indices_l[drawcount]; + for(int i=0; iglMultiDrawElements(mode, count, type, indices_l, drawcount); +} +EXPORT void my32_glMultiDrawElementsExt(x64emu_t* emu, uint32_t mode, void* count, uint32_t type, ptr_t* indices, int drawcount) +{ + my32_glMultiDrawElements(emu, mode, count, type, indices, drawcount); +} + +EXPORT void my32_glTransformFeedbackVaryings(x64emu_t* emu, uint32_t prog, int count, ptr_t* varyings, uint32_t mode) +{ + void* varyings_l[count]; + for(int i=0; iglTransformFeedbackVaryings(prog, count, varyings_l, mode); +} +EXPORT void my32_glTransformFeedbackVaryingsEXT(x64emu_t* emu, uint32_t prog, int count, ptr_t* varyings, uint32_t mode) +{ + my32_glTransformFeedbackVaryings(emu, prog, count, varyings, mode); +} + +EXPORT void my32_glBindBuffersRange(x64emu_t* emu, uint32_t target, uint32_t first, int count, void* buffers, long_t* offsets, long_t* sizes) +{ + long offsets_l[count]; + long sizes_l[count]; + for(int i=0; iglBindBuffersRange(target, first, count, buffers, offsets_l, sizes_l); +} + +EXPORT void my32_glBindVertexBuffers(x64emu_t* emu, uint32_t first, int count, void* buffers, long_t* offsets, void* strides) +{ + long offsets_l[count]; + for(int i=0; iglBindVertexBuffers(first, count, buffers, offsets_l, strides); +} + +EXPORT void my32_glVertexArrayVertexBuffers(x64emu_t* emu, uint32_t vaobj, uint32_t first, int count, void* buffers, long_t* offsets, void* strides) +{ + long offsets_l[count]; + for(int i=0; iglVertexArrayVertexBuffers(vaobj, first, count, buffers, offsets_l, strides); +} + +EXPORT void my32_glMultiDrawElementsBaseVertex(x64emu_t* emu, uint32_t mode, void* count, uint32_t type, ptr_t* indices, int drawcount, void* basevertex) +{ + void* indices_l[drawcount]; + for(int i=0; iglMultiDrawElementsBaseVertex(mode, count, type, indices_l, drawcount, basevertex); +} + +EXPORT void my32_glCreateShaderProgramv(x64emu_t* emu, uint32_t shader, int count, ptr_t* string) +{ + char* str[count]; + if(string) for(int i=0; iglCreateShaderProgramv(shader, count, string?str:NULL); +} + +EXPORT void my32_glCompileShaderIncludeARB(x64emu_t* emu, uint32_t shader, int count, ptr_t* string, int* length) +{ + char* str[count]; + if(string) for(int i=0; iglCompileShaderIncludeARB(shader, count, string?str:NULL, length); +} + +EXPORT void* my32_glXGetFBConfigs(x64emu_t* emu, void* dpy, int screen, int* n) +{ + void* ret = my->glXGetFBConfigs(dpy, screen, n); + if(!ret) return NULL; + ptr_t* dst = ret; + void** src = ret; + for(int i=0; i<*n; ++i) + dst[i] = to_ptrv(src[i]); + return ret; +} + +EXPORT void my32_glGetUniformIndices(x64emu_t* emu, uint32_t prog, int count, ptr_t* names, void* indices) +{ + void* names_l[count]; + my->glGetUniformIndices(prog, count, names?names_l:NULL, indices); + if(names) + for(int i=0; iprocaddress = procaddress; + wrappers->glwrappers = kh_init(symbolmap); + // populates maps... + cnt = sizeof(libglsymbolmap)/sizeof(map_onesymbol_t); + for (int i=0; iglwrappers, libglsymbolmap[i].name, &ret); + kh_value(wrappers->glwrappers, k).w = libglsymbolmap[i].w; + kh_value(wrappers->glwrappers, k).resolved = 0; + } + // and the my_ symbols map + cnt = sizeof(MAPNAME(mysymbolmap))/sizeof(map_onesymbol_t); + for (int i=0; iglwrappers, libglmysymbolmap[i].name, &ret); + kh_value(wrappers->glwrappers, k).w = libglmysymbolmap[i].w; + kh_value(wrappers->glwrappers, k).resolved = 0; + } + // my_* map + wrappers->glmymap = kh_init(symbolmap); + cnt = sizeof(MAPNAME(mysymbolmap))/sizeof(map_onesymbol_t); + for (int i=0; iglmymap, libglmysymbolmap[i].name, &ret); + kh_value(wrappers->glmymap, k).w = libglmysymbolmap[i].w; + kh_value(wrappers->glmymap, k).resolved = 0; + } + return wrappers; +} + +void* getGLProcAddress32(x64emu_t* emu, glprocaddress_t procaddr, const char* rname) +{ + khint_t k; + printf_dlsym(LOG_DEBUG, "Calling getGLProcAddress32[%p](\"%s\") => ", procaddr, rname); + gl_wrappers_t* wrappers = getGLProcWrapper32(emu->context, procaddr); + // check if glxprocaddress is filled, and search for lib and fill it if needed + // get proc adress using actual glXGetProcAddress + k = kh_get(symbolmap, wrappers->glmymap, rname); + int is_my = (k==kh_end(wrappers->glmymap))?0:1; + void* symbol; + if(is_my) { + // try again, by using custom "my_" now... + #define GO(A, B) else if(!strcmp(rname, #B)) symbol = find_##B##_Fct(procaddr(rname)); + if(0) {} + SUPER() + else { + if(strcmp(rname, "glXGetProcAddress") && strcmp(rname, "glXGetProcAddressARB")) { + printf_log(LOG_NONE, "Warning, %s defined as GOM, but find_%s_Fct not defined\n", rname, rname); + } + char tmp[200]; + strcpy(tmp, "my_"); + strcat(tmp, rname); + symbol = dlsym(emu->context->box64lib, tmp); + } + #undef GO + #undef SUPER + } else + symbol = procaddr(rname); + if(!symbol) { + printf_dlsym(LOG_DEBUG, "%p\n", NULL); + return NULL; // easy + } + // check if alread bridged + uintptr_t ret = CheckBridged(emu->context->system, symbol); + if(ret) { + printf_dlsym(LOG_DEBUG, "%p\n", (void*)ret); + return (void*)ret; // already bridged + } + // get wrapper + k = kh_get(symbolmap, wrappers->glwrappers, rname); + if(k==kh_end(wrappers->glwrappers) && strstr(rname, "ARB")==NULL) { + // try again, adding ARB at the end if not present + char tmp[200]; + strcpy(tmp, rname); + strcat(tmp, "ARB"); + k = kh_get(symbolmap, wrappers->glwrappers, tmp); + } + if(k==kh_end(wrappers->glwrappers) && strstr(rname, "EXT")==NULL) { + // try again, adding EXT at the end if not present + char tmp[200]; + strcpy(tmp, rname); + strcat(tmp, "EXT"); + k = kh_get(symbolmap, wrappers->glwrappers, tmp); + } + if(k==kh_end(wrappers->glwrappers)) { + printf_dlsym(LOG_DEBUG, "%p\n", NULL); + printf_dlsym(LOG_INFO, "Warning, no wrapper for %s\n", rname); + return NULL; + } + symbol1_t* s = &kh_value(wrappers->glwrappers, k); + if(!s->resolved) { + const char* constname = kh_key(wrappers->glwrappers, k); + AddOffsetSymbol(emu->context->maplib, symbol, rname); + s->addr = AddCheckBridge(emu->context->system, s->w, symbol, 0, constname); + s->resolved = 1; + } + ret = s->addr; + printf_dlsym(LOG_DEBUG, "%p\n", (void*)ret); + return (void*)ret; +} diff --git a/src/wrapped32/wrappedlibgl_private.h b/src/wrapped32/wrappedlibgl_private.h new file mode 100644 index 0000000000000000000000000000000000000000..9f291d54f747260e7d7ad10e7ed98bbf4527c8a3 --- /dev/null +++ b/src/wrapped32/wrappedlibgl_private.h @@ -0,0 +1,4083 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif +//VERSION_1_0 +GO(glAccum, vFuf) +GO(glAlphaFunc, vFuf) +GO(glBegin, vFu) +GO(glBitmap, vFiiffffp) +GO(glBlendFunc, vFuu) +GO(glCallList, vFu) +GO(glCallLists, vFiup) +GO(glClear, vFu) +GO(glClearAccum, vFffff) +GO(glClearColor, vFffff) +GO(glClearDepth, vFd) +GO(glClearIndex, vFf) +GO(glClearStencil, vFi) +GO(glClipPlane, vFup) +GO(glColor3b, vFccc) +GO(glColor3bv, vFp) +GO(glColor3d, vFddd) +GO(glColor3dv, vFp) +GO(glColor3f, vFfff) +GO(glColor3fv, vFp) +GO(glColor3i, vFiii) +GO(glColor3iv, vFp) +GO(glColor3s, vFwww) +GO(glColor3sv, vFp) +GO(glColor3ub, vFCCC) +GO(glColor3ubv, vFp) +GO(glColor3ui, vFuuu) +GO(glColor3uiv, vFp) +GO(glColor3us, vFWWW) +GO(glColor3usv, vFp) +GO(glColor4b, vFcccc) +GO(glColor4bv, vFp) +GO(glColor4d, vFdddd) +GO(glColor4dv, vFp) +GO(glColor4f, vFffff) +GO(glColor4fv, vFp) +GO(glColor4i, vFiiii) +GO(glColor4iv, vFp) +GO(glColor4s, vFwwww) +GO(glColor4sv, vFp) +GO(glColor4ub, vFCCCC) +GO(glColor4ubv, vFp) +GO(glColor4ui, vFuuuu) +GO(glColor4uiv, vFp) +GO(glColor4us, vFWWWW) +GO(glColor4usv, vFp) +GO(glColorMask, vFCCCC) +GO(glColorMaterial, vFuu) +GO(glCopyPixels, vFiiiiu) +GO(glCullFace, vFu) +GO(glDeleteLists, vFui) +GO(glDepthFunc, vFu) +GO(glDepthMask, vFC) +GO(glDepthRange, vFdd) +GO(glDisable, vFu) +GO(glDrawBuffer, vFu) +GO(glDrawPixels, vFiiuup) +GO(glEdgeFlag, vFC) +GO(glEdgeFlagv, vFp) +GO(glEnable, vFu) +GO(glEnd, vFv) +GO(glEndList, vFv) +GO(glEvalCoord1d, vFd) +GO(glEvalCoord1dv, vFp) +GO(glEvalCoord1f, vFf) +GO(glEvalCoord1fv, vFp) +GO(glEvalCoord2d, vFdd) +GO(glEvalCoord2dv, vFp) +GO(glEvalCoord2f, vFff) +GO(glEvalCoord2fv, vFp) +GO(glEvalMesh1, vFuii) +GO(glEvalMesh2, vFuiiii) +GO(glEvalPoint1, vFi) +GO(glEvalPoint2, vFii) +GO(glFeedbackBuffer, vFiup) +GO(glFinish, vFv) +GO(glFlush, vFv) +GO(glFogf, vFuf) +GO(glFogfv, vFup) +GO(glFogi, vFui) +GO(glFogiv, vFup) +GO(glFrontFace, vFu) +GO(glFrustum, vFdddddd) +GO(glGenLists, uFi) +GO(glGetBooleanv, vFup) +GO(glGetClipPlane, vFup) +GO(glGetDoublev, vFup) +GO(glGetError, uFv) +GO(glGetFloatv, vFup) +GO(glGetIntegerv, vFup) +GO(glGetLightfv, vFuup) +GO(glGetLightiv, vFuup) +GO(glGetMapdv, vFuup) +GO(glGetMapfv, vFuup) +GO(glGetMapiv, vFuup) +GO(glGetMaterialfv, vFuup) +GO(glGetMaterialiv, vFuup) +GO(glGetPixelMapfv, vFup) +GO(glGetPixelMapuiv, vFup) +GO(glGetPixelMapusv, vFup) +GO(glGetPolygonStipple, vFp) +GO(glGetString, pFu) +GO(glGetTexEnvfv, vFuup) +GO(glGetTexEnviv, vFuup) +GO(glGetTexGendv, vFuup) +GO(glGetTexGenfv, vFuup) +GO(glGetTexGeniv, vFuup) +GO(glGetTexImage, vFuiuup) +GO(glGetTexLevelParameterfv, vFuiup) +GO(glGetTexLevelParameteriv, vFuiup) +GO(glGetTexParameterfv, vFuup) +GO(glGetTexParameteriv, vFuup) +GO(glHint, vFuu) +GO(glIndexMask, vFu) +GO(glIndexd, vFd) +GO(glIndexdv, vFp) +GO(glIndexf, vFf) +GO(glIndexfv, vFp) +GO(glIndexi, vFi) +GO(glIndexiv, vFp) +GO(glIndexs, vFw) +GO(glIndexsv, vFp) +GO(glInitNames, vFv) +GO(glIsEnabled, CFu) +GO(glIsList, CFu) +GO(glLightModelf, vFuf) +GO(glLightModelfv, vFup) +GO(glLightModeli, vFui) +GO(glLightModeliv, vFup) +GO(glLightf, vFuuf) +GO(glLightfv, vFuup) +GO(glLighti, vFuui) +GO(glLightiv, vFuup) +GO(glLineStipple, vFiW) +GO(glLineWidth, vFf) +GO(glListBase, vFu) +GO(glLoadIdentity, vFv) +GO(glLoadMatrixd, vFp) +GO(glLoadMatrixf, vFp) +GO(glLoadName, vFu) +GO(glLogicOp, vFu) +GO(glMap1d, vFuddiip) +GO(glMap1f, vFuffiip) +GO(glMap2d, vFuddiiddiip) +GO(glMap2f, vFuffiiffiip) +GO(glMapGrid1d, vFidd) +GO(glMapGrid1f, vFiff) +GO(glMapGrid2d, vFiddidd) +GO(glMapGrid2f, vFiffiff) +GO(glMaterialf, vFuuf) +GO(glMaterialfv, vFuup) +GO(glMateriali, vFuui) +GO(glMaterialiv, vFuup) +GO(glMatrixMode, vFu) +GO(glMultMatrixd, vFp) +GO(glMultMatrixf, vFp) +GO(glNewList, vFuu) +GO(glNormal3b, vFccc) +GO(glNormal3bv, vFp) +GO(glNormal3d, vFddd) +GO(glNormal3dv, vFp) +GO(glNormal3f, vFfff) +GO(glNormal3fv, vFp) +GO(glNormal3i, vFiii) +GO(glNormal3iv, vFp) +GO(glNormal3s, vFwww) +GO(glNormal3sv, vFp) +GO(glOrtho, vFdddddd) +GO(glPassThrough, vFf) +GO(glPixelMapfv, vFuip) +GO(glPixelMapuiv, vFuip) +GO(glPixelMapusv, vFuip) +GO(glPixelStoref, vFuf) +GO(glPixelStorei, vFui) +GO(glPixelTransferf, vFuf) +GO(glPixelTransferi, vFui) +GO(glPixelZoom, vFff) +GO(glPointSize, vFf) +GO(glPolygonMode, vFuu) +GO(glPolygonStipple, vFp) +GO(glPopAttrib, vFv) +GO(glPopMatrix, vFv) +GO(glPopName, vFv) +GO(glPushAttrib, vFu) +GO(glPushMatrix, vFv) +GO(glPushName, vFu) +GO(glRasterPos2d, vFdd) +GO(glRasterPos2dv, vFp) +GO(glRasterPos2f, vFff) +GO(glRasterPos2fv, vFp) +GO(glRasterPos2i, vFii) +GO(glRasterPos2iv, vFp) +GO(glRasterPos2s, vFww) +GO(glRasterPos2sv, vFp) +GO(glRasterPos3d, vFddd) +GO(glRasterPos3dv, vFp) +GO(glRasterPos3f, vFfff) +GO(glRasterPos3fv, vFp) +GO(glRasterPos3i, vFiii) +GO(glRasterPos3iv, vFp) +GO(glRasterPos3s, vFwww) +GO(glRasterPos3sv, vFp) +GO(glRasterPos4d, vFdddd) +GO(glRasterPos4dv, vFp) +GO(glRasterPos4f, vFffff) +GO(glRasterPos4fv, vFp) +GO(glRasterPos4i, vFiiii) +GO(glRasterPos4iv, vFp) +GO(glRasterPos4s, vFwwww) +GO(glRasterPos4sv, vFp) +GO(glReadBuffer, vFu) +GO(glReadPixels, vFiiiiuup) +GO(glRectd, vFdddd) +GO(glRectdv, vFpp) +GO(glRectf, vFffff) +GO(glRectfv, vFpp) +GO(glRecti, vFiiii) +GO(glRectiv, vFpp) +GO(glRects, vFwwww) +GO(glRectsv, vFpp) +GO(glRenderMode, iFu) +GO(glRotated, vFdddd) +GO(glRotatef, vFffff) +GO(glScaled, vFddd) +GO(glScalef, vFfff) +GO(glScissor, vFiiii) +GO(glSelectBuffer, vFip) +GO(glShadeModel, vFu) +GO(glStencilFunc, vFuiu) +GO(glStencilMask, vFu) +GO(glStencilOp, vFuuu) +GO(glTexCoord1d, vFd) +GO(glTexCoord1dv, vFp) +GO(glTexCoord1f, vFf) +GO(glTexCoord1fv, vFp) +GO(glTexCoord1i, vFi) +GO(glTexCoord1iv, vFp) +GO(glTexCoord1s, vFw) +GO(glTexCoord1sv, vFp) +GO(glTexCoord2d, vFdd) +GO(glTexCoord2dv, vFp) +GO(glTexCoord2f, vFff) +GO(glTexCoord2fv, vFp) +GO(glTexCoord2i, vFii) +GO(glTexCoord2iv, vFp) +GO(glTexCoord2s, vFww) +GO(glTexCoord2sv, vFp) +GO(glTexCoord3d, vFddd) +GO(glTexCoord3dv, vFp) +GO(glTexCoord3f, vFfff) +GO(glTexCoord3fv, vFp) +GO(glTexCoord3i, vFiii) +GO(glTexCoord3iv, vFp) +GO(glTexCoord3s, vFwww) +GO(glTexCoord3sv, vFp) +GO(glTexCoord4d, vFdddd) +GO(glTexCoord4dv, vFp) +GO(glTexCoord4f, vFffff) +GO(glTexCoord4fv, vFp) +GO(glTexCoord4i, vFiiii) +GO(glTexCoord4iv, vFp) +GO(glTexCoord4s, vFwwww) +GO(glTexCoord4sv, vFp) +GO(glTexEnvf, vFuuf) +GO(glTexEnvfv, vFuup) +GO(glTexEnvi, vFuui) +GO(glTexEnviv, vFuup) +GO(glTexGend, vFuud) +GO(glTexGendv, vFuup) +GO(glTexGenf, vFuuf) +GO(glTexGenfv, vFuup) +GO(glTexGeni, vFuui) +GO(glTexGeniv, vFuup) +GO(glTexImage1D, vFuiiiiuup) +GO(glTexImage2D, vFuiiiiiuup) +GO(glTexParameterf, vFuuf) +GO(glTexParameterfv, vFuup) +GO(glTexParameteri, vFuui) +GO(glTexParameteriv, vFuup) +GO(glTranslated, vFddd) +GO(glTranslatef, vFfff) +GO(glVertex2d, vFdd) +GO(glVertex2dv, vFp) +GO(glVertex2f, vFff) +GO(glVertex2fv, vFp) +GO(glVertex2i, vFii) +GO(glVertex2iv, vFp) +GO(glVertex2s, vFww) +GO(glVertex2sv, vFp) +GO(glVertex3d, vFddd) +GO(glVertex3dv, vFp) +GO(glVertex3f, vFfff) +GO(glVertex3fv, vFp) +GO(glVertex3i, vFiii) +GO(glVertex3iv, vFp) +GO(glVertex3s, vFwww) +GO(glVertex3sv, vFp) +GO(glVertex4d, vFdddd) +GO(glVertex4dv, vFp) +GO(glVertex4f, vFffff) +GO(glVertex4fv, vFp) +GO(glVertex4i, vFiiii) +GO(glVertex4iv, vFp) +GO(glVertex4s, vFwwww) +GO(glVertex4sv, vFp) +GO(glViewport, vFiiii) +//VERSION_1_1 +GO(glAreTexturesResident, CFipp) +GO(glArrayElement, vFi) +GO(glBindTexture, vFuu) +GO(glColorPointer, vFiuip) +GO(glCopyTexImage1D, vFuiuiiii) +GO(glCopyTexImage2D, vFuiuiiiii) +GO(glCopyTexSubImage1D, vFuiiiii) +GO(glCopyTexSubImage2D, vFuiiiiiii) +GO(glDeleteTextures, vFip) +GO(glDisableClientState, vFu) +GO(glDrawArrays, vFuii) +GO(glDrawElements, vFuiup) +GO(glEdgeFlagPointer, vFip) +GO(glEnableClientState, vFu) +GO(glGenTextures, vFip) +GO(glGetPointerv, vFuBp_) +GO(glIndexPointer, vFuip) +GO(glIndexub, vFC) +GO(glIndexubv, vFp) +GO(glInterleavedArrays, vFuip) +GO(glIsTexture, CFu) +GO(glNormalPointer, vFuip) +GO(glPolygonOffset, vFff) +GO(glPopClientAttrib, vFv) +GO(glPrioritizeTextures, vFipp) +GO(glPushClientAttrib, vFu) +GO(glTexCoordPointer, vFiuip) +GO(glTexSubImage1D, vFuiiiuup) +GO(glTexSubImage2D, vFuiiiiiuup) +GO(glVertexPointer, vFiuip) +//VERSION_1_2 +GO(glBlendColor, vFffff) +GO(glBlendEquation, vFu) +GO(glColorSubTable, vFuiiuup) +GO(glColorTable, vFuuiuup) +GO(glColorTableParameterfv, vFuup) +GO(glColorTableParameteriv, vFuup) +GO(glConvolutionFilter1D, vFuuiuup) +GO(glConvolutionFilter2D, vFuuiiuup) +GO(glConvolutionParameterf, vFuuf) +GO(glConvolutionParameterfv, vFuup) +GO(glConvolutionParameteri, vFuui) +GO(glConvolutionParameteriv, vFuup) +GO(glCopyColorSubTable, vFuiiii) +GO(glCopyColorTable, vFuuiii) +GO(glCopyConvolutionFilter1D, vFuuiii) +GO(glCopyConvolutionFilter2D, vFuuiiii) +GO(glCopyTexSubImage3D, vFuiiiiiiii) +GO(glDrawRangeElements, vFuuuiup) +GO(glGetColorTable, vFuuup) +GO(glGetColorTableParameterfv, vFuup) +GO(glGetColorTableParameteriv, vFuup) +GO(glGetConvolutionFilter, vFuuup) +GO(glGetConvolutionParameterfv, vFuup) +GO(glGetConvolutionParameteriv, vFuup) +GO(glGetHistogram, vFuCuup) +GO(glGetHistogramParameterfv, vFuup) +GO(glGetHistogramParameteriv, vFuup) +GO(glGetMinmax, vFuCuup) +GO(glGetMinmaxParameterfv, vFuup) +GO(glGetMinmaxParameteriv, vFuup) +GO(glGetSeparableFilter, vFuuuppp) +GO(glHistogram, vFuiuC) +GO(glMinmax, vFuuC) +GO(glResetHistogram, vFu) +GO(glResetMinmax, vFu) +GO(glSeparableFilter2D, vFuuiiuupp) +GO(glTexImage3D, vFuiiiiiiuup) +GO(glTexSubImage3D, vFuiiiiiiiuup) +//VERSION_1_3 +GO(glActiveTexture, vFu) +GO(glClientActiveTexture, vFu) +GO(glCompressedTexImage1D, vFuiuiiip) +GO(glCompressedTexImage2D, vFuiuiiiip) +GO(glCompressedTexImage3D, vFuiuiiiiip) +GO(glCompressedTexSubImage1D, vFuiiiuip) +GO(glCompressedTexSubImage2D, vFuiiiiiuip) +GO(glCompressedTexSubImage3D, vFuiiiiiiiuip) +GO(glGetCompressedTexImage, vFuip) +GO(glLoadTransposeMatrixd, vFp) +GO(glLoadTransposeMatrixf, vFp) +GO(glMultTransposeMatrixd, vFp) +GO(glMultTransposeMatrixf, vFp) +GO(glMultiTexCoord1d, vFud) +GO(glMultiTexCoord1dv, vFup) +GO(glMultiTexCoord1f, vFuf) +GO(glMultiTexCoord1fv, vFup) +GO(glMultiTexCoord1i, vFui) +GO(glMultiTexCoord1iv, vFup) +GO(glMultiTexCoord1s, vFuw) +GO(glMultiTexCoord1sv, vFup) +GO(glMultiTexCoord2d, vFudd) +GO(glMultiTexCoord2dv, vFup) +GO(glMultiTexCoord2f, vFuff) +GO(glMultiTexCoord2fv, vFup) +GO(glMultiTexCoord2i, vFuii) +GO(glMultiTexCoord2iv, vFup) +GO(glMultiTexCoord2s, vFuww) +GO(glMultiTexCoord2sv, vFup) +GO(glMultiTexCoord3d, vFuddd) +GO(glMultiTexCoord3dv, vFup) +GO(glMultiTexCoord3f, vFufff) +GO(glMultiTexCoord3fv, vFup) +GO(glMultiTexCoord3i, vFuiii) +GO(glMultiTexCoord3iv, vFup) +GO(glMultiTexCoord3s, vFuwww) +GO(glMultiTexCoord3sv, vFup) +GO(glMultiTexCoord4d, vFudddd) +GO(glMultiTexCoord4dv, vFup) +GO(glMultiTexCoord4f, vFuffff) +GO(glMultiTexCoord4fv, vFup) +GO(glMultiTexCoord4i, vFuiiii) +GO(glMultiTexCoord4iv, vFup) +GO(glMultiTexCoord4s, vFuwwww) +GO(glMultiTexCoord4sv, vFup) +GO(glSampleCoverage, vFfC) +//VERSION_1_4 +GO(glBlendFuncSeparate, vFuuuu) +GO(glFogCoordPointer, vFuip) +GO(glFogCoordd, vFd) +GO(glFogCoorddv, vFp) +GO(glFogCoordf, vFf) +GO(glFogCoordfv, vFp) +GO(glMultiDrawArrays, vFuppi) +GOM(glMultiDrawElements, vFEupupi) +GO(glPointParameterf, vFuf) +GO(glPointParameterfv, vFup) +GO(glPointParameteri, vFui) +GO(glPointParameteriv, vFup) +GO(glSecondaryColor3b, vFccc) +GO(glSecondaryColor3bv, vFp) +GO(glSecondaryColor3d, vFddd) +GO(glSecondaryColor3dv, vFp) +GO(glSecondaryColor3f, vFfff) +GO(glSecondaryColor3fv, vFp) +GO(glSecondaryColor3i, vFiii) +GO(glSecondaryColor3iv, vFp) +GO(glSecondaryColor3s, vFwww) +GO(glSecondaryColor3sv, vFp) +GO(glSecondaryColor3ub, vFCCC) +GO(glSecondaryColor3ubv, vFp) +GO(glSecondaryColor3ui, vFuuu) +GO(glSecondaryColor3uiv, vFp) +GO(glSecondaryColor3us, vFWWW) +GO(glSecondaryColor3usv, vFp) +GO(glSecondaryColorPointer, vFiuip) +GO(glWindowPos2d, vFdd) +GO(glWindowPos2dv, vFp) +GO(glWindowPos2f, vFff) +GO(glWindowPos2fv, vFp) +GO(glWindowPos2i, vFii) +GO(glWindowPos2iv, vFp) +GO(glWindowPos2s, vFww) +GO(glWindowPos2sv, vFp) +GO(glWindowPos3d, vFddd) +GO(glWindowPos3dv, vFp) +GO(glWindowPos3f, vFfff) +GO(glWindowPos3fv, vFp) +GO(glWindowPos3i, vFiii) +GO(glWindowPos3iv, vFp) +GO(glWindowPos3s, vFwww) +GO(glWindowPos3sv, vFp) +//VERSION_1_5 +GO(glBeginQuery, vFuu) +GO(glBindBuffer, vFuu) +GO(glBufferData, vFulpu) +GO(glBufferSubData, vFullp) +GO(glDeleteBuffers, vFip) +GO(glDeleteQueries, vFip) +GO(glEndQuery, vFu) +GO(glGenBuffers, vFip) +GO(glGenQueries, vFip) +GO(glGetBufferParameteriv, vFuup) +GO(glGetBufferPointerv, vFuuBp_) +GO(glGetBufferSubData, vFullp) +GO(glGetQueryObjectiv, vFuup) +GO(glGetQueryObjectuiv, vFuup) +GO(glGetQueryiv, vFuup) +GO(glIsBuffer, CFu) +GO(glIsQuery, CFu) +GO(glMapBuffer, pFuu) +GO(glUnmapBuffer, CFu) +//VERSION_2_0 +GO(glAttachShader, vFuu) +GO(glBindAttribLocation, vFuup) +GO(glBlendEquationSeparate, vFuu) +GO(glCompileShader, vFu) +GO(glCreateProgram, uFv) +GO(glCreateShader, uFu) +GO(glDeleteProgram, vFu) +GO(glDeleteShader, vFu) +GO(glDetachShader, vFuu) +GO(glDisableVertexAttribArray, vFu) +GO(glDrawBuffers, vFip) +GO(glEnableVertexAttribArray, vFu) +GO(glGetActiveAttrib, vFuuipppp) +GO(glGetActiveUniform, vFuuipppp) +GO(glGetAttachedShaders, vFuipp) +GO(glGetAttribLocation, iFup) +GO(glGetProgramInfoLog, vFuipp) +GO(glGetProgramiv, vFuup) +GO(glGetShaderInfoLog, vFuipp) +GO(glGetShaderSource, vFuipp) +GO(glGetShaderiv, vFuup) +GO(glGetUniformLocation, iFup) +GO(glGetUniformfv, vFuip) +GO(glGetUniformiv, vFuip) +GO(glGetVertexAttribPointerv, vFuuBp_) +GO(glGetVertexAttribdv, vFuup) +GO(glGetVertexAttribfv, vFuup) +GO(glGetVertexAttribiv, vFuup) +GO(glIsProgram, CFu) +GO(glIsShader, CFu) +GO(glLinkProgram, vFu) +GOM(glShaderSource, vFEuipp) +GO(glStencilFuncSeparate, vFuuiu) +GO(glStencilMaskSeparate, vFuu) +GO(glStencilOpSeparate, vFuuuu) +GO(glUniform1f, vFif) +GO(glUniform1fv, vFiip) +GO(glUniform1i, vFii) +GO(glUniform1iv, vFiip) +GO(glUniform2f, vFiff) +GO(glUniform2fv, vFiip) +GO(glUniform2i, vFiii) +GO(glUniform2iv, vFiip) +GO(glUniform3f, vFifff) +GO(glUniform3fv, vFiip) +GO(glUniform3i, vFiiii) +GO(glUniform3iv, vFiip) +GO(glUniform4f, vFiffff) +GO(glUniform4fv, vFiip) +GO(glUniform4i, vFiiiii) +GO(glUniform4iv, vFiip) +GO(glUniformMatrix2fv, vFiiCp) +GO(glUniformMatrix3fv, vFiiCp) +GO(glUniformMatrix4fv, vFiiCp) +GO(glUseProgram, vFu) +GO(glValidateProgram, vFu) +GO(glVertexAttrib1d, vFud) +GO(glVertexAttrib1dv, vFup) +GO(glVertexAttrib1f, vFuf) +GO(glVertexAttrib1fv, vFup) +GO(glVertexAttrib1s, vFuw) +GO(glVertexAttrib1sv, vFup) +GO(glVertexAttrib2d, vFudd) +GO(glVertexAttrib2dv, vFup) +GO(glVertexAttrib2f, vFuff) +GO(glVertexAttrib2fv, vFup) +GO(glVertexAttrib2s, vFuww) +GO(glVertexAttrib2sv, vFup) +GO(glVertexAttrib3d, vFuddd) +GO(glVertexAttrib3dv, vFup) +GO(glVertexAttrib3f, vFufff) +GO(glVertexAttrib3fv, vFup) +GO(glVertexAttrib3s, vFuwww) +GO(glVertexAttrib3sv, vFup) +GO(glVertexAttrib4Nbv, vFup) +GO(glVertexAttrib4Niv, vFup) +GO(glVertexAttrib4Nsv, vFup) +GO(glVertexAttrib4Nub, vFuCCCC) +GO(glVertexAttrib4Nubv, vFup) +GO(glVertexAttrib4Nuiv, vFup) +GO(glVertexAttrib4Nusv, vFup) +GO(glVertexAttrib4bv, vFup) +GO(glVertexAttrib4d, vFudddd) +GO(glVertexAttrib4dv, vFup) +GO(glVertexAttrib4f, vFuffff) +GO(glVertexAttrib4fv, vFup) +GO(glVertexAttrib4iv, vFup) +GO(glVertexAttrib4s, vFuwwww) +GO(glVertexAttrib4sv, vFup) +GO(glVertexAttrib4ubv, vFup) +GO(glVertexAttrib4uiv, vFup) +GO(glVertexAttrib4usv, vFup) +GO(glVertexAttribPointer, vFuiuCip) +//VERSION_2_1 +GO(glUniformMatrix2x3fv, vFiiCp) +GO(glUniformMatrix2x4fv, vFiiCp) +GO(glUniformMatrix3x2fv, vFiiCp) +GO(glUniformMatrix3x4fv, vFiiCp) +GO(glUniformMatrix4x2fv, vFiiCp) +GO(glUniformMatrix4x3fv, vFiiCp) +//VERSION_3_0 +GO(glBeginConditionalRender, vFuu) +GO(glBeginTransformFeedback, vFu) +GO(glBindBufferBase, vFuuu) +GO(glBindBufferRange, vFuuull) +GO(glBindFragDataLocation, vFuup) +GO(glClampColor, vFuu) +GO(glClearBufferfi, vFuifi) +GO(glClearBufferfv, vFuip) +GO(glClearBufferiv, vFuip) +GO(glClearBufferuiv, vFuip) +GO(glColorMaski, vFuCCCC) +GO(glDisablei, vFuu) +GO(glEnablei, vFuu) +GO(glEndConditionalRender, vFv) +GO(glEndTransformFeedback, vFv) +GO(glGetBooleani_v, vFuup) +GO(glGetFragDataLocation, iFup) +GO(glGetIntegeri_v, vFuup) +GO(glGetStringi, pFuu) +GO(glGetTexParameterIiv, vFuup) +GO(glGetTexParameterIuiv, vFuup) +GO(glGetTransformFeedbackVarying, vFuuipppp) +GO(glGetUniformuiv, vFuip) +GO(glGetVertexAttribIiv, vFuup) +GO(glGetVertexAttribIuiv, vFuup) +GO(glIsEnabledi, CFuu) +GO(glTexParameterIiv, vFuup) +GO(glTexParameterIuiv, vFuup) +GOM(glTransformFeedbackVaryings, vFEuipu) +GO(glUniform1ui, vFiu) +GO(glUniform1uiv, vFiip) +GO(glUniform2ui, vFiuu) +GO(glUniform2uiv, vFiip) +GO(glUniform3ui, vFiuuu) +GO(glUniform3uiv, vFiip) +GO(glUniform4ui, vFiuuuu) +GO(glUniform4uiv, vFiip) +GO(glVertexAttribI1i, vFui) +GO(glVertexAttribI1iv, vFup) +GO(glVertexAttribI1ui, vFuu) +GO(glVertexAttribI1uiv, vFup) +GO(glVertexAttribI2i, vFuii) +GO(glVertexAttribI2iv, vFup) +GO(glVertexAttribI2ui, vFuuu) +GO(glVertexAttribI2uiv, vFup) +GO(glVertexAttribI3i, vFuiii) +GO(glVertexAttribI3iv, vFup) +GO(glVertexAttribI3ui, vFuuuu) +GO(glVertexAttribI3uiv, vFup) +GO(glVertexAttribI4bv, vFup) +GO(glVertexAttribI4i, vFuiiii) +GO(glVertexAttribI4iv, vFup) +GO(glVertexAttribI4sv, vFup) +GO(glVertexAttribI4ubv, vFup) +GO(glVertexAttribI4ui, vFuuuuu) +GO(glVertexAttribI4uiv, vFup) +GO(glVertexAttribI4usv, vFup) +GO(glVertexAttribIPointer, vFuiuip) +//VERSION_3_1 +GO(glDrawArraysInstanced, vFuiii) +GO(glDrawElementsInstanced, vFuiupi) +GO(glPrimitiveRestartIndex, vFu) +GO(glTexBuffer, vFuuu) +//VERSION_3_2 +GO(glFramebufferTexture, vFuuui) +GO(glGetBufferParameteri64v, vFuup) +GO(glGetInteger64i_v, vFuup) +//VERSION_3_3 +GO(glVertexAttribDivisor, vFuu) +//VERSION_4_0 +GO(glBlendEquationSeparatei, vFuuu) +GO(glBlendEquationi, vFuu) +GO(glBlendFuncSeparatei, vFuuuuu) +GO(glBlendFunci, vFuuu) +GO(glMinSampleShading, vFf) +//VERSION_4_3 +GO(glInvalidateNamedFramebuffer, vFiup) +//VERSION_4_4 +GO(glBindBuffersBase, vFuuip) +GOM(glBindBuffersRange, vFEuuippp) +GO(glBindImageTextures, vFuip) +GO(glBindSamplers, vFuip) +GO(glBindTextures, vFuip) +GOM(glBindVertexBuffers, vFEuippp) +GO(glBufferStorage, vFulpu) +GO(glClearTexImage, vFuiuup) +GO(glClearTexSubImage, vFuiiiiiiiuup) +//VERSION_4_5 +GO(glClipControl, vFuu) +GO(glCreateTransformFeedbacks, vFip) +GO(glTransformFeedbackBufferBase, vFuuu) +GO(glTransformFeedbackBufferRange, vFuuull) +GO(glGetTransformFeedbackiv, vFuup) +GO(glGetTransformFeedbacki_v, vFuuup) +GO(glGetTransformFeedbacki64_v, vFuuup) +GO(glCreateBuffers, vFip) +GO(glNamedBufferStorage, vFulpu) +GO(glNamedBufferStorageEXT, vFulpu) +GO(glNamedBufferData, vFulpu) +GO(glNamedBufferSubData, vFullp) +GO(glCopyNamedBufferSubData, vFuulll) +GO(glClearNamedBufferData, vFuuuup) +GO(glClearNamedBufferSubData, vFuulluup) +GO(glMapNamedBuffer, pFuu) +GO(glMapNamedBufferRange, pFullu) +GO(glUnmapNamedBuffer, CFu) +GO(glFlushMappedNamedBufferRange, vFull) +GO(glGetNamedBufferParameteriv, vFuup) +GO(glGetNamedBufferParameteri64v, vFuup) +GO(glGetNamedBufferPointerv, vFuuBp_) +GO(glGetNamedBufferSubData, vFullp) +GO(glCreateFramebuffers, vFip) +GO(glNamedFramebufferRenderbuffer, vFuuuu) +GO(glNamedFramebufferParameteri, vFuui) +GO(glNamedFramebufferTexture, vFuuui) +GO(glNamedFramebufferTextureLayer, vFuuuii) +GO(glNamedFramebufferDrawBuffer, vFuu) +GO(glNamedFramebufferDrawBuffers, vFuip) +GO(glNamedFramebufferReadBuffer, vFuu) +GO(glInvalidateNamedFramebufferData, vFuip) +GO(glInvalidateNamedFramebufferSubData, vFuipiiii) +GO(glClearNamedFramebufferiv, vFuuip) +GO(glClearNamedFramebufferuiv, vFuuip) +GO(glClearNamedFramebufferfv, vFuuip) +GO(glClearNamedFramebufferfi, vFuuifi) +GO(glBlitNamedFramebuffer, vFuuiiiiiiiiuu) +GO(glCheckNamedFramebufferStatus, uFuu) +GO(glGetNamedFramebufferParameteriv, vFuup) +GO(glGetNamedFramebufferAttachmentParameteriv, vFuuup) +GO(glCreateRenderbuffers, vFip) +GO(glNamedRenderbufferStorage, vFuuii) +GO(glNamedRenderbufferStorageMultisample, vFuiuii) +GO(glGetNamedRenderbufferParameteriv, vFuup) +GO(glCreateTextures, vFuip) +GO(glTextureBuffer, vFuuu) +GO(glTextureBufferRange, vFuuull) +GO(glTextureStorage1D, vFuiui) +GO(glTextureStorage2D, vFuiuii) +GO(glTextureStorage3D, vFuiuiii) +GO(glTextureStorage2DMultisample, vFuiuiiC) +GO(glTextureStorage3DMultisample, vFuiuiiiC) +GO(glTextureSubImage1D, vFuiiiuup) +GO(glTextureSubImage2D, vFuiiiiiuup) +GO(glTextureSubImage3D, vFuiiiiiiiuup) +GO(glCompressedTextureSubImage1D, vFuiiiuip) +GO(glCompressedTextureSubImage2D, vFuiiiiiuip) +GO(glCompressedTextureSubImage3D, vFuiiiiiiiuip) +GO(glCopyTextureSubImage1D, vFuiiiii) +GO(glCopyTextureSubImage2D, vFuiiiiiii) +GO(glCopyTextureSubImage3D, vFuiiiiiiii) +GO(glTextureParameterf, vFuuf) +GO(glTextureParameterfv, vFuup) +GO(glTextureParameteri, vFuui) +GO(glTextureParameterIiv, vFuup) +GO(glTextureParameterIuiv, vFuup) +GO(glTextureParameteriv, vFuup) +GO(glGenerateTextureMipmap, vFu) +GO(glBindTextureUnit, vFuu) +GO(glGetTextureImage, vFuiuuip) +GO(glGetCompressedTextureImage, vFuiip) +GO(glGetTextureLevelParameterfv, vFuiup) +GO(glGetTextureLevelParameteriv, vFuiup) +GO(glGetTextureParameterfv, vFuup) +GO(glGetTextureParameterIiv, vFuup) +GO(glGetTextureParameterIuiv, vFuup) +GO(glGetTextureParameteriv, vFuup) +GO(glCreateVertexArrays, vFip) +GO(glDisableVertexArrayAttrib, vFuu) +GO(glEnableVertexArrayAttrib, vFuu) +GO(glVertexArrayElementBuffer, vFuu) +GO(glVertexArrayVertexBuffer, vFuuuli) +GOM(glVertexArrayVertexBuffers, vFEuuippp) +GO(glVertexArrayAttribBinding, vFuuu) +GO(glVertexArrayAttribFormat, vFuuiuCu) +GO(glVertexArrayAttribIFormat, vFuuiuu) +GO(glVertexArrayAttribLFormat, vFuuiuu) +GO(glVertexArrayBindingDivisor, vFuuu) +GO(glGetVertexArrayiv, vFuup) +GO(glGetVertexArrayIndexediv, vFuuup) +GO(glGetVertexArrayIndexed64iv, vFuuup) +GO(glCreateSamplers, vFip) +GO(glCreateProgramPipelines, vFip) +GO(glTextureBarrier, vFv) +GO(glTextureParameteriiv, vFuip) +GO(glTextureParameteriuiv, vFuip) +GO(glCreateQueries, vFuip) +GO(glGetQueryBufferObjecti64v, vFuuul) +GO(glGetQueryBufferObjectiv, vFuuul) +GO(glGetQueryBufferObjectui64v, vFuuul) +GO(glGetQueryBufferObjectuiv, vFuuul) +GO(glMemoryBarrierByRegion, vFu) +GO(glGetTextureSubImage, vFuiiiiiiiuuip) +GO(glGetCompressedTextureSubImage, vFuiiiiiiiip) +GO(glGetGraphicsResetStatus, uFv) +GO(glGetnUniformfv, vFuiip) +GO(glGetnUniformiv, vFuiip) +GO(glGetnUniformuiv, vFuiip) +GO(glReadnPixels, vFiiiiuuip) +//VERSION_4_6 +GO(glSpecializeShader, vFupupp) + +GO(glTexturePageCommitmentEXT, vFuiiiiiiiC) +GO(glVertexArrayVertexAttribDivisorEXT, vFuuu) + +// _fini +//3DFX_tbuffer +GO(glTbufferMask3DFX, vFu) +//AMD_debug_output +GOM(glDebugMessageCallbackAMD, vFEpp) +GO(glDebugMessageEnableAMD, vFuuipC) +GO(glDebugMessageInsertAMD, vFuuuip) +GO(glGetDebugMessageLogAMD, uFuippppp) +//AMD_draw_buffers_blend +GO(glBlendEquationIndexedAMD, vFuu) +GO(glBlendEquationSeparateIndexedAMD, vFuuu) +GO(glBlendFuncIndexedAMD, vFuuu) +GO(glBlendFuncSeparateIndexedAMD, vFuuuuu) +//AMD_multi_draw_indirect +GO(glMultiDrawArraysIndirectAMD, vFupii) +GO(glMultiDrawElementsIndirectAMD, vFuupii) +//AMD_name_gen_delete +GO(glDeleteNamesAMD, vFuup) +GO(glGenNamesAMD, vFuup) +GO(glIsNameAMD, CFuu) +//AMD_performance_monitor +GO(glBeginPerfMonitorAMD, vFu) +GO(glDeletePerfMonitorsAMD, vFip) +GO(glEndPerfMonitorAMD, vFu) +GO(glGenPerfMonitorsAMD, vFip) +GO(glGetPerfMonitorCounterDataAMD, vFuuipp) +GO(glGetPerfMonitorCounterInfoAMD, vFuuup) +GO(glGetPerfMonitorCounterStringAMD, vFuuipp) +GO(glGetPerfMonitorCountersAMD, vFuppip) +GO(glGetPerfMonitorGroupStringAMD, vFuipp) +GO(glGetPerfMonitorGroupsAMD, vFpip) +GO(glSelectPerfMonitorCountersAMD, vFuCuip) +//AMD_sample_positions +GO(glSetMultisamplefvAMD, vFuup) +//AMD_sparse_texture +GO(glTexStorageSparseAMD, vFuuiiiiu) +GO(glTextureStorageSparseAMD, vFuuuiiiiu) +//AMD_stencil_operation_extended +GO(glStencilOpValueAMD, vFuu) +//AMD_vertex_shader_tessellator +GO(glTessellationFactorAMD, vFf) +GO(glTessellationModeAMD, vFu) +//APPLE_element_array +GO(glDrawElementArrayAPPLE, vFuii) +GO(glDrawRangeElementArrayAPPLE, vFuuuii) +GO(glElementPointerAPPLE, vFup) +GO(glMultiDrawElementArrayAPPLE, vFuppi) +GO(glMultiDrawRangeElementArrayAPPLE, vFuuuppi) +//APPLE_fence +GO(glDeleteFencesAPPLE, vFip) +GO(glFinishFenceAPPLE, vFu) +GO(glFinishObjectAPPLE, vFui) +GO(glGenFencesAPPLE, vFip) +GO(glIsFenceAPPLE, CFu) +GO(glSetFenceAPPLE, vFu) +GO(glTestFenceAPPLE, CFu) +GO(glTestObjectAPPLE, CFuu) +//APPLE_flush_buffer_range +GO(glBufferParameteriAPPLE, vFuui) +GO(glFlushMappedBufferRangeAPPLE, vFull) +//APPLE_object_purgeable +GO(glGetObjectParameterivAPPLE, vFuuup) +GO(glObjectPurgeableAPPLE, uFuuu) +GO(glObjectUnpurgeableAPPLE, uFuuu) +//APPLE_texture_range +GO(glGetTexParameterPointervAPPLE, vFuuBp_) +GO(glTextureRangeAPPLE, vFuip) +//APPLE_vertex_array_object +GO(glBindVertexArrayAPPLE, vFu) +GO(glDeleteVertexArraysAPPLE, vFip) +GO(glGenVertexArraysAPPLE, vFip) +GO(glIsVertexArrayAPPLE, CFu) +//APPLE_vertex_array_range +GO(glFlushVertexArrayRangeAPPLE, vFip) +GO(glVertexArrayParameteriAPPLE, vFui) +GO(glVertexArrayRangeAPPLE, vFip) +//APPLE_vertex_program_evaluators +GO(glDisableVertexAttribAPPLE, vFuu) +GO(glEnableVertexAttribAPPLE, vFuu) +GO(glIsVertexAttribEnabledAPPLE, CFuu) +GO(glMapVertexAttrib1dAPPLE, vFuuddiip) +GO(glMapVertexAttrib1fAPPLE, vFuuffiip) +GO(glMapVertexAttrib2dAPPLE, vFuuddiiddiip) +GO(glMapVertexAttrib2fAPPLE, vFuuffiiffiip) +//ARB_ES2_compatibility +GO(glClearDepthf, vFf) +GO(glDepthRangef, vFff) +GO(glGetShaderPrecisionFormat, vFuupp) +GO(glReleaseShaderCompiler, vFv) +GO(glShaderBinary, vFipupi) +//ARB_base_instance +GO(glDrawArraysInstancedBaseInstance, vFuiiiu) +GO(glDrawElementsInstancedBaseInstance, vFuiupiu) +GO(glDrawElementsInstancedBaseVertexBaseInstance, vFuiupiiu) +//ARB_blend_func_extended +GO(glBindFragDataLocationIndexed, vFuuup) +GO(glGetFragDataIndex, iFup) +//ARB_cl_event +GO(glCreateSyncFromCLeventARB, pFppu) +//ARB_clear_buffer_object +GO(glClearBufferData, vFuuuup) +GO(glClearBufferSubData, vFuulluup) +GO(glClearNamedBufferDataEXT, vFuuuup) +GO(glClearNamedBufferSubDataEXT, vFuulluup) +//ARB_color_buffer_float +GO(glClampColorARB, vFuu) +//ARB_compute_shader +GO(glDispatchCompute, vFuuu) +GO(glDispatchComputeIndirect, vFl) +//ARB_copy_buffer +GO(glCopyBufferSubData, vFuulll) +//ARB_copy_image +GO(glCopyImageSubData, vFuuiiiiuuiiiiiii) +//ARB_debug_output +GOM(glDebugMessageCallbackARB, vFEpp) +GO(glDebugMessageControlARB, vFuuuipC) +GO(glDebugMessageInsertARB, vFuuuuip) +GO(glGetDebugMessageLogARB, uFuipppppp) +//ARB_draw_buffers +GO(glDrawBuffersARB, vFip) +//ARB_draw_buffers_blend +GO(glBlendEquationSeparateiARB, vFuuu) +GO(glBlendEquationiARB, vFuu) +GO(glBlendFuncSeparateiARB, vFuuuuu) +GO(glBlendFunciARB, vFuuu) +//ARB_draw_elements_base_vertex +GO(glDrawElementsBaseVertex, vFuiupi) +GO(glDrawElementsInstancedBaseVertex, vFuiupii) +GO(glDrawRangeElementsBaseVertex, vFuuuiupi) +GOM(glMultiDrawElementsBaseVertex, vFEupupip) +//ARB_draw_indirect +GO(glDrawArraysIndirect, vFup) +GO(glDrawElementsIndirect, vFuup) +//ARB_draw_instanced +GO(glDrawArraysInstancedARB, vFuiii) +GO(glDrawElementsInstancedARB, vFuiupi) +//ARB_framebuffer_no_attachments +GO(glFramebufferParameteri, vFuui) +GO(glGetFramebufferParameteriv, vFuup) +GO(glGetNamedFramebufferParameterivEXT, vFuup) +GO(glNamedFramebufferParameteriEXT, vFuui) +//ARB_framebuffer_object +GO(glBindFramebuffer, vFuu) +GO(glBindRenderbuffer, vFuu) +GO(glBlitFramebuffer, vFiiiiiiiiuu) +GO(glCheckFramebufferStatus, uFu) +GO(glDeleteFramebuffers, vFip) +GO(glDeleteRenderbuffers, vFip) +GO(glFramebufferRenderbuffer, vFuuuu) +GO(glFramebufferTexture1D, vFuuuui) +GO(glFramebufferTexture2D, vFuuuui) +GO(glFramebufferTexture3D, vFuuuuii) +GO(glFramebufferTextureLayer, vFuuuii) +GO(glGenFramebuffers, vFip) +GO(glGenRenderbuffers, vFip) +GO(glGenerateMipmap, vFu) +GO(glGetFramebufferAttachmentParameteriv, vFuuup) +GO(glGetRenderbufferParameteriv, vFuup) +GO(glIsFramebuffer, CFu) +GO(glIsRenderbuffer, CFu) +GO(glRenderbufferStorage, vFuuii) +GO(glRenderbufferStorageMultisample, vFuiuii) +//ARB_geometry_shader4 +GO(glFramebufferTextureARB, vFuuui) +GO(glFramebufferTextureFaceARB, vFuuuiu) +GO(glFramebufferTextureLayerARB, vFuuuii) +GO(glProgramParameteriARB, vFuui) +//ARB_get_program_binary +GO(glGetProgramBinary, vFuippp) +GO(glProgramBinary, vFuupi) +GO(glProgramParameteri, vFuui) +//ARB_gpu_shader_fp64 +GO(glGetUniformdv, vFuip) +GO(glUniform1d, vFid) +GO(glUniform1dv, vFiip) +GO(glUniform2d, vFidd) +GO(glUniform2dv, vFiip) +GO(glUniform3d, vFiddd) +GO(glUniform3dv, vFiip) +GO(glUniform4d, vFidddd) +GO(glUniform4dv, vFiip) +GO(glUniformMatrix2dv, vFiiCp) +GO(glUniformMatrix2x3dv, vFiiCp) +GO(glUniformMatrix2x4dv, vFiiCp) +GO(glUniformMatrix3dv, vFiiCp) +GO(glUniformMatrix3x2dv, vFiiCp) +GO(glUniformMatrix3x4dv, vFiiCp) +GO(glUniformMatrix4dv, vFiiCp) +GO(glUniformMatrix4x2dv, vFiiCp) +GO(glUniformMatrix4x3dv, vFiiCp) +//ARB_instanced_arrays +GO(glVertexAttribDivisorARB, vFuu) +//ARB_internalformat_query +GO(glGetInternalformativ, vFuuuip) +//ARB_internalformat_query2 +GO(glGetInternalformati64v, vFuuuip) +//ARB_invalidate_subdata +GO(glInvalidateBufferData, vFu) +GO(glInvalidateBufferSubData, vFull) +GO(glInvalidateFramebuffer, vFuip) +GO(glInvalidateSubFramebuffer, vFuipiiii) +GO(glInvalidateTexImage, vFui) +GO(glInvalidateTexSubImage, vFuiiiiiii) +//ARB_map_buffer_range +GO(glFlushMappedBufferRange, vFull) +GO(glMapBufferRange, pFullu) +//ARB_matrix_palette +GO(glCurrentPaletteMatrixARB, vFi) +GO(glMatrixIndexPointerARB, vFiuip) +GO(glMatrixIndexubvARB, vFip) +GO(glMatrixIndexuivARB, vFip) +GO(glMatrixIndexusvARB, vFip) +//ARB_multi_draw_indirect +GO(glMultiDrawArraysIndirect, vFupii) +GO(glMultiDrawElementsIndirect, vFuupii) +//ARB_multisample +GO(glSampleCoverageARB, vFfC) +//ARB_multitexture +GO(glActiveTextureARB, vFu) +GO(glClientActiveTextureARB, vFu) +GO(glMultiTexCoord1dARB, vFud) +GO(glMultiTexCoord1dvARB, vFup) +GO(glMultiTexCoord1fARB, vFuf) +GO(glMultiTexCoord1fvARB, vFup) +GO(glMultiTexCoord1iARB, vFui) +GO(glMultiTexCoord1ivARB, vFup) +GO(glMultiTexCoord1sARB, vFuw) +GO(glMultiTexCoord1svARB, vFup) +GO(glMultiTexCoord2dARB, vFudd) +GO(glMultiTexCoord2dvARB, vFup) +GO(glMultiTexCoord2fARB, vFuff) +GO(glMultiTexCoord2fvARB, vFup) +GO(glMultiTexCoord2iARB, vFuii) +GO(glMultiTexCoord2ivARB, vFup) +GO(glMultiTexCoord2sARB, vFuww) +GO(glMultiTexCoord2svARB, vFup) +GO(glMultiTexCoord3dARB, vFuddd) +GO(glMultiTexCoord3dvARB, vFup) +GO(glMultiTexCoord3fARB, vFufff) +GO(glMultiTexCoord3fvARB, vFup) +GO(glMultiTexCoord3iARB, vFuiii) +GO(glMultiTexCoord3ivARB, vFup) +GO(glMultiTexCoord3sARB, vFuwww) +GO(glMultiTexCoord3svARB, vFup) +GO(glMultiTexCoord4dARB, vFudddd) +GO(glMultiTexCoord4dvARB, vFup) +GO(glMultiTexCoord4fARB, vFuffff) +GO(glMultiTexCoord4fvARB, vFup) +GO(glMultiTexCoord4iARB, vFuiiii) +GO(glMultiTexCoord4ivARB, vFup) +GO(glMultiTexCoord4sARB, vFuwwww) +GO(glMultiTexCoord4svARB, vFup) +//ARB_occlusion_query +GO(glBeginQueryARB, vFuu) +GO(glDeleteQueriesARB, vFip) +GO(glEndQueryARB, vFu) +GO(glGenQueriesARB, vFip) +GO(glGetQueryObjectivARB, vFuup) +GO(glGetQueryObjectuivARB, vFuup) +GO(glGetQueryivARB, vFuup) +GO(glIsQueryARB, CFu) +//ARB_point_parameters +GO(glPointParameterfARB, vFuf) +GO(glPointParameterfvARB, vFup) +//ARB_program_interface_query +GO(glGetProgramInterfaceiv, vFuuup) +GO(glGetProgramResourceIndex, uFuup) +GO(glGetProgramResourceLocation, iFuup) +GO(glGetProgramResourceLocationIndex, iFuup) +GO(glGetProgramResourceName, vFuuuipp) +GO(glGetProgramResourceiv, vFuuuipipp) +//ARB_provoking_vertex +GO(glProvokingVertex, vFu) +//ARB_robustness +GO(glGetGraphicsResetStatusARB, uFv) +GO(glGetnColorTableARB, vFuuuip) +GO(glGetnCompressedTexImageARB, vFuiip) +GO(glGetnConvolutionFilterARB, vFuuuip) +GO(glGetnHistogramARB, vFuCuuip) +GO(glGetnMapdvARB, vFuuip) +GO(glGetnMapfvARB, vFuuip) +GO(glGetnMapivARB, vFuuip) +GO(glGetnMinmaxARB, vFuCuuip) +GO(glGetnPixelMapfvARB, vFuip) +GO(glGetnPixelMapuivARB, vFuip) +GO(glGetnPixelMapusvARB, vFuip) +GO(glGetnPolygonStippleARB, vFip) +GO(glGetnSeparableFilterARB, vFuuuipipp) +GO(glGetnTexImageARB, vFuiuuip) +GO(glGetnUniformdvARB, vFuiip) +GO(glGetnUniformfvARB, vFuiip) +GO(glGetnUniformivARB, vFuiip) +GO(glGetnUniformuivARB, vFuiip) +GO(glReadnPixelsARB, vFiiiiuuip) +//ARB_sample_shading +GO(glMinSampleShadingARB, vFf) +//ARB_sampler_objects +GO(glBindSampler, vFuu) +GO(glDeleteSamplers, vFip) +GO(glGenSamplers, vFip) +GO(glGetSamplerParameterIiv, vFuup) +GO(glGetSamplerParameterIuiv, vFuup) +GO(glGetSamplerParameterfv, vFuup) +GO(glGetSamplerParameteriv, vFuup) +GO(glIsSampler, CFu) +GO(glSamplerParameterIiv, vFuup) +GO(glSamplerParameterIuiv, vFuup) +GO(glSamplerParameterf, vFuuf) +GO(glSamplerParameterfv, vFuup) +GO(glSamplerParameteri, vFuui) +GO(glSamplerParameteriv, vFuup) +//ARB_separate_shader_objects +GO(glActiveShaderProgram, vFuu) +GO(glBindProgramPipeline, vFu) +GOM(glCreateShaderProgramv, uFEuip) +GO(glDeleteProgramPipelines, vFip) +GO(glGenProgramPipelines, vFip) +GO(glGetProgramPipelineInfoLog, vFuipp) +GO(glGetProgramPipelineiv, vFuup) +GO(glIsProgramPipeline, CFu) +GO(glProgramUniform1d, vFuid) +GO(glProgramUniform1dv, vFuiip) +GO(glProgramUniform1f, vFuif) +GO(glProgramUniform1fv, vFuiip) +GO(glProgramUniform1i, vFuii) +GO(glProgramUniform1iv, vFuiip) +GO(glProgramUniform1ui, vFuiu) +GO(glProgramUniform1uiv, vFuiip) +GO(glProgramUniform2d, vFuidd) +GO(glProgramUniform2dv, vFuiip) +GO(glProgramUniform2f, vFuiff) +GO(glProgramUniform2fv, vFuiip) +GO(glProgramUniform2i, vFuiii) +GO(glProgramUniform2iv, vFuiip) +GO(glProgramUniform2ui, vFuiuu) +GO(glProgramUniform2uiv, vFuiip) +GO(glProgramUniform3d, vFuiddd) +GO(glProgramUniform3dv, vFuiip) +GO(glProgramUniform3f, vFuifff) +GO(glProgramUniform3fv, vFuiip) +GO(glProgramUniform3i, vFuiiii) +GO(glProgramUniform3iv, vFuiip) +GO(glProgramUniform3ui, vFuiuuu) +GO(glProgramUniform3uiv, vFuiip) +GO(glProgramUniform4d, vFuidddd) +GO(glProgramUniform4dv, vFuiip) +GO(glProgramUniform4f, vFuiffff) +GO(glProgramUniform4fv, vFuiip) +GO(glProgramUniform4i, vFuiiiii) +GO(glProgramUniform4iv, vFuiip) +GO(glProgramUniform4ui, vFuiuuuu) +GO(glProgramUniform4uiv, vFuiip) +GO(glProgramUniformMatrix2dv, vFuiiCp) +GO(glProgramUniformMatrix2fv, vFuiiCp) +GO(glProgramUniformMatrix2x3dv, vFuiiCp) +GO(glProgramUniformMatrix2x3fv, vFuiiCp) +GO(glProgramUniformMatrix2x4dv, vFuiiCp) +GO(glProgramUniformMatrix2x4fv, vFuiiCp) +GO(glProgramUniformMatrix3dv, vFuiiCp) +GO(glProgramUniformMatrix3fv, vFuiiCp) +GO(glProgramUniformMatrix3x2dv, vFuiiCp) +GO(glProgramUniformMatrix3x2fv, vFuiiCp) +GO(glProgramUniformMatrix3x4dv, vFuiiCp) +GO(glProgramUniformMatrix3x4fv, vFuiiCp) +GO(glProgramUniformMatrix4dv, vFuiiCp) +GO(glProgramUniformMatrix4fv, vFuiiCp) +GO(glProgramUniformMatrix4x2dv, vFuiiCp) +GO(glProgramUniformMatrix4x2fv, vFuiiCp) +GO(glProgramUniformMatrix4x3dv, vFuiiCp) +GO(glProgramUniformMatrix4x3fv, vFuiiCp) +GO(glUseProgramStages, vFuuu) +GO(glValidateProgramPipeline, vFu) +//ARB_shader_atomic_counters +GO(glGetActiveAtomicCounterBufferiv, vFuuup) +//ARB_shader_image_load_store +GO(glBindImageTexture, vFuuiCiuu) +GO(glMemoryBarrier, vFu) +//ARB_shader_objects +GO(glAttachObjectARB, vFuu) +GO(glCompileShaderARB, vFu) +GO(glCreateProgramObjectARB, uFv) +GO(glCreateShaderObjectARB, uFu) +GO(glDeleteObjectARB, vFu) +GO(glDetachObjectARB, vFuu) +GO(glGetActiveUniformARB, vFuuipppp) +GO(glGetAttachedObjectsARB, vFuipp) +GO(glGetHandleARB, uFu) +GO(glGetInfoLogARB, vFuipp) +GO(glGetObjectParameterfvARB, vFuup) +GO(glGetObjectParameterivARB, vFuup) +GO(glGetShaderSourceARB, vFuipp) +GO(glGetUniformLocationARB, iFup) +GO(glGetUniformfvARB, vFuip) +GO(glGetUniformivARB, vFuip) +GO(glLinkProgramARB, vFu) +GOM(glShaderSourceARB, vFEuipp) +GO(glUniform1fARB, vFif) +GO(glUniform1fvARB, vFiip) +GO(glUniform1iARB, vFii) +GO(glUniform1ivARB, vFiip) +GO(glUniform2fARB, vFiff) +GO(glUniform2fvARB, vFiip) +GO(glUniform2iARB, vFiii) +GO(glUniform2ivARB, vFiip) +GO(glUniform3fARB, vFifff) +GO(glUniform3fvARB, vFiip) +GO(glUniform3iARB, vFiiii) +GO(glUniform3ivARB, vFiip) +GO(glUniform4fARB, vFiffff) +GO(glUniform4fvARB, vFiip) +GO(glUniform4iARB, vFiiiii) +GO(glUniform4ivARB, vFiip) +GO(glUniformMatrix2fvARB, vFiiCp) +GO(glUniformMatrix3fvARB, vFiiCp) +GO(glUniformMatrix4fvARB, vFiiCp) +GO(glUseProgramObjectARB, vFu) +GO(glValidateProgramARB, vFu) +//ARB_shader_storage_buffer_object +GO(glShaderStorageBlockBinding, vFuuu) +//ARB_shader_subroutine +GO(glGetActiveSubroutineName, vFuuuipp) +GO(glGetActiveSubroutineUniformName, vFuuuipp) +GO(glGetActiveSubroutineUniformiv, vFuuuup) +GO(glGetProgramStageiv, vFuuup) +GO(glGetSubroutineIndex, uFuup) +GO(glGetSubroutineUniformLocation, iFuup) +GO(glGetUniformSubroutineuiv, vFuip) +GO(glUniformSubroutinesuiv, vFuip) +//ARB_shading_language_include +GOM(glCompileShaderIncludeARB, vFEuipp) +GO(glDeleteNamedStringARB, vFip) +GO(glGetNamedStringARB, vFipipp) +GO(glGetNamedStringivARB, vFipup) +GO(glIsNamedStringARB, CFip) +GO(glNamedStringARB, vFuipip) +//ARB_sync +GO(glClientWaitSync, uFpuU) +GO(glDeleteSync, vFp) +GO(glFenceSync, pFuu) +GO(glGetInteger64v, vFup) +GO(glGetSynciv, vFpuipp) +GO(glIsSync, CFp) +GO(glWaitSync, vFpuU) +//ARB_tessellation_shader +GO(glPatchParameterfv, vFup) +GO(glPatchParameteri, vFui) +//ARB_texture_buffer_object +GO(glTexBufferARB, vFuuu) +//ARB_texture_buffer_range +GO(glTexBufferRange, vFuuull) +GO(glTextureBufferRangeEXT, vFuuuull) +//ARB_texture_compression +GO(glCompressedTexImage1DARB, vFuiuiiip) +GO(glCompressedTexImage2DARB, vFuiuiiiip) +GO(glCompressedTexImage3DARB, vFuiuiiiiip) +GO(glCompressedTexSubImage1DARB, vFuiiiuip) +GO(glCompressedTexSubImage2DARB, vFuiiiiiuip) +GO(glCompressedTexSubImage3DARB, vFuiiiiiiiuip) +GO(glGetCompressedTexImageARB, vFuip) +//ARB_texture_multisample +GO(glGetMultisamplefv, vFuup) +GO(glSampleMaski, vFuu) +GO(glTexImage2DMultisample, vFuiuiiC) +GO(glTexImage3DMultisample, vFuiuiiiC) +//ARB_texture_storage +GO(glTexStorage1D, vFuiui) +GO(glTexStorage2D, vFuiuii) +GO(glTexStorage3D, vFuiuiii) +GO(glTextureStorage1DEXT, vFuuiui) +GO(glTextureStorage2DEXT, vFuuiuii) +GO(glTextureStorage3DEXT, vFuuiuiii) +//ARB_texture_storage_multisample +GO(glTexStorage2DMultisample, vFuiuiiC) +GO(glTexStorage3DMultisample, vFuiuiiiC) +GO(glTextureStorage2DMultisampleEXT, vFuuiuiiC) +GO(glTextureStorage3DMultisampleEXT, vFuuiuiiiC) +//ARB_texture_view +GO(glTextureView, vFuuuuuuuu) +//ARB_timer_query +GO(glGetQueryObjecti64v, vFuup) +GO(glGetQueryObjectui64v, vFuup) +GO(glQueryCounter, vFuu) +//ARB_transform_feedback2 +GO(glBindTransformFeedback, vFuu) +GO(glDeleteTransformFeedbacks, vFip) +GO(glDrawTransformFeedback, vFuu) +GO(glGenTransformFeedbacks, vFip) +GO(glIsTransformFeedback, CFu) +GO(glPauseTransformFeedback, vFv) +GO(glResumeTransformFeedback, vFv) +//ARB_transform_feedback3 +GO(glBeginQueryIndexed, vFuuu) +GO(glDrawTransformFeedbackStream, vFuuu) +GO(glEndQueryIndexed, vFuu) +GO(glGetQueryIndexediv, vFuuup) +//ARB_transform_feedback_instanced +GO(glDrawTransformFeedbackInstanced, vFuui) +GO(glDrawTransformFeedbackStreamInstanced, vFuuui) +//ARB_transpose_matrix +GO(glLoadTransposeMatrixdARB, vFp) +GO(glLoadTransposeMatrixfARB, vFp) +GO(glMultTransposeMatrixdARB, vFp) +GO(glMultTransposeMatrixfARB, vFp) +//ARB_uniform_buffer_object +GO(glGetActiveUniformBlockName, vFuuipp) +GO(glGetActiveUniformBlockiv, vFuuup) +GO(glGetActiveUniformName, vFuuipp) +GO(glGetActiveUniformsiv, vFuipup) +GO(glGetUniformBlockIndex, uFup) +GOM(glGetUniformIndices, vFEuipp) +GO(glUniformBlockBinding, vFuuu) +//ARB_vertex_array_object +GO(glBindVertexArray, vFu) +GO(glDeleteVertexArrays, vFip) +GO(glGenVertexArrays, vFip) +GO(glIsVertexArray, CFu) +//ARB_vertex_attrib_64bit +GO(glGetVertexAttribLdv, vFuup) +GO(glVertexAttribL1d, vFud) +GO(glVertexAttribL1dv, vFup) +GO(glVertexAttribL2d, vFudd) +GO(glVertexAttribL2dv, vFup) +GO(glVertexAttribL3d, vFuddd) +GO(glVertexAttribL3dv, vFup) +GO(glVertexAttribL4d, vFudddd) +GO(glVertexAttribL4dv, vFup) +GO(glVertexAttribLPointer, vFuiuip) +//ARB_vertex_attrib_binding +GO(glBindVertexBuffer, vFuuli) +GO(glVertexArrayBindVertexBufferEXT, vFuuuli) +GO(glVertexArrayVertexAttribBindingEXT, vFuuu) +GO(glVertexArrayVertexAttribFormatEXT, vFuuiuCu) +GO(glVertexArrayVertexAttribIFormatEXT, vFuuiuu) +GO(glVertexArrayVertexAttribLFormatEXT, vFuuiuu) +GO(glVertexArrayVertexBindingDivisorEXT, vFuuu) +GO(glVertexAttribBinding, vFuu) +GO(glVertexAttribFormat, vFuiuCu) +GO(glVertexAttribIFormat, vFuiuu) +GO(glVertexAttribLFormat, vFuiuu) +GO(glVertexBindingDivisor, vFuu) +//ARB_vertex_blend +GO(glVertexBlendARB, vFi) +GO(glWeightPointerARB, vFiuip) +GO(glWeightbvARB, vFip) +GO(glWeightdvARB, vFip) +GO(glWeightfvARB, vFip) +GO(glWeightivARB, vFip) +GO(glWeightsvARB, vFip) +GO(glWeightubvARB, vFip) +GO(glWeightuivARB, vFip) +GO(glWeightusvARB, vFip) +//ARB_vertex_buffer_object +GO(glBindBufferARB, vFuu) +GO(glBufferDataARB, vFulpu) +GO(glBufferSubDataARB, vFullp) +GO(glDeleteBuffersARB, vFip) +GO(glGenBuffersARB, vFip) +GO(glGetBufferParameterivARB, vFuup) +GO(glGetBufferPointervARB, vFuubp_) +GO(glGetBufferSubDataARB, vFullp) +GO(glIsBufferARB, CFu) +GO(glMapBufferARB, pFuu) +GO(glUnmapBufferARB, CFu) +//ARB_vertex_program +GO(glBindProgramARB, vFuu) +GO(glDeleteProgramsARB, vFip) +GO(glDisableVertexAttribArrayARB, vFu) +GO(glEnableVertexAttribArrayARB, vFu) +GO(glGenProgramsARB, vFip) +GO(glGetProgramEnvParameterdvARB, vFuup) +GO(glGetProgramEnvParameterfvARB, vFuup) +GO(glGetProgramLocalParameterdvARB, vFuup) +GO(glGetProgramLocalParameterfvARB, vFuup) +GO(glGetProgramStringARB, vFuup) +GO(glGetProgramivARB, vFuup) +GO(glGetVertexAttribPointervARB, vFuuBp_) +GO(glGetVertexAttribdvARB, vFuup) +GO(glGetVertexAttribfvARB, vFuup) +GO(glGetVertexAttribivARB, vFuup) +GO(glIsProgramARB, CFu) +GO(glProgramEnvParameter4dARB, vFuudddd) +GO(glProgramEnvParameter4dvARB, vFuup) +GO(glProgramEnvParameter4fARB, vFuuffff) +GO(glProgramEnvParameter4fvARB, vFuup) +GO(glProgramLocalParameter4dARB, vFuudddd) +GO(glProgramLocalParameter4dvARB, vFuup) +GO(glProgramLocalParameter4fARB, vFuuffff) +GO(glProgramLocalParameter4fvARB, vFuup) +GO(glProgramStringARB, vFuuip) +GO(glVertexAttrib1dARB, vFud) +GO(glVertexAttrib1dvARB, vFup) +GO(glVertexAttrib1fARB, vFuf) +GO(glVertexAttrib1fvARB, vFup) +GO(glVertexAttrib1sARB, vFuw) +GO(glVertexAttrib1svARB, vFup) +GO(glVertexAttrib2dARB, vFudd) +GO(glVertexAttrib2dvARB, vFup) +GO(glVertexAttrib2fARB, vFuff) +GO(glVertexAttrib2fvARB, vFup) +GO(glVertexAttrib2sARB, vFuww) +GO(glVertexAttrib2svARB, vFup) +GO(glVertexAttrib3dARB, vFuddd) +GO(glVertexAttrib3dvARB, vFup) +GO(glVertexAttrib3fARB, vFufff) +GO(glVertexAttrib3fvARB, vFup) +GO(glVertexAttrib3sARB, vFuwww) +GO(glVertexAttrib3svARB, vFup) +GO(glVertexAttrib4NbvARB, vFup) +GO(glVertexAttrib4NivARB, vFup) +GO(glVertexAttrib4NsvARB, vFup) +GO(glVertexAttrib4NubARB, vFuCCCC) +GO(glVertexAttrib4NubvARB, vFup) +GO(glVertexAttrib4NuivARB, vFup) +GO(glVertexAttrib4NusvARB, vFup) +GO(glVertexAttrib4bvARB, vFup) +GO(glVertexAttrib4dARB, vFudddd) +GO(glVertexAttrib4dvARB, vFup) +GO(glVertexAttrib4fARB, vFuffff) +GO(glVertexAttrib4fvARB, vFup) +GO(glVertexAttrib4ivARB, vFup) +GO(glVertexAttrib4sARB, vFuwwww) +GO(glVertexAttrib4svARB, vFup) +GO(glVertexAttrib4ubvARB, vFup) +GO(glVertexAttrib4uivARB, vFup) +GO(glVertexAttrib4usvARB, vFup) +GO(glVertexAttribPointerARB, vFuiuCip) +//ARB_vertex_shader +GO(glBindAttribLocationARB, vFuup) +GO(glGetActiveAttribARB, vFuuipppp) +GO(glGetAttribLocationARB, iFup) +//ARB_vertex_type_2_10_10_10_rev +GO(glColorP3ui, vFuu) +GO(glColorP3uiv, vFup) +GO(glColorP4ui, vFuu) +GO(glColorP4uiv, vFup) +GO(glMultiTexCoordP1ui, vFuuu) +GO(glMultiTexCoordP1uiv, vFuup) +GO(glMultiTexCoordP2ui, vFuuu) +GO(glMultiTexCoordP2uiv, vFuup) +GO(glMultiTexCoordP3ui, vFuuu) +GO(glMultiTexCoordP3uiv, vFuup) +GO(glMultiTexCoordP4ui, vFuuu) +GO(glMultiTexCoordP4uiv, vFuup) +GO(glNormalP3ui, vFuu) +GO(glNormalP3uiv, vFup) +GO(glSecondaryColorP3ui, vFuu) +GO(glSecondaryColorP3uiv, vFup) +GO(glTexCoordP1ui, vFuu) +GO(glTexCoordP1uiv, vFup) +GO(glTexCoordP2ui, vFuu) +GO(glTexCoordP2uiv, vFup) +GO(glTexCoordP3ui, vFuu) +GO(glTexCoordP3uiv, vFup) +GO(glTexCoordP4ui, vFuu) +GO(glTexCoordP4uiv, vFup) +GO(glVertexAttribP1ui, vFuuCu) +GO(glVertexAttribP1uiv, vFuuCp) +GO(glVertexAttribP2ui, vFuuCu) +GO(glVertexAttribP2uiv, vFuuCp) +GO(glVertexAttribP3ui, vFuuCu) +GO(glVertexAttribP3uiv, vFuuCp) +GO(glVertexAttribP4ui, vFuuCu) +GO(glVertexAttribP4uiv, vFuuCp) +GO(glVertexP2ui, vFuu) +GO(glVertexP2uiv, vFup) +GO(glVertexP3ui, vFuu) +GO(glVertexP3uiv, vFup) +GO(glVertexP4ui, vFuu) +GO(glVertexP4uiv, vFup) +//ARB_viewport_array +GO(glDepthRangeArrayv, vFuip) +GO(glDepthRangeIndexed, vFudd) +GO(glGetDoublei_v, vFuup) +GO(glGetFloati_v, vFuup) +GO(glScissorArrayv, vFuip) +GO(glScissorIndexed, vFuiiii) +GO(glScissorIndexedv, vFup) +GO(glViewportArrayv, vFuip) +GO(glViewportIndexedf, vFuffff) +GO(glViewportIndexedfv, vFup) +//ARB_window_pos +GO(glWindowPos2dARB, vFdd) +GO(glWindowPos2dvARB, vFp) +GO(glWindowPos2fARB, vFff) +GO(glWindowPos2fvARB, vFp) +GO(glWindowPos2iARB, vFii) +GO(glWindowPos2ivARB, vFp) +GO(glWindowPos2sARB, vFww) +GO(glWindowPos2svARB, vFp) +GO(glWindowPos3dARB, vFddd) +GO(glWindowPos3dvARB, vFp) +GO(glWindowPos3fARB, vFfff) +GO(glWindowPos3fvARB, vFp) +GO(glWindowPos3iARB, vFiii) +GO(glWindowPos3ivARB, vFp) +GO(glWindowPos3sARB, vFwww) +GO(glWindowPos3svARB, vFp) +//ATI_draw_buffers +GO(glDrawBuffersATI, vFip) +//ATI_element_array +GO(glDrawElementArrayATI, vFui) +GO(glDrawRangeElementArrayATI, vFuuui) +GO(glElementPointerATI, vFup) +//ATI_envmap_bumpmap +GO(glGetTexBumpParameterfvATI, vFup) +GO(glGetTexBumpParameterivATI, vFup) +GO(glTexBumpParameterfvATI, vFup) +GO(glTexBumpParameterivATI, vFup) +//ATI_fragment_shader +GO(glAlphaFragmentOp1ATI, vFuuuuuu) +GO(glAlphaFragmentOp2ATI, vFuuuuuuuuu) +GO(glAlphaFragmentOp3ATI, vFuuuuuuuuuuuu) +GO(glBeginFragmentShaderATI, vFv) +GO(glBindFragmentShaderATI, vFu) +GO(glColorFragmentOp1ATI, vFuuuuuuu) +GO(glColorFragmentOp2ATI, vFuuuuuuuuuu) +GO(glColorFragmentOp3ATI, vFuuuuuuuuuuuuu) +GO(glDeleteFragmentShaderATI, vFu) +GO(glEndFragmentShaderATI, vFv) +GO(glGenFragmentShadersATI, uFu) +GO(glPassTexCoordATI, vFuuu) +GO(glSampleMapATI, vFuuu) +GO(glSetFragmentShaderConstantATI, vFup) +//ATI_map_object_buffer +GO(glMapObjectBufferATI, pFu) +GO(glUnmapObjectBufferATI, vFu) +//ATI_pn_triangles +GO(glPNTrianglesfATI, vFuf) +GO(glPNTrianglesiATI, vFui) +//ATI_separate_stencil +GO(glStencilFuncSeparateATI, vFuuiu) +GO(glStencilOpSeparateATI, vFuuuu) +//ATI_vertex_array_object +GO(glArrayObjectATI, vFuiuiuu) +GO(glFreeObjectBufferATI, vFu) +GO(glGetArrayObjectfvATI, vFuup) +GO(glGetArrayObjectivATI, vFuup) +GO(glGetObjectBufferfvATI, vFuup) +GO(glGetObjectBufferivATI, vFuup) +GO(glGetVariantArrayObjectfvATI, vFuup) +GO(glGetVariantArrayObjectivATI, vFuup) +GO(glIsObjectBufferATI, CFu) +GO(glNewObjectBufferATI, uFipu) +GO(glUpdateObjectBufferATI, vFuuipu) +GO(glVariantArrayObjectATI, vFuuiuu) +//ATI_vertex_attrib_array_object +GO(glGetVertexAttribArrayObjectfvATI, vFuup) +GO(glGetVertexAttribArrayObjectivATI, vFuup) +GO(glVertexAttribArrayObjectATI, vFuiuCiuu) +//ATI_vertex_streams +GO(glClientActiveVertexStreamATI, vFu) +GO(glNormalStream3bATI, vFuccc) +GO(glNormalStream3bvATI, vFup) +GO(glNormalStream3dATI, vFuddd) +GO(glNormalStream3dvATI, vFup) +GO(glNormalStream3fATI, vFufff) +GO(glNormalStream3fvATI, vFup) +GO(glNormalStream3iATI, vFuiii) +GO(glNormalStream3ivATI, vFup) +GO(glNormalStream3sATI, vFuwww) +GO(glNormalStream3svATI, vFup) +GO(glVertexBlendEnvfATI, vFuf) +GO(glVertexBlendEnviATI, vFui) +GO(glVertexStream1dATI, vFud) +GO(glVertexStream1dvATI, vFup) +GO(glVertexStream1fATI, vFuf) +GO(glVertexStream1fvATI, vFup) +GO(glVertexStream1iATI, vFui) +GO(glVertexStream1ivATI, vFup) +GO(glVertexStream1sATI, vFuw) +GO(glVertexStream1svATI, vFup) +GO(glVertexStream2dATI, vFudd) +GO(glVertexStream2dvATI, vFup) +GO(glVertexStream2fATI, vFuff) +GO(glVertexStream2fvATI, vFup) +GO(glVertexStream2iATI, vFuii) +GO(glVertexStream2ivATI, vFup) +GO(glVertexStream2sATI, vFuww) +GO(glVertexStream2svATI, vFup) +GO(glVertexStream3dATI, vFuddd) +GO(glVertexStream3dvATI, vFup) +GO(glVertexStream3fATI, vFufff) +GO(glVertexStream3fvATI, vFup) +GO(glVertexStream3iATI, vFuiii) +GO(glVertexStream3ivATI, vFup) +GO(glVertexStream3sATI, vFuwww) +GO(glVertexStream3svATI, vFup) +GO(glVertexStream4dATI, vFudddd) +GO(glVertexStream4dvATI, vFup) +GO(glVertexStream4fATI, vFuffff) +GO(glVertexStream4fvATI, vFup) +GO(glVertexStream4iATI, vFuiiii) +GO(glVertexStream4ivATI, vFup) +GO(glVertexStream4sATI, vFuwwww) +GO(glVertexStream4svATI, vFup) +//EXT_bindable_uniform +GO(glGetUniformBufferSizeEXT, iFui) +GO(glGetUniformOffsetEXT, lFui) +GO(glUniformBufferEXT, vFuiu) +//EXT_blend_color +GO(glBlendColorEXT, vFffff) +//EXT_blend_equation_separate +GO(glBlendEquationSeparateEXT, vFuu) +//EXT_blend_func_separate +GO(glBlendFuncSeparateEXT, vFuuuu) +//EXT_blend_minmax +GO(glBlendEquationEXT, vFu) +//EXT_color_subtable +GO(glColorSubTableEXT, vFuiiuup) +GO(glCopyColorSubTableEXT, vFuiiii) +//EXT_compiled_vertex_array +GO(glLockArraysEXT, vFii) +GO(glUnlockArraysEXT, vFv) +//EXT_convolution +GO(glConvolutionFilter1DEXT, vFuuiuup) +GO(glConvolutionFilter2DEXT, vFuuiiuup) +GO(glConvolutionParameterfEXT, vFuuf) +GO(glConvolutionParameterfvEXT, vFuup) +GO(glConvolutionParameteriEXT, vFuui) +GO(glConvolutionParameterivEXT, vFuup) +GO(glCopyConvolutionFilter1DEXT, vFuuiii) +GO(glCopyConvolutionFilter2DEXT, vFuuiiii) +GO(glGetConvolutionFilterEXT, vFuuup) +GO(glGetConvolutionParameterfvEXT, vFuup) +GO(glGetConvolutionParameterivEXT, vFuup) +GO(glGetSeparableFilterEXT, vFuuuppp) +GO(glSeparableFilter2DEXT, vFuuiiuupp) +//EXT_coordinate_frame +GO(glBinormal3bEXT, vFccc) +GO(glBinormal3bvEXT, vFp) +GO(glBinormal3dEXT, vFddd) +GO(glBinormal3dvEXT, vFp) +GO(glBinormal3fEXT, vFfff) +GO(glBinormal3fvEXT, vFp) +GO(glBinormal3iEXT, vFiii) +GO(glBinormal3ivEXT, vFp) +GO(glBinormal3sEXT, vFwww) +GO(glBinormal3svEXT, vFp) +GO(glBinormalPointerEXT, vFuip) +GO(glTangent3bEXT, vFccc) +GO(glTangent3bvEXT, vFp) +GO(glTangent3dEXT, vFddd) +GO(glTangent3dvEXT, vFp) +GO(glTangent3fEXT, vFfff) +GO(glTangent3fvEXT, vFp) +GO(glTangent3iEXT, vFiii) +GO(glTangent3ivEXT, vFp) +GO(glTangent3sEXT, vFwww) +GO(glTangent3svEXT, vFp) +GO(glTangentPointerEXT, vFuip) +//EXT_copy_texture +GO(glCopyTexImage1DEXT, vFuiuiiii) +GO(glCopyTexImage2DEXT, vFuiuiiiii) +GO(glCopyTexSubImage1DEXT, vFuiiiii) +GO(glCopyTexSubImage2DEXT, vFuiiiiiii) +GO(glCopyTexSubImage3DEXT, vFuiiiiiiii) +//EXT_cull_vertex +GO(glCullParameterdvEXT, vFup) +GO(glCullParameterfvEXT, vFup) +//EXT_depth_bounds_test +GO(glDepthBoundsEXT, vFdd) +//EXT_direct_state_access +GO(glBindMultiTextureEXT, vFuuu) +GO(glCheckNamedFramebufferStatusEXT, uFuu) +GO(glClientAttribDefaultEXT, vFu) +GO(glCompressedMultiTexImage1DEXT, vFuuiuiiip) +GO(glCompressedMultiTexImage2DEXT, vFuuiuiiiip) +GO(glCompressedMultiTexImage3DEXT, vFuuiuiiiiip) +GO(glCompressedMultiTexSubImage1DEXT, vFuuiiiuip) +GO(glCompressedMultiTexSubImage2DEXT, vFuuiiiiiuip) +GO(glCompressedMultiTexSubImage3DEXT, vFuuiiiiiiiuip) +GO(glCompressedTextureImage1DEXT, vFuuiuiiip) +GO(glCompressedTextureImage2DEXT, vFuuiuiiiip) +GO(glCompressedTextureImage3DEXT, vFuuiuiiiiip) +GO(glCompressedTextureSubImage1DEXT, vFuuiiiuip) +GO(glCompressedTextureSubImage2DEXT, vFuuiiiiiuip) +GO(glCompressedTextureSubImage3DEXT, vFuuiiiiiiiuip) +GO(glCopyMultiTexImage1DEXT, vFuuiuiiii) +GO(glCopyMultiTexImage2DEXT, vFuuiuiiiii) +GO(glCopyMultiTexSubImage1DEXT, vFuuiiiii) +GO(glCopyMultiTexSubImage2DEXT, vFuuiiiiiii) +GO(glCopyMultiTexSubImage3DEXT, vFuuiiiiiiii) +GO(glCopyTextureImage1DEXT, vFuuiuiiii) +GO(glCopyTextureImage2DEXT, vFuuiuiiiii) +GO(glCopyTextureSubImage1DEXT, vFuuiiiii) +GO(glCopyTextureSubImage2DEXT, vFuuiiiiiii) +GO(glCopyTextureSubImage3DEXT, vFuuiiiiiiii) +GO(glDisableClientStateIndexedEXT, vFuu) +GO(glDisableClientStateiEXT, vFuu) +GO(glDisableVertexArrayAttribEXT, vFuu) +GO(glDisableVertexArrayEXT, vFuu) +GO(glEnableClientStateIndexedEXT, vFuu) +GO(glEnableClientStateiEXT, vFuu) +GO(glEnableVertexArrayAttribEXT, vFuu) +GO(glEnableVertexArrayEXT, vFuu) +GO(glFlushMappedNamedBufferRangeEXT, vFull) +GO(glFramebufferDrawBufferEXT, vFuu) +GO(glFramebufferDrawBuffersEXT, vFuip) +GO(glFramebufferReadBufferEXT, vFuu) +GO(glGenerateMultiTexMipmapEXT, vFuu) +GO(glGenerateTextureMipmapEXT, vFuu) +GO(glGetCompressedMultiTexImageEXT, vFuuip) +GO(glGetCompressedTextureImageEXT, vFuuip) +GO(glGetDoubleIndexedvEXT, vFuup) +GO(glGetDoublei_vEXT, vFuup) +GO(glGetFloatIndexedvEXT, vFuup) +GO(glGetFloati_vEXT, vFuup) +GO(glGetFramebufferParameterivEXT, vFuup) +GO(glGetMultiTexEnvfvEXT, vFuuup) +GO(glGetMultiTexEnvivEXT, vFuuup) +GO(glGetMultiTexGendvEXT, vFuuup) +GO(glGetMultiTexGenfvEXT, vFuuup) +GO(glGetMultiTexGenivEXT, vFuuup) +GO(glGetMultiTexImageEXT, vFuuiuup) +GO(glGetMultiTexLevelParameterfvEXT, vFuuiup) +GO(glGetMultiTexLevelParameterivEXT, vFuuiup) +GO(glGetMultiTexParameterIivEXT, vFuuup) +GO(glGetMultiTexParameterIuivEXT, vFuuup) +GO(glGetMultiTexParameterfvEXT, vFuuup) +GO(glGetMultiTexParameterivEXT, vFuuup) +GO(glGetNamedBufferParameterivEXT, vFuup) +GO(glGetNamedBufferPointervEXT, vFuuBp_) +GO(glGetNamedBufferSubDataEXT, vFullp) +GO(glGetNamedFramebufferAttachmentParameterivEXT, vFuuup) +GO(glGetNamedProgramLocalParameterIivEXT, vFuuup) +GO(glGetNamedProgramLocalParameterIuivEXT, vFuuup) +GO(glGetNamedProgramLocalParameterdvEXT, vFuuup) +GO(glGetNamedProgramLocalParameterfvEXT, vFuuup) +GO(glGetNamedProgramStringEXT, vFuuup) +GO(glGetNamedProgramivEXT, vFuuup) +GO(glGetNamedRenderbufferParameterivEXT, vFuup) +GO(glGetPointerIndexedvEXT, vFuuBp_) +GO(glGetPointeri_vEXT, vFuuBp_) +GO(glGetTextureImageEXT, vFuuiuup) +GO(glGetTextureLevelParameterfvEXT, vFuuiup) +GO(glGetTextureLevelParameterivEXT, vFuuiup) +GO(glGetTextureParameterIivEXT, vFuuup) +GO(glGetTextureParameterIuivEXT, vFuuup) +GO(glGetTextureParameterfvEXT, vFuuup) +GO(glGetTextureParameterivEXT, vFuuup) +GO(glGetVertexArrayIntegeri_vEXT, vFuuup) +GO(glGetVertexArrayIntegervEXT, vFuup) +GO(glGetVertexArrayPointeri_vEXT, vFuuuBp_) +GO(glGetVertexArrayPointervEXT, vFuuBp_) +GO(glMapNamedBufferEXT, pFuu) +GO(glMapNamedBufferRangeEXT, pFullu) +GO(glMatrixFrustumEXT, vFudddddd) +GO(glMatrixLoadIdentityEXT, vFu) +GO(glMatrixLoadTransposedEXT, vFup) +GO(glMatrixLoadTransposefEXT, vFup) +GO(glMatrixLoaddEXT, vFup) +GO(glMatrixLoadfEXT, vFup) +GO(glMatrixMultTransposedEXT, vFup) +GO(glMatrixMultTransposefEXT, vFup) +GO(glMatrixMultdEXT, vFup) +GO(glMatrixMultfEXT, vFup) +GO(glMatrixOrthoEXT, vFudddddd) +GO(glMatrixPopEXT, vFu) +GO(glMatrixPushEXT, vFu) +GO(glMatrixRotatedEXT, vFudddd) +GO(glMatrixRotatefEXT, vFuffff) +GO(glMatrixScaledEXT, vFuddd) +GO(glMatrixScalefEXT, vFufff) +GO(glMatrixTranslatedEXT, vFuddd) +GO(glMatrixTranslatefEXT, vFufff) +GO(glMultiTexBufferEXT, vFuuuu) +GO(glMultiTexCoordPointerEXT, vFuiuip) +GO(glMultiTexEnvfEXT, vFuuuf) +GO(glMultiTexEnvfvEXT, vFuuup) +GO(glMultiTexEnviEXT, vFuuui) +GO(glMultiTexEnvivEXT, vFuuup) +GO(glMultiTexGendEXT, vFuuud) +GO(glMultiTexGendvEXT, vFuuup) +GO(glMultiTexGenfEXT, vFuuuf) +GO(glMultiTexGenfvEXT, vFuuup) +GO(glMultiTexGeniEXT, vFuuui) +GO(glMultiTexGenivEXT, vFuuup) +GO(glMultiTexImage1DEXT, vFuuiiiiuup) +GO(glMultiTexImage2DEXT, vFuuiiiiiuup) +GO(glMultiTexImage3DEXT, vFuuiiiiiiuup) +GO(glMultiTexParameterIivEXT, vFuuup) +GO(glMultiTexParameterIuivEXT, vFuuup) +GO(glMultiTexParameterfEXT, vFuuuf) +GO(glMultiTexParameterfvEXT, vFuuup) +GO(glMultiTexParameteriEXT, vFuuui) +GO(glMultiTexParameterivEXT, vFuuup) +GO(glMultiTexRenderbufferEXT, vFuuu) +GO(glMultiTexSubImage1DEXT, vFuuiiiuup) +GO(glMultiTexSubImage2DEXT, vFuuiiiiiuup) +GO(glMultiTexSubImage3DEXT, vFuuiiiiiiiuup) +GO(glNamedBufferDataEXT, vFulpu) +GO(glNamedBufferSubDataEXT, vFullp) +GO(glNamedCopyBufferSubDataEXT, vFuulll) +GO(glNamedFramebufferRenderbufferEXT, vFuuuu) +GO(glNamedFramebufferTexture1DEXT, vFuuuui) +GO(glNamedFramebufferTexture2DEXT, vFuuuui) +GO(glNamedFramebufferTexture3DEXT, vFuuuuii) +GO(glNamedFramebufferTextureEXT, vFuuui) +GO(glNamedFramebufferTextureFaceEXT, vFuuuiu) +GO(glNamedFramebufferTextureLayerEXT, vFuuuii) +GO(glNamedProgramLocalParameter4dEXT, vFuuudddd) +GO(glNamedProgramLocalParameter4dvEXT, vFuuup) +GO(glNamedProgramLocalParameter4fEXT, vFuuuffff) +GO(glNamedProgramLocalParameter4fvEXT, vFuuup) +GO(glNamedProgramLocalParameterI4iEXT, vFuuuiiii) +GO(glNamedProgramLocalParameterI4ivEXT, vFuuup) +GO(glNamedProgramLocalParameterI4uiEXT, vFuuuuuuu) +GO(glNamedProgramLocalParameterI4uivEXT, vFuuup) +GO(glNamedProgramLocalParameters4fvEXT, vFuuuip) +GO(glNamedProgramLocalParametersI4ivEXT, vFuuuip) +GO(glNamedProgramLocalParametersI4uivEXT, vFuuuip) +GO(glNamedProgramStringEXT, vFuuuip) +GO(glNamedRenderbufferStorageEXT, vFuuii) +GO(glNamedRenderbufferStorageMultisampleCoverageEXT, vFuiiuii) +GO(glNamedRenderbufferStorageMultisampleEXT, vFuiuii) +GO(glProgramUniform1dEXT, vFuid) +GO(glProgramUniform1dvEXT, vFuiip) +GO(glProgramUniform1fEXT, vFuif) +GO(glProgramUniform1fvEXT, vFuiip) +GO(glProgramUniform1iEXT, vFuii) +GO(glProgramUniform1ivEXT, vFuiip) +GO(glProgramUniform1uiEXT, vFuiu) +GO(glProgramUniform1uivEXT, vFuiip) +GO(glProgramUniform2dEXT, vFuidd) +GO(glProgramUniform2dvEXT, vFuiip) +GO(glProgramUniform2fEXT, vFuiff) +GO(glProgramUniform2fvEXT, vFuiip) +GO(glProgramUniform2iEXT, vFuiii) +GO(glProgramUniform2ivEXT, vFuiip) +GO(glProgramUniform2uiEXT, vFuiuu) +GO(glProgramUniform2uivEXT, vFuiip) +GO(glProgramUniform3dEXT, vFuiddd) +GO(glProgramUniform3dvEXT, vFuiip) +GO(glProgramUniform3fEXT, vFuifff) +GO(glProgramUniform3fvEXT, vFuiip) +GO(glProgramUniform3iEXT, vFuiiii) +GO(glProgramUniform3ivEXT, vFuiip) +GO(glProgramUniform3uiEXT, vFuiuuu) +GO(glProgramUniform3uivEXT, vFuiip) +GO(glProgramUniform4dEXT, vFuidddd) +GO(glProgramUniform4dvEXT, vFuiip) +GO(glProgramUniform4fEXT, vFuiffff) +GO(glProgramUniform4fvEXT, vFuiip) +GO(glProgramUniform4iEXT, vFuiiiii) +GO(glProgramUniform4ivEXT, vFuiip) +GO(glProgramUniform4uiEXT, vFuiuuuu) +GO(glProgramUniform4uivEXT, vFuiip) +GO(glProgramUniformMatrix2dvEXT, vFuiiCp) +GO(glProgramUniformMatrix2fvEXT, vFuiiCp) +GO(glProgramUniformMatrix2x3dvEXT, vFuiiCp) +GO(glProgramUniformMatrix2x3fvEXT, vFuiiCp) +GO(glProgramUniformMatrix2x4dvEXT, vFuiiCp) +GO(glProgramUniformMatrix2x4fvEXT, vFuiiCp) +GO(glProgramUniformMatrix3dvEXT, vFuiiCp) +GO(glProgramUniformMatrix3fvEXT, vFuiiCp) +GO(glProgramUniformMatrix3x2dvEXT, vFuiiCp) +GO(glProgramUniformMatrix3x2fvEXT, vFuiiCp) +GO(glProgramUniformMatrix3x4dvEXT, vFuiiCp) +GO(glProgramUniformMatrix3x4fvEXT, vFuiiCp) +GO(glProgramUniformMatrix4dvEXT, vFuiiCp) +GO(glProgramUniformMatrix4fvEXT, vFuiiCp) +GO(glProgramUniformMatrix4x2dvEXT, vFuiiCp) +GO(glProgramUniformMatrix4x2fvEXT, vFuiiCp) +GO(glProgramUniformMatrix4x3dvEXT, vFuiiCp) +GO(glProgramUniformMatrix4x3fvEXT, vFuiiCp) +GO(glPushClientAttribDefaultEXT, vFu) +GO(glTextureBufferEXT, vFuuuu) +GO(glTextureImage1DEXT, vFuuiiiiuup) +GO(glTextureImage2DEXT, vFuuiiiiiuup) +GO(glTextureImage3DEXT, vFuuiiiiiiuup) +GO(glTextureParameterIivEXT, vFuuup) +GO(glTextureParameterIuivEXT, vFuuup) +GO(glTextureParameterfEXT, vFuuuf) +GO(glTextureParameterfvEXT, vFuuup) +GO(glTextureParameteriEXT, vFuuui) +GO(glTextureParameterivEXT, vFuuup) +GO(glTextureRenderbufferEXT, vFuuu) +GO(glTextureSubImage1DEXT, vFuuiiiuup) +GO(glTextureSubImage2DEXT, vFuuiiiiiuup) +GO(glTextureSubImage3DEXT, vFuuiiiiiiiuup) +GO(glUnmapNamedBufferEXT, CFu) +GO(glVertexArrayColorOffsetEXT, vFuuiuil) +GO(glVertexArrayEdgeFlagOffsetEXT, vFuuil) +GO(glVertexArrayFogCoordOffsetEXT, vFuuuil) +GO(glVertexArrayIndexOffsetEXT, vFuuuil) +GO(glVertexArrayMultiTexCoordOffsetEXT, vFuuuiuil) +GO(glVertexArrayNormalOffsetEXT, vFuuuil) +GO(glVertexArraySecondaryColorOffsetEXT, vFuuiuil) +GO(glVertexArrayTexCoordOffsetEXT, vFuuiuil) +GO(glVertexArrayVertexAttribIOffsetEXT, vFuuuiuil) +GO(glVertexArrayVertexAttribOffsetEXT, vFuuuiuCil) +GO(glVertexArrayVertexOffsetEXT, vFuuiuil) +//EXT_draw_buffers2 +GO(glColorMaskIndexedEXT, vFuCCCC) +GO(glDisableIndexedEXT, vFuu) +GO(glEnableIndexedEXT, vFuu) +GO(glGetBooleanIndexedvEXT, vFuup) +GO(glGetIntegerIndexedvEXT, vFuup) +GO(glIsEnabledIndexedEXT, CFuu) +//EXT_draw_instanced +GO(glDrawArraysInstancedEXT, vFuiii) +GO(glDrawElementsInstancedEXT, vFuiupi) +//EXT_draw_range_elements +GO(glDrawRangeElementsEXT, vFuuuiup) +//EXT_fog_coord +GO(glFogCoordPointerEXT, vFuip) +GO(glFogCoorddEXT, vFd) +GO(glFogCoorddvEXT, vFp) +GO(glFogCoordfEXT, vFf) +GO(glFogCoordfvEXT, vFp) +//EXT_framebuffer_blit +GO(glBlitFramebufferEXT, vFiiiiiiiiuu) +//EXT_framebuffer_object +GO(glBindFramebufferEXT, vFuu) +GO(glBindRenderbufferEXT, vFuu) +GO(glCheckFramebufferStatusEXT, uFu) +GO(glDeleteFramebuffersEXT, vFip) +GO(glDeleteRenderbuffersEXT, vFip) +GO(glFramebufferRenderbufferEXT, vFuuuu) +GO(glFramebufferTexture1DEXT, vFuuuui) +GO(glFramebufferTexture2DEXT, vFuuuui) +GO(glFramebufferTexture3DEXT, vFuuuuii) +GO(glGenFramebuffersEXT, vFip) +GO(glGenRenderbuffersEXT, vFip) +GO(glGenerateMipmapEXT, vFu) +GO(glGetFramebufferAttachmentParameterivEXT, vFuuup) +GO(glGetRenderbufferParameterivEXT, vFuup) +GO(glIsFramebufferEXT, CFu) +GO(glIsRenderbufferEXT, CFu) +GO(glRenderbufferStorageEXT, vFuuii) +//EXT_geometry_shader4 +GO(glProgramParameteriEXT, vFuui) +//EXT_gpu_program_parameters +GO(glProgramEnvParameters4fvEXT, vFuuip) +GO(glProgramLocalParameters4fvEXT, vFuuip) +//EXT_gpu_shader4 +GO(glBindFragDataLocationEXT, vFuup) +GO(glGetFragDataLocationEXT, iFup) +GO(glGetUniformuivEXT, vFuip) +GO(glUniform1uiEXT, vFiu) +GO(glUniform1uivEXT, vFiip) +GO(glUniform2uiEXT, vFiuu) +GO(glUniform2uivEXT, vFiip) +GO(glUniform3uiEXT, vFiuuu) +GO(glUniform3uivEXT, vFiip) +GO(glUniform4uiEXT, vFiuuuu) +GO(glUniform4uivEXT, vFiip) +//EXT_histogram +GO(glGetHistogramEXT, vFuCuup) +GO(glGetHistogramParameterfvEXT, vFuup) +GO(glGetHistogramParameterivEXT, vFuup) +GO(glGetMinmaxEXT, vFuCuup) +GO(glGetMinmaxParameterfvEXT, vFuup) +GO(glGetMinmaxParameterivEXT, vFuup) +GO(glHistogramEXT, vFuiuC) +GO(glMinmaxEXT, vFuuC) +GO(glResetHistogramEXT, vFu) +GO(glResetMinmaxEXT, vFu) +//EXT_index_func +GO(glIndexFuncEXT, vFuf) +//EXT_index_material +GO(glIndexMaterialEXT, vFuu) +//EXT_light_texture +GO(glApplyTextureEXT, vFu) +GO(glTextureLightEXT, vFu) +GO(glTextureMaterialEXT, vFuu) +//EXT_multi_draw_arrays +GO(glMultiDrawArraysEXT, vFuppi) +GOM(glMultiDrawElementsEXT, vFEupupi) +//EXT_multisample +GO(glSampleMaskEXT, vFfC) +GO(glSamplePatternEXT, vFu) +//EXT_paletted_texture +GO(glColorTableEXT, vFuuiuup) +GO(glGetColorTableEXT, vFuuup) +GO(glGetColorTableParameterfvEXT, vFuup) +GO(glGetColorTableParameterivEXT, vFuup) +//EXT_pixel_transform +GO(glGetPixelTransformParameterfvEXT, vFuup) +GO(glGetPixelTransformParameterivEXT, vFuup) +GO(glPixelTransformParameterfEXT, vFuuf) +GO(glPixelTransformParameterfvEXT, vFuup) +GO(glPixelTransformParameteriEXT, vFuui) +GO(glPixelTransformParameterivEXT, vFuup) +//EXT_point_parameters +GO(glPointParameterfEXT, vFuf) +GO(glPointParameterfvEXT, vFup) +//EXT_polygon_offset +GO(glPolygonOffsetEXT, vFff) +//EXT_provoking_vertex +GO(glProvokingVertexEXT, vFu) +//EXT_secondary_color +GO(glSecondaryColor3bEXT, vFccc) +GO(glSecondaryColor3bvEXT, vFp) +GO(glSecondaryColor3dEXT, vFddd) +GO(glSecondaryColor3dvEXT, vFp) +GO(glSecondaryColor3fEXT, vFfff) +GO(glSecondaryColor3fvEXT, vFp) +GO(glSecondaryColor3iEXT, vFiii) +GO(glSecondaryColor3ivEXT, vFp) +GO(glSecondaryColor3sEXT, vFwww) +GO(glSecondaryColor3svEXT, vFp) +GO(glSecondaryColor3ubEXT, vFCCC) +GO(glSecondaryColor3ubvEXT, vFp) +GO(glSecondaryColor3uiEXT, vFuuu) +GO(glSecondaryColor3uivEXT, vFp) +GO(glSecondaryColor3usEXT, vFWWW) +GO(glSecondaryColor3usvEXT, vFp) +GO(glSecondaryColorPointerEXT, vFiuip) +//EXT_separate_shader_objects +GO(glActiveProgramEXT, vFu) +GO(glCreateShaderProgramEXT, uFup) +GO(glUseShaderProgramEXT, vFuu) +//EXT_shader_image_load_store +GO(glBindImageTextureEXT, vFuuiCiui) +GO(glMemoryBarrierEXT, vFu) +//EXT_stencil_clear_tag +GO(glStencilClearTagEXT, vFiu) +//EXT_stencil_two_side +GO(glActiveStencilFaceEXT, vFu) +//EXT_subtexture +GO(glTexSubImage1DEXT, vFuiiiuup) +GO(glTexSubImage2DEXT, vFuiiiiiuup) +//EXT_texture3D +GO(glTexImage3DEXT, vFuiuiiiiuup) +GO(glTexSubImage3DEXT, vFuiiiiiiiuup) +//EXT_texture_buffer_object +GO(glTexBufferEXT, vFuuu) +//EXT_texture_integer +GO(glClearColorIiEXT, vFiiii) +GO(glClearColorIuiEXT, vFuuuu) +GO(glGetTexParameterIivEXT, vFuup) +GO(glGetTexParameterIuivEXT, vFuup) +GO(glTexParameterIivEXT, vFuup) +GO(glTexParameterIuivEXT, vFuup) +//EXT_texture_object +GO(glAreTexturesResidentEXT, CFipp) +GO(glBindTextureEXT, vFuu) +GO(glDeleteTexturesEXT, vFip) +GO(glGenTexturesEXT, vFip) +GO(glIsTextureEXT, CFu) +GO(glPrioritizeTexturesEXT, vFipp) +//EXT_texture_perturb_normal +GO(glTextureNormalEXT, vFu) +//EXT_transform_feedback +GO(glBeginTransformFeedbackEXT, vFu) +GO(glBindBufferBaseEXT, vFuuu) +GO(glBindBufferOffsetEXT, vFuuul) +GO(glBindBufferRangeEXT, vFuuull) +GO(glEndTransformFeedbackEXT, vFv) +GO(glGetTransformFeedbackVaryingEXT, vFuuipppp) +GOM(glTransformFeedbackVaryingsEXT, vFEuipu) +//EXT_vertex_array +GO(glArrayElementEXT, vFi) +GO(glColorPointerEXT, vFiuiip) +GO(glDrawArraysEXT, vFuii) +GO(glEdgeFlagPointerEXT, vFiip) +GO(glGetPointervEXT, vFuBp_) +GO(glIndexPointerEXT, vFuiip) +GO(glNormalPointerEXT, vFuiip) +GO(glTexCoordPointerEXT, vFiuiip) +GO(glVertexPointerEXT, vFiuiip) +//EXT_vertex_attrib_64bit +GO(glGetVertexAttribLdvEXT, vFuup) +GO(glVertexArrayVertexAttribLOffsetEXT, vFuuuiuil) +GO(glVertexAttribL1dEXT, vFud) +GO(glVertexAttribL1dvEXT, vFup) +GO(glVertexAttribL2dEXT, vFudd) +GO(glVertexAttribL2dvEXT, vFup) +GO(glVertexAttribL3dEXT, vFuddd) +GO(glVertexAttribL3dvEXT, vFup) +GO(glVertexAttribL4dEXT, vFudddd) +GO(glVertexAttribL4dvEXT, vFup) +GO(glVertexAttribLPointerEXT, vFuiuip) +//EXT_vertex_shader +GO(glBeginVertexShaderEXT, vFv) +GO(glBindLightParameterEXT, uFuu) +GO(glBindMaterialParameterEXT, uFuu) +GO(glBindParameterEXT, uFu) +GO(glBindTexGenParameterEXT, uFuuu) +GO(glBindTextureUnitParameterEXT, uFuu) +GO(glBindVertexShaderEXT, vFu) +GO(glDeleteVertexShaderEXT, vFu) +GO(glDisableVariantClientStateEXT, vFu) +GO(glEnableVariantClientStateEXT, vFu) +GO(glEndVertexShaderEXT, vFv) +GO(glExtractComponentEXT, vFuuu) +GO(glGenSymbolsEXT, uFuuuu) +GO(glGenVertexShadersEXT, uFu) +GO(glGetInvariantBooleanvEXT, vFuup) +GO(glGetInvariantFloatvEXT, vFuup) +GO(glGetInvariantIntegervEXT, vFuup) +GO(glGetLocalConstantBooleanvEXT, vFuup) +GO(glGetLocalConstantFloatvEXT, vFuup) +GO(glGetLocalConstantIntegervEXT, vFuup) +GO(glGetVariantBooleanvEXT, vFuup) +GO(glGetVariantFloatvEXT, vFuup) +GO(glGetVariantIntegervEXT, vFuup) +GO(glGetVariantPointervEXT, vFuuBp_) +GO(glInsertComponentEXT, vFuuu) +GO(glIsVariantEnabledEXT, CFuu) +GO(glSetInvariantEXT, vFuup) +GO(glSetLocalConstantEXT, vFuup) +GO(glShaderOp1EXT, vFuuu) +GO(glShaderOp2EXT, vFuuuu) +GO(glShaderOp3EXT, vFuuuuu) +GO(glSwizzleEXT, vFuuuuuu) +GO(glVariantPointerEXT, vFuuup) +GO(glVariantbvEXT, vFup) +GO(glVariantdvEXT, vFup) +GO(glVariantfvEXT, vFup) +GO(glVariantivEXT, vFup) +GO(glVariantsvEXT, vFup) +GO(glVariantubvEXT, vFup) +GO(glVariantuivEXT, vFup) +GO(glVariantusvEXT, vFup) +GO(glWriteMaskEXT, vFuuuuuu) +//EXT_vertex_weighting +GO(glVertexWeightPointerEXT, vFiuip) +GO(glVertexWeightfEXT, vFf) +GO(glVertexWeightfvEXT, vFp) +//EXT_x11_sync_object +GO(glImportSyncEXT, pFulu) +//GREMEDY_frame_terminator +GO(glFrameTerminatorGREMEDY, vFv) +//GREMEDY_string_marker +GO(glStringMarkerGREMEDY, vFip) +//HP_image_transform +GO(glGetImageTransformParameterfvHP, vFuup) +GO(glGetImageTransformParameterivHP, vFuup) +GO(glImageTransformParameterfHP, vFuuf) +GO(glImageTransformParameterfvHP, vFuup) +GO(glImageTransformParameteriHP, vFuui) +GO(glImageTransformParameterivHP, vFuup) +//IBM_multimode_draw_arrays +GO(glMultiModeDrawArraysIBM, vFpppii) +//GO(glMultiModeDrawElementsIBM, vFppubp_ii) +//IBM_static_data +GO(glFlushStaticDataIBM, vFu) +//IBM_vertex_array_lists +GO(glColorPointerListIBM, vFiuibp_i) +GO(glEdgeFlagPointerListIBM, vFibp_i) +GO(glFogCoordPointerListIBM, vFuibp_i) +GO(glIndexPointerListIBM, vFuibp_i) +GO(glNormalPointerListIBM, vFuibp_i) +GO(glSecondaryColorPointerListIBM, vFiuibp_i) +GO(glTexCoordPointerListIBM, vFiuibp_i) +GO(glVertexPointerListIBM, vFiuibp_i) +//INGR_blend_func_separate +GO(glBlendFuncSeparateINGR, vFuuuu) +//INTEL_map_texture +GO(glMapTexture2DINTEL, pFuiupp) +GO(glSyncTextureINTEL, vFu) +GO(glUnmapTexture2DINTEL, vFui) +//INTEL_parallel_arrays +//GO(glColorPointervINTEL, vFiubp_) +//GO(glNormalPointervINTEL, vFubp_) +//GO(glTexCoordPointervINTEL, vFiubp_) +//GO(glVertexPointervINTEL, vFiubp_) +//KHR_debug +GOM(glDebugMessageCallback, vFEpp) // not ideal, because the my_ version will always exist, even if glDebugMessageCallback doesn't +GO(glDebugMessageControl, vFuuuipC) +GO(glDebugMessageInsert, vFuuuuip) +GO(glGetDebugMessageLog, uFuipppppp) +GO(glGetObjectLabel, vFuuipp) +GO(glGetObjectPtrLabel, vFpipp) +GO(glObjectLabel, vFuuip) +GO(glObjectPtrLabel, vFpip) +GO(glPopDebugGroup, vFv) +GO(glPushDebugGroup, vFuuip) +//MESA_resize_buffers +GO(glResizeBuffersMESA, vFv) +//MESA_window_pos +GO(glWindowPos2dMESA, vFdd) +GO(glWindowPos2dvMESA, vFp) +GO(glWindowPos2fMESA, vFff) +GO(glWindowPos2fvMESA, vFp) +GO(glWindowPos2iMESA, vFii) +GO(glWindowPos2ivMESA, vFp) +GO(glWindowPos2sMESA, vFww) +GO(glWindowPos2svMESA, vFp) +GO(glWindowPos3dMESA, vFddd) +GO(glWindowPos3dvMESA, vFp) +GO(glWindowPos3fMESA, vFfff) +GO(glWindowPos3fvMESA, vFp) +GO(glWindowPos3iMESA, vFiii) +GO(glWindowPos3ivMESA, vFp) +GO(glWindowPos3sMESA, vFwww) +GO(glWindowPos3svMESA, vFp) +GO(glWindowPos4dMESA, vFdddd) +GO(glWindowPos4dvMESA, vFp) +GO(glWindowPos4fMESA, vFffff) +GO(glWindowPos4fvMESA, vFp) +GO(glWindowPos4iMESA, vFiiii) +GO(glWindowPos4ivMESA, vFp) +GO(glWindowPos4sMESA, vFwwww) +GO(glWindowPos4svMESA, vFp) +//NVX_conditional_render +GO(glBeginConditionalRenderNVX, vFu) +GO(glEndConditionalRenderNVX, vFv) +//NV_bindless_texture +GO(glGetImageHandleNV, UFuiCiu) +GO(glGetTextureHandleNV, UFu) +GO(glGetTextureSamplerHandleNV, UFuu) +GO(glIsImageHandleResidentNV, CFU) +GO(glIsTextureHandleResidentNV, CFU) +GO(glMakeImageHandleNonResidentNV, vFU) +GO(glMakeImageHandleResidentNV, vFUu) +GO(glMakeTextureHandleNonResidentNV, vFU) +GO(glMakeTextureHandleResidentNV, vFU) +GO(glProgramUniformHandleui64NV, vFuiU) +GO(glProgramUniformHandleui64vNV, vFuiip) +GO(glUniformHandleui64NV, vFiU) +GO(glUniformHandleui64vNV, vFiip) +//NV_conditional_render +GO(glBeginConditionalRenderNV, vFuu) +GO(glEndConditionalRenderNV, vFv) +//NV_copy_image +GO(glCopyImageSubDataNV, vFuuiiiiuuiiiiiii) +//NV_depth_buffer_float +GO(glClearDepthdNV, vFd) +GO(glDepthBoundsdNV, vFdd) +GO(glDepthRangedNV, vFdd) +//NV_draw_texture +GO(glDrawTextureNV, vFuufffffffff) +//NV_evaluators +GO(glEvalMapsNV, vFuu) +GO(glGetMapAttribParameterfvNV, vFuuup) +GO(glGetMapAttribParameterivNV, vFuuup) +GO(glGetMapControlPointsNV, vFuuuiiCp) +GO(glGetMapParameterfvNV, vFuup) +GO(glGetMapParameterivNV, vFuup) +GO(glMapControlPointsNV, vFuuuiiiiCp) +GO(glMapParameterfvNV, vFuup) +GO(glMapParameterivNV, vFuup) +//NV_explicit_multisample +GO(glGetMultisamplefvNV, vFuup) +GO(glSampleMaskIndexedNV, vFuu) +GO(glTexRenderbufferNV, vFuu) +//NV_fence +GO(glDeleteFencesNV, vFip) +GO(glFinishFenceNV, vFu) +GO(glGenFencesNV, vFip) +GO(glGetFenceivNV, vFuup) +GO(glIsFenceNV, CFu) +GO(glSetFenceNV, vFuu) +GO(glTestFenceNV, CFu) +//NV_fragment_program +GO(glGetProgramNamedParameterdvNV, vFuipp) +GO(glGetProgramNamedParameterfvNV, vFuipp) +GO(glProgramNamedParameter4dNV, vFuipdddd) +GO(glProgramNamedParameter4dvNV, vFuipp) +GO(glProgramNamedParameter4fNV, vFuipffff) +GO(glProgramNamedParameter4fvNV, vFuipp) +//NV_framebuffer_multisample_coverage +GO(glRenderbufferStorageMultisampleCoverageNV, vFuiiuii) +//NV_geometry_program4 +GO(glFramebufferTextureEXT, vFuuui) +GO(glFramebufferTextureFaceEXT, vFuuuiu) +GO(glFramebufferTextureLayerEXT, vFuuuii) +GO(glProgramVertexLimitNV, vFui) +//NV_gpu_program4 +GO(glGetProgramEnvParameterIivNV, vFuup) +GO(glGetProgramEnvParameterIuivNV, vFuup) +GO(glGetProgramLocalParameterIivNV, vFuup) +GO(glGetProgramLocalParameterIuivNV, vFuup) +GO(glProgramEnvParameterI4iNV, vFuuiiii) +GO(glProgramEnvParameterI4ivNV, vFuup) +GO(glProgramEnvParameterI4uiNV, vFuuuuuu) +GO(glProgramEnvParameterI4uivNV, vFuup) +GO(glProgramEnvParametersI4ivNV, vFuuip) +GO(glProgramEnvParametersI4uivNV, vFuuip) +GO(glProgramLocalParameterI4iNV, vFuuiiii) +GO(glProgramLocalParameterI4ivNV, vFuup) +GO(glProgramLocalParameterI4uiNV, vFuuuuuu) +GO(glProgramLocalParameterI4uivNV, vFuup) +GO(glProgramLocalParametersI4ivNV, vFuuip) +GO(glProgramLocalParametersI4uivNV, vFuuip) +//NV_gpu_program5 +GO(glGetProgramSubroutineParameteruivNV, vFuup) +GO(glProgramSubroutineParametersuivNV, vFuip) +//NV_gpu_shader5 +GO(glGetUniformi64vNV, vFuip) +GO(glProgramUniform1i64NV, vFuiI) +GO(glProgramUniform1i64vNV, vFuiip) +GO(glProgramUniform1ui64NV, vFuiU) +GO(glProgramUniform1ui64vNV, vFuiip) +GO(glProgramUniform2i64NV, vFuiII) +GO(glProgramUniform2i64vNV, vFuiip) +GO(glProgramUniform2ui64NV, vFuiUU) +GO(glProgramUniform2ui64vNV, vFuiip) +GO(glProgramUniform3i64NV, vFuiIII) +GO(glProgramUniform3i64vNV, vFuiip) +GO(glProgramUniform3ui64NV, vFuiUUU) +GO(glProgramUniform3ui64vNV, vFuiip) +GO(glProgramUniform4i64NV, vFuiIIII) +GO(glProgramUniform4i64vNV, vFuiip) +GO(glProgramUniform4ui64NV, vFuiUUUU) +GO(glProgramUniform4ui64vNV, vFuiip) +GO(glUniform1i64NV, vFiI) +GO(glUniform1i64vNV, vFiip) +GO(glUniform1ui64NV, vFiU) +GO(glUniform1ui64vNV, vFiip) +GO(glUniform2i64NV, vFiII) +GO(glUniform2i64vNV, vFiip) +GO(glUniform2ui64NV, vFiUU) +GO(glUniform2ui64vNV, vFiip) +GO(glUniform3i64NV, vFiIII) +GO(glUniform3i64vNV, vFiip) +GO(glUniform3ui64NV, vFiUUU) +GO(glUniform3ui64vNV, vFiip) +GO(glUniform4i64NV, vFiIIII) +GO(glUniform4i64vNV, vFiip) +GO(glUniform4ui64NV, vFiUUUU) +GO(glUniform4ui64vNV, vFiip) +//NV_half_float +GO(glColor3hNV, vFWWW) +GO(glColor3hvNV, vFp) +GO(glColor4hNV, vFWWWW) +GO(glColor4hvNV, vFp) +GO(glFogCoordhNV, vFW) +GO(glFogCoordhvNV, vFp) +GO(glMultiTexCoord1hNV, vFuW) +GO(glMultiTexCoord1hvNV, vFup) +GO(glMultiTexCoord2hNV, vFuWW) +GO(glMultiTexCoord2hvNV, vFup) +GO(glMultiTexCoord3hNV, vFuWWW) +GO(glMultiTexCoord3hvNV, vFup) +GO(glMultiTexCoord4hNV, vFuWWWW) +GO(glMultiTexCoord4hvNV, vFup) +GO(glNormal3hNV, vFWWW) +GO(glNormal3hvNV, vFp) +GO(glSecondaryColor3hNV, vFWWW) +GO(glSecondaryColor3hvNV, vFp) +GO(glTexCoord1hNV, vFW) +GO(glTexCoord1hvNV, vFp) +GO(glTexCoord2hNV, vFWW) +GO(glTexCoord2hvNV, vFp) +GO(glTexCoord3hNV, vFWWW) +GO(glTexCoord3hvNV, vFp) +GO(glTexCoord4hNV, vFWWWW) +GO(glTexCoord4hvNV, vFp) +GO(glVertex2hNV, vFWW) +GO(glVertex2hvNV, vFp) +GO(glVertex3hNV, vFWWW) +GO(glVertex3hvNV, vFp) +GO(glVertex4hNV, vFWWWW) +GO(glVertex4hvNV, vFp) +GO(glVertexAttrib1hNV, vFuW) +GO(glVertexAttrib1hvNV, vFup) +GO(glVertexAttrib2hNV, vFuWW) +GO(glVertexAttrib2hvNV, vFup) +GO(glVertexAttrib3hNV, vFuWWW) +GO(glVertexAttrib3hvNV, vFup) +GO(glVertexAttrib4hNV, vFuWWWW) +GO(glVertexAttrib4hvNV, vFup) +GO(glVertexAttribs1hvNV, vFuip) +GO(glVertexAttribs2hvNV, vFuip) +GO(glVertexAttribs3hvNV, vFuip) +GO(glVertexAttribs4hvNV, vFuip) +GO(glVertexWeighthNV, vFW) +GO(glVertexWeighthvNV, vFp) +//NV_occlusion_query +GO(glBeginOcclusionQueryNV, vFu) +GO(glDeleteOcclusionQueriesNV, vFip) +GO(glEndOcclusionQueryNV, vFv) +GO(glGenOcclusionQueriesNV, vFip) +GO(glGetOcclusionQueryivNV, vFuup) +GO(glGetOcclusionQueryuivNV, vFuup) +GO(glIsOcclusionQueryNV, CFu) +//NV_parameter_buffer_object +GO(glProgramBufferParametersIivNV, vFuuuip) +GO(glProgramBufferParametersIuivNV, vFuuuip) +GO(glProgramBufferParametersfvNV, vFuuuip) +//NV_pixel_data_range +GO(glFlushPixelDataRangeNV, vFu) +GO(glPixelDataRangeNV, vFuip) +//NV_point_sprite +GO(glPointParameteriNV, vFui) +GO(glPointParameterivNV, vFup) +//NV_present_video +GO(glGetVideoi64vNV, vFuup) +GO(glGetVideoivNV, vFuup) +GO(glGetVideoui64vNV, vFuup) +GO(glGetVideouivNV, vFuup) +GO(glPresentFrameDualFillNV, vFuUuuuuuuuuuuu) +GO(glPresentFrameKeyedNV, vFuUuuuuuuuuu) +//NV_primitive_restart +GO(glPrimitiveRestartIndexNV, vFu) +GO(glPrimitiveRestartNV, vFv) +//NV_register_combiners +GO(glCombinerInputNV, vFuuuuuu) +GO(glCombinerOutputNV, vFuuuuuuuCCC) +GO(glCombinerParameterfNV, vFuf) +GO(glCombinerParameterfvNV, vFup) +GO(glCombinerParameteriNV, vFui) +GO(glCombinerParameterivNV, vFup) +GO(glFinalCombinerInputNV, vFuuuu) +GO(glGetCombinerInputParameterfvNV, vFuuuup) +GO(glGetCombinerInputParameterivNV, vFuuuup) +GO(glGetCombinerOutputParameterfvNV, vFuuup) +GO(glGetCombinerOutputParameterivNV, vFuuup) +GO(glGetFinalCombinerInputParameterfvNV, vFuup) +GO(glGetFinalCombinerInputParameterivNV, vFuup) +//NV_register_combiners2 +GO(glCombinerStageParameterfvNV, vFuup) +GO(glGetCombinerStageParameterfvNV, vFuup) +//NV_shader_buffer_load +GO(glGetBufferParameterui64vNV, vFuup) +GO(glGetIntegerui64vNV, vFup) +GO(glGetNamedBufferParameterui64vNV, vFuup) +GO(glGetUniformui64vNV, vFuip) +GO(glIsBufferResidentNV, CFu) +GO(glIsNamedBufferResidentNV, CFu) +GO(glMakeBufferNonResidentNV, vFu) +GO(glMakeBufferResidentNV, vFuu) +GO(glMakeNamedBufferNonResidentNV, vFu) +GO(glMakeNamedBufferResidentNV, vFuu) +GO(glProgramUniformui64NV, vFuiU) +GO(glProgramUniformui64vNV, vFuiip) +GO(glUniformui64NV, vFiU) +GO(glUniformui64vNV, vFiip) +//NV_texture_barrier +GO(glTextureBarrierNV, vFv) +//NV_texture_multisample +GO(glTexImage2DMultisampleCoverageNV, vFuiiiiiC) +GO(glTexImage3DMultisampleCoverageNV, vFuiiiiiiC) +GO(glTextureImage2DMultisampleCoverageNV, vFuuiiiiiC) +GO(glTextureImage2DMultisampleNV, vFuuiiiiC) +GO(glTextureImage3DMultisampleCoverageNV, vFuuiiiiiiC) +GO(glTextureImage3DMultisampleNV, vFuuiiiiiC) +//NV_transform_feedback +GO(glActiveVaryingNV, vFup) +GO(glBeginTransformFeedbackNV, vFu) +GO(glBindBufferBaseNV, vFuuu) +GO(glBindBufferOffsetNV, vFuuul) +GO(glBindBufferRangeNV, vFuuull) +GO(glEndTransformFeedbackNV, vFv) +GO(glGetActiveVaryingNV, vFuuipppp) +GO(glGetTransformFeedbackVaryingNV, vFuup) +GO(glGetVaryingLocationNV, iFup) +GO(glTransformFeedbackAttribsNV, vFipu) +GO(glTransformFeedbackStreamAttribsNV, vFipipu) +GO(glTransformFeedbackVaryingsNV, vFuipu) +//NV_transform_feedback2 +GO(glBindTransformFeedbackNV, vFuu) +GO(glDeleteTransformFeedbacksNV, vFip) +GO(glDrawTransformFeedbackNV, vFuu) +GO(glGenTransformFeedbacksNV, vFip) +GO(glIsTransformFeedbackNV, CFu) +GO(glPauseTransformFeedbackNV, vFv) +GO(glResumeTransformFeedbackNV, vFv) +//NV_vdpau_interop +GO(glVDPAUFiniNV, vFv) +GO(glVDPAUGetSurfaceivNV, vFluipp) +GO(glVDPAUInitNV, vFpp) +GO(glVDPAUIsSurfaceNV, CFl) +GOM(glVDPAUMapSurfacesNV, vFEip) +GO(glVDPAURegisterOutputSurfaceNV, lFpuip) +GO(glVDPAURegisterVideoSurfaceNV, lFpuip) +GO(glVDPAUSurfaceAccessNV, vFlu) +GOM(glVDPAUUnmapSurfacesNV, vFEip) +GO(glVDPAUUnregisterSurfaceNV, vFl) +//NV_vertex_array_range +GO(glFlushVertexArrayRangeNV, vFv) +GO(glVertexArrayRangeNV, vFip) +//NV_vertex_attrib_integer_64bit +GO(glGetVertexAttribLi64vNV, vFuup) +GO(glGetVertexAttribLui64vNV, vFuup) +GO(glVertexAttribL1i64NV, vFuI) +GO(glVertexAttribL1i64vNV, vFup) +GO(glVertexAttribL1ui64NV, vFuU) +GO(glVertexAttribL1ui64vNV, vFup) +GO(glVertexAttribL2i64NV, vFuII) +GO(glVertexAttribL2i64vNV, vFup) +GO(glVertexAttribL2ui64NV, vFuUU) +GO(glVertexAttribL2ui64vNV, vFup) +GO(glVertexAttribL3i64NV, vFuIII) +GO(glVertexAttribL3i64vNV, vFup) +GO(glVertexAttribL3ui64NV, vFuUUU) +GO(glVertexAttribL3ui64vNV, vFup) +GO(glVertexAttribL4i64NV, vFuIIII) +GO(glVertexAttribL4i64vNV, vFup) +GO(glVertexAttribL4ui64NV, vFuUUUU) +GO(glVertexAttribL4ui64vNV, vFup) +GO(glVertexAttribLFormatNV, vFuiui) +//NV_vertex_buffer_unified_memory +GO(glBufferAddressRangeNV, vFuuUl) +GO(glColorFormatNV, vFiui) +GO(glEdgeFlagFormatNV, vFi) +GO(glFogCoordFormatNV, vFui) +GO(glGetIntegerui64i_vNV, vFuup) +GO(glIndexFormatNV, vFui) +GO(glNormalFormatNV, vFui) +GO(glSecondaryColorFormatNV, vFiui) +GO(glTexCoordFormatNV, vFiui) +GO(glVertexAttribFormatNV, vFuiuCi) +GO(glVertexAttribIFormatNV, vFuiui) +GO(glVertexFormatNV, vFiui) +//NV_vertex_program +GO(glAreProgramsResidentNV, CFipp) +GO(glBindProgramNV, vFuu) +GO(glDeleteProgramsNV, vFip) +GO(glExecuteProgramNV, vFuup) +GO(glGenProgramsNV, vFip) +GO(glGetProgramParameterdvNV, vFuuup) +GO(glGetProgramParameterfvNV, vFuuup) +GO(glGetProgramStringNV, vFuup) +GO(glGetProgramivNV, vFuup) +GO(glGetTrackMatrixivNV, vFuuup) +GO(glGetVertexAttribPointervNV, vFuuBp_) +GO(glGetVertexAttribdvNV, vFuup) +GO(glGetVertexAttribfvNV, vFuup) +GO(glGetVertexAttribivNV, vFuup) +GO(glIsProgramNV, CFu) +GO(glLoadProgramNV, vFuuip) +GO(glProgramParameter4dNV, vFuudddd) +GO(glProgramParameter4dvNV, vFuup) +GO(glProgramParameter4fNV, vFuuffff) +GO(glProgramParameter4fvNV, vFuup) +GO(glProgramParameters4dvNV, vFuuip) +GO(glProgramParameters4fvNV, vFuuip) +GO(glRequestResidentProgramsNV, vFip) +GO(glTrackMatrixNV, vFuuuu) +GO(glVertexAttrib1dNV, vFud) +GO(glVertexAttrib1dvNV, vFup) +GO(glVertexAttrib1fNV, vFuf) +GO(glVertexAttrib1fvNV, vFup) +GO(glVertexAttrib1sNV, vFuw) +GO(glVertexAttrib1svNV, vFup) +GO(glVertexAttrib2dNV, vFudd) +GO(glVertexAttrib2dvNV, vFup) +GO(glVertexAttrib2fNV, vFuff) +GO(glVertexAttrib2fvNV, vFup) +GO(glVertexAttrib2sNV, vFuww) +GO(glVertexAttrib2svNV, vFup) +GO(glVertexAttrib3dNV, vFuddd) +GO(glVertexAttrib3dvNV, vFup) +GO(glVertexAttrib3fNV, vFufff) +GO(glVertexAttrib3fvNV, vFup) +GO(glVertexAttrib3sNV, vFuwww) +GO(glVertexAttrib3svNV, vFup) +GO(glVertexAttrib4dNV, vFudddd) +GO(glVertexAttrib4dvNV, vFup) +GO(glVertexAttrib4fNV, vFuffff) +GO(glVertexAttrib4fvNV, vFup) +GO(glVertexAttrib4sNV, vFuwwww) +GO(glVertexAttrib4svNV, vFup) +GO(glVertexAttrib4ubNV, vFuCCCC) +GO(glVertexAttrib4ubvNV, vFup) +GO(glVertexAttribPointerNV, vFuiuip) +GO(glVertexAttribs1dvNV, vFuip) +GO(glVertexAttribs1fvNV, vFuip) +GO(glVertexAttribs1svNV, vFuip) +GO(glVertexAttribs2dvNV, vFuip) +GO(glVertexAttribs2fvNV, vFuip) +GO(glVertexAttribs2svNV, vFuip) +GO(glVertexAttribs3dvNV, vFuip) +GO(glVertexAttribs3fvNV, vFuip) +GO(glVertexAttribs3svNV, vFuip) +GO(glVertexAttribs4dvNV, vFuip) +GO(glVertexAttribs4fvNV, vFuip) +GO(glVertexAttribs4svNV, vFuip) +GO(glVertexAttribs4ubvNV, vFuip) +//NV_vertex_program4 +GO(glGetVertexAttribIivEXT, vFuup) +GO(glGetVertexAttribIuivEXT, vFuup) +GO(glVertexAttribI1iEXT, vFui) +GO(glVertexAttribI1ivEXT, vFup) +GO(glVertexAttribI1uiEXT, vFuu) +GO(glVertexAttribI1uivEXT, vFup) +GO(glVertexAttribI2iEXT, vFuii) +GO(glVertexAttribI2ivEXT, vFup) +GO(glVertexAttribI2uiEXT, vFuuu) +GO(glVertexAttribI2uivEXT, vFup) +GO(glVertexAttribI3iEXT, vFuiii) +GO(glVertexAttribI3ivEXT, vFup) +GO(glVertexAttribI3uiEXT, vFuuuu) +GO(glVertexAttribI3uivEXT, vFup) +GO(glVertexAttribI4bvEXT, vFup) +GO(glVertexAttribI4iEXT, vFuiiii) +GO(glVertexAttribI4ivEXT, vFup) +GO(glVertexAttribI4svEXT, vFup) +GO(glVertexAttribI4ubvEXT, vFup) +GO(glVertexAttribI4uiEXT, vFuuuuu) +GO(glVertexAttribI4uivEXT, vFup) +GO(glVertexAttribI4usvEXT, vFup) +GO(glVertexAttribIPointerEXT, vFuiuip) +//NV_video_capture +GO(glBeginVideoCaptureNV, vFu) +GO(glBindVideoCaptureStreamBufferNV, vFuuul) +GO(glBindVideoCaptureStreamTextureNV, vFuuuuu) +GO(glEndVideoCaptureNV, vFu) +GO(glGetVideoCaptureStreamdvNV, vFuuup) +GO(glGetVideoCaptureStreamfvNV, vFuuup) +GO(glGetVideoCaptureStreamivNV, vFuuup) +GO(glGetVideoCaptureivNV, vFuup) +GO(glVideoCaptureNV, uFupp) +GO(glVideoCaptureStreamParameterdvNV, vFuuup) +GO(glVideoCaptureStreamParameterfvNV, vFuuup) +GO(glVideoCaptureStreamParameterivNV, vFuuup) +//OES_byte_coordinates +GO(glMultiTexCoord1bOES, vFuc) +GO(glMultiTexCoord1bvOES, vFup) +GO(glMultiTexCoord2bOES, vFucc) +GO(glMultiTexCoord2bvOES, vFup) +GO(glMultiTexCoord3bOES, vFuccc) +GO(glMultiTexCoord3bvOES, vFup) +GO(glMultiTexCoord4bOES, vFucccc) +GO(glMultiTexCoord4bvOES, vFup) +GO(glTexCoord1bOES, vFc) +GO(glTexCoord1bvOES, vFp) +GO(glTexCoord2bOES, vFcc) +GO(glTexCoord2bvOES, vFp) +GO(glTexCoord3bOES, vFccc) +GO(glTexCoord3bvOES, vFp) +GO(glTexCoord4bOES, vFcccc) +GO(glTexCoord4bvOES, vFp) +GO(glVertex2bOES, vFcc) +GO(glVertex2bvOES, vFp) +GO(glVertex3bOES, vFccc) +GO(glVertex3bvOES, vFp) +GO(glVertex4bOES, vFcccc) +GO(glVertex4bvOES, vFp) +//OES_fixed_point +GO(glAccumxOES, vFui) +GO(glAlphaFuncxOES, vFui) +GO(glBitmapxOES, vFiiiiiip) +GO(glBlendColorxOES, vFiiii) +GO(glClearAccumxOES, vFiiii) +GO(glClearColorxOES, vFiiii) +GO(glClearDepthxOES, vFi) +GO(glClipPlanexOES, vFup) +GO(glColor3xOES, vFiii) +GO(glColor3xvOES, vFp) +GO(glColor4xOES, vFiiii) +GO(glColor4xvOES, vFp) +GO(glConvolutionParameterxOES, vFuui) +GO(glConvolutionParameterxvOES, vFuup) +GO(glDepthRangexOES, vFii) +GO(glEvalCoord1xOES, vFi) +GO(glEvalCoord1xvOES, vFp) +GO(glEvalCoord2xOES, vFii) +GO(glEvalCoord2xvOES, vFp) +GO(glFeedbackBufferxOES, vFiup) +GO(glFogxOES, vFui) +GO(glFogxvOES, vFup) +GO(glFrustumxOES, vFiiiiii) +GO(glGetClipPlanexOES, vFup) +GO(glGetConvolutionParameterxvOES, vFuup) +GO(glGetFixedvOES, vFup) +GO(glGetHistogramParameterxvOES, vFuup) +GO(glGetLightxOES, vFuup) +GO(glGetMapxvOES, vFuup) +GO(glGetMaterialxOES, vFuui) +GO(glGetPixelMapxv, vFuip) +GO(glGetTexEnvxvOES, vFuup) +GO(glGetTexGenxvOES, vFuup) +GO(glGetTexLevelParameterxvOES, vFuiup) +GO(glGetTexParameterxvOES, vFuup) +GO(glIndexxOES, vFi) +GO(glIndexxvOES, vFp) +GO(glLightModelxOES, vFui) +GO(glLightModelxvOES, vFup) +GO(glLightxOES, vFuui) +GO(glLightxvOES, vFuup) +GO(glLineWidthxOES, vFi) +GO(glLoadMatrixxOES, vFp) +GO(glLoadTransposeMatrixxOES, vFp) +GO(glMap1xOES, vFuiiiii) +GO(glMap2xOES, vFuiiiiiiiii) +GO(glMapGrid1xOES, vFiii) +GO(glMapGrid2xOES, vFiiiii) +GO(glMaterialxOES, vFuui) +GO(glMaterialxvOES, vFuup) +GO(glMultMatrixxOES, vFp) +GO(glMultTransposeMatrixxOES, vFp) +GO(glMultiTexCoord1xOES, vFui) +GO(glMultiTexCoord1xvOES, vFup) +GO(glMultiTexCoord2xOES, vFuii) +GO(glMultiTexCoord2xvOES, vFup) +GO(glMultiTexCoord3xOES, vFuiii) +GO(glMultiTexCoord3xvOES, vFup) +GO(glMultiTexCoord4xOES, vFuiiii) +GO(glMultiTexCoord4xvOES, vFup) +GO(glNormal3xOES, vFiii) +GO(glNormal3xvOES, vFp) +GO(glOrthoxOES, vFiiiiii) +GO(glPassThroughxOES, vFi) +GO(glPixelMapx, vFuip) +GO(glPixelStorex, vFui) +GO(glPixelTransferxOES, vFui) +GO(glPixelZoomxOES, vFii) +GO(glPointParameterxvOES, vFup) +GO(glPointSizexOES, vFi) +GO(glPolygonOffsetxOES, vFii) +GO(glPrioritizeTexturesxOES, vFipp) +GO(glRasterPos2xOES, vFii) +GO(glRasterPos2xvOES, vFp) +GO(glRasterPos3xOES, vFiii) +GO(glRasterPos3xvOES, vFp) +GO(glRasterPos4xOES, vFiiii) +GO(glRasterPos4xvOES, vFp) +GO(glRectxOES, vFiiii) +GO(glRectxvOES, vFpp) +GO(glRotatexOES, vFiiii) +GO(glSampleCoverageOES, vFii) +GO(glScalexOES, vFiii) +GO(glTexCoord1xOES, vFi) +GO(glTexCoord1xvOES, vFp) +GO(glTexCoord2xOES, vFii) +GO(glTexCoord2xvOES, vFp) +GO(glTexCoord3xOES, vFiii) +GO(glTexCoord3xvOES, vFp) +GO(glTexCoord4xOES, vFiiii) +GO(glTexCoord4xvOES, vFp) +GO(glTexEnvxOES, vFuui) +GO(glTexEnvxvOES, vFuup) +GO(glTexGenxOES, vFuui) +GO(glTexGenxvOES, vFuup) +GO(glTexParameterxOES, vFuui) +GO(glTexParameterxvOES, vFuup) +GO(glTranslatexOES, vFiii) +GO(glVertex2xOES, vFi) +GO(glVertex2xvOES, vFp) +GO(glVertex3xOES, vFii) +GO(glVertex3xvOES, vFp) +GO(glVertex4xOES, vFiii) +GO(glVertex4xvOES, vFp) +//OES_query_matrix +GO(glQueryMatrixxOES, uFpp) +//OES_single_precision +GO(glClearDepthfOES, vFf) +GO(glClipPlanefOES, vFup) +GO(glDepthRangefOES, vFff) +GO(glFrustumfOES, vFffffff) +GO(glGetClipPlanefOES, vFup) +GO(glOrthofOES, vFffffff) +//PGI_misc_hints +GO(glHintPGI, vFui) +//SGIS_detail_texture +GO(glDetailTexFuncSGIS, vFuip) +GO(glGetDetailTexFuncSGIS, vFup) +//SGIS_fog_function +GO(glFogFuncSGIS, vFip) +GO(glGetFogFuncSGIS, vFp) +//SGIS_multisample +GO(glSampleMaskSGIS, vFfC) +GO(glSamplePatternSGIS, vFu) +//SGIS_pixel_texture +GO(glGetPixelTexGenParameterfvSGIS, vFup) +GO(glGetPixelTexGenParameterivSGIS, vFup) +GO(glPixelTexGenParameterfSGIS, vFuf) +GO(glPixelTexGenParameterfvSGIS, vFup) +GO(glPixelTexGenParameteriSGIS, vFui) +GO(glPixelTexGenParameterivSGIS, vFup) +//SGIS_point_parameters +GO(glPointParameterfSGIS, vFuf) +GO(glPointParameterfvSGIS, vFup) +//SGIS_sharpen_texture +GO(glGetSharpenTexFuncSGIS, vFup) +GO(glSharpenTexFuncSGIS, vFuip) +//SGIS_texture4D +GO(glTexImage4DSGIS, vFuiuiiiiiuup) +GO(glTexSubImage4DSGIS, vFuiiiiiiiiiuup) +//SGIS_texture_color_mask +GO(glTextureColorMaskSGIS, vFCCCC) +//SGIS_texture_filter4 +GO(glGetTexFilterFuncSGIS, vFuup) +GO(glTexFilterFuncSGIS, vFuuip) +//SGIX_async +GO(glAsyncMarkerSGIX, vFu) +GO(glDeleteAsyncMarkersSGIX, vFui) +GO(glFinishAsyncSGIX, iFp) +GO(glGenAsyncMarkersSGIX, uFi) +GO(glIsAsyncMarkerSGIX, CFu) +GO(glPollAsyncSGIX, iFp) +//SGIX_flush_raster +GO(glFlushRasterSGIX, vFv) +//SGIX_fragment_lighting +GO(glFragmentColorMaterialSGIX, vFuu) +GO(glFragmentLightModelfSGIX, vFuf) +GO(glFragmentLightModelfvSGIX, vFup) +GO(glFragmentLightModeliSGIX, vFui) +GO(glFragmentLightModelivSGIX, vFup) +GO(glFragmentLightfSGIX, vFuuf) +GO(glFragmentLightfvSGIX, vFuup) +GO(glFragmentLightiSGIX, vFuui) +GO(glFragmentLightivSGIX, vFuup) +GO(glFragmentMaterialfSGIX, vFuuf) +GO(glFragmentMaterialfvSGIX, vFuup) +GO(glFragmentMaterialiSGIX, vFuui) +GO(glFragmentMaterialivSGIX, vFuup) +GO(glGetFragmentLightfvSGIX, vFuup) +GO(glGetFragmentLightivSGIX, vFuup) +GO(glGetFragmentMaterialfvSGIX, vFuup) +GO(glGetFragmentMaterialivSGIX, vFuup) +GO(glLightEnviSGIX, vFui) +//SGIX_framezoom +GO(glFrameZoomSGIX, vFi) +//SGIX_igloo_interface +GO(glIglooInterfaceSGIX, vFup) +//SGIX_instruments +GO(glGetInstrumentsSGIX, iFv) +GO(glInstrumentsBufferSGIX, vFip) +GO(glPollInstrumentsSGIX, iFp) +GO(glReadInstrumentsSGIX, vFi) +GO(glStartInstrumentsSGIX, vFv) +GO(glStopInstrumentsSGIX, vFi) +//SGIX_list_priority +GO(glGetListParameterfvSGIX, vFuup) +GO(glGetListParameterivSGIX, vFuup) +GO(glListParameterfSGIX, vFuuf) +GO(glListParameterfvSGIX, vFuup) +GO(glListParameteriSGIX, vFuui) +GO(glListParameterivSGIX, vFuup) +//SGIX_pixel_texture +GO(glPixelTexGenSGIX, vFu) +//SGIX_polynomial_ffd +GO(glDeformSGIX, vFu) +GO(glDeformationMap3dSGIX, vFuddiiddiiddiip) +GO(glDeformationMap3fSGIX, vFuffiiffiiffiip) +GO(glLoadIdentityDeformationMapSGIX, vFu) +//SGIX_reference_plane +GO(glReferencePlaneSGIX, vFp) +//SGIX_sprite +GO(glSpriteParameterfSGIX, vFuf) +GO(glSpriteParameterfvSGIX, vFup) +GO(glSpriteParameteriSGIX, vFui) +GO(glSpriteParameterivSGIX, vFup) +//SGIX_tag_sample_buffer +GO(glTagSampleBufferSGIX, vFv) +//SGI_color_table +GO(glColorTableParameterfvSGI, vFuup) +GO(glColorTableParameterivSGI, vFuup) +GO(glColorTableSGI, vFuuiuup) +GO(glCopyColorTableSGI, vFuuiii) +GO(glGetColorTableParameterfvSGI, vFuup) +GO(glGetColorTableParameterivSGI, vFuup) +GO(glGetColorTableSGI, vFuuup) +//SUNX_constant_data +GO(glFinishTextureSUNX, vFv) +//SUN_global_alpha +GO(glGlobalAlphaFactorbSUN, vFc) +GO(glGlobalAlphaFactordSUN, vFd) +GO(glGlobalAlphaFactorfSUN, vFf) +GO(glGlobalAlphaFactoriSUN, vFi) +GO(glGlobalAlphaFactorsSUN, vFw) +GO(glGlobalAlphaFactorubSUN, vFC) +GO(glGlobalAlphaFactoruiSUN, vFu) +GO(glGlobalAlphaFactorusSUN, vFW) +//SUN_mesh_array +GO(glDrawMeshArraysSUN, vFuiii) +//SUN_triangle_list +GO(glReplacementCodePointerSUN, vFuibp_) +GO(glReplacementCodeubSUN, vFC) +GO(glReplacementCodeubvSUN, vFp) +GO(glReplacementCodeuiSUN, vFu) +GO(glReplacementCodeuivSUN, vFp) +GO(glReplacementCodeusSUN, vFW) +GO(glReplacementCodeusvSUN, vFp) +//SUN_vertex +GO(glColor3fVertex3fSUN, vFffffff) +GO(glColor3fVertex3fvSUN, vFpp) +GO(glColor4fNormal3fVertex3fSUN, vFffffffffff) +GO(glColor4fNormal3fVertex3fvSUN, vFppp) +GO(glColor4ubVertex2fSUN, vFCCCCff) +GO(glColor4ubVertex2fvSUN, vFpp) +GO(glColor4ubVertex3fSUN, vFCCCCfff) +GO(glColor4ubVertex3fvSUN, vFpp) +GO(glNormal3fVertex3fSUN, vFffffff) +GO(glNormal3fVertex3fvSUN, vFpp) +GO(glReplacementCodeuiColor3fVertex3fSUN, vFuffffff) +GO(glReplacementCodeuiColor3fVertex3fvSUN, vFppp) +GO(glReplacementCodeuiColor4fNormal3fVertex3fSUN, vFuffffffffff) +GO(glReplacementCodeuiColor4fNormal3fVertex3fvSUN, vFpppp) +GO(glReplacementCodeuiColor4ubVertex3fSUN, vFuCCCCfff) +GO(glReplacementCodeuiColor4ubVertex3fvSUN, vFppp) +GO(glReplacementCodeuiNormal3fVertex3fSUN, vFuffffff) +GO(glReplacementCodeuiNormal3fVertex3fvSUN, vFppp) +GO(glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN, vFuffffffffffff) +GO(glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN, vFppppp) +GO(glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN, vFuffffffff) +GO(glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN, vFpppp) +GO(glReplacementCodeuiTexCoord2fVertex3fSUN, vFufffff) +GO(glReplacementCodeuiTexCoord2fVertex3fvSUN, vFppp) +GO(glReplacementCodeuiVertex3fSUN, vFufff) +GO(glReplacementCodeuiVertex3fvSUN, vFpp) +GO(glTexCoord2fColor3fVertex3fSUN, vFffffffff) +GO(glTexCoord2fColor3fVertex3fvSUN, vFppp) +GO(glTexCoord2fColor4fNormal3fVertex3fSUN, vFffffffffffff) +GO(glTexCoord2fColor4fNormal3fVertex3fvSUN, vFpppp) +GO(glTexCoord2fColor4ubVertex3fSUN, vFffCCCCfff) +GO(glTexCoord2fColor4ubVertex3fvSUN, vFppp) +GO(glTexCoord2fNormal3fVertex3fSUN, vFffffffff) +GO(glTexCoord2fNormal3fVertex3fvSUN, vFppp) +GO(glTexCoord2fVertex3fSUN, vFfffff) +GO(glTexCoord2fVertex3fvSUN, vFpp) +GO(glTexCoord4fColor4fNormal3fVertex4fSUN, vFfffffffffffffff) +GO(glTexCoord4fColor4fNormal3fVertex4fvSUN, vFpppp) +GO(glTexCoord4fVertex4fSUN, vFffffffff) +GO(glTexCoord4fVertex4fvSUN, vFpp) + +//GL_ARB_polygon_offset_clamp +GO(glPolygonOffsetClamp, vFfff) + +//GL_EXT_polygon_offset_clamp +GO(glPolygonOffsetClampEXT, vFfff) + +//GL_EXT_multisampled_render_to_texture +GO(glRenderbufferStorageMultisampleEXT, vFuiuii) +GO(glFramebufferTexture2DMultisampleEXT, vFiiiuil) + +//GL_KTX_buffer_region +GO(glBufferRegionEnabled, uFv) +GO(glNewBufferRegion, uFi) +GO(glDeleteBufferRegion, vFi) +GO(glReadBufferRegion, vFuiiii) +GO(glDrawBufferRegion, vFuiiiiii) + +//GL_ARB_sparse_buffer +GO(glBufferPageCommitmentARB, vFullC) +GO(glNamedBufferPageCommitmentARB, vFullC) +GO(glNamedBufferPageCommitmentEXT, vFullC) + +//GL_ARB_sparse_texture +GO(TexPageCommitmentARB, vFiiiiiiiii) + +//glx +GO(glXBindHyperpipeSGIX, iFXi) +GO(glXBindTexImageEXT, vFXpip) +GO(glXBindSwapBarrierNV, iFXuu) +GO(glXBindSwapBarrierSGIX, vFii) +GO(glXBindVideoCaptureDeviceNV, iFXup) +GO(glXBindVideoDeviceNV, iFXuup) +GO(glXBindVideoImageNV, iFXppi) +//GO(glXChangeDrawableAttributes, vFp) +//GO(glXChangeDrawableAttributesSGIX, vFp) +GO(glXClientInfo, vFv) +GO(glXCopyContext, vFXppL) +GOM(glXChooseFBConfig, pFEXipp) +//GO(glXChooseFBConfigSGIX, pFpipp) +GOM(glXCreateContext, pFEXppi) +GO(glXCreateContextAttribsARB, pFXppip) +//GO(glXCreateContextWithConfigSGIX, pFppipi) +//GO(glXCreateGLXPbufferSGIX, pFppuup) +//GOM(glXCreateGLXPixmap, LFEXbpLiiiLLLii_L) +//GO(glXCreateGLXPixmapWithConfigSGIX, pFppp) +//GO(glXCreateGLXVideoSourceSGIX, pFpippip) +GO(glXCreateNewContext, pFXpipi) +GO(glXCreatePbuffer, LFXpp) +GO(glXCreatePixmap, LFXpLp) +GO(glXCreateWindow, LFXpLp) +GOM(glXChooseVisual, pFEXip) +GO(glXCopyImageSubDataNV, vFXpuiiiiipuiiiiiiii) +//GO(glXCopySubBufferMESA, vFppiiii) +GO(glXDestroyContext, vFXp) +//GO(glXDestroyGLXPbufferSGIX, vFpp) +GO(glXDestroyGLXPixmap, vFXL) +//GO(glXDestroyGLXVideoSourceSGIX, vFpp) +//GO(glXDestroyHyperpipeConfigSGIX, iFpi) +GO(glXDestroyPbuffer, vFXL) +GO(glXDestroyPixmap, vFXL) +GO(glXDestroyWindow, vFXL) +GO(glXEnumerateVideoCaptureDevicesNV, pFXip) +GO(glXEnumerateVideoDevicesNV, pFXip) +GO(glXFreeContextEXT, vFXp) +GO(glXGetClientString, pFXi) +//GOM(glXGetConfig, iFEXbpLiiiLLLii_ip) +GO(glXGetContextIDEXT, uFp) +GO(glXGetCurrentContext, pFv) +GO(glXGetCurrentDisplay, XFv) +GO(glXGetCurrentDrawable, LFv) +GO(glXGetCurrentReadDrawable, LFv) +//GO(glXGetDrawableAttributes, vFi) +//GO(glXGetDrawableAttributesSGIX, vFi) +GOM(glXGetFBConfigs,pFEXip) +GO(glXGetFBConfigAttrib, iFXpip) +//GO(glXGetFBConfigAttribSGIX, iFppip) +//GO(glXGetFBConfigFromVisualSGIX, pFpp) +//GO(glXGetFBConfigsSGIX, pFpip) +GO(glXGetSelectedEvent, vFXLbL_) +GO(glXGetSelectedEventSGIX, vFXpp) +GO(glXGetVideoDeviceNV, iFXiip) +GO(glXGetVideoInfoNV, iFpippp) +//GO(glXGetVideoSyncSGI, iFp) +//GO(glXGetVisualConfigs, pFpp) +GOM(glXGetVisualFromFBConfig, pFEXp) +//GO(glXGetVisualFromFBConfigSGIX, pFpp) +//GO(glXHyperpipeAttribSGIX, iFpiiip) +//GO(glXHyperpipeConfigSGIX, iFpiipp) +GO(glXImportContextEXT, pFXu) +GO(glXIsDirect, iFXp) +GO(glXJoinSwapGroupNV, iFXpu) +//GO(glXJoinSwapGroupSGIX, vFpp) +GO(glXLockVideoCaptureDeviceNV, vFXp) +GO(glXMakeContextCurrent, iFXLLp) +GO(glXMakeCurrent, iFXLp) +GO(glXQueryContext, iFXpip) +GO(glXQueryContextInfoEXT, iFXpip) +GO(glXQueryDrawable, vFXLip) +GO(glXQueryExtension, iFXpp) +GO(glXQueryExtensionsString, pFXi) +GO(glXQueryFrameCountNV, iFXip) +//GO(glXQueryGLXPbufferSGIX, vFppip) +//GO(glXQueryHyperpipeAttribSGIX, iFpiiip) +//GO(glXQueryHyperpipeBestAttribSGIX, iFpiiipp) +//GO(glXQueryHyperpipeConfigSGIX, pFpip) +//GO(glXQueryHyperpipeNetworkSGIX, pFpp) +//GO(glXQueryMaxSwapBarriersSGIX, pFpp) +GO(glXQueryMaxSwapGroupsNV, iFXipp) +GO(glXQueryServerString, pFXii) +GO(glXQuerySwapGroupNV, iFXipp) +GO(glXQueryVersion, iFXpp) +GO(glXQueryVideoCaptureDeviceNV, iFXpip) +GO(glXReleaseTexImageEXT, vFXpi) +GO(glXReleaseVideoCaptureDeviceNV, vFXp) +GO(glXReleaseVideoDeviceNV, iFXip) +GO(glXReleaseVideoImageNV, iFXp) +GO(glXRender, vFv) +GO(glXRenderLarge, vFv) +GO(glXResetFrameCountNV, iFXi) +GO(glXSelectEvent, vFXLL) +//GO(glXSelectEventSGIX, vFppu) +GO(glXSendPbufferToVideoNV, iFXpipi) +GO(glXSwapBuffers, vFXL) +GO(glXUseXFont, vFLiii) +GO(glXVendorPrivate, vFv) +GO(glXVendorPrivateWithReply, vFv) +GO(glXWaitGL, vFv) +//GO(glXWaitVideoSyncSGI, iFiip) +GO(glXWaitX, vFv) + +GOM(glXGetProcAddress, pFEp) +GOM(glXGetProcAddressARB, pFEp) + +//GLX_MESA_query_renderer +GO(glXQueryRendererIntegerMESA, iFXiiip) +GO(glXQueryCurrentRendererIntegerMESA, iFip) +GO(glXQueryRendererStringMESA, pFXiii) +GO(glXQueryCurrentRendererStringMESA, pFi) + +//GLX_OML_sync_control +GO(glXGetSyncValuesOML, iFXpppp) +GO(glXGetMscRateOML, iFXppp) +GO(glXSwapBuffersMscOML, IFXpIII) +GO(glXWaitForMscOML, iFXpIIIppp) +GO(glXWaitForSbcOML, iFXpIppp) + +//GLX_EXT_swap_control +GOM(glXSwapIntervalEXT, vFXpi) //%noE +//GLX_EXT_swap_control_tear +//nothing + +//GLX_MESA_swap_control +GOM(glXSwapIntervalMESA, iFi) //%noE +GO(glXGetSwapIntervalMESA, iFv) + +//GLX_SGI_swap_control +GO(glXSwapIntervalSGI, iFi) + +//GLX_NV_vertex_array_range +GO(glXAllocateMemoryNV, pFifff) +GO(glXFreeMemoryNV, vFp) + +//GLX_ARB_???? +GO(glSpecializeShaderARB, vFupupp) + +//GLX_AMD_gpu_association +GO(glXGetGPUIDsAMD, uFup) +GO(glXGetGPUInfoAMD, iFuiuup) +GO(glXGetContextGPUIDAMD, uFp) +GO(glXCreateAssociatedContextAMD, pFup) +GO(glXCreateAssociatedContextAttribsAMD, pFupp) +GO(glXDeleteAssociatedContextAMD, iFp) +GO(glXMakeAssociatedContextCurrentAMD, iFp) +GO(glXGetCurrentAssociatedContextAMD, pFv) +GO(glXBlitContextFramebufferAMD, vFpiiiiiiiiuu) + +//GL_EXT_debug_label +GO(glGetObjectLabelEXT, vFuuipp) +GO(glLabelObjectEXT, vFuuip) + +//GL_EXT_debug_marker +GO(glInsertEventMarkerEXT, vFip) +GO(glPushGroupMarkerEXT, vFip) +GO(glPopGroupMarkerEXT, vFv) + +//GL_KHR_blend_equation_advanced +GO(glBlendBarrierKHR, vFv) + +//Some various other extension +GO(glResolveMultisampleFramebufferAPPLE, vFv) +GO(glTexPageCommitmentARB, vFuiiiiiiiC) + +//GL_ARB_sample_locations +GO(glFramebufferSampleLocationsfvARB, vFuuip) +GO(glNamedFramebufferSampleLocationsfvARB, vFuuip) +GO(glEvaluateDepthValuesARB, vFv) + +//GL_ARB_parallel_shader_compile +GO(glMaxShaderCompilerThreadsARB, vFu) + +//GL_ARB_indirect_parameters +GO(glMultiDrawArraysIndirectCountARB, vFuplii) +GO(glMultiDrawElementsIndirectCountARB, vFuuplii) + +//GL_ARB_gpu_shader_int64 +GO(glUniform1i64ARB, vFiI) +GO(glUniform2i64ARB, vFiII) +GO(glUniform3i64ARB, vFiIII) +GO(glUniform4i64ARB, vFiIIII) +GO(glUniform1i64vARB, vFiip) +GO(glUniform2i64vARB, vFiip) +GO(glUniform3i64vARB, vFiip) +GO(glUniform4i64vARB, vFiip) +GO(glUniform1ui64ARB, vFiU) +GO(glUniform2ui64ARB, vFiUU) +GO(glUniform3ui64ARB, vFiUUU) +GO(glUniform4ui64ARB, vFiUUUU) +GO(glUniform1ui64vARB, vFiip) +GO(glUniform2ui64vARB, vFiip) +GO(glUniform3ui64vARB, vFiip) +GO(glUniform4ui64vARB, vFiip) +GO(glGetUniformi64vARB, vFuip) +GO(glGetUniformui64vARB, vFuip) +GO(glGetnUniformi64vARB, vFuiip) +GO(glGetnUniformui64vARB, vFuiip) +GO(glProgramUniform1i64ARB, vFuiI) +GO(glProgramUniform2i64ARB, vFuiII) +GO(glProgramUniform3i64ARB, vFuiIII) +GO(glProgramUniform4i64ARB, vFuiIIII) +GO(glProgramUniform1i64vARB, vFuiip) +GO(glProgramUniform2i64vARB, vFuiip) +GO(glProgramUniform3i64vARB, vFuiip) +GO(glProgramUniform4i64vARB, vFuiip) +GO(glProgramUniform1ui64ARB, vFuiU) +GO(glProgramUniform2ui64ARB, vFuiUU) +GO(glProgramUniform3ui64ARB, vFuiUUU) +GO(glProgramUniform4ui64ARB, vFuiUUUU) +GO(glProgramUniform1ui64vARB, vFuiip) +GO(glProgramUniform2ui64vARB, vFuiip) +GO(glProgramUniform3ui64vARB, vFuiip) +GO(glProgramUniform4ui64vARB, vFuiip) + +//GL_ARB_compute_variable_group_size +GO(glDispatchComputeGroupSizeARB, vFuuuuuu) + +//GL_ARB_ES3_2_compatibility +GO(glPrimitiveBoundingBoxARB, vFffffffff) + +//GL_ARB_bindless_texture +GO(glGetTextureHandleARB, UFu) +GO(glGetTextureSamplerHandleARB, UFuu) +GO(glMakeTextureHandleResidentARB, vFU) +GO(glMakeTextureHandleNonResidentARB, vFU) +GO(glGetImageHandleARB, UFuiCiu) +GO(glMakeImageHandleResidentARB, vFUu) +GO(glMakeImageHandleNonResidentARB, vFU) +GO(glUniformHandleui64ARB, vFiU) +GO(glUniformHandleui64vARB, vFiip) +GO(glProgramUniformHandleui64ARB, vFuiU) +GO(glProgramUniformHandleui64vARB, vFuiip) +GO(glIsTextureHandleResidentARB, CFU) +GO(glIsImageHandleResidentARB, CFU) +GO(glVertexAttribL1ui64ARB, vFuU) +GO(glVertexAttribL1ui64vARB, vFup) +GO(glGetVertexAttribLui64vARB, vFuup) + +//GL_OES_EGL_image +GO(glEGLImageTargetTexture2DOES, vFup) +GO(glEGLImageTargetRenderbufferStorageOES, vFup) + +//GL_MESA_program_debug +GOM(glProgramCallbackMESA, vFEipp) +GO(glGetProgramRegisterfvMESA, vFilpp) + +//GL_????_ATI +GO(glBlendEquationSeparateATI, vFuu) + +//GL_AMD_interleaved_elements +GO(glVertexAttribParameteriAMD, vFuui) + +//GL_AMD_occlusion_query_event +GO(glQueryObjectParameteruiAMD, vFuuuu) + +//GL_EXT_raster_multisample +GO(glRasterSamplesEXT, vFuC) + +//GL_INTEL_performance_query +GO(glBeginPerfQueryINTEL, vFu) +GO(glCreatePerfQueryINTEL, vFup) +GO(glDeletePerfQueryINTEL, vFu) +GO(glEndPerfQueryINTEL, vFu) +GO(glGetFirstPerfQueryIdINTEL, vFp) +GO(glGetNextPerfQueryIdINTEL, vFup) +GO(glGetPerfCounterInfoINTEL, vFuuupupppppp) +GO(glGetPerfQueryDataINTEL, vFuuipp) +GO(glGetPerfQueryIdByNameINTEL, vFpp) +GO(glGetPerfQueryInfoINTEL, vFuuppppp) + +//GL_NV_bindless_multi_draw_indirect +GO(glMultiDrawArraysIndirectBindlessNV, vFupiii) +GO(glMultiDrawElementsIndirectBindlessNV, vFuupiii) + +//GL_NV_bindless_multi_draw_indirect_count +GO(glMultiDrawArraysIndirectBindlessCountNV, vFupiiii) +GO(glMultiDrawElementsIndirectBindlessCountNV, vFuupiiii) + +//GL_NV_blend_equation_advanced +GO(glBlendParameteriNV, vFui) +GO(glBlendBarrierNV, vFv) + +//GL_NV_command_list +GO(glCreateStatesNV, vFip) +GO(glDeleteStatesNV, vFip) +GO(glIsStateNV, CFu) +GO(glStateCaptureNV, vFuu) +GO(glGetCommandHeaderNV, uFuu) +GO(glGetStageIndexNV, WFu) +//GO(glDrawCommandsNV, vFuubl_pu) +GO(glDrawCommandsAddressNV, vFuppu) +//GO(glDrawCommandsStatesNV, vFubl_pppu) +GO(glDrawCommandsStatesAddressNV, vFppppu) +GO(glCreateCommandListsNV, vFip) +GO(glDeleteCommandListsNV, vFip) +GO(glIsCommandListNV, CFu) +//GO(glListDrawCommandsStatesClientNV, vFuubp_pppu) +GO(glCommandListSegmentsNV, vFuu) +GO(glCompileCommandListNV, vFu) +GO(glCallCommandListNV, vFu) + +//GL_NV_conservative_raster +GO(glSubpixelPrecisionBiasNV, vFuu) + +//GL_NV_fragment_coverage_to_color +GO(glFragmentCoverageColorNV, vFu) + +//GL_NV_framebuffer_mixed_samples +GO(glCoverageModulationTableNV, vFip) +GO(glGetCoverageModulationTableNV, vFip) +GO(glCoverageModulationNV, vFu) + +//GL_NV_internalformat_sample_query +GO(glGetInternalformatSampleivNV, vFuuiuip) + +//GL_NV_path_rendering +GO(glGenPathsNV, uFi) +GO(glDeletePathsNV, vFui) +GO(glIsPathNV, CFu) +GO(glPathCommandsNV, vFuipiup) +GO(glPathCoordsNV, vFuiup) +GO(glPathSubCommandsNV, vFuiiipiup) +GO(glPathSubCoordsNV, vFuiiup) +GO(glPathStringNV, vFuuip) +GO(glPathGlyphsNV, vFuupuiupuuf) +GO(glPathGlyphRangeNV, vFuupuuiuuf) +GO(glWeightPathsNV, vFuipp) +GO(glCopyPathNV, vFuu) +GO(glInterpolatePathsNV, vFuuuf) +GO(glTransformPathNV, vFuuup) +GO(glPathParameterivNV, vFuup) +GO(glPathParameteriNV, vFuui) +GO(glPathParameterfvNV, vFuup) +GO(glPathParameterfNV, vFuuf) +GO(glPathDashArrayNV, vFuip) +GO(glPathStencilFuncNV, vFuiu) +GO(glPathStencilDepthOffsetNV, vFff) +GO(glStencilFillPathNV, vFuuu) +GO(glStencilStrokePathNV, vFuiu) +GO(glStencilFillPathInstancedNV, vFiupuuuup) +GO(glStencilStrokePathInstancedNV, vFiupuiuup) +GO(glPathCoverDepthFuncNV, vFu) +GO(glCoverFillPathNV, vFuu) +GO(glCoverStrokePathNV, vFuu) +GO(glCoverFillPathInstancedNV, vFiupuuup) +GO(glCoverStrokePathInstancedNV, vFiupuuup) +GO(glGetPathParameterivNV, vFuup) +GO(glGetPathParameterfvNV, vFuup) +GO(glGetPathCommandsNV, vFup) +GO(glGetPathCoordsNV, vFup) +GO(glGetPathDashArrayNV, vFup) +GO(glGetPathMetricsNV, vFuiupuip) +GO(glGetPathMetricRangeNV, vFuuiip) +GO(glGetPathSpacingNV, vFuiupuffup) +GO(glIsPointInFillPathNV, CFuuff) +GO(glIsPointInStrokePathNV, CFuff) +GO(glGetPathLengthNV, fFuii) +GO(glPointAlongPathNV, CFuiifpppp) +GO(glMatrixLoad3x2fNV, vFup) +GO(glMatrixLoad3x3fNV, vFup) +GO(glMatrixLoadTranspose3x3fNV, vFup) +GO(glMatrixMult3x2fNV, vFup) +GO(glMatrixMult3x3fNV, vFup) +GO(glMatrixMultTranspose3x3fNV, vFup) +GO(glStencilThenCoverFillPathNV, vFuuuu) +GO(glStencilThenCoverStrokePathNV, vFuiuu) +GO(glStencilThenCoverFillPathInstancedNV, vFiupuuuuup) +GO(glStencilThenCoverStrokePathInstancedNV, vFiupuiuuup) +GO(glPathGlyphIndexRangeNV, uFupuufp) +GO(glPathGlyphIndexArrayNV, uFuupuuiuf) +GO(glPathMemoryGlyphIndexArrayNV, uFuulpiuiuf) +GO(glProgramPathFragmentInputGenNV, vFuiuip) +GO(glGetProgramResourcefvNV, vFuuuipipp) +GO(glPathColorGenNV, vFuuup) +GO(glPathTexGenNV, vFuuip) +GO(glPathFogGenNV, vFu) +GO(glGetPathColorGenivNV, vFuup) +GO(glGetPathColorGenfvNV, vFuup) +GO(glGetPathTexGenivNV, vFuup) +GO(glGetPathTexGenfvNV, vFuup) + + +//GL_NV_sample_locations +GO(glFramebufferSampleLocationsfvNV, vFuuip) +GO(glNamedFramebufferSampleLocationsfvNV, vFuuip) +GO(glResolveDepthValuesNV, vFv) + +//GL_KHR_robustness +GO(glGetGraphicsResetStatusKHR, iFv) +GO(glReadnPixelsKHR, vFiilliilp) +GO(glGetnUniformfvKHR, vFuilp) +GO(glGetnUniformivKHR, vFuilp) +GO(glGetnUniformuivKHR, vFuilp) + +// GLES stuff +GO(glDiscardFramebuffer, vFilp) +GO(glDiscardFramebufferARB, vFilp) +GO(glDiscardFramebufferEXT, vFilp) +GO(glDiscardFramebufferOES, vFilp) +GO(glDiscardFramebufferANGLE, vFilp) +GO(glDiscardFramebufferNV, vFilp) +GO(glBlendBarrier, vFv) +GO(glBlendBarrierARB, vFv) +GO(glBlendBarrierEXT, vFv) +GO(glBlendBarrierOES, vFv) +GO(glBlendBarrierANGLE, vFv) +GO(glClearDepthfARB, vFf) +GO(glClipPlanefARB, vFup) +GO(glDepthRangefARB, vFff) +GO(glFrustumfARB, vFffffff) +GO(glGetClipPlanefARB, vFup) +GO(glOrthofARB, vFffffff) +GO(glClipPlanef, vFup) +GO(glFrustumf, vFffffff) +GO(glGetClipPlanef, vFup) +GO(glOrthof, vFffffff) +GO(glActiveShaderProgramEXT, vFuu) +GO(glBindProgramPipelineEXT, vFu) +GO(glCreateShaderProgramvEXT, uFilp) +GO(glDeleteProgramPipelinesEXT, vFilu) +GO(glGenProgramPipelinesEXT, vFlp) +GO(glGetProgramPipelineInfoLogEXT, vFulpp) +GO(glGetProgramPipelineivEXT, vFuip) +GO(glIsProgramPipelineEXT, iFu) +GO(glUseProgramStagesEXT, vFuuu) +GO(glValidateProgramPipelineEXT, vFu) +GO(glPrimitiveBoundingBox, vFffffffff) + +// GL_EXT_window_rectangles +GO(glWindowRectanglesEXT, vFuip) + +// GL_EXT_memory_object +GO(glGetUnsignedBytevEXT, vFup) +GO(glGetUnsignedBytei_vEXT, vFuup) +GO(glDeleteMemoryObjectsEXT, vFip) +GO(glIsMemoryObjectEXT, CFu) +GO(glCreateMemoryObjectsEXT, vFip) +GO(glMemoryObjectParameterivEXT, vFuup) +GO(glGetMemoryObjectParameterivEXT, vFuup) +GO(glTexStorageMem2DEXT, vFuiuiiuU) +GO(glTexStorageMem2DMultisampleEXT, vFuiuiiCuU) +GO(glTexStorageMem3DEXT, vFuiuiiiuU) +GO(glTexStorageMem3DMultisampleEXT, vFuiuiiiCuU) +GO(glBufferStorageMemEXT, vFuluU) +GO(glTextureStorageMem2DEXT, vFuiuiiuU) +GO(glTextureStorageMem2DMultisampleEXT, vFuiuiiCuU) +GO(glTextureStorageMem3DEXT, vFuiuiiiuU) +GO(glTextureStorageMem3DMultisampleEXT, vFuiuiiiCuU) +GO(glNamedBufferStorageMemEXT, vFuluU) +GO(glTexStorageMem1DEXT, vFuiuiuU) +GO(glTextureStorageMem1DEXT, vFuiuiuU) + +// GL_EXT_semaphore +GO(glGenSemaphoresEXT, vFip) +GO(glDeleteSemaphoresEXT, vFip) +GO(glIsSemaphoreEXT, CFu) +GO(glSemaphoreParameterui64vEXT, vFuup) +GO(glGetSemaphoreParameterui64vEXT, vFuup) +GO(glWaitSemaphoreEXT, vFuupupp) +GO(glSignalSemaphoreEXT, vFuupupp) + +// GL_EXT_memory_object_fd +GO(glImportMemoryFdEXT, vFuUui) + +// GL_KHR_parallel_shader_compile +GO(glMaxShaderCompilerThreadsKHR, vFu) + +// GL_AMD_framebuffer_multisample_advanced +GO(glRenderbufferStorageMultisampleAdvancedAMD, vFuiiuii) +GO(glNamedRenderbufferStorageMultisampleAdvancedAMD, vFuiiuii) + +// GL_EXT_semaphore_fd +GO(glImportSemaphoreFdEXT, vFuui) + +// GLX_SGI_make_current_read +GO(glXMakeCurrentReadSGI, iFpppp) +GO(glXGetCurrentReadDrawableSGI, pFv) + +// GL_IMG_multisampled_render_to_texture +GO(glFramebufferTexture2DMultisampleIMG, vFiiiuil) +GO(glRenderbufferStorageMultisampleIMG, vFilill) + +// GL_ANGLE_translated_shader_source +GO(glGetTranslatedShaderSourceANGLE, vFulpp) + +// GL_EXT_EGL_image_storage +GO(glEGLImageTargetTexStorageEXT, vFupp) +GO(glEGLImageTargetTextureStorageEXT, vFupp) + +// GL_EXT_external_buffer +GO(glBufferStorageExternalEXT, vFullpu) +GO(glNamedBufferStorageExternalEXT, vFullpu) + +// GL_EXT_memory_object_win32 +GO(glImportMemoryWin32HandleEXT, vFuUup) +GO(glImportMemoryWin32NameEXT, vFuUup) + +// GL_EXT_semaphore_win32 +GO(glImportSemaphoreWin32HandleEXT, vFuup) +GO(glImportSemaphoreWin32NameEXT, vFuup) + +// GL_EXT_shader_framebuffer_fetch_non_coherent +GO(glFramebufferFetchBarrierEXT, vFv) + +// GL_EXT_win32_keyed_mutex +GO(glAcquireKeyedMutexWin32EXT, CFuUu) +GO(glReleaseKeyedMutexWin32EXT, CFuU) + +// GL_INTEL_framebuffer_CMAA +GO(glApplyFramebufferAttachmentCMAAINTEL, vFv) + +// GL_NV_alpha_to_coverage_dither_control +GO(glAlphaToCoverageDitherControlNV, vFu) + +// GL_NV_clip_space_w_scaling +GO(glViewportPositionWScaleNV, vFuff) + +// GL_NV_conservative_raster_dilate +GO(glConservativeRasterParameterfNV, vFuf) + +// GL_NV_conservative_raster_pre_snap_triangles +GO(glConservativeRasterParameteriNV, vFui) + +// GL_NV_draw_vulkan_image +GO(glDrawVkImageNV, vFUufffffffff) +GOM(glGetVkProcAddrNV, pFEp) +GO(glWaitVkSemaphoreNV, vFU) +GO(glSignalVkSemaphoreNV, vFU) +GO(glSignalVkFenceNV, vFU) + +// GL_NV_gpu_multicast +GO(glRenderGpuMaskNV, vFu) +GO(glMulticastBufferSubDataNV, vFuullp) +GO(glMulticastCopyBufferSubDataNV, vFuuuulll) +GO(glMulticastCopyImageSubDataNV, vFuuuuiiiiuuiiiiiii) +GO(glMulticastBlitFramebufferNV, vFuuiiiiiiiiuu) +GO(glMulticastFramebufferSampleLocationsfvNV, vFuuuip) +GO(glMulticastBarrierNV, vFv) +GO(glMulticastWaitSyncNV, vFuu) +GO(glMulticastGetQueryObjectivNV, vFuuup) +GO(glMulticastGetQueryObjectuivNV, vFuuup) +GO(glMulticastGetQueryObjecti64vNV, vFuuup) +GO(glMulticastGetQueryObjectui64vNV, vFuuup) + +// GL_NV_memory_attachment +GO(glGetMemoryObjectDetachedResourcesuivNV, vFuuiip) +GO(glResetMemoryObjectParameterNV, vFuu) +GO(glTexAttachMemoryNV, vFuuU) +GO(glBufferAttachMemoryNV, vFuuU) +GO(glTextureAttachMemoryNV, vFuuU) +GO(glNamedBufferAttachMemoryNV, vFuuU) + +// GL_NV_mesh_shader +GO(glDrawMeshTasksNV, vFuu) +GO(glDrawMeshTasksIndirectNV, vFl) +GO(glMultiDrawMeshTasksIndirectNV, vFlii) +GO(glMultiDrawMeshTasksIndirectCountNV, vFllii) + +// GL_NV_query_resource +GO(glQueryResourceNV, iFuiup) + +// GL_NV_query_resource_tag +GO(glGenQueryResourceTagNV, vFip) +GO(glDeleteQueryResourceTagNV, vFip) +GO(glQueryResourceTagNV, vFip) + +// GL_NV_scissor_exclusive +GO(glScissorExclusiveArrayvNV, vFuip) +GO(glScissorExclusiveNV, vFiiii) + +// GL_NV_shading_rate_image +GO(glBindShadingRateImageNV, vFu) +GO(glShadingRateImagePaletteNV, vFuuip) +GO(glGetShadingRateImagePaletteNV, vFuup) +GO(glShadingRateImageBarrierNV, vFC) +GO(glShadingRateSampleOrderNV, vFu) +GO(glShadingRateSampleOrderCustomNV, vFuup) +GO(glGetShadingRateSampleLocationivNV, vFuuup) + +// GL_NV_viewport_swizzle +GO(glViewportSwizzleNV, vFuuuuu) + +// GL_OVR_multiview +GO(glFramebufferTextureMultiviewOVR, vFuuuiii) +GO(glNamedFramebufferTextureMultiviewOVR, vFuiuiil) + +// GL_AMD_framebuffer_sample_positions +GO(glFramebufferSamplePositionsfvAMD, vFuuup) +GO(glNamedFramebufferSamplePositionsfvAMD, vFuuup) +GO(glGetFramebufferParameterfvAMD, vFuuuuip) +GO(glGetNamedFramebufferParameterfvAMD, vFuuuuip) + +// GL_ANGLE_framebuffer_blit +GO(glBlitFramebufferANGLE, vFiiiiiiiiui) + +// GL_ANGLE_framebuffer_multisample +GO(glRenderbufferStorageMultisampleANGLE, vFilill) + +// GL_ANGLE_instanced_arrays +GO(glDrawArraysInstancedANGLE, vFiill) +GO(glDrawElementsInstancedANGLE, vFilipl) +GO(glVertexAttribDivisorANGLE, vFuu) + +// GL_ANGLE_timer_query +GO(glBeginQueryANGLE, vFiu) +GO(glDeleteQueriesANGLE, vFlp) +GO(glEndQueryANGLE, vFi) +GO(glGenQueriesANGLE, vFlp) +GO(glGetQueryObjecti64vANGLE, vFuip) +GO(glGetQueryObjectivANGLE, vFuip) +GO(glGetQueryObjectui64vANGLE, vFuip) +GO(glGetQueryObjectuivANGLE, vFuip) +GO(glGetQueryivANGLE, vFiip) +GO(glIsQueryANGLE, iFu) +GO(glQueryCounterANGLE, vFui) + +// GL_APPLE_copy_texture_levels +GO(glCopyTextureLevelsAPPLE, vFuuil) + +// GL_APPLE_framebuffer_multisample +GO(glRenderbufferStorageMultisampleAPPLE, vFilill) + +// GL_APPLE_sync +GO(glFenceSyncAPPLE, pFiu) +GO(glIsSyncAPPLE, iFp) +GO(glDeleteSyncAPPLE, vFp) +GO(glClientWaitSyncAPPLE, iFpuU) +GO(glWaitSyncAPPLE, vFpuU) +GO(glGetInteger64vAPPLE, vFip) +GO(glGetSyncivAPPLE, vFpilpp) + +// GL_EXT_base_instance +GO(glDrawArraysInstancedBaseInstanceEXT, vFiillu) +GO(glDrawElementsInstancedBaseInstanceEXT, vFiliplu) +GO(glDrawElementsInstancedBaseVertexBaseInstanceEXT, vFilipliu) + +// GL_EXT_blend_func_extended +GO(glBindFragDataLocationIndexedEXT, vFuuup) +GO(glGetProgramResourceLocationIndexEXT, iFuip) +GO(glGetFragDataIndexEXT, iFup) + +// GL_EXT_buffer_storage +GO(glBufferStorageEXT, vFilpu) + +// GL_EXT_clear_texture +GO(glClearTexImageEXT, vFuiiip) +GO(glClearTexSubImageEXT, vFuiiiillliip) + +// GL_EXT_copy_image +GO(glCopyImageSubDataEXT, vFuiiiiiuiiiiilll) + +// GL_EXT_draw_buffers +GO(glDrawBuffersEXT, vFlp) + +// GL_EXT_draw_buffers_indexed +GO(glEnableiEXT, vFiu) +GO(glDisableiEXT, vFiu) +GO(glBlendEquationiEXT, vFui) +GO(glBlendEquationSeparateiEXT, vFuii) +GO(glBlendFunciEXT, vFuii) +GO(glBlendFuncSeparateiEXT, vFuiiii) +GO(glColorMaskiEXT, vFuiiii) +GO(glIsEnablediEXT, iFui) + +// GL_EXT_draw_elements_base_vertex +GO(glDrawElementsBaseVertexEXT, vFilipi) +GO(glDrawRangeElementsBaseVertexEXT, vFilulipi) +GO(glDrawElementsInstancedBaseVertexEXT, vFilipli) + +// GL_OES_draw_elements_base_vertex +GO(glDrawElementsBaseVertexOES, vFilipi) +GO(glDrawRangeElementsBaseVertexOES, vFiuulipi) +GO(glDrawElementsInstancedBaseVertexOES, vFilipli) +GO(glMultiDrawElementsBaseVertexEXT, vFipiplp) + +// GL_EXT_fragment_lighting +GO(glFragmentLightModeliEXT, vFii) +GO(glFragmentLightModelfEXT, vFif) +GO(glFragmentLightModelivEXT, vFip) +GO(glFragmentLightModelfvEXT, vFip) +GO(glFragmentLightiEXT, vFiii) +GO(glFragmentLightfEXT, vFiif) +GO(glFragmentLightivEXT, vFiip) +GO(glFragmentLightfvEXT, vFiip) +GO(glGetFragmentLightivEXT, vFiip) +GO(glGetFragmentLightfvEXT, vFiip) +GO(glFragmentMaterialfEXT, vFiif) +GO(glFragmentMaterialiEXT, vFiii) +GO(glFragmentMaterialfvEXT, vFiip) +GO(glFragmentMaterialivEXT, vFiip) +GO(glFragmentColorMaterialEXT, vFii) +GO(glGetFragmentMaterialfvEXT, vFiip) +GO(glGetFragmentMaterialivEXT, vFiip) +GO(glLightEnviEXT, vFii) + +// GL_EXT_instanced_arrays +GO(glVertexAttribDivisorEXT, vFuu) + +// GL_EXT_map_buffer_range +GO(glMapBufferRangeEXT, pFillu) +GO(glFlushMappedBufferRangeEXT, vFill) + +// GL_EXT_multi_draw_indirect +GO(glMultiDrawArraysIndirectEXT, vFipll) +GO(glMultiDrawElementsIndirectEXT, vFiipll) + +// GL_EXT_multiview_draw_buffers +GO(glReadBufferIndexedEXT, vFii) +GO(glDrawBuffersIndexedEXT, vFipp) +GO(glGetIntegeri_vEXT, vFiup) + +// GL_EXT_scene_marker +GO(glBeginSceneEXT, vFv) +GO(glEndSceneEXT, vFv) + +// GL_EXT_shader_pixel_local_storage2 +GO(glFramebufferPixelLocalStorageSizeEXT, vFul) +GO(glGetFramebufferPixelLocalStorageSizeEXT, lFu) +GO(glClearPixelLocalStorageuiEXT, vFllp) + +// GL_EXT_sparse_texture +GO(glTexPageCommitmentEXT, vFiiiiillli) + +// GL_EXT_texture_storage +GO(glTexStorage1DEXT, vFuiui) +GO(glTexStorage2DEXT, vFuiuii) +GO(glTexStorage3DEXT, vFuiuiii) + +// GL_EXT_texture_view +GO(glTextureViewEXT, vFuiuiuuuu) + +// GL_EXT_vertex_array_setXXX +GO(glCreateArraySetExt, pFv) +GO(glBindArraySetEXT, vFp) +GO(glDeleteArraySetsEXT, vFlp) + +// GL_INTEL_texture_scissor +GO(glTexScissorINTEL, vFiff) +GO(glTexScissorFuncINTEL, vFiii) + +// GL_NVX_linked_gpu_multicast +GO(glLGPUNamedBufferSubDataNVX, vFuullp) +GO(glLGPUCopyImageSubDataNVX, vFuuuuiiiiuuiiiiiii) +GO(glLGPUInterlockNVX, vFv) + +// GL_NV_3dvision_settings +GO(glStereoParameteriNV, vFii) +GO(glStereoParameterfNV, vFif) + +// GL_NV_copy_buffer +GO(glCopyBufferSubDataNV, vFiilll) + +// GL_NV_draw_buffers +GO(glDrawBuffersNV, vFlp) + +// GL_NV_draw_instanced +GO(glDrawArraysInstancedNV, vFiill) +GO(glDrawElementsInstancedNV, vFilipl) + +// GL_NV_framebuffer_blit +GO(glBlitFramebufferNV, vFiiiiiiiiui) + +// GL_NV_framebuffer_multisample +GO(glRenderbufferStorageMultisampleNV, vFilill) + +// GL_NV_instanced_arrays +GO(glVertexAttribDivisorNV, vFuu) + +// GL_NV_non_square_matrices +GO(glUniformMatrix2x3fvNV, vFilip) +GO(glUniformMatrix3x2fvNV, vFilip) +GO(glUniformMatrix2x4fvNV, vFilip) +GO(glUniformMatrix4x2fvNV, vFilip) +GO(glUniformMatrix3x4fvNV, vFilip) +GO(glUniformMatrix4x3fvNV, vFilip) + +// GL_NV_polygon_mode +GO(glPolygonModeNV, vFii) + +// GL_NV_texture_array +GO(glTexImage3DNV, vFiiillliiip) +GO(glTexSubImage3DNV, vFiiiiillliip) +GO(glCopyTexSubImage3DNV, vFiiiiiiill) +GO(glCompressedTexImage3DNV, vFiiilllilp) +GO(glCompressedTexSubImage3DNV, vFiiiiilllilp) +GO(glFramebufferTextureLayerNV, vFiiuii) + +// GL_NV_viewport_array +GO(glViewportArrayvNV, vFulp) +GO(glViewportIndexedfNV, vFuffff) +GO(glViewportIndexedfvNV, vFup) +GO(glScissorArrayvNV, vFulp) +GO(glScissorIndexedNV, vFuiill) +GO(glScissorIndexedvNV, vFup) +GO(glDepthRangeArrayfvNV, vFulp) +GO(glDepthRangeIndexedfNV, vFuff) +GO(glGetFloati_vNV, vFiup) +GO(glEnableiNV, vFiu) +GO(glDisableiNV, vFiu) +GO(glIsEnablediNV, iFiu) + +// GL_OVR_multiview_multisampled_render_to_texture +GO(glFramebufferTextureMultisampleMultiviewOVR, vFiiuilil) + +// GL_QCOM_alpha_test +GO(glAlphaFuncQCOM, vFif) + +// GL_QCOM_driver_control +GO(glGetDriverControlsQCOM, vFplp) +GO(glGetDriverControlStringQCOM, vFulpp) +GO(glEnableDriverControlQCOM, vFu) +GO(glDisableDriverControlQCOM, vFu) + +// GL_QCOM_extended_get +GO(glExtGetTexturesQCOM, vFpip) +GO(glExtGetBuffersQCOM, vFpip) +GO(glExtGetRenderbuffersQCOM, vFpip) +GO(glExtGetFramebuffersQCOM, vFpip) +GO(glExtGetTexLevelParameterivQCOM, vFuiiip) +GO(glExtTexObjectStateOverrideiQCOM, vFiii) +GO(glExtGetTexSubImageQCOM, vFiiiiillliip) +GO(glExtGetBufferPointervQCOM, vFip) + +// GL_QCOM_extended_get2 +GO(glExtGetShadersQCOM, vFpip) +GO(glExtGetProgramsQCOM, vFpip) +GO(glExtIsProgramBinaryQCOM, iFu) +GO(glExtGetProgramBinarySourceQCOM, vFuipp) + +// GL_QCOM_framebuffer_foveated +GO(glFramebufferFoveationConfigQCOM, vFuuuup) +GO(glFramebufferFoveationParametersQCOM, vFuuufffff) + +// GL_QCOM_shader_framebuffer_fetch_noncoherent +GO(glFramebufferFetchBarrierQCOM, vFv) + +// GL_QCOM_tiled_rendering +GO(glStartTilingQCOM, vFuuuuu) +GO(glEndTilingQCOM, vFu) + +// GLES fixed point +GO(glAlphaFuncx, vFii) +GO(glClearColorx, vFiiii) +GO(glClearDepthx, vFi) +GO(glClipPlanex, vFip) +GO(glColor4x, vFiiii) +GO(glDepthRangex, vFii) +GO(glFogx, vFii) +GO(glFogxv, vFip) +GO(glFrustumx, vFiiiiii) +GO(glGetClipPlanex, vFip) +GO(glGetFixedv, vFip) +GO(glGetTexEnvxv, vFiip) +GO(glGetTexParameterxv, vFiip) +GO(glLightModelx, vFii) +GO(glLightModelxv, vFip) +GO(glLightx, vFiii) +GO(glLightxv, vFiip) +GO(glLineWidthx, vFi) +GO(glLoadMatrixx, vFp) +GO(glMaterialx, vFiii) +GO(glMaterialxv, vFiip) +GO(glMultMatrixx, vFp) +GO(glMultiTexCoord4x, vFiiiii) +GO(glNormal3x, vFiiii) +GO(glOrthox, vFiiiiii) +GO(glPointParameterxv, vFip) +GO(glPointSizex, vFi) +GO(glPolygonOffsetx, vFii) +GO(glRotatex, vFiiii) +GO(glScalex, vFiii) +GO(glTexEnvx, vFiii) +GO(glTexEnvxv, vFiip) +GO(glTexParameterx, vFiii) +GO(glTexParameterxv, vFiip) +GO(glTranslatex, vFiii) +GO(glAccumx, vFii) +GO(glBitmapx, vFlliiiip) +GO(glBlendColorx, vFiiii) +GO(glClearAccumx, vFiiii) +GO(glColor3x, vFiii) +GO(glColor3xv, vFp) +GO(glColor4xv, vFp) +GO(glConvolutionParameterx, vFiii) +GO(glConvolutionParameterxv, vFiip) +GO(glEvalCoord1x, vFi) +GO(glEvalCoord1xv, vFp) +GO(glEvalCoord2x, vFii) +GO(glEvalCoord2xv, vFp) +GO(glFeedbackBufferx, vFlip) +GO(glGetConvolutionParameterxv, vFiip) +GO(glGetHistogramParameterxv, vFiip) +GO(glGetLightx, vFiip) +GO(glGetMapxv, vFiip) +GO(glGetMaterialx, vFiii) +GO(glGetTexGenxv, vFiip) +GO(glGetTexLevelParameterxv, vFiiip) +GO(glIndexx, vFi) +GO(glIndexxv, vFp) +GO(glLoadTransposeMatrixx, vFp) +GO(glMap1x, vFiiiiii) +GO(glMap2x, vFiiiiiiiiii) +GO(glMapGrid1x, vFiii) +GO(glMapGrid2x, vFiiiii) +GO(glMultTransposeMatrixx, vFp) +GO(glMultiTexCoord1x, vFii) +GO(glMultiTexCoord1xv, vFip) +GO(glMultiTexCoord2x, vFiii) +GO(glMultiTexCoord2xv, vFip) +GO(glMultiTexCoord3x, vFiiii) +GO(glMultiTexCoord3xv, vFip) +GO(glMultiTexCoord4xv, vFip) +GO(glNormal3xv, vFp) +GO(glPassThroughx, vFi) +GO(glPixelM, vFiip) +GO(glPixelSto, vFii) +GO(glPixelTransferx, vFii) +GO(glPixelZoomx, vFii) +GO(glPrioritizeTexturesx, vFlpp) +GO(glRasterPos2x, vFii) +GO(glRasterPos2xv, vFp) +GO(glRasterPos3x, vFiii) +GO(glRasterPos3xv, vFp) +GO(glRasterPos4x, vFiiii) +GO(glRasterPos4xv, vFp) +GO(glRectx, vFiiii) +GO(glRectxv, vFpp) +GO(glTexCoord1x, vFi) +GO(glTexCoord1xv, vFp) +GO(glTexCoord2x, vFii) +GO(glTexCoord2xv, vFp) +GO(glTexCoord3x, vFiii) +GO(glTexCoord3xv, vFp) +GO(glTexCoord4x, vFiiii) +GO(glTexCoord4xv, vFp) +GO(glTexGenx, vFiii) +GO(glTexGenxv, vFiip) +GO(glVertex2x, vFi) +GO(glVertex2xv, vFp) +GO(glVertex3x, vFii) +GO(glVertex3xv, vFp) +GO(glVertex4x, vFiii) +GO(glVertex4xv, vFp) + +// GL_OES_point_size +GO(glPointSizePointerOES, vFilp) + +// GL_REGAL_error_string +GO(glErrorStringREGAL, pFi) + +// GL_REGAL_extension_query +GO(glGetExtensionREGAL, iFp) +GO(glIsSupportedREGAL, iFp) + +//glLogMessageCallbackREGAL +//glGetProcAddressREGAL + +// GL_SGIS_multitexture +GO(glInterleavedTextureCoordSetsSGIS, vFi) +GO(glSelectTextureCoordSetSGIS, vFi) +GO(glSelectTextureSGIS, vFi) +GO(glSelectTextureTransformSGIS, vFi) + +// GL_SGIS_shared_multisample +GO(glMultisampleSubRectPosSGIS, vFii) + +// GL_SGIX_datapipe +GO(glAddressSpace, vFiu) +GO(glDataPipe, iFi) + +// GL_SGIX_fog_layers +GO(glFogLayersSGIX, vFlp) +GO(glGetFogLayersSGIX, vFp) + +// GL_SGIX_fog_texture +GO(glTextureFogSGIX, vFu) + +// GL_ANGLE_request_extension +GO(glDisableExtensionANGLE, vFp) +GO(glRequestExtensionANGLE, vFp) + +// GL_KHR_debug +GO(glDebugMessageControlKHR, vFiiilpi) +GO(glDebugMessageInsertKHR, vFiiuilp) +GOM(glDebugMessageCallbackKHR, vFEpp) +GO(glGetDebugMessageLogKHR, uFulpppppp) +GO(glPushDebugGroupKHR, vFiulp) +GO(glPopDebugGroupKHR, vFv) +GO(glObjectLabelKHR, vFiulp) +GO(glGetObjectLabelKHR, vFiulpp) +GO(glObjectPtrLabelKHR, vFplp) +GO(glGetObjectPtrLabelKHR, vFplpp) +GO(glGetPointervKHR, vFip) + +// WGL_EXT_swap_control +GO(wglSwapIntervalEXT, iFi) +GO(wglGetSwapIntervalEXT, iFv) + +// GL_MESA_framebuffer_flip_y +GO(glFramebufferParameteriMESA, vFuui) +GO(glGetFramebufferParameterivMESA, vFuup) + +// GL_NVX_gpu_multicast2 +GO(glUploadGpuMaskNVX, vFu) +GO(glMulticastViewportArrayvNVX, vFuuip) +GO(glMulticastViewportPositionWScaleNVX, vFuuff) +GO(glMulticastScissorArrayvNVX, vFuuip) +GO(glAsyncCopyBufferSubDataNVX, uFippuuuulllipp) +GO(glAsyncCopyImageSubDataNVX, uFippuuuuiiiiuuiiiiiiiipp) + +// GL_NVX_progress_fence +GO(glCreateProgressFenceNVX, uFv) +GO(glSignalSemaphoreui64NVX, vFuipp) +GO(glWaitSemaphoreui64NVX, vFuipp) +GO(glClientWaitSemaphoreui64NVX, vFipp) + +// GL_NV_memory_object_sparse +GO(glBufferPageCommitmentMemNV, vFulluUC) +GO(glTexPageCommitmentMemNV, vFuiiiiiiiiuUC) +GO(glNamedBufferPageCommitmentMemNV, vFulluUC) +GO(glTexturePageCommitmentMemNV, vFuiiiiiiiiuUC) + +// GL_NV_vdpau_interop2 +GO(glVDPAURegisterVideoSurfaceWithPictureStructureNV, lFpuipC) + +// Base EGL +GO(eglBindAPI, iFi) +GO(eglBindTexImage, iFppi) +GO(eglChooseConfig, iFpppip) +GO(eglClientWaitSync, iFppiU) +GO(eglCopyBuffers, iFppp) +GO(eglCreateContext, pFpppp) +GO(eglCreateImage, pFppuup) +GO(eglCreatePbufferFromClientBuffer, pFpippp) +GO(eglCreatePbufferSurface, pFppp) +GO(eglCreatePixmapSurface, pFpppp) +GO(eglCreatePlatformPixmapSurface, pFpppp) +GO(eglCreatePlatformWindowSurface, pFpppp) +GO(eglCreateSync, pFpup) +GO(eglCreateWindowSurface, pFpppp) +GO(eglDestroyContext, iFpp) +GO(eglDestroyImage, iFpp) +GO(eglDestroySurface, iFpp) +GO(eglDestroySync, iFpp) +GO(eglGetConfigAttrib, iFppip) +GO(eglGetConfigs, iFppip) +GO(eglGetCurrentContext, pFv) +GO(eglGetCurrentDisplay, pFv) +GO(eglGetCurrentSurface, pFi) +GO(eglGetDisplay, pFp) +GO(eglGetError, iFv) +GO(eglGetPlatformDisplay, pFppp) +//GOM(eglGetProcAddress, pFEp) +GO(eglGetSyncAttrib, iFppip) +GO(eglInitialize, iFppp) +GO(eglMakeCurrent, iFpppp) +GO(eglQueryAPI, iFv) +GO(eglQueryContext, iFppip) +GO(eglQueryString, pFpi) +GO(eglQuerySurface, iFppip) +GO(eglReleaseTexImage, iFppi) +GO(eglReleaseThread, iFv) +GO(eglSurfaceAttrib, iFppii) +GO(eglSwapBuffers, iFpp) +GO(eglSwapInterval, iFpi) +GO(eglTerminate, iFp) +GO(eglWaitClient, iFv) +GO(eglWaitGL, iFv) +GO(eglWaitNative, iFi) +GO(eglWaitSync, iFppi) + +// EGL_KHR_debug +GOM(eglDebugMessageControlKHR, iFEpp) +GO(eglQueryDebugKHR, iFip) +GO(eglLabelObjectKHR, iFpupp) + +// EGL_MESA_image_dma_buf_export +GO(eglExportDMABUFImageQueryMESA, iFppppp) +GO(eglExportDMABUFImageMESA, iFppppp) + +// EGL_ANGLE_sync_control_rate +GO(eglGetMscRateANGLE, iFpppp) + +// EGL_CHROMIUM_sync_control +GO(eglGetSyncValuesCHROMIUM, iFppppp) + +// EGL_EXT_device_query +GO(eglQueryDeviceAttribEXT, iFpip) +GO(eglQueryDeviceStringEXT, pFpi) +GO(eglQueryDisplayAttribEXT, iFpip) + +// EGL_EXT_device_enumeration +GO(eglQueryDevicesEXT, iFipp) + +// EGL_EXT_image_dma_buf_import_modifiers +GO(eglQueryDmaBufFormatsEXT, iFpipp) +GO(eglQueryDmaBufModifiersEXT, iFpiippp) + +// EGL_ANDROID_blob_cache +GOM(eglSetBlobCacheFuncsANDROID, vFEppp) + +// EGL_KHR_swap_buffers_with_damage +GO(eglSwapBuffersWithDamageKHR, iFpppi) + +// EGL_KHR_wait_sync +GO(eglWaitSyncKHR, iFppi) + +// EGL_KHR_image_base +GO(eglCreateImageKHR, pFppupp) +GO(eglDestroyImageKHR, iFpp) + +// EGL_KHR_fence_sync +GO(eglCreateSyncKHR, pFpup) +GO(eglDestroySyncKHR, iFpp) +GO(eglClientWaitSyncKHR, iFppiU) +GO(eglGetSyncAttribKHR, iFppip) + +// EGL_ANDROID_native_fence_sync +GO(eglDupNativeFenceFDANDROID, iFpp) + +// EGL_NV_post_sub_buffer +GO(eglPostSubBufferNV, iFppiiii) + +// GL_EXT_clip_control +GO(glClipControlEXT, vFuu) + +// GL_EXT_disjoint_timer_query +GO(glGenQueriesEXT, vFlp) +GO(glDeleteQueriesEXT, vFlp) +GO(glIsQueryEXT, iFu) +GO(glBeginQueryEXT, vFuu) +GO(glEndQueryEXT, vFu) +GO(glQueryCounterEXT, vFuu) +GO(glGetQueryivEXT, vFuup) +GO(glGetQueryObjectivEXT, vFuup) +GO(glGetQueryObjectuivEXT, vFuup) +GO(glGetQueryObjecti64vEXT, vFuup) +GO(glGetQueryObjectui64vEXT, vFuup) +GO(glGetInteger64vEXT, vFup) + +// GL_OES_mapbuffer +GO(glGetBufferPointervOES, vFuup) +GO(glMapBufferOES, pFuu) +GO(glUnmapBufferOES, iFu) + +// GLX_NV_copy_buffer +GO(glXCopyBufferSubDataNV, vFXppuulll) +GO(glXNamedCopyBufferSubDataNV, vFXppuulll) + +// GLX_NV_delay_before_swap +GO(glXDelayBeforeSwapNV, iFXLf) + +GO(dummmy_vFppi, vFppi) diff --git a/src/wrapped32/wrappedlibglu.c b/src/wrapped32/wrappedlibglu.c new file mode 100644 index 0000000000000000000000000000000000000000..67c96083a12f9d80c48c4de64c819503d22ea316 --- /dev/null +++ b/src/wrapped32/wrappedlibglu.c @@ -0,0 +1,137 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box64context.h" +#include "emu/x64emu_private.h" +#include "box32.h" +#include "myalign32.h" + +static const char* libgluName = "libGLU.so.1"; +#define LIBNAME libglu + +#include "generated/wrappedlibglutypes32.h" + +#include "wrappercallback32.h" + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) \ +GO(5) \ +GO(6) \ +GO(7) \ +GO(8) \ +GO(9) \ + +// glu_callback +#define GO(A) \ +static uintptr_t my32_glu_callback_fct_##A = 0; \ +static void my32_glu_callback_##A(void* a, void* b) \ +{ \ + RunFunctionFmt(my32_glu_callback_fct_##A, "pp", a, b); \ +} +SUPER() +#undef GO +static void* findglu_callbackFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_glu_callback_fct_##A == (uintptr_t)fct) return my32_glu_callback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glu_callback_fct_##A == 0) {my32_glu_callback_fct_##A = (uintptr_t)fct; return my32_glu_callback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Jpeg glu_callback callback\n"); + return NULL; +} +// glu_callback4 +#define GO(A) \ +static uintptr_t my32_glu_callback4_fct_##A = 0; \ +static void my32_glu_callback4_##A(void* a, void* b, void* c, void* d) \ +{ \ + RunFunctionFmt(my32_glu_callback4_fct_##A, "pppp", a, b, c, d); \ +} +SUPER() +#undef GO +static void* findglu_callback4Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_glu_callback4_fct_##A == (uintptr_t)fct) return my32_glu_callback4_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glu_callback4_fct_##A == 0) {my32_glu_callback4_fct_##A = (uintptr_t)fct; return my32_glu_callback4_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Jpeg glu_callback4 callback\n"); + return NULL; +} +// glu_callback5 +#define GO(A) \ +static uintptr_t my32_glu_callback5_fct_##A = 0; \ +static void my32_glu_callback5_##A(void* a, void* b, void* c, void* d, void* e) \ +{ \ + RunFunctionFmt(my32_glu_callback5_fct_##A, "ppppp", a, b, c, d, e); \ +} +SUPER() +#undef GO +static void* findglu_callback5Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_glu_callback5_fct_##A == (uintptr_t)fct) return my32_glu_callback5_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glu_callback5_fct_##A == 0) {my32_glu_callback5_fct_##A = (uintptr_t)fct; return my32_glu_callback5_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for Jpeg glu_callback5 callback\n"); + return NULL; +} + +#undef SUPER + +// There are many callback signatures: vFv, vFi, vFp, vFip and vFpp... so a generic wrapping to vFpp works +// except for GLU_TESS_COMBINE and GLU_TESS_COMBINE_DATA +#define GLU_TESS_COMBINE 100105 +#define GLU_TESS_COMBINE_DATA 100111 +void EXPORT my32_gluQuadricCallback(x64emu_t* emu, void* a, uint32_t b, void* cb) +{ + (void)emu; + my->gluQuadricCallback(a, b, findglu_callbackFct(cb)); +} +void EXPORT my32_gluTessCallback(x64emu_t* emu, void* a, uint32_t b, void* cb) +{ + (void)emu; + if(b==GLU_TESS_COMBINE) + my->gluTessCallback(a, b, findglu_callback4Fct(cb)); + else if(b==GLU_TESS_COMBINE_DATA) + my->gluTessCallback(a, b, findglu_callback5Fct(cb)); + else + my->gluTessCallback(a, b, findglu_callbackFct(cb)); +} +void EXPORT my32_gluNurbsCallback(x64emu_t* emu, void* a, uint32_t b, void* cb) +{ + (void)emu; + my->gluNurbsCallback(a, b, findglu_callbackFct(cb)); +} + +#define NEEDED_LIBS "libGL.so.1" + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibglu_private.h b/src/wrapped32/wrappedlibglu_private.h new file mode 100644 index 0000000000000000000000000000000000000000..d40c0793798c3bbeaae8eabb4c34954cc3c8294e --- /dev/null +++ b/src/wrapped32/wrappedlibglu_private.h @@ -0,0 +1,64 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(gluBeginCurve,vFp) +GO(gluBeginPolygon, vFp) +GO(gluBeginSurface, vFp) +GO(gluBeginTrim, vFp) +GO(gluBuild1DMipmapLevels, iFuiiuuiiip) +GO(gluBuild1DMipmaps, iFuiiuup) +GO(gluBuild2DMipmapLevels, iFuiiiuuiiip) +GO(gluBuild2DMipmaps, iFuiiiuup) +GO(gluBuild3DMipmapLevels, iFuiiiiuuiiip) +GO(gluBuild3DMipmaps, iFuiiiiuup) +GO(gluCheckExtension, CFpp) +GO(gluCylinder, vFpdddii) +GO(gluDeleteNurbsRenderer, vFp) +GO(gluDeleteQuadric, vFp) +GO(gluDeleteTess, vFp) +GO(gluDisk, vFpddii) +GO(gluEndCurve, vFp) +GO(gluEndPolygon, vFp) +GO(gluEndSurface, vFp) +GO(gluEndTrim, vFp) +GO(gluErrorString, pFu) +GO(gluGetNurbsProperty, vFpup) +GO(gluGetString, pFu) +GO(gluGetTessProperty, vFpup) +GO(gluLoadSamplingMatrices, vFpppp) +GO(gluLookAt, vFddddddddd) +GO(gluNewNurbsRenderer, pFv) +GO(gluNewQuadric, pFv) +GO(gluNewTess, pFv) +GO(gluNextContour, vFpu) +GOM(gluNurbsCallback, vFEpup) +GO(gluNurbsCallbackData, vFpp) +GO(gluNurbsCallbackDataEXT, vFpp) +GO(gluNurbsCurve, vFpipipiu) +GO(gluNurbsProperty, vFpuf) +GO(gluNurbsSurface, vFpipipiipiiu) +GO(gluOrtho2D, vFdddd) +GO(gluPartialDisk, vFpddiidd) +GO(gluPerspective, vFdddd) +GO(gluPickMatrix, vFddddp) +GO(gluProject, iFdddpppppp) +GO(gluPwlCurve, vFpipiu) +GOM(gluQuadricCallback, vFEpup) +GO(gluQuadricDrawStyle, vFpu) +GO(gluQuadricNormals, vFpu) +GO(gluQuadricOrientation, vFpu) +GO(gluQuadricTexture, vFpC) +GO(gluScaleImage, iFuiiupiiup) +GO(gluSphere, vFpdii) +GO(gluTessBeginContour, vFp) +GO(gluTessBeginPolygon, vFpp) +GOM(gluTessCallback, vFEpup) +GO(gluTessEndContour, vFp) +GO(gluTessEndPolygon, vFp) +GO(gluTessNormal, vFpddd) +GO(gluTessProperty, vFpud) +GO(gluTessVertex, vFppp) +GO(gluUnProject, iFdddpppppp) +GO(gluUnProject4, iFddddpppddpppp) + diff --git a/src/wrapped32/wrappedlibm.c b/src/wrapped32/wrappedlibm.c new file mode 100755 index 0000000000000000000000000000000000000000..a36a32273d98c148f929c099d7fe54ab68ad6430 --- /dev/null +++ b/src/wrapped32/wrappedlibm.c @@ -0,0 +1,154 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "debug.h" +#include "box32.h" + +static const char* libmName = +#ifdef ANDROID + "libm.so" +#else + "libm.so.6" +#endif + ; +#define LIBNAME libm + +static library_t* my_lib = NULL; + +typedef float (*fFff_t) (float, float); +typedef double (*dFdd_t) (double, double); +typedef float (*fFf_t) (float); +typedef double (*dFd_t) (double); +#if 0 +typedef union my_float_complex_s { + float complex f; + uint64_t u64; +} my_float_complex_t; + +// complex <- FUNC(complex) wrapper +#define GO_cFc(N) \ +EXPORT void* my_##N(void* p, void* c) \ +{ \ + *(double complex*)p = N(*(double complex*)c); \ + return p; \ +} \ +EXPORT uint64_t my_##N##f(void* c) \ +{ \ + my_float_complex_t ret; \ + ret.f = N##f(*(float complex*)c); \ + return ret.u64; \ +} +// complex <- FUNC(complex, complex) wrapper +#define GO_cFcc(N) \ +EXPORT void* my_##N(void* p, void* c, void* d) \ +{ \ + *(double complex*)p = N(*(double complex*)c, *(double complex*)d); \ + return p; \ +} \ +EXPORT uint64_t my_##N##f(void* c, void* d) \ +{ \ + my_float_complex_t ret; \ + ret.f = N##f(*(float complex*)c, *(float complex*)c); \ + return ret.u64; \ +} + +GO_cFc(clog) +GO_cFc(csqrt) +GO_cFc(cproj) +GO_cFc(cexp) +GO_cFc(ccos) +GO_cFc(csin) +GO_cFc(ccosh) +GO_cFc(csinh) +GO_cFc(ctan) +GO_cFc(ctanh) +GO_cFc(cacos) +GO_cFc(casin) +GO_cFc(cacosh) +GO_cFc(casinh) +GO_cFc(catan) +GO_cFc(catanh) +GO_cFcc(cpow) + +#undef GO_cFc +#undef GO_cFcc +#endif + +#define FINITE(N, T, R, P, ...) \ +EXPORT R my32___##N##_finite P \ +{ \ + static int check = 0; \ + static T f = NULL; \ + if(!check) { \ + f = (T)dlsym(my_lib->w.lib, "__" #N "_finite"); \ + ++check; \ + } \ + if(f) \ + return f(__VA_ARGS__); \ + else \ + return N(__VA_ARGS__); \ +} + +#define F1F(N) FINITE(N, fFf_t, float, (float a), a) +#define F1D(N) FINITE(N, dFd_t, double, (double a), a) +#define F2F(N) FINITE(N, fFff_t, float, (float a, float b), a, b) +#define F2D(N) FINITE(N, dFdd_t, double, (double a, double b), a, b) + +F2F(powf) +F2D(pow) +F1F(sinhf) +F1D(sinh) +F1F(sqrtf) +F1D(sqrt) +F1F(acosf) +F1D(acos) +F1F(acoshf) +F1D(acosh) +F1F(asinf) +F1D(asin) +F2F(atan2f) +F2D(atan2) +F1F(coshf) +F1D(cosh) +F1F(exp2f) +F1D(exp2) +F1F(expf) +F1D(exp) +F2F(hypotf) +F2D(hypot) +F1F(log10f) +F1D(log10) +F1F(log2f) +F1D(log2) +F1F(logf) +F1D(log) + +#undef F2D +#undef F2F +#undef F1D +#undef F1F +#undef FINITE + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#define CUSTOM_INIT \ + my_lib = lib; + +#define CUSTOM_FINI \ + my_lib = NULL; + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibm_private.h b/src/wrapped32/wrappedlibm_private.h new file mode 100755 index 0000000000000000000000000000000000000000..c2f99a6881e21258080d5d5670a956993958373b --- /dev/null +++ b/src/wrapped32/wrappedlibm_private.h @@ -0,0 +1,446 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif + +// Complex numbers are passed in as an address in the stack + +GOW(acos, dEd) +GOW(acosf, fEf) +GOM(__acosf_finite, fEf) //%noE +GOM(__acos_finite, dEd) //%noE +GOW(acosh, dEd) +GOW(acoshf, fEf) +GOM(__acoshf_finite, fEf) //%noE +GOM(__acosh_finite, dEd) //%noE +#ifdef HAVE_LD80BITS +GOW(acoshl, DED) +#else +GOW2(acoshl, KEK, acosh) +#endif +#ifdef HAVE_LD80BITS +GOW(acosl, DED) +#else +GOW2(acosl, KEK, acos) +#endif +GOW(asin, dEd) +GOW(asinf, fEf) +GOM(__asinf_finite, fEf) //%noE +GOM(__asin_finite, dEd) //%noE +GOW(asinh, dEd) +GOW(asinhf, fEf) +#ifdef HAVE_LD80BITS +GOW(asinhl, DED) +#else +GOW2(asinhl, KEK, asinh) +#endif +#ifdef HAVE_LD80BITS +GOW(asinl, DED) +#else +GOW2(asinl, KEK, asin) +#endif +GO(atan, dEd) +GOW(atan2, dEdd) +GOW(atan2f, fEff) +GOM(__atan2f_finite, fEff) //%noE +GOM(__atan2_finite, dEdd) //%noE +// atan2l // Weak +GOW(atanf, fEf) +GOW(atanh, dEd) +GOW(atanhf, fEf) +// __atanhf_finite +// __atanh_finite +#ifdef HAVE_LD80BITS +GOW(atanhl, DED) +#else +GOW2(atanhl, KEK, atanh) +#endif +// atanl // Weak +//GOW(cabs, dEdd) // only 1 arg, but is a double complex +GOW(cabsf, fEff) // only 1 arg, but is a float complex +// cabsl // Weak +//GOWS(cacos, pEps) //%% complex +GOWM(cacosf, UEs) //%noE +//GOWS(cacosh, pEps) //%% complex +GOWM(cacoshf, UEs) //%noE +// cacoshl // Weak +// cacosl // Weak +//GOW(carg, dEdd) // 1arg, double complex +GOW(cargf, fEff) // 1arg, float complex +// cargl // Weak +//GOWS(casin, pEps) //%% complex +GOWM(casinf, UEs) //%noE +//GOWS(casinh, pEps) //%% complex +GOWM(casinhf, UEs) //%noE +// casinhl // Weak +// casinl // Weak +//GOWS(catan, pEps) //%% complex +GOWM(catanf, UEs) //%noE +//GOWS(catanh, pEps) //%% complex +GOWM(catanhf, UEs) //%noE +// catanhl // Weak +// catanl // Weak +GOW(cbrt, dEd) +GOW(cbrtf, fEf) +#ifdef HAVE_LD80BITS +GOW(cbrtl, DED) +#else +GOW2(cbrtl, KEK, cbrt) +#endif +//GOWS(ccos, pEps) //%% return complex +GOWM(ccosf, UEs) //%noE return complex +//GOWS(ccosh, pEps) //%% return complex +GOWM(ccoshf, UEs) //%noE return complex +// ccoshl // Weak +// ccosl // Weak +GOW(ceil, dEd) +GOW(ceilf, fEf) +// ceill // Weak +//GOWS(cexp, pEps) //%% return complex +GOWM(cexpf, UEs) //%noE return complex +// cexpl // Weak +// cimag // Weak +// cimagf // Weak +// cimagl // Weak +//GOS(clog, pEps) //%% return a double complex, so ret 4 +// clog10 // Weak +// __clog10 +// clog10f // Weak +// __clog10f +// clog10l // Weak +// __clog10l +GOM(clogf, UEs) //%noE float complex doesn't trigger the ret 4, but returns an u64! +// clogl // Weak +// conj // Weak +// conjf // Weak +// conjl // Weak +GOW(copysign, dEdd) +GOW(copysignf, fEff) +// copysignl // Weak +GOW(cos, dEd) +GOW(cosf, fEf) +GOW(cosh, dEd) +GOW(coshf, fEf) +GOM(__coshf_finite, fEf) //%noE +GOM(__cosh_finite, dEd) //%noE +// coshl // Weak +// cosl // Weak +//GOWS(cpow, pEpsvvvvs) //%% return complex +GOWM(cpowf, UEsvvs) //%noE +// cpowl // Weak +//GOS(cproj, pEps) //%% double complex +GOM(cprojf, UEs) //%noE +// cprojl // Weak +// creal // Weak +// crealf // Weak +// creall // Weak +//GOWS(csin, pEps) //%% return complex +GOWM(csinf, UEs) //%noE return complex +//GOWS(csinh, pEps) //%% return complex +GOWM(csinhf, UEs) //%noE return complex +// csinhl // Weak +// csinl // Weak +//GOWS(csqrt, pEps) //%% +GOWM(csqrtf, UEs) //%noE +// csqrtl // Weak +//GOWS(ctan, pEps) //%% return complex +GOWM(ctanf, UEs) //%noE return complex +//GOWS(ctanh, pEps) //%% return complex +GOWM(ctanhf, UEs) //%noE return complex +// ctanhl // Weak +// ctanl // Weak +// __cxa_finalize // Weak +// drem // Weak +// dremf // Weak +// dreml // Weak +GOW(erf, dEd) +GOW(erfc, dEd) +GOW(erfcf, fEf) +#ifdef HAVE_LD80BITS +GOW(erfcl, DED) +#else +GOW2(erfcl, KEK, erfc) +#endif +GOW(erff, fEf) +#ifdef HAVE_LD80BITS +GOW(erfl, DED) +#else +GOW2(erfl, KEK, erf) +#endif +GOW(exp, dEd) +GOW(exp10, dEd) +GOW(exp10f, fEf) +// __exp10f_finite +// __exp10_finite +// exp10l // Weak +GOW(exp2, dEd) +GOW(exp2f, fEf) +GOM(__exp2f_finite, fEf) //%noE +GOM(__exp2_finite, dEd) //%noE +// exp2l // Weak +GOW(expf, fEf) +GOM(__expf_finite, fEf) //%noE +GOM(__exp_finite, dEd) //%noE +// expl // Weak +GOW(expm1, dEd) +GOW(expm1f, fEf) +// expm1l // Weak +GOW(fabs, dEd) +GOW(fabsf, fEf) +// fabsl // Weak +// fdim // Weak +// fdimf // Weak +// fdiml // Weak +GO(feclearexcept, iEi) +GO(fedisableexcept, iEi) +GO(feenableexcept, iEi) +GO(fegetenv, iEp) +GO(fegetexcept, iEv) +GO(fegetexceptflag, iEpi) +GO(fegetround, iEv) +GO(feholdexcept, iEp) +GO(feraiseexcept, iEi) +GO(fesetenv, iEp) +GO(fesetexceptflag, iEpi) +GO(fesetround, iEi) +GO(fetestexcept, iEi) +GO(feupdateenv, iEp) +GOW(finite, iEd) +// __finite +GOW(finitef, iEf) +GO(__finitef, iEf) +// finitel // Weak +// __finitel +GOW(floor, dEd) +GOW(floorf, fEf) +// floorl // Weak +GOW(fma, dEddd) +GOW(fmaf, fEfff) +// fmal // Weak +GOW(fmax, dEdd) +GOW(fmaxf, fEff) +// fmaxl // Weak +GOW(fmin, dEdd) +GOW(fminf, fEff) +// fminl // Weak +GOW(fmod, dEdd) +GOW(fmodf, fEff) +// __fmodf_finite +// __fmod_finite +#ifdef HAVE_LD80BITS +GOW(fmodl, DEDD) +#else +GOW2(fmodl, KEKK, fmod) +#endif +GO(__fpclassify, iEd) +GO(__fpclassifyf, iEf) +GOW(frexp, dEdp) +GOW(frexpf, fEfp) +#ifdef HAVE_LD80BITS +GOW(frexpl, DEDp) +#else +GOW2(frexpl, KEKp, frexp) +#endif +// gamma // Weak +// gammaf // Weak +// __gammaf_r_finite +// gammal // Weak +// __gamma_r_finite +// __gmon_start__ // Weak +GOW(hypot, dEdd) +GOW(hypotf, fEff) +GOM(__hypotf_finite, fEff) //%noE +GOM(__hypot_finite, dEdd) //%noE +// hypotl // Weak +GOW(ilogb, iEd) +GOW(ilogbf, iEf) +// ilogbl // Weak +// __issignaling +// __issignalingf +// _ITM_deregisterTMCloneTable // Weak +// _ITM_registerTMCloneTable // Weak +GO(j0, dEd) +GO(j0f, fEf) +// __j0f_finite +// __j0_finite +// j0l +GO(j1, dEd) +GO(j1f, fEf) +// __j1f_finite +// __j1_finite +// j1l +GO(jn, dEid) +GO(jnf, fEif) +// __jnf_finite +// __jn_finite +// jnl +GOW(ldexp, dEdi) +GOW(ldexpf, fEfi) +#ifdef HAVE_LD80BITS +GOW(ldexpl, DED) +#else +GOW2(ldexpl, KEK, ldexp) +#endif +GOW(lgamma, dEd) +GOW(lgammaf, fEf) +GOW(lgammaf_r, fEfp) +// __lgammaf_r_finite +#ifdef HAVE_LD80BITS +GOW(lgammal, DED) +#else +GOW2(lgammal, KEK, lgamma) +#endif +#ifdef HAVE_LD80BITS +GOW(lgammal_r, DEDp) +#else +GOW2(lgammal_r, KEKp, lgamma_r) +#endif +GOW(lgamma_r, dEdp) +// __lgamma_r_finite +DATAV(_LIB_VERSION, 4) +GOW(llrint, IEd) +GOW(llrintf, IEf) +// llrintl // Weak +GOW(llround, IEd) +GOW(llroundf, IEf) +// llroundl // Weak +GOW(log, dEd) +GOW(log10, dEd) +GOW(log10f, fEf) +GOM(__log10f_finite, fEf) //%noE +GOM(__log10_finite, dEd) //%noE +// log10l // Weak +GOW(log1p, dEd) +GOW(log1pf, fEf) +// log1pl // Weak +GOW(log2, dEd) +GOW(log2f, fEf) +GOM(__log2f_finite, fEf) //%noE +GOM(__log2_finite, dEd) //%noE +// log2l // Weak +GOW(logb, dEd) +GOW(logbf, fEf) +// logbl // Weak +GOW(logf, fEf) +GOM(__logf_finite, fEf) //%noE +GOM(__log_finite, dEd) //%noE +#ifdef HAVE_LD80BITS +GOW(logl, DED) +#else +GOW2(logl, KEK, log) +#endif +GOW(lrint, iEd) +GOW(lrintf, iEf) +// lrintl // Weak +GOW(lround, iEd) +GOW(lroundf, iEf) +// lroundl // Weak +// matherr // Weak +GOW(modf, dEdp) +GOW(modff, fEfp) +// modfl // Weak +// nan // Weak +// nanf // Weak +// nanl // Weak +GOW(nearbyint, dEd) +GOW(nearbyintf, fEf) +// nearbyintl // Weak +GOW(nextafter, dEdd) +GOW(nextafterf, fEff) +// nextafterl // Weak +GOW(nexttoward, dEdD) +GOW(nexttowardf, fEfD) +// nexttowardl // Weak +GOW(pow, dEdd) +GOW(pow10, dEd) +GOW(pow10f, fEf) +#ifdef HAVE_LD80BITS +GOWM(pow10l, DED) //%noE +#else +GOWM(pow10l, KEK) //%noE +#endif +GOW(powf, fEff) +GOM(__powf_finite, fEff) //%noE +GOM(__pow_finite, dEdd) //%noE +#ifdef HAVE_LD80BITS +GOW(powl, DEDD) +#else +GOW2(powl, KEKK, pow) +#endif +GOW(remainder, dEdd) +GOW(remainderf, fEff) +// __remainderf_finite +// __remainder_finite +// remainderl // Weak +GOW(remquo, dEddp) +GOW(remquof, fEffp) +// remquol // Weak +GOW(rint, dEd) +GOW(rintf, fEf) +// rintl // Weak +GOW(round, dEd) +GOW(roundf, fEf) +// roundl // Weak +// scalb // Weak +// scalbf // Weak +// __scalbf_finite +// __scalb_finite +// scalbl // Weak +GOW(scalbln, dEdi) +GOW(scalblnf, fEfi) +// scalblnl // Weak +GOW(scalbn, dEdi) +GOW(scalbnf, fEfi) +// scalbnl // Weak +// __signbit +// __signbitf +DATAB(signgam, 4) +// significand // Weak +// significandf // Weak +// significandl // Weak +GOW(sin, dEd) +GOW(sincos, vEdpp) +GOW(sincosf, vEfpp) +// sincosl // Weak +GOW(sinf, fEf) +GOW(sinh, dEd) +GOW(sinhf, fEf) +GOM(__sinhf_finite, fEf) //%noE +GOM(__sinh_finite, dEd) //%noE +// sinhl // Weak +// sinl // Weak +GOW(sqrt, dEd) +GOW(sqrtf, fEf) +GOM(__sqrtf_finite, fEf) //%noE +GOM(__sqrt_finite, dEd) //%noE +// sqrtl // Weak +GO(tan, dEd) +GOW(tanf, fEf) +GOW(tanh, dEd) +GOW(tanhf, fEf) +// tanhl // Weak +// tanl // Weak +GOW(tgamma, dEd) +GOW(tgammaf, fEf) +#ifdef HAVE_LD80BITS +GOW(tgammal, DED) +#else +GOW2(tgammal, KEK, tgamma) +#endif +GOW(trunc, dEd) +GOW(truncf, fEf) +// truncl // Weak +GO(y0, dEd) +GO(y0f, fEf) +// __y0f_finite +// __y0_finite +// y0l +GO(y1, dEd) +GO(y1f, fEf) +// __y1f_finite +// __y1_finite +// y1l +GO(yn, dEid) +GO(ynf, fEif) +// __ynf_finite +// __yn_finite +// ynl diff --git a/src/wrapped32/wrappedlibpthread.c b/src/wrapped32/wrappedlibpthread.c new file mode 100755 index 0000000000000000000000000000000000000000..dbeee699e6c89a2e87dddd9f9b7d9ef0dabad1ea --- /dev/null +++ b/src/wrapped32/wrappedlibpthread.c @@ -0,0 +1,134 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "box32context.h" +#include "librarian.h" + +static const char* libpthreadName = "libpthread.so.0"; +#define LIBNAME libpthread + +EXPORT int my32_pthread_rwlock_wrlock(pthread_rwlock_t *rwlock) +{ + return pthread_rwlock_wrlock(rwlock); +} +EXPORT int my32_pthread_rwlock_rdlock(pthread_rwlock_t* rwlock) +{ + return pthread_rwlock_rdlock(rwlock); +} +EXPORT int my32_pthread_rwlock_unlock(pthread_rwlock_t *rwlock) +{ + return pthread_rwlock_unlock(rwlock); +} + +EXPORT int32_t my32_pthread_atfork(x64emu_t *emu, void* prepare, void* parent, void* child) +{ + // this is partly incorrect, because the emulated functions should be executed by actual fork and not by my32_atfork... + if(my_context->atfork_sz==my_context->atfork_cap) { + my_context->atfork_cap += 4; + my_context->atforks = (atfork_fnc_t*)realloc(my_context->atforks, my_context->atfork_cap*sizeof(atfork_fnc_t)); + } + int i = my_context->atfork_sz++; + my_context->atforks[i].prepare = (uintptr_t)prepare; + my_context->atforks[i].parent = (uintptr_t)parent; + my_context->atforks[i].child = (uintptr_t)child; + my_context->atforks[i].handle = NULL; + + return 0; +} +EXPORT int32_t my32___pthread_atfork(x64emu_t *emu, void* prepare, void* parent, void* child) __attribute__((alias("my32_pthread_atfork"))); + +EXPORT void my32___pthread_initialize() +{ + // nothing, the lib initialize itself now +} + +#define SEM_SIGN 0x542554aabc123578LL // just some random stuff +typedef struct my_sem_32_s { + uint64_t sign; + sem_t *sem; +} my_sem_32_t; + +#define GET_SEM(sem) sem_t* _sem = (sem->sign != SEM_SIGN)?((sem_t*)sem):(sem->sem) +EXPORT int my32_sem_close(sem_t* sem) +{ + return sem_close(sem); +} +EXPORT int my32_sem_destroy(my_sem_32_t* sem) +{ + if(sem->sign != SEM_SIGN) + return sem_destroy((sem_t*)sem); + int ret = 0; + ret = sem_destroy(sem->sem); + box_free(sem->sem); + sem->sem = NULL; + return ret; +} +EXPORT int my32_sem_getvalue(my_sem_32_t* sem, int* val) +{ + GET_SEM(sem); + return sem_getvalue(_sem, val); +} +EXPORT int my32_sem_init(my_sem_32_t* sem, int pshared, uint32_t val) +{ + int ret = 0; + sem->sign = SEM_SIGN; + sem->sem = box_calloc(1, sizeof(sem_t)); + ret = sem_init(sem->sem, pshared, val); + return ret; +} +EXPORT void* my32_sem_open(const char* name, int flags) +{ + return sem_open(name, flags); +} +EXPORT int my32_sem_post(my_sem_32_t* sem) +{ + GET_SEM(sem); + return sem_post(_sem); +} +EXPORT int my32_sem_timedwait(my_sem_32_t* sem, struct timespec * t) +{ + GET_SEM(sem); + // Not sure it's usefull + //if(!sem_trywait(_sem))) + // return 0; + // some x86 game are not computing timeout correctly (ex: Anomaly Warzone Earth linux version) + while(t->tv_nsec>=1000000000) { + t->tv_nsec-=1000000000; + t->tv_sec+=1; + } + return sem_timedwait(_sem, t); +} +EXPORT int my32_sem_trywait(my_sem_32_t* sem) +{ + GET_SEM(sem); + return sem_trywait(_sem); +} +EXPORT int my32_sem_wait(my_sem_32_t* sem) +{ + GET_SEM(sem); + return sem_wait(_sem); +} + + + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#include "wrappedlib_init32.h" + diff --git a/src/wrapped32/wrappedlibpthread_private.h b/src/wrapped32/wrappedlibpthread_private.h new file mode 100755 index 0000000000000000000000000000000000000000..0bbb7cc22471ac7f60f8cfa57f3bf5c8b98d043f --- /dev/null +++ b/src/wrapped32/wrappedlibpthread_private.h @@ -0,0 +1,189 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif +// General note: pthread_t is unsigned long int +// cpu_set_t is a struct with an array, default size is fixed for all architecture +// struct timespec is: LL + +// __errno_location +// fork +// __fork +// __h_errno_location +// _IO_flockfile +// _IO_ftrylockfile +// _IO_funlockfile +// __libc_allocate_rtsig +// __libc_current_sigrtmax +// __libc_current_sigrtmin +GOM(pthread_atfork, iEEppp) +GOM(__pthread_atfork, iEEppp) +GOM(pthread_attr_destroy, iEEp) +// pthread_attr_getaffinity_np +GOM(pthread_attr_getdetachstate, iEEpp) +GOM(pthread_attr_getguardsize, iEEpp) +GOM(pthread_attr_getinheritsched, iEEpp) +GOM(pthread_attr_getschedparam, iEEpp) +GOM(pthread_attr_getschedpolicy, iEEpp) +GOM(pthread_attr_getscope, iEEpp) +GOM(pthread_attr_getstack, iEEppp) +GOM(pthread_attr_getstackaddr, iEEpp) +GOM(pthread_attr_getstacksize, iEEpp) +GOM(pthread_attr_init, iEEp) +GOM(pthread_attr_setaffinity_np, iEEpup) +GOM(pthread_attr_setdetachstate, iEEpi) +GOM(pthread_attr_setguardsize, iEEpL) +GOM(pthread_attr_setinheritsched, iEEpi) +GOM(pthread_attr_setschedparam, iEEpp) +GOM(pthread_attr_setschedpolicy, iEEpi) +GOM(pthread_attr_setscope, iEEpi) +GOM(pthread_attr_setstack, iEEppL) +GOM(pthread_attr_setstackaddr, iEEpp) +GOM(pthread_attr_setstacksize, iEEpL) +GO(pthread_barrierattr_destroy, iEp) +GO(pthread_barrierattr_getpshared, iEpp) +GO(pthread_barrierattr_init, iEp) +GO(pthread_barrierattr_setpshared, iEpi) +GO(pthread_barrier_destroy, iEp) +GO(pthread_barrier_init, iEppu) +GO(pthread_barrier_wait, iEp) +GO(pthread_cancel, iEh) +GOM(_pthread_cleanup_pop, vEEpi) +GOM(_pthread_cleanup_pop_restore, vEEpi) +GOM(_pthread_cleanup_push, vEEppp) +GOM(_pthread_cleanup_push_defer, vEEppp) +// __pthread_cleanup_routine +GO(pthread_condattr_destroy, iEp) +GO(pthread_condattr_getclock, iEpp) +GO(pthread_condattr_getpshared, iEpp) +GO(pthread_condattr_init, iEp) +GO(pthread_condattr_setclock, iEpp) +GO(pthread_condattr_setpshared, iEpi) +GO2(pthread_cond_broadcast@GLIBC_2.0, iEEp, my32_pthread_cond_broadcast_old) +GO2(pthread_cond_destroy@GLIBC_2.0, iEEp, my32_pthread_cond_destroy_old) +GO2(pthread_cond_init@GLIBC_2.0, iEEpp, my32_pthread_cond_init_old) +GO2(pthread_cond_signal@GLIBC_2.0, iEEp, my32_pthread_cond_signal_old) +GO2(pthread_cond_timedwait@GLIBC_2.0, iEEpprLL_, my32_pthread_cond_timedwait_old) +GO2(pthread_cond_wait@GLIBC_2.0, iEEpp, my32_pthread_cond_wait_old) +GOM(pthread_cond_broadcast, iEEp) +GOM(pthread_cond_destroy, iEEp) +GOM(pthread_cond_init, iEEpp) +GOM(pthread_cond_signal, iEEp) +GOM(pthread_cond_timedwait, iEEpprLL_) +GOM(pthread_cond_wait, iEEpp) +GOM(pthread_create, iEEBh_ppp) +GOM(pthread_detach, iEEh) +GO(pthread_equal, iEhh) +GO(pthread_exit, vEp) +GOM(pthread_getaffinity_np, iEEhup) +GOM(pthread_getattr_np, iEEhp) +GO(pthread_getconcurrency, iEv) +GO(pthread_getcpuclockid, iEhp) +GO(pthread_getschedparam, iEhpp) +GO(__pthread_getspecific, pEu) +GO(pthread_getspecific, pEu) +GO(pthread_getname_np, iEhpL) +GOM(__pthread_initialize, vEv) //%noE doesn't exist anymore... +// __pthread_initialize_minimal +GO(pthread_join, iEHBp_) +GOM(__pthread_key_create, iEEpp) +GOM(pthread_key_create, iEEpp) +GO(pthread_key_delete, iEu) +GO(pthread_kill, iEhi) +GO2(pthread_kill@GLIBC_2.0, iEEhi, my32_pthread_kill_old) +// pthread_kill_other_threads_np +GO(__pthread_mutexattr_destroy, iEp) +GO(pthread_mutexattr_destroy, iEp) +GO(pthread_mutexattr_getprioceiling, iEpp) +GO(pthread_mutexattr_getprotocol, iEpp) +// pthread_mutexattr_getpshared +// pthread_mutexattr_getrobust_np +GO(pthread_mutexattr_gettype, iEpp) +GO2(__pthread_mutexattr_init, iEp, my32_pthread_mutexattr_init) +GOM(pthread_mutexattr_init, iEEp) +GO(pthread_mutexattr_setprioceiling, iEpi) +GO(pthread_mutexattr_setprotocol, iEpp) +GO(pthread_mutexattr_setpshared, iEpi) +// pthread_mutexattr_setrobust_np +GO(__pthread_mutexattr_settype, iEpi) +GO(pthread_mutexattr_settype, iEpi) +// pthread_mutex_consistent_np +GOM(__pthread_mutex_destroy, iEp) //%noE +GOM(pthread_mutex_destroy, iEp) //%noE +// pthread_mutex_getprioceiling +GOM(__pthread_mutex_init, iEpp) //%noE +GOM(pthread_mutex_init, iEpp) //%noE +GOM(__pthread_mutex_lock, iEp) //%noE +GOM(pthread_mutex_lock, iEp) //%noE +// pthread_mutex_setprioceiling +GOM(pthread_mutex_timedlock, iEpp) //%noE +GOM(__pthread_mutex_trylock, iEp) //%noE +GOM(pthread_mutex_trylock, iEp) //%noE +GOM(__pthread_mutex_unlock, iEp) //%noE +GOM(pthread_mutex_unlock, iEp) //%noE +GOM(pthread_once, iEEpp) +GOM(__pthread_once, iEEpp) +GOM(__pthread_register_cancel, vEEp) +// __pthread_register_cancel_defer +GO(pthread_rwlockattr_destroy, vEp) +GO(pthread_rwlockattr_getkind_np, iEpp) +// pthread_rwlockattr_getpshared +GO(pthread_rwlockattr_init, iEp) +GO(pthread_rwlockattr_setkind_np, iEpi) +// pthread_rwlockattr_setpshared +// __pthread_rwlock_destroy +GOM(pthread_rwlock_destroy, iEp) //%noE +GOM(__pthread_rwlock_init, iEpp) //%noE +GOM(pthread_rwlock_init, iEpp) //%noE +GO(__pthread_rwlock_rdlock, iEp) +GO(pthread_rwlock_rdlock, iEp) +// pthread_rwlock_timedrdlock +// pthread_rwlock_timedwrlock +// __pthread_rwlock_tryrdlock +GO(pthread_rwlock_tryrdlock, iEp) +// __pthread_rwlock_trywrlock +GO(pthread_rwlock_trywrlock, iEp) +GO(__pthread_rwlock_unlock, iEp) +GOM(pthread_rwlock_unlock, iEp) //%noE +GO(__pthread_rwlock_wrlock, iEp) +GOM(pthread_rwlock_wrlock, iEp) //%noE +GO(pthread_self, hEv) +GOM(pthread_setaffinity_np, iEEhup) +GO(pthread_setcancelstate, iEip) +GO(pthread_setcanceltype, iEip) +GO(pthread_setconcurrency, iEi) +GO(pthread_setname_np, iEhp) +GO(pthread_setschedparam, iEhip) +GO(pthread_setschedprio, iEhi) +GO(__pthread_setspecific, iEup) +GO(pthread_setspecific, iEup) +GO(pthread_sigmask, iEipp) +GO(pthread_spin_destroy, iEp) +GO(pthread_spin_init, iEpi) +GO(pthread_spin_lock, iEp) +GO(pthread_spin_trylock, iEp) +GO(pthread_spin_unlock, iEp) +GO(pthread_testcancel, vEv) +GO(pthread_timedjoin_np, iEppp) +GO(pthread_tryjoin_np, iEpp) +GOM(__pthread_unregister_cancel, vEEp) +// __pthread_unregister_cancel_restore +// __pthread_unwind +GOM(__pthread_unwind_next, vEEp) +GO(pthread_yield, iEv) +// raise +// __res_state +GOM(sem_close, iEp) //%noE +GOM(sem_destroy, iEp) //%noE +GOM(sem_getvalue, iEpp) //%noE +GOM(sem_init, iEpiu) //%noE +GOM(sem_open, pEpOM) //%noE +GOM(sem_post, iEp) //%noE +GOM(sem_timedwait, iEprLL_) //%noE +GOM(sem_trywait, iEp) //%noE +GO(sem_unlink, iEp) // no need for M here? +GOM(sem_wait, iEp) //%noE +// __sigaction +// system +// __vfork + +GOM(pthread_mutexattr_setkind_np, iEEpi) // deprecated diff --git a/src/wrapped32/wrappedlibrt.c b/src/wrapped32/wrappedlibrt.c new file mode 100755 index 0000000000000000000000000000000000000000..84b7730e3d4ddafdcf710a1d701051af29e5a7f9 --- /dev/null +++ b/src/wrapped32/wrappedlibrt.c @@ -0,0 +1,80 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" + +#undef aio_suspend +#undef aio_return +#undef aio_write +#undef aio_read +#undef aio_error + +#undef clock_gettime + +static const char* librtName = "librt.so.1"; +#define LIBNAME librt + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) + +// sigev_notify +#define GO(A) \ +static uintptr_t my32_sigev_notify_fct_##A = 0; \ +static void my32_sigev_notify_##A(void* sigval) \ +{ \ + RunFunctionFmt(my32_sigev_notify_fct_##A, "p", to_ptrv(sigval));\ +} +SUPER() +#undef GO +static void* findsigev_notifyFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_sigev_notify_fct_##A == (uintptr_t)fct) return my32_sigev_notify_##A; + SUPER() + #undef GO + #define GO(A) if(my32_sigev_notify_fct_##A == 0) {my32_sigev_notify_fct_##A = (uintptr_t)fct; return my32_sigev_notify_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libpng12 sigev_notify callback\n"); + return NULL; +} + +#undef SUPER + +EXPORT int my32_timer_create(x64emu_t* emu, uint32_t clockid, void* sevp, timer_t* timerid) +{ + struct sigevent sevent; + memcpy(&sevent, sevp, sizeof(sevent)); + + if(sevent.sigev_notify == SIGEV_THREAD) { + sevent.sigev_notify_function = findsigev_notifyFct(sevent.sigev_notify_function); + } + + return timer_create(clockid, &sevent, timerid); +} + +#define PRE_INIT\ + if(1) \ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + else + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibrt_private.h b/src/wrapped32/wrappedlibrt_private.h new file mode 100755 index 0000000000000000000000000000000000000000..ddcb32a044023a9ec4797909781cbb84f5943aa0 --- /dev/null +++ b/src/wrapped32/wrappedlibrt_private.h @@ -0,0 +1,51 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +//clockid_t is uint32? +// pid_t is uint32 too? (for clock_getcpuclockid) +// time_t is long +// timespec is struct LL +// itimerspec is struct 2 timespec (so LLLL) + +// aio_cancel +// aio_cancel64 +// aio_error +GO(aio_error64, iEp) +GO(aio_fsync, iEip) +GO(aio_fsync64, iEip) +// aio_init +// aio_read +GO(aio_read64, iEp) +// aio_return +GO(aio_return64, lEp) +GO(aio_suspend, iEpip) +GO(aio_suspend64, iEpip) +// aio_write +GO(aio_write64, iEp) +GO(clock_getcpuclockid, iEup) +GO(clock_getres, iEuBLL_) +GO(clock_gettime, iEuBLL_) // *timespec +GO2(__clock_gettime, iEuBLL_, clock_gettime) +GO(clock_nanosleep, iEuirLL_BLL_) +//GO(clock_settime, iEup) +// lio_listio +// lio_listio64 +// mq_close +GO(mq_getattr, iEip) +// mq_notify +// mq_open +// __mq_open_2 +// mq_receive +// mq_send +// mq_setattr +// mq_timedreceive +// mq_timedsend +// mq_unlink +GO(shm_open, iEpOu) +GO(shm_unlink, iEp) +//GOM(timer_create, iEEupp) +GO(timer_delete, iEu) +GO(timer_getoverrun, iEu) +//GO(timer_gettime, iEup) //time_t is L, timespec is struct LL, itimerspec (the p) is 2 timespec +//GO(timer_settime, iEuipp) //same, p are itimerspec diff --git a/src/wrapped32/wrappedlibuuid.c b/src/wrapped32/wrappedlibuuid.c new file mode 100644 index 0000000000000000000000000000000000000000..23d02fcaa6c74e57d7ab23be0227130338d93651 --- /dev/null +++ b/src/wrapped32/wrappedlibuuid.c @@ -0,0 +1,18 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "box32.h" + +static const char* libuuidName = "libuuid.so.1"; +#define LIBNAME libuuid + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibuuid_private.h b/src/wrapped32/wrappedlibuuid_private.h new file mode 100644 index 0000000000000000000000000000000000000000..e628114195e152627d27547462ac4d61e6350699 --- /dev/null +++ b/src/wrapped32/wrappedlibuuid_private.h @@ -0,0 +1,21 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(uuid_clear, vFp) +GO(uuid_compare, iFpp) +GO(uuid_copy, vFpp) +GO(uuid_generate, vFp) +//GO(uuid__generate_random, vFpp) +GO(uuid_generate_random, vFp) +//GO(uuid__generate_time, vFpp) +GO(uuid_generate_time, vFp) +GO(uuid_generate_time_safe, iFp) +GO(uuid_is_null, iFp) +GO(uuid_parse, iFpp) +//GO(uuid_time, uFpp) +GO(uuid_type, iFp) +GO(uuid_unparse, vFpp) +GO(uuid_unparse_lower, vFpp) +GO(uuid_unparse_upper, vFpp) +GO(uuid_variant, iFp) diff --git a/src/wrapped32/wrappedlibx11.c b/src/wrapped32/wrappedlibx11.c new file mode 100644 index 0000000000000000000000000000000000000000..436743dc11d9086d9e26b424b2f332aa33b7905c --- /dev/null +++ b/src/wrapped32/wrappedlibx11.c @@ -0,0 +1,2262 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" +#include "elfloader.h" +#include "converter32.h" + +#ifdef ANDROID + static const char* libx11Name = "libX11.so"; +#else + static const char* libx11Name = "libX11.so.6"; +#endif + +#define LIBNAME libx11 + +#include "libtools/my_x11_conv.h" + +typedef int (*XErrorHandler)(void *, void *); +void* my32_XSetErrorHandler(x64emu_t* t, XErrorHandler handler); +typedef int (*XIOErrorHandler)(void *); +void* my32_XSetIOErrorHandler(x64emu_t* t, XIOErrorHandler handler); +void* my32_XESetCloseDisplay(x64emu_t* emu, void* display, int32_t extension, void* handler); +typedef int (*WireToEventProc)(void*, void*, void*); +typedef int(*EventHandler) (void*,void*,void*); +int32_t my32_XIfEvent(x64emu_t* emu, void* d,void* ev, EventHandler h, void* arg); + +void delShmInfo(my_XShmSegmentInfo_t* a); // edfine in Xext, to remove a saved ShmInfo + +typedef void (*vFp_t)(void*); +typedef int (*iFp_t)(void*); +typedef uint32_t (*uFv_t)(void); +typedef int (*iFpp_t)(void*, void*); +typedef int32_t (*iFpl_t)(void*, intptr_t); +typedef int (*iFppp_t)(void*, void*, void*); +typedef uintptr_t (*LFpii_t)(void*, int32_t, int32_t); +typedef int32_t (*iFpiiL_t)(void*, int32_t, int32_t, uintptr_t); +typedef void* (*pFpiiuu_t)(void*, int32_t, int32_t, uint32_t, uint32_t); + +#define ADDED_FUNCTIONS() \ + GO(XInitThreads, uFv_t) \ + GO(XUnlockDisplay, vFp_t) + +#include "generated/wrappedlibx11types32.h" + +#include "wrappercallback32.h" + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) \ +GO(5) \ +GO(6) \ +GO(7) \ +GO(8) \ +GO(9) \ +GO(10) \ +GO(11) \ +GO(12) \ +GO(13) \ +GO(14) \ +GO(15) + +// wire_to_event +#define GO(A) \ +static uintptr_t my32_wire_to_event_fct_##A = 0; \ +static int my32_wire_to_event_##A(void* dpy, void* re, void* event) \ +{ \ + static my_XEvent_32_t re_s = {0}; \ + int ret = (int)RunFunctionFmt(my32_wire_to_event_fct_##A, "ppp", getDisplay(dpy), &re_s, event);\ + unconvertXEvent(re, &re_s); \ + return ret; \ +} +SUPER() +#undef GO +#define GO(A) \ +static iFppp_t my32_rev_wire_to_event_fct_##A = NULL; \ +static int my32_rev_wire_to_event_##A(void* dpy, void* re, void* event) \ +{ \ + static my_XEvent_t re_l = {0}; \ + int ret = my32_rev_wire_to_event_fct_##A (getDisplay(dpy), &re_l, event); \ + convertXEvent(re, &re_l); \ +} +SUPER() +#undef GO +static void* findwire_to_eventFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_wire_to_event_fct_##A == (uintptr_t)fct) return my32_wire_to_event_##A; + SUPER() + #undef GO + #define GO(A) if(my32_wire_to_event_fct_##A == 0) {my32_wire_to_event_fct_##A = (uintptr_t)fct; return my32_wire_to_event_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 wire_to_event callback\n"); + return NULL; +} +static void* reverse_wire_to_eventFct(library_t* lib, void* fct) +{ + //Callsed from x86 world -> native world + if(!fct) return fct; + // first check if it's a wrapped function, that could be easy + #define GO(A) if(my32_wire_to_event_##A == fct) return (void*)my32_wire_to_event_fct_##A; + SUPER() + #undef GO + if(FindElfAddress(my_context, (uintptr_t)fct)) + return fct; + // it's a naitve one... so bridge it, but need transform XImage32 to XImage + void* f = NULL; + #define GO(A) if(!f && my32_rev_wire_to_event_fct_##A == fct) f = (void*)my32_rev_wire_to_event_##A; + SUPER() + #undef GO + #define GO(A) if(!f && !my32_rev_wire_to_event_fct_##A) {my32_rev_wire_to_event_fct_##A = fct; f = my32_rev_wire_to_event_##A;} + SUPER() + #undef GO + if(f) + return (void*)AddCheckBridge(lib->w.bridge, iFppp_32, f, 0, "X11_wire_to_event"); + printf_log(LOG_NONE, "Warning, no more slot for reverse 32bits libX11 wire_to_event callback\n"); + return fct; +} + +// event_to_wire +#define GO(A) \ +static uintptr_t my32_event_to_wire_fct_##A = 0; \ +static int my32_event_to_wire_##A(void* dpy, void* re, void* event) \ +{ \ + my_XEvent_32_t re_s = {0}; \ + convertXEvent(&re_s, re); \ + return (int)RunFunctionFmt(my32_event_to_wire_fct_##A, "ppp", getDisplay(dpy), &re_s, event); \ +} +SUPER() +#undef GO +#define GO(A) \ +static iFppp_t my32_rev_event_to_wire_fct_##A = NULL; \ +static int my32_rev_event_to_wire_##A(void* dpy, void* re, void* event) \ +{ \ + static my_XEvent_t re_l = {0}; \ + unconvertXEvent(&re_l, re); \ + return my32_rev_event_to_wire_fct_##A (getDisplay(dpy), &re_l, event); \ +} +SUPER() +#undef GO +static void* findevent_to_wireFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_event_to_wire_fct_##A == (uintptr_t)fct) return my32_event_to_wire_##A; + SUPER() + #undef GO + #define GO(A) if(my32_event_to_wire_fct_##A == 0) {my32_event_to_wire_fct_##A = (uintptr_t)fct; return my32_event_to_wire_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 event_to_wire callback\n"); + return NULL; +} +static void* reverse_event_to_wireFct(library_t* lib, void* fct) +{ + //Callsed from x86 world -> native world + if(!fct) return fct; + // first check if it's a wrapped function, that could be easy + #define GO(A) if(my32_event_to_wire_##A == fct) return (void*)my32_event_to_wire_fct_##A; + SUPER() + #undef GO + if(FindElfAddress(my_context, (uintptr_t)fct)) + return fct; + // it's a naitve one... so bridge it, but need transform XImage32 to XImage + void* f = NULL; + #define GO(A) if(!f && my32_rev_event_to_wire_fct_##A == fct) f = (void*)my32_rev_event_to_wire_##A; + SUPER() + #undef GO + #define GO(A) if(!f && !my32_rev_event_to_wire_fct_##A) {my32_rev_event_to_wire_fct_##A = fct; f = my32_rev_event_to_wire_##A;} + SUPER() + #undef GO + if(f) + return (void*)AddCheckBridge(lib->w.bridge, iFppp_32, f, 0, "X11_event_to_wire"); + printf_log(LOG_NONE, "Warning, no more slot for reverse 32bits libX11 event_to_wire callback\n"); + return fct; +} +// error_handler +#define GO(A) \ +static uintptr_t my32_error_handler_fct_##A = 0; \ +static int my32_error_handler_##A(void* dpy, void* error) \ +{ \ + static my_XErrorEvent_32_t evt = {0}; \ + convert_XErrorEvent_to_32(&evt, error); \ + printf_log(LOG_DEBUG, "Calling Xerrorhandler(%p, %p), err=%hhu/%hhu/%hhu\n", \ + dpy, error, evt.error_code, evt.request_code, evt.minor_code); \ + return (int)RunFunctionFmt(my32_error_handler_fct_##A, "pp", FindDisplay(dpy), &evt); \ +} +SUPER() +#undef GO +#define GO(A) \ +static iFpp_t my32_rev_error_handler_fct_##A = NULL; \ +static int my32_rev_error_handler_##A(void* dpy, void* error) \ +{ \ + my_XErrorEvent_t evt = {0}; \ + convert_XErrorEvent_to_64(&evt, error); \ + return my32_rev_error_handler_fct_##A (getDisplay(dpy), &evt); \ +} +SUPER() +#undef GO +static void* finderror_handlerFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_error_handler_fct_##A == (uintptr_t)fct) return my32_error_handler_##A; + SUPER() + #undef GO + #define GO(A) if(my32_error_handler_fct_##A == 0) {my32_error_handler_fct_##A = (uintptr_t)fct; return my32_error_handler_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 error_handler callback\n"); + return NULL; +} +static void* reverse_error_handler_Fct(library_t* lib, void* fct) +{ + //Callsed from x86 world -> native world + if(!fct) return fct; + // first check if it's a wrapped function, that could be easy + #define GO(A) if(my32_error_handler_##A == fct) return (void*)my32_error_handler_fct_##A; + SUPER() + #undef GO + if(FindElfAddress(my_context, (uintptr_t)fct)) + return fct; + // it's a naitve one... so bridge it, but need transform XImage32 to XImage + void* f = NULL; + #define GO(A) if(!f && my32_rev_error_handler_fct_##A == fct) f = (void*)my32_rev_error_handler_##A; + SUPER() + #undef GO + #define GO(A) if(!f && !my32_rev_error_handler_fct_##A) {my32_rev_error_handler_fct_##A = fct; f = my32_rev_error_handler_##A;} + SUPER() + #undef GO + if(f) + return (void*)AddCheckBridge(lib->w.bridge, iFpp_32, f, 0, "X11_error_handler"); + printf_log(LOG_NONE, "Warning, no more slot for reverse 32bits libX11 error_handler callback\n"); + return fct; +} + +// ioerror_handler +#define GO(A) \ +static uintptr_t my32_ioerror_handler_fct_##A = 0; \ +static int my32_ioerror_handler_##A(void* dpy) \ +{ \ + return (int)RunFunctionFmt(my32_ioerror_handler_fct_##A, "p", FindDisplay(dpy));\ +} +SUPER() +#undef GO +#define GO(A) \ +static iFp_t my32_rev_ioerror_handler_fct_##A = NULL; \ +static int my32_rev_ioerror_handler_##A(void* dpy) \ +{ \ + return my32_rev_ioerror_handler_fct_##A (getDisplay(dpy)); \ +} +SUPER() +#undef GO +static void* findioerror_handlerFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_ioerror_handler_fct_##A == (uintptr_t)fct) return my32_ioerror_handler_##A; + SUPER() + #undef GO + #define GO(A) if(my32_ioerror_handler_fct_##A == 0) {my32_ioerror_handler_fct_##A = (uintptr_t)fct; return my32_ioerror_handler_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 ioerror_handler callback\n"); + return NULL; +} +static void* reverse_ioerror_handler_Fct(library_t* lib, void* fct) +{ + //Callsed from x86 world -> native world + if(!fct) return fct; + // first check if it's a wrapped function, that could be easy + #define GO(A) if(my32_ioerror_handler_##A == fct) return (void*)my32_ioerror_handler_fct_##A; + SUPER() + #undef GO + if(FindElfAddress(my_context, (uintptr_t)fct)) + return fct; + // it's a naitve one... so bridge it, but need transform XImage32 to XImage + void* f = NULL; + #define GO(A) if(!f && my32_rev_ioerror_handler_fct_##A == fct) f = (void*)my32_rev_ioerror_handler_##A; + SUPER() + #undef GO + #define GO(A) if(!f && !my32_rev_ioerror_handler_fct_##A) {my32_rev_ioerror_handler_fct_##A = fct; f = my32_rev_ioerror_handler_##A;} + SUPER() + #undef GO + if(f) + return (void*)AddCheckBridge(lib->w.bridge, iFp_32, f, 0, "X11_ioerror_handler"); + printf_log(LOG_NONE, "Warning, no more slot for reverse 32bits libX11 ioerror_handler callback\n"); + return fct; +} + +#if 0 +// exterror_handler +#define GO(A) \ +static uintptr_t my32_exterror_handler_fct_##A = 0; \ +static int my32_exterror_handler_##A(void* dpy, void* err, void* codes, int* ret_code) \ +{ \ + return (int)RunFunctionFmt(my32_exterror_handler_fct_##A, "pppp", dpy, err, codes, ret_code);\ +} +SUPER() +#undef GO +static void* findexterror_handlerFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_exterror_handler_fct_##A == (uintptr_t)fct) return my32_exterror_handler_##A; + SUPER() + #undef GO + #define GO(A) if(my32_exterror_handler_fct_##A == 0) {my32_exterror_handler_fct_##A = (uintptr_t)fct; return my32_exterror_handler_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 exterror_handler callback\n"); + return NULL; +} +static void* reverse_exterror_handlerFct(library_t* lib, void* fct) +{ + if(!fct) return fct; + if(CheckBridged(lib->w.bridge, fct)) + return (void*)CheckBridged(lib->w.bridge, fct); + #define GO(A) if(my32_exterror_handler_##A == fct) return (void*)my32_exterror_handler_fct_##A; + SUPER() + #undef GO + return (void*)AddBridge(lib->w.bridge, iFpppp, fct, 0, NULL); +} +#endif +// close_display +#define GO(A) \ +static uintptr_t my32_close_display_fct_##A = 0; \ +static int my32_close_display_##A(void* dpy, void* codes) \ +{ \ + return (int)RunFunctionFmt(my32_close_display_fct_##A, "pp", getDisplay(dpy), codes); \ +} +SUPER() +#undef GO +static void* findclose_displayFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_close_display_fct_##A == (uintptr_t)fct) return my32_close_display_##A; + SUPER() + #undef GO + #define GO(A) if(my32_close_display_fct_##A == 0) {my32_close_display_fct_##A = (uintptr_t)fct; return my32_close_display_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 close_display callback\n"); + return NULL; +} +static void* reverse_close_displayFct(library_t* lib, void* fct) +{ + if(!fct) return fct; + if(CheckBridged(lib->w.bridge, fct)) + return (void*)CheckBridged(lib->w.bridge, fct); + #define GO(A) if(my32_close_display_##A == fct) return (void*)my32_close_display_fct_##A; + SUPER() + #undef GO + return (void*)AddBridge(lib->w.bridge, iFpp_32, fct, 0, NULL); +} + +// register_im +#define GO(A) \ +static uintptr_t my32_register_im_fct_##A = 0; \ +static void my32_register_im_##A(void* dpy, void* u, void* d) \ +{ \ + RunFunctionFmt(my32_register_im_fct_##A, "ppp", getDisplay(dpy), u, d); \ +} +SUPER() +#undef GO +static void* findregister_imFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_register_im_fct_##A == (uintptr_t)fct) return my32_register_im_##A; + SUPER() + #undef GO + #define GO(A) if(my32_register_im_fct_##A == 0) {my32_register_im_fct_##A = (uintptr_t)fct; return my32_register_im_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 register_im callback\n"); + return NULL; +} +static void* reverse_register_imFct(library_t* lib, void* fct) +{ + if(!fct) return fct; + if(CheckBridged(lib->w.bridge, fct)) + return (void*)CheckBridged(lib->w.bridge, fct); + #define GO(A) if(my32_register_im_##A == fct) return (void*)my32_register_im_fct_##A; + SUPER() + #undef GO + return (void*)AddBridge(lib->w.bridge, iFppp_32, fct, 0, NULL); +} +#if 0 +// XConnectionWatchProc +#define GO(A) \ +static uintptr_t my32_XConnectionWatchProc_fct_##A = 0; \ +static void my32_XConnectionWatchProc_##A(void* dpy, void* data, int op, void* d) \ +{ \ + RunFunctionFmt(my32_XConnectionWatchProc_fct_##A, "ppip", dpy, data, op, d); \ +} +SUPER() +#undef GO +static void* findXConnectionWatchProcFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_XConnectionWatchProc_fct_##A == (uintptr_t)fct) return my32_XConnectionWatchProc_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XConnectionWatchProc_fct_##A == 0) {my32_XConnectionWatchProc_fct_##A = (uintptr_t)fct; return my32_XConnectionWatchProc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XConnectionWatchProc callback\n"); + return NULL; +} +#endif +// xifevent +#define GO(A) \ +static uintptr_t my32_xifevent_fct_##A = 0; \ +static int my32_xifevent_##A(void* dpy, my_XEvent_t* event, void* d) \ +{ \ + static my_XEvent_32_t evt[16] = {0}; \ + static int idx = 0; \ + idx=(idx+1)&15; \ + convertXEvent(evt+idx, event); \ + return RunFunctionFmt(my32_xifevent_fct_##A, "ppp", getDisplay(dpy), evt+idx, d); \ +} +SUPER() +#undef GO +static void* findxifeventFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_xifevent_fct_##A == (uintptr_t)fct) return my32_xifevent_##A; + SUPER() + #undef GO + #define GO(A) if(my32_xifevent_fct_##A == 0) {my32_xifevent_fct_##A = (uintptr_t)fct; return my32_xifevent_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 xifevent callback\n"); + return NULL; +} +#if 0 +// XInternalAsyncHandler +#define GO(A) \ +static uintptr_t my32_XInternalAsyncHandler_fct_##A = 0; \ +static int my32_XInternalAsyncHandler_##A(void* dpy, void* rep, void* buf, int len, void* data) \ +{ \ + return RunFunctionFmt(my32_XInternalAsyncHandler_fct_##A, "pppip", dpy, rep, buf, len, data); \ +} +SUPER() +#undef GO +static void* findXInternalAsyncHandlerFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_XInternalAsyncHandler_fct_##A == (uintptr_t)fct) return my32_XInternalAsyncHandler_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XInternalAsyncHandler_fct_##A == 0) {my32_XInternalAsyncHandler_fct_##A = (uintptr_t)fct; return my32_XInternalAsyncHandler_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XInternalAsyncHandler callback\n"); + return NULL; +} +#endif +// XSynchronizeProc +#define GO(A) \ +static uintptr_t my32_XSynchronizeProc_fct_##A = 0; \ +static int my32_XSynchronizeProc_##A() \ +{ \ + return (int)RunFunctionFmt(my32_XSynchronizeProc_fct_##A, "");\ +} +SUPER() +#undef GO +static void* findXSynchronizeProcFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_XSynchronizeProc_fct_##A == (uintptr_t)fct) return my32_XSynchronizeProc_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XSynchronizeProc_fct_##A == 0) {my32_XSynchronizeProc_fct_##A = (uintptr_t)fct; return my32_XSynchronizeProc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XSynchronizeProc callback\n"); + return NULL; +} +static void* reverse_XSynchronizeProcFct(library_t* lib, void* fct) +{ + if(!fct) return fct; + if(CheckBridged(lib->w.bridge, fct)) + return (void*)CheckBridged(lib->w.bridge, fct); + #define GO(A) if(my32_XSynchronizeProc_##A == fct) return (void*)my32_XSynchronizeProc_fct_##A; + SUPER() + #undef GO + return (void*)AddBridge(lib->w.bridge, iFppp_32, fct, 0, NULL); +} +#if 0 +// XLockDisplay +#define GO(A) \ +static uintptr_t my32_XLockDisplay_fct_##A = 0; \ +static void my32_XLockDisplay_##A(void* dpy) \ +{ \ + RunFunctionFmt(my32_XLockDisplay_fct_##A, "p", dpy); \ +} +SUPER() +#undef GO +static void* findXLockDisplayFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_XLockDisplay_fct_##A == (uintptr_t)fct) return my32_XLockDisplay_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XLockDisplay_fct_##A == 0) {my32_XLockDisplay_fct_##A = (uintptr_t)fct; return my32_XLockDisplay_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XLockDisplay callback\n"); + return NULL; +} +// XUnlockDisplay +#define GO(A) \ +static uintptr_t my32_XUnlockDisplay_fct_##A = 0; \ +static void my32_XUnlockDisplay_##A(void* dpy) \ +{ \ + RunFunctionFmt(my32_XUnlockDisplay_fct_##A, "p", dpy); \ +} +SUPER() +#undef GO +static void* findXUnlockDisplayFct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_XUnlockDisplay_fct_##A == (uintptr_t)fct) return my32_XUnlockDisplay_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XUnlockDisplay_fct_##A == 0) {my32_XUnlockDisplay_fct_##A = (uintptr_t)fct; return my32_XUnlockDisplay_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XUnlockDisplay callback\n"); + return NULL; +} +// async_handler +#define GO(A) \ +static uintptr_t my32_async_handler_fct_##A = 0; \ +static int my32_async_handler_##A(void* a, void* b, void* c, int d, void* e) \ +{ \ + return (int)RunFunctionFmt(my32_async_handler_fct_##A, "pppip", a, b, c, d, e); \ +} +SUPER() +#undef GO +static void* find_async_handler_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_async_handler_fct_##A == (uintptr_t)fct) return my32_async_handler_##A; + SUPER() + #undef GO + #define GO(A) if(my32_async_handler_fct_##A == 0) {my32_async_handler_fct_##A = (uintptr_t)fct; return my32_async_handler_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 async_handler callback\n"); + return NULL; +} +#endif +// XImage function wrappers +// create_image +#define GO(A) \ +static uintptr_t my32_create_image_fct_##A = 0; \ +static void* my32_create_image_##A(void* a, void* b, uint32_t c, int d, int e, void* f, uint32_t g, uint32_t h, int i, int j) \ +{ \ + void* ret = (void*)RunFunctionFmt(my32_create_image_fct_##A, "ppuiipuuii", FindDisplay(a), convert_Visual_to_32(a, b), c, d, e, f, g, h, i, j); \ + UnwrapXImage(ret, ret); \ + return ret; \ +} \ +static pFXpuiipuuii_t my32_rev_create_image_fct_##A = NULL; \ +static void* my32_rev_create_image_##A(void* a, void* b, uint32_t c, int d, int e, void* f, uint32_t g, uint32_t h, int i, int j) \ +{ \ + void* ret = my32_rev_create_image_fct_##A (getDisplay(a), convert_Visual_to_64(a, b), c, d, e, f, g, h, i, j); \ + WrapXImage(ret, ret); \ + return ret; \ +} +SUPER() +#undef GO +static void* find_create_image_Fct(void* fct) +{ + if(!fct) return fct; + void* n_fct = GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_rev_create_image_##A == n_fct) return (void*)my32_rev_create_image_fct_##A; + SUPER() + #undef GO + if(n_fct) return n_fct; + #define GO(A) if(my32_create_image_fct_##A == (uintptr_t)fct) return my32_create_image_##A; + SUPER() + #undef GO + #define GO(A) if(my32_create_image_fct_##A == 0) {my32_create_image_fct_##A = (uintptr_t)fct; return my32_create_image_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 create_image callback\n"); + return NULL; +} +static void* reverse_create_image_Fct(library_t* lib, void* fct) +{ + //Callsed from x86 world -> native world + if(!fct) return fct; + // first check if it's a wrapped function, that could be easy + #define GO(A) if(my32_create_image_##A == fct) return (void*)my32_create_image_fct_##A; + SUPER() + #undef GO + if(FindElfAddress(my_context, (uintptr_t)fct)) + return fct; + // it's a naitve one... so bridge it, but need transform XImage32 to XImage + void* f = NULL; + #define GO(A) if(!f && my32_rev_create_image_fct_##A == fct) f = (void*)my32_rev_create_image_##A; + SUPER() + #undef GO + #define GO(A) if(!f && !my32_rev_create_image_fct_##A) {my32_rev_create_image_fct_##A = fct; f = my32_rev_create_image_##A;} + SUPER() + #undef GO + if(f) + return (void*)AddCheckBridge(lib->w.bridge, pFXpuiipuuii_32, f, 0, "Ximage_create_image"); + printf_log(LOG_NONE, "Warning, no more slot for reverse 32bits libX11 create_image callback\n"); + return fct; +} +// destroy_image +#define GO(A) \ +static uintptr_t my32_destroy_image_fct_##A = 0; \ +static int my32_destroy_image_##A(void* a) \ +{ \ + void* obdata = ((XImage*)a)->obdata; \ + inplace_XImage_shrink(a); \ + int ret = (int)RunFunctionFmt(my32_destroy_image_fct_##A, "p", a); \ + to_hash_d((uintptr_t)obdata); \ + if(obdata) delShmInfo(obdata); \ + return ret; \ +} \ +static iFp_t my32_rev_destroy_image_fct_##A = NULL; \ +static int my32_rev_destroy_image_##A(void* a) \ +{ \ + inplace_XImage_enlarge(a); \ + to_hash_d((uintptr_t)((XImage*)a)->obdata); \ + void* obdata = ((XImage*)a)->obdata; \ + int ret = my32_rev_destroy_image_fct_##A (a); \ + if(obdata) delShmInfo(obdata); \ + return ret; \ +} +SUPER() +#undef GO +static void* find_destroy_image_Fct(void* fct) +{ + if(!fct) return fct; + void* n_fct = GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_rev_destroy_image_##A == n_fct) return (void*)my32_rev_destroy_image_fct_##A; + SUPER() + #undef GO + if(n_fct) return n_fct; + #define GO(A) if(my32_destroy_image_fct_##A == (uintptr_t)fct) return my32_destroy_image_##A; + SUPER() + #undef GO + #define GO(A) if(my32_destroy_image_fct_##A == 0) {my32_destroy_image_fct_##A = (uintptr_t)fct; return my32_destroy_image_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for 32bits libX11 destroy_image callback\n"); + return NULL; +} +static void* reverse_destroy_image_Fct(library_t* lib, void* fct) +{ + //Callsed from x86 world -> native world + if(!fct) return fct; + // first check if it's a wrapped function, that could be easy + #define GO(A) if(my32_destroy_image_##A == fct) return (void*)my32_destroy_image_fct_##A; + SUPER() + #undef GO + if(FindElfAddress(my_context, (uintptr_t)fct)) + return fct; + // it's a naitve one... so bridge it, but need transform XImage32 to XImage + void* f = NULL; + #define GO(A) if(!f && my32_rev_destroy_image_fct_##A == fct) f = (void*)my32_rev_destroy_image_##A; + SUPER() + #undef GO + #define GO(A) if(!f && !my32_rev_destroy_image_fct_##A) {my32_rev_destroy_image_fct_##A = fct; f = my32_rev_destroy_image_##A;} + SUPER() + #undef GO + if(f) + return (void*)AddCheckBridge(lib->w.bridge, iFp_32, f, 0, "Ximage_destroy_image"); + printf_log(LOG_NONE, "Warning, no more slot for reverse 32bits libX11 destroy_image callback\n"); + return fct; +} +// get_pixel +#define GO(A) \ +static uintptr_t my32_get_pixel_fct_##A = 0; \ +static unsigned long my32_get_pixel_##A(void* a, int b, int c) \ +{ \ + inplace_XImage_shrink(a); \ + uint32_t ret = RunFunctionFmt(my32_get_pixel_fct_##A, "pii", a, b, c); \ + inplace_XImage_enlarge(a); \ + return from_ulong(ret); \ +} \ +static LFpii_t my32_rev_get_pixel_fct_##A = NULL; \ +static unsigned long my32_rev_get_pixel_##A(void* a, int b, int c) \ +{ \ + inplace_XImage_enlarge(a); \ + unsigned long ret = my32_rev_get_pixel_fct_##A (a, b, c); \ + inplace_XImage_shrink(a); \ + return ret; \ +} +SUPER() +#undef GO +static void* find_get_pixel_Fct(void* fct) +{ + if(!fct) return fct; + void* n_fct = GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_rev_get_pixel_##A == n_fct) return (void*)my32_rev_get_pixel_fct_##A; + SUPER() + #undef GO + if(n_fct) return n_fct; + #define GO(A) if(my32_get_pixel_fct_##A == (uintptr_t)fct) return my32_get_pixel_##A; + SUPER() + #undef GO + #define GO(A) if(my32_get_pixel_fct_##A == 0) {my32_get_pixel_fct_##A = (uintptr_t)fct; return my32_get_pixel_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 get_pixel callback\n"); + return NULL; +} +static void* reverse_get_pixel_Fct(library_t* lib, void* fct) +{ + //Callsed from x86 world -> native world + if(!fct) return fct; + // first check if it's a wrapped function, that could be easy + #define GO(A) if(my32_get_pixel_##A == fct) return (void*)my32_get_pixel_fct_##A; + SUPER() + #undef GO + if(FindElfAddress(my_context, (uintptr_t)fct)) + return fct; + // it's a naitve one... so bridge it, but need transform XImage32 to XImage + void* f = NULL; + #define GO(A) if(!f && my32_rev_get_pixel_fct_##A == fct) f = (void*)my32_rev_get_pixel_##A; + SUPER() + #undef GO + #define GO(A) if(!f && !my32_rev_get_pixel_fct_##A) {my32_rev_get_pixel_fct_##A = fct; f = my32_rev_get_pixel_##A;} + SUPER() + #undef GO + if(f) + return (void*)AddCheckBridge(lib->w.bridge, LFpii_32, f, 0, "Ximage_get_pixel"); + printf_log(LOG_NONE, "Warning, no more slot for reverse 32bits libX11 get_pixel callback\n"); + return fct; +} +// put_pixel +#define GO(A) \ +static uintptr_t my32_put_pixel_fct_##A = 0; \ +static int my32_put_pixel_##A(void* a, int b, int c,unsigned long d) \ +{ \ + inplace_XImage_shrink(a); \ + int ret = (int)RunFunctionFmt(my32_put_pixel_fct_##A, "piiL", a, b, c, d); \ + inplace_XImage_enlarge(a); \ + return ret; \ +} \ +static iFpiiL_t my32_rev_put_pixel_fct_##A = NULL; \ +static int my32_rev_put_pixel_##A(void* a, int b, int c, ulong_t d) \ +{ \ + inplace_XImage_enlarge(a); \ + int ret = my32_rev_put_pixel_fct_##A (a, b, c, from_ulong(d)); \ + inplace_XImage_shrink(a); \ + return ret; \ +} +SUPER() +#undef GO +static void* find_put_pixel_Fct(void* fct) +{ + if(!fct) return fct; + void* n_fct = GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_rev_put_pixel_##A == n_fct) return (void*)my32_rev_put_pixel_fct_##A; + SUPER() + #undef GO + if(n_fct) return n_fct; + #define GO(A) if(my32_put_pixel_fct_##A == (uintptr_t)fct) return my32_put_pixel_##A; + SUPER() + #undef GO + #define GO(A) if(my32_put_pixel_fct_##A == 0) {my32_put_pixel_fct_##A = (uintptr_t)fct; return my32_put_pixel_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 put_pixel callback\n"); + return NULL; +} +static void* reverse_put_pixel_Fct(library_t* lib, void* fct) +{ + //Callsed from x86 world -> native world + if(!fct) return fct; + // first check if it's a wrapped function, that could be easy + #define GO(A) if(my32_put_pixel_##A == fct) return (void*)my32_put_pixel_fct_##A; + SUPER() + #undef GO + if(FindElfAddress(my_context, (uintptr_t)fct)) + return fct; + // it's a naitve one... so bridge it, but need transform XImage32 to XImage + void* f = NULL; + #define GO(A) if(!f && my32_rev_put_pixel_fct_##A == fct) f = (void*)my32_rev_put_pixel_##A; + SUPER() + #undef GO + #define GO(A) if(!f && !my32_rev_put_pixel_fct_##A) {my32_rev_put_pixel_fct_##A = fct; f = my32_rev_put_pixel_##A;} + SUPER() + #undef GO + if(f) + return (void*)AddCheckBridge(lib->w.bridge, iFpiiL_32, f, 0, "Ximage_put_pixel"); + printf_log(LOG_NONE, "Warning, no more slot for reverse 32bits libX11 put_pixel callback\n"); + return fct; +} +// sub_image +#define GO(A) \ +static uintptr_t my32_sub_image_fct_##A = 0; \ +static void* my32_sub_image_##A(void* a, int b, int c, uint32_t d, uint32_t e) \ +{ \ + inplace_XImage_shrink(a); \ + void* ret = (void*)RunFunctionFmt(my32_sub_image_fct_##A, "piiuu", a, b, c, d, e);\ + if(ret!=a) UnwrapXImage(ret, ret); \ + inplace_XImage_enlarge(a); \ + return ret; \ +} \ +static pFpiiuu_t my32_rev_sub_image_fct_##A = NULL; \ +static void* my32_rev_sub_image_##A(void* a, int b, int c, uint32_t d, uint32_t e) \ +{ \ + inplace_XImage_enlarge(a); \ + void* ret = my32_rev_sub_image_fct_##A (a, b, c, d, e); \ + if(ret!=a) \ + WrapXImage(ret, ret); \ + inplace_XImage_shrink(a); \ + return ret; \ +} +SUPER() +#undef GO +static void* find_sub_image_Fct(void* fct) +{ + if(!fct) return fct; + void* n_fct = GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_rev_sub_image_##A == n_fct) return (void*)my32_rev_sub_image_fct_##A; + SUPER() + #undef GO + if(n_fct) return n_fct; + #define GO(A) if(my32_sub_image_fct_##A == (uintptr_t)fct) return my32_sub_image_##A; + SUPER() + #undef GO + #define GO(A) if(my32_sub_image_fct_##A == 0) {my32_sub_image_fct_##A = (uintptr_t)fct; return my32_sub_image_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 sub_image callback\n"); + return NULL; +} +static void* reverse_sub_image_Fct(library_t* lib, void* fct) +{ + //Callsed from x86 world -> native world + if(!fct) return fct; + // first check if it's a wrapped function, that could be easy + #define GO(A) if(my32_sub_image_##A == fct) return (void*)my32_sub_image_fct_##A; + SUPER() + #undef GO + if(FindElfAddress(my_context, (uintptr_t)fct)) + return fct; + // it's a naitve one... so bridge it, but need transform XImage32 to XImage + void* f = NULL; + #define GO(A) if(!f && my32_rev_sub_image_fct_##A == fct) f = (void*)my32_rev_sub_image_##A; + SUPER() + #undef GO + #define GO(A) if(!f && !my32_rev_sub_image_fct_##A) {my32_rev_sub_image_fct_##A = fct; f = my32_rev_sub_image_##A;} + SUPER() + #undef GO + if(f) + return (void*)AddCheckBridge(lib->w.bridge, pFpiiuu_32, f, 0, "ximage_sub_image"); + printf_log(LOG_NONE, "Warning, no more slot for reverse 32bits libX11 sub_image callback\n"); + return fct; +} +// add_pixel +#define GO(A) \ +static uintptr_t my32_add_pixel_fct_##A = 0; \ +static int my32_add_pixel_##A(void* a, long b) \ +{ \ + inplace_XImage_shrink(a); \ + int ret = (int)RunFunctionFmt(my32_add_pixel_fct_##A, "pl", a, b); \ + inplace_XImage_enlarge(a); \ + return ret; \ +} \ +static iFpl_t my32_rev_add_pixel_fct_##A = NULL; \ +static int my32_rev_add_pixel_##A(void* a, long_t b) \ +{ \ + inplace_XImage_enlarge(a); \ + int ret = my32_rev_add_pixel_fct_##A (a, from_long(b)); \ + inplace_XImage_shrink(a); \ + return ret; \ +} +SUPER() +#undef GO +static void* find_add_pixel_Fct(void* fct) +{ + if(!fct) return fct; + void* n_fct = GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_rev_add_pixel_##A == n_fct) return (void*)my32_rev_add_pixel_fct_##A; + SUPER() + #undef GO + if(n_fct) return n_fct; + #define GO(A) if(my32_add_pixel_fct_##A == (uintptr_t)fct) return my32_add_pixel_##A; + SUPER() + #undef GO + #define GO(A) if(my32_add_pixel_fct_##A == 0) {my32_add_pixel_fct_##A = (uintptr_t)fct; return my32_add_pixel_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 add_pixel callback\n"); + return NULL; +} +static void* reverse_add_pixel_Fct(library_t* lib, void* fct) +{ + //Callsed from x86 world -> native world + if(!fct) return fct; + // first check if it's a wrapped function, that could be easy + #define GO(A) if(my32_add_pixel_##A == fct) return (void*)my32_add_pixel_fct_##A; + SUPER() + #undef GO + if(FindElfAddress(my_context, (uintptr_t)fct)) + return fct; + // it's a naitve one... so bridge it, but need transform XImage32 to XImage + void* f = NULL; + #define GO(A) if(!f && my32_rev_add_pixel_fct_##A == fct) f = (void*)my32_rev_add_pixel_##A; + SUPER() + #undef GO + #define GO(A) if(!f && !my32_rev_add_pixel_fct_##A) {my32_rev_add_pixel_fct_##A = fct; f = my32_rev_add_pixel_##A;} + SUPER() + #undef GO + if(f) + return (void*)AddCheckBridge(lib->w.bridge, iFpl_32, f, 0, "ximage_add_pixel"); + printf_log(LOG_NONE, "Warning, no more slot for reverse 32bits libX11 add_pixel callback\n"); + return fct; +} +// end of XImage functions callbacks + +#undef SUPER + +void* my32_XCreateImage(x64emu_t* emu, void* disp, void* vis, uint32_t depth, int32_t fmt, int32_t off + , void* data, uint32_t w, uint32_t h, int32_t pad, int32_t bpl); + +int32_t my32_XInitImage(x64emu_t* emu, void* img); + +void* my32_XGetImage(x64emu_t* emu, void* disp, XID drawable, int32_t x, int32_t y + , uint32_t w, uint32_t h, uint32_t plane, int32_t fmt); + +int32_t my32_XPutImage(x64emu_t* emu, void* disp, XID drawable, void* gc, void* image + , int32_t src_x, int32_t src_y, int32_t dst_x, int32_t dst_y + , uint32_t w, uint32_t h); + +void* my32_XGetSubImage(x64emu_t* emu, void* disp, XID drawable + , int32_t x, int32_t y + , uint32_t w, uint32_t h, XID plane, int32_t fmt + , void* image, int32_t dst_x, int32_t dst_y); + +void my32_XDestroyImage(x64emu_t* emu, void* image); + +typedef void (*XIMProc)(void*, void*, void*); +typedef int (*XICProc)(void*, void*, void*); +typedef struct { + void* client_data; + XIMProc callback; +} XIMCallback; + +typedef struct { + void* client_data; + XICProc callback; +} XICCallback; + +#define XNGeometryCallback "geometryCallback" +#define XNDestroyCallback "destroyCallback" +#define XNPreeditStartCallback "preeditStartCallback" +#define XNPreeditDoneCallback "preeditDoneCallback" +#define XNPreeditDrawCallback "preeditDrawCallback" +#define XNPreeditCaretCallback "preeditCaretCallback" +#define XNPreeditStateNotifyCallback "preeditStateNotifyCallback" +#define XNStatusStartCallback "statusStartCallback" +#define XNStatusDoneCallback "statusDoneCallback" +#define XNStatusDrawCallback "statusDrawCallback" +#define XNR6PreeditCallback "r6PreeditCallback" +#define XNStringConversionCallback "stringConversionCallback" + +// utility functions +#include "super100.h" + +// XNGeometryCallback +#define GO(A) \ +static uintptr_t my32_XNGeometryCallback_fct_##A = 0; \ +static void my32_XNGeometryCallback_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my32_XNGeometryCallback_fct_##A, "ppp", a, b); \ +} +SUPER() +#undef GO +static void* findXNGeometryCallbackFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_XNGeometryCallback_fct_##A == (uintptr_t)fct) return my32_XNGeometryCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XNGeometryCallback_fct_##A == 0) {my32_XNGeometryCallback_fct_##A = (uintptr_t)fct; return my32_XNGeometryCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XNGeometryCallback callback\n"); + return NULL; +} +// XNDestroyCallback +#define GO(A) \ +static uintptr_t my32_XNDestroyCallback_fct_##A = 0; \ +static void my32_XNDestroyCallback_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my32_XNDestroyCallback_fct_##A, "ppp", a, b); \ +} +SUPER() +#undef GO +static void* findXNDestroyCallbackFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_XNDestroyCallback_fct_##A == (uintptr_t)fct) return my32_XNDestroyCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XNDestroyCallback_fct_##A == 0) {my32_XNDestroyCallback_fct_##A = (uintptr_t)fct; return my32_XNDestroyCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XNDestroyCallback callback\n"); + return NULL; +} +// XNPreeditStartCallback +#define GO(A) \ +static uintptr_t my32_XNPreeditStartCallback_fct_##A = 0; \ +static void my32_XNPreeditStartCallback_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my32_XNPreeditStartCallback_fct_##A, "ppp", a, b); \ +} +SUPER() +#undef GO +static void* findXNPreeditStartCallbackFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_XNPreeditStartCallback_fct_##A == (uintptr_t)fct) return my32_XNPreeditStartCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XNPreeditStartCallback_fct_##A == 0) {my32_XNPreeditStartCallback_fct_##A = (uintptr_t)fct; return my32_XNPreeditStartCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XNPreeditStartCallback callback\n"); + return NULL; +} +// XNPreeditDoneCallback +#define GO(A) \ +static uintptr_t my32_XNPreeditDoneCallback_fct_##A = 0; \ +static void my32_XNPreeditDoneCallback_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my32_XNPreeditDoneCallback_fct_##A, "ppp", a, b); \ +} +SUPER() +#undef GO +static void* findXNPreeditDoneCallbackFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_XNPreeditDoneCallback_fct_##A == (uintptr_t)fct) return my32_XNPreeditDoneCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XNPreeditDoneCallback_fct_##A == 0) {my32_XNPreeditDoneCallback_fct_##A = (uintptr_t)fct; return my32_XNPreeditDoneCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XNPreeditDoneCallback callback\n"); + return NULL; +} +// XNPreeditDrawCallback +#define GO(A) \ +static uintptr_t my32_XNPreeditDrawCallback_fct_##A = 0; \ +static void my32_XNPreeditDrawCallback_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my32_XNPreeditDrawCallback_fct_##A, "ppp", a, b); \ +} +SUPER() +#undef GO +static void* findXNPreeditDrawCallbackFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_XNPreeditDrawCallback_fct_##A == (uintptr_t)fct) return my32_XNPreeditDrawCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XNPreeditDrawCallback_fct_##A == 0) {my32_XNPreeditDrawCallback_fct_##A = (uintptr_t)fct; return my32_XNPreeditDrawCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XNPreeditDrawCallback callback\n"); + return NULL; +} +// XNPreeditCaretCallback +#define GO(A) \ +static uintptr_t my32_XNPreeditCaretCallback_fct_##A = 0; \ +static void my32_XNPreeditCaretCallback_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my32_XNPreeditCaretCallback_fct_##A, "ppp", a, b); \ +} +SUPER() +#undef GO +static void* findXNPreeditCaretCallbackFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_XNPreeditCaretCallback_fct_##A == (uintptr_t)fct) return my32_XNPreeditCaretCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XNPreeditCaretCallback_fct_##A == 0) {my32_XNPreeditCaretCallback_fct_##A = (uintptr_t)fct; return my32_XNPreeditCaretCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XNPreeditCaretCallback callback\n"); + return NULL; +} +// XNPreeditStateNotifyCallback +#define GO(A) \ +static uintptr_t my32_XNPreeditStateNotifyCallback_fct_##A = 0; \ +static void my32_XNPreeditStateNotifyCallback_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my32_XNPreeditStateNotifyCallback_fct_##A, "ppp", a, b); \ +} +SUPER() +#undef GO +static void* findXNPreeditStateNotifyCallbackFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_XNPreeditStateNotifyCallback_fct_##A == (uintptr_t)fct) return my32_XNPreeditStateNotifyCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XNPreeditStateNotifyCallback_fct_##A == 0) {my32_XNPreeditStateNotifyCallback_fct_##A = (uintptr_t)fct; return my32_XNPreeditStateNotifyCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XNPreeditStateNotifyCallback callback\n"); + return NULL; +} +// XNStatusStartCallback +#define GO(A) \ +static uintptr_t my32_XNStatusStartCallback_fct_##A = 0; \ +static void my32_XNStatusStartCallback_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my32_XNStatusStartCallback_fct_##A, "ppp", a, b); \ +} +SUPER() +#undef GO +static void* findXNStatusStartCallbackFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_XNStatusStartCallback_fct_##A == (uintptr_t)fct) return my32_XNStatusStartCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XNStatusStartCallback_fct_##A == 0) {my32_XNStatusStartCallback_fct_##A = (uintptr_t)fct; return my32_XNStatusStartCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XNStatusStartCallback callback\n"); + return NULL; +} +// XNStatusDoneCallback +#define GO(A) \ +static uintptr_t my32_XNStatusDoneCallback_fct_##A = 0; \ +static void my32_XNStatusDoneCallback_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my32_XNStatusDoneCallback_fct_##A, "ppp", a, b); \ +} +SUPER() +#undef GO +static void* findXNStatusDoneCallbackFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_XNStatusDoneCallback_fct_##A == (uintptr_t)fct) return my32_XNStatusDoneCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XNStatusDoneCallback_fct_##A == 0) {my32_XNStatusDoneCallback_fct_##A = (uintptr_t)fct; return my32_XNStatusDoneCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XNStatusDoneCallback callback\n"); + return NULL; +} +// XNStatusDrawCallback +#define GO(A) \ +static uintptr_t my32_XNStatusDrawCallback_fct_##A = 0; \ +static void my32_XNStatusDrawCallback_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my32_XNStatusDrawCallback_fct_##A, "ppp", a, b); \ +} +SUPER() +#undef GO +static void* findXNStatusDrawCallbackFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_XNStatusDrawCallback_fct_##A == (uintptr_t)fct) return my32_XNStatusDrawCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XNStatusDrawCallback_fct_##A == 0) {my32_XNStatusDrawCallback_fct_##A = (uintptr_t)fct; return my32_XNStatusDrawCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XNStatusDrawCallback callback\n"); + return NULL; +} +// XNR6PreeditCallback +#define GO(A) \ +static uintptr_t my32_XNR6PreeditCallback_fct_##A = 0; \ +static void my32_XNR6PreeditCallback_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my32_XNR6PreeditCallback_fct_##A, "ppp", a, b); \ +} +SUPER() +#undef GO +static void* findXNR6PreeditCallbackFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_XNR6PreeditCallback_fct_##A == (uintptr_t)fct) return my32_XNR6PreeditCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XNR6PreeditCallback_fct_##A == 0) {my32_XNR6PreeditCallback_fct_##A = (uintptr_t)fct; return my32_XNR6PreeditCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XNR6PreeditCallback callback\n"); + return NULL; +} +// XNStringConversionCallback +#define GO(A) \ +static uintptr_t my32_XNStringConversionCallback_fct_##A = 0; \ +static void my32_XNStringConversionCallback_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(my32_XNStringConversionCallback_fct_##A, "ppp", a, b); \ +} +SUPER() +#undef GO +static void* findXNStringConversionCallbackFct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my32_XNStringConversionCallback_fct_##A == (uintptr_t)fct) return my32_XNStringConversionCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_XNStringConversionCallback_fct_##A == 0) {my32_XNStringConversionCallback_fct_##A = (uintptr_t)fct; return my32_XNStringConversionCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 XNStringConversionCallback callback\n"); + return NULL; +} + +#undef SUPER + +#define SUPER() \ +GO(XNGeometryCallback) \ +GO(XNDestroyCallback) \ +GO(XNPreeditStartCallback) \ +GO(XNPreeditDoneCallback) \ +GO(XNPreeditDrawCallback) \ +GO(XNPreeditCaretCallback) \ +GO(XNPreeditStateNotifyCallback) \ +GO(XNStatusStartCallback) \ +GO(XNStatusDoneCallback) \ +GO(XNStatusDrawCallback) \ +GO(XNR6PreeditCallback) \ +GO(XNStringConversionCallback) + +#define VA_CALL(FUNC, FIRST_ARG, N, VAARGSZ, RESULT) \ +switch (VAARGSZ) \ +{ \ +case 2: \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), NULL); \ + break; \ +case 4: \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), NULL); \ + break; \ +case 6: \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), NULL); \ + break; \ +case 8: \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), NULL); \ + break; \ +case 10: \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), from_ulong(va[8]), from_ulong(va[9]), NULL); \ + break; \ +case 12: \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), from_ulong(va[8]), from_ulong(va[9]), from_ulong(va[10]), from_ulong(va[11]), NULL); \ + break; \ +case 14: \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), from_ulong(va[8]), from_ulong(va[9]), from_ulong(va[10]), from_ulong(va[11]), from_ulong(va[12]), from_ulong(va[13]), NULL); \ + break; \ +case 16: \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), from_ulong(va[8]), from_ulong(va[9]), from_ulong(va[10]), from_ulong(va[11]), from_ulong(va[12]), from_ulong(va[13]), from_ulong(va[14]), from_ulong(va[15]), NULL); \ + break; \ +case 18: \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), from_ulong(va[8]), from_ulong(va[9]), from_ulong(va[10]), from_ulong(va[11]), from_ulong(va[12]), from_ulong(va[13]), from_ulong(va[14]), from_ulong(va[15]), from_ulong(va[16]), from_ulong(va[17]), NULL); \ + break; \ +case 20: \ + RESULT = FUNC(FIRST_ARG, from_ulong(va[0]), from_ulong(va[1]), from_ulong(va[2]), from_ulong(va[3]), from_ulong(va[4]), from_ulong(va[5]), from_ulong(va[6]), from_ulong(va[7]), from_ulong(va[8]), from_ulong(va[9]), from_ulong(va[10]), from_ulong(va[11]), from_ulong(va[12]), from_ulong(va[13]), from_ulong(va[14]), from_ulong(va[15]), from_ulong(va[16]), from_ulong(va[17]), from_ulong(va[18]), from_ulong(va[19]), NULL); \ + break; \ +default: \ + printf_log(LOG_NONE, "warning: %s's vasize (%d) is too large, need create new call case!\n", __func__, VAARGSZ); \ + break; \ +} + +#define GO(A) \ +if (va[i] && strcmp((char*)from_ptrv(va[i]), A) == 0) { \ + XICCallback* origin = (XICCallback*)from_ptrv(va[i+1]); \ + va[i+1] = to_ptrv(find##A##Fct(origin)); \ +} + +EXPORT void* my32_XCreateIC(x64emu_t* emu, void* xim, ptr_t* va) { + int n = 0; + while (va[n]) n+=2; + + for (int i = 0; i < n; i += 2) { + SUPER() + } + + void* res = NULL; + VA_CALL(my->XCreateIC, xim, 1, n, res); + return res; +} + +EXPORT void* my32_XVaCreateNestedList(x64emu_t* emu, int unused, ptr_t* va) { + int n = 0; + while (va[n]) n+=2 ; + + for (int i = 0; i < n; i += 2) { + SUPER() + } + + void* res = NULL; + VA_CALL(my->XVaCreateNestedList, unused, 1, n, res); + return res; +} + +EXPORT void* my32_XSetICValues(x64emu_t* emu, void* xic, ptr_t* va) { + int n = 0; + while (va[n]) n+=2; + + for (int i = 0; i < n; i += 2) { + SUPER() + } + + void* res = NULL; + VA_CALL(my->XSetICValues, xic, 1, n, res); + return res; +} +#undef GO + +EXPORT void* my32_XSetIMValues(x64emu_t* emu, void* xim, ptr_t* va) { + int n = 0; + while (va[n]) n+=2; + + #define GO(A) \ + if (va[i] && strcmp((char*)from_ptrv(va[i]), A) == 0) { \ + XIMCallback* origin = (XIMCallback*)from_ptrv(va[i+1]); \ + va[i+1] = to_ptrv(find##A##Fct(origin)); \ + } + for (int i = 0; i < n; i += 2) { + SUPER() + } + #undef GO + + void* res = NULL; + VA_CALL(my->XSetIMValues, xim, 1, n, res) + return res; +} + +#undef VA_CALL +#undef SUPER +EXPORT void* my32_XSetErrorHandler(x64emu_t* emu, XErrorHandler handler) +{ + void* ret = my->XSetErrorHandler(finderror_handlerFct(handler)); + return reverse_error_handler_Fct(my_lib, ret); +} + +EXPORT void* my32_XSetIOErrorHandler(x64emu_t* emu, XIOErrorHandler handler) +{ + void* ret = my->XSetIOErrorHandler(findioerror_handlerFct(handler)); + return reverse_ioerror_handler_Fct(my_lib, ret); +} + +#if 0 +EXPORT void* my32_XESetError(x64emu_t* emu, void* display, int32_t extension, void* handler) +{ + void* ret = my->XESetError(display, extension, findexterror_handlerFct(handler)); + return reverse_exterror_handlerFct(my_lib, ret); +} +#endif +EXPORT void* my32_XESetCloseDisplay(x64emu_t* emu, void* display, int32_t extension, void* handler) +{ + void* ret = my->XESetCloseDisplay(display, extension, findclose_displayFct(handler)); + return reverse_close_displayFct(my_lib, ret); +} + +EXPORT int32_t my32_XIfEvent(x64emu_t* emu, void* d,void* ev, EventHandler h, void* arg) +{ + my_XEvent_t event = {0}; + int32_t ret = my->XIfEvent(d, &event, findxifeventFct(h), arg); + convertXEvent(ev, &event); + return ret; +} + +EXPORT int32_t my32_XCheckIfEvent(x64emu_t* emu, void* d,void* ev, EventHandler h, void* arg) +{ + my_XEvent_t event = {0}; + int32_t ret = my->XCheckIfEvent(d, &event, findxifeventFct(h), arg); + convertXEvent(ev, &event); + return ret; +} +#if 0 +EXPORT int32_t my32_XPeekIfEvent(x64emu_t* emu, void* d,void* ev, EventHandler h, void* arg) +{ + my_XEvent_t event = {0}; + int32_t ret = my->XPeekIfEvent(d, &event, findxifeventFct(h), arg); + convertXEvent(ev, &event); + return ret; +} +#endif + +EXPORT int my32_XFilterEvent(x64emu_t* emu, my_XEvent_32_t* evt, XID window) +{ + my_XEvent_t event = {0}; + unconvertXEvent(&event, evt); + return my->XFilterEvent(&event, window); +} + +void WrapXImage(void* d, void* s) +{ + XImage *src = s; + XImage_32 *dst = d; + + // inplace "shrink" + + dst->width = src->width; + dst->height = src->height; + dst->xoffset = src->xoffset; + dst->format = src->format; + dst->data = to_ptrv(src->data); + dst->byte_order = src->byte_order; + dst->bitmap_unit = src->bitmap_unit; + dst->bitmap_bit_order = src->bitmap_bit_order; + dst->bitmap_pad = src->bitmap_pad; + dst->depth = src->depth; + dst->bytes_per_line = src->bytes_per_line; + dst->bits_per_pixel = src->bits_per_pixel; + dst->red_mask = to_ulong(src->red_mask); + dst->green_mask = to_ulong(src->green_mask); + dst->blue_mask = to_ulong(src->blue_mask); + dst->obdata = to_hash((uintptr_t)src->obdata); + + #define GO(A, W) \ + dst->f.A = to_ptrv((W##_t)reverse_##A##_Fct(my_lib, src->f.A)); + + GO(create_image, pFXpuiipuuii) + GO(destroy_image, iFp) + GO(get_pixel, LFpii) + GO(put_pixel, iFpiiL) + GO(sub_image, pFpiiuu) + GO(add_pixel, iFpl) + #undef GO +} + +void UnwrapXImage(void* d, void* s) +{ + XImage_32* src = s; + XImage *dst = d; + + // inplace "enlarge", so reverse order + + #define GO(A, W) \ + dst->f.A = (W##_t)find_##A##_Fct(from_ptrv(src->f.A)); + + GO(add_pixel, iFpl) + GO(sub_image, pFpiiuu) + GO(put_pixel, iFpiiL) + GO(get_pixel, LFpii) + GO(destroy_image, iFp) + GO(create_image, pFXpuiipuuii) + #undef GO + + dst->obdata = (void*)from_hash(src->obdata); + dst->blue_mask = from_ulong(src->blue_mask); + dst->green_mask = from_ulong(src->green_mask); + dst->red_mask = from_ulong(src->red_mask); + dst->bits_per_pixel = src->bits_per_pixel; + dst->bytes_per_line = src->bytes_per_line; + dst->depth = src->depth; + dst->bitmap_pad = src->bitmap_pad; + dst->bitmap_bit_order = src->bitmap_bit_order; + dst->bitmap_unit = src->bitmap_unit; + dst->byte_order = src->byte_order; + dst->data = from_ptrv(src->data); + dst->format = src->format; + dst->xoffset = src->xoffset; + dst->height = src->height; + dst->width = src->width; +} + +EXPORT void* my32_XCreateImage(x64emu_t* emu, void* disp, void* vis, uint32_t depth, int32_t fmt, int32_t off + , void* data, uint32_t w, uint32_t h, int32_t pad, int32_t bpl) +{ + + XImage *img = my->XCreateImage(disp, convert_Visual_to_64(disp, vis), depth, fmt, off, data, w, h, pad, bpl); + if(!img) + return img; + // bridge all access functions... + WrapXImage(img, img); + return img; +} + +EXPORT int32_t my32_XInitImage(x64emu_t* emu, void* img) +{ + XImage l_img = {0}; + UnwrapXImage(&l_img, img); + int ret = my->XInitImage(&l_img); + // bridge all access functions... + WrapXImage(img, &l_img); + return ret; +} + +EXPORT void* my32_XGetImage(x64emu_t* emu, void* disp, XID drawable, int32_t x, int32_t y + , uint32_t w, uint32_t h, uint32_t plane, int32_t fmt) +{ + + XImage *img = my->XGetImage(disp, drawable, x, y, w, h, plane, fmt); + if(!img) + return img; + // bridge all access functions... + inplace_XImage_shrink(img); + return img; +} + +EXPORT void my32__XInitImageFuncPtrs(x64emu_t* emu, XImage_32* img) +{ + XImage img_l = {0}; + img->f.add_pixel = img->f.create_image = img->f.destroy_image = img->f.get_pixel = img->f.put_pixel = img->f.sub_image = 0; + UnwrapXImage(&img_l, img); + my->_XInitImageFuncPtrs(&img_l); + WrapXImage(img, &img_l); +} + +EXPORT int32_t my32_XPutImage(x64emu_t* emu, void* disp, size_t drawable, void* gc, void* image + , int32_t src_x, int32_t src_y, int32_t dst_x, int32_t dst_y + , uint32_t w, uint32_t h) +{ + inplace_XImage_enlarge(image); // what if the image was created on x86 side and is smaller? + int32_t r = my->XPutImage(disp, drawable, gc, image, src_x, src_y, dst_x, dst_y, w, h); + // bridge all access functions... + inplace_XImage_shrink(image); + return r; +} + +EXPORT void* my32_XGetSubImage(x64emu_t* emu, void* disp, XID drawable + , int32_t x, int32_t y + , uint32_t w, uint32_t h, XID plane, int32_t fmt + , void* image, int32_t dst_x, int32_t dst_y) +{ + + inplace_XImage_enlarge(image); + XImage *img = my->XGetSubImage(disp, drawable, x, y, w, h, plane, fmt, image, dst_x, dst_y); + if(img && img!=image) + inplace_XImage_shrink(img); + + inplace_XImage_shrink(image); + return img; +} + +EXPORT void my32_XDestroyImage(x64emu_t* emu, void* image) +{ + + inplace_XImage_enlarge(image); + to_hash_d((uintptr_t)((XImage*)image)->obdata); + my->XDestroyImage(image); +} +#if 0 +typedef struct xintasync_s { + struct xintasync_s *next; + int (*handler)( + void*, + void*, + void*, + int, + void* + ); + void* data; +} xintasync_t; + +EXPORT void my32__XDeqAsyncHandler(x64emu_t* emu, void* cb, void* data) +{ + my->_XDeqAsyncHandler(findXInternalAsyncHandlerFct(cb), data); +} + +#endif +EXPORT void* my32_XESetWireToEvent(x64emu_t* emu, void* display, int32_t event_number, void* proc) +{ + void* ret = NULL; + + ret = my->XESetWireToEvent(display, event_number, findwire_to_eventFct(proc)); + + return reverse_wire_to_eventFct(my_lib, ret); +} +EXPORT void* my32_XESetEventToWire(x64emu_t* emu, void* display, int32_t event_number, void* proc) +{ + void* ret = NULL; + + ret = my->XESetEventToWire(display, event_number, findevent_to_wireFct(proc)); + + return reverse_event_to_wireFct(my_lib, ret); +} + +EXPORT int my32_XRegisterIMInstantiateCallback(x64emu_t* emu, void* d, void* db, void* res_name, void* res_class, void* cb, void* data) +{ + return my->XRegisterIMInstantiateCallback(d, db, res_name, res_class, findregister_imFct(cb), data); +} + +EXPORT int my32_XUnregisterIMInstantiateCallback(x64emu_t* emu, void* d, void* db, void* res_name, void* res_class, void* cb, void* data) +{ + return my->XUnregisterIMInstantiateCallback(d, db, res_name, res_class, reverse_register_imFct(my_lib, cb), data); +} +EXPORT int my32_XQueryExtension(x64emu_t* emu, void* display, char* name, int* major, int* first_event, int* first_error) +{ + int ret = my->XQueryExtension(display, name, major, first_event, first_error); + if(!ret && name && !strcmp(name, "GLX") && box64_x11glx) { + // hack to force GLX to be accepted, even if not present + // left major and first_XXX to default... + ret = 1; + } + return ret; +} +#if 0 +EXPORT int my32_XAddConnectionWatch(x64emu_t* emu, void* display, char* f, void* data) +{ + return my->XAddConnectionWatch(display, findXConnectionWatchProcFct(f), data); +} + +EXPORT void my32_XRemoveConnectionWatch(x64emu_t* emu, void* display, char* f, void* data) +{ + my->XRemoveConnectionWatch(display, findXConnectionWatchProcFct(f), data); +} + +EXPORT void* my32_XSetAfterFunction(x64emu_t* emu, void* display, void* f) +{ + + return reverse_XSynchronizeProcFct(my_lib, my->XSetAfterFunction(display, findXSynchronizeProcFct(f))); +} +#endif + +EXPORT void* my32_XSynchronize(x64emu_t* emu, void* display, int onoff) +{ + return reverse_XSynchronizeProcFct(my_lib, my->XSynchronize(display, onoff)); +} + +EXPORT void* my32_XOpenDisplay(void* name) +{ + void* ret = my->XOpenDisplay(name); + if(ret && box64_x11sync) {my->XSynchronize(ret, 1); printf_log(LOG_INFO, "Forcing Syncronized opration on Display %p\n", ret);} + return ret; +} + +EXPORT int my32_XCloseDisplay(x64emu_t* emu, void* dpy) +{ + int ret = my->XCloseDisplay(dpy); + if(ret) delDisplay(dpy); + return ret; +} + + +EXPORT XID my32_XCreateWindow(x64emu_t* emu, void* d, XID Window, int x, int y, uint32_t width, uint32_t height, uint32_t border_width, int depth, uint32_t cl, void* visual, unsigned long mask, my_XSetWindowAttributes_32_t* attr) +{ + my_XSetWindowAttributes_t attrib; + if(attr) + convert_XSetWindowAttributes_to_64(&attrib, attr); + return my->XCreateWindow(d, Window, x, y, width, height, border_width, depth, cl, convert_Visual_to_64(d, visual), mask, attr?(&attrib):NULL); +} + +EXPORT int my32_XNextEvent(x64emu_t* emu, void* dpy, my_XEvent_32_t* evt) +{ + my_XEvent_t event = {0}; + int ret = my->XNextEvent(dpy, &event); + convertXEvent(evt, &event); + return ret; +} + +EXPORT int my32_XPeekEvent(x64emu_t* emu, void* dpy, my_XEvent_32_t* evt) +{ + my_XEvent_t event = {0}; + int ret = my->XPeekEvent(dpy, &event); + convertXEvent(evt, &event); + return ret; +} + +EXPORT int my32_XCheckTypedEvent(x64emu_t* emu, void* dpy, int type, my_XEvent_32_t* evt) +{ + my_XEvent_t event = {0}; + int ret = my->XCheckTypedEvent(dpy, type, &event); + if(ret) convertXEvent(evt, &event); + return ret; +} + +EXPORT int my32_XCheckTypedWindowEvent(x64emu_t* emu, void* dpy, XID window, int type, my_XEvent_32_t* evt) +{ + my_XEvent_t event = {0}; + int ret = my->XCheckTypedWindowEvent(dpy, window, type, &event); + if(ret) convertXEvent(evt, &event); + return ret; +} + +EXPORT int my32_XCheckWindowEvent(x64emu_t* emu, void* dpy, XID window, long mask, my_XEvent_32_t* evt) +{ + my_XEvent_t event = {0}; + int ret = my->XCheckWindowEvent(dpy, window, mask, &event); + if(ret) convertXEvent(evt, &event); + return ret; +} + +EXPORT int my32_XWindowEvent(x64emu_t* emu, void* dpy, XID window, long mask, my_XEvent_32_t* evt) +{ + my_XEvent_t event = {0}; + int ret = my->XWindowEvent(dpy, window, mask, &event); + convertXEvent(evt, &event); + return ret; +} + +EXPORT int my32_XMaskEvent(x64emu_t* emu, void* dpy, long mask, my_XEvent_32_t* evt) +{ + my_XEvent_t event = {0}; + int ret = my->XMaskEvent(dpy, mask, &event); + if(ret) convertXEvent(evt, &event); + return ret; +} + +EXPORT int my32_XSendEvent(x64emu_t* emu, void* dpy, XID window, int propagate, long mask, my_XEvent_32_t* evt) +{ + my_XEvent_t event = {0}; + if(evt->type==XEVT_ClientMessage && evt->xclient.send_event) { + evt->xany.display = to_ptrv(dpy); // some program don't setup this data because the server will + } + if(evt) unconvertXEvent(&event, evt); + return my->XSendEvent(dpy, window, propagate, mask, evt?(&event):NULL); +} + +EXPORT int my32_XGetEventData(x64emu_t* emu, void* dpy, my_XEvent_32_t* evt) +{ + my_XEvent_t event = {0}; + if(evt) unconvertXEvent(&event, evt); + int ret = my->XGetEventData(dpy, &event); + if(ret) convertXEvent(evt, &event); + return ret; +} + +EXPORT void my32_XFreeEventData(x64emu_t* emu, void* dpy, my_XEvent_32_t* evt) +{ + my_XEvent_t event = {0}; + if(evt) unconvertXEvent(&event, evt); + my->XFreeEventData(dpy, &event); + convertXEvent(evt, &event); +} + +EXPORT int my32_XRefreshKeyboardMapping(x64emu_t* emu, my_XMappingEvent_32_t* evt) +{ + my_XMappingEvent_t event = {0}; + event.type = evt->type; + event.serial = from_ulong(evt->serial); + event.send_event = evt->send_event; + event.display = getDisplay(from_ptrv(evt->display)); + event.window = from_ulong(evt->window); + event.request = evt->request; + event.first_keycode = evt->first_keycode; + event.count = evt->count; + return my->XRefreshKeyboardMapping(&event); +} + +EXPORT unsigned long my32_XLookupKeysym(x64emu_t* emu, my_XEvent_32_t* evt, int index) +{ + my_XEvent_t event = {0}; + if(evt) unconvertXEvent(&event, evt); + return my->XLookupKeysym(evt?(&event):NULL, index); +} + +EXPORT int my32_XLookupString(x64emu_t* emu, my_XEvent_32_t* evt, void* buff, int len, ulong_t* keysym, void* status) +{ + my_XEvent_t event = {0}; + XID keysym_l = 0; + if(evt) unconvertXEvent(&event, evt); + int ret = my->XLookupString(evt?(&event):NULL, buff, len, keysym?(&keysym_l):NULL, status); + if(keysym) *keysym = to_ulong(keysym_l); + return ret; +} + +EXPORT int my32_XmbLookupString(x64emu_t* emu, void* xic, my_XEvent_32_t* evt, void* buff, int len, ulong_t* keysym, void* status) +{ + my_XEvent_t event = {0}; + XID keysym_l = 0; + if(evt) unconvertXEvent(&event, evt); + int ret = my->XmbLookupString(xic, evt?(&event):NULL, buff, len, keysym?(&keysym_l):NULL, status); + if(keysym) *keysym = to_ulong(keysym_l); + return ret; +} + +EXPORT int my32_Xutf8LookupString(x64emu_t* emu, void* xic, my_XEvent_32_t* evt, void* buff, int len, ulong_t* keysym, void* status) +{ + my_XEvent_t event = {0}; + XID keysym_l = 0; + if(evt) unconvertXEvent(&event, evt); + int ret = my->Xutf8LookupString(xic, evt?(&event):NULL, buff, len, keysym?(&keysym_l):NULL, status); + if(keysym) *keysym = to_ulong(keysym_l); + return ret; +} + +EXPORT int my32_XSetWMProtocols(x64emu_t* emu, void* dpy, XID window, XID_32* protocol, int count) +{ + XID list[count]; + if(protocol) + for(int i=0; iXSetWMProtocols(dpy, window, protocol?list:NULL, count); +} + +EXPORT int my32_XSetWMHints(x64emu_t* emu, void* dpy, XID window, void* hints) +{ + inplace_enlarge_wmhints(hints); + int ret = my->XSetWMHints(dpy, window, hints); + inplace_shrink_wmhints(hints); + return ret; +} + +EXPORT void* my32_XGetWMHints(x64emu_t* emu, void* dpy, XID window) +{ + void* ret = my->XGetWMHints(dpy, window); + inplace_shrink_wmhints(ret); + return ret; +} + +EXPORT int my32_XSetWMNormalHints(x64emu_t* emu, void* dpy, XID window, void* hints) +{ + inplace_enlarge_wmsizehints(hints); + my->XSetWMNormalHints(dpy, window, hints); + inplace_shrink_wmsizehints(hints); +} + +EXPORT int my32_XGetWMNormalHints(x64emu_t* emu, void* dpy, XID window, void* hints, long_t* supplied) +{ + long supplied_l = 0; + int hints_l[17+2] = {0}; + int ret = my->XGetWMNormalHints(dpy, window, hints?hints_l:NULL, supplied?(&supplied_l):NULL); + if(supplied) *supplied = to_long(supplied_l); + if(hints) { + *(long_t*)hints = to_long(*(long*)hints_l); + memcpy(hints+4, hints_l+2, 17*4); + } + return ret; +} +#if 0 +EXPORT void* my32__XGetRequest(x64emu_t* emu, my_XDisplay_t* dpy, uint8_t type, size_t len) +{ + // check if asynchandler needs updated wrapping + struct my32_XInternalAsync * p = dpy->async_handlers; + while(p) { + if(GetNativeFnc((uintptr_t)p->handler)!=p->handler) { + // needs wrapping and autobridge! + void* new_handler = find_async_handler_Fct(p->handler); + AddAutomaticBridge(my_lib->w.bridge, iFpppip, new_handler, 0, "async_handler"); + p->handler = new_handler; + } + p = p->next; + } + + return my->_XGetRequest(dpy, type, len); +} +#endif + +EXPORT int my32_XStringListToTextProperty(x64emu_t* emu, ptr_t* list, int count, void* text) +{ + char* l_list[count]; + if(list) + for(int i=0; iXStringListToTextProperty(list?(&l_list):NULL, count, &text_l); + to_struct_pLiL(to_ptrv(text), &text_l); + return ret; +} + +EXPORT int my32_Xutf8TextListToTextProperty(x64emu_t* emu, void* dpy, ptr_t* list, int count, uint32_t style, void* text) +{ + char* l_list[count]; + if(list) + for(int i=0; iXutf8TextListToTextProperty(dpy, list?(&l_list):NULL, count, style, &text_l); + to_struct_pLiL(to_ptrv(text), &text_l); + return ret; +} + +EXPORT int my32_XmbTextListToTextProperty(x64emu_t* emu, void* dpy, ptr_t* list, int count, uint32_t style, void* text) +{ + char* l_list[count]; + if(list) + for(int i=0; iXmbTextListToTextProperty(dpy, list?(&l_list):NULL, count, style, &text_l); + to_struct_pLiL(to_ptrv(text), &text_l); + return ret; +} + +EXPORT int my32_XGetWindowAttributes(x64emu_t* emu, void* dpy, XID window, my_XWindowAttributes_32_t* attr) +{ + static my_Screen_32_t screen32 = {0}; + my_XWindowAttributes_t l_attr = {0}; + int ret = my->XGetWindowAttributes(dpy, window, &l_attr); + convert_XWindowAttributes_to_32(dpy, attr, &l_attr); + attr->screen = to_ptrv(&screen32); + convert_Screen_to_32(&screen32, l_attr.screen); + return ret; +} + +EXPORT int my32_XChangeProperty(x64emu_t* emu, void* dpy, XID window, XID prop, XID type, int fmt, int mode, void* data, int n) +{ + unsigned long data_l[n]; + if(fmt==32) { + for(int i=0; iXChangeProperty(dpy, window, prop, type, fmt, mode, data, n); +} + +EXPORT void my32_XSetWMProperties(x64emu_t* emu, void* dpy, XID window, void* window_name, void* icon_name, ptr_t* argv, int argc, void* normal_hints, my_XWMHints_32_t* wm_hints, ptr_t* class_hints) +{ + struct_pLiL_t window_name_l; + struct_pLiL_t icon_name_l; + int wm_size_l[17+2] = {0}; + my_XWMHints_t wm_hints_l = {0}; + char* class_hints_l[2] = {0}; + char* argv_l[argc+1]; + + if(window_name) + from_struct_pLiL(&window_name_l, to_ptrv(window_name)); + if(icon_name) + from_struct_pLiL(&icon_name_l, to_ptrv(icon_name)); + if(normal_hints) + convert_XSizeHints_to_64(&wm_size_l, normal_hints); + if(wm_hints) + convert_XWMints_to_64(&wm_hints_l, wm_hints); + if(class_hints) { + class_hints_l[0] = from_ptrv(class_hints[0]); + class_hints_l[1] = from_ptrv(class_hints[1]); + } + if(argv) { + memset(argv_l, 0, sizeof(argv_l)); + for(int i=0; iXSetWMProperties(dpy, window, window_name?(&window_name_l):NULL, icon_name?(&icon_name_l):NULL, argv?argv_l:NULL, argc, normal_hints?(&wm_size_l):NULL, wm_hints?(&wm_hints_l):NULL, class_hints?(&class_hints_l):NULL); +} + +EXPORT void my32_Xutf8SetWMProperties(x64emu_t* emu, void* dpy, XID window, void* window_name, void* icon_name, ptr_t* argv, int argc, void* normal_hints, my_XWMHints_32_t* wm_hints, ptr_t* class_hints) +{ + int wm_size_l[17+2] = {0}; + my_XWMHints_t wm_hints_l = {0}; + char* class_hints_l[2] = {0}; + char* argv_l[argc+1]; + + if(normal_hints) + convert_XSizeHints_to_64(&wm_size_l, normal_hints); + if(wm_hints) + convert_XWMints_to_64(&wm_hints_l, wm_hints); + if(class_hints) { + class_hints_l[0] = from_ptrv(class_hints[0]); + class_hints_l[1] = from_ptrv(class_hints[1]); + } + if(argv) { + memset(argv_l, 0, sizeof(argv_l)); + for(int i=0; iXutf8SetWMProperties(dpy, window, window_name, icon_name, argv?argv_l:NULL, argc, normal_hints?(&wm_size_l):NULL, wm_hints?(&wm_hints_l):NULL, class_hints?(&class_hints_l):NULL); +} + + +EXPORT void* my32_XListExtensions(x64emu_t* emu, void* dpy, int* n) +{ + char** ret = my->XListExtensions(dpy, n); + if(!ret) return NULL; + ptr_t* ret_s = (ptr_t*)ret; + // shrinking + for(int i=0; i<*n; ++i) + ret_s[i] = to_ptrv(ret[i]); + ret_s[*n] = 0; + return ret; +} + +EXPORT int my32_XFreeExtensionList(x64emu_t* emu, ptr_t* list) +{ + // need to expand back the list + int n = 0; + //first grab n + while(list[n]) ++n; + // now expand, backward order + void** list_l = (void**)list; + for(int i=n-1; i>=0; --i) + list_l[i] = from_ptrv(list[i]); + return my->XFreeExtensionList(list); +} + +EXPORT int my32_XQueryTree(x64emu_t* emu, void* dpy, XID window, XID_32* root, XID_32* parent, ptr_t* children, uint32_t* n) +{ + XID root_l = 0; + XID parent_l = 0; + XID* children_l = NULL; + int ret = my->XQueryTree(dpy, window, &root_l, &parent_l, &children_l, n); + *root = to_ulong(root_l); + *parent = to_ulong(parent_l); + *children = to_ptrv(children_l); + if(children_l) + for(int i=0; i<*n; ++i) + ((XID_32*)children_l)[i] = to_ulong(children_l[i]); + return ret; +} + +EXPORT void* my32_XCreateFontSet(x64emu_t* emu, void* dpy, void* name, ptr_t* missing, int* missing_count, ptr_t* string) +{ + void** missing_l = NULL; + void* string_l = NULL; + void* ret = my->XCreateFontSet(dpy, name, &missing_l, missing_count, string?(&string_l):NULL); + if(string) *string = to_ptrv(string_l); + // inplace string list shrink + *missing = to_ptrv(missing_l); + if(missing_l && *missing_count) { + for(int i=0; i<*missing_count; ++i) + ((ptr_t*)missing_l)[i] = to_ptrv(missing_l[i]); + } + // put end marker, for expansion + if(missing_l) + ((ptr_t*)missing_l)[*missing_count] = 0; + return ret; +} + +EXPORT int my32_XmbTextPropertyToTextList(x64emu_t* emu, void* dpy, void* prop, ptr_t* list, int* count) +{ + void** list_l = NULL; + int ret = my->XmbTextPropertyToTextList(dpy, prop, &list_l, count); + if(list_l && *count) { + for(int i=0; i<*count; ++i) + ((ptr_t*)list_l)[i] = to_ptrv(list_l[i]); + } + // put end marker, for expansion + if(list_l) + ((ptr_t*)list_l)[*count] = 0; + *list = to_ptrv(list_l); + return ret; +} + +EXPORT void my32_XFreeStringList(x64emu_t* emu, ptr_t* list) +{ + // need to find size of list + int n = 0; + while(list[n]) ++n; + // inplace string list expand + for(int i=n-1; i>=0; --i) + ((void**)list)[i] = from_ptrv(list[i]); + + my->XFreeStringList(list); +} + +EXPORT int my32_XFreeColors(x64emu_t* emu, void* dpy, XID map, ulong_t* pixels, int npixels, unsigned long planes) +{ + unsigned long pixels_l[npixels]; + for(int i=0; iXFreeColors(dpy, map, pixels_l, npixels, planes); +} + +EXPORT void* my32_XGetModifierMapping(x64emu_t* emu, void* dpy) +{ + void *ret = my->XGetModifierMapping(dpy); + inplace_XModifierKeymap_shrink(ret); + return ret; +} + +EXPORT int my32_XFreeModifiermap(x64emu_t* emu, void* map) +{ + inplace_XModifierKeymap_enlarge(map); + return my->XFreeModifiermap(map); +} + +EXPORT int my32_XInternAtoms(x64emu_t* emu, void* dpy, ptr_t* names, int count, int only, XID_32* atoms) +{ + char* names_l[count]; + XID atoms_l[count]; + for(int i=0; iXInternAtoms(dpy, names_l, count, only, atoms_l); + for(int i=0; iXGetIMValues(xim, from_ptrv(b[n]), &r, NULL, NULL); + if(ret) + return ret; + b[n+1] = to_ptrv(r); + n+=2; + } + return NULL; +} + +EXPORT void* my32_XGetVisualInfo(x64emu_t* emu, void* dpy, long mask, my_XVisualInfo_32_t* template, int* n) +{ + my_XVisualInfo_t template_l = {0}; + if(template) convert_XVisualInfo_to_64_novisual(dpy, &template_l, template); + my_XVisualInfo_t* ret = my->XGetVisualInfo(dpy, mask, template?(&template_l):NULL, n); + inplace_XVisualInfo_shrink(dpy, ret); + return ret; +} + +EXPORT XID my32_XVisualIDFromVisual(x64emu_t* emu, my_Visual_32_t* v) +{ + return from_ulong(v->visualid); +} + +EXPORT XID my32_XCreateColormap(x64emu_t* emu, void* dpy, XID w, my_Visual_32_t* v, int alloc) +{ + return my->XCreateColormap(dpy, w, convert_Visual_to_64(dpy, v), alloc); +} + +EXPORT int my32_XQueryColors(x64emu_t* emu, void* dpy, XID map, my_XColor_32_t* defs, int ncolor) +{ + struct_LWWWcc_t defs_l[ncolor]; + for(int i=0; iXQueryColors(dpy, map, defs_l, ncolor); + for(int i=0; iXStoreColors(dpy, map, defs_l, ncolor); + for(int i=0; iXFreeFont(dpy, f); +} + +EXPORT int my32_XChangeWindowAttributes(x64emu_t* emu, void* dpy, XID window, unsigned long mask, my_XSetWindowAttributes_32_t* attrs) +{ + my_XSetWindowAttributes_t attrs_l[1]; + convert_XSetWindowAttributes_to_64(attrs_l, attrs); + return my->XChangeWindowAttributes(dpy, window, mask, attrs_l); +} + +EXPORT int my32_XGetWindowProperty(x64emu_t* emu, void* dpy, XID window, XID prop, long offset, long length, int delete, XID req, XID* type_return, int* fmt_return, ulong_t* nitems_return, ulong_t* bytes, ptr_t*prop_return) +{ + unsigned long nitems_l = 0, bytes_l = 0; + void* prop_l = NULL; + int ret = my->XGetWindowProperty(dpy, window, prop, offset, length, delete, req, type_return, fmt_return, &nitems_l, &bytes_l, &prop_l); + *nitems_return = to_ulong(nitems_l); + *bytes = to_ulong(bytes_l); + *prop_return = to_ptrv(prop_l); + if(!ret && *fmt_return==32) { + // inplace shrink + unsigned long *src = prop_l; + ulong_t* dst = prop_l; + for(int i=0; i<*nitems_return; ++i) + dst[i] = to_ulong(src[i]); + } + return ret; +} + +EXPORT int my32_XTextExtents(x64emu_t* emu, my_XFontStruct_32_t* font_struct, void* string, int nchars, int* dir, int* ascent, int* descent, my_XCharStruct_32_t* overall) +{ + //XCharStruct doesn't need any changes + inplace_XFontStruct_enlarge(font_struct); + int ret = my->XTextExtents(font_struct, string, nchars, dir, ascent, descent, overall); + inplace_XFontStruct_shrink(font_struct); + return ret; +} + +EXPORT void* my32_XLoadQueryFont(x64emu_t* emu, void* dpy, void* name) +{ + void* ret = my->XLoadQueryFont(dpy, name); + inplace_XFontStruct_shrink(ret); + return ret; +} + +EXPORT void my32_XLockDisplay(x64emu_t* emu, void* dpy) +{ + my->XLockDisplay(dpy); + // update some of the values now that the screen is locked + refreshDisplay(dpy); +} + +EXPORT int my32_XGrabServer(x64emu_t* emu, void* dpy) +{ + int ret = my->XGrabServer(dpy); + // update some of the values now that the server is grabbed + refreshDisplay(dpy); + return ret; +} + +#define CUSTOM_INIT \ + AddAutomaticBridge(lib->w.bridge, vFp_32, *(void**)dlsym(lib->w.lib, "_XLockMutex_fn"), 0, "_XLockMutex_fn"); \ + AddAutomaticBridge(lib->w.bridge, vFp_32, *(void**)dlsym(lib->w.lib, "_XUnlockMutex_fn"), 0, "_XUnlockMutex_fn"); \ + if(box64_x11threads) my->XInitThreads(); \ + my_context->libx11 = lib; + +#define CUSTOM_FINI \ + my_context->libx11 = NULL; +#if 0 +#ifdef ANDROID +#define NEEDED_LIBS "libxcb.so" +#else +#define NEEDED_LIBS "libxcb.so.1" +#endif +#endif + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibx11_private.h b/src/wrapped32/wrappedlibx11_private.h new file mode 100644 index 0000000000000000000000000000000000000000..d94475c5ad22e56c31657b51466b828e06de739a --- /dev/null +++ b/src/wrapped32/wrappedlibx11_private.h @@ -0,0 +1,1247 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +//XColor is a struct: LWWWcc +//XTextProperty is a struct: pLiL + +DATAB(_qfree, 4) // Warning: failed to confirm + +GO(XActivateScreenSaver, iFX) +//GOM(XAddConnectionWatch, iFEXpp) +GO(XAddExtension, pFX) +GO(XAddHost, iFXbiip_) +GO(XAddHosts, iFXbiip_i) +GO(XAddPixel, vFpl) +//GOM(XAddToExtensionList, iFEbp_p) +GO(XAddToSaveSet, iFXL) +GO(XAllocClassHint, pFv) +GO(XAllocColor, iFXLbLWWWcc_) +GO(XAllocColorCells, iFXLibL_ubL_u) +GO(XAllocColorPlanes, iFXLibL_iiiibL_bL_bL_) +GO(XAllocIconSize, pFv) +GO(_XAllocID, LFX) +GO(_XAllocIDs, vFXbL_i) +GO(XAllocNamedColor, iFXLpbLWWWcc_bLWWWcc_) +GO(_XAllocScratch, pFXL) +GO(XAllocSizeHints, pFv)//GOS(XAllocSizeHints, bliiiiiiiiiippiii_Fv) +//GO(XAllocStandardColormap, bLLLLLLLLLL_Fv) +GO(_XAllocTemp, pFXL) +GO(XAllocWMHints, pFv)//GO(XAllocWMHints, bliiLLiiLL_Fv) +GO(XAllowEvents, iFXiL) +GO(XAllPlanes, LFv) +//GO(_XAsyncErrorHandler, iFpppip) +GO(XAutoRepeatOff, iFX) +GO(XAutoRepeatOn, iFX) +GO(XBaseFontNameListOfFontSet, pFp) +GO(XBell, iFXi) +GO(XBitmapBitOrder, iFX) +GO(XBitmapPad, iFX) +GO(XBitmapUnit, iFX) +GO(XBlackPixel, LFXi) +//GOM(XBlackPixelOfScreen, LFEbpXLiiiiipippLLLiiiil_) +//GOM(XCellsOfScreen, iFEbpXLiiiiipippLLLiiiil_) +GO(XChangeActivePointerGrab, iFXuLL) +GO(XChangeGC, iFXpLriLLLiiiiiiiLLiiLiiiiLic_) +GO(XChangeKeyboardControl, iFXLp) +GO(XChangeKeyboardMapping, iFXiibL_i) +GO(XChangePointerControl, iFXiiiii) +GOM(XChangeProperty, iFEXLLLiipi) +GO(XChangeSaveSet, iFXLi) +GOM(XChangeWindowAttributes, iFEXLLp) +GOM(XCheckIfEvent, iFEXppp) +//GO(XCheckMaskEvent, iFplp) +GOM(XCheckTypedEvent, iFEXip) +GOM(XCheckTypedWindowEvent, iFEXLip) +GOM(XCheckWindowEvent, iFEXLlp) +GO(XCirculateSubwindows, iFXLi) +GO(XCirculateSubwindowsDown, iFXL) +GO(XCirculateSubwindowsUp, iFXL) +GO(XClearArea, iFXLiiuui) +GO(XClearWindow, iFXL) +GO(XClipBox, iFpp) +GOM(XCloseDisplay, iFEX) +GO(XCloseIM, iFp) +//GO(_XCloseLC, +GO(XCloseOM, iFp) +//GO(_XcmsAddCmapRec, +//GOM(XcmsAddColorSpace, iFEbpLpbp_bp_i_) +//GOM(XcmsAddFunctionSet, iFEbbbpLpbp_bp_i__pp_) +//GO(XcmsAllocColor, iFpLpL) +//GO(XcmsAllocNamedColor, iFpLpppL) +//GO(_XcmsArcTangent, +//GOM(XcmsCCCOfColormap, pFEXL) +//GOM(XcmsCIELabClipab, iFEppuup) +//GOM(XcmsCIELabClipL, iFEppuup) +//GOM(XcmsCIELabClipLab, iFEppuup) +//DATA(XcmsCIELabColorSpace, 6*4) +//DATA(_XcmsCIELab_prefix, +//GOM(XcmsCIELabQueryMaxC, iFEpddp) +//GOM(XcmsCIELabQueryMaxL, iFEpddp) +//GOM(XcmsCIELabQueryMaxLC, iFEpdp) +//GO(_XcmsCIELabQueryMaxLCRGB, +//GOM(XcmsCIELabQueryMinL, iFEpddp) +//GOM(XcmsCIELabToCIEXYZ, iFEpppu) +//GOM(XcmsCIELabWhiteShiftColors, iFEpppLpup) +//GOM(XcmsCIELuvClipL, iFEppuup) +//GOM(XcmsCIELuvClipLuv, iFEppuup) +//GOM(XcmsCIELuvClipuv, iFEppuup) +//DATA(XcmsCIELuvColorSpace, 6*4) +//DATA(_XcmsCIELuv_prefix, +//GOM(XcmsCIELuvQueryMaxC, iFEpddp) +//GOM(XcmsCIELuvQueryMaxL, iFEpddp) +//GOM(XcmsCIELuvQueryMaxLC, iFEpdp) +//GO(_XcmsCIELuvQueryMaxLCRGB, +//GOM(XcmsCIELuvQueryMinL, iFEpddp) +//GOM(XcmsCIELuvToCIEuvY, iFEpppu) +//GOM(XcmsCIELuvWhiteShiftColors, iFEpppLpup) +//DATA(XcmsCIEuvYColorSpace, 6*4) +//DATA(_XcmsCIEuvY_prefix, +//GOM(XcmsCIEuvYToCIELuv, iFEpppu) +//GOM(XcmsCIEuvYToCIEXYZ, iFEpppu) +//GOM(XcmsCIEuvYToTekHVC, iFEpppu) +//GO(_XcmsCIEuvY_ValidSpec, +//DATA(XcmsCIExyYColorSpace, 6*4) // probably need some wrapping +//DATA(_XcmsCIExyY_prefix, +//GOM(XcmsCIExyYToCIEXYZ, iFEpppu) +//DATA(XcmsCIEXYZColorSpace, 24) +//DATA(_XcmsCIEXYZ_prefix, +//GOM(XcmsCIEXYZToCIELab, iFEpppu) +//GOM(XcmsCIEXYZToCIEuvY, iFEpppu) +//GOM(XcmsCIEXYZToCIExyY, iFEpppu) +//GOM(XcmsCIEXYZToRGBi, iFEppup) +//GO(_XcmsCIEXYZ_ValidSpec, +//GOSM(XcmsClientWhitePointOfCCC, bpLL_FEp) +//GOM(XcmsConvertColors, iFEppuLp) +//GO(_XcmsConvertColorsWithWhitePt, +//GO(_XcmsCopyCmapRecAndFree, +//GO(_XcmsCopyISOLatin1Lowered, +//GO(_XcmsCopyPointerArray, +//GO(_XcmsCosine, +//GOM(XcmsCreateCCC, pFEpipppppp) +//GO(_XcmsCubeRoot, +//DATA(_XcmsDDColorSpaces, 6*4) +//DATA(_XcmsDDColorSpacesInit, 6*4) +//GO(_XcmsDDConvertColors, +//GOM(XcmsDefaultCCC, pFEXi) +//GO(_XcmsDeleteCmapRec, +//DATA(_XcmsDIColorSpaces, 6*4) +//DATA(_XcmsDIColorSpacesInit, 6*4) +//GO(_XcmsDIConvertColors, +//GOM(XcmsDisplayOfCCC, XFEp) +//GO(_XcmsEqualWhitePts, +GO(XcmsFormatOfPrefix, LFp) +GO(XcmsFreeCCC, vFp) +//GO(_XcmsFreeIntensityMaps, +//GO(_XcmsFreePointerArray, +//GO(_XcmsGetElement, +//GO(_XcmsGetIntensityMap, +//GO(_XcmsGetProperty, +//GO(_XcmsInitDefaultCCCs, +//GO(_XcmsInitScrnInfo, +//DATA(XcmsLinearRGBFunctionSet, 3*4) // probably needs some wrapping +//GO(XcmsLookupColor, iFpLpppL) +//GO(_XcmsLRGB_InitScrnDefault, +GO(XcmsPrefixOfFormat, pFL) +//GO(_XcmsPushPointerArray, +//GOM(XcmsQueryBlack, iFEpLp) +//GOM(XcmsQueryBlue, iFEpLp) +//GO(XcmsQueryColor, iFpLpL) +//GO(XcmsQueryColors, iFpLpuL) +//GOM(XcmsQueryGreen, iFEpLp) +//GOM(XcmsQueryRed, iFEpLp) +//GOM(XcmsQueryWhite, iFEpLp) +//DATA(_XcmsRegColorSpaces, 6*4) +//GO(_XcmsRegFormatOfPrefix, +//GO(_XcmsResolveColor, +//GO(_XcmsResolveColorString, +//DATA(XcmsRGBColorSpace, 6*4) +//DATA(XcmsRGBiColorSpace, 6*4) +//DATA(_XcmsRGBi_prefix, +//GOM(XcmsRGBiToCIEXYZ, iFEppup) +//GOM(XcmsRGBiToRGB, iFEppup) +//DATA(_XcmsRGB_prefix, +//GOM(XcmsRGBToRGBi, iFEppup) +//GO(_XcmsRGB_to_XColor, +//DATA(_XcmsSCCFuncSets, 3*4) +//DATA(_XcmsSCCFuncSetsInit, 3*4) +//GOM(XcmsScreenNumberOfCCC, iFEp) +//GOSM(XcmsScreenWhitePointOfCCC, bpLL_FEp) +//GOM(XcmsSetCCCOfColormap, pFEXLp) +//GOM(XcmsSetCompressionProc, pFEppp) +//GO(_XcmsSetGetColor, +//GO(_XcmsSetGetColors, +//GOM(XcmsSetWhiteAdjustProc, pFEppp) +//GOM(XcmsSetWhitePoint, iFEpp) +//GO(_XcmsSine, +//GO(_XcmsSquareRoot, +//GO(XcmsStoreColor, iFpLp) +//GO(XcmsStoreColors, iFpLpup) +//GO(_XcmsTekHVC_CheckModify, +//GOM(XcmsTekHVCClipC, iFEppuup) +//GOM(XcmsTekHVCClipV, iFEppuup) +//GOM(XcmsTekHVCClipVC, iFEppuup) +//DATA(XcmsTekHVCColorSpace, 6*4) +//DATA(_XcmsTekHVC_prefix, +//GOM(XcmsTekHVCQueryMaxC, iFEpddp) +//GOM(XcmsTekHVCQueryMaxV, iFEpddp) +//GOM(XcmsTekHVCQueryMaxVC, iFEpdp) +//GO(_XcmsTekHVCQueryMaxVCRGB, +//GOM(XcmsTekHVCQueryMaxVSamples, iFEpdpu) +//GOM(XcmsTekHVCQueryMinV, iFEpddp) +//GOM(XcmsTekHVCToCIEuvY, iFEpppu) +//GOM(XcmsTekHVCWhiteShiftColors, iFEpppLpup) +//DATA(XcmsUNDEFINEDColorSpace, 6*4) +//GO(_XcmsUnresolveColor, +//GOM(XcmsVisualOfCCC, pFEp) +//GO(_XColor_to_XcmsRGB, +GO(XConfigureWindow, iFXLuriiiiiLi_) +GO(XConnectionNumber, iFX) +//GO(_XConnectXCB, +GO(XContextDependentDrawing, iFp) +GO(XContextualDrawing, iFp) +GO(XConvertCase, vFLbL_bL_) +GO(XConvertSelection, iFXLLLLL) +GO(XCopyArea, iFXLLpiiuuii) +GO(XCopyColormapAndFree, LFXL) +//GO(_XCopyEventCookie, iFXbiLiXiiup_biLiXiiup_) +GO(XCopyGC, iFXpLp) +GO(XCopyPlane, iFXLLpiiuuiiL) +//GO(_XCopyToArg, +GO(XCreateBitmapFromData, LFXLpuu) +GOM(XCreateColormap, LFEXLpi) +GO(XCreateFontCursor, LFXu) +GOM(XCreateFontSet, pFEXpppp) +GO(XCreateGC, pFXLLbiLLLiiiiiiiLLiiLiiiiLic_) +GO(XCreateGlyphCursor, LFXLLuubLWWWcc_bLWWWcc_) +GOM(XCreateIC, pFEpV) +GOM(XCreateImage, pFEXpuiipuuii) +GO(dummy_XCreateImage, pFXpuiipuuii) // Warning: failed to confirm +//DATAB(_XCreateMutex_fn, 4) +//GO(XCreateOC, pFppppppppppppppppppp) // is pFpV +GO(XCreatePixmap, LFXLuuu) +GO(XCreatePixmapCursor, LFXLLbLWWWcc_bLWWWcc_uu) +GO(XCreatePixmapFromBitmapData, LFXLpuuLLu) +GO(XCreateRegion, pFv) +GO(XCreateSimpleWindow, LFXLiiuuuLL) +GOM(XCreateWindow, LFEXLiiuuuiupLp) +//DATAB(_Xdebug, 4) +GO(XDefaultColormap, LFXi) +//GOM(XDefaultColormapOfScreen, LFEbpXLiiiiipippLLLiiiil_) +GO(XDefaultDepth, iFXi) +//GOM(XDefaultDepthOfScreen, iFEbpXLiiiiipippLLLiiiil_) +//GOM(_XDefaultError, iFEXbiXLLCCC_) +GO(XDefaultGC, pFXi) +//GOM(XDefaultGCOfScreen, pFEbpXLiiiiipippLLLiiiil_) +GO(_XDefaultIOError, iFX) +GO(_XDefaultIOErrorExit, vFXp) +//GO(_XDefaultOpenIM, +//GO(_XDefaultOpenOM, +GO(XDefaultRootWindow, LFX) +GO(XDefaultScreen, iFX) +//GOM(XDefaultScreenOfDisplay, bpXLiiiiipippLLLiiiil_FEX) +GO(XDefaultString, pFv) +GO(XDefaultVisual, pFXi) +//GOM(XDefaultVisualOfScreen, pFEbpXLiiiiipippLLLiiiil_) +//GO(_XDefaultWireError, iFppp) +GO(XDefineCursor, iFXLL) +GO(XDeleteContext, iFXLi) +//GO(XDeleteModifiermapEntry, bip_Fbip_Ci) +GO(XDeleteProperty, iFXLL) +//GOM(_XDeq, vFEXpp) +//GOM(_XDeqAsyncHandler, vFEXp) +GO(XDestroyIC, vFp) +GOM(XDestroyImage, iFEp) //need to unbridge +GO(XDestroyOC, vFp) +GO(XDestroyRegion, iFp) +GO(XDestroySubwindows, iFXL) +GO(XDestroyWindow, iFXL) +GO(XDirectionalDependentDrawing, iFp) +GO(XDisableAccessControl, iFX) +GO(XDisplayCells, iFXi) +GO(XDisplayHeight, iFXi) +GO(XDisplayHeightMM, iFXi) +GO(XDisplayKeycodes, iFXpp) +GO(XDisplayMotionBufferSize, LFX) +GO(XDisplayName, tFp) +GO(XDisplayOfIM, XFp) +GO(XDisplayOfOM, XFp) +//GOM(XDisplayOfScreen, XFEbpXLiiiiipippLLLiiiil_) +GO(XDisplayPlanes, iFXi) +GO(XDisplayString, pFX) +GO(XDisplayWidth, iFXi) +GO(XDisplayWidthMM, iFXi) +//GOM(XDoesBackingStore, iFEbpXLiiiiipippLLLiiiil_) +//GOM(XDoesSaveUnders, iFEbpXLiiiiipippLLLiiiil_) +GO(XDrawArc, iFXLpiiuuii) +GO(XDrawArcs, iFXLppi) +GO(XDrawImageString, iFXLpiipi) +GO(XDrawImageString16, iFXLpiipi) +GO(XDrawLine, iFXLpiiii) +GO(XDrawLines, iFXLppii) +GO(XDrawPoint, iFXLpii) +GO(XDrawPoints, iFXLppii) +GO(XDrawRectangle, iFXLpiiuu) +GO(XDrawRectangles, iFXLppi) +GO(XDrawSegments, iFXLppi) +GO(XDrawString, iFXLpiipi) +GO(XDrawString16, iFXLpiipi) +GO(XDrawText, iFXLpiibpiiL_i) +GO(XDrawText16, iFXLpiibpiiL_i) +GO(_XEatData, vFXL) +GO(_XEatDataWords, vFXL) +//GO(XEHeadOfExtensionList, +GO(XEmptyRegion, iFp) +GO(XEnableAccessControl, iFX) +//GO(_XEnq, vFpp) +GO(XEqualRegion, iFpp) +//GO(_XError, iFpp) +//DATAM(_XErrorFunction, 4) +//GOM(XESetBeforeFlush, pFEXip) +GOM(XESetCloseDisplay, pFEXip) +//GOM(XESetCopyEventCookie, pFEXip) +//GOM(XESetCopyGC, pFEXip) +//GOM(XESetCreateFont, pFEXip) +//GOM(XESetCreateGC, pFEXip) +//GOM(XESetError, pFEXip) +//GOM(XESetErrorString, pFEXip) +GOM(XESetEventToWire, pFEXip) +//GOM(XESetFlushGC, pFEXip) +//GOM(XESetFreeFont, pFEXip) +//GOM(XESetFreeGC, pFEXip) +//GOM(XESetPrintErrorValues, pFEXip) +//GOM(XESetWireToError, pFEXip) +GOM(XESetWireToEvent, pFEXip) +//GOM(XESetWireToEventCookie, pFEXip) +//GOM(XEventMaskOfScreen, lFEbpXLiiiiipippLLLiiiil_) +GO(_XEventsQueued, iFXi) +GO(XEventsQueued, iFXi) +//DATA(_Xevent_to_mask, +//GO(_XEventToWire, iFppp) +GO(XExtendedMaxRequestSize, lFX) +GO(XExtentsOfFontSet, pFp) +//GO(_XF86BigfontFreeFontMetrics, +//GO(_XF86LoadQueryLocaleFont, iFpppp) +GO(XFetchBuffer, pFXpi) +GO(XFetchBytes, pFXp) +//GO(_XFetchEventCookie, iFXbiLiXiiup_) +GO(XFetchName, iFXLbp_) +GO(XFillArc, iFXLpiiuuii) +GO(XFillArcs, iFXLppi) +GO(XFillPolygon, iFXLppiii) +GO(XFillRectangle, iFXLpiiuu) +GO(XFillRectangles, iFXLppi) +GOM(XFilterEvent, iFEpL) // Warning: failed to confirm +GO(XFindContext, iFXLiBp_) +//GOM(XFindOnExtensionList, pFEbp_i) +GO(_XFlush, vFX) +GO(XFlush, iFX) +GO(XFlushGC, vFXp) +GO(_XFlushGCCache, vFXp) +//GO(XFontsOfFontSet, iFppp) +GO(XForceScreenSaver, iFXi) +GO(XFree, iFp) +//GO(_XFreeAtomTable, +GO(XFreeColormap, iFXL) +GOM(XFreeColors, iFEXLpiL) +GO(XFreeCursor, iFXL) +//DATAB(_XFreeDisplayLock_fn, 4) +//GO(_XFreeDisplayStructure, +GO(_XFreeEventCookies, vFX) +GOM(XFreeEventData, vFEXp) +//GOM(_XFreeExtData, iFEp) +GOM(XFreeExtensionList, iFEp) +GOM(XFreeFont, iFEXp) +//GO(XFreeFontInfo, iFppi) +//GO(XFreeFontNames, iFbp_) +//GO(XFreeFontPath, iFbp_) +GO(XFreeFontSet, vFXp) +GO(XFreeGC, iFXp) +GOM(XFreeModifiermap, iFEp) +//DATAM(_XFreeMutex_fn, 4) +GO(XFreePixmap, iFXL) +GOM(XFreeStringList, vFEp) +GO(_XFreeTemp, vFXpL) +GO(XFreeThreads, iFv) +//GO(_XFreeX11XCBStructure, +GO(XGContextFromGC, LFp) +GO(XGeometry, iFXippuuuiipppp) +GO(_XGetAsyncData, vFXppiiii) +//GO(_XGetAsyncReply, pFppppiii) +GO(XGetAtomName, pFXL) +GO(XGetAtomNames, iFXbL_ibp_) +//GO(_XGetBitsPerPixel, +GO(XGetClassHint, iFXLbpp_) +//GO(XGetCommand, iFXLbbp__p) +GO(XGetDefault, pFXpp) +GO(XGetErrorDatabaseText, iFXppppi) +GO(XGetErrorText, iFXipi) +GOM(XGetEventData, iFEXp) +//GO(XGetFontPath, bp_FXp) +//GO(XGetFontProperty, iFpLp) +GO(XGetGCValues, iFXpLbiLLLiiiiiiiLLiiLiiiiLic_) +GO(XGetGeometry, iFXLbL_pppppp) +GO(_XGetHostname, iFpi) +GO(XGetIconName, iFXLbp_) +GO(XGetIconSizes, iFXLbp_p) +GO(XGetICValues, pFpppppppppp) // use varargs... +GOM(XGetImage, pFEXLiiuuLi) // return an XImage with callbacks that needs wrapping +GOM(XGetIMValues, pFEpV) +GO(XGetInputFocus, iFXBL_p) +GO(XGetKeyboardControl, iFXbiiuuLip_) +GO(XGetKeyboardMapping, pFXCip) // return a KeySym*, so an unsigned long* +//GO(_XGetLCValues, +GOM(XGetModifierMapping, pFEX) +//GO(XGetMotionEvents, bLww_FXLLLp) +//GO(XGetNormalHints, iFpLp) +//GO(XGetOCValues, pFpppppppppp) // use varargs +//GOM(XGetOMValues, pFEpV) +GOM(XGetPixel, LFEXii) // need unbridging +GO(dummy_XGetPixel, LFpii) // for the wrapper +GO(XGetPointerControl, iFXppp) +GO(XGetPointerMapping, iFXpi) +//GOM(_XGetRequest, pFEXCL) +//GO(XGetRGBColormaps, iFXLbbLLLLLLLLLL__pL) +//GO(_XGetScanlinePad, +GO(XGetScreenSaver, iFXpppp) +GO(XGetSelectionOwner, LFXL) +//GO(XGetSizeHints, iFpLpL) +GO(XGetStandardColormap, iFXLbLLLLLLLLLL_L) +GOM(XGetSubImage, pFEXLiiuuLipii) +GO(XGetTextProperty, iFXLbpLiL_L) +GO(XGetTransientForHint, iFXLbL_) +GOM(XGetVisualInfo, pFEXlpp) +//GOM(_XGetWindowAttributes, iFEXLbiiiiiipLiiiiLLiLiilllibpXLiiiiipippLLLiiiil__) +GOM(XGetWindowAttributes, iFEXLp) +GOM(XGetWindowProperty, iFEXLLlliLppppp) +GO(XGetWMClientMachine, iFXLbpLiL_) +//GO(XGetWMColormapWindows, iFXLbbL__p) +GOM(XGetWMHints, pFEXL) +GO(XGetWMIconName, iFXLbpLiL_) +GO(XGetWMName, iFXLbpLiL_) +GOM(XGetWMNormalHints, iFEXLpp) +//GO(XGetWMProtocols, iFXLbbL__p) +//GO(XGetWMSizeHints, iFpLppL) +//GO(XGetZoomHints, iFpLp) +DATAB(_Xglobal_lock, 4) +GO(XGrabButton, iFXuuLiuiiLL) +GO(XGrabKey, iFXiuLiii) +GO(XGrabKeyboard, iFXLiiiL) +GO(XGrabPointer, iFXLiuiiLLL) +GOM(XGrabServer, iFEX) +//DATAB(_XHeadOfDisplayList, 4) +//GOM(XHeightMMOfScreen, iFEbpXLiiiiipippLLLiiiil_) +//GOM(XHeightOfScreen, iFEbpXLiiiiipippLLLiiiil_) +//DATAB(_Xi18n_lock, 4) +GO(XIconifyWindow, iFXLi) +GOM(XIfEvent, iFEXppp) +GO(XImageByteOrder, iFX) +//GO(_XimCbDispatch, +//GO(_XimCheckCreateICValues, +//GO(_XimCheckDataSize, +//GO(_XimCheckICMode, +//GO(_XimCheckIfLocalProcessing, +//GO(_XimCheckIfThaiProcessing, +//GO(_XimCheckIMMode, +//GO(_XimCheckLocalInputStyle, +//GO(_XimCommitCallback, +//GO(_XIMCompileResourceList, +//GO(_XimConnect, +//GO(_Ximctstombs, +//GO(_Ximctstoutf8, +//GO(_Ximctstowcs, +//GO(_XimDecodeICATTRIBUTE, +//GO(_XimDecodeIMATTRIBUTE, +//GO(_XimDecodeLocalICAttr, +//GO(_XimDecodeLocalIMAttr, +//GO(_XimDestroyIMStructureList, +//GO(_XimDispatchInit, +//GO(_XimEncodeICATTRIBUTE, +//GO(_XimEncodeIMATTRIBUTE, +//GO(_XimEncodeLocalICAttr, +//GO(_XimEncodeLocalIMAttr, +//GO(_XimError, +//GO(_XimErrorCallback, +//GO(_XimExtension, +//GO(_XimFilterWaitEvent, +//GO(_XimFlush, +//GO(_XimForwardEvent, +//GO(_XimForwardEventCallback, +//GO(_XimFreeCommitInfo, +//GO(_XimFreeProtoIntrCallback, +//GO(_XimFreeTransIntrCallback, +//GO(_XimGetAttributeID, +//GO(_XimGetCharCode, +//GO(_XimGetCurrentICValues, +//GO(_XimGetCurrentIMValues, +//GO(_XimGetICValueData, +//GO(_XimGetIMValueData, +//GO(_XimGetLocaleCode, +//GO(_XimGetMyEndian, +//GO(_XimGetResourceListRec, +//GO(_XimGetResourceListRecByQuark, +//GO(_XimGetWindowEventmask, +//GO(_XimICOfXICID, +//DATA(_XimImSportRec, +//GO(_XimInitialResourceInfo, +//GO(_XimLcctstombs, +//GO(_XimLcctstoutf8, +//GO(_XimLcctstowcs, +//GO(_XimLocalCreateIC, +//GO(_XimLocalFilter, +//GO(_XimLocalGetICValues, +//GO(_XimLocalGetIMValues, +//GO(_XimLocalIMFree, +//GO(_XimLocalMbLookupString, +//GO(_XimLocalOpenIM, +//GO(_XimLocalSetICValues, +//GO(_XimLocalSetIMValues, +//GO(_XimLocalUtf8LookupString, +//GO(_XimLocalWcLookupString, +//GO(_XimLookupMBText, +//GO(_XimLookupUTF8Text, +//GO(_XimLookupWCText, +//GO(_XimMakeICAttrIDList, +//GO(_XimMakeIMAttrIDList, +GO(XIMOfIC, pFp) +//GO(_XimOpenIM, +//GO(_XimParseStringFile, +//GO(_XimProcError, +//GO(_XimProcSyncReply, +//GO(_XimProtoCreateIC, +//GO(_XimProtoEventToWire, +//GO(_XimProtoIMFree, +//GO(_XimProtoMbLookupString, +//GO(_XimProtoOpenIM, +//GO(_XimProtoUtf8LookupString, +//GO(_XimProtoWcLookupString, +//GO(_XimProtoWireToEvent, +//GO(_XimRead, +//GO(_XimRegisterDispatcher, +//GO(_XimRegisterFilter, +//GO(_XimRegisterIMInstantiateCallback, +//GO(_XimRegisterServerFilter, +//GO(_XimRegisterTriggerKeysCallback, +//GO(_XimRegProtoIntrCallback, +//GO(_XimReregisterFilter, +//GO(_XimResetIMInstantiateCallback, +//GO(_XimRespSyncReply, +//GO(_XimServerDestroy, +//GO(_XimSetCurrentICValues, +//GO(_XimSetCurrentIMValues, +//GO(_XimSetEventMaskCallback, +//GO(_XimSetHeader, +//GO(_XimSetICDefaults, +//GO(_XimSetICMode, +//GO(_XimSetICResourceList, +//GO(_XimSetICValueData, +//GO(_XimSetIMMode, +//GO(_XimSetIMResourceList, +//GO(_XimSetIMValueData, +//GO(_XimSetInnerICResourceList, +//GO(_XimSetInnerIMResourceList, +//GO(_XimSetLocalIMDefaults, +//GO(_XimShutdown, +//GO(_XimSync, +//GO(_XimSyncCallback, +//GO(_XimThaiCloseIM, +//GO(_XimThaiCreateIC, +//GO(_XimThaiFilter, +//GO(_XimThaiIMFree, +//GO(_XimThaiOpenIM, +//GO(_XimTransCallDispatcher, +//GO(_XimTransConf, +//GO(_XimTransFilterWaitEvent, +//GO(_XimTransFlush, +//GO(_XimTransInternalConnection, +//DATA(_XimTransportRec, +//GO(_XimTransRead, +//GO(_XimTransRegisterDispatcher, +//GO(_XimTransWrite, +//GO(_XimTriggerNotify, +//GO(_XimUnregisterFilter, +//GO(_XimUnRegisterIMInstantiateCallback, +//GO(_XimUnregisterServerFilter, +//GO(_XimWrite, +//GO(_XimXConf, +//GO(_XimXTransBytesReadable, +//GO(_XimXTransClose, +//GO(_XimXTransCloseForCloning, +//GO(_XimXTransConnect, +//GO(_XimXTransDisconnect, +//GO(_XimXTransFreeConnInfo, +//GO(_XimXTransGetConnectionNumber, +//GO(_XimXTransGetHostname, +//GO(_XimXTransGetPeerAddr, +//GO(_XimXTransIsLocal, +//GO(_XimXTransOpenCOTSClient, +//GO(_XimXTransRead, +//GO(_XimXTransReadv, +//GO(_XimXTransSetOption, +DATA(_XimXTransSocketINET6Funcs, 4) +DATA(_XimXTransSocketINETFuncs, 4) +DATA(_XimXTransSocketLocalFuncs, 4) +DATA(_XimXTransSocketTCPFuncs, 4) +DATA(_XimXTransSocketUNIXFuncs, 4) +//GO(_XimXTransWrite, +//GO(_XimXTransWritev, +DATAB(_XInitDisplayLock_fn, 4) +GO(XInitExtension, pFXp) +//GO(_XInitIM, +GOM(XInitImage, iFEp) +GOM(_XInitImageFuncPtrs, iFEp) +//GO(_XInitKeysymDB, +//GO(_XInitOM, +GO(XInitThreads, iFv) +//GO(XInsertModifiermapEntry, bip_Fbip_Ci) +GO(XInstallColormap, iFXL) +GO(XInternalConnectionNumbers, iFXbp_p) +GO(XInternAtom, LFXpi) +GOM(XInternAtoms, iFEXpiip) +GO(XIntersectRegion, iFppp) +GO(_XIOError, iFX) +//DATAM(_XIOErrorFunction, 4) +//GO(_XIsEventCookie, iFpp) +//GO(XkbAddDeviceLedInfo, pFpuu) +//GO(XkbAddGeomColor, pFppu) +//GO(XkbAddGeomDoodad, pFppL) +//GO(XkbAddGeomKey, pFp) +//GO(XkbAddGeomKeyAlias, pFppp) +//GO(XkbAddGeomOutline, pFpi) +//GO(XkbAddGeomOverlay, pFpLi) +//GOM(XkbAddGeomOverlayKey, pFEpbWWWp_pp) +//GOM(XkbAddGeomOverlayRow, bWWWp_FEpii) +//GO(XkbAddGeomProperty, pFppp) +//GO(XkbAddGeomRow, pFpi) +//GO(XkbAddGeomSection, pFpLiii) +//GO(XkbAddGeomShape, pFpLi) +//GO(XkbAddKeyType, pFpLiii) +//GO(XkbAllocClientMap, iFpuu) +//GO(XkbAllocCompatMap, iFpuu) +//GO(XkbAllocControls, iFpu) +//GOS(XkbAllocDeviceInfo, bpLWiWWWpWWWWbWWuuuuLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLpppppppppppppppppppppppppppppppp__Fuuu) +//GO(XkbAllocGeomColors, iFpi) +//GO(XkbAllocGeomDoodads, iFpi) +//GO(XkbAllocGeometry, iFpp) +//GO(XkbAllocGeomKeyAliases, iFpi) +//GO(XkbAllocGeomKeys, iFpi) +//GO(XkbAllocGeomOutlines, iFpi) +//GO(XkbAllocGeomOverlayKeys, iFbWWWp_i) +//GOM(XkbAllocGeomOverlayRows, iFEpi) +//GO(XkbAllocGeomOverlays, iFpi) +//GO(XkbAllocGeomPoints, iFbWWWp_i) +//GO(XkbAllocGeomProps, iFpi) +//GO(XkbAllocGeomRows, iFpi) +//GO(XkbAllocGeomSectionDoodads, iFpi) +//GO(XkbAllocGeomSections, iFpi) +//GO(XkbAllocGeomShapes, iFpi) +//GO(XkbAllocIndicatorMaps, iFp) +//GOSM(XkbAllocKeyboard, bXWWCCpbWWppppCCCCCCCCCCCCCCCCp_bCCbpCCppLbL__WWbL_pp_bLpppppppppppppppppppppppppppppppp_bLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLppbL_LCCW_bbLCCCCp_ppppWW_bLWWpbup_bup_WWWWWWWWWWWWbpp_bup_bLWWbWWWp_bWWWp_bWWWp_p_bLCwwWWwWWWWWWbwwWWipp_bppppp_pp_bppppp_p__FEv) +//GO(XkbAllocNames, iFpuii) +//GO(XkbAllocServerMap, iFpuu) +//GO(XkbApplyCompatMapToKey, iFpCp) +//GO(XkbApplyVirtualModChanges, iFpup) +GO(XkbBell, iFXLiL) +GO(XkbBellEvent, iFXLiL) +//GO(XkbChangeDeviceInfo, iFppp) +GO(XkbChangeEnabledControls, iFXuuu) +//GO(XkbChangeKeycodeRange, iFpiip) +//GO(XkbChangeMap, iFppp) +//GO(XkbChangeNames, iFppp) +//GO(XkbChangeTypesOfKey, iFpiiupp) +//GO(XkbComputeEffectiveMap, iFppp) +//GO(XkbComputeRowBounds, iFppp) +//GO(XkbComputeSectionBounds, iFpp) +//GO(XkbComputeShapeBounds, iFp) +//GO(XkbComputeShapeTop, iFpp) +//GO(_XkbCopyFromReadBuffer, +//GO(XkbCopyKeyType, iFpp) +//GO(XkbCopyKeyTypes, iFppi) +GO(XkbDeviceBell, iFXLiiiiL) +GO(XkbDeviceBellEvent, iFXLiiiiL) +//GO(XkbFindOverlayForKey, pFppp) +GO(XkbForceBell, iFXi) +GO(XkbForceDeviceBell, iFXiiii) +//GO(XkbFreeClientMap, vFpui) +//GO(XkbFreeCompatMap, vFpui) +//GO(XkbFreeComponentList, vFbiiiiiibWp_bWp_bWp_bWp_bWp_bWp__) +//GO(XkbFreeControls, vFpui) +//GO(XkbFreeDeviceInfo, vFpui) +//GO(XkbFreeGeomColors, vFpiii) +//GO(XkbFreeGeomDoodads, vFpii) +//GO(XkbFreeGeometry, vFpui) +//GO(XkbFreeGeomKeyAliases, vFpiii) +//GO(XkbFreeGeomKeys, vFpiii) +//GO(XkbFreeGeomOutlines, vFpiii) +//GO(XkbFreeGeomOverlayKeys, vFbWWWp_iii) +//GOM(XkbFreeGeomOverlayRows, vFEpiii) +//GO(XkbFreeGeomOverlays, vFpiii) +//GO(XkbFreeGeomPoints, vFbWWWp_iii) +//GO(XkbFreeGeomProperties, vFpiii) +//GO(XkbFreeGeomRows, vFpiii) +//GO(XkbFreeGeomSections, vFpiii) +//GO(XkbFreeGeomShapes, vFpiii) +//GO(XkbFreeIndicatorMaps, vFp) +//GO(XkbFreeKeyboard, vFpui) +//GO(XkbFreeNames, vFpui) +//GO(_XkbFreeReadBuffer, +//GO(XkbFreeServerMap, vFpui) +//DATA(_XkbGetAtomNameFunc, 4) +GO(XkbGetAutoRepeatRate, iFXupp) +GO(XkbGetAutoResetControls, iFXpp) +//GO(_XkbGetCharset, +//GO(XkbGetCompatMap, iFpup) +//GO(XkbGetControls, iFpLp) +//GO(_XkbGetConverters, +GO(XkbGetDetectableAutoRepeat, iFXp) +//GO(XkbGetDeviceButtonActions, iFppiuu) +//GOS(XkbGetDeviceInfo, bpLWiWWWpWWWWbWWuuuuLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLpppppppppppppppppppppppppppppppp__FXuuuu) +//GO(XkbGetDeviceInfoChanges, iFppp) +//GO(XkbGetDeviceLedInfo, iFppuuu) +//GO(XkbGetGeometry, iFpp) +//GO(XkbGetIndicatorMap, iFpLp) +GO(XkbGetIndicatorState, iFXup) +//GO(XkbGetKeyActions, iFpuup) +//GO(XkbGetKeyBehaviors, iFpuup) +//GOSM(XkbGetKeyboard, bXWWCCpbWWppppCCCCCCCCCCCCCCCCp_bCCbpCCppLbL__WWbL_pp_bLpppppppppppppppppppppppppppppppp_bLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLppbL_LCCW_bbLCCCCp_ppppWW_bLWWpbup_bup_WWWWWWWWWWWWbpp_bup_bLWWbWWWp_bWWWp_bWWWp_p_bLCwwWWwWWWWWWbwwWWipp_bppppp_pp_bppppp_p__FEXuu) +//GOSM(XkbGetKeyboardByName, bXWWCCpbWWppppCCCCCCCCCCCCCCCCp_bCCbpCCppLbL__WWbL_pp_bLpppppppppppppppppppppppppppppppp_bLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLppbL_LCCW_bbLCCCCp_ppppWW_bLWWpbup_bup_WWWWWWWWWWWWbpp_bup_bLWWbWWWp_bWWWp_bWWWp_p_bLCwwWWwWWWWWWbwwWWipp_bppppp_pp_bppppp_p__FEXubpppppp_uui) +//GO(XkbGetKeyExplicitComponents, iFpuup) +//GO(XkbGetKeyModifierMap, iFpuup) +//GO(XkbGetKeySyms, iFpuup) +//GO(XkbGetKeyTypes, iFpuup) +//GO(XkbGetKeyVirtualModMap, iFpuup) +//GOSM(XkbGetMap, bXWWCCpbWWppppCCCCCCCCCCCCCCCCp_bCCbpCCppLbL__WWbL_pp_bLpppppppppppppppppppppppppppppppp_bLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLppbL_LCCW_bbLCCCCp_ppppWW_bLWWpbup_bup_WWWWWWWWWWWWbpp_bup_bLWWbWWWp_bWWWp_bWWWp_p_bLCwwWWwWWWWWWbwwWWipp_bppppp_pp_bppppp_p__FEXuu) +//GO(XkbGetMapChanges, iFppp) +GO(XkbGetNamedDeviceIndicator, iFXuuuLpppp) +//GO(XkbGetNamedGeometry, iFppL) +GO(XkbGetNamedIndicator, iFXLpppp) +//GO(XkbGetNames, iFpup) +GO(XkbGetPerClientControls, iFXp) +//GO(_XkbGetReadBufferCountedString, +//GO(_XkbGetReadBufferPtr, +GO(XkbGetState, iFXup) +//GO(XkbGetUpdatedMap, iFpup) +//GO(XkbGetVirtualMods, iFpup) +GO(XkbGetXlibControls, uFX) +GO(XkbIgnoreExtension, iFi) +//GO(XkbInitCanonicalKeyTypes, iFpui) +//GO(_XkbInitReadBuffer, +//DATA(_XkbInternAtomFunc, 4) +GO(XkbKeycodeToKeysym, LFXCii) +GO(XkbKeysymToModifiers, uFXL) +//GO(XkbKeyTypesForCoreSymbols, iFpipupp) +GO(XkbLatchGroup, iFXuu) +GO(XkbLatchModifiers, iFXuuu) +GO(XkbLibraryVersion, iFpp) +//GO(XkbListComponents, biiiiiibWp_bWp_bWp_bWp_bWp_bWp__FXubpppppp_p) +GO(XkbLockGroup, iFXuu) +GO(XkbLockModifiers, iFXuuu) +GO(XkbLookupKeyBinding, iFXLupip) +GO(XkbLookupKeySym, iFXCupbL_) +//GO(XkbNoteControlsChanges, vFpbiLiXLiiuuuiCccc_u) +//GO(_XkbNoteCoreMapChanges, +//GOM(XkbNoteDeviceChanges, vFEpbiLiXLiiuuuiiuuii_u) +//GO(XkbNoteMapChanges, vFpbiLiXLiiuuiiCCCCCCCCiiiiiiu_u) +//GO(XkbNoteNameChanges, vFbuCCCCCCCCWLC_biLiXLiiuiiiiiiuuuii_u) +GO(XkbOpenDisplay, XFpppppp) +//GO(_XkbPeekAtReadBuffer, +GO(XkbQueryExtension, iFXppppp) +//GO(_XkbReadBufferCopy32, +//GO(_XkbReadBufferCopyKeySyms, +//GO(_XkbReadCopyData32, +//GO(_XkbReadCopyKeySyms, +//GO(_XkbReadGetCompatMapReply, +//GO(_XkbReadGetGeometryReply, +//GO(_XkbReadGetIndicatorMapReply, +//GO(_XkbReadGetMapReply, +//GO(_XkbReadGetNamesReply, +//GO(XkbRefreshKeyboardMapping, iFbiLiXLiiuuiiCCCCCCCCiiiiiiu_) +//GO(_XkbReloadDpy, +//GO(XkbResizeDeviceButtonActions, iFpu) +//GO(XkbResizeKeyActions, pFpii) +//GO(XkbResizeKeySyms, pFpii) +//GO(XkbResizeKeyType, iFpiiii) +GO(XkbSelectEventDetails, iFXuuLL) +GO(XkbSelectEvents, iFXuuu) +//GOM(XkbSetAtomFuncs, vFEpp) +GO(XkbSetAutoRepeatRate, iFXuuu) +GO(XkbSetAutoResetControls, iFXupp) +//GO(XkbSetCompatMap, iFpupi) +//GO(XkbSetControls, iFpLp) +GO(XkbSetDebuggingFlags, iFXuupuupp) +GO(XkbSetDetectableAutoRepeat, iFXip) +//GO(XkbSetDeviceButtonActions, iFppuu) +//GO(XkbSetDeviceInfo, iFpup) +//GO(XkbSetDeviceLedInfo, iFppuuu) +//GO(XkbSetGeometry, iFpup) +GO(XkbSetIgnoreLockMods, iFXuuuuu) +//GO(XkbSetIndicatorMap, iFpLp) +//GO(XkbSetMap, iFpup) +GO(XkbSetNamedDeviceIndicator, iFXuuuLiiip) +GO(XkbSetNamedIndicator, iFXLiiip) +//GO(XkbSetNames, iFpuuup) +GO(XkbSetPerClientControls, iFXup) +GO(XkbSetServerInternalMods, iFXuuuuu) +GO(XkbSetXlibControls, uFXuu) +//GO(_XkbSkipReadBufferData, +GO(XkbToControl, cFc) +//GO(XkbTranslateKey, +//GO(XkbTranslateKeyCode, iFpCupp) +GO(XkbTranslateKeySym, iFXbL_upip) +//GO(XkbUpdateActionVirtualMods, iFppu) +//GO(XkbUpdateKeyTypeVirtualMods, vFppup) +//GO(XkbUpdateMapFromCore, iFpCiipp) +GO(XkbUseExtension, iFXpp) +//GO(XkbVirtualModsToReal, iFpup) +//GO(_XkbWriteCopyData32, +//GO(_XkbWriteCopyKeySyms, +GO(XkbXlibControlsImplemented, uFv) +//GO(_XKeycodeToKeysym, +GO(XKeycodeToKeysym, LFXCi) +//GO(_XKeyInitialize, +//GO(_XKeysymToKeycode, +GO(XKeysymToKeycode, CFXL) +//GO(_XKeysymToModifiers, +GO(XKeysymToString, pFL) +//DATA(_XkeyTable, +GO(XKillClient, iFXL) +GO(XLastKnownRequestProcessed, LFX) +//GO(_XlcAddCharSet, +//GO(_XlcAddCT, +//GO(_XlcAddGB18030LocaleConverters, +//GO(_XlcAddLoader, +//GO(_XlcAddUtf8Converters, +//GO(_XlcAddUtf8LocaleConverters, +//GO(_XlcCloseConverter, +//GO(_XlcCompareISOLatin1, +//GO(_XlcCompileResourceList, +//GO(_XlcConvert, +//GO(_XlcCopyFromArg, +//GO(_XlcCopyToArg, +//GO(_XlcCountVaList, +//GO(_XlcCreateDefaultCharSet, +//GO(_XlcCreateLC, +//GO(_XlcCreateLocaleDataBase, +//GO(_XlcCurrentLC, +//GO(_XlcDbg_printValue, +//GO(_XlcDefaultLoader, +//GO(_XlcDefaultMapModifiers, +//GO(_XlcDeInitLoader, +//GO(_XlcDestroyLC, +//GO(_XlcDestroyLocaleDataBase, +//GO(_XlcFileName, +//GO(_XlcGenericLoader, +DATA(_XlcGenericMethods, 4) +//GO(_XlcGetCharSet, +//GO(_XlcGetCharSetWithSide, +//GO(_XlcGetCSValues, +//GO(_XlcGetLocaleDataBase, +//GO(_XlcGetResource, +//GO(_XlcGetValues, +//GO(_XlcInitCTInfo, +//GO(_XlcInitLoader, +//GO(_XlcLocaleDirName, +//GO(_XlcLocaleLibDirName, +//GO(_XlcMapOSLocaleName, +//GO(_Xlcmbstoutf8, +//GO(_Xlcmbstowcs, +//GO(_Xlcmbtowc, +//GO(_XlcNCompareISOLatin1, +//GO(_XlcOpenConverter, +//GO(_XlcParseCharSet, +//GO(_XlcParse_scopemaps, +DATA(_XlcPublicMethods, 4) +//GO(_XlcRemoveLoader, +//GO(_XlcResetConverter, +//GO(_XlcResolveI18NPath, +//GO(_XlcResolveLocaleName, +//GO(_XlcSetConverter, +//GO(_XlcSetValues, +//GO(_XlcUtf8Loader, +//GO(_XlcValidModSyntax, +//GO(_XlcVaToArgList, +//GO(_Xlcwcstombs, +//GO(_Xlcwctomb, +GO(XListDepths, pFXip) +GOM(XListExtensions, pFEXp)//GOM(XListExtensions, bp_FEXp) +//GO(XListFonts, bp_FXpip) +//GO(XListFontsWithInfo, pFppipp) +//GO(XListHosts, biip_FXpp) +//GO(XListInstalledColormaps, bL_FXLp) +GO(XListPixmapFormats, pFXp) +//GO(XListProperties, bL_FXLp) +GO(XLoadFont, LFXp) +GOM(XLoadQueryFont, pFEXp) +GO(xlocaledir, vFpi) +GO(XLocaleOfFontSet, pFp) +GO(XLocaleOfIM, pFp) +GO(XLocaleOfOM, pFp) +GOM(XLockDisplay, vFEX) +//DATAM(_XLockMutex_fn, 4) +GO(XLookupColor, iFXLpBLWWWcc_BLWWWcc_) +//GO(_XLookupKeysym, +GOM(XLookupKeysym, LFEpi) +//GO(_XLookupString, +GOM(XLookupString, iFEppipp) +GO(XLowerWindow, iFXL) +GO(XMapRaised, iFXL) +GO(XMapSubwindows, iFXL) +GO(XMapWindow, iFXL) +GOM(XMaskEvent, iFEXlp) +GO(XMatchVisualInfo, iFXiiiBpLiiiLLLii_) +//GOM(XMaxCmapsOfScreen, iFEbpXLiiiiipippLLLiiiil_) +GO(XMaxRequestSize, lFX) +//GO(_XmbDefaultDrawImageString, +//GO(_XmbDefaultDrawString, +//GO(_XmbDefaultTextEscapement, +//GO(_XmbDefaultTextExtents, +//GO(_XmbDefaultTextPerCharExtents, +GO(XmbDrawImageString, vFXLppiipi) +GO(XmbDrawString, vFXLppiipi) +GO(XmbDrawText, vFXLpiibpiip_i) +//GO(_XmbGenericDrawImageString, +//GO(_XmbGenericDrawString, +//GO(_XmbGenericTextEscapement, +//GO(_XmbGenericTextExtents, +//GO(_XmbGenericTextPerCharExtents, +GO(_Xmblen, iFpi) +GOM(XmbLookupString, iFEpppipp) +GO(XmbResetIC, pFp) +//GO(XmbSetWMProperties, vFpLpppippp) +//GO(_Xmbstoutf8, +//GO(_Xmbstowcs, +GO(XmbTextEscapement, iFppi) +GO(XmbTextExtents, iFppipp) +//GO(_XmbTextListToTextProperty, +GOM(XmbTextListToTextProperty, iFEXpiup) +GO(XmbTextPerCharExtents, iFppippippp) +//GO(_XmbTextPropertyToTextList, +GOM(XmbTextPropertyToTextList, iFEXbpLiL_pp) +GO(_Xmbtowc, iFppi) +//GOM(XMinCmapsOfScreen, iFEbpXLiiiiipippLLLiiiil_) +GO(XMoveResizeWindow, iFXLiiuu) +GO(XMoveWindow, iFXLii) +//GO(XNewModifiermap, bip_Fi) +GOM(XNextEvent, iFEXp) // Warning: failed to confirm +GO(XNextRequest, LFX) +GO(XNoOp, iFX) +//GO(_XNoticeCreateBitmap, +//GO(_XNoticePutBitmap, +GO(XOffsetRegion, iFpii) +//GO(_XomConvert, +//GO(_XomGenericDrawString, +//GO(_XomGenericOpenOM, +//GO(_XomGenericTextExtents, +//GO(_XomGetFontDataFromFontSet, +//GO(_XomInitConverter, +GO(XOMOfOC, pFp) +GOM(XOpenDisplay, XFp) //%noE +GO(XOpenIM, pFXppp) +//GO(_XOpenLC, +GO(XOpenOM, pFXppp) +//GO(_XParseBaseFontNameList, +GO(XParseColor, iFXLpbLWWWcc_) +GO(XParseGeometry, iFppppp) +GOM(XPeekEvent, iFEXp) // Warning: failed to confirm +//GOM(XPeekIfEvent, iFEpppp) +GO(XPending, iFX) +GO(Xpermalloc, pFu) +//GOM(XPlanesOfScreen, iFEbpXLiiiiipippLLLiiiil_) +GO(XPointInRegion, iFpii) +GO(_XPollfdCacheAdd, vFXi) +GO(_XPollfdCacheDel, vFXi) +GO(_XPollfdCacheInit, iFX) +GO(XPolygonRegion, pFpii) +//GOM(_XProcessInternalConnection, vFEXp) +GO(XProcessInternalConnection, vFXi) +//GO(_XProcessWindowAttributes, vFppLp) +GO(XProtocolRevision, iFX) +GO(XProtocolVersion, iFX) +//GO(_XPutBackEvent, iFpp) +//GO(XPutBackEvent, iFpp) +GOM(XPutImage, iFEXLppiiiiuu) +GO(XPutPixel, vFXiiL) +GO(XQLength, iFX) +GO(XQueryBestCursor, iFXLuupp) +GO(XQueryBestSize, iFXiLuupp) +GO(XQueryBestStipple, iFXLuupp) +GO(XQueryBestTile, iFXLuupp) +GO(XQueryColor, iFXLbLWWWcc_) +GOM(XQueryColors, iFEXLpi) +GOM(XQueryExtension, iFEXpppp) +//GOSM(XQueryFont, bpLuuuuuiuibLL_pppii_FEXL) +GO(XQueryKeymap, iFXp) +GO(XQueryPointer, iFXLbL_bL_ppppp) +GO(XQueryTextExtents, iFXLpipppp) +GO(XQueryTextExtents16, iFXLpipppp) +GOM(XQueryTree, iFEXLpppp) +GO(XRaiseWindow, iFXL) +GO(_XRead, iFXpl) +GO(XReadBitmapFile, iFXLpppbL_pp) +GO(XReadBitmapFileData, iFpppbp_pp) +GO(_XReadEvents, vFX) +GO(_XReadPad, vFXpl) +GO(XRebindKeysym, iFXLbL_ipi) +GO(XRecolorCursor, iFXLbLWWWcc_bLWWWcc_) +GO(XReconfigureWMWindow, iFXLiuriiiiiLi_) +GO(XRectInRegion, iFpiiuu) +//GO(_XRefreshKeyboardMapping, +GOM(XRefreshKeyboardMapping, iFEp) +//GO(_XRegisterFilterByMask, +//GO(_XRegisterFilterByType, +GOM(XRegisterIMInstantiateCallback, iFEXppppp) +//GOM(_XRegisterInternalConnection, iFEXipp) +//GOM(XRemoveConnectionWatch, vFEXpp) +GO(XRemoveFromSaveSet, iFXL) +GO(XRemoveHost, iFXbiip_) +GO(XRemoveHosts, iFXbiip_i) +GO(XReparentWindow, iFXLLii) +GO(_XReply, iFXpii) +GO(XResetScreenSaver, iFX) +GO(XResizeWindow, iFXLuu) +GO(XResourceManagerString, pFX) +GO(XRestackWindows, iFXbL_i) +//GO(_XReverse_Bytes, +GO(XrmCombineDatabase, vFpbp_i) +GO(XrmCombineFileDatabase, iFpbp_i) +//GO(_XrmDefaultInitParseInfo, +GO(XrmDestroyDatabase, vFp) +//GOM(XrmEnumerateDatabase, iFEpppipp) +GO(XrmGetDatabase, pFX) +GO(XrmGetFileDatabase, pFp) +GO(XrmGetResource, iFpppbp_bup_) +GO(XrmGetStringDatabase, pFp) +GO(XrmInitialize, vFv) +//GO(_XrmInitParseInfo, +//GO(_XrmInternalStringToQuark, +GO(XrmLocaleOfDatabase, pFp) +GO(XrmMergeDatabases, vFpbp_) +GO(XrmParseCommand, vFbp_bppup_ippbp_) +GO(XrmPermStringToQuark, iFp) +GO(XrmPutFileDatabase, vFpp) +GO(XrmPutLineResource, vFbp_p) +GO(XrmPutResource, vFbp_ppbup_) +GO(XrmPutStringResource, vFbp_pp) +GO(XrmQGetResource, iFppppbup_) +//GO(XrmQGetSearchList, iFpppbbp__i) +//GO(XrmQGetSearchResource, iFbbp__iipbup_) +GO(XrmQPutResource, vFbp_ppibup_) +GO(XrmQPutStringResource, vFbp_ppp) +GO(XrmQuarkToString, pFi) +GO(XrmSetDatabase, vFXp) +GO(XrmStringToBindingQuarkList, vFppp) +GO(XrmStringToQuark, iFp) +GO(XrmStringToQuarkList, vFpp) +GO(XrmUniqueQuark, iFv) +GO(XRootWindow, LFXi) +//GOM(XRootWindowOfScreen, LFEbpXLiiiiipippLLLiiiil_) +GO(XRotateBuffers, iFXi) +GO(XRotateWindowProperties, iFXLbL_ii) +GO(XSaveContext, iFXLip) +GO(XScreenCount, iFX) +//GOM(XScreenNumberOfScreen, iFEbpXLiiiiipippLLLiiiil_) +//GOM(XScreenOfDisplay, bpXLiiiiipippLLLiiiil_FEXi) +//GOM(_XScreenOfWindow, bpXLiiiiipippLLLiiiil_FEXL) +//GOM(XScreenResourceString, pFEbpXLiiiiipippLLLiiiil_) +GO(XSelectInput, iFXLl) +GO(_XSend, vFXpl) +GOM(XSendEvent, iFEXLilp) +GO(XServerVendor, pFX) +GO(XSetAccessControl, iFXi) +//GOM(XSetAfterFunction, pFEXp) +GO(XSetArcMode, iFXpi) +GO(XSetAuthorization, vFpipi) +GO(XSetBackground, iFXpL) +GO(XSetClassHint, iFXLbpp_) +GO(XSetClipMask, iFXpL) +GO(XSetClipOrigin, iFXpii) +GO(_XSetClipRectangles, vFXpiipii) +GO(XSetClipRectangles, iFXpiipii) +GO(XSetCloseDownMode, iFXi) +GO(XSetCommand, iFXLbp_i) +GO(XSetDashes, iFXpipi) +GOM(XSetErrorHandler, pFEp) +GO(XSetFillRule, iFXpi) +GO(XSetFillStyle, iFXpi) +GO(XSetFont, iFXpL) +GO(XSetFontPath, iFXbp_i) +GO(XSetForeground, iFXpL) +GO(XSetFunction, iFXpi) +GO(XSetGraphicsExposures, iFXpi) +GO(XSetICFocus, vFp) +GO(XSetIconName, iFXLp) +GO(XSetIconSizes, iFXLpi) +GOM(XSetICValues, pFEpV) +//GO(_XSetImage, +GOM(XSetIMValues, pFEpV) +GO(XSetInputFocus, iFXLiL) +//GOM(XSetIOErrorExitHandler, vFEXpp) +GOM(XSetIOErrorHandler, pFEp) +GO(_XSetLastRequestRead, LFXp) +GO(XSetLineAttributes, iFXpuiii) +GO(XSetLocaleModifiers, pFp) +GO(XSetModifierMapping, iFXbip_) +//GO(XSetNormalHints, iFpLp) +//GOM(XSetOCValues, pFEpV) +//GOM(XSetOMValues, pFEpV) +GO(XSetPlaneMask, iFXpL) +GO(XSetPointerMapping, iFXpi) +GO(XSetRegion, iFXpp) +GO(XSetRGBColormaps, vFXLbLLLLLLLLLL_iL) +GO(XSetScreenSaver, iFXiiii) +GO(XSetSelectionOwner, iFXLLL) +//GO(XSetSizeHints, iFpLpL) +GO(XSetStandardColormap, vFXLbLLLLLLLLLL_L) +GO(XSetStandardProperties, iFXLppLpip) +GO(XSetState, iFXpLLiL) +GO(XSetStipple, iFXpL) +GO(XSetSubwindowMode, iFXpi) +GO(XSetTextProperty, vFXLbpLiL_L) +GO(XSetTile, iFXpL) +GO(XSetTransientForHint, iFXLL) +GO(XSetTSOrigin, iFXpii) +GO(XSetWindowBackground, iFXLL) +GO(XSetWindowBackgroundPixmap, iFXLL) +GO(XSetWindowBorder, iFXLL) +GO(XSetWindowBorderPixmap, iFXLL) +GO(XSetWindowBorderWidth, iFXLu) +GO(XSetWindowColormap, iFXLL) +GO(XSetWMClientMachine, vFXLbpLiL_) +GO(XSetWMColormapWindows, iFXLbL_i) +GOM(XSetWMHints, iFEXLp) +GO(XSetWMIconName, vFXLrpLiL_) +GO(XSetWMName, vFXLrpLiL_) +GOM(XSetWMNormalHints, vFEXLp) +GOM(XSetWMProperties, vFEXLpppippp) +GOM(XSetWMProtocols, iFEXLpi) +//GO(XSetWMSizeHints, vFpLpL) +//GO(XSetZoomHints, iFpLp) +GO(XShrinkRegion, iFpii) +GO(XStoreBuffer, iFXpii) +GO(XStoreBytes, iFXpi) +GO(XStoreColor, iFXLbLWWWcc_) +GOM(XStoreColors, iFEXLpi) +//GO(_XStoreEventCookie, vFpp) +GO(XStoreName, iFXLp) +GO(XStoreNamedColor, iFXLpLi) +GOM(XStringListToTextProperty, iFEpip) +GO(XStringToKeysym, LFp) +GOM(XSubImage, pFEpiiuu) // need unbridging +GO(dummy_XSubImage, pFpiiuu) // for the wrapper +GO(XSubtractRegion, iFppp) +GO(XSupportsLocale, iFv) +GO(XSync, iFXi) +GOM(XSynchronize, pFEXi) +GOM(XTextExtents, iFEppipppp) +//GO(XTextExtents16, iFppipppp) +//GO(_XTextHeight, iFppi) +//GO(_XTextHeight16, iFppi) +//GO(XTextPropertyToStringList, iFbpLiL_bbp__p) +//GO(XTextWidth, iFppi) +//GO(XTextWidth16, iFppi) +//DATAB(_Xthread_self_fn, 4) +GO(XTranslateCoordinates, iFXLLiippBL_) +//GO(_XTranslateKey, +//GO(_XTranslateKeySym, +//GO(_XTryShapeBitmapCursor, +GO(XUndefineCursor, iFXL) +GO(XUngrabButton, iFXuuL) +GO(XUngrabKey, iFXiuL) +GO(XUngrabKeyboard, iFXL) +GO(XUngrabPointer, iFXL) +GO(XUngrabServer, iFX) +GO(XUninstallColormap, iFXL) +GO(XUnionRectWithRegion, iFppp) +GO(XUnionRegion, iFppp) +//GO(_XUnknownCopyEventCookie, iFXbiLiXiiup_biLiXiiup_) +//GO(_XUnknownNativeEvent, iFppp) +//GO(_XUnknownWireEvent, iFppp) +//GO(_XUnknownWireEventCookie, iFppp) +GO(XUnloadFont, iFXL) +GO(XUnlockDisplay, vFX) +DATA(_XUnlockMutex_fn, 4) +GO(XUnmapSubwindows, iFXL) +GO(XUnmapWindow, iFXL) +//GO(_XUnregisterFilter, +GOM(XUnregisterIMInstantiateCallback, iFEXppppp) +GO(_XUnregisterInternalConnection, vFXi) +//GO(_XUnresolveColor, +GO(XUnsetICFocus, vFp) +//GO(_XUpdateAtomCache, +//GO(_XUpdateGCCache, +//GO(_Xutf8DefaultDrawImageString, +//GO(_Xutf8DefaultDrawString, +//GO(_Xutf8DefaultTextEscapement, +//GO(_Xutf8DefaultTextExtents, +//GO(_Xutf8DefaultTextPerCharExtents, +GO(Xutf8DrawImageString, vFXLppiipi) +GO(Xutf8DrawString, vFXLppiipi) +GO(Xutf8DrawText, vFXLpiibpiip_i) +//GO(_Xutf8GenericDrawImageString, +//GO(_Xutf8GenericDrawString, +//GO(_Xutf8GenericTextEscapement, +//GO(_Xutf8GenericTextExtents, +//GO(_Xutf8GenericTextPerCharExtents, +GOM(Xutf8LookupString, iFEpppipp) +GO(Xutf8ResetIC, pFp) +GOM(Xutf8SetWMProperties, vFEXLpppippp) // Warning: failed to confirm +GO(Xutf8TextEscapement, iFppi) +GO(Xutf8TextExtents, iFppipp) +//GO(_Xutf8TextListToTextProperty, +GOM(Xutf8TextListToTextProperty, iFEXpiup) +GO(Xutf8TextPerCharExtents, iFppippippp) +//GO(_Xutf8TextPropertyToTextList, +//GO(Xutf8TextPropertyToTextList, iFXbpLiL_bbp__p) +GOM(XVaCreateNestedList, pFEiV) +GO(XVendorRelease, iFX) +GO(_XVIDtoVisual, pFXL) +GOM(XVisualIDFromVisual, LFEp) +GO(XWarpPointer, iFXLLiiuuii) +//GO(_XwcDefaultDrawImageString, +//GO(_XwcDefaultDrawString, +//GO(_XwcDefaultTextEscapement, +//GO(_XwcDefaultTextExtents, +//GO(_XwcDefaultTextPerCharExtents, +GO(XwcDrawImageString, vFXLppiipi) +GO(XwcDrawString, vFXLppiipi) +GO(XwcDrawText, vFXLpiibpiip_i) +//GO(_XwcFreeStringList, +GO(XwcFreeStringList, vFbp_) +//GO(_XwcGenericDrawImageString, +//GO(_XwcGenericDrawString, +//GO(_XwcGenericTextEscapement, +//GO(_XwcGenericTextExtents, +//GO(_XwcGenericTextPerCharExtents, +//GO(XwcLookupString, iFpbiLiXLLLLiiiiuui_pibL_p) +GO(XwcResetIC, pFp) +//GO(_Xwcscmp, +//GO(_Xwcscpy, +//GO(_Xwcslen, +//GO(_Xwcsncmp, +//GO(_Xwcsncpy, +//GO(_Xwcstombs, +GO(XwcTextEscapement, iFppi) +GO(XwcTextExtents, iFppipp) +//GO(_XwcTextListToTextProperty, +//GO(XwcTextListToTextProperty, iFXbp_iubpLiL_) +GO(XwcTextPerCharExtents, iFppippippp) +//GO(_XwcTextPropertyToTextList, +//GO(XwcTextPropertyToTextList, iFXbpLiL_bbp__p) +GO(_Xwctomb, iFpi) +GO(XWhitePixel, LFXi) +//GOM(XWhitePixelOfScreen, LFEbpXLiiiiipippLLLiiiil_) +//GOM(XWidthMMOfScreen, iFEbpXLiiiiipippLLLiiiil_) +//GOM(XWidthOfScreen, iFEbpXLiiiiipippLLLiiiil_) +GOM(XWindowEvent, iFEXLlp) +//GO(_XWireToEvent, iFppp) +GO(XWithdrawWindow, iFXLi) +//GO(XWMGeometry, iFpippupppppp) +GO(XWriteBitmapFile, iFXpLuuii) +GO(XXorRegion, iFppp) + +//GO(_XData32, iFppu) +//GO(_XRead32, vFppl) + +GO(dummy_putpixel, iFpiiL) +GO(dummy_addpixel, iFpl) +GO(dummy_vFp, vFp) diff --git a/src/wrapped32/wrappedlibxcomposite.c b/src/wrapped32/wrappedlibxcomposite.c new file mode 100644 index 0000000000000000000000000000000000000000..5cb481da2aaf4d40d8d565706bee2aa0c951271b --- /dev/null +++ b/src/wrapped32/wrappedlibxcomposite.c @@ -0,0 +1,25 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "debug.h" +#include "box32.h" + +#ifdef ANDROID + static const char* libxcompositeName = "libXcomposite.so"; +#else + static const char* libxcompositeName = "libXcomposite.so.1"; +#endif + +#define LIBNAME libxcomposite + +#include "wrappedlib_init32.h" + diff --git a/src/wrapped32/wrappedlibxcomposite_private.h b/src/wrapped32/wrappedlibxcomposite_private.h new file mode 100644 index 0000000000000000000000000000000000000000..d2a983c074dc03e264fda9909eae0b7cfb687c7d --- /dev/null +++ b/src/wrapped32/wrappedlibxcomposite_private.h @@ -0,0 +1,16 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(XCompositeCreateRegionFromBorderClip, LFXL) +//GO(XCompositeFindDisplay, pFX) +GO(XCompositeGetOverlayWindow, LFXL) +GO(XCompositeNameWindowPixmap, LFXL) +GO(XCompositeQueryExtension, iFXpp) +GO(XCompositeQueryVersion, iFXpp) +GO(XCompositeRedirectSubwindows, vFXLi) +GO(XCompositeRedirectWindow, vFXLi) +GO(XCompositeReleaseOverlayWindow, vFXL) +GO(XCompositeUnredirectSubwindows, vFXLi) +GO(XCompositeUnredirectWindow, vFXLi) +GO(XCompositeVersion, iFv) diff --git a/src/wrapped32/wrappedlibxcursor.c b/src/wrapped32/wrappedlibxcursor.c new file mode 100644 index 0000000000000000000000000000000000000000..655484eefda17d2037436601800fac88ae766ec8 --- /dev/null +++ b/src/wrapped32/wrappedlibxcursor.c @@ -0,0 +1,81 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" + +#ifdef ANDROID + static const char* libxcursorName = "libXcursor.so"; +#else + static const char* libxcursorName = "libXcursor.so.1"; +#endif + +#define LIBNAME libxcursor + +#ifdef ANDROID +#define NEEDED_LIBS "libX11.so", "libXfixes.so", "libXrender.so" +#else +#define NEEDED_LIBS "libX11.so.6", "libXfixes.so.3", "libXrender.so.1" +#endif + +#include "libtools/my_x11_defs.h" +#include "libtools/my_x11_defs_32.h" + +#include "generated/wrappedlibxcursortypes32.h" + +#include "wrappercallback32.h" + +void* getDisplay(void*); +void* FindDisplay(void*); + +void inplace_XcursorCursors_shrink(void* a) +{ + if(!a) return; + my_XcursorCursors_t* src = a; + my_XcursorCursors_32_t* dst = a; + + dst->dpy = to_ptrv(getDisplay(src->dpy)); + dst->ref = src->ref; + dst->ncursor = src->ncursor; + dst->cursors = to_ptrv(src->cursors); +} +void inplace_XcursorCursors_enlarge(void* a) +{ + if(!a) return; + my_XcursorCursors_32_t* src = a; + my_XcursorCursors_t* dst = a; + + dst->cursors = from_ptrv(src->cursors); + dst->ncursor = src->ncursor; + dst->ref = src->ref; + dst->dpy = FindDisplay(from_ptrv(src->dpy)); +} + +EXPORT void* my32_XcursorCursorsCreate(x64emu_t* emu, void* dpy, int n) +{ + void* ret = my->XcursorCursorsCreate(dpy, n); + inplace_XcursorCursors_shrink(ret); + return ret; +} + +EXPORT void my32_XcursorCursorsDestroy(x64emu_t* emu, void* a) +{ + inplace_XcursorCursors_enlarge(a); + my->XcursorCursorsDestroy(a); +} + +#include "wrappedlib_init32.h" + diff --git a/src/wrapped32/wrappedlibxcursor_private.h b/src/wrapped32/wrappedlibxcursor_private.h new file mode 100644 index 0000000000000000000000000000000000000000..7d2a07eeb8df82b1f4596b88ffb07f5e93806b18 --- /dev/null +++ b/src/wrapped32/wrappedlibxcursor_private.h @@ -0,0 +1,66 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +//GO(XcursorAnimateCreate, pFp) +//GO(XcursorAnimateDestroy, vFp) +//GO(XcursorAnimateNext, LFp) +//GO(XcursorCommentCreate, pFui) +//GO(XcursorCommentDestroy, vFp) +//GO(XcursorCommentsCreate, pFi) +//GO(XcursorCommentsDestroy, vFp) +//GO(_XcursorCreateFontCursor, +//GO(_XcursorCreateGlyphCursor, +GOM(XcursorCursorsCreate, pFEXi) +GOM(XcursorCursorsDestroy, vFEp) +//GO(XcursorFileLoad, iFSpp) +//GO(XcursorFileLoadAllImages, pFS) +//GO(XcursorFileLoadImage, pFSi) +//GO(XcursorFileLoadImages, pFSi) +//GO(XcursorFilenameLoad, iFppp) +//GO(XcursorFilenameLoadAllImages, pFp) +//GO(XcursorFilenameLoadCursor, LFpp) +//GO(XcursorFilenameLoadCursors, pFpp) +//GO(XcursorFilenameLoadImage, pFpi) +//GO(XcursorFilenameLoadImages, pFpi) +//GO(XcursorFilenameSave, iFppp) +//GO(XcursorFilenameSaveImages, iFpp) +//GO(XcursorFileSave, iFSpp) +//GO(XcursorFileSaveImages, iFSp) +//GO(XcursorGetDefaultSize, iFp) +//GO(_XcursorGetDisplayInfo, +//GO(XcursorGetTheme, pFp) +//GO(XcursorGetThemeCore, iFp) +GO(XcursorImageCreate, pFii) +GO(XcursorImageDestroy, vFp) +//GOM(XcursorImageHash, vFEpp) // needs unbridge XImage (first p) +GO(XcursorImageLoadCursor, LFXp) +GO(XcursorImagesCreate, pFi) +GO(XcursorImagesDestroy, vFp) +GO(XcursorImagesLoadCursor, LFXp) +//GO(XcursorImagesLoadCursors, pFpp) +//GO(XcursorImagesSetName, vFpp) +GO(XcursorLibraryLoadCursor, LFXp) +//GO(XcursorLibraryLoadCursors, pFpp) +//GO(XcursorLibraryLoadImage, pFppi) +//GO(XcursorLibraryLoadImages, pFppi) +//GO(XcursorLibraryPath, pFv) +//GO(XcursorLibraryShape, iFp) +//GO(XcursorNoticeCreateBitmap, vFpLuu) +//GOM(XcursorNoticePutBitmap, vFEpLp) //needs unbridge XImage (last p) +//GO(XcursorSetDefaultSize, iFpi) +//GO(XcursorSetTheme, iFpp) +//GO(XcursorSetThemeCore, iFpi) +//GO(XcursorShapeLoadCursor, LFpu) +//GO(XcursorShapeLoadCursors, pFpu) +//GO(XcursorShapeLoadImage, pFupi) +//GO(XcursorShapeLoadImages, pFupi) +//GO(XcursorSupportsAnim, iFp) +//GO(XcursorSupportsARGB, iFp) +//GO(XcursorTryShapeBitmapCursor, LFpLLppuu) +//GO(XcursorTryShapeCursor, LFpLLuupp) +//GO(XcursorXcFileLoad, iFppp) +//GO(XcursorXcFileLoadAllImages, pFp) +//GO(XcursorXcFileLoadImage, pFpi) +//GO(XcursorXcFileLoadImages, pFpi) +//GO(XcursorXcFileSave, iFppp) diff --git a/src/wrapped32/wrappedlibxext.c b/src/wrapped32/wrappedlibxext.c new file mode 100644 index 0000000000000000000000000000000000000000..8acbdee73406a95fd3067ce80f72c6da4d6a13d1 --- /dev/null +++ b/src/wrapped32/wrappedlibxext.c @@ -0,0 +1,590 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" +#include "elfloader.h" +#include "converter32.h" + +#ifdef ANDROID + static const char* libxextName = "libXext.so"; +#else + static const char* libxextName = "libXext.so.6"; +#endif + +#define LIBNAME libxext + +#include "libtools/my_x11_conv.h" + +typedef struct _XImage XImage; +void BridgeImageFunc(x64emu_t *emu, XImage *img); +void UnbridgeImageFunc(x64emu_t *emu, XImage *img); +typedef int (*XextErrorHandler)(void *, void *, void*); +typedef int (*iFpp_t)(void*, void*); +typedef int (*iFppp_t)(void*, void*, void*); + +#include "generated/wrappedlibxexttypes32.h" + +#include "wrappercallback32.h" + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// exterrorhandle ... +#define GO(A) \ +static uintptr_t my_exterrorhandle_fct_##A = 0; \ +static int my_exterrorhandle_##A(void* display, void* ext_name, void* reason) \ +{ \ + return RunFunctionFmt(my_exterrorhandle_fct_##A, "ppp", getDisplay(display), ext_name, reason); \ +} +SUPER() +#undef GO +static void* find_exterrorhandle_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_exterrorhandle_fct_##A == (uintptr_t)fct) return my_exterrorhandle_##A; + SUPER() + #undef GO + #define GO(A) if(my_exterrorhandle_fct_##A == 0) {my_exterrorhandle_fct_##A = (uintptr_t)fct; return my_exterrorhandle_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libXext exterrorhandle callback\n"); + return NULL; +} +static void* reverse_exterrorhandleFct(void* fct) +{ + if(!fct) return fct; + if(CheckBridged(my_lib->w.bridge, fct)) + return (void*)CheckBridged(my_lib->w.bridge, fct); + #define GO(A) if(my_exterrorhandle_##A == fct) return (void*)my_exterrorhandle_fct_##A; + SUPER() + #undef GO + return (void*)AddBridge(my_lib->w.bridge, iFppp_32, fct, 0, NULL); +} +// create_gc ... +#define GO(A) \ +static uintptr_t my_create_gc_fct_##A = 0; \ +static int my_create_gc_##A(void* a, uint32_t b, void* c) \ +{ \ + return RunFunctionFmt(my_create_gc_fct_##A, "pup", getDisplay(a), b, c); \ +} +SUPER() +#undef GO +static void* find_create_gc_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_create_gc_fct_##A == (uintptr_t)fct) return my_create_gc_##A; + SUPER() + #undef GO + #define GO(A) if(my_create_gc_fct_##A == 0) {my_create_gc_fct_##A = (uintptr_t)fct; return my_create_gc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libXext create_gc callback\n"); + return NULL; +} +// copy_gc ... +#define GO(A) \ +static uintptr_t my_copy_gc_fct_##A = 0; \ +static int my_copy_gc_##A(void* a, uint32_t b, void* c) \ +{ \ + return RunFunctionFmt(my_copy_gc_fct_##A, "pup", getDisplay(a), b, c); \ +} +SUPER() +#undef GO +static void* find_copy_gc_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_copy_gc_fct_##A == (uintptr_t)fct) return my_copy_gc_##A; + SUPER() + #undef GO + #define GO(A) if(my_copy_gc_fct_##A == 0) {my_copy_gc_fct_##A = (uintptr_t)fct; return my_copy_gc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libXext copy_gc callback\n"); + return NULL; +} +// flush_gc ... +#define GO(A) \ +static uintptr_t my_flush_gc_fct_##A = 0; \ +static int my_flush_gc_##A(void* a, uint32_t b, void* c) \ +{ \ + return RunFunctionFmt(my_flush_gc_fct_##A, "pup", getDisplay(a), b, c); \ +} +SUPER() +#undef GO +static void* find_flush_gc_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_flush_gc_fct_##A == (uintptr_t)fct) return my_flush_gc_##A; + SUPER() + #undef GO + #define GO(A) if(my_flush_gc_fct_##A == 0) {my_flush_gc_fct_##A = (uintptr_t)fct; return my_flush_gc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libXext flush_gc callback\n"); + return NULL; +} +// free_gc ... +#define GO(A) \ +static uintptr_t my_free_gc_fct_##A = 0; \ +static int my_free_gc_##A(void* a, uint32_t b, void* c) \ +{ \ + return RunFunctionFmt(my_free_gc_fct_##A, "pup", getDisplay(a), b, c); \ +} +SUPER() +#undef GO +static void* find_free_gc_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_free_gc_fct_##A == (uintptr_t)fct) return my_free_gc_##A; + SUPER() + #undef GO + #define GO(A) if(my_free_gc_fct_##A == 0) {my_free_gc_fct_##A = (uintptr_t)fct; return my_free_gc_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libXext free_gc callback\n"); + return NULL; +} +// create_font ... +#define GO(A) \ +static uintptr_t my_create_font_fct_##A = 0; \ +static int my_create_font_##A(void* a, void* b, void* c) \ +{ \ + inplace_XFontStruct_shrink(b); \ + int ret = RunFunctionFmt(my_create_font_fct_##A, "ppp", getDisplay(a), b, c); \ + inplace_XFontStruct_enlarge(b); \ + return ret; \ +} +SUPER() +#undef GO +static void* find_create_font_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_create_font_fct_##A == (uintptr_t)fct) return my_create_font_##A; + SUPER() + #undef GO + #define GO(A) if(my_create_font_fct_##A == 0) {my_create_font_fct_##A = (uintptr_t)fct; return my_create_font_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libXext create_font callback\n"); + return NULL; +} +// free_font ... +#define GO(A) \ +static uintptr_t my_free_font_fct_##A = 0; \ +static int my_free_font_##A(void* a, void* b, void* c) \ +{ \ + inplace_XFontStruct_shrink(b); \ + int ret = RunFunctionFmt(my_free_font_fct_##A, "ppp", getDisplay(a), b, c); \ + inplace_XFontStruct_enlarge(b); \ + return ret; \ +} +SUPER() +#undef GO +static void* find_free_font_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_free_font_fct_##A == (uintptr_t)fct) return my_free_font_##A; + SUPER() + #undef GO + #define GO(A) if(my_free_font_fct_##A == 0) {my_free_font_fct_##A = (uintptr_t)fct; return my_free_font_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libXext free_font callback\n"); + return NULL; +} +// close_display ... +#define GO(A) \ +static uintptr_t my_close_display_fct_##A = 0; \ +static int my_close_display_##A(void* a, void* b) \ +{ \ + return RunFunctionFmt(my_close_display_fct_##A, "pp", getDisplay(a), b); \ +} +SUPER() +#undef GO +static void* find_close_display_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_close_display_fct_##A == (uintptr_t)fct) return my_close_display_##A; + SUPER() + #undef GO + #define GO(A) if(my_close_display_fct_##A == 0) {my_close_display_fct_##A = (uintptr_t)fct; return my_close_display_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libXext close_display callback\n"); + return NULL; +} +// wire_to_event +#define GO(A) \ +static uintptr_t my32_wire_to_event_fct_##A = 0; \ +static int my32_wire_to_event_##A(void* dpy, void* re, void* event) \ +{ \ + static my_XEvent_32_t re_s = {0}; \ + int ret = (int)RunFunctionFmt(my32_wire_to_event_fct_##A, "ppp", getDisplay(dpy), &re_s, event);\ + unconvertXEvent(re, &re_s); \ + return ret; \ +} +SUPER() +#undef GO +#define GO(A) \ +static iFppp_t my32_rev_wire_to_event_fct_##A = NULL; \ +static int my32_rev_wire_to_event_##A(void* dpy, void* re, void* event) \ +{ \ + static my_XEvent_t re_l = {0}; \ + int ret = my32_rev_wire_to_event_fct_##A (getDisplay(dpy), &re_l, event); \ + convertXEvent(re, &re_l); \ +} +SUPER() +#undef GO +static void* find_wire_to_event_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_wire_to_event_fct_##A == (uintptr_t)fct) return my32_wire_to_event_##A; + SUPER() + #undef GO + #define GO(A) if(my32_wire_to_event_fct_##A == 0) {my32_wire_to_event_fct_##A = (uintptr_t)fct; return my32_wire_to_event_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 wire_to_event callback\n"); + return NULL; +} +static void* reverse_wire_to_event_Fct(library_t* lib, void* fct) +{ + //Callsed from x86 world -> native world + if(!fct) return fct; + // first check if it's a wrapped function, that could be easy + #define GO(A) if(my32_wire_to_event_##A == fct) return (void*)my32_wire_to_event_fct_##A; + SUPER() + #undef GO + if(FindElfAddress(my_context, (uintptr_t)fct)) + return fct; + // it's a naitve one... so bridge it, but need transform XImage32 to XImage + void* f = NULL; + #define GO(A) if(!f && my32_rev_wire_to_event_fct_##A == fct) f = (void*)my32_rev_wire_to_event_##A; + SUPER() + #undef GO + #define GO(A) if(!f && !my32_rev_wire_to_event_fct_##A) {my32_rev_wire_to_event_fct_##A = fct; f = my32_rev_wire_to_event_##A;} + SUPER() + #undef GO + if(f) + return (void*)AddCheckBridge(lib->w.bridge, iFppp_32, f, 0, "X11_wire_to_event"); + printf_log(LOG_NONE, "Warning, no more slot for reverse 32bits libX11 wire_to_event callback\n"); + return fct; +} + +// event_to_wire +#define GO(A) \ +static uintptr_t my32_event_to_wire_fct_##A = 0; \ +static int my32_event_to_wire_##A(void* dpy, void* re, void* event) \ +{ \ + my_XEvent_32_t re_s = {0}; \ + convertXEvent(&re_s, re); \ + return (int)RunFunctionFmt(my32_event_to_wire_fct_##A, "ppp", getDisplay(dpy), &re_s, event); \ +} +SUPER() +#undef GO +#define GO(A) \ +static iFppp_t my32_rev_event_to_wire_fct_##A = NULL; \ +static int my32_rev_event_to_wire_##A(void* dpy, void* re, void* event) \ +{ \ + static my_XEvent_t re_l = {0}; \ + unconvertXEvent(&re_l, re); \ + return my32_rev_event_to_wire_fct_##A (getDisplay(dpy), &re_l, event); \ +} +SUPER() +#undef GO +static void* find_event_to_wire_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_event_to_wire_fct_##A == (uintptr_t)fct) return my32_event_to_wire_##A; + SUPER() + #undef GO + #define GO(A) if(my32_event_to_wire_fct_##A == 0) {my32_event_to_wire_fct_##A = (uintptr_t)fct; return my32_event_to_wire_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libX11 event_to_wire callback\n"); + return NULL; +} +static void* reverse_event_to_wire_Fct(library_t* lib, void* fct) +{ + //Callsed from x86 world -> native world + if(!fct) return fct; + // first check if it's a wrapped function, that could be easy + #define GO(A) if(my32_event_to_wire_##A == fct) return (void*)my32_event_to_wire_fct_##A; + SUPER() + #undef GO + if(FindElfAddress(my_context, (uintptr_t)fct)) + return fct; + // it's a naitve one... so bridge it, but need transform XImage32 to XImage + void* f = NULL; + #define GO(A) if(!f && my32_rev_event_to_wire_fct_##A == fct) f = (void*)my32_rev_event_to_wire_##A; + SUPER() + #undef GO + #define GO(A) if(!f && !my32_rev_event_to_wire_fct_##A) {my32_rev_event_to_wire_fct_##A = fct; f = my32_rev_event_to_wire_##A;} + SUPER() + #undef GO + if(f) + return (void*)AddCheckBridge(lib->w.bridge, iFppp_32, f, 0, "Xext_event_to_wire"); + printf_log(LOG_NONE, "Warning, no more slot for reverse 32bits libXext event_to_wire callback\n"); + return fct; +} +// error ... +#define GO(A) \ +static uintptr_t my_error_fct_##A = 0; \ +static int my_error_##A(void* a, void* b, void* c, int* d) \ +{ \ + return RunFunctionFmt(my_error_fct_##A, "pppp", getDisplay(a), b, c, d); \ +} +SUPER() +#undef GO +static void* find_error_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_error_fct_##A == (uintptr_t)fct) return my_error_##A; + SUPER() + #undef GO + #define GO(A) if(my_error_fct_##A == 0) {my_error_fct_##A = (uintptr_t)fct; return my_error_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libXext error callback\n"); + return NULL; +} +// error_string ... +#define GO(A) \ +static uintptr_t my_error_string_fct_##A = 0; \ +static int my_error_string_##A(void* a, int b, void* c, void* d, int e) \ +{ \ + return RunFunctionFmt(my_error_string_fct_##A, "pippi", getDisplay(a), b, c, d, e); \ +} +SUPER() +#undef GO +static void* find_error_string_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_error_string_fct_##A == (uintptr_t)fct) return my_error_string_##A; + SUPER() + #undef GO + #define GO(A) if(my_error_string_fct_##A == 0) {my_error_string_fct_##A = (uintptr_t)fct; return my_error_string_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libXext error_string callback\n"); + return NULL; +} + +#undef SUPER + +KHASH_MAP_INIT_INT(shminfo, my_XShmSegmentInfo_t*); +static kh_shminfo_t* shminfos = NULL; + +my_XShmSegmentInfo_t* getShmInfo(void* a) +{ + if(!a) return NULL; + ptr_t key = to_ptrv(a); + khint_t k = kh_get(shminfo, shminfos, key); + my_XShmSegmentInfo_t* ret = NULL; + if(k==kh_end(shminfos)) { + int r; + k = kh_put(shminfo, shminfos, key, &r); + ret = kh_value(shminfos, k) = calloc(1, sizeof(my_XShmSegmentInfo_t)); + } else + ret = kh_value(shminfos, k); + convert_XShmSegmentInfo_to_64(ret, a); + return ret; +} + +void delShmInfo(my_XShmSegmentInfo_t* a) +{ + if(!a) return; + my_XShmSegmentInfo_t* b; + kh_foreach_value(shminfos, b, + if(a==b) { + free(a); + kh_del(shminfo, shminfos, __i); + return; + } + ); +} + +EXPORT void* my32_XShmCreateImage(x64emu_t* emu, void* disp, void* vis, uint32_t depth, int32_t fmt + , void* data, void* shminfo, uint32_t w, uint32_t h) +{ + my_XShmSegmentInfo_t* shminfo_l = getShmInfo(shminfo); + XImage *img = my->XShmCreateImage(disp, convert_Visual_to_64(disp, vis), depth, fmt, data, shminfo_l, w, h); + convert_XShmSegmentInfo_to_32(shminfo, shminfo_l); + inplace_XImage_shrink(img); + return img; +} + +EXPORT int32_t my32_XShmPutImage(x64emu_t* emu, void* disp, size_t drawable, void* gc, void* image + , int32_t src_x, int32_t src_y, int32_t dst_x, int32_t dst_y + , uint32_t w, uint32_t h, int32_t sendevt) +{ + inplace_XImage_enlarge(image); + int32_t r = my->XShmPutImage(disp, drawable, gc, image, src_x, src_y, dst_x, dst_y, w, h, sendevt); + inplace_XImage_shrink(image); + return r; +} + +EXPORT int32_t my32_XShmGetImage(x64emu_t* emu, void* disp, size_t drawable, void* image, int32_t x, int32_t y, size_t plane) +{ + inplace_XImage_enlarge(image); + int32_t r = my->XShmGetImage(disp, drawable, image, x, y, plane); + inplace_XImage_shrink(image); + return r; +} + +EXPORT XID my32_XShmCreatePixmap(x64emu_t* emu, void* dpy, XID d, void* data, void* shminfo, uint32_t width, uint32_t height, uint32_t depth) +{ + my_XShmSegmentInfo_t* shminfo_l = getShmInfo(shminfo); + XID ret = my->XShmCreatePixmap(dpy, d, data, shminfo_l, width, height, depth); + convert_XShmSegmentInfo_to_32(shminfo, shminfo_l); // just in case + return ret; +} + +EXPORT int my32_XShmAttach(x64emu_t* emu, void* dpy, void* shminfo) +{ + my_XShmSegmentInfo_t* shminfo_l = getShmInfo(shminfo); + int ret = my->XShmAttach(dpy, shminfo_l); + convert_XShmSegmentInfo_to_32(shminfo, shminfo_l); // just in case + return ret; +} + +EXPORT int my32_XShmDetach(x64emu_t* emu, void* dpy, void* shminfo) +{ + my_XShmSegmentInfo_t* shminfo_l = getShmInfo(shminfo); + int ret = my->XShmDetach(dpy, shminfo_l); + convert_XShmSegmentInfo_to_32(shminfo, shminfo_l); // just in case + return ret; +} + +EXPORT void* my32_XSetExtensionErrorHandler(x64emu_t* emu, void* handler) +{ + (void)emu; + return reverse_exterrorhandleFct(my->XSetExtensionErrorHandler(find_exterrorhandle_Fct(handler))); +} + +//EXPORT void* my32_XextAddDisplay(x64emu_t* emu, void* extinfo, void* dpy, void* extname, my32_XExtensionHooks* hooks, int nevents, void* data) +//{ +// my32_XExtensionHooks natives = {0}; +// #define GO(A) natives.A = find_##A##_Fct(hooks->A); +// GO(create_gc) +// GO(copy_gc) +// GO(flush_gc) +// GO(free_gc) +// GO(create_font) +// GO(free_font) +// GO(close_display) +// GO(wire_to_event) +// GO(event_to_wire) +// GO(error) +// GO(error_string) +// #undef GO +// void *ret = my->XextAddDisplay(extinfo, dpy, extname, &natives, nevents, data); +// return ret; +//} + +EXPORT void* my32_XdbeGetVisualInfo(x64emu_t* emu, void* dpy, XID_32* draws, int* num) +{ + XID draws_l[*num]; + if(*num) + for(int i=0; i<*num; ++i) + draws_l[i] = from_ulong(draws[i]); + my_XdbeScreenVisualInfo_t* ret = my->XdbeGetVisualInfo(dpy, draws_l, num); + inplace_XdbeScreenVisualInfo_shrink(ret); + return ret; +} + +EXPORT void my32_XdbeFreeVisualInfo(x64emu_t* emu, void* infos) +{ + inplace_XdbeScreenVisualInfo_enlarge(infos); + my->XdbeFreeVisualInfo(infos); +} + +EXPORT void* my32_XextCreateExtension(x64emu_t* emu) +{ + return inplace_XExtensionInfo_shrink(my->XextCreateExtension()); +} + +EXPORT void my32_XextDestroyExtension(x64emu_t* emu, void* ext) +{ + my->XextDestroyExtension(inplace_XExtensionInfo_enlarge(ext)); +} + +EXPORT void* my32_XextAddDisplay(x64emu_t* emu, void* ext, void* dpy, void* name, my_XExtensionHooks_32_t* hooks, int nevents, void* data) +{ + my_XExtensionHooks_t hooks_l = {0}; + if(hooks) { + #define GO(A) hooks_l.A = find_##A##_Fct(from_ptrv(hooks->A)) + GO(create_gc); + GO(copy_gc); + GO(flush_gc); + GO(free_gc); + GO(create_font); + GO(free_font); + GO(close_display); + GO(wire_to_event); + GO(event_to_wire); + GO(error); + GO(error_string); + #undef GO + } + inplace_XExtensionInfo_shrink(my->XextAddDisplay(inplace_XExtensionInfo_enlarge(ext), dpy, name, hooks?(&hooks_l):NULL, nevents, data)); +} + +EXPORT void* my32_XextFindDisplay(x64emu_t* emu, void* ext, void* dpy) +{ + return inplace_XExtensionInfo_shrink(my->XextFindDisplay(inplace_XExtensionInfo_enlarge(ext), dpy)); +} + +EXPORT int my32_XextRemoveDisplay(x64emu_t* emu, void* ext, void* dpy) +{ + return my->XextRemoveDisplay(inplace_XExtensionInfo_enlarge(ext), dpy); +} + +#if 0 +#ifdef ANDROID +#define NEEDED_LIBS "libX11.so", "libxcb.so", "libXau.so", "libdl.so", "libXdmcp.so" +#else +#define NEEDED_LIBS "libX11.so.6", "libxcb.so.1", "libXau.so.6", "libdl.so.2", "libXdmcp.so.6" +#endif +#endif + +#define CUSTOM_INIT \ + shminfos = kh_init(shminfo); + +#define CUSTOM_FINI \ + my_XShmSegmentInfo_t* info; \ + kh_foreach_value(shminfos, info, free(info)); \ + kh_destroy(shminfo, shminfos); \ + shminfos = NULL; + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibxext_private.h b/src/wrapped32/wrappedlibxext_private.h new file mode 100644 index 0000000000000000000000000000000000000000..0d189dbce1a9b5e39aea103ae8f91c94d45a2356 --- /dev/null +++ b/src/wrapped32/wrappedlibxext_private.h @@ -0,0 +1,139 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(DPMSCapable, iFX) +GO(DPMSDisable, iFX) +GO(DPMSEnable, iFX) +GO(DPMSForceLevel, iFXW) +GO(DPMSGetTimeouts, iFXppp) +GO(DPMSGetVersion, iFXpp) +GO(DPMSInfo, iFXpp) +GO(DPMSQueryExtension, iFXpp) +GO(DPMSSetTimeouts, iFXWWW) +GO(XagCreateAssociation, iFXbL_p) +GO(XagCreateEmbeddedApplicationGroup, iFXLLLLbL_) +GO(XagCreateNonembeddedApplicationGroup, iFXbL_) +GO(XagDestroyApplicationGroup, iFXL) +GO(XagDestroyAssociation, iFXL) +//GOM(XagGetApplicationGroupAttributes, iFEXLV) +GO(XagQueryApplicationGroup, iFXLbL_) +GO(XagQueryVersion, iFXpp) +//GO(XcupGetReservedColormapEntries, iFXibbLWWWcc__p) +GO(XcupQueryVersion, iFXpp) +GO(XcupStoreColors, iFXLbLWWWcc_i) +GO(XdbeAllocateBackBufferName, LFXLC) +GO(XdbeBeginIdiom, iFX) +GO(XdbeDeallocateBackBufferName, iFXL) +GO(XdbeEndIdiom, iFX) +GOM(XdbeFreeVisualInfo, vFEp) +//GO(XdbeGetBackBufferAttributes, bL_FXL) +GOM(XdbeGetVisualInfo, pFEXpp) +GO(XdbeQueryExtension, iFXpp) +GO(XdbeSwapBuffers, iFXbLC_i) +//GO(XeviGetVisualInfo, iFXbL_ibbLiiuuuuubL___p) +GO(XeviQueryExtension, iFX) +GO(XeviQueryVersion, iFXpp) +GOM(XextAddDisplay, pFEpXppip) +GOM(XextCreateExtension, pFEv) +GOM(XextDestroyExtension, vFEp) +//DATAB(_XExtensionErrorFunction, 4) +GOM(XextFindDisplay, pFEpX) +GOM(XextRemoveDisplay, iFEpX) +GO(XGEQueryExtension, iFXpp) +GO(XGEQueryVersion, iFXpp) +GO(XLbxGetEventBase, iFX) +GO(XLbxQueryExtension, iFXppp) +GO(XLbxQueryVersion, iFXpp) +GO(XmbufChangeBufferAttributes, vFXLLbL_) +GO(XmbufChangeWindowAttributes, vFXLLp) +GO(XmbufClearBufferArea, vFXLiiuui) +GO(XmbufCreateBuffers, iFXLiiibL_) +//GOM(XmbufCreateStereoWindow, LFEXLiiuuuiubpLiLLLii_LbLLLLiiiLLilliLL_bL_bL_) +GO(XmbufDestroyBuffers, vFXL) +GO(XmbufDisplayBuffers, vFXibL_ii) +GO(XmbufGetBufferAttributes, iFXLbLLii_) +//GO(XmbufGetScreenInfo, iFXLpbbLii__pbbLii__) +GO(XmbufGetVersion, iFXpp) +//GO(XmbufGetWindowAttributes, iFXLbiiiiibL__) +GO(XmbufQueryExtension, iFXpp) +GO(XMissingExtension, iFXp) +GO(XMITMiscGetBugMode, iFX) +GO(XMITMiscQueryExtension, iFXpp) +GO(XMITMiscSetBugMode, iFXi) +//GO(XSecurityAllocXauth, bWWpWpWpWp_Fv) +GO(XSecurityFreeXauth, vFbWWpWpWpWp_) +//GO(XSecurityGenerateAuthorization, bWWpWpWpWp_FXbWWpWpWpWp_LbuuLl_bL_) +GO(XSecurityQueryExtension, iFXpp) +GO(XSecurityRevokeAuthorization, iFXL) +GOM(XSetExtensionErrorHandler, pFEp) +GO(XShapeCombineMask, vFXLiiiLi) +GO(XShapeCombineRectangles, vFXLiiipiii) +GO(XShapeCombineRegion, vFXLiiipi) +GO(XShapeCombineShape, vFXLiiiLii) +GO(XShapeGetRectangles, pFXLipp) +GO(XShapeInputSelected, LFXL) +GO(XShapeOffsetShape, vFXLiii) +GO(XShapeQueryExtension, iFXpp) +GO(XShapeQueryExtents, iFXLpppppppppp) +GO(XShapeQueryVersion, iFXpp) +GO(XShapeSelectInput, vFXLL) +GOM(XShmAttach, iFEXp) //!\ use shminfo +GOM(XShmCreateImage, pFEXbpLiLLLii_uippuu) //!\ use shminfo +GOM(XShmCreatePixmap, LFEXLppuuu) //!\ use shminfo +GOM(XShmDetach, iFEXp) //!\ use shminfo +GO(XShmGetEventBase, iFX) +GOM(XShmGetImage, iFEXLpiiL) +GO(XShmPixmapFormat, iFX) +GOM(XShmPutImage, iFEXLppiiiiuui) +GO(XShmQueryExtension, iFX) +GO(XShmQueryVersion, iFXppp) +//GO(XSyncAwait, iFppi) +GO(XSyncAwaitFence, iFXbL_i) +//GO(XSyncChangeAlarm, iFpLLp) +//GO(XSyncChangeCounter, iFpuU) +//GO(XSyncCreateAlarm, LFpLp) // XSyncAlarm is an XID +//GO(XSyncCreateCounter, uFpU) // XSyncValue is a struct of 2 int +GO(XSyncCreateFence, LFXLi) +GO(XSyncDestroyAlarm, iFXL) +GO(XSyncDestroyCounter, iFXL) +GO(XSyncDestroyFence, iFXL) +//GO(XSyncFreeSystemCounterList, vFp) +GO(XSyncGetPriority, iFXLp) +GO(XSyncInitialize, iFXpp) +GO(XSyncIntsToValue, vFpui) +GO(XSyncIntToValue, vFpi) +//GOS(XSyncListSystemCounters, bpLp_FXp) +GO(XSyncMaxValue, vFp) +GO(XSyncMinValue, vFp) +//GO(XSyncQueryAlarm, iFpLp) +GO(XSyncQueryCounter, iFXLp) +GO(XSyncQueryExtension, iFXpp) +GO(XSyncQueryFence, iFXLp) +GO(XSyncResetFence, iFXL) +//GO(XSyncSetCounter, iFpuU) // XSyncCounter is an XID +GO(XSyncSetPriority, iFXLi) +GO(XSyncTriggerFence, iFXL) +//GO(XSyncValueAdd, +//GO(XSyncValueEqual, +//GO(XSyncValueGreaterOrEqual, +//GO(XSyncValueGreaterThan, +//GO(XSyncValueHigh32, +//GO(XSyncValueIsNegative, +//GO(XSyncValueIsPositive, +//GO(XSyncValueIsZero, iFp) +//GO(XSyncValueLessOrEqual, +//GO(XSyncValueLessThan, +//GO(XSyncValueLow32, +//GO(XSyncValueSubtract, +//DATA(XTestFakeAckType, 4) +GO(XTestFakeInput, iFXpii) +GO(XTestFlush, iFX) +GO(XTestGetInput, iFXi) +//DATAB(XTestInputActionType, 4) +GO(XTestMovePointer, iFXibL_ppu) +GO(XTestPressButton, iFXiLuu) +GO(XTestPressKey, iFXiLuu) +GO(XTestQueryInputSize, iFXbL_) +GO(XTestReset, iFX) +GO(XTestStopInput, iFX) diff --git a/src/wrapped32/wrappedlibxfixes.c b/src/wrapped32/wrappedlibxfixes.c new file mode 100644 index 0000000000000000000000000000000000000000..cc0f3a22865116f1992a95f5d216fa9a106ef47a --- /dev/null +++ b/src/wrapped32/wrappedlibxfixes.c @@ -0,0 +1,55 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" +#include "converter32.h" + +#ifdef ANDROID + static const char* libxfixesName = "libXfixes.so"; +#else + static const char* libxfixesName = "libXfixes.so.3"; +#endif + +#define LIBNAME libxfixes + +#include "libtools/my_x11_conv.h" + +#include "generated/wrappedlibxfixestypes32.h" + +#include "wrappercallback32.h" + +EXPORT int my32_XFixesQueryExtension(x64emu_t* emu, void* dpy, int* event_base, int* error_base) +{ + int ret = my->XFixesQueryExtension(dpy, event_base, error_base); + if(!ret) return ret; + + register_XFixes_events(*event_base); + return ret; +} + +#if 0 +#ifdef ANDROID +#define NEEDED_LIBS "libX11.so", "libxcb.so", "libXau.so", "libXdmcp.so" +#else +#define NEEDED_LIBS "libX11.so.6", "libxcb.so.1", "libXau.so.6", "libXdmcp.so.6" +#endif +#endif + +#define CUSTOM_FINI \ + unregister_XFixes_events(); + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibxfixes_private.h b/src/wrapped32/wrappedlibxfixes_private.h new file mode 100644 index 0000000000000000000000000000000000000000..01ca05129516b4de7e3cb6a347d3b614cc122d1f --- /dev/null +++ b/src/wrapped32/wrappedlibxfixes_private.h @@ -0,0 +1,42 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(XFixesChangeCursor, vFXLL) +GO(XFixesChangeCursorByName, vFXLp) +GO(XFixesChangeSaveSet, vFXLiii) +GO(XFixesCopyRegion, vFXLL) +GO(XFixesCreatePointerBarrier, LFXLiiiiiip) +GO(XFixesCreateRegion, LFXpi) +GO(XFixesCreateRegionFromBitmap, LFXL) +GO(XFixesCreateRegionFromGC, LFXp) +GO(XFixesCreateRegionFromPicture, LFXL) +GO(XFixesCreateRegionFromWindow, LFXLi) +GO(XFixesDestroyPointerBarrier, vFXL) +GO(XFixesDestroyRegion, vFXL) +GO(XFixesExpandRegion, vFXLLuuuu) +//DATA(XFixesExtensionInfo, sizeof(ptr_t)) //B +//DATA(XFixesExtensionName, sizeof(ptr_t)) //D +GO(XFixesFetchRegion, pFXLp) +GO(XFixesFetchRegionAndBounds, pFXLpp) +//GO(XFixesFindDisplay, pFp) +//GO(XFixesGetCursorImage, bwwWWWWLbL_Lp_FX) +GO(XFixesGetCursorName, pFXLbL_) +GO(XFixesHideCursor, vFXL) +GO(XFixesIntersectRegion, vFXLLL) +GO(XFixesInvertRegion, vFXLpL) +GOM(XFixesQueryExtension, iFEXpp) +GO(XFixesQueryVersion, iFXpp) +GO(XFixesRegionExtents, vFXLL) +GO(XFixesSelectCursorInput, vFXLL) +GO(XFixesSelectSelectionInput, vFXLLL) +GO(XFixesSetCursorName, vFXLp) +GO(XFixesSetGCClipRegion, vFXpiiL) +GO(XFixesSetPictureClipRegion, vFXLiiL) +GO(XFixesSetRegion, vFXLpi) +GO(XFixesSetWindowShapeRegion, vFXLiiiL) +GO(XFixesShowCursor, vFXL) +GO(XFixesSubtractRegion, vFXLLL) +GO(XFixesTranslateRegion, vFXLii) +GO(XFixesUnionRegion, vFXLLL) +GO(XFixesVersion, iFv) diff --git a/src/wrapped32/wrappedlibxi.c b/src/wrapped32/wrappedlibxi.c new file mode 100644 index 0000000000000000000000000000000000000000..570e22400596f19a06d811357511b4bcdb529e93 --- /dev/null +++ b/src/wrapped32/wrappedlibxi.c @@ -0,0 +1,102 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" +#include "converter32.h" + +#ifdef ANDROID + static const char* libxiName = "libXi.so"; +#else + static const char* libxiName = "libXi.so.6"; +#endif + +#define LIBNAME libxi + +#ifdef ANDROID +#define NEEDED_LIBS "libX11.so", "libXext.so" +#else +#define NEEDED_LIBS "libX11.so.6", "libXext.so.6" +#endif + +#include "libtools/my_x11_conv.h" + +#include "generated/wrappedlibxitypes32.h" + +#include "wrappercallback32.h" + +EXPORT void* my32_XIQueryDevice(x64emu_t* emu, void* dpy, int deviceid, int* ndevices) +{ + void* ret = my->XIQueryDevice(dpy, deviceid, ndevices); + inplace_XIDeviceInfo_shrink(ret, *ndevices); + return ret; +} + +EXPORT void my32_XIFreeDeviceInfo(x64emu_t* emu, void* d) +{ + inplace_XIDeviceInfo_enlarge(d); + my->XIFreeDeviceInfo(d); +} + +EXPORT int my32_XISelectEvents(x64emu_t* emu, void* dpy, XID window, my_XIEventMask_32_t* masks, int num) +{ + my_XIEventMask_t masks_l[num]; + for(int i=0; iXISelectEvents(dpy, window, masks_l, num); +} + +EXPORT void* my32_XIGetSelectedEvents(x64emu_t* emu, void* dpy, XID window, int* num) +{ + void* ret = my->XIGetSelectedEvents(dpy, window, num); + if(!ret) return NULL; + //inplace shrink + my_XIEventMask_t* src = ret; + my_XIEventMask_32_t* dst = ret; + for(int i=0; i<*num; ++i, ++src, ++dst) { + dst->deviceid = src->deviceid; + dst->mask_len = src->mask_len; + dst->mask = to_ptrv(src->mask); + } + return ret; +} + +EXPORT void* my32_XOpenDevice(x64emu_t* emu, void* dpy, XID id) +{ + void* ret = my->XOpenDevice(dpy, id); + register_XDevice_events(ret); + inplace_XDevice_shrink(ret); + return ret; +} + +EXPORT int my32_XCloseDevice(x64emu_t* emu, void* dpy, void* d) +{ + inplace_XDevice_enlarge(d); + unregister_XDevice_events(d); + return my->XCloseDevice(dpy, d); +} + +EXPORT int my32_XGetDeviceButtonMapping(x64emu_t* emu, void* dpy, void* d, void* map, int nmap) +{ + inplace_XDevice_enlarge(d); + return my->XGetDeviceButtonMapping(dpy, d, map, nmap); + inplace_XDevice_shrink(d); +} + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibxi_private.h b/src/wrapped32/wrappedlibxi_private.h new file mode 100644 index 0000000000000000000000000000000000000000..bf3614ce8d896cba56c45fbfc8935bbf1ec6c06f --- /dev/null +++ b/src/wrapped32/wrappedlibxi_private.h @@ -0,0 +1,88 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +//GO(XAllowDeviceEvents, iFXbLip_iL) +//GO(XChangeDeviceControl, iFXbLip_ibLi_) +//GO(XChangeDeviceDontPropagateList, iFXLibL_i) +//GO(XChangeDeviceKeyMapping, iFXbLip_iibL_i) +//GO(XChangeDeviceProperty, vFXbLip_LLiipi) +//GO(XChangeFeedbackControl, iFXbLip_LbLiL_) +//GO(XChangeKeyboardDevice, iFXbLip_) +//GO(XChangePointerDevice, iFXbLip_ii) +GOM(XCloseDevice, iFEXp) +//GO(XDeleteDeviceProperty, vFXbLip_L) +//GO(XDeviceBell, iFXbLip_LLi) +//GO(XFreeDeviceControl, vFbLi_) +//GO(XFreeDeviceList, vFbLLpiibLi__) +//GO(XFreeDeviceMotionEvents, vFbLp_) +//GO(XFreeDeviceState, vFbLip_) +//GO(XFreeFeedbackList, vFbLiL_) +GOM(XGetDeviceButtonMapping, iFEXppu) +//GO(XGetDeviceControl, bLi_FXbLip_i) +//GO(XGetDeviceDontPropagateList, bL_FXLp) +//GO(XGetDeviceFocus, iFXbLip_bL_pbL_) +//GO(XGetDeviceKeyMapping, bL_FXbLip_Cip) +//GO(XGetDeviceModifierMapping, bip_FXbLip_) +//GO(XGetDeviceMotionEvents, bLp_FXbLip_LLppp) +//GO(XGetDeviceProperty, iFXbLip_LlliLbL_pbL_bL_bp_) +GO(XGetExtensionVersion, pFXp) +//GO(XGetFeedbackControl, bLiL_FXbLip_p) +//GO(XGetSelectedExtensionEvents, iFXLpbbL__pbbL__) +//GO(XGrabDevice, iFXbLip_LiibL_iiL) +//GO(XGrabDeviceButton, iFXbLip_uubLip_LiubL_ii) +//GO(XGrabDeviceKey, iFXbLip_uubLip_LiubL_ii) +GO(XIAllowEvents, iFXiiL) +GO(XIAllowTouchEvents, iFXiuLi) +GO(XIBarrierReleasePointer, vFXiLu) +//GO(XIBarrierReleasePointers, vFXbiLu_i) +//GO(XIChangeHierarchy, iFppi) +GO(XIChangeProperty, vFXiLLiipi) +GO(XIDefineCursor, iFXiLL) +GO(XIDeleteProperty, vFXiL) +GOM(XIFreeDeviceInfo, vFEp) +GO(XIGetClientPointer, iFXLp) +GO(XIGetFocus, iFXibL_) +//GO(XIGetProperty, iFXiLlliLbL_pbL_bL_bp_) +GOM(XIGetSelectedEvents, pFEXLp) +GO(XIGrabButton, iFXiiLLiiibiip_ip) +GO(XIGrabDevice, iFXiLLLiiibiip_) +GO(XIGrabEnter, iFXiLLiiibiip_ip) +GO(XIGrabFocusIn, iFXiLiiibiip_ip) +GO(XIGrabKeycode, iFXiiLiiibiip_ip) +GO(XIGrabTouchBegin, iFXiLibiip_ip) +//GO(XIListProperties, bL_FXip) +GOM(XIQueryDevice, pFEXip) +//GO(XIQueryPointer, iFXiLbL_bL_ppppbip_pp) +GO(XIQueryVersion, iFXpp) +GOM(XISelectEvents, iFEXLpi) +GO(XISetClientPointer, iFXLi) +GO(XISetFocus, iFXiLL) +GO(XIUndefineCursor, iFXiL) +GO(XIUngrabButton, iFXiiLip) +GO(XIUngrabDevice, iFXiL) +GO(XIUngrabEnter, iFXiLip) +GO(XIUngrabFocusIn, iFXiLip) +GO(XIUngrabKeycode, iFXiiLip) +GO(XIUngrabTouchBegin, iFXiLip) +GO(XIWarpPointer, iFXiLLdduudd) +//GO(XListDeviceProperties, bL_FXbLip_p) +//GO(XListInputDevices, bLLpiibLi__FXp) +GOM(XOpenDevice, pFEXL) +//GO(XQueryDeviceState, bLip_FXbLip_) +//GO(XSelectExtensionEvent, iFXLbL_i) +//GO(XSendExtensionEvent, iFppLiipp) +//GO(XSetDeviceButtonMapping, iFXbLip_pi) +//GO(XSetDeviceFocus, iFXbLip_LiL) +//GO(XSetDeviceMode, iFXbLip_i) +//GO(XSetDeviceModifierMapping, iFXbLip_bip_) +//GO(XSetDeviceValuators, iFXbLip_pii) +GO(XUngrabDevice, iFXbLip_L) +GO(XUngrabDeviceButton, iFXbLip_uubLip_L) +GO(XUngrabDeviceKey, iFXbLip_uubLip_L) +GO(_XiGetDevicePresenceNotifyEvent, iFX) +GO(_xibadclass, vFXp) +GO(_xibaddevice, vFXp) +GO(_xibadevent, vFXp) +GO(_xibadmode, vFXp) +GO(_xidevicebusy, vFXp) diff --git a/src/wrapped32/wrappedlibxrandr.c b/src/wrapped32/wrappedlibxrandr.c new file mode 100644 index 0000000000000000000000000000000000000000..802d22f312ef3f039bdea60ad91239c82afeefaa --- /dev/null +++ b/src/wrapped32/wrappedlibxrandr.c @@ -0,0 +1,171 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" + +#ifdef ANDROID + static const char* libxrandrName = "libXrandr.so"; +#else + static const char* libxrandrName = "libXrandr.so.2"; +#endif + +#define LIBNAME libxrandr + +#include "libtools/my_x11_conv.h" + +#include "generated/wrappedlibxrandrtypes32.h" + +#include "wrappercallback32.h" + +EXPORT void* my32_XRRGetScreenResources(x64emu_t* emu, void* dpy, XID window) +{ + void* ret = my->XRRGetScreenResources(dpy, window); + inplace_XRRScreenResources_shrink(ret); + return ret; +} + +EXPORT void* my32_XRRGetScreenResourcesCurrent(x64emu_t* emu, void* dpy, XID window) +{ + void* ret = my->XRRGetScreenResourcesCurrent(dpy, window); + inplace_XRRScreenResources_shrink(ret); + return ret; +} + +EXPORT int my32_XRRSetCrtcConfig(x64emu_t* emu, void* dpy, void* res, XID crtc, unsigned long timestamp, int x, int y, XID mode, uint16_t rotation, XID_32* outputs, int noutputs) +{ + XID outputs_l[noutputs]; + if(outputs) + for(int i=0; iXRRSetCrtcConfig(dpy, res, crtc, timestamp, x, y, mode, rotation, outputs?(&outputs_l):NULL, noutputs); + inplace_XRRScreenResources_shrink(res); + return ret; +} + +EXPORT void* my32_XRRGetPanning(x64emu_t* emu, void* dpy, void* res, XID crtc) +{ + inplace_XRRScreenResources_enlarge(res); + void* ret = my->XRRGetPanning(dpy, res, crtc); + inplace_XRRScreenResources_shrink(res); + if(ret) { + // shrink XRRPanning: L and 12i + *(ulong_t*)res = to_ulong(*(unsigned long*)res); + memmove(res+4, res+8, 12*4); + } + return ret; +} + +EXPORT int my32_XRRSetPanning(x64emu_t* emu, void* dpy, void* res, XID crtc, void* panning) +{ + inplace_XRRScreenResources_enlarge(res); + // enlarge panning + { + unsigned long timestamp = from_ulong(*(ulong_t*)panning); + memmove(panning+8, panning+4, 12*4); + *(unsigned long*)panning = timestamp; + } + int ret = my->XRRSetPanning(dpy, res, crtc, panning); + inplace_XRRScreenResources_shrink(res); + { + // shrink XRRPanning: L and 12i + *(ulong_t*)panning = to_ulong(*(unsigned long*)panning); + memmove(panning+4, panning+8, 12*4); + } + return ret; +} + +EXPORT void* my32_XRRGetCrtcInfo(x64emu_t* emu, void* dpy, void* res, XID crtc) +{ + inplace_XRRScreenResources_enlarge(res); + void* ret = my->XRRGetCrtcInfo(dpy, res, crtc); + inplace_XRRScreenResources_shrink(res); + inplace_XRRCrtcInfo_shrink(ret); + return ret; +} + +EXPORT void* my32_XRRGetOutputInfo(x64emu_t* emu, void* dpy, void* res, XID window) +{ + inplace_XRRScreenResources_enlarge(res); + void* ret = my->XRRGetOutputInfo(dpy, res, window); + inplace_XRRScreenResources_shrink(res); + inplace_XRROutputInfo_shrink(ret); + return ret; +} + +EXPORT void* my32_XRRGetProviderInfo(x64emu_t* emu, void* dpy, void* res, XID provider) +{ + inplace_XRRScreenResources_enlarge(res); + void* ret = my->XRRGetProviderInfo(dpy, res, provider); + inplace_XRRScreenResources_shrink(res); + inplace_XRRProviderInfo_shrink(ret); + return ret; +} + +EXPORT void my32_XRRFreeProviderInfo(x64emu_t* emu, void* r) +{ + inplace_XRRProviderInfo_enlarge(r); + my->XRRFreeProviderInfo(r); +} + +EXPORT void* my32_XRRGetProviderResources(x64emu_t* emu, void* dpy, XID window) +{ + void* ret = my->XRRGetProviderResources(dpy, window); + inplace_XRRProviderResources_shrink(ret); + return ret; +} + +EXPORT void my32_XRRFreeProviderResources(x64emu_t* emu, void* r) +{ + inplace_XRRProviderResources_enlarge(r); + my->XRRFreeProviderResources(r); +} + +EXPORT void* my32_XRRListOutputProperties(x64emu_t* emu, void* dpy, XID out, int* num) +{ + XID* ret = my->XRRListOutputProperties(dpy, out, num); + if(!ret) return NULL; + XID_32* ret_s = (XID_32*)ret; + for(int i=0; i<*num; ++i) + ret_s[i] = to_ulong(ret[i]); + return ret; +} + +EXPORT void* my32_XRRQueryOutputProperty(x64emu_t* emu, void* dpy, XID output, XID prop) +{ + void* ret = my->XRRQueryOutputProperty(dpy, output, prop); + return inplace_XRRPropertyInfo_shrink(ret); +} + +EXPORT int my32_XRRQueryExtension(x64emu_t* emu, void* dpy, int* event_base, int* error_base) +{ + int ret = my->XRRQueryExtension(dpy, event_base, error_base); + if(!ret) return ret; + register_XRandR_events(*event_base); + return ret; +} + +#ifdef ANDROID +#define NEEDED_LIBS "libX11.so", "libXext.so", "libXrender.so" +#else +#define NEEDED_LIBS "libX11.so.6", "libXext.so.6", "libXrender.so.1" +#endif + +#define CUSTOM_FINI \ + unregister_XRandR_events(); + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibxrandr_private.h b/src/wrapped32/wrappedlibxrandr_private.h new file mode 100644 index 0000000000000000000000000000000000000000..a2b9fe8960938da3bc815e4bbe96c879c37dd2c2 --- /dev/null +++ b/src/wrapped32/wrappedlibxrandr_private.h @@ -0,0 +1,73 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(XRRQueryVersion, iFXpp) +GO(XRRFreeScreenConfigInfo, vFp) +GOM(XRRGetCrtcInfo, pFEXpL) +GOM(XRRListOutputProperties, pFEXLp) +GOM(XRRQueryExtension, iFEXpp) +//GO(XRRAllocModeInfo, bLuuLuuuuuuupuL_Fpi) +//GO(XRRGetProviderProperty, iFXLLlliiLbL_pbL_bL_bp_) +//GO(XRRListProviderProperties, bL_FXLp) +GO(XRRRotations, WFXip) +GO(XRRSetCrtcTransform, vFXLpppi) +GO(XRRGetCrtcGammaSize, iFXL) +GO(XRRConfigRotations, WFpp) +GOM(XRRGetProviderInfo, pFEXpL) +GO(XRRConfigureOutputProperty, vFXLLiiibl_) +GO(XRRSetOutputPrimary, vFXLL) +GO(XRRFreeOutputInfo, vFp) +//GO(XRRUpdateConfiguration, iFp) +GOM(XRRGetScreenResources, pFEXL) +GO(XRRConfigSizes, pFpp) +//GO(XRRQueryProviderProperty, biiiibl__FXLL) +GO(XRRDeleteOutputProperty, vFXLL) +GO(XRRDeleteProviderProperty, vFXLL) +GO(XRRSetScreenConfig, iFXpLiWL) +//GO(XRRAllocGamma, bippp_Fi) +GO(XRRSetScreenSize, vFXLiiii) +GO(XRRSetScreenConfigAndRate, iFXpLiWwL) +GO(XRRFreeScreenResources, vFp) +GO(XRRGetOutputPrimary, LFXL) +//GO(XRRCreateMode, LFXLbLuuLuuuuuuupuL_) +GO(XRRConfigCurrentRate, wFp) +GO(XRRDestroyMode, vFXL) +GOM(XRRSetCrtcConfig, iFEXpLLiiLWpi) +GO(XRRConfigCurrentConfiguration, WFpp) +GO(XRRSizes, pFXip) +GO(XRRAddOutputMode, vFXLL) +GO(XRRFreePanning, vFp) +GOM(XRRFreeProviderResources, vFEp) +GO(XRRChangeProviderProperty, vFXLLLiipi) +GOM(XRRGetPanning, pFEXpL) +GO(XRRSetProviderOffloadSink, iFXLL) +GOM(XRRGetScreenResourcesCurrent, pFEXL) +GO(XRRConfigTimes, LFpbL_) +//GO(XRRSetCrtcGamma, vFXLbippp_) +GO(XRRSetProviderOutputSource, iFXLL) +GO(XRRGetScreenSizeRange, iFXLpppp) +GO(XRRRates, pFXiip) +GOM(XRRFreeProviderInfo, vFEp) +GO(XRRConfigRates, pFpip) +GOM(XRRQueryOutputProperty, pFEXLL) +GO(XRRGetOutputProperty, iFXLLlliiLBL_pBL_BL_Bp_) +//GO(XRRFreeGamma, vFbippp_) +GO(XRRRootToScreen, iFXL) +GO(XRRGetScreenInfo, pFXL) +GO(XRRFreeCrtcInfo, vFp) +GOM(XRRGetProviderResources, pFEXL) +//GO(XRRFreeModeInfo, vFbLuuLuuuuuuupuL_) +GO(XRRChangeOutputProperty, vFXLLLiipi) +//GO(XRRGetCrtcGamma, bippp_FXL) +GOM(XRRSetPanning, iFEXpLp) +GO(XRRSelectInput, vFXLi) +//GO(XRRGetCrtcTransform, iFXLbbiiiiiiiiipipiiiiiiiiipip__) +//GO(XRRTimes, LFXibL_) +GO(XRRDeleteOutputMode, vFXLL) +GOM(XRRGetOutputInfo, pFEXpL) +GO(XRRConfigureProviderProperty, vFXLLiiibl_) +//GO(XRRAllocateMonitor, bLiiiiiiiiibL__FXi) +//GO(XRRGetMonitors, bLiiiiiiiiibL__FXLip) +//GO(XRRSetMonitor, vFXLbLiiiiiiiiibL__) +//GO(XRRFreeMonitors, vFbLiiiiiiiiibL__) diff --git a/src/wrapped32/wrappedlibxrender.c b/src/wrapped32/wrappedlibxrender.c new file mode 100644 index 0000000000000000000000000000000000000000..fcef909aa9a14de310e490afe906f21bf03fdd6d --- /dev/null +++ b/src/wrapped32/wrappedlibxrender.c @@ -0,0 +1,98 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" +#include "converter32.h" + +#ifdef ANDROID + static const char* libxrenderName = "libXrender.so"; +#else + static const char* libxrenderName = "libXrender.so.1"; +#endif + +#define LIBNAME libxrender + +#ifdef ANDROID +#define NEEDED_LIBS "libX11.so" +#else +#define NEEDED_LIBS "libX11.so.6" +#endif + +#include "libtools/my_x11_conv.h" + +#include "generated/wrappedlibxrendertypes32.h" + +#include "wrappercallback32.h" + +KHASH_MAP_INIT_INT64(picformat, void*); +static kh_picformat_t* hash_picformat; + +EXPORT void* my32_XRenderFindFormat(x64emu_t* emu, void* dpy, unsigned long mask, void* tmpl, int count) +{ + void* ret = my->XRenderFindFormat(dpy, mask, tmpl, count); + if(!ret) return NULL; + khint_t k = kh_get(picformat, hash_picformat, (uintptr_t)ret); + if(k!=kh_end(hash_picformat)) + return kh_value(hash_picformat, k); + int r; + k = kh_put(picformat, hash_picformat, (uintptr_t)ret, &r); + struct_LiiuL_t* res = calloc(1, sizeof(struct_LiiuL_t)); + to_struct_LiiuL(to_ptrv(res), ret); + kh_value(hash_picformat, k) = res; + return res; +} + +EXPORT void* my32_XRenderFindStandardFormat(x64emu_t* emu, void* dpy, int fmt) +{ + void* ret = my->XRenderFindStandardFormat(dpy, fmt); + if(!ret) return NULL; + khint_t k = kh_get(picformat, hash_picformat, (uintptr_t)ret); + if(k!=kh_end(hash_picformat)) + return kh_value(hash_picformat, k); + int r; + k = kh_put(picformat, hash_picformat, (uintptr_t)ret, &r); + struct_LiiuL_t* res = calloc(1, sizeof(struct_LiiuL_t)); + to_struct_LiiuL(to_ptrv(res), ret); + kh_value(hash_picformat, k) = res; + return res; +} + +EXPORT void* my32_XRenderFindVisualFormat(x64emu_t* emu, void* dpy, void* visual) +{ + void* ret = my->XRenderFindVisualFormat(dpy, convert_Visual_to_64(dpy, visual)); + if(!ret) return NULL; + khint_t k = kh_get(picformat, hash_picformat, (uintptr_t)ret); + if(k!=kh_end(hash_picformat)) + return kh_value(hash_picformat, k); + int r; + k = kh_put(picformat, hash_picformat, (uintptr_t)ret, &r); + struct_LiiuL_t* res = calloc(1, sizeof(struct_LiiuL_t)); + to_struct_LiiuL(to_ptrv(res), ret); + kh_value(hash_picformat, k) = res; + return res; +} +#define CUSTOM_INIT \ + hash_picformat = kh_init(picformat); \ + +#define CUSTOM_FINI \ + void* p; \ + kh_foreach_value(hash_picformat, p, free(p)); \ + kh_destroy(picformat, hash_picformat); \ + hash_picformat = NULL; \ + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibxrender_private.h b/src/wrapped32/wrappedlibxrender_private.h new file mode 100644 index 0000000000000000000000000000000000000000..2212539537135650fbb6337c2de59d4d8326cb59 --- /dev/null +++ b/src/wrapped32/wrappedlibxrender_private.h @@ -0,0 +1,51 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(XRenderAddGlyphs, vFXLppipi) +GO(XRenderAddTraps, vFXLiipi) +GO(XRenderChangePicture, vFXLLp) +GO(XRenderComposite, vFXiLLLiiiiiiuu) +GO(XRenderCompositeDoublePoly, vFXiLLpiiiipii) +GO(XRenderCompositeString16, vFXiLLrLiiuL_Liiiipi) +GO(XRenderCompositeString32, vFXiLLrLiiuL_Liiiipi) +GO(XRenderCompositeString8, vFXiLLrLiiuL_Liiiipi) +GO(XRenderCompositeText16, vFXiLLrLiiuL_iiiipi) +GO(XRenderCompositeText32, vFXiLLrLiiuL_iiiipi) +GO(XRenderCompositeText8, vFXiLLrLiiuL_iiiipi) +GO(XRenderCompositeTrapezoids, vFXiLLrLiiuL_iipi) +GO(XRenderCompositeTriangles, vFXiLLpiipi) +GO(XRenderCompositeTriFan, vFXiLLpiipi) +GO(XRenderCompositeTriStrip, vFXiLLpiipi) +GO(XRenderCreateAnimCursor, LFXip) +GO(XRenderCreateConicalGradient, LFXpppi) +GO(XRenderCreateCursor, LFXLuu) +GO(XRenderCreateGlyphSet, LFXrLiiuL_) +GO(XRenderCreateLinearGradient, LFXpppi) +GO(XRenderCreatePicture, LFXLrLiiuL_Lp) +GO(XRenderCreateRadialGradient, LFXpppi) +GO(XRenderCreateSolidFill, LFXp) +//DATAB(XRenderExtensionInfo, sizeof(ptr_t)) +//DATA(XRenderExtensionName, sizeof(ptr_t)) //D +GO(XRenderFillRectangle, vFXiLpiiuu) +GO(XRenderFillRectangles, vFXiLppi) +//GO(XRenderFindDisplay, pFp) +GOM(XRenderFindFormat, pFEXLrLiiuL_i) +GOM(XRenderFindStandardFormat, pFEXi) +GOM(XRenderFindVisualFormat, pFEXp) +GO(XRenderFreeGlyphs, vFXLpi) +GO(XRenderFreeGlyphSet, vFXL) +GO(XRenderFreePicture, vFXL) +GO(XRenderParseColor, iFXpp) +GO(XRenderQueryExtension, iFXpp) +GO(XRenderQueryFilters, pFXL) +GO(XRenderQueryFormats, iFX) +GO(XRenderQueryPictIndexValues, pFXrLiiuL_p) +GO(XRenderQuerySubpixelOrder, iFXi) +GO(XRenderQueryVersion, iFXpp) +GO(XRenderReferenceGlyphSet, LFXL) +GO(XRenderSetPictureClipRectangles, vFXLiipi) +GO(XRenderSetPictureClipRegion, vFXLp) +GO(XRenderSetPictureFilter, vFXLppi) +GO(XRenderSetPictureTransform, vFXLp) +GO(XRenderSetSubpixelOrder, iFXii) diff --git a/src/wrapped32/wrappedlibxss.c b/src/wrapped32/wrappedlibxss.c new file mode 100644 index 0000000000000000000000000000000000000000..dc5d9b01471d51881bce19ec5e5332f4d75e762e --- /dev/null +++ b/src/wrapped32/wrappedlibxss.c @@ -0,0 +1,29 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "box32.h" + +#ifdef ANDROID + static const char* libxssName = "libXss.so"; +#else + static const char* libxssName = "libXss.so.1"; +#endif + +#define LIBNAME libxss + +#ifdef ANDROID +#define NEEDED_LIBS "libX11.so", "libXext.so" +#else +#define NEEDED_LIBS "libX11.so.6", "libXext.so.6" +#endif + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedlibxss_private.h b/src/wrapped32/wrappedlibxss_private.h new file mode 100644 index 0000000000000000000000000000000000000000..8c982829791e2e99623b1064f589f705eb9312b8 --- /dev/null +++ b/src/wrapped32/wrappedlibxss_private.h @@ -0,0 +1,15 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(XScreenSaverAllocInfo, pFv) +GO(XScreenSaverGetRegistered, iFXipp) +GO(XScreenSaverQueryExtension, iFXpp) +GO(XScreenSaverQueryInfo, iFXLp) +GO(XScreenSaverQueryVersion, iFXpp) +GO(XScreenSaverRegister, iFXiLL) +GO(XScreenSaverSelectInput, vFXLL) +//GO(XScreenSaverSetAttributes, vFXLiiuuuiupLp) +GO(XScreenSaverSuspend, vFXi) +GO(XScreenSaverUnregister, iFXi) +GO(XScreenSaverUnsetAttributes, vFXL) diff --git a/src/wrapped32/wrappedlibxxf86vm.c b/src/wrapped32/wrappedlibxxf86vm.c new file mode 100644 index 0000000000000000000000000000000000000000..8bd229e231eed113baa6c34e5ccd0719c5b2eaad --- /dev/null +++ b/src/wrapped32/wrappedlibxxf86vm.c @@ -0,0 +1,56 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" + +#ifdef ANDROID + static const char* libxxf86vmName = "libXxf86vm.so"; +#else + static const char* libxxf86vmName = "libXxf86vm.so.1"; +#endif + +#define LIBNAME libxxf86vm + +#ifdef ANDROID +#define NEEDED_LIBS "libX11.so", "libXext.so" +#else +#define NEEDED_LIBS "libX11.so.6", "libXext.so.6" +#endif + + +#include "libtools/my_x11_defs.h" +#include "libtools/my_x11_defs_32.h" + +#include "generated/wrappedlibxxf86vmtypes32.h" + +#include "wrappercallback32.h" + +EXPORT int my32_XF86VidModeGetAllModeLines(x64emu_t* emu, void* dpy, int screen, int* num, ptr_t* infos) +{ + my_XF86VidModeModeInfo_t** infos_l; + int ret = my->XF86VidModeGetAllModeLines(dpy, screen, num, &infos_l); + *infos = to_ptrv(infos_l); + ptr_t* small = from_ptrv(*infos); + // shrink the array, the structure is fine + for(int i=0; i<*num; ++i) + small[i] = to_ptrv(infos_l[i]); + // mark the end + small[*num] = 0; + return ret; +} + +#include "wrappedlib_init32.h" \ No newline at end of file diff --git a/src/wrapped32/wrappedlibxxf86vm_private.h b/src/wrapped32/wrappedlibxxf86vm_private.h new file mode 100644 index 0000000000000000000000000000000000000000..2abad1e7dbe9a7403246ca0d35d7902d7bc5cae7 --- /dev/null +++ b/src/wrapped32/wrappedlibxxf86vm_private.h @@ -0,0 +1,26 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(XF86VidModeGetViewPort, iFXipp) +//GO(XF86VidModeValidateModeLine, iFpip) +GO(XF86VidModeGetGamma, iFXip) +GO(XF86VidModeSetGamma, iFXip) +GO(XF86VidModeSetClientVersion, iFX) +GO(XF86VidModeGetGammaRamp, iFXiippp) +//GO(XF86VidModeGetMonitor, iFpip) +GO(XF86VidModeQueryVersion, iFXpp) +GO(XF86VidModeDeleteModeLine, iFXip) +GO(XF86VidModeGetModeLine, iFXipBWWWWWWWWWuip_) +GOM(XF86VidModeGetAllModeLines, iFEXipp) +GO(XF86VidModeSetGammaRamp, iFXiippp) +//GO(XF86VidModeGetPermissions, iFpip) +//GO(XF86VidModeModModeLine, iFpip) +GO(XF86VidModeSetViewPort, iFXiii) +GO(XF86VidModeSwitchMode, iFXii) +//GO(XF86VidModeAddModeLine, iFpipp) +GO(XF86VidModeSwitchToMode, iFXip) +GO(XF86VidModeQueryExtension, iFXpp) +GO(XF86VidModeGetGammaRampSize, iFXip) +//GO(XF86VidModeGetDotClocks, iFpipppp) +GO(XF86VidModeLockModeSwitch, iFXii) diff --git a/src/wrapped32/wrappedopenal.c b/src/wrapped32/wrappedopenal.c new file mode 100644 index 0000000000000000000000000000000000000000..1d53b89440ca1fa11d86d53581ec58b265c417a9 --- /dev/null +++ b/src/wrapped32/wrappedopenal.c @@ -0,0 +1,180 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "box32context.h" +#include "librarian.h" +#include "myalign32.h" + +static const char* openalName = "libopenal.so.1"; +#define LIBNAME openal + +#include "generated/wrappedopenaltypes32.h" + +#include "wrappercallback32.h" + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// Request ... +#define GO(A) \ +static uintptr_t my32_Request_fct_##A = 0; \ +static void my32_Request_##A(int32_t a, int32_t b) \ +{ \ + RunFunctionFmt(my32_Request_fct_##A, "ii", a, b); \ +} +SUPER() +#undef GO +static void* find_Request_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_Request_fct_##A == (uintptr_t)fct) return my32_Request_##A; + SUPER() + #undef GO + #define GO(A) if(my32_Request_fct_##A == 0) {my32_Request_fct_##A = (uintptr_t)fct; return my32_Request_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for openal Request callback\n"); + return NULL; +} + +#undef SUPER + +void* my32_alGetProcAddress(x64emu_t* emu, void* name); +void* my32_alcGetProcAddress(x64emu_t* emu, void* device, void* name); +void my32_alRequestFoldbackStart(x64emu_t *emu, int32_t mode, int32_t count, int32_t length, void* mem, void* cb); +void my32_alRequestFoldbackStop(x64emu_t* emu); + +#include "wrappedlib_init32.h" + + +void fillALProcWrapper32() +{ + int cnt, ret; + khint_t k; + kh_symbolmap_t * symbolmap = kh_init(symbolmap); + // populates maps... + cnt = sizeof(openalsymbolmap)/sizeof(map_onesymbol_t); + for (int i=0; ialwrappers = symbolmap; + // fill my32_* map + symbolmap = kh_init(symbolmap); + cnt = sizeof(MAPNAME(mysymbolmap))/sizeof(map_onesymbol_t); + for (int i=0; ialmymap = symbolmap; +} + +EXPORT void* my32_alGetProcAddress(x64emu_t* emu, void* name) +{ + khint_t k; + const char* rname = (const char*)name; + printf_log(LOG_DEBUG, "Calling 32bits alGetProcAddress(%s)\n", rname); + if(!emu->context->alwrappers) // could be moved in "my" structure... + fillALProcWrapper32(emu->context); + // get proc adress using actual alGetProcAddress + k = kh_get(symbolmap, emu->context->almymap, rname); + int is_my = (k==kh_end(emu->context->almymap))?0:1; + void* symbol; + if(is_my) { + // try again, by using custom "my32_" now... + char tmp[200]; + strcpy(tmp, "my32_"); + strcat(tmp, rname); + symbol = dlsym(emu->context->box64lib, tmp); + } else + symbol = my->alGetProcAddress(name); + if(!symbol) + return NULL; // easy + // get wrapper + k = kh_get(symbolmap, emu->context->alwrappers, rname); + if(k==kh_end(emu->context->alwrappers)) { + printf_log(LOG_INFO, "Warning, no wrapper for %s\n", rname); + return NULL; + } + symbol1_t *s = &kh_value(emu->context->alwrappers, k); + if(!s->resolved) { + const char* constname = kh_key(emu->context->alwrappers, k); + s->addr = AddCheckBridge(emu->context->system, s->w, symbol, 0, constname); + s->resolved = 1; + } + return (void*)s->addr; +} + +EXPORT void* my32_alcGetProcAddress(x64emu_t* emu, void* device, void* name) +{ + khint_t k; + const char* rname = (const char*)name; + printf_log(LOG_DEBUG, "Calling 32bits alcGetProcAddress(%p, %s)\n", device, rname); + if(!emu->context->alwrappers) // could be moved in "my" structure... + fillALProcWrapper32(); + // get proc adress using actual alGetProcAddress + k = kh_get(symbolmap, emu->context->almymap, rname); + int is_my = (k==kh_end(emu->context->almymap))?0:1; + void* symbol; + if(is_my) { + // try again, by using custom "my32_" now... + char tmp[200]; + strcpy(tmp, "my32_"); + strcat(tmp, rname); + symbol = dlsym(emu->context->box64lib, tmp); + } else + symbol = my->alcGetProcAddress(device, name); + if(!symbol) + return NULL; // easy + // get wrapper + k = kh_get(symbolmap, emu->context->alwrappers, rname); + if(k==kh_end(emu->context->alwrappers)) { + printf_log(LOG_INFO, "Warning, no wrapper for %s\n", rname); + return NULL; + } + symbol1_t *s = &kh_value(emu->context->alwrappers, k); + if(!s->resolved) { + const char* constname = kh_key(emu->context->alwrappers, k); + s->addr = AddCheckBridge(emu->context->system, s->w, symbol, 0, constname); + s->resolved = 1; + } + return (void*)s->addr; +} + +EXPORT void my32_alRequestFoldbackStart(x64emu_t *emu, int32_t mode, int32_t count, int32_t length, void* mem, void* cb) +{ + (void)emu; + my->alRequestFoldbackStart(mode, count, length, mem, find_Request_Fct(cb)); +} + +EXPORT void my32_alRequestFoldbackStop(x64emu_t* emu) +{ + (void)emu; + my->alRequestFoldbackStop(); +} diff --git a/src/wrapped32/wrappedopenal_private.h b/src/wrapped32/wrappedopenal_private.h new file mode 100644 index 0000000000000000000000000000000000000000..60aa4c0df872518c771890adb64dce4b304e2fd5 --- /dev/null +++ b/src/wrapped32/wrappedopenal_private.h @@ -0,0 +1,167 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(alDopplerFactor, vFf) +GO(alDopplerVelocity, vFf) +GO(alSpeedOfSound, vFf) +GO(alDistanceModel, vFi) +GO(alEnable, vFi) +GO(alDisable, vFi) +GO(alIsEnabled, cFi) +GO(alGetString, pFi) +GO(alGetBooleanv, vFip) +GO(alGetIntegerv, vFip) +GO(alGetFloatv, vFip) +GO(alGetDoublev, vFip) +GO(alGetBoolean, cFi) +GO(alGetInteger, iFi) +GO(alGetFloat, fFi) +GO(alGetDouble, dFi) +GO(alGetError, iFv) +GO(alIsExtensionPresent, cFp) +GOM(alGetProcAddress, pFEp) +GO(alGetEnumValue, iFp) +GO(alListenerf, vFif) +GO(alListener3f, vFifff) +GO(alListenerfv, vFip) +GO(alListeneri, vFii) +GO(alListener3i, vFiiii) +GO(alListeneriv, vFip) +GO(alGetListenerf, vFip) +GO(alGetListener3f, vFippp) +GO(alGetListenerfv, vFip) +GO(alGetListeneri, vFip) +GO(alGetListener3i, vFippp) +GO(alGetListeneriv, vFip) +GO(alGenSources, vFip) +GO(alDeleteSources, vFip) +GO(alIsSource, cFu) +GO(alSourcef, vFuif) +GO(alSource3f, vFuifff) +GO(alSourcefv, vFuip) +GO(alSourcei, vFuii) +GO(alSource3i, vFuiiii) +GO(alSourceiv, vFuip) +GO(alGetSourcef, vFuip) +GO(alGetSource3f, vFuippp) +GO(alGetSourcefv, vFuip) +GO(alGetSourcei, vFuip) +GO(alGetSource3i, vFuippp) +GO(alGetSourceiv, vFuip) +GO(alSourcePlayv, vFip) +GO(alSourceStopv, vFip) +GO(alSourceRewindv, vFip) +GO(alSourcePausev, vFip) +GO(alSourcePlay, vFu) +GO(alSourceStop, vFu) +GO(alSourceRewind, vFu) +GO(alSourcePause, vFu) +GO(alSourceQueueBuffers, vFuip) +GO(alSourceUnqueueBuffers, vFuip) +GO(alGenBuffers, vFip) +GO(alDeleteBuffers, vFip) +GO(alIsBuffer, cFu) +GO(alBufferData, vFuipii) +GO(alBufferf, vFuif) +GO(alBuffer3f, vFuifff) +GO(alBufferfv, vFuip) +GO(alBufferi, vFuii) +GO(alBuffer3i, vFuiiii) +GO(alBufferiv, vFuip) +GO(alGetBufferf, vFuip) +GO(alGetBuffer3f, vFuippp) +GO(alGetBufferfv, vFuip) +GO(alGetBufferi, vFuip) +GO(alGetBuffer3i, vFuippp) +GO(alGetBufferiv, vFuip) + +GO(alcCreateContext, pFpp) +GO(alcMakeContextCurrent, cFp) +GO(alcProcessContext, vFp) +GO(alcSuspendContext, vFp) +GO(alcDestroyContext, vFp) +GO(alcGetCurrentContext, pFv) +GO(alcGetContextsDevice, pFp) +GO(alcOpenDevice, pFp) +GO(alcCloseDevice, cFp) +GO(alcGetError, iFp) +GO(alcIsExtensionPresent, cFpp) +GOM(alcGetProcAddress, pFEpp) +GO(alcGetEnumValue, iFpp) +GO(alcGetString, pFpi) +GO(alcGetIntegerv, vFpiip) +GO(alcCaptureOpenDevice, pFpuii) +GO(alcCaptureCloseDevice, cFp) +GO(alcCaptureStart, vFp) +GO(alcCaptureStop, vFp) +GO(alcCaptureSamples, vFppi) + +GO(alcGetThreadContext, pFv) +GO(alcSetThreadContext, cFp) +GO(alcLoopbackOpenDeviceSOFT, pFp) +GO(alcIsRenderFormatSupportedSOFT, cFpiii) +GO(alcRenderSamplesSOFT, vFppi) +GO(alcDevicePauseSOFT, vFp) +GO(alcDeviceResumeSOFT, vFp) +GO(alcGetStringiSOFT, pFpii) +GO(alcResetDeviceSOFT, cFpp) +GO(alcGetInteger64vSOFT, vFpiip) + +GO(alBufferDataStatic, vFuipii) +GO(alBufferSubDataSOFT, vFuipii) +GOM(alRequestFoldbackStart, vFEiiipp) +GOM(alRequestFoldbackStop, vFEv) +GO(alBufferSamplesSOFT, vFuuiiiip) +GO(alBufferSubSamplesSOFT, vFuiiiip) +GO(alGetBufferSamplesSOFT, vFuiiiip) +GO(alIsBufferFormatSupportedSOFT, cFi) +GO(alSourcedSOFT, vFuid) +GO(alSource3dSOFT, vFuiddd) +GO(alSourcedvSOFT, vFuip) +GO(alGetSourcedSOFT, vFuip) +GO(alGetSource3dSOFT, vFuippp) +GO(alGetSourcedvSOFT, vFuip) +GO(alSourcei64SOFT, vFuiI) +GO(alSource3i64SOFT, vFuiIII) +GO(alSourcei64vSOFT, vFuip) +GO(alGetSourcei64SOFT, vFuip) +GO(alGetSource3i64SOFT, vFuippp) +GO(alGetSourcei64vSOFT, vFuip) +GO(alDeferUpdatesSOFT, vFv) +GO(alProcessUpdatesSOFT, vFv) +GO(alGetStringiSOFT, pFii) + +GO(alGenEffects, vFip) +GO(alDeleteEffects, vFip) +GO(alIsEffect, cFu) +GO(alEffecti, vFuii) +GO(alEffectiv, vFuip) +GO(alEffectf, vFuif) +GO(alEffectfv, vFuip) +GO(alGetEffecti, vFuip) +GO(alGetEffectiv, vFuip) +GO(alGetEffectf, vFuip) +GO(alGetEffectfv, vFuip) +GO(alGenFilters, vFip) +GO(alDeleteFilters, vFip) +GO(alIsFilter, cFu) +GO(alFilteri, vFuii) +GO(alFilteriv, vFuip) +GO(alFilterf, vFuif) +GO(alFilterfv, vFuip) +GO(alGetFilteri, vFuip) +GO(alGetFilteriv, vFuip) +GO(alGetFilterf, vFuip) +GO(alGetFilterfv, vFuip) +GO(alGenAuxiliaryEffectSlots, vFip) +GO(alDeleteAuxiliaryEffectSlots, vFip) +GO(alIsAuxiliaryEffectSlot, cFu) +GO(alAuxiliaryEffectSloti, vFuii) +GO(alAuxiliaryEffectSlotiv, vFuip) +GO(alAuxiliaryEffectSlotf, vFuif) +GO(alAuxiliaryEffectSlotfv, vFuip) +GO(alGetAuxiliaryEffectSloti, vFuip) +GO(alGetAuxiliaryEffectSlotiv, vFuip) +GO(alGetAuxiliaryEffectSlotf, vFuip) +GO(alGetAuxiliaryEffectSlotfv, vFuip) diff --git a/src/wrapped32/wrappedsdl1.c b/src/wrapped32/wrappedsdl1.c new file mode 100644 index 0000000000000000000000000000000000000000..8e437659f23fa2847c74033130919973ab738d6c --- /dev/null +++ b/src/wrapped32/wrappedsdl1.c @@ -0,0 +1,701 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "wrapper32.h" +#include "debug.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "callback.h" +#include "librarian.h" +#include "emu/x64emu_private.h" +#include "box32context.h" +#include "sdl1rwops.h" +#include "gltools.h" + +#include "x64trace.h" +#include "threads.h" + +#include "sdl1align32.h" + +extern const char* sdl1Name; +#define LIBNAME sdl1 + +static int sdl_Yes() {return 1;} +static int sdl_No() {return 0;} +EXPORT int my32_SDL_Has3DNow() __attribute__((alias("sdl_No"))); +EXPORT int my32_SDL_Has3DNowExt() __attribute__((alias("sdl_No"))); +EXPORT int my32_SDL_HasAltiVec() __attribute__((alias("sdl_No"))); +EXPORT int my32_SDL_HasMMX() __attribute__((alias("sdl_Yes"))); +EXPORT int my32_SDL_HasMMXExt() __attribute__((alias("sdl_Yes"))); +EXPORT int my32_SDL_HasRDTSC() __attribute__((alias("sdl_Yes"))); +EXPORT int my32_SDL_HasSSE() __attribute__((alias("sdl_Yes"))); +EXPORT int my32_SDL_HasSSE2() __attribute__((alias("sdl_Yes"))); + +typedef struct { + int32_t freq; + uint16_t format; + uint8_t channels; + uint8_t silence; + uint16_t samples; + uint32_t size; + void (*callback)(void *userdata, uint8_t *stream, int32_t len); + void *userdata; +} SDL_AudioSpec; + +typedef struct { // removed packed attribute + int32_t freq; + uint16_t format; + uint8_t channels; + uint8_t silence; + uint16_t samples; + uint32_t size; + ptr_t callback; //void (*callback)(void *userdata, uint8_t *stream, int32_t len); + ptr_t userdata; //void *userdata; +} SDL_AudioSpec32; + +EXPORT void my32_SDL_Quit(); + +#define ADDED_FUNCTIONS() \ + GO(SDL_AllocRW, sdl1_allocrw) \ + GO(SDL_FreeRW, sdl1_freerw) + +#define ADDED_FINI() \ + my32_SDL_Quit(); + +#include "generated/wrappedsdl1types32.h" + +#include "wrappercallback32.h" + +// event filter. Needs to be global, but there is only one, so that's should be fine +static x64emu_t *sdl1_evtfilter = NULL; +static void* sdl1_evtfnc = NULL; +static int sdl1_evtautofree = 0; +static int sdl1_evtinside = 0; + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// AudioCallback ... +#define GO(A) \ +static uintptr_t my32_AudioCallback_fct_##A = 0; \ +static void my32_AudioCallback_##A(void *userdata, uint8_t *stream, int32_t len) \ +{ \ + RunFunctionFmt(my32_AudioCallback_fct_##A, "ppi", userdata, stream, len); \ +} +SUPER() +#undef GO +static void* find_AudioCallback_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_AudioCallback_fct_##A == (uintptr_t)fct) return my32_AudioCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_AudioCallback_fct_##A == 0) {my32_AudioCallback_fct_##A = (uintptr_t)fct; return my32_AudioCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for SDL1 AudioCallback callback\n"); + return NULL; +} +// TimerCallback ... +#define GO(A) \ +static uintptr_t my32_TimerCallback_fct_##A = 0; \ +static uint32_t my32_TimerCallback_##A(uint32_t interval, void *userdata) \ +{ \ + return (uint32_t)RunFunctionFmt(my32_TimerCallback_fct_##A, "up", interval, userdata); \ +} +SUPER() +#undef GO +static void* find_TimerCallback_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_TimerCallback_fct_##A == (uintptr_t)fct) return my32_TimerCallback_##A; + SUPER() + #undef GO + #define GO(A) if(my32_TimerCallback_fct_##A == 0) {my32_TimerCallback_fct_##A = (uintptr_t)fct; return my32_TimerCallback_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for SDL1 TimerCallback callback\n"); + return NULL; +} +// EvtFilter ... +#define GO(A) \ +static uintptr_t my32_EvtFilter_fct_##A = 0; \ +static int my32_EvtFilter_##A(void* p) \ +{ \ + return RunFunctionFmt(my32_EvtFilter_fct_##A, "p", p); \ +} +SUPER() +#undef GO +static void* find_EvtFilter_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my32_EvtFilter_fct_##A == (uintptr_t)fct) return my32_EvtFilter_##A; + SUPER() + #undef GO + #define GO(A) if(my32_EvtFilter_fct_##A == 0) {my32_EvtFilter_fct_##A = (uintptr_t)fct; return my32_EvtFilter_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for SDL1 EvtFilter callback\n"); + return NULL; +} +static void* reverse_EvtFilterFct(void* fct) +{ + if(!fct) return fct; + if(CheckBridged(my_lib->w.bridge, fct)) + return (void*)CheckBridged(my_lib->w.bridge, fct); + #define GO(A) if(my32_EvtFilter_##A == fct) return (void*)my32_EvtFilter_fct_##A; + SUPER() + #undef GO + return (void*)AddBridge(my_lib->w.bridge, iFp_32, fct, 0, NULL); +} +#undef SUPER + +// TODO: track the memory for those callback +EXPORT int my32_SDL_OpenAudio(x64emu_t* emu, void* d, void* o) +{ + SDL_AudioSpec desired = {0}; + SDL_AudioSpec output = {0}; + SDL_AudioSpec32 *d_ = d; + desired.channels = d_->channels; + desired.format = d_->format; + desired.freq = d_->freq; + desired.samples = d_->samples; + desired.silence = d_->silence; + desired.size = d_->size; + desired.userdata = from_ptrv(d_->userdata); + desired.callback = find_AudioCallback_Fct(from_ptrv(d_->callback)); + int ret = my->SDL_OpenAudio(&desired, &output); + if (ret!=0) { + return ret; + } + // put back stuff in place? + if (o) { + SDL_AudioSpec32* o_ = o; + o_->channels = output.channels; + o_->format = output.format; + o_->freq = output.freq; + o_->samples = output.samples; + o_->silence = output.silence; + o_->size = output.size; + o_->userdata = o_->callback = 0; + } + + return ret; +} + +EXPORT void *my32_SDL_LoadBMP_RW(x64emu_t* emu, void* a, int b) +{ + inplace_SDL_RWops_to_64(a); + SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); + void* r = my->SDL_LoadBMP_RW(rw, b); + if(b==0) { + RWNativeEnd(rw); + inplace_SDL_RWops_to_32(a); + } + inplace_SDL_Surface_to_32(r); + return r; +} +//EXPORT int32_t my32_SDL_SaveBMP_RW(x64emu_t* emu, void* a, void* b, int c) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// int32_t r = my->SDL_SaveBMP_RW(rw, b, c); +// if(c==0) +// RWNativeEnd(rw); +// return r; +//} +//EXPORT void *my32_SDL_LoadWAV_RW(x64emu_t* emu, void* a, int b, void* c, void* d, void* e) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// void* r = my->SDL_LoadWAV_RW(rw, b, c, d, e); +// if(b==0) +// RWNativeEnd(rw); +// return r; +//} +//EXPORT uint32_t my32_SDL_ReadBE16(x64emu_t* emu, void* a) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// uint32_t r = my->SDL_ReadBE16(rw); +// RWNativeEnd(rw); +// return r; +//} +//EXPORT uint32_t my32_SDL_ReadBE32(x64emu_t* emu, void* a) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// uint32_t r = my->SDL_ReadBE32(rw); +// RWNativeEnd(rw); +// return r; +//} +//EXPORT uint64_t my32_SDL_ReadBE64(x64emu_t* emu, void* a) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// uint64_t r = my->SDL_ReadBE64(rw); +// RWNativeEnd(rw); +// return r; +//} +//EXPORT uint32_t my32_SDL_ReadLE16(x64emu_t* emu, void* a) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// uint32_t r = my->SDL_ReadLE16(rw); +// RWNativeEnd(rw); +// return r; +//} +EXPORT uint32_t my32_SDL_ReadLE32(x64emu_t* emu, void* a) +{ + inplace_SDL_RWops_to_64(a); + SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); + uint32_t r = my->SDL_ReadLE32(rw); + RWNativeEnd(rw); + inplace_SDL_RWops_to_32(a); + return r; +} +//EXPORT uint64_t my32_SDL_ReadLE64(x64emu_t* emu, void* a) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// uint64_t r = my->SDL_ReadLE64(rw); +// RWNativeEnd(rw); +// return r; +//} +//EXPORT uint32_t my32_SDL_WriteBE16(x64emu_t* emu, void* a, uint16_t v) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// uint32_t r = my->SDL_WriteBE16(rw, v); +// RWNativeEnd(rw); +// return r; +//} +//EXPORT uint32_t my32_SDL_WriteBE32(x64emu_t* emu, void* a, uint32_t v) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// uint32_t r = my->SDL_WriteBE32(rw, v); +// RWNativeEnd(rw); +// return r; +//} +//EXPORT uint32_t my32_SDL_WriteBE64(x64emu_t* emu, void* a, uint64_t v) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// uint32_t r = my->SDL_WriteBE64(rw, v); +// RWNativeEnd(rw); +// return r; +//} +//EXPORT uint32_t my32_SDL_WriteLE16(x64emu_t* emu, void* a, uint16_t v) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// uint32_t r = my->SDL_WriteLE16(rw, v); +// RWNativeEnd(rw); +// return r; +//} +//EXPORT uint32_t my32_SDL_WriteLE32(x64emu_t* emu, void* a, uint32_t v) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// uint32_t r = my->SDL_WriteLE32(rw, v); +// RWNativeEnd(rw); +// return r; +//} +//EXPORT uint32_t my32_SDL_WriteLE64(x64emu_t* emu, void* a, uint64_t v) +//{ +// SDL1_RWops_t* rw = RWNativeStart(emu, (SDL1_RWops_t*)a); +// uint32_t r = my->SDL_WriteLE64(rw, v); +// RWNativeEnd(rw); +// return r; +//} + +// SDL1 doesn't really used rw_ops->type, but box64 does, so set sensible value (from SDL2).... +//EXPORT void *my32_SDL_RWFromConstMem(x64emu_t* emu, void* a, int b) +//{ +// SDL1_RWops_t* r = (SDL1_RWops_t*)my->SDL_RWFromConstMem(a, b); +// RWSetType(r, 5); +// return AddNativeRW(emu, r); +//} +//EXPORT void *my32_SDL_RWFromFP(x64emu_t* emu, void* a, int b) +//{ +// SDL1_RWops_t* r = (SDL1_RWops_t*)my->SDL_RWFromFP(a, b); +// RWSetType(r, 2); +// return AddNativeRW(emu, r); +//} +EXPORT void *my32_SDL_RWFromFile(x64emu_t* emu, void* a, void* b) +{ + SDL1_RWops_t* r = (SDL1_RWops_t*)my->SDL_RWFromFile(a, b); + RWSetType(r, 2); + void* ret = AddNativeRW(emu, r); + inplace_SDL_RWops_to_32(ret); + return ret; +} +EXPORT void *my32_SDL_RWFromMem(x64emu_t* emu, void* a, int b) +{ + SDL1_RWops_t* r = (SDL1_RWops_t*)my->SDL_RWFromMem(a, b); + RWSetType(r, 4); + void* ret = AddNativeRW(emu, r); + inplace_SDL_RWops_to_32(ret); + return ret; +} + +EXPORT void my32_SDL_WM_SetIcon(void* s, void* mask) +{ + inplace_SDL_Surface_to_64(s); + my->SDL_WM_SetIcon(s, mask); + inplace_SDL_Surface_to_32(s); +} + +EXPORT void my32_SDL_GetRGB(uint32_t pixel, void* format, void* r, void* g, void* b) +{ + inplace_SDL_PixelFormat_to_64(format); + my->SDL_GetRGB(pixel, format, r, g, b); + inplace_SDL_PixelFormat_to_32(format); +} + +EXPORT void* my32_SDL_GetVideoInfo() +{ + static my_SDL_Palette_t vm_palette; + static my_SDL_PixelFormat_t vm_format; + static my_SDL_VideoInfo_32_t vm = {0}; + my_SDL_VideoInfo_t* r = my->SDL_GetVideoInfo(); + if(!r) return NULL; + vm.hw_available = r->hw_available; + vm.wm_available = r->wm_available; + vm.blit_hw = r->blit_hw; + vm.blit_hw_CC = r->blit_hw_CC; + vm.blit_hw_A = r->blit_hw_A; + vm.blit_sw = r->blit_sw; + vm.blit_sw_CC = r->blit_sw_CC; + vm.blit_sw_A = r->blit_sw_A; + vm.blit_fill = r->blit_fill; + vm.video_mem = r->video_mem; + vm.current_h = r->current_h; + vm.current_w = r->current_w; + if(r->vfmt) { + vm.vfmt = to_ptrv(&vm_format); + memcpy(&vm_format, r->vfmt, sizeof(vm_format)); + if(r->vfmt->palette) { + vm_format.palette = &vm_palette; + memcpy(&vm_palette, r->vfmt->palette, sizeof(vm_palette)); + } + inplace_SDL_PixelFormat_to_32(&vm_format); + } else vm.vfmt = 0; + return &vm; +} + +EXPORT void *my32_SDL_AddTimer(x64emu_t* emu, uint32_t a, void* cb, void* p) +{ + return my->SDL_AddTimer(a, find_TimerCallback_Fct(cb), p); +} + +EXPORT int my32_SDL_RemoveTimer(x64emu_t* emu, void *t) +{ + return my->SDL_RemoveTimer(t); +} + +EXPORT int32_t my32_SDL_SetTimer(x64emu_t* emu, uint32_t t, void* p) +{ + return my->SDL_SetTimer(t, find_TimerCallback_Fct(p)); +} +#if 0 +EXPORT int32_t my32_SDL_BuildAudioCVT(x64emu_t* emu, void* a, uint32_t b, uint32_t c, int32_t d, uint32_t e, uint32_t f, int32_t g) +{ + printf_log(LOG_NONE, "Error, using Unimplemented SDL1 SDL_BuildAudioCVT\n"); + emu->quit = 1; + return 0; +} + +EXPORT int32_t my32_SDL_ConvertAudio(x64emu_t* emu, void* a) +{ + printf_log(LOG_NONE, "Error, using Unimplemented SDL1 SDL_ConvertAudio\n"); + emu->quit = 1; + return 0; +} +#endif +//EXPORT void my32_SDL_SetEventFilter(x64emu_t* emu, void* a) +//{ +// my->SDL_SetEventFilter(find_EvtFilter_Fct(a)); +//} +//EXPORT void *my32_SDL_GetEventFilter(x64emu_t* emu) +//{ +// return reverse_EvtFilterFct(my->SDL_GetEventFilter()); +//} +void* my32_prepare_thread(x64emu_t *emu, void* f, void* arg, int ssize, void** pet); +EXPORT void *my32_SDL_CreateThread(x64emu_t* emu, void* cb, void* p) +{ + void* et = NULL; + void* fnc = my32_prepare_thread(emu, cb, p, 0, &et); + return my->SDL_CreateThread(fnc, et); +} + +EXPORT void my32_SDL_KillThread(x64emu_t* emu, void* p) +{ + my->SDL_KillThread(p); +} + +EXPORT void* my32_SDL_GL_GetProcAddress(x64emu_t* emu, void* name) +{ + khint_t k; + const char* rname = (const char*)name; + return getGLProcAddress32(emu, (glprocaddress_t)my->SDL_GL_GetProcAddress, rname); +} + +// DL functions from wrappedlibdl.c +void* my_dlopen(x64emu_t* emu, void *filename, int flag); +int my_dlclose(x64emu_t* emu, void *handle); +void* my_dlsym(x64emu_t* emu, void *handle, void *symbol); +EXPORT void* my32_SDL_LoadObject(x64emu_t* emu, void* sofile) +{ + return my_dlopen(emu, sofile, 0); // TODO: check correct flag value... +} +EXPORT void my32_SDL_UnloadObject(x64emu_t* emu, void* handle) +{ + my_dlclose(emu, handle); +} +EXPORT void* my32_SDL_LoadFunction(x64emu_t* emu, void* handle, void* name) +{ + return my_dlsym(emu, handle, name); +} + +static my_SDL_Surface_t* sdl1_videomode_org = NULL; +static my_SDL_Palette_t sdl_vm_palette; +static my_SDL_PixelFormat_t sdl_vm_pixelformal; +static my_SDL_Surface_t sdl_vm_surface; +static void* wrapSurface(void* s) +{ + if(!s) return s; + if(s==&sdl_vm_surface) { + my_SDL_Surface_32_t* src = s; + // refressh surface... + sdl1_videomode_org->h = src->h; + sdl1_videomode_org->w = src->w; + sdl1_videomode_org->pitch = src->pitch; + sdl1_videomode_org->flags = src->flags; + sdl1_videomode_org->locked = src->locked; + sdl1_videomode_org->refcount = src->refcount; + sdl1_videomode_org->offset = src->offset; + sdl1_videomode_org->unused1 = src->unused1; + sdl1_videomode_org->format_version = src->format_version; + sdl1_videomode_org->pixels = from_ptrv(src->pixels); + sdl1_videomode_org->map = from_ptrv(src->map); + sdl1_videomode_org->clip_rect.x = src->clip_rect.x; + sdl1_videomode_org->clip_rect.y = src->clip_rect.y; + sdl1_videomode_org->clip_rect.h = src->clip_rect.h; + sdl1_videomode_org->clip_rect.w = src->clip_rect.w; + return sdl1_videomode_org; + } + inplace_SDL_Surface_to_64(s); + return s; +} +static void* unwrapSurface(void* s) +{ + if(!s) return s; + if(s==&sdl_vm_surface || s==sdl1_videomode_org) { + my_SDL_Surface_32_t* dst = (my_SDL_Surface_32_t*)&sdl_vm_surface; + // refressh surface... + dst->h = sdl1_videomode_org->h; + dst->w = sdl1_videomode_org->w; + dst->pitch = sdl1_videomode_org->pitch; + dst->flags = sdl1_videomode_org->flags; + dst->locked = sdl1_videomode_org->locked; + dst->refcount = sdl1_videomode_org->refcount; + dst->offset = sdl1_videomode_org->offset; + dst->unused1 = sdl1_videomode_org->unused1; + dst->format_version = sdl1_videomode_org->format_version; + dst->pixels = to_ptrv(sdl1_videomode_org->pixels); + dst->map = to_ptrv(sdl1_videomode_org->map); + dst->clip_rect.x = sdl1_videomode_org->clip_rect.x; + dst->clip_rect.y = sdl1_videomode_org->clip_rect.y; + dst->clip_rect.h = sdl1_videomode_org->clip_rect.h; + dst->clip_rect.w = sdl1_videomode_org->clip_rect.w; + return s; + } + inplace_SDL_Surface_to_32(s); + return s; +} + +EXPORT void my32_SDL_Quit() +{ + sdl1_videomode_org = NULL; + my->SDL_Quit(); +} + +EXPORT void* my32_SDL_SetVideoMode(int width, int height, int bpp, uint32_t flags) +{ + my_SDL_Surface_t* ret = my->SDL_SetVideoMode(width, height, bpp, flags); + if (!ret) return ret; + sdl1_videomode_org = ret; + memcpy(&sdl_vm_surface, ret, sizeof(sdl_vm_surface)); + if(ret->format) { + memcpy(&sdl_vm_pixelformal, ret->format, sizeof(sdl_vm_pixelformal)); + if(ret->format->palette) { + memcpy(&sdl_vm_palette, ret->format->palette, sizeof(sdl_vm_palette)); + sdl_vm_pixelformal.palette = &sdl_vm_palette; + } + sdl_vm_surface.format = &sdl_vm_pixelformal; + } + inplace_SDL_Surface_to_32(&sdl_vm_surface); + return &sdl_vm_surface; +} + +EXPORT int my32_SDL_LockSurface(void* s) +{ + int ret = my->SDL_LockSurface(wrapSurface(s)); + unwrapSurface(s); + return ret; +} + +EXPORT void my32_SDL_UnlockSurface(void* s) +{ + my->SDL_UnlockSurface(wrapSurface(s)); + unwrapSurface(s); +} + +EXPORT int my32_SDL_Flip(void* s) +{ + int ret = my->SDL_Flip(wrapSurface(s)); + unwrapSurface(s); + return ret; +} + +EXPORT void* my32_SDL_GetVideoSurface() +{ + void* ret = my->SDL_GetVideoSurface(); + return unwrapSurface(ret); +} + +EXPORT void* my32_SDL_CreateRGBSurfaceFrom(void* pixels, int width, int height, int depth, int pitch, uint32_t rmask, uint32_t gmask, uint32_t bmask, uint32_t amask) +{ + void* p = my->SDL_CreateRGBSurfaceFrom(pixels, width, height, depth, pitch, rmask, gmask, bmask, amask); + return unwrapSurface(p); +} + + +EXPORT void my32_SDL_FreeSurface(void* s) +{ + my->SDL_FreeSurface(wrapSurface(s)); + if(s==&sdl_vm_surface) + sdl1_videomode_org = NULL; +} + +EXPORT int my32_SDL_SetColorKey(void* s, uint32_t flags, uint32_t key) +{ + int ret = my->SDL_SetColorKey(wrapSurface(s), flags, key); + unwrapSurface(s); + return ret; +} + +EXPORT int my32_SDL_PollEvent(my_SDL_Event_32_t* evt) +{ + my_SDL_Event_t event; + int ret = my->SDL_PollEvent(evt?(&event):NULL); + if(ret && evt) { + convert_SDL_Event_to_32(evt, &event); + } + return ret; +} + +EXPORT int my32_SDL_PeepEvents(my_SDL_Event_32_t* evts, int num, uint32_t action, uint32_t mask) +{ + my_SDL_Event_t events[num]; + int ret = my->SDL_PeepEvents(events, num, action, mask); + for(int i=0; iSDL_PushEvent(&event); +} + +EXPORT void* my32_SDL_ListModes(my_SDL_PixelFormat_32_t* fmt, uint32_t flags) +{ + my_SDL_PixelFormat_t format; + my_SDL_Palette_t palette; + if(fmt) { + memcpy(&format, fmt, sizeof(format)); + inplace_SDL_PixelFormat_to_64_nopalette(&format); + if(fmt->palette) { + memcpy(&palette, from_ptrv(fmt->palette), sizeof(palette)); + format.palette = &palette; + inplace_SDL_Palette_to_64(&palette); + } + } + void** ret = my->SDL_ListModes(fmt?(&format):NULL, flags); + if(!ret) + return ret; + if(ret==(void**)-1LL) + return ret; + static ptr_t available[256]; + void** p = ret; + int idx = 0; + while((*p) && (idx<255)) { + available[idx++] = to_ptrv(*p); + ++p; + } + available[idx++] = 0; + return &available; +} + +EXPORT uint32_t my32_SDL_MapRGB(my_SDL_PixelFormat_32_t* fmt, uint8_t r, uint8_t g, uint8_t b) +{ + my_SDL_PixelFormat_t format; + my_SDL_Palette_t palette; + if(fmt) { + memcpy(&format, fmt, sizeof(format)); + inplace_SDL_PixelFormat_to_64_nopalette(&format); + if(fmt->palette) { + memcpy(&palette, from_ptrv(fmt->palette), sizeof(palette)); + format.palette = &palette; + inplace_SDL_Palette_to_64(&palette); + } + } + return my->SDL_MapRGB(fmt?(&format):NULL, r, g, b); +} + +EXPORT int my32_SDL_BuildAudioCVT(my_SDL_AudioCVT_32_t* cvt, uint16_t src_fmt, uint16_t src_chn, int src_rate, uint16_t dst_fmt, uint16_t dst_ch, int dst_rate) +{ + my_SDL_AudioCVT_t l_cvt; + int ret = my->SDL_BuildAudioCVT(&l_cvt, src_fmt, src_chn, src_rate, dst_fmt, dst_ch, dst_rate); + if(ret!=-1) + convert_AudioCVT_to_32(cvt, &l_cvt); + return ret; +} + +EXPORT int my32_SDL_ConvertAudio(my_SDL_AudioCVT_32_t* cvt) +{ + my_SDL_AudioCVT_t l_cvt; + convert_AudioCVT_to_64(&l_cvt, cvt); + int ret = my->SDL_ConvertAudio(&l_cvt); + convert_AudioCVT_to_32(cvt, &l_cvt); + return ret; +} + +//EXPORT int32_t my32_SDL_GetWMInfo(x64emu_t* emu, void* p) +//{ +// // does SDL_SysWMinfo needs alignment? +// int ret = my->SDL_GetWMInfo(p); +// my32_SDL_SysWMinfo *info = (my32_SDL_SysWMinfo*)p; +// if(info->info.x11.lock_func) +// info->info.x11.lock_func = (void*)AddCheckBridge(emu->context->system, vFv_32, info->info.x11.lock_func, 0, NULL); +// if(info->info.x11.unlock_func) +// info->info.x11.unlock_func = (void*)AddCheckBridge(emu->context->system, vFv_32, info->info.x11.unlock_func, 0, NULL); +// return ret; +//} + +#define CUSTOM_INIT \ + box64->sdl1allocrw = my->SDL_AllocRW; \ + box64->sdl1freerw = my->SDL_FreeRW; + +#define NEEDED_LIBS "libm.so.6", "libdl.so.2", "librt.so.1" + +#define CUSTOM_FINI \ + my_context->sdl1allocrw = NULL; \ + my_context->sdl1freerw = NULL; + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedsdl1_private.h b/src/wrapped32/wrappedsdl1_private.h new file mode 100644 index 0000000000000000000000000000000000000000..46853bc96f44de322e839f41dee1171dd9c3673b --- /dev/null +++ b/src/wrapped32/wrappedsdl1_private.h @@ -0,0 +1,238 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +// _fini +// _init +GOM(SDL_AddTimer, pFEupp) +GO(SDL_AllocRW, pFv) // no need to use a my_ version here +//GO(SDL_CDClose, vFp) +//GO(SDL_CDEject, iFp) +//GO(SDL_CDName, pFi) +//GO(SDL_CDNumDrives, iFv) +//GO(SDL_CDOpen, pFi) +//GO(SDL_CDPause, iFp) +//GO(SDL_CDPlay, iFpii) +//GO(SDL_CDPlayTracks, iFpiiii) +//GO(SDL_CDResume, iFp) +//GO(SDL_CDStatus, iFp) +//GO(SDL_CDStop, iFp) +//GO(SDL_ClearError, vFv) +//GO(SDL_CondBroadcast, iFp) +//GO(SDL_CondSignal, iFp) +//GO(SDL_CondWait, iFpp) +//GO(SDL_CondWaitTimeout, iFppu) +//GO(SDL_ConvertSurface, pFppu) +//GO(SDL_CreateCond, pFv) +//GO(SDL_CreateCursor, pFppiiii) +//GO(SDL_CreateMutex, pFv) +//GO(SDL_CreateRGBSurface, pFuiiiuuuu) +GOM(SDL_CreateRGBSurfaceFrom, pFpiiiiuuuu) //%noE +GO(SDL_CreateSemaphore, pFu) +GOM(SDL_CreateThread, pFEpp) +//GO(SDL_CreateYUVOverlay, pFiiup) +GO(SDL_Delay, vFu) +//GO(SDL_DestroyCond, vFp) +//GO(SDL_DestroyMutex, vFp) +//GO(SDL_DestroySemaphore, vFp) +//GO(SDL_DisplayFormat, pFp) +//GO(SDL_DisplayFormatAlpha, pFp) +//GO(SDL_DisplayYUVOverlay, iFpp) +GO(SDL_EnableKeyRepeat, iFii) +GO(SDL_EnableUNICODE, iFi) +GO(SDL_Error, vFu) +GO(SDL_EventState, CFCi) +//GO(SDL_FillRect, iFppu) +GOM(SDL_Flip, iFp) //%noE +GO(SDL_FreeCursor, vFp) +GO(SDL_FreeRW, vFp) +GOM(SDL_FreeSurface, vFp) //%noE +//GO(SDL_FreeYUVOverlay, vFp) +GO(SDL_GL_GetAttribute, iFup) +GOM(SDL_GL_GetProcAddress, pFEp) +GO(SDL_GL_LoadLibrary, iFp) +GO(SDL_GL_Lock, vFv) +GO(SDL_GL_SetAttribute, iFui) +GO(SDL_GL_SwapBuffers, vFv) +GO(SDL_GL_Unlock, vFv) +//GO(SDL_GL_UpdateRects, vFip) +GO(SDL_GetAppState, CFv) +//GO(SDL_GetClipRect, vFpp) +//GO(SDL_GetCursor, pFv) +GO(SDL_GetError, pFv) +//GOM(SDL_GetEventFilter, pFEv) +//GO(SDL_GetGammaRamp, iFppp) +GO(SDL_GetKeyName, pFu) +//GO(SDL_GetKeyRepeat, vFpp) +GO(SDL_GetKeyState, pFp) +//GO(SDL_GetModState, uFv) +GO(SDL_GetMouseState, uFpp) +GOM(SDL_GetRGB, vFupppp) //%noE +//GO(SDL_GetRGBA, vFuppppp) +//GO(SDL_GetRelativeMouseState, CFpp) +//GO(SDL_GetThreadID, uFp) +GO(SDL_GetTicks, uFv) +GOM(SDL_GetVideoInfo, pFv) //%noE +GOM(SDL_GetVideoSurface, pFv) //%noE +//GOM(SDL_GetWMInfo, iFEp) +GOM(SDL_Has3DNow, iFv) //%noE +GOM(SDL_Has3DNowExt, iFv) //%noE +GOM(SDL_HasAltiVec, iFv) //%noE +GOM(SDL_HasMMX, iFv) //%noE +GOM(SDL_HasMMXExt, iFv) //%noE +GOM(SDL_HasRDTSC, iFv) //%noE +GOM(SDL_HasSSE, iFv) //%noE +GOM(SDL_HasSSE2, iFv) //%noE +GO(SDL_Init, iFu) +//GO(SDL_InitQuickDraw, vFp) +GO(SDL_InitSubSystem, iFu) +GO(SDL_JoystickClose, vFp) +GO(SDL_JoystickEventState, iFi) +GO(SDL_JoystickGetAxis, wFpi) +GO(SDL_JoystickGetBall, iFpipp) +GO(SDL_JoystickGetButton, CFpi) +GO(SDL_JoystickGetHat, uFpi) +GO(SDL_JoystickIndex, iFp) +GO(SDL_JoystickName, pFi) +GO(SDL_JoystickNumAxes, iFp) +GO(SDL_JoystickNumBalls, iFp) +GO(SDL_JoystickNumButtons, iFp) +GO(SDL_JoystickNumHats, iFp) +GO(SDL_JoystickOpen, pFi) +GO(SDL_JoystickOpened, iFi) +GO(SDL_JoystickUpdate, vFv) +GOM(SDL_KillThread, vFEp) +GO(SDL_Linked_Version, pFv) +GOM(SDL_ListModes, pFpu) //%noE +GOM(SDL_LoadBMP_RW, pFEpi) +GOM(SDL_LoadFunction, pFEpp) +GOM(SDL_LoadObject, pFEp) +GOM(SDL_LockSurface, iFp) //%noE +//GO(SDL_LockYUVOverlay, iFp) +//GO(SDL_LowerBlit, iFpppp) +GOM(SDL_MapRGB, uFpCCC) //%noE +//GO(SDL_MapRGBA, uFpCCCC) +GO(SDL_NumJoysticks, iFv) +GOM(SDL_PeepEvents, iFpiuu) //%noE +GOM(SDL_PollEvent, iFp) //%noE +GO(SDL_PumpEvents, vFv) +GOM(SDL_PushEvent, iFp) //%noE +GOM(SDL_Quit, vFv) //%noE +GO(SDL_QuitSubSystem, vFu) +//GOM(SDL_RWFromConstMem, pFEpi) +//GOM(SDL_RWFromFP, pFEpi) +GOM(SDL_RWFromFile, pFEpp) +GOM(SDL_RWFromMem, pFEpi) +//GOM(SDL_ReadBE16, uFEp) +//GOM(SDL_ReadBE32, uFEp) +//GOM(SDL_ReadBE64, UFEp) +//GOM(SDL_ReadLE16, uFEp) +GOM(SDL_ReadLE32, uFEp) +//GOM(SDL_ReadLE64, UFEp) +//GO(SDL_RegisterApp, iFpup) +GOM(SDL_RemoveTimer, iFEp) +//GOM(SDL_SaveBMP_RW, iFEppi) +GO(SDL_SemPost, iFp) +GO(SDL_SemTryWait, iFp) +GO(SDL_SemValue, uFp) +GO(SDL_SemWait, iFp) +GO(SDL_SemWaitTimeout, iFpu) +GO(SDL_SetAlpha, iFpuC) +//GO(SDL_SetClipRect, uFpp) +GOM(SDL_SetColorKey, iFpuu) //%noE +//GO(SDL_SetColors, iFppii) +//GO(SDL_SetCursor, vFp) +GO(SDL_SetError, vFpppppp) // use ..., so putting arbitrary number of arguments... +//GOM(SDL_SetEventFilter, vFEp) +GO(SDL_SetGamma, iFfff) +GO(SDL_SetGammaRamp, iFppp) +GO(SDL_SetModState, vFu) +//GO(SDL_SetModuleHandle, vFp) +//GO(SDL_SetPalette, iFpipii) +GOM(SDL_SetTimer, iFEup) +GOM(SDL_SetVideoMode, pFiiiu) //%noE +GO(SDL_ShowCursor, iFi) +//GO(SDL_SoftStretch, iFpppp) +GO(SDL_ThreadID, uFv) +GOM(SDL_UnloadObject, vFEp) +GOM(SDL_UnlockSurface, vFp) //%noE +//GO(SDL_UnlockYUVOverlay, vFp) +GO(SDL_UnregisterApp, vFv) +//GO(SDL_UpdateRect, vFpiiuu) +//GO(SDL_UpdateRects, vFpip) +//GO(SDL_UpperBlit, iFpppp) +GO(SDL_VideoDriverName, pFpi) +//GO(SDL_VideoInit, iFpu) +GO(SDL_VideoModeOK, iFiiiu) +GO(SDL_VideoQuit, vFv) +//GO(SDL_WM_GetCaption, vFpp) +GO(SDL_WM_GrabInput, iFi) +GO(SDL_WM_IconifyWindow, iFv) +GO(SDL_WM_SetCaption, vFpp) +GOM(SDL_WM_SetIcon, vFpp) //%noE +//GO(SDL_WM_ToggleFullScreen, iFp) +//GO(SDL_WaitEvent, iFp) +//GO(SDL_WaitThread, vFpp) +GO(SDL_WarpMouse, vFWW) +GO(SDL_WasInit, uFu) +//GOM(SDL_WriteBE16, uFEpW) +//GOM(SDL_WriteBE32, uFEpu) +//GOM(SDL_WriteBE64, uFEpU) +//GOM(SDL_WriteLE16, uFEpW) +//GOM(SDL_WriteLE32, uFEpu) +//GOM(SDL_WriteLE64, uFEpU) +//GO(SDL_framerateDelay, uFp) +//GO(SDL_getFramecount, iFp) +//GO(SDL_getFramerate, iFp) +//GO(SDL_iconv, LFppppp) +//GO(SDL_iconv_close, iFp) +//GO(SDL_iconv_open, pFpp) +//GO(SDL_iconv_string, pFpppL) +//GO(SDL_initFramerate, vFp) +//GO(SDL_lltoa, pFlpi) +//GO(SDL_ltoa, pFlpi) +//GO(SDL_main, iFip) +//GO(SDL_memcmp, iFppu) +//GO(SDL_mutexP, iFp) +//GO(SDL_mutexV, iFp) +//GO(SDL_revcpy, pFppL) +//GO(SDL_setFramerate, iFpu) +//GO(SDL_snprintf, iFpupppppp) // use ... +//GO(SDL_sscanf, iFppppppp) // use ... +//GO(SDL_strcasecmp, iFpp) +//GO(SDL_strchr, pFpi) +//GO(SDL_strcmp, iFpp) +//GO(SDL_strdup, pFp) +//GO(SDL_strlcat, LFppL) +//GO(SDL_strlcpy, uFppu) +//GO(SDL_strlen, uFp) +//GO(SDL_strlwr, pFp) +//GO(SDL_strncasecmp, iFppu) +//GO(SDL_strncmp, iFppu) +//GO(SDL_strrchr, pFpi) +//GO(SDL_strrev, pFp) +//GO(SDL_strstr, pFpp) +//GO(SDL_strtod, dFpp) +//GO(SDL_strtol, iFppi) +//GO(SDL_strtoll, IFppi) +//GO(SDL_strtoul, uFppi) +//GO(SDL_strtoull, UFppi) +//GO(SDL_strupr, pFp) +//GO(SDL_ulltoa, pFLpi) +//GO(SDL_ultoa, pFLpi) +//GOM(SDL_vsnprintf, iFpupV) +GOM(SDL_OpenAudio, iFEpp) +GO(SDL_LockAudio, vFv) +GO(SDL_UnlockAudio, vFv) +GO(SDL_PauseAudio, vFi) +GO(SDL_GetAudioStatus, uFv) +//GO(SDL_LoadWAV, pFpppp) +//GO(SDL_FreeWAV, vFp) +//GOM(SDL_LoadWAV_RW, pFEpippp) +GOM(SDL_BuildAudioCVT, iFpWCiWCi) //%noE +GOM(SDL_ConvertAudio, iFp) //%noE +//GO(SDL_AudioInit, iFp) +GO(SDL_AudioQuit, vFv) +GO(SDL_MixAudio, vFppui) +GO(SDL_CloseAudio, vFv) +//GO(SDL_AudioDriverName, pFpi) diff --git a/src/wrapped32/wrappedsdl2.c b/src/wrapped32/wrappedsdl2.c new file mode 100644 index 0000000000000000000000000000000000000000..d9ab15d783d67c19972acaf79d9143ece42d2883 --- /dev/null +++ b/src/wrapped32/wrappedsdl2.c @@ -0,0 +1,670 @@ +#include "sdl2align32.h" +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "callback.h" +#include "librarian.h" +#include "box32context.h" +#include "emu/x64emu_private.h" +#include "myalign32.h" +#include "gltools.h" +#include "sdl2rwops.h" + +#include "x64trace.h" +#include "threads.h" + +#include "sdl2align32.h" + +#include "generated/wrappedsdl2defs32.h" +#define JFEi_32 pFEpi_32 + +extern const char* sdl2Name; +#define LIBNAME sdl2 + +typedef struct { + uint8_t data[16]; +} SDL2_GUID_t; + +typedef struct { + int32_t freq; + uint16_t format; + uint8_t channels; + uint8_t silence; + uint16_t samples; + uint16_t padding; + uint32_t size; + void (*callback)(void* userdata, uint8_t* stream, int32_t len); + void* userdata; +} SDL2_AudioSpec; + +typedef struct __attribute__((packed, aligned(4))) { + int32_t freq; + uint16_t format; + uint8_t channels; + uint8_t silence; + uint16_t samples; + uint16_t padding; + uint32_t size; + ptr_t callback; // void (*callback)(void *userdata, uint8_t *stream, int32_t len); + ptr_t userdata; // void *userdata; +} SDL2_AudioSpec32; + +typedef void (*vFiupV_t)(int, uint32_t, void*, va_list); +#define ADDED_FUNCTIONS() \ + GO(SDL_LogMessageV, vFiupV_t) \ + GO(SDL_AllocRW, sdl2_allocrw) \ + GO(SDL_FreeRW, sdl2_freerw) + +#define ADDED_FINI() + +#include "generated/wrappedsdl2types32.h" +#include "wrappercallback32.h" + +#define SUPER() \ + GO(0) \ + GO(1) \ + GO(2) \ + GO(3) \ + GO(4) + + +// eventfilter +#define GO(A) \ +static uintptr_t my_eventfilter_fct_##A = 0; \ +static my_SDL2_Event_32_t event_##A = {0}; \ +static int my_eventfilter_##A(void* userdata, void* event) \ +{ \ + convert_SDL2_Event_to_32(&event_##A, event); \ + int ret = (int)RunFunctionFmt(my_eventfilter_fct_##A, "pp", userdata, &event_##A); \ + return ret; \ +} +SUPER() +#undef GO +static void* find_eventfilter_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_eventfilter_fct_##A == (uintptr_t)fct) return my_eventfilter_##A; + SUPER() + #undef GO + #define GO(A) if(my_eventfilter_fct_##A == 0) {my_eventfilter_fct_##A = (uintptr_t)fct; return my_eventfilter_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for 32bits SDL2 eventfilter callback\n"); + return NULL; + +} +static void* reverse_eventfilter_Fct(void* fct) +{ + if(!fct) return fct; + if(CheckBridged(my_lib->w.bridge, fct)) + return (void*)CheckBridged(my_lib->w.bridge, fct); + #define GO(A) if(my_eventfilter_##A == fct) return (void*)my_eventfilter_fct_##A; + SUPER() + #undef GO + return (void*)AddBridge(my_lib->w.bridge, iFpp_32, fct, 0, NULL); +} +// AudioCallback +#define GO(A) \ + static uintptr_t my32_2_AudioCallback_fct_##A = 0; \ + static void my32_2_AudioCallback_##A(void* a, void* b, int c) \ + { \ + RunFunctionFmt(my32_2_AudioCallback_fct_##A, "ppi", a, b, c); \ + } +SUPER() +#undef GO +static void* find_AudioCallback_Fct(void* fct) +{ + if (!fct) return NULL; + void* p; + if ((p = GetNativeFnc((uintptr_t)fct))) return p; +#define GO(A) \ + if (my32_2_AudioCallback_fct_##A == (uintptr_t)fct) return my32_2_AudioCallback_##A; + SUPER() +#undef GO +#define GO(A) \ + if (my32_2_AudioCallback_fct_##A == 0) { \ + my32_2_AudioCallback_fct_##A = (uintptr_t)fct; \ + return my32_2_AudioCallback_##A; \ + } + SUPER() +#undef GO + printf_log(LOG_NONE, "Warning, no more slot for 32bit SDL2 AudioCallback callback\n"); + return NULL; +} + +EXPORT int my32_2_SDL_GetDesktopDisplayMode(int displayIndex, void* mode) +{ + my_SDL2_DisplayMode_t my_mode = { 0 }; + int ret = my->SDL_GetDesktopDisplayMode(displayIndex, &my_mode); + convert_SDL2_DisplayMode_to_32(mode, &my_mode); + return ret; +} + +EXPORT int my32_2_SDL_GetCurrentDisplayMode(int displayIndex, void* mode) +{ + my_SDL2_DisplayMode_t my_mode = { 0 }; + int ret = my->SDL_GetCurrentDisplayMode(displayIndex, &my_mode); + convert_SDL2_DisplayMode_to_32(mode, &my_mode); + return ret; +} + +EXPORT int my32_2_SDL_GetWindowDisplayMode(void* window, void* mode) +{ + my_SDL2_DisplayMode_t my_mode = { 0 }; + int ret = my->SDL_GetWindowDisplayMode(window, &my_mode); + convert_SDL2_DisplayMode_to_32(mode, &my_mode); + return ret; +} + +EXPORT int my32_2_SDL_GetDisplayMode(int dispIndex, int modeIndex, void* mode) +{ + my_SDL2_DisplayMode_t mode_l = { 0 }; + int ret = my->SDL_GetDisplayMode(dispIndex, modeIndex, &mode_l); + convert_SDL2_DisplayMode_to_32(mode, &mode_l); + return ret; +} + +EXPORT int my32_2_SDL_SetWindowDisplayMode(void* window, void* mode) +{ + my_SDL2_DisplayMode_t mode_l = { 0 }; + convert_SDL2_DisplayMode_to_64(&mode_l, mode); + return my->SDL_SetWindowDisplayMode(window, &mode_l); +} + +EXPORT void* my32_2_SDL_GetClosestDisplayMode(int index, void* mode, void* closest) +{ + my_SDL2_DisplayMode_t mode_l = { 0 }; + my_SDL2_DisplayMode_t closest_l = { 0 }; + convert_SDL2_DisplayMode_to_64(&mode_l, mode); + void* ret = my->SDL_GetClosestDisplayMode(index, &mode_l, &closest_l); + if(!ret) return NULL; + convert_SDL2_DisplayMode_to_32(closest, &closest_l); + return closest; +} + +EXPORT void* my32_2_SDL_JoystickGetDeviceGUID(void* ret, int index) +{ + *(SDL2_GUID_t*)ret = my->SDL_JoystickGetDeviceGUID(index); + return ret; +} + +EXPORT void* my32_2_SDL_JoystickGetGUIDFromString(void* ret, void* s) +{ + *(SDL2_GUID_t*)ret = my->SDL_JoystickGetGUIDFromString(s); + return ret; +} + + +EXPORT int my32_2_SDL_OpenAudio(x64emu_t* emu, void* d, void* o) +{ + SDL2_AudioSpec desired = { 0 }; + SDL2_AudioSpec output = { 0 }; + SDL2_AudioSpec32* d_ = d; + desired.channels = d_->channels; + desired.format = d_->format; + desired.freq = d_->freq; + desired.samples = d_->samples; + desired.padding = d_->padding; + desired.silence = d_->silence; + desired.size = d_->size; + desired.userdata = from_ptrv(d_->userdata); + desired.callback = find_AudioCallback_Fct(from_ptrv(d_->callback)); + int ret = my->SDL_OpenAudio(&desired, &output); + if (ret <= 0) { + return ret; + } + + if (o) { + SDL2_AudioSpec32* o_ = o; + o_->channels = output.channels; + o_->format = output.format; + o_->freq = output.freq; + o_->samples = output.samples; + o_->padding = output.padding; + o_->silence = output.silence; + o_->size = output.size; + o_->userdata = to_ptrv(output.userdata); + o_->callback = to_ptrv(output.callback); + } + return ret; +} + +EXPORT uint32_t my32_2_SDL_OpenAudioDevice(x64emu_t* emu, void* device, int iscapture, void* d, void* o, int allowed) +{ + SDL2_AudioSpec desired = { 0 }; + SDL2_AudioSpec output = { 0 }; + SDL2_AudioSpec32* d_ = d; + desired.channels = d_->channels; + desired.format = d_->format; + desired.freq = d_->freq; + desired.samples = d_->samples; + desired.padding = d_->padding; + desired.silence = d_->silence; + desired.size = d_->size; + desired.userdata = from_ptrv(d_->userdata); + desired.callback = find_AudioCallback_Fct(from_ptrv(d_->callback)); + uint32_t ret = my->SDL_OpenAudioDevice(device, iscapture, &desired, &output, allowed); + + if (o) { + SDL2_AudioSpec32* o_ = o; + o_->channels = output.channels; + o_->format = output.format; + o_->freq = output.freq; + o_->samples = output.samples; + o_->padding = output.padding; + o_->silence = output.silence; + o_->size = output.size; + o_->userdata = to_ptrv(output.userdata); + o_->callback = to_ptrv(output.callback); + } + return ret; +} + + +EXPORT int my32_2_SDL_PollEvent(my_SDL2_Event_32_t* evt) +{ + my_SDL2_Event_t event; + int ret = my->SDL_PollEvent(evt ? (&event) : NULL); + if (ret && evt) { + convert_SDL2_Event_to_32(evt, &event); + } + return ret; +} + +EXPORT int my32_2_SDL_PeepEvents(x64emu_t* emu, my_SDL2_Event_32_t* evt, int n, uint32_t action, uint32_t minType, uint32_t maxType) +{ + my_SDL2_Event_t event[n]; + int ret = my->SDL_PeepEvents(event, n, action, minType, maxType); + if (ret>0) { + for(int i=0; icontext->fullpath); + char* b = strrchr(p, '/'); + if (b) *(b + 1) = '\0'; + return p; +} + +EXPORT void my32_2_SDL_Log(x64emu_t* emu, void* fmt, void* b) +{ + myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + my->SDL_LogMessageV(0, 3, fmt, VARARGS_32); +} + +EXPORT int my32_2_SDL_vsnprintf(x64emu_t* emu, void* buff, size_t s, void* fmt, void* b) +{ + myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + int r = vsnprintf(buff, s, fmt, VARARGS_32); + return r; +} + +EXPORT int my32_2_SDL_snprintf(x64emu_t* emu, void* buff, size_t s, void* fmt, uint64_t* b) +{ + (void)emu; + myStackAlign32((const char*)fmt, (uint32_t*)b, emu->scratch); + PREPARE_VALIST_32; + return vsnprintf(buff, s, fmt, VARARGS_32); +} + +EXPORT void* my32_2_SDL_GL_GetProcAddress(x64emu_t* emu, void* name) +{ + khint_t k; + const char* rname = (const char*)name; + return getGLProcAddress32(emu, (glprocaddress_t)my->SDL_GL_GetProcAddress, rname); +} + +EXPORT void* my32_2_SDL_CreateRGBSurfaceWithFormatFrom(x64emu_t* emu, void* pixels, int width, int height, int depth, int pitch, uint32_t format) +{ + void* p = my->SDL_CreateRGBSurfaceWithFormatFrom(pixels, width, height, depth, pitch, format); + inplace_SDL2_Surface_to_32(p); + return p; +} + +EXPORT void* my32_2_SDL_CreateRGBSurface(x64emu_t* emu, uint32_t flags, int width, int height, int depth, uint32_t Rmask, uint32_t Gmask, uint32_t Bmask, uint32_t Amask) +{ + void* p = my->SDL_CreateRGBSurface(flags, width, height, depth, Rmask, Gmask, Bmask, Amask); + inplace_SDL2_Surface_to_32(p); + return p; +} + +EXPORT void* my32_2_SDL_CreateRGBSurfaceFrom(x64emu_t* emu, void* pixels, int width, int height, int depth, int pitch, uint32_t rmask, uint32_t gmask, uint32_t bmask, uint32_t amask) +{ + void* p = my->SDL_CreateRGBSurfaceFrom(pixels, width, height, depth, pitch, rmask, gmask, bmask, amask); + inplace_SDL2_Surface_to_32(p); + return p; +} + + +EXPORT void my32_2_SDL_SetWindowIcon(x64emu_t* emu, void* window, void* icon) +{ + inplace_SDL2_Surface_to_64(icon); + my->SDL_SetWindowIcon(window, icon); + inplace_SDL2_Surface_to_32(icon); +} + +EXPORT void* my32_2_SDL_CreateColorCursor(void* s, int x, int y) +{ + inplace_SDL2_Surface_to_64(s); + void* ret = my->SDL_CreateColorCursor(s, x, y); + inplace_SDL2_Surface_to_32(s); + return ret; +} + +EXPORT int my32_2_SDL_FillRect(x64emu_t* emu, void* s, void* rect, uint32_t color) +{ + inplace_SDL2_Surface_to_64(s); + int ret = my->SDL_FillRect(s, rect, color); + inplace_SDL2_Surface_to_32(s); + return ret; +} + +EXPORT void* my32_2_SDL_CreateTextureFromSurface(void* r, void* s) +{ + inplace_SDL2_Surface_to_64(s); + void* ret = my->SDL_CreateTextureFromSurface(r, s); + inplace_SDL2_Surface_to_32(s); + return ret; +} + +EXPORT int my32_2_SDL_SetColorKey(void* s, int flag, uint32_t color) +{ + inplace_SDL2_Surface_to_64(s); + int ret = my->SDL_SetColorKey(s, flag, color); + inplace_SDL2_Surface_to_32(s); + return ret; +} + +EXPORT void* my32_2_SDL_ConvertSurface(void* s, my_SDL2_PixelFormat_32_t* fmt, uint32_t flags) +{ + inplace_SDL2_Surface_to_64(s); + void* ret = my->SDL_ConvertSurface(s, replace_SDL2_PixelFormat_to_64_ext(fmt), flags); + inplace_SDL2_Surface_to_32(s); + if(ret!=s) inplace_SDL2_Surface_to_32(ret); + return ret; +} + +EXPORT void* my32_2_SDL_ConvertSurfaceFormat(void* s, uint32_t fmt, uint32_t flags) +{ + inplace_SDL2_Surface_to_64(s); + void* ret = my->SDL_ConvertSurfaceFormat(s, fmt, flags); + inplace_SDL2_Surface_to_32(s); + if(ret!=s) inplace_SDL2_Surface_to_32(ret); + return ret; +} + +EXPORT void my32_2_SDL_FreeSurface(x64emu_t* emu, void* surface) +{ + inplace_SDL2_Surface_to_64(surface); + my->SDL_FreeSurface(surface); +} + +void* my32_prepare_thread(x64emu_t* emu, void* f, void* arg, int ssize, void** pet); +EXPORT void* my32_2_SDL_CreateThread(x64emu_t* emu, void* f, void* n, void* p) +{ + void* et = NULL; + void* fnc = my32_prepare_thread(emu, f, p, 0, &et); + return my->SDL_CreateThread(fnc, n, et); +} + +EXPORT int my32_2_SDL_WaitEventTimeout(my_SDL2_Event_32_t* evt, int timeout) +{ + my_SDL2_Event_t event = {0}; + int ret = my->SDL_WaitEventTimeout(evt?(&event):NULL, timeout); + convert_SDL2_Event_to_32(evt, &event); + return ret; +} + +EXPORT int my32_2_SDL_PushEvent(my_SDL2_Event_32_t* evt) +{ + my_SDL2_Event_t event = {0}; + convert_SDL2_Event_to_64(&event, evt); + return my->SDL_PushEvent(&event); +} + +EXPORT void my32_2_SDL_AddEventWatch(x64emu_t* emu, void* p, void* userdata) +{ + my->SDL_AddEventWatch(find_eventfilter_Fct(p), userdata); +} +EXPORT void my32_2_SDL_DelEventWatch(x64emu_t* emu, void* p, void* userdata) +{ + my->SDL_DelEventWatch(find_eventfilter_Fct(p), userdata); +} +EXPORT void my32_2_SDL_SetEventFilter(x64emu_t* emu, void* p, void* userdata) +{ + my->SDL_SetEventFilter(find_eventfilter_Fct(p), userdata); +} + +EXPORT void* my32_2_SDL_RWFromFile(x64emu_t* emu, void* a, void* b) +{ + SDL2_RWops_t* r = (SDL2_RWops_t*)my->SDL_RWFromFile(a, b); + void* ret = AddNativeRW2(emu, r); + inplace_SDL2_RWops_to_32(ret); + return ret; +} + +EXPORT void *my32_2_SDL_LoadBMP_RW(x64emu_t* emu, void* a, int b) +{ + inplace_SDL2_RWops_to_64(a); + SDL2_RWops_t* rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + void* r = my->SDL_LoadBMP_RW(rw, b); + if(b==0) { + RWNativeEnd2(rw); + inplace_SDL2_RWops_to_32(a); + } + inplace_SDL2_Surface_to_32(r); + return r; +} +EXPORT int my32_2_SDL_GameControllerAddMappingsFromRW(x64emu_t* emu, void* a, int b) +{ + inplace_SDL2_RWops_to_64(a); + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + int r = my->SDL_GameControllerAddMappingsFromRW(rw, b); + if(b==0) { + RWNativeEnd2(rw); + inplace_SDL2_RWops_to_32(a); + } + return r; +} + +EXPORT int64_t my32_2_SDL_RWseek(x64emu_t* emu, void* a, int64_t offset, int whence) +{ + //sdl2_my_t *my = (sdl2_my_t *)emu->context->sdl2lib->priv.w.p2; + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + int64_t ret = RWNativeSeek2(rw, offset, whence); + RWNativeEnd2(rw); + return ret; +} +EXPORT int64_t my32_2_SDL_RWtell(x64emu_t* emu, void* a) +{ + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + int64_t ret = RWNativeSeek2(rw, 0, 1); //1 == RW_SEEK_CUR + RWNativeEnd2(rw); + return ret; +} +EXPORT int64_t my32_2_SDL_RWsize(x64emu_t* emu, void* a) +{ + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + int64_t ret = RWNativeSize2(rw); //1 == RW_SEEK_CUR + RWNativeEnd2(rw); + return ret; +} +EXPORT uint64_t my32_2_SDL_RWread(x64emu_t* emu, void* a, void* ptr, uint64_t size, uint64_t maxnum) +{ + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + uint64_t ret = RWNativeRead2(rw, ptr, size, maxnum); + RWNativeEnd2(rw); + return ret; +} +EXPORT uint64_t my32_2_SDL_RWwrite(x64emu_t* emu, void* a, const void* ptr, uint64_t size, uint64_t maxnum) +{ + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + uint64_t ret = RWNativeWrite2(rw, ptr, size, maxnum); + RWNativeEnd2(rw); + return ret; +} +EXPORT int my32_2_SDL_RWclose(x64emu_t* emu, void* a) +{ + //sdl2_my_t *my = (sdl2_my_t *)emu->context->sdl2lib->priv.w.p2; + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + return RWNativeClose2(rw); +} + +typedef struct SDL_version_s +{ + uint8_t major; + uint8_t minor; + uint8_t patch; +} SDL_version_t; + +typedef struct SDL_version_32_s //removed packed attribute +{ + uint8_t major; + uint8_t minor; + uint8_t patch; +} SDL_version_32_t; + +typedef struct SDL_SysWMinfo_s +{ + SDL_version_t version; + int subsystem; // 1=Windows, 2 =X11, 6=Wayland + union + { + struct + { + void* display; //Display + unsigned long window; //Window + } x11; + uint8_t dummy[64]; + } info; +} SDL_SysWMinfo_t; + +typedef struct SDL_SysWMinfo_32_s +{ + SDL_version_32_t version; + int subsystem; // 1=Windows, 2 =X11, 6=Wayland + union + { + struct + { + ptr_t display; //Display* + ulong_t window; //Window + } x11; + uint8_t dummy[64]; + } info; +} SDL_SysWMinfo_32_t; +void* FindDisplay(void* d); +EXPORT int my32_2_SDL_GetWindowWMInfo(void* w, SDL_SysWMinfo_32_t* i) +{ + // 32bits and 64bits have the same size... + // TODO: Check if it's true + int ret = my->SDL_GetWindowWMInfo(w, i); + if(i->subsystem==2) { + // inplace conversion + SDL_SysWMinfo_t* i_l = (SDL_SysWMinfo_t*) i; + i->info.x11.display = to_ptrv(FindDisplay(i_l->info.x11.display)); + i->info.x11.window = to_ulong(i_l->info.x11.window); + } + return ret; +} + +typedef struct my_SDL_MessageBoxButtonData_s +{ + uint32_t flags; + int buttonid; + const char* text; +} my_SDL_MessageBoxButtonData_t; + +typedef struct my_SDL_MessageBoxData_s +{ + uint32_t flags; + void* window; //SDL_Window* + const char* title; + const char* message; + int numbuttons; + my_SDL_MessageBoxButtonData_t* buttons; + void* colorScheme; //const SDL_MessageBoxColorScheme +} my_SDL_MessageBoxData_t; + +typedef struct my_SDL_MessageBoxButtonData_32_s +{ + uint32_t flags; + int buttonid; + ptr_t text; //const char* +} my_SDL_MessageBoxButtonData_32_t; + +typedef struct my_SDL_MessageBoxData_32_s +{ + uint32_t flags; + ptr_t window; //SDL_Window* + ptr_t title; //const char* + ptr_t message; //const char* + int numbuttons; + ptr_t buttons; //my_SDL_MessageBoxButtonData_t* + ptr_t colorScheme; //const SDL_MessageBoxColorScheme +} my_SDL_MessageBoxData_32_t; + +EXPORT int my32_2_SDL_ShowMessageBox(my_SDL_MessageBoxData_32_t* msgbox, int* btn) +{ + my_SDL_MessageBoxData_t msgbox_l; + my_SDL_MessageBoxButtonData_t btns_l[msgbox->numbuttons]; + msgbox_l.flags = msgbox->flags; + msgbox_l.window = from_ptrv(msgbox->window); + msgbox_l.title = from_ptrv(msgbox->title); + msgbox_l.message = from_ptrv(msgbox->message); + msgbox_l.numbuttons = msgbox->numbuttons; + msgbox_l.buttons = btns_l; + msgbox_l.colorScheme = from_ptrv(msgbox->colorScheme); + my_SDL_MessageBoxButtonData_32_t* src = from_ptrv(msgbox->buttons); + for(int i=0; iSDL_ShowMessageBox(&msgbox_l, btn); +} + +EXPORT unsigned long my32_2_SDL_GetThreadID(x64emu_t* emu, void* thread) +{ + unsigned long ret = my->SDL_GetThreadID(thread); + int max = 10; + while (!ret && max--) { + sched_yield(); + ret = my->SDL_GetThreadID(thread); + } + return ret; +} + +#define ALTMY my32_2_ + +#define CUSTOM_INIT \ + box64->sdl2allocrw = my->SDL_AllocRW; \ + box64->sdl2freerw = my->SDL_FreeRW; + +#define NEEDED_LIBS "libdl.so.2", "libm.so.6", "librt.so.1", "libpthread.so.0" + +#define CUSTOM_FINI \ + my_context->sdl2allocrw = NULL; \ + my_context->sdl2freerw = NULL; + + +#include "wrappedlib_init32.h" \ No newline at end of file diff --git a/src/wrapped32/wrappedsdl2_private.h b/src/wrapped32/wrappedsdl2_private.h new file mode 100644 index 0000000000000000000000000000000000000000..05b090f33d3b572f08611ac375cb21488df48774 --- /dev/null +++ b/src/wrapped32/wrappedsdl2_private.h @@ -0,0 +1,751 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh! +#endif + +//%S J SDL2_GUID_t uuuu +// SDL_GUID is struct uin8_t data[16] => UU when in args, H when is return + +// _fini +// _init +//GO(SDL_abs, iFi) +//GO(SDL_acos, dFd) +//GO(SDL_acosf, fFf) +GOM(SDL_AddEventWatch, vFEpp) +// SDL_AddHintCallback +//GOM(SDL_AddTimer, pFEupp) +//GO(SDL_AllocFormat, pFu) +//GO(SDL_AllocPalette, pFi) +//GO(SDL_AllocRW, pFv) // no need to create a "my_" probably +GO(SDL_asin, dFd) +GO(SDL_asinf, fFf) +GO(SDL_atan, dFd) +GO(SDL_atan2, dFdd) +GO(SDL_atan2f, fFff) +GO(SDL_atanf, fFf) +GO(SDL_atof, dFp) +GO(SDL_atoi, iFp) +GO(SDL_AtomicAdd, iFpi) +GO(SDL_AtomicCAS, uFpii) +//GO(SDL_AtomicCASPtr, uFppp) +GO(SDL_AtomicGet, iFp) +//GO(SDL_AtomicGetPtr, pFp) +GO(SDL_AtomicLock, vFp) +GO(SDL_AtomicSet, iFpi) +//GO(SDL_AtomicSetPtr, pFpp) +GO(SDL_AtomicTryLock, uFp) +GO(SDL_AtomicUnlock, vFp) +//GO(SDL_AudioInit, iFp) +GO(SDL_AudioQuit, vFv) +//GO(SDL_AudioStreamAvailable, iFp) +//GO(SDL_AudioStreamClear, vFp) +GO(SDL_AudioStreamFlush, iFp) +GO(SDL_AudioStreamGet, iFppi) +GO(SDL_AudioStreamPut, iFppi) +//GO(SDL_BuildAudioCVT, iFpWCiWCi) +//GO(SDL_CalculateGammaRamp, vFfp) +GO(SDL_calloc, pFLL) +GO(SDL_CaptureMouse, iFu) +GO(SDL_ceil, dFd) +GO(SDL_ceilf, fFf) +GO(SDL_ClearError, vFv) +GO(SDL_ClearHints, vFv) +GO(SDL_ClearQueuedAudio, vFu) +GO(SDL_CloseAudio, vFv) +GO(SDL_CloseAudioDevice, vFu) +//GO(SDL_ComposeCustomBlendMode, uFuuuuuu) +//GO(SDL_CondBroadcast, iFp) +//GO(SDL_CondSignal, iFp) +//GO(SDL_CondWait, iFpp) +//GO(SDL_CondWaitTimeout, iFppu) +//GO(SDL_ConvertAudio, iFp) +//GO(SDL_ConvertPixels, iFiiupiupi) +GOM(SDL_ConvertSurface, pFppu) //%noE +GOM(SDL_ConvertSurfaceFormat, pFpuu) //%noE +//GO(SDL_copysign, dFdd) +//GO(SDL_copysignf, fFff) +//GO(SDL_cos, dFd) +//GO(SDL_cosf, fFf) +GOM(SDL_CreateColorCursor, pFpii) //%noE +//GO(SDL_CreateCond, pFv) +//GO(SDL_CreateCursor, pFppiiii) +GO(SDL_CreateMutex, pFv) +GO(SDL_CreateRenderer, pFpiu) +GOM(SDL_CreateRGBSurface, pFEuiiiuuuu) +GOM(SDL_CreateRGBSurfaceFrom, pFEpiiiiuuuu) +//GO(SDL_CreateRGBSurfaceWithFormat, pFuiiiu) +GOM(SDL_CreateRGBSurfaceWithFormatFrom, pFEpiiiiu) +GO(SDL_CreateSemaphore, pFu) +//GO(SDL_CreateShapedWindow, pFpuuuuu) +//GO(SDL_CreateSoftwareRenderer, pFp) +GO(SDL_CreateSystemCursor, pFu) +GO(SDL_CreateTexture, pFpuiii) +GOM(SDL_CreateTextureFromSurface, pFpp) //%noE +GOM(SDL_CreateThread, pFEppp) +// SDL_CreateThreadWithStackSize +GO(SDL_CreateWindow, pFpiiiiu) +GO(SDL_CreateWindowAndRenderer, iFiiuBp_Bp_) +//GO(SDL_CreateWindowFrom, pFp) +GO(SDL_Delay, vFu) +GOM(SDL_DelEventWatch, vFEpp) +// SDL_DelHintCallback +//GO(SDL_DequeueAudio, uFupu) +GO(SDL_DestroyCond, vFp) +GO(SDL_DestroyMutex, vFp) +GO(SDL_DestroyRenderer, vFp) +GO(SDL_DestroySemaphore, vFp) +GO(SDL_DestroyTexture, vFp) +GO(SDL_DestroyWindow, vFp) +//GO(SDL_DestroyWindowSurface, iFp) +//GO(SDL_DetachThread, vFp) +GO(SDL_DisableScreenSaver, vFv) +//GO(SDL_DuplicateSurface, pFp) +//GOM(SDL_DYNAPI_entry, iFEupu) +GO(SDL_EnableScreenSaver, vFv) +//GO(SDL_EnclosePoints, uFpipp) +GO(SDL_Error, iFu) +GO(SDL_EventState, CFui) +GO(SDL_exp, dFd) +GO(SDL_expf, fFf) +GO(SDL_fabs, dFd) +GO(SDL_fabsf, fFf) +GOM(SDL_FillRect, iFEppu) +//GO(SDL_FillRects, iFppiu) +// SDL_FilterEvents +//GO(SDL_floor, dFd) +//GO(SDL_floorf,fFf) +//GO(SDL_FlushEvent, vFu) +//GO(SDL_FlushEvents, vFuu) +//GO(SDL_fmod, dFdd) +//GO(SDL_fmodf, fFff) +GO(SDL_free, vFp) +GO(SDL_FreeAudioStream, vFp) +GO(SDL_FreeCursor, vFp) +//GO(SDL_FreeFormat, vFp) +//GO(SDL_FreePalette, vFp) +//GO(SDL_FreeRW, vFp) +GOM(SDL_FreeSurface, vFEp) +//GO(SDL_FreeWAV, vFp) +GO(SDL_GameControllerAddMapping, iFp) +GOM(SDL_GameControllerAddMappingsFromRW, iFEpi) +GO(SDL_GameControllerClose, vFp) +GO(SDL_GameControllerEventState, iFi) +GO(SDL_GameControllerFromInstanceID, pFi) +GO(SDL_GameControllerFromPlayerIndex, pFi) +GO(SDL_GameControllerGetAttached, iFp) +GO(SDL_GameControllerGetAxis, wFpi) +GO(SDL_GameControllerGetAxisFromString, iFp) +//GO(SDL_GameControllerGetBindForAxis, HFpi) +//GO(SDL_GameControllerGetBindForButton, HFpi) +GO(SDL_GameControllerGetButton, CFpi) +GO(SDL_GameControllerGetButtonFromString, iFp) +GO(SDL_GameControllerGetFirmwareVersion, WFp) +GO(SDL_GameControllerGetJoystick, pFp) +//GO(SDL_GameControllerGetNumTouchpads, iFp) +//GO(SDL_GameControllerGetNumTouchpadFingers, iFpi) +//GO(SDL_GameControllerGetPlayerIndex, iFp) +//GO(SDL_GameControllerGetProduct, WFp) +//GO(SDL_GameControllerGetProductVersion, WFp) +//GO(SDL_GameControllerGetSensorData, iFpipi) +//GO(SDL_GameControllerGetSensorDataWithTimestamp, iFpippi) +//GO(SDL_GameControllerGetSerial, pFp) +//GO(SDL_GameControllerGetStringForAxis, pFi) +//GO(SDL_GameControllerGetStringForButton, pFi) +//GO(SDL_GameControllerGetTouchpadFinger, iFpiipppp) +GO(SDL_GameControllerGetType, uFp) +GO(SDL_GameControllerGetVendor, WFp) +GO(SDL_GameControllerHasAxis, iFpu) +GO(SDL_GameControllerHasButton, uFpi) +GO(SDL_GameControllerHasLED, iFp) +GO(SDL_GameControllerHasRumble, iFp) +GO(SDL_GameControllerHasSensor, iFpi) +GO(SDL_GameControllerIsSensorEnabled, uFpi) +GO(SDL_GameControllerMapping, pFp) +GO(SDL_GameControllerMappingForDeviceIndex, pFi) +GO(SDL_GameControllerMappingForGUID, pFpp) +GO(SDL_GameControllerMappingForIndex, pFi) +GO(SDL_GameControllerName, pFp) +GO(SDL_GameControllerNameForIndex, pFi) +GO(SDL_GameControllerNumMappings, iFv) +GO(SDL_GameControllerOpen, pFi) +GO(SDL_GameControllerPath, pFp) +GO(SDL_GameControllerPathForIndex, pFi) +GO(SDL_GameControllerRumble, iFpWWu) +GO(SDL_GameControllerRumbleTriggers, iFpWWu) +GO(SDL_GameControllerSetLED, iFpCCC) +GO(SDL_GameControllerSetPlayerIndex, vFpi) +GO(SDL_GameControllerSetSensorEnabled, iFpiu) +GO(SDL_GameControllerTypeForIndex, uFi) +GO(SDL_GameControllerUpdate, vFv) +// SDL_GetAssertionHandler +//GO(SDL_GetAssertionReport, pFv) +//GO(SDL_GetAudioDeviceName, pFii) +GO(SDL_GetAudioDeviceStatus, uFu) +//GO(SDL_GetAudioDriver, pFi) +//GO(SDL_GetAudioDeviceSpec, iFiip) +GO(SDL_GetAudioStatus, uFv) +GOM(SDL_GetBasePath, pFEv) +GO(SDL_GetClipboardText, pFv) +//GO(SDL_GetClipRect, vFpp) +GOM(SDL_GetClosestDisplayMode, pFipp) //%noE +//GO(SDL_GetColorKey, iFpp) +GO(SDL_GetCPUCacheLineSize, iFv) +GO(SDL_GetCPUCount, iFv) +GO(SDL_GetCurrentAudioDriver, pFv) +GOM(SDL_GetCurrentDisplayMode, iFip) //%noE +GO(SDL_GetCurrentVideoDriver, pFv) +//GO(SDL_GetCursor, pFv) +// SDL_GetDefaultAssertionHandler +//GO(SDL_GetDefaultAudioInfo, iFppi) +//GO(SDL_GetDefaultCursor, pFv) +GOM(SDL_GetDesktopDisplayMode, iFEip) +GO(SDL_GetDisplayBounds, iFip) +GO(SDL_GetDisplayDPI, iFippp) +GOM(SDL_GetDisplayMode, iFiip) //%noE +GO(SDL_GetDisplayName, pFi) +//GO(SDL_GetDisplayOrientation, uFi) +GO(SDL_GetDisplayUsableBounds, iFip) +GO(SDL_getenv, pFp) +GO(SDL_GetError, pFv) +//GOM(SDL_GetEventFilter, iFEpp) +//GO(SDL_GetGlobalMouseState, uFpp) +//GO(SDL_GetGrabbedWindow, pFv) +//GO(SDL_GetHint, pFp) +GO(SDL_GetHintBoolean, uFpu) +//GOM(SDL_GetJoystickGUIDInfo, vFGpppp) +GO(SDL_GetKeyboardFocus, pFv) +GO(SDL_GetKeyboardState, pFp) +//GO(SDL_GetKeyFromName, iFp) +GO(SDL_GetKeyFromScancode, iFu) +GO(SDL_GetKeyName, pFi) +//GO(SDL_GetMemoryFunctions, vFpppp) +GO(SDL_GetModState, uFv) +GO(SDL_GetMouseFocus, pFv) +GO(SDL_GetMouseState, uFpp) +GO(SDL_GetNumAllocations, iFv) +GO(SDL_GetNumAudioDevices, iFi) +GO(SDL_GetNumAudioDrivers, iFv) +GO(SDL_GetNumDisplayModes, iFi) +GO(SDL_GetNumRenderDrivers, iFv) +GO(SDL_GetNumTouchDevices, iFv) +GO(SDL_GetNumTouchFingers, iFu) +GO(SDL_GetNumVideoDisplays, iFv) +GO(SDL_GetNumVideoDrivers, iFv) +//GOM(SDL_GetOriginalMemoryFunctions, +GO(SDL_GetPerformanceCounter, UFv) +GO(SDL_GetPerformanceFrequency, UFv) +//GO(SDL_GetPixelFormatName, pFu) +//GO(SDL_GetPlatform, pFv) +//GO(SDL_GetPointDisplayIndex, iFp) +//GO(SDL_GetPowerInfo, uFpp) +//GO(SDL_GetPreferredLocales, pFv) +GO(SDL_GetPrefPath, pFpp) +//GO(SDL_GetPrimarySelectionText, pFv) +//GO(SDL_GetQueuedAudioSize, uFu) +//GO(SDL_GetRectDisplayIndex, iFp) +GO(SDL_GetRelativeMouseMode, iFv) +GO(SDL_GetRelativeMouseState, uFpp) +//GO(SDL_GetRenderDrawBlendMode, iFpp) +//GO(SDL_GetRenderDrawColor, iFppppp) +//GO(SDL_GetRenderDriverInfo, iFip) +//GO(SDL_GetRenderer, pFp) +//GO(SDL_GetRendererInfo, iFpp) +//GO(SDL_GetRendererOutputSize, iFppp) +//GO(SDL_GetRenderTarget, pFp) +//GO(SDL_GetRevision, pFv) +//GO(SDL_GetRevisionNumber, iFv) +//GO(SDL_GetRGB, vFupppp) +//GO(SDL_GetRGBA, vFuppppp) +GO(SDL_GetScancodeFromKey, uFi) +//GO(SDL_GetScancodeFromName, uFp) +//GO(SDL_GetScancodeName, pFu) +//GO(SDL_GetShapedWindowMode, iFpp) +//GO(SDL_GetSurfaceAlphaMod, iFpp) +//GO(SDL_GetSurfaceBlendMode, iFpp) +//GO(SDL_GetSurfaceColorMod, iFpppp) +GO(SDL_GetSystemRAM, iFv) +//GO(SDL_GetTextureAlphaMod, iFpp) +//GO(SDL_GetTextureBlendMode, iFpp) +//GO(SDL_GetTextureColorMod, iFpppp) +GOM(SDL_GetThreadID, hFEp) +//GO(SDL_GetThreadName, pFp) +GO(SDL_GetTicks, uFv) +//GO(SDL_GetTicks64, UFv) +//GO(SDL_GetTouchDevice, lFi) +//GO(SDL_GetTouchDeviceType, iFl) +//GO(SDL_GetTouchFinger, pFli) +//GO(SDL_GetVersion, vFp) +GO(SDL_GetVideoDriver, pFi) +//GO(SDL_GetWindowBordersSize, iFppppp) +//GO(SDL_GetWindowBrightness, fFp) +GO(SDL_GetWindowData, pFpp) +GO(SDL_GetWindowDisplayIndex, iFp) +GOM(SDL_GetWindowDisplayMode, iFpp) //%noE +GO(SDL_GetWindowFlags, uFp) +GO(SDL_GetWindowFromID, pFu) +//GO(SDL_GetWindowGammaRamp, iFpppp) +GO(SDL_GetWindowGrab, iFp) +GO(SDL_GetWindowID, uFp) +GO(SDL_GetWindowMaximumSize, vFppp) +GO(SDL_GetWindowMinimumSize, vFppp) +//GO(SDL_GetWindowOpacity, iFpp) +//GO(SDL_GetWindowPixelFormat, uFp) +GO(SDL_GetWindowPosition, vFppp) +GO(SDL_GetWindowSize, vFppp) +//GO(SDL_GetWindowSizeInPixels, vFppp) +//GO(SDL_GetWindowSurface, pFp) +GO(SDL_GetWindowTitle, pFp) +GOM(SDL_GetWindowWMInfo, iFpp) //%noE +GO(SDL_GetYUVConversionMode, uFv) +GO(SDL_GetYUVConversionModeForResolution, uFii) +//GO(SDL_GL_BindTexture, iFppp) +GO(SDL_GL_CreateContext, pFp) +GO(SDL_GL_DeleteContext, vFp) +GO(SDL_GL_ExtensionSupported, iFp) +GO(SDL_GL_GetAttribute, iFup) +GO(SDL_GL_GetCurrentContext, pFv) +GO(SDL_GL_GetCurrentWindow, pFv) +GO(SDL_GL_GetDrawableSize, vFppp) +GOM(SDL_GL_GetProcAddress, pFEp) +GO(SDL_GL_GetSwapInterval, iFv) +GO(SDL_GL_LoadLibrary, iFp) +GO(SDL_GL_MakeCurrent, iFpp) +GO(SDL_GL_ResetAttributes, vFv) +GO(SDL_GL_SetAttribute, iFui) +GO(SDL_GL_SetSwapInterval, iFi) +GO(SDL_GL_SwapWindow, vFp) +GO(SDL_GL_UnbindTexture, iFp) +GO(SDL_GL_UnloadLibrary, vFv) +//GO(SDL_GUIDToString, vFUUpi) +GO(SDL_HapticClose, vFp) +GO(SDL_HapticDestroyEffect, vFpi) +GO(SDL_HapticEffectSupported, iFpp) +GO(SDL_HapticGetEffectStatus, iFpi) +GO(SDL_HapticIndex, iFp) +GO(SDL_HapticName, pFi) +GO(SDL_HapticNewEffect, iFpp) +GO(SDL_HapticNumAxes, iFp) +GO(SDL_HapticNumEffects, iFp) +GO(SDL_HapticNumEffectsPlaying, iFp) +GO(SDL_HapticOpen, pFi) +GO(SDL_HapticOpened, iFi) +GO(SDL_HapticOpenFromJoystick, pFp) +GO(SDL_HapticOpenFromMouse, pFv) +GO(SDL_HapticPause, iFp) +GO(SDL_HapticQuery, uFp) +GO(SDL_HapticRumbleInit, iFp) +GO(SDL_HapticRumblePlay, iFpfu) +GO(SDL_HapticRumbleStop, iFp) +GO(SDL_HapticRumbleSupported, iFp) +GO(SDL_HapticRunEffect, iFpiu) +GO(SDL_HapticSetAutocenter, iFpi) +GO(SDL_HapticSetGain, iFpi) +GO(SDL_HapticStopAll, iFp) +GO(SDL_HapticStopEffect, iFpi) +GO(SDL_HapticUnpause, iFp) +GO(SDL_HapticUpdateEffect, iFpip) +//GOM(SDL_Has3DNow, iFv) +//GOM(SDL_HasAltiVec, iFv) +//GOM(SDL_HasAVX, iFv) +//GOM(SDL_HasAVX2, iFv) +//GOM(SDL_HasAVX512F, iFv) +GO(SDL_HasClipboardText, iFv) +//GO(SDL_HasColorKey, uFp) +GO(SDL_HasEvent, uFu) +GO(SDL_HasEvents, uFuu) +//GO(SDL_HasIntersection, uFpp) +//GO(SDL_HasLASX, iFv) +//GO(SDL_HasLSX, iFv) +//GOM(SDL_HasMMX, iFv) +//GOM(SDL_HasNEON, iFv) +//GOM(SDL_HasRDTSC, iFv) +//GO(SDL_HasPrimarySelectionText, iFv) +//GO(SDL_HasScreenKeyboardSupport, iFv) +//GOM(SDL_HasSSE, iFv) +//GOM(SDL_HasSSE2, iFv) +//GOM(SDL_HasSSE3, iFv) +//GOM(SDL_HasSSE41, iFv) +//GOM(SDL_HasSSE42, iFv) +GO(SDL_HideWindow, vFp) +//GO(SDL_HasWindowSurface, iFp) +//GO(SDL_iconv, LFppppp) +//GO(SDL_iconv_close, iFp) +//GO(SDL_iconv_open, pFpp) +GO(SDL_iconv_string, pFpppL) +GO(SDL_Init, iFu) +GO(SDL_InitSubSystem, iFu) +//GO(SDL_IntersectRect, uFppp) +//GO(SDL_IntersectRectAndLine, uFppppp) +//GO(SDL_isdigit, iFi) +GO(SDL_IsGameController, uFi) +//GO(SDL_IsScreenKeyboardShown, uFp) +GO(SDL_IsScreenSaverEnabled, iFv) +//GO(SDL_IsShapedWindow, uFp) +GO(SDL_isspace, iFi) +GO(SDL_IsTablet, uFv) +GO(SDL_IsTextInputActive, iFv) +//GO(SDL_itoa, pFipi) +//GO(SDL_JoystickAttachVirtualEx, iFp) +GO(SDL_JoystickClose, vFp) +//GO(SDL_JoystickCurrentPowerLevel, iFp) +GO(SDL_JoystickEventState, iFi) +//GO(SDL_JoystickFromInstanceID, pFi) +//GO(SDL_JoystickGetAttached, iFp) +GO(SDL_JoystickGetAxis, wFpi) +//GO(SDL_JoystickGetAxisInitialState, uFpip) +//GO(SDL_JoystickGetBall, iFpipp) +GO(SDL_JoystickGetButton, CFpi) +GOS(SDL_JoystickGetDeviceGUID, JFEi) // return a struct that is "uint8_t data[16]" +//GO(SDL_JoystickGetDeviceInstanceID, iFi) +//GO(SDL_JoystickGetDevicePlayerIndex, iFi) +//GO(SDL_JoystickGetDeviceProduct, WFi) +//GO(SDL_JoystickGetDeviceProductVersion, WFi) +//GO(SDL_JoystickGetDeviceType, uFi) +//GO(SDL_JoystickGetDeviceVendor, WFi) +//GO(SDL_JoystickGetFirmwareVersion, WFp) +//GO(SDL_JoystickGetGUID, HFp) +GOS(SDL_JoystickGetGUIDFromString, JFEp) +GO(SDL_JoystickGetGUIDString, vFUUpi) //uint8_t data[16] passed as 1st argument... +//GO(SDL_JoystickGetHat, CFpi) +//GO(SDL_JoystickGetPlayerIndex, iFp) +//GO(SDL_JoystickGetProduct, WFp) +//GO(SDL_JoystickGetProductVersion, WFp) +//GO(SDL_JoystickGetSerial, pFp) +//GO(SDL_JoystickGetType, uFp) +//GO(SDL_JoystickGetVendor, WFp) +GO(SDL_JoystickInstanceID, iFp) +GO(SDL_JoystickIsHaptic, iFp) +GO(SDL_JoystickName, pFp) +GO(SDL_JoystickNameForIndex, pFi) +GO(SDL_JoystickNumAxes, iFp) +GO(SDL_JoystickNumBalls, iFp) +GO(SDL_JoystickNumButtons, iFp) +GO(SDL_JoystickNumHats, iFp) +GO(SDL_JoystickOpen, pFi) +//GO(SDL_JoystickPath, pFp) +//GO(SDL_JoystickPathForIndex, pFi) +//GO(SDL_JoystickRumble, iFpWWu) +//GO(SDL_JoystickRumbleTriggers, iFpWWu) +GO(SDL_JoystickUpdate, vFv) +//GO(SDL_LinuxSetThreadPriority, iFli) +//GO(SDL_lltoa, pFlpi) +GOM(SDL_LoadBMP_RW, pFEpi) +//GO(SDL_LoadDollarTemplates, iFip) +//GO(SDL_LoadFile, pFpp) +//GOM(SDL_LoadFile_RW, pFEppi) +//GOM(SDL_LoadFunction, pFEpp) +//GOM(SDL_LoadObject, pFEp) +//GOM(SDL_LoadWAV_RW, pFEpippp) +GO(SDL_LockAudio, vFv) +GO(SDL_LockAudioDevice, vFi) +//GO(SDL_LockJoysticks, vFv) +GO(SDL_LockMutex, iFp) +//GO(SDL_LockSensors, vFv) +//GO(SDL_LockSurface, iFp) +//GO(SDL_LockTexture, iFpppp) +//GO(SDL_log, dFd) +GOM(SDL_Log, vFEpV) +//GO(SDL_log10, dFd) +//GO(SDL_log10f, fFf) +//GOM(SDL_LogCritical, vFEipV) +//GOM(SDL_LogDebug, vFEipV) +//GOM(SDL_LogError, vFEipV) +//GO(SDL_logf, fFf) +//GOM(SDL_LogGetOutputFunction, vFEpp) +//GO(SDL_LogGetPriority, uFi) +//GOM(SDL_LogInfo, vFEipV) +//GO2(SDL_LogMessage, vFiupV, SDL_LogMessageV) +GO(SDL_LogMessageV, vFiupV) +//GO(SDL_LogResetPriorities, vFv) +//GO(SDL_LogSetAllPriority, vFu) +//GOM(SDL_LogSetOutputFunction, vFEpp) +//GO(SDL_LogSetPriority, vFiu) +//GOM(SDL_LogVerbose, vFEipV) +//GOM(SDL_LogWarn, vFEipV) +//GO(SDL_LowerBlit, iFpppp) +//GO(SDL_LowerBlitScaled, iFpppp) +//GO(SDL_ltoa, pFlpi) +GO(SDL_malloc, pFL) +//GO(SDL_MapRGB, uFpCCC) +//GO(SDL_MapRGBA, uFpCCCC) +//GO(SDL_MasksToPixelFormatEnum, uFiuuuu) +GO(SDL_MaximizeWindow, vFp) +GO(SDL_memcmp, iFppL) +GO(SDL_memcpy, pFppu) +GO(SDL_memmove, pFppu) +//GO(SDL_MemoryBarrierAcquireFunction, vFv) +//GO(SDL_MemoryBarrierReleaseFunction, vFv) +GO(SDL_memset, pFpiL) +//GO(SDL_MinimizeWindow, vFp) +//GO(SDL_MixAudio, vFppui) +GO(SDL_MixAudioFormat, vFppWui) +GO(SDL_MouseIsHaptic, iFv) +GO(SDL_NewAudioStream, pFWCiWCi) +GO(SDL_NumHaptics, iFv) +GO(SDL_NumJoysticks, iFv) +GO(SDL_NumSensors, iFv) +GOM(SDL_OpenAudio, iFEpp) +GOM(SDL_OpenAudioDevice, uFEpippi) +GO(SDL_PauseAudio, vFi) +GO(SDL_PauseAudioDevice, vFui) +GOM(SDL_PeepEvents, iFEpiuuu) +//GO(SDL_PixelFormatEnumToMasks, uFuppppp) +GOM(SDL_PollEvent, iFp) //%noE +GO(SDL_pow, dFdd) +GO(SDL_powf, fFff) +GO(SDL_PumpEvents, vFv) +GOM(SDL_PushEvent, iFp) //%noE +//GO2(SDL_qsort, vFEpuup, my_qsort) +//GO(SDL_QueryTexture, iFppppp) +//GO(SDL_QueueAudio, iFupu) +GO(SDL_Quit, vFv) + GO(SDL_QuitSubSystem, vFu) +GO(SDL_RaiseWindow, vFp) +//GOM(SDL_ReadBE16, uFEp) +//GOM(SDL_ReadBE32, uFEp) +//GOM(SDL_ReadBE64, UFEp) +//GOM(SDL_ReadLE16, uFEp) +//GOM(SDL_ReadLE32, uFEp) +//GOM(SDL_ReadLE64, UFEp) +//GOM(SDL_ReadU8, uFEp) +GO(SDL_realloc, pFpL) +//GO(SDL_RecordGesture, iFl) +//GO(SDL_RegisterEvents, uFi) +//GOM(SDL_RemoveTimer, iFEp) +GO(SDL_RenderClear, iFp) +GO(SDL_RenderCopy, iFpppp) +//GO(SDL_RenderCopyEx, iFppppdpu) +// SDL_RenderCopyExF +// SDL_RenderCopyF +//GO(SDL_RenderDrawLine, iFpiiii) +// SDL_RenderDrawLineF +//GO(SDL_RenderDrawLines, iFppi) +// SDL_RenderDrawLinesF +//GO(SDL_RenderDrawPoint, iFpii) +// SDL_RenderDrawPointF +//GO(SDL_RenderDrawPoints, iFppi) +// SDL_RenderDrawPointsF +//GO(SDL_RenderDrawRect, iFpp) +// SDL_RenderDrawRectF +//GO(SDL_RenderDrawRects, iFppi) +// SDL_RenderDrawRectsF +//GO(SDL_RenderFillRect, iFpp) +// SDL_RenderFillRectF +//GO(SDL_RenderFillRects, iFppi) +// SDL_RenderFillRectsF +// SDL_RenderFlush +//GO(SDL_RenderGetClipRect, vFpp) +//GO(SDL_RenderGetIntegerScale, iFp) +//GO(SDL_RenderGetLogicalSize, vFppp) +// SDL_RenderGetMetalCommandEncoder +// SDL_RenderGetMetalLayer +//GO(SDL_RenderGetScale, vFppp) +//GO(SDL_RenderGetViewport, vFpp) +//GO(SDL_RenderIsClipEnabled, uFp) +GO(SDL_RenderPresent, vFp) +//GO(SDL_RenderReadPixels, iFppupi) +GO(SDL_RenderSetClipRect, iFpp) +GO(SDL_RenderSetIntegerScale, iFpu) +GO(SDL_RenderSetLogicalSize, iFpii) +GO(SDL_RenderSetScale, iFpff) +GO(SDL_RenderSetViewport, iFpp) +GO(SDL_RenderTargetSupported, iFp) +GO(SDL_RenderSetVSync, iFpi) +//GO(SDL_RenderWindowToLogical, vFpiipp) +GO(SDL_ReportAssertion, uFpppi) +GO(SDL_ResetAssertionReport, vFv) +GO(SDL_ResetHints, vFv) +GO(SDL_ResetKeyboard, vFv) +GO(SDL_RestoreWindow, vFp) +//GOM(SDL_RWFromConstMem, pFEpi) +//GOM(SDL_RWFromFP, pFEpi) +GOM(SDL_RWFromFile, pFEpp) +//GOM(SDL_RWFromMem, pFEpi) +//GOM(SDL_SaveAllDollarTemplates, iFEp) +//GOM(SDL_SaveBMP_RW, iFEppi) +//GOM(SDL_SaveDollarTemplate, iFEip) +GO(SDL_scalbn, dFdi) +GO(SDL_scalbnf, fFfi) +GO(SDL_SemPost, iFp) +GO(SDL_SemTryWait, iFp) +GO(SDL_SemValue, uFp) +GO(SDL_SemWait, iFp) +GO(SDL_SemWaitTimeout, iFpu) +GO(SDL_SensorClose, vFp) +GO(SDL_SensorFromInstanceID, pFi) +GO(SDL_SensorGetData, iFppi) +GO(SDL_SensorGetDataWithTimestamp, iFpppi) +GO(SDL_SensorGetDeviceInstanceID, iFi) +GO(SDL_SensorGetDeviceName, pFi) +GO(SDL_SensorGetDeviceNonPortableType, iFi) +GO(SDL_SensorGetDeviceType, iFi) +GO(SDL_SensorGetInstanceID, iFp) +GO(SDL_SensorGetName, pFp) +GO(SDL_SensorGetNonPortableType, iFp) +GO(SDL_SensorGetType, iFp) +GO(SDL_SensorOpen, pFi) +GO(SDL_SensorUpdate, vFv) +// SDL_SetAssertionHandler +GO(SDL_SetClipboardText, iFp) +//GO(SDL_SetClipRect, uFpp) +GOM(SDL_SetColorKey, iFpiu) //%noE +GO(SDL_SetCursor, vFp) +GO(SDL_setenv, iFppi) +GO(SDL_SetError, iFppppp) // it use ..., so putarbitrary 4 args +GOM(SDL_SetEventFilter, vFEpp) +GO(SDL_SetHint, uFpp) +//GO(SDL_SetHintWithPriority, uFppu) +GO(SDL_SetMainReady, vFv) +//GOM(SDL_SetMemoryFunctions, +GO(SDL_SetModState, vFu) +//GO(SDL_SetPaletteColors, iFppii) +// SDL_SetPixelFormatPalette +//GO(SDL_SetPrimarySelectionText, iFp) +GO(SDL_SetRelativeMouseMode, iFi) +//GO(SDL_SetRenderDrawBlendMode, iFpu) +GO(SDL_SetRenderDrawColor, iFpCCCC) +//GO(SDL_SetRenderTarget, iFpp) +//GO(SDL_SetSurfaceAlphaMod, iFpC) +//GO(SDL_SetSurfaceBlendMode, iFpu) +//GO(SDL_SetSurfaceColorMod, iFpCCC) +// SDL_SetSurfaceColorMod +//GO(SDL_SetSurfacePalette, iFpp) +//GO(SDL_SetSurfaceRLE, iFpi) +//GO(SDL_SetTextInputRect, vFp) +//GO(SDL_SetTextureAlphaMod, iFpC) +//GO(SDL_SetTextureBlendMode, iFpu) +//GO(SDL_SetTextureColorMod, iFpCCC) +//GO(SDL_SetTextureScaleMode, iFpu) +GO(SDL_SetThreadPriority, iFu) +GO(SDL_SetWindowBordered, vFpi) +GO(SDL_SetWindowBrightness, iFpf) +GO(SDL_SetWindowData, pFppp) +GOM(SDL_SetWindowDisplayMode, iFpp) //%noE +GO(SDL_SetWindowFullscreen, iFpu) +GO(SDL_SetWindowGammaRamp, iFpppp) +GO(SDL_SetWindowGrab, vFpi) +// SDL_SetWindowHitTest +GOM(SDL_SetWindowIcon, vFEpp) +// SDL_SetWindowInputFocus +//GO(SDL_SetWindowMaximumSize, vFpii) +GO(SDL_SetWindowMinimumSize, vFpii) +// SDL_SetWindowModalFor +// SDL_SetWindowOpacity +GO(SDL_SetWindowPosition, vFpii) +GO(SDL_SetWindowResizable, vFpi) +//GO(SDL_SetWindowShape, iFppp) +GO(SDL_SetWindowSize, vFpii) +GO(SDL_SetWindowTitle, vFpp) +// SDL_SetYUVConversionMode +GO(SDL_ShowCursor, iFi) +GOM(SDL_ShowMessageBox, iFpp) //%noE +GO(SDL_ShowSimpleMessageBox, iFuppp) +GO(SDL_ShowWindow, vFp) +//GO(SDL_SIMDAlloc, pFL) +//GO(SDL_SIMDGetAlignment, LFv) +//GO(SDL_SIMDRealloc, pFpL) +//GO(SDL_SIMDFree, vFp) +GO(SDL_sin, dFd) +GO(SDL_sinf, fFf) +GOM(SDL_snprintf, iFEpLpV) +//GO(SDL_SoftStretch, iFpppp) +GO(SDL_sqrt, dFd) +GO(SDL_sqrtf, fFf) +GO2(SDL_sscanf, iFEppV, my_sscanf) +GO(SDL_StartTextInput, vFv) +GO(SDL_StopTextInput, vFv) +GO(SDL_strcasecmp, iFpp) +GO(SDL_strchr, pFpi) +GO(SDL_strcmp, iFpp) +GO(SDL_strdup, pFp) +GO(SDL_strlcat, LFppL) +GO(SDL_strlcpy, uFppu) +GO(SDL_strlen, uFp) +GO(SDL_strlwr, pFp) +GO(SDL_strncasecmp, iFppL) +GO(SDL_strncmp, iFppu) +GO(SDL_strrchr, pFpi) +GO(SDL_strrev, pFp) +GO(SDL_strstr, pFpp) +GO(SDL_strtod, dFpp) +GO(SDL_strtol, lFppi) +GO(SDL_strtoll, lFppi) +GO(SDL_strtoul, LFppi) +GO(SDL_strtoull, LFppi) +GO(SDL_strupr, pFp) +GO(SDL_tan, dFd) +GO(SDL_tanf, fFf) +GO(SDL_ThreadID, hFv) +//GO(SDL_TLSCreate, uFv) +//GO(SDL_TLSGet, pFu) +//GOM(SDL_TLSSet, iFEupp) +GO(SDL_tolower, iFi) +GO(SDL_toupper, iFi) +//GO(SDL_TryLockMutex, iFp) +GO(SDL_uitoa, pFupi) +GO(SDL_ulltoa, pFLpi) +GO(SDL_ultoa, pFLpi) +//GO(SDL_UnionRect, vFppp) +//GOM(SDL_UnloadObject, vFEp) +GO(SDL_UnlockAudio, vFv) +GO(SDL_UnlockAudioDevice, vFi) +//GO(SDL_UnlockJoysticks, vFv) +GO(SDL_UnlockMutex, iFp) +//GO(SDL_UnlockSensors, vFv) +//GO(SDL_UnlockSurface, vFp) +//GO(SDL_UnlockTexture, vFp) +GO(SDL_UpdateTexture, iFpppi) +//GO(SDL_UpdateWindowSurface, iFp) +//GO(SDL_UpdateWindowSurfaceRects, iFppi) +//GO(SDL_UpdateYUVTexture, iFpppipipi) +//GO(SDL_UpperBlit, iFpppp) +//GO(SDL_UpperBlitScaled, iFpppp) +//GO(SDL_utf8strlcpy, uFppu) +// SDL_utf8strlen +//GO(SDL_VideoInit, iFp) +//GO(SDL_VideoQuit, vFv) +GOM(SDL_vsnprintf, iFEpLpp) +// SDL_vsscanf +//GO(SDL_Vulkan_CreateSurface, iFppp) +//GO(SDL_Vulkan_GetDrawableSize, vFppp) +//GO(SDL_Vulkan_GetInstanceExtensions, iFppp) +//GOM(SDL_Vulkan_GetVkGetInstanceProcAddr, pFEv) +//GO(SDL_Vulkan_LoadLibrary, iFp) //TODO: wrap to also call my_dlopen with path? +//GO(SDL_Vulkan_UnloadLibrary, vFv) +//GO(SDL_WaitEvent, iFp) +GOM(SDL_WaitEventTimeout, iFpi) //%noE +GO(SDL_WaitThread, vFpp) +GO(SDL_WarpMouseGlobal, iFii) +GO(SDL_WarpMouseInWindow, vFpii) +GO(SDL_WasInit, uFu) +// SDL_wcscmp +// SDL_wcsdup +// SDL_wcslcat +// SDL_wcslcpy +//GO(SDL_wcslen, LFp) +//GOM(SDL_WriteBE16, uFEpW) +//GOM(SDL_WriteBE32, uFEpu) +//GOM(SDL_WriteBE64, uFEpU) +//GOM(SDL_WriteLE16, uFEpW) +//GOM(SDL_WriteLE32, uFEpu) +//GOM(SDL_WriteLE64, uFEpU) +//GOM(SDL_WriteU8, uFEpu) + +GOM(SDL_RWseek, IFEpIi) +GOM(SDL_RWtell, IFEp) +GOM(SDL_RWsize, IFEp) +GOM(SDL_RWread, LFEppLL) +GOM(SDL_RWwrite, LFEppLL) +GOM(SDL_RWclose, iFEp) + +//GO2(SDL_mutexP, iFp, SDL_LockMutex) +//GO2(SDL_mutexV, iFp, SDL_UnlockMutex) + +GO(SDL_doesntexist, IFpIi) +GOM(SDL_notreal, pFEpi) +//GOM(SDL_IsJoystickPS4, iFEWW) +//GOM(SDL_IsJoystickNintendoSwitchPro, iFEWW) +//GOM(SDL_IsJoystickSteamController, iFEWW) +//GOM(SDL_IsJoystickXbox360, iFEWW) +//GOM(SDL_IsJoystickXboxOne, iFEWW) +//GOM(SDL_IsJoystickXInput, iFEUU) +//GOM(SDL_IsJoystickHIDAPI, iFEUU) diff --git a/src/wrapped32/wrappedsdl2image.c b/src/wrapped32/wrappedsdl2image.c new file mode 100644 index 0000000000000000000000000000000000000000..863618dd90e03829fb58fc0c8e6da37a29677370 --- /dev/null +++ b/src/wrapped32/wrappedsdl2image.c @@ -0,0 +1,134 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "box32context.h" +#include "sdl2rwops.h" +#include "sdl2align32.h" + +static const char* sdl2imageName = "libSDL2_image-2.0.so.0"; +#define LIBNAME sdl2image + +#define ADDED_FUNCTIONS() \ + +#include "generated/wrappedsdl2imagetypes32.h" + +#include "wrappercallback32.h" + +#define GO(A) \ +EXPORT void *my32_2_##A(x64emu_t* emu, void* a) \ +{ \ + inplace_SDL2_RWops_to_64(a); \ + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); \ + void* r = my->A(rw); \ + RWNativeEnd2(rw); \ + inplace_SDL2_RWops_to_32(a); \ + inplace_SDL2_Surface_to_32(r); \ + return r; \ +} +GO(IMG_LoadBMP_RW) +GO(IMG_LoadCUR_RW) +GO(IMG_LoadGIF_RW) +GO(IMG_LoadICO_RW) +GO(IMG_LoadJPG_RW) +GO(IMG_LoadLBM_RW) +GO(IMG_LoadPCX_RW) +GO(IMG_LoadPNG_RW) +GO(IMG_LoadPNM_RW) +GO(IMG_LoadTGA_RW) +GO(IMG_LoadTIF_RW) +GO(IMG_LoadWEBP_RW) +GO(IMG_LoadXCF_RW) +GO(IMG_LoadXPM_RW) +GO(IMG_LoadXV_RW) +#undef GO + +EXPORT void *my32_2_IMG_Load(x64emu_t* emu, void* path) +{ + void* r = my->IMG_Load(path); + inplace_SDL2_Surface_to_32(r); + return r; +} + +EXPORT void *my32_2_IMG_LoadTyped_RW(x64emu_t* emu, void* a, int32_t b, void* c) +{ + inplace_SDL2_RWops_to_64(a); + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + void* r = my->IMG_LoadTyped_RW(rw, b, c); + if(b==0) { + RWNativeEnd2(rw); + inplace_SDL2_RWops_to_32(a); + } + inplace_SDL2_Surface_to_32(r); + return r; +} +EXPORT void *my32_2_IMG_Load_RW(x64emu_t* emu, void* a, int32_t b) +{ + inplace_SDL2_RWops_to_64(a); + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + void* r = my->IMG_Load_RW(rw, b); + if(b==0) { + RWNativeEnd2(rw); + inplace_SDL2_RWops_to_32(a); + } + inplace_SDL2_Surface_to_32(r); + return r; +} +//EXPORT int32_t my32_2_IMG_SavePNG_RW(x64emu_t* emu, void* s, void* a, int32_t b) +//{ +// // some old? fuction signature use IMG_SavePNG_RW(dst, surf, compression) instead of the IMG_SavePNG_RW(surf, dst, freedst) +// // need to try detect if s is in fact a RWops +// int32_t r; +// if(isRWops32((my_SDL2_RWops_32_t*)s) && !isRWops32((my_SDL2_RWops_32_t*)a)) { +// inplace_SDL2_RWops_to_64(s); +// SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)s); +// r = my->IMG_SavePNG_RW(a, rw, 0); +// RWNativeEnd2(rw); +// } else { +// SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); +// r = my->IMG_SavePNG_RW(s, rw, b); +// if(b==0) +// RWNativeEnd2(rw); +// } +// return r; +//} + +EXPORT void* my32_2_IMG_LoadTexture_RW(x64emu_t* emu, void* rend, void* a, int32_t b) +{ + inplace_SDL2_RWops_to_64(a); + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + void* r = my->IMG_LoadTexture_RW(rend, rw, b); + if(b==0) { + RWNativeEnd2(rw); + inplace_SDL2_RWops_to_32(a); + } + return r; +} + +EXPORT void* my32_2_IMG_LoadTextureTyped_RW(x64emu_t* emu, void* rend, void* a, int32_t b, void* type) +{ + inplace_SDL2_RWops_to_64(a); + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + void* r = my->IMG_LoadTextureTyped_RW(rend, rw, b, type); + if(b==0) { + RWNativeEnd2(rw); + inplace_SDL2_RWops_to_32(a); + } + return r; +} + +#define ALTMY my32_2_ + +#define NEEDED_LIBS "libSDL2-2.0.so.0" + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedsdl2image_private.h b/src/wrapped32/wrappedsdl2image_private.h new file mode 100644 index 0000000000000000000000000000000000000000..e826c42b1e5a37d456226ab18c07b4251af0741c --- /dev/null +++ b/src/wrapped32/wrappedsdl2image_private.h @@ -0,0 +1,67 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh! +#endif + +// _fini +GO(IMG_Init,iFi) +GO(IMG_InvertAlpha,iFi) +GO(IMG_Linked_Version,pFv) +GOM(IMG_Load,pFEp) +GOM(IMG_LoadBMP_RW,pFEp) +GOM(IMG_LoadCUR_RW,pFEp) +GOM(IMG_LoadGIF_RW,pFEp) +GOM(IMG_LoadICO_RW,pFEp) +GOM(IMG_LoadJPG_RW,pFEp) +GOM(IMG_LoadLBM_RW,pFEp) +GOM(IMG_LoadPCX_RW,pFEp) +GOM(IMG_LoadPNG_RW,pFEp) +GOM(IMG_LoadPNM_RW,pFEp) +GOM(IMG_LoadTGA_RW,pFEp) +GOM(IMG_LoadTIF_RW,pFEp) +GOM(IMG_LoadTyped_RW,pFEpip) +GOM(IMG_LoadWEBP_RW,pFEp) +GOM(IMG_LoadXCF_RW,pFEp) +GOM(IMG_LoadXPM_RW,pFEp) +GOM(IMG_LoadXV_RW,pFEp) +GOM(IMG_Load_RW,pFEpi) +GO(IMG_Quit,vFv) +//GO(IMG_ReadXPMFromArray,pFp) +//GO(IMG_isBMP,iFp) +//GO(IMG_isCUR,iFp) +//GO(IMG_isGIF,iFp) +//GO(IMG_isICO,iFp) +//GO(IMG_isJPG,iFp) +//GO(IMG_isLBM,iFp) +//GO(IMG_isPCX,iFp) +//GO(IMG_isPNG,iFp) +//GO(IMG_isPNM,iFp) +//GO(IMG_isTIF,iFp) +//GO(IMG_isWEBP,iFp) +//GO(IMG_isXCF,iFp) +//GO(IMG_isXPM,iFp) +//GO(IMG_isXV,iFp) +// IMG_InitJPG +// IMG_InitPNG +// IMG_InitTIF +// IMG_InitWEBP +// IMG_isSVG +// IMG_LoadSVG_RW +//GO(IMG_LoadTexture, pFpp) +GOM(IMG_LoadTexture_RW, pFEppi) +GOM(IMG_LoadTextureTyped_RW, pFEppip) +// IMG_QuitJPG +// IMG_QuitPNG +// IMG_QuitTIF +// IMG_QuitWEBP +// IMG_SaveJPG +// IMG_SaveJPG_RW +//GO(IMG_SavePNG, iFpp) +//GOM(IMG_SavePNG_RW, iFEppi) +// _init +//DATA(nsvg__colors, 4) +// nsvgCreateRasterizer +// nsvgDelete +// nsvgDeleteRasterizer +// nsvgParse +// nsvg__parseXML +// nsvgRasterize diff --git a/src/wrapped32/wrappedtcmallocminimal.c b/src/wrapped32/wrappedtcmallocminimal.c new file mode 100644 index 0000000000000000000000000000000000000000..1fdbc304bd686811c0bcbe315a8decafc483ac7e --- /dev/null +++ b/src/wrapped32/wrappedtcmallocminimal.c @@ -0,0 +1,23 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" + +// Fake the lib for now, don't load it +static const char* tcmallocminimalName = "libtcmalloc_minimal.so.4"; +#define LIBNAME tcmallocminimal + +// this preinit basically open "box86" as dlopen (because libtcmalloc_minimal needs to be LD_PRELOAD for it to work) +#define PRE_INIT\ + lib->w.lib = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL); \ + if(0) + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedtcmallocminimal_private.h b/src/wrapped32/wrappedtcmallocminimal_private.h new file mode 100644 index 0000000000000000000000000000000000000000..5187c583cfd3120c9be22d307729dd874eaec51c --- /dev/null +++ b/src/wrapped32/wrappedtcmallocminimal_private.h @@ -0,0 +1,442 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(aligned_alloc, pFuu) +GO(calloc, pFLL) +GO(cfree, vFp) +//GO(_fini, +GO(free, vFp) +//GO(_init, +GO(__libc_calloc, pFLL) +GO(__libc_cfree, vFp) +GO(__libc_free, vFp) +GO(__libc_malloc, pFL) +GO(__libc_memalign, pFLL) +GO(__libc_pvalloc, pFL) +GO(__libc_realloc, pFpL) +GO(__libc_valloc, pFL) +GOS(mallinfo, pFEp) //%% +GO(malloc, pFL) +//GO(MallocExtension_GetAllocatedSize, +//GO(MallocExtension_GetEstimatedAllocatedSize, +//GO(MallocExtension_GetNumericProperty, +//GO(MallocExtension_GetOwnership, +//GO(MallocExtension_GetStats, +//GO(MallocExtension_GetThreadCacheSize, +//GO(MallocExtension_MallocMemoryStats, +//GO(MallocExtension_MarkThreadBusy, +//GO(MallocExtension_MarkThreadIdle, +//GO(MallocExtension_MarkThreadTemporarilyIdle, +//GO(MallocExtension_ReleaseFreeMemory, +//GO(MallocExtension_ReleaseToSystem, +//GO(MallocExtension_SetNumericProperty, +//GO(MallocExtension_VerifyAllMemory, +//GO(MallocExtension_VerifyArrayNewMemory, +//GO(MallocExtension_VerifyMallocMemory, +//GO(MallocExtension_VerifyNewMemory, +//GO(MallocHook_AddDeleteHook, +//GO(MallocHook_AddMmapHook, +//GO(MallocHook_AddMremapHook, +//GO(MallocHook_AddMunmapHook, +//GO(MallocHook_AddNewHook, +//GO(MallocHook_AddPreMmapHook, +//GO(MallocHook_AddPreSbrkHook, +//GO(MallocHook_AddSbrkHook, +//GO(MallocHook_GetCallerStackTrace, +//GO(MallocHook_RemoveDeleteHook, +//GO(MallocHook_RemoveMmapHook, +//GO(MallocHook_RemoveMmapReplacement, +//GO(MallocHook_RemoveMremapHook, +//GO(MallocHook_RemoveMunmapHook, +//GO(MallocHook_RemoveMunmapReplacement, +//GO(MallocHook_RemoveNewHook, +//GO(MallocHook_RemovePreMmapHook, +//GO(MallocHook_RemovePreSbrkHook, +//GO(MallocHook_RemoveSbrkHook, +//GO(MallocHook_SetDeleteHook, +//GO(MallocHook_SetMmapHook, +//GO(MallocHook_SetMmapReplacement, +//GO(MallocHook_SetMremapHook, +//GO(MallocHook_SetMunmapHook, +//GO(MallocHook_SetMunmapReplacement, +//GO(MallocHook_SetNewHook, +//GO(MallocHook_SetPreMmapHook, +//GO(MallocHook_SetPreSbrkHook, +//GO(MallocHook_SetSbrkHook, +GO(malloc_size, LFp) +GO(malloc_stats, vFv) +GO(malloc_usable_size, LFp) +GO(mallopt, iFii) +GO(memalign, pFuu) +GOM(mmap, pFEpLiiii) // use the my_mmap from wrappedlibc.c +GOM(mmap64, pFEpLiiiI) +GO(mremap, pFpuuip) +GOM(munmap, iFEpL) +GO(nallocx, LFLi) +GO(__posix_memalign, iFpuu) +GO(posix_memalign, iFpuu) +//GO(RunningOnValgrind, +GO(sbrk, pFl) +//GO(tc_calloc, +//GO(tc_cfree, +//GO(tc_delete, +//GO(tc_delete_aligned, +//GO(tc_delete_aligned_nothrow, +//GO(tc_deletearray, +//GO(tc_deletearray_aligned, +//GO(tc_deletearray_aligned_nothrow, +//GO(tc_deletearray_nothrow, +//GO(tc_deletearray_sized, +//GO(tc_deletearray_sized_aligned, +//GO(tc_delete_nothrow, +//GO(tc_delete_sized, +//GO(tc_delete_sized_aligned, +//GO(tc_free, +//GO(tc_free_sized, +//GO(tc_mallinfo, +//GO(tc_malloc, +//GO(TCMallocGetenvSafe, +//GO(tc_malloc_size, +//GO(tc_malloc_skip_new_handler, +//GO(tc_malloc_stats, +//GO(tc_mallopt, +//GO(tc_memalign, +//GO(tc_nallocx, +//GO(tc_new, +//GO(tc_new_aligned, +//GO(tc_new_aligned_nothrow, +//GO(tc_newarray, +//GO(tc_newarray_aligned, +//GO(tc_newarray_aligned_nothrow, +//GO(tc_newarray_nothrow, +//GO(tc_new_nothrow, +//GO(tc_posix_memalign, +//GO(tc_pvalloc, +//GO(tc_query_new_mode, +//GO(tc_realloc, +//GO(tc_set_new_mode, +//GO(tc_valloc, +//GO(tc_version, +//GO(ValgrindSlowdown, +GO(valloc, pFu) + + +//GO(_Z16GetenvBeforeMainPKc, +//GO(_Z17RawOpenForWritingPKc, +//GO(_Z18GetSystemCPUsCountv, +//GO(_Z20GetUniquePathFromEnvPKcPc, +//GO(_Z20InitSystemAllocatorsv, +//GO(_Z20SleepForMillisecondsi, +//GO(_Z20TCMalloc_SystemAllocjPjj, +//GO(_Z21TCMalloc_SystemCommitPvj, +//GO(_Z22perftools_pthread_oncePiPFvvE, +//GO(_Z22TCMalloc_SystemReleasePvj, +//GO(_Z24perftools_pthread_atforkPFvvES0_S0_, +//GO(_Z28perftools_pthread_key_createPjPFvPvE, +//GO(_Z28perftools_pthread_key_deletej, +//GO(_Z29perftools_pthread_getspecificj, +//GO(_Z29perftools_pthread_setspecificjPv, +//GO(_Z8RawClosei, +//GO(_Z8RawWriteiPKcj, +//GO(_ZdaPv, +//GO(_ZdaPvj, +//GO(_ZdaPvjSt11align_val_t, +//GO(_ZdaPvRKSt9nothrow_t, +//GO(_ZdaPvSt11align_val_t, +//GO(_ZdaPvSt11align_val_tRKSt9nothrow_t, +//GO(_ZdlPv, +//GO(_ZdlPvj, +//GO(_ZdlPvjSt11align_val_t, +//GO(_ZdlPvRKSt9nothrow_t, +//GO(_ZdlPvSt11align_val_t, +//GO(_ZdlPvSt11align_val_tRKSt9nothrow_t, +//GO(_ZN10MallocHook12UnhookedMMapEPvjiiil, +//GO(_ZN10MallocHook14UnhookedMUnmapEPvj, +//GO(_ZN10MallocHook17InvokeNewHookSlowEPKvj, +//GO(_ZN10MallocHook18InvokeMmapHookSlowEPKvS1_jiiil, +//GO(_ZN10MallocHook18InvokeSbrkHookSlowEPKvi, +//GO(_ZN10MallocHook20InvokeDeleteHookSlowEPKv, +//GO(_ZN10MallocHook20InvokeMremapHookSlowEPKvS1_jjiS1_, +//GO(_ZN10MallocHook20InvokeMunmapHookSlowEPKvj, +//GO(_ZN10MallocHook21InvokePreMmapHookSlowEPKvjiiil, +//GO(_ZN10MallocHook21InvokePreSbrkHookSlowEi, +//GO(_ZN10MallocHook25InvokeMmapReplacementSlowEPKvjiiilPPv, +//GO(_ZN10MallocHook27InvokeMunmapReplacementSlowEPKvjPi, +//GO(_ZN11SymbolTable3AddEPKv, +//GO(_ZN11SymbolTable9GetSymbolEPKv, +//GO(_ZN11SymbolTable9SymbolizeEv, +//GO(_ZN12SysAllocatorD0Ev, +//GO(_ZN12SysAllocatorD1Ev, +//GO(_ZN12SysAllocatorD2Ev, +//GO(_ZN13TCMallocGuardC1Ev, +//GO(_ZN13TCMallocGuardC2Ev, +//GO(_ZN13TCMallocGuardD1Ev, +//GO(_ZN13TCMallocGuardD2Ev, +//GO(_ZN15MallocExtension10InitializeEv, +//GO(_ZN15MallocExtension12GetOwnershipEPKv, +//GO(_ZN15MallocExtension13GetHeapSampleEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, +//GO(_ZN15MallocExtension14MarkThreadBusyEv, +//GO(_ZN15MallocExtension14MarkThreadIdleEv, +//GO(_ZN15MallocExtension15ReadStackTracesEPi, +//GO(_ZN15MallocExtension15ReleaseToSystemEj, +//GO(_ZN15MallocExtension15VerifyAllMemoryEv, +//GO(_ZN15MallocExtension15VerifyNewMemoryEPKv, +//GO(_ZN15MallocExtension16GetAllocatedSizeEPKv, +//GO(_ZN15MallocExtension16GetFreeListSizesEPSt6vectorINS_12FreeListInfoESaIS1_EE, +//GO(_ZN15MallocExtension17MallocMemoryStatsEPiPjS0_, +//GO(_ZN15MallocExtension17ReleaseFreeMemoryEv, +//GO(_ZN15MallocExtension18GetNumericPropertyEPKcPj, +//GO(_ZN15MallocExtension18GetSystemAllocatorEv, +//GO(_ZN15MallocExtension18GetThreadCacheSizeEv, +//GO(_ZN15MallocExtension18SetNumericPropertyEPKcj, +//GO(_ZN15MallocExtension18SetSystemAllocatorEP12SysAllocator, +//GO(_ZN15MallocExtension18VerifyMallocMemoryEPKv, +//GO(_ZN15MallocExtension19GetHeapGrowthStacksEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, +//GO(_ZN15MallocExtension20GetMemoryReleaseRateEv, +//GO(_ZN15MallocExtension20SetMemoryReleaseRateEd, +//GO(_ZN15MallocExtension20VerifyArrayNewMemoryEPKv, +//GO(_ZN15MallocExtension25GetEstimatedAllocatedSizeEj, +//GO(_ZN15MallocExtension25MarkThreadTemporarilyIdleEv, +//GO(_ZN15MallocExtension25ReadHeapGrowthStackTracesEv, +//GO(_ZN15MallocExtension6RangesEPvPFvS0_PKN4base11MallocRangeEE, +//GO(_ZN15MallocExtension8GetStatsEPci, +//GO(_ZN15MallocExtension8instanceEv, +//GO(_ZN15MallocExtension8RegisterEPS_, +//GO(_ZN15MallocExtensionD0Ev, +//GO(_ZN15MallocExtensionD1Ev, +//GO(_ZN15MallocExtensionD2Ev, +//GO(_ZN16MmapSysAllocator5AllocEjPjj, +//GO(_ZN16ProcMapsIterator10FormatLineEPciyyPKcyxS2_y, +//GO(_ZN16ProcMapsIterator4InitEiPNS_6BufferEb, +//GO(_ZN16ProcMapsIterator4NextEPyS0_PPcS0_PxS2_, +//GO(_ZN16ProcMapsIterator7NextExtEPyS0_PPcS0_PxS2_S0_S0_S0_S0_S0_, +//GO(_ZN16ProcMapsIteratorC1Ei, +//GO(_ZN16ProcMapsIteratorC1EiPNS_6BufferE, +//GO(_ZN16ProcMapsIteratorC1EiPNS_6BufferEb, +//GO(_ZN16ProcMapsIteratorC2Ei, +//GO(_ZN16ProcMapsIteratorC2EiPNS_6BufferE, +//GO(_ZN16ProcMapsIteratorC2EiPNS_6BufferEb, +//GO(_ZN16ProcMapsIteratorD1Ev, +//GO(_ZN16ProcMapsIteratorD2Ev, +//GO(_ZN16SbrkSysAllocator5AllocEjPjj, +//GO(_ZN16TCMalloc_Printer6printfEPKcz, +//GO(_ZN18DevMemSysAllocator5AllocEjPjj, +//GO(_ZN19DefaultSysAllocator5AllocEjPjj, +//GO(_ZN19HugetlbSysAllocator10InitializeEv, +//GO(_ZN19HugetlbSysAllocator13AllocInternalEjPjj, +//GO(_ZN19HugetlbSysAllocator5AllocEjPjj, +//GO(_ZN22TCMallocImplementation14MarkThreadBusyEv, +//GO(_ZN22TCMallocImplementation16GetAllocatedSizeEPKv, +//GO(_ZN22TCMallocImplementation25GetEstimatedAllocatedSizeEj, +//GO(_ZN4base8internal12SpinLockWakeEPVib, +//GO(_ZN4base8internal13SpinLockDelayEPViii, +//GO(_ZN8SpinLock10SlowUnlockEv, +//GO(_ZN8SpinLock8SlowLockEv, +//GO(_ZN8SpinLock8SpinLoopEv, +//GO(_ZN8tcmalloc10DeleteSpanEPNS_4SpanE, +//GO(_ZN8tcmalloc10DLL_LengthEPKNS_4SpanE, +//GO(_ZN8tcmalloc10DLL_RemoveEPNS_4SpanE, +//GO(_ZN8tcmalloc10malloc_oomEj, +//GO(_ZN8tcmalloc11DLL_PrependEPNS_4SpanES1_, +//GO(_ZN8tcmalloc11ThreadCache10BecomeIdleEv, +//GO(_ZN8tcmalloc11ThreadCache10InitModuleEv, +//GO(_ZN8tcmalloc11ThreadCache11DeleteCacheEPS0_, +//GO(_ZN8tcmalloc11ThreadCache11ListTooLongEPNS0_8FreeListEj, +//GO(_ZN8tcmalloc11ThreadCache14GetThreadStatsEPyS1_, +//GO(_ZN8tcmalloc11ThreadCache15GetSamplePeriodEv, +//GO(_ZN8tcmalloc11ThreadCache18DestroyThreadCacheEPv, +//GO(_ZN8tcmalloc11ThreadCache18IncreaseCacheLimitEv, +//GO(_ZN8tcmalloc11ThreadCache21BecomeTemporarilyIdleEv, +//GO(_ZN8tcmalloc11ThreadCache21FetchFromCentralCacheEjiPFPvjE, +//GO(_ZN8tcmalloc11ThreadCache21ReleaseToCentralCacheEPNS0_8FreeListEji, +//GO(_ZN8tcmalloc11ThreadCache22CreateCacheIfNecessaryEv, +//GO(_ZN8tcmalloc11ThreadCache24IncreaseCacheLimitLockedEv, +//GO(_ZN8tcmalloc11ThreadCache27RecomputePerThreadCacheSizeEv, +//GO(_ZN8tcmalloc11ThreadCache29set_overall_thread_cache_sizeEj, +//GO(_ZN8tcmalloc11ThreadCache4InitEm, +//GO(_ZN8tcmalloc11ThreadCache7CleanupEv, +//GO(_ZN8tcmalloc11ThreadCache7InitTSDEv, +//GO(_ZN8tcmalloc11ThreadCache7NewHeapEm, +//GO(_ZN8tcmalloc11ThreadCache8ScavengeEv, +//GO(_ZN8tcmalloc13cpp_throw_oomEj, +//GO(_ZN8tcmalloc13MetaDataAllocEj, +//GO(_ZN8tcmalloc15CentralFreeList11InsertRangeEPvS1_i, +//GO(_ZN8tcmalloc15CentralFreeList11RemoveRangeEPPvS2_i, +//GO(_ZN8tcmalloc15CentralFreeList11ShrinkCacheEib, +//GO(_ZN8tcmalloc15CentralFreeList13OverheadBytesEv, +//GO(_ZN8tcmalloc15CentralFreeList14MakeCacheSpaceEv, +//GO(_ZN8tcmalloc15CentralFreeList14ReleaseToSpansEPv, +//GO(_ZN8tcmalloc15CentralFreeList17FetchFromOneSpansEiPPvS2_, +//GO(_ZN8tcmalloc15CentralFreeList18ReleaseListToSpansEPv, +//GO(_ZN8tcmalloc15CentralFreeList20EvictRandomSizeClassEib, +//GO(_ZN8tcmalloc15CentralFreeList21FetchFromOneSpansSafeEiPPvS2_, +//GO(_ZN8tcmalloc15CentralFreeList4InitEj, +//GO(_ZN8tcmalloc15CentralFreeList8PopulateEv, +//GO(_ZN8tcmalloc15CentralFreeList9tc_lengthEv, +//GO(_ZN8tcmalloc15cpp_nothrow_oomEj, +//GO(_ZN8tcmalloc15StackTraceTable23ReadStackTracesAndClearEv, +//GO(_ZN8tcmalloc15StackTraceTable8AddTraceERKNS_10StackTraceE, +//GO(_ZN8tcmalloc15StackTraceTableC1Ev, +//GO(_ZN8tcmalloc15StackTraceTableC2Ev, +//GO(_ZN8tcmalloc15StackTraceTableD1Ev, +//GO(_ZN8tcmalloc15StackTraceTableD2Ev, +//GO(_ZN8tcmalloc16AlignmentForSizeEj, +//GO(_ZN8tcmalloc16DumpProcSelfMapsEi, +//GO(_ZN8tcmalloc16FillProcSelfMapsEPciPb, +//GO(_ZN8tcmalloc19CentralCacheLockAllEv, +//GO(_ZN8tcmalloc21CentralCacheUnlockAllEv, +//GO(_ZN8tcmalloc21metadata_system_bytesEv, +//GO(_ZN8tcmalloc24allocate_full_malloc_oomEj, +//GO(_ZN8tcmalloc27allocate_full_cpp_throw_oomEj, +//GO(_ZN8tcmalloc29allocate_full_cpp_nothrow_oomEj, +//GO(_ZN8tcmalloc3LogENS_7LogModeEPKciNS_7LogItemES3_S3_S3_, +//GO(_ZN8tcmalloc6Logger3AddERKNS_7LogItemE, +//GO(_ZN8tcmalloc6Logger6AddNumEyi, +//GO(_ZN8tcmalloc6Logger6AddStrEPKci, +//GO(_ZN8tcmalloc6Static14InitStaticVarsEv, +//GO(_ZN8tcmalloc6Static22InitLateMaybeRecursiveEv, +//GO(_ZN8tcmalloc7NewSpanEjj, +//GO(_ZN8tcmalloc7Sampler15GetSamplePeriodEv, +//GO(_ZN8tcmalloc7Sampler20RecordAllocationSlowEj, +//GO(_ZN8tcmalloc7Sampler21PickNextSamplingPointEv, +//GO(_ZN8tcmalloc7Sampler4InitEy, +//GO(_ZN8tcmalloc7SizeMap11NumMoveSizeEj, +//GO(_ZN8tcmalloc7SizeMap4InitEv, +//GO(_ZN8tcmalloc8DLL_InitEPNS_4SpanE, +//GO(_ZN8tcmalloc8PageHeap10AllocLargeEj, +//GO(_ZN8tcmalloc8PageHeap10CommitSpanEPNS_4SpanE, +//GO(_ZN8tcmalloc8PageHeap11EnsureLimitEjb, +//GO(_ZN8tcmalloc8PageHeap11ReleaseSpanEPNS_4SpanE, +//GO(_ZN8tcmalloc8PageHeap12DecommitSpanEPNS_4SpanE, +//GO(_ZN8tcmalloc8PageHeap12GetNextRangeEjPN4base11MallocRangeE, +//GO(_ZN8tcmalloc8PageHeap14CheckExpensiveEv, +//GO(_ZN8tcmalloc8PageHeap17GetLargeSpanStatsEPNS0_14LargeSpanStatsE, +//GO(_ZN8tcmalloc8PageHeap17GetSmallSpanStatsEPNS0_14SmallSpanStatsE, +//GO(_ZN8tcmalloc8PageHeap17MergeIntoFreeListEPNS_4SpanE, +//GO(_ZN8tcmalloc8PageHeap17PrependToFreeListEPNS_4SpanE, +//GO(_ZN8tcmalloc8PageHeap17RegisterSizeClassEPNS_4SpanEj, +//GO(_ZN8tcmalloc8PageHeap18RemoveFromFreeListEPNS_4SpanE, +//GO(_ZN8tcmalloc8PageHeap19IncrementalScavengeEj, +//GO(_ZN8tcmalloc8PageHeap20ReleaseAtLeastNPagesEj, +//GO(_ZN8tcmalloc8PageHeap22CheckAndHandlePreMergeEPNS_4SpanES2_, +//GO(_ZN8tcmalloc8PageHeap23SearchFreeAndLargeListsEj, +//GO(_ZN8tcmalloc8PageHeap3NewEj, +//GO(_ZN8tcmalloc8PageHeap5CarveEPNS_4SpanEj, +//GO(_ZN8tcmalloc8PageHeap5CheckEv, +//GO(_ZN8tcmalloc8PageHeap5SplitEPNS_4SpanEj, +//GO(_ZN8tcmalloc8PageHeap6DeleteEPNS_4SpanE, +//GO(_ZN8tcmalloc8PageHeap8CheckSetEPSt3setINS_17SpanPtrWithLengthENS_15SpanBestFitLessENS_20STLPageHeapAllocatorIS2_vEEEji, +//GO(_ZN8tcmalloc8PageHeap8GrowHeapEj, +//GO(_ZN8tcmalloc8PageHeap9CheckListEPNS_4SpanEjji, +//GO(_ZN8tcmalloc8PageHeapC1Ev, +//GO(_ZN8tcmalloc8PageHeapC2Ev, +//GO(_Znaj, +//GO(_ZnajRKSt9nothrow_t, +//GO(_ZnajSt11align_val_t, +//GO(_ZnajSt11align_val_tRKSt9nothrow_t, +//GO(_ZNK16ProcMapsIterator5ValidEv, +//GO(_ZNK8tcmalloc15StackTraceTable6Bucket8KeyEqualEjRKNS_10StackTraceE, +//GO(_Znwj, +//GO(_ZnwjRKSt9nothrow_t, +//GO(_ZnwjSt11align_val_t, +//GO(_ZnwjSt11align_val_tRKSt9nothrow_t, + +//DATAB(tcmalloc_sys_alloc, +//DATAB(TCMalloc_SystemTaken, +//DATAB(_ZN60FLAG__namespace_do_not_use_directly_use_DECLARE_bool_instead22FLAGS_malloc_skip_mmapE, +//DATAB(_ZN60FLAG__namespace_do_not_use_directly_use_DECLARE_bool_instead22FLAGS_malloc_skip_sbrkE, +//DATAB(_ZN60FLAG__namespace_do_not_use_directly_use_DECLARE_bool_instead24FLAGS_nomalloc_skip_mmapE, +//DATAB(_ZN60FLAG__namespace_do_not_use_directly_use_DECLARE_bool_instead24FLAGS_nomalloc_skip_sbrkE, +//DATAB(_ZN60FLAG__namespace_do_not_use_directly_use_DECLARE_bool_instead30FLAGS_memfs_malloc_map_privateE, +//DATAB(_ZN60FLAG__namespace_do_not_use_directly_use_DECLARE_bool_instead32FLAGS_memfs_malloc_abort_on_failE, +//DATAB(_ZN60FLAG__namespace_do_not_use_directly_use_DECLARE_bool_instead32FLAGS_nomemfs_malloc_map_privateE, +//DATAB(_ZN60FLAG__namespace_do_not_use_directly_use_DECLARE_bool_instead34FLAGS_nomemfs_malloc_abort_on_failE, +//DATAB(_ZN60FLAG__namespace_do_not_use_directly_use_DECLARE_bool_instead35FLAGS_malloc_disable_memory_releaseE, +//DATAB(_ZN60FLAG__namespace_do_not_use_directly_use_DECLARE_bool_instead35FLAGS_memfs_malloc_ignore_mmap_failE, +//DATAB(_ZN60FLAG__namespace_do_not_use_directly_use_DECLARE_bool_instead37FLAGS_nomalloc_disable_memory_releaseE, +//DATAB(_ZN60FLAG__namespace_do_not_use_directly_use_DECLARE_bool_instead37FLAGS_nomemfs_malloc_ignore_mmap_failE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int32_instead13FLAGS_verboseE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int32_instead15FLAGS_noverboseE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int32_instead25FLAGS_malloc_devmem_limitE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int32_instead25FLAGS_malloc_devmem_startE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int32_instead27FLAGS_nomalloc_devmem_limitE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int32_instead27FLAGS_nomalloc_devmem_startE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int64_instead27FLAGS_memfs_malloc_limit_mbE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int64_instead28FLAGS_tcmalloc_heap_limit_mbE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int64_instead29FLAGS_nomemfs_malloc_limit_mbE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int64_instead30FLAGS_notcmalloc_heap_limit_mbE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int64_instead31FLAGS_tcmalloc_sample_parameterE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int64_instead33FLAGS_notcmalloc_sample_parameterE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int64_instead43FLAGS_tcmalloc_large_alloc_report_thresholdE, +//DATAB(_ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int64_instead45FLAGS_notcmalloc_large_alloc_report_thresholdE, +//DATAB(_ZN62FLAG__namespace_do_not_use_directly_use_DECLARE_double_instead27FLAGS_tcmalloc_release_rateE, +//DATAB(_ZN62FLAG__namespace_do_not_use_directly_use_DECLARE_double_instead29FLAGS_notcmalloc_release_rateE, +//DATAB(_ZN62FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead21FLAGS_symbolize_pprofB5cxx11E, +//DATAB(_ZN62FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead23FLAGS_memfs_malloc_pathB5cxx11E, +//DATAB(_ZN62FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead23FLAGS_nosymbolize_pprofE, +//DATAB(_ZN62FLAG__namespace_do_not_use_directly_use_DECLARE_string_instead25FLAGS_nomemfs_malloc_pathE, +//DATAB(_ZN8tcmalloc11ThreadCache13thread_heaps_E, +//DATAB(_ZN8tcmalloc11ThreadCache17threadlocal_data_E, +//DATAB(_ZN8tcmalloc11ThreadCache18next_memory_steal_E, +//DATAB(_ZN8tcmalloc11ThreadCache18thread_heap_count_E, +//DATAB(_ZN8tcmalloc11ThreadCache9heap_key_E, +//DATAB(_ZN8tcmalloc21threadcache_allocatorE, +//DATAB(_ZN8tcmalloc6Static14pageheap_lock_E, +//DATAB(_ZN8tcmalloc6Static7inited_E, + +//GOW(MallocHook_InitAtFirstAllocation_HeapLeakChecker, +//GOW(_Z24tc_get_sysalloc_overrideP12SysAllocator, +//GOW(_Z7RAW_LOGiPKcz, +//GOW(_Z8RAW_VLOGiPKcz, +//GOW(_Z9LogPrintfiPKcSt9__va_list, +//GOW(_ZN16MmapSysAllocatorD0Ev, +//GOW(_ZN16MmapSysAllocatorD1Ev, +//GOW(_ZN16MmapSysAllocatorD2Ev, +//GOW(_ZN16SbrkSysAllocatorD0Ev, +//GOW(_ZN16SbrkSysAllocatorD1Ev, +//GOW(_ZN16SbrkSysAllocatorD2Ev, +//GOW(_ZN17GoogleInitializerD1Ev, +//GOW(_ZN17GoogleInitializerD2Ev, +//GOW(_ZN18DevMemSysAllocatorD0Ev, +//GOW(_ZN18DevMemSysAllocatorD1Ev, +//GOW(_ZN18DevMemSysAllocatorD2Ev, +//GOW(_ZN19DefaultSysAllocatorD0Ev, +//GOW(_ZN19DefaultSysAllocatorD1Ev, +//GOW(_ZN19DefaultSysAllocatorD2Ev, +//GOW(_ZN19HugetlbSysAllocatorD0Ev, +//GOW(_ZN19HugetlbSysAllocatorD1Ev, +//GOW(_ZN19HugetlbSysAllocatorD2Ev, +//GOW(_ZN22TCMallocImplementation12GetOwnershipEPKv, +//GOW(_ZN22TCMallocImplementation13GetHeapSampleEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, +//GOW(_ZN22TCMallocImplementation14MarkThreadIdleEv, +//GOW(_ZN22TCMallocImplementation15ReadStackTracesEPi, +//GOW(_ZN22TCMallocImplementation15ReleaseToSystemEj, +//GOW(_ZN22TCMallocImplementation16GetFreeListSizesEPSt6vectorIN15MallocExtension12FreeListInfoESaIS2_EE, +//GOW(_ZN22TCMallocImplementation18GetNumericPropertyEPKcPj, +//GOW(_ZN22TCMallocImplementation18GetSystemAllocatorEv, +//GOW(_ZN22TCMallocImplementation18GetThreadCacheSizeEv, +//GOW(_ZN22TCMallocImplementation18SetNumericPropertyEPKcj, +//GOW(_ZN22TCMallocImplementation18SetSystemAllocatorEP12SysAllocator, +//GOW(_ZN22TCMallocImplementation20GetMemoryReleaseRateEv, +//GOW(_ZN22TCMallocImplementation20SetMemoryReleaseRateEd, +//GOW(_ZN22TCMallocImplementation25MarkThreadTemporarilyIdleEv, +//GOW(_ZN22TCMallocImplementation25ReadHeapGrowthStackTracesEv, +//GOW(_ZN22TCMallocImplementation6RangesEPvPFvS0_PKN4base11MallocRangeEE, +//GOW(_ZN22TCMallocImplementation8GetStatsEPci, +//GOW(_ZN22TCMallocImplementationD0Ev, +//GOW(_ZN22TCMallocImplementationD1Ev, +//GOW(_ZN22TCMallocImplementationD2Ev, +//GOW(_ZN4base8internal8HookListIPFvPKvjEE16ExchangeSingularES5_, +//GOW(_ZN4base8internal8HookListIPFvPKvjEE18FixupPrivEndLockedEv, +//GOW(_ZN4base8internal8HookListIPFvPKvjEE3AddES5_, +//GOW(_ZN4base8internal8HookListIPFvPKvjEE6RemoveES5_, +//GOW(_ZN8SpinLock4LockEv, +//GOW(_ZN8SpinLock6UnlockEv, +//GOW(_ZNK4base8internal8HookListIPFvPKvjEE11GetSingularEv, +//GOW(_ZNK4base8internal8HookListIPFvPKvjEE5emptyEv, +//GOW(_ZNK4base8internal8HookListIPFvPKvjEE8TraverseEPS5_i, +//GOW(_ZNSt6vectorIN15MallocExtension12FreeListInfoESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_, +//GOW(_ZNSt8_Rb_treeIN8tcmalloc17SpanPtrWithLengthES1_St9_IdentityIS1_ENS0_15SpanBestFitLessENS0_20STLPageHeapAllocatorIS1_vEEE16_M_insert_uniqueIS1_EESt4pairISt17_Rb_tree_iteratorIS1_EbEOT_, +//GOW(_ZNSt8_Rb_treeIN8tcmalloc17SpanPtrWithLengthES1_St9_IdentityIS1_ENS0_15SpanBestFitLessENS0_20STLPageHeapAllocatorIS1_vEEE8_M_eraseEPSt13_Rb_tree_nodeIS1_E, +//GOW(_ZNSt8_Rb_treeIPKvSt4pairIKS1_PKcESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE24_M_get_insert_unique_posERS3_, diff --git a/src/wrapped32/wrappedudev0.c b/src/wrapped32/wrappedudev0.c new file mode 100644 index 0000000000000000000000000000000000000000..b9d4f6d7fe5c5e09cf4debfe718c215f48e3513b --- /dev/null +++ b/src/wrapped32/wrappedudev0.c @@ -0,0 +1,41 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include + +#include "wrappedlibs.h" + +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "debug.h" +#include "myalign32.h" +#include "callback.h" +#include "emu/x64emu_private.h" + +static const char* udev0Name = "libudev.so.0"; +#define LIBNAME udev0 + +#define ADDED_FUNCTIONS() \ + +//#include "generated/wrappedudev0types.h" + +//#include "wrappercallback.h" + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +#undef SUPER + +#define ALTMY my0_ + +#define NEEDED_LIBS "libudev.so.1" + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedudev0_private.h b/src/wrapped32/wrappedudev0_private.h new file mode 100644 index 0000000000000000000000000000000000000000..fa89c34d445d4f8ce6350c23e4acd8166d8a86f2 --- /dev/null +++ b/src/wrapped32/wrappedudev0_private.h @@ -0,0 +1,9 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh.... +#endif + +GO(udev_get_dev_path, pFp) +GO(udev_get_run_path, pFp) +GO(udev_get_sys_path, pFp) +GO(udev_monitor_new_from_socket, pFpp) +GO(udev_queue_get_failed_list_entry, pFp) diff --git a/src/wrapped32/wrappedudev1.c b/src/wrapped32/wrappedudev1.c new file mode 100644 index 0000000000000000000000000000000000000000..00cc23ec6f33a7339654ce13b7bfe53df94a3762 --- /dev/null +++ b/src/wrapped32/wrappedudev1.c @@ -0,0 +1,69 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include + +#include "wrappedlibs.h" + +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "debug.h" +#include "myalign32.h" +#include "callback.h" +#include "emu/x64emu_private.h" + +static const char* udev1Name = "libudev.so.1"; +#define LIBNAME udev1 +// fallback to 0 version... Not sure if really correct (probably not) +#define ALTNAME "libudev.so.0" + +#define ADDED_FUNCTIONS() \ + +#include "generated/wrappedudev1types32.h" + +#include "wrappercallback32.h" + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// log_fn ... +#define GO(A) \ +static uintptr_t my_log_fn_fct_##A = 0; \ +static void my_log_fn_##A(void* udev, int p, void *f, int l, void* fn, void* fmt, va_list args) \ +{ \ + static char buff[1024]; \ + vsnprintf(buff, 1023, fmt, args); \ + buff[1023]=0; \ + RunFunction(my_log_fn_fct_##A, 7, udev, p, f, l, fn, "%s", buff); \ +} +SUPER() +#undef GO +static void* find_log_fn_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_log_fn_fct_##A == (uintptr_t)fct) return my_log_fn_##A; + SUPER() + #undef GO + #define GO(A) if(my_log_fn_fct_##A == 0) {my_log_fn_fct_##A = (uintptr_t)fct; return my_log_fn_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for udev1 log_fn callback\n"); + return NULL; +} +#undef SUPER + +EXPORT void my32_udev_set_log_fn(x64emu_t* emu, void* udev, void* f) +{ + my->udev_set_log_fn(udev, find_log_fn_Fct(f)); +} + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedudev1_private.h b/src/wrapped32/wrappedudev1_private.h new file mode 100644 index 0000000000000000000000000000000000000000..0eb88ce3b8773b38d09226a44d039d2ccef3328a --- /dev/null +++ b/src/wrapped32/wrappedudev1_private.h @@ -0,0 +1,96 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(udev_device_ref, pFp) +GO(udev_device_unref, pFp) +GO(udev_device_get_udev, pFp) +GO(udev_device_new_from_syspath, pFpp) +GO(udev_device_new_from_devnum, pFpcU) +GO(udev_device_new_from_subsystem_sysname, pFppp) +GO(udev_device_new_from_environment, pFp) +GO(udev_device_get_parent, pFp) +GO(udev_device_get_parent_with_subsystem_devtype, pFppp) +GO(udev_device_get_devpath, pFp) +GO(udev_device_get_subsystem, pFp) +GO(udev_device_get_devtype, pFp) +GO(udev_device_get_syspath, pFp) +GO(udev_device_get_sysname, pFp) +GO(udev_device_get_sysnum, pFp) +GO(udev_device_get_devnode, pFp) +GO(udev_device_get_is_initialized, iFp) +GO(udev_device_get_devlinks_list_entry, pFp) +GO(udev_device_get_properties_list_entry, pFp) +GO(udev_device_get_tags_list_entry, pFp) +GO(udev_device_get_property_value, pFpp) +GO(udev_device_get_driver, pFp) +GO(udev_device_get_devnum, UFp) +GO(udev_device_get_action, pFp) +GO(udev_device_get_sysattr_value, pFpp) +GO(udev_device_get_sysattr_list_entry, pFp) +GO(udev_device_get_seqnum, UFp) +GO(udev_device_get_usec_since_initialized, UFp) +GO(udev_device_has_tag, iFpp) +GO(udev_enumerate_ref, pFp) +GO(udev_enumerate_unref, pFp) +GO(udev_enumerate_get_udev, pFp) +GO(udev_enumerate_new, pFp) +GO(udev_enumerate_add_match_subsystem, iFpp) +GO(udev_enumerate_add_nomatch_subsystem, iFpp) +GO(udev_enumerate_add_match_sysattr, iFppp) +GO(udev_enumerate_add_nomatch_sysattr, iFppp) +GO(udev_enumerate_add_match_property, iFppp) +GO(udev_enumerate_add_match_tag, iFpp) +GO(udev_enumerate_add_match_parent, iFpp) +GO(udev_enumerate_add_match_is_initialized, iFp) +GO(udev_enumerate_add_match_sysname, iFpp) +GO(udev_enumerate_add_syspath, iFpp) +GO(udev_enumerate_scan_devices, iFp) +GO(udev_enumerate_scan_subsystems, iFp) +GO(udev_enumerate_get_list_entry, pFp) +GO(udev_list_entry_get_next, pFp) +GO(udev_list_entry_get_by_name, pFpp) +GO(udev_list_entry_get_name, pFp) +GO(udev_list_entry_get_value, pFp) +GO(udev_monitor_ref, pFp) +GO(udev_monitor_unref, pFp) +GO(udev_monitor_get_udev, pFp) +GO(udev_monitor_new_from_netlink, pFpp) +GO(udev_monitor_new_from_socket, pFpp) +GO(udev_monitor_enable_receiving, iFp) +GO(udev_monitor_set_receive_buffer_size, iFpi) +GO(udev_monitor_get_fd, iFp) +GO(udev_monitor_receive_device, pFp) +GO(udev_monitor_filter_add_match_subsystem_devtype, iFppp) +GO(udev_monitor_filter_add_match_tag, iFpp) +GO(udev_monitor_filter_update, iFp) +GO(udev_monitor_filter_remove, iFp) +GO(udev_new, pFv) +GO(udev_ref, pFp) +GO(udev_unref, pFp) +GO(udev_queue_ref, pFp) +GO(udev_queue_unref, pFp) +GO(udev_queue_get_udev, pFp) +GO(udev_queue_new, pFp) +GO(udev_queue_get_kernel_seqnum, UFp) +GO(udev_queue_get_udev_seqnum, UFp) +GO(udev_queue_get_udev_is_active, iFp) +GO(udev_queue_get_queue_is_empty, iFp) +GO(udev_queue_get_seqnum_is_finished, iFpU) +GO(udev_queue_get_seqnum_sequence_is_finished, iFpUU) +GO(udev_queue_get_queued_list_entry, pFp) +GO(udev_queue_get_failed_list_entry, pFp) +GOM(udev_set_log_fn, vFEpp) +GO(udev_get_log_priority, iFp) +GO(udev_set_log_priority, vFpi) +GO(udev_get_userdata, pFp) +GO(udev_set_userdata, vFpp) +GO(udev_device_new_from_device_id, pFpp) +GO(udev_device_set_sysattr_value, iFppp) +GO(udev_queue_get_fd, iFp) +GO(udev_queue_flush, iFp) +GO(udev_hwdb_ref, pFp) +GO(udev_hwdb_unref, pFp) +GO(udev_hwdb_new, pFp) +GO(udev_hwdb_get_properties_list_entry, pFppu) +GO(udev_util_encode_string, iFppL) diff --git a/src/wrapped32/wrappedxinerama.c b/src/wrapped32/wrappedxinerama.c new file mode 100644 index 0000000000000000000000000000000000000000..a75d9c1c4dc536e4c9082a8b8a1373c9a219e074 --- /dev/null +++ b/src/wrapped32/wrappedxinerama.c @@ -0,0 +1,29 @@ +#include +#include +#include +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include + +#include "wrappedlibs.h" + +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "box32.h" + +#ifdef ANDROID + static const char* xineramaName = "libXinerama.so"; +#else + static const char* xineramaName = "libXinerama.so.1"; +#endif + +#define LIBNAME xinerama + +#ifdef ANDROID +#define NEEDED_LIBS "libX11.so", "libXext.so" +#else +#define NEEDED_LIBS "libX11.so.6", "libXext.so.6" +#endif + +#include "wrappedlib_init32.h" diff --git a/src/wrapped32/wrappedxinerama_private.h b/src/wrapped32/wrappedxinerama_private.h new file mode 100644 index 0000000000000000000000000000000000000000..dd33796427b29799987139c1db43ff321a7a0c96 --- /dev/null +++ b/src/wrapped32/wrappedxinerama_private.h @@ -0,0 +1,14 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error Meh... +#endif + +GO(XineramaIsActive, iFX) +GO(XineramaQueryExtension, iFXpp) +GO(XineramaQueryScreens, pFXp) +GO(XineramaQueryVersion, iFXpp) +//GO(XPanoramiXAllocInfo, bLiiiiiL_Fv) +//GO(XPanoramiXGetScreenCount, iFXLbLiiiiiL_) +//GO(XPanoramiXGetScreenSize, iFXLibLiiiiiL_) +//GO(XPanoramiXGetState, iFXLbLiiiiiL_) +GO(XPanoramiXQueryExtension, iFXpp) +GO(XPanoramiXQueryVersion, iFXpp) diff --git a/src/wrapped32/wrappercallback32.h b/src/wrapped32/wrappercallback32.h new file mode 100644 index 0000000000000000000000000000000000000000..74c2670d08994f1572cf586a0509d5400c08a10e --- /dev/null +++ b/src/wrapped32/wrappercallback32.h @@ -0,0 +1,42 @@ +#define TYPENAME3(N,M) N##M +#define TYPENAME2(N,M) TYPENAME3(N,M) +#define TYPENAME(N) TYPENAME2(LIBNAME, _my_t) + +typedef struct TYPENAME2(LIBNAME, _my_s) { + // functions + #define GO(A, B) B A; + SUPER() + #undef GO + #ifdef ADDED_STRUCT + ADDED_STRUCT() + #endif +} TYPENAME(LIBNAME); + +static library_t* my_lib = NULL; +static TYPENAME(LIBNAME) TYPENAME2(my_, LIBNAME) = {0}; +static TYPENAME(LIBNAME) * const my = &TYPENAME2(my_, LIBNAME); + +static void getMy(library_t* lib) +{ + #define GO(A, W) my->A = (W)dlsym(lib->w.lib, #A); + SUPER() + #undef GO + my_lib = lib; + #ifdef ADDED_INIT + ADDED_INIT() + #endif +} + +static void freeMy() +{ + #ifdef ADDED_FINI + ADDED_FINI() + #endif + my_lib = NULL; +} + +#define HAS_MY + +#ifndef ADDED_SUPER +#undef SUPER +#endif diff --git a/system/box32.conf.cmake b/system/box32.conf.cmake new file mode 100644 index 0000000000000000000000000000000000000000..0e872132ee7eefbbecde7ac7f7e5a28b6105ffe7 --- /dev/null +++ b/system/box32.conf.cmake @@ -0,0 +1,2 @@ +# /etc/binfmt.d/box32.conf +:box32:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:${CMAKE_INSTALL_PREFIX}/bin/${BOX64}: diff --git a/system/box64.box64rc b/system/box64.box64rc index ddf43bfc3a6a873bdc8e00c28d78de7662cc2638..091f4dd3165f8f6c9fa925e84cc303906399dceb 100644 --- a/system/box64.box64rc +++ b/system/box64.box64rc @@ -6,14 +6,18 @@ # Generic names # [*setup*] +# using safest dynarec settings here, has some installers do crazy things BOX64_DYNAREC_SAFEFLAGS=2 BOX64_DYNAREC_BIGBLOCK=0 BOX64_DYNAREC_CALLRET=0 +BOX64_DYNAREC_NATIVEFLAGS=0 [*install*] +# using safest dynarec settings here, has some installers do crazy things BOX64_DYNAREC_SAFEFLAGS=2 BOX64_DYNAREC_BIGBLOCK=0 BOX64_DYNAREC_CALLRET=0 +BOX64_DYNAREC_NATIVEFLAGS=0 # # Linux process @@ -43,6 +47,11 @@ BOX64_DYNAREC_FORWARD=512 BOX64_DYNAREC_CALLRET=1 BOX64_DYNAREC_ALIGNED_ATOMICS=1 +[AlienIsolation] +BOX64_MAXCPU=16 #will crash if too many cores are present, (like 128) +BOX64_DYNAREC_BIGBLOCK=3 +BOX64_DYNAREC_CALLRET=1 + [BALDI.x86_64] BOX64_DYNAREC_STRONGMEM=1 #little to no performance impact also makes game not crash BOX64_PREFER_EMULATED=1 @@ -56,6 +65,11 @@ BOX64_PREFER_EMULATED=1 BOX64_LOG=0 BOX64_DYNAREC_ALIGNED_ATOMICS=1 +[box64-bash] +# LOG tend to mess up script execution in bash +BOX64_LOG=0 +BOX64_DYNAREC_ALIGNED_ATOMICS=1 + [beyond-all-reason] BOX64_MALLOC_HACK=2 @@ -69,6 +83,15 @@ BOX64_MAXCPU=4 # surprisingly, having too much cpu core slow down things.4 is m [chrome] BOX64_MALLOC_HACK=2 +[cursor] +BOX64_MALLOC_HACK=2 +#BOX64_DYNAREC_BIGBLOCK=3 +#BOX64_DYNAREC_CALLRET=1 +#BOX64_DYNAREC_SAFEFLAGS=0 + +[chrome_crashpad_handler] +BOX64_MALLOC_HACK=2 + [deadcells] BOX64_PREFER_EMULATED=1 BOX64_DYNAREC_ALIGNED_ATOMICS=1 @@ -117,7 +140,6 @@ BOX64_MAXCPU=16 BOX64_NOSANDBOX=1 BOX64_INPROCESSGPU=1 BOX64_MALLOC_HACK=2 -BOX64_DYNAREC_BIGBLOCK=0 BOX64_DYNAREC_CALLRET=1 BOX64_DYNAREC_ALIGNED_ATOMICS=1 BOX64_DYNAREC_STRONGMEM=1 @@ -138,6 +160,9 @@ BOX64_EMULATED_LIBS=libmpg123.so.0:libvorbisfile.so.3:libvorbis.so.0:libogg.so.0 [Kingdom.x86_64] BOX64_MAXCPU=4 +[legendary] +BOX64_DYNAREC_STRONGMEM=1 + [LotCG.x86_64] BOX64_DYNAREC_FASTROUND=0 @@ -315,6 +340,12 @@ BOX64_DYNAREC_SAFEFLAGS=0 BOX64_RDTSC_1GHZ=1 BOX64_DYNAREC_STRONGMEM=2 +[DXMD.exe] +#Deus Ex: Mankind Divide +BOX64_DYNAREC_FASTROUND=0 #freeze without this +BOX64_DYNAREC_CALLRET=1 +#BOX64_DYNAREC_BIGBLOCK=3 #tend to freeze with this + # All the EA/Origin launcher process. Not 100% working yet [EALocalHostSvc.exe] BOX64_DYNAREC_STRONGMEM=1 @@ -327,7 +358,7 @@ BOX64_DYNAREC_SAFEFLAGS=2 BOX64_DYNAREC_BIGBLOCK=0 [EACefSubprocess.exe] -BOX64_DYNAREC_STRONGMEM=3 +BOX64_DYNAREC_STRONGMEM=1 BOX64_DYNAREC_SAFEFLAGS=2 BOX64_DYNAREC_BIGBLOCK=0 @@ -358,6 +389,9 @@ BOX64_DYNAREC_BIGBLOCK=3 BOX64_DYNAREC_CALLRET=1 BOX64_DYNAREC_BIGBLOCK=3 +[FP2.exe] +BOX64_MAXCPU=4 #4 is more than enough for this game. + [ForzaHorizon4.exe] BOX64_DYNAREC_STRONGMEM=1 #prevent random crashes it seems BOX64_DYNAREC_BIGBLOCK=0 @@ -402,14 +436,17 @@ BOX64_DYNAREC_SAFEFLAGS=2 BOX64_DYNAREC_STRONGMEM=1 [steam.exe] -BOX64_DYNAREC_BIGBLOCK=0 -BOX64_DYNAREC_STRONGMEM=1 -BOX64_CEFDISABLEGPU=1 +BOX64_DYNAREC_BIGBLOCK=3 +BOX64_DYNAREC_CALLRET=1 +BOX64_DYNAREC_SAFEFLAGS=0 +BOX64_ARGS=-cef-disable-breakpad -cef-disable-d3d11 -cef-disable-delaypageload -cef-force-occlusion -cef-disable-sandbox -cef-disable-seccomp-sandbox -no-cef-sandbox -disable-winh264 -cef-disable-gpu -vgui -oldtraymenu -cef-single-process [steamwebhelper.exe] -BOX64_DYNAREC_STRONGMEM=4 -BOX64_DYNAREC_BIGBLOCK=0 -BOX64_DYNAREC_SAFEFLAGS=2 +BOX64_DYNAREC_STRONGMEM=1 +BOX64_DYNAREC_BIGBLOCK=3 +BOX64_DYNAREC_CALLRET=1 +BOX64_DYNAREC_SAFEFLAGS=0 +#BOX64_DYNAREC_NATIVEFLAGS=0 [Sunblaze.exe] BOX64_DYNAREC_STRONGMEM=1 @@ -425,3 +462,9 @@ BOX64_DYNAREC_STRONGMEM=2 BOX64_DYNAREC_SAFEFLAGS=2 BOX64_DYNAREC_BIGBLOCK=0 BOX64_DYNAREC_CALLRET=0 + +# +# 32bits Linux process +# +[CaveShooter] +BOX64_DYNAREC_X87DOUBLE=1 diff --git a/tests/bash b/tests/box64-bash similarity index 100% rename from tests/bash rename to tests/box64-bash diff --git a/tests32/bash b/tests32/bash new file mode 100755 index 0000000000000000000000000000000000000000..bad714a14f58b910a4a456619e6cf2d93ea73632 Binary files /dev/null and b/tests32/bash differ diff --git a/tests32/benchfloat b/tests32/benchfloat new file mode 100755 index 0000000000000000000000000000000000000000..3eb1a9592ada5e803d2cd5357c267152b43f0265 Binary files /dev/null and b/tests32/benchfloat differ diff --git a/tests32/benchfloat.c b/tests32/benchfloat.c new file mode 100755 index 0000000000000000000000000000000000000000..93b8207ab0f94bad6bbe49f26771a9c157981fe9 --- /dev/null +++ b/tests32/benchfloat.c @@ -0,0 +1,888 @@ +/* +** +** LINPACK.C Linpack benchmark, calculates FLOPS. +** (FLoating Point Operations Per Second) +** +** Translated to C by Bonnie Toy 5/88 +** +** Modified by Will Menninger, 10/93, with these features: +** (modified on 2/25/94 to fix a problem with daxpy for +** unequal increments or equal increments not equal to 1. +** Jack Dongarra) +** +** - Defaults to double precision. +** - Averages ROLLed and UNROLLed performance. +** - User selectable array sizes. +** - Automatically does enough repetitions to take at least 10 CPU seconds. +** - Prints machine precision. +** - ANSI prototyping. +** +** To compile: cc -O -o linpack linpack.c -lm +** +** +*/ + +#include +#include +#include +#include +#include +#include + +#define DP + +#ifdef SP +#define ZERO 0.0 +#define ONE 1.0 +#define PREC "Single" +#define BASE10DIG FLT_DIG + +typedef float REAL; +#endif + +#ifdef DP +#define ZERO 0.0e0 +#define ONE 1.0e0 +#define PREC "Double" +#define BASE10DIG DBL_DIG + +typedef double REAL; +#endif + +static REAL linpack (long nreps,int arsize); +static void matgen (REAL *a,int lda,int n,REAL *b,REAL *norma); +static void dgefa (REAL *a,int lda,int n,int *ipvt,int *info,int roll); +static void dgesl (REAL *a,int lda,int n,int *ipvt,REAL *b,int job,int roll); +static void daxpy_r (int n,REAL da,REAL *dx,int incx,REAL *dy,int incy); +static REAL ddot_r (int n,REAL *dx,int incx,REAL *dy,int incy); +static void dscal_r (int n,REAL da,REAL *dx,int incx); +static void daxpy_ur (int n,REAL da,REAL *dx,int incx,REAL *dy,int incy); +static REAL ddot_ur (int n,REAL *dx,int incx,REAL *dy,int incy); +static void dscal_ur (int n,REAL da,REAL *dx,int incx); +static int idamax (int n,REAL *dx,int incx); +static REAL second (void); + +static void *mempool; + + +void main(int argc, const char** argv) + + { + char buf[80]; + int arsize; + long arsize2d,memreq,nreps; + size_t malloc_arg; + + if(argc>1) + strcpy(buf, argv[1]); + + while (1) + { + /*printf("Enter array size (q to quit) [200]: "); + fgets(buf,79,stdin);*/ + + if (buf[0]=='q' || buf[0]=='Q') + break; + if (buf[0]=='\0' || buf[0]=='\n') + arsize=200; + else + arsize=atoi(buf); + arsize/=2; + arsize*=2; + if (arsize<10) + { + printf("Too small.\n"); + continue; + } + arsize2d = (long)arsize*(long)arsize; + memreq=arsize2d*sizeof(REAL)+(long)arsize*sizeof(REAL)+(long)arsize*sizeof(int); + printf("Memory required: %ldK.\n",(memreq+512L)>>10); + malloc_arg=(size_t)memreq; + if (malloc_arg!=memreq || (mempool=malloc(malloc_arg))==NULL) + { + printf("Not enough memory available for given array size.\n\n"); + continue; + } + printf("\n\nLINPACK benchmark, %s precision.\n",PREC); + printf("Machine precision: %d digits.\n",BASE10DIG); + printf("Array size %d X %d.\n",arsize,arsize); + printf("Average rolled and unrolled performance:\n\n"); + printf(" Reps Time(s) DGEFA DGESL OVERHEAD KFLOPS\n"); + printf("----------------------------------------------------\n"); + nreps=1; + while (linpack(nreps,arsize)<10.) + nreps*=2; + free(mempool); + printf("\n"); + strcpy(buf, "q"); + } + } + + +static REAL linpack(long nreps,int arsize) + + { + REAL *a,*b; + REAL norma,t1,kflops,tdgesl,tdgefa,totalt,toverhead,ops; + int *ipvt,n,info,lda; + long i,arsize2d; + + lda = arsize; + n = arsize/2; + arsize2d = (long)arsize*(long)arsize; + ops=((2.0*n*n*n)/3.0+2.0*n*n); + a=(REAL *)mempool; + b=a+arsize2d; + ipvt=(int *)&b[arsize]; + tdgesl=0; + tdgefa=0; + totalt=second(); + for (i=0;i *norma) ? a[lda*j+i] : *norma; + } + for (i = 0; i < n; i++) + b[i] = 0.0; + for (j = 0; j < n; j++) + for (i = 0; i < n; i++) + b[i] = b[i] + a[lda*j+i]; + } + + +/* +** +** DGEFA benchmark +** +** We would like to declare a[][lda], but c does not allow it. In this +** function, references to a[i][j] are written a[lda*i+j]. +** +** dgefa factors a double precision matrix by gaussian elimination. +** +** dgefa is usually called by dgeco, but it can be called +** directly with a saving in time if rcond is not needed. +** (time for dgeco) = (1 + 9/n)*(time for dgefa) . +** +** on entry +** +** a REAL precision[n][lda] +** the matrix to be factored. +** +** lda integer +** the leading dimension of the array a . +** +** n integer +** the order of the matrix a . +** +** on return +** +** a an upper triangular matrix and the multipliers +** which were used to obtain it. +** the factorization can be written a = l*u where +** l is a product of permutation and unit lower +** triangular matrices and u is upper triangular. +** +** ipvt integer[n] +** an integer vector of pivot indices. +** +** info integer +** = 0 normal value. +** = k if u[k][k] .eq. 0.0 . this is not an error +** condition for this subroutine, but it does +** indicate that dgesl or dgedi will divide by zero +** if called. use rcond in dgeco for a reliable +** indication of singularity. +** +** linpack. this version dated 08/14/78 . +** cleve moler, university of New Mexico, argonne national lab. +** +** functions +** +** blas daxpy,dscal,idamax +** +*/ +static void dgefa(REAL *a,int lda,int n,int *ipvt,int *info,int roll) + + { + REAL t; + int idamax(),j,k,kp1,l,nm1; + + /* gaussian elimination with partial pivoting */ + + if (roll) + { + *info = 0; + nm1 = n - 1; + if (nm1 >= 0) + for (k = 0; k < nm1; k++) + { + kp1 = k + 1; + + /* find l = pivot index */ + + l = idamax(n-k,&a[lda*k+k],1) + k; + ipvt[k] = l; + + /* zero pivot implies this column already + triangularized */ + + if (a[lda*k+l] != ZERO) + { + + /* interchange if necessary */ + + if (l != k) + { + t = a[lda*k+l]; + a[lda*k+l] = a[lda*k+k]; + a[lda*k+k] = t; + } + + /* compute multipliers */ + + t = -ONE/a[lda*k+k]; + dscal_r(n-(k+1),t,&a[lda*k+k+1],1); + + /* row elimination with column indexing */ + + for (j = kp1; j < n; j++) + { + t = a[lda*j+l]; + if (l != k) + { + a[lda*j+l] = a[lda*j+k]; + a[lda*j+k] = t; + } + daxpy_r(n-(k+1),t,&a[lda*k+k+1],1,&a[lda*j+k+1],1); + } + } + else + (*info) = k; + } + ipvt[n-1] = n-1; + if (a[lda*(n-1)+(n-1)] == ZERO) + (*info) = n-1; + } + else + { + *info = 0; + nm1 = n - 1; + if (nm1 >= 0) + for (k = 0; k < nm1; k++) + { + kp1 = k + 1; + + /* find l = pivot index */ + + l = idamax(n-k,&a[lda*k+k],1) + k; + ipvt[k] = l; + + /* zero pivot implies this column already + triangularized */ + + if (a[lda*k+l] != ZERO) + { + + /* interchange if necessary */ + + if (l != k) + { + t = a[lda*k+l]; + a[lda*k+l] = a[lda*k+k]; + a[lda*k+k] = t; + } + + /* compute multipliers */ + + t = -ONE/a[lda*k+k]; + dscal_ur(n-(k+1),t,&a[lda*k+k+1],1); + + /* row elimination with column indexing */ + + for (j = kp1; j < n; j++) + { + t = a[lda*j+l]; + if (l != k) + { + a[lda*j+l] = a[lda*j+k]; + a[lda*j+k] = t; + } + daxpy_ur(n-(k+1),t,&a[lda*k+k+1],1,&a[lda*j+k+1],1); + } + } + else + (*info) = k; + } + ipvt[n-1] = n-1; + if (a[lda*(n-1)+(n-1)] == ZERO) + (*info) = n-1; + } + } + + +/* +** +** DGESL benchmark +** +** We would like to declare a[][lda], but c does not allow it. In this +** function, references to a[i][j] are written a[lda*i+j]. +** +** dgesl solves the double precision system +** a * x = b or trans(a) * x = b +** using the factors computed by dgeco or dgefa. +** +** on entry +** +** a double precision[n][lda] +** the output from dgeco or dgefa. +** +** lda integer +** the leading dimension of the array a . +** +** n integer +** the order of the matrix a . +** +** ipvt integer[n] +** the pivot vector from dgeco or dgefa. +** +** b double precision[n] +** the right hand side vector. +** +** job integer +** = 0 to solve a*x = b , +** = nonzero to solve trans(a)*x = b where +** trans(a) is the transpose. +** +** on return +** +** b the solution vector x . +** +** error condition +** +** a division by zero will occur if the input factor contains a +** zero on the diagonal. technically this indicates singularity +** but it is often caused by improper arguments or improper +** setting of lda . it will not occur if the subroutines are +** called correctly and if dgeco has set rcond .gt. 0.0 +** or dgefa has set info .eq. 0 . +** +** to compute inverse(a) * c where c is a matrix +** with p columns +** dgeco(a,lda,n,ipvt,rcond,z) +** if (!rcond is too small){ +** for (j=0,j= 1) + for (k = 0; k < nm1; k++) + { + l = ipvt[k]; + t = b[l]; + if (l != k) + { + b[l] = b[k]; + b[k] = t; + } + daxpy_r(n-(k+1),t,&a[lda*k+k+1],1,&b[k+1],1); + } + + /* now solve u*x = y */ + + for (kb = 0; kb < n; kb++) + { + k = n - (kb + 1); + b[k] = b[k]/a[lda*k+k]; + t = -b[k]; + daxpy_r(k,t,&a[lda*k+0],1,&b[0],1); + } + } + else + { + + /* job = nonzero, solve trans(a) * x = b */ + /* first solve trans(u)*y = b */ + + for (k = 0; k < n; k++) + { + t = ddot_r(k,&a[lda*k+0],1,&b[0],1); + b[k] = (b[k] - t)/a[lda*k+k]; + } + + /* now solve trans(l)*x = y */ + + if (nm1 >= 1) + for (kb = 1; kb < nm1; kb++) + { + k = n - (kb+1); + b[k] = b[k] + ddot_r(n-(k+1),&a[lda*k+k+1],1,&b[k+1],1); + l = ipvt[k]; + if (l != k) + { + t = b[l]; + b[l] = b[k]; + b[k] = t; + } + } + } + } + else + { + nm1 = n - 1; + if (job == 0) + { + + /* job = 0 , solve a * x = b */ + /* first solve l*y = b */ + + if (nm1 >= 1) + for (k = 0; k < nm1; k++) + { + l = ipvt[k]; + t = b[l]; + if (l != k) + { + b[l] = b[k]; + b[k] = t; + } + daxpy_ur(n-(k+1),t,&a[lda*k+k+1],1,&b[k+1],1); + } + + /* now solve u*x = y */ + + for (kb = 0; kb < n; kb++) + { + k = n - (kb + 1); + b[k] = b[k]/a[lda*k+k]; + t = -b[k]; + daxpy_ur(k,t,&a[lda*k+0],1,&b[0],1); + } + } + else + { + + /* job = nonzero, solve trans(a) * x = b */ + /* first solve trans(u)*y = b */ + + for (k = 0; k < n; k++) + { + t = ddot_ur(k,&a[lda*k+0],1,&b[0],1); + b[k] = (b[k] - t)/a[lda*k+k]; + } + + /* now solve trans(l)*x = y */ + + if (nm1 >= 1) + for (kb = 1; kb < nm1; kb++) + { + k = n - (kb+1); + b[k] = b[k] + ddot_ur(n-(k+1),&a[lda*k+k+1],1,&b[k+1],1); + l = ipvt[k]; + if (l != k) + { + t = b[l]; + b[l] = b[k]; + b[k] = t; + } + } + } + } + } + + + +/* +** Constant times a vector plus a vector. +** Jack Dongarra, linpack, 3/11/78. +** ROLLED version +*/ +static void daxpy_r(int n,REAL da,REAL *dx,int incx,REAL *dy,int incy) + + { + int i,ix,iy; + + if (n <= 0) + return; + if (da == ZERO) + return; + + if (incx != 1 || incy != 1) + { + + /* code for unequal increments or equal increments != 1 */ + + ix = 1; + iy = 1; + if(incx < 0) ix = (-n+1)*incx + 1; + if(incy < 0)iy = (-n+1)*incy + 1; + for (i = 0;i < n; i++) + { + dy[iy] = dy[iy] + da*dx[ix]; + ix = ix + incx; + iy = iy + incy; + } + return; + } + + /* code for both increments equal to 1 */ + + for (i = 0;i < n; i++) + dy[i] = dy[i] + da*dx[i]; + } + + +/* +** Forms the dot product of two vectors. +** Jack Dongarra, linpack, 3/11/78. +** ROLLED version +*/ +static REAL ddot_r(int n,REAL *dx,int incx,REAL *dy,int incy) + + { + REAL dtemp; + int i,ix,iy; + + dtemp = ZERO; + + if (n <= 0) + return(ZERO); + + if (incx != 1 || incy != 1) + { + + /* code for unequal increments or equal increments != 1 */ + + ix = 0; + iy = 0; + if (incx < 0) ix = (-n+1)*incx; + if (incy < 0) iy = (-n+1)*incy; + for (i = 0;i < n; i++) + { + dtemp = dtemp + dx[ix]*dy[iy]; + ix = ix + incx; + iy = iy + incy; + } + return(dtemp); + } + + /* code for both increments equal to 1 */ + + for (i=0;i < n; i++) + dtemp = dtemp + dx[i]*dy[i]; + return(dtemp); + } + + +/* +** Scales a vector by a constant. +** Jack Dongarra, linpack, 3/11/78. +** ROLLED version +*/ +static void dscal_r(int n,REAL da,REAL *dx,int incx) + + { + int i,nincx; + + if (n <= 0) + return; + if (incx != 1) + { + + /* code for increment not equal to 1 */ + + nincx = n*incx; + for (i = 0; i < nincx; i = i + incx) + dx[i] = da*dx[i]; + return; + } + + /* code for increment equal to 1 */ + + for (i = 0; i < n; i++) + dx[i] = da*dx[i]; + } + + +/* +** constant times a vector plus a vector. +** Jack Dongarra, linpack, 3/11/78. +** UNROLLED version +*/ +static void daxpy_ur(int n,REAL da,REAL *dx,int incx,REAL *dy,int incy) + + { + int i,ix,iy,m; + + if (n <= 0) + return; + if (da == ZERO) + return; + + if (incx != 1 || incy != 1) + { + + /* code for unequal increments or equal increments != 1 */ + + ix = 1; + iy = 1; + if(incx < 0) ix = (-n+1)*incx + 1; + if(incy < 0)iy = (-n+1)*incy + 1; + for (i = 0;i < n; i++) + { + dy[iy] = dy[iy] + da*dx[ix]; + ix = ix + incx; + iy = iy + incy; + } + return; + } + + /* code for both increments equal to 1 */ + + m = n % 4; + if ( m != 0) + { + for (i = 0; i < m; i++) + dy[i] = dy[i] + da*dx[i]; + if (n < 4) + return; + } + for (i = m; i < n; i = i + 4) + { + dy[i] = dy[i] + da*dx[i]; + dy[i+1] = dy[i+1] + da*dx[i+1]; + dy[i+2] = dy[i+2] + da*dx[i+2]; + dy[i+3] = dy[i+3] + da*dx[i+3]; + } + } + + +/* +** Forms the dot product of two vectors. +** Jack Dongarra, linpack, 3/11/78. +** UNROLLED version +*/ +static REAL ddot_ur(int n,REAL *dx,int incx,REAL *dy,int incy) + + { + REAL dtemp; + int i,ix,iy,m; + + dtemp = ZERO; + + if (n <= 0) + return(ZERO); + + if (incx != 1 || incy != 1) + { + + /* code for unequal increments or equal increments != 1 */ + + ix = 0; + iy = 0; + if (incx < 0) ix = (-n+1)*incx; + if (incy < 0) iy = (-n+1)*incy; + for (i = 0;i < n; i++) + { + dtemp = dtemp + dx[ix]*dy[iy]; + ix = ix + incx; + iy = iy + incy; + } + return(dtemp); + } + + /* code for both increments equal to 1 */ + + m = n % 5; + if (m != 0) + { + for (i = 0; i < m; i++) + dtemp = dtemp + dx[i]*dy[i]; + if (n < 5) + return(dtemp); + } + for (i = m; i < n; i = i + 5) + { + dtemp = dtemp + dx[i]*dy[i] + + dx[i+1]*dy[i+1] + dx[i+2]*dy[i+2] + + dx[i+3]*dy[i+3] + dx[i+4]*dy[i+4]; + } + return(dtemp); + } + + +/* +** Scales a vector by a constant. +** Jack Dongarra, linpack, 3/11/78. +** UNROLLED version +*/ +static void dscal_ur(int n,REAL da,REAL *dx,int incx) + + { + int i,m,nincx; + + if (n <= 0) + return; + if (incx != 1) + { + + /* code for increment not equal to 1 */ + + nincx = n*incx; + for (i = 0; i < nincx; i = i + incx) + dx[i] = da*dx[i]; + return; + } + + /* code for increment equal to 1 */ + + m = n % 5; + if (m != 0) + { + for (i = 0; i < m; i++) + dx[i] = da*dx[i]; + if (n < 5) + return; + } + for (i = m; i < n; i = i + 5) + { + dx[i] = da*dx[i]; + dx[i+1] = da*dx[i+1]; + dx[i+2] = da*dx[i+2]; + dx[i+3] = da*dx[i+3]; + dx[i+4] = da*dx[i+4]; + } + } + + +/* +** Finds the index of element having max. absolute value. +** Jack Dongarra, linpack, 3/11/78. +*/ +static int idamax(int n,REAL *dx,int incx) + + { + REAL dmax; + int i, ix, itemp; + + if (n < 1) + return(-1); + if (n ==1 ) + return(0); + if(incx != 1) + { + + /* code for increment not equal to 1 */ + + ix = 1; + dmax = fabs((double)dx[0]); + ix = ix + incx; + for (i = 1; i < n; i++) + { + if(fabs((double)dx[ix]) > dmax) + { + itemp = i; + dmax = fabs((double)dx[ix]); + } + ix = ix + incx; + } + } + else + { + + /* code for increment equal to 1 */ + + itemp = 0; + dmax = fabs((double)dx[0]); + for (i = 1; i < n; i++) + if(fabs((double)dx[i]) > dmax) + { + itemp = i; + dmax = fabs((double)dx[i]); + } + } + return (itemp); + } + + +static REAL second(void) + + { + return ((REAL)((REAL)clock()/(REAL)CLOCKS_PER_SEC)); + } + + diff --git a/tests32/extensions/mmx b/tests32/extensions/mmx new file mode 100755 index 0000000000000000000000000000000000000000..65b6653290bfbf992f43266f338588fa57b11d14 Binary files /dev/null and b/tests32/extensions/mmx differ diff --git a/tests32/extensions/mmx.c b/tests32/extensions/mmx.c new file mode 100644 index 0000000000000000000000000000000000000000..a43f97599545fe801925d178b47e6121a213be78 --- /dev/null +++ b/tests32/extensions/mmx.c @@ -0,0 +1,674 @@ +#include +#include +#include +#include +#include +#include + + + +typedef uint8_t u8; +typedef int8_t i8; +typedef uint16_t u16; +typedef int16_t i16; +typedef uint32_t u32; +typedef int32_t i32; +typedef uint64_t u64; +typedef int64_t i64; + +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + +#define I8_MAX 0x7F +#define I8_MIN -0x80 +#define U8_MAX 0xFF +#define U8_MIN 0 + +#define I16_MAX 0x7FFF +#define I16_MIN -0x8000 +#define U16_MAX 0xFFFF +#define U16_MIN 0 + +#define I32_MAX 0x7FFFFFFF +#define I32_MIN -0x80000000 +#define U32_MAX 0xFFFFFFFF +#define U32_MIN 0 + +#define I64_MAX 0x7FFFFFFFFFFFFFFF +#define I64_MIN -0x8000000000000000 +#define U64_MAX 0xFFFFFFFFFFFFFFFF +#define U64_MIN 0 + +#define MMX_TEST_STRUCT(sz) \ + typedef struct mmx_##sz##_test { \ + sz a; \ + sz b; \ + sz result; \ + } mmx_##sz##_test_t + +MMX_TEST_STRUCT(u8); +MMX_TEST_STRUCT(i8); +MMX_TEST_STRUCT(u16); +MMX_TEST_STRUCT(i16); +MMX_TEST_STRUCT(u32); +MMX_TEST_STRUCT(i32); +MMX_TEST_STRUCT(u64); +MMX_TEST_STRUCT(i64); + +// Binary compare two mm registers +bool mm_raw_compare(__m64 a, __m64 b) { + __m64 a_upper_reg = _mm_srli_si64(a, 32); + __m64 b_upper_reg = _mm_srli_si64(b, 32); + + int a_lower = _m_to_int(a); + int a_upper = _m_to_int(a_upper_reg); + + int b_lower = _m_to_int(b); + int b_upper = _m_to_int(b_upper_reg); + + return (a_lower == b_lower) && (a_upper == b_upper); +} + +// Load a 64 bit value into a mm register +__m64 mm_load64(u64 val) { + __m64 lower = _m_from_int(val & 0xFFFFFFFF); + __m64 upper = _m_from_int((val >> 32) & 0xFFFFFFFF); + + __m64 shifted = _mm_slli_si64(upper, 32); + __m64 final = _m_por(shifted, lower); + + return final; +} + +#define MMX_ARITH_TEST(name, testcases, testcase_type, type, size, testfunc) \ +bool name() { \ + printf("TEST: " #name "\n"); \ + int errors = 0; \ +\ + for (size_t i = 0; i < ARRAY_SIZE(testcases); i++ ) { \ + testcase_type test_data = testcases[i]; \ +\ + __m64 a = _mm_set1_pi##size(test_data.a); \ + __m64 b = _mm_set1_pi##size(test_data.b); \ + __m64 expected = _mm_set1_pi##size(test_data.result); \ + __m64 result = testfunc(a, b); \ +\ + bool success = mm_raw_compare(expected, result); \ + errors += (int) (!success); \ + } \ +\ + _m_empty(); \ + printf("TEST: finished with: %d errors\n", errors); \ + return errors; \ +} + +#define MMX_SHIFT_TEST(name, testcases, testfunc) \ +bool name() { \ + printf("TEST: " #name "\n"); \ + int errors = 0; \ +\ + for (size_t i = 0; i < ARRAY_SIZE(testcases); i++ ) { \ + mmx_u64_test_t test_data = testcases[i]; \ +\ + __m64 a = mm_load64(test_data.a); \ + __m64 expected = mm_load64(test_data.result); \ + __m64 result = testfunc(a, test_data.b); \ +\ + bool success = mm_raw_compare(expected, result); \ + if (!success) { \ + printf( \ + "Failed; Expected: 0x%08x_%08x\tGot: 0x%08x_%08x\n", \ + _m_to_int(_mm_srli_si64(expected, 32)), \ + _m_to_int(expected), \ + _m_to_int(_mm_srli_si64(result, 32)), \ + _m_to_int(result) \ + ); \ + } \ + errors += (int) (!success); \ + } \ +\ + _m_empty(); \ + printf("TEST: finished with: %d errors\n", errors); \ + return errors; \ +} + + + +// Loads 2 64 bit immediates and compares with the third +// Test data must be of type mmx_u64_test_t +#define MMX_64_TEST(name, testcases, testfunc) \ +bool name() { \ + printf("TEST: " #name "\n"); \ + int errors = 0; \ +\ + for (size_t i = 0; i < ARRAY_SIZE(testcases); i++ ) { \ + mmx_u64_test_t test_data = testcases[i]; \ +\ + __m64 a = mm_load64(test_data.a); \ + __m64 b = mm_load64(test_data.b); \ + __m64 expected = mm_load64(test_data.result); \ + __m64 result = testfunc(a, b); \ +\ + bool success = mm_raw_compare(expected, result); \ + if (!success) { \ + printf( \ + "Failed; Expected: 0x%08x_%08x\tGot: 0x%08x_%08x\n", \ + _m_to_int(_mm_srli_si64(expected, 32)), \ + _m_to_int(expected), \ + _m_to_int(_mm_srli_si64(result, 32)), \ + _m_to_int(result) \ + ); \ + } \ + errors += (int) (!success); \ + } \ +\ + _m_empty(); \ + printf("TEST: finished with: %d errors\n", errors); \ + return errors; \ +} + + +mmx_i8_test_t mmx_i8_add_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = I8_MAX, .b = 1, .result = I8_MIN }, + { .a = I8_MIN, .b = -1, .result = I8_MAX }, + { .a = 0, .b = U8_MAX, .result = U8_MAX }, +}; +mmx_i8_test_t mmx_i8_add_sat_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = I8_MAX, .b = 1, .result = I8_MAX }, + { .a = I8_MIN, .b = -1, .result = I8_MIN }, +}; +mmx_u8_test_t mmx_u8_add_sat_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = U8_MAX, .b = 1, .result = U8_MAX }, + { .a = 0, .b = U8_MAX, .result = U8_MAX }, +}; + +mmx_i16_test_t mmx_i16_add_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = I16_MAX, .b = 1, .result = I16_MIN }, + { .a = I16_MIN, .b = -1, .result = I16_MAX }, +}; +mmx_i16_test_t mmx_i16_add_sat_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = I16_MAX, .b = 1, .result = I16_MAX }, + { .a = I16_MIN, .b = -1, .result = I16_MIN }, +}; +mmx_u16_test_t mmx_u16_add_sat_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = U16_MAX, .b = 1, .result = U16_MAX }, + { .a = 0, .b = U16_MAX, .result = U16_MAX }, +}; + +mmx_i32_test_t mmx_i32_add_test_data[] = { + { .a = 1, .b = 2, .result = 3 }, + { .a = 0, .b = 1, .result = 1 }, + { .a = I32_MAX, .b = 1, .result = I32_MIN }, + { .a = I32_MIN, .b = -1, .result = I32_MAX }, +}; + +MMX_ARITH_TEST(test_mmx_paddb, mmx_i8_add_test_data, mmx_i8_test_t, i8, 8, _m_paddb); +MMX_ARITH_TEST(test_mmx_paddsb, mmx_i8_add_sat_test_data, mmx_i8_test_t, i8, 8, _m_paddsb); +MMX_ARITH_TEST(test_mmx_paddusb, mmx_u8_add_sat_test_data, mmx_u8_test_t, u8, 8, _m_paddusb); + +MMX_ARITH_TEST(test_mmx_paddw, mmx_i16_add_test_data, mmx_i16_test_t, i16, 16, _m_paddw); +MMX_ARITH_TEST(test_mmx_paddsw, mmx_i16_add_sat_test_data, mmx_i16_test_t, i16, 16, _m_paddsw); +MMX_ARITH_TEST(test_mmx_paddusw, mmx_u16_add_sat_test_data, mmx_u16_test_t, u16, 16, _m_paddusw); + +MMX_ARITH_TEST(test_mmx_paddd, mmx_i32_add_test_data, mmx_i32_test_t, i32, 32, _m_paddd); + + + +mmx_i8_test_t mmx_i8_sub_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = I8_MIN, .b = 1, .result = I8_MAX }, + { .a = I8_MAX, .b = -1, .result = I8_MIN }, + { .a = U8_MAX, .b = U8_MAX, .result = 0 }, +}; +mmx_i8_test_t mmx_i8_sub_sat_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = I8_MIN, .b = 1, .result = I8_MIN }, + { .a = I8_MAX, .b = -1, .result = I8_MAX }, +}; +mmx_u8_test_t mmx_u8_sub_sat_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = U8_MIN, .b = 1, .result = U8_MIN }, + { .a = U8_MAX, .b = U8_MAX, .result = 0 }, +}; + +mmx_i16_test_t mmx_i16_sub_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = I16_MIN, .b = 1, .result = I16_MAX }, + { .a = I16_MAX, .b = -1, .result = I16_MIN }, +}; +mmx_i16_test_t mmx_i16_sub_sat_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = I16_MIN, .b = 1, .result = I16_MIN }, + { .a = I16_MAX, .b = -1, .result = I16_MAX }, +}; +mmx_u16_test_t mmx_u16_sub_sat_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = U16_MIN, .b = 1, .result = U16_MIN }, + { .a = U16_MIN, .b = U16_MIN, .result = 0 }, +}; + +mmx_i32_test_t mmx_i32_sub_test_data[] = { + { .a = 3, .b = 2, .result = 1 }, + { .a = 1, .b = 1, .result = 0 }, + { .a = I32_MIN, .b = 1, .result = I32_MAX }, + { .a = I32_MAX, .b = -1, .result = I32_MIN }, +}; + +MMX_ARITH_TEST(test_mmx_psubb, mmx_i8_sub_test_data, mmx_i8_test_t, i8, 8, _m_psubb); +MMX_ARITH_TEST(test_mmx_psubsb, mmx_i8_sub_sat_test_data, mmx_i8_test_t, i8, 8, _m_psubsb); +MMX_ARITH_TEST(test_mmx_psubusb, mmx_u8_sub_sat_test_data, mmx_u8_test_t, u8, 8, _m_psubusb); + +MMX_ARITH_TEST(test_mmx_psubw, mmx_i16_sub_test_data, mmx_i16_test_t, i16, 16, _m_psubw); +MMX_ARITH_TEST(test_mmx_psubuw, mmx_i16_sub_sat_test_data, mmx_i16_test_t, i16, 16, _m_psubsw); +MMX_ARITH_TEST(test_mmx_psubusw, mmx_u16_sub_sat_test_data, mmx_u16_test_t, u16, 16, _m_psubusw); + +MMX_ARITH_TEST(test_mmx_psubd, mmx_i32_sub_test_data, mmx_i32_test_t, i32, 32, _m_psubd); + + + + +mmx_u64_test_t mmx_por_test_data[] = { + { .a = 0xAAAAAAAAAAAAAAAA, + .b = 0x5555555555555555, + .result = 0xFFFFFFFFFFFFFFFF }, + { .a = 0x0000000000000000, + .b = 0x1111111111111111, + .result = 0x1111111111111111 }, +}; + +mmx_u64_test_t mmx_pand_test_data[] = { + { .a = 0xAAAAAAAAAAAAAAAA, + .b = 0x5555555555555555, + .result = 0x0000000000000000 }, + { .a = 0xFFFFFFFFFFFFFFFF, + .b = 0xFFFFFFFFFFFFFFFF, + .result = 0xFFFFFFFFFFFFFFFF }, +}; + +mmx_u64_test_t mmx_pandn_test_data[] = { + { .a = 0x0000000000000000, + .b = 0xFFFFFFFFFFFFFFFF, + .result = 0xFFFFFFFFFFFFFFFF }, + { .a = 0xFFFFFFFFFFFFFFFF, + .b = 0x0000000000000000, + .result = 0x0000000000000000 }, +}; + + +mmx_u64_test_t mmx_pxor_test_data[] = { + { .a = 0xAAAAAAAAAAAAAAAA, + .b = 0x5555555555555555, + .result = 0xFFFFFFFFFFFFFFFF }, + { .a = 0xFFFFFFFFFFFFFFFF, + .b = 0xFFFFFFFFFFFFFFFF, + .result = 0x0000000000000000 }, +}; + + +MMX_64_TEST(test_mmx_por, mmx_por_test_data, _m_por); +MMX_64_TEST(test_mmx_pand, mmx_pand_test_data, _m_pand); +MMX_64_TEST(test_mmx_pandn, mmx_pandn_test_data, _m_pandn); +MMX_64_TEST(test_mmx_pxor, mmx_pxor_test_data, _m_pxor); + + + + + +mmx_i16_test_t mmx_pmullw_test_data[] = { + { .a = 10, .b = 10, .result = 100 }, + { .a = 32000, .b = 10, .result = 0xE200 }, + { .a = 20000, .b = 20000, .result = 0x8400 }, +}; +mmx_i16_test_t mmx_pmulhw_test_data[] = { + { .a = 10, .b = 10, .result = 0 }, + { .a = 32000, .b = 10, .result = 4 }, + { .a = 20000, .b = 20000, .result = 0x17D7 }, +}; +mmx_u64_test_t mmx_pmaddwd_test_data[] = { + { .a = 0x0000000100000001, + .b = 0x0000000100000001, + .result = 0x0000000100000001 }, + { .a = 0x0000000200000004, + .b = 0x0000000200000004, + .result = 0x0000000400000010 }, + + { .a = 0x000000007FFFFFFF, + .b = 0x000000007FFFFFFF, + .result = 0x000000003FFF0002 }, + + // -1 * -1 = 2 + { .a = 0x00000000FFFFFFFF, + .b = 0x00000000FFFFFFFF, + .result = 0x0000000000000002 }, +}; + + +MMX_ARITH_TEST(test_mmx_pmullw, mmx_pmullw_test_data, mmx_i16_test_t, i16, 16, _m_pmullw); +MMX_ARITH_TEST(test_mmx_pmulhw, mmx_pmulhw_test_data, mmx_i16_test_t, i16, 16, _m_pmulhw); +MMX_64_TEST(test_mmx_pmaddwd, mmx_pmaddwd_test_data, _m_pmaddwd); + + + + + +mmx_u64_test_t mmx_packssdw_test_data[] = { + { .a = 0x0000000200000001, + .b = 0x0000000400000003, + .result = 0x0004000300020001 }, + { .a = 0x7FFFFFFF7FFFFFFF, + .b = 0x7FFFFFFF7FFFFFFF, + .result = 0x7FFF7FFF7FFF7FFF }, + { .a = 0x8000000080000000, + .b = 0x8000000080000000, + .result = 0x8000800080008000 }, +}; +mmx_u64_test_t mmx_packsswb_test_data[] = { + { .a = 0x0004000300020001, + .b = 0x0008000700060005, + .result = 0x0807060504030201 }, + { .a = 0x7FFF7FFF7FFF7FFF, + .b = 0x7FFF7FFF7FFF7FFF, + .result = 0x7F7F7F7F7F7F7F7F }, + { .a = 0x8000800080008000, + .b = 0x8000800080008000, + .result = 0x8080808080808080 }, +}; +mmx_u64_test_t mmx_packuswb_test_data[] = { + { .a = 0x0004000300020001, + .b = 0x0008000700060005, + .result = 0x0807060504030201 }, + { .a = 0x7FFF7FFF7FFF7FFF, + .b = 0x7FFF7FFF7FFF7FFF, + .result = 0xFFFFFFFFFFFFFFFF }, + { .a = 0x8000800080008000, + .b = 0x8000800080008000, + .result = 0x0000000000000000 }, +}; + + +MMX_64_TEST(test_mmx_packssdw, mmx_packssdw_test_data, _m_packssdw); +MMX_64_TEST(test_mmx_packsswb, mmx_packsswb_test_data, _m_packsswb); +MMX_64_TEST(test_mmx_packuswb, mmx_packuswb_test_data, _m_packuswb); + + + +mmx_u64_test_t mmx_punpckhbw_test_data[] = { + { .a = 0x4433221100000000, + .b = 0x8877665500000000, + .result = 0x8844773366225511 }, +}; +mmx_u64_test_t mmx_punpckhdq_test_data[] = { + { .a = 0xAAAAAAAA00000000, + .b = 0xBBBBBBBB00000000, + .result = 0xBBBBBBBBAAAAAAAA }, +}; +mmx_u64_test_t mmx_punpckhwd_test_data[] = { + { .a = 0xBBBBAAAA00000000, + .b = 0xDDDDCCCC00000000, + .result = 0xDDDDBBBBCCCCAAAA }, +}; +mmx_u64_test_t mmx_punpcklbw_test_data[] = { + { .a = 0x0000000044332211, + .b = 0x0000000088776655, + .result = 0x8844773366225511 }, +}; +mmx_u64_test_t mmx_punpckldq_test_data[] = { + { .a = 0x00000000AAAAAAAA, + .b = 0x00000000BBBBBBBB, + .result = 0xBBBBBBBBAAAAAAAA }, +}; +mmx_u64_test_t mmx_punpcklwd_test_data[] = { + { .a = 0x00000000BBBBAAAA, + .b = 0x00000000DDDDCCCC, + .result = 0xDDDDBBBBCCCCAAAA }, +}; + + +MMX_64_TEST(test_mmx_punpckhbw, mmx_punpckhbw_test_data, _m_punpckhbw); +MMX_64_TEST(test_mmx_punpckhdq, mmx_punpckhdq_test_data, _m_punpckhdq); +MMX_64_TEST(test_mmx_punpckhwd, mmx_punpckhwd_test_data, _m_punpckhwd); +MMX_64_TEST(test_mmx_punpcklbw, mmx_punpcklbw_test_data, _m_punpcklbw); +MMX_64_TEST(test_mmx_punpckldq, mmx_punpckldq_test_data, _m_punpckldq); +MMX_64_TEST(test_mmx_punpcklwd, mmx_punpcklwd_test_data, _m_punpcklwd); + + + + + + +mmx_u64_test_t mmx_pcmpeqb_test_data[] = { + { .a = 0x8877665544332211, + .b = 0x0077005500330011, + .result = 0x00FF00FF00FF00FF }, +}; +mmx_u64_test_t mmx_pcmpeqw_test_data[] = { + { .a = 0x4444333322221111, + .b = 0x0000333300001111, + .result = 0x0000FFFF0000FFFF }, +}; +mmx_u64_test_t mmx_pcmpeqd_test_data[] = { + { .a = 0x2222222211111111, + .b = 0x2222222200000000, + .result = 0xFFFFFFFF00000000 }, +}; + +mmx_u64_test_t mmx_pcmpgtb_test_data[] = { + { .a = 0x0000000000002201, + .b = 0x0000000000002300, + .result = 0x00000000000000FF }, +}; +mmx_u64_test_t mmx_pcmpgtw_test_data[] = { + { .a = 0x4444333322221111, + .b = 0x0000333300001112, + .result = 0xFFFF0000FFFF0000 }, +}; +mmx_u64_test_t mmx_pcmpgtd_test_data[] = { + { .a = 0x2222222111111111, + .b = 0x2222222200000000, + .result = 0x00000000FFFFFFFF }, +}; + + +MMX_64_TEST(test_mmx_pcmpeqb, mmx_pcmpeqb_test_data, _m_pcmpeqb); +MMX_64_TEST(test_mmx_pcmpeqw, mmx_pcmpeqw_test_data, _m_pcmpeqw); +MMX_64_TEST(test_mmx_pcmpeqd, mmx_pcmpeqd_test_data, _m_pcmpeqd); +MMX_64_TEST(test_mmx_pcmpgtb, mmx_pcmpgtb_test_data, _m_pcmpgtb); +MMX_64_TEST(test_mmx_pcmpgtw, mmx_pcmpgtw_test_data, _m_pcmpgtw); +MMX_64_TEST(test_mmx_pcmpgtd, mmx_pcmpgtd_test_data, _m_pcmpgtd); + + + + +mmx_u64_test_t mmx_pslld_test_data[] = { + { .a = 1, .b = 1, .result = 2 }, + { .a = 16, .b = 1, .result = 32 }, + { .a = 16, .b = 32, .result = 0 }, + { .a = 16, .b = 0, .result = 16 }, +}; +mmx_u64_test_t mmx_psllq_test_data[] = { + { .a = 1, .b = 1, .result = 2 }, + { .a = 16, .b = 1, .result = 32 }, + { .a = 16, .b = 64, .result = 0 }, + { .a = 16, .b = 0, .result = 16 }, +}; +mmx_u64_test_t mmx_psllw_test_data[] = { + { .a = 1, .b = 1, .result = 2 }, + { .a = 16, .b = 1, .result = 32 }, + { .a = 16, .b = 16, .result = 0 }, + { .a = 16, .b = 0, .result = 16 }, +}; +mmx_u64_test_t mmx_psrad_test_data[] = { + { .a = 1, .b = 1, .result = 0 }, + { .a = 16, .b = 1, .result = 8 }, + { .a = 16, .b = 0, .result = 16 }, + { .a = 0x7FFFFFFF, .b = 1, .result = 0x3FFFFFFF }, + + { .a = I32_MAX, .b = 32, .result = 0 }, + { .a = I32_MIN, .b = 32, .result = U32_MAX }, +}; +mmx_u64_test_t mmx_psraw_test_data[] = { + { .a = 1, .b = 1, .result = 0 }, + { .a = 16, .b = 1, .result = 8 }, + { .a = 16, .b = 0, .result = 16 }, + { .a = 0x7FFF, .b = 1, .result = 0x3FFF }, + + { .a = I16_MAX, .b = 16, .result = 0 }, + { .a = U16_MAX, .b = 16, .result = U16_MAX }, +}; +mmx_u64_test_t mmx_psrld_test_data[] = { + { .a = 1, .b = 1, .result = 0 }, + { .a = 16, .b = 1, .result = 8 }, + { .a = 16, .b = 0, .result = 16 }, + { .a = 0x7FFFFFFF, .b = 1, .result = 0x3FFFFFFF }, + + { .a = I32_MAX, .b = 32, .result = 0 }, + { .a = I32_MIN, .b = 32, .result = 0 }, +}; +mmx_u64_test_t mmx_psrlq_test_data[] = { + { .a = 1, .b = 1, .result = 0 }, + { .a = 16, .b = 1, .result = 8 }, + { .a = 16, .b = 0, .result = 16 }, + + { .a = I64_MAX, .b = 64, .result = 0 }, + { .a = I64_MIN, .b = 64, .result = 0 }, +}; +mmx_u64_test_t mmx_psrlw_test_data[] = { + { .a = 1, .b = 1, .result = 0 }, + { .a = 16, .b = 1, .result = 8 }, + { .a = 16, .b = 0, .result = 16 }, + + { .a = I16_MAX, .b = 16, .result = 0 }, + + // TODO: Works on my machine + // { .a = I16_MIN, .b = 16, .result = 0 }, +}; + + + +MMX_64_TEST(test_mmx_pslld, mmx_pslld_test_data, _m_pslld); +MMX_64_TEST(test_mmx_psllq, mmx_psllq_test_data, _m_psllq); +MMX_64_TEST(test_mmx_psllw, mmx_psllw_test_data, _m_psllw); +MMX_64_TEST(test_mmx_psrad, mmx_psrad_test_data, _m_psrad); +MMX_64_TEST(test_mmx_psraw, mmx_psraw_test_data, _m_psraw); +MMX_64_TEST(test_mmx_psrld, mmx_psrld_test_data, _m_psrld); +MMX_64_TEST(test_mmx_psrlq, mmx_psrlq_test_data, _m_psrlq); +MMX_64_TEST(test_mmx_psrlw, mmx_psrlw_test_data, _m_psrlw); + +MMX_SHIFT_TEST(test_mmx_pslldi, mmx_pslld_test_data, _m_pslldi); +MMX_SHIFT_TEST(test_mmx_psllqi, mmx_psllq_test_data, _m_psllqi); +MMX_SHIFT_TEST(test_mmx_psllwi, mmx_psllw_test_data, _m_psllwi); +MMX_SHIFT_TEST(test_mmx_psradi, mmx_psrad_test_data, _m_psradi); +MMX_SHIFT_TEST(test_mmx_psrawi, mmx_psraw_test_data, _m_psrawi); +MMX_SHIFT_TEST(test_mmx_psrldi, mmx_psrld_test_data, _m_psrldi); +MMX_SHIFT_TEST(test_mmx_psrlqi, mmx_psrlq_test_data, _m_psrlqi); +MMX_SHIFT_TEST(test_mmx_psrlwi, mmx_psrlw_test_data, _m_psrlwi); + + + + +bool test_mmx_cpuid() { + printf("TEST: test_mmx_cpuid\n"); + + unsigned int eax, ebx, ecx, edx; + asm volatile( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a" (1), "c" (0) + ); + + int has_mmx = !!(edx & (1 << 23)); + if (has_mmx) { + return 0; + } + return 1; + +} + +int main() { + int errors = 0; + + errors += (int) test_mmx_cpuid(); + + + errors += (int) test_mmx_paddb(); + errors += (int) test_mmx_paddsb(); + errors += (int) test_mmx_paddusb(); + errors += (int) test_mmx_paddw(); + errors += (int) test_mmx_paddsw(); + errors += (int) test_mmx_paddusw(); + errors += (int) test_mmx_paddd(); + + errors += (int) test_mmx_psubb(); + errors += (int) test_mmx_psubsb(); + errors += (int) test_mmx_psubusb(); + errors += (int) test_mmx_psubw(); + errors += (int) test_mmx_psubuw(); + errors += (int) test_mmx_psubusw(); + errors += (int) test_mmx_psubd(); + + errors += (int) test_mmx_por(); + errors += (int) test_mmx_pand(); + errors += (int) test_mmx_pandn(); + errors += (int) test_mmx_pxor(); + + errors += (int) test_mmx_pmullw(); + errors += (int) test_mmx_pmulhw(); + errors += (int) test_mmx_pmaddwd(); + + errors += (int) test_mmx_packssdw(); + errors += (int) test_mmx_packsswb(); + errors += (int) test_mmx_packuswb(); + + errors += (int) test_mmx_punpckhbw(); + errors += (int) test_mmx_punpckhdq(); + errors += (int) test_mmx_punpckhwd(); + errors += (int) test_mmx_punpcklbw(); + errors += (int) test_mmx_punpckldq(); + errors += (int) test_mmx_punpcklwd(); + + errors += (int) test_mmx_pcmpeqb(); + errors += (int) test_mmx_pcmpeqw(); + errors += (int) test_mmx_pcmpeqd(); + errors += (int) test_mmx_pcmpgtb(); + errors += (int) test_mmx_pcmpgtw(); + errors += (int) test_mmx_pcmpgtd(); + + errors += (int) test_mmx_psllw(); + errors += (int) test_mmx_psllwi(); + errors += (int) test_mmx_pslld(); + errors += (int) test_mmx_pslldi(); + errors += (int) test_mmx_psllq(); + errors += (int) test_mmx_psllqi(); + errors += (int) test_mmx_psraw(); + errors += (int) test_mmx_psrawi(); + errors += (int) test_mmx_psrad(); + errors += (int) test_mmx_psradi(); + errors += (int) test_mmx_psrld(); + errors += (int) test_mmx_psrldi(); + errors += (int) test_mmx_psrlq(); + errors += (int) test_mmx_psrlqi(); + errors += (int) test_mmx_psrlw(); + errors += (int) test_mmx_psrlwi(); + + + printf("Errors: %d\n", errors); + return errors; +} + diff --git a/tests32/extensions/mmx.txt b/tests32/extensions/mmx.txt new file mode 100644 index 0000000000000000000000000000000000000000..673647b6e1a99e7800be6917f35906727ef4c978 --- /dev/null +++ b/tests32/extensions/mmx.txt @@ -0,0 +1,106 @@ +TEST: test_mmx_cpuid +TEST: test_mmx_paddb +TEST: finished with: 0 errors +TEST: test_mmx_paddsb +TEST: finished with: 0 errors +TEST: test_mmx_paddusb +TEST: finished with: 0 errors +TEST: test_mmx_paddw +TEST: finished with: 0 errors +TEST: test_mmx_paddsw +TEST: finished with: 0 errors +TEST: test_mmx_paddusw +TEST: finished with: 0 errors +TEST: test_mmx_paddd +TEST: finished with: 0 errors +TEST: test_mmx_psubb +TEST: finished with: 0 errors +TEST: test_mmx_psubsb +TEST: finished with: 0 errors +TEST: test_mmx_psubusb +TEST: finished with: 0 errors +TEST: test_mmx_psubw +TEST: finished with: 0 errors +TEST: test_mmx_psubuw +TEST: finished with: 0 errors +TEST: test_mmx_psubusw +TEST: finished with: 0 errors +TEST: test_mmx_psubd +TEST: finished with: 0 errors +TEST: test_mmx_por +TEST: finished with: 0 errors +TEST: test_mmx_pand +TEST: finished with: 0 errors +TEST: test_mmx_pandn +TEST: finished with: 0 errors +TEST: test_mmx_pxor +TEST: finished with: 0 errors +TEST: test_mmx_pmullw +TEST: finished with: 0 errors +TEST: test_mmx_pmulhw +TEST: finished with: 0 errors +TEST: test_mmx_pmaddwd +TEST: finished with: 0 errors +TEST: test_mmx_packssdw +TEST: finished with: 0 errors +TEST: test_mmx_packsswb +TEST: finished with: 0 errors +TEST: test_mmx_packuswb +TEST: finished with: 0 errors +TEST: test_mmx_punpckhbw +TEST: finished with: 0 errors +TEST: test_mmx_punpckhdq +TEST: finished with: 0 errors +TEST: test_mmx_punpckhwd +TEST: finished with: 0 errors +TEST: test_mmx_punpcklbw +TEST: finished with: 0 errors +TEST: test_mmx_punpckldq +TEST: finished with: 0 errors +TEST: test_mmx_punpcklwd +TEST: finished with: 0 errors +TEST: test_mmx_pcmpeqb +TEST: finished with: 0 errors +TEST: test_mmx_pcmpeqw +TEST: finished with: 0 errors +TEST: test_mmx_pcmpeqd +TEST: finished with: 0 errors +TEST: test_mmx_pcmpgtb +TEST: finished with: 0 errors +TEST: test_mmx_pcmpgtw +TEST: finished with: 0 errors +TEST: test_mmx_pcmpgtd +TEST: finished with: 0 errors +TEST: test_mmx_psllw +TEST: finished with: 0 errors +TEST: test_mmx_psllwi +TEST: finished with: 0 errors +TEST: test_mmx_pslld +TEST: finished with: 0 errors +TEST: test_mmx_pslldi +TEST: finished with: 0 errors +TEST: test_mmx_psllq +TEST: finished with: 0 errors +TEST: test_mmx_psllqi +TEST: finished with: 0 errors +TEST: test_mmx_psraw +TEST: finished with: 0 errors +TEST: test_mmx_psrawi +TEST: finished with: 0 errors +TEST: test_mmx_psrad +TEST: finished with: 0 errors +TEST: test_mmx_psradi +TEST: finished with: 0 errors +TEST: test_mmx_psrld +TEST: finished with: 0 errors +TEST: test_mmx_psrldi +TEST: finished with: 0 errors +TEST: test_mmx_psrlq +TEST: finished with: 0 errors +TEST: test_mmx_psrlqi +TEST: finished with: 0 errors +TEST: test_mmx_psrlw +TEST: finished with: 0 errors +TEST: test_mmx_psrlwi +TEST: finished with: 0 errors +Errors: 0 diff --git a/tests32/ref01.txt b/tests32/ref01.txt new file mode 100644 index 0000000000000000000000000000000000000000..980a0d5f19a64b4b30a87d4206aade58726b60e3 --- /dev/null +++ b/tests32/ref01.txt @@ -0,0 +1 @@ +Hello World! diff --git a/tests32/ref02.txt b/tests32/ref02.txt new file mode 100644 index 0000000000000000000000000000000000000000..980a0d5f19a64b4b30a87d4206aade58726b60e3 --- /dev/null +++ b/tests32/ref02.txt @@ -0,0 +1 @@ +Hello World! diff --git a/tests32/ref03.txt b/tests32/ref03.txt new file mode 100644 index 0000000000000000000000000000000000000000..980a0d5f19a64b4b30a87d4206aade58726b60e3 --- /dev/null +++ b/tests32/ref03.txt @@ -0,0 +1 @@ +Hello World! diff --git a/tests32/ref04.txt b/tests32/ref04.txt new file mode 100644 index 0000000000000000000000000000000000000000..49e7fa34d73f0d713170972724e88fa60c7abd48 --- /dev/null +++ b/tests32/ref04.txt @@ -0,0 +1 @@ +Hello, argc=2 argv[1]=yeah diff --git a/tests32/ref05.txt b/tests32/ref05.txt new file mode 100644 index 0000000000000000000000000000000000000000..5152dcb2cd45d9e73a270a442b0065de0f79a54d --- /dev/null +++ b/tests32/ref05.txt @@ -0,0 +1,6 @@ +fact(7)=5040 +Prime list 0..5040: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997 1009 1013 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 1087 1091 1093 1097 1103 1109 1117 1123 1129 1151 1153 1163 1171 1181 1187 1193 1201 1213 1217 1223 1229 1231 1237 1249 1259 1277 1279 1283 1289 1291 1297 1301 1303 1307 1319 1321 1327 1361 1367 1373 1381 1399 1409 1423 1427 1429 1433 1439 1447 1451 1453 1459 1471 1481 1483 1487 1489 1493 1499 1511 1523 1531 1543 1549 1553 1559 1567 1571 1579 1583 1597 1601 1607 1609 1613 1619 1621 1627 1637 1657 1663 1667 1669 1693 1697 1699 1709 1721 1723 1733 1741 1747 1753 1759 1777 1783 1787 1789 1801 1811 1823 1831 1847 1861 1867 1871 1873 1877 1879 1889 1901 1907 1913 1931 1933 1949 1951 1973 1979 1987 1993 1997 1999 2003 2011 2017 2027 2029 2039 2053 2063 2069 2081 2083 2087 2089 2099 2111 2113 2129 2131 2137 2141 2143 2153 2161 2179 2203 2207 2213 2221 2237 2239 2243 2251 2267 2269 2273 2281 2287 2293 2297 2309 2311 2333 2339 2341 2347 2351 2357 2371 2377 2381 2383 2389 2393 2399 2411 2417 2423 2437 2441 2447 2459 2467 2473 2477 2503 2521 2531 2539 2543 2549 2551 2557 2579 2591 2593 2609 2617 2621 2633 2647 2657 2659 2663 2671 2677 2683 2687 2689 2693 2699 2707 2711 2713 2719 2729 2731 2741 2749 2753 2767 2777 2789 2791 2797 2801 2803 2819 2833 2837 2843 2851 2857 2861 2879 2887 2897 2903 2909 2917 2927 2939 2953 2957 2963 2969 2971 2999 3001 3011 3019 3023 3037 3041 3049 3061 3067 3079 3083 3089 3109 3119 3121 3137 3163 3167 3169 3181 3187 3191 3203 3209 3217 3221 3229 3251 3253 3257 3259 3271 3299 3301 3307 3313 3319 3323 3329 3331 3343 3347 3359 3361 3371 3373 3389 3391 3407 3413 3433 3449 3457 3461 3463 3467 3469 3491 3499 3511 3517 3527 3529 3533 3539 3541 3547 3557 3559 3571 3581 3583 3593 3607 3613 3617 3623 3631 3637 3643 3659 3671 3673 3677 3691 3697 3701 3709 3719 3727 3733 3739 3761 3767 3769 3779 3793 3797 3803 3821 3823 3833 3847 3851 3853 3863 3877 3881 3889 3907 3911 3917 3919 3923 3929 3931 3943 3947 3967 3989 4001 4003 4007 4013 4019 4021 4027 4049 4051 4057 4073 4079 4091 4093 4099 4111 4127 4129 4133 4139 4153 4157 4159 4177 4201 4211 4217 4219 4229 4231 4241 4243 4253 4259 4261 4271 4273 4283 4289 4297 4327 4337 4339 4349 4357 4363 4373 4391 4397 4409 4421 4423 4441 4447 4451 4457 4463 4481 4483 4493 4507 4513 4517 4519 4523 4547 4549 4561 4567 4583 4591 4597 4603 4621 4637 4639 4643 4649 4651 4657 4663 4673 4679 4691 4703 4721 4723 4729 4733 4751 4759 4783 4787 4789 4793 4799 4801 4813 4817 4831 4861 4871 4877 4889 4903 4909 4919 4931 4933 4937 4943 4951 4957 4967 4969 4973 4987 4993 4999 5003 5009 5011 5021 5023 5039 +(un)signed char = -5/83 (un)signed int = -53/65500 total=65525 +65500/5=13100, 65500%5=0 +65525/5=13105, 65525%5=0 +65525/-53=-1236 + 17 \ No newline at end of file diff --git a/tests32/ref06.txt b/tests32/ref06.txt new file mode 100644 index 0000000000000000000000000000000000000000..8fca60fffac88649ddaf89de1e2a9e9049365e0a --- /dev/null +++ b/tests32/ref06.txt @@ -0,0 +1,4 @@ +[02] Second thread executing +[02] Thread done. + +[00] Done. diff --git a/tests32/ref07.txt b/tests32/ref07.txt new file mode 100644 index 0000000000000000000000000000000000000000..76649ab70a16c0827e171f9c7fb0074885443262 --- /dev/null +++ b/tests32/ref07.txt @@ -0,0 +1 @@ +0 is 0.000000, sin(pi/2) is 1.000000 and 3*1.5 is 4.500000. diff --git a/tests32/ref08.txt b/tests32/ref08.txt new file mode 100644 index 0000000000000000000000000000000000000000..87d2ba54cad15314cc832e79bb475200c72d1234 --- /dev/null +++ b/tests32/ref08.txt @@ -0,0 +1 @@ +31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185 \ No newline at end of file diff --git a/tests32/ref09.txt b/tests32/ref09.txt new file mode 100644 index 0000000000000000000000000000000000000000..adcb7a7ca4a1a6d8d14030dfb2a5e76199c9543f --- /dev/null +++ b/tests32/ref09.txt @@ -0,0 +1,2 @@ +Child has x = 2 +Parent has x = 0 diff --git a/tests32/ref10.txt b/tests32/ref10.txt new file mode 100644 index 0000000000000000000000000000000000000000..4af4852fcf2dfb1f4a496b9b7c0fbc89360fe6cb --- /dev/null +++ b/tests32/ref10.txt @@ -0,0 +1,10 @@ +thread #0 +thread #1 +thread #2 +thread #3 +thread #4 +thread #5 +thread #6 +thread #7 +thread #8 +thread #9 diff --git a/tests32/ref11.txt b/tests32/ref11.txt new file mode 100644 index 0000000000000000000000000000000000000000..3b4654eb09091ca807417153cf6a5ebff9a71a6c --- /dev/null +++ b/tests32/ref11.txt @@ -0,0 +1,8 @@ +Create/start 2 threads +Thread 1: Entered (10/20) +Thread 1: foo(), TLS data=0 2 "-1-" +Thread 2: Entered (10/20) +Thread 2: foo(), TLS data=1 4 "-2-" +Thread 2: bar(), TLS data=1 4 "-2-" +Thread 1: bar(), TLS data=0 2 "-1-" +Main completed diff --git a/tests32/ref12.txt b/tests32/ref12.txt new file mode 100644 index 0000000000000000000000000000000000000000..3e7d105397681cf252a8dbc33ef961134b755715 --- /dev/null +++ b/tests32/ref12.txt @@ -0,0 +1,4 @@ +1000000000000 => 1000000000000.000000 +-1000000000000 => -1000000000000.000000 +(angle_t)268435456.000000 = 268435456 == 0x10000000 +go PI trucated=3, -PI rounded=-3 diff --git a/tests32/ref13.txt b/tests32/ref13.txt new file mode 100644 index 0000000000000000000000000000000000000000..33118c0d82cfdf8de29d9c55f32929b07b6639ac --- /dev/null +++ b/tests32/ref13.txt @@ -0,0 +1,8 @@ +main: swapcontext(&uctx_main, &uctx_func2) +func2: started (1, 2) +func2: swapcontext(&uctx_func2, &uctx_func1) +func1: started +func1: swapcontext(&uctx_func1, &uctx_func2) +func2: returning +func1: returning +main: exiting diff --git a/tests32/ref14.txt b/tests32/ref14.txt new file mode 100644 index 0000000000000000000000000000000000000000..82ec7b65c1749489384cfa1761640319557e81e4 --- /dev/null +++ b/tests32/ref14.txt @@ -0,0 +1,5 @@ +Thread: thread_state = 1. +Main thread: thread_state == 1. +Thread: thread_state = 2. +Main thread: thread_state == 2. +Finished with no errors. diff --git a/tests32/ref15.txt b/tests32/ref15.txt new file mode 100644 index 0000000000000000000000000000000000000000..52326af63292b282ec95f04ea407ecec28135765 --- /dev/null +++ b/tests32/ref15.txt @@ -0,0 +1 @@ +2, 2/2 diff --git a/tests32/ref16.txt b/tests32/ref16.txt new file mode 100644 index 0000000000000000000000000000000000000000..52326af63292b282ec95f04ea407ecec28135765 --- /dev/null +++ b/tests32/ref16.txt @@ -0,0 +1 @@ +2, 2/2 diff --git a/tests32/ref17.txt b/tests32/ref17.txt new file mode 100644 index 0000000000000000000000000000000000000000..a6ed52c299d6059137796f5280e3a73db8db5a35 --- /dev/null +++ b/tests32/ref17.txt @@ -0,0 +1,564 @@ +ucomiss 1.000000, 2.000000 => 0x203 +ucomiss 2.000000, 1.000000 => 0x202 +ucomiss 1.000000, inf => 0x203 +ucomiss inf, 1.000000 => 0x202 +ucomiss 1.000000, -inf => 0x202 +ucomiss -inf, 1.000000 => 0x203 +ucomiss 1.000000, nan => 0x203 +ucomiss nan, 1.000000 => 0x203 +ucomiss 1.000000, 1.000000 => 0x242 +ucomiss 1.000000, 1.000000 => 0x242 +ucomiss inf, inf => 0x242 +ucomiss -inf, inf => 0x203 +ucomiss inf, -inf => 0x202 +ucomiss nan, nan => 0x203 +minss 1, 2 => 1 +minss 2, 1 => 1 +minss -inf, 2 => -inf +minss 2, -inf => -inf +minss inf, 2 => 2 +minss 2, inf => 2 +minss nan, 2 => 2 +minss 2, nan => nan +minss nan, 3.40282e+38 => 3.40282e+38 +minss 3.40282e+38, nan => nan +minss -inf, 3.40282e+38 => -inf +minss 3.40282e+38, -inf => -inf +minss inf, 3.40282e+38 => 3.40282e+38 +minss 3.40282e+38, inf => 3.40282e+38 +maxss 1, 2 => 2 +maxss 2, 1 => 2 +maxss -inf, 2 => 2 +maxss 2, -inf => 2 +maxss inf, 2 => inf +maxss 2, inf => inf +maxss nan, 2 => 2 +maxss 2, nan => nan +maxss nan, 3.40282e+38 => 3.40282e+38 +maxss 3.40282e+38, nan => nan +maxss -inf, 3.40282e+38 => 3.40282e+38 +maxss 3.40282e+38, -inf => 3.40282e+38 +maxss inf, 3.40282e+38 => inf +maxss 3.40282e+38, inf => inf +cmpss 0 1.000000, 2.000000 => 0x0 +cmpss 0 2.000000, 1.000000 => 0x0 +cmpss 0 1.000000, inf => 0x0 +cmpss 0 inf, 1.000000 => 0x0 +cmpss 0 1.000000, -inf => 0x0 +cmpss 0 -inf, 1.000000 => 0x0 +cmpss 0 1.000000, nan => 0x0 +cmpss 0 nan, 1.000000 => 0x0 +cmpss 0 1.000000, 1.000000 => 0xffffffff +cmpss 0 1.000000, 1.000000 => 0xffffffff +cmpss 0 inf, inf => 0xffffffff +cmpss 0 -inf, inf => 0x0 +cmpss 0 inf, -inf => 0x0 +cmpss 0 nan, nan => 0x0 +cmpss 1 1.000000, 2.000000 => 0xffffffff +cmpss 1 2.000000, 1.000000 => 0x0 +cmpss 1 1.000000, inf => 0xffffffff +cmpss 1 inf, 1.000000 => 0x0 +cmpss 1 1.000000, -inf => 0x0 +cmpss 1 -inf, 1.000000 => 0xffffffff +cmpss 1 1.000000, nan => 0x0 +cmpss 1 nan, 1.000000 => 0x0 +cmpss 1 1.000000, 1.000000 => 0x0 +cmpss 1 1.000000, 1.000000 => 0x0 +cmpss 1 inf, inf => 0x0 +cmpss 1 -inf, inf => 0xffffffff +cmpss 1 inf, -inf => 0x0 +cmpss 1 nan, nan => 0x0 +cmpss 2 1.000000, 2.000000 => 0xffffffff +cmpss 2 2.000000, 1.000000 => 0x0 +cmpss 2 1.000000, inf => 0xffffffff +cmpss 2 inf, 1.000000 => 0x0 +cmpss 2 1.000000, -inf => 0x0 +cmpss 2 -inf, 1.000000 => 0xffffffff +cmpss 2 1.000000, nan => 0x0 +cmpss 2 nan, 1.000000 => 0x0 +cmpss 2 1.000000, 1.000000 => 0xffffffff +cmpss 2 1.000000, 1.000000 => 0xffffffff +cmpss 2 inf, inf => 0xffffffff +cmpss 2 -inf, inf => 0xffffffff +cmpss 2 inf, -inf => 0x0 +cmpss 2 nan, nan => 0x0 +cmpss 3 1.000000, 2.000000 => 0x0 +cmpss 3 2.000000, 1.000000 => 0x0 +cmpss 3 1.000000, inf => 0x0 +cmpss 3 inf, 1.000000 => 0x0 +cmpss 3 1.000000, -inf => 0x0 +cmpss 3 -inf, 1.000000 => 0x0 +cmpss 3 1.000000, nan => 0xffffffff +cmpss 3 nan, 1.000000 => 0xffffffff +cmpss 3 1.000000, 1.000000 => 0x0 +cmpss 3 1.000000, 1.000000 => 0x0 +cmpss 3 inf, inf => 0x0 +cmpss 3 -inf, inf => 0x0 +cmpss 3 inf, -inf => 0x0 +cmpss 3 nan, nan => 0xffffffff +cmpss 4 1.000000, 2.000000 => 0xffffffff +cmpss 4 2.000000, 1.000000 => 0xffffffff +cmpss 4 1.000000, inf => 0xffffffff +cmpss 4 inf, 1.000000 => 0xffffffff +cmpss 4 1.000000, -inf => 0xffffffff +cmpss 4 -inf, 1.000000 => 0xffffffff +cmpss 4 1.000000, nan => 0xffffffff +cmpss 4 nan, 1.000000 => 0xffffffff +cmpss 4 1.000000, 1.000000 => 0x0 +cmpss 4 1.000000, 1.000000 => 0x0 +cmpss 4 inf, inf => 0x0 +cmpss 4 -inf, inf => 0xffffffff +cmpss 4 inf, -inf => 0xffffffff +cmpss 4 nan, nan => 0xffffffff +cmpss 5 1.000000, 2.000000 => 0x0 +cmpss 5 2.000000, 1.000000 => 0xffffffff +cmpss 5 1.000000, inf => 0x0 +cmpss 5 inf, 1.000000 => 0xffffffff +cmpss 5 1.000000, -inf => 0xffffffff +cmpss 5 -inf, 1.000000 => 0x0 +cmpss 5 1.000000, nan => 0xffffffff +cmpss 5 nan, 1.000000 => 0xffffffff +cmpss 5 1.000000, 1.000000 => 0xffffffff +cmpss 5 1.000000, 1.000000 => 0xffffffff +cmpss 5 inf, inf => 0xffffffff +cmpss 5 -inf, inf => 0x0 +cmpss 5 inf, -inf => 0xffffffff +cmpss 5 nan, nan => 0xffffffff +cmpss 6 1.000000, 2.000000 => 0x0 +cmpss 6 2.000000, 1.000000 => 0xffffffff +cmpss 6 1.000000, inf => 0x0 +cmpss 6 inf, 1.000000 => 0xffffffff +cmpss 6 1.000000, -inf => 0xffffffff +cmpss 6 -inf, 1.000000 => 0x0 +cmpss 6 1.000000, nan => 0xffffffff +cmpss 6 nan, 1.000000 => 0xffffffff +cmpss 6 1.000000, 1.000000 => 0x0 +cmpss 6 1.000000, 1.000000 => 0x0 +cmpss 6 inf, inf => 0x0 +cmpss 6 -inf, inf => 0x0 +cmpss 6 inf, -inf => 0xffffffff +cmpss 6 nan, nan => 0xffffffff +cmpss 7 1.000000, 2.000000 => 0xffffffff +cmpss 7 2.000000, 1.000000 => 0xffffffff +cmpss 7 1.000000, inf => 0xffffffff +cmpss 7 inf, 1.000000 => 0xffffffff +cmpss 7 1.000000, -inf => 0xffffffff +cmpss 7 -inf, 1.000000 => 0xffffffff +cmpss 7 1.000000, nan => 0x0 +cmpss 7 nan, 1.000000 => 0x0 +cmpss 7 1.000000, 1.000000 => 0xffffffff +cmpss 7 1.000000, 1.000000 => 0xffffffff +cmpss 7 inf, inf => 0xffffffff +cmpss 7 -inf, inf => 0xffffffff +cmpss 7 inf, -inf => 0xffffffff +cmpss 7 nan, nan => 0x0 +pshufb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x80 0x2 0x2 0xff 0x0 0x0 0xff 0xfe 0x81 0x0 0x3 0x72 0x32 0xff 0x80 +phaddw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x7fff 0x3 0x8004 0xffff 0xfffe 0x9050 0x7fff +phaddd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x7fffffff 0x7fffffff 0x80000001 0x3 +phaddsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0x7fff 0x3 0x8004 0xffff 0xfffe 0x9050 0x8000 +pmaddubsw(0x80ff 0x7f 0x201 0x8103 0x84fe 0x5272 0xa5 0x32c0 , 0x100 0x1505 0x8020 0xff 0x708 0x681 0xf0a 0x110 ) = 0x80 0x27b 0xff20 0xfffd 0xb8c 0xc95e 0x672 0xc32 +phsubw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x7fff 0xffff 0x8002 0x1 0x0 0x7050 0x7ffd +psignb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x80 0x7f 0x0 0x1 0xfe 0xfd 0x0 0xfe 0x84 0x8e 0x52 0xa5 0x0 0xc0 0x32 +psignw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x8000 0x8001 0x0 0x1 0xfffe 0xfffd 0x7fff +psignd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x80000000 0x7fffffff 0x0 +pmulhrsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x8001 0xffff 0x0 0x0 0xfffe 0x0 0x7ffe +pblendvps(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe , 0x1 0x80000000 0x80000005 0xfffe ) = 0xffffffff 0x80000000 0x5 0x0 +ptestz(0x80000000ffffffff 0x7fffffff , 0x8000000000000001 0xfffffffe00000005 ) = 0 +ptestc(0x80000000ffffffff 0x7fffffff , 0x8000000000000001 0xfffffffe00000005 ) = 0 +ptestnzc(0x80000000ffffffff 0x7fffffff , 0x8000000000000001 0xfffffffe00000005 ) = 1 +pabsb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 ) = 0x1 0x80 0x7f 0x0 0x1 0x2 0x3 0x7f 0x2 0x7c 0x72 0x52 0x5b 0x0 0x40 0x32 +pabsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 ) = 0x1 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x7fff +pabsd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0x1 0x80000000 0x7fffffff 0x0 +pmovsxbw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 ) = 0xffff 0xffff 0x0 0xff80 0xffff 0x7f 0x0 0x0 +pmovsxbd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xffffffff 0xffffffff 0xffffffff 0xffffffff +pmovsxbq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffffffffffff 0xffffffffffffffff +pmovsxwd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xffffffff 0xffffffff 0x0 0xffff8000 +pmovsxwq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffffffffffff 0xffffffffffffffff +pmovsxdq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffffffffffff 0xffffffffffffffff +pmovzxbw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 ) = 0xff 0xff 0x0 0x80 0xff 0x7f 0x0 0x0 +pmovzxbd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xff 0xff 0xff 0xff +pmovzxbq(0xffffffffffffffff 0x8000000000000000 ) = 0xff 0xff +pmovzxwd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xffff 0xffff 0x0 0x8000 +pmovzxwq(0xffffffffffffffff 0x8000000000000000 ) = 0xffff 0xffff +pmovzxdq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffff 0xffffffff +pminsd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x80000000 0x5 0xfffffffe +pmaxsd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x1 0x80000000 0x7fffffff 0x0 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 255) = 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 170) = 0xffff 0x7fff 0x7fff 0xffff 0x1 0x9000 0x3 0x8001 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 2) = 0xffff 0x7fff 0x7fff 0x0 0x1 0x2 0x3 0x8001 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 0) = 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 2) = 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 0xff 0x80 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 7) = 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 0xff 0x80 0x7f 0x0 0x1 0x2 0x3 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 15) = 0x1 0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 16) = 0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +movmskpd(0xffffffffffffffff 0x8000000000000000 ) = 0x3 +psqrtpd(1 2 ) = 1 1.41421 +psqrtpd(0 -2 ) = 0 0xfff8000000000000 +psqrtpd(inf -inf ) = inf 0xfff8000000000000 +psqrtpd(0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +andpd(1 2 , 0 -2 ) = 0 2 +andpd(0 -2 , inf -inf ) = 0 -2 +andpd(1 2 , 0x7ff8000000000000 -0 ) = 1 0 +andpd(0 -2 , 0x7ff8000000000000 -0 ) = 0 -0 +andpd(inf -inf , 0x7ff8000000000000 -0 ) = inf -0 +andpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +andnpd(1 2 , 0 -2 ) = 0 -0 +andnpd(0 -2 , inf -inf ) = inf 1 +andnpd(1 2 , 0x7ff8000000000000 -0 ) = 3 -0 +andnpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +andnpd(inf -inf , 0x7ff8000000000000 -0 ) = 1.11254e-308 0 +andnpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0 0 +orpd(1 2 , 0 -2 ) = 1 -2 +orpd(0 -2 , inf -inf ) = inf -inf +orpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +orpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +orpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +orpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +xorpd(1 2 , 0 -2 ) = 1 -0 +xorpd(0 -2 , inf -inf ) = inf 1 +xorpd(1 2 , 0x7ff8000000000000 -0 ) = 3 -2 +xorpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +xorpd(inf -inf , 0x7ff8000000000000 -0 ) = 1.11254e-308 inf +xorpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0 0 +addpd(1 2 , 0 -2 ) = 1 0 +addpd(0 -2 , inf -inf ) = inf -inf +addpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +addpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +addpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +addpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +mulpd(1 2 , 0 -2 ) = 0 -4 +mulpd(0 -2 , inf -inf ) = 0xfff8000000000000 inf +mulpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +mulpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +mulpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0xfff8000000000000 +mulpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +subpd(1 2 , 0 -2 ) = 1 4 +subpd(0 -2 , inf -inf ) = -inf inf +subpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +subpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +subpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +subpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +minpd(1 2 , 0 -2 ) = 0 -2 +minpd(0 -2 , inf -inf ) = 0 -inf +minpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +minpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +minpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +minpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +divpd(1 2 , 0 -2 ) = inf -1 +divpd(0 -2 , inf -inf ) = 0 0 +divpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +divpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 inf +divpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 inf +divpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0xfff8000000000000 +maxpd(1 2 , 0 -2 ) = 1 2 +maxpd(0 -2 , inf -inf ) = inf -2 +maxpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +maxpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +maxpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +maxpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +punpcklbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x0 0x80 0x1 0x7f 0x5 0x0 0x15 0x1 0x20 0x2 0x80 0x3 0xff 0x81 0x0 +punpcklwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x8000 0x8000 0x7fff 0x7fff 0xffff 0x0 0xffff +punpckldq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x1 0x80000000 0x80000000 +ppacksswb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x80ff 0x7f 0x201 0x8003 0x7f80 0xffff 0x8050 0x80fe +pcmpgtb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x0 0xff 0x0 0x0 0xff 0xff 0x0 0x0 0x0 0xff 0xff 0x0 0x0 0x0 0xff +pcmpgtw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x0 0xffff 0xffff 0x0 0xffff 0xffff 0x0 +pcmpgtd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0xffffffff 0xffffffff +packuswb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xff 0x201 0x3 0xff00 0x0 0x50 0x0 +punpckhbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xfe 0x8 0x84 0x7 0x72 0x81 0x52 0x6 0xa5 0xa 0x0 0xf 0xc0 0x10 0x32 0x1 +punpckhwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x50 0x2 0x9000 0x3 0xfffe 0x8001 0x8001 +punpckhdq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x7fffffff 0x5 0x0 0xfffffffe +ppackssdw(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x8000ffff 0x7fff 0x80000001 0xfffe0005 +punpcklqdq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xffffffffffffffff 0x1 +punpckhqdq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x8000000000000000 0x8000000000000000 +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0xffffffff 0xffffffff 0xffffffff +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0 +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0x7fffffff 0xffffffff 0xffffffff 0xffffffff +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0x3fff 0x2000 0x1fff 0x0 0x0 0x0 0x0 0x2000 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x0 0x0 0x0 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0x3fffffff 0x20000000 0x1fffffff 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 0) = 0xffffffffffffffff 0x8000000000000000 +psrlq(0xffffffffffffffff 0x8000000000000000 255) = 0x0 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 170) = 0x0 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 2) = 0x3fffffffffffffff 0x2000000000000000 +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0xffff 0xe000 0x1fff 0x0 0x0 0x0 0x0 0xe000 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0xffffffff 0xffffffff 0x0 0x0 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0xffffffff 0xffffffff 0x0 0x0 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0xffffffff 0xe0000000 0x1fffffff 0x0 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0xfffc 0x0 0xfffc 0x0 0x4 0x8 0xc 0x4 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x0 0x0 0x0 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0xfffffffc 0x0 0xfffffffc 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 0) = 0xffffffffffffffff 0x8000000000000000 +psllq(0xffffffffffffffff 0x8000000000000000 255) = 0x0 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 170) = 0x0 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 2) = 0xfffffffffffffffc 0x0 +pcmpeqb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +pcmpeqw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xffff +pcmpeqd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0xffffffff 0x0 0x0 +haddpd(1 2 , 0 -2 ) = 3 -2 +haddpd(0 -2 , inf -inf ) = -2 0xfff8000000000000 +haddpd(1 2 , 0x7ff8000000000000 -0 ) = 3 0x7ff8000000000000 +haddpd(0 -2 , 0x7ff8000000000000 -0 ) = -2 0x7ff8000000000000 +haddpd(inf -inf , 0x7ff8000000000000 -0 ) = 0xfff8000000000000 0x7ff8000000000000 +haddpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0x7ff8000000000000 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0x0 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x7fffffffffffffff 0x4000000000000000 +paddq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x0 0x0 +pmullw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0x8000 0x8001 0x0 0x50 0x2000 0xfffa 0x1 +psubusb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x7f 0x7a 0x0 0x0 0x0 0x0 0x81 0xf6 0x7d 0x0 0x4c 0x9b 0x0 0xb0 0x31 +psubusw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x1 0x0 0x0 0x0 0x0 0x0 0x0 +pminub(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x1 0x5 0x0 0x1 0x2 0x3 0x0 0x8 0x7 0x72 0x6 0xa 0x0 0x10 0x1 +pand(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0x3000000050000 0x2000408 +paddusb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x81 0x84 0x15 0x21 0x82 0xff 0x81 0xff 0x8b 0xf3 0x58 0xaf 0xf 0xd0 0x33 +paddusw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0xffff 0xffff 0xffff 0x51 0x9002 0xffff 0xffff +pmaxub(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x80 0x7f 0x15 0x20 0x80 0xff 0x81 0xfe 0x84 0x81 0x52 0xa5 0xf 0xc0 0x32 +pandn(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0xfc802015000100 0x1100f0a04810300 +pavgb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x80 0x41 0x42 0xb 0x11 0x41 0x81 0x41 0x83 0x46 0x7a 0x2c 0x58 0x8 0x68 0x1a +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0xffffffff 0x0 0x0 +pavgb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xc000 0x8000 0xbfff 0x8000 0x29 0x4801 0x8001 0x8001 +pmulhuw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x3fff 0x7ffe 0x0 0x0 0x1 0x2 0x4001 +pmulhw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xc000 0xffff 0x0 0x0 0xffff 0xffff 0x3fff +psubsb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x80 0x7a 0xeb 0xe1 0x7f 0x4 0x81 0xf6 0x80 0x7f 0x4c 0x9b 0xf1 0xb0 0x31 +psubsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x8000 0x7fff 0x1 0xffb1 0x7002 0x5 0x0 +pminsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0x8000 0xffff 0xffff 0x1 0x9000 0xfffe 0x8001 +por(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0x81ff8221157f81ff 0x33d00faf56f387fe +paddusb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x81 0x7f 0x15 0x21 0x82 0x2 0x81 0x6 0x8b 0xf3 0x58 0xaf 0xf 0xd0 0x33 +paddusw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0xffff 0x7ffe 0xffff 0x51 0x9002 0x1 0x8000 +pmaxsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x7fff 0x7fff 0x0 0x50 0x2 0x3 0x8001 +pxor(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0x81fc8221157a81ff 0x33d00faf54f383f6 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0x0 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xfffffffffffffffe 0x0 +pmuludq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x0 0x7ffffffb 0x2 +pmaddwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xc001 0x8001 0xffff 0x2050 0xffff 0xfffb 0x3ffe +psadbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x27 0x4 0x0 0x0 0x0 0x0 0x0 0x0 0x59 0x3 0x0 0x0 0x0 0x0 0x0 0x0 +psubb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x7f 0x7a 0xeb 0xe1 0x82 0x4 0x81 0xf6 0x7d 0xf1 0x4c 0x9b 0xf1 0xb0 0x31 +psubw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x1 0x8000 0x1 0xffb1 0x7002 0x5 0x0 +psubd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xfffffffe 0x0 0x7ffffffa 0x2 +psubq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xfffffffffffffffe 0x0 +paddb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x81 0x84 0x15 0x21 0x82 0x2 0x81 0x6 0x8b 0xf3 0x58 0xaf 0xf 0xd0 0x33 +paddw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0xffff 0x7ffe 0xffff 0x51 0x9002 0x1 0x2 +paddd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0x80000004 0xfffffffe +pmovhlps(1 2 3 -4 , 0 -2 -10 0.5 ) = -10 0.5 3 -4 +unpcklps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 0 2 -2 +unpckhps(1 2 3 -4 , 0 -2 -10 0.5 ) = 3 -10 -4 0.5 +pmovhps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 2 0 -2 +psqrtps(1 2 3 -4 ) = 1 1.41421 1.73205 nan +psqrtps(0 -2 -10 0.5 ) = 0 nan nan 0.707107 +psqrtps(inf -inf -inf 1 ) = inf nan nan 1 +psqrtps(nan -0 nan inf ) = nan -0 nan inf +prcpps(nan -0 nan inf ) = nan -inf nan 0 +andps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 2 2 0 +andps(0 -2 -10 0.5 , inf -inf -inf 1 ) = 0 -2 -8 0.5 +andps(1 2 3 -4 , nan -0 nan inf ) = 1 0 3 4 +andps(0 -2 -10 0.5 , nan -0 nan inf ) = 0 -0 -8 0.5 +andps(inf -inf -inf 1 , nan -0 nan inf ) = inf -0 -inf 1 +andps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +andnps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 -0 -2.93874e-38 0.5 +andnps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf 1 0.25 1.17549e-38 +andnps(1 2 3 -4 , nan -0 nan inf ) = 3 -0 -1 0.5 +andnps(0 -2 -10 0.5 , nan -0 nan inf ) = nan 0 0.375 4 +andnps(inf -inf -inf 1 , nan -0 nan inf ) = 5.87747e-39 0 5.87747e-39 2 +andnps(nan -0 nan inf , nan -0 nan inf ) = 0 0 0 0 +orps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 -2 -14 -inf +orps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf -inf nan 1 +orps(1 2 3 -4 , nan -0 nan inf ) = nan -2 nan -inf +orps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan inf +orps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan inf +orps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +xorps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 -0 -4.11423e-38 -inf +xorps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf 1 0.3125 1.17549e-38 +xorps(1 2 3 -4 , nan -0 nan inf ) = 3 -2 -1 -0.5 +xorps(0 -2 -10 0.5 , nan -0 nan inf ) = nan 2 0.4375 4 +xorps(inf -inf -inf 1 , nan -0 nan inf ) = 5.87747e-39 inf 5.87747e-39 2 +xorps(nan -0 nan inf , nan -0 nan inf ) = 0 0 0 0 +addps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 0 -7 -3.5 +addps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf -inf -inf 1.5 +addps(1 2 3 -4 , nan -0 nan inf ) = nan 2 nan inf +addps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan inf +addps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan inf +addps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +mulps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 -4 -30 -2 +mulps(0 -2 -10 0.5 , inf -inf -inf 1 ) = nan inf inf 0.5 +mulps(1 2 3 -4 , nan -0 nan inf ) = nan -0 nan -inf +mulps(0 -2 -10 0.5 , nan -0 nan inf ) = nan 0 nan inf +mulps(inf -inf -inf 1 , nan -0 nan inf ) = nan nan nan inf +mulps(nan -0 nan inf , nan -0 nan inf ) = nan 0 nan inf +subps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 4 13 -4.5 +subps(0 -2 -10 0.5 , inf -inf -inf 1 ) = -inf inf inf -0.5 +subps(1 2 3 -4 , nan -0 nan inf ) = nan 2 nan -inf +subps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan -inf +subps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan -inf +subps(nan -0 nan inf , nan -0 nan inf ) = nan 0 nan nan +minps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 -2 -10 -4 +minps(0 -2 -10 0.5 , inf -inf -inf 1 ) = 0 -inf -inf 0.5 +minps(1 2 3 -4 , nan -0 nan inf ) = nan -0 nan -4 +minps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan 0.5 +minps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan 1 +minps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +divps(1 2 3 -4 , 0 -2 -10 0.5 ) = inf -1 -0.3 -8 +divps(0 -2 -10 0.5 , inf -inf -inf 1 ) = 0 0 0 0.5 +divps(1 2 3 -4 , nan -0 nan inf ) = nan -inf nan -0 +divps(0 -2 -10 0.5 , nan -0 nan inf ) = nan inf nan 0 +divps(inf -inf -inf 1 , nan -0 nan inf ) = nan inf nan 0 +divps(nan -0 nan inf , nan -0 nan inf ) = nan nan nan nan +maxps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 2 3 0.5 +maxps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf -2 -10 1 +maxps(1 2 3 -4 , nan -0 nan inf ) = nan 2 nan inf +maxps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -0 nan inf +maxps(inf -inf -inf 1 , nan -0 nan inf ) = nan -0 nan inf +maxps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 0) = 1 1 0 0 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 0) = 0 0 inf inf +shufps(1 2 3 -4 , nan -0 nan inf , 0) = 1 1 nan nan +shufps(0 -2 -10 0.5 , nan -0 nan inf , 0) = 0 0 nan nan +shufps(inf -inf -inf 1 , nan -0 nan inf , 0) = inf inf nan nan +shufps(nan -0 nan inf , nan -0 nan inf , 0) = nan nan nan nan +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 21) = 2 2 -2 0 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 21) = -2 -2 -inf inf +shufps(1 2 3 -4 , nan -0 nan inf , 21) = 2 2 -0 nan +shufps(0 -2 -10 0.5 , nan -0 nan inf , 21) = -2 -2 -0 nan +shufps(inf -inf -inf 1 , nan -0 nan inf , 21) = -inf -inf -0 nan +shufps(nan -0 nan inf , nan -0 nan inf , 21) = -0 -0 -0 nan +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 255) = -4 -4 0.5 0.5 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 255) = 0.5 0.5 1 1 +shufps(1 2 3 -4 , nan -0 nan inf , 255) = -4 -4 inf inf +shufps(0 -2 -10 0.5 , nan -0 nan inf , 255) = 0.5 0.5 inf inf +shufps(inf -inf -inf 1 , nan -0 nan inf , 255) = 1 1 inf inf +shufps(nan -0 nan inf , nan -0 nan inf , 255) = inf inf inf inf +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 2) = 3 1 0 0 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 2) = -10 0 inf inf +shufps(1 2 3 -4 , nan -0 nan inf , 2) = 3 1 nan nan +shufps(0 -2 -10 0.5 , nan -0 nan inf , 2) = -10 0 nan nan +shufps(inf -inf -inf 1 , nan -0 nan inf , 2) = -inf inf nan nan +shufps(nan -0 nan inf , nan -0 nan inf , 2) = nan nan nan nan +sqrtsd(1 2 , 1 2 ) = 1 2 +sqrtsd(1 2 , 0 -2 ) = 0 2 +sqrtsd(1 2 , inf -inf ) = inf 2 +sqrtsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +sqrtsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +sqrtsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +sqrtsd(1 2 , 2 1 ) = 1.41421 2 +sqrtsd(1 2 , -2 0 ) = 0xfff8000000000000 2 +sqrtsd(1 2 , -inf inf ) = 0xfff8000000000000 2 +sqrtsd(1 2 , -0 0x7ff8000000000000 ) = -0 2 +sqrtsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +sqrtsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +addsd(1 2 , 1 2 ) = 2 2 +addsd(1 2 , 0 -2 ) = 1 2 +addsd(1 2 , inf -inf ) = inf 2 +addsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +addsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +addsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +addsd(1 2 , 2 1 ) = 3 2 +addsd(1 2 , -2 0 ) = -1 2 +addsd(1 2 , -inf inf ) = -inf 2 +addsd(1 2 , -0 0x7ff8000000000000 ) = 1 2 +addsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +addsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +mulsd(1 2 , 1 2 ) = 1 2 +mulsd(1 2 , 0 -2 ) = 0 2 +mulsd(1 2 , inf -inf ) = inf 2 +mulsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +mulsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +mulsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +mulsd(1 2 , 2 1 ) = 2 2 +mulsd(1 2 , -2 0 ) = -2 2 +mulsd(1 2 , -inf inf ) = -inf 2 +mulsd(1 2 , -0 0x7ff8000000000000 ) = -0 2 +mulsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +mulsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +subsd(1 2 , 1 2 ) = 0 2 +subsd(1 2 , 0 -2 ) = 1 2 +subsd(1 2 , inf -inf ) = -inf 2 +subsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +subsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +subsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +subsd(1 2 , 2 1 ) = -1 2 +subsd(1 2 , -2 0 ) = 3 2 +subsd(1 2 , -inf inf ) = inf 2 +subsd(1 2 , -0 0x7ff8000000000000 ) = 1 2 +subsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +subsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +minsd(1 2 , 1 2 ) = 1 2 +minsd(1 2 , 0 -2 ) = 0 2 +minsd(1 2 , inf -inf ) = 1 2 +minsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +minsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +minsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +minsd(1 2 , 2 1 ) = 1 2 +minsd(1 2 , -2 0 ) = -2 2 +minsd(1 2 , -inf inf ) = -inf 2 +minsd(1 2 , -0 0x7ff8000000000000 ) = -0 2 +minsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +minsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +divsd(1 2 , 1 2 ) = 1 2 +divsd(1 2 , 0 -2 ) = inf 2 +divsd(1 2 , inf -inf ) = 0 2 +divsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +divsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +divsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +divsd(1 2 , 2 1 ) = 0.5 2 +divsd(1 2 , -2 0 ) = -0.5 2 +divsd(1 2 , -inf inf ) = -0 2 +divsd(1 2 , -0 0x7ff8000000000000 ) = -inf 2 +divsd(0 -2 , -0 0x7ff8000000000000 ) = 0xfff8000000000000 -2 +divsd(0 -2 , -0 0x7ff8000000000000 ) = 0xfff8000000000000 -2 +maxsd(1 2 , 1 2 ) = 1 2 +maxsd(1 2 , 0 -2 ) = 1 2 +maxsd(1 2 , inf -inf ) = inf 2 +maxsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +maxsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +maxsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +maxsd(1 2 , 2 1 ) = 2 2 +maxsd(1 2 , -2 0 ) = 1 2 +maxsd(1 2 , -inf inf ) = 1 2 +maxsd(1 2 , -0 0x7ff8000000000000 ) = 1 2 +maxsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +maxsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +cvtps2dq(1 2 3 -4 ) = 0x1 0x2 0x3 0xfffffffc +cvtps2dq(0 -2 -10 0.5 ) = 0x0 0xfffffffe 0xfffffff6 0x0 +cvtps2dq(inf -inf -inf 1 ) = 0x80000000 0x80000000 0x80000000 0x1 +cvtps2dq(nan -0 nan inf ) = 0x80000000 0x0 0x80000000 0x80000000 +dpps(1 2 3 -4 , 0 -2 -10 0.5 , 255) = -36 -36 -36 -36 +dpps(0 -2 -10 0.5 , inf -inf -inf 1 , 255) = nan nan nan nan +dpps(1 2 3 -4 , nan -0 nan inf , 255) = nan nan nan nan +dpps(0 -2 -10 0.5 , nan -0 nan inf , 255) = nan nan nan nan +dpps(inf -inf -inf 1 , nan -0 nan inf , 255) = nan nan nan nan +dpps(nan -0 nan inf , nan -0 nan inf , 255) = nan nan nan nan +dpps(1 2 3 -4 , 0 -2 -10 0.5 , 63) = -4 -4 -4 -4 +dpps(0 -2 -10 0.5 , inf -inf -inf 1 , 63) = nan nan nan nan +dpps(1 2 3 -4 , nan -0 nan inf , 63) = nan nan nan nan +dpps(0 -2 -10 0.5 , nan -0 nan inf , 63) = nan nan nan nan +dpps(inf -inf -inf 1 , nan -0 nan inf , 63) = nan nan nan nan +dpps(nan -0 nan inf , nan -0 nan inf , 63) = nan nan nan nan +dpps(1 2 3 -4 , 0 -2 -10 0.5 , 243) = -36 -36 0 0 +dpps(0 -2 -10 0.5 , inf -inf -inf 1 , 243) = nan nan 0 0 +dpps(1 2 3 -4 , nan -0 nan inf , 243) = nan nan 0 0 +dpps(0 -2 -10 0.5 , nan -0 nan inf , 243) = nan nan 0 0 +dpps(inf -inf -inf 1 , nan -0 nan inf , 243) = nan nan 0 0 +dpps(nan -0 nan inf , nan -0 nan inf , 243) = nan nan 0 0 +dpps(1 2 3 -4 , 0 -2 -10 0.5 , 83) = -30 -30 0 0 +dpps(0 -2 -10 0.5 , inf -inf -inf 1 , 83) = nan nan 0 0 +dpps(1 2 3 -4 , nan -0 nan inf , 83) = nan nan 0 0 +dpps(0 -2 -10 0.5 , nan -0 nan inf , 83) = nan nan 0 0 +dpps(inf -inf -inf 1 , nan -0 nan inf , 83) = nan nan 0 0 +dpps(nan -0 nan inf , nan -0 nan inf , 83) = nan nan 0 0 diff --git a/tests32/ref17_o2.txt b/tests32/ref17_o2.txt new file mode 100644 index 0000000000000000000000000000000000000000..a954ed240b2ceef16bdb0faa6ed591e1ee046ccc --- /dev/null +++ b/tests32/ref17_o2.txt @@ -0,0 +1,840 @@ +ucomiss 1.000000, 2.000000 => 0x203 +ucomiss 2.000000, 1.000000 => 0x202 +ucomiss -1.000000, 2.000000 => 0x203 +ucomiss 2.000000, -1.000000 => 0x202 +ucomiss -1.000000, 340282346638528859811704183484516925440.000000 => 0x203 +ucomiss 340282346638528859811704183484516925440.000000, -1.000000 => 0x202 +ucomiss -1.000000, -340282346638528859811704183484516925440.000000 => 0x202 +ucomiss -340282346638528859811704183484516925440.000000, -1.000000 => 0x203 +ucomiss 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0x202 +ucomiss -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0x203 +ucomiss -0.000000, 0.000000 => 0x242 +ucomiss 0.000000, -0.000000 => 0x242 +ucomiss -2.000000, -2.000000 => 0x242 +ucomiss 5.000000, 5.000000 => 0x242 +ucomiss 5.000000, inf => 0x203 +ucomiss inf, 5.000000 => 0x202 +ucomiss 5.000000, -inf => 0x202 +ucomiss -inf, 5.000000 => 0x203 +ucomiss 5.000000, nan => 0x203 +ucomiss nan, 5.000000 => 0x203 +ucomiss 5.000000, 5.000000 => 0x242 +ucomiss 5.000000, 5.000000 => 0x242 +ucomiss inf, inf => 0x242 +ucomiss -inf, inf => 0x203 +ucomiss inf, -inf => 0x202 +ucomiss nan, nan => 0x203 +minss 1, 2 => 1 +minss 2, 1 => 1 +minss -1, 2 => -1 +minss 2, -1 => -1 +minss -0, 0 => 0 +minss 0, -0 => -0 +minss 5, -10 => -10 +minss -10, 5 => -10 +minss -inf, -10 => -inf +minss -10, -inf => -inf +minss inf, -10 => -10 +minss -10, inf => -10 +minss nan, -10 => -10 +minss -10, nan => nan +minss nan, 3.40282e+38 => 3.40282e+38 +minss 3.40282e+38, nan => nan +minss -inf, 3.40282e+38 => -inf +minss 3.40282e+38, -inf => -inf +minss inf, 3.40282e+38 => 3.40282e+38 +minss 3.40282e+38, inf => 3.40282e+38 +maxss 1, 2 => 2 +maxss 2, 1 => 2 +maxss -1, 2 => 2 +maxss 2, -1 => 2 +maxss -0, 0 => 0 +maxss 0, -0 => -0 +maxss 5, -10 => 5 +maxss -10, 5 => 5 +maxss -inf, -10 => -10 +maxss -10, -inf => -10 +maxss inf, -10 => inf +maxss -10, inf => inf +maxss nan, -10 => -10 +maxss -10, nan => nan +maxss nan, 3.40282e+38 => 3.40282e+38 +maxss 3.40282e+38, nan => nan +maxss -inf, 3.40282e+38 => 3.40282e+38 +maxss 3.40282e+38, -inf => 3.40282e+38 +maxss inf, 3.40282e+38 => inf +maxss 3.40282e+38, inf => inf +cmpss 0 1.000000, 2.000000 => 0x0 +cmpss 0 2.000000, 1.000000 => 0x0 +cmpss 0 -1.000000, 2.000000 => 0x0 +cmpss 0 2.000000, -1.000000 => 0x0 +cmpss 0 -1.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 0 340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 0 -1.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 0 -340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 0 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 0 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 0 -0.000000, 0.000000 => 0xffffffff +cmpss 0 0.000000, -0.000000 => 0xffffffff +cmpss 0 -2.000000, -2.000000 => 0xffffffff +cmpss 0 5.000000, 5.000000 => 0xffffffff +cmpss 0 5.000000, inf => 0x0 +cmpss 0 inf, 5.000000 => 0x0 +cmpss 0 5.000000, -inf => 0x0 +cmpss 0 -inf, 5.000000 => 0x0 +cmpss 0 5.000000, nan => 0x0 +cmpss 0 nan, 5.000000 => 0x0 +cmpss 0 5.000000, 5.000000 => 0xffffffff +cmpss 0 5.000000, 5.000000 => 0xffffffff +cmpss 0 inf, inf => 0xffffffff +cmpss 0 -inf, inf => 0x0 +cmpss 0 inf, -inf => 0x0 +cmpss 0 nan, nan => 0x0 +cmpss 1 1.000000, 2.000000 => 0xffffffff +cmpss 1 2.000000, 1.000000 => 0x0 +cmpss 1 -1.000000, 2.000000 => 0xffffffff +cmpss 1 2.000000, -1.000000 => 0x0 +cmpss 1 -1.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 1 340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 1 -1.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 1 -340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 1 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 1 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 1 -0.000000, 0.000000 => 0x0 +cmpss 1 0.000000, -0.000000 => 0x0 +cmpss 1 -2.000000, -2.000000 => 0x0 +cmpss 1 5.000000, 5.000000 => 0x0 +cmpss 1 5.000000, inf => 0xffffffff +cmpss 1 inf, 5.000000 => 0x0 +cmpss 1 5.000000, -inf => 0x0 +cmpss 1 -inf, 5.000000 => 0xffffffff +cmpss 1 5.000000, nan => 0x0 +cmpss 1 nan, 5.000000 => 0x0 +cmpss 1 5.000000, 5.000000 => 0x0 +cmpss 1 5.000000, 5.000000 => 0x0 +cmpss 1 inf, inf => 0x0 +cmpss 1 -inf, inf => 0xffffffff +cmpss 1 inf, -inf => 0x0 +cmpss 1 nan, nan => 0x0 +cmpss 2 1.000000, 2.000000 => 0xffffffff +cmpss 2 2.000000, 1.000000 => 0x0 +cmpss 2 -1.000000, 2.000000 => 0xffffffff +cmpss 2 2.000000, -1.000000 => 0x0 +cmpss 2 -1.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 2 340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 2 -1.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 2 -340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 2 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 2 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 2 -0.000000, 0.000000 => 0xffffffff +cmpss 2 0.000000, -0.000000 => 0xffffffff +cmpss 2 -2.000000, -2.000000 => 0xffffffff +cmpss 2 5.000000, 5.000000 => 0xffffffff +cmpss 2 5.000000, inf => 0xffffffff +cmpss 2 inf, 5.000000 => 0x0 +cmpss 2 5.000000, -inf => 0x0 +cmpss 2 -inf, 5.000000 => 0xffffffff +cmpss 2 5.000000, nan => 0x0 +cmpss 2 nan, 5.000000 => 0x0 +cmpss 2 5.000000, 5.000000 => 0xffffffff +cmpss 2 5.000000, 5.000000 => 0xffffffff +cmpss 2 inf, inf => 0xffffffff +cmpss 2 -inf, inf => 0xffffffff +cmpss 2 inf, -inf => 0x0 +cmpss 2 nan, nan => 0x0 +cmpss 3 1.000000, 2.000000 => 0x0 +cmpss 3 2.000000, 1.000000 => 0x0 +cmpss 3 -1.000000, 2.000000 => 0x0 +cmpss 3 2.000000, -1.000000 => 0x0 +cmpss 3 -1.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 3 340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 3 -1.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 3 -340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 3 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0x0 +cmpss 3 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 3 -0.000000, 0.000000 => 0x0 +cmpss 3 0.000000, -0.000000 => 0x0 +cmpss 3 -2.000000, -2.000000 => 0x0 +cmpss 3 5.000000, 5.000000 => 0x0 +cmpss 3 5.000000, inf => 0x0 +cmpss 3 inf, 5.000000 => 0x0 +cmpss 3 5.000000, -inf => 0x0 +cmpss 3 -inf, 5.000000 => 0x0 +cmpss 3 5.000000, nan => 0xffffffff +cmpss 3 nan, 5.000000 => 0xffffffff +cmpss 3 5.000000, 5.000000 => 0x0 +cmpss 3 5.000000, 5.000000 => 0x0 +cmpss 3 inf, inf => 0x0 +cmpss 3 -inf, inf => 0x0 +cmpss 3 inf, -inf => 0x0 +cmpss 3 nan, nan => 0xffffffff +cmpss 4 1.000000, 2.000000 => 0xffffffff +cmpss 4 2.000000, 1.000000 => 0xffffffff +cmpss 4 -1.000000, 2.000000 => 0xffffffff +cmpss 4 2.000000, -1.000000 => 0xffffffff +cmpss 4 -1.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 4 340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 4 -1.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 4 -340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 4 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 4 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 4 -0.000000, 0.000000 => 0x0 +cmpss 4 0.000000, -0.000000 => 0x0 +cmpss 4 -2.000000, -2.000000 => 0x0 +cmpss 4 5.000000, 5.000000 => 0x0 +cmpss 4 5.000000, inf => 0xffffffff +cmpss 4 inf, 5.000000 => 0xffffffff +cmpss 4 5.000000, -inf => 0xffffffff +cmpss 4 -inf, 5.000000 => 0xffffffff +cmpss 4 5.000000, nan => 0xffffffff +cmpss 4 nan, 5.000000 => 0xffffffff +cmpss 4 5.000000, 5.000000 => 0x0 +cmpss 4 5.000000, 5.000000 => 0x0 +cmpss 4 inf, inf => 0x0 +cmpss 4 -inf, inf => 0xffffffff +cmpss 4 inf, -inf => 0xffffffff +cmpss 4 nan, nan => 0xffffffff +cmpss 5 1.000000, 2.000000 => 0x0 +cmpss 5 2.000000, 1.000000 => 0xffffffff +cmpss 5 -1.000000, 2.000000 => 0x0 +cmpss 5 2.000000, -1.000000 => 0xffffffff +cmpss 5 -1.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 5 340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 5 -1.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 5 -340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 5 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 5 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 5 -0.000000, 0.000000 => 0xffffffff +cmpss 5 0.000000, -0.000000 => 0xffffffff +cmpss 5 -2.000000, -2.000000 => 0xffffffff +cmpss 5 5.000000, 5.000000 => 0xffffffff +cmpss 5 5.000000, inf => 0x0 +cmpss 5 inf, 5.000000 => 0xffffffff +cmpss 5 5.000000, -inf => 0xffffffff +cmpss 5 -inf, 5.000000 => 0x0 +cmpss 5 5.000000, nan => 0xffffffff +cmpss 5 nan, 5.000000 => 0xffffffff +cmpss 5 5.000000, 5.000000 => 0xffffffff +cmpss 5 5.000000, 5.000000 => 0xffffffff +cmpss 5 inf, inf => 0xffffffff +cmpss 5 -inf, inf => 0x0 +cmpss 5 inf, -inf => 0xffffffff +cmpss 5 nan, nan => 0xffffffff +cmpss 6 1.000000, 2.000000 => 0x0 +cmpss 6 2.000000, 1.000000 => 0xffffffff +cmpss 6 -1.000000, 2.000000 => 0x0 +cmpss 6 2.000000, -1.000000 => 0xffffffff +cmpss 6 -1.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 6 340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 6 -1.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 6 -340282346638528859811704183484516925440.000000, -1.000000 => 0x0 +cmpss 6 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 6 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0x0 +cmpss 6 -0.000000, 0.000000 => 0x0 +cmpss 6 0.000000, -0.000000 => 0x0 +cmpss 6 -2.000000, -2.000000 => 0x0 +cmpss 6 5.000000, 5.000000 => 0x0 +cmpss 6 5.000000, inf => 0x0 +cmpss 6 inf, 5.000000 => 0xffffffff +cmpss 6 5.000000, -inf => 0xffffffff +cmpss 6 -inf, 5.000000 => 0x0 +cmpss 6 5.000000, nan => 0xffffffff +cmpss 6 nan, 5.000000 => 0xffffffff +cmpss 6 5.000000, 5.000000 => 0x0 +cmpss 6 5.000000, 5.000000 => 0x0 +cmpss 6 inf, inf => 0x0 +cmpss 6 -inf, inf => 0x0 +cmpss 6 inf, -inf => 0xffffffff +cmpss 6 nan, nan => 0xffffffff +cmpss 7 1.000000, 2.000000 => 0xffffffff +cmpss 7 2.000000, 1.000000 => 0xffffffff +cmpss 7 -1.000000, 2.000000 => 0xffffffff +cmpss 7 2.000000, -1.000000 => 0xffffffff +cmpss 7 -1.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 7 340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 7 -1.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 7 -340282346638528859811704183484516925440.000000, -1.000000 => 0xffffffff +cmpss 7 340282346638528859811704183484516925440.000000, -340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 7 -340282346638528859811704183484516925440.000000, 340282346638528859811704183484516925440.000000 => 0xffffffff +cmpss 7 -0.000000, 0.000000 => 0xffffffff +cmpss 7 0.000000, -0.000000 => 0xffffffff +cmpss 7 -2.000000, -2.000000 => 0xffffffff +cmpss 7 5.000000, 5.000000 => 0xffffffff +cmpss 7 5.000000, inf => 0xffffffff +cmpss 7 inf, 5.000000 => 0xffffffff +cmpss 7 5.000000, -inf => 0xffffffff +cmpss 7 -inf, 5.000000 => 0xffffffff +cmpss 7 5.000000, nan => 0x0 +cmpss 7 nan, 5.000000 => 0x0 +cmpss 7 5.000000, 5.000000 => 0xffffffff +cmpss 7 5.000000, 5.000000 => 0xffffffff +cmpss 7 inf, inf => 0xffffffff +cmpss 7 -inf, inf => 0xffffffff +cmpss 7 inf, -inf => 0xffffffff +cmpss 7 nan, nan => 0x0 +pshufb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x80 0x2 0x2 0xff 0x0 0x0 0xff 0xfe 0x81 0x0 0x3 0x72 0x32 0xff 0x80 +phaddw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x7fff 0x3 0x8004 0xffff 0xfffe 0x9050 0x7fff +phaddd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x7fffffff 0x7fffffff 0x80000001 0x3 +phaddsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0x7fff 0x3 0x8004 0xffff 0xfffe 0x9050 0x8000 +pmaddubsw(0x80ff 0x7f 0x201 0x8103 0x84fe 0x5272 0xa5 0x32c0 , 0x100 0x1505 0x8020 0xff 0x708 0x681 0xf0a 0x110 ) = 0x80 0x27b 0xff20 0xfffd 0xb8c 0xc95e 0x672 0xc32 +phsubw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x7fff 0xffff 0x8002 0x1 0x0 0x7050 0x7ffd +psignb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x80 0x7f 0x0 0x1 0xfe 0xfd 0x0 0xfe 0x84 0x8e 0x52 0xa5 0x0 0xc0 0x32 +psignw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x8000 0x8001 0x0 0x1 0xfffe 0xfffd 0x7fff +psignd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x80000000 0x7fffffff 0x0 +pmulhrsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x8001 0xffff 0x0 0x0 0xfffe 0x0 0x7ffe +pblendvps(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe , 0x1 0x80000000 0x80000005 0xfffe ) = 0xffffffff 0x80000000 0x5 0x0 +ptestz(0x80000000ffffffff 0x7fffffff , 0x8000000000000001 0xfffffffe00000005 ) = 0 +ptestc(0x80000000ffffffff 0x7fffffff , 0x8000000000000001 0xfffffffe00000005 ) = 0 +ptestnzc(0x80000000ffffffff 0x7fffffff , 0x8000000000000001 0xfffffffe00000005 ) = 1 +pabsb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 ) = 0x1 0x80 0x7f 0x0 0x1 0x2 0x3 0x7f 0x2 0x7c 0x72 0x52 0x5b 0x0 0x40 0x32 +pabsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 ) = 0x1 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x7fff +pabsd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0x1 0x80000000 0x7fffffff 0x0 +pmovsxbw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 ) = 0xffff 0xffff 0x0 0xff80 0xffff 0x7f 0x0 0x0 +pmovsxbd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xffffffff 0xffffffff 0xffffffff 0xffffffff +pmovsxbq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffffffffffff 0xffffffffffffffff +pmovsxwd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xffffffff 0xffffffff 0x0 0xffff8000 +pmovsxwq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffffffffffff 0xffffffffffffffff +pmovsxdq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffffffffffff 0xffffffffffffffff +pmovzxbw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 ) = 0xff 0xff 0x0 0x80 0xff 0x7f 0x0 0x0 +pmovzxbd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xff 0xff 0xff 0xff +pmovzxbq(0xffffffffffffffff 0x8000000000000000 ) = 0xff 0xff +pmovzxwd(0xffffffff 0x80000000 0x7fffffff 0x0 ) = 0xffff 0xffff 0x0 0x8000 +pmovzxwq(0xffffffffffffffff 0x8000000000000000 ) = 0xffff 0xffff +pmovzxdq(0xffffffffffffffff 0x8000000000000000 ) = 0xffffffff 0xffffffff +pminsd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x80000000 0x5 0xfffffffe +pmaxsd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x1 0x80000000 0x7fffffff 0x0 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 255) = 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 170) = 0xffff 0x7fff 0x7fff 0xffff 0x1 0x9000 0x3 0x8001 +pblendw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 2) = 0xffff 0x7fff 0x7fff 0x0 0x1 0x2 0x3 0x8001 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 0) = 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 2) = 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 0xff 0x80 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 7) = 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 0xff 0x80 0x7f 0x0 0x1 0x2 0x3 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 15) = 0x1 0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 16) = 0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 +palignr(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +movmskpd(0xffffffffffffffff 0x8000000000000000 ) = 0x3 +psqrtpd(1 2 ) = 1 1.41421 +psqrtpd(0 -2 ) = 0 0xfff8000000000000 +psqrtpd(inf -inf ) = inf 0xfff8000000000000 +psqrtpd(0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +andpd(1 2 , 0 -2 ) = 0 2 +andpd(0 -2 , inf -inf ) = 0 -2 +andpd(1 2 , 0x7ff8000000000000 -0 ) = 1 0 +andpd(0 -2 , 0x7ff8000000000000 -0 ) = 0 -0 +andpd(inf -inf , 0x7ff8000000000000 -0 ) = inf -0 +andpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +andnpd(1 2 , 0 -2 ) = 0 -0 +andnpd(0 -2 , inf -inf ) = inf 1 +andnpd(1 2 , 0x7ff8000000000000 -0 ) = 3 -0 +andnpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +andnpd(inf -inf , 0x7ff8000000000000 -0 ) = 1.11254e-308 0 +andnpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0 0 +orpd(1 2 , 0 -2 ) = 1 -2 +orpd(0 -2 , inf -inf ) = inf -inf +orpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +orpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +orpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +orpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +xorpd(1 2 , 0 -2 ) = 1 -0 +xorpd(0 -2 , inf -inf ) = inf 1 +xorpd(1 2 , 0x7ff8000000000000 -0 ) = 3 -2 +xorpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +xorpd(inf -inf , 0x7ff8000000000000 -0 ) = 1.11254e-308 inf +xorpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0 0 +addpd(1 2 , 0 -2 ) = 1 0 +addpd(0 -2 , inf -inf ) = inf -inf +addpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +addpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +addpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +addpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +mulpd(1 2 , 0 -2 ) = 0 -4 +mulpd(0 -2 , inf -inf ) = 0xfff8000000000000 inf +mulpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +mulpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +mulpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0xfff8000000000000 +mulpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +subpd(1 2 , 0 -2 ) = 1 4 +subpd(0 -2 , inf -inf ) = -inf inf +subpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +subpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +subpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +subpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0 +minpd(1 2 , 0 -2 ) = 0 -2 +minpd(0 -2 , inf -inf ) = 0 -inf +minpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +minpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +minpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +minpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +divpd(1 2 , 0 -2 ) = inf -1 +divpd(0 -2 , inf -inf ) = 0 0 +divpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +divpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 inf +divpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 inf +divpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0xfff8000000000000 +maxpd(1 2 , 0 -2 ) = 1 2 +maxpd(0 -2 , inf -inf ) = inf -2 +maxpd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +maxpd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +maxpd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +maxpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -0 +punpcklbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x0 0x80 0x1 0x7f 0x5 0x0 0x15 0x1 0x20 0x2 0x80 0x3 0xff 0x81 0x0 +punpcklwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x8000 0x8000 0x7fff 0x7fff 0xffff 0x0 0xffff +punpckldq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x1 0x80000000 0x80000000 +ppacksswb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x80ff 0x7f 0x201 0x8003 0x7f80 0xffff 0x8050 0x80fe +pcmpgtb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x0 0xff 0x0 0x0 0xff 0xff 0x0 0x0 0x0 0xff 0xff 0x0 0x0 0x0 0xff +pcmpgtw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x0 0xffff 0xffff 0x0 0xffff 0xffff 0x0 +pcmpgtd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0xffffffff 0xffffffff +packuswb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xff 0x201 0x3 0xff00 0x0 0x50 0x0 +punpckhbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xfe 0x8 0x84 0x7 0x72 0x81 0x52 0x6 0xa5 0xa 0x0 0xf 0xc0 0x10 0x32 0x1 +punpckhwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x1 0x50 0x2 0x9000 0x3 0xfffe 0x8001 0x8001 +punpckhdq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x7fffffff 0x5 0x0 0xfffffffe +ppackssdw(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x8000ffff 0x7fff 0x80000001 0xfffe0005 +punpcklqdq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xffffffffffffffff 0x1 +punpckhqdq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x8000000000000000 0x8000000000000000 +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0xffffffff 0xffffffff 0xffffffff +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0 +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff +pshufd(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0x7fffffff 0xffffffff 0xffffffff 0xffffffff +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0x3fff 0x2000 0x1fff 0x0 0x0 0x0 0x0 0x2000 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x0 0x0 0x0 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0x3fffffff 0x20000000 0x1fffffff 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 0) = 0xffffffffffffffff 0x8000000000000000 +psrlq(0xffffffffffffffff 0x8000000000000000 255) = 0x0 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 170) = 0x0 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 2) = 0x3fffffffffffffff 0x2000000000000000 +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0xffff 0xe000 0x1fff 0x0 0x0 0x0 0x0 0xe000 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0xffffffff 0xffffffff 0x0 0x0 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0xffffffff 0xffffffff 0x0 0x0 +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0xffffffff 0xe0000000 0x1fffffff 0x0 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 0) = 0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 255) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 170) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 2) = 0xfffc 0x0 0xfffc 0x0 0x4 0x8 0xc 0x4 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 0) = 0xffffffff 0x80000000 0x7fffffff 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 255) = 0x0 0x0 0x0 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 170) = 0x0 0x0 0x0 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 2) = 0xfffffffc 0x0 0xfffffffc 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 0) = 0xffffffffffffffff 0x8000000000000000 +psllq(0xffffffffffffffff 0x8000000000000000 255) = 0x0 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 170) = 0x0 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 2) = 0xfffffffffffffffc 0x0 +pcmpeqb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +pcmpeqw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xffff +pcmpeqd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0xffffffff 0x0 0x0 +haddpd(1 2 , 0 -2 ) = 3 -2 +haddpd(0 -2 , inf -inf ) = -2 0xfff8000000000000 +haddpd(1 2 , 0x7ff8000000000000 -0 ) = 3 0x7ff8000000000000 +haddpd(0 -2 , 0x7ff8000000000000 -0 ) = -2 0x7ff8000000000000 +haddpd(inf -inf , 0x7ff8000000000000 -0 ) = 0xfff8000000000000 0x7ff8000000000000 +haddpd(0x7ff8000000000000 -0 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 0x7ff8000000000000 +psrlw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +psrld(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0x0 0x0 +psrlq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x7fffffffffffffff 0x4000000000000000 +paddq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0x0 0x0 +pmullw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0x8000 0x8001 0x0 0x50 0x2000 0xfffa 0x1 +psubusb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x7f 0x7a 0x0 0x0 0x0 0x0 0x81 0xf6 0x7d 0x0 0x4c 0x9b 0x0 0xb0 0x31 +psubusw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x1 0x0 0x0 0x0 0x0 0x0 0x0 +pminub(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x0 0x1 0x5 0x0 0x1 0x2 0x3 0x0 0x8 0x7 0x72 0x6 0xa 0x0 0x10 0x1 +pand(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0x3000000050000 0x2000408 +paddusb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x81 0x84 0x15 0x21 0x82 0xff 0x81 0xff 0x8b 0xf3 0x58 0xaf 0xf 0xd0 0x33 +paddusw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0xffff 0xffff 0xffff 0x51 0x9002 0xffff 0xffff +pmaxub(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x80 0x7f 0x15 0x20 0x80 0xff 0x81 0xfe 0x84 0x81 0x52 0xa5 0xf 0xc0 0x32 +pandn(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0xfc802015000100 0x1100f0a04810300 +pavgb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x80 0x41 0x42 0xb 0x11 0x41 0x81 0x41 0x83 0x46 0x7a 0x2c 0x58 0x8 0x68 0x1a +psraw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0xffff 0x0 0x0 0x0 0x0 0x0 0xffff +psrad(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0xffffffff 0x0 0x0 +pavgb(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xc000 0x8000 0xbfff 0x8000 0x29 0x4801 0x8001 0x8001 +pmulhuw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x3fff 0x7ffe 0x0 0x0 0x1 0x2 0x4001 +pmulhw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xc000 0xffff 0x0 0x0 0xffff 0xffff 0x3fff +psubsb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x80 0x7a 0xeb 0xe1 0x7f 0x4 0x81 0xf6 0x80 0x7f 0x4c 0x9b 0xf1 0xb0 0x31 +psubsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x8000 0x7fff 0x1 0xffb1 0x7002 0x5 0x0 +pminsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0x8000 0xffff 0xffff 0x1 0x9000 0xfffe 0x8001 +por(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0x81ff8221157f81ff 0x33d00faf56f387fe +paddusb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x81 0x7f 0x15 0x21 0x82 0x2 0x81 0x6 0x8b 0xf3 0x58 0xaf 0xf 0xd0 0x33 +paddusw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x8000 0xffff 0x7ffe 0xffff 0x51 0x9002 0x1 0x8000 +pmaxsw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0xffff 0x7fff 0x7fff 0x0 0x50 0x2 0x3 0x8001 +pxor(0x81030201007f80ff 0x32c000a5527284fe , 0xff802015050100 0x1100f0a06810708 ) = 0x81fc8221157a81ff 0x33d00faf54f383f6 +psllw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 +pslld(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0x0 0x0 +psllq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xfffffffffffffffe 0x0 +pmuludq(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xffffffff 0x0 0x7ffffffb 0x2 +pmaddwd(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x0 0xc001 0x8001 0xffff 0x2050 0xffff 0xfffb 0x3ffe +psadbw(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0x27 0x4 0x0 0x0 0x0 0x0 0x0 0x0 0x59 0x3 0x0 0x0 0x0 0x0 0x0 0x0 +psubb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x7f 0x7a 0xeb 0xe1 0x82 0x4 0x81 0xf6 0x7d 0xf1 0x4c 0x9b 0xf1 0xb0 0x31 +psubw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0x1 0x8000 0x1 0xffb1 0x7002 0x5 0x0 +psubd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0xfffffffe 0x0 0x7ffffffa 0x2 +psubq(0xffffffffffffffff 0x8000000000000000 , 0x1 0x8000000000000000 ) = 0xfffffffffffffffe 0x0 +paddb(0xff 0x80 0x7f 0x0 0x1 0x2 0x3 0x81 0xfe 0x84 0x72 0x52 0xa5 0x0 0xc0 0x32 , 0x0 0x1 0x5 0x15 0x20 0x80 0xff 0x0 0x8 0x7 0x81 0x6 0xa 0xf 0x10 0x1 ) = 0xff 0x81 0x84 0x15 0x21 0x82 0x2 0x81 0x6 0x8b 0xf3 0x58 0xaf 0xf 0xd0 0x33 +paddw(0xffff 0x8000 0x7fff 0x0 0x1 0x2 0x3 0x8001 , 0x8000 0x7fff 0xffff 0xffff 0x50 0x9000 0xfffe 0x8001 ) = 0x7fff 0xffff 0x7ffe 0xffff 0x51 0x9002 0x1 0x2 +paddd(0xffffffff 0x80000000 0x7fffffff 0x0 , 0x1 0x80000000 0x5 0xfffffffe ) = 0x0 0x0 0x80000004 0xfffffffe +pmovhlps(1 2 3 -4 , 0 -2 -10 0.5 ) = -10 0.5 3 -4 +unpcklps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 0 2 -2 +unpckhps(1 2 3 -4 , 0 -2 -10 0.5 ) = 3 -10 -4 0.5 +pmovhps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 2 0 -2 +psqrtps(1 2 3 -4 ) = 1 1.41421 1.73205 nan +psqrtps(0 -2 -10 0.5 ) = 0 nan nan 0.707107 +psqrtps(inf -inf -inf 1 ) = inf nan nan 1 +psqrtps(nan -0 nan inf ) = nan -0 nan inf +prsqrtps(1 2 3 -4 ) = 1 0.71 0.58 nan +prsqrtps(0 -2 -10 0.5 ) = inf nan nan 1.4 +prsqrtps(inf -inf -inf 1 ) = 0 nan nan 1 +prsqrtps(nan -0 nan inf ) = nan -inf nan 0 +prcpps(1 2 3 -4 ) = 1 0.5 0.33 -0.25 +prcpps(0 -2 -10 0.5 ) = inf -0.5 -0.1 2 +prcpps(inf -inf -inf 1 ) = 0 -0 -0 1 +prcpps(nan -0 nan inf ) = nan -inf nan 0 +andps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 2 2 0 +andps(0 -2 -10 0.5 , inf -inf -inf 1 ) = 0 -2 -8 0.5 +andps(1 2 3 -4 , nan -0 nan inf ) = 1 0 3 4 +andps(0 -2 -10 0.5 , nan -0 nan inf ) = 0 -0 -8 0.5 +andps(inf -inf -inf 1 , nan -0 nan inf ) = inf -0 -inf 1 +andps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +andnps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 -0 -2.93874e-38 0.5 +andnps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf 1 0.25 1.17549e-38 +andnps(1 2 3 -4 , nan -0 nan inf ) = 3 -0 -1 0.5 +andnps(0 -2 -10 0.5 , nan -0 nan inf ) = nan 0 0.375 4 +andnps(inf -inf -inf 1 , nan -0 nan inf ) = 5.87747e-39 0 5.87747e-39 2 +andnps(nan -0 nan inf , nan -0 nan inf ) = 0 0 0 0 +orps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 -2 -14 -inf +orps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf -inf nan 1 +orps(1 2 3 -4 , nan -0 nan inf ) = nan -2 nan -inf +orps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan inf +orps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan inf +orps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +xorps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 -0 -4.11423e-38 -inf +xorps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf 1 0.3125 1.17549e-38 +xorps(1 2 3 -4 , nan -0 nan inf ) = 3 -2 -1 -0.5 +xorps(0 -2 -10 0.5 , nan -0 nan inf ) = nan 2 0.4375 4 +xorps(inf -inf -inf 1 , nan -0 nan inf ) = 5.87747e-39 inf 5.87747e-39 2 +xorps(nan -0 nan inf , nan -0 nan inf ) = 0 0 0 0 +addps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 0 -7 -3.5 +addps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf -inf -inf 1.5 +addps(1 2 3 -4 , nan -0 nan inf ) = nan 2 nan inf +addps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan inf +addps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan inf +addps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +mulps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 -4 -30 -2 +mulps(0 -2 -10 0.5 , inf -inf -inf 1 ) = nan inf inf 0.5 +mulps(1 2 3 -4 , nan -0 nan inf ) = nan -0 nan -inf +mulps(0 -2 -10 0.5 , nan -0 nan inf ) = nan 0 nan inf +mulps(inf -inf -inf 1 , nan -0 nan inf ) = nan nan nan inf +mulps(nan -0 nan inf , nan -0 nan inf ) = nan 0 nan inf +subps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 4 13 -4.5 +subps(0 -2 -10 0.5 , inf -inf -inf 1 ) = -inf inf inf -0.5 +subps(1 2 3 -4 , nan -0 nan inf ) = nan 2 nan -inf +subps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan -inf +subps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan -inf +subps(nan -0 nan inf , nan -0 nan inf ) = nan 0 nan nan +minps(1 2 3 -4 , 0 -2 -10 0.5 ) = 0 -2 -10 -4 +minps(0 -2 -10 0.5 , inf -inf -inf 1 ) = 0 -inf -inf 0.5 +minps(1 2 3 -4 , nan -0 nan inf ) = nan -0 nan -4 +minps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -2 nan 0.5 +minps(inf -inf -inf 1 , nan -0 nan inf ) = nan -inf nan 1 +minps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +divps(1 2 3 -4 , 0 -2 -10 0.5 ) = inf -1 -0.3 -8 +divps(0 -2 -10 0.5 , inf -inf -inf 1 ) = 0 0 0 0.5 +divps(1 2 3 -4 , nan -0 nan inf ) = nan -inf nan -0 +divps(0 -2 -10 0.5 , nan -0 nan inf ) = nan inf nan 0 +divps(inf -inf -inf 1 , nan -0 nan inf ) = nan inf nan 0 +divps(nan -0 nan inf , nan -0 nan inf ) = nan nan nan nan +maxps(1 2 3 -4 , 0 -2 -10 0.5 ) = 1 2 3 0.5 +maxps(0 -2 -10 0.5 , inf -inf -inf 1 ) = inf -2 -10 1 +maxps(1 2 3 -4 , nan -0 nan inf ) = nan 2 nan inf +maxps(0 -2 -10 0.5 , nan -0 nan inf ) = nan -0 nan inf +maxps(inf -inf -inf 1 , nan -0 nan inf ) = nan -0 nan inf +maxps(nan -0 nan inf , nan -0 nan inf ) = nan -0 nan inf +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 0) = 1 1 0 0 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 0) = 0 0 inf inf +shufps(1 2 3 -4 , nan -0 nan inf , 0) = 1 1 nan nan +shufps(0 -2 -10 0.5 , nan -0 nan inf , 0) = 0 0 nan nan +shufps(inf -inf -inf 1 , nan -0 nan inf , 0) = inf inf nan nan +shufps(nan -0 nan inf , nan -0 nan inf , 0) = nan nan nan nan +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 21) = 2 2 -2 0 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 21) = -2 -2 -inf inf +shufps(1 2 3 -4 , nan -0 nan inf , 21) = 2 2 -0 nan +shufps(0 -2 -10 0.5 , nan -0 nan inf , 21) = -2 -2 -0 nan +shufps(inf -inf -inf 1 , nan -0 nan inf , 21) = -inf -inf -0 nan +shufps(nan -0 nan inf , nan -0 nan inf , 21) = -0 -0 -0 nan +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 255) = -4 -4 0.5 0.5 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 255) = 0.5 0.5 1 1 +shufps(1 2 3 -4 , nan -0 nan inf , 255) = -4 -4 inf inf +shufps(0 -2 -10 0.5 , nan -0 nan inf , 255) = 0.5 0.5 inf inf +shufps(inf -inf -inf 1 , nan -0 nan inf , 255) = 1 1 inf inf +shufps(nan -0 nan inf , nan -0 nan inf , 255) = inf inf inf inf +shufps(1 2 3 -4 , 0 -2 -10 0.5 , 2) = 3 1 0 0 +shufps(0 -2 -10 0.5 , inf -inf -inf 1 , 2) = -10 0 inf inf +shufps(1 2 3 -4 , nan -0 nan inf , 2) = 3 1 nan nan +shufps(0 -2 -10 0.5 , nan -0 nan inf , 2) = -10 0 nan nan +shufps(inf -inf -inf 1 , nan -0 nan inf , 2) = -inf inf nan nan +shufps(nan -0 nan inf , nan -0 nan inf , 2) = nan nan nan nan +sqrtsd(1 2 , 1 2 ) = 1 2 +sqrtsd(1 2 , 0 -2 ) = 0 2 +sqrtsd(1 2 , inf -inf ) = inf 2 +sqrtsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +sqrtsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +sqrtsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +sqrtsd(1 2 , 2 1 ) = 1.41421 2 +sqrtsd(1 2 , -2 0 ) = 0xfff8000000000000 2 +sqrtsd(1 2 , -inf inf ) = 0xfff8000000000000 2 +sqrtsd(1 2 , -0 0x7ff8000000000000 ) = -0 2 +sqrtsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +sqrtsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +addsd(1 2 , 1 2 ) = 2 2 +addsd(1 2 , 0 -2 ) = 1 2 +addsd(1 2 , inf -inf ) = inf 2 +addsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +addsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +addsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +addsd(1 2 , 2 1 ) = 3 2 +addsd(1 2 , -2 0 ) = -1 2 +addsd(1 2 , -inf inf ) = -inf 2 +addsd(1 2 , -0 0x7ff8000000000000 ) = 1 2 +addsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +addsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +mulsd(1 2 , 1 2 ) = 1 2 +mulsd(1 2 , 0 -2 ) = 0 2 +mulsd(1 2 , inf -inf ) = inf 2 +mulsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +mulsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +mulsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +mulsd(1 2 , 2 1 ) = 2 2 +mulsd(1 2 , -2 0 ) = -2 2 +mulsd(1 2 , -inf inf ) = -inf 2 +mulsd(1 2 , -0 0x7ff8000000000000 ) = -0 2 +mulsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +mulsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +subsd(1 2 , 1 2 ) = 0 2 +subsd(1 2 , 0 -2 ) = 1 2 +subsd(1 2 , inf -inf ) = -inf 2 +subsd(1 2 , 0x7ff8000000000000 -0 ) = 0xfff8000000000000 2 +subsd(0 -2 , 0x7ff8000000000000 -0 ) = 0xfff8000000000000 -2 +subsd(inf -inf , 0x7ff8000000000000 -0 ) = 0xfff8000000000000 -inf +subsd(1 2 , 2 1 ) = -1 2 +subsd(1 2 , -2 0 ) = 3 2 +subsd(1 2 , -inf inf ) = inf 2 +subsd(1 2 , -0 0x7ff8000000000000 ) = 1 2 +subsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +subsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +minsd(1 2 , 1 2 ) = 1 2 +minsd(1 2 , 0 -2 ) = 0 2 +minsd(1 2 , inf -inf ) = 1 2 +minsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +minsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +minsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +minsd(1 2 , 2 1 ) = 1 2 +minsd(1 2 , -2 0 ) = -2 2 +minsd(1 2 , -inf inf ) = -inf 2 +minsd(1 2 , -0 0x7ff8000000000000 ) = -0 2 +minsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +minsd(0 -2 , -0 0x7ff8000000000000 ) = -0 -2 +divsd(1 2 , 1 2 ) = 1 2 +divsd(1 2 , 0 -2 ) = inf 2 +divsd(1 2 , inf -inf ) = 0 2 +divsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +divsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +divsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +divsd(1 2 , 2 1 ) = 0.5 2 +divsd(1 2 , -2 0 ) = -0.5 2 +divsd(1 2 , -inf inf ) = -0 2 +divsd(1 2 , -0 0x7ff8000000000000 ) = -inf 2 +divsd(0 -2 , -0 0x7ff8000000000000 ) = 0xfff8000000000000 -2 +divsd(0 -2 , -0 0x7ff8000000000000 ) = 0xfff8000000000000 -2 +maxsd(1 2 , 1 2 ) = 1 2 +maxsd(1 2 , 0 -2 ) = 1 2 +maxsd(1 2 , inf -inf ) = inf 2 +maxsd(1 2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 2 +maxsd(0 -2 , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -2 +maxsd(inf -inf , 0x7ff8000000000000 -0 ) = 0x7ff8000000000000 -inf +maxsd(1 2 , 2 1 ) = 2 2 +maxsd(1 2 , -2 0 ) = 1 2 +maxsd(1 2 , -inf inf ) = 1 2 +maxsd(1 2 , -0 0x7ff8000000000000 ) = 1 2 +maxsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +maxsd(0 -2 , -0 0x7ff8000000000000 ) = 0 -2 +cvttss2si(1) = 0x1 +cvttss2si(1.49) = 0x1 +cvttss2si(1.5) = 0x1 +cvttss2si(1.9) = 0x1 +cvttss2si(-1) = 0xffffffff +cvttss2si(-1.49) = 0xffffffff +cvttss2si(-1.5) = 0xffffffff +cvttss2si(-1.9) = 0xffffffff +cvttss2si(1e+30) = 0x7fffffff +cvttss2si(-1e+30) = 0x80000000 +cvttss2si(inf) = 0x7fffffff +cvttss2si(-inf) = 0x80000000 +cvttss2si(nan) = 0x0 +cvttsd2si(1) = 0x1 +cvttsd2si(1.49) = 0x1 +cvttsd2si(1.5) = 0x1 +cvttsd2si(1.9) = 0x1 +cvttsd2si(-1) = 0xffffffff +cvttsd2si(-1.49) = 0xffffffff +cvttsd2si(-1.5) = 0xffffffff +cvttsd2si(-1.9) = 0xffffffff +cvttsd2si(1e+300) = 0x80000000 +cvttsd2si(-1e+300) = 0x80000000 +cvttsd2si(inf) = 0x80000000 +cvttsd2si(-inf) = 0x80000000 +cvttsd2si(nan) = 0x80000000 +default rounding +cvtss2si(1) = 0x1 +cvtss2si(1.49) = 0x1 +cvtss2si(1.5) = 0x2 +cvtss2si(1.9) = 0x2 +cvtss2si(-1) = 0xffffffff +cvtss2si(-1.49) = 0xffffffff +cvtss2si(-1.5) = 0xfffffffe +cvtss2si(-1.9) = 0xfffffffe +cvtss2si(1e+30) = 0x80000000 +cvtss2si(-1e+30) = 0x80000000 +cvtss2si(inf) = 0x80000000 +cvtss2si(-inf) = 0x80000000 +cvtss2si(nan) = 0x80000000 +cvtsd2si(1) = 0x1 +cvtsd2si(1.49) = 0x1 +cvtsd2si(1.5) = 0x2 +cvtsd2si(1.9) = 0x2 +cvtsd2si(-1) = 0xffffffff +cvtsd2si(-1.49) = 0xffffffff +cvtsd2si(-1.5) = 0xfffffffe +cvtsd2si(-1.9) = 0xfffffffe +cvtsd2si(1e+300) = 0x80000000 +cvtsd2si(-1e+300) = 0x80000000 +cvtsd2si(inf) = 0x80000000 +cvtsd2si(-inf) = 0x80000000 +cvtsd2si(nan) = 0x80000000 +Round(0) +cvtss2si(1) = 0x1 +cvtss2si(1.49) = 0x1 +cvtss2si(1.5) = 0x2 +cvtss2si(1.9) = 0x2 +cvtss2si(-1) = 0xffffffff +cvtss2si(-1.49) = 0xffffffff +cvtss2si(-1.5) = 0xfffffffe +cvtss2si(-1.9) = 0xfffffffe +cvtss2si(1e+30) = 0x80000000 +cvtss2si(-1e+30) = 0x80000000 +cvtss2si(inf) = 0x80000000 +cvtss2si(-inf) = 0x80000000 +cvtss2si(nan) = 0x80000000 +cvtsd2si(1) = 0x1 +cvtsd2si(1.49) = 0x1 +cvtsd2si(1.5) = 0x2 +cvtsd2si(1.9) = 0x2 +cvtsd2si(-1) = 0xffffffff +cvtsd2si(-1.49) = 0xffffffff +cvtsd2si(-1.5) = 0xfffffffe +cvtsd2si(-1.9) = 0xfffffffe +cvtsd2si(1e+300) = 0x80000000 +cvtsd2si(-1e+300) = 0x80000000 +cvtsd2si(inf) = 0x80000000 +cvtsd2si(-inf) = 0x80000000 +cvtsd2si(nan) = 0x80000000 +cvtss2si(1.4) -> 1 cvtsi2ss -> 1 +cvtss2si(-2.9) -> -3 cvtsi2ss -> -3 +cvtss2si(1.6) -> 2 cvtsi2ss -> 2 +cvtss2si(1e+38) -> -2147483648 cvtsi2ss -> -2.14748e+09 +Round(1) +cvtss2si(1) = 0x1 +cvtss2si(1.49) = 0x1 +cvtss2si(1.5) = 0x1 +cvtss2si(1.9) = 0x1 +cvtss2si(-1) = 0xffffffff +cvtss2si(-1.49) = 0xfffffffe +cvtss2si(-1.5) = 0xfffffffe +cvtss2si(-1.9) = 0xfffffffe +cvtss2si(1e+30) = 0x80000000 +cvtss2si(-1e+30) = 0x80000000 +cvtss2si(inf) = 0x80000000 +cvtss2si(-inf) = 0x80000000 +cvtss2si(nan) = 0x80000000 +cvtsd2si(1) = 0x1 +cvtsd2si(1.49) = 0x1 +cvtsd2si(1.5) = 0x1 +cvtsd2si(1.9) = 0x1 +cvtsd2si(-1) = 0xffffffff +cvtsd2si(-1.49) = 0xfffffffe +cvtsd2si(-1.5) = 0xfffffffe +cvtsd2si(-1.9) = 0xfffffffe +cvtsd2si(1e+300) = 0x80000000 +cvtsd2si(-1e+300) = 0x80000000 +cvtsd2si(inf) = 0x80000000 +cvtsd2si(-inf) = 0x80000000 +cvtsd2si(nan) = 0x80000000 +cvtss2si(1.4) -> 1 cvtsi2ss -> 1 +cvtss2si(-2.9) -> -3 cvtsi2ss -> -3 +cvtss2si(1.6) -> 1 cvtsi2ss -> 1 +cvtss2si(1e+38) -> -2147483648 cvtsi2ss -> -2.14748e+09 +Round(2) +cvtss2si(1) = 0x1 +cvtss2si(1.49) = 0x2 +cvtss2si(1.5) = 0x2 +cvtss2si(1.9) = 0x2 +cvtss2si(-1) = 0xffffffff +cvtss2si(-1.49) = 0xffffffff +cvtss2si(-1.5) = 0xffffffff +cvtss2si(-1.9) = 0xffffffff +cvtss2si(1e+30) = 0x80000000 +cvtss2si(-1e+30) = 0x80000000 +cvtss2si(inf) = 0x80000000 +cvtss2si(-inf) = 0x80000000 +cvtss2si(nan) = 0x80000000 +cvtsd2si(1) = 0x1 +cvtsd2si(1.49) = 0x2 +cvtsd2si(1.5) = 0x2 +cvtsd2si(1.9) = 0x2 +cvtsd2si(-1) = 0xffffffff +cvtsd2si(-1.49) = 0xffffffff +cvtsd2si(-1.5) = 0xffffffff +cvtsd2si(-1.9) = 0xffffffff +cvtsd2si(1e+300) = 0x80000000 +cvtsd2si(-1e+300) = 0x80000000 +cvtsd2si(inf) = 0x80000000 +cvtsd2si(-inf) = 0x80000000 +cvtsd2si(nan) = 0x80000000 +cvtss2si(1.4) -> 2 cvtsi2ss -> 2 +cvtss2si(-2.9) -> -2 cvtsi2ss -> -2 +cvtss2si(1.6) -> 2 cvtsi2ss -> 2 +cvtss2si(1e+38) -> -2147483648 cvtsi2ss -> -2.14748e+09 +Round(3) +cvtss2si(1) = 0x1 +cvtss2si(1.49) = 0x1 +cvtss2si(1.5) = 0x1 +cvtss2si(1.9) = 0x1 +cvtss2si(-1) = 0xffffffff +cvtss2si(-1.49) = 0xffffffff +cvtss2si(-1.5) = 0xffffffff +cvtss2si(-1.9) = 0xffffffff +cvtss2si(1e+30) = 0x80000000 +cvtss2si(-1e+30) = 0x80000000 +cvtss2si(inf) = 0x80000000 +cvtss2si(-inf) = 0x80000000 +cvtss2si(nan) = 0x80000000 +cvtsd2si(1) = 0x1 +cvtsd2si(1.49) = 0x1 +cvtsd2si(1.5) = 0x1 +cvtsd2si(1.9) = 0x1 +cvtsd2si(-1) = 0xffffffff +cvtsd2si(-1.49) = 0xffffffff +cvtsd2si(-1.5) = 0xffffffff +cvtsd2si(-1.9) = 0xffffffff +cvtsd2si(1e+300) = 0x80000000 +cvtsd2si(-1e+300) = 0x80000000 +cvtsd2si(inf) = 0x80000000 +cvtsd2si(-inf) = 0x80000000 +cvtsd2si(nan) = 0x80000000 +cvtss2si(1.4) -> 1 cvtsi2ss -> 1 +cvtss2si(-2.9) -> -2 cvtsi2ss -> -2 +cvtss2si(1.6) -> 1 cvtsi2ss -> 1 +cvtss2si(1e+38) -> -2147483648 cvtsi2ss -> -2.14748e+09 diff --git a/tests32/ref18.txt b/tests32/ref18.txt new file mode 100644 index 0000000000000000000000000000000000000000..38e983ce22be24e54b2e77d1f9f9d6bcd165a9c3 --- /dev/null +++ b/tests32/ref18.txt @@ -0,0 +1,2 @@ +sig = 11 +got bad_ptr diff --git a/tests32/ref19.txt b/tests32/ref19.txt new file mode 100644 index 0000000000000000000000000000000000000000..0b90c207830ae031972835e8ca0e4bc84352faf6 --- /dev/null +++ b/tests32/ref19.txt @@ -0,0 +1,222 @@ +FUCOMI 0x0 0x4082c00000000000 --C +FUCOMPP 0x0 0x4082c00000000000 --C +FRNDINT 0x0 => 0x0 +FRNDINT 0x4082c00000000000 => 0x4082c00000000000 +FISTP 0x0 => word: 0 +FISTP 0x4082c00000000000 => word: 258 +FISTP 0x0 => long: 0 +FISTP 0x4082c00000000000 => long: 258 +FISTP 0x0 => quad: 0 +FISTP 0x4082c00000000000 => quad: 258 +FUCOMI 0x4082c00000000000 0x0 --- +FUCOMPP 0x4082c00000000000 0x0 --- +FRNDINT 0x4082c00000000000 => 0x4082c00000000000 +FRNDINT 0x0 => 0x0 +FISTP 0x4082c00000000000 => word: 258 +FISTP 0x0 => word: 0 +FISTP 0x4082c00000000000 => long: 258 +FISTP 0x0 => long: 0 +FISTP 0x4082c00000000000 => quad: 258 +FISTP 0x0 => quad: 0 +FUCOMI 0x8000000000000000 0x4082c00000000000 --C +FUCOMPP 0x8000000000000000 0x4082c00000000000 --C +FRNDINT 0x8000000000000000 => 0x8000000000000000 +FRNDINT 0x4082c00000000000 => 0x4082c00000000000 +FISTP 0x8000000000000000 => word: 0 +FISTP 0x4082c00000000000 => word: 258 +FISTP 0x8000000000000000 => long: 0 +FISTP 0x4082c00000000000 => long: 258 +FISTP 0x8000000000000000 => quad: 0 +FISTP 0x4082c00000000000 => quad: 258 +FUCOMI 0x4082c00000000000 0x8000000000000000 --- +FUCOMPP 0x4082c00000000000 0x8000000000000000 --- +FRNDINT 0x4082c00000000000 => 0x4082c00000000000 +FRNDINT 0x8000000000000000 => 0x8000000000000000 +FISTP 0x4082c00000000000 => word: 258 +FISTP 0x8000000000000000 => word: 0 +FISTP 0x4082c00000000000 => long: 258 +FISTP 0x8000000000000000 => long: 0 +FISTP 0x4082c00000000000 => quad: 258 +FISTP 0x8000000000000000 => quad: 0 +FUCOMI 0x8000000000000000 0x0 Z-- +FUCOMPP 0x8000000000000000 0x0 Z-- +FRNDINT 0x8000000000000000 => 0x8000000000000000 +FRNDINT 0x0 => 0x0 +FISTP 0x8000000000000000 => word: 0 +FISTP 0x0 => word: 0 +FISTP 0x8000000000000000 => long: 0 +FISTP 0x0 => long: 0 +FISTP 0x8000000000000000 => quad: 0 +FISTP 0x0 => quad: 0 +FUCOMI 0x0 0x8000000000000000 Z-- +FUCOMPP 0x0 0x8000000000000000 Z-- +FRNDINT 0x0 => 0x0 +FRNDINT 0x8000000000000000 => 0x8000000000000000 +FISTP 0x0 => word: 0 +FISTP 0x8000000000000000 => word: 0 +FISTP 0x0 => long: 0 +FISTP 0x8000000000000000 => long: 0 +FISTP 0x0 => quad: 0 +FISTP 0x8000000000000000 => quad: 0 +FUCOMI 0x8000000000000000 0x3ff0000000000000 --C +FUCOMPP 0x8000000000000000 0x3ff0000000000000 --C +FRNDINT 0x8000000000000000 => 0x8000000000000000 +FRNDINT 0x3ff0000000000000 => 0x3ff0000000000000 +FISTP 0x8000000000000000 => word: 0 +FISTP 0x3ff0000000000000 => word: 1 +FISTP 0x8000000000000000 => long: 0 +FISTP 0x3ff0000000000000 => long: 1 +FISTP 0x8000000000000000 => quad: 0 +FISTP 0x3ff0000000000000 => quad: 1 +FUCOMI 0x3ff0000000000000 0x8000000000000000 --- +FUCOMPP 0x3ff0000000000000 0x8000000000000000 --- +FRNDINT 0x3ff0000000000000 => 0x3ff0000000000000 +FRNDINT 0x8000000000000000 => 0x8000000000000000 +FISTP 0x3ff0000000000000 => word: 1 +FISTP 0x8000000000000000 => word: 0 +FISTP 0x3ff0000000000000 => long: 1 +FISTP 0x8000000000000000 => long: 0 +FISTP 0x3ff0000000000000 => quad: 1 +FISTP 0x8000000000000000 => quad: 0 +FUCOMI 0x3ff0000000000000 0x3fe89d9000000000 --- +FUCOMPP 0x3ff0000000000000 0x3fe89d9000000000 --- +FRNDINT 0x3ff0000000000000 => 0x3ff0000000000000 +FRNDINT 0x3fe89d9000000000 => 0x0 +FISTP 0x3ff0000000000000 => word: 1 +FISTP 0x3fe89d9000000000 => word: 0 +FISTP 0x3ff0000000000000 => long: 1 +FISTP 0x3fe89d9000000000 => long: 0 +FISTP 0x3ff0000000000000 => quad: 1 +FISTP 0x3fe89d9000000000 => quad: 0 +FUCOMI 0x3fe89d9000000000 0x3ff0000000000000 --C +FUCOMPP 0x3fe89d9000000000 0x3ff0000000000000 --C +FRNDINT 0x3fe89d9000000000 => 0x0 +FRNDINT 0x3ff0000000000000 => 0x3ff0000000000000 +FISTP 0x3fe89d9000000000 => word: 0 +FISTP 0x3ff0000000000000 => word: 1 +FISTP 0x3fe89d9000000000 => long: 0 +FISTP 0x3ff0000000000000 => long: 1 +FISTP 0x3fe89d9000000000 => quad: 0 +FISTP 0x3ff0000000000000 => quad: 1 +FUCOMI 0x3ff0000000000000 0x7ff0000000000000 --C +FUCOMPP 0x3ff0000000000000 0x7ff0000000000000 --C +FRNDINT 0x3ff0000000000000 => 0x3ff0000000000000 +FRNDINT 0x7ff0000000000000 => 0x7ff0000000000000 +FISTP 0x3ff0000000000000 => word: 1 +FISTP 0x7ff0000000000000 => word: 8000 +FISTP 0x3ff0000000000000 => long: 1 +FISTP 0x7ff0000000000000 => long: 80000000 +FISTP 0x3ff0000000000000 => quad: 1 +FISTP 0x7ff0000000000000 => quad: 8000000000000000 +FUCOMI 0x7ff0000000000000 0x3ff0000000000000 --- +FUCOMPP 0x7ff0000000000000 0x3ff0000000000000 --- +FRNDINT 0x7ff0000000000000 => 0x7ff0000000000000 +FRNDINT 0x3ff0000000000000 => 0x3ff0000000000000 +FISTP 0x7ff0000000000000 => word: 8000 +FISTP 0x3ff0000000000000 => word: 1 +FISTP 0x7ff0000000000000 => long: 80000000 +FISTP 0x3ff0000000000000 => long: 1 +FISTP 0x7ff0000000000000 => quad: 8000000000000000 +FISTP 0x3ff0000000000000 => quad: 1 +FUCOMI 0xfff0000000000000 0x7ff0000000000000 --C +FUCOMPP 0xfff0000000000000 0x7ff0000000000000 --C +FRNDINT 0xfff0000000000000 => 0xfff0000000000000 +FRNDINT 0x7ff0000000000000 => 0x7ff0000000000000 +FISTP 0xfff0000000000000 => word: 8000 +FISTP 0x7ff0000000000000 => word: 8000 +FISTP 0xfff0000000000000 => long: 80000000 +FISTP 0x7ff0000000000000 => long: 80000000 +FISTP 0xfff0000000000000 => quad: 8000000000000000 +FISTP 0x7ff0000000000000 => quad: 8000000000000000 +FUCOMI 0x7ff0000000000000 0xfff0000000000000 --- +FUCOMPP 0x7ff0000000000000 0xfff0000000000000 --- +FRNDINT 0x7ff0000000000000 => 0x7ff0000000000000 +FRNDINT 0xfff0000000000000 => 0xfff0000000000000 +FISTP 0x7ff0000000000000 => word: 8000 +FISTP 0xfff0000000000000 => word: 8000 +FISTP 0x7ff0000000000000 => long: 80000000 +FISTP 0xfff0000000000000 => long: 80000000 +FISTP 0x7ff0000000000000 => quad: 8000000000000000 +FISTP 0xfff0000000000000 => quad: 8000000000000000 +FUCOMI 0x3ff0002ca0000000 0xaeff000025000000 --- +FUCOMPP 0x3ff0002ca0000000 0xaeff000025000000 --- +FRNDINT 0x3ff0002ca0000000 => 0x3ff0000000000000 +FRNDINT 0xaeff000025000000 => 0x8000000000000000 +FISTP 0x3ff0002ca0000000 => word: 1 +FISTP 0xaeff000025000000 => word: 0 +FISTP 0x3ff0002ca0000000 => long: 1 +FISTP 0xaeff000025000000 => long: 0 +FISTP 0x3ff0002ca0000000 => quad: 1 +FISTP 0xaeff000025000000 => quad: 0 +FUCOMI 0xaeff000025000000 0x3ff0002ca0000000 --C +FUCOMPP 0xaeff000025000000 0x3ff0002ca0000000 --C +FRNDINT 0xaeff000025000000 => 0x8000000000000000 +FRNDINT 0x3ff0002ca0000000 => 0x3ff0000000000000 +FISTP 0xaeff000025000000 => word: 0 +FISTP 0x3ff0002ca0000000 => word: 1 +FISTP 0xaeff000025000000 => long: 0 +FISTP 0x3ff0002ca0000000 => long: 1 +FISTP 0xaeff000025000000 => quad: 0 +FISTP 0x3ff0002ca0000000 => quad: 1 +FUCOMI 0x3ff0000050000000 0xc082c00000000000 --- +FUCOMPP 0x3ff0000050000000 0xc082c00000000000 --- +FRNDINT 0x3ff0000050000000 => 0x3ff0000000000000 +FRNDINT 0xc082c00000000000 => 0xc082c00000000000 +FISTP 0x3ff0000050000000 => word: 1 +FISTP 0xc082c00000000000 => word: fda8 +FISTP 0x3ff0000050000000 => long: 1 +FISTP 0xc082c00000000000 => long: fffffda8 +FISTP 0x3ff0000050000000 => quad: 1 +FISTP 0xc082c00000000000 => quad: fffffffffffffda8 +FUCOMI 0xc082c00000000000 0x3ff0000050000000 --C +FUCOMPP 0xc082c00000000000 0x3ff0000050000000 --C +FRNDINT 0xc082c00000000000 => 0xc082c00000000000 +FRNDINT 0x3ff0000050000000 => 0x3ff0000000000000 +FISTP 0xc082c00000000000 => word: fda8 +FISTP 0x3ff0000050000000 => word: 1 +FISTP 0xc082c00000000000 => long: fffffda8 +FISTP 0x3ff0000050000000 => long: 1 +FISTP 0xc082c00000000000 => quad: fffffffffffffda8 +FISTP 0x3ff0000050000000 => quad: 1 +FUCOMI 0x0 0x7ff8000000000001 ZPC +FUCOMPP 0x0 0x7ff8000000000001 ZPC +FRNDINT 0x0 => 0x0 +FRNDINT 0x7ff8000000000001 => 0x7ff8000000000001 +FISTP 0x0 => word: 0 +FISTP 0x7ff8000000000001 => word: 8000 +FISTP 0x0 => long: 0 +FISTP 0x7ff8000000000001 => long: 80000000 +FISTP 0x0 => quad: 0 +FISTP 0x7ff8000000000001 => quad: 8000000000000000 +FUCOMI 0x7ff8000000000001 0x0 ZPC +FUCOMPP 0x7ff8000000000001 0x0 ZPC +FRNDINT 0x7ff8000000000001 => 0x7ff8000000000001 +FRNDINT 0x0 => 0x0 +FISTP 0x7ff8000000000001 => word: 8000 +FISTP 0x0 => word: 0 +FISTP 0x7ff8000000000001 => long: 80000000 +FISTP 0x0 => long: 0 +FISTP 0x7ff8000000000001 => quad: 8000000000000000 +FISTP 0x0 => quad: 0 +FUCOMI 0x7ff8000000000001 0x7ff8000000000001 ZPC +FUCOMPP 0x7ff8000000000001 0x7ff8000000000001 ZPC +FRNDINT 0x7ff8000000000001 => 0x7ff8000000000001 +FRNDINT 0x7ff8000000000001 => 0x7ff8000000000001 +FISTP 0x7ff8000000000001 => word: 8000 +FISTP 0x7ff8000000000001 => word: 8000 +FISTP 0x7ff8000000000001 => long: 80000000 +FISTP 0x7ff8000000000001 => long: 80000000 +FISTP 0x7ff8000000000001 => quad: 8000000000000000 +FISTP 0x7ff8000000000001 => quad: 8000000000000000 +FUCOMI 0x7ff8000000000001 0x7ff8000000000001 ZPC +FUCOMPP 0x7ff8000000000001 0x7ff8000000000001 ZPC +FRNDINT 0x7ff8000000000001 => 0x7ff8000000000001 +FRNDINT 0x7ff8000000000001 => 0x7ff8000000000001 +FISTP 0x7ff8000000000001 => word: 8000 +FISTP 0x7ff8000000000001 => word: 8000 +FISTP 0x7ff8000000000001 => long: 80000000 +FISTP 0x7ff8000000000001 => long: 80000000 +FISTP 0x7ff8000000000001 => quad: 8000000000000000 +FISTP 0x7ff8000000000001 => quad: 8000000000000000 + +Done diff --git a/tests32/ref20.txt b/tests32/ref20.txt new file mode 100644 index 0000000000000000000000000000000000000000..2646fa375d7e290cf445ba688284eddfa0631358 --- /dev/null +++ b/tests32/ref20.txt @@ -0,0 +1,11 @@ +SDHLD/SAR/IDIV 0x2d0 0x500 => 0x0 / 0x9000 (47185920/1280 => 36864 + 0) +SDHLD/SAR/IDIV 0xfffffa5d 0x186a0 => 0xfffef4a0 / 0xfffffc4f (281474882142208/100000 => -945 + -68448) +SDHLD/SAR/IDIV 0x1701 0x186a0 => 0xa220 / 0xf13 (385941504/100000 => 3859 + 41504) +SDHLD/SAR/IDIV 0xffff9a19 0x186a0 => 0xffff6d00 / 0xffffbd38 (281473267073024/100000 => -17096 + -37632) +SDHLD/SAR/IDIV 0xffffe7f3 0x186a0 => 0xffffebe0 / 0xfffff03d (281474573205504/100000 => -4035 + -5152) +SDHLD/SAR/IDIV 0x15840 0x186a0 => 0xdd20 / 0xe19b (5775556608/100000 => 57755 + 56608) +SDHLD/SAR/IDIV 0xff451330 0x186a0 => 0xfffee8a0 / 0xff857f2f (280672139739136/100000 => -8028369 + -71520) +SDHLD/SAR/IDIV 0xffff626a 0x186a0 => 0xffff2fc0 / 0xffff98ba (281472332857344/100000 => -26438 + -53312) +SDHLD/SAR/IDIV 0x9120 0x186a0 => 0x16d20 / 0x5f1b (2434793472/100000 => 24347 + 93472) + +Done diff --git a/tests32/ref21.txt b/tests32/ref21.txt new file mode 100644 index 0000000000000000000000000000000000000000..7b20e612aaea00c1539178752c7b2051ca71a6cf --- /dev/null +++ b/tests32/ref21.txt @@ -0,0 +1 @@ +2/1 diff --git a/tests32/ref22.txt b/tests32/ref22.txt new file mode 100644 index 0000000000000000000000000000000000000000..8949329d68be4ff63b7aeb3f7838f322c525eac9 --- /dev/null +++ b/tests32/ref22.txt @@ -0,0 +1,1248 @@ +enc (0x00000000000000000000000000000000, 0x00000000000000000000000000000000) = 0x63636363636363636363636363636363 +enclast(0x00000000000000000000000000000000, 0x00000000000000000000000000000000) = 0x63636363636363636363636363636363 +dec (0x00000000000000000000000000000000, 0x00000000000000000000000000000000) = 0x52525252525252525252525252525252 +declast(0x00000000000000000000000000000000, 0x00000000000000000000000000000000) = 0x52525252525252525252525252525252 +enc (0x00000000000000000000000000000000, 0x10000000000000001111000000001111) = 0x73636363636363637272636363637272 +enclast(0x00000000000000000000000000000000, 0x10000000000000001111000000001111) = 0x73636363636363637272636363637272 +dec (0x00000000000000000000000000000000, 0x10000000000000001111000000001111) = 0x42525252525252524343525252524343 +declast(0x00000000000000000000000000000000, 0x10000000000000001111000000001111) = 0x42525252525252524343525252524343 +enc (0x00000000000000000000000000000000, 0x20000000000000002222000000002222) = 0x43636363636363634141636363634141 +enclast(0x00000000000000000000000000000000, 0x20000000000000002222000000002222) = 0x43636363636363634141636363634141 +dec (0x00000000000000000000000000000000, 0x20000000000000002222000000002222) = 0x72525252525252527070525252527070 +declast(0x00000000000000000000000000000000, 0x20000000000000002222000000002222) = 0x72525252525252527070525252527070 +enc (0x00000000000000000000000000000000, 0x30000000000000003333000000003333) = 0x53636363636363635050636363635050 +enclast(0x00000000000000000000000000000000, 0x30000000000000003333000000003333) = 0x53636363636363635050636363635050 +dec (0x00000000000000000000000000000000, 0x30000000000000003333000000003333) = 0x62525252525252526161525252526161 +declast(0x00000000000000000000000000000000, 0x30000000000000003333000000003333) = 0x62525252525252526161525252526161 +enc (0x00000000000000000000000000000000, 0x40000000000000004444000000004444) = 0x23636363636363632727636363632727 +enclast(0x00000000000000000000000000000000, 0x40000000000000004444000000004444) = 0x23636363636363632727636363632727 +dec (0x00000000000000000000000000000000, 0x40000000000000004444000000004444) = 0x12525252525252521616525252521616 +declast(0x00000000000000000000000000000000, 0x40000000000000004444000000004444) = 0x12525252525252521616525252521616 +enc (0x00000000000000000000000000000000, 0x50000000000000005555000000005555) = 0x33636363636363633636636363633636 +enclast(0x00000000000000000000000000000000, 0x50000000000000005555000000005555) = 0x33636363636363633636636363633636 +dec (0x00000000000000000000000000000000, 0x50000000000000005555000000005555) = 0x02525252525252520707525252520707 +declast(0x00000000000000000000000000000000, 0x50000000000000005555000000005555) = 0x02525252525252520707525252520707 +enc (0x00000000000000000000000000000000, 0x60000000000000006666000000006666) = 0x03636363636363630505636363630505 +enclast(0x00000000000000000000000000000000, 0x60000000000000006666000000006666) = 0x03636363636363630505636363630505 +dec (0x00000000000000000000000000000000, 0x60000000000000006666000000006666) = 0x32525252525252523434525252523434 +declast(0x00000000000000000000000000000000, 0x60000000000000006666000000006666) = 0x32525252525252523434525252523434 +enc (0x00000000000000000000000000000000, 0x70000000000000007777000000007777) = 0x13636363636363631414636363631414 +enclast(0x00000000000000000000000000000000, 0x70000000000000007777000000007777) = 0x13636363636363631414636363631414 +dec (0x00000000000000000000000000000000, 0x70000000000000007777000000007777) = 0x22525252525252522525525252522525 +declast(0x00000000000000000000000000000000, 0x70000000000000007777000000007777) = 0x22525252525252522525525252522525 +enc (0x00000000000000000000000000000000, 0x80000000000000008888000000008888) = 0xE363636363636363EBEB63636363EBEB +enclast(0x00000000000000000000000000000000, 0x80000000000000008888000000008888) = 0xE363636363636363EBEB63636363EBEB +dec (0x00000000000000000000000000000000, 0x80000000000000008888000000008888) = 0xD252525252525252DADA52525252DADA +declast(0x00000000000000000000000000000000, 0x80000000000000008888000000008888) = 0xD252525252525252DADA52525252DADA +enc (0x00000000000000000000000000000000, 0x90000000000000009999000000009999) = 0xF363636363636363FAFA63636363FAFA +enclast(0x00000000000000000000000000000000, 0x90000000000000009999000000009999) = 0xF363636363636363FAFA63636363FAFA +dec (0x00000000000000000000000000000000, 0x90000000000000009999000000009999) = 0xC252525252525252CBCB52525252CBCB +declast(0x00000000000000000000000000000000, 0x90000000000000009999000000009999) = 0xC252525252525252CBCB52525252CBCB +enc (0x00000000000000000000000000000000, 0xA000000000000000AAAA00000000AAAA) = 0xC363636363636363C9C963636363C9C9 +enclast(0x00000000000000000000000000000000, 0xA000000000000000AAAA00000000AAAA) = 0xC363636363636363C9C963636363C9C9 +dec (0x00000000000000000000000000000000, 0xA000000000000000AAAA00000000AAAA) = 0xF252525252525252F8F852525252F8F8 +declast(0x00000000000000000000000000000000, 0xA000000000000000AAAA00000000AAAA) = 0xF252525252525252F8F852525252F8F8 +enc (0x00000000000000000000000000000000, 0xB000000000000000BBBB00000000BBBB) = 0xD363636363636363D8D863636363D8D8 +enclast(0x00000000000000000000000000000000, 0xB000000000000000BBBB00000000BBBB) = 0xD363636363636363D8D863636363D8D8 +dec (0x00000000000000000000000000000000, 0xB000000000000000BBBB00000000BBBB) = 0xE252525252525252E9E952525252E9E9 +declast(0x00000000000000000000000000000000, 0xB000000000000000BBBB00000000BBBB) = 0xE252525252525252E9E952525252E9E9 +enc (0x00000000000000000000000000000000, 0xC000000000000000CCCC00000000CCCC) = 0xA363636363636363AFAF63636363AFAF +enclast(0x00000000000000000000000000000000, 0xC000000000000000CCCC00000000CCCC) = 0xA363636363636363AFAF63636363AFAF +dec (0x00000000000000000000000000000000, 0xC000000000000000CCCC00000000CCCC) = 0x92525252525252529E9E525252529E9E +declast(0x00000000000000000000000000000000, 0xC000000000000000CCCC00000000CCCC) = 0x92525252525252529E9E525252529E9E +enc (0x00000000000000000000000000000000, 0xD000000000000000DDDD00000000DDDD) = 0xB363636363636363BEBE63636363BEBE +enclast(0x00000000000000000000000000000000, 0xD000000000000000DDDD00000000DDDD) = 0xB363636363636363BEBE63636363BEBE +dec (0x00000000000000000000000000000000, 0xD000000000000000DDDD00000000DDDD) = 0x82525252525252528F8F525252528F8F +declast(0x00000000000000000000000000000000, 0xD000000000000000DDDD00000000DDDD) = 0x82525252525252528F8F525252528F8F +enc (0x00000000000000000000000000000000, 0xE000000000000000EEEE00000000EEEE) = 0x83636363636363638D8D636363638D8D +enclast(0x00000000000000000000000000000000, 0xE000000000000000EEEE00000000EEEE) = 0x83636363636363638D8D636363638D8D +dec (0x00000000000000000000000000000000, 0xE000000000000000EEEE00000000EEEE) = 0xB252525252525252BCBC52525252BCBC +declast(0x00000000000000000000000000000000, 0xE000000000000000EEEE00000000EEEE) = 0xB252525252525252BCBC52525252BCBC +enc (0x00000000000000000000000000000000, 0xF000000000000000FFFF00000000FFFF) = 0x93636363636363639C9C636363639C9C +enclast(0x00000000000000000000000000000000, 0xF000000000000000FFFF00000000FFFF) = 0x93636363636363639C9C636363639C9C +dec (0x00000000000000000000000000000000, 0xF000000000000000FFFF00000000FFFF) = 0xA252525252525252ADAD52525252ADAD +declast(0x00000000000000000000000000000000, 0xF000000000000000FFFF00000000FFFF) = 0xA252525252525252ADAD52525252ADAD +keygenassist(0x00000000000000000000000000000000, 0x00) = 0x63636363636363636363636363636363 +keygenassist(0x00000000000000000000000000000000, 0x01) = 0x63636362636363636363636263636363 +keygenassist(0x00000000000000000000000000000000, 0x02) = 0x63636361636363636363636163636363 +keygenassist(0x00000000000000000000000000000000, 0x04) = 0x63636367636363636363636763636363 +keygenassist(0x00000000000000000000000000000000, 0x08) = 0x6363636B636363636363636B63636363 +keygenassist(0x00000000000000000000000000000000, 0x10) = 0x63636373636363636363637363636363 +keygenassist(0x00000000000000000000000000000000, 0x38) = 0x6363635B636363636363635B63636363 +keygenassist(0x00000000000000000000000000000000, 0x4F) = 0x6363632C636363636363632C63636363 +keygenassist(0x00000000000000000000000000000000, 0xFF) = 0x6363639C636363636363639C63636363 +imc (0x00000000000000000000000000000000) = 0x00000000000000000000000000000000 +pclmul(0x00000000000000000000000000000000, 0x00) = 0x00000000000000000000000000000000 +pclmul(0x00000000000000000000000000000000, 0x01) = 0x00000000000000000000000000000000 +pclmul(0x00000000000000000000000000000000, 0x10) = 0x00000000000000000000000000000000 +pclmul(0x00000000000000000000000000000000, 0xFF) = 0x00000000000000000000000000000000 +enc (0x10000000000000001111000000001111, 0x00000000000000000000000000000000) = 0x635B82BABA5B82826363636312622B13 +enclast(0x10000000000000001111000000001111, 0x00000000000000000000000000000000) = 0x638282638263636363636363CA636382 +dec (0x10000000000000001111000000001111, 0x00000000000000000000000000000000) = 0x1C2665EEDD4BAF17EE1C266511D9A068 +declast(0x10000000000000001111000000001111, 0x00000000000000000000000000000000) = 0x52E352527C5252525252E352E35252E3 +enc (0x10000000000000001111000000001111, 0x10000000000000001111000000001111) = 0x735B82BABA5B82827272636312623A02 +enclast(0x10000000000000001111000000001111, 0x10000000000000001111000000001111) = 0x738282638263636372726363CA637293 +dec (0x10000000000000001111000000001111, 0x10000000000000001111000000001111) = 0x0C2665EEDD4BAF17FF0D266511D9B179 +declast(0x10000000000000001111000000001111, 0x10000000000000001111000000001111) = 0x42E352527C5252524343E352E35243F2 +enc (0x10000000000000001111000000001111, 0x20000000000000002222000000002222) = 0x435B82BABA5B82824141636312620931 +enclast(0x10000000000000001111000000001111, 0x20000000000000002222000000002222) = 0x438282638263636341416363CA6341A0 +dec (0x10000000000000001111000000001111, 0x20000000000000002222000000002222) = 0x3C2665EEDD4BAF17CC3E266511D9824A +declast(0x10000000000000001111000000001111, 0x20000000000000002222000000002222) = 0x72E352527C5252527070E352E35270C1 +enc (0x10000000000000001111000000001111, 0x30000000000000003333000000003333) = 0x535B82BABA5B82825050636312621820 +enclast(0x10000000000000001111000000001111, 0x30000000000000003333000000003333) = 0x538282638263636350506363CA6350B1 +dec (0x10000000000000001111000000001111, 0x30000000000000003333000000003333) = 0x2C2665EEDD4BAF17DD2F266511D9935B +declast(0x10000000000000001111000000001111, 0x30000000000000003333000000003333) = 0x62E352527C5252526161E352E35261D0 +enc (0x10000000000000001111000000001111, 0x40000000000000004444000000004444) = 0x235B82BABA5B82822727636312626F57 +enclast(0x10000000000000001111000000001111, 0x40000000000000004444000000004444) = 0x238282638263636327276363CA6327C6 +dec (0x10000000000000001111000000001111, 0x40000000000000004444000000004444) = 0x5C2665EEDD4BAF17AA58266511D9E42C +declast(0x10000000000000001111000000001111, 0x40000000000000004444000000004444) = 0x12E352527C5252521616E352E35216A7 +enc (0x10000000000000001111000000001111, 0x50000000000000005555000000005555) = 0x335B82BABA5B82823636636312627E46 +enclast(0x10000000000000001111000000001111, 0x50000000000000005555000000005555) = 0x338282638263636336366363CA6336D7 +dec (0x10000000000000001111000000001111, 0x50000000000000005555000000005555) = 0x4C2665EEDD4BAF17BB49266511D9F53D +declast(0x10000000000000001111000000001111, 0x50000000000000005555000000005555) = 0x02E352527C5252520707E352E35207B6 +enc (0x10000000000000001111000000001111, 0x60000000000000006666000000006666) = 0x035B82BABA5B82820505636312624D75 +enclast(0x10000000000000001111000000001111, 0x60000000000000006666000000006666) = 0x038282638263636305056363CA6305E4 +dec (0x10000000000000001111000000001111, 0x60000000000000006666000000006666) = 0x7C2665EEDD4BAF17887A266511D9C60E +declast(0x10000000000000001111000000001111, 0x60000000000000006666000000006666) = 0x32E352527C5252523434E352E3523485 +enc (0x10000000000000001111000000001111, 0x70000000000000007777000000007777) = 0x135B82BABA5B82821414636312625C64 +enclast(0x10000000000000001111000000001111, 0x70000000000000007777000000007777) = 0x138282638263636314146363CA6314F5 +dec (0x10000000000000001111000000001111, 0x70000000000000007777000000007777) = 0x6C2665EEDD4BAF17996B266511D9D71F +declast(0x10000000000000001111000000001111, 0x70000000000000007777000000007777) = 0x22E352527C5252522525E352E3522594 +enc (0x10000000000000001111000000001111, 0x80000000000000008888000000008888) = 0xE35B82BABA5B8282EBEB63631262A39B +enclast(0x10000000000000001111000000001111, 0x80000000000000008888000000008888) = 0xE382826382636363EBEB6363CA63EB0A +dec (0x10000000000000001111000000001111, 0x80000000000000008888000000008888) = 0x9C2665EEDD4BAF176694266511D928E0 +declast(0x10000000000000001111000000001111, 0x80000000000000008888000000008888) = 0xD2E352527C525252DADAE352E352DA6B +enc (0x10000000000000001111000000001111, 0x90000000000000009999000000009999) = 0xF35B82BABA5B8282FAFA63631262B28A +enclast(0x10000000000000001111000000001111, 0x90000000000000009999000000009999) = 0xF382826382636363FAFA6363CA63FA1B +dec (0x10000000000000001111000000001111, 0x90000000000000009999000000009999) = 0x8C2665EEDD4BAF177785266511D939F1 +declast(0x10000000000000001111000000001111, 0x90000000000000009999000000009999) = 0xC2E352527C525252CBCBE352E352CB7A +enc (0x10000000000000001111000000001111, 0xA000000000000000AAAA00000000AAAA) = 0xC35B82BABA5B8282C9C96363126281B9 +enclast(0x10000000000000001111000000001111, 0xA000000000000000AAAA00000000AAAA) = 0xC382826382636363C9C96363CA63C928 +dec (0x10000000000000001111000000001111, 0xA000000000000000AAAA00000000AAAA) = 0xBC2665EEDD4BAF1744B6266511D90AC2 +declast(0x10000000000000001111000000001111, 0xA000000000000000AAAA00000000AAAA) = 0xF2E352527C525252F8F8E352E352F849 +enc (0x10000000000000001111000000001111, 0xB000000000000000BBBB00000000BBBB) = 0xD35B82BABA5B8282D8D86363126290A8 +enclast(0x10000000000000001111000000001111, 0xB000000000000000BBBB00000000BBBB) = 0xD382826382636363D8D86363CA63D839 +dec (0x10000000000000001111000000001111, 0xB000000000000000BBBB00000000BBBB) = 0xAC2665EEDD4BAF1755A7266511D91BD3 +declast(0x10000000000000001111000000001111, 0xB000000000000000BBBB00000000BBBB) = 0xE2E352527C525252E9E9E352E352E958 +enc (0x10000000000000001111000000001111, 0xC000000000000000CCCC00000000CCCC) = 0xA35B82BABA5B8282AFAF63631262E7DF +enclast(0x10000000000000001111000000001111, 0xC000000000000000CCCC00000000CCCC) = 0xA382826382636363AFAF6363CA63AF4E +dec (0x10000000000000001111000000001111, 0xC000000000000000CCCC00000000CCCC) = 0xDC2665EEDD4BAF1722D0266511D96CA4 +declast(0x10000000000000001111000000001111, 0xC000000000000000CCCC00000000CCCC) = 0x92E352527C5252529E9EE352E3529E2F +enc (0x10000000000000001111000000001111, 0xD000000000000000DDDD00000000DDDD) = 0xB35B82BABA5B8282BEBE63631262F6CE +enclast(0x10000000000000001111000000001111, 0xD000000000000000DDDD00000000DDDD) = 0xB382826382636363BEBE6363CA63BE5F +dec (0x10000000000000001111000000001111, 0xD000000000000000DDDD00000000DDDD) = 0xCC2665EEDD4BAF1733C1266511D97DB5 +declast(0x10000000000000001111000000001111, 0xD000000000000000DDDD00000000DDDD) = 0x82E352527C5252528F8FE352E3528F3E +enc (0x10000000000000001111000000001111, 0xE000000000000000EEEE00000000EEEE) = 0x835B82BABA5B82828D8D63631262C5FD +enclast(0x10000000000000001111000000001111, 0xE000000000000000EEEE00000000EEEE) = 0x83828263826363638D8D6363CA638D6C +dec (0x10000000000000001111000000001111, 0xE000000000000000EEEE00000000EEEE) = 0xFC2665EEDD4BAF1700F2266511D94E86 +declast(0x10000000000000001111000000001111, 0xE000000000000000EEEE00000000EEEE) = 0xB2E352527C525252BCBCE352E352BC0D +enc (0x10000000000000001111000000001111, 0xF000000000000000FFFF00000000FFFF) = 0x935B82BABA5B82829C9C63631262D4EC +enclast(0x10000000000000001111000000001111, 0xF000000000000000FFFF00000000FFFF) = 0x93828263826363639C9C6363CA639C7D +dec (0x10000000000000001111000000001111, 0xF000000000000000FFFF00000000FFFF) = 0xEC2665EEDD4BAF1711E3266511D95F97 +declast(0x10000000000000001111000000001111, 0xF000000000000000FFFF00000000FFFF) = 0xA2E352527C525252ADADE352E352AD1C +keygenassist(0x10000000000000001111000000001111, 0x00) = 0x63CA6363CA6363636382826382826363 +keygenassist(0x10000000000000001111000000001111, 0x01) = 0x63CA6362CA6363636382826282826363 +keygenassist(0x10000000000000001111000000001111, 0x02) = 0x63CA6361CA6363636382826182826363 +keygenassist(0x10000000000000001111000000001111, 0x04) = 0x63CA6367CA6363636382826782826363 +keygenassist(0x10000000000000001111000000001111, 0x08) = 0x63CA636BCA6363636382826B82826363 +keygenassist(0x10000000000000001111000000001111, 0x10) = 0x63CA6373CA6363636382827382826363 +keygenassist(0x10000000000000001111000000001111, 0x38) = 0x63CA635BCA6363636382825B82826363 +keygenassist(0x10000000000000001111000000001111, 0x4F) = 0x63CA632CCA6363636382822C82826363 +keygenassist(0x10000000000000001111000000001111, 0xFF) = 0x63CA639CCA6363636382829C82826363 +imc (0x10000000000000001111000000001111) = 0xE0B0D090000000007755664466447755 +pclmul(0x10000000000000001111000000001111, 0x00) = 0x065DF10EFFF108ACF75DFFF10EF10653 +pclmul(0x10000000000000001111000000001111, 0x01) = 0x065933390A333F59356A0A3339000653 +pclmul(0x10000000000000001111000000001111, 0x10) = 0x06382826382826363000000000000000 +pclmul(0x10000000000000001111000000001111, 0xFF) = 0x063CA6363CA636363000000000000000 +enc (0x20000000000000002222000000002222, 0x00000000000000000000000000000000) = 0x636893989868939363636363DBF4474C +enclast(0x20000000000000002222000000002222, 0x00000000000000000000000000000000) = 0x639393639363636363636363B7636393 +dec (0x20000000000000002222000000002222, 0x00000000000000000000000000000000) = 0xFE9A69CB76687C64CBFE9A69A1F06736 +declast(0x20000000000000002222000000002222, 0x00000000000000000000000000000000) = 0x52945252545252525252945294525294 +enc (0x20000000000000002222000000002222, 0x10000000000000001111000000001111) = 0x736893989868939372726363DBF4565D +enclast(0x20000000000000002222000000002222, 0x10000000000000001111000000001111) = 0x739393639363636372726363B7637282 +dec (0x20000000000000002222000000002222, 0x10000000000000001111000000001111) = 0xEE9A69CB76687C64DAEF9A69A1F07627 +declast(0x20000000000000002222000000002222, 0x10000000000000001111000000001111) = 0x42945252545252524343945294524385 +enc (0x20000000000000002222000000002222, 0x20000000000000002222000000002222) = 0x436893989868939341416363DBF4656E +enclast(0x20000000000000002222000000002222, 0x20000000000000002222000000002222) = 0x439393639363636341416363B76341B1 +dec (0x20000000000000002222000000002222, 0x20000000000000002222000000002222) = 0xDE9A69CB76687C64E9DC9A69A1F04514 +declast(0x20000000000000002222000000002222, 0x20000000000000002222000000002222) = 0x729452525452525270709452945270B6 +enc (0x20000000000000002222000000002222, 0x30000000000000003333000000003333) = 0x536893989868939350506363DBF4747F +enclast(0x20000000000000002222000000002222, 0x30000000000000003333000000003333) = 0x539393639363636350506363B76350A0 +dec (0x20000000000000002222000000002222, 0x30000000000000003333000000003333) = 0xCE9A69CB76687C64F8CD9A69A1F05405 +declast(0x20000000000000002222000000002222, 0x30000000000000003333000000003333) = 0x629452525452525261619452945261A7 +enc (0x20000000000000002222000000002222, 0x40000000000000004444000000004444) = 0x236893989868939327276363DBF40308 +enclast(0x20000000000000002222000000002222, 0x40000000000000004444000000004444) = 0x239393639363636327276363B76327D7 +dec (0x20000000000000002222000000002222, 0x40000000000000004444000000004444) = 0xBE9A69CB76687C648FBA9A69A1F02372 +declast(0x20000000000000002222000000002222, 0x40000000000000004444000000004444) = 0x129452525452525216169452945216D0 +enc (0x20000000000000002222000000002222, 0x50000000000000005555000000005555) = 0x336893989868939336366363DBF41219 +enclast(0x20000000000000002222000000002222, 0x50000000000000005555000000005555) = 0x339393639363636336366363B76336C6 +dec (0x20000000000000002222000000002222, 0x50000000000000005555000000005555) = 0xAE9A69CB76687C649EAB9A69A1F03263 +declast(0x20000000000000002222000000002222, 0x50000000000000005555000000005555) = 0x029452525452525207079452945207C1 +enc (0x20000000000000002222000000002222, 0x60000000000000006666000000006666) = 0x036893989868939305056363DBF4212A +enclast(0x20000000000000002222000000002222, 0x60000000000000006666000000006666) = 0x039393639363636305056363B76305F5 +dec (0x20000000000000002222000000002222, 0x60000000000000006666000000006666) = 0x9E9A69CB76687C64AD989A69A1F00150 +declast(0x20000000000000002222000000002222, 0x60000000000000006666000000006666) = 0x329452525452525234349452945234F2 +enc (0x20000000000000002222000000002222, 0x70000000000000007777000000007777) = 0x136893989868939314146363DBF4303B +enclast(0x20000000000000002222000000002222, 0x70000000000000007777000000007777) = 0x139393639363636314146363B76314E4 +dec (0x20000000000000002222000000002222, 0x70000000000000007777000000007777) = 0x8E9A69CB76687C64BC899A69A1F01041 +declast(0x20000000000000002222000000002222, 0x70000000000000007777000000007777) = 0x229452525452525225259452945225E3 +enc (0x20000000000000002222000000002222, 0x80000000000000008888000000008888) = 0xE368939898689393EBEB6363DBF4CFC4 +enclast(0x20000000000000002222000000002222, 0x80000000000000008888000000008888) = 0xE393936393636363EBEB6363B763EB1B +dec (0x20000000000000002222000000002222, 0x80000000000000008888000000008888) = 0x7E9A69CB76687C6443769A69A1F0EFBE +declast(0x20000000000000002222000000002222, 0x80000000000000008888000000008888) = 0xD294525254525252DADA94529452DA1C +enc (0x20000000000000002222000000002222, 0x90000000000000009999000000009999) = 0xF368939898689393FAFA6363DBF4DED5 +enclast(0x20000000000000002222000000002222, 0x90000000000000009999000000009999) = 0xF393936393636363FAFA6363B763FA0A +dec (0x20000000000000002222000000002222, 0x90000000000000009999000000009999) = 0x6E9A69CB76687C6452679A69A1F0FEAF +declast(0x20000000000000002222000000002222, 0x90000000000000009999000000009999) = 0xC294525254525252CBCB94529452CB0D +enc (0x20000000000000002222000000002222, 0xA000000000000000AAAA00000000AAAA) = 0xC368939898689393C9C96363DBF4EDE6 +enclast(0x20000000000000002222000000002222, 0xA000000000000000AAAA00000000AAAA) = 0xC393936393636363C9C96363B763C939 +dec (0x20000000000000002222000000002222, 0xA000000000000000AAAA00000000AAAA) = 0x5E9A69CB76687C6461549A69A1F0CD9C +declast(0x20000000000000002222000000002222, 0xA000000000000000AAAA00000000AAAA) = 0xF294525254525252F8F894529452F83E +enc (0x20000000000000002222000000002222, 0xB000000000000000BBBB00000000BBBB) = 0xD368939898689393D8D86363DBF4FCF7 +enclast(0x20000000000000002222000000002222, 0xB000000000000000BBBB00000000BBBB) = 0xD393936393636363D8D86363B763D828 +dec (0x20000000000000002222000000002222, 0xB000000000000000BBBB00000000BBBB) = 0x4E9A69CB76687C6470459A69A1F0DC8D +declast(0x20000000000000002222000000002222, 0xB000000000000000BBBB00000000BBBB) = 0xE294525254525252E9E994529452E92F +enc (0x20000000000000002222000000002222, 0xC000000000000000CCCC00000000CCCC) = 0xA368939898689393AFAF6363DBF48B80 +enclast(0x20000000000000002222000000002222, 0xC000000000000000CCCC00000000CCCC) = 0xA393936393636363AFAF6363B763AF5F +dec (0x20000000000000002222000000002222, 0xC000000000000000CCCC00000000CCCC) = 0x3E9A69CB76687C6407329A69A1F0ABFA +declast(0x20000000000000002222000000002222, 0xC000000000000000CCCC00000000CCCC) = 0x92945252545252529E9E945294529E58 +enc (0x20000000000000002222000000002222, 0xD000000000000000DDDD00000000DDDD) = 0xB368939898689393BEBE6363DBF49A91 +enclast(0x20000000000000002222000000002222, 0xD000000000000000DDDD00000000DDDD) = 0xB393936393636363BEBE6363B763BE4E +dec (0x20000000000000002222000000002222, 0xD000000000000000DDDD00000000DDDD) = 0x2E9A69CB76687C6416239A69A1F0BAEB +declast(0x20000000000000002222000000002222, 0xD000000000000000DDDD00000000DDDD) = 0x82945252545252528F8F945294528F49 +enc (0x20000000000000002222000000002222, 0xE000000000000000EEEE00000000EEEE) = 0x83689398986893938D8D6363DBF4A9A2 +enclast(0x20000000000000002222000000002222, 0xE000000000000000EEEE00000000EEEE) = 0x83939363936363638D8D6363B7638D7D +dec (0x20000000000000002222000000002222, 0xE000000000000000EEEE00000000EEEE) = 0x1E9A69CB76687C6425109A69A1F089D8 +declast(0x20000000000000002222000000002222, 0xE000000000000000EEEE00000000EEEE) = 0xB294525254525252BCBC94529452BC7A +enc (0x20000000000000002222000000002222, 0xF000000000000000FFFF00000000FFFF) = 0x93689398986893939C9C6363DBF4B8B3 +enclast(0x20000000000000002222000000002222, 0xF000000000000000FFFF00000000FFFF) = 0x93939363936363639C9C6363B7639C6C +dec (0x20000000000000002222000000002222, 0xF000000000000000FFFF00000000FFFF) = 0x0E9A69CB76687C6434019A69A1F098C9 +declast(0x20000000000000002222000000002222, 0xF000000000000000FFFF00000000FFFF) = 0xA294525254525252ADAD94529452AD6B +keygenassist(0x20000000000000002222000000002222, 0x00) = 0x63B76363B76363636393936393936363 +keygenassist(0x20000000000000002222000000002222, 0x01) = 0x63B76362B76363636393936293936363 +keygenassist(0x20000000000000002222000000002222, 0x02) = 0x63B76361B76363636393936193936363 +keygenassist(0x20000000000000002222000000002222, 0x04) = 0x63B76367B76363636393936793936363 +keygenassist(0x20000000000000002222000000002222, 0x08) = 0x63B7636BB76363636393936B93936363 +keygenassist(0x20000000000000002222000000002222, 0x10) = 0x63B76373B76363636393937393936363 +keygenassist(0x20000000000000002222000000002222, 0x38) = 0x63B7635BB76363636393935B93936363 +keygenassist(0x20000000000000002222000000002222, 0x4F) = 0x63B7632CB76363636393932C93936363 +keygenassist(0x20000000000000002222000000002222, 0xFF) = 0x63B7639CB76363636393939C93936363 +imc (0x20000000000000002222000000002222) = 0xDB7BBB3B00000000EEAACC88CC88EEAA +pclmul(0x20000000000000002222000000002222, 0x00) = 0x0CB9E01FFFE01359ECB9FFE01FE00CA6 +pclmul(0x20000000000000002222000000002222, 0x01) = 0x0CBD33281B3324BD3F8E1B3328000CA6 +pclmul(0x20000000000000002222000000002222, 0x10) = 0x0C72726C72726C6C6000000000000000 +pclmul(0x20000000000000002222000000002222, 0xFF) = 0x0C76EC6C76EC6C6C6000000000000000 +enc (0x30000000000000003333000000003333, 0x00000000000000000000000000000000) = 0x6398C3383898C3C363636363566AA45F +enclast(0x30000000000000003333000000003333, 0x00000000000000000000000000000000) = 0x63C3C363C363636363636363046363C3 +dec (0x30000000000000003333000000003333, 0x00000000000000000000000000000000) = 0xDD51B50D735A9DEE0DDD51B5B6EA82DE +declast(0x30000000000000003333000000003333, 0x00000000000000000000000000000000) = 0x52665252085252525252665266525266 +enc (0x30000000000000003333000000003333, 0x10000000000000001111000000001111) = 0x7398C3383898C3C372726363566AB54E +enclast(0x30000000000000003333000000003333, 0x10000000000000001111000000001111) = 0x73C3C363C363636372726363046372D2 +dec (0x30000000000000003333000000003333, 0x10000000000000001111000000001111) = 0xCD51B50D735A9DEE1CCC51B5B6EA93CF +declast(0x30000000000000003333000000003333, 0x10000000000000001111000000001111) = 0x42665252085252524343665266524377 +enc (0x30000000000000003333000000003333, 0x20000000000000002222000000002222) = 0x4398C3383898C3C341416363566A867D +enclast(0x30000000000000003333000000003333, 0x20000000000000002222000000002222) = 0x43C3C363C363636341416363046341E1 +dec (0x30000000000000003333000000003333, 0x20000000000000002222000000002222) = 0xFD51B50D735A9DEE2FFF51B5B6EAA0FC +declast(0x30000000000000003333000000003333, 0x20000000000000002222000000002222) = 0x72665252085252527070665266527044 +enc (0x30000000000000003333000000003333, 0x30000000000000003333000000003333) = 0x5398C3383898C3C350506363566A976C +enclast(0x30000000000000003333000000003333, 0x30000000000000003333000000003333) = 0x53C3C363C363636350506363046350F0 +dec (0x30000000000000003333000000003333, 0x30000000000000003333000000003333) = 0xED51B50D735A9DEE3EEE51B5B6EAB1ED +declast(0x30000000000000003333000000003333, 0x30000000000000003333000000003333) = 0x62665252085252526161665266526155 +enc (0x30000000000000003333000000003333, 0x40000000000000004444000000004444) = 0x2398C3383898C3C327276363566AE01B +enclast(0x30000000000000003333000000003333, 0x40000000000000004444000000004444) = 0x23C3C363C36363632727636304632787 +dec (0x30000000000000003333000000003333, 0x40000000000000004444000000004444) = 0x9D51B50D735A9DEE499951B5B6EAC69A +declast(0x30000000000000003333000000003333, 0x40000000000000004444000000004444) = 0x12665252085252521616665266521622 +enc (0x30000000000000003333000000003333, 0x50000000000000005555000000005555) = 0x3398C3383898C3C336366363566AF10A +enclast(0x30000000000000003333000000003333, 0x50000000000000005555000000005555) = 0x33C3C363C36363633636636304633696 +dec (0x30000000000000003333000000003333, 0x50000000000000005555000000005555) = 0x8D51B50D735A9DEE588851B5B6EAD78B +declast(0x30000000000000003333000000003333, 0x50000000000000005555000000005555) = 0x02665252085252520707665266520733 +enc (0x30000000000000003333000000003333, 0x60000000000000006666000000006666) = 0x0398C3383898C3C305056363566AC239 +enclast(0x30000000000000003333000000003333, 0x60000000000000006666000000006666) = 0x03C3C363C363636305056363046305A5 +dec (0x30000000000000003333000000003333, 0x60000000000000006666000000006666) = 0xBD51B50D735A9DEE6BBB51B5B6EAE4B8 +declast(0x30000000000000003333000000003333, 0x60000000000000006666000000006666) = 0x32665252085252523434665266523400 +enc (0x30000000000000003333000000003333, 0x70000000000000007777000000007777) = 0x1398C3383898C3C314146363566AD328 +enclast(0x30000000000000003333000000003333, 0x70000000000000007777000000007777) = 0x13C3C363C363636314146363046314B4 +dec (0x30000000000000003333000000003333, 0x70000000000000007777000000007777) = 0xAD51B50D735A9DEE7AAA51B5B6EAF5A9 +declast(0x30000000000000003333000000003333, 0x70000000000000007777000000007777) = 0x22665252085252522525665266522511 +enc (0x30000000000000003333000000003333, 0x80000000000000008888000000008888) = 0xE398C3383898C3C3EBEB6363566A2CD7 +enclast(0x30000000000000003333000000003333, 0x80000000000000008888000000008888) = 0xE3C3C363C3636363EBEB63630463EB4B +dec (0x30000000000000003333000000003333, 0x80000000000000008888000000008888) = 0x5D51B50D735A9DEE855551B5B6EA0A56 +declast(0x30000000000000003333000000003333, 0x80000000000000008888000000008888) = 0xD266525208525252DADA66526652DAEE +enc (0x30000000000000003333000000003333, 0x90000000000000009999000000009999) = 0xF398C3383898C3C3FAFA6363566A3DC6 +enclast(0x30000000000000003333000000003333, 0x90000000000000009999000000009999) = 0xF3C3C363C3636363FAFA63630463FA5A +dec (0x30000000000000003333000000003333, 0x90000000000000009999000000009999) = 0x4D51B50D735A9DEE944451B5B6EA1B47 +declast(0x30000000000000003333000000003333, 0x90000000000000009999000000009999) = 0xC266525208525252CBCB66526652CBFF +enc (0x30000000000000003333000000003333, 0xA000000000000000AAAA00000000AAAA) = 0xC398C3383898C3C3C9C96363566A0EF5 +enclast(0x30000000000000003333000000003333, 0xA000000000000000AAAA00000000AAAA) = 0xC3C3C363C3636363C9C963630463C969 +dec (0x30000000000000003333000000003333, 0xA000000000000000AAAA00000000AAAA) = 0x7D51B50D735A9DEEA77751B5B6EA2874 +declast(0x30000000000000003333000000003333, 0xA000000000000000AAAA00000000AAAA) = 0xF266525208525252F8F866526652F8CC +enc (0x30000000000000003333000000003333, 0xB000000000000000BBBB00000000BBBB) = 0xD398C3383898C3C3D8D86363566A1FE4 +enclast(0x30000000000000003333000000003333, 0xB000000000000000BBBB00000000BBBB) = 0xD3C3C363C3636363D8D863630463D878 +dec (0x30000000000000003333000000003333, 0xB000000000000000BBBB00000000BBBB) = 0x6D51B50D735A9DEEB66651B5B6EA3965 +declast(0x30000000000000003333000000003333, 0xB000000000000000BBBB00000000BBBB) = 0xE266525208525252E9E966526652E9DD +enc (0x30000000000000003333000000003333, 0xC000000000000000CCCC00000000CCCC) = 0xA398C3383898C3C3AFAF6363566A6893 +enclast(0x30000000000000003333000000003333, 0xC000000000000000CCCC00000000CCCC) = 0xA3C3C363C3636363AFAF63630463AF0F +dec (0x30000000000000003333000000003333, 0xC000000000000000CCCC00000000CCCC) = 0x1D51B50D735A9DEEC11151B5B6EA4E12 +declast(0x30000000000000003333000000003333, 0xC000000000000000CCCC00000000CCCC) = 0x92665252085252529E9E665266529EAA +enc (0x30000000000000003333000000003333, 0xD000000000000000DDDD00000000DDDD) = 0xB398C3383898C3C3BEBE6363566A7982 +enclast(0x30000000000000003333000000003333, 0xD000000000000000DDDD00000000DDDD) = 0xB3C3C363C3636363BEBE63630463BE1E +dec (0x30000000000000003333000000003333, 0xD000000000000000DDDD00000000DDDD) = 0x0D51B50D735A9DEED00051B5B6EA5F03 +declast(0x30000000000000003333000000003333, 0xD000000000000000DDDD00000000DDDD) = 0x82665252085252528F8F665266528FBB +enc (0x30000000000000003333000000003333, 0xE000000000000000EEEE00000000EEEE) = 0x8398C3383898C3C38D8D6363566A4AB1 +enclast(0x30000000000000003333000000003333, 0xE000000000000000EEEE00000000EEEE) = 0x83C3C363C36363638D8D636304638D2D +dec (0x30000000000000003333000000003333, 0xE000000000000000EEEE00000000EEEE) = 0x3D51B50D735A9DEEE33351B5B6EA6C30 +declast(0x30000000000000003333000000003333, 0xE000000000000000EEEE00000000EEEE) = 0xB266525208525252BCBC66526652BC88 +enc (0x30000000000000003333000000003333, 0xF000000000000000FFFF00000000FFFF) = 0x9398C3383898C3C39C9C6363566A5BA0 +enclast(0x30000000000000003333000000003333, 0xF000000000000000FFFF00000000FFFF) = 0x93C3C363C36363639C9C636304639C3C +dec (0x30000000000000003333000000003333, 0xF000000000000000FFFF00000000FFFF) = 0x2D51B50D735A9DEEF22251B5B6EA7D21 +declast(0x30000000000000003333000000003333, 0xF000000000000000FFFF00000000FFFF) = 0xA266525208525252ADAD66526652AD99 +keygenassist(0x30000000000000003333000000003333, 0x00) = 0x630463630463636363C3C363C3C36363 +keygenassist(0x30000000000000003333000000003333, 0x01) = 0x630463620463636363C3C362C3C36363 +keygenassist(0x30000000000000003333000000003333, 0x02) = 0x630463610463636363C3C361C3C36363 +keygenassist(0x30000000000000003333000000003333, 0x04) = 0x630463670463636363C3C367C3C36363 +keygenassist(0x30000000000000003333000000003333, 0x08) = 0x6304636B0463636363C3C36BC3C36363 +keygenassist(0x30000000000000003333000000003333, 0x10) = 0x630463730463636363C3C373C3C36363 +keygenassist(0x30000000000000003333000000003333, 0x38) = 0x6304635B0463636363C3C35BC3C36363 +keygenassist(0x30000000000000003333000000003333, 0x4F) = 0x6304632C0463636363C3C32CC3C36363 +keygenassist(0x30000000000000003333000000003333, 0xFF) = 0x6304639C0463636363C3C39CC3C36363 +imc (0x30000000000000003333000000003333) = 0x3BCB6BAB0000000099FFAACCAACC99FF +pclmul(0x30000000000000003333000000003333, 0x00) = 0x0AEAE01FFFE0150AEAEAFFE01FE00AF5 +pclmul(0x30000000000000003333000000003333, 0x01) = 0x0AFF33390A3333FF39CC0A3339000AF5 +pclmul(0x30000000000000003333000000003333, 0x10) = 0x0A44445A44445A5A5000000000000000 +pclmul(0x30000000000000003333000000003333, 0xFF) = 0x0A50CA5A50CA5A5A5000000000000000 +enc (0x40000000000000004444000000004444, 0x00000000000000000000000000000000) = 0x63EB1B9393EB1B1B636363633FA571F9 +enclast(0x40000000000000004444000000004444, 0x00000000000000000000000000000000) = 0x631B1B631B636363636363630963631B +dec (0x40000000000000004444000000004444, 0x00000000000000000000000000000000) = 0x7C66CF018929E969017C66CFFB9C2F48 +declast(0x40000000000000004444000000004444, 0x00000000000000000000000000000000) = 0x52865252725252525252865286525286 +enc (0x40000000000000004444000000004444, 0x10000000000000001111000000001111) = 0x73EB1B9393EB1B1B727263633FA560E8 +enclast(0x40000000000000004444000000004444, 0x10000000000000001111000000001111) = 0x731B1B631B636363727263630963720A +dec (0x40000000000000004444000000004444, 0x10000000000000001111000000001111) = 0x6C66CF018929E969106D66CFFB9C3E59 +declast(0x40000000000000004444000000004444, 0x10000000000000001111000000001111) = 0x42865252725252524343865286524397 +enc (0x40000000000000004444000000004444, 0x20000000000000002222000000002222) = 0x43EB1B9393EB1B1B414163633FA553DB +enclast(0x40000000000000004444000000004444, 0x20000000000000002222000000002222) = 0x431B1B631B6363634141636309634139 +dec (0x40000000000000004444000000004444, 0x20000000000000002222000000002222) = 0x5C66CF018929E969235E66CFFB9C0D6A +declast(0x40000000000000004444000000004444, 0x20000000000000002222000000002222) = 0x728652527252525270708652865270A4 +enc (0x40000000000000004444000000004444, 0x30000000000000003333000000003333) = 0x53EB1B9393EB1B1B505063633FA542CA +enclast(0x40000000000000004444000000004444, 0x30000000000000003333000000003333) = 0x531B1B631B6363635050636309635028 +dec (0x40000000000000004444000000004444, 0x30000000000000003333000000003333) = 0x4C66CF018929E969324F66CFFB9C1C7B +declast(0x40000000000000004444000000004444, 0x30000000000000003333000000003333) = 0x628652527252525261618652865261B5 +enc (0x40000000000000004444000000004444, 0x40000000000000004444000000004444) = 0x23EB1B9393EB1B1B272763633FA535BD +enclast(0x40000000000000004444000000004444, 0x40000000000000004444000000004444) = 0x231B1B631B636363272763630963275F +dec (0x40000000000000004444000000004444, 0x40000000000000004444000000004444) = 0x3C66CF018929E969453866CFFB9C6B0C +declast(0x40000000000000004444000000004444, 0x40000000000000004444000000004444) = 0x128652527252525216168652865216C2 +enc (0x40000000000000004444000000004444, 0x50000000000000005555000000005555) = 0x33EB1B9393EB1B1B363663633FA524AC +enclast(0x40000000000000004444000000004444, 0x50000000000000005555000000005555) = 0x331B1B631B636363363663630963364E +dec (0x40000000000000004444000000004444, 0x50000000000000005555000000005555) = 0x2C66CF018929E969542966CFFB9C7A1D +declast(0x40000000000000004444000000004444, 0x50000000000000005555000000005555) = 0x028652527252525207078652865207D3 +enc (0x40000000000000004444000000004444, 0x60000000000000006666000000006666) = 0x03EB1B9393EB1B1B050563633FA5179F +enclast(0x40000000000000004444000000004444, 0x60000000000000006666000000006666) = 0x031B1B631B636363050563630963057D +dec (0x40000000000000004444000000004444, 0x60000000000000006666000000006666) = 0x1C66CF018929E969671A66CFFB9C492E +declast(0x40000000000000004444000000004444, 0x60000000000000006666000000006666) = 0x328652527252525234348652865234E0 +enc (0x40000000000000004444000000004444, 0x70000000000000007777000000007777) = 0x13EB1B9393EB1B1B141463633FA5068E +enclast(0x40000000000000004444000000004444, 0x70000000000000007777000000007777) = 0x131B1B631B636363141463630963146C +dec (0x40000000000000004444000000004444, 0x70000000000000007777000000007777) = 0x0C66CF018929E969760B66CFFB9C583F +declast(0x40000000000000004444000000004444, 0x70000000000000007777000000007777) = 0x228652527252525225258652865225F1 +enc (0x40000000000000004444000000004444, 0x80000000000000008888000000008888) = 0xE3EB1B9393EB1B1BEBEB63633FA5F971 +enclast(0x40000000000000004444000000004444, 0x80000000000000008888000000008888) = 0xE31B1B631B636363EBEB63630963EB93 +dec (0x40000000000000004444000000004444, 0x80000000000000008888000000008888) = 0xFC66CF018929E96989F466CFFB9CA7C0 +declast(0x40000000000000004444000000004444, 0x80000000000000008888000000008888) = 0xD286525272525252DADA86528652DA0E +enc (0x40000000000000004444000000004444, 0x90000000000000009999000000009999) = 0xF3EB1B9393EB1B1BFAFA63633FA5E860 +enclast(0x40000000000000004444000000004444, 0x90000000000000009999000000009999) = 0xF31B1B631B636363FAFA63630963FA82 +dec (0x40000000000000004444000000004444, 0x90000000000000009999000000009999) = 0xEC66CF018929E96998E566CFFB9CB6D1 +declast(0x40000000000000004444000000004444, 0x90000000000000009999000000009999) = 0xC286525272525252CBCB86528652CB1F +enc (0x40000000000000004444000000004444, 0xA000000000000000AAAA00000000AAAA) = 0xC3EB1B9393EB1B1BC9C963633FA5DB53 +enclast(0x40000000000000004444000000004444, 0xA000000000000000AAAA00000000AAAA) = 0xC31B1B631B636363C9C963630963C9B1 +dec (0x40000000000000004444000000004444, 0xA000000000000000AAAA00000000AAAA) = 0xDC66CF018929E969ABD666CFFB9C85E2 +declast(0x40000000000000004444000000004444, 0xA000000000000000AAAA00000000AAAA) = 0xF286525272525252F8F886528652F82C +enc (0x40000000000000004444000000004444, 0xB000000000000000BBBB00000000BBBB) = 0xD3EB1B9393EB1B1BD8D863633FA5CA42 +enclast(0x40000000000000004444000000004444, 0xB000000000000000BBBB00000000BBBB) = 0xD31B1B631B636363D8D863630963D8A0 +dec (0x40000000000000004444000000004444, 0xB000000000000000BBBB00000000BBBB) = 0xCC66CF018929E969BAC766CFFB9C94F3 +declast(0x40000000000000004444000000004444, 0xB000000000000000BBBB00000000BBBB) = 0xE286525272525252E9E986528652E93D +enc (0x40000000000000004444000000004444, 0xC000000000000000CCCC00000000CCCC) = 0xA3EB1B9393EB1B1BAFAF63633FA5BD35 +enclast(0x40000000000000004444000000004444, 0xC000000000000000CCCC00000000CCCC) = 0xA31B1B631B636363AFAF63630963AFD7 +dec (0x40000000000000004444000000004444, 0xC000000000000000CCCC00000000CCCC) = 0xBC66CF018929E969CDB066CFFB9CE384 +declast(0x40000000000000004444000000004444, 0xC000000000000000CCCC00000000CCCC) = 0x92865252725252529E9E865286529E4A +enc (0x40000000000000004444000000004444, 0xD000000000000000DDDD00000000DDDD) = 0xB3EB1B9393EB1B1BBEBE63633FA5AC24 +enclast(0x40000000000000004444000000004444, 0xD000000000000000DDDD00000000DDDD) = 0xB31B1B631B636363BEBE63630963BEC6 +dec (0x40000000000000004444000000004444, 0xD000000000000000DDDD00000000DDDD) = 0xAC66CF018929E969DCA166CFFB9CF295 +declast(0x40000000000000004444000000004444, 0xD000000000000000DDDD00000000DDDD) = 0x82865252725252528F8F865286528F5B +enc (0x40000000000000004444000000004444, 0xE000000000000000EEEE00000000EEEE) = 0x83EB1B9393EB1B1B8D8D63633FA59F17 +enclast(0x40000000000000004444000000004444, 0xE000000000000000EEEE00000000EEEE) = 0x831B1B631B6363638D8D636309638DF5 +dec (0x40000000000000004444000000004444, 0xE000000000000000EEEE00000000EEEE) = 0x9C66CF018929E969EF9266CFFB9CC1A6 +declast(0x40000000000000004444000000004444, 0xE000000000000000EEEE00000000EEEE) = 0xB286525272525252BCBC86528652BC68 +enc (0x40000000000000004444000000004444, 0xF000000000000000FFFF00000000FFFF) = 0x93EB1B9393EB1B1B9C9C63633FA58E06 +enclast(0x40000000000000004444000000004444, 0xF000000000000000FFFF00000000FFFF) = 0x931B1B631B6363639C9C636309639CE4 +dec (0x40000000000000004444000000004444, 0xF000000000000000FFFF00000000FFFF) = 0x8C66CF018929E969FE8366CFFB9CD0B7 +declast(0x40000000000000004444000000004444, 0xF000000000000000FFFF00000000FFFF) = 0xA286525272525252ADAD86528652AD79 +keygenassist(0x40000000000000004444000000004444, 0x00) = 0x6309636309636363631B1B631B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x01) = 0x6309636209636363631B1B621B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x02) = 0x6309636109636363631B1B611B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x04) = 0x6309636709636363631B1B671B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x08) = 0x6309636B09636363631B1B6B1B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x10) = 0x6309637309636363631B1B731B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x38) = 0x6309635B09636363631B1B5B1B1B6363 +keygenassist(0x40000000000000004444000000004444, 0x4F) = 0x6309632C09636363631B1B2C1B1B6363 +keygenassist(0x40000000000000004444000000004444, 0xFF) = 0x6309639C09636363631B1B9C1B1B6363 +imc (0x40000000000000004444000000004444) = 0xADF66D7600000000C74F830B830BC74F +pclmul(0x40000000000000004444000000004444, 0x00) = 0x1953E01FFFE006B3F953FFE01FE0194C +pclmul(0x40000000000000004444000000004444, 0x01) = 0x195733281B3331572A641B332800194C +pclmul(0x40000000000000004444000000004444, 0x10) = 0x18C6C6D8C6C6D8D8C000000000000000 +pclmul(0x40000000000000004444000000004444, 0xFF) = 0x18C258D8C258D8D8C000000000000000 +enc (0x50000000000000005555000000005555, 0x00000000000000000000000000000000) = 0x63D9FC4646D9FCFC63636363B9ACCC76 +enclast(0x50000000000000005555000000005555, 0x00000000000000000000000000000000) = 0x63FCFC63FC63636363636363536363FC +dec (0x50000000000000005555000000005555, 0x00000000000000000000000000000000) = 0x627207A83DFB7F87A862720727FD9842 +declast(0x50000000000000005555000000005555, 0x00000000000000000000000000000000) = 0x52ED52526C5252525252ED52ED5252ED +enc (0x50000000000000005555000000005555, 0x10000000000000001111000000001111) = 0x73D9FC4646D9FCFC72726363B9ACDD67 +enclast(0x50000000000000005555000000005555, 0x10000000000000001111000000001111) = 0x73FCFC63FC63636372726363536372ED +dec (0x50000000000000005555000000005555, 0x10000000000000001111000000001111) = 0x727207A83DFB7F87B973720727FD8953 +declast(0x50000000000000005555000000005555, 0x10000000000000001111000000001111) = 0x42ED52526C5252524343ED52ED5243FC +enc (0x50000000000000005555000000005555, 0x20000000000000002222000000002222) = 0x43D9FC4646D9FCFC41416363B9ACEE54 +enclast(0x50000000000000005555000000005555, 0x20000000000000002222000000002222) = 0x43FCFC63FC63636341416363536341DE +dec (0x50000000000000005555000000005555, 0x20000000000000002222000000002222) = 0x427207A83DFB7F878A40720727FDBA60 +declast(0x50000000000000005555000000005555, 0x20000000000000002222000000002222) = 0x72ED52526C5252527070ED52ED5270CF +enc (0x50000000000000005555000000005555, 0x30000000000000003333000000003333) = 0x53D9FC4646D9FCFC50506363B9ACFF45 +enclast(0x50000000000000005555000000005555, 0x30000000000000003333000000003333) = 0x53FCFC63FC63636350506363536350CF +dec (0x50000000000000005555000000005555, 0x30000000000000003333000000003333) = 0x527207A83DFB7F879B51720727FDAB71 +declast(0x50000000000000005555000000005555, 0x30000000000000003333000000003333) = 0x62ED52526C5252526161ED52ED5261DE +enc (0x50000000000000005555000000005555, 0x40000000000000004444000000004444) = 0x23D9FC4646D9FCFC27276363B9AC8832 +enclast(0x50000000000000005555000000005555, 0x40000000000000004444000000004444) = 0x23FCFC63FC63636327276363536327B8 +dec (0x50000000000000005555000000005555, 0x40000000000000004444000000004444) = 0x227207A83DFB7F87EC26720727FDDC06 +declast(0x50000000000000005555000000005555, 0x40000000000000004444000000004444) = 0x12ED52526C5252521616ED52ED5216A9 +enc (0x50000000000000005555000000005555, 0x50000000000000005555000000005555) = 0x33D9FC4646D9FCFC36366363B9AC9923 +enclast(0x50000000000000005555000000005555, 0x50000000000000005555000000005555) = 0x33FCFC63FC63636336366363536336A9 +dec (0x50000000000000005555000000005555, 0x50000000000000005555000000005555) = 0x327207A83DFB7F87FD37720727FDCD17 +declast(0x50000000000000005555000000005555, 0x50000000000000005555000000005555) = 0x02ED52526C5252520707ED52ED5207B8 +enc (0x50000000000000005555000000005555, 0x60000000000000006666000000006666) = 0x03D9FC4646D9FCFC05056363B9ACAA10 +enclast(0x50000000000000005555000000005555, 0x60000000000000006666000000006666) = 0x03FCFC63FC636363050563635363059A +dec (0x50000000000000005555000000005555, 0x60000000000000006666000000006666) = 0x027207A83DFB7F87CE04720727FDFE24 +declast(0x50000000000000005555000000005555, 0x60000000000000006666000000006666) = 0x32ED52526C5252523434ED52ED52348B +enc (0x50000000000000005555000000005555, 0x70000000000000007777000000007777) = 0x13D9FC4646D9FCFC14146363B9ACBB01 +enclast(0x50000000000000005555000000005555, 0x70000000000000007777000000007777) = 0x13FCFC63FC636363141463635363148B +dec (0x50000000000000005555000000005555, 0x70000000000000007777000000007777) = 0x127207A83DFB7F87DF15720727FDEF35 +declast(0x50000000000000005555000000005555, 0x70000000000000007777000000007777) = 0x22ED52526C5252522525ED52ED52259A +enc (0x50000000000000005555000000005555, 0x80000000000000008888000000008888) = 0xE3D9FC4646D9FCFCEBEB6363B9AC44FE +enclast(0x50000000000000005555000000005555, 0x80000000000000008888000000008888) = 0xE3FCFC63FC636363EBEB63635363EB74 +dec (0x50000000000000005555000000005555, 0x80000000000000008888000000008888) = 0xE27207A83DFB7F8720EA720727FD10CA +declast(0x50000000000000005555000000005555, 0x80000000000000008888000000008888) = 0xD2ED52526C525252DADAED52ED52DA65 +enc (0x50000000000000005555000000005555, 0x90000000000000009999000000009999) = 0xF3D9FC4646D9FCFCFAFA6363B9AC55EF +enclast(0x50000000000000005555000000005555, 0x90000000000000009999000000009999) = 0xF3FCFC63FC636363FAFA63635363FA65 +dec (0x50000000000000005555000000005555, 0x90000000000000009999000000009999) = 0xF27207A83DFB7F8731FB720727FD01DB +declast(0x50000000000000005555000000005555, 0x90000000000000009999000000009999) = 0xC2ED52526C525252CBCBED52ED52CB74 +enc (0x50000000000000005555000000005555, 0xA000000000000000AAAA00000000AAAA) = 0xC3D9FC4646D9FCFCC9C96363B9AC66DC +enclast(0x50000000000000005555000000005555, 0xA000000000000000AAAA00000000AAAA) = 0xC3FCFC63FC636363C9C963635363C956 +dec (0x50000000000000005555000000005555, 0xA000000000000000AAAA00000000AAAA) = 0xC27207A83DFB7F8702C8720727FD32E8 +declast(0x50000000000000005555000000005555, 0xA000000000000000AAAA00000000AAAA) = 0xF2ED52526C525252F8F8ED52ED52F847 +enc (0x50000000000000005555000000005555, 0xB000000000000000BBBB00000000BBBB) = 0xD3D9FC4646D9FCFCD8D86363B9AC77CD +enclast(0x50000000000000005555000000005555, 0xB000000000000000BBBB00000000BBBB) = 0xD3FCFC63FC636363D8D863635363D847 +dec (0x50000000000000005555000000005555, 0xB000000000000000BBBB00000000BBBB) = 0xD27207A83DFB7F8713D9720727FD23F9 +declast(0x50000000000000005555000000005555, 0xB000000000000000BBBB00000000BBBB) = 0xE2ED52526C525252E9E9ED52ED52E956 +enc (0x50000000000000005555000000005555, 0xC000000000000000CCCC00000000CCCC) = 0xA3D9FC4646D9FCFCAFAF6363B9AC00BA +enclast(0x50000000000000005555000000005555, 0xC000000000000000CCCC00000000CCCC) = 0xA3FCFC63FC636363AFAF63635363AF30 +dec (0x50000000000000005555000000005555, 0xC000000000000000CCCC00000000CCCC) = 0xA27207A83DFB7F8764AE720727FD548E +declast(0x50000000000000005555000000005555, 0xC000000000000000CCCC00000000CCCC) = 0x92ED52526C5252529E9EED52ED529E21 +enc (0x50000000000000005555000000005555, 0xD000000000000000DDDD00000000DDDD) = 0xB3D9FC4646D9FCFCBEBE6363B9AC11AB +enclast(0x50000000000000005555000000005555, 0xD000000000000000DDDD00000000DDDD) = 0xB3FCFC63FC636363BEBE63635363BE21 +dec (0x50000000000000005555000000005555, 0xD000000000000000DDDD00000000DDDD) = 0xB27207A83DFB7F8775BF720727FD459F +declast(0x50000000000000005555000000005555, 0xD000000000000000DDDD00000000DDDD) = 0x82ED52526C5252528F8FED52ED528F30 +enc (0x50000000000000005555000000005555, 0xE000000000000000EEEE00000000EEEE) = 0x83D9FC4646D9FCFC8D8D6363B9AC2298 +enclast(0x50000000000000005555000000005555, 0xE000000000000000EEEE00000000EEEE) = 0x83FCFC63FC6363638D8D636353638D12 +dec (0x50000000000000005555000000005555, 0xE000000000000000EEEE00000000EEEE) = 0x827207A83DFB7F87468C720727FD76AC +declast(0x50000000000000005555000000005555, 0xE000000000000000EEEE00000000EEEE) = 0xB2ED52526C525252BCBCED52ED52BC03 +enc (0x50000000000000005555000000005555, 0xF000000000000000FFFF00000000FFFF) = 0x93D9FC4646D9FCFC9C9C6363B9AC3389 +enclast(0x50000000000000005555000000005555, 0xF000000000000000FFFF00000000FFFF) = 0x93FCFC63FC6363639C9C636353639C03 +dec (0x50000000000000005555000000005555, 0xF000000000000000FFFF00000000FFFF) = 0x927207A83DFB7F87579D720727FD67BD +declast(0x50000000000000005555000000005555, 0xF000000000000000FFFF00000000FFFF) = 0xA2ED52526C525252ADADED52ED52AD12 +keygenassist(0x50000000000000005555000000005555, 0x00) = 0x635363635363636363FCFC63FCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x01) = 0x635363625363636363FCFC62FCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x02) = 0x635363615363636363FCFC61FCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x04) = 0x635363675363636363FCFC67FCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x08) = 0x6353636B5363636363FCFC6BFCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x10) = 0x635363735363636363FCFC73FCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x38) = 0x6353635B5363636363FCFC5BFCFC6363 +keygenassist(0x50000000000000005555000000005555, 0x4F) = 0x6353632C5363636363FCFC2CFCFC6363 +keygenassist(0x50000000000000005555000000005555, 0xFF) = 0x6353639C5363636363FCFC9CFCFC6363 +imc (0x50000000000000005555000000005555) = 0x4D46BDE600000000B01AE54FE54FB01A +pclmul(0x50000000000000005555000000005555, 0x00) = 0x1F33D32CFFD333E0CC33FFD32CD31F1F +pclmul(0x50000000000000005555000000005555, 0x01) = 0x1F10FFF00FFFEF10E0EF0FFFF0001F1F +pclmul(0x50000000000000005555000000005555, 0x10) = 0x1EC0F0DEC0F0DEEEF000000000000000 +pclmul(0x50000000000000005555000000005555, 0xFF) = 0x1EE1EEEEE1EEEEEEF000000000000000 +enc (0x60000000000000006666000000006666, 0x00000000000000000000000000000000) = 0x639333C3C393333363636363EEFD8070 +enclast(0x60000000000000006666000000006666, 0x00000000000000000000000000000000) = 0x633333633363636363636363D0636333 +dec (0x60000000000000006666000000006666, 0x00000000000000000000000000000000) = 0xB71DAE85A245FFDA85B71DAEE17960F8 +declast(0x60000000000000006666000000006666, 0x00000000000000000000000000000000) = 0x52D35252905252525252D352D35252D3 +enc (0x60000000000000006666000000006666, 0x10000000000000001111000000001111) = 0x739333C3C393333372726363EEFD9161 +enclast(0x60000000000000006666000000006666, 0x10000000000000001111000000001111) = 0x733333633363636372726363D0637222 +dec (0x60000000000000006666000000006666, 0x10000000000000001111000000001111) = 0xA71DAE85A245FFDA94A61DAEE17971E9 +declast(0x60000000000000006666000000006666, 0x10000000000000001111000000001111) = 0x42D35252905252524343D352D35243C2 +enc (0x60000000000000006666000000006666, 0x20000000000000002222000000002222) = 0x439333C3C393333341416363EEFDA252 +enclast(0x60000000000000006666000000006666, 0x20000000000000002222000000002222) = 0x433333633363636341416363D0634111 +dec (0x60000000000000006666000000006666, 0x20000000000000002222000000002222) = 0x971DAE85A245FFDAA7951DAEE17942DA +declast(0x60000000000000006666000000006666, 0x20000000000000002222000000002222) = 0x72D35252905252527070D352D35270F1 +enc (0x60000000000000006666000000006666, 0x30000000000000003333000000003333) = 0x539333C3C393333350506363EEFDB343 +enclast(0x60000000000000006666000000006666, 0x30000000000000003333000000003333) = 0x533333633363636350506363D0635000 +dec (0x60000000000000006666000000006666, 0x30000000000000003333000000003333) = 0x871DAE85A245FFDAB6841DAEE17953CB +declast(0x60000000000000006666000000006666, 0x30000000000000003333000000003333) = 0x62D35252905252526161D352D35261E0 +enc (0x60000000000000006666000000006666, 0x40000000000000004444000000004444) = 0x239333C3C393333327276363EEFDC434 +enclast(0x60000000000000006666000000006666, 0x40000000000000004444000000004444) = 0x233333633363636327276363D0632777 +dec (0x60000000000000006666000000006666, 0x40000000000000004444000000004444) = 0xF71DAE85A245FFDAC1F31DAEE17924BC +declast(0x60000000000000006666000000006666, 0x40000000000000004444000000004444) = 0x12D35252905252521616D352D3521697 +enc (0x60000000000000006666000000006666, 0x50000000000000005555000000005555) = 0x339333C3C393333336366363EEFDD525 +enclast(0x60000000000000006666000000006666, 0x50000000000000005555000000005555) = 0x333333633363636336366363D0633666 +dec (0x60000000000000006666000000006666, 0x50000000000000005555000000005555) = 0xE71DAE85A245FFDAD0E21DAEE17935AD +declast(0x60000000000000006666000000006666, 0x50000000000000005555000000005555) = 0x02D35252905252520707D352D3520786 +enc (0x60000000000000006666000000006666, 0x60000000000000006666000000006666) = 0x039333C3C393333305056363EEFDE616 +enclast(0x60000000000000006666000000006666, 0x60000000000000006666000000006666) = 0x033333633363636305056363D0630555 +dec (0x60000000000000006666000000006666, 0x60000000000000006666000000006666) = 0xD71DAE85A245FFDAE3D11DAEE179069E +declast(0x60000000000000006666000000006666, 0x60000000000000006666000000006666) = 0x32D35252905252523434D352D35234B5 +enc (0x60000000000000006666000000006666, 0x70000000000000007777000000007777) = 0x139333C3C393333314146363EEFDF707 +enclast(0x60000000000000006666000000006666, 0x70000000000000007777000000007777) = 0x133333633363636314146363D0631444 +dec (0x60000000000000006666000000006666, 0x70000000000000007777000000007777) = 0xC71DAE85A245FFDAF2C01DAEE179178F +declast(0x60000000000000006666000000006666, 0x70000000000000007777000000007777) = 0x22D35252905252522525D352D35225A4 +enc (0x60000000000000006666000000006666, 0x80000000000000008888000000008888) = 0xE39333C3C3933333EBEB6363EEFD08F8 +enclast(0x60000000000000006666000000006666, 0x80000000000000008888000000008888) = 0xE333336333636363EBEB6363D063EBBB +dec (0x60000000000000006666000000006666, 0x80000000000000008888000000008888) = 0x371DAE85A245FFDA0D3F1DAEE179E870 +declast(0x60000000000000006666000000006666, 0x80000000000000008888000000008888) = 0xD2D3525290525252DADAD352D352DA5B +enc (0x60000000000000006666000000006666, 0x90000000000000009999000000009999) = 0xF39333C3C3933333FAFA6363EEFD19E9 +enclast(0x60000000000000006666000000006666, 0x90000000000000009999000000009999) = 0xF333336333636363FAFA6363D063FAAA +dec (0x60000000000000006666000000006666, 0x90000000000000009999000000009999) = 0x271DAE85A245FFDA1C2E1DAEE179F961 +declast(0x60000000000000006666000000006666, 0x90000000000000009999000000009999) = 0xC2D3525290525252CBCBD352D352CB4A +enc (0x60000000000000006666000000006666, 0xA000000000000000AAAA00000000AAAA) = 0xC39333C3C3933333C9C96363EEFD2ADA +enclast(0x60000000000000006666000000006666, 0xA000000000000000AAAA00000000AAAA) = 0xC333336333636363C9C96363D063C999 +dec (0x60000000000000006666000000006666, 0xA000000000000000AAAA00000000AAAA) = 0x171DAE85A245FFDA2F1D1DAEE179CA52 +declast(0x60000000000000006666000000006666, 0xA000000000000000AAAA00000000AAAA) = 0xF2D3525290525252F8F8D352D352F879 +enc (0x60000000000000006666000000006666, 0xB000000000000000BBBB00000000BBBB) = 0xD39333C3C3933333D8D86363EEFD3BCB +enclast(0x60000000000000006666000000006666, 0xB000000000000000BBBB00000000BBBB) = 0xD333336333636363D8D86363D063D888 +dec (0x60000000000000006666000000006666, 0xB000000000000000BBBB00000000BBBB) = 0x071DAE85A245FFDA3E0C1DAEE179DB43 +declast(0x60000000000000006666000000006666, 0xB000000000000000BBBB00000000BBBB) = 0xE2D3525290525252E9E9D352D352E968 +enc (0x60000000000000006666000000006666, 0xC000000000000000CCCC00000000CCCC) = 0xA39333C3C3933333AFAF6363EEFD4CBC +enclast(0x60000000000000006666000000006666, 0xC000000000000000CCCC00000000CCCC) = 0xA333336333636363AFAF6363D063AFFF +dec (0x60000000000000006666000000006666, 0xC000000000000000CCCC00000000CCCC) = 0x771DAE85A245FFDA497B1DAEE179AC34 +declast(0x60000000000000006666000000006666, 0xC000000000000000CCCC00000000CCCC) = 0x92D35252905252529E9ED352D3529E1F +enc (0x60000000000000006666000000006666, 0xD000000000000000DDDD00000000DDDD) = 0xB39333C3C3933333BEBE6363EEFD5DAD +enclast(0x60000000000000006666000000006666, 0xD000000000000000DDDD00000000DDDD) = 0xB333336333636363BEBE6363D063BEEE +dec (0x60000000000000006666000000006666, 0xD000000000000000DDDD00000000DDDD) = 0x671DAE85A245FFDA586A1DAEE179BD25 +declast(0x60000000000000006666000000006666, 0xD000000000000000DDDD00000000DDDD) = 0x82D35252905252528F8FD352D3528F0E +enc (0x60000000000000006666000000006666, 0xE000000000000000EEEE00000000EEEE) = 0x839333C3C39333338D8D6363EEFD6E9E +enclast(0x60000000000000006666000000006666, 0xE000000000000000EEEE00000000EEEE) = 0x83333363336363638D8D6363D0638DDD +dec (0x60000000000000006666000000006666, 0xE000000000000000EEEE00000000EEEE) = 0x571DAE85A245FFDA6B591DAEE1798E16 +declast(0x60000000000000006666000000006666, 0xE000000000000000EEEE00000000EEEE) = 0xB2D3525290525252BCBCD352D352BC3D +enc (0x60000000000000006666000000006666, 0xF000000000000000FFFF00000000FFFF) = 0x939333C3C39333339C9C6363EEFD7F8F +enclast(0x60000000000000006666000000006666, 0xF000000000000000FFFF00000000FFFF) = 0x93333363336363639C9C6363D0639CCC +dec (0x60000000000000006666000000006666, 0xF000000000000000FFFF00000000FFFF) = 0x471DAE85A245FFDA7A481DAEE1799F07 +declast(0x60000000000000006666000000006666, 0xF000000000000000FFFF00000000FFFF) = 0xA2D3525290525252ADADD352D352AD2C +keygenassist(0x60000000000000006666000000006666, 0x00) = 0x63D06363D06363636333336333336363 +keygenassist(0x60000000000000006666000000006666, 0x01) = 0x63D06362D06363636333336233336363 +keygenassist(0x60000000000000006666000000006666, 0x02) = 0x63D06361D06363636333336133336363 +keygenassist(0x60000000000000006666000000006666, 0x04) = 0x63D06367D06363636333336733336363 +keygenassist(0x60000000000000006666000000006666, 0x08) = 0x63D0636BD06363636333336B33336363 +keygenassist(0x60000000000000006666000000006666, 0x10) = 0x63D06373D06363636333337333336363 +keygenassist(0x60000000000000006666000000006666, 0x38) = 0x63D0635BD06363636333335B33336363 +keygenassist(0x60000000000000006666000000006666, 0x4F) = 0x63D0632CD06363636333332C33336363 +keygenassist(0x60000000000000006666000000006666, 0xFF) = 0x63D0639CD06363636333339C33336363 +imc (0x60000000000000006666000000006666) = 0x768DD64D0000000029E54F834F8329E5 +pclmul(0x60000000000000006666000000006666, 0x00) = 0x15F5E01FFFE00A15F5F5FFE01FE015EA +pclmul(0x60000000000000006666000000006666, 0x01) = 0x15D3330A39331FD326E039330A0015EA +pclmul(0x60000000000000006666000000006666, 0x10) = 0x14AAAAB4AAAAB4B4A000000000000000 +pclmul(0x60000000000000006666000000006666, 0xFF) = 0x148E14B48E14B4B4A000000000000000 +enc (0x70000000000000007777000000007777, 0x00000000000000000000000000000000) = 0x63C2F55454C2F5F563636363A6A3C766 +enclast(0x70000000000000007777000000007777, 0x00000000000000000000000000000000) = 0x63F5F563F563636363636363516363F5 +dec (0x70000000000000007777000000007777, 0x00000000000000000000000000000000) = 0xB41F14EF0FB392ACEFB41F1459A909F9 +declast(0x70000000000000007777000000007777, 0x00000000000000000000000000000000) = 0x52025252D05252525252025202525202 +enc (0x70000000000000007777000000007777, 0x10000000000000001111000000001111) = 0x73C2F55454C2F5F572726363A6A3D677 +enclast(0x70000000000000007777000000007777, 0x10000000000000001111000000001111) = 0x73F5F563F563636372726363516372E4 +dec (0x70000000000000007777000000007777, 0x10000000000000001111000000001111) = 0xA41F14EF0FB392ACFEA51F1459A918E8 +declast(0x70000000000000007777000000007777, 0x10000000000000001111000000001111) = 0x42025252D05252524343025202524313 +enc (0x70000000000000007777000000007777, 0x20000000000000002222000000002222) = 0x43C2F55454C2F5F541416363A6A3E544 +enclast(0x70000000000000007777000000007777, 0x20000000000000002222000000002222) = 0x43F5F563F563636341416363516341D7 +dec (0x70000000000000007777000000007777, 0x20000000000000002222000000002222) = 0x941F14EF0FB392ACCD961F1459A92BDB +declast(0x70000000000000007777000000007777, 0x20000000000000002222000000002222) = 0x72025252D05252527070025202527020 +enc (0x70000000000000007777000000007777, 0x30000000000000003333000000003333) = 0x53C2F55454C2F5F550506363A6A3F455 +enclast(0x70000000000000007777000000007777, 0x30000000000000003333000000003333) = 0x53F5F563F563636350506363516350C6 +dec (0x70000000000000007777000000007777, 0x30000000000000003333000000003333) = 0x841F14EF0FB392ACDC871F1459A93ACA +declast(0x70000000000000007777000000007777, 0x30000000000000003333000000003333) = 0x62025252D05252526161025202526131 +enc (0x70000000000000007777000000007777, 0x40000000000000004444000000004444) = 0x23C2F55454C2F5F527276363A6A38322 +enclast(0x70000000000000007777000000007777, 0x40000000000000004444000000004444) = 0x23F5F563F563636327276363516327B1 +dec (0x70000000000000007777000000007777, 0x40000000000000004444000000004444) = 0xF41F14EF0FB392ACABF01F1459A94DBD +declast(0x70000000000000007777000000007777, 0x40000000000000004444000000004444) = 0x12025252D05252521616025202521646 +enc (0x70000000000000007777000000007777, 0x50000000000000005555000000005555) = 0x33C2F55454C2F5F536366363A6A39233 +enclast(0x70000000000000007777000000007777, 0x50000000000000005555000000005555) = 0x33F5F563F563636336366363516336A0 +dec (0x70000000000000007777000000007777, 0x50000000000000005555000000005555) = 0xE41F14EF0FB392ACBAE11F1459A95CAC +declast(0x70000000000000007777000000007777, 0x50000000000000005555000000005555) = 0x02025252D05252520707025202520757 +enc (0x70000000000000007777000000007777, 0x60000000000000006666000000006666) = 0x03C2F55454C2F5F505056363A6A3A100 +enclast(0x70000000000000007777000000007777, 0x60000000000000006666000000006666) = 0x03F5F563F56363630505636351630593 +dec (0x70000000000000007777000000007777, 0x60000000000000006666000000006666) = 0xD41F14EF0FB392AC89D21F1459A96F9F +declast(0x70000000000000007777000000007777, 0x60000000000000006666000000006666) = 0x32025252D05252523434025202523464 +enc (0x70000000000000007777000000007777, 0x70000000000000007777000000007777) = 0x13C2F55454C2F5F514146363A6A3B011 +enclast(0x70000000000000007777000000007777, 0x70000000000000007777000000007777) = 0x13F5F563F56363631414636351631482 +dec (0x70000000000000007777000000007777, 0x70000000000000007777000000007777) = 0xC41F14EF0FB392AC98C31F1459A97E8E +declast(0x70000000000000007777000000007777, 0x70000000000000007777000000007777) = 0x22025252D05252522525025202522575 +enc (0x70000000000000007777000000007777, 0x80000000000000008888000000008888) = 0xE3C2F55454C2F5F5EBEB6363A6A34FEE +enclast(0x70000000000000007777000000007777, 0x80000000000000008888000000008888) = 0xE3F5F563F5636363EBEB63635163EB7D +dec (0x70000000000000007777000000007777, 0x80000000000000008888000000008888) = 0x341F14EF0FB392AC673C1F1459A98171 +declast(0x70000000000000007777000000007777, 0x80000000000000008888000000008888) = 0xD2025252D0525252DADA02520252DA8A +enc (0x70000000000000007777000000007777, 0x90000000000000009999000000009999) = 0xF3C2F55454C2F5F5FAFA6363A6A35EFF +enclast(0x70000000000000007777000000007777, 0x90000000000000009999000000009999) = 0xF3F5F563F5636363FAFA63635163FA6C +dec (0x70000000000000007777000000007777, 0x90000000000000009999000000009999) = 0x241F14EF0FB392AC762D1F1459A99060 +declast(0x70000000000000007777000000007777, 0x90000000000000009999000000009999) = 0xC2025252D0525252CBCB02520252CB9B +enc (0x70000000000000007777000000007777, 0xA000000000000000AAAA00000000AAAA) = 0xC3C2F55454C2F5F5C9C96363A6A36DCC +enclast(0x70000000000000007777000000007777, 0xA000000000000000AAAA00000000AAAA) = 0xC3F5F563F5636363C9C963635163C95F +dec (0x70000000000000007777000000007777, 0xA000000000000000AAAA00000000AAAA) = 0x141F14EF0FB392AC451E1F1459A9A353 +declast(0x70000000000000007777000000007777, 0xA000000000000000AAAA00000000AAAA) = 0xF2025252D0525252F8F802520252F8A8 +enc (0x70000000000000007777000000007777, 0xB000000000000000BBBB00000000BBBB) = 0xD3C2F55454C2F5F5D8D86363A6A37CDD +enclast(0x70000000000000007777000000007777, 0xB000000000000000BBBB00000000BBBB) = 0xD3F5F563F5636363D8D863635163D84E +dec (0x70000000000000007777000000007777, 0xB000000000000000BBBB00000000BBBB) = 0x041F14EF0FB392AC540F1F1459A9B242 +declast(0x70000000000000007777000000007777, 0xB000000000000000BBBB00000000BBBB) = 0xE2025252D0525252E9E902520252E9B9 +enc (0x70000000000000007777000000007777, 0xC000000000000000CCCC00000000CCCC) = 0xA3C2F55454C2F5F5AFAF6363A6A30BAA +enclast(0x70000000000000007777000000007777, 0xC000000000000000CCCC00000000CCCC) = 0xA3F5F563F5636363AFAF63635163AF39 +dec (0x70000000000000007777000000007777, 0xC000000000000000CCCC00000000CCCC) = 0x741F14EF0FB392AC23781F1459A9C535 +declast(0x70000000000000007777000000007777, 0xC000000000000000CCCC00000000CCCC) = 0x92025252D05252529E9E025202529ECE +enc (0x70000000000000007777000000007777, 0xD000000000000000DDDD00000000DDDD) = 0xB3C2F55454C2F5F5BEBE6363A6A31ABB +enclast(0x70000000000000007777000000007777, 0xD000000000000000DDDD00000000DDDD) = 0xB3F5F563F5636363BEBE63635163BE28 +dec (0x70000000000000007777000000007777, 0xD000000000000000DDDD00000000DDDD) = 0x641F14EF0FB392AC32691F1459A9D424 +declast(0x70000000000000007777000000007777, 0xD000000000000000DDDD00000000DDDD) = 0x82025252D05252528F8F025202528FDF +enc (0x70000000000000007777000000007777, 0xE000000000000000EEEE00000000EEEE) = 0x83C2F55454C2F5F58D8D6363A6A32988 +enclast(0x70000000000000007777000000007777, 0xE000000000000000EEEE00000000EEEE) = 0x83F5F563F56363638D8D636351638D1B +dec (0x70000000000000007777000000007777, 0xE000000000000000EEEE00000000EEEE) = 0x541F14EF0FB392AC015A1F1459A9E717 +declast(0x70000000000000007777000000007777, 0xE000000000000000EEEE00000000EEEE) = 0xB2025252D0525252BCBC02520252BCEC +enc (0x70000000000000007777000000007777, 0xF000000000000000FFFF00000000FFFF) = 0x93C2F55454C2F5F59C9C6363A6A33899 +enclast(0x70000000000000007777000000007777, 0xF000000000000000FFFF00000000FFFF) = 0x93F5F563F56363639C9C636351639C0A +dec (0x70000000000000007777000000007777, 0xF000000000000000FFFF00000000FFFF) = 0x441F14EF0FB392AC104B1F1459A9F606 +declast(0x70000000000000007777000000007777, 0xF000000000000000FFFF00000000FFFF) = 0xA2025252D0525252ADAD02520252ADFD +keygenassist(0x70000000000000007777000000007777, 0x00) = 0x635163635163636363F5F563F5F56363 +keygenassist(0x70000000000000007777000000007777, 0x01) = 0x635163625163636363F5F562F5F56363 +keygenassist(0x70000000000000007777000000007777, 0x02) = 0x635163615163636363F5F561F5F56363 +keygenassist(0x70000000000000007777000000007777, 0x04) = 0x635163675163636363F5F567F5F56363 +keygenassist(0x70000000000000007777000000007777, 0x08) = 0x6351636B5163636363F5F56BF5F56363 +keygenassist(0x70000000000000007777000000007777, 0x10) = 0x635163735163636363F5F573F5F56363 +keygenassist(0x70000000000000007777000000007777, 0x38) = 0x6351635B5163636363F5F55BF5F56363 +keygenassist(0x70000000000000007777000000007777, 0x4F) = 0x6351632C5163636363F5F52CF5F56363 +keygenassist(0x70000000000000007777000000007777, 0xFF) = 0x6351639C5163636363F5F59CF5F56363 +imc (0x70000000000000007777000000007777) = 0x963D06DD000000005EB029C729C75EB0 +pclmul(0x70000000000000007777000000007777, 0x00) = 0x1384C23DFFC22E46D184FFC23DC213B9 +pclmul(0x70000000000000007777000000007777, 0x01) = 0x13B0777E09776DB064C709777E0013B9 +pclmul(0x70000000000000007777000000007777, 0x10) = 0x12BC9CA2BC9CA2829000000000000000 +pclmul(0x70000000000000007777000000007777, 0xFF) = 0x128B62828B6282829000000000000000 +enc (0x80000000000000008888000000008888, 0x00000000000000000000000000000000) = 0x6391C4363691C4C463636363D62D6A98 +enclast(0x80000000000000008888000000008888, 0x00000000000000000000000000000000) = 0x63C4C463C463636363636363CD6363C4 +dec (0x80000000000000008888000000008888, 0x00000000000000000000000000000000) = 0xE58874DC5487EC57DCE58874AEFA6B3F +declast(0x80000000000000008888000000008888, 0x00000000000000000000000000000000) = 0x529752523A5252525252975297525297 +enc (0x80000000000000008888000000008888, 0x10000000000000001111000000001111) = 0x7391C4363691C4C472726363D62D7B89 +enclast(0x80000000000000008888000000008888, 0x10000000000000001111000000001111) = 0x73C4C463C463636372726363CD6372D5 +dec (0x80000000000000008888000000008888, 0x10000000000000001111000000001111) = 0xF58874DC5487EC57CDF48874AEFA7A2E +declast(0x80000000000000008888000000008888, 0x10000000000000001111000000001111) = 0x429752523A5252524343975297524386 +enc (0x80000000000000008888000000008888, 0x20000000000000002222000000002222) = 0x4391C4363691C4C441416363D62D48BA +enclast(0x80000000000000008888000000008888, 0x20000000000000002222000000002222) = 0x43C4C463C463636341416363CD6341E6 +dec (0x80000000000000008888000000008888, 0x20000000000000002222000000002222) = 0xC58874DC5487EC57FEC78874AEFA491D +declast(0x80000000000000008888000000008888, 0x20000000000000002222000000002222) = 0x729752523A52525270709752975270B5 +enc (0x80000000000000008888000000008888, 0x30000000000000003333000000003333) = 0x5391C4363691C4C450506363D62D59AB +enclast(0x80000000000000008888000000008888, 0x30000000000000003333000000003333) = 0x53C4C463C463636350506363CD6350F7 +dec (0x80000000000000008888000000008888, 0x30000000000000003333000000003333) = 0xD58874DC5487EC57EFD68874AEFA580C +declast(0x80000000000000008888000000008888, 0x30000000000000003333000000003333) = 0x629752523A52525261619752975261A4 +enc (0x80000000000000008888000000008888, 0x40000000000000004444000000004444) = 0x2391C4363691C4C427276363D62D2EDC +enclast(0x80000000000000008888000000008888, 0x40000000000000004444000000004444) = 0x23C4C463C463636327276363CD632780 +dec (0x80000000000000008888000000008888, 0x40000000000000004444000000004444) = 0xA58874DC5487EC5798A18874AEFA2F7B +declast(0x80000000000000008888000000008888, 0x40000000000000004444000000004444) = 0x129752523A52525216169752975216D3 +enc (0x80000000000000008888000000008888, 0x50000000000000005555000000005555) = 0x3391C4363691C4C436366363D62D3FCD +enclast(0x80000000000000008888000000008888, 0x50000000000000005555000000005555) = 0x33C4C463C463636336366363CD633691 +dec (0x80000000000000008888000000008888, 0x50000000000000005555000000005555) = 0xB58874DC5487EC5789B08874AEFA3E6A +declast(0x80000000000000008888000000008888, 0x50000000000000005555000000005555) = 0x029752523A52525207079752975207C2 +enc (0x80000000000000008888000000008888, 0x60000000000000006666000000006666) = 0x0391C4363691C4C405056363D62D0CFE +enclast(0x80000000000000008888000000008888, 0x60000000000000006666000000006666) = 0x03C4C463C463636305056363CD6305A2 +dec (0x80000000000000008888000000008888, 0x60000000000000006666000000006666) = 0x858874DC5487EC57BA838874AEFA0D59 +declast(0x80000000000000008888000000008888, 0x60000000000000006666000000006666) = 0x329752523A52525234349752975234F1 +enc (0x80000000000000008888000000008888, 0x70000000000000007777000000007777) = 0x1391C4363691C4C414146363D62D1DEF +enclast(0x80000000000000008888000000008888, 0x70000000000000007777000000007777) = 0x13C4C463C463636314146363CD6314B3 +dec (0x80000000000000008888000000008888, 0x70000000000000007777000000007777) = 0x958874DC5487EC57AB928874AEFA1C48 +declast(0x80000000000000008888000000008888, 0x70000000000000007777000000007777) = 0x229752523A52525225259752975225E0 +enc (0x80000000000000008888000000008888, 0x80000000000000008888000000008888) = 0xE391C4363691C4C4EBEB6363D62DE210 +enclast(0x80000000000000008888000000008888, 0x80000000000000008888000000008888) = 0xE3C4C463C4636363EBEB6363CD63EB4C +dec (0x80000000000000008888000000008888, 0x80000000000000008888000000008888) = 0x658874DC5487EC57546D8874AEFAE3B7 +declast(0x80000000000000008888000000008888, 0x80000000000000008888000000008888) = 0xD29752523A525252DADA97529752DA1F +enc (0x80000000000000008888000000008888, 0x90000000000000009999000000009999) = 0xF391C4363691C4C4FAFA6363D62DF301 +enclast(0x80000000000000008888000000008888, 0x90000000000000009999000000009999) = 0xF3C4C463C4636363FAFA6363CD63FA5D +dec (0x80000000000000008888000000008888, 0x90000000000000009999000000009999) = 0x758874DC5487EC57457C8874AEFAF2A6 +declast(0x80000000000000008888000000008888, 0x90000000000000009999000000009999) = 0xC29752523A525252CBCB97529752CB0E +enc (0x80000000000000008888000000008888, 0xA000000000000000AAAA00000000AAAA) = 0xC391C4363691C4C4C9C96363D62DC032 +enclast(0x80000000000000008888000000008888, 0xA000000000000000AAAA00000000AAAA) = 0xC3C4C463C4636363C9C96363CD63C96E +dec (0x80000000000000008888000000008888, 0xA000000000000000AAAA00000000AAAA) = 0x458874DC5487EC57764F8874AEFAC195 +declast(0x80000000000000008888000000008888, 0xA000000000000000AAAA00000000AAAA) = 0xF29752523A525252F8F897529752F83D +enc (0x80000000000000008888000000008888, 0xB000000000000000BBBB00000000BBBB) = 0xD391C4363691C4C4D8D86363D62DD123 +enclast(0x80000000000000008888000000008888, 0xB000000000000000BBBB00000000BBBB) = 0xD3C4C463C4636363D8D86363CD63D87F +dec (0x80000000000000008888000000008888, 0xB000000000000000BBBB00000000BBBB) = 0x558874DC5487EC57675E8874AEFAD084 +declast(0x80000000000000008888000000008888, 0xB000000000000000BBBB00000000BBBB) = 0xE29752523A525252E9E997529752E92C +enc (0x80000000000000008888000000008888, 0xC000000000000000CCCC00000000CCCC) = 0xA391C4363691C4C4AFAF6363D62DA654 +enclast(0x80000000000000008888000000008888, 0xC000000000000000CCCC00000000CCCC) = 0xA3C4C463C4636363AFAF6363CD63AF08 +dec (0x80000000000000008888000000008888, 0xC000000000000000CCCC00000000CCCC) = 0x258874DC5487EC5710298874AEFAA7F3 +declast(0x80000000000000008888000000008888, 0xC000000000000000CCCC00000000CCCC) = 0x929752523A5252529E9E975297529E5B +enc (0x80000000000000008888000000008888, 0xD000000000000000DDDD00000000DDDD) = 0xB391C4363691C4C4BEBE6363D62DB745 +enclast(0x80000000000000008888000000008888, 0xD000000000000000DDDD00000000DDDD) = 0xB3C4C463C4636363BEBE6363CD63BE19 +dec (0x80000000000000008888000000008888, 0xD000000000000000DDDD00000000DDDD) = 0x358874DC5487EC5701388874AEFAB6E2 +declast(0x80000000000000008888000000008888, 0xD000000000000000DDDD00000000DDDD) = 0x829752523A5252528F8F975297528F4A +enc (0x80000000000000008888000000008888, 0xE000000000000000EEEE00000000EEEE) = 0x8391C4363691C4C48D8D6363D62D8476 +enclast(0x80000000000000008888000000008888, 0xE000000000000000EEEE00000000EEEE) = 0x83C4C463C46363638D8D6363CD638D2A +dec (0x80000000000000008888000000008888, 0xE000000000000000EEEE00000000EEEE) = 0x058874DC5487EC57320B8874AEFA85D1 +declast(0x80000000000000008888000000008888, 0xE000000000000000EEEE00000000EEEE) = 0xB29752523A525252BCBC97529752BC79 +enc (0x80000000000000008888000000008888, 0xF000000000000000FFFF00000000FFFF) = 0x9391C4363691C4C49C9C6363D62D9567 +enclast(0x80000000000000008888000000008888, 0xF000000000000000FFFF00000000FFFF) = 0x93C4C463C46363639C9C6363CD639C3B +dec (0x80000000000000008888000000008888, 0xF000000000000000FFFF00000000FFFF) = 0x158874DC5487EC57231A8874AEFA94C0 +declast(0x80000000000000008888000000008888, 0xF000000000000000FFFF00000000FFFF) = 0xA29752523A525252ADAD97529752AD68 +keygenassist(0x80000000000000008888000000008888, 0x00) = 0x63CD6363CD63636363C4C463C4C46363 +keygenassist(0x80000000000000008888000000008888, 0x01) = 0x63CD6362CD63636363C4C462C4C46363 +keygenassist(0x80000000000000008888000000008888, 0x02) = 0x63CD6361CD63636363C4C461C4C46363 +keygenassist(0x80000000000000008888000000008888, 0x04) = 0x63CD6367CD63636363C4C467C4C46363 +keygenassist(0x80000000000000008888000000008888, 0x08) = 0x63CD636BCD63636363C4C46BC4C46363 +keygenassist(0x80000000000000008888000000008888, 0x10) = 0x63CD6373CD63636363C4C473C4C46363 +keygenassist(0x80000000000000008888000000008888, 0x38) = 0x63CD635BCD63636363C4C45BC4C46363 +keygenassist(0x80000000000000008888000000008888, 0x4F) = 0x63CD632CCD63636363C4C42CC4C46363 +keygenassist(0x80000000000000008888000000008888, 0xFF) = 0x63CD639CCD63636363C4C49CC4C46363 +imc (0x80000000000000008888000000008888) = 0x41F7DAEC00000000959E1D161D16959E +pclmul(0x80000000000000008888000000008888, 0x00) = 0x32CEB856EEB864768ACEEEB856B83298 +pclmul(0x80000000000000008888000000008888, 0x01) = 0x32CA2270522242CA10E8522270003298 +pclmul(0x80000000000000008888000000008888, 0x10) = 0x31E26231E26231B18000000000000000 +pclmul(0x80000000000000008888000000008888, 0xFF) = 0x31E6B1B1E6B1B1B18000000000000000 +enc (0x90000000000000009999000000009999, 0x00000000000000000000000000000000) = 0x63EFEE6262EFEEEE63636363E9EBED61 +enclast(0x90000000000000009999000000009999, 0x00000000000000000000000000000000) = 0x63EEEE63EE63636363636363606363EE +dec (0x90000000000000009999000000009999, 0x00000000000000000000000000000000) = 0xD6AA9B4C867FD1EC4CD6AA9B6385C82E +declast(0x90000000000000009999000000009999, 0x00000000000000000000000000000000) = 0x52F95252965252525252F952F95252F9 +enc (0x90000000000000009999000000009999, 0x10000000000000001111000000001111) = 0x73EFEE6262EFEEEE72726363E9EBFC70 +enclast(0x90000000000000009999000000009999, 0x10000000000000001111000000001111) = 0x73EEEE63EE63636372726363606372FF +dec (0x90000000000000009999000000009999, 0x10000000000000001111000000001111) = 0xC6AA9B4C867FD1EC5DC7AA9B6385D93F +declast(0x90000000000000009999000000009999, 0x10000000000000001111000000001111) = 0x42F95252965252524343F952F95243E8 +enc (0x90000000000000009999000000009999, 0x20000000000000002222000000002222) = 0x43EFEE6262EFEEEE41416363E9EBCF43 +enclast(0x90000000000000009999000000009999, 0x20000000000000002222000000002222) = 0x43EEEE63EE63636341416363606341CC +dec (0x90000000000000009999000000009999, 0x20000000000000002222000000002222) = 0xF6AA9B4C867FD1EC6EF4AA9B6385EA0C +declast(0x90000000000000009999000000009999, 0x20000000000000002222000000002222) = 0x72F95252965252527070F952F95270DB +enc (0x90000000000000009999000000009999, 0x30000000000000003333000000003333) = 0x53EFEE6262EFEEEE50506363E9EBDE52 +enclast(0x90000000000000009999000000009999, 0x30000000000000003333000000003333) = 0x53EEEE63EE63636350506363606350DD +dec (0x90000000000000009999000000009999, 0x30000000000000003333000000003333) = 0xE6AA9B4C867FD1EC7FE5AA9B6385FB1D +declast(0x90000000000000009999000000009999, 0x30000000000000003333000000003333) = 0x62F95252965252526161F952F95261CA +enc (0x90000000000000009999000000009999, 0x40000000000000004444000000004444) = 0x23EFEE6262EFEEEE27276363E9EBA925 +enclast(0x90000000000000009999000000009999, 0x40000000000000004444000000004444) = 0x23EEEE63EE63636327276363606327AA +dec (0x90000000000000009999000000009999, 0x40000000000000004444000000004444) = 0x96AA9B4C867FD1EC0892AA9B63858C6A +declast(0x90000000000000009999000000009999, 0x40000000000000004444000000004444) = 0x12F95252965252521616F952F95216BD +enc (0x90000000000000009999000000009999, 0x50000000000000005555000000005555) = 0x33EFEE6262EFEEEE36366363E9EBB834 +enclast(0x90000000000000009999000000009999, 0x50000000000000005555000000005555) = 0x33EEEE63EE63636336366363606336BB +dec (0x90000000000000009999000000009999, 0x50000000000000005555000000005555) = 0x86AA9B4C867FD1EC1983AA9B63859D7B +declast(0x90000000000000009999000000009999, 0x50000000000000005555000000005555) = 0x02F95252965252520707F952F95207AC +enc (0x90000000000000009999000000009999, 0x60000000000000006666000000006666) = 0x03EFEE6262EFEEEE05056363E9EB8B07 +enclast(0x90000000000000009999000000009999, 0x60000000000000006666000000006666) = 0x03EEEE63EE6363630505636360630588 +dec (0x90000000000000009999000000009999, 0x60000000000000006666000000006666) = 0xB6AA9B4C867FD1EC2AB0AA9B6385AE48 +declast(0x90000000000000009999000000009999, 0x60000000000000006666000000006666) = 0x32F95252965252523434F952F952349F +enc (0x90000000000000009999000000009999, 0x70000000000000007777000000007777) = 0x13EFEE6262EFEEEE14146363E9EB9A16 +enclast(0x90000000000000009999000000009999, 0x70000000000000007777000000007777) = 0x13EEEE63EE6363631414636360631499 +dec (0x90000000000000009999000000009999, 0x70000000000000007777000000007777) = 0xA6AA9B4C867FD1EC3BA1AA9B6385BF59 +declast(0x90000000000000009999000000009999, 0x70000000000000007777000000007777) = 0x22F95252965252522525F952F952258E +enc (0x90000000000000009999000000009999, 0x80000000000000008888000000008888) = 0xE3EFEE6262EFEEEEEBEB6363E9EB65E9 +enclast(0x90000000000000009999000000009999, 0x80000000000000008888000000008888) = 0xE3EEEE63EE636363EBEB63636063EB66 +dec (0x90000000000000009999000000009999, 0x80000000000000008888000000008888) = 0x56AA9B4C867FD1ECC45EAA9B638540A6 +declast(0x90000000000000009999000000009999, 0x80000000000000008888000000008888) = 0xD2F9525296525252DADAF952F952DA71 +enc (0x90000000000000009999000000009999, 0x90000000000000009999000000009999) = 0xF3EFEE6262EFEEEEFAFA6363E9EB74F8 +enclast(0x90000000000000009999000000009999, 0x90000000000000009999000000009999) = 0xF3EEEE63EE636363FAFA63636063FA77 +dec (0x90000000000000009999000000009999, 0x90000000000000009999000000009999) = 0x46AA9B4C867FD1ECD54FAA9B638551B7 +declast(0x90000000000000009999000000009999, 0x90000000000000009999000000009999) = 0xC2F9525296525252CBCBF952F952CB60 +enc (0x90000000000000009999000000009999, 0xA000000000000000AAAA00000000AAAA) = 0xC3EFEE6262EFEEEEC9C96363E9EB47CB +enclast(0x90000000000000009999000000009999, 0xA000000000000000AAAA00000000AAAA) = 0xC3EEEE63EE636363C9C963636063C944 +dec (0x90000000000000009999000000009999, 0xA000000000000000AAAA00000000AAAA) = 0x76AA9B4C867FD1ECE67CAA9B63856284 +declast(0x90000000000000009999000000009999, 0xA000000000000000AAAA00000000AAAA) = 0xF2F9525296525252F8F8F952F952F853 +enc (0x90000000000000009999000000009999, 0xB000000000000000BBBB00000000BBBB) = 0xD3EFEE6262EFEEEED8D86363E9EB56DA +enclast(0x90000000000000009999000000009999, 0xB000000000000000BBBB00000000BBBB) = 0xD3EEEE63EE636363D8D863636063D855 +dec (0x90000000000000009999000000009999, 0xB000000000000000BBBB00000000BBBB) = 0x66AA9B4C867FD1ECF76DAA9B63857395 +declast(0x90000000000000009999000000009999, 0xB000000000000000BBBB00000000BBBB) = 0xE2F9525296525252E9E9F952F952E942 +enc (0x90000000000000009999000000009999, 0xC000000000000000CCCC00000000CCCC) = 0xA3EFEE6262EFEEEEAFAF6363E9EB21AD +enclast(0x90000000000000009999000000009999, 0xC000000000000000CCCC00000000CCCC) = 0xA3EEEE63EE636363AFAF63636063AF22 +dec (0x90000000000000009999000000009999, 0xC000000000000000CCCC00000000CCCC) = 0x16AA9B4C867FD1EC801AAA9B638504E2 +declast(0x90000000000000009999000000009999, 0xC000000000000000CCCC00000000CCCC) = 0x92F95252965252529E9EF952F9529E35 +enc (0x90000000000000009999000000009999, 0xD000000000000000DDDD00000000DDDD) = 0xB3EFEE6262EFEEEEBEBE6363E9EB30BC +enclast(0x90000000000000009999000000009999, 0xD000000000000000DDDD00000000DDDD) = 0xB3EEEE63EE636363BEBE63636063BE33 +dec (0x90000000000000009999000000009999, 0xD000000000000000DDDD00000000DDDD) = 0x06AA9B4C867FD1EC910BAA9B638515F3 +declast(0x90000000000000009999000000009999, 0xD000000000000000DDDD00000000DDDD) = 0x82F95252965252528F8FF952F9528F24 +enc (0x90000000000000009999000000009999, 0xE000000000000000EEEE00000000EEEE) = 0x83EFEE6262EFEEEE8D8D6363E9EB038F +enclast(0x90000000000000009999000000009999, 0xE000000000000000EEEE00000000EEEE) = 0x83EEEE63EE6363638D8D636360638D00 +dec (0x90000000000000009999000000009999, 0xE000000000000000EEEE00000000EEEE) = 0x36AA9B4C867FD1ECA238AA9B638526C0 +declast(0x90000000000000009999000000009999, 0xE000000000000000EEEE00000000EEEE) = 0xB2F9525296525252BCBCF952F952BC17 +enc (0x90000000000000009999000000009999, 0xF000000000000000FFFF00000000FFFF) = 0x93EFEE6262EFEEEE9C9C6363E9EB129E +enclast(0x90000000000000009999000000009999, 0xF000000000000000FFFF00000000FFFF) = 0x93EEEE63EE6363639C9C636360639C11 +dec (0x90000000000000009999000000009999, 0xF000000000000000FFFF00000000FFFF) = 0x26AA9B4C867FD1ECB329AA9B638537D1 +declast(0x90000000000000009999000000009999, 0xF000000000000000FFFF00000000FFFF) = 0xA2F9525296525252ADADF952F952AD06 +keygenassist(0x90000000000000009999000000009999, 0x00) = 0x636063636063636363EEEE63EEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x01) = 0x636063626063636363EEEE62EEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x02) = 0x636063616063636363EEEE61EEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x04) = 0x636063676063636363EEEE67EEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x08) = 0x6360636B6063636363EEEE6BEEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x10) = 0x636063736063636363EEEE73EEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x38) = 0x6360635B6063636363EEEE5BEEEE6363 +keygenassist(0x90000000000000009999000000009999, 0x4F) = 0x6360632C6063636363EEEE2CEEEE6363 +keygenassist(0x90000000000000009999000000009999, 0xFF) = 0x6360639C6063636363EEEE9CEEEE6363 +imc (0x90000000000000009999000000009999) = 0xA1470A7C00000000E2CB7B527B52E2CB +pclmul(0x90000000000000009999000000009999, 0x00) = 0x3481B54AFFB57E348181FFB54AB534CB +pclmul(0x90000000000000009999000000009999, 0x01) = 0x34CAAAAB01AA9FCA9E6001AAAB0034CB +pclmul(0x90000000000000009999000000009999, 0x10) = 0x37C999D7C999D787B000000000000000 +pclmul(0x90000000000000009999000000009999, 0xFF) = 0x3786378786378787B000000000000000 +enc (0xA000000000000000AAAA00000000AAAA, 0x00000000000000000000000000000000) = 0x6329ACE6E629ACAC6363636334322F65 +enclast(0xA000000000000000AAAA00000000AAAA, 0x00000000000000000000000000000000) = 0x63ACAC63AC63636363636363E06363AC +dec (0xA000000000000000AAAA00000000AAAA, 0x00000000000000000000000000000000) = 0xF969993984C5BBEF39F96999A2F292C2 +declast(0xA000000000000000AAAA00000000AAAA, 0x00000000000000000000000000000000) = 0x52625252475252525252625262525262 +enc (0xA000000000000000AAAA00000000AAAA, 0x10000000000000001111000000001111) = 0x7329ACE6E629ACAC7272636334323E74 +enclast(0xA000000000000000AAAA00000000AAAA, 0x10000000000000001111000000001111) = 0x73ACAC63AC63636372726363E06372BD +dec (0xA000000000000000AAAA00000000AAAA, 0x10000000000000001111000000001111) = 0xE969993984C5BBEF28E86999A2F283D3 +declast(0xA000000000000000AAAA00000000AAAA, 0x10000000000000001111000000001111) = 0x42625252475252524343625262524373 +enc (0xA000000000000000AAAA00000000AAAA, 0x20000000000000002222000000002222) = 0x4329ACE6E629ACAC4141636334320D47 +enclast(0xA000000000000000AAAA00000000AAAA, 0x20000000000000002222000000002222) = 0x43ACAC63AC63636341416363E063418E +dec (0xA000000000000000AAAA00000000AAAA, 0x20000000000000002222000000002222) = 0xD969993984C5BBEF1BDB6999A2F2B0E0 +declast(0xA000000000000000AAAA00000000AAAA, 0x20000000000000002222000000002222) = 0x72625252475252527070625262527040 +enc (0xA000000000000000AAAA00000000AAAA, 0x30000000000000003333000000003333) = 0x5329ACE6E629ACAC5050636334321C56 +enclast(0xA000000000000000AAAA00000000AAAA, 0x30000000000000003333000000003333) = 0x53ACAC63AC63636350506363E063509F +dec (0xA000000000000000AAAA00000000AAAA, 0x30000000000000003333000000003333) = 0xC969993984C5BBEF0ACA6999A2F2A1F1 +declast(0xA000000000000000AAAA00000000AAAA, 0x30000000000000003333000000003333) = 0x62625252475252526161625262526151 +enc (0xA000000000000000AAAA00000000AAAA, 0x40000000000000004444000000004444) = 0x2329ACE6E629ACAC2727636334326B21 +enclast(0xA000000000000000AAAA00000000AAAA, 0x40000000000000004444000000004444) = 0x23ACAC63AC63636327276363E06327E8 +dec (0xA000000000000000AAAA00000000AAAA, 0x40000000000000004444000000004444) = 0xB969993984C5BBEF7DBD6999A2F2D686 +declast(0xA000000000000000AAAA00000000AAAA, 0x40000000000000004444000000004444) = 0x12625252475252521616625262521626 +enc (0xA000000000000000AAAA00000000AAAA, 0x50000000000000005555000000005555) = 0x3329ACE6E629ACAC3636636334327A30 +enclast(0xA000000000000000AAAA00000000AAAA, 0x50000000000000005555000000005555) = 0x33ACAC63AC63636336366363E06336F9 +dec (0xA000000000000000AAAA00000000AAAA, 0x50000000000000005555000000005555) = 0xA969993984C5BBEF6CAC6999A2F2C797 +declast(0xA000000000000000AAAA00000000AAAA, 0x50000000000000005555000000005555) = 0x02625252475252520707625262520737 +enc (0xA000000000000000AAAA00000000AAAA, 0x60000000000000006666000000006666) = 0x0329ACE6E629ACAC0505636334324903 +enclast(0xA000000000000000AAAA00000000AAAA, 0x60000000000000006666000000006666) = 0x03ACAC63AC63636305056363E06305CA +dec (0xA000000000000000AAAA00000000AAAA, 0x60000000000000006666000000006666) = 0x9969993984C5BBEF5F9F6999A2F2F4A4 +declast(0xA000000000000000AAAA00000000AAAA, 0x60000000000000006666000000006666) = 0x32625252475252523434625262523404 +enc (0xA000000000000000AAAA00000000AAAA, 0x70000000000000007777000000007777) = 0x1329ACE6E629ACAC1414636334325812 +enclast(0xA000000000000000AAAA00000000AAAA, 0x70000000000000007777000000007777) = 0x13ACAC63AC63636314146363E06314DB +dec (0xA000000000000000AAAA00000000AAAA, 0x70000000000000007777000000007777) = 0x8969993984C5BBEF4E8E6999A2F2E5B5 +declast(0xA000000000000000AAAA00000000AAAA, 0x70000000000000007777000000007777) = 0x22625252475252522525625262522515 +enc (0xA000000000000000AAAA00000000AAAA, 0x80000000000000008888000000008888) = 0xE329ACE6E629ACACEBEB63633432A7ED +enclast(0xA000000000000000AAAA00000000AAAA, 0x80000000000000008888000000008888) = 0xE3ACAC63AC636363EBEB6363E063EB24 +dec (0xA000000000000000AAAA00000000AAAA, 0x80000000000000008888000000008888) = 0x7969993984C5BBEFB1716999A2F21A4A +declast(0xA000000000000000AAAA00000000AAAA, 0x80000000000000008888000000008888) = 0xD262525247525252DADA62526252DAEA +enc (0xA000000000000000AAAA00000000AAAA, 0x90000000000000009999000000009999) = 0xF329ACE6E629ACACFAFA63633432B6FC +enclast(0xA000000000000000AAAA00000000AAAA, 0x90000000000000009999000000009999) = 0xF3ACAC63AC636363FAFA6363E063FA35 +dec (0xA000000000000000AAAA00000000AAAA, 0x90000000000000009999000000009999) = 0x6969993984C5BBEFA0606999A2F20B5B +declast(0xA000000000000000AAAA00000000AAAA, 0x90000000000000009999000000009999) = 0xC262525247525252CBCB62526252CBFB +enc (0xA000000000000000AAAA00000000AAAA, 0xA000000000000000AAAA00000000AAAA) = 0xC329ACE6E629ACACC9C96363343285CF +enclast(0xA000000000000000AAAA00000000AAAA, 0xA000000000000000AAAA00000000AAAA) = 0xC3ACAC63AC636363C9C96363E063C906 +dec (0xA000000000000000AAAA00000000AAAA, 0xA000000000000000AAAA00000000AAAA) = 0x5969993984C5BBEF93536999A2F23868 +declast(0xA000000000000000AAAA00000000AAAA, 0xA000000000000000AAAA00000000AAAA) = 0xF262525247525252F8F862526252F8C8 +enc (0xA000000000000000AAAA00000000AAAA, 0xB000000000000000BBBB00000000BBBB) = 0xD329ACE6E629ACACD8D86363343294DE +enclast(0xA000000000000000AAAA00000000AAAA, 0xB000000000000000BBBB00000000BBBB) = 0xD3ACAC63AC636363D8D86363E063D817 +dec (0xA000000000000000AAAA00000000AAAA, 0xB000000000000000BBBB00000000BBBB) = 0x4969993984C5BBEF82426999A2F22979 +declast(0xA000000000000000AAAA00000000AAAA, 0xB000000000000000BBBB00000000BBBB) = 0xE262525247525252E9E962526252E9D9 +enc (0xA000000000000000AAAA00000000AAAA, 0xC000000000000000CCCC00000000CCCC) = 0xA329ACE6E629ACACAFAF63633432E3A9 +enclast(0xA000000000000000AAAA00000000AAAA, 0xC000000000000000CCCC00000000CCCC) = 0xA3ACAC63AC636363AFAF6363E063AF60 +dec (0xA000000000000000AAAA00000000AAAA, 0xC000000000000000CCCC00000000CCCC) = 0x3969993984C5BBEFF5356999A2F25E0E +declast(0xA000000000000000AAAA00000000AAAA, 0xC000000000000000CCCC00000000CCCC) = 0x92625252475252529E9E625262529EAE +enc (0xA000000000000000AAAA00000000AAAA, 0xD000000000000000DDDD00000000DDDD) = 0xB329ACE6E629ACACBEBE63633432F2B8 +enclast(0xA000000000000000AAAA00000000AAAA, 0xD000000000000000DDDD00000000DDDD) = 0xB3ACAC63AC636363BEBE6363E063BE71 +dec (0xA000000000000000AAAA00000000AAAA, 0xD000000000000000DDDD00000000DDDD) = 0x2969993984C5BBEFE4246999A2F24F1F +declast(0xA000000000000000AAAA00000000AAAA, 0xD000000000000000DDDD00000000DDDD) = 0x82625252475252528F8F625262528FBF +enc (0xA000000000000000AAAA00000000AAAA, 0xE000000000000000EEEE00000000EEEE) = 0x8329ACE6E629ACAC8D8D63633432C18B +enclast(0xA000000000000000AAAA00000000AAAA, 0xE000000000000000EEEE00000000EEEE) = 0x83ACAC63AC6363638D8D6363E0638D42 +dec (0xA000000000000000AAAA00000000AAAA, 0xE000000000000000EEEE00000000EEEE) = 0x1969993984C5BBEFD7176999A2F27C2C +declast(0xA000000000000000AAAA00000000AAAA, 0xE000000000000000EEEE00000000EEEE) = 0xB262525247525252BCBC62526252BC8C +enc (0xA000000000000000AAAA00000000AAAA, 0xF000000000000000FFFF00000000FFFF) = 0x9329ACE6E629ACAC9C9C63633432D09A +enclast(0xA000000000000000AAAA00000000AAAA, 0xF000000000000000FFFF00000000FFFF) = 0x93ACAC63AC6363639C9C6363E0639C53 +dec (0xA000000000000000AAAA00000000AAAA, 0xF000000000000000FFFF00000000FFFF) = 0x0969993984C5BBEFC6066999A2F26D3D +declast(0xA000000000000000AAAA00000000AAAA, 0xF000000000000000FFFF00000000FFFF) = 0xA262525247525252ADAD62526252AD9D +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x00) = 0x63E06363E063636363ACAC63ACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x01) = 0x63E06362E063636363ACAC62ACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x02) = 0x63E06361E063636363ACAC61ACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x04) = 0x63E06367E063636363ACAC67ACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x08) = 0x63E0636BE063636363ACAC6BACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x10) = 0x63E06373E063636363ACAC73ACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x38) = 0x63E0635BE063636363ACAC5BACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0x4F) = 0x63E0632CE063636363ACAC2CACAC6363 +keygenassist(0xA000000000000000AAAA00000000AAAA, 0xFF) = 0x63E0639CE063636363ACAC9CACAC6363 +imc (0xA000000000000000AAAA00000000AAAA) = 0x9A8C61D7000000007B34D19ED19E7B34 +pclmul(0xA000000000000000AAAA00000000AAAA, 0x00) = 0x3E478679FF8647C1B847FF8679863E3E +pclmul(0xA000000000000000AAAA00000000AAAA, 0x01) = 0x3E6AAAFE54AAC06A94C054AAFE003E3E +pclmul(0xA000000000000000AAAA00000000AAAA, 0x10) = 0x3DA3C3BDA3C3BDDDE000000000000000 +pclmul(0xA000000000000000AAAA00000000AAAA, 0xFF) = 0x3D8C3DDD8C3DDDDDE000000000000000 +enc (0xB000000000000000BBBB00000000BBBB, 0x00000000000000000000000000000000) = 0x63E3EA6A6AE3EAEA63636363F07D6EEE +enclast(0xB000000000000000BBBB00000000BBBB, 0x00000000000000000000000000000000) = 0x63EAEA63EA63636363636363E76363EA +dec (0xB000000000000000BBBB00000000BBBB, 0x00000000000000000000000000000000) = 0xE980AA6F9CBC75FB6FE980AA7897D43B +declast(0xB000000000000000BBBB00000000BBBB, 0x00000000000000000000000000000000) = 0x52FE5252FC5252525252FE52FE5252FE +enc (0xB000000000000000BBBB00000000BBBB, 0x10000000000000001111000000001111) = 0x73E3EA6A6AE3EAEA72726363F07D7FFF +enclast(0xB000000000000000BBBB00000000BBBB, 0x10000000000000001111000000001111) = 0x73EAEA63EA63636372726363E76372FB +dec (0xB000000000000000BBBB00000000BBBB, 0x10000000000000001111000000001111) = 0xF980AA6F9CBC75FB7EF880AA7897C52A +declast(0xB000000000000000BBBB00000000BBBB, 0x10000000000000001111000000001111) = 0x42FE5252FC5252524343FE52FE5243EF +enc (0xB000000000000000BBBB00000000BBBB, 0x20000000000000002222000000002222) = 0x43E3EA6A6AE3EAEA41416363F07D4CCC +enclast(0xB000000000000000BBBB00000000BBBB, 0x20000000000000002222000000002222) = 0x43EAEA63EA63636341416363E76341C8 +dec (0xB000000000000000BBBB00000000BBBB, 0x20000000000000002222000000002222) = 0xC980AA6F9CBC75FB4DCB80AA7897F619 +declast(0xB000000000000000BBBB00000000BBBB, 0x20000000000000002222000000002222) = 0x72FE5252FC5252527070FE52FE5270DC +enc (0xB000000000000000BBBB00000000BBBB, 0x30000000000000003333000000003333) = 0x53E3EA6A6AE3EAEA50506363F07D5DDD +enclast(0xB000000000000000BBBB00000000BBBB, 0x30000000000000003333000000003333) = 0x53EAEA63EA63636350506363E76350D9 +dec (0xB000000000000000BBBB00000000BBBB, 0x30000000000000003333000000003333) = 0xD980AA6F9CBC75FB5CDA80AA7897E708 +declast(0xB000000000000000BBBB00000000BBBB, 0x30000000000000003333000000003333) = 0x62FE5252FC5252526161FE52FE5261CD +enc (0xB000000000000000BBBB00000000BBBB, 0x40000000000000004444000000004444) = 0x23E3EA6A6AE3EAEA27276363F07D2AAA +enclast(0xB000000000000000BBBB00000000BBBB, 0x40000000000000004444000000004444) = 0x23EAEA63EA63636327276363E76327AE +dec (0xB000000000000000BBBB00000000BBBB, 0x40000000000000004444000000004444) = 0xA980AA6F9CBC75FB2BAD80AA7897907F +declast(0xB000000000000000BBBB00000000BBBB, 0x40000000000000004444000000004444) = 0x12FE5252FC5252521616FE52FE5216BA +enc (0xB000000000000000BBBB00000000BBBB, 0x50000000000000005555000000005555) = 0x33E3EA6A6AE3EAEA36366363F07D3BBB +enclast(0xB000000000000000BBBB00000000BBBB, 0x50000000000000005555000000005555) = 0x33EAEA63EA63636336366363E76336BF +dec (0xB000000000000000BBBB00000000BBBB, 0x50000000000000005555000000005555) = 0xB980AA6F9CBC75FB3ABC80AA7897816E +declast(0xB000000000000000BBBB00000000BBBB, 0x50000000000000005555000000005555) = 0x02FE5252FC5252520707FE52FE5207AB +enc (0xB000000000000000BBBB00000000BBBB, 0x60000000000000006666000000006666) = 0x03E3EA6A6AE3EAEA05056363F07D0888 +enclast(0xB000000000000000BBBB00000000BBBB, 0x60000000000000006666000000006666) = 0x03EAEA63EA63636305056363E763058C +dec (0xB000000000000000BBBB00000000BBBB, 0x60000000000000006666000000006666) = 0x8980AA6F9CBC75FB098F80AA7897B25D +declast(0xB000000000000000BBBB00000000BBBB, 0x60000000000000006666000000006666) = 0x32FE5252FC5252523434FE52FE523498 +enc (0xB000000000000000BBBB00000000BBBB, 0x70000000000000007777000000007777) = 0x13E3EA6A6AE3EAEA14146363F07D1999 +enclast(0xB000000000000000BBBB00000000BBBB, 0x70000000000000007777000000007777) = 0x13EAEA63EA63636314146363E763149D +dec (0xB000000000000000BBBB00000000BBBB, 0x70000000000000007777000000007777) = 0x9980AA6F9CBC75FB189E80AA7897A34C +declast(0xB000000000000000BBBB00000000BBBB, 0x70000000000000007777000000007777) = 0x22FE5252FC5252522525FE52FE522589 +enc (0xB000000000000000BBBB00000000BBBB, 0x80000000000000008888000000008888) = 0xE3E3EA6A6AE3EAEAEBEB6363F07DE666 +enclast(0xB000000000000000BBBB00000000BBBB, 0x80000000000000008888000000008888) = 0xE3EAEA63EA636363EBEB6363E763EB62 +dec (0xB000000000000000BBBB00000000BBBB, 0x80000000000000008888000000008888) = 0x6980AA6F9CBC75FBE76180AA78975CB3 +declast(0xB000000000000000BBBB00000000BBBB, 0x80000000000000008888000000008888) = 0xD2FE5252FC525252DADAFE52FE52DA76 +enc (0xB000000000000000BBBB00000000BBBB, 0x90000000000000009999000000009999) = 0xF3E3EA6A6AE3EAEAFAFA6363F07DF777 +enclast(0xB000000000000000BBBB00000000BBBB, 0x90000000000000009999000000009999) = 0xF3EAEA63EA636363FAFA6363E763FA73 +dec (0xB000000000000000BBBB00000000BBBB, 0x90000000000000009999000000009999) = 0x7980AA6F9CBC75FBF67080AA78974DA2 +declast(0xB000000000000000BBBB00000000BBBB, 0x90000000000000009999000000009999) = 0xC2FE5252FC525252CBCBFE52FE52CB67 +enc (0xB000000000000000BBBB00000000BBBB, 0xA000000000000000AAAA00000000AAAA) = 0xC3E3EA6A6AE3EAEAC9C96363F07DC444 +enclast(0xB000000000000000BBBB00000000BBBB, 0xA000000000000000AAAA00000000AAAA) = 0xC3EAEA63EA636363C9C96363E763C940 +dec (0xB000000000000000BBBB00000000BBBB, 0xA000000000000000AAAA00000000AAAA) = 0x4980AA6F9CBC75FBC54380AA78977E91 +declast(0xB000000000000000BBBB00000000BBBB, 0xA000000000000000AAAA00000000AAAA) = 0xF2FE5252FC525252F8F8FE52FE52F854 +enc (0xB000000000000000BBBB00000000BBBB, 0xB000000000000000BBBB00000000BBBB) = 0xD3E3EA6A6AE3EAEAD8D86363F07DD555 +enclast(0xB000000000000000BBBB00000000BBBB, 0xB000000000000000BBBB00000000BBBB) = 0xD3EAEA63EA636363D8D86363E763D851 +dec (0xB000000000000000BBBB00000000BBBB, 0xB000000000000000BBBB00000000BBBB) = 0x5980AA6F9CBC75FBD45280AA78976F80 +declast(0xB000000000000000BBBB00000000BBBB, 0xB000000000000000BBBB00000000BBBB) = 0xE2FE5252FC525252E9E9FE52FE52E945 +enc (0xB000000000000000BBBB00000000BBBB, 0xC000000000000000CCCC00000000CCCC) = 0xA3E3EA6A6AE3EAEAAFAF6363F07DA222 +enclast(0xB000000000000000BBBB00000000BBBB, 0xC000000000000000CCCC00000000CCCC) = 0xA3EAEA63EA636363AFAF6363E763AF26 +dec (0xB000000000000000BBBB00000000BBBB, 0xC000000000000000CCCC00000000CCCC) = 0x2980AA6F9CBC75FBA32580AA789718F7 +declast(0xB000000000000000BBBB00000000BBBB, 0xC000000000000000CCCC00000000CCCC) = 0x92FE5252FC5252529E9EFE52FE529E32 +enc (0xB000000000000000BBBB00000000BBBB, 0xD000000000000000DDDD00000000DDDD) = 0xB3E3EA6A6AE3EAEABEBE6363F07DB333 +enclast(0xB000000000000000BBBB00000000BBBB, 0xD000000000000000DDDD00000000DDDD) = 0xB3EAEA63EA636363BEBE6363E763BE37 +dec (0xB000000000000000BBBB00000000BBBB, 0xD000000000000000DDDD00000000DDDD) = 0x3980AA6F9CBC75FBB23480AA789709E6 +declast(0xB000000000000000BBBB00000000BBBB, 0xD000000000000000DDDD00000000DDDD) = 0x82FE5252FC5252528F8FFE52FE528F23 +enc (0xB000000000000000BBBB00000000BBBB, 0xE000000000000000EEEE00000000EEEE) = 0x83E3EA6A6AE3EAEA8D8D6363F07D8000 +enclast(0xB000000000000000BBBB00000000BBBB, 0xE000000000000000EEEE00000000EEEE) = 0x83EAEA63EA6363638D8D6363E7638D04 +dec (0xB000000000000000BBBB00000000BBBB, 0xE000000000000000EEEE00000000EEEE) = 0x0980AA6F9CBC75FB810780AA78973AD5 +declast(0xB000000000000000BBBB00000000BBBB, 0xE000000000000000EEEE00000000EEEE) = 0xB2FE5252FC525252BCBCFE52FE52BC10 +enc (0xB000000000000000BBBB00000000BBBB, 0xF000000000000000FFFF00000000FFFF) = 0x93E3EA6A6AE3EAEA9C9C6363F07D9111 +enclast(0xB000000000000000BBBB00000000BBBB, 0xF000000000000000FFFF00000000FFFF) = 0x93EAEA63EA6363639C9C6363E7639C15 +dec (0xB000000000000000BBBB00000000BBBB, 0xF000000000000000FFFF00000000FFFF) = 0x1980AA6F9CBC75FB901680AA78972BC4 +declast(0xB000000000000000BBBB00000000BBBB, 0xF000000000000000FFFF00000000FFFF) = 0xA2FE5252FC525252ADADFE52FE52AD01 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x00) = 0x63E76363E763636363EAEA63EAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x01) = 0x63E76362E763636363EAEA62EAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x02) = 0x63E76361E763636363EAEA61EAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x04) = 0x63E76367E763636363EAEA67EAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x08) = 0x63E7636BE763636363EAEA6BEAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x10) = 0x63E76373E763636363EAEA73EAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x38) = 0x63E7635BE763636363EAEA5BEAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0x4F) = 0x63E7632CE763636363EAEA2CEAEA6363 +keygenassist(0xB000000000000000BBBB00000000BBBB, 0xFF) = 0x63E7639CE763636363EAEA9CEAEA6363 +imc (0xB000000000000000BBBB00000000BBBB) = 0x7A3CB147000000000C61B7DAB7DA0C61 +pclmul(0xB000000000000000BBBB00000000BBBB, 0x00) = 0x3835E358BBE360D6DB35BBE358E3386D +pclmul(0xB000000000000000BBBB00000000BBBB, 0x01) = 0x3832336C5F3354320B015F336C00386D +pclmul(0xB000000000000000BBBB00000000BBBB, 0x10) = 0x3BB686DBB686DBEBD000000000000000 +pclmul(0xB000000000000000BBBB00000000BBBB, 0xFF) = 0x3BB12BEBB12BEBEBD000000000000000 +enc (0xC000000000000000CCCC00000000CCCC, 0x00000000000000000000000000000000) = 0x631B4B33331B4B4B63636363B23B92EA +enclast(0xC000000000000000CCCC00000000CCCC, 0x00000000000000000000000000000000) = 0x634B4B634B63636363636363BA63634B +dec (0xC000000000000000CCCC00000000CCCC, 0x00000000000000000000000000000000) = 0xA2F2486DB9DB6E416DA2F248E8779D02 +declast(0xC000000000000000CCCC00000000CCCC, 0x00000000000000000000000000000000) = 0x522752521F5252525252275227525227 +enc (0xC000000000000000CCCC00000000CCCC, 0x10000000000000001111000000001111) = 0x731B4B33331B4B4B72726363B23B83FB +enclast(0xC000000000000000CCCC00000000CCCC, 0x10000000000000001111000000001111) = 0x734B4B634B63636372726363BA63725A +dec (0xC000000000000000CCCC00000000CCCC, 0x10000000000000001111000000001111) = 0xB2F2486DB9DB6E417CB3F248E8778C13 +declast(0xC000000000000000CCCC00000000CCCC, 0x10000000000000001111000000001111) = 0x422752521F5252524343275227524336 +enc (0xC000000000000000CCCC00000000CCCC, 0x20000000000000002222000000002222) = 0x431B4B33331B4B4B41416363B23BB0C8 +enclast(0xC000000000000000CCCC00000000CCCC, 0x20000000000000002222000000002222) = 0x434B4B634B63636341416363BA634169 +dec (0xC000000000000000CCCC00000000CCCC, 0x20000000000000002222000000002222) = 0x82F2486DB9DB6E414F80F248E877BF20 +declast(0xC000000000000000CCCC00000000CCCC, 0x20000000000000002222000000002222) = 0x722752521F5252527070275227527005 +enc (0xC000000000000000CCCC00000000CCCC, 0x30000000000000003333000000003333) = 0x531B4B33331B4B4B50506363B23BA1D9 +enclast(0xC000000000000000CCCC00000000CCCC, 0x30000000000000003333000000003333) = 0x534B4B634B63636350506363BA635078 +dec (0xC000000000000000CCCC00000000CCCC, 0x30000000000000003333000000003333) = 0x92F2486DB9DB6E415E91F248E877AE31 +declast(0xC000000000000000CCCC00000000CCCC, 0x30000000000000003333000000003333) = 0x622752521F5252526161275227526114 +enc (0xC000000000000000CCCC00000000CCCC, 0x40000000000000004444000000004444) = 0x231B4B33331B4B4B27276363B23BD6AE +enclast(0xC000000000000000CCCC00000000CCCC, 0x40000000000000004444000000004444) = 0x234B4B634B63636327276363BA63270F +dec (0xC000000000000000CCCC00000000CCCC, 0x40000000000000004444000000004444) = 0xE2F2486DB9DB6E4129E6F248E877D946 +declast(0xC000000000000000CCCC00000000CCCC, 0x40000000000000004444000000004444) = 0x122752521F5252521616275227521663 +enc (0xC000000000000000CCCC00000000CCCC, 0x50000000000000005555000000005555) = 0x331B4B33331B4B4B36366363B23BC7BF +enclast(0xC000000000000000CCCC00000000CCCC, 0x50000000000000005555000000005555) = 0x334B4B634B63636336366363BA63361E +dec (0xC000000000000000CCCC00000000CCCC, 0x50000000000000005555000000005555) = 0xF2F2486DB9DB6E4138F7F248E877C857 +declast(0xC000000000000000CCCC00000000CCCC, 0x50000000000000005555000000005555) = 0x022752521F5252520707275227520772 +enc (0xC000000000000000CCCC00000000CCCC, 0x60000000000000006666000000006666) = 0x031B4B33331B4B4B05056363B23BF48C +enclast(0xC000000000000000CCCC00000000CCCC, 0x60000000000000006666000000006666) = 0x034B4B634B63636305056363BA63052D +dec (0xC000000000000000CCCC00000000CCCC, 0x60000000000000006666000000006666) = 0xC2F2486DB9DB6E410BC4F248E877FB64 +declast(0xC000000000000000CCCC00000000CCCC, 0x60000000000000006666000000006666) = 0x322752521F5252523434275227523441 +enc (0xC000000000000000CCCC00000000CCCC, 0x70000000000000007777000000007777) = 0x131B4B33331B4B4B14146363B23BE59D +enclast(0xC000000000000000CCCC00000000CCCC, 0x70000000000000007777000000007777) = 0x134B4B634B63636314146363BA63143C +dec (0xC000000000000000CCCC00000000CCCC, 0x70000000000000007777000000007777) = 0xD2F2486DB9DB6E411AD5F248E877EA75 +declast(0xC000000000000000CCCC00000000CCCC, 0x70000000000000007777000000007777) = 0x222752521F5252522525275227522550 +enc (0xC000000000000000CCCC00000000CCCC, 0x80000000000000008888000000008888) = 0xE31B4B33331B4B4BEBEB6363B23B1A62 +enclast(0xC000000000000000CCCC00000000CCCC, 0x80000000000000008888000000008888) = 0xE34B4B634B636363EBEB6363BA63EBC3 +dec (0xC000000000000000CCCC00000000CCCC, 0x80000000000000008888000000008888) = 0x22F2486DB9DB6E41E52AF248E877158A +declast(0xC000000000000000CCCC00000000CCCC, 0x80000000000000008888000000008888) = 0xD22752521F525252DADA27522752DAAF +enc (0xC000000000000000CCCC00000000CCCC, 0x90000000000000009999000000009999) = 0xF31B4B33331B4B4BFAFA6363B23B0B73 +enclast(0xC000000000000000CCCC00000000CCCC, 0x90000000000000009999000000009999) = 0xF34B4B634B636363FAFA6363BA63FAD2 +dec (0xC000000000000000CCCC00000000CCCC, 0x90000000000000009999000000009999) = 0x32F2486DB9DB6E41F43BF248E877049B +declast(0xC000000000000000CCCC00000000CCCC, 0x90000000000000009999000000009999) = 0xC22752521F525252CBCB27522752CBBE +enc (0xC000000000000000CCCC00000000CCCC, 0xA000000000000000AAAA00000000AAAA) = 0xC31B4B33331B4B4BC9C96363B23B3840 +enclast(0xC000000000000000CCCC00000000CCCC, 0xA000000000000000AAAA00000000AAAA) = 0xC34B4B634B636363C9C96363BA63C9E1 +dec (0xC000000000000000CCCC00000000CCCC, 0xA000000000000000AAAA00000000AAAA) = 0x02F2486DB9DB6E41C708F248E87737A8 +declast(0xC000000000000000CCCC00000000CCCC, 0xA000000000000000AAAA00000000AAAA) = 0xF22752521F525252F8F827522752F88D +enc (0xC000000000000000CCCC00000000CCCC, 0xB000000000000000BBBB00000000BBBB) = 0xD31B4B33331B4B4BD8D86363B23B2951 +enclast(0xC000000000000000CCCC00000000CCCC, 0xB000000000000000BBBB00000000BBBB) = 0xD34B4B634B636363D8D86363BA63D8F0 +dec (0xC000000000000000CCCC00000000CCCC, 0xB000000000000000BBBB00000000BBBB) = 0x12F2486DB9DB6E41D619F248E87726B9 +declast(0xC000000000000000CCCC00000000CCCC, 0xB000000000000000BBBB00000000BBBB) = 0xE22752521F525252E9E927522752E99C +enc (0xC000000000000000CCCC00000000CCCC, 0xC000000000000000CCCC00000000CCCC) = 0xA31B4B33331B4B4BAFAF6363B23B5E26 +enclast(0xC000000000000000CCCC00000000CCCC, 0xC000000000000000CCCC00000000CCCC) = 0xA34B4B634B636363AFAF6363BA63AF87 +dec (0xC000000000000000CCCC00000000CCCC, 0xC000000000000000CCCC00000000CCCC) = 0x62F2486DB9DB6E41A16EF248E87751CE +declast(0xC000000000000000CCCC00000000CCCC, 0xC000000000000000CCCC00000000CCCC) = 0x922752521F5252529E9E275227529EEB +enc (0xC000000000000000CCCC00000000CCCC, 0xD000000000000000DDDD00000000DDDD) = 0xB31B4B33331B4B4BBEBE6363B23B4F37 +enclast(0xC000000000000000CCCC00000000CCCC, 0xD000000000000000DDDD00000000DDDD) = 0xB34B4B634B636363BEBE6363BA63BE96 +dec (0xC000000000000000CCCC00000000CCCC, 0xD000000000000000DDDD00000000DDDD) = 0x72F2486DB9DB6E41B07FF248E87740DF +declast(0xC000000000000000CCCC00000000CCCC, 0xD000000000000000DDDD00000000DDDD) = 0x822752521F5252528F8F275227528FFA +enc (0xC000000000000000CCCC00000000CCCC, 0xE000000000000000EEEE00000000EEEE) = 0x831B4B33331B4B4B8D8D6363B23B7C04 +enclast(0xC000000000000000CCCC00000000CCCC, 0xE000000000000000EEEE00000000EEEE) = 0x834B4B634B6363638D8D6363BA638DA5 +dec (0xC000000000000000CCCC00000000CCCC, 0xE000000000000000EEEE00000000EEEE) = 0x42F2486DB9DB6E41834CF248E87773EC +declast(0xC000000000000000CCCC00000000CCCC, 0xE000000000000000EEEE00000000EEEE) = 0xB22752521F525252BCBC27522752BCC9 +enc (0xC000000000000000CCCC00000000CCCC, 0xF000000000000000FFFF00000000FFFF) = 0x931B4B33331B4B4B9C9C6363B23B6D15 +enclast(0xC000000000000000CCCC00000000CCCC, 0xF000000000000000FFFF00000000FFFF) = 0x934B4B634B6363639C9C6363BA639CB4 +dec (0xC000000000000000CCCC00000000CCCC, 0xF000000000000000FFFF00000000FFFF) = 0x52F2486DB9DB6E41925DF248E87762FD +declast(0xC000000000000000CCCC00000000CCCC, 0xF000000000000000FFFF00000000FFFF) = 0xA22752521F525252ADAD27522752ADD8 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x00) = 0x63BA6363BA636363634B4B634B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x01) = 0x63BA6362BA636363634B4B624B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x02) = 0x63BA6361BA636363634B4B614B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x04) = 0x63BA6367BA636363634B4B674B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x08) = 0x63BA636BBA636363634B4B6B4B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x10) = 0x63BA6373BA636363634B4B734B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x38) = 0x63BA635BBA636363634B4B5B4B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0x4F) = 0x63BA632CBA636363634B4B2C4B4B6363 +keygenassist(0xC000000000000000CCCC00000000CCCC, 0xFF) = 0x63BA639CBA636363634B4B9C4B4B6363 +imc (0xC000000000000000CCCC00000000CCCC) = 0xEC01B79A0000000052D19E1D9E1D52D1 +pclmul(0xC000000000000000CCCC00000000CCCC, 0x00) = 0x2BCBE01FFFE0342BCBCBFFE01FE02BD4 +pclmul(0xC000000000000000CCCC00000000CCCC, 0x01) = 0x2B8B336C5F33478B18B85F336C002BD4 +pclmul(0xC000000000000000CCCC00000000CCCC, 0x10) = 0x29777769777769694000000000000000 +pclmul(0xC000000000000000CCCC00000000CCCC, 0xFF) = 0x2933A96933A969694000000000000000 +enc (0xD000000000000000DDDD00000000DDDD, 0x00000000000000000000000000000000) = 0x639EC13C3C9EC1C163636363B8F4D22F +enclast(0xD000000000000000DDDD00000000DDDD, 0x00000000000000000000000000000000) = 0x63C1C163C163636363636363706363C1 +dec (0xD000000000000000DDDD00000000DDDD, 0x00000000000000000000000000000000) = 0x7D915027758F23EB277D9150932508BE +declast(0xD000000000000000DDDD00000000DDDD, 0x00000000000000000000000000000000) = 0x52C95252605252525252C952C95252C9 +enc (0xD000000000000000DDDD00000000DDDD, 0x10000000000000001111000000001111) = 0x739EC13C3C9EC1C172726363B8F4C33E +enclast(0xD000000000000000DDDD00000000DDDD, 0x10000000000000001111000000001111) = 0x73C1C163C163636372726363706372D0 +dec (0xD000000000000000DDDD00000000DDDD, 0x10000000000000001111000000001111) = 0x6D915027758F23EB366C9150932519AF +declast(0xD000000000000000DDDD00000000DDDD, 0x10000000000000001111000000001111) = 0x42C95252605252524343C952C95243D8 +enc (0xD000000000000000DDDD00000000DDDD, 0x20000000000000002222000000002222) = 0x439EC13C3C9EC1C141416363B8F4F00D +enclast(0xD000000000000000DDDD00000000DDDD, 0x20000000000000002222000000002222) = 0x43C1C163C163636341416363706341E3 +dec (0xD000000000000000DDDD00000000DDDD, 0x20000000000000002222000000002222) = 0x5D915027758F23EB055F915093252A9C +declast(0xD000000000000000DDDD00000000DDDD, 0x20000000000000002222000000002222) = 0x72C95252605252527070C952C95270EB +enc (0xD000000000000000DDDD00000000DDDD, 0x30000000000000003333000000003333) = 0x539EC13C3C9EC1C150506363B8F4E11C +enclast(0xD000000000000000DDDD00000000DDDD, 0x30000000000000003333000000003333) = 0x53C1C163C163636350506363706350F2 +dec (0xD000000000000000DDDD00000000DDDD, 0x30000000000000003333000000003333) = 0x4D915027758F23EB144E915093253B8D +declast(0xD000000000000000DDDD00000000DDDD, 0x30000000000000003333000000003333) = 0x62C95252605252526161C952C95261FA +enc (0xD000000000000000DDDD00000000DDDD, 0x40000000000000004444000000004444) = 0x239EC13C3C9EC1C127276363B8F4966B +enclast(0xD000000000000000DDDD00000000DDDD, 0x40000000000000004444000000004444) = 0x23C1C163C16363632727636370632785 +dec (0xD000000000000000DDDD00000000DDDD, 0x40000000000000004444000000004444) = 0x3D915027758F23EB6339915093254CFA +declast(0xD000000000000000DDDD00000000DDDD, 0x40000000000000004444000000004444) = 0x12C95252605252521616C952C952168D +enc (0xD000000000000000DDDD00000000DDDD, 0x50000000000000005555000000005555) = 0x339EC13C3C9EC1C136366363B8F4877A +enclast(0xD000000000000000DDDD00000000DDDD, 0x50000000000000005555000000005555) = 0x33C1C163C16363633636636370633694 +dec (0xD000000000000000DDDD00000000DDDD, 0x50000000000000005555000000005555) = 0x2D915027758F23EB7228915093255DEB +declast(0xD000000000000000DDDD00000000DDDD, 0x50000000000000005555000000005555) = 0x02C95252605252520707C952C952079C +enc (0xD000000000000000DDDD00000000DDDD, 0x60000000000000006666000000006666) = 0x039EC13C3C9EC1C105056363B8F4B449 +enclast(0xD000000000000000DDDD00000000DDDD, 0x60000000000000006666000000006666) = 0x03C1C163C163636305056363706305A7 +dec (0xD000000000000000DDDD00000000DDDD, 0x60000000000000006666000000006666) = 0x1D915027758F23EB411B915093256ED8 +declast(0xD000000000000000DDDD00000000DDDD, 0x60000000000000006666000000006666) = 0x32C95252605252523434C952C95234AF +enc (0xD000000000000000DDDD00000000DDDD, 0x70000000000000007777000000007777) = 0x139EC13C3C9EC1C114146363B8F4A558 +enclast(0xD000000000000000DDDD00000000DDDD, 0x70000000000000007777000000007777) = 0x13C1C163C163636314146363706314B6 +dec (0xD000000000000000DDDD00000000DDDD, 0x70000000000000007777000000007777) = 0x0D915027758F23EB500A915093257FC9 +declast(0xD000000000000000DDDD00000000DDDD, 0x70000000000000007777000000007777) = 0x22C95252605252522525C952C95225BE +enc (0xD000000000000000DDDD00000000DDDD, 0x80000000000000008888000000008888) = 0xE39EC13C3C9EC1C1EBEB6363B8F45AA7 +enclast(0xD000000000000000DDDD00000000DDDD, 0x80000000000000008888000000008888) = 0xE3C1C163C1636363EBEB63637063EB49 +dec (0xD000000000000000DDDD00000000DDDD, 0x80000000000000008888000000008888) = 0xFD915027758F23EBAFF5915093258036 +declast(0xD000000000000000DDDD00000000DDDD, 0x80000000000000008888000000008888) = 0xD2C9525260525252DADAC952C952DA41 +enc (0xD000000000000000DDDD00000000DDDD, 0x90000000000000009999000000009999) = 0xF39EC13C3C9EC1C1FAFA6363B8F44BB6 +enclast(0xD000000000000000DDDD00000000DDDD, 0x90000000000000009999000000009999) = 0xF3C1C163C1636363FAFA63637063FA58 +dec (0xD000000000000000DDDD00000000DDDD, 0x90000000000000009999000000009999) = 0xED915027758F23EBBEE4915093259127 +declast(0xD000000000000000DDDD00000000DDDD, 0x90000000000000009999000000009999) = 0xC2C9525260525252CBCBC952C952CB50 +enc (0xD000000000000000DDDD00000000DDDD, 0xA000000000000000AAAA00000000AAAA) = 0xC39EC13C3C9EC1C1C9C96363B8F47885 +enclast(0xD000000000000000DDDD00000000DDDD, 0xA000000000000000AAAA00000000AAAA) = 0xC3C1C163C1636363C9C963637063C96B +dec (0xD000000000000000DDDD00000000DDDD, 0xA000000000000000AAAA00000000AAAA) = 0xDD915027758F23EB8DD791509325A214 +declast(0xD000000000000000DDDD00000000DDDD, 0xA000000000000000AAAA00000000AAAA) = 0xF2C9525260525252F8F8C952C952F863 +enc (0xD000000000000000DDDD00000000DDDD, 0xB000000000000000BBBB00000000BBBB) = 0xD39EC13C3C9EC1C1D8D86363B8F46994 +enclast(0xD000000000000000DDDD00000000DDDD, 0xB000000000000000BBBB00000000BBBB) = 0xD3C1C163C1636363D8D863637063D87A +dec (0xD000000000000000DDDD00000000DDDD, 0xB000000000000000BBBB00000000BBBB) = 0xCD915027758F23EB9CC691509325B305 +declast(0xD000000000000000DDDD00000000DDDD, 0xB000000000000000BBBB00000000BBBB) = 0xE2C9525260525252E9E9C952C952E972 +enc (0xD000000000000000DDDD00000000DDDD, 0xC000000000000000CCCC00000000CCCC) = 0xA39EC13C3C9EC1C1AFAF6363B8F41EE3 +enclast(0xD000000000000000DDDD00000000DDDD, 0xC000000000000000CCCC00000000CCCC) = 0xA3C1C163C1636363AFAF63637063AF0D +dec (0xD000000000000000DDDD00000000DDDD, 0xC000000000000000CCCC00000000CCCC) = 0xBD915027758F23EBEBB191509325C472 +declast(0xD000000000000000DDDD00000000DDDD, 0xC000000000000000CCCC00000000CCCC) = 0x92C95252605252529E9EC952C9529E05 +enc (0xD000000000000000DDDD00000000DDDD, 0xD000000000000000DDDD00000000DDDD) = 0xB39EC13C3C9EC1C1BEBE6363B8F40FF2 +enclast(0xD000000000000000DDDD00000000DDDD, 0xD000000000000000DDDD00000000DDDD) = 0xB3C1C163C1636363BEBE63637063BE1C +dec (0xD000000000000000DDDD00000000DDDD, 0xD000000000000000DDDD00000000DDDD) = 0xAD915027758F23EBFAA091509325D563 +declast(0xD000000000000000DDDD00000000DDDD, 0xD000000000000000DDDD00000000DDDD) = 0x82C95252605252528F8FC952C9528F14 +enc (0xD000000000000000DDDD00000000DDDD, 0xE000000000000000EEEE00000000EEEE) = 0x839EC13C3C9EC1C18D8D6363B8F43CC1 +enclast(0xD000000000000000DDDD00000000DDDD, 0xE000000000000000EEEE00000000EEEE) = 0x83C1C163C16363638D8D636370638D2F +dec (0xD000000000000000DDDD00000000DDDD, 0xE000000000000000EEEE00000000EEEE) = 0x9D915027758F23EBC99391509325E650 +declast(0xD000000000000000DDDD00000000DDDD, 0xE000000000000000EEEE00000000EEEE) = 0xB2C9525260525252BCBCC952C952BC27 +enc (0xD000000000000000DDDD00000000DDDD, 0xF000000000000000FFFF00000000FFFF) = 0x939EC13C3C9EC1C19C9C6363B8F42DD0 +enclast(0xD000000000000000DDDD00000000DDDD, 0xF000000000000000FFFF00000000FFFF) = 0x93C1C163C16363639C9C636370639C3E +dec (0xD000000000000000DDDD00000000DDDD, 0xF000000000000000FFFF00000000FFFF) = 0x8D915027758F23EBD88291509325F741 +declast(0xD000000000000000DDDD00000000DDDD, 0xF000000000000000FFFF00000000FFFF) = 0xA2C9525260525252ADADC952C952AD36 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x00) = 0x637063637063636363C1C163C1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x01) = 0x637063627063636363C1C162C1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x02) = 0x637063617063636363C1C161C1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x04) = 0x637063677063636363C1C167C1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x08) = 0x6370636B7063636363C1C16BC1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x10) = 0x637063737063636363C1C173C1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x38) = 0x6370635B7063636363C1C15BC1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0x4F) = 0x6370632C7063636363C1C12CC1C16363 +keygenassist(0xD000000000000000DDDD00000000DDDD, 0xFF) = 0x6370639C7063636363C1C19CC1C16363 +imc (0xD000000000000000DDDD00000000DDDD) = 0x0CB1670A000000002584F859F8592584 +pclmul(0xD000000000000000DDDD00000000DDDD, 0x00) = 0x2DF39A74EE9A5969B7F3EE9A749A2D87 +pclmul(0xD000000000000000DDDD00000000DDDD, 0x01) = 0x2D8BBBB70CBB9A8B96300CBBB7002D87 +pclmul(0xD000000000000000DDDD00000000DDDD, 0x10) = 0x2F2C8CFF2C8CFF5F7000000000000000 +pclmul(0xD000000000000000DDDD00000000DDDD, 0xFF) = 0x2F532F5F532F5F5F7000000000000000 +enc (0xE000000000000000EEEE00000000EEEE, 0x00000000000000000000000000000000) = 0x63BE28F5F5BE282863636363A1B5AA77 +enclast(0xE000000000000000EEEE00000000EEEE, 0x00000000000000000000000000000000) = 0x632828632863636363636363E1636328 +dec (0xE000000000000000EEEE00000000EEEE, 0x00000000000000000000000000000000) = 0x9BDC169A998E94719A9BDC1698DE5315 +declast(0xE000000000000000EEEE00000000EEEE, 0x00000000000000000000000000000000) = 0x52995252A05252525252995299525299 +enc (0xE000000000000000EEEE00000000EEEE, 0x10000000000000001111000000001111) = 0x73BE28F5F5BE282872726363A1B5BB66 +enclast(0xE000000000000000EEEE00000000EEEE, 0x10000000000000001111000000001111) = 0x732828632863636372726363E1637239 +dec (0xE000000000000000EEEE00000000EEEE, 0x10000000000000001111000000001111) = 0x8BDC169A998E94718B8ADC1698DE4204 +declast(0xE000000000000000EEEE00000000EEEE, 0x10000000000000001111000000001111) = 0x42995252A05252524343995299524388 +enc (0xE000000000000000EEEE00000000EEEE, 0x20000000000000002222000000002222) = 0x43BE28F5F5BE282841416363A1B58855 +enclast(0xE000000000000000EEEE00000000EEEE, 0x20000000000000002222000000002222) = 0x432828632863636341416363E163410A +dec (0xE000000000000000EEEE00000000EEEE, 0x20000000000000002222000000002222) = 0xBBDC169A998E9471B8B9DC1698DE7137 +declast(0xE000000000000000EEEE00000000EEEE, 0x20000000000000002222000000002222) = 0x72995252A052525270709952995270BB +enc (0xE000000000000000EEEE00000000EEEE, 0x30000000000000003333000000003333) = 0x53BE28F5F5BE282850506363A1B59944 +enclast(0xE000000000000000EEEE00000000EEEE, 0x30000000000000003333000000003333) = 0x532828632863636350506363E163501B +dec (0xE000000000000000EEEE00000000EEEE, 0x30000000000000003333000000003333) = 0xABDC169A998E9471A9A8DC1698DE6026 +declast(0xE000000000000000EEEE00000000EEEE, 0x30000000000000003333000000003333) = 0x62995252A052525261619952995261AA +enc (0xE000000000000000EEEE00000000EEEE, 0x40000000000000004444000000004444) = 0x23BE28F5F5BE282827276363A1B5EE33 +enclast(0xE000000000000000EEEE00000000EEEE, 0x40000000000000004444000000004444) = 0x232828632863636327276363E163276C +dec (0xE000000000000000EEEE00000000EEEE, 0x40000000000000004444000000004444) = 0xDBDC169A998E9471DEDFDC1698DE1751 +declast(0xE000000000000000EEEE00000000EEEE, 0x40000000000000004444000000004444) = 0x12995252A052525216169952995216DD +enc (0xE000000000000000EEEE00000000EEEE, 0x50000000000000005555000000005555) = 0x33BE28F5F5BE282836366363A1B5FF22 +enclast(0xE000000000000000EEEE00000000EEEE, 0x50000000000000005555000000005555) = 0x332828632863636336366363E163367D +dec (0xE000000000000000EEEE00000000EEEE, 0x50000000000000005555000000005555) = 0xCBDC169A998E9471CFCEDC1698DE0640 +declast(0xE000000000000000EEEE00000000EEEE, 0x50000000000000005555000000005555) = 0x02995252A052525207079952995207CC +enc (0xE000000000000000EEEE00000000EEEE, 0x60000000000000006666000000006666) = 0x03BE28F5F5BE282805056363A1B5CC11 +enclast(0xE000000000000000EEEE00000000EEEE, 0x60000000000000006666000000006666) = 0x032828632863636305056363E163054E +dec (0xE000000000000000EEEE00000000EEEE, 0x60000000000000006666000000006666) = 0xFBDC169A998E9471FCFDDC1698DE3573 +declast(0xE000000000000000EEEE00000000EEEE, 0x60000000000000006666000000006666) = 0x32995252A052525234349952995234FF +enc (0xE000000000000000EEEE00000000EEEE, 0x70000000000000007777000000007777) = 0x13BE28F5F5BE282814146363A1B5DD00 +enclast(0xE000000000000000EEEE00000000EEEE, 0x70000000000000007777000000007777) = 0x132828632863636314146363E163145F +dec (0xE000000000000000EEEE00000000EEEE, 0x70000000000000007777000000007777) = 0xEBDC169A998E9471EDECDC1698DE2462 +declast(0xE000000000000000EEEE00000000EEEE, 0x70000000000000007777000000007777) = 0x22995252A052525225259952995225EE +enc (0xE000000000000000EEEE00000000EEEE, 0x80000000000000008888000000008888) = 0xE3BE28F5F5BE2828EBEB6363A1B522FF +enclast(0xE000000000000000EEEE00000000EEEE, 0x80000000000000008888000000008888) = 0xE328286328636363EBEB6363E163EBA0 +dec (0xE000000000000000EEEE00000000EEEE, 0x80000000000000008888000000008888) = 0x1BDC169A998E94711213DC1698DEDB9D +declast(0xE000000000000000EEEE00000000EEEE, 0x80000000000000008888000000008888) = 0xD2995252A0525252DADA99529952DA11 +enc (0xE000000000000000EEEE00000000EEEE, 0x90000000000000009999000000009999) = 0xF3BE28F5F5BE2828FAFA6363A1B533EE +enclast(0xE000000000000000EEEE00000000EEEE, 0x90000000000000009999000000009999) = 0xF328286328636363FAFA6363E163FAB1 +dec (0xE000000000000000EEEE00000000EEEE, 0x90000000000000009999000000009999) = 0x0BDC169A998E94710302DC1698DECA8C +declast(0xE000000000000000EEEE00000000EEEE, 0x90000000000000009999000000009999) = 0xC2995252A0525252CBCB99529952CB00 +enc (0xE000000000000000EEEE00000000EEEE, 0xA000000000000000AAAA00000000AAAA) = 0xC3BE28F5F5BE2828C9C96363A1B500DD +enclast(0xE000000000000000EEEE00000000EEEE, 0xA000000000000000AAAA00000000AAAA) = 0xC328286328636363C9C96363E163C982 +dec (0xE000000000000000EEEE00000000EEEE, 0xA000000000000000AAAA00000000AAAA) = 0x3BDC169A998E94713031DC1698DEF9BF +declast(0xE000000000000000EEEE00000000EEEE, 0xA000000000000000AAAA00000000AAAA) = 0xF2995252A0525252F8F899529952F833 +enc (0xE000000000000000EEEE00000000EEEE, 0xB000000000000000BBBB00000000BBBB) = 0xD3BE28F5F5BE2828D8D86363A1B511CC +enclast(0xE000000000000000EEEE00000000EEEE, 0xB000000000000000BBBB00000000BBBB) = 0xD328286328636363D8D86363E163D893 +dec (0xE000000000000000EEEE00000000EEEE, 0xB000000000000000BBBB00000000BBBB) = 0x2BDC169A998E94712120DC1698DEE8AE +declast(0xE000000000000000EEEE00000000EEEE, 0xB000000000000000BBBB00000000BBBB) = 0xE2995252A0525252E9E999529952E922 +enc (0xE000000000000000EEEE00000000EEEE, 0xC000000000000000CCCC00000000CCCC) = 0xA3BE28F5F5BE2828AFAF6363A1B566BB +enclast(0xE000000000000000EEEE00000000EEEE, 0xC000000000000000CCCC00000000CCCC) = 0xA328286328636363AFAF6363E163AFE4 +dec (0xE000000000000000EEEE00000000EEEE, 0xC000000000000000CCCC00000000CCCC) = 0x5BDC169A998E94715657DC1698DE9FD9 +declast(0xE000000000000000EEEE00000000EEEE, 0xC000000000000000CCCC00000000CCCC) = 0x92995252A05252529E9E995299529E55 +enc (0xE000000000000000EEEE00000000EEEE, 0xD000000000000000DDDD00000000DDDD) = 0xB3BE28F5F5BE2828BEBE6363A1B577AA +enclast(0xE000000000000000EEEE00000000EEEE, 0xD000000000000000DDDD00000000DDDD) = 0xB328286328636363BEBE6363E163BEF5 +dec (0xE000000000000000EEEE00000000EEEE, 0xD000000000000000DDDD00000000DDDD) = 0x4BDC169A998E94714746DC1698DE8EC8 +declast(0xE000000000000000EEEE00000000EEEE, 0xD000000000000000DDDD00000000DDDD) = 0x82995252A05252528F8F995299528F44 +enc (0xE000000000000000EEEE00000000EEEE, 0xE000000000000000EEEE00000000EEEE) = 0x83BE28F5F5BE28288D8D6363A1B54499 +enclast(0xE000000000000000EEEE00000000EEEE, 0xE000000000000000EEEE00000000EEEE) = 0x83282863286363638D8D6363E1638DC6 +dec (0xE000000000000000EEEE00000000EEEE, 0xE000000000000000EEEE00000000EEEE) = 0x7BDC169A998E94717475DC1698DEBDFB +declast(0xE000000000000000EEEE00000000EEEE, 0xE000000000000000EEEE00000000EEEE) = 0xB2995252A0525252BCBC99529952BC77 +enc (0xE000000000000000EEEE00000000EEEE, 0xF000000000000000FFFF00000000FFFF) = 0x93BE28F5F5BE28289C9C6363A1B55588 +enclast(0xE000000000000000EEEE00000000EEEE, 0xF000000000000000FFFF00000000FFFF) = 0x93282863286363639C9C6363E1639CD7 +dec (0xE000000000000000EEEE00000000EEEE, 0xF000000000000000FFFF00000000FFFF) = 0x6BDC169A998E94716564DC1698DEACEA +declast(0xE000000000000000EEEE00000000EEEE, 0xF000000000000000FFFF00000000FFFF) = 0xA2995252A0525252ADAD99529952AD66 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x00) = 0x63E16363E16363636328286328286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x01) = 0x63E16362E16363636328286228286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x02) = 0x63E16361E16363636328286128286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x04) = 0x63E16367E16363636328286728286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x08) = 0x63E1636BE16363636328286B28286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x10) = 0x63E16373E16363636328287328286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x38) = 0x63E1635BE16363636328285B28286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0x4F) = 0x63E1632CE16363636328282C28286363 +keygenassist(0xE000000000000000EEEE00000000EEEE, 0xFF) = 0x63E1639CE16363636328289C28286363 +imc (0xE000000000000000EEEE00000000EEEE) = 0x377A0CA100000000BC7B52955295BC7B +pclmul(0xE000000000000000EEEE00000000EEEE, 0x00) = 0x274FC23DFFC21A8DE54FFFC23DC22772 +pclmul(0xE000000000000000EEEE00000000EEEE, 0x01) = 0x2704AADC76AAFB048DAE76AADC002772 +pclmul(0xE000000000000000EEEE00000000EEEE, 0x10) = 0x253B1B253B1B25052000000000000000 +pclmul(0xE000000000000000EEEE00000000EEEE, 0xFF) = 0x2574C50574C505052000000000000000 +enc (0xF000000000000000FFFF00000000FFFF, 0x00000000000000000000000000000000) = 0x63FC168989FC161663636363393CF966 +enclast(0xF000000000000000FFFF00000000FFFF, 0x00000000000000000000000000000000) = 0x6316166316636363636363638C636316 +dec (0xF000000000000000FFFF00000000FFFF, 0x00000000000000000000000000000000) = 0x1ED340A2C9830609A21ED340C1B0EE9F +declast(0xF000000000000000FFFF00000000FFFF, 0x00000000000000000000000000000000) = 0x527D52521752525252527D527D52527D +enc (0xF000000000000000FFFF00000000FFFF, 0x10000000000000001111000000001111) = 0x73FC168989FC161672726363393CE877 +enclast(0xF000000000000000FFFF00000000FFFF, 0x10000000000000001111000000001111) = 0x7316166316636363727263638C637207 +dec (0xF000000000000000FFFF00000000FFFF, 0x10000000000000001111000000001111) = 0x0ED340A2C9830609B30FD340C1B0FF8E +declast(0xF000000000000000FFFF00000000FFFF, 0x10000000000000001111000000001111) = 0x427D52521752525243437D527D52436C +enc (0xF000000000000000FFFF00000000FFFF, 0x20000000000000002222000000002222) = 0x43FC168989FC161641416363393CDB44 +enclast(0xF000000000000000FFFF00000000FFFF, 0x20000000000000002222000000002222) = 0x4316166316636363414163638C634134 +dec (0xF000000000000000FFFF00000000FFFF, 0x20000000000000002222000000002222) = 0x3ED340A2C9830609803CD340C1B0CCBD +declast(0xF000000000000000FFFF00000000FFFF, 0x20000000000000002222000000002222) = 0x727D52521752525270707D527D52705F +enc (0xF000000000000000FFFF00000000FFFF, 0x30000000000000003333000000003333) = 0x53FC168989FC161650506363393CCA55 +enclast(0xF000000000000000FFFF00000000FFFF, 0x30000000000000003333000000003333) = 0x5316166316636363505063638C635025 +dec (0xF000000000000000FFFF00000000FFFF, 0x30000000000000003333000000003333) = 0x2ED340A2C9830609912DD340C1B0DDAC +declast(0xF000000000000000FFFF00000000FFFF, 0x30000000000000003333000000003333) = 0x627D52521752525261617D527D52614E +enc (0xF000000000000000FFFF00000000FFFF, 0x40000000000000004444000000004444) = 0x23FC168989FC161627276363393CBD22 +enclast(0xF000000000000000FFFF00000000FFFF, 0x40000000000000004444000000004444) = 0x2316166316636363272763638C632752 +dec (0xF000000000000000FFFF00000000FFFF, 0x40000000000000004444000000004444) = 0x5ED340A2C9830609E65AD340C1B0AADB +declast(0xF000000000000000FFFF00000000FFFF, 0x40000000000000004444000000004444) = 0x127D52521752525216167D527D521639 +enc (0xF000000000000000FFFF00000000FFFF, 0x50000000000000005555000000005555) = 0x33FC168989FC161636366363393CAC33 +enclast(0xF000000000000000FFFF00000000FFFF, 0x50000000000000005555000000005555) = 0x3316166316636363363663638C633643 +dec (0xF000000000000000FFFF00000000FFFF, 0x50000000000000005555000000005555) = 0x4ED340A2C9830609F74BD340C1B0BBCA +declast(0xF000000000000000FFFF00000000FFFF, 0x50000000000000005555000000005555) = 0x027D52521752525207077D527D520728 +enc (0xF000000000000000FFFF00000000FFFF, 0x60000000000000006666000000006666) = 0x03FC168989FC161605056363393C9F00 +enclast(0xF000000000000000FFFF00000000FFFF, 0x60000000000000006666000000006666) = 0x0316166316636363050563638C630570 +dec (0xF000000000000000FFFF00000000FFFF, 0x60000000000000006666000000006666) = 0x7ED340A2C9830609C478D340C1B088F9 +declast(0xF000000000000000FFFF00000000FFFF, 0x60000000000000006666000000006666) = 0x327D52521752525234347D527D52341B +enc (0xF000000000000000FFFF00000000FFFF, 0x70000000000000007777000000007777) = 0x13FC168989FC161614146363393C8E11 +enclast(0xF000000000000000FFFF00000000FFFF, 0x70000000000000007777000000007777) = 0x1316166316636363141463638C631461 +dec (0xF000000000000000FFFF00000000FFFF, 0x70000000000000007777000000007777) = 0x6ED340A2C9830609D569D340C1B099E8 +declast(0xF000000000000000FFFF00000000FFFF, 0x70000000000000007777000000007777) = 0x227D52521752525225257D527D52250A +enc (0xF000000000000000FFFF00000000FFFF, 0x80000000000000008888000000008888) = 0xE3FC168989FC1616EBEB6363393C71EE +enclast(0xF000000000000000FFFF00000000FFFF, 0x80000000000000008888000000008888) = 0xE316166316636363EBEB63638C63EB9E +dec (0xF000000000000000FFFF00000000FFFF, 0x80000000000000008888000000008888) = 0x9ED340A2C98306092A96D340C1B06617 +declast(0xF000000000000000FFFF00000000FFFF, 0x80000000000000008888000000008888) = 0xD27D525217525252DADA7D527D52DAF5 +enc (0xF000000000000000FFFF00000000FFFF, 0x90000000000000009999000000009999) = 0xF3FC168989FC1616FAFA6363393C60FF +enclast(0xF000000000000000FFFF00000000FFFF, 0x90000000000000009999000000009999) = 0xF316166316636363FAFA63638C63FA8F +dec (0xF000000000000000FFFF00000000FFFF, 0x90000000000000009999000000009999) = 0x8ED340A2C98306093B87D340C1B07706 +declast(0xF000000000000000FFFF00000000FFFF, 0x90000000000000009999000000009999) = 0xC27D525217525252CBCB7D527D52CBE4 +enc (0xF000000000000000FFFF00000000FFFF, 0xA000000000000000AAAA00000000AAAA) = 0xC3FC168989FC1616C9C96363393C53CC +enclast(0xF000000000000000FFFF00000000FFFF, 0xA000000000000000AAAA00000000AAAA) = 0xC316166316636363C9C963638C63C9BC +dec (0xF000000000000000FFFF00000000FFFF, 0xA000000000000000AAAA00000000AAAA) = 0xBED340A2C983060908B4D340C1B04435 +declast(0xF000000000000000FFFF00000000FFFF, 0xA000000000000000AAAA00000000AAAA) = 0xF27D525217525252F8F87D527D52F8D7 +enc (0xF000000000000000FFFF00000000FFFF, 0xB000000000000000BBBB00000000BBBB) = 0xD3FC168989FC1616D8D86363393C42DD +enclast(0xF000000000000000FFFF00000000FFFF, 0xB000000000000000BBBB00000000BBBB) = 0xD316166316636363D8D863638C63D8AD +dec (0xF000000000000000FFFF00000000FFFF, 0xB000000000000000BBBB00000000BBBB) = 0xAED340A2C983060919A5D340C1B05524 +declast(0xF000000000000000FFFF00000000FFFF, 0xB000000000000000BBBB00000000BBBB) = 0xE27D525217525252E9E97D527D52E9C6 +enc (0xF000000000000000FFFF00000000FFFF, 0xC000000000000000CCCC00000000CCCC) = 0xA3FC168989FC1616AFAF6363393C35AA +enclast(0xF000000000000000FFFF00000000FFFF, 0xC000000000000000CCCC00000000CCCC) = 0xA316166316636363AFAF63638C63AFDA +dec (0xF000000000000000FFFF00000000FFFF, 0xC000000000000000CCCC00000000CCCC) = 0xDED340A2C98306096ED2D340C1B02253 +declast(0xF000000000000000FFFF00000000FFFF, 0xC000000000000000CCCC00000000CCCC) = 0x927D5252175252529E9E7D527D529EB1 +enc (0xF000000000000000FFFF00000000FFFF, 0xD000000000000000DDDD00000000DDDD) = 0xB3FC168989FC1616BEBE6363393C24BB +enclast(0xF000000000000000FFFF00000000FFFF, 0xD000000000000000DDDD00000000DDDD) = 0xB316166316636363BEBE63638C63BECB +dec (0xF000000000000000FFFF00000000FFFF, 0xD000000000000000DDDD00000000DDDD) = 0xCED340A2C98306097FC3D340C1B03342 +declast(0xF000000000000000FFFF00000000FFFF, 0xD000000000000000DDDD00000000DDDD) = 0x827D5252175252528F8F7D527D528FA0 +enc (0xF000000000000000FFFF00000000FFFF, 0xE000000000000000EEEE00000000EEEE) = 0x83FC168989FC16168D8D6363393C1788 +enclast(0xF000000000000000FFFF00000000FFFF, 0xE000000000000000EEEE00000000EEEE) = 0x83161663166363638D8D63638C638DF8 +dec (0xF000000000000000FFFF00000000FFFF, 0xE000000000000000EEEE00000000EEEE) = 0xFED340A2C98306094CF0D340C1B00071 +declast(0xF000000000000000FFFF00000000FFFF, 0xE000000000000000EEEE00000000EEEE) = 0xB27D525217525252BCBC7D527D52BC93 +enc (0xF000000000000000FFFF00000000FFFF, 0xF000000000000000FFFF00000000FFFF) = 0x93FC168989FC16169C9C6363393C0699 +enclast(0xF000000000000000FFFF00000000FFFF, 0xF000000000000000FFFF00000000FFFF) = 0x93161663166363639C9C63638C639CE9 +dec (0xF000000000000000FFFF00000000FFFF, 0xF000000000000000FFFF00000000FFFF) = 0xEED340A2C98306095DE1D340C1B01160 +declast(0xF000000000000000FFFF00000000FFFF, 0xF000000000000000FFFF00000000FFFF) = 0xA27D525217525252ADAD7D527D52AD82 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x00) = 0x638C63638C6363636316166316166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x01) = 0x638C63628C6363636316166216166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x02) = 0x638C63618C6363636316166116166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x04) = 0x638C63678C6363636316166716166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x08) = 0x638C636B8C6363636316166B16166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x10) = 0x638C63738C6363636316167316166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x38) = 0x638C635B8C6363636316165B16166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0x4F) = 0x638C632C8C6363636316162C16166363 +keygenassist(0xF000000000000000FFFF00000000FFFF, 0xFF) = 0x638C639C8C6363636316169C16166363 +imc (0xF000000000000000FFFF00000000FFFF) = 0xD7CADC3100000000CB2E34D134D1CB2E +pclmul(0xF000000000000000FFFF00000000FFFF, 0x00) = 0x210DD32CFFD30DDEF20DFFD32CD32121 +pclmul(0xF000000000000000FFFF00000000FFFF, 0x01) = 0x217BFFA55AFF847BDE845AFFA5002121 +pclmul(0xF000000000000000FFFF00000000FFFF, 0x10) = 0x231D2D031D2D03331000000000000000 +pclmul(0xF000000000000000FFFF00000000FFFF, 0xFF) = 0x236C63336C6333331000000000000000 diff --git a/tests32/ref23.txt b/tests32/ref23.txt new file mode 100644 index 0000000000000000000000000000000000000000..630c823428c5f66dae032f8d1e52391e78677915 --- /dev/null +++ b/tests32/ref23.txt @@ -0,0 +1,5 @@ +ret = 0x78563412 +ret = 0x3412 +ret = 0x78563412 +ret = 0x3412 +ret = 0x12345678 diff --git a/tests32/ref24.txt b/tests32/ref24.txt new file mode 100644 index 0000000000000000000000000000000000000000..df60c72537ee20e6fa1ab739e9b7cca63b4a9152 --- /dev/null +++ b/tests32/ref24.txt @@ -0,0 +1,640 @@ +Testing rint(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing rint(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing rint(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rint(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rint(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rint(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rint(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rint(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing rintf(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing rintf(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing rintf(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rintf(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rintf(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rintf(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rintf(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing rintf(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing nearbyint(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing nearbyint(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing nearbyint(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyint(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyint(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyint(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyint(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyint(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing nearbyintf(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing nearbyintf(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing nearbyintf(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyintf(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyintf(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyintf(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyintf(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing nearbyintf(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing llrintf(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing llrintf(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing llrintf(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrintf(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrintf(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrintf(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrintf(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrintf(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing llrint(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing llrint(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing llrint(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrint(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrint(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrint(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrint(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing llrint(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing lrintf(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing lrintf(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing lrintf(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrintf(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrintf(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrintf(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrintf(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrintf(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + +Testing lrint(1.000000) +FE_UPWARD: 1.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing lrint(1.300000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 1.0 +Current rounding mode: 0x0 + +Testing lrint(1.500000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrint(1.800000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 1.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 1.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrint(2.000000) +FE_UPWARD: 2.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrint(2.300000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrint(2.500000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 2.0 +Current rounding mode: 0x0 + +Testing lrint(2.800000) +FE_UPWARD: 3.0 +Current rounding mode: 0x800 +FE_DOWNWARD: 2.0 +Current rounding mode: 0x400 +FE_TOWARDZERO: 2.0 +Current rounding mode: 0xc00 +FE_TONEAREST: 3.0 +Current rounding mode: 0x0 + diff --git a/tests32/ref25.txt b/tests32/ref25.txt new file mode 100644 index 0000000000000000000000000000000000000000..6a84602f1ab60fbd6bfc606c8fef6885b673a41c --- /dev/null +++ b/tests32/ref25.txt @@ -0,0 +1,1062 @@ +test SSE 4.2 +_mm_cmpestri("This is a string", 16, "This", 4, 0x0) => 0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x0) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "This", 4, 0x0) = 0000000000000000-000000000000000f +_mm_cmpistri("This is a string", "This", 0x0) => 0 +_mm_cmpestri("This is a string", "This", 0x0) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "This", 0x0) = 0000000000000000-000000000000000f +_mm_cmpestri("This is a string", 16, "This", 4, 0x1) => 0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x1) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "This", 4, 0x1) = 0000000000000000-000000000000000f +_mm_cmpistri("This is a string", "This", 0x1) => 0 +_mm_cmpestri("This is a string", "This", 0x1) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "This", 0x1) = 0000000000000000-000000000000000f +_mm_cmpestri("This", 4, "This is a string", 16, 0x0) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x0) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x0) = 0000000000000000-000000000000246f +_mm_cmpistri("This", "This is a string", 0x0) => 0 +_mm_cmpestri("This", "This is a string", 0x0) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x0) = 0000000000000000-000000000000246f +_mm_cmpestri("This", 4, "This is a string", 16, 0x1) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x1) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x1) = 0000000000000000-000000000000006f +_mm_cmpistri("This", "This is a string", 0x1) => 0 +_mm_cmpestri("This", "This is a string", 0x1) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x1) = 0000000000000000-000000000000006f +_mm_cmpestri("This is a string", 16, "is", 2, 0x0) => 0 +_mm_cmpestri("This is a string", 16, "is", 2, 0x0) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "is", 2, 0x0) = 0000000000000000-0000000000000003 +_mm_cmpistri("This is a string", "is", 0x0) => 0 +_mm_cmpestri("This is a string", "is", 0x0) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "is", 0x0) = 0000000000000000-0000000000000003 +_mm_cmpestri("This is a string", 16, "is", 2, 0x1) => 0 +_mm_cmpestri("This is a string", 16, "is", 2, 0x1) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "is", 2, 0x1) = 0000000000000000-0000000000000003 +_mm_cmpistri("This is a string", "is", 0x1) => 0 +_mm_cmpestri("This is a string", "is", 0x1) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "is", 0x1) = 0000000000000000-0000000000000003 +_mm_cmpestri("is", 2, "This is a string", 16, 0x0) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0x0) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x0) = 0000000000000000-000000000000246c +_mm_cmpistri("is", "This is a string", 0x0) => 2 +_mm_cmpestri("is", "This is a string", 0x0) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x0) = 0000000000000000-000000000000246c +_mm_cmpestri("is", 2, "This is a string", 16, 0x1) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0x1) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x1) = 0000000000000000-000000000000006c +_mm_cmpistri("is", "This is a string", 0x1) => 2 +_mm_cmpestri("is", "This is a string", 0x1) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x1) = 0000000000000000-000000000000006c +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x0) => 1 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x0) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x0) = 0000000000000000-000000000000c03a +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x0) => 1 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x0) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x0) = 0000000000000000-000000000000c03a +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x1) => 3 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x1) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x1) = 0000000000000000-0000000000000008 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x1) => 3 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x1) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x1) = 0000000000000000-0000000000000008 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x0) => 3 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x0) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x0) = 0000000000000000-0000000000001d48 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x0) => 3 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x0) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x0) = 0000000000000000-0000000000001d48 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x1) => 3 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x1) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x1) = 0000000000000000-0000000000000048 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x1) => 3 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x1) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x1) = 0000000000000000-0000000000000048 +_mm_cmpestri("This is a string", 16, "", 0, 0x0) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x0) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x0) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x0) => 16 +_mm_cmpestri("This is a string", "", 0x0) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x0) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x1) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x1) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x1) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x1) => 8 +_mm_cmpestri("This is a string", "", 0x1) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x1) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x0) => 16 +_mm_cmpestri("", 0, "This is a string", 16, 0x0) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", 0, "This is a string", 16, 0x0) = 0000000000000000-0000000000000000 +_mm_cmpistri("", "This is a string", 0x0) => 16 +_mm_cmpestri("", "This is a string", 0x0) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", "This is a string", 0x0) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x1) => 8 +_mm_cmpestri("", 0, "This is a string", 16, 0x1) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", 0, "This is a string", 16, 0x1) = 0000000000000000-0000000000000000 +_mm_cmpistri("", "This is a string", 0x1) => 8 +_mm_cmpestri("", "This is a string", 0x1) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", "This is a string", 0x1) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x4) => 0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x4) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "This", 4, 0x4) = 0000000000000000-000000000000000f +_mm_cmpistri("This is a string", "This", 0x4) => 0 +_mm_cmpestri("This is a string", "This", 0x4) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "This", 0x4) = 0000000000000000-000000000000000f +_mm_cmpestri("This is a string", 16, "This", 4, 0x5) => 0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x5) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "This", 4, 0x5) = 0000000000000000-000000000000000f +_mm_cmpistri("This is a string", "This", 0x5) => 0 +_mm_cmpestri("This is a string", "This", 0x5) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "This", 0x5) = 0000000000000000-000000000000000f +_mm_cmpestri("This", 4, "This is a string", 16, 0x4) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x4) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x4) = 0000000000000000-000000000000f56f +_mm_cmpistri("This", "This is a string", 0x4) => 0 +_mm_cmpestri("This", "This is a string", 0x4) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x4) = 0000000000000000-000000000000f56f +_mm_cmpestri("This", 4, "This is a string", 16, 0x5) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x5) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x5) = 0000000000000000-000000000000006f +_mm_cmpistri("This", "This is a string", 0x5) => 0 +_mm_cmpestri("This", "This is a string", 0x5) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x5) = 0000000000000000-000000000000006f +_mm_cmpestri("This is a string", 16, "is", 2, 0x4) => 0 +_mm_cmpestri("This is a string", 16, "is", 2, 0x4) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "is", 2, 0x4) = 0000000000000000-0000000000000003 +_mm_cmpistri("This is a string", "is", 0x4) => 0 +_mm_cmpestri("This is a string", "is", 0x4) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "is", 0x4) = 0000000000000000-0000000000000003 +_mm_cmpestri("This is a string", 16, "is", 2, 0x5) => 0 +_mm_cmpestri("This is a string", 16, "is", 2, 0x5) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "is", 2, 0x5) = 0000000000000000-0000000000000003 +_mm_cmpistri("This is a string", "is", 0x5) => 0 +_mm_cmpestri("This is a string", "is", 0x5) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "is", 0x5) = 0000000000000000-0000000000000003 +_mm_cmpestri("is", 2, "This is a string", 16, 0x4) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0x4) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x4) = 0000000000000000-000000000000746c +_mm_cmpistri("is", "This is a string", 0x4) => 2 +_mm_cmpestri("is", "This is a string", 0x4) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x4) = 0000000000000000-000000000000746c +_mm_cmpestri("is", 2, "This is a string", 16, 0x5) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0x5) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x5) = 0000000000000000-000000000000006c +_mm_cmpistri("is", "This is a string", 0x5) => 2 +_mm_cmpestri("is", "This is a string", 0x5) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x5) = 0000000000000000-000000000000006c +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4) => 0 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x4) = 0000000000000000-000000000000ffbf +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x4) => 0 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x4) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x4) = 0000000000000000-000000000000ffbf +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x5) => 0 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x5) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x5) = 0000000000000000-00000000000000af +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x5) => 0 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x5) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x5) = 0000000000000000-00000000000000af +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x4) = 0000000000000000-000000000000f56f +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x4) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x4) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x4) = 0000000000000000-000000000000f56f +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x5) => 1 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x5) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x5) = 0000000000000000-000000000000006e +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x5) => 1 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x5) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x5) = 0000000000000000-000000000000006e +_mm_cmpestri("This is a string", 16, "", 0, 0x4) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x4) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x4) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x4) => 16 +_mm_cmpestri("This is a string", "", 0x4) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x4) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x5) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x5) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x5) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x5) => 8 +_mm_cmpestri("This is a string", "", 0x5) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x5) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x4) => 16 +_mm_cmpestri("", 0, "This is a string", 16, 0x4) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", 0, "This is a string", 16, 0x4) = 0000000000000000-0000000000000000 +_mm_cmpistri("", "This is a string", 0x4) => 16 +_mm_cmpestri("", "This is a string", 0x4) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", "This is a string", 0x4) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x5) => 8 +_mm_cmpestri("", 0, "This is a string", 16, 0x5) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", 0, "This is a string", 16, 0x5) = 0000000000000000-0000000000000000 +_mm_cmpistri("", "This is a string", 0x5) => 8 +_mm_cmpestri("", "This is a string", 0x5) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", "This is a string", 0x5) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x8) => 0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x8) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "This", 4, 0x8) = 0000000000000000-000000000000000f +_mm_cmpistri("This is a string", "This", 0x8) => 0 +_mm_cmpestri("This is a string", "This", 0x8) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "This", 0x8) = 0000000000000000-000000000000000f +_mm_cmpestri("This is a string", 16, "This", 4, 0x9) => 0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x9) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "This", 4, 0x9) = 0000000000000000-000000000000000f +_mm_cmpistri("This is a string", "This", 0x9) => 0 +_mm_cmpestri("This is a string", "This", 0x9) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "This", 0x9) = 0000000000000000-000000000000000f +_mm_cmpestri("This", 4, "This is a string", 16, 0x8) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x8) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x8) = 0000000000000000-000000000000000f +_mm_cmpistri("This", "This is a string", 0x8) => 0 +_mm_cmpestri("This", "This is a string", 0x8) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x8) = 0000000000000000-000000000000000f +_mm_cmpestri("This", 4, "This is a string", 16, 0x9) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x9) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x9) = 0000000000000000-000000000000000f +_mm_cmpistri("This", "This is a string", 0x9) => 0 +_mm_cmpestri("This", "This is a string", 0x9) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x9) = 0000000000000000-000000000000000f +_mm_cmpestri("This is a string", 16, "is", 2, 0x8) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x8) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x8) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x8) => 16 +_mm_cmpestri("This is a string", "is", 0x8) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x8) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x9) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x9) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x9) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x9) => 8 +_mm_cmpestri("This is a string", "is", 0x9) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x9) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x8) => 16 +_mm_cmpestri("is", 2, "This is a string", 16, 0x8) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x8) = 0000000000000000-0000000000000000 +_mm_cmpistri("is", "This is a string", 0x8) => 16 +_mm_cmpestri("is", "This is a string", 0x8) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("is", "This is a string", 0x8) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x9) => 8 +_mm_cmpestri("is", 2, "This is a string", 16, 0x9) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x9) = 0000000000000000-0000000000000000 +_mm_cmpistri("is", "This is a string", 0x9) => 8 +_mm_cmpestri("is", "This is a string", 0x9) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("is", "This is a string", 0x9) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x8) => 3 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x8) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x8) = 0000000000000000-0000000000000008 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x8) => 3 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x8) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x8) = 0000000000000000-0000000000000008 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x9) => 3 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x9) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x9) = 0000000000000000-0000000000000008 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x9) => 3 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x9) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x9) = 0000000000000000-0000000000000008 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x8) => 3 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x8) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x8) = 0000000000000000-0000000000000008 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x8) => 3 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x8) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x8) = 0000000000000000-0000000000000008 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x9) => 3 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x9) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x9) = 0000000000000000-0000000000000008 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x9) => 3 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x9) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x9) = 0000000000000000-0000000000000008 +_mm_cmpestri("This is a string", 16, "", 0, 0x8) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x8) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x8) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x8) => 16 +_mm_cmpestri("This is a string", "", 0x8) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x8) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x9) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x9) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x9) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x9) => 8 +_mm_cmpestri("This is a string", "", 0x9) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x9) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x8) => 16 +_mm_cmpestri("", 0, "This is a string", 16, 0x8) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", 0, "This is a string", 16, 0x8) = 0000000000000000-0000000000000000 +_mm_cmpistri("", "This is a string", 0x8) => 16 +_mm_cmpestri("", "This is a string", 0x8) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", "This is a string", 0x8) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x9) => 8 +_mm_cmpestri("", 0, "This is a string", 16, 0x9) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", 0, "This is a string", 16, 0x9) = 0000000000000000-0000000000000000 +_mm_cmpistri("", "This is a string", 0x9) => 8 +_mm_cmpestri("", "This is a string", 0x9) flags: a:1 s:1 z:0 c:0 o:0 +mm_cmpestrm("", "This is a string", 0x9) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0xc) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0xc) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0xc) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0xc) => 16 +_mm_cmpestri("This is a string", "This", 0xc) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0xc) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0xd) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0xd) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0xd) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0xd) => 8 +_mm_cmpestri("This is a string", "This", 0xd) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0xd) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0xc) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0xc) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0xc) = 0000000000000000-0000000000000001 +_mm_cmpistri("This", "This is a string", 0xc) => 0 +_mm_cmpestri("This", "This is a string", 0xc) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0xc) = 0000000000000000-0000000000000001 +_mm_cmpestri("This", 4, "This is a string", 16, 0xd) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0xd) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0xd) = 0000000000000000-0000000000000001 +_mm_cmpistri("This", "This is a string", 0xd) => 0 +_mm_cmpestri("This", "This is a string", 0xd) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0xd) = 0000000000000000-0000000000000001 +_mm_cmpestri("This is a string", 16, "is", 2, 0xc) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0xc) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0xc) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0xc) => 16 +_mm_cmpestri("This is a string", "is", 0xc) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0xc) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0xd) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0xd) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0xd) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0xd) => 8 +_mm_cmpestri("This is a string", "is", 0xd) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0xd) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0xc) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0xc) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0xc) = 0000000000000000-0000000000000024 +_mm_cmpistri("is", "This is a string", 0xc) => 2 +_mm_cmpestri("is", "This is a string", 0xc) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0xc) = 0000000000000000-0000000000000024 +_mm_cmpestri("is", 2, "This is a string", 16, 0xd) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0xd) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0xd) = 0000000000000000-0000000000000024 +_mm_cmpistri("is", "This is a string", 0xd) => 2 +_mm_cmpestri("is", "This is a string", 0xd) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0xd) = 0000000000000000-0000000000000024 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0xc) => 16 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0xc) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0xc) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0xc) => 16 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0xc) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0xc) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0xd) => 8 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0xd) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0xd) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0xd) => 8 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0xd) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0xd) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0xc) => 16 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0xc) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0xc) = 0000000000000000-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0xc) => 16 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0xc) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0xc) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0xd) => 8 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0xd) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0xd) = 0000000000000000-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0xd) => 8 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0xd) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0xd) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0xc) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0xc) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0xc) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0xc) => 16 +_mm_cmpestri("This is a string", "", 0xc) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0xc) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0xd) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0xd) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0xd) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0xd) => 8 +_mm_cmpestri("This is a string", "", 0xd) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0xd) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0xc) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0xc) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0xc) = 0000000000000000-000000000000ffff +_mm_cmpistri("", "This is a string", 0xc) => 0 +_mm_cmpestri("", "This is a string", 0xc) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0xc) = 0000000000000000-000000000000ffff +_mm_cmpestri("", 0, "This is a string", 16, 0xd) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0xd) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0xd) = 0000000000000000-00000000000000ff +_mm_cmpistri("", "This is a string", 0xd) => 0 +_mm_cmpestri("", "This is a string", 0xd) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0xd) = 0000000000000000-00000000000000ff +_mm_cmpestri("This is a string", 16, "This", 4, 0x10) => 4 +_mm_cmpestri("This is a string", 16, "This", 4, 0x10) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x10) = 0000000000000000-000000000000fff0 +_mm_cmpistri("This is a string", "This", 0x10) => 4 +_mm_cmpestri("This is a string", "This", 0x10) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", "This", 0x10) = 0000000000000000-000000000000fff0 +_mm_cmpestri("This is a string", 16, "This", 4, 0x11) => 4 +_mm_cmpestri("This is a string", 16, "This", 4, 0x11) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x11) = 0000000000000000-00000000000000f0 +_mm_cmpistri("This is a string", "This", 0x11) => 4 +_mm_cmpestri("This is a string", "This", 0x11) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", "This", 0x11) = 0000000000000000-00000000000000f0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x10) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x10) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x10) = 0000000000000000-000000000000db90 +_mm_cmpistri("This", "This is a string", 0x10) => 4 +_mm_cmpestri("This", "This is a string", 0x10) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x10) = 0000000000000000-000000000000db90 +_mm_cmpestri("This", 4, "This is a string", 16, 0x11) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x11) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x11) = 0000000000000000-0000000000000090 +_mm_cmpistri("This", "This is a string", 0x11) => 4 +_mm_cmpestri("This", "This is a string", 0x11) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x11) = 0000000000000000-0000000000000090 +_mm_cmpestri("This is a string", 16, "is", 2, 0x10) => 2 +_mm_cmpestri("This is a string", 16, "is", 2, 0x10) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x10) = 0000000000000000-000000000000fffc +_mm_cmpistri("This is a string", "is", 0x10) => 2 +_mm_cmpestri("This is a string", "is", 0x10) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", "is", 0x10) = 0000000000000000-000000000000fffc +_mm_cmpestri("This is a string", 16, "is", 2, 0x11) => 2 +_mm_cmpestri("This is a string", 16, "is", 2, 0x11) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x11) = 0000000000000000-00000000000000fc +_mm_cmpistri("This is a string", "is", 0x11) => 2 +_mm_cmpestri("This is a string", "is", 0x11) flags: a:0 s:0 z:1 c:1 o:0 +mm_cmpestrm("This is a string", "is", 0x11) = 0000000000000000-00000000000000fc +_mm_cmpestri("is", 2, "This is a string", 16, 0x10) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x10) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x10) = 0000000000000000-000000000000db93 +_mm_cmpistri("is", "This is a string", 0x10) => 0 +_mm_cmpestri("is", "This is a string", 0x10) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x10) = 0000000000000000-000000000000db93 +_mm_cmpestri("is", 2, "This is a string", 16, 0x11) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x11) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x11) = 0000000000000000-0000000000000093 +_mm_cmpistri("is", "This is a string", 0x11) => 0 +_mm_cmpestri("is", "This is a string", 0x11) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x11) = 0000000000000000-0000000000000093 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x10) => 0 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x10) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x10) = 0000000000000000-0000000000003fc5 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x10) => 0 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x10) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x10) = 0000000000000000-0000000000003fc5 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x11) => 0 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x11) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x11) = 0000000000000000-00000000000000f7 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x11) => 0 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x11) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x11) = 0000000000000000-00000000000000f7 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x10) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x10) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x10) = 0000000000000000-000000000000e2b7 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x10) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x10) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x10) = 0000000000000000-000000000000e2b7 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x11) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x11) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x11) = 0000000000000000-00000000000000b7 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x11) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x11) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x11) = 0000000000000000-00000000000000b7 +_mm_cmpestri("This is a string", 16, "", 0, 0x10) => 0 +_mm_cmpestri("This is a string", 16, "", 0, 0x10) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "", 0, 0x10) = 0000000000000000-000000000000ffff +_mm_cmpistri("This is a string", "", 0x10) => 0 +_mm_cmpestri("This is a string", "", 0x10) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "", 0x10) = 0000000000000000-000000000000ffff +_mm_cmpestri("This is a string", 16, "", 0, 0x11) => 0 +_mm_cmpestri("This is a string", 16, "", 0, 0x11) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", 16, "", 0, 0x11) = 0000000000000000-00000000000000ff +_mm_cmpistri("This is a string", "", 0x11) => 0 +_mm_cmpestri("This is a string", "", 0x11) flags: a:0 s:0 z:1 c:1 o:1 +mm_cmpestrm("This is a string", "", 0x11) = 0000000000000000-00000000000000ff +_mm_cmpestri("", 0, "This is a string", 16, 0x10) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x10) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x10) = 0000000000000000-000000000000ffff +_mm_cmpistri("", "This is a string", 0x10) => 0 +_mm_cmpestri("", "This is a string", 0x10) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x10) = 0000000000000000-000000000000ffff +_mm_cmpestri("", 0, "This is a string", 16, 0x11) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x11) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x11) = 0000000000000000-00000000000000ff +_mm_cmpistri("", "This is a string", 0x11) => 0 +_mm_cmpestri("", "This is a string", 0x11) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x11) = 0000000000000000-00000000000000ff +_mm_cmpestri("This is a string", 16, "This", 4, 0x30) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0x30) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x30) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x30) => 16 +_mm_cmpestri("This is a string", "This", 0x30) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x30) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x31) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0x31) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x31) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x31) => 8 +_mm_cmpestri("This is a string", "This", 0x31) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x31) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x30) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x30) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x30) = 0000000000000000-000000000000db90 +_mm_cmpistri("This", "This is a string", 0x30) => 4 +_mm_cmpestri("This", "This is a string", 0x30) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x30) = 0000000000000000-000000000000db90 +_mm_cmpestri("This", 4, "This is a string", 16, 0x31) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x31) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x31) = 0000000000000000-0000000000000090 +_mm_cmpistri("This", "This is a string", 0x31) => 4 +_mm_cmpestri("This", "This is a string", 0x31) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x31) = 0000000000000000-0000000000000090 +_mm_cmpestri("This is a string", 16, "is", 2, 0x30) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x30) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x30) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x30) => 16 +_mm_cmpestri("This is a string", "is", 0x30) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x30) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x31) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x31) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x31) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x31) => 8 +_mm_cmpestri("This is a string", "is", 0x31) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x31) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x30) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x30) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x30) = 0000000000000000-000000000000db93 +_mm_cmpistri("is", "This is a string", 0x30) => 0 +_mm_cmpestri("is", "This is a string", 0x30) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x30) = 0000000000000000-000000000000db93 +_mm_cmpestri("is", 2, "This is a string", 16, 0x31) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x31) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x31) = 0000000000000000-0000000000000093 +_mm_cmpistri("is", "This is a string", 0x31) => 0 +_mm_cmpestri("is", "This is a string", 0x31) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x31) = 0000000000000000-0000000000000093 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x30) => 0 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x30) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x30) = 0000000000000000-0000000000003fc5 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x30) => 0 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x30) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x30) = 0000000000000000-0000000000003fc5 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x31) => 0 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x31) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x31) = 0000000000000000-00000000000000f7 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x31) => 0 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x31) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x31) = 0000000000000000-00000000000000f7 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x30) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x30) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x30) = 0000000000000000-000000000000e2b7 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x30) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x30) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x30) = 0000000000000000-000000000000e2b7 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x31) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x31) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x31) = 0000000000000000-00000000000000b7 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x31) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x31) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x31) = 0000000000000000-00000000000000b7 +_mm_cmpestri("This is a string", 16, "", 0, 0x30) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x30) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x30) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x30) => 16 +_mm_cmpestri("This is a string", "", 0x30) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x30) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x31) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x31) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x31) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x31) => 8 +_mm_cmpestri("This is a string", "", 0x31) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x31) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x30) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x30) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x30) = 0000000000000000-000000000000ffff +_mm_cmpistri("", "This is a string", 0x30) => 0 +_mm_cmpestri("", "This is a string", 0x30) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x30) = 0000000000000000-000000000000ffff +_mm_cmpestri("", 0, "This is a string", 16, 0x31) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x31) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x31) = 0000000000000000-00000000000000ff +_mm_cmpistri("", "This is a string", 0x31) => 0 +_mm_cmpestri("", "This is a string", 0x31) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x31) = 0000000000000000-00000000000000ff +_mm_cmpestri("This is a string", 16, "This", 4, 0x4c) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0x4c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x4c) => 16 +_mm_cmpestri("This is a string", "This", 0x4c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x4d) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0x4d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x4d) => 8 +_mm_cmpestri("This is a string", "This", 0x4d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x4c) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x4c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x4c) = 0000000000000000-00000000000000ff +_mm_cmpistri("This", "This is a string", 0x4c) => 0 +_mm_cmpestri("This", "This is a string", 0x4c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x4c) = 0000000000000000-00000000000000ff +_mm_cmpestri("This", 4, "This is a string", 16, 0x4d) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x4d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x4d) = 0000000000000000-000000000000ffff +_mm_cmpistri("This", "This is a string", 0x4d) => 0 +_mm_cmpestri("This", "This is a string", 0x4d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x4d) = 0000000000000000-000000000000ffff +_mm_cmpestri("This is a string", 16, "is", 2, 0x4c) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x4c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x4c) => 16 +_mm_cmpestri("This is a string", "is", 0x4c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x4d) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x4d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x4d) => 8 +_mm_cmpestri("This is a string", "is", 0x4d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x4c) => 5 +_mm_cmpestri("is", 2, "This is a string", 16, 0x4c) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x4c) = 000000000000ff00-0000000000ff0000 +_mm_cmpistri("is", "This is a string", 0x4c) => 5 +_mm_cmpestri("is", "This is a string", 0x4c) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x4c) = 000000000000ff00-0000000000ff0000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x4d) => 5 +_mm_cmpestri("is", 2, "This is a string", 16, 0x4d) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x4d) = 000000000000ffff-0000000000000000 +_mm_cmpistri("is", "This is a string", 0x4d) => 5 +_mm_cmpestri("is", "This is a string", 0x4d) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x4d) = 000000000000ffff-0000000000000000 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4c) => 16 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x4c) => 16 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x4c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4d) => 8 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x4d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x4d) => 8 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x4d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4c) => 16 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x4c) => 16 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x4c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4d) => 8 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x4d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x4d) => 8 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x4d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x4c) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x4c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x4c) => 16 +_mm_cmpestri("This is a string", "", 0x4c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x4c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x4d) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x4d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x4d) => 8 +_mm_cmpestri("This is a string", "", 0x4d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x4d) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x4c) => 15 +_mm_cmpestri("", 0, "This is a string", 16, 0x4c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x4c) = 00000000ffffffff-00000000ffffffff +_mm_cmpistri("", "This is a string", 0x4c) => 15 +_mm_cmpestri("", "This is a string", 0x4c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x4c) = 00000000ffffffff-00000000ffffffff +_mm_cmpestri("", 0, "This is a string", 16, 0x4d) => 7 +_mm_cmpestri("", 0, "This is a string", 16, 0x4d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x4d) = 00000000ffffffff-00000000ffffffff +_mm_cmpistri("", "This is a string", 0x4d) => 7 +_mm_cmpestri("", "This is a string", 0x4d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x4d) = 00000000ffffffff-00000000ffffffff +_mm_cmpestri("This is a string", 16, "This", 4, 0x2c) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0x2c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x2c) => 16 +_mm_cmpestri("This is a string", "This", 0x2c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x2d) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0x2d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x2d) => 8 +_mm_cmpestri("This is a string", "This", 0x2d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x2c) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x2c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x2c) = 0000000000000000-0000000000000001 +_mm_cmpistri("This", "This is a string", 0x2c) => 0 +_mm_cmpestri("This", "This is a string", 0x2c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x2c) = 0000000000000000-0000000000000001 +_mm_cmpestri("This", 4, "This is a string", 16, 0x2d) => 0 +_mm_cmpestri("This", 4, "This is a string", 16, 0x2d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", 4, "This is a string", 16, 0x2d) = 0000000000000000-0000000000000001 +_mm_cmpistri("This", "This is a string", 0x2d) => 0 +_mm_cmpestri("This", "This is a string", 0x2d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("This", "This is a string", 0x2d) = 0000000000000000-0000000000000001 +_mm_cmpestri("This is a string", 16, "is", 2, 0x2c) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x2c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x2c) => 16 +_mm_cmpestri("This is a string", "is", 0x2c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x2d) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x2d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x2d) => 8 +_mm_cmpestri("This is a string", "is", 0x2d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x2c) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0x2c) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x2c) = 0000000000000000-0000000000000024 +_mm_cmpistri("is", "This is a string", 0x2c) => 2 +_mm_cmpestri("is", "This is a string", 0x2c) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x2c) = 0000000000000000-0000000000000024 +_mm_cmpestri("is", 2, "This is a string", 16, 0x2d) => 2 +_mm_cmpestri("is", 2, "This is a string", 16, 0x2d) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", 2, "This is a string", 16, 0x2d) = 0000000000000000-0000000000000024 +_mm_cmpistri("is", "This is a string", 0x2d) => 2 +_mm_cmpestri("is", "This is a string", 0x2d) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("is", "This is a string", 0x2d) = 0000000000000000-0000000000000024 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x2c) => 16 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x2c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x2c) => 16 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x2c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x2d) => 8 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x2d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x2d) => 8 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x2d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x2c) => 16 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x2c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x2c) => 16 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x2c) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x2d) => 8 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x2d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x2d) => 8 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x2d) flags: a:1 s:0 z:0 c:0 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x2c) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x2c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x2c) => 16 +_mm_cmpestri("This is a string", "", 0x2c) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x2c) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x2d) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x2d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x2d) => 8 +_mm_cmpestri("This is a string", "", 0x2d) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x2d) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x2c) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x2c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x2c) = 0000000000000000-000000000000ffff +_mm_cmpistri("", "This is a string", 0x2c) => 0 +_mm_cmpestri("", "This is a string", 0x2c) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x2c) = 0000000000000000-000000000000ffff +_mm_cmpestri("", 0, "This is a string", 16, 0x2d) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x2d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x2d) = 0000000000000000-00000000000000ff +_mm_cmpistri("", "This is a string", 0x2d) => 0 +_mm_cmpestri("", "This is a string", 0x2d) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x2d) = 0000000000000000-00000000000000ff +_mm_cmpestri("This is a string", 16, "This", 4, 0x34) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0x34) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x34) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x34) => 16 +_mm_cmpestri("This is a string", "This", 0x34) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x34) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x35) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0x35) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x35) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x35) => 8 +_mm_cmpestri("This is a string", "This", 0x35) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x35) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x34) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x34) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x34) = 0000000000000000-0000000000000a90 +_mm_cmpistri("This", "This is a string", 0x34) => 4 +_mm_cmpestri("This", "This is a string", 0x34) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x34) = 0000000000000000-0000000000000a90 +_mm_cmpestri("This", 4, "This is a string", 16, 0x35) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x35) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x35) = 0000000000000000-0000000000000090 +_mm_cmpistri("This", "This is a string", 0x35) => 4 +_mm_cmpestri("This", "This is a string", 0x35) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x35) = 0000000000000000-0000000000000090 +_mm_cmpestri("This is a string", 16, "is", 2, 0x34) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x34) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x34) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x34) => 16 +_mm_cmpestri("This is a string", "is", 0x34) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x34) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x35) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x35) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x35) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x35) => 8 +_mm_cmpestri("This is a string", "is", 0x35) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x35) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x34) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x34) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x34) = 0000000000000000-0000000000008b93 +_mm_cmpistri("is", "This is a string", 0x34) => 0 +_mm_cmpestri("is", "This is a string", 0x34) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x34) = 0000000000000000-0000000000008b93 +_mm_cmpestri("is", 2, "This is a string", 16, 0x35) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x35) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x35) = 0000000000000000-0000000000000093 +_mm_cmpistri("is", "This is a string", 0x35) => 0 +_mm_cmpestri("is", "This is a string", 0x35) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x35) = 0000000000000000-0000000000000093 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x34) => 6 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x34) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x34) = 0000000000000000-0000000000000040 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x34) => 6 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x34) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x34) = 0000000000000000-0000000000000040 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x35) => 4 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x35) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x35) = 0000000000000000-0000000000000050 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x35) => 4 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x35) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x35) = 0000000000000000-0000000000000050 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x34) => 4 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x34) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x34) = 0000000000000000-0000000000000a90 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x34) => 4 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x34) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x34) = 0000000000000000-0000000000000a90 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x35) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x35) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x35) = 0000000000000000-0000000000000091 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x35) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x35) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x35) = 0000000000000000-0000000000000091 +_mm_cmpestri("This is a string", 16, "", 0, 0x34) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x34) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x34) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x34) => 16 +_mm_cmpestri("This is a string", "", 0x34) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x34) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x35) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x35) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x35) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x35) => 8 +_mm_cmpestri("This is a string", "", 0x35) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x35) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x34) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x34) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x34) = 0000000000000000-000000000000ffff +_mm_cmpistri("", "This is a string", 0x34) => 0 +_mm_cmpestri("", "This is a string", 0x34) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x34) = 0000000000000000-000000000000ffff +_mm_cmpestri("", 0, "This is a string", 16, 0x35) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x35) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x35) = 0000000000000000-00000000000000ff +_mm_cmpistri("", "This is a string", 0x35) => 0 +_mm_cmpestri("", "This is a string", 0x35) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x35) = 0000000000000000-00000000000000ff +_mm_cmpestri("This is a string", 16, "This", 4, 0x36) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0x36) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x36) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x36) => 16 +_mm_cmpestri("This is a string", "This", 0x36) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x36) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x37) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0x37) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x37) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x37) => 8 +_mm_cmpestri("This is a string", "This", 0x37) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x37) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x36) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x36) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x36) = 0000000000000000-0000000000000a90 +_mm_cmpistri("This", "This is a string", 0x36) => 4 +_mm_cmpestri("This", "This is a string", 0x36) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x36) = 0000000000000000-0000000000000a90 +_mm_cmpestri("This", 4, "This is a string", 16, 0x37) => 4 +_mm_cmpestri("This", 4, "This is a string", 16, 0x37) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x37) = 0000000000000000-0000000000000090 +_mm_cmpistri("This", "This is a string", 0x37) => 4 +_mm_cmpestri("This", "This is a string", 0x37) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x37) = 0000000000000000-0000000000000090 +_mm_cmpestri("This is a string", 16, "is", 2, 0x36) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x36) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x36) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x36) => 16 +_mm_cmpestri("This is a string", "is", 0x36) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x36) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x37) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x37) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x37) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x37) => 8 +_mm_cmpestri("This is a string", "is", 0x37) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x37) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x36) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x36) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x36) = 0000000000000000-0000000000008b93 +_mm_cmpistri("is", "This is a string", 0x36) => 0 +_mm_cmpestri("is", "This is a string", 0x36) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x36) = 0000000000000000-0000000000008b93 +_mm_cmpestri("is", 2, "This is a string", 16, 0x37) => 0 +_mm_cmpestri("is", 2, "This is a string", 16, 0x37) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x37) = 0000000000000000-0000000000000093 +_mm_cmpistri("is", "This is a string", 0x37) => 0 +_mm_cmpestri("is", "This is a string", 0x37) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x37) = 0000000000000000-0000000000000093 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x36) => 6 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x36) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x36) = 0000000000000000-0000000000000040 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x36) => 6 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x36) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x36) = 0000000000000000-0000000000000040 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x37) => 4 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x37) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x37) = 0000000000000000-0000000000000050 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x37) => 4 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x37) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x37) = 0000000000000000-0000000000000050 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x36) => 4 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x36) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x36) = 0000000000000000-0000000000000a90 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x36) => 4 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x36) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x36) = 0000000000000000-0000000000000a90 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x37) => 0 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x37) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x37) = 0000000000000000-0000000000000091 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x37) => 0 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x37) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x37) = 0000000000000000-0000000000000091 +_mm_cmpestri("This is a string", 16, "", 0, 0x36) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x36) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x36) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x36) => 16 +_mm_cmpestri("This is a string", "", 0x36) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x36) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x37) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x37) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x37) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x37) => 8 +_mm_cmpestri("This is a string", "", 0x37) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x37) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x36) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x36) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x36) = 0000000000000000-000000000000ffff +_mm_cmpistri("", "This is a string", 0x36) => 0 +_mm_cmpestri("", "This is a string", 0x36) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x36) = 0000000000000000-000000000000ffff +_mm_cmpestri("", 0, "This is a string", 16, 0x37) => 0 +_mm_cmpestri("", 0, "This is a string", 16, 0x37) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x37) = 0000000000000000-00000000000000ff +_mm_cmpistri("", "This is a string", 0x37) => 0 +_mm_cmpestri("", "This is a string", 0x37) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x37) = 0000000000000000-00000000000000ff +_mm_cmpestri("This is a string", 16, "This", 4, 0x74) => 16 +_mm_cmpestri("This is a string", 16, "This", 4, 0x74) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x74) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x74) => 16 +_mm_cmpestri("This is a string", "This", 0x74) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x74) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "This", 4, 0x75) => 8 +_mm_cmpestri("This is a string", 16, "This", 4, 0x75) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "This", 4, 0x75) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "This", 0x75) => 8 +_mm_cmpestri("This is a string", "This", 0x75) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "This", 0x75) = 0000000000000000-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x74) => 11 +_mm_cmpestri("This", 4, "This is a string", 16, 0x74) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x74) = 00000000ff0000ff-0000000000000000 +_mm_cmpistri("This", "This is a string", 0x74) => 11 +_mm_cmpestri("This", "This is a string", 0x74) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x74) = 00000000ff0000ff-0000000000000000 +_mm_cmpestri("This", 4, "This is a string", 16, 0x75) => 7 +_mm_cmpestri("This", 4, "This is a string", 16, 0x75) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", 4, "This is a string", 16, 0x75) = 0000000000000000-0000000000000000 +_mm_cmpistri("This", "This is a string", 0x75) => 7 +_mm_cmpestri("This", "This is a string", 0x75) flags: a:0 s:1 z:0 c:1 o:0 +mm_cmpestrm("This", "This is a string", 0x75) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x74) => 16 +_mm_cmpestri("This is a string", 16, "is", 2, 0x74) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x74) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x74) => 16 +_mm_cmpestri("This is a string", "is", 0x74) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x74) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "is", 2, 0x75) => 8 +_mm_cmpestri("This is a string", 16, "is", 2, 0x75) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "is", 2, 0x75) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "is", 0x75) => 8 +_mm_cmpestri("This is a string", "is", 0x75) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "is", 0x75) = 0000000000000000-0000000000000000 +_mm_cmpestri("is", 2, "This is a string", 16, 0x74) => 15 +_mm_cmpestri("is", 2, "This is a string", 16, 0x74) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x74) = 00000000ff0000ff-000000000000ffff +_mm_cmpistri("is", "This is a string", 0x74) => 15 +_mm_cmpestri("is", "This is a string", 0x74) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x74) = 00000000ff0000ff-000000000000ffff +_mm_cmpestri("is", 2, "This is a string", 16, 0x75) => 7 +_mm_cmpestri("is", 2, "This is a string", 16, 0x75) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", 2, "This is a string", 16, 0x75) = 0000000000000000-00000000ffffffff +_mm_cmpistri("is", "This is a string", 0x75) => 7 +_mm_cmpestri("is", "This is a string", 0x75) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("is", "This is a string", 0x75) = 0000000000000000-00000000ffffffff +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x74) => 6 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x74) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x74) = 0000000000ff0000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x74) => 6 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x74) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x74) = 0000000000ff0000-0000000000000000 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x75) => 6 +_mm_cmpestri("This is a string", 16, "maestrum-foo-bar", 16, 0x75) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", 16, "maestrum-foo-bar", 16, 0x75) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "maestrum-foo-bar", 0x75) => 6 +_mm_cmpestri("This is a string", "maestrum-foo-bar", 0x75) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("This is a string", "maestrum-foo-bar", 0x75) = 0000000000000000-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x74) => 11 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x74) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x74) = 00000000ff0000ff-0000000000000000 +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x74) => 11 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x74) flags: a:0 s:0 z:0 c:1 o:0 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x74) = 00000000ff0000ff-0000000000000000 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x75) => 7 +_mm_cmpestri("maestrum-foo-bar", 16, "This is a string", 16, 0x75) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", 16, "This is a string", 16, 0x75) = 0000000000000000-000000000000ffff +_mm_cmpistri("maestrum-foo-bar", "This is a string", 0x75) => 7 +_mm_cmpestri("maestrum-foo-bar", "This is a string", 0x75) flags: a:0 s:0 z:0 c:1 o:1 +mm_cmpestrm("maestrum-foo-bar", "This is a string", 0x75) = 0000000000000000-000000000000ffff +_mm_cmpestri("This is a string", 16, "", 0, 0x74) => 16 +_mm_cmpestri("This is a string", 16, "", 0, 0x74) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x74) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x74) => 16 +_mm_cmpestri("This is a string", "", 0x74) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x74) = 0000000000000000-0000000000000000 +_mm_cmpestri("This is a string", 16, "", 0, 0x75) => 8 +_mm_cmpestri("This is a string", 16, "", 0, 0x75) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", 16, "", 0, 0x75) = 0000000000000000-0000000000000000 +_mm_cmpistri("This is a string", "", 0x75) => 8 +_mm_cmpestri("This is a string", "", 0x75) flags: a:0 s:0 z:1 c:0 o:0 +mm_cmpestrm("This is a string", "", 0x75) = 0000000000000000-0000000000000000 +_mm_cmpestri("", 0, "This is a string", 16, 0x74) => 15 +_mm_cmpestri("", 0, "This is a string", 16, 0x74) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x74) = 00000000ffffffff-00000000ffffffff +_mm_cmpistri("", "This is a string", 0x74) => 15 +_mm_cmpestri("", "This is a string", 0x74) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x74) = 00000000ffffffff-00000000ffffffff +_mm_cmpestri("", 0, "This is a string", 16, 0x75) => 7 +_mm_cmpestri("", 0, "This is a string", 16, 0x75) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", 0, "This is a string", 16, 0x75) = 00000000ffffffff-00000000ffffffff +_mm_cmpistri("", "This is a string", 0x75) => 7 +_mm_cmpestri("", "This is a string", 0x75) flags: a:0 s:1 z:0 c:1 o:1 +mm_cmpestrm("", "This is a string", 0x75) = 00000000ffffffff-00000000ffffffff +crc32(0x0, byte:0x0) => 0x0 +crc32(0x0, byte:0xa) => 0x6be22838 +crc32(0x6be22838, dword:0x0) => 0xb545d4c9 +crc32(0xb545d4c9, dword:0x123456) => 0xc4dd37b5 +crc32(0xc4dd37b5, word:0x8765) => 0x89047b68 diff --git a/tests32/ref26.txt b/tests32/ref26.txt new file mode 100644 index 0000000000000000000000000000000000000000..358877e1a98ef79b16134a886f906b8ddb6b4963 --- /dev/null +++ b/tests32/ref26.txt @@ -0,0 +1,810 @@ +Testing: s = (0x1.123456789abcp2) -> (double)s +FE_TONEAREST 0x1.123456789abcp+2 +FE_DOWNWARD 0x1.123456789abcp+2 +FE_UPWARD 0x1.123456789abcp+2 +FE_TOWARDZERO 0x1.123456789abcp+2 + +Testing: s = (0x1.123456789abcp2) -> (float)s +FE_TONEAREST 0x1.123456p+2 +FE_DOWNWARD 0x1.123456p+2 +FE_UPWARD 0x1.123458p+2 +FE_TOWARDZERO 0x1.123456p+2 + +Testing: s = (-(0x1.123456789abcp2)) -> (double)s +FE_TONEAREST -0x1.123456789abcp+2 +FE_DOWNWARD -0x1.123456789abcp+2 +FE_UPWARD -0x1.123456789abcp+2 +FE_TOWARDZERO -0x1.123456789abcp+2 + +Testing: s = (-(0x1.123456789abcp2)) -> (float)s +FE_TONEAREST -0x1.123456p+2 +FE_DOWNWARD -0x1.123458p+2 +FE_UPWARD -0x1.123456p+2 +FE_TOWARDZERO -0x1.123456p+2 + +Testing: d = (0x1.123456789abcp512) -> (float)d +FE_TONEAREST inf +FE_DOWNWARD 0x1.fffffep+127 +FE_UPWARD inf +FE_TOWARDZERO 0x1.fffffep+127 + +Testing: s = (0x1.123456789abcp29) -> (double)s +FE_TONEAREST 0x1.123456789abcp+29 +FE_DOWNWARD 0x1.123456789abcp+29 +FE_UPWARD 0x1.123456789abcp+29 +FE_TOWARDZERO 0x1.123456789abcp+29 + +Testing: s = (0x1.123456789abcp29) -> (float)s +FE_TONEAREST 0x1.123456p+29 +FE_DOWNWARD 0x1.123456p+29 +FE_UPWARD 0x1.123458p+29 +FE_TOWARDZERO 0x1.123456p+29 + +Testing: s = (0x1.123456789abcp29) -> (int16_t)s +FE_TONEAREST -32768 +FE_DOWNWARD -32768 +FE_UPWARD -32768 +FE_TOWARDZERO -32768 + +Testing: s = (0x1.123456789abcp29) -> (int8_t)s +FE_TONEAREST 0 +FE_DOWNWARD 0 +FE_UPWARD 0 +FE_TOWARDZERO 0 + +Testing: s = (0x1.123456789abcp29) -> (unsigned short)s +FE_TONEAREST 35535 +FE_DOWNWARD 35535 +FE_UPWARD 35535 +FE_TOWARDZERO 35535 + +Testing: s = (0x1.123456789abcp29) -> (unsigned char)s +FE_TONEAREST 0 +FE_DOWNWARD 0 +FE_UPWARD 0 +FE_TOWARDZERO 0 + +Testing: s = (-(0x1.123456789abcp29)) -> (double)s +FE_TONEAREST -0x1.123456789abcp+29 +FE_DOWNWARD -0x1.123456789abcp+29 +FE_UPWARD -0x1.123456789abcp+29 +FE_TOWARDZERO -0x1.123456789abcp+29 + +Testing: s = (-(0x1.123456789abcp29)) -> (float)s +FE_TONEAREST -0x1.123456p+29 +FE_DOWNWARD -0x1.123458p+29 +FE_UPWARD -0x1.123456p+29 +FE_TOWARDZERO -0x1.123456p+29 + +Testing: d = (-0x1.123456789abcp30) -> (int32_t)d +FE_TONEAREST -1150096798 +FE_DOWNWARD -1150096798 +FE_UPWARD -1150096798 +FE_TOWARDZERO -1150096798 + +Testing: d = (-0x1.123456789abcp62) -> (int64_t)d +FE_TONEAREST -4939628135293321216 +FE_DOWNWARD -4939628135293321216 +FE_UPWARD -4939628135293321216 +FE_TOWARDZERO -4939628135293321216 + +Testing: s = (0x1.123456789abcp2f) -> (double)s +FE_TONEAREST 0x1.123456p+2 +FE_DOWNWARD 0x1.123456p+2 +FE_UPWARD 0x1.123458p+2 +FE_TOWARDZERO 0x1.123456p+2 + +Testing: s = (0x1.123456789abcp2f) -> (float)s +FE_TONEAREST 0x1.123456p+2 +FE_DOWNWARD 0x1.123456p+2 +FE_UPWARD 0x1.123458p+2 +FE_TOWARDZERO 0x1.123456p+2 + +Testing: s = (-(0x1.123456789abcp2f)) -> (double)s +FE_TONEAREST -0x1.123456p+2 +FE_DOWNWARD -0x1.123458p+2 +FE_UPWARD -0x1.123456p+2 +FE_TOWARDZERO -0x1.123456p+2 + +Testing: s = (-(0x1.123456789abcp2f)) -> (float)s +FE_TONEAREST -0x1.123456p+2 +FE_DOWNWARD -0x1.123458p+2 +FE_UPWARD -0x1.123456p+2 +FE_TOWARDZERO -0x1.123456p+2 + +Testing: s = (0x1.123456789abcp29f) -> (double)s +FE_TONEAREST 0x1.123456p+29 +FE_DOWNWARD 0x1.123456p+29 +FE_UPWARD 0x1.123458p+29 +FE_TOWARDZERO 0x1.123456p+29 + +Testing: s = (0x1.123456789abcp29f) -> (float)s +FE_TONEAREST 0x1.123456p+29 +FE_DOWNWARD 0x1.123456p+29 +FE_UPWARD 0x1.123458p+29 +FE_TOWARDZERO 0x1.123456p+29 + +Testing: s = (0x1.123456789abcp29f) -> (int16_t)s +FE_TONEAREST -32768 +FE_DOWNWARD -32768 +FE_UPWARD -32768 +FE_TOWARDZERO -32768 + +Testing: s = (0x1.123456789abcp29f) -> (int8_t)s +FE_TONEAREST 0 +FE_DOWNWARD 0 +FE_UPWARD 0 +FE_TOWARDZERO 0 + +Testing: s = (0x1.123456789abcp29f) -> (unsigned short)s +FE_TONEAREST 35520 +FE_DOWNWARD 35520 +FE_UPWARD 35584 +FE_TOWARDZERO 35520 + +Testing: s = (0x1.123456789abcp29f) -> (unsigned char)s +FE_TONEAREST 0 +FE_DOWNWARD 0 +FE_UPWARD 0 +FE_TOWARDZERO 0 + +Testing: s = (-(0x1.123456789abcp29f)) -> (double)s +FE_TONEAREST -0x1.123456p+29 +FE_DOWNWARD -0x1.123458p+29 +FE_UPWARD -0x1.123456p+29 +FE_TOWARDZERO -0x1.123456p+29 + +Testing: s = (-(0x1.123456789abcp29f)) -> (float)s +FE_TONEAREST -0x1.123456p+29 +FE_DOWNWARD -0x1.123458p+29 +FE_UPWARD -0x1.123456p+29 +FE_TOWARDZERO -0x1.123456p+29 + +Testing: f = -0x1.123456789abcp30f -> (int32_t)f +FE_TONEAREST -1150096768 +FE_DOWNWARD -1150096896 +FE_UPWARD -1150096768 +FE_TOWARDZERO -1150096768 + +Testing: d = -0x1.1234567p0 -> (double)((int)d) +FE_TONEAREST -0x1p+0 +FE_DOWNWARD -0x1p+0 +FE_UPWARD -0x1p+0 +FE_TOWARDZERO -0x1p+0 + +Testing: d = 0x1.9234567p0 -> (double)((int)d) +FE_TONEAREST 0x1p+0 +FE_DOWNWARD 0x1p+0 +FE_UPWARD 0x1p+0 +FE_TOWARDZERO 0x1p+0 + +Testing: d = -0x1.9234567p0 -> (double)((int)d) +FE_TONEAREST -0x1p+0 +FE_DOWNWARD -0x1p+0 +FE_UPWARD -0x1p+0 +FE_TOWARDZERO -0x1p+0 + +Testing: d = 0x1.1234567p0 -> (double)((long int)d) +FE_TONEAREST 0x1p+0 +FE_DOWNWARD 0x1p+0 +FE_UPWARD 0x1p+0 +FE_TOWARDZERO 0x1p+0 + +Testing: d = -0x1.1234567p0 -> (double)((long int)d) +FE_TONEAREST -0x1p+0 +FE_DOWNWARD -0x1p+0 +FE_UPWARD -0x1p+0 +FE_TOWARDZERO -0x1p+0 + +Testing: d = 0x1.9234567p0 -> (double)((long int)d) +FE_TONEAREST 0x1p+0 +FE_DOWNWARD 0x1p+0 +FE_UPWARD 0x1p+0 +FE_TOWARDZERO 0x1p+0 + +Testing: d = -0x1.9234567p0 -> (double)((long int)d) +FE_TONEAREST -0x1p+0 +FE_DOWNWARD -0x1p+0 +FE_UPWARD -0x1p+0 +FE_TOWARDZERO -0x1p+0 + +Testing: (d1 = (1.0), d2 = (0x1.0000000000001p0)) -> d1 + d2 +FE_TONEAREST 0x1p+1 +FE_DOWNWARD 0x1p+1 +FE_UPWARD 0x1.0000000000001p+1 +FE_TOWARDZERO 0x1p+1 + +Testing: (d1 = -(1.0), d2 = (0x1.0000000000001p0)) -> d1 + d2 +FE_TONEAREST 0x1p-52 +FE_DOWNWARD 0x1p-52 +FE_UPWARD 0x1p-52 +FE_TOWARDZERO 0x1p-52 + +Testing: (d1 = (1.0), d2 = -(0x1.0000000000001p0)) -> d1 + d2 +FE_TONEAREST -0x1p-52 +FE_DOWNWARD -0x1p-52 +FE_UPWARD -0x1p-52 +FE_TOWARDZERO -0x1p-52 + +Testing: (d1 = -(1.0), d2 = -(0x1.0000000000001p0)) -> d1 + d2 +FE_TONEAREST -0x1p+1 +FE_DOWNWARD -0x1.0000000000001p+1 +FE_UPWARD -0x1p+1 +FE_TOWARDZERO -0x1p+1 + +Testing: (d1 = (1.0), d2 = (0x1.0000000000001p0)) -> d1 - d2 +FE_TONEAREST -0x1p-52 +FE_DOWNWARD -0x1p-52 +FE_UPWARD -0x1p-52 +FE_TOWARDZERO -0x1p-52 + +Testing: (d1 = -(1.0), d2 = (0x1.0000000000001p0)) -> d1 - d2 +FE_TONEAREST -0x1p+1 +FE_DOWNWARD -0x1.0000000000001p+1 +FE_UPWARD -0x1p+1 +FE_TOWARDZERO -0x1p+1 + +Testing: (d1 = (1.0), d2 = -(0x1.0000000000001p0)) -> d1 - d2 +FE_TONEAREST 0x1p+1 +FE_DOWNWARD 0x1p+1 +FE_UPWARD 0x1.0000000000001p+1 +FE_TOWARDZERO 0x1p+1 + +Testing: (d1 = -(1.0), d2 = -(0x1.0000000000001p0)) -> d1 - d2 +FE_TONEAREST 0x1p-52 +FE_DOWNWARD 0x1p-52 +FE_UPWARD 0x1p-52 +FE_TOWARDZERO 0x1p-52 + +Testing: (d1 = (1.0), d2 = (0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST 0x1p-52 +FE_DOWNWARD 0x1p-52 +FE_UPWARD 0x1p-52 +FE_TOWARDZERO 0x1p-52 + +Testing: (d1 = -(1.0), d2 = (0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST 0x1p+1 +FE_DOWNWARD 0x1p+1 +FE_UPWARD 0x1.0000000000001p+1 +FE_TOWARDZERO 0x1p+1 + +Testing: (d1 = (1.0), d2 = -(0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST -0x1p+1 +FE_DOWNWARD -0x1.0000000000001p+1 +FE_UPWARD -0x1p+1 +FE_TOWARDZERO -0x1p+1 + +Testing: (d1 = -(1.0), d2 = -(0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST -0x1p-52 +FE_DOWNWARD -0x1p-52 +FE_UPWARD -0x1p-52 +FE_TOWARDZERO -0x1p-52 + +Testing: (d1 = (1.0), d2 = (0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST 0x1.1000000000001p+0 +FE_DOWNWARD 0x1.1p+0 +FE_UPWARD 0x1.1000000000001p+0 +FE_TOWARDZERO 0x1.1p+0 + +Testing: (d1 = -(1.0), d2 = (0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST -0x1.dfffffffffffep-1 +FE_DOWNWARD -0x1.dffffffffffffp-1 +FE_UPWARD -0x1.dfffffffffffep-1 +FE_TOWARDZERO -0x1.dfffffffffffep-1 + +Testing: (d1 = (1.0), d2 = -(0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST 0x1.dfffffffffffep-1 +FE_DOWNWARD 0x1.dfffffffffffep-1 +FE_UPWARD 0x1.dffffffffffffp-1 +FE_TOWARDZERO 0x1.dfffffffffffep-1 + +Testing: (d1 = -(1.0), d2 = -(0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST -0x1.1000000000001p+0 +FE_DOWNWARD -0x1.1000000000001p+0 +FE_UPWARD -0x1.1p+0 +FE_TOWARDZERO -0x1.1p+0 + +Testing: (d1 = (1.0), d2 = (0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST 0x1.dfffffffffffep-1 +FE_DOWNWARD 0x1.dfffffffffffep-1 +FE_UPWARD 0x1.dffffffffffffp-1 +FE_TOWARDZERO 0x1.dfffffffffffep-1 + +Testing: (d1 = -(1.0), d2 = (0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST -0x1.1000000000001p+0 +FE_DOWNWARD -0x1.1000000000001p+0 +FE_UPWARD -0x1.1p+0 +FE_TOWARDZERO -0x1.1p+0 + +Testing: (d1 = (1.0), d2 = -(0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST 0x1.1000000000001p+0 +FE_DOWNWARD 0x1.1p+0 +FE_UPWARD 0x1.1000000000001p+0 +FE_TOWARDZERO 0x1.1p+0 + +Testing: (d1 = -(1.0), d2 = -(0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST -0x1.dfffffffffffep-1 +FE_DOWNWARD -0x1.dffffffffffffp-1 +FE_UPWARD -0x1.dfffffffffffep-1 +FE_TOWARDZERO -0x1.dfffffffffffep-1 + +Testing: (d1 = (1.0), d2 = (0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST -0x1.dfffffffffffep-1 +FE_DOWNWARD -0x1.dffffffffffffp-1 +FE_UPWARD -0x1.dfffffffffffep-1 +FE_TOWARDZERO -0x1.dfffffffffffep-1 + +Testing: (d1 = -(1.0), d2 = (0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST 0x1.1000000000001p+0 +FE_DOWNWARD 0x1.1p+0 +FE_UPWARD 0x1.1000000000001p+0 +FE_TOWARDZERO 0x1.1p+0 + +Testing: (d1 = (1.0), d2 = -(0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST -0x1.1000000000001p+0 +FE_DOWNWARD -0x1.1000000000001p+0 +FE_UPWARD -0x1.1p+0 +FE_TOWARDZERO -0x1.1p+0 + +Testing: (d1 = -(1.0), d2 = -(0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST 0x1.dfffffffffffep-1 +FE_DOWNWARD 0x1.dfffffffffffep-1 +FE_UPWARD 0x1.dffffffffffffp-1 +FE_TOWARDZERO 0x1.dfffffffffffep-1 + +Testing: (d1 = (0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 + d2 +FE_TONEAREST 0x1.2bc55ef8922bp+1 +FE_DOWNWARD 0x1.2bc55ef8922bp+1 +FE_UPWARD 0x1.2bc55ef8922bp+1 +FE_TOWARDZERO 0x1.2bc55ef8922bp+1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 + d2 +FE_TONEAREST 0x1.12233445566p-4 +FE_DOWNWARD 0x1.12233445566p-4 +FE_UPWARD 0x1.12233445566p-4 +FE_TOWARDZERO 0x1.12233445566p-4 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 + d2 +FE_TONEAREST -0x1.12233445566p-4 +FE_DOWNWARD -0x1.12233445566p-4 +FE_UPWARD -0x1.12233445566p-4 +FE_TOWARDZERO -0x1.12233445566p-4 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 + d2 +FE_TONEAREST -0x1.2bc55ef8922bp+1 +FE_DOWNWARD -0x1.2bc55ef8922bp+1 +FE_UPWARD -0x1.2bc55ef8922bp+1 +FE_TOWARDZERO -0x1.2bc55ef8922bp+1 + +Testing: (d1 = (0x1.233445566778p0f), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd404804dp+0 +FE_DOWNWARD 0x1.5ebd3ddf57ep+0 +FE_UPWARD 0x1.5ebd428e6d5cp+0 +FE_TOWARDZERO 0x1.5ebd3ddf57ep+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd404804dp+0 +FE_DOWNWARD -0x1.5ebd404804dp+0 +FE_UPWARD -0x1.5ebd4025c068p+0 +FE_TOWARDZERO -0x1.5ebd3ddf57ep+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd404804dp+0 +FE_DOWNWARD -0x1.5ebd4025c068p+0 +FE_UPWARD -0x1.5ebd404804dp+0 +FE_TOWARDZERO -0x1.5ebd3ddf57ep+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd404804dp+0 +FE_DOWNWARD 0x1.5ebd428e6d5cp+0 +FE_UPWARD 0x1.5ebd3ddf57ep+0 +FE_TOWARDZERO 0x1.5ebd3ddf57ep+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd40f80919p+0 +FE_DOWNWARD 0x1.5ebd3e8f5c27dp+0 +FE_UPWARD 0x1.5ebd40f809191p+0 +FE_TOWARDZERO 0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd40f80919p+0 +FE_DOWNWARD -0x1.5ebd40f809191p+0 +FE_UPWARD -0x1.5ebd3e8f5c27dp+0 +FE_TOWARDZERO -0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd40f80919p+0 +FE_DOWNWARD -0x1.5ebd3e8f5c27ep+0 +FE_UPWARD -0x1.5ebd40f80919p+0 +FE_TOWARDZERO -0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd40f80919p+0 +FE_DOWNWARD 0x1.5ebd40f80919p+0 +FE_UPWARD 0x1.5ebd3e8f5c27ep+0 +FE_TOWARDZERO 0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = (0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd402bc44c4p+0 +FE_DOWNWARD 0x1.5ebd402bc44c4p+0 +FE_UPWARD 0x1.5ebd402bc44c5p+0 +FE_TOWARDZERO 0x1.5ebd402bc44c4p+0 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd402bc44c4p+0 +FE_DOWNWARD -0x1.5ebd402bc44c5p+0 +FE_UPWARD -0x1.5ebd402bc44c4p+0 +FE_TOWARDZERO -0x1.5ebd402bc44c4p+0 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd402bc44c4p+0 +FE_DOWNWARD -0x1.5ebd402bc44c5p+0 +FE_UPWARD -0x1.5ebd402bc44c4p+0 +FE_TOWARDZERO -0x1.5ebd402bc44c4p+0 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd402bc44c4p+0 +FE_DOWNWARD 0x1.5ebd402bc44c4p+0 +FE_UPWARD 0x1.5ebd402bc44c5p+0 +FE_TOWARDZERO 0x1.5ebd402bc44c4p+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd40f80919p+0 +FE_DOWNWARD 0x1.5ebd3e8f5c27dp+0 +FE_UPWARD 0x1.5ebd40f809191p+0 +FE_TOWARDZERO 0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd40f80919p+0 +FE_DOWNWARD -0x1.5ebd40f809191p+0 +FE_UPWARD -0x1.5ebd3e8f5c27dp+0 +FE_TOWARDZERO -0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd40f80919p+0 +FE_DOWNWARD -0x1.5ebd3e8f5c27ep+0 +FE_UPWARD -0x1.5ebd40f80919p+0 +FE_TOWARDZERO -0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd40f80919p+0 +FE_DOWNWARD 0x1.5ebd40f80919p+0 +FE_UPWARD 0x1.5ebd3e8f5c27ep+0 +FE_TOWARDZERO 0x1.5ebd3e8f5c27dp+0 + +Testing: (d1 = (0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd3f7bc003ap+0 +FE_DOWNWARD 0x1.5ebd3f7bc003ap+0 +FE_UPWARD 0x1.5ebd41c2288e5p+0 +FE_TOWARDZERO 0x1.5ebd3f7bc003ap+0 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd3f7bc003ap+0 +FE_DOWNWARD -0x1.5ebd3f7bc003bp+0 +FE_UPWARD -0x1.5ebd41c2288e4p+0 +FE_TOWARDZERO -0x1.5ebd3f7bc003ap+0 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd3f7bc003ap+0 +FE_DOWNWARD -0x1.5ebd41c2288e5p+0 +FE_UPWARD -0x1.5ebd3f7bc003ap+0 +FE_TOWARDZERO -0x1.5ebd3f7bc003ap+0 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd3f7bc003ap+0 +FE_DOWNWARD 0x1.5ebd41c2288e4p+0 +FE_UPWARD 0x1.5ebd3f7bc003bp+0 +FE_TOWARDZERO 0x1.5ebd3f7bc003ap+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd404804dp+0 +FE_DOWNWARD 0x1.5ebd3ddf57ep+0 +FE_UPWARD 0x1.5ebd428e6d5cp+0 +FE_TOWARDZERO 0x1.5ebd3ddf57ep+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd404804dp+0 +FE_DOWNWARD -0x1.5ebd404804dp+0 +FE_UPWARD -0x1.5ebd4025c068p+0 +FE_TOWARDZERO -0x1.5ebd3ddf57ep+0 + +Testing: (d1 = (0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.5ebd404804dp+0 +FE_DOWNWARD -0x1.5ebd4025c068p+0 +FE_UPWARD -0x1.5ebd404804dp+0 +FE_TOWARDZERO -0x1.5ebd3ddf57ep+0 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.5ebd404804dp+0 +FE_DOWNWARD 0x1.5ebd428e6d5cp+0 +FE_UPWARD 0x1.5ebd3ddf57ep+0 +FE_TOWARDZERO 0x1.5ebd3ddf57ep+0 + +Testing: (d1 = (0x1.233445566778p0), d2 = (5)) -> d1 *d2 +FE_TONEAREST 0x1.6c0156ac0156p+2 +FE_DOWNWARD 0x1.6c0156ac0156p+2 +FE_UPWARD 0x1.6c0156ac0156p+2 +FE_TOWARDZERO 0x1.6c0156ac0156p+2 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (5)) -> d1 *d2 +FE_TONEAREST -0x1.6c0156ac0156p+2 +FE_DOWNWARD -0x1.6c0156ac0156p+2 +FE_UPWARD -0x1.6c0156ac0156p+2 +FE_TOWARDZERO -0x1.6c0156ac0156p+2 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(5)) -> d1 *d2 +FE_TONEAREST -0x1.6c0156ac0156p+2 +FE_DOWNWARD -0x1.6c0156ac0156p+2 +FE_UPWARD -0x1.6c0156ac0156p+2 +FE_TOWARDZERO -0x1.6c0156ac0156p+2 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(5)) -> d1 *d2 +FE_TONEAREST 0x1.6c0156ac0156p+2 +FE_DOWNWARD 0x1.6c0156ac0156p+2 +FE_UPWARD 0x1.6c0156ac0156p+2 +FE_TOWARDZERO 0x1.6c0156ac0156p+2 + +Testing: (d1 = (15), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.2111111111102p+4 +FE_DOWNWARD 0x1.2111111111102p+4 +FE_UPWARD 0x1.2111111111102p+4 +FE_TOWARDZERO 0x1.2111111111102p+4 + +Testing: (d1 = -(15), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.2111111111102p+4 +FE_DOWNWARD -0x1.2111111111102p+4 +FE_UPWARD -0x1.2111111111102p+4 +FE_TOWARDZERO -0x1.2111111111102p+4 + +Testing: (d1 = (15), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.2111111111102p+4 +FE_DOWNWARD -0x1.2111111111102p+4 +FE_UPWARD -0x1.2111111111102p+4 +FE_TOWARDZERO -0x1.2111111111102p+4 + +Testing: (d1 = -(15), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.2111111111102p+4 +FE_DOWNWARD 0x1.2111111111102p+4 +FE_UPWARD 0x1.2111111111102p+4 +FE_TOWARDZERO 0x1.2111111111102p+4 + +Testing: (d1 = (0x1.233445566778p0f), d2 = (15)) -> d1 *d2 +FE_TONEAREST 0x1.110101ap+4 +FE_DOWNWARD 0x1.1100ffcp+4 +FE_UPWARD 0x1.110101ap+4 +FE_TOWARDZERO 0x1.1100ffcp+4 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = (15)) -> d1 *d2 +FE_TONEAREST -0x1.110101ap+4 +FE_DOWNWARD -0x1.110101ap+4 +FE_UPWARD -0x1.1100ffcp+4 +FE_TOWARDZERO -0x1.1100ffcp+4 + +Testing: (d1 = (0x1.233445566778p0f), d2 = -(15)) -> d1 *d2 +FE_TONEAREST -0x1.110101ap+4 +FE_DOWNWARD -0x1.1100ffcp+4 +FE_UPWARD -0x1.110101ap+4 +FE_TOWARDZERO -0x1.1100ffcp+4 + +Testing: (d1 = -(0x1.233445566778p0f), d2 = -(15)) -> d1 *d2 +FE_TONEAREST 0x1.110101ap+4 +FE_DOWNWARD 0x1.110101ap+4 +FE_UPWARD 0x1.1100ffcp+4 +FE_TOWARDZERO 0x1.1100ffcp+4 + +Testing: (d1 = (15), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.2111108p+4 +FE_DOWNWARD 0x1.2111108p+4 +FE_UPWARD 0x1.2111126p+4 +FE_TOWARDZERO 0x1.2111108p+4 + +Testing: (d1 = -(15), d2 = (0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.2111108p+4 +FE_DOWNWARD -0x1.2111108p+4 +FE_UPWARD -0x1.2111126p+4 +FE_TOWARDZERO -0x1.2111108p+4 + +Testing: (d1 = (15), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST -0x1.2111108p+4 +FE_DOWNWARD -0x1.2111126p+4 +FE_UPWARD -0x1.2111108p+4 +FE_TOWARDZERO -0x1.2111108p+4 + +Testing: (d1 = -(15), d2 = -(0x1.3456789abcdep0f)) -> d1 *d2 +FE_TONEAREST 0x1.2111108p+4 +FE_DOWNWARD 0x1.2111126p+4 +FE_UPWARD 0x1.2111108p+4 +FE_TOWARDZERO 0x1.2111108p+4 + +Testing: (d1 = (0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST 0x1.e38ca44203ab9p-1 +FE_DOWNWARD 0x1.e38ca44203ab8p-1 +FE_UPWARD 0x1.e38ca44203ab9p-1 +FE_TOWARDZERO 0x1.e38ca44203ab8p-1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST -0x1.e38ca44203ab9p-1 +FE_DOWNWARD -0x1.e38ca44203ab9p-1 +FE_UPWARD -0x1.e38ca44203ab8p-1 +FE_TOWARDZERO -0x1.e38ca44203ab8p-1 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST -0x1.e38ca44203ab9p-1 +FE_DOWNWARD -0x1.e38ca44203ab9p-1 +FE_UPWARD -0x1.e38ca44203ab8p-1 +FE_TOWARDZERO -0x1.e38ca44203ab8p-1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST 0x1.e38ca44203ab9p-1 +FE_DOWNWARD 0x1.e38ca44203ab8p-1 +FE_UPWARD 0x1.e38ca44203ab9p-1 +FE_TOWARDZERO 0x1.e38ca44203ab8p-1 + +Testing: (d1 = (0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST 0x1.e38ca44203ab9p-1 +FE_DOWNWARD 0x1.e38ca44203ab8p-1 +FE_UPWARD 0x1.e38ca44203ab9p-1 +FE_TOWARDZERO 0x1.e38ca44203ab8p-1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST -0x1.e38ca44203ab9p-1 +FE_DOWNWARD -0x1.e38ca44203ab9p-1 +FE_UPWARD -0x1.e38ca44203ab8p-1 +FE_TOWARDZERO -0x1.e38ca44203ab8p-1 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST -0x1.e38ca44203ab9p-1 +FE_DOWNWARD -0x1.e38ca44203ab9p-1 +FE_UPWARD -0x1.e38ca44203ab8p-1 +FE_TOWARDZERO -0x1.e38ca44203ab8p-1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(0x1.3456789abcdep0)) -> d1 / d2 +FE_TONEAREST 0x1.e38ca44203ab9p-1 +FE_DOWNWARD 0x1.e38ca44203ab8p-1 +FE_UPWARD 0x1.e38ca44203ab9p-1 +FE_TOWARDZERO 0x1.e38ca44203ab8p-1 + +Testing: (d1 = (0x1.233445566778p0), d2 = (0x1.3456789abcdep0f)) -> d1 / d2 +FE_TONEAREST 0x1.e38ca534ae61p-1 +FE_DOWNWARD 0x1.e38ca534ae61p-1 +FE_UPWARD 0x1.e38ca211bd4adp-1 +FE_TOWARDZERO 0x1.e38ca534ae61p-1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = (0x1.3456789abcdep0f)) -> d1 / d2 +FE_TONEAREST -0x1.e38ca534ae61p-1 +FE_DOWNWARD -0x1.e38ca534ae611p-1 +FE_UPWARD -0x1.e38ca211bd4acp-1 +FE_TOWARDZERO -0x1.e38ca534ae61p-1 + +Testing: (d1 = (0x1.233445566778p0), d2 = -(0x1.3456789abcdep0f)) -> d1 / d2 +FE_TONEAREST -0x1.e38ca534ae61p-1 +FE_DOWNWARD -0x1.e38ca211bd4adp-1 +FE_UPWARD -0x1.e38ca534ae61p-1 +FE_TOWARDZERO -0x1.e38ca534ae61p-1 + +Testing: (d1 = -(0x1.233445566778p0), d2 = -(0x1.3456789abcdep0f)) -> d1 / d2 +FE_TONEAREST 0x1.e38ca534ae61p-1 +FE_DOWNWARD 0x1.e38ca211bd4acp-1 +FE_UPWARD 0x1.e38ca534ae611p-1 +FE_TOWARDZERO 0x1.e38ca534ae61p-1 + +Testing: (d1 = (1.0), d2 = (0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST 0x1p-52 +FE_DOWNWARD 0x1p-52 +FE_UPWARD 0x1p-52 +FE_TOWARDZERO 0x1p-52 + +Testing: (d1 = -(1.0), d2 = (0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST 0x1p+1 +FE_DOWNWARD 0x1p+1 +FE_UPWARD 0x1.0000000000001p+1 +FE_TOWARDZERO 0x1p+1 + +Testing: (d1 = (1.0), d2 = -(0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST -0x1p+1 +FE_DOWNWARD -0x1.0000000000001p+1 +FE_UPWARD -0x1p+1 +FE_TOWARDZERO -0x1p+1 + +Testing: (d1 = -(1.0), d2 = -(0x1.0000000000001p0)) -> d2 - d1 +FE_TONEAREST -0x1p-52 +FE_DOWNWARD -0x1p-52 +FE_UPWARD -0x1p-52 +FE_TOWARDZERO -0x1p-52 + +Testing: (d1 = (1.0), d2 = (0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST 0x1.1000000000001p+0 +FE_DOWNWARD 0x1.1p+0 +FE_UPWARD 0x1.1000000000001p+0 +FE_TOWARDZERO 0x1.1p+0 + +Testing: (d1 = -(1.0), d2 = (0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST -0x1.dfffffffffffep-1 +FE_DOWNWARD -0x1.dffffffffffffp-1 +FE_UPWARD -0x1.dfffffffffffep-1 +FE_TOWARDZERO -0x1.dfffffffffffep-1 + +Testing: (d1 = (1.0), d2 = -(0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST 0x1.dfffffffffffep-1 +FE_DOWNWARD 0x1.dfffffffffffep-1 +FE_UPWARD 0x1.dffffffffffffp-1 +FE_TOWARDZERO 0x1.dfffffffffffep-1 + +Testing: (d1 = -(1.0), d2 = -(0x1.000000000000dp-4)) -> d1 + d2 +FE_TONEAREST -0x1.1000000000001p+0 +FE_DOWNWARD -0x1.1000000000001p+0 +FE_UPWARD -0x1.1p+0 +FE_TOWARDZERO -0x1.1p+0 + +Testing: (d1 = (1.0), d2 = (0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST 0x1.dfffffffffffep-1 +FE_DOWNWARD 0x1.dfffffffffffep-1 +FE_UPWARD 0x1.dffffffffffffp-1 +FE_TOWARDZERO 0x1.dfffffffffffep-1 + +Testing: (d1 = -(1.0), d2 = (0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST -0x1.1000000000001p+0 +FE_DOWNWARD -0x1.1000000000001p+0 +FE_UPWARD -0x1.1p+0 +FE_TOWARDZERO -0x1.1p+0 + +Testing: (d1 = (1.0), d2 = -(0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST 0x1.1000000000001p+0 +FE_DOWNWARD 0x1.1p+0 +FE_UPWARD 0x1.1000000000001p+0 +FE_TOWARDZERO 0x1.1p+0 + +Testing: (d1 = -(1.0), d2 = -(0x1.000000000000dp-4)) -> d1 - d2 +FE_TONEAREST -0x1.dfffffffffffep-1 +FE_DOWNWARD -0x1.dffffffffffffp-1 +FE_UPWARD -0x1.dfffffffffffep-1 +FE_TOWARDZERO -0x1.dfffffffffffep-1 + +Testing: (d1 = (1.0), d2 = (0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST -0x1.dfffffffffffep-1 +FE_DOWNWARD -0x1.dffffffffffffp-1 +FE_UPWARD -0x1.dfffffffffffep-1 +FE_TOWARDZERO -0x1.dfffffffffffep-1 + +Testing: (d1 = -(1.0), d2 = (0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST 0x1.1000000000001p+0 +FE_DOWNWARD 0x1.1p+0 +FE_UPWARD 0x1.1000000000001p+0 +FE_TOWARDZERO 0x1.1p+0 + +Testing: (d1 = (1.0), d2 = -(0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST -0x1.1000000000001p+0 +FE_DOWNWARD -0x1.1000000000001p+0 +FE_UPWARD -0x1.1p+0 +FE_TOWARDZERO -0x1.1p+0 + +Testing: (d1 = -(1.0), d2 = -(0x1.000000000000dp-4)) -> d2 - d1 +FE_TONEAREST 0x1.dfffffffffffep-1 +FE_DOWNWARD 0x1.dfffffffffffep-1 +FE_UPWARD 0x1.dffffffffffffp-1 +FE_TOWARDZERO 0x1.dfffffffffffep-1 + +Testing X87 instruction: "FSQRT" (ST0 = 0x1p+2, ST1 = 0x0p+0) +FE_TONEAREST ST0 = 0x1p+1 +FE_DOWNWARD ST0 = 0x1p+1 +FE_UPWARD ST0 = 0x1p+1 +FE_TOWARDZERO ST0 = 0x1p+1 + +Testing X87 instruction: "FSQRT" (ST0 = 0x1.0000000000001p+1, ST1 = 0x0p+0) +FE_TONEAREST ST0 = 0x1.6a09e667f3bcdp+0 +FE_DOWNWARD ST0 = 0x1.6a09e667f3bcdp+0 +FE_UPWARD ST0 = 0x1.6a09e667f3bcep+0 +FE_TOWARDZERO ST0 = 0x1.6a09e667f3bcdp+0 + +Testing X87 instruction: "FSQRT" (ST0 = 0x1.123456789abcp+31, ST1 = 0x0p+0) +FE_TONEAREST ST0 = 0x1.76b0aac9e6a5p+15 +FE_DOWNWARD ST0 = 0x1.76b0aac9e6a4fp+15 +FE_UPWARD ST0 = 0x1.76b0aac9e6a5p+15 +FE_TOWARDZERO ST0 = 0x1.76b0aac9e6a4fp+15 + +Testing X87 instruction: "FSQRT" (ST0 = 0x1.123456789abdp+31, ST1 = 0x0p+0) +FE_TONEAREST ST0 = 0x1.76b0aac9e6a5bp+15 +FE_DOWNWARD ST0 = 0x1.76b0aac9e6a5ap+15 +FE_UPWARD ST0 = 0x1.76b0aac9e6a5bp+15 +FE_TOWARDZERO ST0 = 0x1.76b0aac9e6a5ap+15 + diff --git a/tests32/roundtest.h b/tests32/roundtest.h new file mode 100644 index 0000000000000000000000000000000000000000..320e22c96f8292ff70e77846f33fefc181287512 --- /dev/null +++ b/tests32/roundtest.h @@ -0,0 +1,114 @@ +#pragma STDC FENV_ACCESS ON +#include +#include + +#ifdef USE_ASM_ROUNDING +int fesetround_(int rounding_direction) { + uint16_t old_cw; + __asm__("FNSTCW %0" : "=m"(old_cw)::); + uint16_t new_cw = (old_cw & ~0xc00) | rounding_direction; + __asm__("FLDCW %0" ::"m"(new_cw)); + return old_cw & 0xc00; +} +int fegetround_() { + uint16_t cw; + __asm__("FNSTCW %0" : "=m"(cw)::); + return cw & 0xc00; +} +#define fesetround fesetround_ +#define fegetround fegetround_ +#define FE_TONEAREST 0 +#define FE_DOWNWARD 0x400 +#define FE_UPWARD 0x800 +#define FE_TOWARDZERO 0xc00 +#else +#include +#endif + +#define FE_TONEAREST_INDEX 0 +#define FE_DOWNWARD_INDEX 1 +#define FE_UPWARD_INDEX 2 +#define FE_TOWARDZERO_INDEX 3 +int FE_MODES[] = {FE_TONEAREST, FE_DOWNWARD, FE_UPWARD, FE_TOWARDZERO}; +char *FE_MODES_STR[] = { + "FE_TONEAREST", + "FE_DOWNWARD", + "FE_UPWARD", + "FE_TOWARDZERO", +}; + +void assert_round(double *array) { + assert(array[FE_DOWNWARD_INDEX] <= array[FE_TONEAREST_INDEX]); + assert(array[FE_TONEAREST_INDEX] <= array[FE_UPWARD_INDEX]); + if (array[FE_TOWARDZERO_INDEX] < 0) + assert(array[FE_TOWARDZERO_INDEX] == array[FE_UPWARD_INDEX]); + else if (array[FE_TOWARDZERO_INDEX] > 0) + assert(array[FE_TOWARDZERO_INDEX] == array[FE_DOWNWARD_INDEX]); + else if (array[FE_TOWARDZERO_INDEX] == 0) + assert(array[FE_TOWARDZERO_INDEX] == array[FE_UPWARD_INDEX] || + array[FE_TOWARDZERO_INDEX] == array[FE_DOWNWARD_INDEX]); +} + +#define TEST_(exec, expr, format) \ + do { \ + if (sizeof(#exec) == 1) \ + printf("Testing: %s\n", #expr); \ + else \ + printf("Testing: %s -> %s\n", #exec, #expr); \ + for (int i = 0; i < sizeof(FE_MODES) / sizeof(FE_MODES[0]); i++) { \ + fesetround(FE_MODES[i]); \ + exec; \ + printf("%-15s" format "\n", FE_MODES_STR[i], expr); \ + assert(FE_MODES[i] == fegetround()); \ + } \ + printf("\n"); \ + } while (0) + +#define TEST(exec, expr) TEST_(exec, expr, "%a") + +#if defined(i386) || defined(__i386__) || defined(__i386) || \ + defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64) +#define TEST_X87(instruction, st0, st1, deep_change) \ + do { \ + double _st0 = (st0), _st1 = (st1); \ + double array1[4], array2[4]; \ + double __st0, __st1; \ + printf("Testing X87 instruction: %s (ST0 = %a, ST1 = %a)\n", #instruction, \ + _st0, _st1); \ + for (int i = 0; i < sizeof(FE_MODES) / sizeof(FE_MODES[0]); i++) { \ + fesetround(FE_MODES[i]); \ + __st0 = _st0, __st1 = _st1; \ + switch (deep_change) { \ + case -1: /* the instruction pops */ \ + __asm__(instruction : "+t"(__st0) : "u"(__st1) : "st(1)"); \ + printf("%-15s ST0 = %a\n", FE_MODES_STR[i], __st0); \ + break; \ + case 0: \ + __asm__(instruction : "+t"(__st0) : "u"(__st1) :); \ + printf("%-15s ST0 = %a\n", FE_MODES_STR[i], __st0); \ + break; \ + case 1: /* the instruction pushes */ \ + __asm__(instruction : "+t"(__st0), "=u"(__st1)::); \ + printf("%-15s ST0 = %a, ST1 = %a\n", FE_MODES_STR[i], __st0, __st1); \ + array2[i] = __st1; \ + } \ + array1[i] = __st0; \ + assert(FE_MODES[i] == fegetround()); \ + } \ + if (deep_change == 1) \ + assert_round(array2); \ + assert_round(array1); \ + printf("\n"); \ + } while (0) +#else +#define TEST_X87(instruction, st0, st1, deep_change) \ + do { \ + double _st0 = (st0), _st1 = (st1); \ + printf("Cannot test X87 instruction: %s (ST0 = %a, ST1 = %a) because it " \ + "is not compiled to x86\n\n", \ + #instruction, _st0, _st1); \ + } while (0) +#endif + +#define TEST_X87_1(i, st0) TEST_X87(i, st0, 0.0, 0) +#define TEST_X87_2(i, st0, st1) TEST_X87(i, st0, st1, -1) diff --git a/tests32/test01 b/tests32/test01 new file mode 100755 index 0000000000000000000000000000000000000000..f4b84e5fed9bbb1e79a9aa9e2018463792af4870 Binary files /dev/null and b/tests32/test01 differ diff --git a/tests32/test01.c b/tests32/test01.c new file mode 100644 index 0000000000000000000000000000000000000000..3cf91ceb2cb6073fd0c9c80a2c5fd62a1e2dca42 --- /dev/null +++ b/tests32/test01.c @@ -0,0 +1,19 @@ +#include +#include + +int main(int argc, char **argv) +{ + const char msg[] = "Hello World!\n"; + //syscall(4, STDOUT_FILENO, msg, sizeof(msg)-1); + asm ( + "movl $4, %%eax \n" + "movl $1, %%ebx \n" + "movl %0, %%ecx \n" + "movl $13, %%edx \n" + "int $0x80 \n" + : + :"r" (msg) + :"%eax","%ebx","%ecx","%edx" + ); + return 0; +} diff --git a/tests32/test02 b/tests32/test02 new file mode 100755 index 0000000000000000000000000000000000000000..c3c099c4eccf6619887c3db07aeb8b6919944e73 Binary files /dev/null and b/tests32/test02 differ diff --git a/tests32/test02.c b/tests32/test02.c new file mode 100644 index 0000000000000000000000000000000000000000..2ef0ed4626cb9e921d019d7dcd3fb4164c6c5cdc --- /dev/null +++ b/tests32/test02.c @@ -0,0 +1,9 @@ +#include +#include + +int main(int argc, char **argv) +{ + const char msg[] = "Hello World!\n"; + syscall(4, STDOUT_FILENO, msg, sizeof(msg)-1); + return 0; +} diff --git a/tests32/test03 b/tests32/test03 new file mode 100755 index 0000000000000000000000000000000000000000..02689a2c355426772277ed1e6a2b720441196b27 Binary files /dev/null and b/tests32/test03 differ diff --git a/tests32/test03.c b/tests32/test03.c new file mode 100644 index 0000000000000000000000000000000000000000..fb5dcd8ec63ef7b0b21618d3dbb0de5b62588c11 --- /dev/null +++ b/tests32/test03.c @@ -0,0 +1,7 @@ +#include + +int main(int argc, char **argv) +{ + printf("Hello World!\n"); + return 0; +} diff --git a/tests32/test04 b/tests32/test04 new file mode 100755 index 0000000000000000000000000000000000000000..a6b7b89cb4d7b817fc1d8c5349cffecde55d77f5 Binary files /dev/null and b/tests32/test04 differ diff --git a/tests32/test04.c b/tests32/test04.c new file mode 100644 index 0000000000000000000000000000000000000000..520360ed0b3eee3ec9ad6560846ff9631de73ca6 --- /dev/null +++ b/tests32/test04.c @@ -0,0 +1,7 @@ +#include + +int main(int argc, char **argv) +{ + printf("Hello, argc=%d argv[%d]=%s\n", argc, argc-1, argv[argc-1]); + return 0; +} diff --git a/tests32/test05 b/tests32/test05 new file mode 100755 index 0000000000000000000000000000000000000000..e4d5bb6f7b1f0d7c98d834455074f51731977993 Binary files /dev/null and b/tests32/test05 differ diff --git a/tests32/test05.c b/tests32/test05.c new file mode 100755 index 0000000000000000000000000000000000000000..c6a4e67f41bb0f497a9f5ac81cfa0eeace919685 --- /dev/null +++ b/tests32/test05.c @@ -0,0 +1,62 @@ +#include +#include +#include +#include + +int fact(int i) { + if (i<2) return i; + return i*fact(i-1); +} + +#define SET(M) dels[M/8] |= (1<<(M%8)) +#define GET(M) ((dels[M/8]>>(M%8))&1) + +int main(int argc, const char** argv) +{ + int j = 5; + if(argc>1) + j = atoi(argv[1]); + if(j==0) + j=5; + if(j>15) j=15; + + int k = fact(j); + printf("fact(%d)=%d\n", j, k); + + uint8_t* dels = (char*)calloc((k+7)/8, 1); + SET(0); + SET(1); + + for (int i=2; i +#include +#include +#include + +const int thread_count = 2; +pthread_t tid[2]; +const char *thread_messages[2] = { + "First thread executing", + "Second thread executing" +}; + +void *doSomething(void *arg) +{ + pthread_t id = pthread_self(); + int num = -1; + + for (int i = 0 ; i < thread_count ; ++i) + { + if (pthread_equal(id, tid[i])) + { + num = i + 1; + if (num == 2) printf("[%02d] %s\n", num, thread_messages[i]); + break; + } + } + + for (unsigned int i = 0 ; i < 0x10000 ; ++i); + if (num == 2) printf("[%02d] Thread done.\n", num); + + return NULL; +} + +int main(int argc, char const *argv[]) +{ + int err; + + for (int i = 0 ; i < thread_count ; ++i) + { + //printf("[00] Thread %d starting\n", i + 1); + err = pthread_create(&tid[i], NULL, doSomething, NULL); + if (err) + { + printf("[00] Couldn't create thread %d: %s\n", i + 1, strerror(err)); + } + for (unsigned int i = 0 ; i < 0x1000 ; ++i); + } + + //printf("[00] Waiting for all threads to end...\n"); + for (int i = 0 ; i < thread_count ; ++i) + pthread_join(tid[i], NULL); + printf("\n[00] Done.\n"); + + return 0; +} diff --git a/tests32/test07 b/tests32/test07 new file mode 100755 index 0000000000000000000000000000000000000000..75cefd936ed290390824309c8435e4885fe09acf Binary files /dev/null and b/tests32/test07 differ diff --git a/tests32/test07.c b/tests32/test07.c new file mode 100644 index 0000000000000000000000000000000000000000..a20936f795f4243c6e5e3d3431e37a2ee79885e7 --- /dev/null +++ b/tests32/test07.c @@ -0,0 +1,20 @@ +#include +#include + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +int main(int argc, char **argv) +{ + long double zero = 0.0; + + double si = sin(M_PI / 2.0); + + int a = 3; + float b = 1.5; + float mul = a * b; + + printf("0 is %Lf, sin(pi/2) is %f and 3*1.5 is %f.\n", zero, si, mul); + return 0; +} diff --git a/tests32/test08 b/tests32/test08 new file mode 100755 index 0000000000000000000000000000000000000000..bfc135d73dd3e6bd91bba5071a60ed0c7c6c53d3 Binary files /dev/null and b/tests32/test08 differ diff --git a/tests32/test08.c b/tests32/test08.c new file mode 100755 index 0000000000000000000000000000000000000000..f5f5bce5f7a8db82cc647250aa27aa7c4884deae --- /dev/null +++ b/tests32/test08.c @@ -0,0 +1,36 @@ +#include +#include + +//from https://crypto.stanford.edu/pbc/notes/pi/code.html +// 800 first decimals of PI + +int main() { + int r[2800 + 1]; + int i, k; + int b, d; + int c = 0; + + for (i = 0; i < 2800; i++) { + r[i] = 2000; + } + + for (k = 2800; k > 0; k -= 14) { + d = 0; + + i = k; + for (;;) { + d += r[i] * 10000; + b = 2 * i - 1; + + r[i] = d % b; + d /= b; + i--; + if (i == 0) break; + d *= i; + } + printf("%.4d", c + d / 10000); + c = d % 10000; + } + + return 0; +} \ No newline at end of file diff --git a/tests32/test09 b/tests32/test09 new file mode 100755 index 0000000000000000000000000000000000000000..c5d953b003ceae72be4dde03da369c191e794241 Binary files /dev/null and b/tests32/test09 differ diff --git a/tests32/test09.c b/tests32/test09.c new file mode 100755 index 0000000000000000000000000000000000000000..e4a560505d1bf89a1d78d1ebd738f56801e0ab33 --- /dev/null +++ b/tests32/test09.c @@ -0,0 +1,20 @@ +#include +#include +#include + +void forkexample() +{ + int x = 1; + + if (fork() == 0) + printf("Child has x = %d\n", ++x); + else { + usleep(20000); + printf("Parent has x = %d\n", --x); + } +} +int main() +{ + forkexample(); + return 0; +} \ No newline at end of file diff --git a/tests32/test10 b/tests32/test10 new file mode 100755 index 0000000000000000000000000000000000000000..fd02d55b47ddd2eaa25937a196a6277c42ce1031 Binary files /dev/null and b/tests32/test10 differ diff --git a/tests32/test10.cpp b/tests32/test10.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f3c6131684c795fadc40be2297cb997dd57254c1 --- /dev/null +++ b/tests32/test10.cpp @@ -0,0 +1,27 @@ +// using atomic as a lock +#include // std::cout +#include // std::atomic +#include // std::thread +#include // std::vector +#include // std::stringstream + +std::atomic lock_stream[10]; +std::stringstream stream; + +void append_number(int x) { + while (lock_stream[x].load()) {} + stream << "thread #" << x << '\n'; + if (x != 9) lock_stream[x + 1].store(false); +} + +int main () +{ + std::vector threads; + for (int i = 0; i < 10; ++i) lock_stream[i].store(true); + for (int i=0; i<10; ++i) threads.push_back(std::thread(append_number,i)); + lock_stream[0].store(false); + for (auto& th : threads) th.join(); + + std::cout << stream.str(); + return 0; +} diff --git a/tests32/test11 b/tests32/test11 new file mode 100755 index 0000000000000000000000000000000000000000..c8bf7541d2229dc10f4a2e009b921d258c3d1146 Binary files /dev/null and b/tests32/test11 differ diff --git a/tests32/test11.c b/tests32/test11.c new file mode 100644 index 0000000000000000000000000000000000000000..c40edeb075035cddb0e22848f3c77bb152235352 --- /dev/null +++ b/tests32/test11.c @@ -0,0 +1,131 @@ +#define _MULTI_THREADED +#include +#include +#include +#include +#include + +void foo(void); /* Functions that use the TLS data */ +void bar(void); + +#define checkResults(string, val) { \ + if (val) { \ + printf("Failed with %d at %s", val, string); \ + exit(1); \ + } \ +} + +/* + Use the keyword provided by pthread.h to delcare the following variable + is thread specific, i.e. it is only visible to a specific thread, + not shared/common to all thread. + These variables are stored in thread local storage (TLS) area. + */ +__thread int TLS_data1 = 10; +__thread int TLS_data2 = 20; +__thread char TLS_data3[10]; + +// Sync, because it's needed apparently... +static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t* mutex_ptr = &mutex; +static pthread_cond_t thread_state_cond = PTHREAD_COND_INITIALIZER; +static pthread_cond_t* thread_state_cond_ptr = &thread_state_cond; +static int status = 0; + +#define NUMTHREADS 2 +pthread_t thread[NUMTHREADS]; + +typedef struct { + int data1; + int data2; +} threadparm_t; + +void *thread_run(void *parm) +{ + int rc; + threadparm_t *gData; + + pthread_mutex_lock(mutex_ptr); + if (pthread_self()==thread[0]) { + printf("Thread 1: Entered (%d/%d)\n", TLS_data1, TLS_data2); + fflush(stdout); + } else { + while (!status) pthread_cond_wait(thread_state_cond_ptr, mutex_ptr); + printf("Thread 2: Entered (%d/%d)\n", TLS_data1, TLS_data2); + fflush(stdout); + status = 0; + pthread_mutex_unlock(mutex_ptr); + pthread_cond_broadcast(thread_state_cond_ptr); + } + + gData = (threadparm_t *)parm; + + /* Assign the value from global variable to thread specific variable*/ + TLS_data1 = gData->data1; + TLS_data2 = gData->data2; + strcpy(TLS_data3, "---"); + TLS_data3[1] = (pthread_self()==thread[0])?'1':'2'; + + foo(); + return NULL; +} + +void foo() { + if (pthread_self()==thread[0]) { + printf("Thread 1: foo(), TLS data=%d %d \"%s\"\n", TLS_data1, TLS_data2, TLS_data3); + fflush(stdout); + status = 1; + pthread_cond_broadcast(thread_state_cond_ptr); + while (status) pthread_cond_wait(thread_state_cond_ptr, mutex_ptr); + pthread_mutex_unlock(mutex_ptr); + } else { + printf("Thread 2: foo(), TLS data=%d %d \"%s\"\n", TLS_data1, TLS_data2, TLS_data3); + fflush(stdout); + } + while(!thread[1]) + usleep(300); + if(pthread_self()==thread[0]) + pthread_join(thread[1], NULL); + bar(); +} + +void bar() { + printf("Thread %d: bar(), TLS data=%d %d \"%s\"\n", + (pthread_self()==thread[0])?1:2, TLS_data1, TLS_data2, TLS_data3); + fflush(stdout); + return; +} + +int main(int argc, char **argv) +{ + int rc=0; + int i; + threadparm_t gData[NUMTHREADS]; + + printf("Create/start %d threads\n", NUMTHREADS); + fflush(stdout); + for (i=0; i < NUMTHREADS; i++) { + /* Create per-thread TLS data and pass it to the thread */ + gData[i].data1 = i; + gData[i].data2 = (i+1)*2; + rc = pthread_create(&thread[i], NULL, thread_run, &gData[i]); + checkResults("pthread_create()\n", rc); + } + + //printf("Wait for all threads to complete, and release their resources\n"); + for (i=0; i < NUMTHREADS; i++) { + rc = pthread_join(thread[i], NULL); + //checkResults("pthread_join()\n", rc); + } + + thread_state_cond_ptr = NULL; + i = pthread_cond_destroy(&thread_state_cond); + checkResults("destroying cond\n", i); + mutex_ptr = NULL; + i = pthread_mutex_destroy(&mutex); + checkResults("destroying mutex\n", i); + + printf("Main completed\n"); + fflush(stdout); + return 0; +} diff --git a/tests32/test12 b/tests32/test12 new file mode 100755 index 0000000000000000000000000000000000000000..83ba1cea158ac1f2cafebc98267d920c9d2edc8d Binary files /dev/null and b/tests32/test12 differ diff --git a/tests32/test12.c b/tests32/test12.c new file mode 100755 index 0000000000000000000000000000000000000000..4892a10d5293dba984c0f97d6b7626836d0b66ea --- /dev/null +++ b/tests32/test12.c @@ -0,0 +1,35 @@ +#include +#include +#include + +typedef uint32_t uint32; +typedef uint32 angle_t; + +int main(int argc, char **argv) +{ + int64_t i64 = 1000000000000; + double d = i64; + printf("%lli => %f\n", i64, d); + i64 = -i64; + d = i64; + printf("%lli => %f\n", i64, d); + + d = M_PI/4.0; + d = d*(1<<30)/M_PI; + angle_t u32 = (angle_t)d; + printf("(angle_t)%f = %u == 0x%08X\n", d, u32, u32); + + int16_t a=0, b=0; + asm volatile ( + "fldpi \n" + "fisttp %0 \n" + : "=m" (a)); + asm volatile ( + "fldpi \n" + "fchs \n" + "fistp %0 \n" + : "=m" (b)); + printf("go PI trucated=%d, -PI rounded=%d\n", a, b); + + return 0; +} diff --git a/tests32/test13 b/tests32/test13 new file mode 100755 index 0000000000000000000000000000000000000000..823cb65b8ec08095b478b5fa037c89bf7a55b6e8 Binary files /dev/null and b/tests32/test13 differ diff --git a/tests32/test13.c b/tests32/test13.c new file mode 100644 index 0000000000000000000000000000000000000000..38dd891f92c5f39b8250f010ba291c2251ee55cd --- /dev/null +++ b/tests32/test13.c @@ -0,0 +1,54 @@ +#include +#include +#include + +static ucontext_t uctx_main, uctx_func1, uctx_func2; + +#define handle_error(msg) \ + do { perror(msg); exit(EXIT_FAILURE); } while (0) + +static void func1(void) +{ + printf("func1: started\n"); + printf("func1: swapcontext(&uctx_func1, &uctx_func2)\n"); + if (swapcontext(&uctx_func1, &uctx_func2) == -1) + handle_error("swapcontext"); + printf("func1: returning\n"); +} + +static void func2(int a, int b) +{ + printf("func2: started (%d, %d)\n", a, b); + printf("func2: swapcontext(&uctx_func2, &uctx_func1)\n"); + if (swapcontext(&uctx_func2, &uctx_func1) == -1) + handle_error("swapcontext"); + printf("func2: returning\n"); +} + +int main(int argc, char *argv[]) +{ + char func1_stack[16384]; + char func2_stack[16384]; + + if (getcontext(&uctx_func1) == -1) + handle_error("getcontext"); + uctx_func1.uc_stack.ss_sp = func1_stack; + uctx_func1.uc_stack.ss_size = sizeof(func1_stack); + uctx_func1.uc_link = &uctx_main; + makecontext(&uctx_func1, func1, 0); + + if (getcontext(&uctx_func2) == -1) + handle_error("getcontext"); + uctx_func2.uc_stack.ss_sp = func2_stack; + uctx_func2.uc_stack.ss_size = sizeof(func2_stack); + /* Successor context is f1(), unless argc > 1 */ + uctx_func2.uc_link = (argc > 1) ? NULL : &uctx_func1; + makecontext(&uctx_func2, func2, 2, 1, 2); + + printf("main: swapcontext(&uctx_main, &uctx_func2)\n"); + if (swapcontext(&uctx_main, &uctx_func2) == -1) + handle_error("swapcontext"); + + printf("main: exiting\n"); + exit(EXIT_SUCCESS); +} \ No newline at end of file diff --git a/tests32/test14 b/tests32/test14 new file mode 100755 index 0000000000000000000000000000000000000000..93824888bae0122edfabdf655a48a2ea8751066f Binary files /dev/null and b/tests32/test14 differ diff --git a/tests32/test14.c b/tests32/test14.c new file mode 100755 index 0000000000000000000000000000000000000000..65702be320f93f36c57d4d0b505382cc926ce02b --- /dev/null +++ b/tests32/test14.c @@ -0,0 +1,111 @@ +// Code from https://martin.uy/blog/pthread_cancel-glibc-stack-unwinding/ +#include +#include +#include +#include + +static pthread_mutex_t mutex; +static pthread_mutex_t* mutex_ptr = NULL; +static pthread_cond_t thread_state_cond; +static pthread_cond_t* thread_state_cond_ptr = NULL; +static int thread_state = 0; // Sync + +void thread_cleanup(void* args) { + pthread_mutex_lock(mutex_ptr); + printf("Thread: thread_state = 2.\n"); + thread_state = 2; + pthread_cond_broadcast(thread_state_cond_ptr); + pthread_mutex_unlock(mutex_ptr); +} + +static void thread_f(void) { + int ret = -1; + pthread_mutex_lock(mutex_ptr); + printf("Thread: thread_state = 1.\n"); + thread_state = 1; + pthread_cond_broadcast(thread_state_cond_ptr); + pthread_mutex_unlock(mutex_ptr); + while (1) { + sleep(1000); + } +} + +static void* thread_main(void* args) { + pthread_cleanup_push(&thread_cleanup, NULL); + thread_f(); + // This should never be executed + pthread_cleanup_pop(0); + return NULL; +} + +int main(void) { + int ret = 0; + pthread_t thread; + pthread_attr_t thread_attributes; + pthread_attr_t* thread_attributes_ptr = NULL; + + if (pthread_mutex_init(&mutex, NULL) != 0) + goto error; + mutex_ptr = &mutex; + + if (pthread_cond_init(&thread_state_cond, NULL) != 0) + goto error; + thread_state_cond_ptr = &thread_state_cond; + + if (pthread_attr_init(&thread_attributes) != 0) + goto error; + + thread_attributes_ptr = &thread_attributes; + + if (pthread_create(&thread, thread_attributes_ptr, &thread_main, NULL) != 0) + goto error; + + thread_attributes_ptr = NULL; + if (pthread_attr_destroy(&thread_attributes) != 0) + goto error; + + // Wait for thread to go deep into the call stack + pthread_mutex_lock(mutex_ptr); + while (thread_state != 1) + pthread_cond_wait(thread_state_cond_ptr, mutex_ptr); + printf("Main thread: thread_state == 1.\n"); + pthread_mutex_unlock(mutex_ptr); + + if (pthread_cancel(thread) != 0) + goto error; + + // Wait for thread to execute the cleanup function + pthread_mutex_lock(mutex_ptr); + while (thread_state != 2) + pthread_cond_wait(thread_state_cond_ptr, mutex_ptr); + printf("Main thread: thread_state == 2.\n"); + pthread_mutex_unlock(mutex_ptr); + + thread_state_cond_ptr = NULL; + if (pthread_cond_destroy(&thread_state_cond) != 0) + goto error; + + mutex_ptr = NULL; + if (pthread_mutex_destroy(&mutex) != 0) + goto error; + + goto cleanup; + +error: + ret = -1; + +cleanup: + if (thread_attributes_ptr != NULL) + pthread_attr_destroy(thread_attributes_ptr); + if (thread_state_cond_ptr != NULL) + pthread_cond_destroy(thread_state_cond_ptr); + if (mutex_ptr != NULL) + pthread_mutex_destroy(mutex_ptr); + + if (ret == -1) + printf("Finished with errors.\n"); + else + printf("Finished with no errors.\n"); + + return ret; +} diff --git a/tests32/test15 b/tests32/test15 new file mode 100755 index 0000000000000000000000000000000000000000..386f69d9fb584b1d4a6569d46a7f52b5211565c0 Binary files /dev/null and b/tests32/test15 differ diff --git a/tests32/test15.c b/tests32/test15.c new file mode 100644 index 0000000000000000000000000000000000000000..34f91401bf30682a43ff90fb03ad089cea1331d1 --- /dev/null +++ b/tests32/test15.c @@ -0,0 +1,32 @@ +/* + * Compile with (on x86_64 archs): + * gcc -m32 -DV1 -shared -o test15_v1.so test15.c + * gcc -m32 -DV2 -shared -o test15_v2.so test15.c -Wl,--version-script=test15_version.map + * gcc -m32 -shared -o test15_dv1.so test15.c -L. -Wl,-z,origin,-rpath='$ORIGIN' -l:test15_v1.so + * gcc -m32 -DMAIN -o test15 test15.c -L. -Wl,-z,origin,-rpath='$ORIGIN' -l:test15_dv1.so -l:test15_v2.so + */ + +#if defined(MAIN) +int returnVersion(); +int acquireVersion1(); +int acquireVersion2(); +#include + +int main(int argc, char **argv) { printf("%d, %d/%d\n", returnVersion(), acquireVersion1(), acquireVersion2()); return 0; } + +#elif defined(V2) +int __attribute__((noinline)) getVersion() { asm(""); return 2; } +int returnVersion() { return getVersion(); } + +#elif defined(V1) +int __attribute__((noinline)) getVersion() { asm(""); return 1; } +int acquireVersion() { return getVersion(); } + +#else +int getVersion(); +int acquireVersion(); + +int acquireVersion1() { return getVersion(); } +int acquireVersion2() { return acquireVersion(); } + +#endif diff --git a/tests32/test15_dv1.so b/tests32/test15_dv1.so new file mode 100755 index 0000000000000000000000000000000000000000..2925ce8f88ced47a897f22e5343c66e6c7340cff Binary files /dev/null and b/tests32/test15_dv1.so differ diff --git a/tests32/test15_v1.so b/tests32/test15_v1.so new file mode 100755 index 0000000000000000000000000000000000000000..74a2d6cfd4966e448879e65a9d2034c2cd9b8a34 Binary files /dev/null and b/tests32/test15_v1.so differ diff --git a/tests32/test15_v2.so b/tests32/test15_v2.so new file mode 100755 index 0000000000000000000000000000000000000000..b42d6d8725a39fbc9f5c410c7c374c310773bc7c Binary files /dev/null and b/tests32/test15_v2.so differ diff --git a/tests32/test16 b/tests32/test16 new file mode 100755 index 0000000000000000000000000000000000000000..1ff6e436e3d3e897e8a9706e9165873a148e05ee Binary files /dev/null and b/tests32/test16 differ diff --git a/tests32/test16.c b/tests32/test16.c new file mode 100644 index 0000000000000000000000000000000000000000..6dc40230309fb7121cc3131a7b73e6c11d47e380 --- /dev/null +++ b/tests32/test16.c @@ -0,0 +1,32 @@ +/* + * Compile with (on x86_64 archs): + * gcc -m32 -DV1 -shared -o test16_v1.so test16.c -Wl,--version-script=test16_version.map + * gcc -m32 -DV2 -shared -o test16_v2.so test16.c + * gcc -m32 -shared -o test16_dv1.so test16.c -L. -Wl,-z,origin,-rpath='$ORIGIN' -l:test16_v1.so + * gcc -m32 -DMAIN -o test16 test16.c -L. -Wl,-z,origin,-rpath='$ORIGIN' -l:test16_dv1.so -l:test16_v2.so + */ + +#if defined(MAIN) +int returnVersion(); +int acquireVersion1(); +int acquireVersion2(); +#include + +int main(int argc, char **argv) { printf("%d, %d/%d\n", returnVersion(), acquireVersion1(), acquireVersion2()); return 0; } + +#elif defined(V1) +int __attribute__((noinline)) getVersion() { asm(""); return 1; } +int acquireVersion() { return getVersion(); } + +#elif defined(V2) +int __attribute__((noinline)) getVersion() { asm(""); return 2; } +int returnVersion() { return getVersion(); } + +#else +int getVersion(); +int returnVersion(); + +int acquireVersion1() { return getVersion(); } +int acquireVersion2() { return returnVersion(); } + +#endif diff --git a/tests32/test16_dv1.so b/tests32/test16_dv1.so new file mode 100755 index 0000000000000000000000000000000000000000..2dbb5dd68193226cd6011dfc6c6432fd7374bf56 Binary files /dev/null and b/tests32/test16_dv1.so differ diff --git a/tests32/test16_v1.so b/tests32/test16_v1.so new file mode 100755 index 0000000000000000000000000000000000000000..2903f1cee4aab9e94ee88f96671fed2a0486d7ba Binary files /dev/null and b/tests32/test16_v1.so differ diff --git a/tests32/test16_v2.so b/tests32/test16_v2.so new file mode 100755 index 0000000000000000000000000000000000000000..4bc1def790d22a79bdeefb93162b7abc01a8bf05 Binary files /dev/null and b/tests32/test16_v2.so differ diff --git a/tests32/test17 b/tests32/test17 new file mode 100755 index 0000000000000000000000000000000000000000..dadb82f4401b2489d9b95e19ddb45d79f1f18d58 Binary files /dev/null and b/tests32/test17 differ diff --git a/tests32/test17.c b/tests32/test17.c new file mode 100644 index 0000000000000000000000000000000000000000..70902fb6a584640eeb559fb286a2cac67d559eb4 --- /dev/null +++ b/tests32/test17.c @@ -0,0 +1,611 @@ +// build with gcc -O0 -g -msse -msse2 -mssse3 -msse4.1 test17.c -o test17 +// and -m32 for 32bits version +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef unsigned char u8x16 __attribute__ ((vector_size (16))); +typedef unsigned short u16x8 __attribute__ ((vector_size (16))); +typedef unsigned int u32x4 __attribute__ ((vector_size (16))); +typedef unsigned long long int u64x2 __attribute__ ((vector_size (16))); +typedef float f32x4 __attribute__ ((vector_size (16))); +typedef double d64x2 __attribute__ ((vector_size (16))); + +typedef union { + __m128i mm; + __m128 mf; + __m128d md; + u8x16 u8; + u16x8 u16; + u32x4 u32; + u64x2 u64; + f32x4 f32; + d64x2 d64; +} v128; + +uint64_t _ucomiss_(float a, float b) +{ + uint64_t ret = 0x202; + v128 va, vb; + va.f32[0] = a; + vb.f32[0] = b; + if(_mm_ucomigt_ss(va.mf, vb.mf)) + ret |= 0x000; + else if(_mm_ucomilt_ss(va.mf, vb.mf)) + ret |= 0x001; + else if(_mm_ucomieq_ss(va.mf, vb.mf)) + ret |= 0x040; + else + ret |= 0x045; + return ret; +} + +uint64_t _minss_(float a, float b) +{ + v128 va, vb, ret; + va.f32[0] = a; + vb.f32[0] = b; + ret.mf = _mm_min_ss(va.mf, vb.mf); + return ret.u64[0]; +} +uint64_t _maxss_(float a, float b) +{ + v128 va, vb, ret; + va.f32[0] = a; + vb.f32[0] = b; + ret.mf = _mm_max_ss(va.mf, vb.mf); + return ret.u64[0]; +} + +#define CMPSS(A, B) \ +uint64_t _cmpss_##A(float a, float b) \ +{ \ + v128 va, vb, ret; \ + va.f32[0] = a; \ + vb.f32[0] = b; \ + ret.mf = _mm_cmp##B##_ss(va.mf, vb.mf); \ + return ret.u64[0]; \ +} +CMPSS(0, eq) +CMPSS(1, lt) +CMPSS(2, le) +CMPSS(3, unord) +CMPSS(4, neq) +CMPSS(5, nlt) +CMPSS(6, nle) +CMPSS(7, ord) +#undef CMPSS + +const v128 a128_8 = {.u8 = { + 0xff, 0x80, 0x7f, 0x00, 0x01, 0x02, 0x03, 0x81, + 0xfe, 0x84, 0x72, 0x52, 0xa5, 0x00, 0xc0, 0x32 +}}; +const v128 a128_16 = {.u16 = { + 0xffff, 0x8000, 0x7fff, 0x0000, 0x0001, 0x0002, 0x0003, 0x8001 +}}; +const v128 a128_32 = {.u32 = { + 0xffffffff, 0x80000000, 0x7fffffff, 0x00000000 +}}; +const v128 a128_64 = {.u64 = { + 0xffffffffffffffffLL, 0x8000000000000000LL +}}; + +const v128 b128_8 = {.u8 = { + 0x00, 0x01, 0x05, 0x15, 0x20, 0x80, 0xff, 0x00, + 0x08, 0x07, 0x81, 0x06, 0x0a, 0x0f, 0x10, 0x01 +}}; +const v128 b128_16 = {.u16 = { + 0x8000, 0x7fff, 0xffff, 0xffff, 0x0050, 0x9000, 0xfffe, 0x8001 +}}; +const v128 b128_32 = {.u32 = { + 0x00000001, 0x80000000, 0x00000005, 0xfffffffe +}}; +const v128 b128_64 = {.u64 = { + 0x0000000000000001LL, 0x8000000000000000LL +}}; +const v128 c128_32 = {.u32 = { + 0x00000001, 0x80000000, 0x80000005, 0x0000fffe +}}; + +const v128 a128_pd = {.d64 = { 1.0, 2.0}}; +const v128 b128_pd = {.d64 = { 0.0, -2.0}}; +const v128 c128_pd = {.d64 = { INFINITY, -INFINITY}}; +const v128 d128_pd = {.d64 = { NAN, -0.0}}; +const v128 a128_ps = {.f32 = { 1.0, 2.0, 3.0, -4.0}}; +const v128 b128_ps = {.f32 = { 0.0, -2.0, -10.0, 0.5}}; +const v128 c128_ps = {.f32 = { INFINITY, -INFINITY, -INFINITY, 1.0}}; +const v128 d128_ps = {.f32 = { NAN, -0.0, -NAN, INFINITY}}; + +v128 reverse_pd(v128 a) { + v128 ret; + ret.md = _mm_shuffle_pd(a.md, a.md, 1); + return ret; +} + +void print_8(v128 v) { + for(int i=0; i<16; ++i) + printf("0x%x ", v.u8[i]); +} +void print_16(v128 v) { + for(int i=0; i<8; ++i) + printf("0x%x ", v.u16[i]); +} +void print_32(v128 v) { + for(int i=0; i<4; ++i) + printf("0x%x ", v.u32[i]); +} +void print_64(v128 v) { + for(int i=0; i<2; ++i) + printf("0x%"PRIx64" ", v.u64[i]); +} +#define print_128 print_64 +void print_ps(v128 v) { + for(int i=0; i<4; ++i) + if(isnanf(v.f32[i])) + printf("nan "); + else + printf("%g ", v.f32[i]); +} +void print_pd(v128 v) { + for(int i=0; i<2; ++i) + if(isnan(v.d64[i])) + printf("0x%"PRIx64" ", v.u64[i]); + else + printf("%g ", v.d64[i]); +} +#define print_sd print_pd + +int main(int argc, const char** argv) +{ + float a, b; + uint32_t flags; + uint32_t maxf = 0x7f7fffff; + uint32_t minf = 0xff7fffff; + uint32_t r; + +#define GO1(A, N) \ +a = 1.0f; b = 2.0f; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +flags = A(b, a); \ +printf(N " %f, %f => 0x%"PRIx32"\n", b, a, flags); \ +b = INFINITY; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +flags = A(b, a); \ +printf(N " %f, %f => 0x%"PRIx32"\n", b, a, flags); \ +b = -INFINITY; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +flags = A(b, a); \ +printf(N " %f, %f => 0x%"PRIx32"\n", b, a, flags); \ +b = NAN; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +flags = A(b, a); \ +printf(N " %f, %f => 0x%"PRIx32"\n", b, a, flags); \ +b = a; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +flags = A(b, a); \ +printf(N " %f, %f => 0x%"PRIx32"\n", b, a, flags); \ +a = b = INFINITY; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +a = -INFINITY; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); \ +flags = A(b, a); \ +printf(N " %f, %f => 0x%"PRIx32"\n", b, a, flags); \ +a = b = NAN; \ +flags = A(a, b); \ +printf(N " %f, %f => 0x%"PRIx32"\n", a, b, flags); + +#define GO2(A, N) \ +a = 1.0f; b = 2.0f; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); \ +a = -INFINITY; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); \ +a = +INFINITY; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); \ +a = NAN; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); \ +b = *(float*)&maxf; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); \ +a = -INFINITY; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); \ +a = +INFINITY; \ +r = A(a, b); \ +printf(N " %g, %g => %g\n", a, b, *(float*)&r); \ +r = A(b, a); \ +printf(N " %g, %g => %g\n", b, a, *(float*)&r); + + GO1(_ucomiss_, "ucomiss") + GO2(_minss_, "minss") + GO2(_maxss_, "maxss") + GO1(_cmpss_0, "cmpss 0") + GO1(_cmpss_1, "cmpss 1") + GO1(_cmpss_2, "cmpss 2") + GO1(_cmpss_3, "cmpss 3") + GO1(_cmpss_4, "cmpss 4") + GO1(_cmpss_5, "cmpss 5") + GO1(_cmpss_6, "cmpss 6") + GO1(_cmpss_7, "cmpss 7") + + #undef GO1 + #undef GO2 + v128 a128; + int i; + + #define GO1(A, N, C) \ + a128.mm = _mm_##A##_epi##N(a128_##N.mm); \ + printf("%s(", #C); print_##N(a128_##N); \ + printf(") = "); print_##N(a128); printf("\n"); + #define GO1C(A, N, C, A1, I) \ + a128.mm = _mm_##A##_epi##N(A1.mm, I); \ + printf("%s(", #C); print_##N(A1); \ + printf("%d) = ", I); print_##N(a128); printf("\n"); + #define GO2(A, N, C, A1, A2) \ + a128.mm = _mm_##A##_epi##N(A1.mm, A2.mm); \ + printf("%s(", #C); print_##N(A1); \ + printf(", "); print_##N(A2); \ + printf(") = "); print_##N(a128); printf("\n"); + #define GO2u(A, N, C, A1, A2) \ + a128.mm = _mm_##A##_epu##N(A1.mm, A2.mm); \ + printf("%s(", #C); print_##N(A1); \ + printf(", "); print_##N(A2); \ + printf(") = "); print_##N(a128); printf("\n"); + #define GO2f(A, C, A1, A2) \ + a128.mm = _mm_##A##_si128(A1.mm, A2.mm); \ + printf("%s(", #C); print_128(A1); \ + printf(", "); print_128(A2); \ + printf(") = "); print_128(a128); printf("\n"); + #define GO2C(A, N, C, A1, A2, I) \ + a128.mm = _mm_##A##_epi##N(A1.mm, A2.mm, I); \ + printf("%s(", #C); print_##N(A1); \ + printf(", "); print_##N(A2); \ + printf("%d) = ", I); print_##N(a128); printf("\n"); + #define GO2i(A, A1, A2) \ + i = _mm_##A##_si128(A1.mm, A2.mm); \ + printf("p%s(", #A); print_64(A1); \ + printf(", "); print_64(A2); \ + printf(") = %d\n", i); + #define GO3PS(A, N, A1, A2, A3) \ + a128.mf = _mm_##A##_ps(A1.mf, A2.mf, A3.mf); \ + printf("p%s%s(", #A, "ps"); print_##N(A1); \ + printf(", "); print_##N(A2); \ + printf(", "); print_##N(A3); \ + printf(") = "); print_##N(a128); printf("\n"); + #define GO1ipd(A, C, A1) \ + i = _mm_##A##_pd(A1.md); \ + printf("%s(", #C); print_64(A1); \ + printf(") = 0x%x\n", i); + #define GO1pd(A, C, A1) \ + a128.md = _mm_##A##_pd(A1.md); \ + printf("%s(", #C); print_pd(A1); \ + printf(") = "); print_pd(a128); printf("\n"); + #define GO2pd(A, C, A1, A2) \ + a128.md = _mm_##A##_pd(A1.md, A2.md); \ + printf("%s(", #C); print_pd(A1); \ + printf(", "); print_pd(A2); \ + printf(") = "); print_pd(a128); printf("\n"); + #define GO2Cpd(A, C, A1, A2, I) \ + a128.md = _mm_##A##_pd(A1.md, A2.md, I); \ + printf("%s(", #C); print_pd(A1); \ + printf(", "); print_pd(A2); \ + printf(", %d) = ", I); print_pd(a128); printf("\n"); + #define GO1isd(A, C, A1) \ + i = _mm_##A##_sd(A1.md); \ + printf("%s(", #C); print_64(A1); \ + printf(") = 0x%x\n", i); + #define GO1sd(A, C, A1) \ + a128.md = _mm_##A##_sd(A1.md); \ + printf("%s(", #C); print_sd(A1); \ + printf(") = "); print_sd(a128); printf("\n"); + #define GO2sd(A, C, A1, A2) \ + a128.md = _mm_##A##_sd(A1.md, A2.md); \ + printf("%s(", #C); print_sd(A1); \ + printf(", "); print_sd(A2); \ + printf(") = "); print_sd(a128); printf("\n"); + #define GO2Csd(A, C, A1, A2, I) \ + a128.md = _mm_##A##_sd(A1.md, A2.md, I); \ + printf("%s(", #C); print_sd(A1); \ + printf(", "); print_sd(A2); \ + printf(", %d) = ", I); print_sd(a128); printf("\n"); + #define GO1ips(A, C, A1) \ + i = _mm_##A##_ps(A1.mf); \ + printf("%s(", #C); print_32(A1); \ + printf(") = 0x%x\n", i); + #define GO1ps(A, C, A1) \ + a128.mf = _mm_##A##_ps(A1.mf); \ + printf("%s(", #C); print_ps(A1); \ + printf(") = "); print_ps(a128); printf("\n"); + #define GO2ps(A, C, A1, A2) \ + a128.mf = _mm_##A##_ps(A1.mf, A2.mf); \ + printf("%s(", #C); print_ps(A1); \ + printf(", "); print_ps(A2); \ + printf(") = "); print_ps(a128); printf("\n"); + #define GO2Cps(A, C, A1, A2, I) \ + a128.mf = _mm_##A##_ps(A1.mf, A2.mf, I); \ + printf("%s(", #C); print_ps(A1); \ + printf(", "); print_ps(A2); \ + printf(", %d) = ", I); print_ps(a128); printf("\n"); + #define GO1ps2dq(A, C, A1) \ + a128.mm = _mm_##A##_epi32(A1.mf); \ + printf("%s(", #C); print_ps(A1); \ + printf(") = "); print_32(a128); printf("\n"); + + #define MULITGO2pd(A, B) \ + GO2pd(A, B, a128_pd, b128_pd) \ + GO2pd(A, B, b128_pd, c128_pd) \ + GO2pd(A, B, a128_pd, d128_pd) \ + GO2pd(A, B, b128_pd, d128_pd) \ + GO2pd(A, B, c128_pd, d128_pd) \ + GO2pd(A, B, d128_pd, d128_pd) + + #define MULITGO2Cpd(A, B, I) \ + GO2Cpd(A, B, a128_pd, b128_pd, I) \ + GO2Cpd(A, B, b128_pd, c128_pd, I) \ + GO2Cpd(A, B, a128_pd, d128_pd, I) \ + GO2Cpd(A, B, b128_pd, d128_pd, I) \ + GO2Cpd(A, B, c128_pd, d128_pd, I) \ + GO2Cpd(A, B, d128_pd, d128_pd, I) + + #define MULITGO2ps(A, B) \ + GO2ps(A, B, a128_ps, b128_ps) \ + GO2ps(A, B, b128_ps, c128_ps) \ + GO2ps(A, B, a128_ps, d128_ps) \ + GO2ps(A, B, b128_ps, d128_ps) \ + GO2ps(A, B, c128_ps, d128_ps) \ + GO2ps(A, B, d128_ps, d128_ps) + + #define MULTIGO1ps2dq(A, B) \ + GO1ps2dq(A, B, a128_ps) \ + GO1ps2dq(A, B, b128_ps) \ + GO1ps2dq(A, B, c128_ps) \ + GO1ps2dq(A, B, d128_ps) + + #define MULITGO2Cps(A, B, I) \ + GO2Cps(A, B, a128_ps, b128_ps, I) \ + GO2Cps(A, B, b128_ps, c128_ps, I) \ + GO2Cps(A, B, a128_ps, d128_ps, I) \ + GO2Cps(A, B, b128_ps, d128_ps, I) \ + GO2Cps(A, B, c128_ps, d128_ps, I) \ + GO2Cps(A, B, d128_ps, d128_ps, I) + + #define MULTIGO2sd(A, B) \ + GO2sd(A, B, a128_pd, a128_pd) \ + GO2sd(A, B, a128_pd, b128_pd) \ + GO2sd(A, B, a128_pd, c128_pd) \ + GO2sd(A, B, a128_pd, d128_pd) \ + GO2sd(A, B, b128_pd, d128_pd) \ + GO2sd(A, B, c128_pd, d128_pd) \ + GO2sd(A, B, a128_pd, reverse_pd(a128_pd)) \ + GO2sd(A, B, a128_pd, reverse_pd(b128_pd)) \ + GO2sd(A, B, a128_pd, reverse_pd(c128_pd)) \ + GO2sd(A, B, a128_pd, reverse_pd(d128_pd)) \ + GO2sd(A, B, b128_pd, reverse_pd(d128_pd)) \ + GO2sd(A, B, b128_pd, reverse_pd(d128_pd)) + + + GO2(shuffle, 8, pshufb, a128_8, b128_8) + GO2(hadd, 16, phaddw, a128_16, b128_16) + GO2(hadd, 32, phaddd, a128_32, b128_32) + GO2(hadds, 16, phaddsw, a128_16, b128_16) + GO2(maddubs, 16, pmaddubsw, a128_8, b128_8) + GO2(hsub, 16, phsubw, a128_16, b128_16) + GO2(sign, 8, psignb, a128_8, b128_8) + GO2(sign, 16, psignw, a128_16, b128_16) + GO2(sign, 32, psignd, a128_32, b128_32) + GO2(mulhrs, 16, pmulhrsw, a128_16, b128_16) + GO3PS(blendv, 32, a128_32, b128_32, c128_32) + GO2i(testz, a128_32, b128_32) + GO2i(testc, a128_32, b128_32) + GO2i(testnzc, a128_32, b128_32) + GO1(abs, 8, pabsb) + GO1(abs, 16, pabsw) + GO1(abs, 32, pabsd) + GO1(cvtepi8, 16, pmovsxbw); + GO1(cvtepi8, 32, pmovsxbd); + GO1(cvtepi8, 64, pmovsxbq); + GO1(cvtepi16, 32, pmovsxwd); + GO1(cvtepi16, 64, pmovsxwq); + GO1(cvtepi32, 64, pmovsxdq); + GO1(cvtepu8, 16, pmovzxbw); + GO1(cvtepu8, 32, pmovzxbd); + GO1(cvtepu8, 64, pmovzxbq); + GO1(cvtepu16, 32, pmovzxwd); + GO1(cvtepu16, 64, pmovzxwq); + GO1(cvtepu32, 64, pmovzxdq); + GO2(min, 32, pminsd, a128_32, b128_32) + GO2(max, 32, pmaxsd, a128_32, b128_32) + GO2C(blend, 16, pblendw, a128_16, b128_16, 0) + GO2C(blend, 16, pblendw, a128_16, b128_16, 0xff) + GO2C(blend, 16, pblendw, a128_16, b128_16, 0xaa) + GO2C(blend, 16, pblendw, a128_16, b128_16, 2) + GO2C(alignr, 8, palignr, a128_8, b128_8, 0) + GO2C(alignr, 8, palignr, a128_8, b128_8, 2) + GO2C(alignr, 8, palignr, a128_8, b128_8, 7) + GO2C(alignr, 8, palignr, a128_8, b128_8, 15) + GO2C(alignr, 8, palignr, a128_8, b128_8, 16) + GO2C(alignr, 8, palignr, a128_8, b128_8, 0xff) + GO1ipd(movemask, movmskpd, a128_64) + GO1pd(sqrt, psqrtpd, a128_pd) + GO1pd(sqrt, psqrtpd, b128_pd) + GO1pd(sqrt, psqrtpd, c128_pd) + GO1pd(sqrt, psqrtpd, d128_pd) + MULITGO2pd(and, andpd) + MULITGO2pd(andnot, andnpd) + MULITGO2pd(or, orpd) + MULITGO2pd(xor, xorpd) + MULITGO2pd(add, addpd) + MULITGO2pd(mul, mulpd) + MULITGO2pd(sub, subpd) + MULITGO2pd(min, minpd) + MULITGO2pd(div, divpd) + MULITGO2pd(max, maxpd) + GO2(unpacklo, 8, punpcklbw, a128_8, b128_8) + GO2(unpacklo, 16, punpcklwd, a128_16, b128_16) + GO2(unpacklo, 32, punpckldq, a128_32, b128_32) + GO2(packs, 16, ppacksswb, a128_16, b128_16) + GO2(cmpgt, 8, pcmpgtb, a128_8, b128_8) + GO2(cmpgt, 16, pcmpgtw, a128_16, b128_16) + GO2(cmpgt, 32, pcmpgtd, a128_32, b128_32) + GO2(packus, 16, packuswb, a128_16, b128_16) + GO2(unpackhi, 8, punpckhbw, a128_8, b128_8) + GO2(unpackhi, 16, punpckhwd, a128_16, b128_16) + GO2(unpackhi, 32, punpckhdq, a128_32, b128_32) + GO2(packs, 32, ppackssdw, a128_32, b128_32) + GO2(unpacklo, 64, punpcklqdq, a128_64, b128_64) + GO2(unpackhi, 64, punpckhqdq, a128_64, b128_64) + GO1C(shuffle, 32, pshufd, a128_32, 0) + GO1C(shuffle, 32, pshufd, a128_32, 0xff) + GO1C(shuffle, 32, pshufd, a128_32, 0xaa) + GO1C(shuffle, 32, pshufd, a128_32, 2) + GO1C(srli, 16, psrlw, a128_16, 0) + GO1C(srli, 16, psrlw, a128_16, 0xff) + GO1C(srli, 16, psrlw, a128_16, 0xaa) + GO1C(srli, 16, psrlw, a128_16, 2) + GO1C(srli, 32, psrld, a128_32, 0) + GO1C(srli, 32, psrld, a128_32, 0xff) + GO1C(srli, 32, psrld, a128_32, 0xaa) + GO1C(srli, 32, psrld, a128_32, 2) + GO1C(srli, 64, psrlq, a128_64, 0) + GO1C(srli, 64, psrlq, a128_64, 0xff) + GO1C(srli, 64, psrlq, a128_64, 0xaa) + GO1C(srli, 64, psrlq, a128_64, 2) + GO1C(srai, 16, psraw, a128_16, 0) + GO1C(srai, 16, psraw, a128_16, 0xff) + GO1C(srai, 16, psraw, a128_16, 0xaa) + GO1C(srai, 16, psraw, a128_16, 2) + GO1C(srai, 32, psrad, a128_32, 0) + GO1C(srai, 32, psrad, a128_32, 0xff) + GO1C(srai, 32, psrad, a128_32, 0xaa) + GO1C(srai, 32, psrad, a128_32, 2) + GO1C(slli, 16, psllw, a128_16, 0) + GO1C(slli, 16, psllw, a128_16, 0xff) + GO1C(slli, 16, psllw, a128_16, 0xaa) + GO1C(slli, 16, psllw, a128_16, 2) + GO1C(slli, 32, pslld, a128_32, 0) + GO1C(slli, 32, pslld, a128_32, 0xff) + GO1C(slli, 32, pslld, a128_32, 0xaa) + GO1C(slli, 32, pslld, a128_32, 2) + GO1C(slli, 64, psllq, a128_64, 0) + GO1C(slli, 64, psllq, a128_64, 0xff) + GO1C(slli, 64, psllq, a128_64, 0xaa) + GO1C(slli, 64, psllq, a128_64, 2) + GO2(cmpeq, 8, pcmpeqb, a128_8, b128_8) + GO2(cmpeq, 16, pcmpeqw, a128_16, b128_16) + GO2(cmpeq, 32, pcmpeqd, a128_32, b128_32) + MULITGO2pd(hadd, haddpd) + GO2(srl, 16, psrlw, a128_16, b128_16) + GO2(srl, 32, psrld, a128_32, b128_32) + GO2(srl, 64, psrlq, a128_64, b128_64) + GO2(add, 64, paddq, a128_64, b128_64) + GO2(mullo, 16, pmullw, a128_16, b128_16) + GO2u(subs, 8, psubusb, a128_8, b128_8) + GO2u(subs, 16, psubusw, a128_16, b128_16) + GO2u(min, 8, pminub, a128_8, b128_8) + GO2f(and, pand, a128_8, b128_8) + GO2u(adds, 8, paddusb, a128_8, b128_8) + GO2u(adds, 16, paddusw, a128_16, b128_16) + GO2u(max, 8, pmaxub, a128_8, b128_8) + GO2f(andnot, pandn, a128_8, b128_8) + GO2u(avg, 8, pavgb, a128_8, b128_8) + GO2(sra, 16, psraw, a128_16, b128_16) + GO2(sra, 32, psrad, a128_32, b128_32) + GO2u(avg, 16, pavgb, a128_16, b128_16) + GO2u(mulhi, 16, pmulhuw, a128_16, b128_16) + GO2(mulhi, 16, pmulhw, a128_16, b128_16) + GO2(subs, 8, psubsb, a128_8, b128_8) + GO2(subs, 16, psubsw, a128_16, b128_16) + GO2(min, 16, pminsw, a128_16, b128_16) + GO2f(or, por, a128_8, b128_8) + GO2(adds, 8, paddusb, a128_8, b128_8) + GO2(adds, 16, paddusw, a128_16, b128_16) + GO2(max, 16, pmaxsw, a128_16, b128_16) + GO2f(xor, pxor, a128_8, b128_8) + GO2(sll, 16, psllw, a128_16, b128_16) + GO2(sll, 32, pslld, a128_32, b128_32) + GO2(sll, 64, psllq, a128_64, b128_64) + GO2u(mul, 32, pmuludq, a128_32, b128_32) + GO2(madd, 16, pmaddwd, a128_16, b128_16) + GO2u(sad, 8, psadbw, a128_8, b128_8) + GO2(sub, 8, psubb, a128_8, b128_8) + GO2(sub, 16, psubw, a128_16, b128_16) + GO2(sub, 32, psubd, a128_32, b128_32) + GO2(sub, 64, psubq, a128_64, b128_64) + GO2(add, 8, paddb, a128_8, b128_8) + GO2(add, 16, paddw, a128_16, b128_16) + GO2(add, 32, paddd, a128_32, b128_32) + GO2ps(movehl, pmovhlps, a128_ps, b128_ps) + GO2ps(unpacklo, unpcklps, a128_ps, b128_ps) + GO2ps(unpackhi, unpckhps, a128_ps, b128_ps) + GO2ps(movelh, pmovhps, a128_ps, b128_ps) + GO1ps(sqrt, psqrtps, a128_ps) + GO1ps(sqrt, psqrtps, b128_ps) + GO1ps(sqrt, psqrtps, c128_ps) + GO1ps(sqrt, psqrtps, d128_ps) + //GO1ps(rsqrt, prsqrtps, a128_ps) // difference in precision + //GO1ps(rsqrt, prsqrtps, b128_ps) // same + //GO1ps(rsqrt, prsqrtps, c128_ps) // same + //GO1ps(rsqrt, prsqrtps, d128_ps) // difference in the handling of NAN, (-)0, and INF in Dynarec + //GO1ps(rcp, prcpps, a128_ps) // deference in precision + //GO1ps(rcp, prcpps, b128_ps) // deference in precision + //GO1ps(rcp, prcpps, c128_ps) // deference in precision + GO1ps(rcp, prcpps, d128_ps) + MULITGO2ps(and, andps) + MULITGO2ps(andnot, andnps) + MULITGO2ps(or, orps) + MULITGO2ps(xor, xorps) + MULITGO2ps(add, addps) + MULITGO2ps(mul, mulps) + MULITGO2ps(sub, subps) + MULITGO2ps(min, minps) + MULITGO2ps(div, divps) + MULITGO2ps(max, maxps) + //MULITGO2Cps(cmp, cmpps, 0) // use avx for some reason + MULITGO2Cps(shuffle, shufps, 0) + MULITGO2Cps(shuffle, shufps, 0x15) + MULITGO2Cps(shuffle, shufps, 0xff) + MULITGO2Cps(shuffle, shufps, 0x02) + MULTIGO2sd(sqrt, sqrtsd) + MULTIGO2sd(add, addsd) + MULTIGO2sd(mul, mulsd) + MULTIGO2sd(sub, subsd) + MULTIGO2sd(min, minsd) + MULTIGO2sd(div, divsd) + MULTIGO2sd(max, maxsd) + MULTIGO1ps2dq(cvtps, cvtps2dq) + MULITGO2Cps(dp, dpps, 0xff) + MULITGO2Cps(dp, dpps, 0x3f) + MULITGO2Cps(dp, dpps, 0xf3) + MULITGO2Cps(dp, dpps, 0x53) + + return 0; +} + diff --git a/tests32/test17_o2 b/tests32/test17_o2 new file mode 100755 index 0000000000000000000000000000000000000000..95b6894c9f8affd933c959ab68d701fa01955a38 Binary files /dev/null and b/tests32/test17_o2 differ diff --git a/tests32/test18 b/tests32/test18 new file mode 100755 index 0000000000000000000000000000000000000000..c03890459fa0166566e7c73fc44e03f6acee411c Binary files /dev/null and b/tests32/test18 differ diff --git a/tests32/test18.c b/tests32/test18.c new file mode 100644 index 0000000000000000000000000000000000000000..f609b7544162f7b63f4f2d4d768e97d39309324a --- /dev/null +++ b/tests32/test18.c @@ -0,0 +1,30 @@ +#include +#include +#include + +static jmp_buf context_buf; + +static void segv_handler(int sig) +{ + printf("sig = %d\n", sig); + longjmp(context_buf, 1); +} + +void test() +{ + if(!setjmp(context_buf)) { + int *bad_ptr = (int*)0xdeadbeef; + printf("*bad_ptr = %d\n", *bad_ptr); + } else { + printf("got bad_ptr\n"); + } +} + +int main() +{ + if(signal(SIGSEGV, segv_handler) == SIG_ERR) + printf("Err = %m\n"); + //printf("handler = %p\n", segv_handler); + test(); + return 0; +} diff --git a/tests32/test19 b/tests32/test19 new file mode 100755 index 0000000000000000000000000000000000000000..9ee17c3aeb1d5f3fae5d5fd92d36a8e7948d3e54 Binary files /dev/null and b/tests32/test19 differ diff --git a/tests32/test19.c b/tests32/test19.c new file mode 100644 index 0000000000000000000000000000000000000000..edb1f7557e05271f40ef4dd2332caf7dc96d50c9 --- /dev/null +++ b/tests32/test19.c @@ -0,0 +1,148 @@ +#include +#include +#include +#include +#include +#include + +#if defined(__x86_64__) +#error Nope! +#else +uint64_t _fucomip_(double a, double b) +{ + uint32_t ret; + asm volatile ( + "fldl %2\n" + "fldl %1\n" + "fucomip %%st(1)\n" + "fstp %%st(0)\n" + "pushfl\n" + "popl %%eax\n" + :"=a" (ret):"m"(a), "m"(b):"cc"); + return ret; +} +uint64_t _fucompp_(double a, double b) +{ + uint32_t ret; + asm volatile ( + "fldl %2\n" + "fldl %1\n" + "fucompp\n" + "fstsw %%ax\n" + :"=a" (ret):"m"(a), "m"(b):"cc"); + return ret; +} +uint64_t _fistpw_(double a) +{ + uint16_t ret; + uint16_t t1, t2; + asm volatile ( + "fldl %1\n" + "fstcw %2\n" + "mov %2, %%ax\n" + "mov $0x0c, %%ah\n" + "mov %%ax, %3\n" + "fldcw %3\n" + "fistp %0\n" + "fldcw %2\n" + :"=m" (ret):"m"(a), "m"(t1), "m"(t2):"cc"); + return ret; +} +uint64_t _fistpl_(double a) +{ + uint32_t ret; + uint16_t t1, t2; + asm volatile ( + "fldl %1\n" + "fstcw %2\n" + "mov %2, %%ax\n" + "mov $0x0c, %%ah\n" + "mov %%ax, %3\n" + "fldcw %3\n" + "fistpl %0\n" + "fldcw %2\n" + :"=m" (ret):"m"(a), "m"(t1), "m"(t2):"cc"); + return ret; +} +uint64_t _fistpq_(double a) +{ + uint64_t ret; + uint16_t t1, t2; + asm volatile ( + "fldl %1\n" + "fstcw %2\n" + "mov %2, %%ax\n" + "mov $0x0c, %%ah\n" + "mov %%ax, %3\n" + "fldcw %3\n" + "fistpq %0\n" + "fldcw %2\n" + :"=m" (ret):"m"(a), "m"(t1), "m"(t2):"cc"); + return ret; +} +uint64_t _frndint_(double a) +{ + uint64_t ret; + uint16_t t1, t2; + asm volatile ( + "fldl %1\n" + "fstcw %2\n" + "mov %2, %%ax\n" + "mov $0x0c, %%ah\n" + "mov %%ax, %3\n" + "fldcw %3\n" + "frndint\n" + "fstpl %0\n" + "fldcw %2\n" + :"=m" (ret):"m"(a), "m"(t1), "m"(t2):"cc"); + return ret; +} +#endif + +int main(int argc, const char** argv) +{ + double a, b; + char pf, cf, zf; + char pa, ca, za; + uint64_t flags; + uint64_t tests[][2] = { + {0x0, 0x4082c00000000000LL}, + {0x8000000000000000LL, 0x4082c00000000000LL}, + {0x8000000000000000LL, 0x0}, + {0x8000000000000000LL, 0x3ff0000000000000LL}, + {0x3ff0000000000000LL, 0x3fe89d9000000000LL}, + {0x3ff0000000000000LL, 0x7ff0000000000000LL}, + {0xfff0000000000000LL, 0x7ff0000000000000LL}, + {0x3ff0002ca0000000LL, 0xaeff000025000000LL}, + {0x3ff0000050000000LL, 0xc082c00000000000LL}, + {0x0, 0x7ff8000000000001LL}, + {0x7ff8000000000001LL, 0x7ff8000000000001LL}, + }; + int n = sizeof(tests)/sizeof(tests[0]); + for(int i=0; i>0)&1?'C':'-'; + za = (flags>>(0+6))&1?'Z':'-'; + pa = (flags>>(0+2))&1?'P':'-'; + printf("%c%c%c\n", za, pa, ca); + printf("FUCOMPP 0x%llx 0x%llx ", *(uint64_t*)&a, *(uint64_t*)&b); + flags = _fucompp_(a, b); + ca = (flags>>8)&1?'C':'-'; + za = (flags>>(8+6))&1?'Z':'-'; + pa = (flags>>(8+2))&1?'P':'-'; + printf("%c%c%c\n", za, pa, ca); + printf("FRNDINT 0x%llx => 0x%llx\n", *(uint64_t*)&a, _frndint_(a)); + printf("FRNDINT 0x%llx => 0x%llx\n", *(uint64_t*)&b, _frndint_(b)); + printf("FISTP 0x%llx => word: %x\n", *(uint64_t*)&a, _fistpw_(a)); + printf("FISTP 0x%llx => word: %x\n", *(uint64_t*)&b, _fistpw_(b)); + printf("FISTP 0x%llx => long: %x\n", *(uint64_t*)&a, _fistpl_(a)); + printf("FISTP 0x%llx => long: %x\n", *(uint64_t*)&b, _fistpl_(b)); + printf("FISTP 0x%llx => quad: %llx\n", *(uint64_t*)&a, _fistpq_(a)); + printf("FISTP 0x%llx => quad: %llx\n", *(uint64_t*)&b, _fistpq_(b)); + } + printf("\nDone\n"); +} diff --git a/tests32/test20 b/tests32/test20 new file mode 100755 index 0000000000000000000000000000000000000000..d329fa9d6fa8a025ef13eb5a1b0762440adbcfa1 Binary files /dev/null and b/tests32/test20 differ diff --git a/tests32/test20.c b/tests32/test20.c new file mode 100644 index 0000000000000000000000000000000000000000..017e925c235d98763cc89dd95bd9046a6531da57 --- /dev/null +++ b/tests32/test20.c @@ -0,0 +1,48 @@ +#include +#include +#include +#include +#include +#include + +#if defined(__x86_64__) +#error Nope! +#else +__attribute__((naked)) uint64_t _idiv_(uint32_t a, uint32_t b) +{ + asm volatile ( + "xor %%eax, %%eax\n" + "mov 4(%%esp), %%edx\n" + "mov 8(%%esp), %%ecx\n" + "shrd $0x10, %%edx, %%eax\n" + "sar $0x10, %%edx\n" + "idiv %%ecx\n" + "ret" + :::); +} +#endif + +int main(int argc, const char** argv) +{ + uint32_t tests[][2] = { + {0x000002d0, 0x00000500}, + {0xfffffa5d, 0x000186a0}, + {0x00001701, 0x000186a0}, + {0xffff9a19, 0x000186a0}, + {0xffffe7f3, 0x000186a0}, + {0x00015840, 0x000186a0}, + {0xff451330, 0x000186a0}, + {0xffff626a, 0x000186a0}, + {0x00009120, 0x000186a0}, + }; + int n = sizeof(tests)/sizeof(tests[0]); + uint64_t res; + for(int i=0; i> 32; + printf("=> 0x%x / 0x%x (%lld/%d => %d + %d)\n", modo, divi, ((int64_t)tests[i][0])<<16, tests[i][1], divi, modo); + } + printf("\nDone\n"); +} diff --git a/tests32/test21 b/tests32/test21 new file mode 100755 index 0000000000000000000000000000000000000000..07bea1b02ea876eccaaca75fe1fb508ab59f1082 Binary files /dev/null and b/tests32/test21 differ diff --git a/tests32/test21.c b/tests32/test21.c new file mode 100644 index 0000000000000000000000000000000000000000..cc003ffce5c92f004a58afbb2fc00b11d3a09bb2 --- /dev/null +++ b/tests32/test21.c @@ -0,0 +1,41 @@ +/* + * Compile with (on x86_64 archs): + * gcc -m32 -DV1 -shared -o test21_v1.so test21.c + * gcc -m32 -DV2 -shared -o test21_v2.so test21.c + * gcc -m32 -o test21 test21.c -ldl -Wl,-z,origin,-rpath='$ORIGIN' + */ + +#if defined(V1) +int __attribute__((noinline)) getVersion() { asm(""); return 1; } +int acquireVersion() { return getVersion(); } + +#elif defined(V2) +int __attribute__((noinline)) getVersion() { asm(""); return 2; } +int returnVersion() { return getVersion(); } + +#else +#include +#include +#include + +typedef int(*iFv_t)(void); + +int main(int argc, char **argv) { + void* v1 = dlopen("test21_v1.so", RTLD_NOW); + void* v2 = dlopen("test21_v2.so", RTLD_NOW); + if(!v1 || !v2) { + printf("Error openning libs: v1=%p, v2=%p\n", v1, v2); + exit(-1); + } + iFv_t returnVersion = (iFv_t)dlsym(v2, "returnVersion"); + iFv_t acquireVersion = (iFv_t)dlsym(v1, "acquireVersion"); + if(!returnVersion || !acquireVersion) { + printf("Error getting symbol return=%p/acquire=%p\n", returnVersion, acquireVersion); + exit(-2); + } + printf("%d/%d\n", returnVersion(), acquireVersion()); return 0; + dlclose(v2); + dlclose(v1); +} + +#endif diff --git a/tests32/test21_v1.so b/tests32/test21_v1.so new file mode 100755 index 0000000000000000000000000000000000000000..572bf57957907b44cb9fb47aabbfbb079cc3a987 Binary files /dev/null and b/tests32/test21_v1.so differ diff --git a/tests32/test21_v2.so b/tests32/test21_v2.so new file mode 100755 index 0000000000000000000000000000000000000000..47daabe99ecd657e80b06c6a1ffe760d2d41dcab Binary files /dev/null and b/tests32/test21_v2.so differ diff --git a/tests32/test22 b/tests32/test22 new file mode 100755 index 0000000000000000000000000000000000000000..829c53979aea2f3c4abbfd6534499a19c19dfd83 Binary files /dev/null and b/tests32/test22 differ diff --git a/tests32/test22.c b/tests32/test22.c new file mode 100644 index 0000000000000000000000000000000000000000..120f39e31db2d53affa038141717a26583f0f159 --- /dev/null +++ b/tests32/test22.c @@ -0,0 +1,70 @@ +// build with gcc -march=corei7 -O2 -g -maes -mpclmul -m32 test22.c -o test22 +#include +#include +#include + +// Hard coding types and alignment +typedef long long v2di __attribute__((vector_size(16))); +typedef union { + unsigned long long v[2]; + v2di m; +} mm128i; + +int need_stop(mm128i *var) { + if (var->v[0] >= 0xEEEEFFFFFFFFEEEFULL) { + if (var->v[1] == 0xFFFFFFFFFFFFFFFFULL) return 1; + else { + var->v[0] += 0x1111000000001111ULL; + ++var->v[1]; + } + } else var->v[0] += 0x1111000000001111ULL; + if (var->v[1] >= 0xF000000000000000ULL) return 1; + else var->v[1] += 0x1000000000000000ULL; + return 0; +} + +int main() { + mm128i x = { .v = {0, 0} }; + do { + mm128i y = { .v = {0, 0} }; + do { + mm128i enc = { .m = _mm_aesenc_si128(x.m, y.m) }; + mm128i enclast = { .m = _mm_aesenclast_si128(x.m, y.m) }; + mm128i dec = { .m = _mm_aesdec_si128(x.m, y.m) }; + mm128i declast = { .m = _mm_aesdeclast_si128(x.m, y.m) }; + printf("enc (0x%016llX%016llX, 0x%016llX%016llX) = 0x%016llX%016llX\n", x.v[1], x.v[0], y.v[1], y.v[0], enc.v[1], enc.v[0]); + printf("enclast(0x%016llX%016llX, 0x%016llX%016llX) = 0x%016llX%016llX\n", x.v[1], x.v[0], y.v[1], y.v[0], enclast.v[1], enclast.v[0]); + printf("dec (0x%016llX%016llX, 0x%016llX%016llX) = 0x%016llX%016llX\n", x.v[1], x.v[0], y.v[1], y.v[0], dec.v[1], dec.v[0]); + printf("declast(0x%016llX%016llX, 0x%016llX%016llX) = 0x%016llX%016llX\n", x.v[1], x.v[0], y.v[1], y.v[0], declast.v[1], declast.v[0]); + } while (!need_stop(&y)); + mm128i keygenassist00 = { .m = _mm_aeskeygenassist_si128(x.m, 0) }; + printf("keygenassist(0x%016llX%016llX, 0x00) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist00.v[1], keygenassist00.v[0]); + mm128i keygenassist01 = { .m = _mm_aeskeygenassist_si128(x.m, 0x01) }; + printf("keygenassist(0x%016llX%016llX, 0x01) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist01.v[1], keygenassist01.v[0]); + mm128i keygenassist02 = { .m = _mm_aeskeygenassist_si128(x.m, 0x02) }; + printf("keygenassist(0x%016llX%016llX, 0x02) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist02.v[1], keygenassist02.v[0]); + mm128i keygenassist04 = { .m = _mm_aeskeygenassist_si128(x.m, 0x04) }; + printf("keygenassist(0x%016llX%016llX, 0x04) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist04.v[1], keygenassist04.v[0]); + mm128i keygenassist08 = { .m = _mm_aeskeygenassist_si128(x.m, 0x08) }; + printf("keygenassist(0x%016llX%016llX, 0x08) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist08.v[1], keygenassist08.v[0]); + mm128i keygenassist10 = { .m = _mm_aeskeygenassist_si128(x.m, 0x10) }; + printf("keygenassist(0x%016llX%016llX, 0x10) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist10.v[1], keygenassist10.v[0]); + mm128i keygenassist38 = { .m = _mm_aeskeygenassist_si128(x.m, 0x38) }; + printf("keygenassist(0x%016llX%016llX, 0x38) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist38.v[1], keygenassist38.v[0]); + mm128i keygenassist4F = { .m = _mm_aeskeygenassist_si128(x.m, 0x4F) }; + printf("keygenassist(0x%016llX%016llX, 0x4F) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassist4F.v[1], keygenassist4F.v[0]); + mm128i keygenassistFF = { .m = _mm_aeskeygenassist_si128(x.m, 0xFF) }; + printf("keygenassist(0x%016llX%016llX, 0xFF) = 0x%016llX%016llX\n", x.v[1], x.v[0], keygenassistFF.v[1], keygenassistFF.v[0]); + mm128i imc = { .m = _mm_aesimc_si128(x.m) }; + printf("imc (0x%016llX%016llX) = 0x%016llX%016llX\n", x.v[1], x.v[0], imc.v[1], imc.v[0]); + + mm128i pclmul00 = { .m = _mm_clmulepi64_si128(keygenassist00.m, x.m, 0) }; + printf("pclmul(0x%016llX%016llX, 0x00) = 0x%016llX%016llX\n", x.v[1], x.v[0], pclmul00.v[1], pclmul00.v[0]); + mm128i pclmul01 = { .m = _mm_clmulepi64_si128(keygenassist00.m, x.m, 0x01) }; + printf("pclmul(0x%016llX%016llX, 0x01) = 0x%016llX%016llX\n", x.v[1], x.v[0], pclmul01.v[1], pclmul01.v[0]); + mm128i pclmul10 = { .m = _mm_clmulepi64_si128(keygenassist00.m, x.m, 0x10) }; + printf("pclmul(0x%016llX%016llX, 0x10) = 0x%016llX%016llX\n", x.v[1], x.v[0], pclmul10.v[1], pclmul10.v[0]); + mm128i pclmul11 = { .m = _mm_clmulepi64_si128(keygenassist00.m, x.m, 0x11) }; + printf("pclmul(0x%016llX%016llX, 0xFF) = 0x%016llX%016llX\n", x.v[1], x.v[0], pclmul11.v[1], pclmul11.v[0]); + } while (!need_stop(&x)); +} diff --git a/tests32/test23 b/tests32/test23 new file mode 100755 index 0000000000000000000000000000000000000000..7da449871f335b4e636cb1da571e1bf3ce18668f Binary files /dev/null and b/tests32/test23 differ diff --git a/tests32/test23.c b/tests32/test23.c new file mode 100644 index 0000000000000000000000000000000000000000..35016d6d7a4fb6327c008ca43dcf1afd061e15b5 --- /dev/null +++ b/tests32/test23.c @@ -0,0 +1,52 @@ +#include +#include +#include +#include +// Build with `gcc -march=core2 -O2 -m32 test23.c -o test23` + + +uint64_t a = 0x12345678abcdefed; +uint32_t b = 0x12345678; +uint16_t c = 0x1234; + +int main() +{ + uint32_t ret2; + uint16_t ret3; + + asm volatile( + "movbe %1, %0\n" + : "=r"(ret2) + : "m"(b) + : "memory"); + printf("ret = 0x%x\n", ret2); + + asm volatile( + "movbe %1, %0\n" + : "=r"(ret3) + : "m"(c) + : "memory"); + printf("ret = 0x%x\n", ret3); + + asm volatile( + "movbe %1, %0\n" + : "=m"(ret2) + : "r"(b) + : "memory"); + printf("ret = 0x%x\n", ret2); + + asm volatile( + "movbe %1, %0\n" + : "=m"(ret3) + : "r"(c) + : "memory"); + printf("ret = 0x%x\n", ret3); + + asm volatile( + "bswap %0\n" + : "+r"(ret2) + : + :); + printf("ret = 0x%x\n", ret2); + return 0; +} diff --git a/tests32/test24 b/tests32/test24 new file mode 100755 index 0000000000000000000000000000000000000000..c43b0fd5c358f5a8c48dc0f3ee8a7f012a75fef9 Binary files /dev/null and b/tests32/test24 differ diff --git a/tests32/test24.c b/tests32/test24.c new file mode 100644 index 0000000000000000000000000000000000000000..47f08e28637d90ab3e11ffc50415f286563795fd --- /dev/null +++ b/tests32/test24.c @@ -0,0 +1,104 @@ +#include +#include +#include +// Build with `gcc -march=core2 -O0 -m32 test24.c -o test24 -lm` + +#define TEST(fn, val) \ + printf("Testing %s(%f)\n", #fn, val); \ + fesetround(FE_UPWARD); \ + printf("FE_UPWARD: %.1f\n", (double)fn(val)); \ + printf("Current rounding mode: 0x%x\n", fegetround()); \ + fesetround(FE_DOWNWARD); \ + printf("FE_DOWNWARD: %.1f\n", (double)fn(val)); \ + printf("Current rounding mode: 0x%x\n", fegetround()); \ + fesetround(FE_TOWARDZERO); \ + printf("FE_TOWARDZERO: %.1f\n", (double)fn(val)); \ + printf("Current rounding mode: 0x%x\n", fegetround()); \ + fesetround(FE_TONEAREST); \ + printf("FE_TONEAREST: %.1f\n", (double)fn(val)); \ + printf("Current rounding mode: 0x%x\n\n", fegetround()); + +int main() +{ + TEST(rint, 1.0f); + TEST(rint, 1.3f); + TEST(rint, 1.5f); + TEST(rint, 1.8f); + + TEST(rint, 2.0f); + TEST(rint, 2.3f); + TEST(rint, 2.5f); + TEST(rint, 2.8f); + + TEST(rintf, 1.0f); + TEST(rintf, 1.3f); + TEST(rintf, 1.5f); + TEST(rintf, 1.8f); + + TEST(rintf, 2.0f); + TEST(rintf, 2.3f); + TEST(rintf, 2.5f); + TEST(rintf, 2.8f); + + TEST(nearbyint, 1.0f); + TEST(nearbyint, 1.3f); + TEST(nearbyint, 1.5f); + TEST(nearbyint, 1.8f); + + TEST(nearbyint, 2.0f); + TEST(nearbyint, 2.3f); + TEST(nearbyint, 2.5f); + TEST(nearbyint, 2.8f); + + TEST(nearbyintf, 1.0f); + TEST(nearbyintf, 1.3f); + TEST(nearbyintf, 1.5f); + TEST(nearbyintf, 1.8f); + + TEST(nearbyintf, 2.0f); + TEST(nearbyintf, 2.3f); + TEST(nearbyintf, 2.5f); + TEST(nearbyintf, 2.8f); + + TEST(llrintf, 1.0f); + TEST(llrintf, 1.3f); + TEST(llrintf, 1.5f); + TEST(llrintf, 1.8f); + + TEST(llrintf, 2.0f); + TEST(llrintf, 2.3f); + TEST(llrintf, 2.5f); + TEST(llrintf, 2.8f); + + TEST(llrint, 1.0f); + TEST(llrint, 1.3f); + TEST(llrint, 1.5f); + TEST(llrint, 1.8f); + + TEST(llrint, 2.0f); + TEST(llrint, 2.3f); + TEST(llrint, 2.5f); + TEST(llrint, 2.8f); + + TEST(lrintf, 1.0f); + TEST(lrintf, 1.3f); + TEST(lrintf, 1.5f); + TEST(lrintf, 1.8f); + + TEST(lrintf, 2.0f); + TEST(lrintf, 2.3f); + TEST(lrintf, 2.5f); + TEST(lrintf, 2.8f); + + TEST(lrint, 1.0f); + TEST(lrint, 1.3f); + TEST(lrint, 1.5f); + TEST(lrint, 1.8f); + + TEST(lrint, 2.0f); + TEST(lrint, 2.3f); + TEST(lrint, 2.5f); + TEST(lrint, 2.8f); + + return 0; +} diff --git a/tests32/test25 b/tests32/test25 new file mode 100755 index 0000000000000000000000000000000000000000..4a6213a639d6bbc733a589dc77cb470b1e79e486 Binary files /dev/null and b/tests32/test25 differ diff --git a/tests32/test25.c b/tests32/test25.c new file mode 100644 index 0000000000000000000000000000000000000000..b2204308264590167c56f461248cfca35d29f688 --- /dev/null +++ b/tests32/test25.c @@ -0,0 +1,130 @@ +// build with gcc -O0 -g -msse -msse2 -mssse3 -msse4.1 -msse4.2 -m32 test25.c -o test25 +// and -m32 for 32bits version +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef unsigned char u8x16 __attribute__ ((vector_size (16))); +typedef unsigned short u16x8 __attribute__ ((vector_size (16))); +typedef unsigned int u32x4 __attribute__ ((vector_size (16))); +typedef unsigned long int u64x2 __attribute__ ((vector_size (16))); +typedef float f32x4 __attribute__ ((vector_size (16))); +typedef double d64x2 __attribute__ ((vector_size (16))); + +const char* string1 = "This is a string"; +const char* string2 = "This\0 string "; +const char* string3 = "is\0 "; +const char* string4 = "maestrum-foo-bar"; +const char* string5 = "\0 "; + +typedef union { + __m128i mm; + __m128 mf; + __m128d md; + u8x16 u8; + u16x8 u16; + u32x4 u32; + u64x2 u64; + f32x4 f32; + d64x2 d64; +} v128; + +v128 load_string(const char* s) +{ + v128 ret; + for(int i=0; i<16; ++i) + ret.u8[i] = s[i]; + return ret; +} +v128 load_stringw(const char* s) +{ + v128 ret; + for(int i=0; i<8; ++i) + ret.u16[i] = s[i]; + return ret; +} + +int main(int argc, const char** argv) +{ + printf("test SSE 4.2\n"); + + v128 a, b, c; + int ret; + int fa, fc, fo, fs, fz; + #define GO1(A, B, C) \ + ret = _mm_cmpestri(a.mm, strlen(A), b.mm, strlen(B), C); \ + printf("_mm_cmpestri(\"%s\", %d, \"%s\", %d, 0x%x) => %d\n", A, strlen(A), B, strlen(B), C, ret); \ + fa = _mm_cmpestra(a.mm, strlen(A), b.mm, strlen(B), C); \ + fc = _mm_cmpestrc(a.mm, strlen(A), b.mm, strlen(B), C); \ + fo = _mm_cmpestro(a.mm, strlen(A), b.mm, strlen(B), C); \ + fs = _mm_cmpestrs(a.mm, strlen(A), b.mm, strlen(B), C); \ + fz = _mm_cmpestrz(a.mm, strlen(A), b.mm, strlen(B), C); \ + printf("_mm_cmpestri(\"%s\", %d, \"%s\", %d, 0x%x) flags: a:%d s:%d z:%d c:%d o:%d\n", A, strlen(A), B, strlen(B), C, fa, fs, fz, fc, fo); \ + c.mm = _mm_cmpestrm(a.mm, strlen(A), b.mm, strlen(B), C); \ + printf("mm_cmpestrm(\"%s\", %d, \"%s\", %d, 0x%x) = %016x-%016x\n", A, strlen(A), B, strlen(B), C, c.u64[1], c.u64[0]); \ + ret = _mm_cmpistri(a.mm, b.mm, C); \ + printf("_mm_cmpistri(\"%s\", \"%s\", 0x%x) => %d\n", A, B, C, ret); \ + fa = _mm_cmpistra(a.mm, b.mm, C); \ + fc = _mm_cmpistrc(a.mm, b.mm, C); \ + fo = _mm_cmpistro(a.mm, b.mm, C); \ + fs = _mm_cmpistrs(a.mm, b.mm, C); \ + fz = _mm_cmpistrz(a.mm, b.mm, C); \ + printf("_mm_cmpestri(\"%s\", \"%s\", 0x%x) flags: a:%d s:%d z:%d c:%d o:%d\n", A, B, C, fa, fs, fz, fc, fo); \ + c.mm = _mm_cmpistrm(a.mm, b.mm, C); \ + printf("mm_cmpestrm(\"%s\", \"%s\", 0x%x) = %016x-%016x\n", A, B, C, c.u64[1], c.u64[0]) + + #define GO(A, B, C) \ + a = load_string(A); \ + b = load_string(B); \ + GO1(A, B, C); \ + a = load_stringw(A);\ + b = load_stringw(B);\ + GO1(A, B, C+1) \ + + #define GO2(C) \ + GO(string1, string2, C); \ + GO(string2, string1, C); \ + GO(string1, string3, C); \ + GO(string3, string1, C); \ + GO(string1, string4, C); \ + GO(string4, string1, C); \ + GO(string1, string5, C); \ + GO(string5, string1, C); + + GO2(0x00) + GO2(0x04) + GO2(0x08) + GO2(0x0c) + GO2(0x10) + GO2(0x30) + GO2(0b1001100) + GO2(0b0101100) + GO2(0b0110100) + GO2(0b0110110) + GO2(0b1110100) + + unsigned int crc = 0; + printf("crc32(0x%x, byte:0x%x) => ", crc, 0); + crc = _mm_crc32_u8(crc, 0); + printf("0x%x\n", crc); + printf("crc32(0x%x, byte:0x%x) => ", crc, 10); + crc = _mm_crc32_u8(crc, 10); + printf("0x%x\n", crc); + printf("crc32(0x%x, dword:0x%x) => ", crc, 0); + crc = _mm_crc32_u32(crc, 0); + printf("0x%x\n", crc); + printf("crc32(0x%x, dword:0x%x) => ", crc, 0x123456); + crc = _mm_crc32_u32(crc, 0x123456); + printf("0x%x\n", crc); + printf("crc32(0x%x, word:0x%x) => ", crc, 0x8765); + crc = _mm_crc32_u16(crc, 0x8765); + printf("0x%x\n", crc); + + return 0; +} diff --git a/tests32/test26 b/tests32/test26 new file mode 100755 index 0000000000000000000000000000000000000000..4efc881e57caf79c19646f6d32a8d61dc3329497 Binary files /dev/null and b/tests32/test26 differ diff --git a/tests32/test26.c b/tests32/test26.c new file mode 100644 index 0000000000000000000000000000000000000000..f2097a18ce2fee68aca184e1ba0a76cb1fb44b3e --- /dev/null +++ b/tests32/test26.c @@ -0,0 +1,116 @@ +#include +#include +#include +#include +#define USE_ASM_ROUNDING +#include "roundtest.h" + +// Build with +// `gcc -march=core2 -O0 -m32 test26.c -o test26 -std=c99 -masm=intel +// -mfpmath=387 -frounding-math` + +#define TEST_CONVERT_(stype, s_) \ + do { \ + stype s; \ + TEST_(s = (s_), (double)s, "%a"); \ + TEST_(s = (s_), (float)s, "%a"); \ + /* converting too large float to integer, the result is undefined, on both \ + * c99 and FISTP instruction */ \ + if (INT64_MIN <= s && INT64_MAX <= s) \ + TEST_(s = (s_), (int64_t)s, "%" PRId64); \ + if (INT32_MIN <= s && INT32_MAX <= s) \ + TEST_(s = (s_), (int32_t)s, "%" PRId32); \ + if (INT16_MIN <= s && INT16_MAX <= s) \ + TEST_(s = (s_), (int16_t)s, "%" PRId16); \ + if (INT8_MIN <= s && INT8_MAX <= s) \ + TEST_(s = (s_), (int8_t)s, "%" PRId8); \ + if (0 <= s && UINT64_MAX <= s) \ + TEST_(s = (s_), (uint64_t)s, "%" PRIu64); \ + if (0 <= s && UINT32_MAX <= s) \ + TEST_(s = (s_), (unsigned int)s, "%" PRIu32); \ + if (0 <= s && UINT16_MAX <= s) \ + TEST_(s = (s_), (unsigned short)s, "%" PRIu16); \ + if (0 <= s && UINT8_MAX <= s) \ + TEST_(s = (s_), (unsigned char)s, "%" PRIu8); \ + } while (0) + +#define TEST_CONVERT(stype, s_) \ + do { \ + TEST_CONVERT_(stype, s_); \ + TEST_CONVERT_(stype, -(s_)); \ + } while (0) + +#define TEST_2NUMBER(d1type, d1_, d2type, d2_, operation) \ + do { \ + d1type d1; \ + d2type d2; \ + TEST((d1 = (d1_), d2 = (d2_)), operation); \ + TEST((d1 = -(d1_), d2 = (d2_)), operation); \ + TEST((d1 = (d1_), d2 = -(d2_)), operation); \ + TEST((d1 = -(d1_), d2 = -(d2_)), operation); \ + } while (0) + +int main() { + double d; + float f; + int64_t i64; + TEST_CONVERT(double, 0x1.123456789abcp2); // FISTTP + TEST_(d = (0x1.123456789abcp512), (float)d, "%a"); + TEST_CONVERT(double, 0x1.123456789abcp29); + TEST_(d = (-0x1.123456789abcp30), (int32_t)d, "%" PRId32); + TEST_(d = (-0x1.123456789abcp62), (int64_t)d, "%" PRId64); + + TEST_CONVERT(float, 0x1.123456789abcp2f); + TEST_CONVERT(float, 0x1.123456789abcp29f); + TEST_(f = -0x1.123456789abcp30f, (int32_t)f, "%" PRId32); + // to be fixed: + //TEST_(f = -0x1.123456789abcp62f, (int64_t)f, "%" PRId64); + // The direction of rounding when an integer is converted to a floating-point + // number that cannot exactly represent the original value + // https://gcc.gnu.org/onlinedocs/gcc/Floating-point-implementation.html + // to be fixed: + //TEST_(i64 = INT64_MAX, (double)i64, "%a"); // FILD and FSTP + TEST(d = -0x1.1234567p0, (double)((int)d)); + TEST(d = 0x1.9234567p0, (double)((int)d)); + TEST(d = -0x1.9234567p0, (double)((int)d)); + + TEST(d = 0x1.1234567p0, (double)((long int)d)); + TEST(d = -0x1.1234567p0, (double)((long int)d)); + TEST(d = 0x1.9234567p0, (double)((long int)d)); + TEST(d = -0x1.9234567p0, (double)((long int)d)); + + TEST_2NUMBER(double, 1.0, double, 0x1.0000000000001p0, d1 + d2); + TEST_2NUMBER(double, 1.0, double, 0x1.0000000000001p0, d1 - d2); + TEST_2NUMBER(double, 1.0, double, 0x1.0000000000001p0, d2 - d1); + TEST_2NUMBER(double, 1.0, double, 0x1.000000000000dp-4, d1 + d2); + TEST_2NUMBER(double, 1.0, double, 0x1.000000000000dp-4, d1 - d2); + TEST_2NUMBER(double, 1.0, double, 0x1.000000000000dp-4, d2 - d1); + + TEST_2NUMBER(double, 0x1.233445566778p0, double, 0x1.3456789abcdep0, d1 + d2); + TEST_2NUMBER(float, 0x1.233445566778p0f, float, 0x1.3456789abcdep0f, d1 *d2); + TEST_2NUMBER(float, 0x1.233445566778p0f, double, 0x1.3456789abcdep0, d1 *d2); + TEST_2NUMBER(double, 0x1.233445566778p0, double, 0x1.3456789abcdep0, d1 *d2); + TEST_2NUMBER(float, 0x1.233445566778p0f, double, 0x1.3456789abcdep0, d1 *d2); + TEST_2NUMBER(double, 0x1.233445566778p0, float, 0x1.3456789abcdep0, d1 *d2); + TEST_2NUMBER(float, 0x1.233445566778p0f, float, 0x1.3456789abcdep0f, d1 *d2); + TEST_2NUMBER(double, 0x1.233445566778p0, int, 5, d1 *d2); + TEST_2NUMBER(int, 15, double, 0x1.3456789abcdep0f, d1 *d2); + TEST_2NUMBER(float, 0x1.233445566778p0f, int, 15, d1 *d2); + TEST_2NUMBER(int, 15, float, 0x1.3456789abcdep0f, d1 *d2); + + TEST_2NUMBER(double, 0x1.233445566778p0, double, 0x1.3456789abcdep0, d1 / d2); + TEST_2NUMBER(double, 0x1.233445566778p0, double, 0x1.3456789abcdep0, d1 / d2); + TEST_2NUMBER(double, 0x1.233445566778p0, float, 0x1.3456789abcdep0f, d1 / d2); + + TEST_2NUMBER(double, 1.0, double, 0x1.0000000000001p0, d2 - d1); + TEST_2NUMBER(double, 1.0, double, 0x1.000000000000dp-4, d1 + d2); + TEST_2NUMBER(double, 1.0, double, 0x1.000000000000dp-4, d1 - d2); + TEST_2NUMBER(double, 1.0, double, 0x1.000000000000dp-4, d2 - d1); + + TEST_X87_1("FSQRT", 0x1.0000000000000p2); + TEST_X87_1("FSQRT", 0x1.0000000000001p1); + TEST_X87_1("FSQRT", 0x1.123456789abcp31); + TEST_X87_1("FSQRT", 0x1.123456789abdp31); + + return 0; +} diff --git a/wrapperhelper/CMakeLists.txt b/wrapperhelper/CMakeLists.txt deleted file mode 100644 index 3ab9cf14ad5906f7b18c10d51daf68e2c6b5334f..0000000000000000000000000000000000000000 --- a/wrapperhelper/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -cmake_minimum_required(VERSION 3.10) -project("helper") -find_package(Clang REQUIRED CONFIG) - -add_executable(helper main.cpp gen.cpp) -target_include_directories(helper SYSTEM PUBLIC ${CLANG_INCLUDE_DIRS}) -target_link_libraries(helper PUBLIC clang-cpp LLVM) diff --git a/wrapperhelper/Makefile b/wrapperhelper/Makefile new file mode 100755 index 0000000000000000000000000000000000000000..a4d9bc8e728a5304664c997ba59097737bc5c398 --- /dev/null +++ b/wrapperhelper/Makefile @@ -0,0 +1,308 @@ +all: +.PHONY: all + +OPTIM?=2 +DEBUG?=1 +# FORCE_COLOR: set to non-empty, non 0 to force colorized output +# ECHO: set to non-empty, non 0 to echo commands out + +help: + @echo 'Targets:' + @echo ' help (current target)' + @echo ' all (default target)' + @echo ' [EXE] - wrapperhelper' + @printf ' $(foreach obj,$(OBJLIST_wrapperhelper), [OBJ] - $(obj)\n)' + @printf ' $(foreach test,$(TESTS), [TST] - $(test)\n)' + @echo ' clean' + @echo ' distclean' + @echo '' + @echo 'Options:' + @echo ' OPTIM: GCC optimization level (-O is prepended) [default: 2]' + @echo ' DEBUG: set to 0 for release build, set to non-0 for debug build [default: 1]' + @echo ' FORCE_COLOR: set to non-0 to force colorized output' + @echo ' ECHO: set to non-0 to echo out commands executed' + @echo '' + @echo 'Current flags:' + @echo ' CPPFLAGS = $(CPPFLAGS)' + @echo ' CFLAGS = $(CFLAGS)' +# @echo ' CXXFLAGS = $(CXXFLAGS)' unused + @echo ' LDFLAGS = $(LDFLAGS)' + @echo ' LDLIBS = $(LDLIBS)' + @echo '' + @echo 'Sanitizers:' + @echo " address ------------ `[ $(ASAN_ON) -eq 1 ] && printf '\033[92mON\033[m' || printf '\033[91mOFF\033[m'`" + @echo " leak --------------- `[ $(LSAN_ON) -eq 1 ] && printf '\033[92mON\033[m' || printf '\033[91mOFF\033[m'`" + @echo " undefined behavior - `[ $(USAN_ON) -eq 1 ] && printf '\033[92mON\033[m' || printf '\033[91mOFF\033[m'`" +.PHONY: help + +ifeq ($(ECHO:0=),) +SILENCER:=@ +else +SILENCER:= +endif + +ifneq ($(strip $(DEBUG)),0) +CPPFLAGS+= -DDEBUG -D_NRELEASE +CFLAGS+= -g +CXXFLAGS+= -g +LDFLAGS+= -g +OBJDIR?=debug +else +CPPFLAGS+= -DRELEASE -D_NDEBUG +OBJDIR?=release +endif + +COMMON_WARNINGS:=-Wfatal-errors -fanalyzer -Wall -Wextra +COMMON_WARNINGS+= -Walloc-zero -Wcast-align=strict -Wcast-qual -Wconversion -Wdate-time +COMMON_WARNINGS+= -Wdisabled-optimization -Wduplicated-branches -Wfloat-equal -Wformat-truncation=2 +COMMON_WARNINGS+= -Wimplicit-fallthrough=3 -Wlogical-op -Wmissing-format-attribute -Wmissing-include-dirs +COMMON_WARNINGS+= -Wmissing-noreturn -Wnull-dereference -Wredundant-decls -Wundef -Wunreachable-code -Wshift-overflow=2 +COMMON_WARNINGS+= -Wstringop-overflow=4 +#COMMON_WARNINGS+= -Wstringop-overflow=4 -Wsuggest-attribute=cold -Wsuggest-attribute=const -Wsuggest-attribute=format +#COMMON_WARNINGS+= -Wsuggest-attribute=malloc -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure +COMMON_WARNINGS+= -Wunknown-pragmas -Wunused-macros -Wwrite-strings +COMMON_WARNINGS+= -Werror=attribute-alias=2 -Werror=duplicated-cond -Werror=format=2 -Werror=format-overflow=2 +COMMON_WARNINGS+= -Werror=format-signedness -Werror=pointer-arith +COMMON_WARNINGS+= -Werror=return-type -Werror=shadow -Werror=strict-overflow -Werror=switch-enum +CFLAGS_WARNINGS:=-Werror=implicit-function-declaration -Werror=jump-misses-init -Werror=strict-prototypes +CXXFLAGS_WARNINGS:=-Werror=overloaded-virtual -fdiagnostics-show-template-tree -Wno-analyzer-use-of-uninitialized-value + +CPPFLAGS+= +CFLAGS:=$(COMMON_WARNINGS) $(CFLAGS_WARNINGS) $(CFLAGS) -std=gnu18 -O$(OPTIM) +CXXFLAGS:=$(COMMON_WARNINGS) $(CXXFLAGS_WARNINGS) $(CXXFLAGS) -std=c++20 -O$(OPTIM) +LDFLAGS+= -O$(OPTIM) + +#CPPFLAGS+= -I/usr/include/SDL2 -D_REENTRANT -pthread +#CFLAGS+= -pthread +#CXXFLAGS+= -pthread +#LDLIBS+= -pthread -lSDL2 + +ifeq (,$(wildcard $(CURDIR)/sanaddress)) +ASAN_ON:=0 +else +ASAN_ON:=1 +CFLAGS+= -fsanitize=address +CXXFLAGS+= -fsanitize=address +LDFLAGS+= -fsanitize=address +endif +ifeq (,$(wildcard $(CURDIR)/sanleak)) +LSAN_ON:=0 +else +LSAN_ON:=1 +CFLAGS+= -fsanitize=leak +CXXFLAGS+= -fsanitize=leak +LDFLAGS+= -fsanitize=leak +endif +ifeq (,$(wildcard $(CURDIR)/sanundefined)) +USAN_ON:=0 +else +USAN_ON:=1 +CFLAGS+= -fsanitize=undefined +CXXFLAGS+= -fsanitize=undefined +LDFLAGS+= -fsanitize=undefined +endif + +# Default +# .SUFFIXES: .out .a .ln .o .c .cc .C .cpp .p .f .F .m .r .y .l .ym .yl .s .S .mod +# .sym .def .h .info .dvi .tex .texinfo .texi .txinfo .w .ch .web .sh .elc .el +SUFFIXES = +.SUFFIXES: +.SECONDEXPANSION: + +ifneq ($(MAKECMDGOALS:distclean=clean),clean) +.: ; +bin obj: ; $(SILENCER)test -d $@ || mkdir $@ +# $(eval $(call reproduce_tree,)) +define reproduce_tree = +$(1): | $$$$(@D) ; $(SILENCER)test -d $$@ || mkdir $$@ +endef +$(eval $(call reproduce_tree,obj/$(OBJDIR))) +$(eval $(call reproduce_tree,obj/$(OBJDIR)/tests)) +$(eval $(call reproduce_tree,makedir)) +$(eval $(call reproduce_tree,makedir/tests)) +$(eval $(call reproduce_tree,tests)) +endif + +# Colors: +# ------- +# +--------+-----+ +# | 3 | 9 | +# +-+--------+-----+ +# |0| | | Black +# |1| | RM | Red +# |2| |[MSG]| Green +# |3|Creating| | Yellow +# |4| | CP | Blue +# |5| | LD | Purple +# |6| C++ | | Cyan +# |7| | | Gray/white +# +-+--------+-----+ + +# $(call colorize,,,,) +ifdef $(if $(FORCE_COLOR:0=),FORCE_COLOR,MAKE_TERMOUT) +CFLAGS:=$(CFLAGS) -fdiagnostics-color +CXXFLAGS:=$(CFLAGS) -fdiagnostics-color +colorize=@printf "\033[$(1)m[$(2)]\033[m \033[$(3)m$(4)\033[m\n" +else +ifeq ($(SILENCER),) +colorize= +else +colorize=@echo "[$(2)] $(4)" +endif +endif + +define newline := + + +endef + +# $(call remove,) +define remove = +$(call colorize,1;91,RM ,91,Removing $(1)) +$(SILENCER)$(RM) -r $(1) +endef + +# $(eval $(call add_deptree,,,)) +ifeq ($(MAKECMDGOALS),distclean) +add_deptree= +else +define add_deptree = +makedir/$(2).mk: | $$$$(@D) + $(call colorize,95,DEP,33,Creating $(3) dependancies) + $(SILENCER)set -e; $(1) -MM src/$(3) \ + | sed 's,\($$(notdir $$(basename $(3)))\)\.o[ :]*,$$(dir obj/$(OBJDIR)/$(3))\1.o: $$@'"\n"'$$(dir obj/$(OBJDIR)/$(3))\1.o $$@: ,g' >$$@ +include makedir/$(2).mk +endef +endif + +OBJLIST=$(OBJLIST_wrapperhelper) $(foreach test,$(TESTS),$(call test_o,$(test))) +OBJLIST_wrapperhelper:= +TESTS:= + +# $(call wrapperhelper_o,,,) +wrapperhelper_o=obj/$(OBJDIR)/$(1)$(3).o +# $(eval $(call compile_wrapperhelper_c,,,)) +define compile_wrapperhelper_c = +$$(eval $$(call add_deptree,$$(CC) $$(CPPFLAGS) $$(CFLAGS),$(1)$(3),$(1)$(2).c)) +OBJLIST_wrapperhelper+= $(call wrapperhelper_o,$(1),$(2),$(3)) +$(call wrapperhelper_o,$(1),$(2),$(3)): src/$(1)$(2).c | $$$$(@D) + $(call colorize,36, C ,92,Compiling $$@) + $(SILENCER)$$(CC) $$(CPPFLAGS) $$(CFLAGS) -c src/$(1)$(2).c -o $$@ +endef +# $(eval $(call compile_wrapperhelper_cxx,,,)) +define compile_wrapperhelper_cxx = +$$(eval $$(call add_deptree,$$(CXX) $$(CPPFLAGS) $$(CXXFLAGS),$(1)$(3),$(1)$(2).cpp)) +OBJLIST_wrapperhelper+= $(call wrapperhelper_o,$(1),$(2),$(3)) +$(call wrapperhelper_o,$(1),$(2),$(3)): src/$(1)$(2).cpp | $$$$(@D) + $(call colorize,36,C++,92,Compiling $$@) + $(SILENCER)$$(CXX) $$(CPPFLAGS) $$(CXXFLAGS) -c src/$(1)$(2).cpp -o $$@ +endef + +# $(eval $(call compile_test_c,)) +define compile_test_c = +$$(eval $$(call add_deptree,$$(CC) $$(CPPFLAGS) -Isrc/tests -Isrc $$(CFLAGS),tests/$(1),tests/$(1).c)) +TESTS+= $(1) +tests/$(1): obj/$(OBJDIR)/tests/$(1).o | $$$$(@D) + $(call colorize,95,LD ,92,Linking $$@) + $(SILENCER)$$(CC) $$(LDFLAGS) -o $$@ obj/$(OBJDIR)/tests/$(1).o $$(LDLIBS) + +obj/$(OBJDIR)/tests/$(1).o: src/tests/$(1).c | $$$$(@D) + $(call colorize,36,C++,92,Compiling $$@) + $(SILENCER)$$(CC) $$(CPPFLAGS) -Isrc/tests -Isrc $$(CFLAGS) -c src/tests/$(1).c -o $$@ +endef +# $(eval $(call compile_test_cxx,)) +define compile_test_cxx = +$$(eval $$(call add_deptree,$$(CXX) $$(CPPFLAGS) -Isrc/tests -Isrc $$(CXXFLAGS),tests/$(1),tests/$(1).cpp)) +TESTS+= $(1) +tests/$(1): obj/$(OBJDIR)/tests/$(1).o | $$$$(@D) + $(call colorize,95,LD ,92,Linking $$@) + $(SILENCER)$$(CXX) $$(LDFLAGS) -o $$@ obj/$(OBJDIR)/tests/$(1).o $$(LDLIBS) + +obj/$(OBJDIR)/tests/$(1).o: src/tests/$(1).cpp | $$$$(@D) + $(call colorize,36,C++,92,Compiling $$@) + $(SILENCER)$$(CXX) $$(CPPFLAGS) -Isrc/tests -Isrc $$(CXXFLAGS) -c src/tests/$(1).cpp -o $$@ +endef + +$(eval $(call compile_wrapperhelper_c,,cstring,cstring)) +$(eval $(call compile_wrapperhelper_c,,generator,generator)) +$(eval $(call compile_wrapperhelper_c,,lang,lang)) +$(eval $(call compile_wrapperhelper_c,,log,log)) +$(eval $(call compile_wrapperhelper_c,,machine,machine)) +$(eval $(call compile_wrapperhelper_c,,main,main)) +$(eval $(call compile_wrapperhelper_c,,parse,parse)) +$(eval $(call compile_wrapperhelper_c,,prepare,prepare)) +$(eval $(call compile_wrapperhelper_c,,preproc,preproc)) +$(eval $(call compile_wrapperhelper_c,,vector,vector)) +$(call wrapperhelper_o,,machine,machine): src/machine.gen +$(call wrapperhelper_o,,generator,generator): CFLAGS+= -fno-analyzer # Too slow +$(call wrapperhelper_o,,preproc,preproc): CFLAGS+= -fno-analyzer +$(call wrapperhelper_o,,parse,parse): CFLAGS+= -fno-analyzer + +src/machine.gen: + $(call colorize,96,GEN,33,Generating $@) + $(SILENCER)echo | LC_ALL=C LANG=C $(CC) $(CPPFLAGS) -E -v - 2>&1 | sed ':l; $$ ! { N; b l }; s/.*#include <...> search starts here:\n//; s/End of search list.*//; s/^ /DO_PATH("/; s/\n /")\nDO_PATH("/g; s/\n$$/")/' >src/machine.gen + +#$(eval $(call compile_test_cxx,core/number)) + +bin/wrapperhelper: $$(OBJLIST_wrapperhelper) | $$(@D) + $(call colorize,95,LD ,92,Linking $@) + $(SILENCER)$(CXX) $(LDFLAGS) -o $@ $(OBJLIST_wrapperhelper) $(LDLIBS) + +wrapperhelper: bin/wrapperhelper +alltests: $(TESTS:%=tests/%) +.PHONY: wrapperhelper alltests + +all: wrapperhelper alltests + +clean: + $(call remove,$(OBJLIST)) + $(call remove,bin/wrapperhelper) + $(call remove,$(TESTS:%=obj/$(OBJDIR)/tests/%.o)) + $(call remove,$(TESTS:%=tests/%)) + $(call remove,src/machine.gen) +.PHONY: clean +distclean: + $(call remove,makedir) + $(call remove,obj) + $(call remove,bin tests) +.PHONY: distclean + +sanitize/help: + @echo "Sanitizers:" + @echo "- address (removes leak)" + @echo "- leak (removes address)" + @echo "- undefined behavior" + @echo "" + @echo "Currently active options:" + @[ $(ASAN_ON) -eq 0 ] || echo "- address" + @[ $(LSAN_ON) -eq 0 ] || echo "- leak" + @[ $(USAN_ON) -eq 0 ] || echo "- undefined behavior" +sanitize/address: + @[ $(ASAN_ON) -eq 0 ] && echo "Not sanitizing address" || echo "Sanitizing address" +sanitize/leak: + @[ $(LSAN_ON) -eq 0 ] && echo "Not sanitizing leak" || echo "Sanitizing leak" +sanitize/undefined: + @[ $(USAN_ON) -eq 0 ] && echo "Not sanitizing undefined behavior" || echo "Sanitizing undefined behavior" +sanitize/address/on: + $(SILENCER)touch sanaddress + $(SILENCER)$(RM) sanleak +sanitize/leak/on: + $(SILENCER)touch sanleak + $(SILENCER)$(RM) sanaddress +sanitize/undefined/on: + $(SILENCER)touch sanundefined +sanitize/address/off: + $(SILENCER)$(RM) sanaddress +sanitize/leak/off: + $(SILENCER)$(RM) sanleak +sanitize/undefined/off: + $(SILENCER)$(RM) sanundefined +.PHONY: sanitize/address sanitize/leak sanitize/undefined +.PHONY: sanitize/address/on sanitize/leak/on sanitize/undefined/on +.PHONY: sanitize/address/off sanitize/leak/off sanitize/undefined/off + +tree: + @tree src +.PHONY: tree + +.DELETE_ON_ERROR: diff --git a/wrapperhelper/README.md b/wrapperhelper/README.md index 1edd4db11b206a84b61a00305b2574d9623b94c1..282fdf6c121856466a60a4664284b9eda8e5541a 100644 --- a/wrapperhelper/README.md +++ b/wrapperhelper/README.md @@ -1,99 +1,126 @@ # Wrapper helper -**WARNING: There are still many problems with this tool. Please do NOT submit code generated directly by the tool, you should only use it as a preliminary reference.** +This folder is semi-independent from the parent project (`box64`). This sub-project aims to (partially) automating the generation of the private headers in `src/wrapped`. This is, however, still a work-in-progress and in alpha. +As such, **this sub-project is mainly aimed at people who know how to read code and are familiar with the wrapped libraries part of `box64`**. -This tool is based on libclangtooling. +## Licensing -It parses the AST of the library header files, generating the required structures of the wrapping library, including: -- structure definitions, -- export function signatures, -- callback function wrapping, -etc. Of course, this cannot completely automate everything, it can only be used as a reference. +This program is under the MIT license. However, some system header files under the LGPL license (copied from a GNU libc Arch Linux installation) have been adapted into the `include-fixed` folder; these files are not copied into the output and simply serve as data. As such, I believe this falls under fair use, and does not lead to the output of this program (used in the parent `box64` project) being under the (L)GPL license. -At the same time, this tool is also quite rough, and may even have errors. +## Compiling -## Build +You need a C compiler and GNU Make. No library is required. -``` -sudo apt install libclang-14-dev -cd wrapperhelper -mkdir build; cd build; cmake .. -make -``` +Go to this folder, then run the `make` command. This will produce a binary called `bin/wrapperhelper`. -## Usage: +This project has been compiled and tested with `GCC 14.2.1 20240805` on an `x86_64` machine, with no warning emitted. - helper [guest_triple] [host_triple] -- - : set the header file to be parsed - : set libname required for wrapping func - [guest_triple]: set guest triple: can be arm32/arm64/x86/x64, default is x64 - [host_triple] : set host triple: can be arm32/arm64/x86/x64, default is arm64 - -- : mandatory - : extra compiler flags +You may also use the `make clean` and `make distclean` commands to remove output files (`clean`) and directories (`distclean`). -### Usage example: +## Usage -`./helper /usr/include/jpeglib.h libjpeg x64 arm64 -- -I /usr/lib/gcc/x86_*/12.2.0/include --include /usr/lib/gcc/x86_*/12.2.0/include/stddef.h --include /usr/include/stdio.h` +To use the wrapper helper, run the following command in the folder containing this `README.md`: +```sh +bin/wrapperhelper -I/path/to/system/include "path_to_support_file" "path_to_private.h" "path_to_private.h" +``` -You would see an output similar to the files `src/wrapped/wrappedlibjpeg.c` and `src/wrapped/wrappedlibjpeg_private.h`, should they exist. +You may add as many `-I` options as needed. The folders `include-override/` and `include-override/common` are always prioritized, as if they appeared first in the command line. -If there are multiple header files to process, write them into a custom header file as input. +You may also use the `-32` and `-64` switches to generate `box32` or `box64` files respectively. Alterately, you can use the `--emu arch` and `--target arch` options to select more precisely the emlated and executing platforms, though only `x86`, `x86_64` and `aarch64` are supported for now. By default, everything is as if `-64` was supplied. -### Output sample +The first file is a `C` file containing every declaration required. The second file is the "requests" input. The third file is the output file, which may be a different file. -Using the command above, we get the following (trimmed) files: +The support file may contain pragma declarations of the form +```c +#pragma wrappers type_letters c TYPE +#pragma wrappers type_letters_strict c TYPE +``` +where `TYPE` is a `type-name`. The second form marks the *exact* type `TYPE` as being a complex type though with a conversion as `c` (which may be multiple characters), while the first marks the type `TYPE`, regardless of type qualifers (`_Atomic`, `const`, `restrict`, `volatile`). Meaning: +- if a parameter has type `TYPE`, the character output will be `c`; +- if a parameter has a pointer to `TYPE`, or a structure containing `TYPE`, the output will be a `GOM` function. -In `wrappedlibjpeg_private.h`: +Declarations of the form ```c -... -GO(jpeg_quality_scaling, iFi) -... -GOM(jpeg_destroy, vFEp) -... +#pragma wrappers mark_simple TAG ``` +will mark the structure or union with tag `TAG`, or the structure or union aliased to `TAG` by a `typedef` if no such structure exist, as simple. This means that a pointer to such a structure will have a character output of `p`. +This is not the same as making the pointer to the structure a complex type with conversion as `p` as e.g. pointers to pointers will behave differently. + +System headers included (directly or indirectly) by the support file are overriden by the files in `include-fixed`. + +The first three lines of the input are ignored. -In `wrappedlibjpeg.c`: +A "request" is a structure containing an object name and, eventually, a default value (`GO`, `GO2` with type `vFiV` to function `xxx`, `DATA`...) and/or a "solved" value (which is similar, but deduced from the support file). + +Valid requests (in the reference file) are: ```c -... -typedef struct jpeg_source_mgr { - void *next_input_byte; - unsigned long bytes_in_buffer; - vFp_t init_source; - iFp_t fill_input_buffer; - vFpI_t skip_input_data; - iFpi_t resync_to_restart; - vFp_t term_source; -} jpeg_source_mgr, *jpeg_source_mgr_ptr; -... -#define GO(A) \ -static uintptr_t my_term_source_fct_##A = 0; \ -void my_term_source_##A(struct jpeg_decompress_struct * a0) { \ - return RunFunction(my_context, my_term_source_fct_##A, 1, a0); \ -} -SUPER() -#undef GO -static void* findterm_sourceFct(void* fct) { - if(!fct) return fct; - if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); - #define GO(A) if(my_term_source_fct_##A == (uintptr_t)fct) return my_term_source_##A;} - SUPER() - #undef GO - #define GO(A) if(my_term_source_fct_##A == 0) {my_term_source_fct_##A = (uintptr_t)fct;return my_term_source_##A;} - SUPER() - #undef GO - return NULL; -} -... -EXPORT int my_jpeg_quality_scaling(void *emu, int quality) { - libjpeg_my_t *my = (libjpeg_my_t*)my_lib->priv.w.p2; - my->jpeg_quality_scaling(quality); -} -... -EXPORT void my_jpeg_destroy(void *emu, struct jpeg_common_struct * cinfo) { - // WARN: This function's arg has a structure ptr which is special, may need to wrap it for the host - libjpeg_my_t *my = (libjpeg_my_t*)my_lib->priv.w.p2; - my->jpeg_destroy(cinfo); -} -... +{GO/GOM/GOW/GOWM} ( name , type ) +{GOD/GO2/GOWD/GOW2} ( name , type , name ) +// {GO/GOM/GOW/GOWM} ( name , +// {GO/GOM/GOW/GOWM} ( name , type ) +// {GOD/GO2/GOWD/GOW2} ( name , +// {GOD/GO2/GOWD/GOW2} ( name , type , name ) +DATA[V/B/M] ( name , int ) +// DATA[V/B/M] ( name , +// DATA[V/B/M] ( name , int ) +``` +(where `{A/B}` means `A` or `B` and `[A/B]` means `A`, `B` or nothing). All other comments are ignored. + +If you want to explore the output of the different stages of the helper, you can use the following forms: +```sh +bin/wrapperhelper --prepare "path_to_support_file" # (1) +bin/wrapperhelper --preproc "path_to_support_file" # (2) +bin/wrapperhelper --proc "path_to_support_file" # (3) +bin/wrapperhelper "path_to_support_file" # (3) as well +``` +1. This form outputs the list of preprocessor tokens (the "post-prepare" phase). +2. This form outputs the list of processor tokens (the "post-preprocessor" phase). +3. This form outputs the list of constants, type definitions, structure definitions, and declarations (the "post-processor" phase). + +### Example + +To remake the `wrappedlibc_private.h` file, use the following command: +```sh +bin/wrapperhelper example-libc.h ../src/wrapped/wrappedlibc_private.h ../src/wrapped/wrappedlibc_private.h ``` +This will emit a few marnings and (non-fatal) errors, then write the result directly in `wrappedlibc_private.h`. + +## Maintaining + +All of the source code is included in the `src` folder. + +The `main` function is in `main.c`. + +The first phase of compilation (steps 1-3 and a part of step 5 of the translation phases) is implemented in `prepare.c`. + +The second phase of compilation (steps 4 and 6) is implemented in `preproc.c`. + +The third phase of compilation (step 7) is implemented in `parse.c`, though no actual parsing of function definitions takes place. + +The reading and writing of the `_private.h` files is implemented in `generator.c`. + +## Known issues + +Only native structures are read. This means that the current version of `wrapperhelper` does not detect an issue when a structure has different members or alignments in two different architectures. + +No checking of signatures under `#ifdef`s is made. + +Phase 5 is partially implemented, but could be greatly improved. + +The following features are missing from the generator: +- Structures with at least two elements as a parameter +- Large structure as a return type (more than 16 bytes on 64bits, or 8 bytes on 32bits) +- Atomic types + +The following features are missing from the preprocessor: +- General token concatenation (though the concatenation of two `PTOK_IDENT` works without issue) +- Stringify +- Skipped unexpected token warnings + +The following features are missing from the parser: +- `_Alignas(type-name)` and `_Alignas(constant-expression)` +- `(type-name){initializer-list}` +- Old style function declarations +- Function definitions are ignored, not parsed +- Attributes are ignored everywhere (with a `#define __attribute__(_)`) diff --git a/wrapperhelper/ast.h b/wrapperhelper/ast.h deleted file mode 100644 index 2746d9884b78d3199000771d2981a11585f6a637..0000000000000000000000000000000000000000 --- a/wrapperhelper/ast.h +++ /dev/null @@ -1,189 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "gen.h" -#include "utils.h" - -static void ParseParameter(clang::ASTContext* AST, WrapperGenerator* Gen, clang::QualType ParmType, FuncInfo* Func) { - using namespace clang; - (void)AST; (void)Func; - if (ParmType->isFunctionPointerType()) { - auto ProtoType = ParmType->getPointeeType()->getAs(); - for (unsigned i = 0; i < ProtoType->getNumParams(); i++) { - ParseParameter(AST, Gen, ProtoType->getParamType(i), Func); - } - } else if (ParmType->isPointerType()) { - auto PointeeType = ParmType->getPointeeType(); - if (PointeeType->isRecordType()) { - if (Gen->records.find(StripTypedef(PointeeType)) == Gen->records.end()) { - auto Record = &Gen->records[StripTypedef(PointeeType)]; - if (PointeeType->isUnionType()) { - Record->is_union = true; - } - Record->type = StripTypedef(PointeeType); - Record->decl = PointeeType->getAs()->getDecl(); - Record->type_name = Record->decl->getIdentifier() ? Record->decl->getIdentifier()->getName().str() : ""; - } - } else if (PointeeType->isPointerType()) { - PointeeType = PointeeType->getPointeeType(); - if (PointeeType->isRecordType()) { - if (Gen->records.find(StripTypedef(PointeeType)) == Gen->records.end()) { - auto Record = &Gen->records[StripTypedef(PointeeType)]; - if (PointeeType->isUnionType()) { - Record->is_union = true; - } - - Record->type = StripTypedef(PointeeType); - Record->decl = PointeeType->getAs()->getDecl(); - Record->type_name = Record->decl->getIdentifier() ? Record->decl->getIdentifier()->getName().str() : ""; - } - } - } - } else if (ParmType->isRecordType()) { - if (Gen->records.find(StripTypedef(ParmType)) == Gen->records.end()) { - auto Record = &Gen->records[StripTypedef(ParmType)]; - if (ParmType->isUnionType()) { - Record->is_union = true; - } - Record->type = StripTypedef(ParmType); - Record->decl = ParmType->getAs()->getDecl(); - Record->type_name = Record->decl->getIdentifier() ? Record->decl->getIdentifier()->getName().str() : ""; - } - } -} - -static void ParseFunction(clang::ASTContext* AST, WrapperGenerator* Gen, clang::FunctionDecl* Decl) { - using namespace clang; - auto Type = Decl->getType().getTypePtr(); - auto FuncInfo = &Gen->funcs[Type]; - FuncInfo->type = Type; - FuncInfo->func_name = Decl->getNameAsString(); - FuncInfo->decl = Decl; - FuncInfo->callback_args.resize(Decl->getNumParams()); - if (Decl->getAttr()) { - FuncInfo->is_weak = true; - } - if (Decl->isVariadic()) { - FuncInfo->is_variadaic = true; - } - for (unsigned i = 0; i < Decl->getNumParams(); i++) { - auto ParmDecl = Decl->getParamDecl(i); - if (ParmDecl->getType()->isFunctionPointerType()) { - FuncInfo->callback_args[i] = ParmDecl->getType().getTypePtr(); - FuncInfo->has_callback_arg = true; - } else { - FuncInfo->callback_args[i] = nullptr; - } - ParseParameter(AST, Gen, ParmDecl->getType(), FuncInfo); - } -} - -class MyASTVisitor : public clang::RecursiveASTVisitor { -public: - MyASTVisitor(clang::ASTContext* ctx) : Ctx(ctx) {} - MyASTVisitor(clang::ASTContext* ctx, WrapperGenerator* gen) : Ctx(ctx), Gen(gen) {} - - bool VisitFunctionDecl(clang::FunctionDecl* Decl) { - ParseFunction(Ctx, Gen, Decl); - return true; - } -private: - clang::ASTContext* Ctx; - WrapperGenerator* Gen; -}; - -class MyASTConsumer : public clang::ASTConsumer { -public: - MyASTConsumer(clang::ASTContext* Context, const std::string& libname, const std::string& host_triple, const std::string& guest_triple) - : Visitor(Context, &Generator) { - Generator.Init(libname, host_triple, guest_triple); - } - void HandleTranslationUnit(clang::ASTContext &Ctx) override { - Visitor.TraverseDecl(Ctx.getTranslationUnitDecl()); - std::cout << "--------------- Libclangtooling parse complete -----------------\n"; - Generator.Prepare(&Ctx); - std::cout << "--------------- Generator prepare complete -----------------\n"; - std::ofstream FuncDeclFile("wrapped" + Generator.libname + "_private.h", std::ios::out); - FuncDeclFile << Generator.GenFuncDeclare(&Ctx); - FuncDeclFile.close(); - std::ofstream FuncDefineFile("wrapped" + Generator.libname + ".c", std::ios::out); - FuncDefineFile << "#include \n" - "#include \n" - "#include \n" - "#define _GNU_SOURCE /* See feature_test_macros(7) */\n" - "#include \n" - "\n" - "#include \"wrappedlibs.h\"\n" - "\n" - "#include \"debug.h\"\n" - "#include \"wrapper.h\"\n" - "#include \"bridge.h\"\n" - "#include \"x64emu.h\"\n" - "#include \"box64context.h\"\n" - "\n" - "const char* " + Generator.libname + "Name = \"" + Generator.libname + "\";\n" - "#define LIBNAME " + Generator.libname + "\n" - "\n" - "#define ADDED_FUNCTIONS() \\\n" - "\n" - "#include \"generated/wrapped" + Generator.libname + "types.h\"\n"; - FuncDefineFile << Generator.GenRecordDeclare(&Ctx); - FuncDefineFile << Generator.GenRecordConvert(&Ctx); - FuncDefineFile << Generator.GenCallbackWrap(&Ctx); - FuncDefineFile << Generator.GenFuncDefine(&Ctx); - FuncDefineFile.close(); - std::cout << "--------------- Generator gen complete -----------------\n"; - } -private: - MyASTVisitor Visitor; - WrapperGenerator Generator; -}; - -class MyGenAction : public clang::ASTFrontendAction { -public: - MyGenAction(const std::string& libname, const std::string& host_triple, const std::string& guest_triple) : - libname(libname), host_triple(host_triple), guest_triple(guest_triple) {} - std::unique_ptr CreateASTConsumer(clang::CompilerInstance& Compiler, clang::StringRef file) override { - (void)file; - return std::make_unique(&Compiler.getASTContext(), libname, host_triple, guest_triple); - } -private: - std::string libname; - std::string host_triple; - std::string guest_triple; -}; - -class MyFrontendActionFactory : public clang::tooling::FrontendActionFactory { -public: - MyFrontendActionFactory(const std::string& libname, const std::string& host_triple, const std::string& guest_triple) : - libname(libname), host_triple(host_triple), guest_triple(guest_triple) {} -private: - std::unique_ptr create() override { - return std::make_unique(libname, host_triple, guest_triple); - } -private: - std::string libname; - std::string host_triple; - std::string guest_triple; -}; diff --git a/wrapperhelper/example-libc.h b/wrapperhelper/example-libc.h new file mode 100644 index 0000000000000000000000000000000000000000..b1ac07b10ced4ee428ccd6a9fb51378bb9ae8166 --- /dev/null +++ b/wrapperhelper/example-libc.h @@ -0,0 +1,130 @@ +#define _GNU_SOURCE 1 +#define __USE_MISC 1 +#define PORTMAP + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/wrapperhelper/gen.cpp b/wrapperhelper/gen.cpp deleted file mode 100644 index 743474cd84537d5fdb52c71e13cb471fb745112d..0000000000000000000000000000000000000000 --- a/wrapperhelper/gen.cpp +++ /dev/null @@ -1,1059 +0,0 @@ -#include "gen.h" -#include "utils.h" -#include -#include -#include -#include - -using namespace clang; -using namespace clang::tooling; - -static std::vector GetRecordFieldOff(const std::string& Code, const std::string& Triple) { - std::vector FieldOff; - std::vector Args = {"-target", Triple}; - std::unique_ptr AST = clang::tooling::buildASTFromCodeWithArgs(Code, Args); - auto& Ctx = AST->getASTContext(); - auto TranslateDecl = Ctx.getTranslationUnitDecl(); - for (const auto& Decl : TranslateDecl->decls()) { - if (const auto RecordDecl = clang::dyn_cast(Decl)) { - auto& RecordLayout = Ctx.getASTRecordLayout(RecordDecl); - for (unsigned i = 0; i < RecordLayout.getFieldCount(); i++) { - FieldOff.push_back(RecordLayout.getFieldOffset(i) / 8); - } - break; - } - } - return FieldOff; -} - -static uint64_t GetRecordSize(const std::string& Code, const std::string& Triple) { - std::vector Args = {"-target", Triple}; - std::unique_ptr AST = buildASTFromCodeWithArgs(Code, Args); - auto& Ctx = AST->getASTContext(); - auto TranslateDecl = Ctx.getTranslationUnitDecl(); - for (const auto& Decl : TranslateDecl->decls()) { - if (const auto recordDecl = dyn_cast(Decl)) { - return Ctx.getTypeSize(recordDecl->getTypeForDecl()) / 8; - } - } - return 0; -} - -static CharUnits::QuantityType GetRecordAlign(const std::string& Code, const std::string& Triple) { - std::vector Args = {"-target", Triple}; - std::unique_ptr AST = buildASTFromCodeWithArgs(Code, Args); - auto& Ctx = AST->getASTContext(); - auto TranslateDecl = Ctx.getTranslationUnitDecl(); - for (const auto& Decl : TranslateDecl->decls()) { - if (const auto recordDecl = dyn_cast(Decl)) { - auto& RecordLayout = Ctx.getASTRecordLayout(recordDecl); - for (unsigned i = 0; i < RecordLayout.getFieldCount(); i++) { - return RecordLayout.getAlignment().getQuantity() / 8; - } - break; - } - } - return 0; -} - -static uint64_t GetTypeSize(const Type* Type, const std::string& Triple) { - std::string Code = Type->getCanonicalTypeInternal().getAsString() + " dummy;"; - std::vector Args = {"-target", Triple}; - std::unique_ptr AST = buildASTFromCodeWithArgs(Code, Args); - auto& Ctx = AST->getASTContext(); - auto TranslateDecl = Ctx.getTranslationUnitDecl(); - for (const auto& Decl : TranslateDecl->decls()) { - if (const auto varDecl = dyn_cast(Decl)) { - return Ctx.getTypeSize(varDecl->getType()) / 8; - } - } - return 0; -} - -static std::string TypeToSig(ASTContext* Ctx, const Type* Type) { - if (Type->isBuiltinType()) { - switch (Type->getAs()->getKind()) { - case clang::BuiltinType::Kind::Void: - return "v"; - case clang::BuiltinType::Kind::Bool: - return "i"; - case clang::BuiltinType::Kind::Char_U: - return "C"; - case clang::BuiltinType::Kind::Char_S: - return "c"; - case clang::BuiltinType::Kind::Char8: - return "c"; - case clang::BuiltinType::Kind::UChar: - return "C"; - case clang::BuiltinType::Kind::SChar: - return "c"; - case clang::BuiltinType::Kind::WChar_U: - return "W"; - case clang::BuiltinType::Kind::UShort: - return "W"; - case clang::BuiltinType::Kind::WChar_S: - return "w"; - case clang::BuiltinType::Kind::Char16: - return "w"; - case clang::BuiltinType::Kind::Short: - return "w"; - case clang::BuiltinType::Kind::UInt: - return "u"; - case clang::BuiltinType::Kind::Char32: - return "i"; - case clang::BuiltinType::Kind::Int: - return "i"; - case clang::BuiltinType::Kind::ULong: - return "L"; - case clang::BuiltinType::Kind::Long: - return "l"; - case clang::BuiltinType::Kind::ULongLong: - return "U"; - case clang::BuiltinType::Kind::LongLong: - return "I"; - case clang::BuiltinType::Kind::UInt128: - return "H"; - case clang::BuiltinType::Kind::Int128: - return "H"; - case clang::BuiltinType::Kind::Float: - return "f"; - case clang::BuiltinType::Kind::Double: - return "d"; - case clang::BuiltinType::Kind::LongDouble: - return "D"; - case clang::BuiltinType::Kind::NullPtr: - return "p"; // nullptr_t - default: - std::cout << "Unsupported BuiltinType: " << Type->getCanonicalTypeInternal().getAsString() << std::endl; - } - } else { - if (Type->isPointerType()) { - return "p"; - } else if (Type->isVoidType()) { - return "v"; - } else if (Type->isUnsignedIntegerOrEnumerationType()) { - switch(Ctx->getTypeSizeInChars(Type).getQuantity()) { - case 1: - return "C"; - case 2: - return "W"; - case 4: - return "u"; - case 8: - return "U"; - default: - std::cout << "Unsupported UnsignedInteger Type: " << Type->getCanonicalTypeInternal().getAsString() << std::endl; - } - } else if (Type->isSignedIntegerOrEnumerationType()) { - switch(Ctx->getTypeSizeInChars(Type).getQuantity()) { - case 1: - return "c"; - case 2: - return "w"; - case 4: - return "i"; - case 8: - return "I"; - default: - std::cout << "Unsupported SignedInteger Type: " << Type->getCanonicalTypeInternal().getAsString() << std::endl; - } - } else if (Type->isCharType()) { - return "c"; - } else if (Type->isFloatingType()) { - switch(Ctx->getTypeSizeInChars(Type).getQuantity()) { - case 4: - return "f"; - case 8: - return "d"; - case 16: - return "D"; - default: - std::cout << "Unsupported Floating Type: " << Type->getCanonicalTypeInternal().getAsString() - << " (quantity = " << Ctx->getTypeSizeInChars(Type).getQuantity() << ")" << std::endl; - } - } else { - std::cout << "Unsupported Type: " << Type->getCanonicalTypeInternal().getAsString() << std::endl; - } - } - return "?"; -} - -// Prepare for generation, collect the structures and functions that need to be prcessed -void WrapperGenerator::Prepare(ASTContext *Ctx) { - for (const auto &func_pair : funcs) { - for (auto Type : func_pair.second.callback_args) { - if (Type && Type->isTypedefNameType()) { - callbacks[StripTypedef(Type->getPointeeType())] = - Type->getAs()->getDecl()->getNameAsString(); - } else if (Type) { - callbacks[StripTypedef(Type->getPointeeType())] = - GetFuncSig(Ctx, Type->getPointeeType().getTypePtr()) + "_t"; - } - } - } - std::vector Types; - for (const auto &record_pair : records) { - Types.push_back(record_pair.first); - } - for (auto type : Types) { - std::set Visited{type}; - bool Special = false; - ParseRecordRecursive(Ctx, type, Special, Visited); - } - for (auto it = records.begin(); it != records.end();) { - if (!it->second.is_special) { - it = records.erase(it); - } else { - for (auto field : it->second.callback_fields) { - if (field->isTypedefNameType()) { - callbacks[StripTypedef(field->getPointeeType())] = - field->getAs()->getDecl()->getNameAsString(); - } else { - callbacks[StripTypedef(field->getPointeeType())] = - GetFuncSig(Ctx, field->getPointeeType().getTypePtr()) + "_t"; - } - } - ++it; - } - } - for (auto &func_pair : funcs) { - for (unsigned i = 0; i < func_pair.second.decl->getNumParams(); i++) { - auto ParamDecl = func_pair.second.decl->getParamDecl(i); - auto ParamType = ParamDecl->getType(); - if (ParamType->isPointerType() && - ParamType->getPointeeType()->isRecordType()) { - if (records.find(StripTypedef(ParamType->getPointeeType())) != - records.end()) { - func_pair.second.has_special_arg = true; - break; - } - } else if (ParamType->isRecordType()) { - if (records.find(StripTypedef(ParamType)) != records.end()) { - func_pair.second.has_special_arg = true; - break; - } - } - } - auto RetType = func_pair.second.decl->getReturnType(); - if (RetType->isPointerType() && RetType->getPointeeType()->isRecordType()) { - if (records.find(StripTypedef(RetType->getPointeeType())) != - records.end()) { - func_pair.second.has_special_ret = true; - } - } else if (RetType->isRecordType()) { - if (records.find(StripTypedef(RetType)) != records.end()) { - func_pair.second.has_special_ret = true; - } - } - } -} - -// Gen callback typedef -std::string WrapperGenerator::GenCallbackTypeDefs(ASTContext *Ctx) { - (void)Ctx; - std::string res; - for (auto callback : callbacks) { - auto Type = callback.first; - auto Definition = GetFuncDefinition(Type); - res += "typedef " + Definition.ret_str + "(*" + callback.second + ")("; - for (int i = 0; i < Definition.arg_size - 1; i++) { - res += Definition.arg_types_str[i] + Definition.arg_names[i] + ", "; - } - if (Definition.arg_size) { - res += Definition.arg_types_str[Definition.arg_size - 1] + Definition.arg_names[Definition.arg_size - 1]; - } - res += ");\n"; - } - return res; -} - -// Gen function declare -std::string WrapperGenerator::GenDeclare(ASTContext *Ctx, - const FuncInfo &Func) { - std::string res; - std::string sig = GetFuncSig(Ctx, Func); - res += "GO"; - if (Func.is_weak) { - res += "W"; - } - if (sig.find('E') != std::string::npos) { - res += "M"; - } - res += "(" + Func.func_name + ", " + sig + ")\n"; - ; - return res; -} - -// Gen structure declare -std::string WrapperGenerator::GenDeclare(ASTContext *Ctx, - const RecordInfo &Record) { - (void)Ctx; - std::string RecordStr; - std::string PreDecl; - RecordStr += "\ntypedef "; - RecordStr += - (Record.is_union ? "union " : "struct ") + Record.type_name + " {\n"; - for (const auto &Field : Record.decl->fields()) { - auto Type = Field->getType(); - std::string Name = Field->getNameAsString(); - RecordStr += " "; - if (Type->isFunctionPointerType()) { - auto FuncType = StripTypedef(Type->getPointeeType()); - if (callbacks.count(FuncType)) { - std::string FieldStr = callbacks[FuncType]; - FieldStr += " "; - FieldStr += Name; - RecordStr += FieldStr; - } else { - std::cout << "Err: FuncPtr(" << Record.type_name << "." << Name << ") is not supported\n"; - } - } else if (Type->isPointerType()) { - auto PointeeType = Type->getPointeeType(); - if (PointeeType->isRecordType()) { - if (records.count(PointeeType.getTypePtr())) { - std::string FieldStr = records[PointeeType.getTypePtr()].type_name; - FieldStr += "_ptr "; - FieldStr += Name; - RecordStr += FieldStr; - } else { - RecordStr += "void *" + Name; - } - } else { - RecordStr += "void *" + Name; - } - } else if (Type->isRecordType()) { - if (records.count(Type.getTypePtr())) { - std::string FieldStr = records[Type.getTypePtr()].type_name; - FieldStr += " "; - FieldStr += Name; - RecordStr += FieldStr; - } else { - RecordStr += TypeStringify(StripTypedef(Type), Field, nullptr, PreDecl); - } - } else { - RecordStr += TypeStringify(StripTypedef(Type), Field, nullptr, PreDecl); - } - RecordStr += ";\n"; - } - RecordStr += "} "; - RecordStr += Record.type_name + ", *" + Record.type_name + "_ptr;\n"; - return RecordStr; -} - -std::string WrapperGenerator::GenCallbackWrap(ASTContext *Ctx, - const FuncInfo &Func) { - (void)Ctx; - std::string res; - - for (unsigned i = 0; i < Func.decl->getNumParams(); i++) { - auto ParamType = Func.decl->getParamDecl(i)->getType(); - if (ParamType->isFunctionPointerType()) { - - auto PointeeType = ParamType->getPointeeType(); - auto Definition = GetFuncDefinition(PointeeType.getTypePtr()); - std::string my_funcname = - std::string("my_") + Func.decl->getParamDecl(i)->getNameAsString(); - std::string funcname = Func.decl->getParamDecl(i)->getNameAsString(); - res += "\n#define GO(A) \\\n" - "static uintptr_t " + my_funcname + "_fct_##A = 0; \\\n" + - Definition.ret_str + " " + my_funcname + "("; - int arg_size = Definition.arg_names.size(); - if (arg_size) { - for (int i = 0; i < arg_size - 1; i++) { - res += Definition.arg_types_str[i] + " " + Definition.arg_names[i] + ", "; - } - res += Definition.arg_types_str[arg_size - 1] + " " + Definition.arg_names[arg_size - 1]; - } - res += ") { \\\n" - " return RunFunction(my_context, " + my_funcname + "_fct_##A" + ", " + std::to_string(arg_size); - for (int i = 0; i < arg_size; i++) { - res += ", " + Definition.arg_names[i]; - } - res += "); \\\n" - "}\n" - "SUPER()\n" - "#undef GO\n" - "static void* find" + funcname + "Fct(void* fct) {\n" - " if (!fct) return fct;\n" - " if (GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct);\n" - " #define GO(A) if (" + my_funcname + "_fct_##A == (uintptr_t)fct) return " + my_funcname + "_##A;\n" - " SUPER()\n" - " #undef GO\n" - " #define GO(A) if (" + my_funcname + "_fct_##A == 0) { " + my_funcname + "_fct_##A = (uintptr_t)fct; return " + my_funcname + "_##A; }\n" - " SUPER()\n" - " #undef GO\n" - " return NULL;\n" - "}\n"; - } - } - return res; -} - -std::string WrapperGenerator::GenCallbackWrap(ASTContext *Ctx, - const RecordInfo &Struct) { - (void)Ctx; - std::string res; - for (const auto &field : Struct.decl->fields()) { - auto FieldType = field->getType(); - if (FieldType->isFunctionPointerType()) { - auto PointeeType = FieldType->getPointeeType(); - auto Definition = GetFuncDefinition(PointeeType.getTypePtr()); - std::string my_funcname = std::string("my_") + field->getNameAsString(); - std::string funcname = field->getNameAsString(); - res += "\n#define GO(A) \\\n" - "static uintptr_t " + my_funcname + "_fct_##A = 0; \\\n" + - Definition.ret_str + " " + my_funcname + "_##A("; - int arg_size = Definition.arg_names.size(); - if (arg_size) { - for (int i = 0; i < arg_size - 1; i++) { - res += Definition.arg_types_str[i] + " " + Definition.arg_names[i] + ", "; - } - res += Definition.arg_types_str[arg_size - 1] + " " + Definition.arg_names[arg_size - 1]; - } - res += ") { \\\n" - " return RunFunction(my_context, " + my_funcname + "_fct_##A" + ", " + std::to_string(arg_size); - for (int i = 0; i < arg_size; i++) { - res += ", " + Definition.arg_names[i]; - } - res += "); \\\n" - "}\n" - "SUPER()\n" - "#undef GO\n" - "static void* find" + funcname + "Fct(void* fct) {\n" - " if(!fct) return fct;\n" - " if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct);\n" - " #define GO(A) if(" + my_funcname + "_fct_##A == (uintptr_t)fct) return " + my_funcname + "_##A;}\n" - " SUPER()\n" - " #undef GO\n" - " #define GO(A) if(" + my_funcname + "_fct_##A == 0) {" + my_funcname + "_fct_##A = (uintptr_t)fct;" + "return " + my_funcname + "_##A;}\n" - " SUPER()\n" - " #undef GO\n" - " return NULL;\n" - "}\n"; - } - } - return res; -} - -std::string WrapperGenerator::GenDefine(ASTContext *Ctx, - const FuncInfo &Func) { - std::string res; - auto Definition = GetFuncDefinition(Func.decl); - std::string Sig = GetFuncSig(Ctx, Func.type); - res += "\nEXPORT " + Definition.ret_str + "my_" + Func.func_name + "("; - if (Sig.find('E')) { - res += "void *emu, "; - } - int arg_size = Definition.arg_names.size(); - if (arg_size) { - for (int i = 0; i < arg_size - 1; i++) { - if (Definition.arg_types[i]->isPointerType()) { - auto PointeeType = Definition.arg_types[i]->getPointeeType(); - if (records.count(PointeeType.getTypePtr())) { - res += - Definition.arg_types[i]->getCanonicalTypeInternal().getAsString(); - } else { - res += Definition.arg_types_str[i]; - } - } else { - res += Definition.arg_types_str[i]; - } - res += " " + Definition.arg_names[i] + ", "; - } - if (Definition.arg_types[arg_size - 1]->isPointerType()) { - auto PointeeType = Definition.arg_types[arg_size - 1]->getPointeeType(); - if (records.count(PointeeType.getTypePtr())) { - res += Definition.arg_types[arg_size - 1] - ->getCanonicalTypeInternal() - .getAsString(); - } else { - res += Definition.arg_types_str[arg_size - 1]; - } - } else { - res += Definition.arg_types_str[arg_size - 1]; - } - res += " "; - res += Definition.arg_names[arg_size - 1]; - } - res += ") {\n"; - if (Func.has_special_arg) { - res += " // WARN: This function's arg has a structure ptr which is " - "special, may need to wrap it for the host\n"; - - } else if (Func.has_special_ret) { - res += " // WARN: This function's ret is a structure ptr which is " - "special, may need to wrap it for the guest\n"; - } - if (Func.has_callback_arg) { - res += " " + my_lib_type + " *my = " + "(" + my_lib_type + "*)" + - my_lib + "->priv.w.p2;\n" - " my->" + Func.func_name + "("; - if (arg_size) { - for (int i = 0; i < arg_size - 1; i++) { - if (Func.callback_args[i]) { - if (!Func.callback_args[i]->isTypedefNameType()) { - res += - "find" + Func.func_name + "_arg" + std::to_string(i) + "Fct"; - } else { - res += "find" + - Func.callback_args[i] - ->getAs() - ->getDecl() - ->getNameAsString() + - "Fct"; - } - res += "(" + Definition.arg_names[i] + ")"; - } else { - res += Definition.arg_names[i]; - } - res += ", "; - } - if (Func.callback_args[arg_size - 1]) { - if (!Func.callback_args[arg_size - 1]->isTypedefNameType()) { - res += "find" + Func.func_name + "_arg" + - std::to_string(arg_size - 1) + "Fct"; - } else { - res += "find" + - Func.callback_args[arg_size - 1] - ->getAs() - ->getDecl() - ->getNameAsString() + - "Fct"; - } - res += "(" + Definition.arg_names[arg_size - 1] + ")"; - } else { - res += Definition.arg_names[arg_size - 1]; - } - res += ")\n"; - } - } else { - res += " " + my_lib_type + " *my = (" + my_lib_type + "*)" + my_lib + "->priv.w.p2;\n" - " my->" + Func.func_name + "("; - if (arg_size) { - for (int i = 0; i < arg_size - 1; i++) { - res += Definition.arg_names[i] + ", "; - } - res += Definition.arg_names[arg_size - 1]; - } - res += ");\n"; - } - - res += "}\n"; - return res; -} - -std::string WrapperGenerator::GenDeclareDiffTriple( - ASTContext *Ctx, const RecordInfo &Record, - const std::string &GuestTriple, const std::string &HostTriple) { - (void)Ctx; - std::string GuestRecord; - std::string HostRecord; - std::string PreDecl; - std::vector GuestFieldOff; - std::vector HostFieldOff; - GuestRecord += "typedef "; - HostRecord += "typedef "; - GuestRecord += - (Record.is_union ? "union " : "struct ") + Record.type_name + " {\n"; - HostRecord += (Record.is_union ? "union " : "struct ") + - std::string("host_") + Record.type_name + " {\n"; - auto OffDiff = GetRecordFieldOffDiff(Record.type, GuestTriple, HostTriple, - GuestFieldOff, HostFieldOff); - uint64_t GuestRecordSize = GetRecordSize(Record.type, GuestTriple); - uint64_t HostRecordSize = GetRecordSize(Record.type, HostTriple); - uint64_t SizeDiff = GuestRecordSize - HostRecordSize; - int FieldIndex = 0; - std::set AlignDiffFields; - for (const auto &Field : Record.decl->fields()) { - if (OffDiff[FieldIndex] == 0) { - FieldIndex++; - continue; - } - std::string Name = Field->getNameAsString(); - if (OffDiff[FieldIndex] != SizeDiff) { - auto Diff = OffDiff[FieldIndex]; - AlignDiffFields.insert(Field); - for (size_t i = FieldIndex; i < OffDiff.size(); i++) { - if (OffDiff[i] == Diff) { - OffDiff[i] = 0; - } else { - break; - } - } - } else { - AlignDiffFields.insert(Field); - break; - } - FieldIndex++; - } - for (const auto &Field : Record.decl->fields()) { - auto Type = Field->getType(); - std::string Name = Field->getNameAsString(); - GuestRecord += " "; - HostRecord += " "; - if (AlignDiffFields.find(Field) != AlignDiffFields.end()) { - auto typeSize = GetTypeSize(StripTypedef(Field->getType()), guest_triple); - switch (typeSize) { - // FIXME: should test more case in different triple - case 4: GuestRecord += "int " + Name ; break; - case 8: GuestRecord += "int " + Name + "[2]"; break; - default: - std::cout << "Err: unknown type size " << typeSize << std::endl; - break; - } - HostRecord += TypeStringify(StripTypedef(Type), Field, nullptr, PreDecl); - } else if (Type->isFunctionPointerType()) { - auto FuncType = StripTypedef(Type->getPointeeType()); - if (callbacks.count(FuncType)) { - std::string FieldStr = callbacks[FuncType]; - FieldStr += " "; - FieldStr += Name; - GuestRecord += FieldStr; - HostRecord += FieldStr; - } else { - std::cout << "Err: FuncPtr(" << Record.type_name << "." << Name << ") is not supported" << std::endl; - } - } else if (Type->isPointerType()) { - auto PointeeType = Type->getPointeeType(); - if (PointeeType->isRecordType()) { - if (records.count(PointeeType.getTypePtr())) { - std::string FieldStr = records[PointeeType.getTypePtr()].type_name; - FieldStr += "_ptr " + Name; - GuestRecord += FieldStr; - HostRecord += "host_" + FieldStr; - } else { - GuestRecord += "void *" + Name; - HostRecord += "void *" + Name; - } - } else { - GuestRecord += "void *" + Name; - HostRecord += "void *" + Name; - } - } else if (Type->isRecordType()) { - if (records.count(Type.getTypePtr())) { - std::string FieldStr = records[Type.getTypePtr()].type_name; - FieldStr += " " + Name; - GuestRecord += FieldStr; - HostRecord += "host_" + FieldStr; - } else { - GuestRecord += TypeStringify(StripTypedef(Type), Field, nullptr, PreDecl); - HostRecord += TypeStringify(StripTypedef(Type), Field, nullptr, PreDecl); - } - } else { - HostRecord += TypeStringify(StripTypedef(Type), Field, nullptr, PreDecl); - GuestRecord += TypeStringify(StripTypedef(Type), Field, nullptr, PreDecl); - } - GuestRecord += ";\n"; - HostRecord += ";\n"; - } - GuestRecord += "} " + Record.type_name + ", *" + Record.type_name + "_ptr;\n"; - HostRecord += "} host_" + Record.type_name + ", *host_" + Record.type_name + "_ptr;\n"; - return GuestRecord + HostRecord; -} - -// Gen record convert function between host and guest -std::string WrapperGenerator::GenRecordConvert(const RecordInfo &Record) { - std::string res; - if (Record.guest_size != Record.host_size) { - auto RecordDecl = Record.decl; - std::vector GuestFieldOff; - std::vector HostFieldOff; - auto OffDiff = GetRecordFieldOffDiff(Record.type, guest_triple, host_triple, - GuestFieldOff, HostFieldOff); - int FieldIndex = 0; - std::vector AlignDiffFields; - uint64_t SizeDiff = Record.guest_size - Record.host_size; - for (const auto &Field : RecordDecl->fields()) { - if (OffDiff[FieldIndex] == 0) { - FieldIndex++; - continue; - } - if (OffDiff[FieldIndex] != SizeDiff) { - auto Diff = OffDiff[FieldIndex]; - AlignDiffFields.push_back(Field); - for (size_t i = FieldIndex; i < OffDiff.size(); i++) { - if (OffDiff[i] == Diff) { - OffDiff[i] = 0; - } else { - break; - } - } - } else { - AlignDiffFields.push_back(Field); - break; - } - FieldIndex++; - } - if (!AlignDiffFields.size()) { - return res; - } - res += "void g2h_" + Record.type_name + "(" + "struct host_" + Record.type_name + " *d, struct " + Record.type_name + " *s) {\n"; - std::string body = " memcpy(d, s, offsetof(struct " + Record.type_name + - ", " + AlignDiffFields[0]->getNameAsString() + "));\n"; - std::string offstr = "offsetof(struct " + Record.type_name + ", " + - AlignDiffFields[0]->getNameAsString() + ")"; - for (size_t i = 0; i < AlignDiffFields.size() - 1; i++) { - body += " memcpy(d->" + AlignDiffFields[i]->getNameAsString() + ", " + - "s->" + AlignDiffFields[i]->getNameAsString() + ", " + - "offsetof(struct " + Record.type_name + ", " + - AlignDiffFields[i + 1]->getNameAsString() + ") - " + offstr + - ");\n"; - offstr = "offsetof(struct " + Record.type_name + ", " + - AlignDiffFields[i + 1]->getNameAsString() + ")"; - } - body += " memcpy(d->" + - AlignDiffFields[AlignDiffFields.size() - 1]->getNameAsString() + - ", " + "s->" + - AlignDiffFields[AlignDiffFields.size() - 1]->getNameAsString() + - ", " + std::to_string(GetRecordSize(Record.type, guest_triple)) + - " - " + offstr + ");\n"; - res += body + "}\n"; - - res += "void h2g_" + Record.type_name + "(struct " + Record.type_name + " *d, " + "struct host_" + Record.type_name + " *s) {\n"; - res += body; - res += "}\n"; - } - return res; -} - -void WrapperGenerator::ParseRecordRecursive( - ASTContext *Ctx, const Type *type, bool &Special, - std::set &Visited) { - auto recordType = type->getAs(); - auto RecordDecl = recordType->getDecl(); - for (const auto &field : RecordDecl->fields()) { - auto FieldType = field->getType(); - if (FieldType->isFunctionPointerType()) { - auto Record = &records[type]; - Record->callback_fields.push_back(field->getType().getTypePtr()); - // Record->type_name = - Special = true; - } else if (FieldType->isPointerType() && - FieldType->getPointeeType()->isRecordType()) { - auto FieldRecordType = StripTypedef(FieldType->getPointeeType()); - if (Visited.find(FieldRecordType) != Visited.end()) - continue; - Visited.insert(FieldRecordType); - bool _Special = false; - ParseRecordRecursive(Ctx, FieldRecordType, _Special, Visited); - if (_Special) - Special = true; - } else if (FieldType->isRecordType()) { - auto FieldRecordType = StripTypedef(FieldType); - if (Visited.find(FieldRecordType) != Visited.end()) - continue; - Visited.insert(FieldRecordType); - bool _Special = false; - ParseRecordRecursive(Ctx, FieldRecordType, _Special, Visited); - if (_Special) - Special = true; - } - } - uint64_t GuestSize = GetRecordSize(type, guest_triple); - uint64_t HostSize = GetRecordSize(type, host_triple); - - auto Record = &records[type]; - if (GuestSize != HostSize) { - Special = 1; - } - if (type->isUnionType()) { - Record->is_union = true; - } - if (!Record->decl) { - Record->type = type; - Record->decl = RecordDecl; - if (RecordDecl->getIdentifier()) - Record->type_name = RecordDecl->getIdentifier()->getName().str(); - } - Record->guest_size = GuestSize; - Record->host_size = HostSize; - if (Record->type_name.empty()) { - Record->is_special = false; - } else - Record->is_special = Special; -} - -// Type to String -std::string WrapperGenerator::TypeStringify(const Type *Type, - FieldDecl *FieldDecl, - ParmVarDecl *ParmDecl, - std::string& PreDecl, - std::string indent, - std::string Name) { - std::string res; - std::string name = FieldDecl - ? FieldDecl->getNameAsString() - : (ParmDecl ? ParmDecl->getNameAsString() : Name); - if (Type->isPointerType()) { - auto PointeeType = Type->getPointeeType(); - if (PointeeType->isBuiltinType()) { - res += - StripTypedef(PointeeType)->getCanonicalTypeInternal().getAsString(); - } else if (PointeeType->isRecordType()) { - if (records.find(StripTypedef(PointeeType)) != records.end() && - records[StripTypedef(PointeeType)].is_special) { - res += (PointeeType->isUnionType() ? "union " : "struct ") + records[StripTypedef(PointeeType)].type_name; - } else { - res += "void"; - } - } else { - res += "void"; - } - res += " *" + name; - } else if (Type->isEnumeralType()) { - res += "int " + name; - } else if (Type->isRecordType()) { - if (records.find(StripTypedef(Type->getCanonicalTypeInternal())) != - records.end() && - records[StripTypedef(Type->getCanonicalTypeInternal())].is_special) { - res += Type->isUnionType() ? "union " : "struct "; - res += records[StripTypedef(Type->getCanonicalTypeInternal())].type_name; - res += " "; - } else { - res += AnonRecordDecl(Type->getAs(), PreDecl, indent + " "); - } - res += name; - } else if (Type->isConstantArrayType()) { - auto ArrayType = - dyn_cast(Type->getAsArrayTypeUnsafe()); - int EleSize = ArrayType->getSize().getZExtValue(); - if (ArrayType->getElementType()->isPointerType()) { - res += "void *"; - } else if (ArrayType->getElementType()->isEnumeralType()) { - res += "int "; - } else if (ArrayType->getElementType()->isRecordType()) { - auto RecordType = ArrayType->getElementType()->getAs(); - auto RecordDecl = RecordType->getDecl(); - if (RecordDecl->isCompleteDefinition()) { - auto& Ctx = RecordDecl->getDeclContext()->getParentASTContext(); - PreDecl += "#include \""; - PreDecl += GetDeclHeaderFile(Ctx, RecordDecl); - PreDecl += "\""; - PreDecl += "\n"; - } - res += StripTypedef(ArrayType->getElementType()) - ->getCanonicalTypeInternal() - .getAsString(); - } else { - res += StripTypedef(ArrayType->getElementType()) - ->getCanonicalTypeInternal() - .getAsString(); - } - res += " "; - res += name; - res += "["; - res += std::to_string(EleSize); - res += "]"; - } else { - res += StripTypedef(Type->getCanonicalTypeInternal()) - ->getCanonicalTypeInternal() - .getAsString(); - res += " "; - res += name; - } - return indent + res; -} - -// Type to String, less detail -std::string WrapperGenerator::SimpleTypeStringify(const Type *Type, - FieldDecl *FieldDecl, - ParmVarDecl *ParmDecl, - std::string indent, - std::string Name) { - std::string res; - std::string name = FieldDecl - ? FieldDecl->getNameAsString() - : (ParmDecl ? ParmDecl->getNameAsString() : Name); - if (Type->isPointerType()) { - res += "void *" + name; - } else if (Type->isEnumeralType()) { - res += "int "; - res += name; - } else if (Type->isRecordType()) { - if (records.find(StripTypedef(Type->getCanonicalTypeInternal())) != - records.end()) { - res += Type->isUnionType() ? "union " : "struct "; - res += records[StripTypedef(Type->getCanonicalTypeInternal())].type_name; - res += " "; - } else { - res += SimpleAnonRecordDecl(Type->getAs(), indent); - } - res += name; - } else if (Type->isConstantArrayType()) { - auto ArrayType = - dyn_cast(Type->getAsArrayTypeUnsafe()); - int EleSize = ArrayType->getSize().getZExtValue(); - if (ArrayType->getElementType()->isPointerType()) { - res += "void *"; - } else { - res += StripTypedef(ArrayType->getElementType()) - ->getCanonicalTypeInternal() - .getAsString(); - } - res += " "; - res += name; - res += "["; - res += std::to_string(EleSize); - res += "]"; - } else { - res += StripTypedef(Type->getCanonicalTypeInternal()) - ->getCanonicalTypeInternal() - .getAsString(); - res += " "; - res += name; - } - return indent + res; -} - -std::string WrapperGenerator::AnonRecordDecl(const RecordType *Type, std::string& PreDecl, std::string indent) { - auto RecordDecl = Type->getDecl(); - std::string res; - res += Type->isUnionType() ? "union {\n" : "struct {\n"; - for (const auto &field : RecordDecl->fields()) { - auto FieldType = field->getType(); - res += TypeStringify(StripTypedef(FieldType), field, nullptr, PreDecl, indent + " "); - res += ";\n"; - } - res += indent + "} "; - return res; -} - -std::string -WrapperGenerator::SimpleAnonRecordDecl(const RecordType *Type, std::string indent) { - auto RecordDecl = Type->getDecl(); - std::string res; - res += Type->isUnionType() ? "union {\n" : "struct {\n"; - for (const auto &field : RecordDecl->fields()) { - auto FieldType = field->getType(); - res += SimpleTypeStringify(StripTypedef(FieldType), field, nullptr, indent + " "); - res += ";\n"; - } - res += indent + "} "; - return res; -} - -// Get func info from FunctionType -FuncDefinition WrapperGenerator::GetFuncDefinition(const Type *Type) { - FuncDefinition res; - std::string PreDecl; - auto ProtoType = Type->getAs(); - res.ret = StripTypedef(ProtoType->getReturnType()); - res.ret_str = - TypeStringify(StripTypedef(ProtoType->getReturnType()), nullptr, nullptr, PreDecl); - for (unsigned i = 0; i < ProtoType->getNumParams(); i++) { - auto ParamType = ProtoType->getParamType(i); - res.arg_types.push_back(StripTypedef(ParamType)); - res.arg_types_str.push_back( - TypeStringify(StripTypedef(ParamType), nullptr, nullptr, PreDecl)); - res.arg_names.push_back(std::string("a") + std::to_string(i)); - } - if (ProtoType->isVariadic()) { - res.is_variadaic = true; - } - res.arg_size = ProtoType->getNumParams(); - return res; -} - -// Get funcdecl info from FunctionDecl -FuncDefinition WrapperGenerator::GetFuncDefinition(FunctionDecl *Decl) { - FuncDefinition res; - std::string PreDecl; - auto RetType = Decl->getReturnType(); - res.ret = RetType.getTypePtr(); - res.ret_str = TypeStringify(StripTypedef(RetType), nullptr, nullptr, PreDecl); - for (unsigned i = 0; i < Decl->getNumParams(); i++) { - auto ParamDecl = Decl->getParamDecl(i); - auto ParamType = ParamDecl->getType(); - res.arg_types.push_back(ParamType.getTypePtr()); - res.arg_types_str.push_back( - TypeStringify(StripTypedef(ParamType), nullptr, nullptr, PreDecl)); - res.arg_names.push_back(ParamDecl->getNameAsString()); - } - if (Decl->isVariadic()) { - res.is_variadaic = true; - } - return res; -} - -// Get the offset diff between two different triple -std::vector WrapperGenerator::GetRecordFieldOffDiff( - const Type *Type, const std::string &GuestTriple, - const std::string &HostTriple, std::vector &GuestFieldOff, - std::vector &HostFieldOff) { - std::string PreDecl; - std::string Code = TypeStringify(Type, nullptr, nullptr, PreDecl, "", "dummy;"); - std::vector OffsetDiff; - GuestFieldOff = GetRecordFieldOff(Code, GuestTriple); - HostFieldOff = GetRecordFieldOff(Code, HostTriple); - if (GuestFieldOff.size() != HostFieldOff.size()) { - // Should not happen - std::cout << "Greater field offsets in guest than in host" << std::endl; - return OffsetDiff; - } - for (size_t i = 0; i < GuestFieldOff.size(); i++) { - OffsetDiff.push_back(GuestFieldOff[i] - HostFieldOff[i]); - } - return OffsetDiff; -} - -// Get the size under a specific triple -uint64_t WrapperGenerator::GetRecordSize(const Type *Type, - const std::string &Triple) { - std::string PreDecl; - std::string Code = TypeStringify(Type, nullptr, nullptr, PreDecl, "", "dummy;"); - auto Size = ::GetRecordSize(PreDecl + Code, Triple); - return Size; -} - -// Get the align under a specific triple -CharUnits::QuantityType WrapperGenerator::GetRecordAlign(const Type *Type, - const std::string &Triple) { - std::string PreDecl{}; - std::string Code = TypeStringify(Type, nullptr, nullptr, PreDecl, "", "dummy;"); - return ::GetRecordAlign(PreDecl + Code, Triple); -} - -// Generate the func sig by type, used for export func -std::string WrapperGenerator::GetFuncSig(ASTContext *CTX, - const FuncInfo &Func) { - std::string sig; - auto Decl = Func.decl; - auto Type = Decl->getType().getTypePtr(); - auto ProtoType = Type->getAs(); - auto RetType = ProtoType->getReturnType(); - - sig += TypeToSig(CTX, RetType.getTypePtr()); - sig += "F"; - if (Func.has_special_arg || Func.has_special_ret || Func.has_callback_arg) { - sig += "E"; - } - if (ProtoType->getNumParams()) { - for (unsigned i = 0; i < ProtoType->getNumParams(); i++) { - sig += TypeToSig(CTX, ProtoType->getParamType(i).getTypePtr()); - } - } else { - sig += "v"; - } - if (Decl->isVariadic()) { - sig += "VV"; - } - return sig; -} - -// Generate the func sig by type, used for callbacks -std::string WrapperGenerator::GetFuncSig(ASTContext *CTX, - const Type *Type) { - std::string sig; - auto ProtoType = Type->getAs(); - auto RetType = ProtoType->getReturnType(); - sig += TypeToSig(CTX, RetType.getTypePtr()); - sig += "F"; - if (ProtoType->getNumParams()) { - for (unsigned i = 0; i < ProtoType->getNumParams(); i++) { - sig += TypeToSig(CTX, ProtoType->getParamType(i).getTypePtr()); - } - } else { - sig += "v"; - } - return sig; -} diff --git a/wrapperhelper/gen.h b/wrapperhelper/gen.h deleted file mode 100644 index 55ecd202c2484de9f96b5870f56d16dec2271bb3..0000000000000000000000000000000000000000 --- a/wrapperhelper/gen.h +++ /dev/null @@ -1,144 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include -#include - -struct FuncDefinition { - std::vector arg_types; - std::vector arg_types_str; - std::vector arg_names; - const clang::Type* ret; - std::string ret_str; - int arg_size; - bool is_variadaic; -}; - -struct FuncInfo { - const clang::Type* type; - clang::FunctionDecl* decl; - std::string func_name; - bool is_weak; - bool is_variadaic; - bool has_special_arg; - bool has_special_ret; - bool has_callback_arg; - std::vector callback_args; -}; - -struct RecordInfo { - const clang::Type* type; - clang::RecordDecl* decl; - std::string type_name; - bool is_union; - bool is_special; - - uint64_t guest_size; - uint64_t host_size; - std::vector callback_fields; -}; - -struct ObjectInfo { - const clang::Type* type; - std::string object_name; -}; - -struct WrapperGenerator { - - void Init(const std::string& libname, const std::string& host_triple, const std::string& guest_triple) { - this->host_triple = host_triple; - this->guest_triple = guest_triple; - this->libname = libname; - this->my_lib_type = libname + "_my_t"; - this->my_lib = "my_lib"; - } - - void Prepare(clang::ASTContext* Ctx); - - std::string GenCallbackTypeDefs(clang::ASTContext* Ctx); - - std::string GenFuncDeclare(clang::ASTContext* Ctx) { - std::string res{}; - for (const auto& func : funcs) { - res += GenDeclare(Ctx, func.second); - } - return res; - } - std::string GenRecordDeclare(clang::ASTContext* Ctx) { - std::string res{}; - for (const auto& st : records) { - if (st.second.host_size == st.second.guest_size) - res += GenDeclare(Ctx, st.second); - else { - res += GenDeclareDiffTriple(Ctx, st.second, guest_triple, host_triple); - } - } - return res; - } - - std::string GenFuncDefine(clang::ASTContext* Ctx) { - std::string res{}; - for (const auto& func : funcs) { - res += GenDefine(Ctx, func.second); - } - return res; - } - - std::string GenCallbackWrap(clang::ASTContext* Ctx) { - std::string res{}; - for (const auto& func : funcs) { - res += GenCallbackWrap(Ctx, func.second); - } - for (const auto& st : records) { - res += GenCallbackWrap(Ctx, st.second); - } - return res; - } - - std::string GenRecordConvert(clang::ASTContext* Ctx) { - (void)Ctx; - std::string res; - for (const auto& record : records) { - if (record.second.host_size != record.second.guest_size) { - res += GenRecordConvert(record.second); - } - } - return res; - } - - std::map funcs; - std::map records; - std::map objects; - - std::map callbacks; - - std::string host_triple; - std::string guest_triple; - std::string libname; - std::string my_lib_type; - std::string my_lib; -private: - std::string GenRecordConvert(const RecordInfo& Record); - std::string GenDeclare(clang::ASTContext* Ctx, const FuncInfo& Func); - std::string GenDefine(clang::ASTContext* Ctx, const FuncInfo& Func); - std::string GenCallbackWrap(clang::ASTContext* Ctx, const FuncInfo& Func); - std::string GenDeclareDiffTriple(clang::ASTContext* Ctx, const RecordInfo& Record, const std::string& GuestTriple, const std::string& HostTriple); - std::string GenDeclare(clang::ASTContext* Ctx, const RecordInfo& Struct); - std::string GenCallbackWrap(clang::ASTContext* Ctx, const RecordInfo& Struct); - - void ParseRecordRecursive(clang::ASTContext* Ctx, const clang::Type* Type, bool& Special, std::set& Visited); - std::string TypeStringify(const clang::Type* Type, clang::FieldDecl* FieldDecl, clang::ParmVarDecl* ParmDecl, std::string& PreDecl, std::string indent = "", std::string Name = ""); - std::string SimpleTypeStringify(const clang::Type* Type, clang::FieldDecl* FieldDecl, clang::ParmVarDecl* ParmDecl, std::string indent = "", std::string Name = ""); - std::string AnonRecordDecl(const clang::RecordType* Type, std::string& PreDecl, std::string indent); - std::string SimpleAnonRecordDecl(const clang::RecordType* Type, std::string indent); - FuncDefinition GetFuncDefinition(const clang::Type* Type); - FuncDefinition GetFuncDefinition(clang::FunctionDecl* Decl); - uint64_t GetRecordSize(const clang::Type* Type, const std::string& Triple); - std::vector GetRecordFieldOffDiff(const clang::Type* Type, const std::string& GuestTriple, const std::string& HostTriple, std::vector& GuestFieldOff, std::vector& HostFieldOff); - clang::CharUnits::QuantityType GetRecordAlign(const clang::Type* Type, const std::string& Triple); - - std::string GetFuncSig(clang::ASTContext* CTX, const FuncInfo& Decl); - std::string GetFuncSig(clang::ASTContext* CTX, const clang::Type* Type); -}; diff --git a/wrapperhelper/include-override/aarch64/bits/pthreadtypes-arch.h b/wrapperhelper/include-override/aarch64/bits/pthreadtypes-arch.h new file mode 100644 index 0000000000000000000000000000000000000000..5fe9577f80230f7ae1494e74f9bd12beaffa31aa --- /dev/null +++ b/wrapperhelper/include-override/aarch64/bits/pthreadtypes-arch.h @@ -0,0 +1,47 @@ +/* Copyright (C) 2002-2024 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_PTHREADTYPES_ARCH_H +#define _BITS_PTHREADTYPES_ARCH_H 1 + +#include + +#ifdef __ILP32__ +# define __SIZEOF_PTHREAD_ATTR_T 32 +# define __SIZEOF_PTHREAD_MUTEX_T 32 +# define __SIZEOF_PTHREAD_MUTEXATTR_T 4 +# define __SIZEOF_PTHREAD_CONDATTR_T 4 +# define __SIZEOF_PTHREAD_RWLOCK_T 48 +# define __SIZEOF_PTHREAD_BARRIER_T 20 +# define __SIZEOF_PTHREAD_BARRIERATTR_T 4 +#else +# define __SIZEOF_PTHREAD_ATTR_T 64 +# define __SIZEOF_PTHREAD_MUTEX_T 48 +# define __SIZEOF_PTHREAD_MUTEXATTR_T 8 +# define __SIZEOF_PTHREAD_CONDATTR_T 8 +# define __SIZEOF_PTHREAD_RWLOCK_T 56 +# define __SIZEOF_PTHREAD_BARRIER_T 32 +# define __SIZEOF_PTHREAD_BARRIERATTR_T 8 +#endif +#define __SIZEOF_PTHREAD_COND_T 48 +#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 + +#define __LOCK_ALIGNMENT +#define __ONCE_ALIGNMENT + +#endif /* bits/pthreadtypes.h */ diff --git a/wrapperhelper/include-override/aarch64/stdc-predef.h b/wrapperhelper/include-override/aarch64/stdc-predef.h new file mode 100644 index 0000000000000000000000000000000000000000..df1d78b56bb0f1c0b40d01751017ee80422912c7 --- /dev/null +++ b/wrapperhelper/include-override/aarch64/stdc-predef.h @@ -0,0 +1,425 @@ +// C standard +#define __STDC__ 1 +#define __STDC_HOSTED__ 1 +#define __STDC_UTF_16__ 1 +#define __STDC_UTF_32__ 1 +#define __STDC_VERSION__ 201710L +// Generic aarch64 infos +#define __ELF__ 1 +#define __NO_INLINE__ 1 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __ORDER_PDP_ENDIAN__ 3412 +#define __PIC__ 2 +#define __pic__ 2 +#define __PIE__ 2 +#define __pie__ 2 +#define __USER_LABEL_PREFIX__ +#define __gnu_linux__ 1 +#define __linux__ 1 +#define __linux 1 +#define linux 1 +#define __unix__ 1 +#define __unix 1 +#define unix 1 +// GCC +//#define __GCC_ASM_FLAG_OUTPUTS__ 1 +//#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +//#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +//#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +//#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +//#define __GCC_ATOMIC_INT_LOCK_FREE 2 +//#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +//#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +//#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +//#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +//#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +//#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +//#define __GCC_CONSTRUCTIVE_SIZE 64 +//#define __GCC_DESTRUCTIVE_SIZE 256 +//#define __GCC_HAVE_DWARF2_CFI_ASM 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1 +//#define __GCC_IEC_559 2 +//#define __GCC_IEC_559_COMPLEX 2 +//#define __GNUC__ 14 +//#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +//#define __GNUC_MINOR__ 2 +//#define __GNUC_PATCHLEVEL__ 0 +//#define __GNUC_STDC_INLINE__ 1 +//#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +//#define __GXX_ABI_VERSION 1019 +//#define __PRAGMA_REDEFINE_EXTNAME 1 +//#define __VERSION__ "14.2.0" +// Specific aarch64 architecture +#define __FINITE_MATH_ONLY__ 0 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __LP64__ 1 +#define _LP64 1 +#define __REGISTER_PREFIX__ +#define __AARCH64_CMODEL_SMALL__ 1 +#define __AARCH64EL__ 1 +#define __ARM_64BIT_STATE 1 +#define __ARM_ALIGN_MAX_PWR 28 +#define __ARM_ALIGN_MAX_STACK_PWR 16 +#define __ARM_ARCH 8 +#define __ARM_ARCH_8A 1 +#define __ARM_ARCH_ISA_A64 1 +#define __ARM_ARCH_PROFILE 65 +#define __ARM_FEATURE_CLZ 1 +#define __ARM_FEATURE_FMA 1 +#define __ARM_FEATURE_IDIV 1 +#define __ARM_FEATURE_NUMERIC_MAXMIN 1 +#define __ARM_FEATURE_UNALIGNED 1 +#define __ARM_FP 14 +#define __ARM_FP16_ARGS 1 +#define __ARM_FP16_FORMAT_IEEE 1 +#define __ARM_NEON 1 +#define __ARM_NEON_SVE_BRIDGE 1 +#define __ARM_PCS_AAPCS64 1 +#define __ARM_SIZEOF_MINIMAL_ENUM 4 +#define __ARM_SIZEOF_WCHAR_T 4 +#define __ARM_STATE_ZA 1 +#define __ARM_STATE_ZT0 1 +#define __arm_in(...) [[__extension__ arm::in(__VA_ARGS__)]] +#define __arm_inout(...) [[__extension__ arm::inout(__VA_ARGS__)]] +#define __arm_locally_streaming [[__extension__ arm::locally_streaming]] +#define __arm_new(...) [[__extension__ arm::new(__VA_ARGS__)]] +#define __arm_out(...) [[__extension__ arm::out(__VA_ARGS__)]] +#define __arm_preserves(...) [[__extension__ arm::preserves(__VA_ARGS__)]] +#define __arm_streaming_compatible [[__extension__ arm::streaming_compatible]] +#define __arm_streaming [[__extension__ arm::streaming]] +#define __aarch64__ 1 +// Atomic +#define __ATOMIC_RELAXED 0 +#define __ATOMIC_CONSUME 1 +#define __ATOMIC_ACQUIRE 2 +#define __ATOMIC_RELEASE 3 +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_SEQ_CST 5 +// Metainfo on types +#define __BIGGEST_ALIGNMENT__ 16 +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __CHAR_BIT__ 8 +#define __CHAR_UNSIGNED__ 1 +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __SIZEOF_SHORT__ 2 +#define __SIZEOF_WCHAR_T__ 4 +#define __SIZEOF_INT__ 4 +#define __SIZEOF_WINT_T__ 4 +#define __SIZEOF_LONG__ 8 +#define __SIZEOF_LONG_LONG__ 8 +#define __SIZEOF_POINTER__ 8 +#define __SIZEOF_PTRDIFF_T__ 8 +#define __SIZEOF_SIZE_T__ 8 +#define __SIZEOF_INT128__ 16 +#define __SIZEOF_FLOAT__ 4 +#define __SIZEOF_DOUBLE__ 8 +#define __SIZEOF_LONG_DOUBLE__ 16 +// Integers +//#define __BITINT_MAXWIDTH__ 65535 +//#define __CHAR16_TYPE__ short unsigned int +//#define __CHAR32_TYPE__ unsigned int +//#define __INT8_C(c) c +#define __INT8_MAX__ 0x7f +//#define __INT8_TYPE__ signed char +//#define __INT16_C(c) c +#define __INT16_MAX__ 0x7fff +//#define __INT16_TYPE__ short int +//#define __INT32_C(c) c +#define __INT32_MAX__ 0x7fffffff +//#define __INT32_TYPE__ int +//#define __INT64_C(c) c ## L +#define __INT64_MAX__ 0x7fffffffffffffffL +//#define __INT64_TYPE__ long int +#define __INT_FAST8_MAX__ 0x7f +//#define __INT_FAST8_TYPE__ signed char +#define __INT_FAST8_WIDTH__ 8 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +//#define __INT_FAST16_TYPE__ long int +#define __INT_FAST16_WIDTH__ 64 +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +//#define __INT_FAST32_TYPE__ long int +#define __INT_FAST32_WIDTH__ 64 +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +//#define __INT_FAST64_TYPE__ long int +#define __INT_FAST64_WIDTH__ 64 +#define __INT_LEAST8_MAX__ 0x7f +//#define __INT_LEAST8_TYPE__ signed char +#define __INT_LEAST8_WIDTH__ 8 +#define __INT_LEAST16_MAX__ 0x7fff +//#define __INT_LEAST16_TYPE__ short int +#define __INT_LEAST16_WIDTH__ 16 +#define __INT_LEAST32_MAX__ 0x7fffffff +//#define __INT_LEAST32_TYPE__ int +#define __INT_LEAST32_WIDTH__ 32 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +//#define __INT_LEAST64_TYPE__ long int +#define __INT_LEAST64_WIDTH__ 64 +#define __INT_MAX__ 0x7fffffff +#define __INT_WIDTH__ 32 +#define __INTMAX_C(c) c ## L +#define __INTMAX_MAX__ 0x7fffffffffffffffL +//#define __INTMAX_TYPE__ long int +#define __INTMAX_WIDTH__ 64 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +//#define __INTPTR_TYPE__ long int +#define __INTPTR_WIDTH__ 64 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __LONG_LONG_WIDTH__ 64 +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __LONG_WIDTH__ 64 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +//#define __PTRDIFF_TYPE__ long int +#define __PTRDIFF_WIDTH__ 64 +#define __SCHAR_MAX__ 0x7f +#define __SCHAR_WIDTH__ 8 +#define __SHRT_MAX__ 0x7fff +#define __SHRT_WIDTH__ 16 +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +//#define __SIG_ATOMIC_TYPE__ int +#define __SIG_ATOMIC_WIDTH__ 32 +#define __SIZE_MAX__ 0xffffffffffffffffUL +//#define __SIZE_TYPE__ long unsigned int +#define __SIZE_WIDTH__ 64 +#define __UINT8_C(c) c +#define __UINT8_MAX__ 0xff +//#define __UINT8_TYPE__ unsigned char +#define __UINT16_C(c) c +#define __UINT16_MAX__ 0xffff +//#define __UINT16_TYPE__ short unsigned int +#define __UINT32_C(c) c ## U +#define __UINT32_MAX__ 0xffffffffU +//#define __UINT32_TYPE__ unsigned int +#define __UINT64_C(c) c ## UL +#define __UINT64_MAX__ 0xffffffffffffffffUL +//#define __UINT64_TYPE__ long unsigned int +#define __UINT_FAST8_MAX__ 0xff +//#define __UINT_FAST8_TYPE__ unsigned char +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +//#define __UINT_FAST16_TYPE__ long unsigned int +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +//#define __UINT_FAST32_TYPE__ long unsigned int +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +//#define __UINT_FAST64_TYPE__ long unsigned int +#define __UINT_LEAST8_MAX__ 0xff +//#define __UINT_LEAST8_TYPE__ unsigned char +#define __UINT_LEAST16_MAX__ 0xffff +//#define __UINT_LEAST16_TYPE__ short unsigned int +#define __UINT_LEAST32_MAX__ 0xffffffffU +//#define __UINT_LEAST32_TYPE__ unsigned int +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +//#define __UINT_LEAST64_TYPE__ long unsigned int +#define __UINTMAX_C(c) c ## UL +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +//#define __UINTMAX_TYPE__ long unsigned int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +//#define __UINTPTR_TYPE__ long unsigned int +#define __WCHAR_MAX__ 0xffffffffU +#define __WCHAR_MIN__ 0U +//#define __WCHAR_TYPE__ unsigned int +#define __WCHAR_WIDTH__ 32 +#define __WINT_MAX__ 0xffffffffU +#define __WINT_MIN__ 0U +//#define __WINT_TYPE__ unsigned int +#define __WINT_WIDTH__ 32 +// Floats +//#define __BFLT16_DECIMAL_DIG__ 4 +//#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +//#define __BFLT16_DIG__ 2 +//#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +//#define __BFLT16_HAS_DENORM__ 1 +//#define __BFLT16_HAS_INFINITY__ 1 +//#define __BFLT16_HAS_QUIET_NAN__ 1 +//#define __BFLT16_IS_IEC_60559__ 0 +//#define __BFLT16_MANT_DIG__ 8 +//#define __BFLT16_MAX_10_EXP__ 38 +//#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +//#define __BFLT16_MAX_EXP__ 128 +//#define __BFLT16_MIN_10_EXP__ (-37) +//#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +//#define __BFLT16_MIN_EXP__ (-125) +//#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __DBL_DECIMAL_DIG__ 17 +#define __DBL_DENORM_MIN__ ((double)4.94065645841246544176568792868221372e-324L) +#define __DBL_DIG__ 15 +#define __DBL_EPSILON__ ((double)2.22044604925031308084726333618164062e-16L) +#define __DBL_HAS_DENORM__ 1 +#define __DBL_HAS_INFINITY__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __DBL_IS_IEC_60559__ 1 +#define __DBL_MANT_DIG__ 53 +#define __DBL_MAX_10_EXP__ 308 +#define __DBL_MAX__ ((double)1.79769313486231570814527423731704357e+308L) +#define __DBL_MAX_EXP__ 1024 +#define __DBL_MIN_10_EXP__ (-307) +#define __DBL_MIN__ ((double)2.22507385850720138309023271733240406e-308L) +#define __DBL_MIN_EXP__ (-1021) +#define __DBL_NORM_MAX__ ((double)1.79769313486231570814527423731704357e+308L) +//#define __DEC32_EPSILON__ 1E-6DF +//#define __DEC32_MANT_DIG__ 7 +//#define __DEC32_MAX__ 9.999999E96DF +//#define __DEC32_MAX_EXP__ 97 +//#define __DEC32_MIN__ 1E-95DF +//#define __DEC32_MIN_EXP__ (-94) +//#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +//#define __DEC64_EPSILON__ 1E-15DD +//#define __DEC64_MANT_DIG__ 16 +//#define __DEC64_MAX__ 9.999999999999999E384DD +//#define __DEC64_MAX_EXP__ 385 +//#define __DEC64_MIN__ 1E-383DD +//#define __DEC64_MIN_EXP__ (-382) +//#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +//#define __DEC128_EPSILON__ 1E-33DL +//#define __DEC128_MANT_DIG__ 34 +//#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +//#define __DEC128_MAX_EXP__ 6145 +//#define __DEC128_MIN__ 1E-6143DL +//#define __DEC128_MIN_EXP__ (-6142) +//#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +//#define __DEC_EVAL_METHOD__ 2 +//#define __DECIMAL_BID_FORMAT__ 1 +//#define __DECIMAL_DIG__ 36 +//#define __FLT16_DECIMAL_DIG__ 5 +//#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +//#define __FLT16_DIG__ 3 +//#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +//#define __FLT16_HAS_DENORM__ 1 +//#define __FLT16_HAS_INFINITY__ 1 +//#define __FLT16_HAS_QUIET_NAN__ 1 +//#define __FLT16_IS_IEC_60559__ 1 +//#define __FLT16_MANT_DIG__ 11 +//#define __FLT16_MAX_10_EXP__ 4 +//#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +//#define __FLT16_MAX_EXP__ 16 +//#define __FLT16_MIN_10_EXP__ (-4) +//#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +//#define __FLT16_MIN_EXP__ (-13) +//#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +//#define __FLT32_DECIMAL_DIG__ 9 +//#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +//#define __FLT32_DIG__ 6 +//#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +//#define __FLT32_HAS_DENORM__ 1 +//#define __FLT32_HAS_INFINITY__ 1 +//#define __FLT32_HAS_QUIET_NAN__ 1 +//#define __FLT32_IS_IEC_60559__ 1 +//#define __FLT32_MANT_DIG__ 24 +//#define __FLT32_MAX_10_EXP__ 38 +//#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +//#define __FLT32_MAX_EXP__ 128 +//#define __FLT32_MIN_10_EXP__ (-37) +//#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +//#define __FLT32_MIN_EXP__ (-125) +//#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +//#define __FLT32X_DECIMAL_DIG__ 17 +//#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +//#define __FLT32X_DIG__ 15 +//#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +//#define __FLT32X_HAS_DENORM__ 1 +//#define __FLT32X_HAS_INFINITY__ 1 +//#define __FLT32X_HAS_QUIET_NAN__ 1 +//#define __FLT32X_IS_IEC_60559__ 1 +//#define __FLT32X_MANT_DIG__ 53 +//#define __FLT32X_MAX_10_EXP__ 308 +//#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +//#define __FLT32X_MAX_EXP__ 1024 +//#define __FLT32X_MIN_10_EXP__ (-307) +//#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +//#define __FLT32X_MIN_EXP__ (-1021) +//#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +//#define __FLT64_DECIMAL_DIG__ 17 +//#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +//#define __FLT64_DIG__ 15 +//#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +//#define __FLT64_HAS_DENORM__ 1 +//#define __FLT64_HAS_INFINITY__ 1 +//#define __FLT64_HAS_QUIET_NAN__ 1 +//#define __FLT64_IS_IEC_60559__ 1 +//#define __FLT64_MANT_DIG__ 53 +//#define __FLT64_MAX_10_EXP__ 308 +//#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +//#define __FLT64_MAX_EXP__ 1024 +//#define __FLT64_MIN_10_EXP__ (-307) +//#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +//#define __FLT64_MIN_EXP__ (-1021) +//#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +//#define __FLT64X_DECIMAL_DIG__ 36 +//#define __FLT64X_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F64x +//#define __FLT64X_DIG__ 33 +//#define __FLT64X_EPSILON__ 1.92592994438723585305597794258492732e-34F64x +//#define __FLT64X_HAS_DENORM__ 1 +//#define __FLT64X_HAS_INFINITY__ 1 +//#define __FLT64X_HAS_QUIET_NAN__ 1 +//#define __FLT64X_IS_IEC_60559__ 1 +//#define __FLT64X_MANT_DIG__ 113 +//#define __FLT64X_MAX_10_EXP__ 4932 +//#define __FLT64X_MAX__ 1.18973149535723176508575932662800702e+4932F64x +//#define __FLT64X_MAX_EXP__ 16384 +//#define __FLT64X_MIN_10_EXP__ (-4931) +//#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +//#define __FLT64X_MIN_EXP__ (-16381) +//#define __FLT64X_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F64x +//#define __FLT128_DECIMAL_DIG__ 36 +//#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +//#define __FLT128_DIG__ 33 +//#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +//#define __FLT128_HAS_DENORM__ 1 +//#define __FLT128_HAS_INFINITY__ 1 +//#define __FLT128_HAS_QUIET_NAN__ 1 +//#define __FLT128_IS_IEC_60559__ 1 +//#define __FLT128_MANT_DIG__ 113 +//#define __FLT128_MAX_10_EXP__ 4932 +//#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +//#define __FLT128_MAX_EXP__ 16384 +//#define __FLT128_MIN_10_EXP__ (-4931) +//#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +//#define __FLT128_MIN_EXP__ (-16381) +//#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT_DECIMAL_DIG__ 9 +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT_DIG__ 6 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __FLT_EVAL_METHOD__ 0 +#define __FLT_EVAL_METHOD_C99__ 0 +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __FLT_HAS_DENORM__ 1 +#define __FLT_HAS_INFINITY__ 1 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_IS_IEC_60559__ 1 +#define __FLT_MANT_DIG__ 24 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT_MAX_EXP__ 128 +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __FLT_MIN_EXP__ (-125) +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT_RADIX__ 2 +#define __FP_FAST_FMA 1 +#define __FP_FAST_FMAF 1 +#define __FP_FAST_FMAF32 1 +#define __FP_FAST_FMAF32x 1 +#define __FP_FAST_FMAF64 1 +#define __LDBL_DECIMAL_DIG__ 36 +#define __LDBL_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966L +#define __LDBL_DIG__ 33 +#define __LDBL_EPSILON__ 1.92592994438723585305597794258492732e-34L +#define __LDBL_HAS_DENORM__ 1 +#define __LDBL_HAS_INFINITY__ 1 +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __LDBL_IS_IEC_60559__ 1 +#define __LDBL_MANT_DIG__ 113 +#define __LDBL_MAX_10_EXP__ 4932 +#define __LDBL_MAX__ 1.18973149535723176508575932662800702e+4932L +#define __LDBL_MAX_EXP__ 16384 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __LDBL_MIN_EXP__ (-16381) +#define __LDBL_NORM_MAX__ 1.18973149535723176508575932662800702e+4932L + +#include_next "stdc-predef.h" diff --git a/wrapperhelper/include-override/common/bits/floatn.h b/wrapperhelper/include-override/common/bits/floatn.h new file mode 100644 index 0000000000000000000000000000000000000000..ebd359f9c398fbfaac644eb7cfcd5deb8cdadef1 --- /dev/null +++ b/wrapperhelper/include-override/common/bits/floatn.h @@ -0,0 +1,118 @@ +/* Macros to control TS 18661-3 glibc features on x86. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . + +This file has been adapted to work with the 'wrapperhelper' project on the 09/10/2024. +*/ + +#ifndef _BITS_FLOATN_H +#define _BITS_FLOATN_H + +#include + +/* Defined to 1 if the current compiler invocation provides a + floating-point type with the IEEE 754 binary128 format, and this + glibc includes corresponding *f128 interfaces for it. The required + libgcc support was added some time after the basic compiler + support, for x86_64 and x86. */ +# define __HAVE_FLOAT128 1 + +/* Defined to 1 if __HAVE_FLOAT128 is 1 and the type is ABI-distinct + from the default float, double and long double types in this glibc. */ +#if __HAVE_FLOAT128 +# define __HAVE_DISTINCT_FLOAT128 1 +#else +# define __HAVE_DISTINCT_FLOAT128 0 +#endif + +/* Defined to 1 if the current compiler invocation provides a + floating-point type with the right format for _Float64x, and this + glibc includes corresponding *f64x interfaces for it. */ +#define __HAVE_FLOAT64X 1 + +/* Defined to 1 if __HAVE_FLOAT64X is 1 and _Float64x has the format + of long double. Otherwise, if __HAVE_FLOAT64X is 1, _Float64x has + the format of _Float128, which must be different from that of long + double. */ +#define __HAVE_FLOAT64X_LONG_DOUBLE 1 + +#ifndef __ASSEMBLER__ + +/* Defined to concatenate the literal suffix to be used with _Float128 + types, if __HAVE_FLOAT128 is 1. */ +# if __HAVE_FLOAT128 +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +/* The literal suffix f128 exists only since GCC 7.0. */ +# define __f128(x) x##q +# else +# define __f128(x) x##f128 +# endif +# endif + +/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */ +# if __HAVE_FLOAT128 +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +/* Add a typedef for older GCC compilers which don't natively support + _Complex _Float128. */ +typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__))); +# define __CFLOAT128 __cfloat128 +# else +# define __CFLOAT128 _Complex _Float128 +# endif +# endif + +/* The remaining of this file provides support for older compilers. */ +# if __HAVE_FLOAT128 + +/* The type _Float128 exists only since GCC 7.0. */ +# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0)) +typedef __float128 _Float128; +# endif + +/* __builtin_huge_valf128 doesn't exist before GCC 7.0. */ +# if !__GNUC_PREREQ (7, 0) +# define __builtin_huge_valf128() ((_Float128) __builtin_huge_val ()) +# endif + +/* Older GCC has only a subset of built-in functions for _Float128 on + x86, and __builtin_infq is not usable in static initializers. + Converting a narrower sNaN to _Float128 produces a quiet NaN, so + attempts to use _Float128 sNaNs will not work properly with older + compilers. */ +# if !__GNUC_PREREQ (7, 0) +# define __builtin_copysignf128 __builtin_copysignq +# define __builtin_fabsf128 __builtin_fabsq +# define __builtin_inff128() ((_Float128) __builtin_inf ()) +# define __builtin_nanf128(x) ((_Float128) __builtin_nan (x)) +# define __builtin_nansf128(x) ((_Float128) __builtin_nans (x)) +# endif + +/* In math/math.h, __MATH_TG will expand signbit to __builtin_signbit*, + e.g.: __builtin_signbitf128, before GCC 6. However, there has never + been a __builtin_signbitf128 in GCC and the type-generic builtin is + only available since GCC 6. */ +# if !__GNUC_PREREQ (6, 0) +# define __builtin_signbitf128 __signbitf128 +# endif + +# endif + +#endif /* !__ASSEMBLER__. */ + +#include + +#endif /* _BITS_FLOATN_H */ diff --git a/wrapperhelper/include-override/common/bits/stdint-intn.h b/wrapperhelper/include-override/common/bits/stdint-intn.h new file mode 100644 index 0000000000000000000000000000000000000000..14abdb46e804e3aeb3c3d76833c72cd4c5654a2c --- /dev/null +++ b/wrapperhelper/include-override/common/bits/stdint-intn.h @@ -0,0 +1,32 @@ +/* Define intN_t types. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . + +This file has been adapted to work with the 'wrapperhelper' project on the 09/06/2024. +*/ + +#ifndef _BITS_STDINT_INTN_H +#define _BITS_STDINT_INTN_H 1 + +#include + +typedef __int8_t int8_t; +typedef __int16_t int16_t; +typedef __int32_t int32_t; +typedef __int64_t int64_t; + +#endif /* bits/stdint-intn.h */ diff --git a/wrapperhelper/include-override/common/bits/stdint-least.h b/wrapperhelper/include-override/common/bits/stdint-least.h new file mode 100644 index 0000000000000000000000000000000000000000..d9753d7dce2e6b465b6f0e6c80499907a341e076 --- /dev/null +++ b/wrapperhelper/include-override/common/bits/stdint-least.h @@ -0,0 +1,39 @@ +/* Define int_leastN_t and uint_leastN types. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . + +This file has been adapted to work with the 'wrapperhelper' project on the 09/06/2024. +*/ + +#ifndef _BITS_STDINT_LEAST_H +#define _BITS_STDINT_LEAST_H 1 + +#include + +/* Signed. */ +typedef __int_least8_t int_least8_t; +typedef __int_least16_t int_least16_t; +typedef __int_least32_t int_least32_t; +typedef __int_least64_t int_least64_t; + +/* Unsigned. */ +typedef __uint_least8_t uint_least8_t; +typedef __uint_least16_t uint_least16_t; +typedef __uint_least32_t uint_least32_t; +typedef __uint_least64_t uint_least64_t; + +#endif /* bits/stdint-least.h */ diff --git a/wrapperhelper/include-override/common/bits/stdint-uintn.h b/wrapperhelper/include-override/common/bits/stdint-uintn.h new file mode 100644 index 0000000000000000000000000000000000000000..cf2e8b4e31535fe7bc88eac053ae9bb5f97e1198 --- /dev/null +++ b/wrapperhelper/include-override/common/bits/stdint-uintn.h @@ -0,0 +1,32 @@ +/* Define uintN_t types. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . + +This file has been adapted to work with the 'wrapperhelper' project on the 09/06/2024. +*/ + +#ifndef _BITS_STDINT_UINTN_H +#define _BITS_STDINT_UINTN_H 1 + +#include + +typedef __uint8_t uint8_t; +typedef __uint16_t uint16_t; +typedef __uint32_t uint32_t; +typedef __uint64_t uint64_t; + +#endif /* bits/stdint-uintn.h */ diff --git a/wrapperhelper/include-override/common/bits/types.h b/wrapperhelper/include-override/common/bits/types.h new file mode 100644 index 0000000000000000000000000000000000000000..7d1eddda4ca9942635713a33611addda0f6ea551 --- /dev/null +++ b/wrapperhelper/include-override/common/bits/types.h @@ -0,0 +1,192 @@ +/* bits/types.h -- definitions of __*_t types underlying *_t types. + Copyright (C) 2002-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . + +This file has been adapted to work with the 'wrapperhelper' project on the 09/06/2024. +*/ + +/* + * Never include this file directly; use instead. + */ + +#ifndef _BITS_TYPES_H +#define _BITS_TYPES_H 1 + +#include +#include +#include + +/* Convenience types. */ +typedef unsigned char __u_char; +typedef unsigned short int __u_short; +typedef unsigned int __u_int; +typedef unsigned long int __u_long; + +/* Fixed-size types, underlying types depend on word size and compiler. */ +#pragma wrappers allow_ints_ext + +/* Smallest types with at least a given width. */ +typedef __int8_t __int_least8_t; +typedef __uint8_t __uint_least8_t; +typedef __int16_t __int_least16_t; +typedef __uint16_t __uint_least16_t; +typedef __int32_t __int_least32_t; +typedef __uint32_t __uint_least32_t; +typedef __int64_t __int_least64_t; +typedef __uint64_t __uint_least64_t; + +/* quad_t is also 64 bits. */ +typedef __int64_t __quad_t; +typedef __uint64_t __u_quad_t; + +/* Largest integral types. */ +typedef __int64_t __intmax_t; +typedef __uint64_t __uintmax_t; + + +/* The machine-dependent file defines __*_T_TYPE + macros for each of the OS types we define below. The definitions + of those macros must use the following macros for underlying types. + We define __S_TYPE and __U_TYPE for the signed and unsigned + variants of each of the following integer types on this machine. + + 16 -- "natural" 16-bit type (always short) + 32 -- "natural" 32-bit type (always int) + 64 -- "natural" 64-bit type (long or long long) + LONG32 -- 32-bit type, traditionally long + QUAD -- 64-bit type, traditionally long long + WORD -- natural type of __WORDSIZE bits (int or long) + LONGWORD -- type of __WORDSIZE bits, traditionally long + + We distinguish WORD/LONGWORD, 32/LONG32, and 64/QUAD so that the + conventional uses of `long' or `long long' type modifiers match the + types we define, even when a less-adorned type would be the same size. + This matters for (somewhat) portably writing printf/scanf formats for + these types, where using the appropriate l or ll format modifiers can + make the typedefs and the formats match up across all GNU platforms. If + we used `long' when it's 64 bits where `long long' is expected, then the + compiler would warn about the formats not matching the argument types, + and the programmer changing them to shut up the compiler would break the + program's portability. + + Here we assume what is presently the case in all the GCC configurations + we support: long long is always 64 bits, long is always word/address size, + and int is always 32 bits. */ + +#define __S16_TYPE __int16_t +#define __U16_TYPE __uint16_t +#define __S32_TYPE __int32_t +#define __U32_TYPE __uint32_t +#define __SLONGWORD_TYPE long int +#define __ULONGWORD_TYPE unsigned long int +# define __SQUAD_TYPE __int64_t +# define __UQUAD_TYPE __uint64_t +# define __SWORD_TYPE long int +# define __UWORD_TYPE unsigned long int +# define __SLONG32_TYPE __int32_t +# define __ULONG32_TYPE __uint32_t +# define __S64_TYPE __int64_t +# define __U64_TYPE __uint64_t +# define __STD_TYPE typedef +#include /* Defines __*_T_TYPE macros. */ +#include /* Defines __TIME*_T_TYPE macros. */ + + +__STD_TYPE __DEV_T_TYPE __dev_t; /* Type of device numbers. */ +__STD_TYPE __UID_T_TYPE __uid_t; /* Type of user identifications. */ +__STD_TYPE __GID_T_TYPE __gid_t; /* Type of group identifications. */ +__STD_TYPE __INO_T_TYPE __ino_t; /* Type of file serial numbers. */ +__STD_TYPE __INO64_T_TYPE __ino64_t; /* Type of file serial numbers (LFS).*/ +__STD_TYPE __MODE_T_TYPE __mode_t; /* Type of file attribute bitmasks. */ +__STD_TYPE __NLINK_T_TYPE __nlink_t; /* Type of file link counts. */ +__STD_TYPE __OFF_T_TYPE __off_t; /* Type of file sizes and offsets. */ +__STD_TYPE __OFF64_T_TYPE __off64_t; /* Type of file sizes and offsets (LFS). */ +__STD_TYPE __PID_T_TYPE __pid_t; /* Type of process identifications. */ +__STD_TYPE __FSID_T_TYPE __fsid_t; /* Type of file system IDs. */ +__STD_TYPE __CLOCK_T_TYPE __clock_t; /* Type of CPU usage counts. */ +__STD_TYPE __RLIM_T_TYPE __rlim_t; /* Type for resource measurement. */ +__STD_TYPE __RLIM64_T_TYPE __rlim64_t; /* Type for resource measurement (LFS). */ +__STD_TYPE __ID_T_TYPE __id_t; /* General type for IDs. */ +__STD_TYPE __TIME_T_TYPE __time_t; /* Seconds since the Epoch. */ +__STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of microseconds. */ +__STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count of microseconds. */ +__STD_TYPE __SUSECONDS64_T_TYPE __suseconds64_t; + +__STD_TYPE __DADDR_T_TYPE __daddr_t; /* The type of a disk address. */ +__STD_TYPE __KEY_T_TYPE __key_t; /* Type of an IPC key. */ + +/* Clock ID used in clock and timer functions. */ +__STD_TYPE __CLOCKID_T_TYPE __clockid_t; + +/* Timer ID returned by `timer_create'. */ +__STD_TYPE __TIMER_T_TYPE __timer_t; + +/* Type to represent block size. */ +__STD_TYPE __BLKSIZE_T_TYPE __blksize_t; + +/* Types from the Large File Support interface. */ + +/* Type to count number of disk blocks. */ +__STD_TYPE __BLKCNT_T_TYPE __blkcnt_t; +__STD_TYPE __BLKCNT64_T_TYPE __blkcnt64_t; + +/* Type to count file system blocks. */ +__STD_TYPE __FSBLKCNT_T_TYPE __fsblkcnt_t; +__STD_TYPE __FSBLKCNT64_T_TYPE __fsblkcnt64_t; + +/* Type to count file system nodes. */ +__STD_TYPE __FSFILCNT_T_TYPE __fsfilcnt_t; +__STD_TYPE __FSFILCNT64_T_TYPE __fsfilcnt64_t; + +/* Type of miscellaneous file system fields. */ +__STD_TYPE __FSWORD_T_TYPE __fsword_t; + +__STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error. */ + +/* Signed long type used in system calls. */ +__STD_TYPE __SYSCALL_SLONG_TYPE __syscall_slong_t; +/* Unsigned long type used in system calls. */ +__STD_TYPE __SYSCALL_ULONG_TYPE __syscall_ulong_t; + +/* These few don't really vary by system, they always correspond + to one of the other defined types. */ +typedef __off64_t __loff_t; /* Type of file sizes and offsets (LFS). */ +typedef char *__caddr_t; + +/* Duplicates info from stdint.h but this is used in unistd.h. */ +__STD_TYPE __SWORD_TYPE __intptr_t; + +/* Duplicate info from sys/socket.h. */ +__STD_TYPE __U32_TYPE __socklen_t; + +/* C99: An integer type that can be accessed as an atomic entity, + even in the presence of asynchronous interrupts. + It is not currently necessary for this to be machine-specific. */ +typedef int __sig_atomic_t; + +/* Seconds since the Epoch, visible to user code when time_t is too + narrow only for consistency with the old way of widening too-narrow + types. User code should never use __time64_t. */ +#if __TIMESIZE == 64 && defined __LIBC +# define __time64_t __time_t +#elif __TIMESIZE != 64 +__STD_TYPE __TIME64_T_TYPE __time64_t; +#endif + +#undef __STD_TYPE + +#endif /* bits/types.h */ diff --git a/wrapperhelper/include-override/common/stdc-predef.h b/wrapperhelper/include-override/common/stdc-predef.h new file mode 100644 index 0000000000000000000000000000000000000000..3484bbce85ac2d499b7a88cea65ccfef142d8bd9 --- /dev/null +++ b/wrapperhelper/include-override/common/stdc-predef.h @@ -0,0 +1,2 @@ +// Ignore all attributes +#define __attribute__(_) diff --git a/wrapperhelper/include-override/common/stdint.h b/wrapperhelper/include-override/common/stdint.h new file mode 100644 index 0000000000000000000000000000000000000000..0389d24bc5e826a89489254eb5252d3a87500a95 --- /dev/null +++ b/wrapperhelper/include-override/common/stdint.h @@ -0,0 +1,237 @@ +/* Copyright (C) 1997-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . + +This file has been adapted to work with the 'wrapperhelper' project on the 09/06/2024. +*/ + +/* + * ISO C99: 7.18 Integer types + */ + +#ifndef _STDINT_H +#define _STDINT_H 1 + +#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION +#include +#include +#include +#include + +#pragma wrappers allow_ints_ext + +/* Exact integral types. */ + +/* Signed. */ +#include + +/* Unsigned. */ +#include + + +/* Small types. */ +#include + + +/* Fast types. */ + +/* Signed. */ +typedef int8_t int_fast8_t; +typedef long int_fast16_t; +typedef long int_fast32_t; +typedef int64_t int_fast64_t; + +/* Unsigned. */ +typedef uint8_t uint_fast8_t; +typedef unsigned long uint_fast16_t; +typedef unsigned long uint_fast32_t; +typedef uint64_t uint_fast64_t; + + +/* Types for `void *' pointers. */ +# ifndef __intptr_t_defined +typedef signed long intptr_t; +# define __intptr_t_defined +# endif +typedef unsigned long uintptr_t; + + +/* Largest integral types. */ +typedef int64_t intmax_t; +typedef uint64_t uintmax_t; + + +# if __WORDSIZE == 64 +# define __INT64_C(c) c ## L +# define __UINT64_C(c) c ## UL +# else +# define __INT64_C(c) c ## LL +# define __UINT64_C(c) c ## ULL +# endif + +/* Limits of integral types. */ + +/* Minimum of signed integral types. */ +# define INT8_MIN (-128) +# define INT16_MIN (-32767-1) +# define INT32_MIN (-2147483647-1) +# define INT64_MIN (-__INT64_C(9223372036854775807)-1) +/* Maximum of signed integral types. */ +# define INT8_MAX (127) +# define INT16_MAX (32767) +# define INT32_MAX (2147483647) +# define INT64_MAX (__INT64_C(9223372036854775807)) + +/* Maximum of unsigned integral types. */ +# define UINT8_MAX (255) +# define UINT16_MAX (65535) +# define UINT32_MAX (4294967295U) +# define UINT64_MAX (__UINT64_C(18446744073709551615)) + + +/* Minimum of signed integral types having a minimum size. */ +# define INT_LEAST8_MIN (-__INT_LEAST8_MAX__-1) +# define INT_LEAST16_MIN (-__INT_LEAST16_MAX__-1) +# define INT_LEAST32_MIN (-__INT_LEAST32_MAX__-1) +# define INT_LEAST64_MIN (-__INT_LEAST64_MAX__-1) +/* Maximum of signed integral types having a minimum size. */ +# define INT_LEAST8_MAX __INT_LEAST8_MAX__ +# define INT_LEAST16_MAX __INT_LEAST16_MAX__ +# define INT_LEAST32_MAX __INT_LEAST32_MAX__ +# define INT_LEAST64_MAX __INT_LEAST64_MAX__ + +/* Maximum of unsigned integral types having a minimum size. */ +# define UINT_LEAST8_MAX __UINT_LEAST8_MAX__ +# define UINT_LEAST16_MAX __UINT_LEAST16_MAX__ +# define UINT_LEAST32_MAX __UINT_LEAST32_MAX__ +# define UINT_LEAST64_MAX __UINT_LEAST64_MAX__ + + +/* Minimum of fast signed integral types having a minimum size. */ +# define INT_FAST8_MIN (-__INT_FAST8_MAX__-1) +# define INT_FAST16_MIN (-__INT_FAST16_MAX__-1) +# define INT_FAST32_MIN (-__INT_FAST32_MAX__-1) +# define INT_FAST64_MIN (-__INT_FAST64_MAX__-1) +/* Maximum of fast signed integral types having a minimum size. */ +# define INT_FAST8_MAX __INT_FAST8_MAX__ +# define INT_FAST16_MAX __INT_FAST16_MAX__ +# define INT_FAST32_MAX __INT_FAST32_MAX__ +# define INT_FAST64_MAX __INT_FAST64_MAX__ + +/* Maximum of fast unsigned integral types having a minimum size. */ +# define UINT_FAST8_MAX __UINT_FAST8_MAX__ +# define UINT_FAST16_MAX __UINT_FAST16_MAX__ +# define UINT_FAST32_MAX __UINT_FAST32_MAX__ +# define UINT_FAST64_MAX __UINT_FAST64_MAX__ + + +/* Values to test for integral types holding `void *' pointer. */ +# define INTPTR_MIN (-__INTPTR_MAX__-1) +# define INTPTR_MAX __INTPTR_MAX__ +# define UINTPTR_MAX __UINTPTR_MAX__ + +/* Minimum for largest signed integral type. */ +# define INTMAX_MIN (-__INTMAX_MAX__-1) +/* Maximum for largest signed integral type. */ +# define INTMAX_MAX __INTMAX_MAX__ + +/* Maximum for largest unsigned integral type. */ +# define UINTMAX_MAX __UINTMAX_MAX__ + +/* Limits of other integer types. */ + +/* Limits of `ptrdiff_t' type. */ +# define PTRDIFF_MIN (-__PTRDIFF_MAX__-1) +# define PTRDIFF_MAX __PTRDIFF_MAX__ + +/* Limits of `sig_atomic_t'. */ +# define SIG_ATOMIC_MIN (-__SIG_ATOMIC_MAX__-1) +# define SIG_ATOMIC_MAX __SIG_ATOMIC_MAX__ + +/* Limit of `size_t' type. */ +# define SIZE_MAX __SIZE_MAX__ + +/* Limits of `wchar_t'. */ +# ifndef WCHAR_MIN +/* These constants might also be defined in . */ +# define WCHAR_MIN __WCHAR_MIN__ +# define WCHAR_MAX __WCHAR_MAX__ +# endif + +/* Limits of `wint_t'. */ +# define WINT_MIN __WINT_MIN__ +# define WINT_MAX __WINT_MAX__ + +/* Signed. */ +# define INT8_C(c) __INT8_C(c) +# define INT16_C(c) __INT16_C(c) +# define INT32_C(c) __INT32_C(c) +# define INT64_C(c) __INT64_C(c) + +/* Unsigned. */ +# define UINT8_C(c) __UINT8_C(c) +# define UINT16_C(c) __UINT16_C(c) +# define UINT32_C(c) __UINT32_C(c) +# define UINT64_C(c) __UINT64_C(c) + +/* Maximal type. */ +# define INTMAX_C(c) __INTMAX_C(c) +# define UINTMAX_C(c) __UINTMAX_C(c) + +#if __GLIBC_USE (IEC_60559_BFP_EXT_C23) + +# define INT8_WIDTH 8 +# define UINT8_WIDTH 8 +# define INT16_WIDTH 16 +# define UINT16_WIDTH 16 +# define INT32_WIDTH 32 +# define UINT32_WIDTH 32 +# define INT64_WIDTH 64 +# define UINT64_WIDTH 64 + +# define INT_LEAST8_WIDTH 8 +# define UINT_LEAST8_WIDTH 8 +# define INT_LEAST16_WIDTH 16 +# define UINT_LEAST16_WIDTH 16 +# define INT_LEAST32_WIDTH 32 +# define UINT_LEAST32_WIDTH 32 +# define INT_LEAST64_WIDTH 64 +# define UINT_LEAST64_WIDTH 64 + +# define INT_FAST8_WIDTH 8 +# define UINT_FAST8_WIDTH 8 +# define INT_FAST16_WIDTH __WORDSIZE +# define UINT_FAST16_WIDTH __WORDSIZE +# define INT_FAST32_WIDTH __WORDSIZE +# define UINT_FAST32_WIDTH __WORDSIZE +# define INT_FAST64_WIDTH 64 +# define UINT_FAST64_WIDTH 64 + +# define INTPTR_WIDTH __WORDSIZE +# define UINTPTR_WIDTH __WORDSIZE + +# define INTMAX_WIDTH 64 +# define UINTMAX_WIDTH 64 + +# define PTRDIFF_WIDTH __WORDSIZE +# define SIG_ATOMIC_WIDTH 32 +# define SIZE_WIDTH __WORDSIZE +# define WCHAR_WIDTH 32 +# define WINT_WIDTH 32 + +#endif + +#endif /* stdint.h */ diff --git a/wrapperhelper/include-override/x86/bits/pthreadtypes-arch.h b/wrapperhelper/include-override/x86/bits/pthreadtypes-arch.h new file mode 100644 index 0000000000000000000000000000000000000000..b23ff3b028397d7b7c2aebf5e860a077cf89a67a --- /dev/null +++ b/wrapperhelper/include-override/x86/bits/pthreadtypes-arch.h @@ -0,0 +1,55 @@ +/* Copyright (C) 2002-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_PTHREADTYPES_ARCH_H +#define _BITS_PTHREADTYPES_ARCH_H 1 + +#include + +#ifdef __x86_64__ +# if __WORDSIZE == 64 +# define __SIZEOF_PTHREAD_MUTEX_T 40 +# define __SIZEOF_PTHREAD_ATTR_T 56 +# define __SIZEOF_PTHREAD_RWLOCK_T 56 +# define __SIZEOF_PTHREAD_BARRIER_T 32 +# else +# define __SIZEOF_PTHREAD_MUTEX_T 32 +# define __SIZEOF_PTHREAD_ATTR_T 32 +# define __SIZEOF_PTHREAD_RWLOCK_T 44 +# define __SIZEOF_PTHREAD_BARRIER_T 20 +# endif +#else +# define __SIZEOF_PTHREAD_MUTEX_T 24 +# define __SIZEOF_PTHREAD_ATTR_T 36 +# define __SIZEOF_PTHREAD_RWLOCK_T 32 +# define __SIZEOF_PTHREAD_BARRIER_T 20 +#endif +#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 +#define __SIZEOF_PTHREAD_COND_T 48 +#define __SIZEOF_PTHREAD_CONDATTR_T 4 +#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 +#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 + +#define __LOCK_ALIGNMENT +#define __ONCE_ALIGNMENT + +#ifndef __x86_64__ +/* Extra attributes for the cleanup functions. */ +# define __cleanup_fct_attribute __attribute__ ((__regparm__ (1))) +#endif + +#endif /* bits/pthreadtypes.h */ diff --git a/wrapperhelper/include-override/x86/stdc-predef.h b/wrapperhelper/include-override/x86/stdc-predef.h new file mode 100644 index 0000000000000000000000000000000000000000..4f59430af769491f3e005e26aba870c6d0e7a503 --- /dev/null +++ b/wrapperhelper/include-override/x86/stdc-predef.h @@ -0,0 +1,401 @@ +// C standard +#define __STDC__ 1 +#define __STDC_HOSTED__ 1 +#define __STDC_UTF_16__ 1 +#define __STDC_UTF_32__ 1 +#define __STDC_VERSION__ 201710L +// Generic x86_64 infos +#define __ELF__ 1 +#define __NO_INLINE__ 1 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __ORDER_PDP_ENDIAN__ 3412 +#define __PIC__ 2 +#define __pic__ 2 +#define __PIE__ 2 +#define __pie__ 2 +#define __USER_LABEL_PREFIX__ +#define __gnu_linux__ 1 +#define __linux__ 1 +#define __linux 1 +#define linux 1 +#define __unix__ 1 +#define __unix 1 +#define unix 1 +// GCC +//#define __GCC_ASM_FLAG_OUTPUTS__ 1 +//#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +//#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +//#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +//#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +//#define __GCC_ATOMIC_INT_LOCK_FREE 2 +//#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +//#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +//#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +//#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +//#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +//#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +//#define __GCC_CONSTRUCTIVE_SIZE 64 +//#define __GCC_DESTRUCTIVE_SIZE 64 +//#define __GCC_HAVE_DWARF2_CFI_ASM 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +//#define __GCC_IEC_559 2 +//#define __GCC_IEC_559_COMPLEX 2 +//#define __GNUC__ 14 +//#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +//#define __GNUC_MINOR__ 2 +//#define __GNUC_PATCHLEVEL__ 1 +//#define __GNUC_STDC_INLINE__ 1 +//#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +//#define __GXX_ABI_VERSION 1019 +//#define __PRAGMA_REDEFINE_EXTNAME 1 +//#define __VERSION__ "14.2.1 20240805" +// Specific x86_64 architecture +#define __FINITE_MATH_ONLY__ 0 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __ILP32__ 1 +#define _ILP32 1 +#define __REGISTER_PREFIX__ +#define __FXSR__ 1 +#define __LAHF_SAHF__ 1 +#define __MMX__ 1 +#define __SEG_FS 1 +#define __SEG_GS 1 +#define __SSE__ 1 +#define __SSE2__ 1 +#define __SSP_STRONG__ 3 +#define __code_model_32__ 1 +#define __i386__ 1 +#define __i386 1 +#define i386 1 +#define __k8__ 1 +#define __k8 1 +// Atomic +#define __ATOMIC_RELAXED 0 +#define __ATOMIC_CONSUME 1 +#define __ATOMIC_ACQUIRE 2 +#define __ATOMIC_RELEASE 3 +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_SEQ_CST 5 +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __ATOMIC_HLE_RELEASE 131072 +// Metainfo on types +#define __BIGGEST_ALIGNMENT__ 16 +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __CHAR_BIT__ 8 +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __SIZEOF_SHORT__ 2 +#define __SIZEOF_WCHAR_T__ 4 +#define __SIZEOF_INT__ 4 +#define __SIZEOF_WINT_T__ 4 +#define __SIZEOF_LONG__ 4 +#define __SIZEOF_LONG_LONG__ 8 +#define __SIZEOF_POINTER__ 4 +#define __SIZEOF_PTRDIFF_T__ 4 +#define __SIZEOF_SIZE_T__ 4 +#define __SIZEOF_FLOAT__ 4 +#define __SIZEOF_DOUBLE__ 8 +#define __SIZEOF_LONG_DOUBLE__ 12 +#define __SIZEOF_FLOAT80__ 12 +#define __SIZEOF_FLOAT128__ 16 +// Integers +//#define __BITINT_MAXWIDTH__ 65535 +//#define __CHAR16_TYPE__ short unsigned int +//#define __CHAR32_TYPE__ unsigned int +//#define __INT8_C(c) c +#define __INT8_MAX__ 0x7f +//#define __INT8_TYPE__ signed char +//#define __INT16_C(c) c +#define __INT16_MAX__ 0x7fff +//#define __INT16_TYPE__ short int +//#define __INT32_C(c) c +#define __INT32_MAX__ 0x7fffffff +//#define __INT32_TYPE__ int +//#define __INT64_C(c) c ## LL +#define __INT64_MAX__ 0x7fffffffffffffffLL +//#define __INT64_TYPE__ long long int +#define __INT_FAST8_MAX__ 0x7f +//#define __INT_FAST8_TYPE__ signed char +#define __INT_FAST8_WIDTH__ 8 +#define __INT_FAST16_MAX__ 0x7fffffff +//#define __INT_FAST16_TYPE__ int +#define __INT_FAST16_WIDTH__ 32 +#define __INT_FAST32_MAX__ 0x7fffffff +//#define __INT_FAST32_TYPE__ int +#define __INT_FAST32_WIDTH__ 32 +#define __INT_FAST64_MAX__ 0x7fffffffffffffffLL +//#define __INT_FAST64_TYPE__ long long int +#define __INT_FAST64_WIDTH__ 64 +#define __INT_LEAST8_MAX__ 0x7f +//#define __INT_LEAST8_TYPE__ signed char +#define __INT_LEAST8_WIDTH__ 8 +#define __INT_LEAST16_MAX__ 0x7fff +//#define __INT_LEAST16_TYPE__ short int +#define __INT_LEAST16_WIDTH__ 16 +#define __INT_LEAST32_MAX__ 0x7fffffff +//#define __INT_LEAST32_TYPE__ int +#define __INT_LEAST32_WIDTH__ 32 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffLL +//#define __INT_LEAST64_TYPE__ long long int +#define __INT_LEAST64_WIDTH__ 64 +#define __INT_MAX__ 0x7fffffff +#define __INT_WIDTH__ 32 +#define __INTMAX_C(c) c ## LL +#define __INTMAX_MAX__ 0x7fffffffffffffffLL +//#define __INTMAX_TYPE__ long long int +#define __INTMAX_WIDTH__ 64 +#define __INTPTR_MAX__ 0x7fffffff +//#define __INTPTR_TYPE__ int +#define __INTPTR_WIDTH__ 32 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __LONG_LONG_WIDTH__ 64 +#define __LONG_MAX__ 0x7fffffffL +#define __LONG_WIDTH__ 32 +#define __PTRDIFF_MAX__ 0x7fffffff +//#define __PTRDIFF_TYPE__ int +#define __PTRDIFF_WIDTH__ 32 +#define __SCHAR_MAX__ 0x7f +#define __SCHAR_WIDTH__ 8 +#define __SHRT_MAX__ 0x7fff +#define __SHRT_WIDTH__ 16 +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +//#define __SIG_ATOMIC_TYPE__ int +#define __SIG_ATOMIC_WIDTH__ 32 +#define __SIZE_MAX__ 0xffffffffU +//#define __SIZE_TYPE__ unsigned int +#define __SIZE_WIDTH__ 32 +#define __UINT8_C(c) c +#define __UINT8_MAX__ 0xff +//#define __UINT8_TYPE__ unsigned char +#define __UINT16_C(c) c +#define __UINT16_MAX__ 0xffff +//#define __UINT16_TYPE__ short unsigned int +#define __UINT32_C(c) c ## U +#define __UINT32_MAX__ 0xffffffffU +//#define __UINT32_TYPE__ unsigned int +#define __UINT64_C(c) c ## ULL +#define __UINT64_MAX__ 0xffffffffffffffffULL +//#define __UINT64_TYPE__ long long unsigned int +#define __UINT_FAST8_MAX__ 0xff +//#define __UINT_FAST8_TYPE__ unsigned char +#define __UINT_FAST16_MAX__ 0xffffffffU +//#define __UINT_FAST16_TYPE__ unsigned int +#define __UINT_FAST32_MAX__ 0xffffffffU +//#define __UINT_FAST32_TYPE__ unsigned int +#define __UINT_FAST64_MAX__ 0xffffffffffffffffULL +//#define __UINT_FAST64_TYPE__ long long unsigned int +#define __UINT_LEAST8_MAX__ 0xff +//#define __UINT_LEAST8_TYPE__ unsigned char +#define __UINT_LEAST16_MAX__ 0xffff +//#define __UINT_LEAST16_TYPE__ short unsigned int +#define __UINT_LEAST32_MAX__ 0xffffffffU +//#define __UINT_LEAST32_TYPE__ unsigned int +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffULL +//#define __UINT_LEAST64_TYPE__ long long unsigned int +#define __UINTMAX_C(c) c ## ULL +#define __UINTMAX_MAX__ 0xffffffffffffffffULL +//#define __UINTMAX_TYPE__ long long unsigned int +#define __UINTPTR_MAX__ 0xffffffffU +//#define __UINTPTR_TYPE__ unsigned int +#define __WCHAR_MAX__ 0x7fffffffL +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +//#define __WCHAR_TYPE__ long int +#define __WCHAR_WIDTH__ 32 +#define __WINT_MAX__ 0xffffffffU +#define __WINT_MIN__ 0U +//#define __WINT_TYPE__ unsigned int +#define __WINT_WIDTH__ 32 +// Floats +//#define __BFLT16_DECIMAL_DIG__ 4 +//#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +//#define __BFLT16_DIG__ 2 +//#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +//#define __BFLT16_HAS_DENORM__ 1 +//#define __BFLT16_HAS_INFINITY__ 1 +//#define __BFLT16_HAS_QUIET_NAN__ 1 +//#define __BFLT16_IS_IEC_60559__ 0 +//#define __BFLT16_MANT_DIG__ 8 +//#define __BFLT16_MAX_10_EXP__ 38 +//#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +//#define __BFLT16_MAX_EXP__ 128 +//#define __BFLT16_MIN_10_EXP__ (-37) +//#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +//#define __BFLT16_MIN_EXP__ (-125) +//#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __DBL_DECIMAL_DIG__ 17 +#define __DBL_DENORM_MIN__ ((double)4.94065645841246544176568792868221372e-324L) +#define __DBL_DIG__ 15 +#define __DBL_EPSILON__ ((double)2.22044604925031308084726333618164062e-16L) +#define __DBL_HAS_DENORM__ 1 +#define __DBL_HAS_INFINITY__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __DBL_IS_IEC_60559__ 1 +#define __DBL_MANT_DIG__ 53 +#define __DBL_MAX_10_EXP__ 308 +#define __DBL_MAX__ ((double)1.79769313486231570814527423731704357e+308L) +#define __DBL_MAX_EXP__ 1024 +#define __DBL_MIN_10_EXP__ (-307) +#define __DBL_MIN__ ((double)2.22507385850720138309023271733240406e-308L) +#define __DBL_MIN_EXP__ (-1021) +#define __DBL_NORM_MAX__ ((double)1.79769313486231570814527423731704357e+308L) +//#define __DEC32_EPSILON__ 1E-6DF +//#define __DEC32_MANT_DIG__ 7 +//#define __DEC32_MAX__ 9.999999E96DF +//#define __DEC32_MAX_EXP__ 97 +//#define __DEC32_MIN__ 1E-95DF +//#define __DEC32_MIN_EXP__ (-94) +//#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +//#define __DEC64_EPSILON__ 1E-15DD +//#define __DEC64_MANT_DIG__ 16 +//#define __DEC64_MAX__ 9.999999999999999E384DD +//#define __DEC64_MAX_EXP__ 385 +//#define __DEC64_MIN__ 1E-383DD +//#define __DEC64_MIN_EXP__ (-382) +//#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +//#define __DEC128_EPSILON__ 1E-33DL +//#define __DEC128_MANT_DIG__ 34 +//#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +//#define __DEC128_MAX_EXP__ 6145 +//#define __DEC128_MIN__ 1E-6143DL +//#define __DEC128_MIN_EXP__ (-6142) +//#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +//#define __DEC_EVAL_METHOD__ 2 +//#define __DECIMAL_BID_FORMAT__ 1 +//#define __DECIMAL_DIG__ 21 +//#define __FLT16_DECIMAL_DIG__ 5 +//#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +//#define __FLT16_DIG__ 3 +//#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +//#define __FLT16_HAS_DENORM__ 1 +//#define __FLT16_HAS_INFINITY__ 1 +//#define __FLT16_HAS_QUIET_NAN__ 1 +//#define __FLT16_IS_IEC_60559__ 1 +//#define __FLT16_MANT_DIG__ 11 +//#define __FLT16_MAX_10_EXP__ 4 +//#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +//#define __FLT16_MAX_EXP__ 16 +//#define __FLT16_MIN_10_EXP__ (-4) +//#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +//#define __FLT16_MIN_EXP__ (-13) +//#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +//#define __FLT32_DECIMAL_DIG__ 9 +//#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +//#define __FLT32_DIG__ 6 +//#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +//#define __FLT32_HAS_DENORM__ 1 +//#define __FLT32_HAS_INFINITY__ 1 +//#define __FLT32_HAS_QUIET_NAN__ 1 +//#define __FLT32_IS_IEC_60559__ 1 +//#define __FLT32_MANT_DIG__ 24 +//#define __FLT32_MAX_10_EXP__ 38 +//#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +//#define __FLT32_MAX_EXP__ 128 +//#define __FLT32_MIN_10_EXP__ (-37) +//#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +//#define __FLT32_MIN_EXP__ (-125) +//#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +//#define __FLT32X_DECIMAL_DIG__ 17 +//#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +//#define __FLT32X_DIG__ 15 +//#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +//#define __FLT32X_HAS_DENORM__ 1 +//#define __FLT32X_HAS_INFINITY__ 1 +//#define __FLT32X_HAS_QUIET_NAN__ 1 +//#define __FLT32X_IS_IEC_60559__ 1 +//#define __FLT32X_MANT_DIG__ 53 +//#define __FLT32X_MAX_10_EXP__ 308 +//#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +//#define __FLT32X_MAX_EXP__ 1024 +//#define __FLT32X_MIN_10_EXP__ (-307) +//#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +//#define __FLT32X_MIN_EXP__ (-1021) +//#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +//#define __FLT64_DECIMAL_DIG__ 17 +//#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +//#define __FLT64_DIG__ 15 +//#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +//#define __FLT64_HAS_DENORM__ 1 +//#define __FLT64_HAS_INFINITY__ 1 +//#define __FLT64_HAS_QUIET_NAN__ 1 +//#define __FLT64_IS_IEC_60559__ 1 +//#define __FLT64_MANT_DIG__ 53 +//#define __FLT64_MAX_10_EXP__ 308 +//#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +//#define __FLT64_MAX_EXP__ 1024 +//#define __FLT64_MIN_10_EXP__ (-307) +//#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +//#define __FLT64_MIN_EXP__ (-1021) +//#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +//#define __FLT64X_DECIMAL_DIG__ 21 +//#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +//#define __FLT64X_DIG__ 18 +//#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +//#define __FLT64X_HAS_DENORM__ 1 +//#define __FLT64X_HAS_INFINITY__ 1 +//#define __FLT64X_HAS_QUIET_NAN__ 1 +//#define __FLT64X_IS_IEC_60559__ 1 +//#define __FLT64X_MANT_DIG__ 64 +//#define __FLT64X_MAX_10_EXP__ 4932 +//#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +//#define __FLT64X_MAX_EXP__ 16384 +//#define __FLT64X_MIN_10_EXP__ (-4931) +//#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +//#define __FLT64X_MIN_EXP__ (-16381) +//#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +//#define __FLT128_DECIMAL_DIG__ 36 +//#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +//#define __FLT128_DIG__ 33 +//#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +//#define __FLT128_HAS_DENORM__ 1 +//#define __FLT128_HAS_INFINITY__ 1 +//#define __FLT128_HAS_QUIET_NAN__ 1 +//#define __FLT128_IS_IEC_60559__ 1 +//#define __FLT128_MANT_DIG__ 113 +//#define __FLT128_MAX_10_EXP__ 4932 +//#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +//#define __FLT128_MAX_EXP__ 16384 +//#define __FLT128_MIN_10_EXP__ (-4931) +//#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +//#define __FLT128_MIN_EXP__ (-16381) +//#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT_DECIMAL_DIG__ 9 +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT_DIG__ 6 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __FLT_EVAL_METHOD__ 2 +#define __FLT_EVAL_METHOD_TS_18661_3__ 2 +#define __FLT_HAS_DENORM__ 1 +#define __FLT_HAS_INFINITY__ 1 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_IS_IEC_60559__ 1 +#define __FLT_MANT_DIG__ 24 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT_MAX_EXP__ 128 +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __FLT_MIN_EXP__ (-125) +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT_RADIX__ 2 +#define __LDBL_DECIMAL_DIG__ 21 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __LDBL_DIG__ 18 +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __LDBL_HAS_DENORM__ 1 +#define __LDBL_HAS_INFINITY__ 1 +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __LDBL_IS_IEC_60559__ 1 +#define __LDBL_MANT_DIG__ 64 +#define __LDBL_MAX_10_EXP__ 4932 +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __LDBL_MAX_EXP__ 16384 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __LDBL_MIN_EXP__ (-16381) +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L + +#include_next "stdc-predef.h" diff --git a/wrapperhelper/include-override/x86_64/bits/pthreadtypes-arch.h b/wrapperhelper/include-override/x86_64/bits/pthreadtypes-arch.h new file mode 100644 index 0000000000000000000000000000000000000000..b23ff3b028397d7b7c2aebf5e860a077cf89a67a --- /dev/null +++ b/wrapperhelper/include-override/x86_64/bits/pthreadtypes-arch.h @@ -0,0 +1,55 @@ +/* Copyright (C) 2002-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_PTHREADTYPES_ARCH_H +#define _BITS_PTHREADTYPES_ARCH_H 1 + +#include + +#ifdef __x86_64__ +# if __WORDSIZE == 64 +# define __SIZEOF_PTHREAD_MUTEX_T 40 +# define __SIZEOF_PTHREAD_ATTR_T 56 +# define __SIZEOF_PTHREAD_RWLOCK_T 56 +# define __SIZEOF_PTHREAD_BARRIER_T 32 +# else +# define __SIZEOF_PTHREAD_MUTEX_T 32 +# define __SIZEOF_PTHREAD_ATTR_T 32 +# define __SIZEOF_PTHREAD_RWLOCK_T 44 +# define __SIZEOF_PTHREAD_BARRIER_T 20 +# endif +#else +# define __SIZEOF_PTHREAD_MUTEX_T 24 +# define __SIZEOF_PTHREAD_ATTR_T 36 +# define __SIZEOF_PTHREAD_RWLOCK_T 32 +# define __SIZEOF_PTHREAD_BARRIER_T 20 +#endif +#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 +#define __SIZEOF_PTHREAD_COND_T 48 +#define __SIZEOF_PTHREAD_CONDATTR_T 4 +#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 +#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 + +#define __LOCK_ALIGNMENT +#define __ONCE_ALIGNMENT + +#ifndef __x86_64__ +/* Extra attributes for the cleanup functions. */ +# define __cleanup_fct_attribute __attribute__ ((__regparm__ (1))) +#endif + +#endif /* bits/pthreadtypes.h */ diff --git a/wrapperhelper/include-override/x86_64/stdc-predef.h b/wrapperhelper/include-override/x86_64/stdc-predef.h new file mode 100644 index 0000000000000000000000000000000000000000..5c1e4feed73bf835e60a16483c51f272372f8c07 --- /dev/null +++ b/wrapperhelper/include-override/x86_64/stdc-predef.h @@ -0,0 +1,405 @@ +// C standard +#define __STDC__ 1 +#define __STDC_HOSTED__ 1 +#define __STDC_UTF_16__ 1 +#define __STDC_UTF_32__ 1 +#define __STDC_VERSION__ 201710L +// Generic x86_64 infos +#define __ELF__ 1 +#define __NO_INLINE__ 1 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __ORDER_PDP_ENDIAN__ 3412 +#define __PIC__ 2 +#define __pic__ 2 +#define __PIE__ 2 +#define __pie__ 2 +#define __USER_LABEL_PREFIX__ +#define __gnu_linux__ 1 +#define __linux__ 1 +#define __linux 1 +#define linux 1 +#define __unix__ 1 +#define __unix 1 +#define unix 1 +// GCC +//#define __GCC_ASM_FLAG_OUTPUTS__ 1 +//#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +//#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +//#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +//#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +//#define __GCC_ATOMIC_INT_LOCK_FREE 2 +//#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +//#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +//#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +//#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +//#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +//#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +//#define __GCC_CONSTRUCTIVE_SIZE 64 +//#define __GCC_DESTRUCTIVE_SIZE 64 +//#define __GCC_HAVE_DWARF2_CFI_ASM 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +//#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +//#define __GCC_IEC_559 2 +//#define __GCC_IEC_559_COMPLEX 2 +//#define __GNUC__ 14 +//#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +//#define __GNUC_MINOR__ 2 +//#define __GNUC_PATCHLEVEL__ 1 +//#define __GNUC_STDC_INLINE__ 1 +//#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +//#define __GXX_ABI_VERSION 1019 +//#define __PRAGMA_REDEFINE_EXTNAME 1 +//#define __VERSION__ "14.2.1 20240805" +// Specific x86_64 architecture +#define __FINITE_MATH_ONLY__ 0 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __LP64__ 1 +#define _LP64 1 +#define __REGISTER_PREFIX__ +#define __FXSR__ 1 +#define __MMX__ 1 +#define __MMX_WITH_SSE__ 1 +#define __SEG_FS 1 +#define __SEG_GS 1 +#define __SSE__ 1 +#define __SSE_MATH__ 1 +#define __SSE2__ 1 +#define __SSE2_MATH__ 1 +#define __SSP_STRONG__ 3 +#define __amd64__ 1 +#define __amd64 1 +#define __code_model_small__ 1 +#define __k8__ 1 +#define __k8 1 +#define __x86_64__ 1 +#define __x86_64 1 +// Atomic +#define __ATOMIC_RELAXED 0 +#define __ATOMIC_CONSUME 1 +#define __ATOMIC_ACQUIRE 2 +#define __ATOMIC_RELEASE 3 +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_SEQ_CST 5 +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __ATOMIC_HLE_RELEASE 131072 +// Metainfo on types +#define __BIGGEST_ALIGNMENT__ 16 +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __CHAR_BIT__ 8 +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __SIZEOF_SHORT__ 2 +#define __SIZEOF_WCHAR_T__ 4 +#define __SIZEOF_INT__ 4 +#define __SIZEOF_WINT_T__ 4 +#define __SIZEOF_LONG__ 8 +#define __SIZEOF_LONG_LONG__ 8 +#define __SIZEOF_POINTER__ 8 +#define __SIZEOF_PTRDIFF_T__ 8 +#define __SIZEOF_SIZE_T__ 8 +#define __SIZEOF_INT128__ 16 +#define __SIZEOF_FLOAT__ 4 +#define __SIZEOF_DOUBLE__ 8 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __SIZEOF_FLOAT80__ 16 +#define __SIZEOF_FLOAT128__ 16 +// Integers +//#define __BITINT_MAXWIDTH__ 65535 +//#define __CHAR16_TYPE__ short unsigned int +//#define __CHAR32_TYPE__ unsigned int +//#define __INT8_C(c) c +#define __INT8_MAX__ 0x7f +//#define __INT8_TYPE__ signed char +//#define __INT16_C(c) c +#define __INT16_MAX__ 0x7fff +//#define __INT16_TYPE__ short int +//#define __INT32_C(c) c +#define __INT32_MAX__ 0x7fffffff +//#define __INT32_TYPE__ int +//#define __INT64_C(c) c ## L +#define __INT64_MAX__ 0x7fffffffffffffffL +//#define __INT64_TYPE__ long int +#define __INT_FAST8_MAX__ 0x7f +//#define __INT_FAST8_TYPE__ signed char +#define __INT_FAST8_WIDTH__ 8 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +//#define __INT_FAST16_TYPE__ long int +#define __INT_FAST16_WIDTH__ 64 +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +//#define __INT_FAST32_TYPE__ long int +#define __INT_FAST32_WIDTH__ 64 +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +//#define __INT_FAST64_TYPE__ long int +#define __INT_FAST64_WIDTH__ 64 +#define __INT_LEAST8_MAX__ 0x7f +//#define __INT_LEAST8_TYPE__ signed char +#define __INT_LEAST8_WIDTH__ 8 +#define __INT_LEAST16_MAX__ 0x7fff +//#define __INT_LEAST16_TYPE__ short int +#define __INT_LEAST16_WIDTH__ 16 +#define __INT_LEAST32_MAX__ 0x7fffffff +//#define __INT_LEAST32_TYPE__ int +#define __INT_LEAST32_WIDTH__ 32 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +//#define __INT_LEAST64_TYPE__ long int +#define __INT_LEAST64_WIDTH__ 64 +#define __INT_MAX__ 0x7fffffff +#define __INT_WIDTH__ 32 +#define __INTMAX_C(c) c ## L +#define __INTMAX_MAX__ 0x7fffffffffffffffL +//#define __INTMAX_TYPE__ long int +#define __INTMAX_WIDTH__ 64 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +//#define __INTPTR_TYPE__ long int +#define __INTPTR_WIDTH__ 64 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __LONG_LONG_WIDTH__ 64 +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __LONG_WIDTH__ 64 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +//#define __PTRDIFF_TYPE__ long int +#define __PTRDIFF_WIDTH__ 64 +#define __SCHAR_MAX__ 0x7f +#define __SCHAR_WIDTH__ 8 +#define __SHRT_MAX__ 0x7fff +#define __SHRT_WIDTH__ 16 +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +//#define __SIG_ATOMIC_TYPE__ int +#define __SIG_ATOMIC_WIDTH__ 32 +#define __SIZE_MAX__ 0xffffffffffffffffUL +//#define __SIZE_TYPE__ long unsigned int +#define __SIZE_WIDTH__ 64 +#define __UINT8_C(c) c +#define __UINT8_MAX__ 0xff +//#define __UINT8_TYPE__ unsigned char +#define __UINT16_C(c) c +#define __UINT16_MAX__ 0xffff +//#define __UINT16_TYPE__ short unsigned int +#define __UINT32_C(c) c ## U +#define __UINT32_MAX__ 0xffffffffU +//#define __UINT32_TYPE__ unsigned int +#define __UINT64_C(c) c ## UL +#define __UINT64_MAX__ 0xffffffffffffffffUL +//#define __UINT64_TYPE__ long unsigned int +#define __UINT_FAST8_MAX__ 0xff +//#define __UINT_FAST8_TYPE__ unsigned char +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +//#define __UINT_FAST16_TYPE__ long unsigned int +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +//#define __UINT_FAST32_TYPE__ long unsigned int +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +//#define __UINT_FAST64_TYPE__ long unsigned int +#define __UINT_LEAST8_MAX__ 0xff +//#define __UINT_LEAST8_TYPE__ unsigned char +#define __UINT_LEAST16_MAX__ 0xffff +//#define __UINT_LEAST16_TYPE__ short unsigned int +#define __UINT_LEAST32_MAX__ 0xffffffffU +//#define __UINT_LEAST32_TYPE__ unsigned int +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +//#define __UINT_LEAST64_TYPE__ long unsigned int +#define __UINTMAX_C(c) c ## UL +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +//#define __UINTMAX_TYPE__ long unsigned int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +//#define __UINTPTR_TYPE__ long unsigned int +#define __WCHAR_MAX__ 0x7fffffff +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +//#define __WCHAR_TYPE__ int +#define __WCHAR_WIDTH__ 32 +#define __WINT_MAX__ 0xffffffffU +#define __WINT_MIN__ 0U +//#define __WINT_TYPE__ unsigned int +#define __WINT_WIDTH__ 32 +// Floats +//#define __BFLT16_DECIMAL_DIG__ 4 +//#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +//#define __BFLT16_DIG__ 2 +//#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +//#define __BFLT16_HAS_DENORM__ 1 +//#define __BFLT16_HAS_INFINITY__ 1 +//#define __BFLT16_HAS_QUIET_NAN__ 1 +//#define __BFLT16_IS_IEC_60559__ 0 +//#define __BFLT16_MANT_DIG__ 8 +//#define __BFLT16_MAX_10_EXP__ 38 +//#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +//#define __BFLT16_MAX_EXP__ 128 +//#define __BFLT16_MIN_10_EXP__ (-37) +//#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +//#define __BFLT16_MIN_EXP__ (-125) +//#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __DBL_DECIMAL_DIG__ 17 +#define __DBL_DENORM_MIN__ ((double)4.94065645841246544176568792868221372e-324L) +#define __DBL_DIG__ 15 +#define __DBL_EPSILON__ ((double)2.22044604925031308084726333618164062e-16L) +#define __DBL_HAS_DENORM__ 1 +#define __DBL_HAS_INFINITY__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __DBL_IS_IEC_60559__ 1 +#define __DBL_MANT_DIG__ 53 +#define __DBL_MAX_10_EXP__ 308 +#define __DBL_MAX__ ((double)1.79769313486231570814527423731704357e+308L) +#define __DBL_MAX_EXP__ 1024 +#define __DBL_MIN_10_EXP__ (-307) +#define __DBL_MIN__ ((double)2.22507385850720138309023271733240406e-308L) +#define __DBL_MIN_EXP__ (-1021) +#define __DBL_NORM_MAX__ ((double)1.79769313486231570814527423731704357e+308L) +//#define __DEC32_EPSILON__ 1E-6DF +//#define __DEC32_MANT_DIG__ 7 +//#define __DEC32_MAX__ 9.999999E96DF +//#define __DEC32_MAX_EXP__ 97 +//#define __DEC32_MIN__ 1E-95DF +//#define __DEC32_MIN_EXP__ (-94) +//#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +//#define __DEC64_EPSILON__ 1E-15DD +//#define __DEC64_MANT_DIG__ 16 +//#define __DEC64_MAX__ 9.999999999999999E384DD +//#define __DEC64_MAX_EXP__ 385 +//#define __DEC64_MIN__ 1E-383DD +//#define __DEC64_MIN_EXP__ (-382) +//#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +//#define __DEC128_EPSILON__ 1E-33DL +//#define __DEC128_MANT_DIG__ 34 +//#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +//#define __DEC128_MAX_EXP__ 6145 +//#define __DEC128_MIN__ 1E-6143DL +//#define __DEC128_MIN_EXP__ (-6142) +//#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +//#define __DEC_EVAL_METHOD__ 2 +//#define __DECIMAL_BID_FORMAT__ 1 +//#define __DECIMAL_DIG__ 21 +//#define __FLT16_DECIMAL_DIG__ 5 +//#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +//#define __FLT16_DIG__ 3 +//#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +//#define __FLT16_HAS_DENORM__ 1 +//#define __FLT16_HAS_INFINITY__ 1 +//#define __FLT16_HAS_QUIET_NAN__ 1 +//#define __FLT16_IS_IEC_60559__ 1 +//#define __FLT16_MANT_DIG__ 11 +//#define __FLT16_MAX_10_EXP__ 4 +//#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +//#define __FLT16_MAX_EXP__ 16 +//#define __FLT16_MIN_10_EXP__ (-4) +//#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +//#define __FLT16_MIN_EXP__ (-13) +//#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +//#define __FLT32_DECIMAL_DIG__ 9 +//#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +//#define __FLT32_DIG__ 6 +//#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +//#define __FLT32_HAS_DENORM__ 1 +//#define __FLT32_HAS_INFINITY__ 1 +//#define __FLT32_HAS_QUIET_NAN__ 1 +//#define __FLT32_IS_IEC_60559__ 1 +//#define __FLT32_MANT_DIG__ 24 +//#define __FLT32_MAX_10_EXP__ 38 +//#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +//#define __FLT32_MAX_EXP__ 128 +//#define __FLT32_MIN_10_EXP__ (-37) +//#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +//#define __FLT32_MIN_EXP__ (-125) +//#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +//#define __FLT32X_DECIMAL_DIG__ 17 +//#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +//#define __FLT32X_DIG__ 15 +//#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +//#define __FLT32X_HAS_DENORM__ 1 +//#define __FLT32X_HAS_INFINITY__ 1 +//#define __FLT32X_HAS_QUIET_NAN__ 1 +//#define __FLT32X_IS_IEC_60559__ 1 +//#define __FLT32X_MANT_DIG__ 53 +//#define __FLT32X_MAX_10_EXP__ 308 +//#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +//#define __FLT32X_MAX_EXP__ 1024 +//#define __FLT32X_MIN_10_EXP__ (-307) +//#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +//#define __FLT32X_MIN_EXP__ (-1021) +//#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +//#define __FLT64_DECIMAL_DIG__ 17 +//#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +//#define __FLT64_DIG__ 15 +//#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +//#define __FLT64_HAS_DENORM__ 1 +//#define __FLT64_HAS_INFINITY__ 1 +//#define __FLT64_HAS_QUIET_NAN__ 1 +//#define __FLT64_IS_IEC_60559__ 1 +//#define __FLT64_MANT_DIG__ 53 +//#define __FLT64_MAX_10_EXP__ 308 +//#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +//#define __FLT64_MAX_EXP__ 1024 +//#define __FLT64_MIN_10_EXP__ (-307) +//#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +//#define __FLT64_MIN_EXP__ (-1021) +//#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +//#define __FLT64X_DECIMAL_DIG__ 21 +//#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +//#define __FLT64X_DIG__ 18 +//#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +//#define __FLT64X_HAS_DENORM__ 1 +//#define __FLT64X_HAS_INFINITY__ 1 +//#define __FLT64X_HAS_QUIET_NAN__ 1 +//#define __FLT64X_IS_IEC_60559__ 1 +//#define __FLT64X_MANT_DIG__ 64 +//#define __FLT64X_MAX_10_EXP__ 4932 +//#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +//#define __FLT64X_MAX_EXP__ 16384 +//#define __FLT64X_MIN_10_EXP__ (-4931) +//#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +//#define __FLT64X_MIN_EXP__ (-16381) +//#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +//#define __FLT128_DECIMAL_DIG__ 36 +//#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +//#define __FLT128_DIG__ 33 +//#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +//#define __FLT128_HAS_DENORM__ 1 +//#define __FLT128_HAS_INFINITY__ 1 +//#define __FLT128_HAS_QUIET_NAN__ 1 +//#define __FLT128_IS_IEC_60559__ 1 +//#define __FLT128_MANT_DIG__ 113 +//#define __FLT128_MAX_10_EXP__ 4932 +//#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +//#define __FLT128_MAX_EXP__ 16384 +//#define __FLT128_MIN_10_EXP__ (-4931) +//#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +//#define __FLT128_MIN_EXP__ (-16381) +//#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT_DECIMAL_DIG__ 9 +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT_DIG__ 6 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __FLT_EVAL_METHOD__ 0 +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __FLT_HAS_DENORM__ 1 +#define __FLT_HAS_INFINITY__ 1 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_IS_IEC_60559__ 1 +#define __FLT_MANT_DIG__ 24 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT_MAX_EXP__ 128 +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __FLT_MIN_EXP__ (-125) +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT_RADIX__ 2 +#define __LDBL_DECIMAL_DIG__ 21 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __LDBL_DIG__ 18 +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __LDBL_HAS_DENORM__ 1 +#define __LDBL_HAS_INFINITY__ 1 +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __LDBL_IS_IEC_60559__ 1 +#define __LDBL_MANT_DIG__ 64 +#define __LDBL_MAX_10_EXP__ 4932 +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __LDBL_MAX_EXP__ 16384 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __LDBL_MIN_EXP__ (-16381) +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L + +#include_next "stdc-predef.h" diff --git a/wrapperhelper/main.cpp b/wrapperhelper/main.cpp deleted file mode 100644 index b5a18a168b67d816369216cc3355737be7c63b45..0000000000000000000000000000000000000000 --- a/wrapperhelper/main.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "ast.h" -#include "utils.h" - -static void dump_usage() { - std::string Usage = R"usage( - usage: command [guest_triple] [host_triple] -- - : set the header file to be parsed - : set libname required for wrapping func - [guest_triple]: set guest triple: can be arm32/arm64/x86/x64, default is x64 - [host_triple] : set host triple: can be arm32/arm64/x86/x64, default is arm64 - -- : mandatory - : extra compiler flags - )usage"; - std::cerr << Usage << std::endl; -} - -std::string parse_triple(const char* arg) { - if (strcmp(arg, "x86") == 0) { - return "i386-pc-linux-gnu"; - } else if (strcmp(arg, "x64") == 0) { - return "x86_64-pc-linux-gnu"; - } else if (strcmp(arg, "arm32") == 0) { - return "armv7-unknown-linux-gnueabihf"; - } else if (strcmp(arg, "arm64") == 0) { - return "aarch64-unknown-linux-gnu"; - } else { - std::cerr << "Invalid triple: '" << arg << "'\n"; - dump_usage(); - return ""; - } -} - -int main(int argc, const char* argv[]) { - if (argc < 4) { - dump_usage(); - return 0; - } - std::string libname = argv[2]; - std::string guest_triple = parse_triple("x64"); - std::string host_triple = parse_triple("arm64"); - if (argc >= 5) { - guest_triple = parse_triple(argv[3]); - } - if (argc >= 6) { - host_triple = parse_triple(argv[4]); - } - bool has_necessary_tag = false; - for (int i = 0; i < argc; i++) { - if (strcmp(argv[i], "--") == 0) { - has_necessary_tag = true; - break; - } - } - if (!has_necessary_tag) { - std::cerr << "Please add '--' after the triples" << std::endl; - dump_usage(); - return 0; - } - std::string err; - auto compile_db = clang::tooling::FixedCompilationDatabase::loadFromCommandLine(argc, argv, err); - clang::tooling::ClangTool Tool(*compile_db, {argv[1]}); - Tool.appendArgumentsAdjuster([&guest_triple](const clang::tooling::CommandLineArguments &args, clang::StringRef) { - clang::tooling::CommandLineArguments adjusted_args = args; - adjusted_args.push_back(std::string{"-target"}); - adjusted_args.push_back(guest_triple); - return adjusted_args; - }); - return Tool.run(std::make_unique(libname, host_triple, guest_triple).get()); -} diff --git a/wrapperhelper/src/cstring.c b/wrapperhelper/src/cstring.c new file mode 100644 index 0000000000000000000000000000000000000000..8dc18b82f907131484f3981cab9f6da5323f4768 --- /dev/null +++ b/wrapperhelper/src/cstring.c @@ -0,0 +1,165 @@ +#include "cstring.h" + +#include + +#define STRING_MIN_CAP 8 + +string_t *string_new(void) { + string_t *ret = malloc(sizeof(*ret)); + if (!ret) return NULL; + char *buf = malloc(sizeof(char)); + if (!buf) { + free(ret); + return NULL; + } + buf[0] = '\0'; + ret->ssize = ret->scap = 0; ret->buf = buf; + return ret; +} + +string_t *string_new_cap(size_t cap) { + string_t *ret = malloc(sizeof(*ret)); + if (!ret) return NULL; + cap = (cap < STRING_MIN_CAP) ? STRING_MIN_CAP : cap; + ret->buf = malloc((cap + 1) * sizeof(char)); + if (!ret->buf) { + free(ret); + return NULL; + } + ret->buf[0] = '\0'; + ret->scap = cap; + ret->ssize = 0; + return ret; +} + +string_t *string_new_cstr(const char *s) { + string_t *ret = malloc(sizeof(*ret)); + if (!ret) return NULL; + size_t len = strlen(s); + size_t cap = (len < STRING_MIN_CAP) ? STRING_MIN_CAP : len; + ret->buf = malloc((cap + 1) * sizeof(char)); + if (!ret->buf) { + free(ret); + return NULL; + } + strcpy(ret->buf, s); + ret->scap = cap; + ret->ssize = len; + return ret; +} + +int string_reserve(string_t *s, size_t cap) { + size_t new_cap = (cap < STRING_MIN_CAP) ? STRING_MIN_CAP : cap; + if (new_cap <= s->scap) return 1; + + void *new_buf = realloc(s->buf, sizeof(char) * (new_cap + 1)); + if (!new_buf) return 0; + s->buf = new_buf; + s->scap = new_cap; + return 1; +} +int string_reserve_grow(string_t *s, size_t cap) { + cap = (cap < STRING_MIN_CAP) ? STRING_MIN_CAP : cap; + if (cap <= s->scap) return 1; + size_t new_cap = (s->scap < STRING_MIN_CAP) ? STRING_MIN_CAP : s->scap * 2; + while (new_cap < cap) new_cap *= 2; + + void *new_buf = realloc(s->buf, sizeof(char) * (new_cap + 1)); + if (!new_buf) return 0; + s->buf = new_buf; + s->scap = new_cap; + return 1; +} + +int string_trim(string_t *s) { + if (s->ssize == s->scap) return 1; + void *new_buf = realloc(s->buf, sizeof(char) * (s->ssize + 1)); + if (!new_buf) return 0; + s->buf = new_buf; + s->scap = s->ssize; + return 1; +} + +void string_del(string_t *s) { + if (s->buf) free(s->buf); + free(s); +} + +char *string_steal(string_t *s) { + char *ret = s->buf; + free(s); + return ret; +} + +int string_add_char(string_t *s, char elem) { + if (!string_reserve_grow(s, s->ssize + 1)) return 0; + s->buf[s->ssize++] = elem; + s->buf[s->ssize] = '\0'; + return 1; +} + +int string_add_char_at(string_t *s, char elem, size_t idx) { + if (idx == s->ssize) return string_add_char(s, elem); + if (idx > s->ssize) return 0; + if (!string_reserve_grow(s, s->ssize + 1)) return 0; + memmove(s->buf + idx + 1, s->buf + idx, s->ssize + 1 - idx); + ++s->ssize; + s->buf[idx] = elem; + return 1; +} + +int string_add_string(string_t *s1, string_t *s2) { + if (!string_reserve_grow(s1, s1->ssize + s2->ssize)) return 0; + memcpy(s1->buf + s1->ssize, s2->buf, s2->ssize); + s1->ssize += s2->ssize; + s1->buf[s1->ssize] = '\0'; + return 1; +} + +int string_add_cstr(string_t *s1, const char *s2) { + size_t len = strlen(s2); + if (!string_reserve_grow(s1, s1->ssize + len)) return 0; + strcpy(s1->buf + s1->ssize, s2); + s1->ssize += len; + return 1; +} + +void string_pop(string_t *s) { + if (!s->ssize) return; + s->buf[--s->ssize] = '\0'; + if (s->ssize < s->scap / 4) { + size_t new_cap = (s->scap / 2 < STRING_MIN_CAP) ? STRING_MIN_CAP : s->scap / 2; + if (new_cap == s->scap) return; + void *new_buf = realloc(s->buf, sizeof(char) * (new_cap + 1)); + if (!new_buf) return; // We don't really care if the realloc fails, we just need to not update anything + s->buf = new_buf; + s->scap = new_cap; + } +} + +void string_clear(string_t *s) { + if (!s->ssize) return; + if (!s->scap) return; + s->buf[s->ssize = 0] = '\0'; + void *new_buf = realloc(s->buf, sizeof(char)); + if (!new_buf) return; // We don't really care if the realloc fails, we just need to not update anything + s->buf = new_buf; + s->scap = 0; +} + +string_t *string_dup(string_t const *s) { + string_t *ret = string_new_cap(s->ssize); + if (!ret) return NULL; + memcpy(ret->buf, s->buf, s->ssize + 1); + ret->ssize = s->ssize; + return ret; +} + +string_t *string_concat(string_t const *l, string_t const *r) { + string_t *ret = string_new_cap(l->ssize + r->ssize); + if (!ret) return NULL; + memcpy(ret->buf, l->buf, l->ssize); + memcpy(ret->buf + l->ssize, r->buf, r->ssize); + ret->buf[ret->ssize] = '\0'; + return ret; +} diff --git a/wrapperhelper/src/cstring.h b/wrapperhelper/src/cstring.h new file mode 100644 index 0000000000000000000000000000000000000000..fdb0a718ca3e24be31677fb425851b2c1290086e --- /dev/null +++ b/wrapperhelper/src/cstring.h @@ -0,0 +1,88 @@ +#pragma once + +#ifndef STRING_H +#define STRING_H + +#include +#include +#include + +/** Thread-unsafe string implementation, with support for raw NULL bytes + * USAGE: + * ====== + * string_t ------------ The string type. + * string_new ---------- Creates a new string. + * string_new_cap ------ Creates a new string with a given capacity. Takes the capacity. + * string_new_cstr ----- Creates a new string from a given C string. Takes the string. + * string_reserve ------ Ensures a string has at least a given capacity. Takes the string and the capacity. + * string_trim --------- Ensures a string has a capacity equal to its length. Takes the string. May reduce the string capacity. + * string_del ---------- Frees a string. Takes the string. + * string_steal -------- Frees a string, keeping the content alive. Takes the string. The content (also returned) needs to be freed separately. + * string_add_char ----- Add a character at the end. Takes the string and the new character. May increase the string capacity. + * string_add_char_at -- Add a character at a given index. Takes the string, the new character and the index. May increase the string capacity. + * string_add_string --- Add a string at the end in-place. Takes both strings. May increase the string capacity. + * string_add_cstr ----- Add a C string at the end in-place. Takes both strings. May increase the string capacity. + * string_pop ---------- Pops the last character. Takes the string. May reduce the string capacity. + * string_clear -------- Clears the string. Takes the string. May reduce the string capacity. + * string_dup ---------- Duplicate a string. Takes the string. Does not free the old string. + * string_concat ------- Concatenate two strings. Takes both strings. Does not free any string. + * string_len ---------- String length. Takes the string. + * string_cap ---------- String capacity. Takes the string. + * string_content ------ Pointer to the string content. Valid C string. Takes the string. + * string_begin -------- Start of the string. Takes the string. + * string_end ---------- End of the string. Points to unmanaged memory. Takes the string. + * string_last --------- Last element of the string. Points to invalid memory if size is zero. Takes the string. + * string_for ---------- Iterate over the characters of a string. This is a for loop. Takes the iterator name and the string. + * + * EXAMPLE: + * ======== + * Source main.c: + * ------------------- +// ... +int main() { + string_t *str = string_new_cap(2); + if (!str) { + printf("Error: failed to allocate new string\n"); + return 2; + } + string_add_char(str, 'H'); // Cannot fail + string_add_char(str, 'i'); // Cannot fail + if (!string_add_char(str, '!')) { + printf("Error: failed to add char to string\n"); + return 2; + } + printf("String length: %zu: \"%s\"\n", string_len(str), string_content(str)); // 3, "Hi!" + string_del(str); +} + */ + +typedef struct string_s { + size_t ssize, scap; + char *buf; +} string_t; + +string_t *string_new(void); +string_t *string_new_cap(size_t cap); +string_t *string_new_cstr(const char *s); +int string_reserve(string_t *s, size_t cap); +int string_trim(string_t *s); +void string_del(string_t *s); +char *string_steal(string_t *s); +int string_add_char(string_t *s, char elem); +int string_add_char_at(string_t *s, char elem, size_t idx); +int string_add_string(string_t *s1, string_t *s2); +int string_add_cstr(string_t *s1, const char *s2); +void string_pop(string_t *s); +void string_clear(string_t *s); +string_t *string_dup(string_t const *s); +string_t *string_concat(string_t const *l, string_t const *r); +#define string_len(s) ((s)->ssize) +#define string_cap(s) ((s)->scap) +#define string_content(s) ((s)->buf) +#define string_begin(s) ((s)->buf) +#define string_end(s) ((s)->buf + (s)->ssize) +#define string_last(s) ((s)->buf[(s)->ssize - 1]) +#define string_for(itname, s) \ + for (char *itname = string_begin((s)); itname != string_end((s)); ++itname) + +#endif // STRING_H diff --git a/wrapperhelper/src/generator.c b/wrapperhelper/src/generator.c new file mode 100644 index 0000000000000000000000000000000000000000..8061ba8890242d21f763a7733183ecd8df7c8178 --- /dev/null +++ b/wrapperhelper/src/generator.c @@ -0,0 +1,1859 @@ +#include "generator.h" + +#include "lang.h" +#include "log.h" +#include "prepare.h" + +static const char *rft2str[8] = { + [RQT_FUN] = "", + [RQT_FUN_2] = "", + [RQT_FUN_MY] = " (my)", + [RQT_FUN_D] = " (D)", + [RQT_DATA] = "", + [RQT_DATAB] = " (B)", + [RQT_DATAM] = " (my)", +}; +#define IS_RQT_FUN2(rty) (((rty) == RQT_FUN_2) || ((rty) == RQT_FUN_D)) +#define IS_RQT_FUNCTION(rty) ((rty) < RQT_DATA) + +void request_print(const request_t *req) { + printf("%s%s: %sdefault", string_content(req->obj_name), req->weak ? " (weak)" : "", req->default_comment ? "commented " : ""); + switch (req->def.rty) { + case RQT_FUN: + case RQT_FUN_2: + case RQT_FUN_MY: + case RQT_FUN_D: + if (req->def.fun.typ) { + printf(" function%s%s %s%s%s", + rft2str[req->def.rty], + req->def.fun.needs_S ? " (with S)" : "", + string_content(req->def.fun.typ), + req->def.fun.fun2 ? " -> " : "", + req->def.fun.fun2 ? string_content(req->def.fun.fun2) : ""); + } else { + printf(" untyped function%s%s", rft2str[req->def.rty], req->def.fun.needs_S ? " (with S)" : ""); + } + break; + case RQT_DATA: + case RQT_DATAB: + case RQT_DATAM: + if (req->def.dat.has_size) { + printf(" data%s %zu", rft2str[req->def.rty], req->def.dat.sz); + } else { + printf(" unsized data%s", rft2str[req->def.rty]); + } + break; + } + if (req->has_val) { + printf(" => solved"); + switch (req->val.rty) { + case RQT_FUN: + case RQT_FUN_2: + case RQT_FUN_MY: + case RQT_FUN_D: + if (req->val.fun.typ) { + printf(" function%s%s %s%s%s", + rft2str[req->val.rty], + req->val.fun.needs_S ? " (with S)" : "", + string_content(req->val.fun.typ), + req->val.fun.fun2 ? " -> " : "", + req->val.fun.fun2 ? string_content(req->val.fun.fun2) : ""); + } else { + printf(" untyped function%s%s", rft2str[req->val.rty], req->val.fun.needs_S ? " (with S)" : ""); + } + break; + case RQT_DATA: + case RQT_DATAB: + case RQT_DATAM: + if (req->val.dat.has_size) { + printf(" data%s %zu", rft2str[req->val.rty], req->val.dat.sz); + } else { + printf(" unsized data%s", rft2str[req->val.rty]); + } + break; + } + } + printf("\n"); +} +void request_print_check(const request_t *req) { + if (req->ignored) { + return; + } + if (!req->has_val) { + // printf("%s: no value\n", string_content(req->obj_name)); + return; + } + if ((IS_RQT_FUNCTION(req->def.rty) != IS_RQT_FUNCTION(req->val.rty))) { + printf("%s: conflict: %s data, %s function\n", + string_content(req->obj_name), + IS_RQT_FUNCTION(req->def.rty) ? "is" : "was", + IS_RQT_FUNCTION(req->def.rty) ? "was" : "is"); + return; + } + if (IS_RQT_FUNCTION(req->def.rty) && !req->def.fun.typ) return; // No default (function) + if (!IS_RQT_FUNCTION(req->def.rty) && !req->def.dat.has_size) return; // No default (data) + // We have a default and a value, both are functions or data + int similar; + switch (req->def.rty) { + case RQT_FUN: + case RQT_FUN_2: + case RQT_FUN_MY: + case RQT_FUN_D: + similar = !req->default_comment || (req->val.rty != RQT_FUN); // From comment to no comment is dissimilar + if (similar && (req->def.rty != req->val.rty)) similar = 0; + if (similar && strcmp(string_content(req->def.fun.typ), string_content(req->val.fun.typ))) { + // "//GOM(_, .F...)" == "//GOM(_, .FE...)" + similar = req->default_comment + && (req->def.rty == RQT_FUN_MY) + && !strncmp(string_content(req->def.fun.typ), string_content(req->val.fun.typ), 2) + && (string_content(req->val.fun.typ)[2] == 'E') + && !strcmp(string_content(req->def.fun.typ) + 2, string_content(req->val.fun.typ) + 3); + } + if (!similar) { + printf("%s%s: function with %s%sdefault%s%s%s%s%s%s and dissimilar %ssolved%s%s%s%s%s%s\n", + string_content(req->obj_name), + req->weak ? " (weak)" : "", + req->default_comment ? "commented " : "", + req->def.fun.typ ? "" : "untyped ", + rft2str[req->def.rty], + req->def.fun.needs_S ? " (with S)" : "", + req->def.fun.typ ? " " : "", + string_content(req->def.fun.typ), + req->def.fun.fun2 ? " -> " : "", + req->def.fun.fun2 ? string_content(req->def.fun.fun2) : "", + req->val.fun.typ ? "" : "untyped ", + rft2str[req->val.rty], + req->val.fun.needs_S ? " (with S)" : "", + req->val.fun.typ ? " " : "", + string_content(req->val.fun.typ), + req->val.fun.fun2 ? " -> " : "", + req->val.fun.fun2 ? string_content(req->val.fun.fun2) : ""); + } + break; + case RQT_DATA: + case RQT_DATAB: + case RQT_DATAM: + similar = 1; + if (similar && (req->def.rty != req->val.rty)) similar = 0; + if (similar && (!!req->def.dat.has_size != !!req->val.dat.has_size)) similar = 0; + if (similar && req->def.dat.has_size && (req->def.dat.sz != req->val.dat.sz)) similar = 0; + if (!similar) { + printf("%s%s: data with %s%sdefault%s", + string_content(req->obj_name), + req->weak ? " (weak)" : "", + req->default_comment ? "commented " : "", + req->def.fun.typ ? "" : "untyped ", + rft2str[req->def.rty]); + if (req->def.dat.has_size) { + printf(" %zu", req->def.dat.sz); + } else { + printf(" unsized"); + } + printf(" and dissimilar %ssolved%s", + req->val.fun.typ ? "" : "untyped ", + rft2str[req->val.rty]); + if (req->val.dat.has_size) { + printf(" %zu", req->val.dat.sz); + } else { + printf(" unsized"); + } + printf("\n"); + } + break; + } +} +void references_print_check(const VECTOR(references) *refs) { + vector_for(references, ref, refs) { + if (ref->typ == REF_REQ) request_print_check(&ref->req); + } +} + +static void request_del(request_t *req) { + string_del(req->obj_name); + switch (req->def.rty) { + case RQT_FUN: if (req->def.fun.typ) string_del(req->def.fun.typ); break; + case RQT_FUN_2: if (req->def.fun.typ) string_del(req->def.fun.typ); if (req->def.fun.fun2) string_del(req->def.fun.fun2); break; + case RQT_FUN_MY: if (req->def.fun.typ) string_del(req->def.fun.typ); break; + case RQT_FUN_D: if (req->def.fun.typ) string_del(req->def.fun.typ); if (req->def.fun.fun2) string_del(req->def.fun.fun2); break; + case RQT_DATA: break; + case RQT_DATAB: break; + case RQT_DATAM: break; + } + if (req->has_val) { + switch (req->val.rty) { + case RQT_FUN: string_del(req->val.fun.typ); break; + case RQT_FUN_2: string_del(req->val.fun.typ); string_del(req->val.fun.fun2); break; + case RQT_FUN_MY: string_del(req->val.fun.typ); break; + case RQT_FUN_D: string_del(req->val.fun.typ); string_del(req->val.fun.fun2); break; + case RQT_DATA: break; + case RQT_DATAB: break; + case RQT_DATAM: break; + } + } +} +static void reference_del(reference_t *ref) { + switch (ref->typ) { + case REF_REQ: + request_del(&ref->req); + break; + case REF_LINE: + case REF_IFDEF: + case REF_IFNDEF: + string_del(ref->line); + break; + case REF_ELSE: + case REF_ENDIF: + break; + } +} + +static int valid_reqtype(string_t *t) { + const char *s = string_content(t); + if (!((s[0] >= 'A') && (s[0] <= 'Z')) && !((s[0] >= 'a') && (s[0] <= 'z'))) return 0; + if (s[1] != 'F') return 0; + for (size_t i = 2; i < string_len(t); ++i) { + if (!((s[i] >= 'A') && (s[i] <= 'Z')) && !((s[i] >= 'a') && (s[i] <= 'z'))) return 0; + } + return 1; +} +static const char *rqt_suffix[8] = { + [RQT_FUN] = "", + [RQT_FUN_2] = "2", + [RQT_FUN_MY] = "M", + [RQT_FUN_D] = "D", + [RQT_DATA] = "", + [RQT_DATAB] = "B", + [RQT_DATAM] = "M", +}; + +static void request_output(FILE *f, const request_t *req) { + if (!req->has_val) { + if (IS_RQT_FUNCTION(req->def.rty)) { + if (!req->def.fun.typ) { + fprintf(f, "//GO%s%s%s(%s, \n", + req->weak ? "W" : "", + req->def.fun.needs_S ? "S" : "", + rqt_suffix[req->def.rty], + string_content(req->obj_name)); + } else { + fprintf(f, "%sGO%s%s%s(%s, %s%s%s%s%s)%s\n", + req->default_comment ? "//" : "", + req->weak ? "W" : "", + req->def.fun.needs_S ? "S" : "", + rqt_suffix[req->def.rty], + string_content(req->obj_name), + valid_reqtype(req->def.fun.typ) ? "" : "\"", + string_content(req->def.fun.typ), + valid_reqtype(req->def.fun.typ) ? "" : "\"", + IS_RQT_FUN2(req->def.rty) ? ", " : "", + IS_RQT_FUN2(req->def.rty) ? string_content(req->def.fun.fun2) : "", + (req->ignored || req->default_comment) ? "" : " // Warning: failed to confirm"); + } + } else { + if (req->def.dat.has_size) { + fprintf(f, "%sDATA%s%s(%s, %zu)%s\n", + req->default_comment ? "//" : "", + req->weak ? "V" : "", + rqt_suffix[req->def.rty], + string_content(req->obj_name), + req->def.dat.sz, + (req->ignored || req->default_comment) ? "" : " // Warning: failed to confirm"); + } else { + fprintf(f, "//DATA%s%s(%s, \n", + req->weak ? "V" : "", + rqt_suffix[req->def.rty], + string_content(req->obj_name)); + } + } + } else { + if (IS_RQT_FUNCTION(req->val.rty)) { + int is_comment = + (IS_RQT_FUNCTION(req->def.rty) && req->def.fun.typ && !req->default_comment) + ? (req->val.rty != req->def.rty) : (req->val.rty != RQT_FUN); + fprintf(f, "%sGO%s%s%s(%s, %s%s%s)\n", + is_comment ? "//" : "", + req->weak ? "W" : "", + req->val.fun.needs_S ? "S" : "", + rqt_suffix[req->val.rty], + string_content(req->obj_name), + string_content(req->val.fun.typ), + IS_RQT_FUN2(req->val.rty) ? ", " : "", + IS_RQT_FUN2(req->val.rty) ? req->val.fun.fun2 ? string_content(req->val.fun.fun2) : "" : ""); + } else { + if (req->val.dat.has_size) { + int is_comment = IS_RQT_FUNCTION(req->def.rty) || !req->def.dat.has_size || req->default_comment || (req->def.rty != req->val.rty); + fprintf(f, "%sDATA%s%s(%s, %zu)\n", + is_comment ? "//" : "", + req->weak ? "V" : "", + rqt_suffix[req->val.rty], + string_content(req->obj_name), + req->val.dat.sz); + } else { + fprintf(f, "//DATA%s%s(%s, \n", + req->weak ? "V" : "", + rqt_suffix[req->val.rty], + string_content(req->obj_name)); + } + } + } +} +static void reference_output(FILE *f, const reference_t *ref) { + switch (ref->typ) { + case REF_REQ: + request_output(f, &ref->req); + break; + case REF_LINE: + fputs(string_content(ref->line), f); + fputc('\n', f); + break; + case REF_IFDEF: + fprintf(f, "#ifdef %s\n", string_content(ref->line)); + break; + case REF_IFNDEF: + fprintf(f, "#ifndef %s\n", string_content(ref->line)); + break; + case REF_ELSE: + fputs("#else\n", f); + break; + case REF_ENDIF: + fputs("#endif\n", f); + break; + } +} +void output_from_references(FILE *f, const VECTOR(references) *refs) { + fprintf(f, "#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))\n#error Meh...\n#endif\n"); + vector_for(references, ref, refs) { + reference_output(f, ref); + } +} + +VECTOR_IMPL(references, reference_del) + +VECTOR(references) *references_from_file(const char *filename, FILE *f) { + prepare_t *prep = prepare_new_file(f, filename); + if (!prep) { + log_memory("failed to create the prepare structure for the reference file\n"); + return NULL; + } + + VECTOR(references) *ret = vector_new(references); + if (!ret) { + log_memory("failed to create a new reference vector\n"); + prepare_del(prep); + return NULL; + } + + int lineno = 1; + + // Ignore the first 3 lines + preproc_token_t tok; + do { + tok = pre_next_token(prep, 0); + if (tok.tokt == PPTOK_NEWLINE) ++lineno; + else preproc_token_del(&tok); // NEWLINE has no destructor + } while (!preproc_token_isend(&tok) && (lineno < 4)); + + // TODO: better conditionals handling + // Also, for now assume we have no definition + int if_depth = 0, entered_depth = 0; + string_t *line = string_new(); + if (!line) { + log_memory("failed to allocate new string for new reference line\n"); + } + +#define ADD_CHAR(c, has_destr, what) \ + if (!string_add_char(line, c)) { \ + log_memory("failed to add " what "\n"); \ + if (has_destr) preproc_token_del(&tok); \ + goto failed; \ + } +#define ADD_CSTR(cstr, has_destr, what) \ + if (!string_add_cstr(line, cstr)) { \ + log_memory("failed to add " what "\n"); \ + if (has_destr) preproc_token_del(&tok); \ + goto failed; \ + } +#define ADD_STR(str, has_destr, what) \ + if (!string_add_string(line, str)) { \ + log_memory("failed to add " what "\n"); \ + if (has_destr) preproc_token_del(&tok); \ + goto failed; \ + } +#define PUSH_LINE(has_destr) \ + string_trim(line); \ + if (!vector_push(references, ret, ((reference_t){.typ = REF_LINE, .line = line}))) { \ + log_memory("failed to memorize reference line %d\n", lineno); \ + if (has_destr) preproc_token_del(&tok); \ + goto failed; \ + } \ + line = string_new(); \ + if (!line) { \ + log_memory("failed to allocate new string for new reference line\n"); \ + } + + while (1) { + int is_comment = 0; + tok = pre_next_token(prep, 1); + if (tok.tokt == PPTOK_START_LINE_COMMENT) { + ADD_CSTR("//", 0, "start of comment") + is_comment = 1; + // Empty destructor + tok = pre_next_token(prep, 0); // tok is IDENT, NEWLINE, INVALID or BLANK + while ((tok.tokt == PPTOK_BLANK) && ((tok.tokv.c == ' ') || (tok.tokv.c == '\t'))) { + ADD_CHAR(tok.tokv.c, 0, "start of comment") + // Empty destructor + tok = pre_next_token(prep, 0); // tok is IDENT, NEWLINE, INVALID or BLANK + } + } + if ((tok.tokt == PPTOK_SYM) && (tok.tokv.sym == SYM_HASH)) { + string_clear(line); + tok = pre_next_token(prep, 0); + if (tok.tokt != PPTOK_IDENT) { + log_error(&tok.loginfo, "invalid reference file: invalid preprocessor line\n"); + preproc_token_del(&tok); + goto failed; + } + if (!strcmp(string_content(tok.tokv.str), "ifdef")) { + string_del(tok.tokv.str); + tok = pre_next_token(prep, 0); + if (tok.tokt != PPTOK_IDENT) { + log_error(&tok.loginfo, "invalid reference file: invalid '#ifdef' line\n"); + preproc_token_del(&tok); + goto failed; + } + ++if_depth; + if (!vector_push(references, ret, ((reference_t){.typ = REF_IFDEF, .line = tok.tokv.str}))) { + log_error(&tok.loginfo, "failed to memorize reference line %d\n", lineno); + string_del(tok.tokv.str); + goto failed; + } + tok = pre_next_token(prep, 0); + } else if (!strcmp(string_content(tok.tokv.str), "ifndef")) { + string_del(tok.tokv.str); + tok = pre_next_token(prep, 0); + if (tok.tokt != PPTOK_IDENT) { + log_error(&tok.loginfo, "invalid reference file: invalid '#ifndef' line\n"); + preproc_token_del(&tok); + goto failed; + } + if (if_depth == entered_depth) ++entered_depth; + ++if_depth; + if (!vector_push(references, ret, ((reference_t){.typ = REF_IFNDEF, .line = tok.tokv.str}))) { + log_error(&tok.loginfo, "failed to memorize reference line %d\n", lineno); + string_del(tok.tokv.str); + goto failed; + } + tok = pre_next_token(prep, 0); + } else if (!strcmp(string_content(tok.tokv.str), "else")) { + string_del(tok.tokv.str); + tok = pre_next_token(prep, 0); + if (if_depth == entered_depth + 1) ++entered_depth; + else if (if_depth == entered_depth) --entered_depth; + if (!vector_push(references, ret, ((reference_t){.typ = REF_ELSE}))) { + log_error(&tok.loginfo, "failed to memorize reference line %d\n", lineno); + goto failed; + } + } else if (!strcmp(string_content(tok.tokv.str), "endif")) { + string_del(tok.tokv.str); + tok = pre_next_token(prep, 0); + if (if_depth == entered_depth) --entered_depth; + --if_depth; + if (!vector_push(references, ret, ((reference_t){.typ = REF_ENDIF}))) { + log_error(&tok.loginfo, "failed to memorize reference line %d\n", lineno); + goto failed; + } + } else { + log_error(&tok.loginfo, "invalid reference file: invalid preprocessor command '%s'\n", string_content(tok.tokv.str)); + string_del(tok.tokv.str); + goto failed; + } + while (!preproc_token_isend(&tok) && (tok.tokt != PPTOK_NEWLINE)) { + preproc_token_del(&tok); + tok = pre_next_token(prep, 0); + } + ++lineno; + if (preproc_token_isend(&tok)) { + if (tok.tokt == PPTOK_EOF) goto success; + else { + preproc_token_del(&tok); + goto failed; + } + } + } else if (tok.tokt == PPTOK_NEWLINE) { + PUSH_LINE(0) + ++lineno; + } else if (tok.tokt == PPTOK_EOF) { + goto success; + } else if ((tok.tokt == PPTOK_IDENT) + && (!strcmp(string_content(tok.tokv.str), "GO") + || !strcmp(string_content(tok.tokv.str), "GO2") + || !strcmp(string_content(tok.tokv.str), "GOD") + || !strcmp(string_content(tok.tokv.str), "GOM") + || !strcmp(string_content(tok.tokv.str), "GOS") + || !strcmp(string_content(tok.tokv.str), "GOW") + || !strcmp(string_content(tok.tokv.str), "GOW2") + || !strcmp(string_content(tok.tokv.str), "GOWD") + || !strcmp(string_content(tok.tokv.str), "GOWM") + || !strcmp(string_content(tok.tokv.str), "GOWS"))) { + string_clear(line); + if (is_comment) prepare_mark_nocomment(prep); + int isweak = (string_content(tok.tokv.str)[2] == 'W'); + request_t req = { + .default_comment = is_comment, + .has_val = 0, + .ignored = 0, + .obj_name = NULL, + .weak = isweak, + .def = { + .rty = + (string_content(tok.tokv.str)[isweak ? 3 : 2] == '2') ? RQT_FUN_2 : + (string_content(tok.tokv.str)[isweak ? 3 : 2] == 'D') ? RQT_FUN_D : + (string_content(tok.tokv.str)[isweak ? 3 : 2] == 'M') ? RQT_FUN_MY : RQT_FUN, + .fun.needs_S = (string_content(tok.tokv.str)[isweak ? 3 : 2] == 'S'), + .fun.typ = NULL, + .fun.fun2 = NULL, + }, + .val = {0}, + }; + string_del(tok.tokv.str); + tok = pre_next_token(prep, 0); + if ((tok.tokt != PPTOK_SYM) || (tok.tokv.sym != SYM_LPAREN)) { + log_error(&tok.loginfo, "invalid reference file: invalid GO line %d (lparen)\n", lineno); + preproc_token_del(&tok); + goto failed; + } + // Empty destructor + tok = pre_next_token(prep, 0); + if (tok.tokt != PPTOK_IDENT) { + log_error(&tok.loginfo, "invalid reference file: invalid GO line %d (obj_name)\n", lineno); + preproc_token_del(&tok); + goto failed; + } + req.obj_name = tok.tokv.str; + // Token moved + tok = pre_next_token(prep, 0); + if ((tok.tokt != PPTOK_SYM) || (tok.tokv.sym != SYM_COMMA)) { + log_error(&tok.loginfo, "invalid reference file: invalid GO line %d (comma)\n", lineno); + string_del(req.obj_name); + preproc_token_del(&tok); + goto failed; + } + // Empty destructor + tok = pre_next_token(prep, 0); + if ((tok.tokt == PPTOK_IDENT) || (tok.tokt == PPTOK_STRING)) { + req.def.fun.typ = (tok.tokt == PPTOK_STRING) ? tok.tokv.sstr : tok.tokv.str; + // Token moved + tok = pre_next_token(prep, 0); + if ((req.def.rty == RQT_FUN_2) || (req.def.rty == RQT_FUN_D)) { + if ((tok.tokt != PPTOK_SYM) || (tok.tokv.sym != SYM_COMMA)) { + log_error(&tok.loginfo, "invalid reference file: invalid GO line %d (comma 2)\n", lineno); + string_del(req.obj_name); + string_del(req.def.fun.typ); + preproc_token_del(&tok); + goto failed; + } + // Empty destructor + tok = pre_next_token(prep, 0); + if (tok.tokt != PPTOK_IDENT) { + log_error(&tok.loginfo, "invalid reference file: invalid GO line %d (redirect)\n", lineno); + string_del(req.obj_name); + string_del(req.def.fun.typ); + preproc_token_del(&tok); + goto failed; + } + req.def.fun.fun2 = tok.tokv.str; + // Token moved + tok = pre_next_token(prep, 0); + } + if ((tok.tokt != PPTOK_SYM) || (tok.tokv.sym != SYM_RPAREN)) { + log_error(&tok.loginfo, "invalid reference file: invalid GO line %d (rparen)\n", lineno); + string_del(req.obj_name); + string_del(req.def.fun.typ); + if (req.def.fun.fun2) string_del(req.def.fun.fun2); + preproc_token_del(&tok); + goto failed; + } + // Empty destructor + tok = pre_next_token(prep, 0); + } + if (tok.tokt != PPTOK_NEWLINE) { + log_error(&tok.loginfo, "invalid reference file: invalid GO line %d (newline)\n", lineno); + string_del(req.obj_name); + if (req.def.fun.typ) string_del(req.def.fun.typ); + if (req.def.fun.fun2) string_del(req.def.fun.fun2); + preproc_token_del(&tok); + goto failed; + } + if (!vector_push(references, ret, ((reference_t){.typ = REF_REQ, .req = req}))) { + log_memory("failed to add reference for %s\n", string_content(req.obj_name)); + string_del(req.obj_name); + if (req.def.fun.typ) string_del(req.def.fun.typ); + if (req.def.fun.fun2) string_del(req.def.fun.fun2); + // Empty destructor + goto failed; + } + ++lineno; + } else if ((tok.tokt == PPTOK_IDENT) + && (!strcmp(string_content(tok.tokv.str), "DATA") + || !strcmp(string_content(tok.tokv.str), "DATAV") + || !strcmp(string_content(tok.tokv.str), "DATAB") + || !strcmp(string_content(tok.tokv.str), "DATAM"))) { + string_clear(line); + if (is_comment) prepare_mark_nocomment(prep); + int isweak = (string_content(tok.tokv.str)[4] == 'V'); + request_t req = { + .default_comment = is_comment, + .has_val = 0, + .ignored = 0, + .obj_name = NULL, + .weak = isweak, + .def = { + .rty = + (string_content(tok.tokv.str)[isweak ? 5 : 4] == 'B') ? RQT_DATAB : + (string_content(tok.tokv.str)[isweak ? 5 : 4] == 'M') ? RQT_DATAM : RQT_DATA, + .dat.has_size = 0, + .dat.sz = 0, + }, + .val = {0}, + }; + string_del(tok.tokv.str); + tok = pre_next_token(prep, 0); + if ((tok.tokt != PPTOK_SYM) || (tok.tokv.sym != SYM_LPAREN)) { + log_error(&tok.loginfo, "invalid reference file: invalid DATA line %d (lparen)\n", lineno); + preproc_token_del(&tok); + goto failed; + } + // Empty destructor + tok = pre_next_token(prep, 0); + if (tok.tokt != PPTOK_IDENT) { + log_error(&tok.loginfo, "invalid reference file: invalid DATA line %d (obj_name)\n", lineno); + preproc_token_del(&tok); + goto failed; + } + req.obj_name = tok.tokv.str; + // Token moved + tok = pre_next_token(prep, 0); + if ((tok.tokt != PPTOK_SYM) || (tok.tokv.sym != SYM_COMMA)) { + log_error(&tok.loginfo, "invalid reference file: invalid DATA line %d (comma)\n", lineno); + string_del(req.obj_name); + preproc_token_del(&tok); + goto failed; + } + // Empty destructor + tok = pre_next_token(prep, 0); + if (tok.tokt == PPTOK_NUM) { + num_constant_t cst; + // Assume target is 64 bits (box64) + if (!num_constant_convert(&tok.loginfo, tok.tokv.str, &cst, 0)) { + log_error(&tok.loginfo, "invalid reference file: invalid DATA line %d (num conversion)\n", lineno); + string_del(req.obj_name); + preproc_token_del(&tok); + goto failed; + } + switch (cst.typ) { + case NCT_FLOAT: + case NCT_DOUBLE: + case NCT_LDOUBLE: + log_error(&tok.loginfo, "invalid reference file: invalid DATA line %d (num conversion)\n", lineno); + string_del(req.obj_name); + string_del(tok.tokv.str); + goto failed; + case NCT_INT32: req.def.dat.sz = (size_t)cst.val.i32; break; + case NCT_UINT32: req.def.dat.sz = (size_t)cst.val.u32; break; + case NCT_INT64: req.def.dat.sz = (size_t)cst.val.i64; break; + case NCT_UINT64: req.def.dat.sz = (size_t)cst.val.u64; break; + } + req.def.dat.has_size = 1; + string_del(tok.tokv.str); // Delete token + tok = pre_next_token(prep, 0); + if ((tok.tokt != PPTOK_SYM) || (tok.tokv.sym != SYM_RPAREN)) { + log_error(&tok.loginfo, "invalid reference file: invalid DATA line %d (rparen)\n", lineno); + string_del(req.obj_name); + preproc_token_del(&tok); + goto failed; + } + // Empty destructor + tok = pre_next_token(prep, 0); + } + if (tok.tokt != PPTOK_NEWLINE) { + log_error(&tok.loginfo, "invalid reference file: invalid DATA line %d (newline)\n", lineno); + string_del(req.obj_name); + preproc_token_del(&tok); + goto failed; + } + if (!vector_push(references, ret, ((reference_t){.typ = REF_REQ, .req = req}))) { + log_memory("failed to add reference for %s\n", string_content(req.obj_name)); + request_del(&req); + // Empty destructor + goto failed; + } + ++lineno; + } else if (is_comment) { + if (tok.tokt == PPTOK_IDENT) { + ADD_STR(tok.tokv.str, 1, "comment content") + string_del(tok.tokv.str); + } else if (tok.tokt == PPTOK_BLANK) { + ADD_CHAR(tok.tokv.c, 0, "comment content") + } else { + log_error(&tok.loginfo, "unknown token type in comment %u\n", tok.tokt); + preproc_token_del(&tok); + goto failed; + } + if (!pre_next_newline_token(prep, line)) { + log_memory("failed to add comment content\n"); + goto failed; + } + PUSH_LINE(0) + ++lineno; + } else { + log_error(&tok.loginfo, "invalid reference file: invalid token:\n"); + preproc_token_print(&tok); + preproc_token_del(&tok); + goto failed; + } + } + +failed: + string_del(line); + prepare_del(prep); + vector_del(references, ret); + return NULL; + +success: + string_del(line); + prepare_del(prep); + return ret; +} + +// Simple versions (in practice, only use x86_64 and aarch64 as emu/target pair) +static int is_simple_type_ptr_to_simple(type_t *typ, int *needs_D, int *needs_my, khash_t(conv_map) *conv_map) { + if (typ->converted) { + // printf("Warning: %s uses a converted type but is not the converted type\n", string_content(obj_name)); + *needs_my = 1; + } else if (kh_get(conv_map, conv_map, typ) != kh_end(conv_map)) { + // printf("Warning: %s uses a converted type but is not the converted type\n", string_content(obj_name)); + *needs_my = 1; + } + switch (typ->typ) { + case TYPE_BUILTIN: + return 1; // Assume pointers to builtin are simple + case TYPE_ARRAY: + if (typ->val.array.array_sz == (size_t)-1) return 0; // VLA are not simple + return is_simple_type_ptr_to_simple(typ->val.array.typ, needs_D, needs_my, conv_map); + case TYPE_STRUCT_UNION: + if (typ->_internal_use) return 1; // Recursive structures are OK as long as every other members are OK + if (!typ->val.st->is_defined) return 1; // Undefined structures are OK since they are opaque + if (typ->val.st->is_simple) return 1; + typ->_internal_use = 1; + for (size_t i = 0; i < typ->val.st->nmembers; ++i) { + st_member_t *mem = &typ->val.st->members[i]; + if (!is_simple_type_ptr_to_simple(mem->typ, needs_D, needs_my, conv_map)) { + typ->_internal_use = 0; + return 0; + } + } + typ->_internal_use = 0; + return 1; + case TYPE_ENUM: + return is_simple_type_ptr_to_simple(typ->val.typ, needs_D, needs_my, conv_map); + case TYPE_PTR: + return is_simple_type_ptr_to_simple(typ->val.typ, needs_D, needs_my, conv_map); + case TYPE_FUNCTION: + *needs_my = 1; + return 1; + default: + printf("Error: is_simple_type_ptr_to_simple on unknown type %u\n", typ->typ); + return 0; + } +} +static int is_simple_type_simple(type_t *typ, int *needs_D, int *needs_my, khash_t(conv_map) *conv_map) { + if (typ->converted) { + // printf("Warning: %s uses a converted type but is not the converted type\n", string_content(obj_name)); + *needs_my = 1; + } else if (kh_get(conv_map, conv_map, typ) != kh_end(conv_map)) { + // printf("Warning: %s uses a converted type but is not the converted type\n", string_content(obj_name)); + *needs_my = 1; + } + switch (typ->typ) { + case TYPE_BUILTIN: + return (typ->val.builtin != BTT_FLOAT128) + && (typ->val.builtin != BTT_CFLOAT128) + && (typ->val.builtin != BTT_IFLOAT128); // Assume builtin are simple except for __float128 + case TYPE_ARRAY: + if (typ->val.array.array_sz == (size_t)-1) return 0; // VLA are not simple + return is_simple_type_ptr_to_simple(typ->val.array.typ, needs_D, needs_my, conv_map); + case TYPE_STRUCT_UNION: + if (typ->_internal_use) return 1; // Recursive structures are OK as long as every other members are OK + // if (!typ->val.st->is_defined) return 1; // Undefined structures are OK since they are opaque + // To be safe, don't allow opaque structures + if (!typ->val.st->is_defined) return 0; + typ->_internal_use = 1; + for (size_t i = 0; i < typ->val.st->nmembers; ++i) { + st_member_t *mem = &typ->val.st->members[i]; + if (!is_simple_type_simple(mem->typ, needs_D, needs_my, conv_map)) { + typ->_internal_use = 0; + return 0; + } + } + typ->_internal_use = 0; + return 1; + case TYPE_ENUM: + return is_simple_type_simple(typ->val.typ, needs_D, needs_my, conv_map); + case TYPE_PTR: + return is_simple_type_ptr_to_simple(typ->val.typ, needs_D, needs_my, conv_map); + case TYPE_FUNCTION: + // Functions should be handled differently (GO instead of DATA) + return 0; + default: + printf("Error: is_simple_type_simple on unknown type %u\n", typ->typ); + return 0; + } +} + +static int convert_type_simple(string_t *dest, type_t *emu_typ, type_t *target_typ, + int is_ret, int *needs_D, int *needs_my, khash_t(conv_map) *conv_map, string_t *obj_name) { + if (emu_typ->converted) { + if (!string_add_string(dest, emu_typ->converted)) { + printf("Error: failed to add explicit type conversion\n"); + return 0; + } + return 1; + } + khiter_t it = kh_get(conv_map, conv_map, emu_typ); + if (it != kh_end(conv_map)) { + if (!string_add_string(dest, kh_val(conv_map, it))) { + printf("Error: failed to add explicit type conversion\n"); + return 0; + } + return 1; + } + if ((emu_typ->is_atomic) || (target_typ->is_atomic)) { + printf("Error: TODO: convert_type_simple for atomic types\n"); + return 0; + } + if (emu_typ->typ != target_typ->typ) { + printf("Error: %s: %s type is different between emulated and target\n", string_content(obj_name), is_ret ? "return" : "argument"); + *needs_my = 1; + } + switch (emu_typ->typ) { + case TYPE_BUILTIN: { + int has_char = 0; + char c; + switch (emu_typ->val.builtin) { + case BTT_VOID: has_char = 1; c = 'v'; break; + case BTT_BOOL: has_char = 1; c = 'i'; break; + case BTT_CHAR: has_char = 1; c = 'c'; break; + case BTT_SCHAR: has_char = 1; c = 'c'; break; + case BTT_UCHAR: has_char = 1; c = 'C'; break; + case BTT_SHORT: has_char = 1; c = 'w'; break; + case BTT_SSHORT: has_char = 1; c = 'w'; break; + case BTT_USHORT: has_char = 1; c = 'W'; break; + case BTT_INT: has_char = 1; c = 'i'; break; + case BTT_SINT: has_char = 1; c = 'i'; break; + case BTT_UINT: has_char = 1; c = 'u'; break; + case BTT_LONG: has_char = 1; c = 'l'; break; + case BTT_SLONG: has_char = 1; c = 'l'; break; + case BTT_ULONG: has_char = 1; c = 'L'; break; + case BTT_LONGLONG: has_char = 1; c = 'I'; break; + case BTT_SLONGLONG: has_char = 1; c = 'I'; break; + case BTT_ULONGLONG: has_char = 1; c = 'U'; break; + case BTT_INT128: has_char = 1; c = 'H'; break; // TODO: Is 'H' for signed and unsigned? + case BTT_SINT128: has_char = 1; c = 'H'; break; // Is 'H' for signed and unsigned? + case BTT_UINT128: has_char = 1; c = 'H'; break; // Is 'H' for signed and unsigned? + case BTT_S8: has_char = 1; c = 'c'; break; + case BTT_U8: has_char = 1; c = 'C'; break; + case BTT_S16: has_char = 1; c = 'w'; break; + case BTT_U16: has_char = 1; c = 'W'; break; + case BTT_S32: has_char = 1; c = 'i'; break; + case BTT_U32: has_char = 1; c = 'u'; break; + case BTT_S64: has_char = 1; c = 'I'; break; + case BTT_U64: has_char = 1; c = 'U'; break; + case BTT_FLOAT: has_char = 1; c = 'f'; break; + case BTT_CFLOAT: has_char = 1; c = 'x'; break; + case BTT_IFLOAT: has_char = 1; c = 'f'; break; + case BTT_DOUBLE: has_char = 1; c = 'd'; break; + case BTT_CDOUBLE: has_char = 1; c = 'X'; break; + case BTT_IDOUBLE: has_char = 1; c = 'd'; break; + case BTT_LONGDOUBLE: *needs_D = 1; has_char = 1; c = 'D'; break; + case BTT_CLONGDOUBLE: *needs_D = 1; has_char = 1; c = 'Y'; break; + case BTT_ILONGDOUBLE: *needs_D = 1; has_char = 1; c = 'D'; break; + case BTT_FLOAT128: printf("Error: TODO: %s\n", builtin2str[emu_typ->val.builtin]); return 0; + case BTT_CFLOAT128: printf("Error: TODO: %s\n", builtin2str[emu_typ->val.builtin]); return 0; + case BTT_IFLOAT128: printf("Error: TODO: %s\n", builtin2str[emu_typ->val.builtin]); return 0; + case BTT_VA_LIST: *needs_my = 1; has_char = 1; c = 'A'; break; + default: + printf("Error: convert_type_simple on unknown builtin %u\n", emu_typ->val.builtin); + return 0; + } + if (has_char) { + if (!string_add_char(dest, c)) { + printf("Error: failed to add type char for %s\n", builtin2str[emu_typ->val.builtin]); + return 0; + } + return 1; + } else { + printf("Internal error: unknown state builtin=%u\n", emu_typ->val.builtin); + return 0; + } } + case TYPE_ARRAY: + printf("Error: convert_type_simple on raw array\n"); + return 0; + case TYPE_STRUCT_UNION: + if (!emu_typ->is_validated || emu_typ->is_incomplete) { + printf("Error: incomplete structure for %s\n", string_content(obj_name)); + return 0; + } + if (is_ret) { + if (emu_typ->szinfo.size <= 8) { + if (!string_add_char(dest, 'U')) { + printf("Error: failed to add type char for structure return\n"); + return 0; + } + return 1; + } else if (emu_typ->szinfo.size <= 16) { + if (!string_add_char(dest, 'H')) { + printf("Error: failed to add type char for large structure return\n"); + return 0; + } + return 1; + } else { + if (!string_add_char(dest, 'p')) { + printf("Error: failed to add type char for very large structure return\n"); + return 0; + } + return 1; + } + } else { + if ((emu_typ->val.st->nmembers == 1) && (target_typ->typ == TYPE_STRUCT_UNION) && (target_typ->val.st->nmembers == 1)) { + return convert_type_simple(dest, emu_typ->val.st->members[0].typ, target_typ->val.st->members[0].typ, is_ret, needs_D, needs_my, conv_map, obj_name); + } + printf("Error: TODO: convert_type_simple on structure as argument (%s)\n", string_content(obj_name)); + return 0; + } + case TYPE_ENUM: + if (target_typ->typ == TYPE_ENUM) { + return convert_type_simple(dest, emu_typ->val.typ, target_typ->val.typ, is_ret, needs_D, needs_my, conv_map, obj_name); + } else { + printf("Fatal: convert_type_simple(enum, non-enum)\n"); + return 0; + } + case TYPE_PTR: + if (is_simple_type_ptr_to_simple(emu_typ->val.typ, needs_D, needs_my, conv_map)) { + if (!string_add_char(dest, 'p')) { + printf("Error: failed to add type char for simple pointer\n"); + return 0; + } + return 1; + } else { + *needs_my = 1; + if (!string_add_char(dest, 'p')) { + printf("Error: failed to add type char for complex pointer\n"); + return 0; + } + return 1; + } + case TYPE_FUNCTION: + printf("Error: convert_type_simple on raw function\n"); + return 0; + default: + printf("Error: convert_type_simple on unknown type %u\n", emu_typ->typ); + return 0; + } +} +static int convert_type_post_simple(string_t *dest, type_t *emu_typ, type_t *target_typ, string_t *obj_name) { + if (emu_typ->converted) return 1; + if (emu_typ->is_atomic) { + printf("Error: TODO: convert_type_post_simple for atomic types\n"); + return 0; + } + (void)target_typ; + switch (emu_typ->typ) { + case TYPE_BUILTIN: return 1; + case TYPE_ARRAY: return 1; + case TYPE_STRUCT_UNION: + if (!emu_typ->is_validated || emu_typ->is_incomplete) { + printf("Error: incomplete structure for %s\n", string_content(obj_name)); + return 0; + } + if (emu_typ->szinfo.size <= 16) { + return 1; + } else { + if (!string_add_char(dest, 'p')) { + printf("Error: failed to add type char for very large structure return as parameter\n"); + return 0; + } + return 2; + } + case TYPE_ENUM: return 1; + case TYPE_PTR: return 1; + case TYPE_FUNCTION: return 1; + } + printf("Error: convert_type_post_simple on unknown type %u\n", emu_typ->typ); + return 0; +} + +int solve_request_simple(request_t *req, type_t *emu_typ, type_t *target_typ, khash_t(conv_map) *conv_map) { + if (emu_typ->typ != target_typ->typ) { + printf("Error: %s: emulated and target types are different (emulated is %u, target is %u)\n", + string_content(req->obj_name), emu_typ->typ, target_typ->typ); + return 0; + } + if (emu_typ->typ == TYPE_FUNCTION) { + int needs_D = 0, needs_my = req->def.fun.typ && (req->def.rty == RQT_FUN_MY), needs_2 = 0; + int convert_post; + size_t idx_conv; + req->val.fun.typ = string_new(); + if (!req->val.fun.typ) { + printf("Error: failed to create function type string\n"); + return 0; + } + if (!convert_type_simple(req->val.fun.typ, emu_typ->val.fun.ret, target_typ->val.fun.ret, 1, &needs_D, &needs_my, conv_map, req->obj_name)) + goto fun_fail; + idx_conv = string_len(req->val.fun.typ); + if (!string_add_char(req->val.fun.typ, 'F')) { + printf("Error: failed to add convention char\n"); + goto fun_fail; + } + convert_post = convert_type_post_simple(req->val.fun.typ, emu_typ->val.fun.ret, target_typ->val.fun.ret, req->obj_name); + if (!convert_post) goto fun_fail; + if (emu_typ->val.fun.nargs == (size_t)-1) { + printf("Warning: %s: assuming empty specification is void specification\n", string_content(req->obj_name)); + if (convert_post == 1) { + if (!string_add_char(req->val.fun.typ, 'v')) { + printf("Error: failed to add void specification char\n"); + goto fun_fail; + } + } + } else if (!emu_typ->val.fun.nargs && !emu_typ->val.fun.has_varargs) { + if (convert_post == 1) { + if (!string_add_char(req->val.fun.typ, 'v')) { + printf("Error: failed to add void specification char\n"); + goto fun_fail; + } + } + } else { + for (size_t i = 0; i < emu_typ->val.fun.nargs; ++i) { + if (!convert_type_simple(req->val.fun.typ, emu_typ->val.fun.args[i], target_typ->val.fun.args[i], 0, &needs_D, &needs_my, conv_map, req->obj_name)) + goto fun_fail; + } + if (emu_typ->val.fun.has_varargs) { + if (req->def.fun.typ + && (string_len(req->def.fun.typ) == string_len(req->val.fun.typ) + 1) + && !strncmp(string_content(req->def.fun.typ), string_content(req->val.fun.typ), string_len(req->val.fun.typ)) + && ((string_content(req->def.fun.typ)[string_len(req->val.fun.typ)] == 'M') + || (string_content(req->def.fun.typ)[string_len(req->val.fun.typ)] == 'N'))) { + if (!string_add_char(req->val.fun.typ, string_content(req->def.fun.typ)[string_len(req->val.fun.typ)])) { + printf("Error: failed to add type char '%c' for %s\n", + string_content(req->def.fun.typ)[string_len(req->val.fun.typ)], + builtin2str[emu_typ->val.builtin]); + goto fun_fail; + } + } else { + needs_my = 1; + if (!string_add_char(req->val.fun.typ, 'V')) { + printf("Error: failed to add type char 'V' for %s\n", builtin2str[emu_typ->val.builtin]); + goto fun_fail; + } + } + } + } + + // fun_succ: + // Add 'E' by default, unless we have the same function as before + if (needs_my && (req->default_comment + || (req->def.rty != RQT_FUN_MY) + || strcmp(string_content(req->def.fun.typ), string_content(req->val.fun.typ)))) { + if (!string_add_char_at(req->val.fun.typ, 'E', idx_conv + 1)) { + printf("Error: failed to add emu char\n"); + goto fun_fail; + } + } + if (req->def.fun.typ && (req->def.rty == RQT_FUN_2) && !needs_my) { + needs_2 = 1; + req->val.fun.fun2 = string_dup(req->def.fun.fun2); + if (!req->val.fun.fun2) { + printf("Error: failed to duplicate string (request for function %s with default redirection)\n", string_content(req->obj_name)); + return 0; + } + } else if (req->def.fun.typ && (req->def.rty == RQT_FUN_D) && !needs_my) { + needs_2 = 0; + req->val.fun.fun2 = string_dup(req->def.fun.fun2); + if (!req->val.fun.fun2) { + printf("Error: failed to duplicate string (request for function %s with long double types)\n", string_content(req->obj_name)); + return 0; + } + } else if (!needs_my && needs_D) { + req->val.fun.fun2 = string_new(); + if (!req->val.fun.fun2) { + printf("Error: failed to create empty string (request for function %s with long double types)\n", string_content(req->obj_name)); + return 0; + } + } + req->val.rty = + needs_my ? RQT_FUN_MY : + needs_2 ? RQT_FUN_2 : + needs_D ? RQT_FUN_D : RQT_FUN; + req->has_val = 1; + return 1; + + fun_fail: + string_del(req->val.fun.typ); + return 0; + } else { + int needs_D = 0, needs_my = req->def.dat.has_size && (req->def.rty == RQT_DATAM); + if (is_simple_type_simple(emu_typ, &needs_D, &needs_my, conv_map)) { + // TODO: Hmm... + req->val.rty = needs_my ? RQT_DATAM : req->def.rty; + req->val.dat.has_size = 1; + req->val.dat.sz = emu_typ->szinfo.size; + req->has_val = 1; + return 1; + } else { + log_TODO_nopos("solve_request_simple for data %s with non-simple type ", string_content(req->obj_name)); + type_print(emu_typ); + printf("\n"); + return 0; + } + } +} +int solve_request_map_simple(request_t *req, khash_t(decl_map) *emu_decl_map, khash_t(decl_map) *target_decl_map, khash_t(conv_map) *conv_map) { + int hasemu = 0, hastarget = 0; + khiter_t emuit, targetit; + emuit = kh_get(decl_map, emu_decl_map, string_content(req->obj_name)); + if (emuit == kh_end(emu_decl_map)) { + goto failed; + } + if ((kh_val(emu_decl_map, emuit)->storage == STORAGE_STATIC) || (kh_val(emu_decl_map, emuit)->storage == STORAGE_TLS_STATIC)) { + goto failed; + } + targetit = kh_get(decl_map, target_decl_map, string_content(req->obj_name)); + if (targetit == kh_end(target_decl_map)) { + goto failed; + } + if ((kh_val(target_decl_map, targetit)->storage == STORAGE_STATIC) || (kh_val(target_decl_map, targetit)->storage == STORAGE_TLS_STATIC)) { + goto failed; + } + return solve_request_simple(req, kh_val(emu_decl_map, emuit)->typ, kh_val(target_decl_map, targetit)->typ, conv_map); + +failed: + if (string_content(req->obj_name)[0] != '_') { + if (!hasemu && !hastarget) { + printf("Error: %s was not declared in the emulated and target architectures\n", string_content(req->obj_name)); + } else if (!hasemu) { + printf("Error: %s was not declared only in the emulated architecture\n", string_content(req->obj_name)); + } else if (!hastarget) { + printf("Error: %s was not declared only in the target architecture\n", string_content(req->obj_name)); + } else { + printf("Error: internal error: failed but found for %s\n", string_content(req->obj_name)); + } + } + return 0; +} +int solve_references_simple(VECTOR(references) *refs, khash_t(decl_map) *emu_decl_map, khash_t(decl_map) *target_decl_map, khash_t(conv_map) *conv_map) { + int ret = 1; + int cond_depth = 0, ok_depth = 0; + vector_for(references, ref, refs) { + switch (ref->typ) { + case REF_REQ: + if (ok_depth == cond_depth) { + if (!solve_request_map_simple(&ref->req, emu_decl_map, target_decl_map, conv_map)) ret = 0; + } else { + ref->req.ignored = 1; + } + break; + case REF_LINE: + break; + case REF_IFDEF: + ++cond_depth; + break; + case REF_IFNDEF: + if (cond_depth == ok_depth) ++ok_depth; + ++cond_depth; + break; + case REF_ELSE: + if (cond_depth == ok_depth) --ok_depth; + else if (cond_depth == ok_depth + 1) ++ok_depth; + break; + case REF_ENDIF: + if (cond_depth == ok_depth) --ok_depth; + --cond_depth; + break; + } + } + return ret; +} + +// Complex versions +enum safeness_e { + SAFE_ABORT, // Failure + SAFE_OK, // Simple, can output 'p' + SAFE_EXPAND, // Complex but automatable, needs to output 'b..._' +}; +static enum safeness_e get_safeness_ptr(type_t *emu_typ, type_t *target_typ, int *needs_D, int *needs_my, khash_t(conv_map) *conv_map, string_t *obj_name) { + if (emu_typ->typ != target_typ->typ) { + printf("Error: %s: pointer with different types between emu and target\n", string_content(obj_name)); + return SAFE_ABORT; + } + if (emu_typ->converted) { + printf("Warning: %s uses a converted type but is not the converted type\n", string_content(obj_name)); + *needs_my = 1; + return SAFE_OK; + } else if (kh_get(conv_map, conv_map, emu_typ) != kh_end(conv_map)) { + printf("Warning: %s uses a converted type but is not the converted type\n", string_content(obj_name)); + *needs_my = 1; + return SAFE_OK; + } + switch (emu_typ->typ) { + case TYPE_BUILTIN: + if (emu_typ->val.builtin != target_typ->val.builtin) { + // printf("Warning: %s: emu and target have pointers to different size type\n", string_content(obj_name)); + return SAFE_ABORT; + } + if (emu_typ->szinfo.size != target_typ->szinfo.size) { + // printf("Warning: %s: emu and target have pointers to different size type\n", string_content(obj_name)); + return SAFE_EXPAND; + } + /* if (emu_typ->szinfo.align != target_typ->szinfo.align) { + // printf("Warning: %s: emu and target have pointers to different alignment type\n", string_content(obj_name)); + return SAFE_EXPAND; + } */ + // Assume pointers to builtins of the same size and alignment are simple + return SAFE_OK; + case TYPE_ARRAY: + if (emu_typ->szinfo.size != target_typ->szinfo.size) { + // printf("Warning: %s: emu and target have pointers to arrays with different size type\n", string_content(obj_name)); + return SAFE_EXPAND; + } + if (emu_typ->szinfo.align != target_typ->szinfo.align) { + // printf("Warning: %s: emu and target have pointers to arrays with different alignment type\n", string_content(obj_name)); + return SAFE_EXPAND; + } + if (emu_typ->val.array.array_sz != target_typ->val.array.array_sz) { + printf("Error: %s: emu and target have arrays of different size\n", string_content(obj_name)); + return SAFE_ABORT; // Shouldn't happen + } + // Elements also have the same size + if ((emu_typ->val.array.array_sz == (size_t)-1) || (target_typ->val.array.array_sz == (size_t)-1)) { + printf("Error: %s: has variable length arrays\n", string_content(obj_name)); + return SAFE_ABORT; // VLA require manual intervention + } + return get_safeness_ptr(emu_typ->val.array.typ, target_typ->val.array.typ, needs_D, needs_my, conv_map, obj_name); + case TYPE_STRUCT_UNION: + if (emu_typ->val.st->is_struct != target_typ->val.st->is_struct) { + printf("Error: %s: incoherent struct/union type between emulated and target architectures for %s\n", + string_content(obj_name), emu_typ->val.st->tag ? string_content(emu_typ->val.st->tag) : ""); + return SAFE_ABORT; + } + if (emu_typ->is_incomplete != target_typ->is_incomplete) { + printf("Error: %s: incoherent struct/union completion type between emulated and target architectures for %s\n", + string_content(obj_name), emu_typ->val.st->tag ? string_content(emu_typ->val.st->tag) : ""); + return SAFE_ABORT; + } + if (emu_typ->is_incomplete) { + return SAFE_OK; // Undefined structures are OK since they are opaque + } + if (emu_typ->val.st->nmembers != target_typ->val.st->nmembers) { + printf("Error: %s: struct/union %s has different number of members between emulated and target architectures\n", + string_content(obj_name), emu_typ->val.st->tag ? string_content(emu_typ->val.st->tag) : ""); + return SAFE_ABORT; + } + if (emu_typ->val.st->has_self_recursion) { + // Self-reference implies manual intervention + *needs_my = 1; + return SAFE_OK; + } + if (emu_typ->val.st->nmembers == 1) { + // Assume structs and unions of one element has the same ABI as that element directly + return get_safeness_ptr(emu_typ->val.st->members[0].typ, target_typ->val.st->members[0].typ, needs_D, needs_my, conv_map, obj_name); + } + if (emu_typ->val.st->is_struct) { + // Structures are OK if all named members are OK and at the same memory offset + for (size_t i = 0; i < emu_typ->val.st->nmembers; ++i) { + st_member_t *emu_mem = &emu_typ->val.st->members[i]; + st_member_t *target_mem = &target_typ->val.st->members[i]; + if (emu_mem->name) { + if ((emu_mem->byte_offset != target_mem->byte_offset) || (emu_mem->bit_offset != target_mem->bit_offset)) { + return SAFE_EXPAND; + } + enum safeness_e saf = get_safeness_ptr(emu_mem->typ, target_mem->typ, needs_D, needs_my, conv_map, obj_name); + if (saf != SAFE_OK) return saf; + } + } + return SAFE_OK; + } else { + // Unions are OK if all named members are OK (memory offset is always 0) + for (size_t i = 0; i < emu_typ->val.st->nmembers; ++i) { + st_member_t *emu_mem = &emu_typ->val.st->members[i]; + st_member_t *target_mem = &target_typ->val.st->members[i]; + if (emu_mem->name) { + enum safeness_e saf = get_safeness_ptr(emu_mem->typ, target_mem->typ, needs_D, needs_my, conv_map, obj_name); + if (saf != SAFE_OK) return saf; + } + } + return SAFE_OK; + } + case TYPE_ENUM: + return get_safeness_ptr(emu_typ->val.typ, target_typ->val.typ, needs_D, needs_my, conv_map, obj_name); + case TYPE_PTR: + return SAFE_EXPAND; + case TYPE_FUNCTION: + *needs_my = 1; + return SAFE_OK; + default: + printf("Error: get_safeness_ptr on unknown type %u\n", emu_typ->typ); + return SAFE_ABORT; + } +} +static enum safeness_e get_safeness(type_t *emu_typ, type_t *target_typ, int *needs_D, int *needs_my, khash_t(conv_map) *conv_map, string_t *obj_name) { + if (emu_typ->typ != target_typ->typ) { + printf("Error: %s: data with different types between emu and target\n", string_content(obj_name)); + return SAFE_ABORT; // Invalid type + } + if (emu_typ->converted) { + // printf("Warning: %s uses a converted type but is not the converted type\n", string_content(obj_name)); + *needs_my = 1; + return SAFE_OK; + } else if (kh_get(conv_map, conv_map, emu_typ) != kh_end(conv_map)) { + // printf("Warning: %s uses a converted type but is not the converted type\n", string_content(obj_name)); + *needs_my = 1; + return SAFE_OK; + } + switch (emu_typ->typ) { + case TYPE_BUILTIN: + if ((emu_typ->val.builtin != target_typ->val.builtin) + || (emu_typ->szinfo.size != target_typ->szinfo.size) + || (emu_typ->szinfo.align != target_typ->szinfo.align) + || (emu_typ->val.builtin == BTT_FLOAT128) + || (emu_typ->val.builtin == BTT_CFLOAT128) + || (emu_typ->val.builtin == BTT_IFLOAT128)) { + // Assume all builtins are simple except for __float128 and those with different size or alignment + *needs_my = 1; + } + return SAFE_OK; + case TYPE_ARRAY: + if (emu_typ->szinfo.size != target_typ->szinfo.size) { + // printf("Warning: %s: emu and target have pointers to different size type\n", string_content(obj_name)); + return SAFE_EXPAND; + } + if (emu_typ->szinfo.align != target_typ->szinfo.align) { + // printf("Warning: %s: emu and target have pointers to different alignment type\n", string_content(obj_name)); + return SAFE_EXPAND; + } + if (emu_typ->val.array.array_sz != target_typ->val.array.array_sz) { + printf("Error: %s: emu and target have arrays of different size\n", string_content(obj_name)); + return SAFE_ABORT; // Shouldn't happen + } + // Elements also have the same size + if ((emu_typ->val.array.array_sz == (size_t)-1) || (target_typ->val.array.array_sz == (size_t)-1)) { + printf("Error: %s: has variable length arrays\n", string_content(obj_name)); + return SAFE_ABORT; // VLA require manual intervention + } + return get_safeness_ptr(emu_typ->val.array.typ, target_typ->val.array.typ, needs_D, needs_my, conv_map, obj_name); + case TYPE_STRUCT_UNION: + if (emu_typ->val.st->is_struct != target_typ->val.st->is_struct) { + printf("Error: %s: incoherent struct/union type between emulated and target architectures for %s\n", + string_content(obj_name), emu_typ->val.st->tag ? string_content(emu_typ->val.st->tag) : ""); + return SAFE_ABORT; + } + if (emu_typ->is_incomplete != target_typ->is_incomplete) { + printf("Error: %s: incoherent struct/union completion type between emulated and target architectures for %s\n", + string_content(obj_name), emu_typ->val.st->tag ? string_content(emu_typ->val.st->tag) : ""); + return SAFE_ABORT; + } + if (emu_typ->is_incomplete) { + printf("Warning: %s: undefined struct/union %s considered as simple\n", + string_content(obj_name), emu_typ->val.st->tag ? string_content(emu_typ->val.st->tag) : ""); + return SAFE_OK; // Assume undefined structures are OK since they are opaque + } + if (emu_typ->val.st->nmembers != target_typ->val.st->nmembers) { + printf("Error: %s: struct/union %s has different number of members between emulated and target architectures\n", + string_content(obj_name), emu_typ->val.st->tag ? string_content(emu_typ->val.st->tag) : ""); + return SAFE_ABORT; + } + if (emu_typ->val.st->has_self_recursion) { + // Self-reference implies manual intervention + *needs_my = 1; + return SAFE_OK; + } + for (size_t i = 0; i < emu_typ->val.st->nmembers; ++i) { + switch (get_safeness(emu_typ->val.st->members[i].typ, target_typ->val.st->members[i].typ, needs_D, needs_my, conv_map, obj_name)) { + case SAFE_OK: break; + case SAFE_ABORT: + case SAFE_EXPAND: + default: return SAFE_ABORT; + } + } + return SAFE_OK; + case TYPE_ENUM: + return get_safeness(emu_typ->val.typ, target_typ->val.typ, needs_D, needs_my, conv_map, obj_name); + case TYPE_PTR: + // Pointers have different sizes here + return SAFE_EXPAND; + case TYPE_FUNCTION: + // Functions should be handled differently (GO instead of DATA) + return SAFE_ABORT; + default: + printf("Error: get_safeness on unknown type %u\n", emu_typ->typ); + return SAFE_ABORT; + } +} + +// needs_S != NULL iff type is return +static int convert_type(string_t *dest, type_t *emu_typ, type_t *target_typ, int allow_nesting, + _Bool *needs_S, int *needs_D, int *needs_my, khash_t(conv_map) *conv_map, string_t *obj_name) { + if (emu_typ->converted) { + if (!string_add_string(dest, emu_typ->converted)) { + printf("Error: failed to add explicit type conversion\n"); + return 0; + } + return 1; + } + khiter_t it = kh_get(conv_map, conv_map, emu_typ); + if (it != kh_end(conv_map)) { + if (!string_add_string(dest, kh_val(conv_map, it))) { + printf("Error: failed to add explicit type conversion\n"); + return 0; + } + return 1; + } + if ((emu_typ->is_atomic) || (target_typ->is_atomic)) { + printf("Error: TODO: convert_type for atomic types\n"); + return 0; + } + if (emu_typ->typ != target_typ->typ) { + printf("Error: %s: %s type is different between emulated and target\n", string_content(obj_name), needs_S ? "return" : "argument"); + return 0; + } + switch (emu_typ->typ) { + case TYPE_BUILTIN: { + int has_char = 0; + char c; + switch (emu_typ->val.builtin) { + case BTT_VOID: has_char = 1; c = 'v'; break; + case BTT_BOOL: has_char = 1; c = 'i'; break; + case BTT_CHAR: has_char = 1; c = 'c'; break; + case BTT_SCHAR: has_char = 1; c = 'c'; break; + case BTT_UCHAR: has_char = 1; c = 'C'; break; + case BTT_SHORT: has_char = 1; c = 'w'; break; + case BTT_SSHORT: has_char = 1; c = 'w'; break; + case BTT_USHORT: has_char = 1; c = 'W'; break; + case BTT_INT: has_char = 1; c = 'i'; break; + case BTT_SINT: has_char = 1; c = 'i'; break; + case BTT_UINT: has_char = 1; c = 'u'; break; + case BTT_LONG: has_char = 1; c = 'l'; break; + case BTT_SLONG: has_char = 1; c = 'l'; break; + case BTT_ULONG: has_char = 1; c = 'L'; break; + case BTT_LONGLONG: has_char = 1; c = 'I'; break; + case BTT_SLONGLONG: has_char = 1; c = 'I'; break; + case BTT_ULONGLONG: has_char = 1; c = 'U'; break; + case BTT_INT128: has_char = 1; c = 'H'; break; + case BTT_SINT128: has_char = 1; c = 'H'; break; + case BTT_UINT128: has_char = 1; c = 'H'; break; + case BTT_S8: has_char = 1; c = 'c'; break; + case BTT_U8: has_char = 1; c = 'C'; break; + case BTT_S16: has_char = 1; c = 'w'; break; + case BTT_U16: has_char = 1; c = 'W'; break; + case BTT_S32: has_char = 1; c = 'i'; break; + case BTT_U32: has_char = 1; c = 'u'; break; + case BTT_S64: has_char = 1; c = 'I'; break; + case BTT_U64: has_char = 1; c = 'U'; break; + case BTT_FLOAT: has_char = 1; c = 'f'; break; + case BTT_CFLOAT: has_char = 1; c = 'x'; break; + case BTT_IFLOAT: has_char = 1; c = 'f'; break; + case BTT_DOUBLE: has_char = 1; c = 'd'; break; + case BTT_CDOUBLE: has_char = 1; c = 'X'; break; + case BTT_IDOUBLE: has_char = 1; c = 'd'; break; + case BTT_LONGDOUBLE: *needs_D = 1; has_char = 1; c = 'D'; break; + case BTT_CLONGDOUBLE: *needs_D = 1; has_char = 1; c = 'Y'; break; + case BTT_ILONGDOUBLE: *needs_D = 1; has_char = 1; c = 'D'; break; + case BTT_FLOAT128: printf("Error: TODO: %s\n", builtin2str[emu_typ->val.builtin]); return 0; + case BTT_CFLOAT128: printf("Error: TODO: %s\n", builtin2str[emu_typ->val.builtin]); return 0; + case BTT_IFLOAT128: printf("Error: TODO: %s\n", builtin2str[emu_typ->val.builtin]); return 0; + case BTT_VA_LIST: *needs_my = 1; has_char = 1; c = 'p'; break; + default: + printf("Error: convert_type on unknown builtin %u\n", emu_typ->val.builtin); + return 0; + } + if (has_char) { + if (!string_add_char(dest, c)) { + printf("Error: failed to add type char for complex pointer\n"); + return 0; + } + return 1; + } else { + printf("Internal error: unknown state builtin=%u\n", emu_typ->val.builtin); + return 0; + } } + case TYPE_ARRAY: { + // May come from the content of a pointer or structure + if ((emu_typ->val.array.array_sz == (size_t)-1) || (target_typ->val.array.array_sz == (size_t)-1)) { + printf("Error: %s: has variable length arrays\n", string_content(obj_name)); + return 0; // VLA require manual intervention + } + if (emu_typ->val.array.array_sz != target_typ->val.array.array_sz) { + printf("Error: %s: emu and target have arrays of different size\n", string_content(obj_name)); + return 0; // Shouldn't happen + } + if (!emu_typ->val.array.array_sz) { + // printf("Warning: %s: has zero-length array\n", string_content(obj_name)); + return 1; + } + size_t idx = string_len(dest); + if (!convert_type(dest, emu_typ->val.array.typ, target_typ->val.array.typ, allow_nesting, needs_S, needs_D, needs_my, conv_map, obj_name)) + return 0; + size_t end = string_len(dest); + if (idx == end) return 1; + if (!string_reserve(dest, idx + (end - idx) * emu_typ->val.array.array_sz)) { + printf("Error: failed to reserve string capacity (for array of type conversing length %zu and size %zu)\n", + end - idx, emu_typ->val.array.array_sz); + return 0; + } + for (size_t i = 1; i < emu_typ->val.array.array_sz; ++i) { + memcpy(string_content(dest) + idx + (end - idx) * i, string_content(dest) + idx, end - idx); + // HACKHACKHACK === + string_len(dest) += end - idx; + // === HACKHACKHACK + } + return 1; } + case TYPE_STRUCT_UNION: + if (!emu_typ->is_validated || emu_typ->is_incomplete) { + printf("Error: incomplete structure for %s\n", string_content(obj_name)); + return 0; + } + if (needs_S) { + *needs_S = 1; + // TODO: remove this and add support in the python wrappers for structure returns + if (!string_add_char(dest, 'p')) { + printf("Error: failed to add type char for very large structure return\n"); + return 0; + } + return 1; + } else { + if ((emu_typ->val.st->nmembers == 1) && (target_typ->typ == TYPE_STRUCT_UNION) && (target_typ->val.st->nmembers == 1)) { + return convert_type(dest, emu_typ->val.st->members[0].typ, target_typ->val.st->members[0].typ, allow_nesting, needs_S, needs_D, needs_my, conv_map, obj_name); + } + printf("Error: TODO: convert_type on structure as argument (%s)\n", string_content(obj_name)); + return 0; + } + case TYPE_ENUM: + return convert_type(dest, emu_typ->val.typ, target_typ->val.typ, allow_nesting, needs_S, needs_D, needs_my, conv_map, obj_name); + case TYPE_PTR: + switch (get_safeness_ptr(emu_typ->val.typ, target_typ->val.typ, needs_D, needs_my, conv_map, obj_name)) { + default: + printf("Internal error: %s: pointer to unknown type\n", string_content(obj_name)); + return 0; + + case SAFE_ABORT: + return 0; + + case SAFE_OK: + if (!string_add_char(dest, 'p')) { + printf("Error: failed to add type char for simple pointer\n"); + return 0; + } + return 1; + + case SAFE_EXPAND: + if (!allow_nesting) { + // TODO remove this with a better rebuild_wrappers.py + *needs_my = 1; + if (!string_add_char(dest, 'p')) { + printf("Error: failed to add type char for simple pointer\n"); + return 0; + } + return 1; + } + if (!string_add_char(dest, emu_typ->is_const ? 'r' : 'b')) { + printf("Error: failed to add start type char for wrapping pointer\n"); + return 0; + } + // Find the underlying type to convert + emu_typ = emu_typ->val.typ; + target_typ = target_typ->val.typ; + do_expanded: + switch (emu_typ->typ) { + case TYPE_BUILTIN: + if (!convert_type(dest, emu_typ, target_typ, 0, needs_S, needs_D, needs_my, conv_map, obj_name)) { + return 0; + } + break; + case TYPE_ARRAY: + if (!convert_type(dest, emu_typ, target_typ, 0, needs_S, needs_D, needs_my, conv_map, obj_name)) { + return 0; + } + break; + case TYPE_STRUCT_UNION: + if (!emu_typ->val.st->is_defined) { + printf("Internal error: EXPAND with undefined struct/union ptr\n"); + return 0; + } + if (emu_typ->val.st->nmembers == 1) { // Single-member struct/union + emu_typ = emu_typ->val.st->members[0].typ; + target_typ = target_typ->val.st->members[0].typ; + goto do_expanded; + } + for (size_t i = 0; i < emu_typ->val.st->nmembers; ++i) { + if (!convert_type(dest, emu_typ->val.st->members[i].typ, target_typ->val.st->members[i].typ, 0, needs_S, needs_D, needs_my, conv_map, obj_name)) { + return 0; + } + } + break; + case TYPE_ENUM: + emu_typ = emu_typ->val.typ; + target_typ = target_typ->val.typ; + if (!convert_type(dest, emu_typ, target_typ, 0, needs_S, needs_D, needs_my, conv_map, obj_name)) { + return 0; + } + break; + case TYPE_PTR: + if (!convert_type(dest, emu_typ, target_typ, 0, needs_S, needs_D, needs_my, conv_map, obj_name)) { + return 0; + } + break; + case TYPE_FUNCTION: + if (!convert_type(dest, emu_typ, target_typ, 0, needs_S, needs_D, needs_my, conv_map, obj_name)) { + return 0; + } + break; + } + if (!string_add_char(dest, '_')) { + printf("Error: failed to add end type char for wrapping pointer\n"); + return 0; + } + return 1; + } + case TYPE_FUNCTION: + printf("Internal error: convert_type on raw function\n"); + return 1; + default: + printf("Error: convert_type on unknown type %u\n", emu_typ->typ); + return 0; + } +} +// TODO: move this function to the python script (implement correct structure returns) +static int convert_type_post(string_t *dest, type_t *emu_typ, type_t *target_typ, string_t *obj_name) { + if (emu_typ->converted) return 1; + if (emu_typ->is_atomic) { + printf("Error: TODO: convert_type_post for atomic types\n"); + return 0; + } + (void)target_typ; + switch (emu_typ->typ) { + case TYPE_BUILTIN: return 1; + case TYPE_ARRAY: return 1; + case TYPE_STRUCT_UNION: + if (!emu_typ->is_validated || emu_typ->is_incomplete) { + printf("Error: incomplete structure for %s\n", string_content(obj_name)); + return 0; + } + // Hard coded + if (!string_add_char(dest, 'p')) { + printf("Error: failed to add type char for very large structure return as parameter\n"); + return 0; + } + return 2; + case TYPE_ENUM: return 1; + case TYPE_PTR: return 1; + case TYPE_FUNCTION: return 1; + } + printf("Error: convert_type_post on unknown type %u\n", emu_typ->typ); + return 0; +} + +int solve_request(request_t *req, type_t *emu_typ, type_t *target_typ, khash_t(conv_map) *conv_map) { + if (emu_typ->typ != target_typ->typ) { + printf("Error: %s: emulated and target types are different (emulated is %u, target is %u)\n", + string_content(req->obj_name), emu_typ->typ, target_typ->typ); + return 0; + } + if (emu_typ->typ == TYPE_FUNCTION) { + int needs_D = 0, needs_my = req->def.fun.typ && (req->def.rty == RQT_FUN_MY), needs_2 = 0; + int convert_post; + size_t idx_conv; + req->val.fun.typ = string_new(); + if (!req->val.fun.typ) { + printf("Error: failed to create function type string\n"); + return 0; + } + if (!convert_type(req->val.fun.typ, emu_typ->val.fun.ret, target_typ->val.fun.ret, 0, &req->val.fun.needs_S, &needs_D, &needs_my, conv_map, req->obj_name)) + goto fun_fail; + idx_conv = string_len(req->val.fun.typ); + if (!string_add_char(req->val.fun.typ, 'F')) { + printf("Error: failed to add convention char\n"); + goto fun_fail; + } + convert_post = convert_type_post(req->val.fun.typ, emu_typ->val.fun.ret, target_typ->val.fun.ret, req->obj_name); + if (!convert_post) goto fun_fail; + if (emu_typ->val.fun.nargs == (size_t)-1) { + printf("Warning: %s: assuming empty specification is void specification\n", string_content(req->obj_name)); + if (convert_post == 1) { + if (!string_add_char(req->val.fun.typ, 'v')) { + printf("Error: failed to add void specification char\n"); + goto fun_fail; + } + } + } else if (!emu_typ->val.fun.nargs && !emu_typ->val.fun.has_varargs) { + if (convert_post == 1) { + if (!string_add_char(req->val.fun.typ, 'v')) { + printf("Error: failed to add void specification char\n"); + goto fun_fail; + } + } + } else { + for (size_t i = 0; i < emu_typ->val.fun.nargs; ++i) { + if (!convert_type(req->val.fun.typ, emu_typ->val.fun.args[i], target_typ->val.fun.args[i], 1, NULL, &needs_D, &needs_my, conv_map, req->obj_name)) + goto fun_fail; + } + if (emu_typ->val.fun.has_varargs) { + if (req->def.fun.typ + && (string_len(req->def.fun.typ) == string_len(req->val.fun.typ) + 1) + && !strncmp(string_content(req->def.fun.typ), string_content(req->val.fun.typ), string_len(req->val.fun.typ)) + && ((string_content(req->def.fun.typ)[string_len(req->val.fun.typ)] == 'M') + || (string_content(req->def.fun.typ)[string_len(req->val.fun.typ)] == 'N'))) { + if (!string_add_char(req->val.fun.typ, string_content(req->def.fun.typ)[string_len(req->val.fun.typ)])) { + printf("Error: failed to add type char '%c' for %s\n", + string_content(req->def.fun.typ)[string_len(req->val.fun.typ)], + builtin2str[emu_typ->val.builtin]); + goto fun_fail; + } + } else { + needs_my = 1; + if (!string_add_char(req->val.fun.typ, 'V')) { + printf("Error: failed to add type char 'V' for %s\n", builtin2str[emu_typ->val.builtin]); + goto fun_fail; + } + } + } + } + + // fun_succ: + // Add 'E' by default, unless we have the same function as before + if (needs_my && (req->default_comment + || (req->def.rty != RQT_FUN_MY) + || strcmp(string_content(req->def.fun.typ), string_content(req->val.fun.typ)))) { + if (!string_add_char_at(req->val.fun.typ, 'E', idx_conv + 1)) { + printf("Error: failed to add emu char\n"); + goto fun_fail; + } + } + if (req->def.fun.typ && (req->def.rty == RQT_FUN_2) && !needs_my) { + needs_2 = 1; + req->val.fun.fun2 = string_dup(req->def.fun.fun2); + if (!req->val.fun.fun2) { + printf("Error: failed to duplicate string (request for function %s with default redirection)\n", string_content(req->obj_name)); + return 0; + } + } else if (req->def.fun.typ && (req->def.rty == RQT_FUN_D) && !needs_my) { + needs_2 = 0; + req->val.fun.fun2 = string_dup(req->def.fun.fun2); + if (!req->val.fun.fun2) { + printf("Error: failed to duplicate string (request for function %s with long double types)\n", string_content(req->obj_name)); + return 0; + } + } else if (!needs_my && needs_D) { + req->val.fun.fun2 = string_new(); + if (!req->val.fun.fun2) { + printf("Error: failed to create empty string (request for function %s with long double types)\n", string_content(req->obj_name)); + return 0; + } + } + req->val.rty = + needs_my ? RQT_FUN_MY : + needs_2 ? RQT_FUN_2 : + needs_D ? RQT_FUN_D : RQT_FUN; + req->has_val = 1; + return 1; + + fun_fail: + string_del(req->val.fun.typ); + return 0; + } else { + int needs_D = 0, needs_my = req->def.dat.has_size && (req->def.rty == RQT_DATAM); + switch (get_safeness(emu_typ, target_typ, &needs_D, &needs_my, conv_map, req->obj_name)) { + case SAFE_EXPAND: + needs_my = 1; + /* FALLTHROUGH */ + case SAFE_OK: + req->val.rty = needs_my ? RQT_DATAM : req->def.rty; + req->val.dat.has_size = 1; + req->val.dat.sz = emu_typ->szinfo.size; + req->has_val = 1; + return 1; + + case SAFE_ABORT: + default: + log_TODO_nopos("solve_request for data %s with non-simple type ", string_content(req->obj_name)); + type_print(emu_typ); + printf("\n"); + return 0; + } + } +} +int solve_request_map(request_t *req, khash_t(decl_map) *emu_decl_map, khash_t(decl_map) *target_decl_map, khash_t(conv_map) *conv_map) { + int hasemu = 0, hastarget = 0; + khiter_t emuit, targetit; + emuit = kh_get(decl_map, emu_decl_map, string_content(req->obj_name)); + if (emuit == kh_end(emu_decl_map)) { + goto failed; + } + if ((kh_val(emu_decl_map, emuit)->storage == STORAGE_STATIC) || (kh_val(emu_decl_map, emuit)->storage == STORAGE_TLS_STATIC)) { + goto failed; + } + hasemu = 1; + targetit = kh_get(decl_map, target_decl_map, string_content(req->obj_name)); + if (targetit == kh_end(target_decl_map)) { + goto failed; + } + if ((kh_val(target_decl_map, targetit)->storage == STORAGE_STATIC) || (kh_val(target_decl_map, targetit)->storage == STORAGE_TLS_STATIC)) { + goto failed; + } + hastarget = 1; + return solve_request(req, kh_val(emu_decl_map, emuit)->typ, kh_val(target_decl_map, targetit)->typ, conv_map); + +failed: + if (string_content(req->obj_name)[0] != '_') { + if (!hasemu && !hastarget) { + printf("Error: %s was not declared in the emulated and target architectures\n", string_content(req->obj_name)); + } else if (!hasemu) { + printf("Error: %s was not declared only in the emulated architecture\n", string_content(req->obj_name)); + } else if (!hastarget) { + printf("Error: %s was not declared only in the target architecture\n", string_content(req->obj_name)); + } else { + printf("Error: internal error: failed but found for %s\n", string_content(req->obj_name)); + } + } + return 0; +} +int solve_references(VECTOR(references) *refs, khash_t(decl_map) *emu_decl_map, khash_t(decl_map) *target_decl_map, khash_t(conv_map) *conv_map) { + int ret = 1; + int cond_depth = 0, ok_depth = 0; + vector_for(references, ref, refs) { + switch (ref->typ) { + case REF_REQ: + if (ok_depth == cond_depth) { + if (!solve_request_map(&ref->req, emu_decl_map, target_decl_map, conv_map)) ret = 0; + } else { + ref->req.ignored = 1; + } + break; + case REF_LINE: + break; + case REF_IFDEF: + ++cond_depth; + break; + case REF_IFNDEF: + if (cond_depth == ok_depth) ++ok_depth; + ++cond_depth; + break; + case REF_ELSE: + if (cond_depth == ok_depth) --ok_depth; + else if (cond_depth == ok_depth + 1) ++ok_depth; + break; + case REF_ENDIF: + if (cond_depth == ok_depth) --ok_depth; + --cond_depth; + break; + } + } + return ret; +} diff --git a/wrapperhelper/src/generator.h b/wrapperhelper/src/generator.h new file mode 100644 index 0000000000000000000000000000000000000000..89044af785525a5f6fc50b601089ba070b9b0836 --- /dev/null +++ b/wrapperhelper/src/generator.h @@ -0,0 +1,72 @@ +#pragma once + +#ifndef GENERATOR_H +#define GENERATOR_H + +#include + +#include "cstring.h" +#include "lang.h" + +typedef struct request_s { + string_t *obj_name; + _Bool default_comment; + _Bool has_val, ignored; + _Bool weak; + struct { + enum request_type_e { + RQT_FUN, + RQT_FUN_2, + RQT_FUN_MY, + RQT_FUN_D, + + RQT_DATA, + RQT_DATAB, + RQT_DATAM, + } rty; + union { + struct { + string_t *typ; + string_t *fun2; + _Bool needs_S; + } fun; + struct { + int has_size; + size_t sz; + } dat; + }; + } def, val; +} request_t; +typedef struct reference_s { + enum { + REF_REQ, + REF_LINE, + REF_IFDEF, + REF_IFNDEF, + REF_ELSE, + REF_ENDIF, + } typ; + union { + request_t req; + string_t *line; + }; +} reference_t; +VECTOR_DECLARE(references, reference_t) +void request_print(const request_t *req); +void request_print_check(const request_t *req); +void references_print_check(const VECTOR(references) *refs); +void output_from_references(FILE *f, const VECTOR(references) *reqs); + +VECTOR(references) *references_from_file(const char *filename, FILE *f); // Takes ownership of f + +// Simple solvers (emu and target have the same pointer size) +int solve_request_simple(request_t *req, type_t *emu_typ, type_t *target_typ, khash_t(conv_map) *conv_map); +int solve_request_map_simple(request_t *req, khash_t(decl_map) *emu_decl_map, khash_t(decl_map) *target_decl_map, khash_t(conv_map) *conv_map); +int solve_references_simple(VECTOR(references) *reqs, khash_t(decl_map) *emu_decl_map, khash_t(decl_map) *target_decl_map, khash_t(conv_map) *conv_map); + +// Complex solvers (emu and target have different pointer size) +int solve_request(request_t *req, type_t *emu_typ, type_t *target_typ, khash_t(conv_map) *conv_map); +int solve_request_map(request_t *req, khash_t(decl_map) *emu_decl_map, khash_t(decl_map) *target_decl_map, khash_t(conv_map) *conv_map); +int solve_references(VECTOR(references) *reqs, khash_t(decl_map) *emu_decl_map, khash_t(decl_map) *target_decl_map, khash_t(conv_map) *conv_map); + +#endif // GENERATOR_H diff --git a/wrapperhelper/src/khash.h b/wrapperhelper/src/khash.h new file mode 100644 index 0000000000000000000000000000000000000000..57a98bb4deb4ed3f3b89d02fdbd13c17e560c755 --- /dev/null +++ b/wrapperhelper/src/khash.h @@ -0,0 +1,699 @@ +/* The MIT License + + Copyright (c) 2008, 2009, 2011 by Attractive Chaos + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +/* + An example: + +#include "khash.h" +KHASH_MAP_INIT_INT(32, char) +int main() { + int ret, is_missing; + khiter_t k; + khash_t(32) *h = kh_init(32); + k = kh_put(32, h, 5, &ret); + kh_value(h, k) = 10; + k = kh_get(32, h, 10); + is_missing = (k == kh_end(h)); + k = kh_get(32, h, 5); + kh_del(32, h, k); + for (k = kh_begin(h); k != kh_end(h); ++k) + if (kh_exist(h, k)) kh_value(h, k) = 1; + kh_destroy(32, h); + return 0; +} +*/ + +/* + 2013-05-02 (0.2.8): + + * Use quadratic probing. When the capacity is power of 2, stepping function + i*(i+1)/2 guarantees to traverse each bucket. It is better than double + hashing on cache performance and is more robust than linear probing. + + In theory, double hashing should be more robust than quadratic probing. + However, my implementation is probably not for large hash tables, because + the second hash function is closely tied to the first hash function, + which reduce the effectiveness of double hashing. + + Reference: http://research.cs.vt.edu/AVresearch/hashing/quadratic.php + + 2011-12-29 (0.2.7): + + * Minor code clean up; no actual effect. + + 2011-09-16 (0.2.6): + + * The capacity is a power of 2. This seems to dramatically improve the + speed for simple keys. Thank Zilong Tan for the suggestion. Reference: + + - http://code.google.com/p/ulib/ + - http://nothings.org/computer/judy/ + + * Allow to optionally use linear probing which usually has better + performance for random input. Double hashing is still the default as it + is more robust to certain non-random input. + + * Added Wang's integer hash function (not used by default). This hash + function is more robust to certain non-random input. + + 2011-02-14 (0.2.5): + + * Allow to declare global functions. + + 2009-09-26 (0.2.4): + + * Improve portability + + 2008-09-19 (0.2.3): + + * Corrected the example + * Improved interfaces + + 2008-09-11 (0.2.2): + + * Improved speed a little in kh_put() + + 2008-09-10 (0.2.1): + + * Added kh_clear() + * Fixed a compiling error + + 2008-09-02 (0.2.0): + + * Changed to token concatenation which increases flexibility. + + 2008-08-31 (0.1.2): + + * Fixed a bug in kh_get(), which has not been tested previously. + + 2008-08-31 (0.1.1): + + * Added destructor +*/ + + +#ifndef __AC_KHASH_H +#define __AC_KHASH_H + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" + +/*! + @header + + Generic hash table library. + */ + +#define AC_VERSION_KHASH_H "0.2.8" + +#include +#include +#include + +/* compiler specific configuration */ + +#if UINT_MAX == 0xffffffffu +typedef unsigned int khint32_t; +#elif ULONG_MAX == 0xffffffffu +typedef unsigned long khint32_t; +#endif + +#if ULONG_MAX == ULLONG_MAX +typedef unsigned long khint64_t; +#else +typedef unsigned long long khint64_t; +#endif + +#ifdef _MSC_VER +#define kh_inline __inline +#else +#define kh_inline inline +#endif + +typedef khint32_t khint_t; +typedef khint_t khiter_t; + +#define __ac_isempty(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&2) +#define __ac_isdel(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&1) +#define __ac_iseither(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&3) +#define __ac_set_isdel_false(flag, i) (flag[i>>4]&=~(1u<<((i&0xfU)<<1))) +#define __ac_set_isempty_false(flag, i) (flag[i>>4]&=~(2u<<((i&0xfU)<<1))) +#define __ac_set_isboth_false(flag, i) (flag[i>>4]&=~(3u<<((i&0xfU)<<1))) +#define __ac_set_isdel_true(flag, i) (flag[i>>4]|=1u<<((i&0xfU)<<1)) + +#define __ac_fsize(m) ((m) < 16? 1 : (m)>>4) + +#ifndef kroundup32 +#define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) +#endif + +#ifndef kcalloc +#define kcalloc(N,Z) calloc(N,Z) +#endif +#ifndef kmalloc +#define kmalloc(Z) malloc(Z) +#endif +#ifndef krealloc +#define krealloc(P,Z) realloc(P,Z) +#endif +#ifndef kfree +#define kfree(P) free(P) +#endif + +static const double __ac_HASH_UPPER = 0.77; + +#define __KHASH_TYPE(name, khkey_t, khval_t) \ + typedef struct kh_##name##_s{ \ + khint_t n_buckets, size, n_occupied, upper_bound; \ + khint32_t *flags; \ + khkey_t *keys; \ + khval_t *vals; \ + } kh_##name##_t; + +#define __KHASH_PROTOTYPES(name, khkey_t, khval_t) \ + extern kh_##name##_t *kh_init_##name(void); \ + extern void kh_destroy_##name(kh_##name##_t *h); \ + extern void kh_clear_##name(kh_##name##_t *h); \ + extern khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key); \ + extern int kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets); \ + extern khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret); \ + extern void kh_del_##name(kh_##name##_t *h, khint_t x); + +#define __KHASH_IMPL(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \ + SCOPE kh_##name##_t *kh_init_##name(void) { \ + return (kh_##name##_t*)kcalloc(1, sizeof(kh_##name##_t)); \ + } \ + SCOPE void kh_destroy_##name(kh_##name##_t *h) \ + { \ + if (h) { \ + kfree((void *)h->keys); kfree(h->flags); \ + kfree((void *)h->vals); \ + kfree(h); \ + } \ + } \ + SCOPE void kh_clear_##name(kh_##name##_t *h) \ + { \ + if (h && h->flags) { \ + memset(h->flags, 0xaa, __ac_fsize(h->n_buckets) * sizeof(khint32_t)); \ + h->size = h->n_occupied = 0; \ + } \ + } \ + __attribute__((pure)) SCOPE khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key) \ + { \ + if (h->n_buckets) { \ + khint_t k, i, last, mask, step = 0; \ + mask = h->n_buckets - 1; \ + k = __hash_func(key); i = k & mask; \ + last = i; \ + while (!__ac_isempty(h->flags, i) && (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \ + i = (i + (++step)) & mask; \ + if (i == last) return h->n_buckets; \ + } \ + return __ac_iseither(h->flags, i)? h->n_buckets : i; \ + } else return 0; \ + } \ + SCOPE int kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets) \ + { /* This function uses 0.25*n_buckets bytes of working space instead of [sizeof(key_t+val_t)+.25]*n_buckets. */ \ + khint32_t *new_flags = 0; \ + khint_t j = 1; \ + { \ + kroundup32(new_n_buckets); \ + if (new_n_buckets < 4) new_n_buckets = 4; \ + if (h->size >= (khint_t)(new_n_buckets * __ac_HASH_UPPER + 0.5)) j = 0; /* requested size is too small */ \ + else { /* hash table size to be changed (shrink or expand); rehash */ \ + new_flags = (khint32_t*)kmalloc(__ac_fsize(new_n_buckets) * sizeof(khint32_t)); \ + if (!new_flags) return -1; \ + memset(new_flags, 0xaa, __ac_fsize(new_n_buckets) * sizeof(khint32_t)); \ + if (h->n_buckets < new_n_buckets) { /* expand */ \ + khkey_t *new_keys = (khkey_t*)krealloc((void *)h->keys, new_n_buckets * sizeof(khkey_t)); \ + if (!new_keys) { kfree(new_flags); return -1; } \ + h->keys = new_keys; \ + if (kh_is_map) { \ + khval_t *new_vals = (khval_t*)krealloc((void *)h->vals, new_n_buckets * sizeof(khval_t)); \ + if (!new_vals) { kfree(new_flags); return -1; } \ + h->vals = new_vals; \ + } \ + } /* otherwise shrink */ \ + } \ + } \ + if (j) { /* rehashing is needed */ \ + for (j = 0; j != h->n_buckets; ++j) { \ + if (__ac_iseither(h->flags, j) == 0) { \ + khkey_t key = h->keys[j]; \ + khval_t val; \ + khint_t new_mask; \ + new_mask = new_n_buckets - 1; \ + if (kh_is_map) val = h->vals[j]; \ + __ac_set_isdel_true(h->flags, j); \ + while (1) { /* kick-out process; sort of like in Cuckoo hashing */ \ + khint_t k, i, step = 0; \ + k = __hash_func(key); \ + i = k & new_mask; \ + while (!__ac_isempty(new_flags, i)) i = (i + (++step)) & new_mask; \ + __ac_set_isempty_false(new_flags, i); \ + if (i < h->n_buckets && __ac_iseither(h->flags, i) == 0) { /* kick out the existing element */ \ + { khkey_t tmp = h->keys[i]; h->keys[i] = key; key = tmp; } \ + if (kh_is_map) { khval_t tmp = h->vals[i]; h->vals[i] = val; val = tmp; } \ + __ac_set_isdel_true(h->flags, i); /* mark it as deleted in the old hash table */ \ + } else { /* write the element and jump out of the loop */ \ + h->keys[i] = key; \ + if (kh_is_map) h->vals[i] = val; \ + break; \ + } \ + } \ + } \ + } \ + if (h->n_buckets > new_n_buckets) { /* shrink the hash table */ \ + h->keys = (khkey_t*)krealloc((void *)h->keys, new_n_buckets * sizeof(khkey_t)); \ + if (kh_is_map) h->vals = (khval_t*)krealloc((void *)h->vals, new_n_buckets * sizeof(khval_t)); \ + } \ + kfree(h->flags); /* free the working space */ \ + h->flags = new_flags; \ + h->n_buckets = new_n_buckets; \ + h->n_occupied = h->size; \ + h->upper_bound = (khint_t)(h->n_buckets * __ac_HASH_UPPER + 0.5); \ + } \ + return 0; \ + } \ + SCOPE khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret) \ + { \ + khint_t x; \ + if (h->n_occupied >= h->upper_bound) { /* update the hash table */ \ + if (h->n_buckets > (h->size<<1)) { \ + if (kh_resize_##name(h, h->n_buckets - 1) < 0) { /* clear "deleted" elements */ \ + *ret = -1; return h->n_buckets; \ + } \ + } else if (kh_resize_##name(h, h->n_buckets + 1) < 0) { /* expand the hash table */ \ + *ret = -1; return h->n_buckets; \ + } \ + } /* TODO: to implement automatically shrinking; resize() already support shrinking */ \ + { \ + khint_t k, i, site, last, mask = h->n_buckets - 1, step = 0; \ + x = site = h->n_buckets; k = __hash_func(key); i = k & mask; \ + if (__ac_isempty(h->flags, i)) x = i; /* for speed up */ \ + else { \ + last = i; \ + while (!__ac_isempty(h->flags, i) && (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \ + if (__ac_isdel(h->flags, i)) site = i; \ + i = (i + (++step)) & mask; \ + if (i == last) { x = site; break; } \ + } \ + if (x == h->n_buckets) { \ + if (__ac_isempty(h->flags, i) && site != h->n_buckets) x = site; \ + else x = i; \ + } \ + } \ + } \ + if (__ac_isempty(h->flags, x)) { /* not present at all */ \ + h->keys[x] = key; \ + __ac_set_isboth_false(h->flags, x); \ + ++h->size; ++h->n_occupied; \ + *ret = 1; \ + } else if (__ac_isdel(h->flags, x)) { /* deleted */ \ + h->keys[x] = key; \ + __ac_set_isboth_false(h->flags, x); \ + ++h->size; \ + *ret = 2; \ + } else *ret = 0; /* Don't touch h->keys[x] if present and not deleted */ \ + return x; \ + } \ + SCOPE void kh_del_##name(kh_##name##_t *h, khint_t x) \ + { \ + if (x != h->n_buckets && !__ac_iseither(h->flags, x)) { \ + __ac_set_isdel_true(h->flags, x); \ + --h->size; \ + } \ + } + +#define KHASH_DECLARE(name, khkey_t, khval_t) \ + __KHASH_TYPE(name, khkey_t, khval_t) \ + __KHASH_PROTOTYPES(name, khkey_t, khval_t) + +#define KHASH_INIT2(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \ + __KHASH_TYPE(name, khkey_t, khval_t) \ + __KHASH_IMPL(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) + +#define KHASH_INIT(name, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \ + KHASH_INIT2(name, static kh_inline, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) + +/* --- BEGIN OF HASH FUNCTIONS --- */ + +/*! @function + @abstract Integer hash function + @param key The integer [khint32_t] + @return The hash value [khint_t] + */ +#define kh_int_hash_func(key) (khint32_t)(key) +/*! @function + @abstract Integer comparison function + */ +#define kh_int_hash_equal(a, b) ((a) == (b)) +/*! @function + @abstract 64-bit integer hash function + @param key The integer [khint64_t] + @return The hash value [khint_t] + */ +#define kh_int64_hash_func(key) (khint32_t)((key)>>33^(key)^(key)<<11) +/*! @function + @abstract 64-bit integer comparison function + */ +#define kh_int64_hash_equal(a, b) ((a) == (b)) +/*! @function + @abstract const char* hash function + @param s Pointer to a null terminated string + @return The hash value + */ +__attribute__((pure)) static kh_inline khint_t __ac_X31_hash_string(const char *s) +{ + khint_t h = (khint_t)*s; + if (h) for (++s ; *s; ++s) h = (h << 5) - h + (khint_t)*s; + return h; +} +/*! @function + @abstract Another interface to const char* hash function + @param key Pointer to a null terminated string [const char*] + @return The hash value [khint_t] + */ +#define kh_str_hash_func(key) __ac_X31_hash_string(key) +/*! @function + @abstract Const char* comparison function + */ +#define kh_str_hash_equal(a, b) ((!a && !b) || (a && b && strcmp(a, b) == 0)) + +static kh_inline khint_t __ac_Wang_hash(khint_t key) +{ + key += ~(key << 15); + key ^= (key >> 10); + key += (key << 3); + key ^= (key >> 6); + key += ~(key << 11); + key ^= (key >> 16); + return key; +} +#define kh_int_hash_func2(k) __ac_Wang_hash((khint_t)key) + +/* --- END OF HASH FUNCTIONS --- */ + +/* Other convenient macros... */ + +/*! + @abstract Type of the hash table. + @param name Name of the hash table [symbol] + */ +#define khash_t(name) kh_##name##_t + +/*! @function + @abstract Initiate a hash table. + @param name Name of the hash table [symbol] + @return Pointer to the hash table [khash_t(name)*] + */ +#define kh_init(name) kh_init_##name() + +/*! @function + @abstract Destroy a hash table. + @param name Name of the hash table [symbol] + @param h Pointer to the hash table [khash_t(name)*] + */ +#define kh_destroy(name, h) kh_destroy_##name(h) + +/*! @function + @abstract Reset a hash table without deallocating memory. + @param name Name of the hash table [symbol] + @param h Pointer to the hash table [khash_t(name)*] + */ +#define kh_clear(name, h) kh_clear_##name(h) + +/*! @function + @abstract Resize a hash table. + @param name Name of the hash table [symbol] + @param h Pointer to the hash table [khash_t(name)*] + @param s New size [khint_t] + */ +#define kh_resize(name, h, s) kh_resize_##name(h, s) + +/*! @function + @abstract Insert a key to the hash table. + @param name Name of the hash table [symbol] + @param h Pointer to the hash table [khash_t(name)*] + @param k Key [type of keys] + @param r Extra return code: 0 if the key is present in the hash table; + 1 if the bucket is empty (never used); 2 if the element in + the bucket has been deleted [int*] + @return Iterator to the inserted element [khint_t] + */ +#define kh_put(name, h, k, r) kh_put_##name(h, k, r) + +/*! @function + @abstract Retrieve a key from the hash table. + @param name Name of the hash table [symbol] + @param h Pointer to the hash table [khash_t(name)*] + @param k Key [type of keys] + @return Iterator to the found element, or kh_end(h) if the element is absent [khint_t] + */ +#define kh_get(name, h, k) kh_get_##name(h, k) + +/*! @function + @abstract Remove a key from the hash table. + @param name Name of the hash table [symbol] + @param h Pointer to the hash table [khash_t(name)*] + @param k Iterator to the element to be deleted [khint_t] + */ +#define kh_del(name, h, k) kh_del_##name(h, k) + +/*! @function + @abstract Test whether a bucket contains data. + @param h Pointer to the hash table [khash_t(name)*] + @param x Iterator to the bucket [khint_t] + @return 1 if containing data; 0 otherwise [int] + */ +#define kh_exist(h, x) (!__ac_iseither((h)->flags, (x))) + +/*! @function + @abstract Get key given an iterator + @param h Pointer to the hash table [khash_t(name)*] + @param x Iterator to the bucket [khint_t] + @return Key [type of keys] + */ +#define kh_key(h, x) ((h)->keys[x]) + +/*! @function + @abstract Get value given an iterator + @param h Pointer to the hash table [khash_t(name)*] + @param x Iterator to the bucket [khint_t] + @return Value [type of values] + @discussion For hash sets, calling this results in segfault. + */ +#define kh_val(h, x) ((h)->vals[x]) + +/*! @function + @abstract Alias of kh_val() + */ +#define kh_value(h, x) ((h)->vals[x]) + +/*! @function + @abstract Get the start iterator + @param h Pointer to the hash table [khash_t(name)*] + @return The start iterator [khint_t] + */ +#define kh_begin(h) (khint_t)(0) + +/*! @function + @abstract Get the end iterator + @param h Pointer to the hash table [khash_t(name)*] + @return The end iterator [khint_t] + */ +#define kh_end(h) ((h)->n_buckets) + +/*! @function + @abstract Get the number of elements in the hash table + @param h Pointer to the hash table [khash_t(name)*] + @return Number of elements in the hash table [khint_t] + */ +#define kh_size(h) ((h)->size) + +/*! @function + @abstract Get the number of buckets in the hash table + @param h Pointer to the hash table [khash_t(name)*] + @return Number of buckets in the hash table [khint_t] + */ +#define kh_n_buckets(h) ((h)->n_buckets) + +/*! @function + @abstract Iterate over the entries in the hash table + @param h Pointer to the hash table [khash_t(name)*] + @param kvar Variable to which key will be assigned + @param vvar Variable to which value will be assigned + @param code Block of code to execute + */ +#define kh_foreach(h, kvar, vvar, code) { khint_t __i; \ + for (__i = kh_begin(h); __i != kh_end(h); ++__i) { \ + if (!kh_exist(h,__i)) continue; \ + (kvar) = kh_key(h,__i); \ + (vvar) = kh_val(h,__i); \ + code; \ + } } + +/*! @function + @abstract Iterate over the entries in the hash table + @param h Pointer to the hash table [khash_t(name)*] + @param kvar Variable to which key will be assigned + @param code Block of code to execute + */ +#define kh_foreach_key(h, kvar, code) { khint_t __i; \ + for (__i = kh_begin(h); __i != kh_end(h); ++__i) { \ + if (!kh_exist(h,__i)) continue; \ + (kvar) = kh_key(h,__i); \ + code; \ + } } + +/*! @function + @abstract Iterate over the values in the hash table + @param h Pointer to the hash table [khash_t(name)*] + @param vvar Variable to which value will be assigned + @param code Block of code to execute + */ +#define kh_foreach_value(h, vvar, code) { khint_t __i; \ + for (__i = kh_begin(h); __i != kh_end(h); ++__i) { \ + if (!kh_exist(h,__i)) continue; \ + (vvar) = kh_val(h,__i); \ + code; \ + } } + +/*! @function + @abstract Iterate over the entries in the hash table + @param h Pointer to the hash table [khash_t(name)*] + @param kvar Variable to which key will be assigned + @param rvar Variable to which value will be assigned + @param code Block of code to execute + */ +#define kh_foreach_key_value_ref(h, kvar, rvar, code) { khint_t __i; \ + for (__i = kh_begin(h); __i != kh_end(h); ++__i) { \ + if (!kh_exist(h,__i)) continue; \ + (kvar) = kh_key(h,__i); \ + (rvar) = &kh_val(h,__i); \ + code; \ + } } + +/*! @function + @abstract Iterate over the values in the hash table + @param h Pointer to the hash table [khash_t(name)*] + @param rvar Variable to which value will be assigned + @param code Block of code to execute + */ +#define kh_foreach_value_ref(h, rvar, code) { khint_t __i; \ + for (__i = kh_begin(h); __i != kh_end(h); ++__i) { \ + if (!kh_exist(h,__i)) continue; \ + (rvar) = &kh_val(h,__i); \ + code; \ + } } + +/* More conenient interfaces */ + +/*! @function + @abstract Instantiate a hash set containing integer keys + @param name Name of the hash table [symbol] + */ +#define KHASH_SET_INIT_INT(name) \ + KHASH_INIT(name, khint32_t, char, 0, kh_int_hash_func, kh_int_hash_equal) + +#define KHASH_SET_DECLARE_INT(name) \ + KHASH_DECLARE(name, khint32_t, char) + +#define KHASH_SET_IMPL_INT(name) \ + __KHASH_IMPL(name, , khint32_t, char, 0, kh_int_hash_func, kh_int_hash_equal) + +/*! @function + @abstract Instantiate a hash map containing integer keys + @param name Name of the hash table [symbol] + @param khval_t Type of values [type] + */ +#define KHASH_MAP_INIT_INT(name, khval_t) \ + KHASH_INIT(name, khint32_t, khval_t, 1, kh_int_hash_func, kh_int_hash_equal) + +#define KHASH_MAP_DECLARE_INT(name, khval_t) \ + KHASH_DECLARE(name, khint32_t, khval_t) + +#define KHASH_MAP_IMPL_INT(name, khval_t) \ + __KHASH_IMPL(name, , khint32_t, khval_t, 1, kh_int_hash_func, kh_int_hash_equal) + +/*! @function + @abstract Instantiate a hash map containing 64-bit integer keys + @param name Name of the hash table [symbol] + */ +#define KHASH_SET_INIT_INT64(name) \ + KHASH_INIT(name, khint64_t, char, 0, kh_int64_hash_func, kh_int64_hash_equal) + +#define KHASH_SET_DECLARE_INT64(name) \ + KHASH_DECLARE(name, khint64_t, char) + +#define KHASH_SET_IMPL_INT64(name) \ + __KHASH_IMPL(name, , khint64_t, char, 0, kh_int64_hash_func, kh_int64_hash_equal) + +/*! @function + @abstract Instantiate a hash map containing 64-bit integer keys + @param name Name of the hash table [symbol] + @param khval_t Type of values [type] + */ +#define KHASH_MAP_INIT_INT64(name, khval_t) \ + KHASH_INIT(name, khint64_t, khval_t, 1, kh_int64_hash_func, kh_int64_hash_equal) + +#define KHASH_MAP_DECLARE_INT64(name, khval_t) \ + KHASH_DECLARE(name, khint64_t, khval_t) + +#define KHASH_MAP_IMPL_INT64(name, khval_t) \ + __KHASH_IMPL(name, , khint64_t, khval_t, 1, kh_int64_hash_func, kh_int64_hash_equal) + +typedef const char *kh_cstr_t; +/*! @function + @abstract Instantiate a hash map containing const char* keys + @param name Name of the hash table [symbol] + */ +#define KHASH_SET_INIT_STR(name) \ + KHASH_INIT(name, kh_cstr_t, char, 0, kh_str_hash_func, kh_str_hash_equal) + +#define KHASH_SET_DECLARE_STR(name) \ + KHASH_DECLARE(name, kh_cstr_t, char) + +#define KHASH_SET_IMPL_STR(name) \ + __KHASH_IMPL(name, , kh_cstr_t, char, 0, kh_str_hash_func, kh_str_hash_equal) + +/*! @function + @abstract Instantiate a hash map containing const char* keys + @param name Name of the hash table [symbol] + @param khval_t Type of values [type] + */ +#define KHASH_MAP_INIT_STR(name, khval_t) \ + KHASH_INIT(name, kh_cstr_t, khval_t, 1, kh_str_hash_func, kh_str_hash_equal) + +#define KHASH_MAP_DECLARE_STR(name, khval_t) \ + KHASH_DECLARE(name, kh_cstr_t, khval_t) + +#define KHASH_MAP_IMPL_STR(name, khval_t) \ + __KHASH_IMPL(name, , kh_cstr_t, khval_t, 1, kh_str_hash_func, kh_str_hash_equal) + +#pragma GCC diagnostic pop + +#endif /* __AC_KHASH_H */ diff --git a/wrapperhelper/src/lang.c b/wrapperhelper/src/lang.c new file mode 100644 index 0000000000000000000000000000000000000000..85c2096e2be441be530d4a81fe6f0e328621cd0e --- /dev/null +++ b/wrapperhelper/src/lang.c @@ -0,0 +1,1367 @@ +#include "lang.h" + +#include +#include +#include +#include +#include +#include + +#if 1 +#define DISP_ADDR_FMT "" +#define DISP_ADDR_ARG(v) +#else +#define DISP_ADDR_FMT "%p " +#define DISP_ADDR_ARG(v) v, +#endif + +preproc_token_t preproc_token_dup(preproc_token_t tok) { + preproc_token_t ret; + ret.tokt = tok.tokt; + switch (tok.tokt) { + case PPTOK_IDENT: + case PPTOK_IDENT_UNEXP: + case PPTOK_NUM: + ret.tokv.str = string_dup(tok.tokv.str); + if (!ret.tokv.str) { + ret.tokt = PPTOK_INVALID; + ret.tokv.c = '\0'; + } + break; + case PPTOK_STRING: + case PPTOK_INCL: + ret.tokv.sisstr = tok.tokv.sisstr; + ret.tokv.sstr = string_dup(tok.tokv.sstr); + if (!ret.tokv.sstr) { + ret.tokt = PPTOK_INVALID; + ret.tokv.c = '\0'; + } + string_del(tok.tokv.sstr); + break; + case PPTOK_INVALID: + case PPTOK_SYM: + case PPTOK_NEWLINE: + case PPTOK_BLANK: + case PPTOK_START_LINE_COMMENT: + case PPTOK_EOF: + ret.tokv.c = tok.tokv.c; + break; + } + return ret; +} + +void preproc_token_del(preproc_token_t *tok) { + switch (tok->tokt) { + case PPTOK_IDENT: + case PPTOK_IDENT_UNEXP: + case PPTOK_NUM: + string_del(tok->tokv.str); + break; + case PPTOK_STRING: + case PPTOK_INCL: + string_del(tok->tokv.sstr); + break; + case PPTOK_INVALID: + case PPTOK_SYM: + case PPTOK_NEWLINE: + case PPTOK_BLANK: + case PPTOK_START_LINE_COMMENT: + case PPTOK_EOF: + break; + } +} + +VECTOR_IMPL(preproc, preproc_token_del) + +void proc_token_del(proc_token_t *tok) { + switch (tok->tokt) { + case PTOK_IDENT: + case PTOK_NUM: + string_del(tok->tokv.str); + break; + case PTOK_STRING: + string_del(tok->tokv.sstr); + break; + case PTOK_PRAGMA: + switch (tok->tokv.pragma.typ) { + case PRAGMA_SIMPLE_SU: + case PRAGMA_EXPLICIT_CONV: + case PRAGMA_EXPLICIT_CONV_STRICT: + string_del(tok->tokv.pragma.val); + break; + case PRAGMA_ALLOW_INTS: + break; + } + break; + case PTOK_INVALID: + case PTOK_KEYWORD: + case PTOK_SYM: + case PTOK_EOF: + break; + } +} + +VECTOR_IMPL(proc, proc_token_del) + +const char *sym2str[LAST_SYM + 1] = { + [SYM_LBRACKET] = "{", + [SYM_RBRACKET] = "}", + [SYM_LSQBRACKET] = "[", + [SYM_RSQBRACKET] = "]", + [SYM_LPAREN] = "(", + [SYM_RPAREN] = ")", + [SYM_HASH] = "#", + [SYM_HASHHASH] = "##", + [SYM_SEMICOLON] = ";", + [SYM_COLON] = ":", + [SYM_COLONCOLON] = "::", + [SYM_VARIADIC] = "...", + [SYM_QUESTION] = "?", + [SYM_DOT] = ".", + [SYM_DASHGT] = "->", + [SYM_TILDE] = "~", + [SYM_EXCL] = "!", + [SYM_PLUS] = "+", + [SYM_DASH] = "-", + [SYM_STAR] = "*", + [SYM_SLASH] = "/", + [SYM_PERCENT] = "%", + [SYM_HAT] = "^", + [SYM_AMP] = "&", + [SYM_PIPE] = "|", + [SYM_EQ] = "=", + [SYM_PLUSEQ] = "+=", + [SYM_DASHEQ] = "-=", + [SYM_STAREQ] = "*=", + [SYM_SLASHEQ] = "/=", + [SYM_PERCENTEQ] = "%=", + [SYM_HATEQ] = "^=", + [SYM_AMPEQ] = "&=", + [SYM_PIPEEQ] = "|=", + [SYM_EQEQ] = "==", + [SYM_EXCLEQ] = "!=", + [SYM_LT] = "<", + [SYM_GT] = ">", + [SYM_LTEQ] = "<=", + [SYM_GTEQ] = ">=", + [SYM_AMPAMP] = "&&", + [SYM_PIPEPIPE] = "||", + [SYM_LTLT] = "<<", + [SYM_GTGT] = ">>", + [SYM_LTLTEQ] = "<<=", + [SYM_GTGTEQ] = ">>=", + [SYM_PLUSPLUS] = "++", + [SYM_DASHDASH] = "--", + [SYM_COMMA] = ",", +}; + +void preproc_token_print(const preproc_token_t *tok) { + printf("Token: "); + loginfo_print(&tok->loginfo, 50); + switch (tok->tokt) { + case PPTOK_INVALID: + printf("%7s %hhd (%c)\n", "#INVAL#", tok->tokv.c, (tok->tokv.c >= 0x20) && (tok->tokv.c < 0x7F) ? tok->tokv.c : '?'); + break; + case PPTOK_IDENT: + printf("%7s '%s'\n", "IDENT", string_content(tok->tokv.str)); + break; + case PPTOK_IDENT_UNEXP: + printf("%7s '%s'\n", "IDENT'", string_content(tok->tokv.str)); + break; + case PPTOK_NUM: + printf("%7s '%s'\n", "NUM", string_content(tok->tokv.str)); + break; + case PPTOK_STRING: + printf("%7s %c%s%c\n", "STRING", + tok->tokv.sisstr ? '"' : '\'', string_content(tok->tokv.sstr), tok->tokv.sisstr ? '"' : '\''); + break; + case PPTOK_INCL: + printf("%7s %c%s%c\n", "INCL", + tok->tokv.sisstr ? '"' : '<', string_content(tok->tokv.sstr), tok->tokv.sisstr ? '"' : '>'); + break; + case PPTOK_SYM: + printf("%7s %-3s (%u)\n", "SYM", sym2str[tok->tokv.sym], tok->tokv.sym); + break; + case PPTOK_NEWLINE: + printf("%7s\n", "NEWLINE"); + break; + case PPTOK_BLANK: + printf("%7s\n", "\e[2;31m(blank)\e[m"); + break; + case PPTOK_START_LINE_COMMENT: + printf("%7s\n", "\e[2;31m( // ) \e[m"); + break; + case PPTOK_EOF: + printf("%7s\n", "EOF"); + break; + default: + printf("??? %u\n", tok->tokt); + } +} + +int preproc_token_isend(const preproc_token_t *tok) { + switch (tok->tokt) { + case PPTOK_IDENT: + case PPTOK_IDENT_UNEXP: + case PPTOK_NUM: + case PPTOK_STRING: + case PPTOK_INCL: + case PPTOK_SYM: + case PPTOK_NEWLINE: + case PPTOK_BLANK: + case PPTOK_START_LINE_COMMENT: + return 0; + case PPTOK_INVALID: + case PPTOK_EOF: + default: + return 1; + } +} + +const char *kw2str[LAST_KEYWORD + 1] = { + [KW_ALIGNAS] = "_Alignas", + [KW_ALIGNOF] = "_Alignof", + [KW_ATOMIC] = "_Atomic", + [KW_AUTO] = "auto", + [KW_BOOL] = "_Bool", + [KW_BREAK] = "break", + [KW_CASE] = "case", + [KW_CHAR] = "char", + [KW_COMPLEX] = "_Complex", + [KW_CONST] = "const", + [KW_CONTINUE] = "continue", + [KW_DEFAULT] = "default", + [KW_DO] = "do", + [KW_DOUBLE] = "double", + [KW_ELSE] = "else", + [KW_ENUM] = "enum", + [KW_EXTERN] = "extern", + [KW_FLOAT] = "float", + [KW_FLOAT128] = "__float128", + [KW_FOR] = "for", + [KW_GENERIC] = "_Generic", + [KW_GOTO] = "goto", + [KW_IF] = "if", + [KW_IMAGINARY] = "_Imaginary", + [KW_INLINE] = "inline", + [KW_INT] = "int", + [KW_INT128] = "__int128", + [KW_LONG] = "long", + [KW_NORETURN] = "_Noreturn", + [KW_REGISTER] = "register", + [KW_RESTRICT] = "restrict", + [KW_RETURN] = "return", + [KW_SHORT] = "short", + [KW_SIGNED] = "signed", + [KW_SIZEOF] = "sizeof", + [KW_STATIC] = "static", + [KW_STATIC_ASSERT] = "_Static_assert", + [KW_STRUCT] = "struct", + [KW_SWITCH] = "switch", + [KW_THREAD_LOCAL] = "_Thread_local", + [KW_TYPEDEF] = "typedef", + [KW_UNION] = "union", + [KW_UNSIGNED] = "unsigned", + [KW_VOID] = "void", + [KW_VOLATILE] = "volatile", + [KW_WHILE] = "while", +}; + +void proc_token_print(const proc_token_t *tok) { + printf("Token: "); + loginfo_print(&tok->loginfo, 50); + switch (tok->tokt) { + case PTOK_INVALID: + printf("%7s %hhd (%c)\n", "#INVAL#", tok->tokv.c, (tok->tokv.c >= 0x20) && (tok->tokv.c < 0x7F) ? tok->tokv.c : '?'); + break; + case PTOK_IDENT: + printf("%7s '%s'\n", "IDENT", string_content(tok->tokv.str)); + break; + case PTOK_KEYWORD: + printf("%7s '%s' (%u)\n", "KEYWORD", kw2str[tok->tokv.kw], tok->tokv.kw); + break; + case PTOK_NUM: + printf("%7s '%s'\n", "NUM", string_content(tok->tokv.str)); + break; + case PTOK_STRING: + printf("%7s %c%s%c\n", "STRING", + tok->tokv.sisstr ? '"' : '\'', string_content(tok->tokv.sstr), tok->tokv.sisstr ? '"' : '\''); + break; + case PTOK_SYM: + printf("%7s %-3s (%u)\n", "SYM", sym2str[tok->tokv.sym], tok->tokv.sym); + break; + case PTOK_PRAGMA: + switch (tok->tokv.pragma.typ) { + case PRAGMA_ALLOW_INTS: + printf("%7s Allow ints\n", "PRAGMA"); + break; + case PRAGMA_SIMPLE_SU: + printf("%7s Mark simple: struct or union %s is simple\n", "PRAGMA", string_content(tok->tokv.pragma.val)); + break; + case PRAGMA_EXPLICIT_CONV: + printf("%7s Relaxed explicit conversion: destination is %s\n", "PRAGMA", string_content(tok->tokv.pragma.val)); + break; + case PRAGMA_EXPLICIT_CONV_STRICT: + printf("%7s Strict explicit conversion: destination is %s\n", "PRAGMA", string_content(tok->tokv.pragma.val)); + break; + default: + printf("%7s ??? %u\n", "PRAGMA", tok->tokv.pragma.typ); + } + break; + case PTOK_EOF: + printf("%7s\n", "EOF"); + break; + default: + printf("??? %u\n", tok->tokt); + } +} + +int proc_token_iserror(const proc_token_t *tok) { + switch (tok->tokt) { + case PTOK_IDENT: + case PTOK_KEYWORD: + case PTOK_NUM: + case PTOK_STRING: + case PTOK_SYM: + case PTOK_PRAGMA: + case PTOK_EOF: + return 0; + case PTOK_INVALID: + default: + return 1; + } +} + +int proc_token_isend(const proc_token_t *tok) { + switch (tok->tokt) { + case PTOK_IDENT: + case PTOK_KEYWORD: + case PTOK_NUM: + case PTOK_STRING: + case PTOK_SYM: + case PTOK_PRAGMA: + return 0; + case PTOK_INVALID: + case PTOK_EOF: + default: + return 1; + } +} + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wanalyzer-null-dereference" +KHASH_MAP_IMPL_STR(str2kw, enum token_keyword_type_e) +KHASH_MAP_IMPL_STR(type_map, type_t*) +KHASH_MAP_IMPL_STR(decl_map, declaration_t*) +KHASH_MAP_IMPL_STR(struct_map, struct_t*) +KHASH_MAP_IMPL_STR(const_map, num_constant_t) +#pragma GCC diagnostic pop +khash_t(str2kw) *str2kw; + +int init_str2kw(void) { + if (!(str2kw = kh_init(str2kw))) { + log_memory("failed to create the string to keyword map (init)\n"); + return 0; + } + int iret; khiter_t it; + for (enum token_keyword_type_e kw = 0; kw <= LAST_KEYWORD; ++kw) { + it = kh_put(str2kw, str2kw, kw2str[kw], &iret); + if (iret < 0) { + log_memory("failed to create the string to keyword map (keyword %u)\n", kw); + kh_destroy(str2kw, str2kw); + return 0; + } + kh_val(str2kw, it) = kw; + } +#define ADD_ALIAS(alias, k) \ + it = kh_put(str2kw, str2kw, #alias, &iret); \ + if (iret < 0) { \ + log_memory("failed to create the string to keyword map (keyword alias " #alias ")\n"); \ + kh_destroy(str2kw, str2kw); \ + return 0; \ + } \ + kh_val(str2kw, it) = KW_ ## k; + ADD_ALIAS(__alignof__, ALIGNOF) + // ADD_ALIAS(__asm, asm) + // ADD_ALIAS(__asm__, asm) + ADD_ALIAS(__complex, COMPLEX) + ADD_ALIAS(__complex__, COMPLEX) + ADD_ALIAS(__const, CONST) + ADD_ALIAS(__const__, CONST) + // ADD_ALIAS(__decltype, decltype) + // ADD_ALIAS(__imag__, __imag) + ADD_ALIAS(__inline, INLINE) + ADD_ALIAS(__inline__, INLINE) + // ADD_ALIAS(__nullptr, nullptr) + // ADD_ALIAS(__real__, __real) + ADD_ALIAS(__restrict, RESTRICT) + ADD_ALIAS(__restrict__, RESTRICT) + ADD_ALIAS(__signed, SIGNED) + ADD_ALIAS(__signed__, SIGNED) + // ADD_ALIAS(__typeof, typeof) + // ADD_ALIAS(__typeof__, typeof) + ADD_ALIAS(__volatile, VOLATILE) + ADD_ALIAS(__volatile__, VOLATILE) + return 1; +} +void del_str2kw(void) { + kh_destroy(str2kw, str2kw); +} + +// ptr_is_32bits is actually long_is_32bits +int num_constant_convert(loginfo_t *li, string_t *str, num_constant_t *cst, int ptr_is_32bits) { + if (string_len(str) == 0) return 0; // Should never happen +#define contains(c) strchr(string_content(str), c) + if (contains('.') + || (!(contains('X') || contains('x')) && (contains('E') || contains('e'))) + || ((contains('X') || contains('x')) && (contains('P') || contains('p')))) { +#undef contains + int ok; + if ((string_end(str)[-1] == 'l') || (string_end(str)[-1] == 'L')) { + cst->typ = NCT_LDOUBLE; + char *endc; + cst->val.l = strtold(string_content(str), &endc); + ok = (endc == string_end(str) - 1); + } else if ((string_end(str)[-1] == 'f') || (string_end(str)[-1] == 'F')) { + cst->typ = NCT_FLOAT; + char *endc; + cst->val.f = strtof(string_content(str), &endc); + ok = (endc == string_end(str) - 1); + } else { + cst->typ = NCT_DOUBLE; + char *endc; + cst->val.d = strtod(string_content(str), &endc); + ok = (endc == string_end(str)); + } + if (!ok) { + log_error(li, "'%s' is not a valid number\n", string_content(str)); + return 0; + } else if (errno == ERANGE) { + log_warning(li, "floating point constant is too large\n"); + return 1; + } + return 1; + } else { + uint64_t ret = 0; + unsigned base = (string_content(str)[0] == '0') ? (string_content(str)[1] == 'x') ? 16 : 8 : 10; + size_t startidx = (base == 16) ? 2 : 0; + size_t endidx = string_len(str); + int suffix_type = 0; +#define SUFFIX_U 1 +#define SUFFIX_L 2 +#define SUFFIX_LL 4 +#define SUFFIX_SGN SUFFIX_U +#define SUFFIX_SZ (SUFFIX_L | SUFFIX_LL) + remove_suffix: + if ((string_content(str)[endidx - 1] == 'l') || (string_content(str)[endidx - 1] == 'L')) { + if (suffix_type & SUFFIX_SZ) { + log_error(li, "'%s' is not a valid number (invalid suffix)\n", string_content(str)); + return 0; + } + if (endidx == 1) return 0; // Should never happen + if ((string_content(str)[endidx - 2] == 'l') || (string_content(str)[endidx - 2] == 'L')) { + if (endidx == 2) return 0; // Should never happen + if (string_content(str)[endidx - 2] != string_content(str)[endidx - 1]) { + log_error(li, "'%s' is not a valid number (invalid suffix)\n", string_content(str)); + return 0; + } + endidx -= 2; + suffix_type |= SUFFIX_LL; + } else { + endidx -= 1; + suffix_type |= SUFFIX_L; + } + goto remove_suffix; + } + if ((string_content(str)[endidx - 1] == 'u') || (string_content(str)[endidx - 1] == 'U')) { + if (suffix_type & SUFFIX_SGN) { + log_error(li, "'%s' is not a valid number (invalid suffix)\n", string_content(str)); + return 0; + } + endidx -= 1; + suffix_type |= SUFFIX_U; + goto remove_suffix; + } + // 0u has startidx=0 endidx=1 + if (endidx <= startidx) { + log_error(li, "'%s' is not a valid number\n", string_content(str)); + } + for (size_t i = startidx; i < endidx; ++i) { + if ((string_content(str)[i] >= '0') && (string_content(str)[i] <= ((base == 8) ? '7' : '9'))) { + ret = base * ret + (unsigned)(string_content(str)[i] - '0'); + } else if ((base == 16) && (string_content(str)[i] >= 'A') && (string_content(str)[i] <= 'F')) { + ret = base * ret + 10 + (unsigned)(string_content(str)[i] - 'A'); + } else if ((base == 16) && (string_content(str)[i] >= 'a') && (string_content(str)[i] <= 'f')) { + ret = base * ret + 10 + (unsigned)(string_content(str)[i] - 'a'); + } else { + log_error(li, "'%s' is not a valid number\n", string_content(str)); + return 0; + } + } + // If base == 10, keep the signness; in any case, try 32 bits if available else use 64 bits + cst->typ = + ((suffix_type & SUFFIX_SGN) == SUFFIX_U) ? + ((suffix_type & SUFFIX_SZ) == SUFFIX_L) ? ptr_is_32bits ? NCT_UINT32 : NCT_UINT64 : + ((suffix_type & SUFFIX_SZ) == SUFFIX_LL) ? NCT_UINT64 : + NCT_UINT32 : + ((suffix_type & SUFFIX_SZ) == SUFFIX_L) ? ptr_is_32bits ? NCT_INT32 : NCT_INT64 : + ((suffix_type & SUFFIX_SZ) == SUFFIX_LL) ? NCT_INT64 : + NCT_INT32; + if (cst->typ == NCT_INT32) { + if (ret < 1ULL << 31) { + cst->val.i32 = (int32_t)ret; + return 1; + } + // Not in signed 32-bits = int => try long/long long for decimal, unsigned for hexadecimal/octal + if (base != 10) cst->typ = NCT_UINT32; + else cst->typ = NCT_INT64; + } + if (cst->typ == NCT_UINT32) { + if (ret < 1ULL << 32) { + cst->val.u32 = (uint32_t)ret; + return 1; + } + // Not in unsigned 32-bits = unsigned => try unsigned long/long long for decimal and unsigned, long/long long for signed hexadecimal/octal + if ((base != 10) && ((suffix_type & SUFFIX_SGN) != SUFFIX_U)) cst->typ = NCT_INT64; + else cst->typ = NCT_UINT64; + } + if (cst->typ == NCT_INT64) { + if (ret < 1ULL << 63) { + cst->val.i64 = (int64_t)ret; + return 1; + } + // Not in signed 64-bits = long/long long => fail for decimal, try unsigned long/long long for hexadecimal/octal + if (base != 10) cst->typ = NCT_UINT64; + } + if (cst->typ == NCT_UINT64) { + cst->val.u64 = ret; + return 1; + } + // The constant cannot be typed... (Or internal error) + return 0; + } +} + +void expr_del(expr_t *e) { + switch (e->typ) { + case ETY_VAR: + string_del(e->val.var); + break; + + case ETY_CONST: + break; + + // case ETY_GENERIC: + // TODO + + case ETY_CALL: + expr_del(e->val.call.fun); + for (size_t i = 0; i < e->val.call.nargs; ++i) { + expr_del(e->val.call.args[i]); + } + if (e->val.call.args) free(e->val.call.args); + break; + + case ETY_ACCESS: + case ETY_PTRACCESS: + expr_del(e->val.access.val); + string_del(e->val.access.member); + break; + + case ETY_UNARY: + expr_del(e->val.unary.e); + break; + + case ETY_BINARY: + expr_del(e->val.binary.e1); + expr_del(e->val.binary.e2); + break; + + case ETY_TERNARY: + expr_del(e->val.ternary.e1); + expr_del(e->val.ternary.e2); + expr_del(e->val.ternary.e3); + break; + + // case ETY_INIT_LIST: + // TODO + + case ETY_CAST: + type_del(e->val.cast.typ); + expr_del(e->val.cast.e); + break; + } + free(e); +} + +static void expr_print_aux(expr_t *e, int parent_level) { + switch (e->typ) { + case ETY_VAR: + // Level 0, no parenthesis + printf("%s", string_content(e->val.var)); + break; + + case ETY_CONST: + // Level 0, no parenthesis + switch (e->val.cst.typ) { + case NCT_FLOAT: printf("%ff", e->val.cst.val.f); break; + case NCT_DOUBLE: printf("%f", e->val.cst.val.d); break; + case NCT_LDOUBLE: printf("%Lfl", e->val.cst.val.l); break; + case NCT_INT32: printf("%d", e->val.cst.val.i32); break; + case NCT_UINT32: printf("%uu", e->val.cst.val.u32); break; + case NCT_INT64: printf("%ldll", e->val.cst.val.i64); break; + case NCT_UINT64: printf("%lullu", e->val.cst.val.u64); break; + } + break; + + case ETY_CALL: + // Level 1, no parenthesis + expr_print_aux(e->val.call.fun, 1); + printf("("); + for (size_t i = 0; i < e->val.call.nargs; ++i) { + expr_print_aux(e->val.call.fun, 15); + } + printf(")"); + break; + + case ETY_ACCESS: + // Level 1, no parenthesis + expr_print_aux(e->val.access.val, 1); + printf(".%s", string_content(e->val.access.member)); + break; + + case ETY_PTRACCESS: + // Level 1, no parenthesis + expr_print_aux(e->val.access.val, 1); + printf(".%s", string_content(e->val.access.member)); + break; + + case ETY_UNARY: { + const char *preop = NULL; + switch (e->val.unary.typ) { + case UOT_POSTINCR: + // Level 1, no parenthesis + expr_print_aux(e->val.unary.e, 1); + printf("++"); + break; + case UOT_POSTDECR: + // Level 1, no parenthesis + expr_print_aux(e->val.unary.e, 1); + printf("--"); + break; + case UOT_PREINCR: preop = "++"; break; + case UOT_PREDECR: preop = "--"; break; + case UOT_REF: preop = "&"; break; + case UOT_POS: preop = "+"; break; + case UOT_NEG: preop = "-"; break; + case UOT_DEREF: preop = "*"; break; + case UOT_ANOT: preop = "~"; break; + case UOT_BNOT: preop = "!"; break; + } + if (preop) { + if (parent_level < 2) printf("("); + printf("%s", preop); + expr_print_aux(e->val.unary.e, 2); + if (parent_level < 2) printf(")"); + } + break; } + + case ETY_BINARY: { + const char *midop, *postop = NULL; + int mlevel, llevel, rlevel; + switch (e->val.binary.typ) { + case BOT_ADD: mlevel = 5; llevel = 5; rlevel = 4; midop = " + "; break; + case BOT_SUB: mlevel = 5; llevel = 5; rlevel = 4; midop = " - "; break; + case BOT_MUL: mlevel = 4; llevel = 4; rlevel = 3; midop = " * "; break; + case BOT_DIV: mlevel = 4; llevel = 4; rlevel = 3; midop = " / "; break; + case BOT_MOD: mlevel = 4; llevel = 4; rlevel = 3; midop = " % "; break; + case BOT_LSH: mlevel = 6; llevel = 6; rlevel = 5; midop = " << "; break; + case BOT_RSH: mlevel = 6; llevel = 6; rlevel = 5; midop = " >> "; break; + case BOT_LT: mlevel = 7; llevel = 7; rlevel = 6; midop = " < "; break; + case BOT_GT: mlevel = 7; llevel = 7; rlevel = 6; midop = " > "; break; + case BOT_LE: mlevel = 7; llevel = 7; rlevel = 6; midop = " <= "; break; + case BOT_GE: mlevel = 7; llevel = 7; rlevel = 6; midop = " >= "; break; + case BOT_EQ: mlevel = 8; llevel = 8; rlevel = 7; midop = " == "; break; + case BOT_NE: mlevel = 8; llevel = 8; rlevel = 7; midop = " != "; break; + case BOT_AAND: mlevel = 9; llevel = 9; rlevel = 8; midop = " & "; break; + case BOT_AXOR: mlevel = 10; llevel = 10; rlevel = 9; midop = " ^ "; break; + case BOT_AOR: mlevel = 11; llevel = 11; rlevel = 10; midop = " | "; break; + case BOT_BAND: mlevel = 12; llevel = 12; rlevel = 11; midop = " && "; break; + case BOT_BOR: mlevel = 13; llevel = 13; rlevel = 12; midop = " || "; break; + case BOT_ASSGN_EQ: mlevel = 15; llevel = 2; rlevel = 15; midop = " = "; break; + case BOT_ASSGN_ADD: mlevel = 15; llevel = 2; rlevel = 15; midop = " += "; break; + case BOT_ASSGN_SUB: mlevel = 15; llevel = 2; rlevel = 15; midop = " -= "; break; + case BOT_ASSGN_MUL: mlevel = 15; llevel = 2; rlevel = 15; midop = " *= "; break; + case BOT_ASSGN_DIV: mlevel = 15; llevel = 2; rlevel = 15; midop = " /= "; break; + case BOT_ASSGN_MOD: mlevel = 15; llevel = 2; rlevel = 15; midop = " %= "; break; + case BOT_ASSGN_LSH: mlevel = 15; llevel = 2; rlevel = 15; midop = " <<= "; break; + case BOT_ASSGN_RSH: mlevel = 15; llevel = 2; rlevel = 15; midop = " >>= "; break; + case BOT_ASSGN_AAND: mlevel = 15; llevel = 2; rlevel = 15; midop = " &= "; break; + case BOT_ASSGN_AXOR: mlevel = 15; llevel = 2; rlevel = 15; midop = " ^= "; break; + case BOT_ASSGN_AOR: mlevel = 15; llevel = 2; rlevel = 15; midop = " |= "; break; + case BOT_COMMA: mlevel = 16; llevel = 16; rlevel = 15; midop = ", "; break; + case BOT_ARRAY: mlevel = 1; llevel = 1; rlevel = 16; midop = "["; postop = "]"; break; + default: mlevel = 17; llevel = rlevel = -1; midop = " ? "; break; + } + if (parent_level < mlevel) printf("("); + expr_print_aux(e->val.binary.e1, llevel); + printf("%s", midop); + expr_print_aux(e->val.binary.e2, rlevel); + if (postop) printf("%s", midop); + if (parent_level < mlevel) printf(")"); + break; } + + case ETY_TERNARY: + switch (e->val.ternary.typ) { + case TOT_COND: + if (parent_level < 15) printf("("); + expr_print_aux(e->val.ternary.e1, 14); + printf(" ? "); + expr_print_aux(e->val.ternary.e2, 16); + expr_print_aux(e->val.ternary.e2, 15); + printf(" : "); + if (parent_level < 15) printf(")"); + break; + } + break; + + case ETY_CAST: + if (parent_level < 3) printf("("); + printf("("); + type_print(e->val.cast.typ); + printf(")"); + expr_print(e->val.cast.e); + if (parent_level < 3) printf(")"); + break; + } +} +void expr_print(expr_t *e) { + return expr_print_aux(e, 16); +} + +void struct_del_weak(struct_t *st) { + if (--st->nrefs) return; + if (!st->tag) struct_del(st); +} +void type_del(type_t *typ) { + if (--typ->nrefs) return; + if (typ->converted) string_del(typ->converted); + switch (typ->typ) { + case TYPE_BUILTIN: + break; + case TYPE_ARRAY: + type_del(typ->val.array.typ); + break; + case TYPE_STRUCT_UNION: + struct_del_weak(typ->val.st); + break; + case TYPE_ENUM: + case TYPE_PTR: + type_del(typ->val.typ); + break; + case TYPE_FUNCTION: + type_del(typ->val.fun.ret); + if (typ->val.fun.nargs != (size_t)-1) { + for (size_t i = 0; i < typ->val.fun.nargs; ++i) { + type_del(typ->val.fun.args[i]); + } + } + if (typ->val.fun.args) free(typ->val.fun.args); + break; + } + free(typ); +} +void type_map_del(khash_t(type_map) *map) { + kh_cstr_t str; + type_t **it; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" + kh_foreach_key_value_ref(map, str, it, free((void*)str); type_del(*it)) +#pragma GCC diagnostic pop + kh_destroy(type_map, map); +} +void conv_map_del(khash_t(conv_map) *map) { + type_t *typ; + string_t **conv; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" + kh_foreach_key_value_ref(map, typ, conv, type_del(typ); string_del(*conv)) +#pragma GCC diagnostic pop + kh_destroy(conv_map, map); +} +void type_set_del(khash_t(type_set) *set) { + type_t *it; + kh_foreach_key(set, it, type_del(it)) + kh_destroy(type_set, set); +} + +void const_map_del(khash_t(const_map) *map) { + kh_cstr_t str; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" + kh_foreach_key(map, str, free((void*)str)) +#pragma GCC diagnostic pop + kh_destroy(const_map, map); +} + +void decl_del(declaration_t *decl) { + type_del(decl->typ); + free(decl); +} +void decl_map_del(khash_t(decl_map) *map) { + kh_cstr_t str; + declaration_t **it; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" + kh_foreach_key_value_ref(map, str, it, free((void*)str); decl_del(*it)) +#pragma GCC diagnostic pop + kh_destroy(decl_map, map); +} + +void st_member_del(st_member_t *member) { + if (member->name) string_del(member->name); + type_del(member->typ); +} + +void struct_del(struct_t *st) { + if (st->tag) { + string_del(st->tag); + st->tag = NULL; + } + if (st->is_defined) { + for (size_t i = 0; i < st->nmembers; ++i) { + st_member_del(&st->members[i]); + } + free(st->members); + st->is_defined = 0; + } + if (!st->nrefs) free(st); +} +void struct_map_del(khash_t(struct_map) *map) { + // The keys are the tag in the struct_t + struct_t **it; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" + kh_foreach_value_ref(map, it, struct_del(*it)) +#pragma GCC diagnostic pop + kh_destroy(struct_map, map); +} + +type_t *type_new(void) { + type_t *ret = malloc(sizeof *ret); + if (!ret) { + log_memory("failed to create a new type\n"); + return NULL; + } + ret->szinfo.align = ret->szinfo.size = 0; + ret->is_atomic = ret->is_const = ret->is_restrict = ret->is_volatile = ret->is_incomplete = ret->is_validated = ret->_internal_use = 0; + ret->converted = NULL; + ret->nrefs = 1; + ret->typ = TYPE_BUILTIN; + ret->val.builtin = BTT_INT; + return ret; +} +type_t *type_new_ptr(type_t *target) { + type_t *ret = malloc(sizeof *ret); + if (!ret) { + log_memory("failed to create a new pointer type\n"); + return NULL; + } + ret->szinfo.align = ret->szinfo.size = 0; + ret->is_atomic = ret->is_const = ret->is_restrict = ret->is_volatile = ret->is_incomplete = ret->is_validated = ret->_internal_use = 0; + ret->converted = NULL; + ret->nrefs = 1; + ret->typ = TYPE_PTR; + ret->val.typ = target; + return ret; +} +int type_copy_into(type_t *dest, const type_t *ref) { + size_t nrefs = dest->nrefs; + _Bool is_atomic = dest->is_atomic; + _Bool is_const = dest->is_const; + _Bool is_restrict = dest->is_restrict; + _Bool is_volatile = dest->is_volatile; + memcpy(dest, ref, sizeof *dest); + switch (ref->typ) { + case TYPE_BUILTIN: + break; + case TYPE_ARRAY: + ++ref->val.array.typ->nrefs; + break; + case TYPE_STRUCT_UNION: + ++dest->val.st->nrefs; + break; + case TYPE_ENUM: + case TYPE_PTR: + ++ref->val.typ->nrefs; + break; + case TYPE_FUNCTION: + ++ref->val.fun.ret->nrefs; + if (ref->val.fun.nargs != (size_t)-1) { + if (!ref->val.fun.args) { + dest->typ = TYPE_BUILTIN; + return 0; + } + type_t **args = malloc(sizeof *args * ref->val.fun.nargs); + if (!args) { + log_memory("failed to allocate new argument array\n"); + return 0; + } + for (size_t i = 0; i < ref->val.fun.nargs; ++i) { + ++ref->val.fun.args[i]->nrefs; + args[i] = ref->val.fun.args[i]; + } + dest->val.fun.args = args; + } + break; + } + dest->is_atomic |= is_atomic; + dest->is_const |= is_const; + dest->is_restrict |= is_restrict; + dest->is_volatile |= is_volatile; + dest->nrefs = nrefs; + return 1; +} + +struct_t *struct_new(int is_struct, string_t *tag) { + struct_t *ret = malloc(sizeof *ret); + if (!ret) { + log_memory("Error: failed to create a new struct\n"); + return NULL; + } + ret->is_struct = is_struct; + ret->tag = tag; + ret->is_defined = 0; + ret->is_simple = 0; + ret->nrefs = 1; + ret->has_self_recursion = 0; // Undefined structures cannot have self recursion + return ret; +} + +khint_t type_t_hash(type_t *typ) { + switch (typ->typ) { + case TYPE_BUILTIN: return kh_int_hash_func(typ->val.builtin); + case TYPE_ARRAY: return kh_int_hash_func((typ->val.array.array_sz << 12) + type_t_hash(typ->val.array.typ)); + case TYPE_STRUCT_UNION: + if (typ->val.st->tag) { + return kh_str_hash_func(string_content(typ->val.st->tag)); + } else { + khint64_t acc = (typ->val.st->nmembers << 5) + 1; + for (size_t i = 0; i < typ->val.st->nmembers; ++i) { + acc += (khint64_t)type_t_hash(typ->val.st->members[i].typ) << ((1ull << (i % 64)) % 61); + } + return kh_int64_hash_func(acc); + } + case TYPE_ENUM: + case TYPE_PTR: + return kh_int_hash_func(type_t_hash(typ->val.typ)); + case TYPE_FUNCTION: { + khint64_t acc = type_t_hash(typ->val.fun.ret) + typ->val.fun.nargs * 73 + (size_t)typ->val.fun.has_varargs * 77; + if (typ->val.fun.nargs != (size_t)-1) { + for (size_t i = 0; i < typ->val.fun.nargs; ++i) { + acc += (khint64_t)type_t_hash(typ->val.fun.args[i]) << ((3ull << (i % 64)) % 53); + } + } + return kh_int64_hash_func(acc); } + default: return 0; + } +} +int type_t_equal_aux(type_t *typ1, type_t *typ2, int is_strict) { + if (is_strict && ( + (typ1->is_atomic != typ2->is_atomic) || (typ1->is_const != typ2->is_const) + || (typ1->is_restrict != typ2->is_restrict) || (typ1->is_volatile != typ2->is_volatile))) { + return 0; + } + if (typ1->typ != typ2->typ) return 0; + switch (typ1->typ) { + case TYPE_BUILTIN: return typ1->val.builtin == typ2->val.builtin; + case TYPE_ARRAY: return (typ1->val.array.array_sz == typ2->val.array.array_sz) && type_t_equal_aux(typ1->val.array.typ, typ2->val.array.typ, is_strict); + case TYPE_STRUCT_UNION: + // This will not do an infinite recursion since only unnamed struct/unions will compare their members + if (!typ1->val.st->tag != !typ2->val.st->tag) return 0; + if (typ1->val.st->tag) return !strcmp(string_content(typ1->val.st->tag), string_content(typ2->val.st->tag)); + if (!typ1->val.st->is_defined || !typ2->val.st->is_defined) { + log_warning_nopos("comparing against incomplete anonymous structure/union\n"); + return 0; + } + if (typ1->val.st->nmembers != typ2->val.st->nmembers) return 0; + for (size_t i = 0; i < typ1->val.st->nmembers; ++i) { + if (!!typ1->val.st->members[i].name != !!typ2->val.st->members[i].name) return 0; + if (typ1->val.st->members[i].name + && strcmp(string_content(typ1->val.st->members[i].name), string_content(typ2->val.st->members[i].name))) + return 0; + if (!type_t_equal_aux(typ1->val.st->members[i].typ, typ2->val.st->members[i].typ, is_strict)) return 0; + } + return 1; + case TYPE_ENUM: + case TYPE_PTR: + return type_t_equal_aux(typ1->val.typ, typ2->val.typ, is_strict); + case TYPE_FUNCTION: + if (typ1->val.fun.nargs != typ2->val.fun.nargs) return 0; + if (typ1->val.fun.has_varargs != typ2->val.fun.has_varargs) return 0; + if (!type_t_equal_aux(typ1->val.fun.ret, typ2->val.fun.ret, is_strict)) return 0; + if (typ1->val.fun.nargs != (size_t)-1) { + for (size_t i = 0; i < typ1->val.fun.nargs; ++i) { + if (!type_t_equal_aux(typ1->val.fun.args[i], typ2->val.fun.args[i], is_strict)) return 0; + } + } + return 1; + default: return 0; + } +} +int type_t_equal_lax(type_t *typ1, type_t *typ2) { + return type_t_equal_aux(typ1, typ2, 0); +} +int type_t_equal(type_t *typ1, type_t *typ2) { + return type_t_equal_aux(typ1, typ2, 1); +} +__KHASH_IMPL(type_set, , type_t*, char, 0, type_t_hash, type_t_equal) +__KHASH_IMPL(conv_map, , type_t*, string_t*, 1, type_t_hash, type_t_equal_lax) + +type_t *type_try_merge(type_t *typ, khash_t(type_set) *set) { + int iret; + khiter_t it = kh_put(type_set, set, typ, &iret); + if (iret < 0) { + log_memory("Error: failed to add type to type_set\n"); + return NULL; + } else if (iret == 0) { + if (typ == kh_key(set, it)) return typ; + kh_key(set, it)->is_incomplete &= typ->is_incomplete; // In case we have a recursive structure + type_del(typ); + ++kh_key(set, it)->nrefs; + return kh_key(set, it); + } else { + ++typ->nrefs; + } + type_t *typ2; + switch (typ->typ) { + case TYPE_BUILTIN: + return typ; + case TYPE_ARRAY: + typ2 = type_try_merge(typ->val.array.typ, set); + if (typ2) typ->val.array.typ = typ2; + else return NULL; + return typ; + case TYPE_STRUCT_UNION: + if (typ->val.st->is_defined) { + for (size_t i = 0; i < typ->val.st->nmembers; ++i) { + typ2 = type_try_merge(typ->val.st->members[i].typ, set); + if (typ2) typ->val.st->members[i].typ = typ2; + else return NULL; + } + } + return typ; + case TYPE_ENUM: + case TYPE_PTR: + typ2 = type_try_merge(typ->val.typ, set); + if (typ2) typ->val.typ = typ2; + else return NULL; + return typ; + case TYPE_FUNCTION: + typ2 = type_try_merge(typ->val.fun.ret, set); + if (typ2) typ->val.fun.ret = typ2; + else return NULL; + + if (typ->val.fun.nargs != (size_t)-1) { + for (size_t i = 0; i < typ->val.fun.nargs; ++i) { + typ2 = type_try_merge(typ->val.fun.args[i], set); + if (typ2) typ->val.fun.args[i] = typ2; + else return NULL; + } + } + return typ; + + default: return NULL; + } +} + +const char *builtin2str[LAST_BUILTIN + 1] = { + [BTT_VOID] = "void", + [BTT_BOOL] = "_Bool", + [BTT_CHAR] = "char", + [BTT_SCHAR] = "signed char", + [BTT_UCHAR] = "unsigned char", + [BTT_SHORT] = "short", + [BTT_SSHORT] = "signed short", + [BTT_USHORT] = "unsigned short", + [BTT_INT] = "int", + [BTT_SINT] = "signed", + [BTT_UINT] = "unsigned", + [BTT_LONG] = "long", + [BTT_SLONG] = "signed long", + [BTT_ULONG] = "unsigned long", + [BTT_LONGLONG] = "long long", + [BTT_SLONGLONG] = "signed long long", + [BTT_ULONGLONG] = "unsigned long long", + [BTT_INT128] = "__int128", + [BTT_SINT128] = "signed __int128", + [BTT_UINT128] = "unsigned __int128", + [BTT_S8] = "int8_t", + [BTT_U8] = "uint8_t", + [BTT_S16] = "int16_t", + [BTT_U16] = "uint16_t", + [BTT_S32] = "int32_t", + [BTT_U32] = "uint32_t", + [BTT_S64] = "int64_t", + [BTT_U64] = "uint64_t", + [BTT_FLOAT] = "float", + [BTT_CFLOAT] = "float _Complex", + [BTT_IFLOAT] = "float _Imaginary", + [BTT_DOUBLE] = "double", + [BTT_CDOUBLE] = "double _Complex", + [BTT_IDOUBLE] = "double _Imaginary", + [BTT_LONGDOUBLE] = "long double", + [BTT_CLONGDOUBLE] = "long double _Complex", + [BTT_ILONGDOUBLE] = "long double _Imaginary", + [BTT_FLOAT128] = "__float128", + [BTT_CFLOAT128] = "__float128 _Complex", + [BTT_IFLOAT128] = "__float128 _Imaginary", + [BTT_VA_LIST] = "__builtin_va_list", +}; +void type_print(type_t *typ) { + if (typ->_internal_use) { + printf("...%p", typ); + return; + } + typ->_internal_use = 1; + printf("<" DISP_ADDR_FMT "n_uses=%zu> ", DISP_ADDR_ARG(typ) typ->nrefs); + if (!typ->is_validated) printf("! "); + if (typ->is_incomplete) printf(" "); + if (typ->is_validated && !typ->is_incomplete) printf(" ", typ->szinfo.size, typ->szinfo.align); + if (typ->converted) printf(" ", string_content(typ->converted)); + if (typ->is_const) printf("const "); + if (typ->is_restrict) printf("restrict "); + if (typ->is_volatile) printf("volatile "); + if (typ->is_atomic) printf("_Atomic "); + switch (typ->typ) { + case TYPE_BUILTIN: + printf("", builtin2str[typ->val.builtin], typ->val.builtin); + break; + case TYPE_ARRAY: + if (typ->val.array.array_sz == (size_t)-1) + printf("[] "); + else printf("[%zu] ", typ->val.array.array_sz); + type_print(typ->val.array.typ); + break; + case TYPE_STRUCT_UNION: + struct_print(typ->val.st); + break; + case TYPE_ENUM: + printf(" "); + type_print(typ->val.typ); + break; + case TYPE_PTR: + printf("*"); + type_print(typ->val.typ); + break; + case TYPE_FUNCTION: + printf(""); + } else { + printf(", args=("); + for (size_t i = 0; i < typ->val.fun.nargs; ++i) { + if (i) printf("), ("); + type_print(typ->val.fun.args[i]); + } + if (typ->val.fun.has_varargs && typ->val.fun.nargs) printf(", ...)>"); + else if (typ->val.fun.has_varargs && !typ->val.fun.nargs) printf("...)>"); + else printf(")>"); + } + break; + } + typ->_internal_use = 0; +} +void struct_print(const struct_t *st) { + printf("<" DISP_ADDR_FMT "n_uses=%zu> ", DISP_ADDR_ARG(st) st->nrefs); + if (st->is_simple) { + printf(" "); + } + if (st->is_defined) { + printf( + "%s %s { ", + st->is_struct ? "struct" : "union", + st->tag ? string_content(st->tag) : "", + st->nmembers, + st->has_incomplete ? ", with incomplete" : "", + st->has_self_recursion ? ", with self-recursion" : ""); + for (size_t i = 0; i < st->nmembers; ++i) { + if (i) printf(", "); + type_print(st->members[i].typ); + printf(" %s", st->members[i].name ? string_content(st->members[i].name) : ""); + if (st->members[i].is_bitfield) { + printf(" : %zu", st->members[i].bitfield_width); + } + } + printf(" }"); + } else { + printf("%s %s ", st->is_struct ? "struct" : "union", st->tag ? string_content(st->tag) : ""); + } +} + +file_t *file_new(machine_t *target) { + file_t *ret = malloc(sizeof *ret); + if (!ret) { + log_memory("failed to create a new translation unit structure (init)\n"); + return NULL; + } + if (!(ret->struct_map = kh_init(struct_map))) { + log_memory("failed to create a new translation unit structure (structure map)\n"); + free(ret); + return NULL; + } + if (!(ret->type_map = kh_init(type_map))) { + log_memory("failed to create a new translation unit structure (type map)\n"); + kh_destroy(struct_map, ret->struct_map); + free(ret); + return NULL; + } + if (!(ret->enum_map = kh_init(type_map))) { + log_memory("failed to create a new translation unit structure (enumeration map)\n"); + kh_destroy(struct_map, ret->struct_map); + kh_destroy(type_map, ret->type_map); + free(ret); + return NULL; + } + if (!(ret->decl_map = kh_init(decl_map))) { + log_memory("failed to create a new translation unit structure (declaration map)\n"); + kh_destroy(struct_map, ret->struct_map); + kh_destroy(type_map, ret->type_map); + kh_destroy(type_map, ret->enum_map); + free(ret); + return NULL; + } + if (!(ret->type_set = kh_init(type_set))) { + log_memory("failed to create a new translation unit structure (type set)\n"); + kh_destroy(struct_map, ret->struct_map); + kh_destroy(type_map, ret->type_map); + kh_destroy(type_map, ret->enum_map); + kh_destroy(decl_map, ret->decl_map); + free(ret); + return NULL; + } + if (!(ret->const_map = kh_init(const_map))) { + log_memory("failed to create a new translation unit structure (const map)\n"); + kh_destroy(struct_map, ret->struct_map); + kh_destroy(type_map, ret->type_map); + kh_destroy(type_map, ret->enum_map); + kh_destroy(decl_map, ret->decl_map); + kh_destroy(type_set, ret->type_set); + free(ret); + return NULL; + } + if (!(ret->relaxed_type_conversion = kh_init(conv_map))) { + log_memory("failed to create a new translation unit structure (relaxed type conversion map)\n"); + kh_destroy(struct_map, ret->struct_map); + kh_destroy(type_map, ret->type_map); + kh_destroy(type_map, ret->enum_map); + kh_destroy(decl_map, ret->decl_map); + kh_destroy(type_set, ret->type_set); + kh_destroy(const_map, ret->const_map); + free(ret); + return NULL; + } + + // Now fill in the builtin types + int iret; khiter_t it; + for (enum type_builtin_e i = 0; i < LAST_BUILTIN + 1; ++i) { + type_t *t = type_new(); + if (!t) { + log_memory("failed to create a new translation unit structure (builtin type)\n"); + for (; i--;) { + free(ret->builtins[i]); + } + kh_destroy(struct_map, ret->struct_map); + kh_destroy(type_map, ret->type_map); + kh_destroy(conv_map, ret->relaxed_type_conversion); + kh_destroy(type_map, ret->enum_map); + kh_destroy(decl_map, ret->decl_map); + kh_destroy(type_set, ret->type_set); + kh_destroy(const_map, ret->const_map); + free(ret); + return NULL; + } + t->is_incomplete = (i == BTT_VOID); + t->nrefs = 2; + t->typ = TYPE_BUILTIN; + t->val.builtin = i; + if (!target->has_int128 && ((i == BTT_INT128) || (i == BTT_SINT128) || (i == BTT_UINT128))) { + t->converted = string_new_cstr(""); + } + validate_type(&(loginfo_t){0}, target, t); + ret->builtins[i] = t; + kh_put(type_set, ret->type_set, t, &iret); + if (iret < 0) { + log_memory("failed to create a new translation unit structure (failed to add intrinsic type to type_set)\n"); + kh_destroy(struct_map, ret->struct_map); + kh_destroy(type_map, ret->type_map); + kh_destroy(conv_map, ret->relaxed_type_conversion); + kh_destroy(type_map, ret->enum_map); + kh_destroy(decl_map, ret->decl_map); + kh_destroy(type_set, ret->type_set); + kh_destroy(const_map, ret->const_map); + free(ret); + return NULL; + } else if (iret == 0) { + log_memory("failed to create a new translation unit structure (duplicate intrinsic type in type_set)\n"); + for (++i; i--;) { + free(ret->builtins[i]); + } + kh_destroy(struct_map, ret->struct_map); + kh_destroy(type_map, ret->type_map); + kh_destroy(conv_map, ret->relaxed_type_conversion); + kh_destroy(type_map, ret->enum_map); + kh_destroy(decl_map, ret->decl_map); + kh_destroy(type_set, ret->type_set); + kh_destroy(const_map, ret->const_map); + free(ret); + return NULL; + } + } + // ret is valid and can now be deleted by file_del + + // Add __builtin_va_list, __int128_t, __uint128_t as builtin typedef + char *sdup; +#define ADD_TYPEDEF(name, btt) \ + sdup = strdup(#name); \ + if (!sdup) { \ + log_memory("failed to create a new translation unit structure (" #name " name)\n"); \ + file_del(ret); \ + return NULL; \ + } \ + it = kh_put(type_map, ret->type_map, sdup, &iret); \ + if (iret < 0) { \ + log_memory("failed to create a new translation unit structure (add " #name " typedef)\n"); \ + free(sdup); \ + file_del(ret); \ + return NULL; \ + } else if (iret == 0) { \ + log_memory("failed to create a new translation unit structure (" #name " is already a typedef)\n"); \ + free(sdup); \ + file_del(ret); \ + return NULL; \ + } \ + kh_val(ret->type_map, it) = ret->builtins[BTT_ ## btt]; \ + ++ret->builtins[BTT_ ## btt]->nrefs; + ADD_TYPEDEF(__builtin_va_list, VA_LIST) + if (target->has_int128) { + ADD_TYPEDEF(__int128_t, INT128) + ADD_TYPEDEF(__uint128_t, UINT128) + } + + return ret; +} +void file_del(file_t *f) { + struct_map_del(f->struct_map); + type_map_del(f->type_map); + conv_map_del(f->relaxed_type_conversion); + type_map_del(f->enum_map); + decl_map_del(f->decl_map); + type_set_del(f->type_set); + const_map_del(f->const_map); + for (enum type_builtin_e i = 0; i < LAST_BUILTIN + 1; ++i) { + type_del(f->builtins[i]); + } + free(f); +} diff --git a/wrapperhelper/src/lang.h b/wrapperhelper/src/lang.h new file mode 100644 index 0000000000000000000000000000000000000000..e921013ceb5d977df5816ada201bedd4a7ba17af --- /dev/null +++ b/wrapperhelper/src/lang.h @@ -0,0 +1,468 @@ +#pragma once + +#ifndef LANG_H +#define LANG_H + +#include "cstring.h" +#include "khash.h" +#include "log.h" +#include "machine.h" +#include "vector.h" + +enum token_sym_type_e { + SYM_LBRACKET, + SYM_RBRACKET, + SYM_LSQBRACKET, + SYM_RSQBRACKET, + SYM_LPAREN, + SYM_RPAREN, + SYM_HASH, + SYM_HASHHASH, + SYM_SEMICOLON, + SYM_COLON, + SYM_COLONCOLON, + SYM_VARIADIC, + SYM_QUESTION, + SYM_DOT, + SYM_DASHGT, + SYM_TILDE, + SYM_EXCL, + SYM_PLUS, + SYM_DASH, + SYM_STAR, + SYM_SLASH, + SYM_PERCENT, + SYM_HAT, + SYM_AMP, + SYM_PIPE, + SYM_EQ, + SYM_PLUSEQ, + SYM_DASHEQ, + SYM_STAREQ, + SYM_SLASHEQ, + SYM_PERCENTEQ, + SYM_HATEQ, + SYM_AMPEQ, + SYM_PIPEEQ, + SYM_EQEQ, + SYM_EXCLEQ, + SYM_LT, + SYM_GT, + SYM_LTEQ, + SYM_GTEQ, + SYM_AMPAMP, + SYM_PIPEPIPE, + SYM_LTLT, + SYM_GTGT, + SYM_LTLTEQ, + SYM_GTGTEQ, + SYM_PLUSPLUS, + SYM_DASHDASH, + SYM_COMMA, +}; +#define LAST_SYM SYM_COMMA + +typedef struct preproc_token_s { + enum preproc_token_e { + PPTOK_INVALID = 0, + PPTOK_IDENT, // Expandable ident + PPTOK_IDENT_UNEXP, // Unexpandable ident + PPTOK_NUM, + PPTOK_STRING, + PPTOK_INCL, + PPTOK_SYM, + PPTOK_NEWLINE, + PPTOK_BLANK, + PPTOK_START_LINE_COMMENT, + PPTOK_EOF + } tokt; + loginfo_t loginfo; + union { + string_t *str; + struct { + string_t *sstr; // The string literal content + int sisstr; // 0 for '' or <>, 1 for "" + }; + char c; + enum token_sym_type_e sym; + } tokv; +} preproc_token_t; +VECTOR_DECLARE(preproc, preproc_token_t) +preproc_token_t preproc_token_dup(preproc_token_t tok); +void preproc_token_del(preproc_token_t *tok); + +enum token_keyword_type_e { + KW_ALIGNAS = 0, + KW_ALIGNOF, + KW_ATOMIC, + KW_AUTO, + KW_BOOL, + KW_BREAK, + KW_CASE, + KW_CHAR, + KW_COMPLEX, + KW_CONST, + KW_CONTINUE, + KW_DEFAULT, + KW_DO, + KW_DOUBLE, + KW_ELSE, + KW_ENUM, + KW_EXTERN, + KW_FLOAT, + KW_FLOAT128, + KW_FOR, + KW_GENERIC, + KW_GOTO, + KW_IF, + KW_IMAGINARY, + KW_INLINE, + KW_INT, + KW_INT128, + KW_LONG, + KW_NORETURN, + KW_REGISTER, + KW_RESTRICT, + KW_RETURN, + KW_SHORT, + KW_SIGNED, + KW_SIZEOF, + KW_STATIC, + KW_STATIC_ASSERT, + KW_STRUCT, + KW_SWITCH, + KW_THREAD_LOCAL, + KW_TYPEDEF, + KW_UNION, + KW_UNSIGNED, + KW_VOID, + KW_VOLATILE, + KW_WHILE, +}; +#define LAST_KEYWORD KW_WHILE + +typedef struct proc_token_s { + enum proc_token_e { + PTOK_INVALID = 0, + PTOK_IDENT, + PTOK_KEYWORD, + PTOK_NUM, + PTOK_STRING, + PTOK_SYM, + PTOK_PRAGMA, + PTOK_EOF + } tokt; + loginfo_t loginfo; + union proc_token_val_u { + string_t *str; + struct { + string_t *sstr; // The string literal content + int sisstr; // 0 for '' or <>, 1 for "" + }; + char c; + enum token_sym_type_e sym; + enum token_keyword_type_e kw; + struct { + enum proc_pragma_e { + PRAGMA_ALLOW_INTS, + PRAGMA_SIMPLE_SU, + PRAGMA_EXPLICIT_CONV, + PRAGMA_EXPLICIT_CONV_STRICT, + } typ; + string_t *val; + } pragma; + } tokv; +} proc_token_t; +VECTOR_DECLARE(proc, proc_token_t) +void proc_token_del(proc_token_t *tok); + +typedef struct num_constant_s { + enum num_constant_e { + NCT_FLOAT, + NCT_DOUBLE, + NCT_LDOUBLE, + NCT_INT32, + NCT_UINT32, + NCT_INT64, + NCT_UINT64, + } typ; + union { + float f; + double d; + long double l; + int32_t i32; + uint32_t u32; + int64_t i64; + uint64_t u64; + } val; +} num_constant_t; +int num_constant_convert(loginfo_t *li, string_t *str, num_constant_t *cst, int ptr_is_32bits); +KHASH_MAP_DECLARE_STR(const_map, num_constant_t) + +typedef struct expr_s { + enum expr_type_e { + ETY_VAR, + ETY_CONST, + // ETY_GENERIC, + ETY_CALL, + ETY_ACCESS, + ETY_PTRACCESS, // Convertible to DEREF + ACCESS + ETY_UNARY, + ETY_BINARY, + ETY_TERNARY, + // ETY_INIT_LIST, + ETY_CAST, + } typ; + union { + string_t *var; + num_constant_t cst; + // TODO: _Generic + struct { + struct expr_s *fun, **args; + size_t nargs; + } call; + struct { + struct expr_s *val; + string_t *member; + } access; + struct { + enum unary_op_e { + UOT_POSTINCR, + UOT_POSTDECR, + UOT_PREINCR, + UOT_PREDECR, + UOT_REF, + UOT_POS, + UOT_NEG, + UOT_DEREF, + UOT_ANOT, // Arithmetic not, ie '~' + UOT_BNOT, // Boolean not, ie '!' + } typ; + struct expr_s *e; + } unary; + struct { + enum binary_op_e { + BOT_ADD, + BOT_SUB, + BOT_MUL, + BOT_DIV, + BOT_MOD, + BOT_LSH, + BOT_RSH, + BOT_LT, + BOT_GT, + BOT_LE, + BOT_GE, + BOT_EQ, + BOT_NE, + BOT_AAND, + BOT_AXOR, + BOT_AOR, + BOT_BAND, + BOT_BOR, + BOT_ASSGN_EQ, + BOT_ASSGN_ADD, + BOT_ASSGN_SUB, + BOT_ASSGN_MUL, + BOT_ASSGN_DIV, + BOT_ASSGN_MOD, + BOT_ASSGN_LSH, + BOT_ASSGN_RSH, + BOT_ASSGN_AAND, + BOT_ASSGN_AXOR, + BOT_ASSGN_AOR, + BOT_COMMA, + + BOT_ARRAY, // Convertible to DEREF + ADD + } typ; + struct expr_s *e1, *e2; + } binary; + struct { + enum ternary_op_e { + TOT_COND, + } typ; + struct expr_s *e1, *e2, *e3; + } ternary; + // TODO: (type){init} + struct { + struct type_s *typ; + struct expr_s *e; + } cast; + } val; +} expr_t; +void expr_del(expr_t *e); +void expr_print(expr_t *e); + +typedef struct size_info_s { + size_t size, align; +} size_info_t; + +typedef struct type_s { + struct { + unsigned is_atomic : 1; + unsigned is_const : 1; + unsigned is_restrict : 1; + unsigned is_volatile : 1; + unsigned is_incomplete : 1; // \ The type needs to be complete and + unsigned is_validated : 1; // / validated for the size_info to be populated + unsigned _internal_use : 1; + }; + size_t nrefs; + enum type_type_e { + TYPE_BUILTIN, // builtin + TYPE_ARRAY, // array + TYPE_STRUCT_UNION, // st + TYPE_ENUM, // typ which points to TYPE_BUILTIN + TYPE_PTR, // typ + TYPE_FUNCTION, // fun + } typ; + union { + enum type_builtin_e { + BTT_VOID, + BTT_BOOL, + BTT_CHAR, + BTT_SCHAR, + BTT_UCHAR, + BTT_SHORT, + BTT_SSHORT, + BTT_USHORT, + BTT_INT, + BTT_SINT, + BTT_UINT, + BTT_LONG, + BTT_SLONG, + BTT_ULONG, + BTT_LONGLONG, + BTT_SLONGLONG, + BTT_ULONGLONG, + BTT_INT128, + BTT_SINT128, + BTT_UINT128, + BTT_S8, + BTT_U8, + BTT_S16, + BTT_U16, + BTT_S32, + BTT_U32, + BTT_S64, + BTT_U64, +#define BTT_START_INT_EXT BTT_S8 +#define BTT_INT_EXTS "__int8_t", "__uint8_t", "__int16_t", "__uint16_t", "__int32_t", "__uint32_t", "__int64_t", "__uint64_t" + BTT_FLOAT, + BTT_CFLOAT, + BTT_IFLOAT, + BTT_DOUBLE, + BTT_CDOUBLE, + BTT_IDOUBLE, + BTT_LONGDOUBLE, + BTT_CLONGDOUBLE, + BTT_ILONGDOUBLE, + BTT_FLOAT128, + BTT_CFLOAT128, + BTT_IFLOAT128, + BTT_VA_LIST, + } builtin; +#define LAST_BUILTIN BTT_VA_LIST + struct type_s *typ; + struct { + struct type_s *typ; + size_t array_sz; // -1 for VLA + } array; + struct struct_s *st; + struct { + struct type_s *ret; + size_t nargs; // -1 for no specification + struct type_s **args; + int has_varargs; + } fun; + } val; + size_info_t szinfo; + string_t *converted; // NULL for default behavior +} type_t; +void type_del(type_t *typ); +KHASH_MAP_DECLARE_STR(type_map, type_t*) +KHASH_DECLARE(conv_map, type_t*, string_t*) +void type_map_del(khash_t(type_map) *map); + +int type_t_equal(type_t*, type_t*); + +typedef struct st_member_s { + string_t *name; // May be NULL + type_t *typ; + _Bool is_bitfield; + size_t bitfield_width; + // Filled by validate_type + size_t byte_offset; unsigned char bit_offset; +} st_member_t; +typedef struct struct_s { + string_t *tag; + int is_defined; + size_t nrefs; + int is_struct; // 0 = union, 1 = struct + int is_simple; // Pointers to the structure (in 64 bits) are simple pointers + int has_incomplete; // 1 if the last element of the structure is a VLA or if an element of the union recursively contains a VLA + int has_self_recursion; // 1 if the structure contains a reference to itself + size_t nmembers; + st_member_t *members; +} struct_t; +void st_member_del(st_member_t *member); +void struct_del(struct_t *st); +KHASH_MAP_DECLARE_STR(struct_map, struct_t*) + +type_t *type_new(void); // Create a new (complete) builtin type +type_t *type_new_ptr(type_t *target); // Create a new pointer type; doesn't increment the use counter of the target +int type_copy_into(type_t *dest, const type_t *ref); // Copy ref into dest, keeping additional qualifiers and without changing any use counter + +struct_t *struct_new(int is_struct, string_t *tag); // Create a new struct + +// Try to merge some types with other types; this may delete ptr and increase a use counter in a type referenced by the table +KHASH_DECLARE(type_set, type_t*, char) +type_t *type_try_merge(type_t *ptr, khash_t(type_set) *set); + +extern const char *builtin2str[LAST_BUILTIN + 1]; +void type_print(type_t *typ); +void struct_print(const struct_t *st); + +typedef struct declaration_s { + enum decl_storage_e { + STORAGE_NONE, + STORAGE_EXTERN, + STORAGE_STATIC, + STORAGE_TLS, + STORAGE_TLS_EXTERN, + STORAGE_TLS_STATIC, + STORAGE_AUTO, + STORAGE_REG, + } storage; + int defined; + type_t *typ; +} declaration_t; +KHASH_MAP_DECLARE_STR(decl_map, declaration_t*) + +typedef struct file_s { + khash_t(struct_map) *struct_map; + khash_t(type_map) *type_map; + khash_t(conv_map) *relaxed_type_conversion; + khash_t(type_map) *enum_map; + khash_t(decl_map) *decl_map; + type_t *builtins[LAST_BUILTIN + 1]; + khash_t(const_map) *const_map; + khash_t(type_set) *type_set; +} file_t; +file_t *file_new(machine_t *target); +void file_del(file_t *f); + +extern const char *sym2str[LAST_SYM + 1]; +extern const char *kw2str[LAST_KEYWORD + 1]; +void preproc_token_print(const preproc_token_t *tok); +int preproc_token_isend(const preproc_token_t *tok); +void proc_token_print(const proc_token_t *tok); +int proc_token_iserror(const proc_token_t *tok); +int proc_token_isend(const proc_token_t *tok); + +KHASH_MAP_DECLARE_STR(str2kw, enum token_keyword_type_e) +extern khash_t(str2kw) *str2kw; +int init_str2kw(void); +void del_str2kw(void); + +#endif // LANG_H diff --git a/wrapperhelper/src/log.c b/wrapperhelper/src/log.c new file mode 100644 index 0000000000000000000000000000000000000000..a50b52a129c5511956828892362cf43b0cc91380 --- /dev/null +++ b/wrapperhelper/src/log.c @@ -0,0 +1,80 @@ +#include "log.h" + +#include +#include + +void loginfo_print(const loginfo_t *info, int print_sz) { + if (!info) { + if (print_sz > 0) printf("%*s", print_sz, ""); + return; + } + if (!info->filename) { + if (print_sz > 0) printf("%*s", print_sz, ""); + return; + } + print_sz -= printf("%s:", info->filename); + if (!info->lineno) { + print_sz -= printf(" "); + if (print_sz > 0) printf("%*s", print_sz, ""); + return; + } + print_sz -= printf("%zu:", info->lineno); + if (!info->colno) { + print_sz -= printf(" "); + if (print_sz > 0) printf("%*s", print_sz, ""); + return; + } + print_sz -= printf("%zu", info->colno); + if (!info->lineno_end || ((info->lineno_end == info->lineno) && (info->colno_end == info->colno))) { + print_sz -= printf(": "); + if (print_sz > 0) printf("%*s", print_sz, ""); + return; + } + print_sz -= printf("-"); + if (info->lineno_end != info->lineno) { + print_sz -= printf("%zu:", info->lineno_end); + } + print_sz -= printf("%zu: ", info->colno_end + 1); + if (print_sz > 0) printf("%*s", print_sz, ""); +} + +void log_error(const loginfo_t *info, const char *format, ...) { + printf("Error: "); + loginfo_print(info, 0); + va_list args; + va_start(args, format); + vprintf(format, args); + va_end(args); +} +void log_internal(const loginfo_t *info, const char *format, ...) { + printf("Internal error: "); + loginfo_print(info, 0); + va_list args; + va_start(args, format); + vprintf(format, args); + va_end(args); +} +void log_memory(const char *format, ...) { + printf("Fatal error: memory error: "); + va_list args; + va_start(args, format); + vprintf(format, args); + va_end(args); +} +void log_TODO(const loginfo_t *info, const char *format, ...) { + printf("Error: "); + loginfo_print(info, 0); + printf("TODO: "); + va_list args; + va_start(args, format); + vprintf(format, args); + va_end(args); +} +void log_warning(const loginfo_t *info, const char *format, ...) { + printf("Warning: "); + loginfo_print(info, 0); + va_list args; + va_start(args, format); + vprintf(format, args); + va_end(args); +} diff --git a/wrapperhelper/src/log.h b/wrapperhelper/src/log.h new file mode 100644 index 0000000000000000000000000000000000000000..e1f210b6819643839e7cde2393b9417330809a6b --- /dev/null +++ b/wrapperhelper/src/log.h @@ -0,0 +1,27 @@ +#ifndef __LOG_H__ +#define __LOG_H__ + +#include + +typedef struct loginfo_s { + const char *filename; // NULL = no log info + size_t lineno; // 0 = no (start) line/column number + size_t colno; + size_t lineno_end; // 0 = no end line/column number + size_t colno_end; +} loginfo_t; + +#define ATTRIBUTE_FORMAT(i, j) __attribute__((format(printf, i, j))) + +void loginfo_print(const loginfo_t *info, int print_sz); // print_sz = min characters output +void log_error(const loginfo_t *info, const char *format, ...) ATTRIBUTE_FORMAT(2, 3); +void log_internal(const loginfo_t *info, const char *format, ...) ATTRIBUTE_FORMAT(2, 3); +void log_memory(const char *format, ...) ATTRIBUTE_FORMAT(1, 2); +void log_TODO(const loginfo_t *info, const char *format, ...) ATTRIBUTE_FORMAT(2, 3); +void log_warning(const loginfo_t *info, const char *format, ...) ATTRIBUTE_FORMAT(2, 3); +#define log_error_nopos(...) log_error(&(loginfo_t){0}, __VA_ARGS__) +#define log_internal_nopos(...) log_internal(&(loginfo_t){0}, __VA_ARGS__) +#define log_TODO_nopos(...) log_TODO(&(loginfo_t){0}, __VA_ARGS__) +#define log_warning_nopos(...) log_warning(&(loginfo_t){0}, __VA_ARGS__) + +#endif // __LOG_H__ diff --git a/wrapperhelper/src/machine.c b/wrapperhelper/src/machine.c new file mode 100644 index 0000000000000000000000000000000000000000..499bcb2fabb4975b90450ac8889ed6ece89f6357 --- /dev/null +++ b/wrapperhelper/src/machine.c @@ -0,0 +1,434 @@ +#include "machine.h" + +#include + +#include "lang.h" + +machine_t machine_x86_64; +machine_t machine_x86; +machine_t machine_aarch64; + +#define PASTE2(a, b) a ## b +#define PASTE(a, b) PASTE2(a, b) +#define STRINGIFY2(a) #a +#define STRINGIFY(a) STRINGIFY2(a) +#define MACHINE_STR STRINGIFY(CUR_MACHINE) +#define MACHINE_VAL PASTE(machine_, CUR_MACHINE) + +#define PATHS_OFFSET_PRE 2 // There are two paths that are always included before any other +#define ADD_PATH(path) \ + if (!(MACHINE_VAL.include_path[failure_id] = strdup(path))) { \ + log_memory("failed to add include path to " MACHINE_STR " platform\n"); \ + goto PASTE(failed_, PASTE(CUR_MACHINE, _paths)); \ + } \ + ++failure_id; +#define INIT_PATHS \ + MACHINE_VAL.npaths = PATHS_OFFSET_PRE + npaths + paths_offset_post; \ + if (!(MACHINE_VAL.include_path = \ + malloc(MACHINE_VAL.npaths * sizeof *MACHINE_VAL.include_path))) { \ + log_memory("failed to add include path to " MACHINE_STR " platform\n"); \ + goto PASTE(failed_, PASTE(CUR_MACHINE, _nopath)); \ + } \ + failure_id = 0; \ + ADD_PATH("include-override/" MACHINE_STR) \ + ADD_PATH("include-override/common") \ + while (failure_id < PATHS_OFFSET_PRE + npaths) { \ + ADD_PATH(extra_include_path[failure_id - PATHS_OFFSET_PRE]) \ + } + +int init_machines(size_t npaths, const char *const *extra_include_path) { + size_t failure_id; + + size_t paths_offset_post = 0; +#define DO_PATH(_path) ++paths_offset_post; +#include "machine.gen" +#undef DO_PATH + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wanalyzer-malloc-leak" +#define CUR_MACHINE x86_64 + machine_x86_64.size_long = 8; + machine_x86_64.align_longdouble = 16; + machine_x86_64.size_longdouble = 16; + machine_x86_64.align_valist = 8; + machine_x86_64.size_valist = 24; + machine_x86_64.max_align = 8; + machine_x86_64.has_int128 = 1; + machine_x86_64.unsigned_char = 0; + machine_x86_64.unnamed_bitfield_aligns = 0; + INIT_PATHS +#define DO_PATH ADD_PATH +#include "machine.gen" +#undef DO_PATH +#undef CUR_MACHINE + +#define CUR_MACHINE x86 + machine_x86.size_long = 4; + machine_x86.align_longdouble = 4; + machine_x86.size_longdouble = 12; + machine_x86.align_valist = 4; + machine_x86.size_valist = 4; + machine_x86.max_align = 4; + machine_x86.has_int128 = 0; + machine_x86.unsigned_char = 0; + machine_x86.unnamed_bitfield_aligns = 0; + INIT_PATHS +#define DO_PATH ADD_PATH +#include "machine.gen" +#undef DO_PATH +#undef CUR_MACHINE + +#define CUR_MACHINE aarch64 + machine_aarch64.size_long = 8; + machine_aarch64.align_longdouble = 16; + machine_aarch64.size_longdouble = 16; + machine_aarch64.align_valist = 8; + machine_aarch64.size_valist = 32; + machine_aarch64.max_align = 8; + machine_aarch64.has_int128 = 1; + machine_aarch64.unsigned_char = 1; + machine_aarch64.unnamed_bitfield_aligns = 1; + INIT_PATHS +#define DO_PATH ADD_PATH +#include "machine.gen" +#undef DO_PATH +#undef CUR_MACHINE +#pragma GCC diagnostic pop + + return 1; + +failed_aarch64_paths: + while (failure_id--) { + free(machine_aarch64.include_path[failure_id]); + } + free(machine_aarch64.include_path); +failed_aarch64_nopath: + failure_id = machine_x86.npaths; +failed_x86_paths: + while (failure_id--) { + free(machine_x86.include_path[failure_id]); + } + free(machine_x86.include_path); +failed_x86_nopath: + failure_id = machine_x86_64.npaths; +failed_x86_64_paths: + while (failure_id--) { + free(machine_x86_64.include_path[failure_id]); + } + free(machine_x86_64.include_path); +failed_x86_64_nopath: + return 0; +} + +static void machine_del(machine_t *m) { + for (size_t path_no = m->npaths; path_no--;) { + free(m->include_path[path_no]); + } + free(m->include_path); +} +void del_machines(void) { + machine_del(&machine_x86_64); + machine_del(&machine_x86); + machine_del(&machine_aarch64); +} + +machine_t *convert_machine_name(const char *archname) { + if (!strcmp(archname, "x86_64")) + return &machine_x86_64; + if (!strcmp(archname, "x86")) + return &machine_x86; + if (!strcmp(archname, "aarch64")) + return &machine_aarch64; + return NULL; +} + +void fill_self_recursion(type_t *typ, struct_t *st) { + if (typ->_internal_use) return; // Recursion, but not self recursion + typ->_internal_use = 1; + switch (typ->typ) { + case TYPE_BUILTIN: break; + case TYPE_ARRAY: + fill_self_recursion(typ->val.array.typ, st); + break; + case TYPE_PTR: + fill_self_recursion(typ->val.typ, st); + break; + case TYPE_FUNCTION: + if (typ->val.fun.nargs != (size_t)-1) { + for (size_t i = 0; (i < typ->val.fun.nargs) && !st->has_self_recursion; ++i) { + fill_self_recursion(typ->val.fun.args[i], st); + } + } + if (!st->has_self_recursion) fill_self_recursion(typ->val.fun.ret, st); + break; + case TYPE_STRUCT_UNION: + if (typ->val.st == st) { + st->has_self_recursion = 1; + break; + } + if (!typ->val.st->is_defined) break; + for (size_t i = 0; (i < typ->val.st->nmembers) && !st->has_self_recursion; ++i) { + fill_self_recursion(typ->val.st->members[i].typ, st); + } + break; + case TYPE_ENUM: + fill_self_recursion(typ->val.typ, st); + break; + } + typ->_internal_use = 0; +} + +int validate_type(loginfo_t *loginfo, machine_t *target, type_t *typ) { + if (typ->is_validated) return 1; + typ->is_validated = 1; + if (typ->is_restrict) { + if (typ->typ != TYPE_PTR) { + log_error(loginfo, "only pointers to object types may be restrict-qualified\n"); + return 0; + } + if (typ->val.typ->typ == TYPE_FUNCTION) { + log_error(loginfo, "only pointers to object types may be restrict-qualified\n"); + return 0; + } + } + if (typ->is_atomic) { + if ((typ->typ == TYPE_ARRAY) || (typ->typ == TYPE_FUNCTION)) { + log_error(loginfo, "array types and function types may not be atomic-qualified\n"); + return 0; + } + } + switch (typ->typ) { + case TYPE_BUILTIN: + switch (typ->val.builtin) { + case BTT_VOID: typ->szinfo.align = typ->szinfo.size = 0; return 1; + case BTT_BOOL: + case BTT_CHAR: + case BTT_SCHAR: + case BTT_UCHAR: + case BTT_S8: + case BTT_U8: typ->szinfo.align = typ->szinfo.size = 1; return 1; + case BTT_SHORT: + case BTT_SSHORT: + case BTT_USHORT: + case BTT_S16: + case BTT_U16: typ->szinfo.align = typ->szinfo.size = 2; return 1; + case BTT_INT: + case BTT_SINT: + case BTT_UINT: + case BTT_S32: + case BTT_U32: typ->szinfo.align = typ->szinfo.size = 4; return 1; + case BTT_LONGLONG: + case BTT_SLONGLONG: + case BTT_ULONGLONG: + case BTT_S64: + case BTT_U64: typ->szinfo.align = target->max_align; typ->szinfo.size = 8; return 1; + case BTT_LONG: + case BTT_SLONG: + case BTT_ULONG: typ->szinfo.align = typ->szinfo.size = target->size_long; return 1; + case BTT_FLOAT: + case BTT_IFLOAT: typ->szinfo.align = typ->szinfo.size = 4; return 1; + case BTT_CFLOAT: + case BTT_DOUBLE: + case BTT_IDOUBLE: typ->szinfo.align = target->max_align; typ->szinfo.size = 8; return 1; + case BTT_CDOUBLE: typ->szinfo.align = target->max_align; typ->szinfo.size = 16; return 1; + case BTT_LONGDOUBLE: + case BTT_ILONGDOUBLE: typ->szinfo.align = target->align_longdouble; typ->szinfo.size = target->size_longdouble; return 1; + case BTT_CLONGDOUBLE: typ->szinfo.align = target->align_longdouble; typ->szinfo.size = 2*target->size_longdouble; return 1; + case BTT_INT128: + case BTT_SINT128: + case BTT_UINT128: + if (!target->has_int128) { + if (loginfo->filename) log_error(loginfo, "target does not have type __int128\n"); + typ->szinfo.align = typ->szinfo.size = 0; return 0; + } + /* FALLTHROUGH */ + case BTT_FLOAT128: + case BTT_IFLOAT128: typ->szinfo.align = typ->szinfo.size = 16; return 1; + case BTT_CFLOAT128: typ->szinfo.align = 16; typ->szinfo.size = 32; return 1; + case BTT_VA_LIST: typ->szinfo.align = target->align_valist; typ->szinfo.size = target->size_valist; return 1; + default: + log_error(loginfo, "unknown builtin %u, cannot fill size info\n", typ->val.builtin); + return 0; + } + case TYPE_ARRAY: + if (typ->val.array.typ->is_incomplete || (typ->val.array.typ->typ == TYPE_FUNCTION)) { + log_error(loginfo, "array types must point to complete object types\n"); + return 0; + } + if ((typ->val.array.typ->typ == TYPE_STRUCT_UNION) && typ->val.array.typ->val.st->has_incomplete) { + log_error(loginfo, "array types may not (inductively) point to structures which last element is incomplete\n"); + return 0; + } + if ((typ->is_atomic) || (typ->is_const) || (typ->is_restrict) || (typ->is_volatile)) { + // qualifier-type-list in array declaration is only allowed in function argument declaration under certain circumstances + log_error(loginfo, "array types may not be qualified\n"); + return 0; + } + if (!validate_type(loginfo, target, typ->val.array.typ)) return 0; + if (typ->val.array.array_sz == (size_t)-1) { + typ->szinfo.size = 0; + typ->szinfo.align = (typ->val.array.typ->szinfo.align < 16) ? 16 : typ->val.array.typ->szinfo.align; + } else { + typ->szinfo.size = typ->val.array.array_sz * typ->val.array.typ->szinfo.size; + typ->szinfo.align = + ((typ->szinfo.size >= 16) && (typ->val.array.typ->szinfo.align < 16)) ? + 16 : + typ->val.array.typ->szinfo.align; + } + return 1; + case TYPE_PTR: + typ->szinfo.size = target->size_long; + typ->szinfo.align = target->size_long; + return validate_type(loginfo, target, typ->val.typ); + case TYPE_FUNCTION: + if ((typ->val.fun.ret->typ == TYPE_FUNCTION) || (typ->val.fun.ret->typ == TYPE_ARRAY)) { + log_error(loginfo, "function types may not return function or array types\n"); + return 0; + } + if (typ->val.fun.nargs != (size_t)-1) { + for (size_t i = 0; i < typ->val.fun.nargs; ++i) { + // Adjust the argument if necessary + // Assume arrays are already converted + if (typ->val.fun.args[i]->typ == TYPE_ARRAY) { + log_error(loginfo, "function argument %zu is an array\n", i + 1); + return 0; + } + if (typ->val.fun.args[i]->typ == TYPE_FUNCTION) { + // Adjustment to pointer + type_t *t2 = type_new_ptr(typ->val.fun.args[i]); + if (!t2) { + log_error(loginfo, "failed to adjust type of argument from function to pointer\n"); + return 0; + } + typ->val.fun.args[i] = t2; + } + if (!validate_type(loginfo, target, typ->val.fun.args[i])) return 0; + } + } + typ->szinfo.size = 0; + typ->szinfo.align = 0; + return validate_type(loginfo, target, typ->val.fun.ret); + case TYPE_STRUCT_UNION: { + if (!typ->val.st->is_defined) return typ->is_incomplete; + size_t max_align = 1, cur_sz = 0; unsigned char cur_bit = 0; + for (size_t i = 0; i < typ->val.st->nmembers; ++i) { + // Adjust the argument if necessary + st_member_t *mem = &typ->val.st->members[i]; + if (mem->typ->typ == TYPE_FUNCTION) { + log_error(loginfo, "structures may not contain function members\n"); + return 0; + } + if (mem->typ->is_incomplete) { + if ((i != typ->val.st->nmembers - 1) || !typ->val.st->is_struct || (mem->typ->typ != TYPE_ARRAY)) { + // The last element of a structure may be a VLA + log_error(loginfo, "structures may not contain incomplete members\n"); + return 0; + } + typ->val.st->has_incomplete = 1; + } + if (!validate_type(loginfo, target, mem->typ)) return 0; + if (!typ->val.st->has_self_recursion) fill_self_recursion(mem->typ, typ->val.st); + if (!typ->val.st->is_struct && (mem->typ->typ == TYPE_STRUCT_UNION)) { + typ->val.st->has_incomplete |= mem->typ->val.st->has_incomplete; + } else if ((mem->typ->typ == TYPE_STRUCT_UNION) && mem->typ->val.st->has_incomplete) { + log_error(loginfo, "structures may not (inductively) contain structures which last element is incomplete\n"); + return 0; + } else if (typ->val.st->is_struct) { + if (mem->typ->is_incomplete) { + if (i && (i == typ->val.st->nmembers - 1) && (mem->typ->typ == TYPE_ARRAY)) { + typ->val.st->has_incomplete |= mem->typ->val.st->has_incomplete; + } else { + log_error(loginfo, "structures may not have any incomplete element, except that the last, but not first, element may be an incomplete array\n"); + return 0; + } + } + } + mem->byte_offset = cur_sz; + mem->bit_offset = cur_bit; + if (mem->is_bitfield) { + if (!typ->val.st->is_struct) { + log_error(loginfo, "TODO: bitfield in union\n"); + return 0; + } + if (mem->typ->is_atomic) { + log_error(loginfo, "atomic bitfields are not supported\n"); + return 0; + } + if (mem->typ->typ != TYPE_BUILTIN) { + log_error(loginfo, "bitfields can only have a specific subset of types\n"); + return 0; + } + if ((mem->typ->val.builtin != BTT_BOOL) && (mem->typ->val.builtin != BTT_CHAR) + && (mem->typ->val.builtin != BTT_SHORT) && (mem->typ->val.builtin != BTT_INT) + && (mem->typ->val.builtin != BTT_LONG) && (mem->typ->val.builtin != BTT_LONGLONG) + && (mem->typ->val.builtin != BTT_SCHAR) && (mem->typ->val.builtin != BTT_UCHAR) + && (mem->typ->val.builtin != BTT_SSHORT) && (mem->typ->val.builtin != BTT_USHORT) + && (mem->typ->val.builtin != BTT_SINT) && (mem->typ->val.builtin != BTT_UINT) + && (mem->typ->val.builtin != BTT_SLONG) && (mem->typ->val.builtin != BTT_ULONG) + && (mem->typ->val.builtin != BTT_S8) && (mem->typ->val.builtin != BTT_U8) + && (mem->typ->val.builtin != BTT_S16) && (mem->typ->val.builtin != BTT_U16) + && (mem->typ->val.builtin != BTT_S32) && (mem->typ->val.builtin != BTT_U32) + && (mem->typ->val.builtin != BTT_S64) && (mem->typ->val.builtin != BTT_U64)) { + // C standard: allow _Bool, (s/u)int + // Implementation: also allow (u/s)char, (u/s)short, (u/s)long, (u/s)long long, [u]intx_t + log_error(loginfo, "bitfields can only have a specific subset of types\n"); + return 0; + } + if (mem->typ->szinfo.size < mem->bitfield_width / 8) { + log_error(loginfo, "bitfield member %c%s%c has width (%zu) greater than its container size (%zu * 8)\n", + mem->name ? '\'' : '<', + mem->name ? string_content(mem->name) : "unnamed", + mem->name ? '\'' : '>', + mem->bitfield_width, + mem->typ->szinfo.size); + return 0; + } + if (mem->bitfield_width) { + if ((target->unnamed_bitfield_aligns || mem->name) && (max_align < mem->typ->szinfo.align)) max_align = mem->typ->szinfo.align; + size_t cur_block = cur_sz / mem->typ->szinfo.align; + size_t end_block = (cur_sz + (cur_bit + mem->bitfield_width - 1) / 8) / mem->typ->szinfo.align; + if (cur_block == end_block) { + cur_sz += mem->bitfield_width / 8; + cur_bit += mem->bitfield_width % 8; + cur_sz += cur_bit / 8; + cur_bit %= 8; + } else { + cur_sz = ((cur_sz + mem->typ->szinfo.align - 1) & ~(mem->typ->szinfo.align - 1)) + (mem->bitfield_width / 8); + cur_bit = mem->bitfield_width % 8; + } + } else { + if (max_align < mem->typ->szinfo.align) max_align = mem->typ->szinfo.align; + cur_sz = ((cur_sz + mem->typ->szinfo.align - 1) & ~(mem->typ->szinfo.align - 1)) + mem->typ->szinfo.size; + log_error(loginfo, "TODO: unnamed zero-width bitfield member\n"); + return 0; + } + } else { + if (max_align < mem->typ->szinfo.align) max_align = mem->typ->szinfo.align; + if (typ->val.st->is_struct) { + if (cur_bit) { + cur_bit = 0; + ++cur_sz; + } + cur_sz = ((cur_sz + mem->typ->szinfo.align - 1) & ~(mem->typ->szinfo.align - 1)) + mem->typ->szinfo.size; + } else { + if (cur_sz < mem->typ->szinfo.size) cur_sz = mem->typ->szinfo.size; + } + } + } + if (cur_bit) { + cur_bit = 0; + ++cur_sz; + } + typ->szinfo.align = max_align; + typ->szinfo.size = (cur_sz + max_align - 1) & ~(max_align - 1); + return 1; } + case TYPE_ENUM: + if (typ->val.typ->typ != TYPE_BUILTIN) { + log_error(loginfo, "the underlying type of an enum is not a builtin type\n"); + return 0; + } + typ->szinfo = typ->val.typ->szinfo; + return 1; + } + return 0; +} diff --git a/wrapperhelper/src/machine.h b/wrapperhelper/src/machine.h new file mode 100644 index 0000000000000000000000000000000000000000..67867c70909f3b04310acfea6bda5acbde57386c --- /dev/null +++ b/wrapperhelper/src/machine.h @@ -0,0 +1,34 @@ +#pragma once + +#ifndef MACHINE_H +#define MACHINE_H + +#include "cstring.h" +#include "khash.h" +#include "log.h" +#include "vector.h" + +struct type_s; // lang.h + +typedef struct machine_s { + // Preprocessor + size_t npaths; + char **include_path; + + // Parsing + size_t size_long; + size_t align_longdouble, size_longdouble; + size_t align_valist, size_valist; + size_t max_align; _Bool has_int128; + _Bool unsigned_char; + // Structure parsing + _Bool unnamed_bitfield_aligns; +} machine_t; + +int init_machines(size_t npaths, const char *const *extra_include_path); +void del_machines(void); +machine_t *convert_machine_name(const char *archname); + +int validate_type(loginfo_t *loginfo, machine_t *target, struct type_s *typ); + +#endif // MACHINE_H diff --git a/wrapperhelper/src/main.c b/wrapperhelper/src/main.c new file mode 100644 index 0000000000000000000000000000000000000000..f39389040519ebda7bcd8db05a65e135dc362330 --- /dev/null +++ b/wrapperhelper/src/main.c @@ -0,0 +1,413 @@ +#include +#include +#include +#include +#include + +#include "generator.h" +#include "lang.h" +#include "machine.h" +#include "parse.h" +#include "prepare.h" +#include "khash.h" + +static void help(char *arg0) { + printf("Usage: %s --help\n" + " %s {-I/path/to/include}* [--prepare|--preproc|--proc] [--arch |-32|-64|--32|--64] \n" + " %s {-I/path/to/include}* [[--emu ] [--target ]|-32|-64|--32|--64] \n" + "\n" + " --prepare Dump all preprocessor tokens (prepare phase)\n" + " --preproc Dump all processor tokens (preprocessor phase)\n" + " --proc Dump all typedefs, declarations and constants (processor phase, default)\n" + " -I Add a path to the list of system includes\n" + "\n" + "Filenames may be preceded by '-f' or '--filename'.\n" + " Parsing file\n" + " Reference file (example: wrappedlibc_private.h)\n" + " Output file\n" + "\n" + "You can also specify the target architecture:" + " --arch Use the architecture \n" + " --emu Use the architecture as emulated architecture\n" + " --target Use the architecture as target/running architecture\n" + " -32 --32 Use the x86 architecture as arch/emulated, aarch64 as target\n" + " -64 --64 Use the x86_64 architecture as arch/emulated, aarch64 as target\n" + "\n" + " is one of 'x86', 'x86_64', 'aarch64'\n", + arg0, arg0, arg0); +} + +enum main_state { + MAIN_RUN, + MAIN_PREPARE, + MAIN_PREPROC, + MAIN_PROC, +}; + +enum bits_state { + BITS_NONE, + BITS_32, + BITS_64, +}; + +int main(int argc, char **argv) { + setbuf(stdout, NULL); + if (!setlocale(LC_NUMERIC, "C")) { + log_error_nopos("failed to set LC_NUMERIC to C\n"); + return 2; + } + + enum main_state ms = MAIN_RUN; + enum bits_state bs = BITS_NONE; + const char *in_file = NULL, *ref_file = NULL, *out_file = NULL; + VECTOR(charp) *paths = vector_new(charp); + const char *archname = NULL, *emuname = NULL, *targetname = NULL; + + for (int i = 1; i < argc; ++i) { + int isfile = 0; + + if (!strcmp(argv[i], "--help")) { + help(argv[0]); + return 0; + } else if (!strcmp(argv[i], "--prepare")) { + ms = MAIN_PREPARE; + } else if (!strcmp(argv[i], "--preproc")) { + ms = MAIN_PREPROC; + } else if (!strcmp(argv[i], "--proc")) { + ms = MAIN_PROC; + } else if (!strcmp(argv[i], "-pthread")) { + // Ignore + } else if (!strcmp(argv[i], "-I") && (i + 1 < argc)) { + if (!vector_push(charp, paths, argv[i + 1])) { + log_memory("failed to add path to buffer\n"); + return 2; + } + ++i; + } else if ((argv[i][0] == '-') && (argv[i][1] == 'I') && (argv[i][2] != '\0')) { + if (!vector_push(charp, paths, argv[i] + 2)) { + log_memory("failed to add path to buffer\n"); + return 2; + } + } else if (!strcmp(argv[i], "--arch")) { + ++i; + if (i < argc) { + archname = argv[i]; + } else { + log_error_nopos("invalid '--arch' option in last position\n"); + help(argv[0]); + return 0; + } + } else if (!strcmp(argv[i], "--emu")) { + ++i; + if (i < argc) { + emuname = argv[i]; + } else { + log_error_nopos("invalid '--emu' option in last position\n"); + help(argv[0]); + return 0; + } + } else if (!strcmp(argv[i], "--target")) { + ++i; + if (i < argc) { + targetname = argv[i]; + } else { + log_error_nopos("invalid '--target' option in last position\n"); + help(argv[0]); + return 0; + } + } else if (!strcmp(argv[i], "-32") || !strcmp(argv[i], "--32")) { + bs = BITS_32; + } else if (!strcmp(argv[i], "-64") || !strcmp(argv[i], "--64")) { + bs = BITS_64; + } else if (!strcmp(argv[i], "-f") || !strcmp(argv[i], "--filename")) { + ++i; + if (i < argc) { + isfile = 1; + } else { + log_error_nopos("invalid '--filename' option in last position\n"); + help(argv[0]); + return 0; + } + } else { + isfile = 1; + } + if (isfile) { + if (!in_file) { + in_file = argv[i]; + } else if (!ref_file) { + ref_file = argv[i]; + } else if (!out_file) { + out_file = argv[i]; + } else { + log_error_nopos("too many unknown options considered as file\n"); + help(argv[0]); + return 2; + } + } + } + switch (ms) { + case MAIN_PREPARE: + case MAIN_PREPROC: + case MAIN_PROC: + check_proc: + if (!in_file || ref_file || out_file) { + log_error_nopos("too many unknown options/not enough arguments\n"); + help(argv[0]); + return 2; + } + if (emuname || targetname) { + log_error_nopos("invalid option '--emu' or '--target' in prepare/preprocessor/processor mode\n"); + help(argv[0]); + return 2; + } + if (bs != BITS_NONE) { + if (archname) { + log_error_nopos("invalid option '--arch' with '--32' or '--64' in prepare/preprocessor/processor mode\n"); + help(argv[0]); + return 2; + } + archname = (bs == BITS_32) ? "x86" : "x86_64"; + } + if (!archname) archname = "x86_64"; + break; + case MAIN_RUN: + if (in_file && !ref_file && !out_file) { + ms = MAIN_PROC; + goto check_proc; + } + if (!in_file || !ref_file || !out_file) { + log_error_nopos("too many unknown options/not enough arguments\n"); + help(argv[0]); + return 2; + } + if (archname) { + log_error_nopos("invalid option '--arch' in run mode\n"); + help(argv[0]); + return 2; + } + if (bs != BITS_NONE) { + if (emuname || targetname) { + log_error_nopos("invalid option '--emu' or '--target' with '--32' or '--64' in run mode\n"); + help(argv[0]); + return 2; + } + emuname = (bs == BITS_32) ? "x86" : "x86_64"; + targetname = "aarch64"; + } + if (!emuname) emuname = "x86_64"; + if (!targetname) targetname = "aarch64"; + break; + } + + if (!init_str2kw()) { + return 2; + } + if (!init_machines(vector_size(charp, paths), (const char*const*)vector_content(charp, paths))) { + vector_del(charp, paths); + del_str2kw(); + return 2; + } + vector_del(charp, paths); + + FILE *f = fopen(in_file, "r"); + if (!f) { + err(2, "Error: failed to open %s", in_file); + del_machines(); + del_str2kw(); + return 2; + } + switch (ms) { + case MAIN_RUN: { + machine_t *emu = convert_machine_name(emuname); + if (!emu) { + log_error_nopos("invalid emulation architecture '%s'\n", emuname); + del_machines(); + del_str2kw(); + return 0; + } + machine_t *target = convert_machine_name(targetname); + if (!target) { + log_error_nopos("invalid target architecture '%s'\n", targetname); + del_machines(); + del_str2kw(); + return 0; + } + + file_t *emu_content = parse_file(emu, in_file, f); // Takes ownership of f + if (!emu_content) { + log_error_nopos("failed to parse the file\n"); + del_machines(); + del_str2kw(); + prepare_cleanup(); + return 0; + } + + f = fopen(in_file, "r"); + if (!f) { + err(2, "Error: failed to re-open %s", in_file); + file_del(emu_content); + del_machines(); + del_str2kw(); + prepare_cleanup(); + return 2; + } + file_t *target_content = parse_file(target, in_file, f); // Takes ownership of f + if (!target_content) { + log_error_nopos("failed to parse the file\n"); + file_del(emu_content); + del_machines(); + del_str2kw(); + prepare_cleanup(); + return 0; + } + + FILE *ref = fopen(ref_file, "r"); + if (!ref) { + err(2, "Error: failed to open %s", ref_file); + file_del(emu_content); + file_del(target_content); + del_machines(); + del_str2kw(); + prepare_cleanup(); + return 2; + } + VECTOR(references) *refs = references_from_file(ref_file, ref); + if (!refs) { + file_del(emu_content); + file_del(target_content); + del_machines(); + del_str2kw(); + prepare_cleanup(); + return 2; + } + // vector_for(references, req, refs) request_print(req); + if (target->size_long != emu->size_long) { + if (!solve_references(refs, emu_content->decl_map, target_content->decl_map, emu_content->relaxed_type_conversion)) { + log_warning_nopos("failed to solve all default requests\n"); + } + } else { + if (!solve_references_simple(refs, emu_content->decl_map, target_content->decl_map, emu_content->relaxed_type_conversion)) { + log_warning_nopos("failed to solve all default requests\n"); + } + } + // vector_for(references, req, refs) request_print(req); + references_print_check(refs); + FILE *out = fopen(out_file, "w"); + if (!out) { + err(2, "Error: failed to open %s", ref_file); + file_del(emu_content); + file_del(target_content); + vector_del(references, refs); + del_machines(); + del_str2kw(); + prepare_cleanup(); + return 2; + } + output_from_references(out, refs); + fclose(out); + vector_del(references, refs); + file_del(emu_content); + file_del(target_content); + del_machines(); + del_str2kw(); + prepare_cleanup(); + return 0; } + + case MAIN_PROC: { + machine_t *arch = convert_machine_name(archname); + if (!arch) { + log_error_nopos("invalid architecture '%s'\n", archname); + } + file_t *content = parse_file(arch, in_file, f); // Takes ownership of f + if (!content) { + log_error_nopos("failed to parse the file\n"); + del_machines(); + del_str2kw(); + prepare_cleanup(); + return 0; + } + // print content + const char *name; + struct_t *st; + string_t *str; + type_t *typ; + declaration_t *decl; + num_constant_t cst; + /* for (enum type_builtin_e i = 0; i < LAST_BUILTIN; ++i) { + printf("Builtin %u: %p, ", i, content->builtins[i]); + type_print(content->builtins[i]); + printf("\n"); + } */ + kh_foreach(content->struct_map, name, st, + printf("Struct: %s -> %p = ", name, st); + struct_print(st); + printf("\n") + ) + kh_foreach_key(content->type_set, typ, + printf("Type: %p = ", typ); + type_print(typ); + printf("\n") + ) + kh_foreach(content->relaxed_type_conversion, typ, str, + printf("Type conversion: %p -> %s\n", typ, string_content(str)); + ) + kh_foreach(content->type_map, name, typ, + printf("Typedef: %s -> %p = ", name, typ); + type_print(typ); + printf("\n") + ) + kh_foreach(content->enum_map, name, typ, + printf("Enum: %s -> %p = ", name, typ); + type_print(typ); + printf("\n") + ) + kh_foreach(content->const_map, name, cst, + printf("Constant: %s -> ", name); + switch (cst.typ) { + case NCT_FLOAT: printf("%ff", cst.val.f); break; + case NCT_DOUBLE: printf("%f", cst.val.d); break; + case NCT_LDOUBLE: printf("%Lfl", cst.val.l); break; + case NCT_INT32: printf("%d", cst.val.i32); break; + case NCT_UINT32: printf("%uu", cst.val.u32); break; + case NCT_INT64: printf("%ldll", cst.val.i64); break; + case NCT_UINT64: printf("%lullu", cst.val.u64); break; + } + printf("\n") + ) + kh_foreach(content->decl_map, name, decl, + printf("Declaration: %s -> %p = %u/%p: ", name, decl, decl->storage, decl->typ); + type_print(decl->typ); + printf("\n") + ) + file_del(content); + del_machines(); + del_str2kw(); + prepare_cleanup(); + return 0; } + + case MAIN_PREPARE: + // Ignored --arch, since this phase does not depend on the architecture + dump_prepare(in_file, f); // Takes ownership of f + del_machines(); + del_str2kw(); + prepare_cleanup(); + return 0; + + case MAIN_PREPROC: { + machine_t *arch = convert_machine_name(archname); + if (!arch) { + log_error_nopos("invalid architecture '%s'\n", archname); + } + dump_preproc(arch, in_file, f); // Takes ownership of f + del_machines(); + del_str2kw(); + prepare_cleanup(); + return 0; } + } + + log_internal_nopos("failed to run mode %u\n", ms); + del_machines(); + del_str2kw(); + prepare_cleanup(); + return 2; +} diff --git a/wrapperhelper/src/parse.c b/wrapperhelper/src/parse.c new file mode 100644 index 0000000000000000000000000000000000000000..8f593f22ee35e77f774ad681113c5edfc1adf7d2 --- /dev/null +++ b/wrapperhelper/src/parse.c @@ -0,0 +1,3556 @@ +#include "parse.h" + +#include +#include + +#include "cstring.h" +#include "khash.h" +#include "machine.h" +#include "prepare.h" +#include "preproc.h" + +void dump_prepare(const char *filename, FILE *file) { + prepare_t *prep = prepare_new_file(file, filename); + if (!prep) { + log_memory("failed to create the prepare structure\n"); + return; + } + while (1) { + preproc_token_t tok = pre_next_token(prep, 0); + preproc_token_print(&tok); + if (preproc_token_isend(&tok)) { + preproc_token_del(&tok); + prepare_del(prep); + return; + } + preproc_token_del(&tok); + } +} +void dump_preproc(machine_t *target, const char *filename, FILE *file) { + char *dirname = strchr(filename, '/') ? strndup(filename, (size_t)(strrchr(filename, '/') - filename)) : NULL; + preproc_t *prep = preproc_new_file(target, file, dirname, filename); + if (!prep) { + log_memory("failed to create the preproc structure\n"); + if (dirname) free(dirname); + return; + } + while (1) { + proc_token_t tok = proc_next_token(prep); + proc_token_print(&tok); + if (proc_token_isend(&tok)) { + proc_token_del(&tok); + preproc_del(prep); + return; + } + proc_token_del(&tok); + } +} + +enum decl_storage { + TMPSTO_NONE, + TMPSTO_TYPEDEF, + TMPSTO_EXTERN, + TMPSTO_STATIC, + TMPSTO_TLS, + TMPSTO_TLS_EXTERN, + TMPSTO_TLS_STATIC, + TMPSTO_AUTO, + TMPSTO_REG, +}; +const enum decl_storage_e tmpsto2sto[] = { + [TMPSTO_NONE] = STORAGE_NONE, + [TMPSTO_TYPEDEF] = STORAGE_NONE, + [TMPSTO_EXTERN] = STORAGE_EXTERN, + [TMPSTO_STATIC] = STORAGE_STATIC, + [TMPSTO_TLS] = STORAGE_TLS, + [TMPSTO_TLS_EXTERN] = STORAGE_TLS_EXTERN, + [TMPSTO_TLS_STATIC] = STORAGE_TLS_STATIC, + [TMPSTO_AUTO] = STORAGE_AUTO, + [TMPSTO_REG] = STORAGE_REG, +}; +enum decl_spec { + SPEC_NONE, + SPEC_BUILTIN, + SPEC_COMPLEX, + SPEC_IMAGINARY, + SPEC_LONGCOMPLEX, + SPEC_LONGIMAGINARY, + SPEC_BUILTIN_NOINT, + SPEC_TYPE, +}; +enum fun_spec { + FSPEC_NONE = 0b00, + FSPEC_INLINE = 0b01, + FSPEC_NORETURN = 0b10, + FSPEC_INLINE_NORETURN = 0b11, +}; +VECTOR_DECLARE_STATIC(size_t, size_t) +VECTOR_IMPL_STATIC(size_t, (void)) + +#define VALIDATION_DECL 1 +#define VALIDATION_LAST_DECL 2 +#define VALIDATION_FUN 3 +static int validate_storage_type(loginfo_t *loginfo, machine_t *target, enum decl_storage storage, + type_t *typ, enum token_sym_type_e sym) { + // We may still do adjustments here + if (!validate_type(loginfo, target, typ)) return 0; + if (typ->typ == TYPE_FUNCTION) { + if ((storage == TMPSTO_TLS) || (storage == TMPSTO_TLS_EXTERN) || (storage == TMPSTO_TLS_STATIC)) { + log_error(loginfo, "functions cannot be thread local\n"); + return 0; + } + if ((sym == SYM_COMMA) || (sym == SYM_RPAREN) || (sym == SYM_SEMICOLON)) { + return (sym == SYM_SEMICOLON) ? VALIDATION_LAST_DECL : VALIDATION_DECL; + } else if (sym == SYM_LBRACKET) { + return VALIDATION_FUN; + } else { + log_error(loginfo, "unexpected symbol %s (%u) after function declaration\n", sym2str[sym], sym); + return 0; + } + } else { + if ((sym == SYM_COMMA) || (sym == SYM_RPAREN) || (sym == SYM_SEMICOLON) || ((storage != TMPSTO_TYPEDEF) && (sym == SYM_EQ))) { + return (sym == SYM_SEMICOLON) ? VALIDATION_LAST_DECL : VALIDATION_DECL; + } else { + log_error(loginfo, "unexpected symbol %s (%u) after %s declaration\n", sym2str[sym], sym, (storage == TMPSTO_TYPEDEF) ? "type" : "variable"); + return 0; + } + } +} + +static void promote_csts(num_constant_t *v1, num_constant_t *v2) { + switch (v1->typ) { + case NCT_FLOAT: + switch (v2->typ) { + case NCT_FLOAT: break; + case NCT_DOUBLE: v1->typ = NCT_DOUBLE; v1->val.d = v1->val.f; break; + case NCT_LDOUBLE: v1->typ = NCT_LDOUBLE; v1->val.l = v1->val.f; break; + case NCT_INT32: v2->typ = NCT_FLOAT; v2->val.f = (float)v2->val.i32; break; + case NCT_UINT32: v2->typ = NCT_FLOAT; v2->val.f = (float)v2->val.u32; break; + case NCT_INT64: v2->typ = NCT_FLOAT; v2->val.f = (float)v2->val.i64; break; + case NCT_UINT64: v2->typ = NCT_FLOAT; v2->val.f = (float)v2->val.u64; break; + } + break; + case NCT_DOUBLE: + switch (v2->typ) { + case NCT_FLOAT: v2->typ = NCT_DOUBLE; v2->val.d = v2->val.f; break; + case NCT_DOUBLE: break; + case NCT_LDOUBLE: v1->typ = NCT_LDOUBLE; v1->val.l = v1->val.d; break; + case NCT_INT32: v2->typ = NCT_DOUBLE; v2->val.d = (double)v2->val.i32; break; + case NCT_UINT32: v2->typ = NCT_DOUBLE; v2->val.d = (double)v2->val.u32; break; + case NCT_INT64: v2->typ = NCT_DOUBLE; v2->val.d = (double)v2->val.i64; break; + case NCT_UINT64: v2->typ = NCT_DOUBLE; v2->val.d = (double)v2->val.u64; break; + } + break; + case NCT_LDOUBLE: + switch (v2->typ) { + case NCT_FLOAT: v2->typ = NCT_LDOUBLE; v2->val.l = v2->val.f; break; + case NCT_DOUBLE: v2->typ = NCT_LDOUBLE; v2->val.l = v2->val.d; break; + case NCT_LDOUBLE: break; + case NCT_INT32: v2->typ = NCT_LDOUBLE; v2->val.l = (long double)v2->val.i32; break; + case NCT_UINT32: v2->typ = NCT_LDOUBLE; v2->val.l = (long double)v2->val.u32; break; + case NCT_INT64: v2->typ = NCT_LDOUBLE; v2->val.l = (long double)v2->val.i64; break; + case NCT_UINT64: v2->typ = NCT_LDOUBLE; v2->val.l = (long double)v2->val.u64; break; + } + break; + case NCT_INT32: + switch (v2->typ) { + case NCT_FLOAT: v1->typ = NCT_FLOAT; v1->val.f = (float)v1->val.i32; break; + case NCT_DOUBLE: v1->typ = NCT_DOUBLE; v1->val.d = (double)v1->val.i32; break; + case NCT_LDOUBLE: v1->typ = NCT_LDOUBLE; v1->val.l = (long double)v1->val.i32; break; + case NCT_INT32: break; + case NCT_UINT32: v1->typ = NCT_UINT32; v1->val.u32 = (uint32_t)v1->val.i32; break; + case NCT_INT64: v1->typ = NCT_INT64; v1->val.i64 = v1->val.i32; break; + case NCT_UINT64: v1->typ = NCT_UINT64; v1->val.u64 = (uint64_t)v1->val.i32; break; + } + break; + case NCT_UINT32: + switch (v2->typ) { + case NCT_FLOAT: v1->typ = NCT_FLOAT; v1->val.f = (float)v1->val.u32; break; + case NCT_DOUBLE: v1->typ = NCT_DOUBLE; v1->val.d = (double)v1->val.u32; break; + case NCT_LDOUBLE: v1->typ = NCT_LDOUBLE; v1->val.l = (long double)v1->val.u32; break; + case NCT_INT32: v2->typ = NCT_UINT32; v2->val.u32 = (uint32_t)v2->val.i32; break; + case NCT_UINT32: break; + case NCT_INT64: v1->typ = NCT_INT64; v1->val.i64 = v1->val.u32; break; + case NCT_UINT64: v1->typ = NCT_UINT64; v1->val.u64 = v1->val.u32; break; + } + break; + case NCT_INT64: + switch (v2->typ) { + case NCT_FLOAT: v1->typ = NCT_FLOAT; v1->val.f = (float)v1->val.i64; break; + case NCT_DOUBLE: v1->typ = NCT_DOUBLE; v1->val.d = (double)v1->val.i64; break; + case NCT_LDOUBLE: v1->typ = NCT_LDOUBLE; v1->val.l = (long double)v1->val.i64; break; + case NCT_INT32: v2->typ = NCT_INT64; v2->val.i64 = v2->val.i32; break; + case NCT_UINT32: v2->typ = NCT_INT64; v2->val.i64 = v2->val.u32; break; + case NCT_INT64: break; + case NCT_UINT64: v1->typ = NCT_UINT64; v1->val.u64 = (uint64_t)v1->val.i64; break; + } + break; + case NCT_UINT64: + switch (v2->typ) { + case NCT_FLOAT: v1->typ = NCT_FLOAT; v1->val.f = (float)v1->val.u64; break; + case NCT_DOUBLE: v1->typ = NCT_DOUBLE; v1->val.d = (double)v1->val.u64; break; + case NCT_LDOUBLE: v1->typ = NCT_LDOUBLE; v1->val.l = (long double)v1->val.u64; break; + case NCT_INT32: v2->typ = NCT_UINT64; v2->val.u64 = (uint64_t)v2->val.i32; break; + case NCT_UINT32: v2->typ = NCT_UINT64; v2->val.u64 = v2->val.u32; break; + case NCT_INT64: v2->typ = NCT_UINT64; v2->val.u64 = (uint64_t)v2->val.i64; break; + case NCT_UINT64: break; + } + break; + } +} + +#define TOKEN_MATCH_ATTR(attr) (!strcmp(string_content(tok->tokv.str), #attr) || !strcmp(string_content(tok->tokv.str), "__" #attr "__")) + +VECTOR_DECLARE_STATIC(exprs, expr_t*) +#define expr_del_ptr(p) expr_del(*(p)) +VECTOR_IMPL_STATIC(exprs, expr_del_ptr) +#undef expr_del_ptr +struct expr_partial_op { + enum expr_partial_op_e { + EPO_LPAREN, + EPO_SIZEOF, + EPO_CAST, + EPO_FUNCALL, + EPO_UNARY, + EPO_BINARY_ARG, + EPO_BINARY_ARG_SYM, + EPO_TERNARY_ARG1, + EPO_TERNARY_ARG2, + } typ; + int once_done_want_level; + int once_done_is_level; + union { + char c; // Empty destructor + type_t *typ; + struct { + expr_t *f; + VECTOR(exprs) *exprs; + } funcall; + enum unary_op_e unop; + struct { + enum binary_op_e op; + expr_t *e1; + enum token_sym_type_e last_sym; + } binop; + struct { + enum ternary_op_e op; + expr_t *e1; + expr_t *e2; + int once_done2_want_level; + enum token_sym_type_e arg23_sep; + } ternop; + } val; +}; +void expr_partial_op_del(struct expr_partial_op *epo) { + switch (epo->typ) { + case EPO_LPAREN: + case EPO_SIZEOF: + return; + case EPO_CAST: + type_del(epo->val.typ); + return; + case EPO_FUNCALL: + expr_del(epo->val.funcall.f); + vector_del(exprs, epo->val.funcall.exprs); + return; + case EPO_UNARY: + return; + case EPO_BINARY_ARG: + case EPO_BINARY_ARG_SYM: + expr_del(epo->val.binop.e1); + return; + case EPO_TERNARY_ARG1: + expr_del(epo->val.ternop.e1); + return; + case EPO_TERNARY_ARG2: + expr_del(epo->val.ternop.e1); + expr_del(epo->val.ternop.e2); + return; + } +} +VECTOR_DECLARE_STATIC(expr_pops, struct expr_partial_op) +VECTOR_IMPL_STATIC(expr_pops, expr_partial_op_del) + +VECTOR_DECLARE_STATIC(types, type_t*) +#define type_ptr_del(t) type_del(*(t)) +VECTOR_IMPL_STATIC(types, type_ptr_del) +#undef type_ptr_del +VECTOR_DECLARE_STATIC(st_members, st_member_t) +VECTOR_IMPL_STATIC(st_members, st_member_del) + +struct parse_declarator_dest_s { + file_t *f; // is_init, is_list + struct { + khash_t(struct_map) *struct_map; + khash_t(type_map) *type_map; + khash_t(type_map) *enum_map; + khash_t(type_set) *type_set; + type_t *(*builtins)[LAST_BUILTIN + 1]; + khash_t(const_map) *const_map; + type_t *dest; + } argt; // !is_init, !is_list + struct { + khash_t(struct_map) *struct_map; + khash_t(type_map) *type_map; + khash_t(type_map) *enum_map; + khash_t(type_set) *type_set; + type_t *(*builtins)[LAST_BUILTIN + 1]; + khash_t(const_map) *const_map; + VECTOR(st_members) *dest; + } structms; // !is_init, is_list +}; +#define PDECL_STRUCT_MAP ((is_init && is_list) ? dest->f->struct_map : (!is_init && is_list) ? dest->structms.struct_map : dest->argt.struct_map) +#define PDECL_TYPE_MAP ((is_init && is_list) ? dest->f->type_map : (!is_init && is_list) ? dest->structms.type_map : dest->argt.type_map) +#define PDECL_ENUM_MAP ((is_init && is_list) ? dest->f->enum_map : (!is_init && is_list) ? dest->structms.enum_map : dest->argt.enum_map) +#define PDECL_TYPE_SET ((is_init && is_list) ? dest->f->type_set : (!is_init && is_list) ? dest->structms.type_set : dest->argt.type_set) +#define PDECL_BUILTINS ((is_init && is_list) ? &dest->f->builtins : (!is_init && is_list) ? dest->structms.builtins : dest->argt.builtins) +#define PDECL_CONST_MAP ((is_init && is_list) ? dest->f->const_map : (!is_init && is_list) ? dest->structms.const_map : dest->argt.const_map) +static int parse_declarator(machine_t *target, struct parse_declarator_dest_s *dest, preproc_t *prep, proc_token_t *tok, enum decl_storage storage, + enum fun_spec fspec, type_t *base_type, int is_init, int is_list, int allow_decl, int allow_abstract); + +// declaration-specifier with storage != NULL +// specifier-qualifier-list + static_assert-declaration with storage == NULL +static int parse_declaration_specifier(machine_t *target, khash_t(struct_map) *struct_map, khash_t(type_map) *type_map, khash_t(type_map) *enum_map, + type_t *(*builtins)[LAST_BUILTIN + 1], khash_t(const_map) *const_map, + khash_t(type_set) *type_set, preproc_t *prep, proc_token_t *tok, enum decl_storage *storage, enum fun_spec *fspec, enum decl_spec *spec, type_t *typ); + +static int is_type_spec_qual_kw(enum token_keyword_type_e kw) { + return + (kw == KW_ATOMIC) || + (kw == KW_BOOL) || + (kw == KW_CHAR) || + (kw == KW_COMPLEX) || + (kw == KW_CONST) || + (kw == KW_DOUBLE) || + (kw == KW_ENUM) || + (kw == KW_FLOAT) || + (kw == KW_FLOAT128) || + (kw == KW_IMAGINARY) || + (kw == KW_INT) || + (kw == KW_INT128) || + (kw == KW_LONG) || + (kw == KW_RESTRICT) || + (kw == KW_SHORT) || + (kw == KW_SIGNED) || + (kw == KW_STRUCT) || + (kw == KW_UNION) || + (kw == KW_UNSIGNED) || + (kw == KW_VOID) || + (kw == KW_VOLATILE) || + 0; +} +#define IS_BEGIN_TYPE_NAME \ + (((tok->tokt == PTOK_KEYWORD) && is_type_spec_qual_kw(tok->tokv.kw)) || \ + ((tok->tokt == PTOK_IDENT) && ((it = kh_get(type_map, type_map, string_content(tok->tokv.str))) != kh_end(type_map)))) +static int parse_type_name(machine_t *target, khash_t(struct_map) *struct_map, khash_t(type_map) *type_map, khash_t(type_map) *enum_map, + type_t *(*builtins)[LAST_BUILTIN + 1], khash_t(const_map) *const_map, + khash_t(type_set) *type_set, preproc_t *prep, proc_token_t *tok, enum token_sym_type_e end_sym, type_t **typ) { + enum decl_spec spec = SPEC_NONE; + if (!parse_declaration_specifier(target, struct_map, type_map, enum_map, builtins, const_map, type_set, prep, tok, NULL, NULL, &spec, *typ)) { + type_del(*typ); + goto failed; + } + *typ = type_try_merge(*typ, type_set); + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == end_sym)) { + return validate_type(&tok->loginfo, target, *typ); + } + struct parse_declarator_dest_s dest2; + dest2.argt.dest = NULL; + dest2.argt.struct_map = struct_map; + dest2.argt.type_map = type_map; + dest2.argt.enum_map = enum_map; + dest2.argt.type_set = type_set; + dest2.argt.builtins = builtins; + dest2.argt.const_map = const_map; + if (!parse_declarator(target, &dest2, prep, tok, TMPSTO_NONE, FSPEC_NONE, *typ, 0, 0, 0, 1)) { + // Token is deleted + type_del(*typ); + goto failed; + } + type_del(*typ); + if (!dest2.argt.dest) { + log_internal(&tok->loginfo, "parse_type_name: argument type is NULL\n"); + // Empty destructor + goto failed; + } + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != end_sym)) { + log_error(&tok->loginfo, "invalid token %s %u after type name\n", + (tok->tokt == PTOK_SYM) ? "symbol" : "type", (tok->tokt == PTOK_SYM) ? tok->tokv.sym : tok->tokt); + type_del(dest2.argt.dest); + proc_token_del(tok); + goto failed; + } + *typ = dest2.argt.dest; + *typ = type_try_merge(*typ, type_set); + return validate_type(&tok->loginfo, target, *typ); + +failed: + return 0; +} + +static expr_t *parse_expression(machine_t *target, khash_t(struct_map) *struct_map, khash_t(type_map) *type_map, khash_t(type_map) *enum_map, + type_t *(*builtins)[LAST_BUILTIN + 1], khash_t(const_map) *const_map, + khash_t(type_set) *type_set, preproc_t *prep, proc_token_t *tok, int expr_level) { + // Note that expr_level >= 1; expr_level = 0 doesn't appear in the grammar + if ((expr_level < 1) || (expr_level > 16)) { + log_internal(&tok->loginfo, "Internal error: invalid expression level %d\n", expr_level); + return NULL; + } + + VECTOR(expr_pops) *op_stack = vector_new(expr_pops); + if (!op_stack) { + log_memory("failed to create operation stack"); + proc_token_del(tok); + return NULL; + } + + int has_level; + expr_t *e; +pushed_expr: + has_level = -1; + e = NULL; + +expr_new_token: + if (tok->tokt == PTOK_IDENT) { + if (has_level != -1) { + log_error(&tok->loginfo, "invalid expression: unexpected identifier '%s'\n", string_content(tok->tokv.str)); + string_del(tok->tokv.str); + goto failed; + } + has_level = 0; + e = malloc(sizeof *e); + if (!e) { + log_memory("failed to create new expression atom\n"); + string_del(tok->tokv.str); + goto failed; + } + e->typ = ETY_VAR; + e->val.var = tok->tokv.str; + *tok = proc_next_token(prep); + goto expr_new_token; + } else if (tok->tokt == PTOK_NUM) { + if (has_level != -1) { + log_error(&tok->loginfo, "invalid expression: unexpected number '%s'\n", string_content(tok->tokv.str)); + string_del(tok->tokv.str); + goto failed; + } + has_level = 0; + e = malloc(sizeof *e); + if (!e) { + log_memory("failed to create new expression atom\n"); + string_del(tok->tokv.str); + goto failed; + } + e->typ = ETY_CONST; + if (!num_constant_convert(&tok->loginfo, tok->tokv.str, &e->val.cst, target->size_long == 4)) { + string_del(tok->tokv.str); + goto failed; + } + string_del(tok->tokv.str); + *tok = proc_next_token(prep); + goto expr_new_token; + } else if ((tok->tokt == PTOK_STRING) && !tok->tokv.sisstr) { + if (has_level != -1) { + log_error(&tok->loginfo, "invalid expression: unexpected character constant '%s'\n", string_content(tok->tokv.sstr)); + string_del(tok->tokv.sstr); + goto failed; + } + if (string_len(tok->tokv.sstr) != 1) { + log_TODO(&tok->loginfo, "invalid expression: multibyte character constant '%s'\n", string_content(tok->tokv.sstr)); + string_del(tok->tokv.sstr); + goto failed; + } + has_level = 0; + e = malloc(sizeof *e); + if (!e) { + log_memory("failed to create new expression atom\n"); + string_del(tok->tokv.sstr); + goto failed; + } + e->typ = ETY_CONST; + e->val.cst.typ = NCT_INT32; + e->val.cst.val.i32 = (int32_t)string_content(tok->tokv.sstr)[0]; + string_del(tok->tokv.sstr); + *tok = proc_next_token(prep); + goto expr_new_token; + } + +#define UNOP(toksym, opt, main_lv, right_lv) \ + if ((expr_level >= main_lv) && (tok->tokt == PTOK_SYM) && (tok->tokv.sym == toksym)) { \ + if (has_level == -1) { \ + struct expr_partial_op pop = { \ + .once_done_want_level = expr_level, \ + .once_done_is_level = main_lv, \ + .typ = EPO_UNARY, \ + .val.unop = opt \ + }; \ + if (!vector_push(expr_pops, op_stack, pop)) { \ + log_memory("failed to add partial operation to operation stack\n"); \ + /* Empty destructor */ \ + goto failed; \ + } \ + expr_level = right_lv; \ + *tok = proc_next_token(prep); \ + goto pushed_expr; \ + } \ + } +#define BINOP(toksym, opt, main_lv, left_lv, right_lv) \ + if ((expr_level >= main_lv) && (tok->tokt == PTOK_SYM) && (tok->tokv.sym == toksym)) { \ + if ((has_level != -1) && (has_level <= left_lv)) { \ + struct expr_partial_op pop = { \ + .once_done_want_level = expr_level, \ + .once_done_is_level = main_lv, \ + .typ = EPO_BINARY_ARG, \ + .val.binop = {.op = opt, .e1 = e} \ + }; \ + if (!vector_push(expr_pops, op_stack, pop)) { \ + log_memory("failed to add partial operation to operation stack\n"); \ + /* Empty destructor */ \ + goto failed; \ + } \ + expr_level = right_lv; \ + *tok = proc_next_token(prep); \ + goto pushed_expr; \ + } \ + } + + if ((expr_level >= 1) && (tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_PLUSPLUS)) { + if ((has_level != -1) && (has_level <= 1)) { + has_level = 1; + expr_t *new_e = malloc(sizeof *new_e); + if (!new_e) { + log_memory("failed to create new expression atom\n"); + string_del(tok->tokv.str); + goto failed; + } + new_e->typ = ETY_UNARY; + new_e->val.unary.typ = UOT_POSTINCR; + new_e->val.unary.e = e; + e = new_e; + *tok = proc_next_token(prep); + goto expr_new_token; + } + } + if ((expr_level >= 1) && (tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_DASHDASH)) { + if ((has_level != -1) && (has_level <= 1)) { + has_level = 1; + expr_t *new_e = malloc(sizeof *new_e); + if (!new_e) { + log_memory("failed to create new expression atom\n"); + string_del(tok->tokv.str); + goto failed; + } + new_e->typ = ETY_UNARY; + new_e->val.unary.typ = UOT_POSTDECR; + new_e->val.unary.e = e; + e = new_e; + *tok = proc_next_token(prep); + goto expr_new_token; + } + } + if ((expr_level >= 1) && (tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_LSQBRACKET)) { + if ((has_level != -1) && (has_level <= 1)) { + struct expr_partial_op pop = { + .once_done_want_level = expr_level, + .once_done_is_level = 1, + .typ = EPO_BINARY_ARG_SYM, + .val.binop = {.last_sym = SYM_RSQBRACKET, .op = BOT_ARRAY, .e1 = e} + }; + if (!vector_push(expr_pops, op_stack, pop)) { + log_memory("failed to add partial operation to operation stack\n"); + /* Empty destructor */ + goto failed; + } + expr_level = 16; + *tok = proc_next_token(prep); + goto pushed_expr; + } + } + if ((expr_level >= 1) && (tok->tokt == PTOK_SYM) && ((tok->tokv.sym == SYM_DOT) || (tok->tokv.sym == SYM_DASHGT))) { + if ((has_level != -1) && (has_level <= 1)) { + has_level = 1; + int is_ptr = tok->tokv.sym == SYM_DASHGT; + + *tok = proc_next_token(prep); + if (tok->tokt != PTOK_IDENT) { + log_error(&tok->loginfo, "invalid expression: unexpected token after access symbol\n"); + proc_token_del(tok); + goto failed; + } + expr_t *new_e = malloc(sizeof *new_e); + if (!new_e) { + log_memory("failed to create new expression atom\n"); + string_del(tok->tokv.str); + goto failed; + } + new_e->typ = is_ptr ? ETY_PTRACCESS : ETY_ACCESS; + new_e->val.access.val = e; + new_e->val.access.member = tok->tokv.str; + e = new_e; + *tok = proc_next_token(prep); + goto expr_new_token; + } + } + UNOP(SYM_PLUSPLUS, UOT_PREINCR, 2, 2) + UNOP(SYM_DASHDASH, UOT_PREDECR, 2, 2) + UNOP(SYM_AMP, UOT_REF, 2, 3) + UNOP(SYM_PLUS, UOT_POS, 2, 3) + UNOP(SYM_DASH, UOT_NEG, 2, 3) + UNOP(SYM_STAR, UOT_DEREF, 2, 3) + UNOP(SYM_TILDE, UOT_ANOT, 2, 3) + UNOP(SYM_EXCL, UOT_BNOT, 2, 3) + BINOP(SYM_STAR, BOT_MUL, 4, 4, 3) + BINOP(SYM_SLASH, BOT_DIV, 4, 4, 3) + BINOP(SYM_PERCENT, BOT_MOD, 4, 4, 3) + BINOP(SYM_PLUS, BOT_ADD, 5, 5, 4) + BINOP(SYM_DASH, BOT_SUB, 5, 5, 4) + BINOP(SYM_LTLT, BOT_LSH, 6, 6, 5) + BINOP(SYM_GTGT, BOT_RSH, 6, 6, 5) + BINOP(SYM_LT, BOT_LT, 7, 7, 6) + BINOP(SYM_GT, BOT_GT, 7, 7, 6) + BINOP(SYM_LTEQ, BOT_LE, 7, 7, 6) + BINOP(SYM_GTEQ, BOT_GE, 7, 7, 6) + BINOP(SYM_EQEQ, BOT_EQ, 8, 8, 7) + BINOP(SYM_EXCLEQ, BOT_NE, 8, 8, 7) + BINOP(SYM_AMP, BOT_AAND, 9, 9, 8) + BINOP(SYM_HAT, BOT_AXOR, 10, 10, 9) + BINOP(SYM_PIPE, BOT_AOR, 11, 11, 10) + BINOP(SYM_AMPAMP, BOT_BAND, 12, 12, 11) + BINOP(SYM_PIPEPIPE, BOT_BOR, 13, 13, 12) + if ((expr_level >= 14) && (tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_QUESTION)) { + if ((has_level != -1) && (has_level <= 13)) { + struct expr_partial_op pop = { + .once_done_want_level = expr_level, + .once_done_is_level = 14, + .typ = EPO_TERNARY_ARG1, + .val.ternop = {.arg23_sep = SYM_COLON, .once_done2_want_level = 14, .op = TOT_COND, .e1 = e} + }; + if (!vector_push(expr_pops, op_stack, pop)) { + log_memory("failed to add partial operation to operation stack\n"); + // Empty destructor + goto failed; + } + expr_level = 16; + *tok = proc_next_token(prep); + goto pushed_expr; + } + } + BINOP(SYM_EQ, BOT_ASSGN_EQ, 15, 2, 15) + BINOP(SYM_STAREQ, BOT_ASSGN_MUL, 15, 2, 15) + BINOP(SYM_SLASHEQ, BOT_ASSGN_DIV, 15, 2, 15) + BINOP(SYM_PERCENTEQ, BOT_ASSGN_MOD, 15, 2, 15) + BINOP(SYM_PLUSEQ, BOT_ASSGN_ADD, 15, 2, 15) + BINOP(SYM_DASHEQ, BOT_ASSGN_SUB, 15, 2, 15) + BINOP(SYM_LTLTEQ, BOT_ASSGN_LSH, 15, 2, 15) + BINOP(SYM_GTGTEQ, BOT_ASSGN_RSH, 15, 2, 15) + BINOP(SYM_AMPEQ, BOT_ASSGN_AAND, 15, 2, 15) + BINOP(SYM_HATEQ, BOT_ASSGN_AXOR, 15, 2, 15) + BINOP(SYM_PIPEEQ, BOT_ASSGN_AOR, 15, 2, 15) + BINOP(SYM_COMMA, BOT_COMMA, 16, 16, 15) + + // expr2 ::= sizeof expr2 + // which includes expr2 ::= sizeof ( expr16 ) + // expr2 ::= sizeof ( type-name ) + if ((has_level == -1) && (expr_level >= 2) && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_SIZEOF)) { + *tok = proc_next_token(prep); + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_LPAREN)) { + struct expr_partial_op pop = { + .once_done_want_level = expr_level, + .once_done_is_level = 2, + .typ = EPO_SIZEOF, + .val.c = '\0' + }; + if (!vector_push(expr_pops, op_stack, pop)) { + log_memory("failed to add partial operation to operation stack\n"); + proc_token_del(tok); + goto failed; + } + expr_level = 2; + goto pushed_expr; + } + // Empty destructor + *tok = proc_next_token(prep); + khiter_t it; + if (IS_BEGIN_TYPE_NAME) { + type_t *typ = type_new(); + if (!typ) { + log_memory("failed to create new type info structure\n"); + proc_token_del(tok); + goto failed; + } + if (!parse_type_name(target, struct_map, type_map, enum_map, builtins, const_map, type_set, prep, tok, SYM_RPAREN, &typ)) { + goto failed; + } + if (!typ->is_validated || typ->is_incomplete || (typ->typ == TYPE_FUNCTION)) { + log_error(&tok->loginfo, "cannot get the size of a function or incomplete type\n"); + type_del(typ); + proc_token_del(tok); + goto failed; + } + e = malloc(sizeof *e); + if (!e) { + log_memory("failed to create new expression atom\n"); + type_del(typ); + proc_token_del(tok); + goto failed; + } + e->typ = ETY_CONST; + e->val.cst.typ = NCT_UINT64; + e->val.cst.val.u64 = typ->szinfo.size; + has_level = 2; + type_del(typ); + if (!e->val.cst.val.u64) { + log_internal(&tok->loginfo, "size of type is 0\n"); + proc_token_del(tok); + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + goto expr_new_token; + } else { + struct expr_partial_op pop = { + .once_done_want_level = expr_level, + .once_done_is_level = 2, + .typ = EPO_SIZEOF, + .val.c = 0 + }; + if (!vector_push(expr_pops, op_stack, pop)) { + log_memory("failed to add partial operation to operation stack\n"); + proc_token_del(tok); + goto failed; + } + pop = (struct expr_partial_op){ + .once_done_want_level = 2, + .once_done_is_level = 0, + .typ = EPO_LPAREN, + .val.c = 0 + }; + if (!vector_push(expr_pops, op_stack, pop)) { + log_memory("failed to add partial operation to operation stack\n"); + proc_token_del(tok); + goto failed; + } + expr_level = 16; + goto pushed_expr; + } + } + // expr2 ::= _Alignof ( type-name ) + if ((has_level == -1) && (expr_level >= 2) && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_ALIGNOF)) { + *tok = proc_next_token(prep); + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_LPAREN)) { + log_error(&tok->loginfo, "unexpected token, expected symbol '('\n"); + proc_token_del(tok); + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + type_t *typ = type_new(); + if (!typ) { + log_memory("failed to create new type info structure\n"); + proc_token_del(tok); + goto failed; + } + if (!parse_type_name(target, struct_map, type_map, enum_map, builtins, const_map, type_set, prep, tok, SYM_RPAREN, &typ)) { + goto failed; + } + if (!typ->is_validated || typ->is_incomplete || (typ->typ == TYPE_FUNCTION)) { + log_error(&tok->loginfo, "cannot get the alignment of a function or incomplete type\n"); + type_del(typ); + proc_token_del(tok); + goto failed; + } + e = malloc(sizeof *e); + if (!e) { + log_memory("failed to create new expression atom\n"); + type_del(typ); + proc_token_del(tok); + goto failed; + } + e->typ = ETY_CONST; + e->val.cst.typ = NCT_UINT64; + e->val.cst.val.u64 = typ->szinfo.align; + has_level = 2; + type_del(typ); + if (!e->val.cst.val.u64) { + log_internal(&tok->loginfo, "alignment of type is 0\n"); + proc_token_del(tok); + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + goto expr_new_token; + } + + // expr0 ::= ( expr16 ) + // expr1 ::= expr1 ( ) + // expr1 ::= expr1 ( expr15 {, expr15}* ) + // expr1 ::= ( type-name ) { initializer-list ,? } + // expr3 ::= ( type-name ) expr3 + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_LPAREN)) { + if ((has_level != -1) && (expr_level >= 1) && (has_level <= 1)) { + // Empty destructor + *tok = proc_next_token(prep); + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_RPAREN)) { + expr_t *new_e = malloc(sizeof *new_e); + new_e = malloc(sizeof *new_e); + if (!new_e) { + log_memory("failed to create new expression atom\n"); + // Empty destructor + goto failed; + } + new_e->typ = ETY_CALL; + new_e->val.call.fun = e; + new_e->val.call.nargs = 0; + new_e->val.call.args = NULL; + e = new_e; + *tok = proc_next_token(prep); + goto expr_new_token; + } + // We want a function call with at least one argument + VECTOR(exprs) *exprs = vector_new_cap(exprs, 1); + if (!exprs) { + log_memory("failed to add partial operation to operation stack\n"); + proc_token_del(tok); + goto failed; + } + struct expr_partial_op pop = { + .once_done_want_level = expr_level, + .once_done_is_level = 1, + .typ = EPO_FUNCALL, + .val.funcall = {.f = e, .exprs = exprs} + }; + if (!vector_push(expr_pops, op_stack, pop)) { + log_memory("failed to add partial operation to operation stack\n"); + vector_del(exprs, exprs); + proc_token_del(tok); + goto failed; + } + expr_level = 15; + goto pushed_expr; + } + if (has_level == -1) { + *tok = proc_next_token(prep); + khiter_t it; + if ((expr_level >= 1) && IS_BEGIN_TYPE_NAME) { + type_t *typ = type_new(); + if (!typ) { + log_memory("failed to create new type info structure\n"); + proc_token_del(tok); + goto failed; + } + if (!parse_type_name(target, struct_map, type_map, enum_map, builtins, const_map, type_set, prep, tok, SYM_RPAREN, &typ)) { + type_del(typ); + proc_token_del(tok); + goto failed; + } + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_LBRACKET)) { + log_TODO(&tok->loginfo, "initializer-list\n"); + type_del(typ); + proc_token_del(tok); + goto failed; + } else if (expr_level < 3) { + log_error(&tok->loginfo, "cast expression (level 3) but the required expression level is 1 or 2 (expected symbol '{')\n"); + type_del(typ); + proc_token_del(tok); + goto failed; + } else { + struct expr_partial_op pop = { + .once_done_want_level = expr_level, + .once_done_is_level = 3, + .typ = EPO_CAST, + .val.typ = typ + }; + if (!vector_push(expr_pops, op_stack, pop)) { + log_memory("failed to add partial operation to operation stack\n"); + /* Empty destructor */ + goto failed; + } + expr_level = 3; + *tok = proc_next_token(prep); + goto pushed_expr; + } + } else { + struct expr_partial_op pop = { + .once_done_want_level = expr_level, + .once_done_is_level = 0, + .typ = EPO_LPAREN, + .val.c = 0 + }; + if (!vector_push(expr_pops, op_stack, pop)) { + log_memory("failed to add partial operation to operation stack\n"); + proc_token_del(tok); + goto failed; + } + expr_level = 16; + goto pushed_expr; + } + } + } + + if (vector_size(expr_pops, op_stack)) { + if (has_level != -1) { + struct expr_partial_op *pop = &vector_last(expr_pops, op_stack); + expr_t *new_e; + switch (pop->typ) { + case EPO_LPAREN: + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_RPAREN)) { + has_level = pop->once_done_is_level; + expr_level = pop->once_done_want_level; + vector_pop_nodel(expr_pops, op_stack); + // Empty destructor + *tok = proc_next_token(prep); + goto expr_new_token; + } + break; + case EPO_SIZEOF: + log_TODO(&tok->loginfo, "find type of expression\n"); + proc_token_del(tok); + goto failed; + case EPO_CAST: + new_e = malloc(sizeof *new_e); + if (!new_e) { + log_memory("failed to create new expression atom\n"); + proc_token_del(tok); + goto failed; + } + has_level = pop->once_done_is_level; + expr_level = pop->once_done_want_level; + new_e->typ = ETY_CAST; + new_e->val.cast.typ = pop->val.typ; + new_e->val.cast.e = e; + e = new_e; + vector_pop_nodel(expr_pops, op_stack); + // Keep the same token + goto expr_new_token; + case EPO_FUNCALL: + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_RPAREN)) { + has_level = pop->once_done_is_level; + expr_level = pop->once_done_want_level; + if (!vector_push(exprs, pop->val.funcall.exprs, e)) { + log_memory("failed to add argument to argument stack\n"); + // Empty destructor + goto failed; + } + e = malloc(sizeof *e); + if (!e) { + log_memory("failed to create new expression atom\n"); + // Empty destructor + goto failed; + } + e->typ = ETY_CALL; + e->val.call.fun = pop->val.funcall.f; + e->val.call.nargs = vector_size(exprs, pop->val.funcall.exprs); + e->val.call.args = vector_steal(exprs, pop->val.funcall.exprs); + vector_pop_nodel(expr_pops, op_stack); + // Empty destructor + *tok = proc_next_token(prep); + goto expr_new_token; + } else if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_COMMA)) { + if (!vector_push(exprs, pop->val.funcall.exprs, e)) { + log_memory("failed to add argument to argument stack\n"); + // Empty destructor + goto failed; + } + // expr_level is already 15 + // Empty destructor + *tok = proc_next_token(prep); + goto pushed_expr; + } + break; + case EPO_UNARY: + new_e = malloc(sizeof *new_e); + if (!new_e) { + log_memory("failed to create new expression atom\n"); + proc_token_del(tok); + goto failed; + } + has_level = pop->once_done_is_level; + expr_level = pop->once_done_want_level; + new_e->typ = ETY_UNARY; + new_e->val.unary.typ = pop->val.unop; + new_e->val.unary.e = e; + e = new_e; + vector_pop_nodel(expr_pops, op_stack); + // Keep the same token + goto expr_new_token; + case EPO_BINARY_ARG_SYM: + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != pop->val.binop.last_sym)) break; + // Empty destructor + *tok = proc_next_token(prep); + /* FALLTHROUGH */ + case EPO_BINARY_ARG: + new_e = malloc(sizeof *new_e); + if (!new_e) { + log_memory("failed to create new expression atom\n"); + proc_token_del(tok); + goto failed; + } + has_level = pop->once_done_is_level; + expr_level = pop->once_done_want_level; + new_e->typ = ETY_BINARY; + new_e->val.binary.typ = pop->val.binop.op; + new_e->val.binary.e1 = pop->val.binop.e1; + new_e->val.binary.e2 = e; + e = new_e; + vector_pop_nodel(expr_pops, op_stack); + // Keep the same token + goto expr_new_token; + case EPO_TERNARY_ARG1: + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == pop->val.ternop.arg23_sep)) { + pop->typ = EPO_TERNARY_ARG2; + pop->val.ternop.e2 = e; + expr_level = pop->val.ternop.once_done2_want_level; + // Empty destructor + *tok = proc_next_token(prep); + goto pushed_expr; + } + break; + case EPO_TERNARY_ARG2: + new_e = malloc(sizeof *new_e); + if (!new_e) { + log_memory("failed to create new expression atom\n"); + proc_token_del(tok); + goto failed; + } + has_level = pop->once_done_is_level; + expr_level = pop->once_done_want_level; + new_e->typ = ETY_TERNARY; + new_e->val.ternary.typ = pop->val.ternop.op; + new_e->val.ternary.e1 = pop->val.ternop.e1; + new_e->val.ternary.e2 = pop->val.ternop.e2; + new_e->val.ternary.e3 = e; + e = new_e; + vector_pop_nodel(expr_pops, op_stack); + // Keep the same token + goto expr_new_token; + } + } + } + + if ((vector_size(expr_pops, op_stack) == 0) && (has_level != -1)) { + vector_del(expr_pops, op_stack); + return e; + } + log_error(&tok->loginfo, "invalid expression: unexpected token\n"); + proc_token_del(tok); +failed: + vector_del(expr_pops, op_stack); + if (e) expr_del(e); + return NULL; +} +static int eval_expression(loginfo_t *li, machine_t *target, expr_t *e, khash_t(const_map) *const_map, num_constant_t *dest, int fatal) { + // Evaluate the expression (we suppose it is constant) + switch (e->typ) { + case ETY_VAR: { + khiter_t it = kh_get(const_map, const_map, string_content(e->val.var)); + if (it != kh_end(const_map)) { + *dest = kh_val(const_map, it); + return 1; + } + if (fatal) log_error(li, "failed to evaluate expression: expression is not constant (variable)\n"); + return 0; } + + case ETY_CONST: + *dest = e->val.cst; + return 1; + + // case ETY_GENERIC: + + case ETY_CALL: + if (fatal) log_error(li, "failed to evaluate expression: expression is not constant (function call)\n"); + return 0; + + case ETY_ACCESS: + case ETY_PTRACCESS: + if (fatal) log_error(li, "failed to evaluate expression: expression is not constant (member access)\n"); + return 0; + + case ETY_UNARY: + if (!eval_expression(li, target, e->val.unary.e, const_map, dest, fatal)) return 0; + + switch (e->val.unary.typ) { + case UOT_POSTINCR: + case UOT_POSTDECR: + case UOT_PREINCR: + case UOT_PREDECR: + case UOT_REF: + case UOT_DEREF: + if (fatal) log_error(li, "failed to evaluate expression: expression is not constant (assignment or memory accesses)\n"); + return 0; + case UOT_POS: + return 1; // Nothing to do + case UOT_NEG: + switch (dest->typ) { + case NCT_FLOAT: dest->val.f = -dest->val.f; return 1; + case NCT_DOUBLE: dest->val.d = -dest->val.d; return 1; + case NCT_LDOUBLE: dest->val.l = -dest->val.l; return 1; + case NCT_INT32: dest->val.i32 = -dest->val.i32; return 1; + case NCT_UINT32: dest->val.u32 = -dest->val.u32; return 1; + case NCT_INT64: dest->val.i64 = -dest->val.i64; return 1; + case NCT_UINT64: dest->val.u64 = -dest->val.u64; return 1; + default: return 0; + } + case UOT_ANOT: + switch (dest->typ) { + case NCT_FLOAT: + case NCT_DOUBLE: + case NCT_LDOUBLE: + if (fatal) log_error(li, "failed to evaluate expression: cannot bitwise-negate a floating point number\n"); + return 0; + case NCT_INT32: dest->val.i32 = ~dest->val.i32; return 1; + case NCT_UINT32: dest->val.u32 = ~dest->val.u32; return 1; + case NCT_INT64: dest->val.i64 = ~dest->val.i64; return 1; + case NCT_UINT64: dest->val.u64 = ~dest->val.u64; return 1; + default: return 0; + } + case UOT_BNOT: + switch (dest->typ) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" + case NCT_FLOAT: dest->typ = NCT_INT32; dest->val.i32 = !dest->val.f; return 1; + case NCT_DOUBLE: dest->typ = NCT_INT32; dest->val.i32 = !dest->val.d; return 1; + case NCT_LDOUBLE: dest->typ = NCT_INT32; dest->val.i32 = !dest->val.l; return 1; +#pragma GCC diagnostic pop + case NCT_INT32: dest->typ = NCT_INT32; dest->val.i32 = !dest->val.i32; return 1; + case NCT_UINT32: dest->typ = NCT_INT32; dest->val.i32 = !dest->val.u32; return 1; + case NCT_INT64: dest->typ = NCT_INT32; dest->val.i32 = !dest->val.i64; return 1; + case NCT_UINT64: dest->typ = NCT_INT32; dest->val.i32 = !dest->val.u64; return 1; + default: return 0; + } + default: return 0; + } + + case ETY_BINARY: { + num_constant_t dest1, dest2; + if (!eval_expression(li, target, e->val.binary.e1, const_map, &dest1, fatal)) return 0; + if (!eval_expression(li, target, e->val.binary.e2, const_map, &dest2, fatal)) return 0; + + switch (e->val.binary.typ) { + case BOT_ASSGN_EQ: + case BOT_ASSGN_ADD: + case BOT_ASSGN_SUB: + case BOT_ASSGN_MUL: + case BOT_ASSGN_DIV: + case BOT_ASSGN_MOD: + case BOT_ASSGN_LSH: + case BOT_ASSGN_RSH: + case BOT_ASSGN_AAND: + case BOT_ASSGN_AXOR: + case BOT_ASSGN_AOR: + case BOT_ARRAY: // Is this possible? + if (fatal) log_error(li, "failed to evaluate expression: expression is not constant (assignments)\n"); + return 0; +#define DOIT(op) \ + promote_csts(&dest1, &dest2); \ + switch ((dest->typ = dest1.typ)) { \ + case NCT_FLOAT: dest->val.f = dest1.val.f op dest2.val.f ; return 1; \ + case NCT_DOUBLE: dest->val.d = dest1.val.d op dest2.val.d ; return 1; \ + case NCT_LDOUBLE: dest->val.l = dest1.val.l op dest2.val.l ; return 1; \ + case NCT_INT32: dest->val.i32 = dest1.val.i32 op dest2.val.i32; return 1; \ + case NCT_UINT32: dest->val.u32 = dest1.val.u32 op dest2.val.u32; return 1; \ + case NCT_INT64: dest->val.i64 = dest1.val.i64 op dest2.val.i64; return 1; \ + case NCT_UINT64: dest->val.u64 = dest1.val.u64 op dest2.val.u64; return 1; \ + default: return 0; \ + } +#define DOIT_INT(op) \ + promote_csts(&dest1, &dest2); \ + switch ((dest->typ = dest1.typ)) { \ + case NCT_FLOAT: \ + case NCT_DOUBLE: \ + case NCT_LDOUBLE: \ + if (fatal) log_error(li, "failed to evaluate expression: binary operation %u incompatible with floating point numbers\n", e->val.binary.typ); \ + return 0; \ + case NCT_INT32: dest->val.i32 = dest1.val.i32 op dest2.val.i32; return 1; \ + case NCT_UINT32: dest->val.u32 = dest1.val.u32 op dest2.val.u32; return 1; \ + case NCT_INT64: dest->val.i64 = dest1.val.i64 op dest2.val.i64; return 1; \ + case NCT_UINT64: dest->val.u64 = dest1.val.u64 op dest2.val.u64; return 1; \ + default: return 0; \ + } +#define DOIT_BOOL(op) \ + promote_csts(&dest1, &dest2); \ + switch (dest1.typ) { \ + case NCT_FLOAT: dest->typ = NCT_UINT32; dest->val.u32 = dest1.val.f op dest2.val.f ; return 1; \ + case NCT_DOUBLE: dest->typ = NCT_UINT32; dest->val.u32 = dest1.val.d op dest2.val.d ; return 1; \ + case NCT_LDOUBLE: dest->typ = NCT_UINT32; dest->val.u32 = dest1.val.l op dest2.val.l ; return 1; \ + case NCT_INT32: dest->typ = NCT_UINT32; dest->val.u32 = dest1.val.i32 op dest2.val.i32; return 1; \ + case NCT_UINT32: dest->typ = NCT_UINT32; dest->val.u32 = dest1.val.u32 op dest2.val.u32; return 1; \ + case NCT_INT64: dest->typ = NCT_UINT32; dest->val.u32 = dest1.val.i64 op dest2.val.i64; return 1; \ + case NCT_UINT64: dest->typ = NCT_UINT32; dest->val.u32 = dest1.val.u64 op dest2.val.u64; return 1; \ + default: return 0; \ + } + case BOT_ADD: DOIT(+) + case BOT_SUB: DOIT(-) + case BOT_MUL: DOIT(*) + case BOT_DIV: DOIT(/) + case BOT_MOD: DOIT_INT(%) + case BOT_LSH: DOIT_INT(<<) + case BOT_RSH: DOIT_INT(>>) + case BOT_LT: DOIT_BOOL(<) + case BOT_GT: DOIT_BOOL(>) + case BOT_LE: DOIT_BOOL(<=) + case BOT_GE: DOIT_BOOL(>=) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" + case BOT_EQ: DOIT_BOOL(==) + case BOT_NE: DOIT_BOOL(!=) +#pragma GCC diagnostic pop + case BOT_AAND: DOIT_INT(&) + case BOT_AXOR: DOIT_INT(^) + case BOT_AOR: DOIT_INT(|) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" + case BOT_BAND: DOIT_BOOL(&&) + case BOT_BOR: DOIT_BOOL(||) +#pragma GCC diagnostic pop + case BOT_COMMA: *dest = dest2; return 1; +#undef DOIT_BOOL +#undef DOIT_INT +#undef DOIT + default: return 0; + } } + + case ETY_TERNARY: { + num_constant_t dest1, dest2, dest3; + if (!eval_expression(li, target, e->val.ternary.e1, const_map, &dest1, fatal)) return 0; + if (!eval_expression(li, target, e->val.ternary.e2, const_map, &dest2, fatal)) return 0; + if (!eval_expression(li, target, e->val.ternary.e3, const_map, &dest3, fatal)) return 0; + + switch (e->val.ternary.typ) { + case TOT_COND: + promote_csts(&dest2, &dest3); + switch (dest1.typ) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" + case NCT_FLOAT: *dest = dest1.val.f ? dest2 : dest3; return 1; + case NCT_DOUBLE: *dest = dest1.val.d ? dest2 : dest3; return 1; + case NCT_LDOUBLE: *dest = dest1.val.l ? dest2 : dest3; return 1; +#pragma GCC diagnostic pop + case NCT_INT32: *dest = dest1.val.i32 ? dest2 : dest3; return 1; + case NCT_UINT32: *dest = dest1.val.u32 ? dest2 : dest3; return 1; + case NCT_INT64: *dest = dest1.val.i64 ? dest2 : dest3; return 1; + case NCT_UINT64: *dest = dest1.val.u64 ? dest2 : dest3; return 1; + default: return 0; + } + default: return 0; + } } + + // case ETY_INIT_LIST: + + case ETY_CAST: + if (!eval_expression(li, target, e->val.cast.e, const_map, dest, fatal)) return 0; + + if (e->val.cast.typ->typ == TYPE_BUILTIN) { + switch (e->val.cast.typ->val.builtin) { + case BTT_VOID: + if (fatal) log_error(li, "invalid cast to void\n"); + return 0; + case BTT_BOOL: + switch (dest->typ) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" + case NCT_FLOAT: dest->val.u32 = (_Bool)dest->val.f; break; + case NCT_DOUBLE: dest->val.u32 = (_Bool)dest->val.d; break; + case NCT_LDOUBLE: dest->val.u32 = (_Bool)dest->val.l; break; +#pragma GCC diagnostic pop + case NCT_INT32: dest->val.u32 = (_Bool)dest->val.i32; break; + case NCT_UINT32: dest->val.u32 = (_Bool)dest->val.u32; break; + case NCT_INT64: dest->val.u32 = (_Bool)dest->val.i64; break; + case NCT_UINT64: dest->val.u32 = (_Bool)dest->val.u64; break; + } + dest->typ = NCT_UINT32; + return 1; + case BTT_SCHAR: + case BTT_S8: + cast_s8: + switch (dest->typ) { + case NCT_FLOAT: dest->val.i32 = (int8_t)dest->val.f; break; + case NCT_DOUBLE: dest->val.i32 = (int8_t)dest->val.d; break; + case NCT_LDOUBLE: dest->val.i32 = (int8_t)dest->val.l; break; + case NCT_INT32: dest->val.i32 = (int8_t)dest->val.i32; break; + case NCT_UINT32: dest->val.i32 = (int8_t)dest->val.u32; break; + case NCT_INT64: dest->val.i32 = (int8_t)dest->val.i64; break; + case NCT_UINT64: dest->val.i32 = (int8_t)dest->val.u64; break; + } + dest->typ = NCT_INT32; + return 1; + case BTT_UCHAR: + case BTT_U8: + cast_u8: + switch (dest->typ) { + case NCT_FLOAT: dest->val.u32 = (uint8_t)dest->val.f; break; + case NCT_DOUBLE: dest->val.u32 = (uint8_t)dest->val.d; break; + case NCT_LDOUBLE: dest->val.u32 = (uint8_t)dest->val.l; break; + case NCT_INT32: dest->val.u32 = (uint8_t)dest->val.i32; break; + case NCT_UINT32: dest->val.u32 = (uint8_t)dest->val.u32; break; + case NCT_INT64: dest->val.u32 = (uint8_t)dest->val.i64; break; + case NCT_UINT64: dest->val.u32 = (uint8_t)dest->val.u64; break; + } + dest->typ = NCT_UINT32; + return 1; + case BTT_SHORT: + case BTT_SSHORT: + case BTT_S16: + switch (dest->typ) { + case NCT_FLOAT: dest->val.i32 = (int16_t)dest->val.f; break; + case NCT_DOUBLE: dest->val.i32 = (int16_t)dest->val.d; break; + case NCT_LDOUBLE: dest->val.i32 = (int16_t)dest->val.l; break; + case NCT_INT32: dest->val.i32 = (int16_t)dest->val.i32; break; + case NCT_UINT32: dest->val.i32 = (int16_t)dest->val.u32; break; + case NCT_INT64: dest->val.i32 = (int16_t)dest->val.i64; break; + case NCT_UINT64: dest->val.i32 = (int16_t)dest->val.u64; break; + } + dest->typ = NCT_INT32; + return 1; + case BTT_USHORT: + case BTT_U16: + switch (dest->typ) { + case NCT_FLOAT: dest->val.u32 = (uint16_t)dest->val.f; break; + case NCT_DOUBLE: dest->val.u32 = (uint16_t)dest->val.d; break; + case NCT_LDOUBLE: dest->val.u32 = (uint16_t)dest->val.l; break; + case NCT_INT32: dest->val.u32 = (uint16_t)dest->val.i32; break; + case NCT_UINT32: dest->val.u32 = (uint16_t)dest->val.u32; break; + case NCT_INT64: dest->val.u32 = (uint16_t)dest->val.i64; break; + case NCT_UINT64: dest->val.u32 = (uint16_t)dest->val.u64; break; + } + dest->typ = NCT_UINT32; + return 1; + case BTT_INT: + case BTT_SINT: + case BTT_S32: + cast_s32: + switch (dest->typ) { + case NCT_FLOAT: dest->val.i32 = (int32_t)dest->val.f; break; + case NCT_DOUBLE: dest->val.i32 = (int32_t)dest->val.d; break; + case NCT_LDOUBLE: dest->val.i32 = (int32_t)dest->val.l; break; + case NCT_INT32: break; + case NCT_UINT32: dest->val.i32 = (int32_t)dest->val.u32; break; + case NCT_INT64: dest->val.i32 = (int32_t)dest->val.i64; break; + case NCT_UINT64: dest->val.i32 = (int32_t)dest->val.u64; break; + } + dest->typ = NCT_INT32; + return 1; + case BTT_UINT: + case BTT_U32: + cast_u32: + switch (dest->typ) { + case NCT_FLOAT: dest->val.u32 = (uint32_t)dest->val.f; break; + case NCT_DOUBLE: dest->val.u32 = (uint32_t)dest->val.d; break; + case NCT_LDOUBLE: dest->val.u32 = (uint32_t)dest->val.l; break; + case NCT_INT32: dest->val.u32 = (uint32_t)dest->val.i32; break; + case NCT_UINT32: break; + case NCT_INT64: dest->val.u32 = (uint32_t)dest->val.i64; break; + case NCT_UINT64: dest->val.u32 = (uint32_t)dest->val.u64; break; + } + dest->typ = NCT_UINT32; + return 1; + case BTT_LONGLONG: + case BTT_SLONGLONG: + case BTT_S64: + cast_s64: + switch (dest->typ) { + case NCT_FLOAT: dest->val.i64 = (int64_t)dest->val.f; break; + case NCT_DOUBLE: dest->val.i64 = (int64_t)dest->val.d; break; + case NCT_LDOUBLE: dest->val.i64 = (int64_t)dest->val.l; break; + case NCT_INT32: dest->val.i64 = (int64_t)dest->val.i32; break; + case NCT_UINT32: dest->val.i64 = (int64_t)dest->val.u32; break; + case NCT_INT64: break; + case NCT_UINT64: dest->val.i64 = (int64_t)dest->val.u64; break; + } + dest->typ = NCT_INT64; + return 1; + case BTT_ULONGLONG: + case BTT_U64: + cast_u64: + switch (dest->typ) { + case NCT_FLOAT: dest->val.u64 = (uint64_t)dest->val.f; break; + case NCT_DOUBLE: dest->val.u64 = (uint64_t)dest->val.d; break; + case NCT_LDOUBLE: dest->val.u64 = (uint64_t)dest->val.l; break; + case NCT_INT32: dest->val.u64 = (uint64_t)dest->val.i32; break; + case NCT_UINT32: dest->val.u64 = (uint64_t)dest->val.u32; break; + case NCT_INT64: dest->val.u64 = (uint64_t)dest->val.i64; break; + case NCT_UINT64: break; + } + dest->typ = NCT_UINT64; + return 1; + case BTT_CHAR: + if (target->unsigned_char) goto cast_u8; + else goto cast_s8; + case BTT_LONG: + case BTT_SLONG: + if (target->size_long == 4) { + goto cast_s32; + } else if (target->size_long == 8) { + goto cast_s64; + } else { + log_internal(li, "unsupported cast to long with target sizeof(long) == %zu\n", target->size_long); + return 0; + } + case BTT_ULONG: + if (target->size_long == 4) { + goto cast_u32; + } else if (target->size_long == 8) { + goto cast_u64; + } else { + log_internal(li, "unsupported cast to unsigned long with target sizeof(long) == %zu\n", target->size_long); + return 0; + } + case BTT_INT128: + case BTT_SINT128: + case BTT_UINT128: + case BTT_FLOAT: + case BTT_CFLOAT: + case BTT_IFLOAT: + case BTT_DOUBLE: + case BTT_CDOUBLE: + case BTT_IDOUBLE: + case BTT_LONGDOUBLE: + case BTT_CLONGDOUBLE: + case BTT_ILONGDOUBLE: + case BTT_FLOAT128: + case BTT_CFLOAT128: + case BTT_IFLOAT128: + case BTT_VA_LIST: + default: + if (fatal) log_TODO(li, "unsupported cast to builtin %s in constant expression\n", builtin2str[e->val.cast.typ->val.builtin]); + return 0; + } + } else { + if (fatal) log_TODO(li, "unsupported cast in constant expression\n"); + return 0; + } + + default: return 0; + } +} + +// declaration-specifier with storage != NULL +// specifier-qualifier-list + static_assert-declaration with storage == NULL +static int parse_declaration_specifier(machine_t *target, khash_t(struct_map) *struct_map, khash_t(type_map) *type_map, khash_t(type_map) *enum_map, + type_t *(*builtins)[LAST_BUILTIN + 1], khash_t(const_map) *const_map, + khash_t(type_set) *type_set, preproc_t *prep, proc_token_t *tok, enum decl_storage *storage, + enum fun_spec *fspec, enum decl_spec *spec, type_t *typ) { + if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_STATIC_ASSERT)) { + // _Static_assert ( constant-expression , string-literal ) ; + // Empty destructor + *tok = proc_next_token(prep); + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_LPAREN)) { + log_error(&tok->loginfo, "unexpected token in static assertion declaration\n"); + proc_token_del(tok); + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + expr_t *e = parse_expression(target, struct_map, type_map, enum_map, builtins, const_map, type_set, prep, tok, 14); + if (!e) { + goto failed; + } + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_COMMA)) { + log_error(&tok->loginfo, "unexpected token in static assertion expression\n"); + expr_del(e); + proc_token_del(tok); + goto failed; + } + num_constant_t eval; + if (!eval_expression(&tok->loginfo, target, e, const_map, &eval, 1)) { + expr_del(e); + // Empty destructor + goto failed; + } + expr_del(e); + *tok = proc_next_token(prep); + if ((tok->tokt != PTOK_STRING) || !tok->tokv.sisstr) { + log_error(&tok->loginfo, "unexpected token in static assertion message\n"); + proc_token_del(tok); + goto failed; + } + string_t *errmsg = tok->tokv.str; + *tok = proc_next_token(prep); + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_RPAREN)) { + log_error(&tok->loginfo, "unexpected token in static assertion message\n"); + proc_token_del(tok); + goto failed; + } + *tok = proc_next_token(prep); + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_SEMICOLON)) { + log_error(&tok->loginfo, "unexpected token after static assertion\n"); + proc_token_del(tok); + goto failed; + } + + int iserror; + switch (eval.typ) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" + case NCT_FLOAT: iserror = !eval.val.f; break; + case NCT_DOUBLE: iserror = !eval.val.d; break; + case NCT_LDOUBLE: iserror = !eval.val.l; break; +#pragma GCC diagnostic pop + case NCT_INT32: iserror = !eval.val.i32; break; + case NCT_UINT32: iserror = !eval.val.u32; break; + case NCT_INT64: iserror = !eval.val.i64; break; + case NCT_UINT64: iserror = !eval.val.u64; break; + default: iserror = 1; + } + if (iserror) { + log_error(&tok->loginfo, "static assertion failed: %s\n", string_content(errmsg)); + string_del(errmsg); + // Empty destructor + goto failed; + } + string_del(errmsg); + // Empty destructor + return 1; + } + +parse_cur_token_decl: + if (tok->tokt == PTOK_EOF) { + log_error(&tok->loginfo, "unexpected end of file in declaration\n"); + goto failed; + } + // Storage + if (storage && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_AUTO)) { + if (*storage == TMPSTO_NONE) *storage = TMPSTO_AUTO; + else { + log_error(&tok->loginfo, "unexpected storage class specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if (storage && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_EXTERN)) { + if (*storage == TMPSTO_NONE) *storage = TMPSTO_EXTERN; + else if (*storage == TMPSTO_TLS) *storage = TMPSTO_TLS_EXTERN; + else { + log_error(&tok->loginfo, "unexpected storage class specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if (storage && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_REGISTER)) { + if (*storage == TMPSTO_NONE) *storage = TMPSTO_REG; + else { + log_error(&tok->loginfo, "unexpected storage class specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if (storage && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_STATIC)) { + if (*storage == TMPSTO_NONE) *storage = TMPSTO_STATIC; + else if (*storage == TMPSTO_TLS) *storage = TMPSTO_TLS_STATIC; + else { + log_error(&tok->loginfo, "unexpected storage class specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if (storage && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_THREAD_LOCAL)) { + if (*storage == TMPSTO_NONE) *storage = TMPSTO_TLS; + else if (*storage == TMPSTO_EXTERN) *storage = TMPSTO_TLS_EXTERN; + else if (*storage == TMPSTO_STATIC) *storage = TMPSTO_TLS_STATIC; + else { + log_error(&tok->loginfo, "unexpected storage class specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if (storage && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_TYPEDEF)) { + if (*storage == TMPSTO_NONE) *storage = TMPSTO_TYPEDEF; + else { + log_error(&tok->loginfo, "unexpected storage class specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } + + // Function specifier + if (fspec && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_INLINE)) { + *fspec |= FSPEC_INLINE; + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if (fspec && (tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_NORETURN)) { + *fspec |= FSPEC_NORETURN; + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } + + // Qualifier + if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_ATOMIC)) { + // Empty destructor + *tok = proc_next_token(prep); + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_LPAREN)) { + if (*spec != SPEC_NONE) { + log_error(&tok->loginfo, "unexpected symbol '('\n"); + // Empty destructor + goto failed; + } + *spec = SPEC_TYPE; + if (!parse_type_name(target, struct_map, type_map, enum_map, builtins, const_map, type_set, prep, tok, SYM_RPAREN, &typ)) { + goto failed; + } + if (!typ->is_validated) { + log_internal(&tok->loginfo, "_Atomic() type is not validated\n"); + type_del(typ); + // Empty destructor + goto failed; + } + if ((typ->typ == TYPE_ARRAY) || (typ->typ == TYPE_FUNCTION) || typ->is_atomic || typ->is_const || typ->is_restrict || typ->is_volatile) { + log_error(&tok->loginfo, "the type name in an _Atomic() may not be an array, a function, atomic, or qualified\n"); + type_del(typ); + // Empty destructor + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else { + typ->is_atomic = 1; + goto parse_cur_token_decl; + } + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_CONST)) { + typ->is_const = 1; + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_RESTRICT)) { + typ->is_restrict = 1; + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_VOLATILE)) { + typ->is_volatile = 1; + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } + + // Specifier +#define SPEC(bt,post) \ + if (*spec == SPEC_NONE) { \ + *spec = SPEC_BUILTIN; \ + typ->typ = TYPE_BUILTIN; \ + typ->val.builtin = BTT_ ## bt; \ + post \ + } else { \ + log_error(&tok->loginfo, "unexpected type specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); \ + goto failed; \ + } \ + *tok = proc_next_token(prep); \ + goto parse_cur_token_decl; +#define SPEC_SIGNED(bt, allow_int) \ + if ((*spec == SPEC_NONE) || (allow_int && (*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_INT))) { \ + *spec = (allow_int && (*spec == SPEC_NONE)) ? SPEC_BUILTIN_NOINT : SPEC_BUILTIN; \ + typ->typ = TYPE_BUILTIN; \ + typ->val.builtin = BTT_ ## bt; \ + } else if (((*spec == SPEC_BUILTIN_NOINT) || (allow_int && (*spec == SPEC_BUILTIN))) && (typ->val.builtin == BTT_SINT)) { \ + *spec = allow_int ? *spec : SPEC_BUILTIN; \ + typ->val.builtin = BTT_S ## bt; \ + } else if (((*spec == SPEC_BUILTIN_NOINT) || (allow_int && (*spec == SPEC_BUILTIN))) && (typ->val.builtin == BTT_UINT)) { \ + *spec = allow_int ? *spec : SPEC_BUILTIN; \ + typ->val.builtin = BTT_U ## bt; \ + } else { \ + log_error(&tok->loginfo, "unexpected type specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); \ + goto failed; \ + } \ + *tok = proc_next_token(prep); \ + goto parse_cur_token_decl; + if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_BOOL)) { + SPEC(BOOL,) + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_COMPLEX)) { + if (*spec == SPEC_NONE) { + *spec = SPEC_COMPLEX; + } else if ((*spec == SPEC_BUILTIN_NOINT) && (typ->val.builtin == BTT_LONG)) { + *spec = SPEC_LONGCOMPLEX; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_FLOAT)) { + typ->val.builtin = BTT_CFLOAT; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_FLOAT128)) { + typ->val.builtin = BTT_CFLOAT128; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_DOUBLE)) { + typ->val.builtin = BTT_CDOUBLE; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_LONGDOUBLE)) { + typ->val.builtin = BTT_CLONGDOUBLE; + } else { + log_error(&tok->loginfo, "unexpected type specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_IMAGINARY)) { + if (*spec == SPEC_NONE) { + *spec = SPEC_IMAGINARY; + } else if ((*spec == SPEC_BUILTIN_NOINT) && (typ->val.builtin == BTT_LONG)) { + *spec = SPEC_LONGIMAGINARY; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_FLOAT)) { + typ->val.builtin = BTT_IFLOAT; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_FLOAT128)) { + typ->val.builtin = BTT_IFLOAT128; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_DOUBLE)) { + typ->val.builtin = BTT_IDOUBLE; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_LONGDOUBLE)) { + typ->val.builtin = BTT_ILONGDOUBLE; + } else { + log_error(&tok->loginfo, "unexpected type specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_DOUBLE)) { + if (*spec == SPEC_NONE) { + *spec = SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_DOUBLE; + } else if (*spec == SPEC_COMPLEX) { + *spec = SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_CDOUBLE; + } else if (*spec == SPEC_IMAGINARY) { + *spec = SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_IDOUBLE; + } else if (*spec == SPEC_LONGCOMPLEX) { + *spec = SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_CLONGDOUBLE; + } else if (*spec == SPEC_LONGIMAGINARY) { + *spec = SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_ILONGDOUBLE; + } else if ((*spec == SPEC_BUILTIN_NOINT) && (typ->val.builtin == BTT_LONG)) { + *spec = SPEC_BUILTIN; + typ->val.builtin = BTT_LONGDOUBLE; + } else { + log_error(&tok->loginfo, "unexpected type specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_FLOAT)) { + if (*spec == SPEC_NONE) { + *spec = SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_FLOAT; + } else if (*spec == SPEC_COMPLEX) { + *spec = SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_CFLOAT; + } else if (*spec == SPEC_IMAGINARY) { + *spec = SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_IFLOAT; + } else { + log_error(&tok->loginfo, "unexpected type specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_FLOAT128)) { + if (*spec == SPEC_NONE) { + *spec = SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_FLOAT128; + } else if (*spec == SPEC_COMPLEX) { + *spec = SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_CFLOAT128; + } else if (*spec == SPEC_IMAGINARY) { + *spec = SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_IFLOAT128; + } else { + log_error(&tok->loginfo, "unexpected type specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_CHAR)) { + SPEC_SIGNED(CHAR, 0) + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_INT)) { + if (*spec == SPEC_NONE) { + *spec = SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_INT; + } else if (*spec == SPEC_BUILTIN_NOINT) { + *spec = SPEC_BUILTIN; + } else { + log_error(&tok->loginfo, "unexpected type specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_INT128)) { + SPEC_SIGNED(INT128, 0) + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_LONG)) { + if ((*spec == SPEC_NONE) || ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_INT))) { + *spec = (*spec == SPEC_NONE) ? SPEC_BUILTIN_NOINT : SPEC_BUILTIN; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_LONG; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_SINT)) { + typ->val.builtin = BTT_SLONG; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_UINT)) { + typ->val.builtin = BTT_ULONG; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_LONG)) { + typ->val.builtin = BTT_LONGLONG; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_ULONG)) { + typ->val.builtin = BTT_ULONGLONG; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_SLONG)) { + typ->val.builtin = BTT_SLONGLONG; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_DOUBLE)) { + typ->val.builtin = BTT_LONGDOUBLE; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_CDOUBLE)) { + typ->val.builtin = BTT_CLONGDOUBLE; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_IDOUBLE)) { + typ->val.builtin = BTT_ILONGDOUBLE; + } else if (*spec == SPEC_COMPLEX) { + *spec = SPEC_LONGCOMPLEX; + } else if (*spec == SPEC_IMAGINARY) { + *spec = SPEC_LONGIMAGINARY; + } else { + log_error(&tok->loginfo, "unexpected type specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_SHORT)) { + SPEC_SIGNED(SHORT, 1) + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_SIGNED)) { + if (*spec == SPEC_NONE) { + *spec = SPEC_BUILTIN_NOINT; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_SINT; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_CHAR)) { + typ->val.builtin = BTT_SCHAR; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_INT)) { + typ->val.builtin = BTT_SINT; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_LONG)) { + typ->val.builtin = BTT_SLONG; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_LONGLONG)) { + typ->val.builtin = BTT_SLONGLONG; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_SHORT)) { + typ->val.builtin = BTT_SSHORT; + } else { + log_error(&tok->loginfo, "unexpected type specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_UNSIGNED)) { + if (*spec == SPEC_NONE) { + *spec = SPEC_BUILTIN_NOINT; + typ->typ = TYPE_BUILTIN; + typ->val.builtin = BTT_UINT; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_CHAR)) { + typ->val.builtin = BTT_UCHAR; + } else if ((*spec == SPEC_BUILTIN) && (typ->val.builtin == BTT_INT)) { + typ->val.builtin = BTT_UINT; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_LONG)) { + typ->val.builtin = BTT_ULONG; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_LONGLONG)) { + typ->val.builtin = BTT_ULONGLONG; + } else if (((*spec == SPEC_BUILTIN_NOINT) || (*spec == SPEC_BUILTIN)) && (typ->val.builtin == BTT_SHORT)) { + typ->val.builtin = BTT_USHORT; + } else { + log_error(&tok->loginfo, "unexpected type specifier '%s' in declaration\n", kw2str[tok->tokv.kw]); + goto failed; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_VOID)) { + SPEC(VOID, typ->is_incomplete = 1;) + } +#undef SPEC +#undef SPEC_SIGNED + if ((tok->tokt == PTOK_IDENT) && (*spec == SPEC_NONE)) { + // The ident is the type-specifier + khiter_t it = kh_get(type_map, type_map, string_content(tok->tokv.str)); + if (it == kh_end(type_map)) { + log_error(&tok->loginfo, "invalid type '%s' (ident is not a typedef)\n", string_content(tok->tokv.str)); + string_del(tok->tokv.str); + goto failed; + } else { + *spec = SPEC_TYPE; + if (!type_copy_into(typ, kh_val(type_map, it))) { + log_memory("failed to duplicate type infos\n"); + string_del(tok->tokv.str); + goto failed; + } + string_del(tok->tokv.str); + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } + } + if ((tok->tokt == PTOK_KEYWORD) && (*spec == SPEC_NONE) && ((tok->tokv.kw == KW_STRUCT) || (tok->tokv.kw == KW_UNION))) { + int is_struct = tok->tokv.kw == KW_STRUCT; + *spec = SPEC_TYPE; + + // Empty destructor + *tok = proc_next_token(prep); + string_t *tag; + if (tok->tokt == PTOK_IDENT) { + tag = tok->tokv.str; + // Token moved + *tok = proc_next_token(prep); + + khiter_t it; // Iterator into the struct_map + int iret; + it = kh_put(struct_map, struct_map, string_content(tag), &iret); + if (iret < 0) { + log_memory("failed to add structure to struct map\n"); + proc_token_del(tok); + goto failed; + } else if (iret == 0) { + // Structure already declared or defined + if (kh_val(struct_map, it)->is_struct != is_struct) { + log_error(&tok->loginfo, "incoherent struct/union tagging of %s\n", string_content(tag)); + string_del(tag); + proc_token_del(tok); + goto failed; + } + ++kh_val(struct_map, it)->nrefs; + string_del(tag); + tag = kh_val(struct_map, it)->tag; + } else { + kh_val(struct_map, it) = struct_new(is_struct, tag); + if (!kh_val(struct_map, it)) { + log_memory("failed to create new structure metadata structure\n"); + string_del(tag); + proc_token_del(tok); + goto failed; + } + } + typ->typ = TYPE_STRUCT_UNION; + typ->val.st = kh_val(struct_map, it); + typ->is_incomplete = !typ->val.st->is_defined; + } else { + tag = NULL; + typ->typ = TYPE_STRUCT_UNION; + typ->val.st = struct_new(is_struct, NULL); + if (!typ->val.st) { + log_memory("failed to create new structure metadata structure\n"); + proc_token_del(tok); + goto failed; + } + typ->is_incomplete = 1; + } + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_LBRACKET)) { + if (typ->val.st->is_defined) { + log_TODO(&tok->loginfo, "struct redefinition (tag is %s)\n", typ->val.st->tag ? string_content(typ->val.st->tag) : ""); + goto failed; + } + + VECTOR(st_members) *members = vector_new(st_members); + if (!members) { + log_memory("failed to create a members vector\n"); + goto failed; + } + type_t *typ2 = type_new(); + if (!typ2) { + log_memory("failed to create a type info structure\n"); + vector_del(st_members, members); + goto failed; + } + *tok = proc_next_token(prep); + while (!proc_token_isend(tok) && ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_RBRACKET))) { + enum decl_spec spec2 = SPEC_NONE; + if (!parse_declaration_specifier(target, struct_map, type_map, enum_map, builtins, + const_map, type_set, prep, tok, NULL, NULL, &spec2, typ2)) { + vector_del(st_members, members); + type_del(typ2); + goto failed; + } + if (spec2 == SPEC_NONE) { + // Empty destructor + *tok = proc_next_token(prep); + continue; // Declaration was an assert, typ2 is unchanged + } + typ2 = type_try_merge(typ2, type_set); + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_SEMICOLON)) { + // A struct-declaration that does not declare an anonymous structure or anonymous union + // shall contain a struct-declarator-list. + if ((typ2->typ != TYPE_STRUCT_UNION) || typ2->val.st->tag) { + log_error(&tok->loginfo, "missing struct-declarator-list\n"); + vector_del(st_members, members); + type_del(typ2); + goto failed; + } + if (!vector_push(st_members, members, ((st_member_t){.name = NULL, .typ = typ2, .is_bitfield = 0}))) { + log_memory("failed to add anonymous structure member\n"); + vector_del(st_members, members); + type_del(typ2); + // Empty destructor + goto failed; + } + typ2 = type_new(); + if (!typ2) { + log_memory("failed to create a type info structure\n"); + vector_del(st_members, members); + // Empty destructor + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + continue; + } + + struct parse_declarator_dest_s dest2; + dest2.structms.struct_map = struct_map; + dest2.structms.type_map = type_map; + dest2.structms.enum_map = enum_map; + dest2.structms.type_set = type_set; + dest2.structms.builtins = builtins; + dest2.structms.const_map = const_map; + dest2.structms.dest = members; + if (!parse_declarator(target, &dest2, prep, tok, TMPSTO_NONE, FSPEC_NONE, typ2, 0, 1, 1, 1)) { + log_error(&tok->loginfo, "error parsing struct-declarator-list\n"); + vector_del(st_members, members); + type_del(typ2); + // Token is deleted + goto failed; + } + type_del(typ2); + if ((tok->tokt != PTOK_SYM) && (tok->tokv.sym != SYM_SEMICOLON)) { + log_error(&tok->loginfo, "error parsing struct-declarator-list (invalid next token)\n"); + vector_del(st_members, members); + proc_token_del(tok); + goto failed; + } + typ2 = type_new(); + if (!typ2) { + log_memory("failed to create a type info structure\n"); + vector_del(st_members, members); + // Empty destructor + goto failed; + } + *tok = proc_next_token(prep); + } + type_del(typ2); + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_RBRACKET)) { + log_error(&tok->loginfo, "error parsing struct-declarator-list (invalid next token)\n"); + vector_del(st_members, members); + proc_token_del(tok); + goto failed; + } + + typ->is_incomplete = 0; + typ->is_validated = 0; + if (tag) { + khiter_t it = kh_get(type_set, type_set, typ); + if (it != kh_end(type_set)) { + kh_key(type_set, it)->is_incomplete = 0; + kh_key(type_set, it)->is_validated = 0; + } + } + typ->val.st->has_incomplete = 0; // Filled by the validate_type step + typ->val.st->nmembers = vector_size(st_members, members); + typ->val.st->members = vector_steal(st_members, members); + typ->val.st->is_defined = 1; + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } else { + if (!tag) { + log_error(&tok->loginfo, "invalid structure declaration: missing tag and/or definition\n"); + proc_token_del(tok); + goto failed; + } + goto parse_cur_token_decl; + } + } + if ((tok->tokt == PTOK_KEYWORD) && (*spec == SPEC_NONE) && (tok->tokv.kw == KW_ENUM)) { + *spec = SPEC_TYPE; + + // Empty destructor + *tok = proc_next_token(prep); + string_t *tag = NULL; + if (tok->tokt == PTOK_IDENT) { + tag = tok->tokv.str; + *tok = proc_next_token(prep); + } + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_LBRACKET)) { + if (!tag) { + log_error(&tok->loginfo, "unexpected token after keyword 'enum'\n"); + proc_token_del(tok); + goto failed; + } + khiter_t it = kh_get(type_map, enum_map, string_content(tag)); + if (it == kh_end(enum_map)) { + log_error(&tok->loginfo, "enumeration %s has not been defined yet\n", string_content(tag)); // TODO? + string_del(tag); + proc_token_del(tok); + goto failed; + } + if (!type_copy_into(typ, kh_val(enum_map, it))) { + log_memory("failed to duplicate enum type infos\n"); + string_del(tag); + proc_token_del(tok); + goto failed; + } + string_del(tag); + goto parse_cur_token_decl; + } + // We are defining the enum + // Try in order: + // If all values are 0 <= . <= UINT32_MAX, BTT_U32 + // If any value is negative and all values are <= INT32_MAX, BTT_S32 + // If any value is negative and all values are <= INT64_MAX, BTT_S64 + // If all values are 0 <= . <= UINT64_MAX, BTT_U64 + // Otherwise, error + // By default, BTT_U32* and the constant is an NCT_INT32 + // *The AMD ABI says this should rather be BTT_INT (or BTT_S32) + // Note that BTT_S32 only when has_neg is true + int has_neg = 0, not_in_i32 = 0; + enum type_builtin_e btt = BTT_U32; + num_constant_t cst = { .typ = NCT_INT32, .val.i32 = -1 }; + // Empty destructor + *tok = proc_next_token(prep); + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_RBRACKET)) { + log_error(&tok->loginfo, "expected enum constant name before '}'\n"); + proc_token_del(tok); + goto failed; + } + int iret; + while ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_RBRACKET)) { + if (tok->tokt != PTOK_IDENT) { + log_error(&tok->loginfo, "unexpected token in enumeration definition\n"); + if (tag) string_del(tag); + proc_token_del(tok); + goto failed; + } + char *ident = string_steal(tok->tokv.str); + *tok = proc_next_token(prep); + while ((tok->tokt == PTOK_IDENT) && !strcmp(string_content(tok->tokv.str), "__attribute__")) { + // Attribute + string_del(tok->tokv.str); + *tok = proc_next_token(prep); + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_LPAREN)) { + log_error(&tok->loginfo, "unexpected token, expected '('\n"); + free(ident); + if (tag) string_del(tag); + proc_token_del(tok); + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_LPAREN)) { + log_error(&tok->loginfo, "unexpected token, expected '('\n"); + free(ident); + if (tag) string_del(tag); + // Empty destructor + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + enum_attribute_list: + if ((tok->tokt == PTOK_IDENT) && TOKEN_MATCH_ATTR(deprecated)) { + log_warning(&tok->loginfo, "ignoring enum constant attribute 'deprecated'\n"); + string_del(tok->tokv.str); + *tok = proc_next_token(prep); + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_COMMA)) { + // Empty destructor + *tok = proc_next_token(prep); + goto enum_attribute_list; + } else goto enum_attribute_list_end; + } + if ((tok->tokt == PTOK_IDENT) && TOKEN_MATCH_ATTR(unavailable)) { + log_warning(&tok->loginfo, "ignoring enum constant attribute 'unavailable'\n"); + string_del(tok->tokv.str); + *tok = proc_next_token(prep); + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_COMMA)) { + // Empty destructor + *tok = proc_next_token(prep); + goto enum_attribute_list; + } else goto enum_attribute_list_end; + } + enum_attribute_list_end: + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_RPAREN)) { + log_error(&tok->loginfo, "unexpected token, expected ident or ')'\n"); + free(ident); + if (tag) string_del(tag); + // Empty destructor + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_RPAREN)) { + log_error(&tok->loginfo, "unexpected token, expected ')'\n"); + free(ident); + if (tag) string_del(tag); + // Empty destructor + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + } + khiter_t it = kh_put(const_map, const_map, ident, &iret); + if (iret < 0) { + log_memory("failed to add constant %s to the constants map\n", ident); + free(ident); + if (tag) string_del(tag); + proc_token_del(tok); + goto failed; + } else if (iret == 0) { + log_error(&tok->loginfo, "constant %s is already defined\n", ident); + free(ident); + if (tag) string_del(tag); + proc_token_del(tok); + goto failed; + } + if ((tok->tokt == PTOK_SYM) && ((tok->tokv.sym == SYM_COMMA) || tok->tokv.sym == SYM_RBRACKET)) { + switch (cst.typ) { + case NCT_INT32: + if (cst.val.i32 == INT32_MAX) { + cst.typ = NCT_UINT32; + cst.val.u32 = (uint32_t)INT32_MAX + 1; + } else ++cst.val.i32; + break; + case NCT_UINT32: + if (cst.val.u32 == UINT32_MAX) { + cst.typ = NCT_INT64; + cst.val.i64 = (int64_t)UINT32_MAX + 1; + } else ++cst.val.u32; + break; + case NCT_INT64: + if (cst.val.i64 == INT64_MAX) { + cst.typ = NCT_UINT64; + cst.val.u64 = (uint64_t)INT64_MAX + 1; + } else ++cst.val.i64; + break; + case NCT_UINT64: + if (cst.val.u64 == UINT64_MAX) { + log_error(&tok->loginfo, "enum constant is too big\n"); + if (tag) string_del(tag); + proc_token_del(tok); + goto failed; + } else ++cst.val.u64; + break; + case NCT_FLOAT: + case NCT_DOUBLE: + case NCT_LDOUBLE: + default: + log_internal(&tok->loginfo, "enum constant is a float/double/ldouble\n"); + if (tag) string_del(tag); + proc_token_del(tok); + goto failed; + } + } else if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_EQ)) { + // Empty destructor + *tok = proc_next_token(prep); + expr_t *e = parse_expression(target, struct_map, type_map, enum_map, builtins, const_map, type_set, prep, tok, 14); + if (!e) { + goto failed; + } + if ((tok->tokt != PTOK_SYM) || ((tok->tokv.sym != SYM_COMMA) && (tok->tokv.sym != SYM_RBRACKET))) { + log_error(&tok->loginfo, "unexpected token during enumeration declaration\n"); + expr_del(e); + if (tag) string_del(tag); + proc_token_del(tok); + goto failed; + } + if (!eval_expression(&tok->loginfo, target, e, const_map, &cst, 1)) { + expr_del(e); + if (tag) string_del(tag); + // Empty destructor + goto failed; + } + expr_del(e); + } + switch (cst.typ) { + case NCT_INT32: + if (cst.val.i32 < 0) { + has_neg = 1; + if (btt == BTT_U64) { + log_error(&tok->loginfo, "enum constant is too big\n"); + if (tag) string_del(tag); + // Empty destructor + goto failed; + } + btt = not_in_i32 ? BTT_S64 : BTT_S32; + } + break; + case NCT_UINT32: + if (cst.val.u32 > (uint32_t)INT32_MAX) { + not_in_i32 = 1; + btt = has_neg ? BTT_S64 : BTT_U32; + } + break; + case NCT_INT64: + if (cst.val.i64 < 0) { + has_neg = 1; + if (cst.val.i64 < (int64_t)INT32_MIN) { + not_in_i32 = 1; + } + if (btt == BTT_U64) { + log_error(&tok->loginfo, "enum constant is too big\n"); + if (tag) string_del(tag); + // Empty destructor + goto failed; + } + btt = + not_in_i32 ? BTT_S64 : + BTT_S32; + } + if ((cst.val.i64 > (int64_t)INT32_MAX)) { + not_in_i32 = 1; + if (has_neg) btt = BTT_S64; + else if (((btt == BTT_S32) || (btt == BTT_U32)) && (cst.val.i64 <= (int64_t)UINT32_MAX)) + btt = BTT_U32; + else if (btt != BTT_U64) btt = BTT_S64; + } + break; + case NCT_UINT64: + if (cst.val.u64 > (uint32_t)INT32_MAX) { + not_in_i32 = 1; + if (has_neg && (cst.val.u64 > (uint64_t)INT64_MAX)) { + log_error(&tok->loginfo, "enum constant is too big\n"); + if (tag) string_del(tag); + // Empty destructor + goto failed; + } + btt = (cst.val.u64 > (uint64_t)INT64_MAX) ? BTT_U64 : (has_neg || (cst.val.u64 > (uint64_t)UINT32_MAX)) ? BTT_S64 : BTT_U32; + } + break; + case NCT_FLOAT: + case NCT_DOUBLE: + case NCT_LDOUBLE: + default: + log_error(&tok->loginfo, "invalid floating-point enumeration constant\n"); + if (tag) string_del(tag); + // Empty destructor + goto failed; + } + kh_val(const_map, it) = cst; + if (tok->tokv.sym == SYM_COMMA) { + *tok = proc_next_token(prep); + } + } + if (tag) { + char *ctag = string_steal(tag); + khiter_t it = kh_put(type_map, enum_map, ctag, &iret); + if (iret < 0) { + log_memory("failed to add enumeration %s to the type map\n", ctag); + free(ctag); + // Empty destructor + goto failed; + } else if (iret == 0) { + log_error(&tok->loginfo, "enumeration %s already exists\n", ctag); + free(ctag); + // Empty destructor + goto failed; + } + type_t *new_typ = type_new(); + if (!new_typ) { + log_memory("failed to create type info for enumeration %s\n", ctag); + free(ctag); + kh_del(type_map, enum_map, it); + // Empty destructor + goto failed; + } + typ->typ = new_typ->typ = TYPE_ENUM; + typ->is_incomplete = new_typ->is_incomplete = 0; + typ->val.typ = new_typ->val.typ = (*builtins)[btt]; + typ->val.typ->nrefs += 2; + new_typ = type_try_merge(new_typ, type_set); + validate_type(&tok->loginfo, target, new_typ); // Assume it returns 1 + kh_val(enum_map, it) = new_typ; + } else { + typ->typ = TYPE_ENUM; + typ->is_incomplete = 0; + typ->val.typ = (*builtins)[btt]; + ++typ->val.typ->nrefs; + } + *tok = proc_next_token(prep); + goto parse_cur_token_decl; + } + + if ((*spec != SPEC_BUILTIN) && (*spec != SPEC_BUILTIN_NOINT) && (*spec != SPEC_TYPE)) goto invalid_token; + if ((tok->tokt != PTOK_IDENT) && ((tok->tokt != PTOK_SYM) || ((tok->tokv.sym != SYM_COMMA) && (tok->tokv.sym != SYM_SEMICOLON) + && (tok->tokv.sym != SYM_STAR) && (tok->tokv.sym != SYM_LSQBRACKET) + && (tok->tokv.sym != SYM_LPAREN) && (tok->tokv.sym != SYM_RPAREN) + && (tok->tokv.sym != SYM_COLON)))) + goto invalid_token; + + return 1; + +invalid_token: + log_error(&tok->loginfo, "unexpected token (parse_declaration_specifier)\n"); + proc_token_del(tok); + +failed: + return 0; +} + +static int parse_declarator(machine_t *target, struct parse_declarator_dest_s *dest, preproc_t *prep, proc_token_t *tok, enum decl_storage storage, + enum fun_spec fspec, type_t *base_type, int is_init, int is_list, int allow_decl, int allow_abstract) { + int has_list = 0, has_ident = 0; + // TODO: allow_abstract and 'direct-abstract-declarator(opt) ( parameter-type-list(opt) )' + + _Bool array_atomic = 0, array_const = 0, array_restrict = 0, array_static = 0, array_volatile = 0; + string_t *cur_ident = NULL; + type_t *typ = base_type; ++typ->nrefs; + type_t *cur_bottom = NULL; + VECTOR(size_t) *nptr_stack = vector_new_cap(size_t, 1); + if (!nptr_stack) { + log_memory("failed to allocate nptr stack\n"); + proc_token_del(tok); + goto failed0; + } + vector_push(size_t, nptr_stack, 0); // Always succeed (size < cap) + while (1) { + switch (tok->tokt) { + case PTOK_IDENT: + if (!has_ident && allow_decl) { + cur_ident = tok->tokv.str; + has_ident = 1; + *tok = proc_next_token(prep); + break; + } else { + log_error(&tok->loginfo, "unexpected identifier\n"); + proc_token_del(tok); + goto failed; + } + case PTOK_SYM: + if (tok->tokv.sym == SYM_LPAREN) { + if (has_ident) { + type_t *new_typ; + + VECTOR(types) *args = vector_new(types); + if (!args) { + log_memory("failed to create new type (function argument)\n"); + // Empty destructor + goto failed; + } + int has_varargs = 0; + *tok = proc_next_token(prep); + if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_VOID)) { + // Empty destructor + *tok = proc_next_token(prep); + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_RPAREN)) { + vector_del(types, args); + new_typ = type_new(); + if (!new_typ) { + log_memory("failed to create new function type\n"); + // Empty destructor + goto failed; + } + new_typ->typ = TYPE_FUNCTION; + new_typ->val.fun.has_varargs = 0; + new_typ->val.fun.nargs = 0; + new_typ->val.fun.args = NULL; + // ret will be set later + goto end_fun; + } + if (!proc_unget_token(prep, tok)) { + log_memory("failed to unget processor token\n"); + // Empty destructor + vector_del(types, args); + goto failed; + } + tok->tokt = PTOK_KEYWORD; + tok->tokv.kw = KW_VOID; + } else if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_RPAREN)) { + goto no_arg; + } + while (1) { + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_VARIADIC)) { + has_varargs = 1; + // Empty destructor + *tok = proc_next_token(prep); + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_RPAREN)) { + log_error(&tok->loginfo, "invalid token after function variadic argument\n"); + proc_token_del(tok); + vector_del(types, args); + goto failed; + } + break; + } else { + type_t *typ2 = type_new(); + if (!typ2) { + log_memory("failed to create new type (function argument)\n"); + // Empty destructor + vector_del(types, args); + goto failed; + } + enum decl_storage storage2 = TMPSTO_NONE; + enum decl_spec spec2 = SPEC_NONE; + if (!parse_declaration_specifier(target, PDECL_STRUCT_MAP, PDECL_TYPE_MAP, PDECL_ENUM_MAP, PDECL_BUILTINS, + PDECL_CONST_MAP, PDECL_TYPE_SET, prep, tok, &storage2, NULL, &spec2, typ2)) { + // Token is deleted + vector_del(types, args); + type_del(typ2); + goto failed; + } + if (spec2 == SPEC_NONE) { + // _Static_assert declaration; empty destructor + log_error(&tok->loginfo, "unexpected _Static_assert declaration\n"); + vector_del(types, args); + type_del(typ2); + goto failed; + } + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_RPAREN)) { + // Unnamed argument + if (typ2->typ == TYPE_ARRAY) { + // Need to convert type to a pointer + type_t *typ3 = type_new(); + if (!typ3) { + log_memory("failed to allocate new type\n"); + type_del(typ2); + // Empty destructor + goto failed; + } + if (!type_copy_into(typ3, typ2)) { + log_memory("failed to duplicate array type to temporary type\n"); + type_del(typ3); + type_del(typ2); + // Empty destructor + goto failed; + } + type_del(typ2); + typ3->typ = TYPE_PTR; + typ3->val.typ = typ3->val.array.typ; + typ2 = type_try_merge(typ3, PDECL_TYPE_SET); + } + if (!vector_push(types, args, typ2)) { + log_memory("failed to add argument to argument vector\n"); + vector_del(types, args); + type_del(typ2); + // Empty destructor + goto failed; + } + break; + } else if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_COMMA)) { + // Unnamed argument + if (typ2->typ == TYPE_ARRAY) { + // Need to convert type to a pointer + type_t *typ3 = type_new(); + if (!typ3) { + log_memory("failed to allocate new type\n"); + type_del(typ2); + // Empty destructor + goto failed; + } + if (!type_copy_into(typ3, typ2)) { + log_memory("failed to duplicate array type to temporary type\n"); + type_del(typ3); + type_del(typ2); + // Empty destructor + goto failed; + } + type_del(typ2); + typ3->typ = TYPE_PTR; + typ3->val.typ = typ3->val.array.typ; + typ2 = type_try_merge(typ3, PDECL_TYPE_SET); + } + if (!vector_push(types, args, typ2)) { + log_memory("failed to add argument to argument vector\n"); + vector_del(types, args); + type_del(typ2); + // Empty destructor + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + continue; + } + // FIXME: Storage specifiers are ignored most of the time? + struct parse_declarator_dest_s dest2; + dest2.argt.dest = NULL; + dest2.argt.struct_map = PDECL_STRUCT_MAP; + dest2.argt.type_map = PDECL_TYPE_MAP; + dest2.argt.enum_map = PDECL_ENUM_MAP; + dest2.argt.type_set = PDECL_TYPE_SET; + dest2.argt.builtins = PDECL_BUILTINS; + dest2.argt.const_map = PDECL_CONST_MAP; + if (!parse_declarator(target, &dest2, prep, tok, TMPSTO_NONE, FSPEC_NONE, typ2, 0, 0, 1, 1)) { + // Token is deleted + vector_del(types, args); + type_del(typ2); + goto failed; + } + type_del(typ2); + if (!dest2.argt.dest) { + log_internal(&tok->loginfo, "argument type is NULL\n"); + vector_del(types, args); + // Empty destructor + goto failed; + } + if (!vector_push(types, args, dest2.argt.dest)) { + log_memory("failed to add argument to argument vector\n"); + vector_del(types, args); + type_del(dest2.argt.dest); + // Empty destructor + goto failed; + } + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_RPAREN)) { + break; + } else if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_COMMA)) { + // Empty destructor + *tok = proc_next_token(prep); + continue; + } + log_error(&tok->loginfo, "invalid token after function argument\n"); + vector_del(types, args); + proc_token_del(tok); + goto failed; + } + } + no_arg: + new_typ = type_new(); + if (!new_typ) { + log_memory("failed to create new function type\n"); + // Empty destructor + goto failed; + } + new_typ->typ = TYPE_FUNCTION; + new_typ->val.fun.has_varargs = has_varargs; + new_typ->val.fun.nargs = vector_size(types, args) ? vector_size(types, args) : (size_t)-1; + new_typ->val.fun.args = vector_steal(types, args); + + end_fun: // (void) + if (cur_bottom) { + // cur_bottom is a pointer, an array or a function + // We have cur_bottom(old) --> below, we want cur_bottom(old) --> array=cur_bottom(new) --> below + new_typ->val.fun.ret = + (cur_bottom->typ == TYPE_PTR) ? cur_bottom->val.typ : + (cur_bottom->typ == TYPE_ARRAY) ? cur_bottom->val.array.typ : + cur_bottom->val.fun.ret; + *((cur_bottom->typ == TYPE_PTR) ? &cur_bottom->val.typ : + (cur_bottom->typ == TYPE_ARRAY) ? &cur_bottom->val.array.typ : &cur_bottom->val.fun.ret) = new_typ; + cur_bottom = new_typ; + } else { + // We have top(old), we want array=top(new)=cur_bottom(new) --> top(old) + new_typ->val.fun.ret = typ; + cur_bottom = typ = new_typ; + } + *tok = proc_next_token(prep); + break; + } else { + if (!vector_push(size_t, nptr_stack, 0)) { + log_memory("Failed to push 0 to the nptr stack for opening a parenthesis\n"); + // Empty destructor + goto failed; + } + *tok = proc_next_token(prep); + break; + } + } else if (tok->tokv.sym == SYM_STAR) { + if (has_ident) { + log_error(&tok->loginfo, "invalid token '*' after identifier in declaration\n"); + // Empty destructor + goto failed; + } else { + type_t *new_typ = type_new_ptr(typ); + if (!new_typ) { + log_memory("failed to create a new pointer type info structure\n"); + // Empty destructor + goto failed; + } + typ = new_typ; + ++vector_last(size_t, nptr_stack); + *tok = proc_next_token(prep); + break; + } + } else if (tok->tokv.sym == SYM_LSQBRACKET) { + if (!has_ident) { + if (!allow_abstract) { + log_error(&tok->loginfo, "invalid token '[' before identifier in declaration\n"); + // Empty destructor + goto failed; + } + has_ident = 1; + } + if (array_atomic || array_const || array_restrict || array_static || array_volatile) { + log_error(&tok->loginfo, "invalid array after array with type qualifier(s) and/or 'static'\n"); + // Empty destructor + goto failed; + } + // Empty destructor + *tok = proc_next_token(prep); + // From the standard: + // direct-declarator [ type-qualifier-list(opt) assignment-expression(opt) ] + // direct-declarator [ static type-qualifier-list(opt) assignment-expression ] + // direct-declarator [ type-qualifier-list static assignment-expression ] + // direct-declarator [ type-qualifier-list(opt) * ] + // The optional type qualifiers and the keyword static shall appear only in a + // declaration of a function parameter with an array type, and then only in the outermost + // array type derivation. + size_t nelems; _Bool is_incomplete; + while (1) { +#define DO_CHECKS \ + if (is_init || is_list || !allow_decl || (cur_bottom && (typ->typ != TYPE_ARRAY))) { \ + log_error(&tok->loginfo, "type qualifiers and 'static' may only appear in function argument array declarations\n"); \ + /* Empty destructor */ \ + goto failed; \ + } + if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_ATOMIC)) { + DO_CHECKS + array_atomic = 1; + *tok = proc_next_token(prep); + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_CONST)) { + DO_CHECKS + array_const = 1; + *tok = proc_next_token(prep); + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_RESTRICT)) { + DO_CHECKS + array_restrict = 1; + *tok = proc_next_token(prep); + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_STATIC)) { + DO_CHECKS + array_static = 1; + *tok = proc_next_token(prep); + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_VOLATILE)) { + DO_CHECKS + array_volatile = 1; + *tok = proc_next_token(prep); + } else break; +#undef DO_CHECKS + } + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_RSQBRACKET)) { + if (array_static) { + // Missing expression + log_error(&tok->loginfo, "unexpected token ']' in static length array declaration\n"); + // Empty destructor + goto failed; + } + // Incomplete VLA + nelems = (size_t)-1; + is_incomplete = 1; + } else if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_STAR)) { + if (array_static) { + // Missing expression + log_error(&tok->loginfo, "unexpected token '*' in static length array declaration\n"); + // Empty destructor + goto failed; + } + // Complete VLA, expecting a ']' + nelems = (size_t)-1; + is_incomplete = 0; + // Empty destructor + *tok = proc_next_token(prep); + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_RSQBRACKET)) { + // TODO: ...[*expr] + log_error(&tok->loginfo, "unexpected token during variable length array declaration\n"); + proc_token_del(tok); + goto failed; + } + } else { + // Constant expression, followed by ']' + is_incomplete = 0; + expr_t *e = parse_expression(target, PDECL_STRUCT_MAP, PDECL_TYPE_MAP, PDECL_ENUM_MAP, PDECL_BUILTINS, + PDECL_CONST_MAP, PDECL_TYPE_SET, prep, tok, 15); + if (!e) { + goto failed; + } + if ((tok->tokt != PTOK_SYM) || (tok->tokv.sym != SYM_RSQBRACKET)) { + log_error(&tok->loginfo, "unexpected token during array declaration\n"); + expr_del(e); + proc_token_del(tok); + goto failed; + } + num_constant_t cst; + if (eval_expression(&tok->loginfo, target, e, PDECL_CONST_MAP, &cst, is_init || is_list || !allow_decl)) { + expr_del(e); + int is_neg; + switch (cst.typ) { + case NCT_FLOAT: is_neg = cst.val.f < 0; nelems = (size_t)cst.val.f; break; + case NCT_DOUBLE: is_neg = cst.val.d < 0; nelems = (size_t)cst.val.d; break; + case NCT_LDOUBLE: is_neg = cst.val.l < 0; nelems = (size_t)cst.val.l; break; + case NCT_INT32: is_neg = cst.val.i32 < 0; nelems = (size_t)cst.val.i32; break; + case NCT_UINT32: is_neg = 0; nelems = (size_t)cst.val.u32; break; + case NCT_INT64: is_neg = cst.val.i64 < 0; nelems = (size_t)cst.val.i64; break; + case NCT_UINT64: is_neg = 0; nelems = (size_t)cst.val.u64; break; + default: is_neg = 1; + } + if (is_neg) { + log_error(&tok->loginfo, "the size of an array must be nonnegative"); + // Empty destructor + goto failed; + } + } else { + expr_del(e); + // Treated as '*' as function argument (TODO: as anything else) + if (is_init || is_list || !allow_decl) { + // Empty destructor + goto failed; + } + nelems = (size_t)-1; + } + } + // Token is ']' + + if (cur_bottom) { + type_t *tmp = type_new(); + if (!tmp) { + log_memory("failed to create new array type info\n"); + // Empty destructor + goto failed; + } + tmp->typ = TYPE_ARRAY; + tmp->val.array.array_sz = nelems; + tmp->is_incomplete = is_incomplete; + // cur_bottom is a pointer, an array or a function + // We have cur_bottom(old) --> below, we want cur_bottom(old) --> array=cur_bottom(new) --> below + tmp->val.array.typ = + (cur_bottom->typ == TYPE_PTR) ? cur_bottom->val.typ : + (cur_bottom->typ == TYPE_ARRAY) ? cur_bottom->val.array.typ : + cur_bottom->val.fun.ret; + *((cur_bottom->typ == TYPE_PTR) ? &cur_bottom->val.typ : + (cur_bottom->typ == TYPE_ARRAY) ? &cur_bottom->val.array.typ : &cur_bottom->val.fun.ret) = tmp; + cur_bottom = tmp; + } else { + type_t *new_typ = type_new(); + if (!new_typ) { + log_memory("failed to create new array type info\n"); + // Empty destructor + goto failed; + } + new_typ->typ = TYPE_ARRAY; + new_typ->val.array.array_sz = nelems; + new_typ->is_incomplete = is_incomplete; + // We have top(old), we want array=top(new)=cur_bottom(new) --> top(old) + new_typ->val.array.typ = typ; + cur_bottom = typ = new_typ; + } + *tok = proc_next_token(prep); + break; + } else if (tok->tokv.sym == SYM_RPAREN) { + if (!has_ident) { + if (!allow_abstract) { + log_error(&tok->loginfo, "invalid token ')' before identifier in declaration\n"); + // Empty destructor + goto failed; + } + has_ident = 1; + } + if (vector_size(size_t, nptr_stack) == 1) { + if (!is_init && !is_list) goto rparen_ok_ret; + log_error(&tok->loginfo, "closing unopened parenthesis in declaration\n"); + // Empty destructor + goto failed; + } + size_t ndecr; + if (cur_bottom) { + ndecr = vector_last(size_t, nptr_stack); + } else { + if (vector_last(size_t, nptr_stack)) { + cur_bottom = typ; + ndecr = vector_last(size_t, nptr_stack) - 1; + } else ndecr = 0; + } + for (size_t i = 0; i < ndecr; ++i) { + cur_bottom = + (cur_bottom->typ == TYPE_PTR) ? cur_bottom->val.typ : + (cur_bottom->typ == TYPE_ARRAY) ? cur_bottom->val.array.typ : + cur_bottom->val.fun.ret; + } + vector_pop(size_t, nptr_stack); + *tok = proc_next_token(prep); + break; + } else if ((is_init && (tok->tokv.sym == SYM_EQ)) + || (tok->tokv.sym == SYM_COMMA) + || (tok->tokv.sym == SYM_SEMICOLON) + || (is_init && (tok->tokv.sym == SYM_LBRACKET))) { + rparen_ok_ret: // Last function argument + if (!allow_abstract && !has_ident) { + log_error(&tok->loginfo, "invalid symbol '%s' before identifier\n", sym2str[tok->tokv.sym]); + // Empty destructor + goto failed; + } + if (vector_size(size_t, nptr_stack) != 1) { + log_error(&tok->loginfo, "invalid symbol '%s' (missing parenthesis?)\n", sym2str[tok->tokv.sym]); + // Empty destructor + goto failed; + } + + // Try to free some redundant types + typ = type_try_merge(typ, PDECL_TYPE_SET); + + int validation = validate_storage_type(&tok->loginfo, target, storage, typ, tok->tokv.sym); + if (!validation) { + // Empty destructor + goto failed; + } + + if (validation == VALIDATION_FUN) { + // Function definition; tok is '{' + if (!is_init || !is_list || has_list) { + // We are not at the top-level or we have an initialization list + log_error(&tok->loginfo, "invalid function definition\n"); + // Empty destructor + goto failed; + } + // Note that here, dest is a file_t + // No argument in function definition means that the function takes no argument, + // whereas no argument in function declaration means the function takes an unspecified number of arguments + if (typ->val.fun.nargs == (size_t)-1) typ->val.fun.nargs = 0; + + declaration_t *decl = malloc(sizeof *decl); + if (!decl) { + log_memory("failed to create new declaration\n"); + // Empty destructor + goto failed; + } + decl->storage = tmpsto2sto[storage]; + decl->defined = 1; + decl->typ = typ; + + int iret; + char *cident = string_steal(cur_ident); cur_ident = NULL; + khiter_t it = kh_put(decl_map, dest->f->decl_map, cident, &iret); + if (iret < 0) { + log_memory("failed to add function '%s' to the declaration map\n", cident); + free(cident); + free(decl); + // Empty destructor + goto failed; + } else if (iret == 0) { + free(decl); + if (kh_val(dest->f->decl_map, it)->defined) { + log_error(&tok->loginfo, "function '%s' is already in the declaration map\n", cident); + free(cident); + // Empty destructor + goto failed; + } else { + free(cident); + decl = kh_val(dest->f->decl_map, it); + } + } + + kh_val(dest->f->decl_map, it) = decl; + + // Skip the function body + int nlbraces = 0; + do { + proc_token_del(tok); + *tok = proc_next_token(prep); + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_LBRACKET)) ++nlbraces; + else if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_RBRACKET)) { + if (nlbraces) --nlbraces; + else goto success; + } + } while (!proc_token_isend(tok)); + log_error(&tok->loginfo, "unexpected token in function body\n"); + goto failed; + } + if ((fspec != FSPEC_NONE) && (typ->typ != TYPE_FUNCTION)) { + log_error(&tok->loginfo, "unexpected function specifier\n"); + // Empty destructor + goto failed; + } + + declaration_t *decl = NULL; + if (storage == TMPSTO_TYPEDEF) { + if (!is_init || !is_list) { + // We are not at the top-level (note that storage is set to NONE in function arguments) + log_error(&tok->loginfo, "invalid function definition\n"); + // Empty destructor + goto failed; + } + // Note that here, dest is a file_t + int iret; + char *cident = string_steal(cur_ident); cur_ident = NULL; + khiter_t it = kh_put(type_map, dest->f->type_map, cident, &iret); + if (iret < 0) { + log_memory("failed to add '%s' to the type map\n", cident); + free(cident); + // Empty destructor + goto failed; + } else if (iret == 0) { + if (!type_t_equal(typ, kh_val(dest->f->type_map, it))) { + log_error(&tok->loginfo, "'%s' is already in the type map with a different type\n", cident); + free(cident); + type_del(typ); + // Empty destructor + goto failed; + } + // We can safely ignore this since we have typedef-ed the same type + free(cident); + type_del(typ); + } else { + kh_val(dest->f->type_map, it) = typ; + } + } else { + if (is_init && is_list) { + decl = malloc(sizeof *decl); + if (!decl) { + log_memory("failed to create new declaration\n"); + // Empty destructor + goto failed; + } + if ((typ->typ == TYPE_FUNCTION) && (storage == TMPSTO_NONE)) + storage = TMPSTO_EXTERN; + decl->storage = tmpsto2sto[storage]; + decl->defined = 0; + decl->typ = typ; + + int iret; + char *cident = string_steal(cur_ident); cur_ident = NULL; + khiter_t it = kh_put(decl_map, dest->f->decl_map, cident, &iret); + if (iret < 0) { + log_memory("failed to add '%s' to the declaration map\n", cident); + free(cident); + free(decl); + // Empty destructor + goto failed; + } else if (iret == 0) { + if (!type_t_equal(typ, kh_val(dest->f->decl_map, it)->typ) + || ((storage == TMPSTO_NONE) && (kh_val(dest->f->decl_map, it)->storage == STORAGE_NONE))) { + log_error(&tok->loginfo, "'%s' is already in the declaration map\n", cident); + free(cident); + free(decl); + type_del(typ); + // Empty destructor + goto failed; + } else { + // OK, this is allowed + free(cident); + free(decl); + type_del(typ); + } + } else { + kh_val(dest->f->decl_map, it) = decl; + } + } else if (!is_init && !is_list) { + if (allow_decl) { + // Function argument + if (typ->typ == TYPE_ARRAY) { + // Convert to pointer + if (typ == base_type) { + typ = type_new(); + if (!typ) { + log_memory("failed to allocate new type\n"); + // Empty destructor + goto failed; + } + if (!type_copy_into(typ, base_type)) { + log_memory("failed to allocate new type\n"); + // Empty destructor + goto failed; + } + } + typ->typ = TYPE_PTR; + typ->val.typ = typ->val.array.typ; + if (array_atomic) typ->is_atomic = 1; + if (array_const) typ->is_const = 1; + if (array_restrict) typ->is_restrict = 1; + if (array_volatile) typ->is_volatile = 1; + typ = type_try_merge(typ, PDECL_TYPE_SET); + } + } + dest->argt.dest = typ; + if (cur_ident) string_del(cur_ident); + goto success; + } else if (!is_init && is_list) { + if (!vector_push(st_members, dest->structms.dest, ((st_member_t){.name = cur_ident, .typ = typ, .is_bitfield = 0}))) { + log_memory("failed to add structure member %s\n", string_content(cur_ident)); + string_del(cur_ident); + // Empty destructor + goto failed; + } + } else { + log_internal(&tok->loginfo, "unknown is_init/is_list combination %d%d\n", is_init, is_list); + // Empty destructor + goto failed; + } + } + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_EQ)) { + // Initialization + if (!is_init) { + log_error(&tok->loginfo, "unexpected initializer\n"); + goto failed; + } + if (decl) { + if (decl->defined) { + log_error(&tok->loginfo, "invalid declaration initializer: variable was already declared\n"); + goto failed; + } + decl->defined = 1; + } + *tok = proc_next_token(prep); + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_LBRACKET)) { + // { ... } + int nlbraces = 0; + do { + proc_token_del(tok); + *tok = proc_next_token(prep); + if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_LBRACKET)) ++nlbraces; + else if ((tok->tokt == PTOK_SYM) && (tok->tokv.sym == SYM_RBRACKET)) { + if (nlbraces) --nlbraces; + else break; + } + } while (!proc_token_isend(tok)); + if (proc_token_isend(tok)) { + log_error(&tok->loginfo, "unexpected token in declaration initializer\n"); + proc_token_del(tok); + goto failed; + } + } else { + expr_t *e = parse_expression(target, PDECL_STRUCT_MAP, PDECL_TYPE_MAP, PDECL_ENUM_MAP, PDECL_BUILTINS, + PDECL_CONST_MAP, PDECL_TYPE_SET, prep, tok, 15); + if (!e) { + log_error(&tok->loginfo, "invalid declaration initializer\n"); + goto failed; + } + expr_del(e); + } + if ((tok->tokt != PTOK_SYM) || ((tok->tokv.sym != SYM_COMMA) && (tok->tokv.sym != SYM_SEMICOLON))) { + log_error(&tok->loginfo, "unexpected token in declaration initializer\n"); + proc_token_del(tok); + goto failed; + } + validation = (tok->tokv.sym == SYM_SEMICOLON) ? VALIDATION_LAST_DECL : VALIDATION_DECL; + } + if (validation == VALIDATION_LAST_DECL) goto success; + else { + cur_ident = NULL; has_ident = 0; + typ = base_type; ++typ->nrefs; + cur_bottom = NULL; + vector_last(size_t, nptr_stack) = 0; + *tok = proc_next_token(prep); + break; + } + } else if (!is_init && is_list && (tok->tokv.sym == SYM_COLON)) { + if (vector_size(size_t, nptr_stack) != 1) { + log_error(&tok->loginfo, "invalid symbol '%s' (missing parenthesis?)\n", sym2str[tok->tokv.sym]); + // Empty destructor + goto failed; + } + // Try to free some redundant types + typ = type_try_merge(typ, PDECL_TYPE_SET); + + // storage == TMPSTO_NONE + *tok = proc_next_token(prep); + expr_t *e = parse_expression(target, dest->structms.struct_map, dest->structms.type_map, dest->structms.enum_map, + dest->structms.builtins, dest->structms.const_map, dest->structms.type_set, + prep, tok, 14); + if (!e) { + goto failed; + } + if ((tok->tokt != PTOK_SYM) || ((tok->tokv.sym != SYM_COMMA) && (tok->tokv.sym != SYM_SEMICOLON))) { + log_error(&tok->loginfo, "unexpected token in bitfield width\n"); + expr_del(e); + proc_token_del(tok); + goto failed; + } + num_constant_t eval; + if (!eval_expression(&tok->loginfo, target, e, dest->structms.const_map, &eval, 1)) { + expr_del(e); + // Empty destructor + goto failed; + } + expr_del(e); + + int validation = validate_storage_type(&tok->loginfo, target, storage, typ, tok->tokv.sym); + if (!validation) { + // Empty destructor + goto failed; + } + + if (validation == VALIDATION_FUN) { + // We are not at the top-level or we have an initialization list + // Should never happen + log_error(&tok->loginfo, "invalid function definition in structure definition\n"); + // Empty destructor + goto failed; + } + if ((fspec != FSPEC_NONE) && (typ->typ != TYPE_FUNCTION)) { + log_error(&tok->loginfo, "unexpected function specifier\n"); + // Empty destructor + goto failed; + } + + size_t width; + switch (eval.typ) { + case NCT_INT32: + if (eval.val.i32 < 0) { + log_error(&tok->loginfo, "invalid negative bitfield width\n"); + goto failed; + } + width = (size_t)eval.val.i32; + break; + case NCT_UINT32: + width = (size_t)eval.val.u32; + break; + case NCT_INT64: + if (eval.val.i64 < 0) { + log_error(&tok->loginfo, "invalid negative bitfield width\n"); + goto failed; + } + width = (size_t)eval.val.i64; + break; + case NCT_UINT64: + width = (size_t)eval.val.u64; + break; + case NCT_FLOAT: + case NCT_DOUBLE: + case NCT_LDOUBLE: + default: + log_error(&tok->loginfo, "invalid non-integer bitfield width\n"); + goto failed; + } + + if (!vector_push(st_members, dest->structms.dest, + ((st_member_t){.name = cur_ident, .typ = typ, .is_bitfield = 1, .bitfield_width = width}))) { + log_memory("failed to add structure member %s\n", string_content(cur_ident)); + string_del(cur_ident); + // Empty destructor + goto failed; + } + if (validation == VALIDATION_LAST_DECL) goto success; + else { + cur_ident = NULL; has_ident = 0; + typ = base_type; ++typ->nrefs; + cur_bottom = NULL; + vector_last(size_t, nptr_stack) = 0; + *tok = proc_next_token(prep); + break; + } + } + /* FALLTHROUGH */ + case PTOK_KEYWORD: + if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_ATOMIC)) { + if (has_ident) { + log_error(&tok->loginfo, "invalid keyword '_Atomic' after identifier\n"); + proc_token_print(tok); + // Empty destructor + goto failed; + } else if (!vector_last(size_t, nptr_stack)) { + log_error(&tok->loginfo, "invalid keyword '_Atomic' before symbol '*'\n"); + proc_token_print(tok); + // Empty destructor + goto failed; + } else { + typ->is_atomic = 1; + *tok = proc_next_token(prep); + break; + } + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_CONST)) { + if (has_ident) { + log_error(&tok->loginfo, "invalid keyword 'const' after identifier\n"); + proc_token_print(tok); + // Empty destructor + goto failed; + } else if (!vector_last(size_t, nptr_stack)) { + log_error(&tok->loginfo, "invalid keyword 'const' before symbol '*'\n"); + proc_token_print(tok); + // Empty destructor + goto failed; + } else { + typ->is_const = 1; + *tok = proc_next_token(prep); + break; + } + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_RESTRICT)) { + if (has_ident) { + log_error(&tok->loginfo, "invalid keyword 'restrict' after identifier\n"); + proc_token_print(tok); + // Empty destructor + goto failed; + } else if (!vector_last(size_t, nptr_stack)) { + log_error(&tok->loginfo, "invalid keyword 'restrict' before symbol '*'\n"); + proc_token_print(tok); + // Empty destructor + goto failed; + } else { + typ->is_restrict = 1; + *tok = proc_next_token(prep); + break; + } + } else if ((tok->tokt == PTOK_KEYWORD) && (tok->tokv.kw == KW_VOLATILE)) { + if (has_ident) { + log_error(&tok->loginfo, "invalid keyword 'volatile' after identifier\n"); + proc_token_print(tok); + // Empty destructor + goto failed; + } else if (!vector_last(size_t, nptr_stack)) { + log_error(&tok->loginfo, "invalid keyword 'volatile' before symbol '*'\n"); + proc_token_print(tok); + // Empty destructor + goto failed; + } else { + typ->is_volatile = 1; + *tok = proc_next_token(prep); + break; + } + } + /* FALLTHROUGH */ + case PTOK_INVALID: + case PTOK_NUM: + case PTOK_STRING: + case PTOK_PRAGMA: + case PTOK_EOF: + log_error(&tok->loginfo, "unexpected token (in parse_declarator %d%d%d%d)\n", is_init, is_list, allow_decl, allow_abstract); + proc_token_del(tok); + goto failed; + } + } + +success: + vector_del(size_t, nptr_stack); + // typ has moved, we must not destroy it + return 1; +failed: + vector_del(size_t, nptr_stack); +failed0: + if (cur_ident) string_del(cur_ident); + type_del(typ); + return 0; +} + +static int finalize_file(machine_t *target, file_t *file) { +#define MARK_SIMPLE(sname) \ + it = kh_get(struct_map, file->struct_map, #sname); \ + if (it != kh_end(file->struct_map)) { \ + kh_val(file->struct_map, it)->is_simple = 1; \ + } else { \ + it = kh_get(type_map, file->type_map, #sname); \ + if (it != kh_end(file->type_map)) { \ + type_t *typ2 = kh_val(file->type_map, it); \ + if (typ2->typ != TYPE_STRUCT_UNION) { \ + log_error_nopos("invalid typedef " #sname ": not a structure\n"); \ + return 0; \ + } \ + typ2->val.st->is_simple = 1; \ + } \ + } +#define SET_WEAK(converted) \ + validate_type(&(loginfo_t){0}, target, typ); \ + typ = type_try_merge(typ, file->type_set); \ + it = kh_put(conv_map, file->relaxed_type_conversion, typ, &iret); \ + if (iret < 0) { \ + log_memory("failed to add relaxed conversion to type map\n"); \ + type_del(typ); \ + return 0; \ + } else if (iret == 0) { \ + log_error_nopos("type already has a relaxed conversion\n"); \ + type_del(typ); \ + return 0; \ + } \ + kh_val(file->relaxed_type_conversion, it) = string_new_cstr(#converted); +#define SET_WEAK_PTR_TO(to_typ, converted) \ + it = kh_get(type_map, file->type_map, #to_typ); \ + if (it != kh_end(file->type_map)) { \ + typ = type_new_ptr(kh_val(file->type_map, it)); \ + if (!typ) { \ + log_memory("failed to create type " #to_typ "*\n"); \ + return 0; \ + } \ + ++kh_val(file->type_map, it)->nrefs; \ + SET_WEAK(converted) \ + } + + type_t *typ; + int iret; + khiter_t it; + // #pragma type_letters S FILE* + SET_WEAK_PTR_TO(FILE, S) + // #pragma type_letters b xcb_connection_t* + SET_WEAK_PTR_TO(xcb_connection_t, S) + if (target->size_long == 4) { + // Only on x86, not on x86_64 + it = kh_get(type_map, file->type_map, "locale_t"); + if (it != kh_end(file->type_map)) { + typ = kh_val(file->type_map, it); + SET_WEAK(a) + } + } + // #pragma mark_simple ... + if (target->size_long == 8) { + // Only on x86_64, not on x86 + MARK_SIMPLE(FTS) + MARK_SIMPLE(FTS64) + MARK_SIMPLE(glob_t) + MARK_SIMPLE(glob64_t) + } +#undef MARK_SIMPLE +#undef SET_WEAK +#undef SET_WEAK_PTR_TO + return 1; +} + +file_t *parse_file(machine_t *target, const char *filename, FILE *file) { + char *dirname = strchr(filename, '/') ? strndup(filename, (size_t)(strrchr(filename, '/') - filename)) : NULL; + preproc_t *prep = preproc_new_file(target, file, dirname, filename); + if (!prep) { + log_memory("failed to create the preproc structure\n"); + if (dirname) free(dirname); + return NULL; + } + file_t *ret = file_new(target); + if (!ret) { + log_memory("failed to create the file structure\n"); + preproc_del(prep); + return NULL; + } + + type_t *typ = type_new(); + if (!typ) { + log_memory("failed to create a type info structure\n"); + goto failed; + } + while (1) { + proc_token_t tok = proc_next_token(prep); + if (tok.tokt == PTOK_EOF) { + goto success; + } else if (tok.tokt == PTOK_PRAGMA) { + switch (tok.tokv.pragma.typ) { + case PRAGMA_ALLOW_INTS: { + const char *typenames[] = {BTT_INT_EXTS}; + for (size_t i = 0; i < sizeof typenames / sizeof *typenames; ++i) { + int iret; + char *dup = strdup(typenames[i]); + if (!dup) { + log_memory("failed to create a type info structure\n"); + goto failed; + } + type_t *t = ret->builtins[BTT_START_INT_EXT + i]; + khiter_t it = kh_put(type_map, ret->type_map, dup, &iret); + if (iret < 0) { + log_memory("failed to add an intrinsic to the type map\n"); + goto failed; + } else if (iret == 0) { + if (!type_t_equal(t, kh_val(ret->type_map, it))) { + log_error(&tok.loginfo, "%s is already defined\n", dup); + free(dup); + goto failed; + } + free(dup); + } else { + ++t->nrefs; + kh_val(ret->type_map, it) = t; + } + } + break; } + case PRAGMA_SIMPLE_SU: { + string_t *sutag = tok.tokv.pragma.val; + struct_t *su; + khiter_t it = kh_get(struct_map, ret->struct_map, string_content(sutag)); + if (it != kh_end(ret->struct_map)) { + su = kh_val(ret->struct_map, it); + } else { + it = kh_get(type_map, ret->type_map, string_content(sutag)); + if (it != kh_end(ret->struct_map)) { + type_t *typ2 = kh_val(ret->type_map, it); + if (typ2->typ != TYPE_STRUCT_UNION) { + log_error(&tok.loginfo, "failed to find struct/union named %s\n", string_content(sutag)); + string_del(sutag); + goto failed; + } + su = typ2->val.st; + } else { + log_error(&tok.loginfo, "failed to find struct/union named %s\n", string_content(sutag)); + string_del(sutag); + goto failed; + } + } + string_del(sutag); + su->is_simple = 1; + // Empty destructor + break; } + case PRAGMA_EXPLICIT_CONV: { + string_t *converted = tok.tokv.pragma.val; + type_t *typ2 = type_new(); + if (!typ2) { + log_memory("failed to create new type info structure\n"); + string_del(converted); + type_del(typ2); + goto failed; + } + tok = proc_next_token(prep); + if (!parse_type_name(target, ret->struct_map, ret->type_map, ret->enum_map, &ret->builtins, ret->const_map, ret->type_set, + prep, &tok, SYM_SEMICOLON, &typ2)) { + string_del(converted); + goto failed; + } + int iret; + khiter_t it = kh_put(conv_map, ret->relaxed_type_conversion, typ2, &iret); + if (iret < 0) { + log_memory("failed to add relaxed conversion to type map\n"); + string_del(converted); + type_del(typ2); + // Empty destructor + goto failed; + } else if (iret == 0) { + log_error(&tok.loginfo, "type already has a relaxed conversion\n"); + string_del(converted); + type_del(typ2); + // Empty destructor + goto failed; + } + string_trim(converted); + kh_val(ret->relaxed_type_conversion, it) = converted; + // Empty destructor + break; } + case PRAGMA_EXPLICIT_CONV_STRICT: { + string_t *converted = tok.tokv.pragma.val; + type_t *typ2 = type_new(); + if (!typ2) { + log_memory("failed to create new type info structure\n"); + string_del(converted); + type_del(typ2); + goto failed; + } + tok = proc_next_token(prep); + if (!parse_type_name(target, ret->struct_map, ret->type_map, ret->enum_map, &ret->builtins, ret->const_map, ret->type_set, + prep, &tok, SYM_SEMICOLON, &typ2)) { + string_del(converted); + goto failed; + } + type_del(typ2); // typ2 is in the type set, so it is already used + if (typ2->converted) { + log_error(&tok.loginfo, "type already has a strict conversion\n"); + string_del(converted); + // Empty destructor + goto failed; + } + string_trim(converted); + typ2->converted = converted; + // Empty destructor + break; } + } + } else if (proc_token_iserror(&tok)) { + log_error(&tok.loginfo, "unexpected error token\n"); + proc_token_del(&tok); + goto failed; + } else { + enum decl_storage storage = TMPSTO_NONE; + enum fun_spec fspec = FSPEC_NONE; + enum decl_spec spec = SPEC_NONE; + if (!parse_declaration_specifier(target, ret->struct_map, ret->type_map, ret->enum_map, &ret->builtins, ret->const_map, + ret->type_set, prep, &tok, &storage, &fspec, &spec, typ)) { + goto failed; + } + if (spec == SPEC_NONE) continue; // Declaration was an assert, typ is unchanged + typ = type_try_merge(typ, ret->type_set); + if ((tok.tokt != PTOK_SYM) || (tok.tokv.sym != SYM_SEMICOLON)) { + if (!parse_declarator(target, &(struct parse_declarator_dest_s){.f = ret}, prep, &tok, storage, fspec, typ, 1, 1, 1, 0)) { + goto failed; + } + } else { + if (validate_storage_type(&tok.loginfo, target, storage, typ, tok.tokv.sym) != VALIDATION_LAST_DECL) { + goto failed; + } + if (fspec != FSPEC_NONE) { + log_error(&tok.loginfo, "unexpected function specifier\n"); + // Empty destructor + goto failed; + } + } + // Current token is ';' (or '}' for functions), ie. end of declaration + type_del(typ); + typ = type_new(); + if (!typ) { + log_memory("failed to create a type info structure\n"); + goto failed; + } + } + } + +success: + preproc_del(prep); + type_del(typ); + if (!finalize_file(target, ret)) { + log_memory("failed to add builtin aliases\n"); + file_del(ret); + return NULL; + } + return ret; +failed: + preproc_del(prep); + if (typ) type_del(typ); + file_del(ret); + return NULL; +} diff --git a/wrapperhelper/src/parse.h b/wrapperhelper/src/parse.h new file mode 100644 index 0000000000000000000000000000000000000000..e80f32d260dca4024ad807a1b3ec8d7b4cc4c54e --- /dev/null +++ b/wrapperhelper/src/parse.h @@ -0,0 +1,15 @@ +#pragma once + +#ifndef PARSE_H +#define PARSE_H + +#include + +#include "lang.h" +#include "machine.h" + +void dump_prepare(const char *filename, FILE *file); +void dump_preproc(machine_t *target, const char *filename, FILE *file); +file_t *parse_file(machine_t *target, const char *filename, FILE *file); + +#endif // PARSE_H diff --git a/wrapperhelper/src/prepare.c b/wrapperhelper/src/prepare.c new file mode 100644 index 0000000000000000000000000000000000000000..464b7937dec773342c75644f7f3201a07a7f722c --- /dev/null +++ b/wrapperhelper/src/prepare.c @@ -0,0 +1,583 @@ +#include "prepare.h" + +#include + +#include "log.h" + +static struct li_filename_s { + char *name; + struct li_filename_s *next; +} *li_filenames = NULL; + +typedef struct char_s { + int c; + loginfo_t li; +} char_t; + +struct prepare_s { + FILE *f; + char_t buf[5]; + int buf_len; // <= 5 (though 4 *should* be enough) + char *srcn; + loginfo_t li; + enum prepare_state { + PREPST_NONE = 0, + PREPST_NL, + PREPST_HASH, + PREPST_INCL, + PREPST_DEF, + PREPST_DEFID, + PREPST_COMMENT, + } st; +}; + +prepare_t *prepare_new_file(FILE *f, const char *filename) { + prepare_t *ret = malloc(sizeof *ret); + if (!ret) { + log_memory("failed to allocate new preparator structure\n"); + fclose(f); + return NULL; + } + + char *srcn = strdup(filename ? filename : ""); + if (!srcn) { + log_memory("failed to duplicate filename\n"); + free(ret); + return NULL; + } + struct li_filename_s *new_lifn = malloc(sizeof *new_lifn); + if (!new_lifn) { + log_memory("failed to remember new filename\n"); + free(srcn); + free(ret); + return NULL; + } + *new_lifn = (struct li_filename_s){ .name = srcn, .next = li_filenames }; + li_filenames = new_lifn; + + *ret = (prepare_t){ + .f = f, + .buf = {{0}, {0}, {0}, {0}}, + .buf_len = 0, + .srcn = srcn, + .li = { .filename = srcn, .lineno = 1, .colno = 1, .lineno_end = 0, .colno_end = 0 }, + .st = PREPST_NL, + }; + return ret; +} + +void prepare_del(prepare_t *prep) { + if (prep->f) fclose(prep->f); + free(prep); +} + +// Do not call this more than twice in a row if the last character retrieved is '\\' +static void unget_char(prepare_t *src, char_t c) { + src->buf[src->buf_len++] = c; +} +// Transforms \n, \r\n and \r into \n +static char_t get_char(prepare_t *src) { + if (src->buf_len) { + return src->buf[--src->buf_len]; + } +start_get_char: + int c = getc(src->f); + if (c == '\\') { + c = getc(src->f); + if (c == '\n') { + ++src->li.lineno; + src->li.colno = 1; + goto start_get_char; + } else if (c == '\r') { + ++src->li.lineno; + src->li.colno = 1; + c = getc(src->f); + if (c == '\n') { + goto start_get_char; + } else { + unget_char(src, (char_t){.c = c, .li = src->li}); + goto start_get_char; + } + } + src->li.colno += 2; + src->buf[src->buf_len++] = (char_t){ + .c = c, + .li = { .filename = src->li.filename, .lineno = src->li.lineno, .colno = src->li.colno - 1, .lineno_end = 0, .colno_end = 0 } + }; + return (char_t){ + .c = '\\', + .li = { .filename = src->li.filename, .lineno = src->li.lineno, .colno = src->li.colno - 2, .lineno_end = 0, .colno_end = 0 } + }; + } + char_t ret = { + .c = c, + .li = { .filename = src->li.filename, .lineno = src->li.lineno, .colno = src->li.colno, .lineno_end = 0, .colno_end = 0 } + }; + if (c == '\n') { + ++src->li.lineno; + src->li.colno = 1; + } else if (c == '\r') { + ++src->li.lineno; + src->li.colno = 1; + ret.c = '\n'; + c = getc(src->f); + if (c != '\n') { + unget_char(src, (char_t){.c = c, .li = src->li}); + } + } else { + ++src->li.colno; + } + return ret; +} + +static void fill_ident(prepare_t *src, string_t *buf, size_t *lineno_end, size_t *colno_end) { + while (1) { + char_t c = get_char(src); + if ((c.c == '_') || ((c.c >= '0') && (c.c <= '9')) || ((c.c >= 'A') && (c.c <= 'Z')) || ((c.c >= 'a') && (c.c <= 'z'))) { + string_add_char(buf, (char)c.c); + *lineno_end = c.li.lineno; + *colno_end = c.li.colno; + } else { + unget_char(src, c); + return; + } + } +} + +static void fill_num(prepare_t *src, string_t *buf, size_t *lineno_end, size_t *colno_end) { + int started_exp = 0; + while (1) { + char_t c = get_char(src); + if ((c.c == '_') || (c.c == '.') || ((c.c >= '0') && (c.c <= '9')) || ((c.c >= 'A') && (c.c <= 'Z')) || ((c.c >= 'a') && (c.c <= 'z')) + || (started_exp && ((c.c == '+') || (c.c == '-')))) { + started_exp = (c.c == 'e') || (c.c == 'E') || (c.c == 'p') || (c.c == 'P'); + string_add_char(buf, (char)c.c); + *lineno_end = c.li.lineno; + *colno_end = c.li.colno; + } else { + unget_char(src, c); + return; + } + } +} + +static void fill_str(prepare_t *src, string_t *buf, char end_c, int can_esc, size_t *lineno_end, size_t *colno_end) { + int has_esc = 0; + while (1) { + char_t c = get_char(src); + if (has_esc && (c.c >= 0) && (c.c <= 0x7F) && (c.c != '\n')) { + // Not technically standard compliant (should support \ooo, \x..., \u..., \U...) + // Since we don't really care about parsing the content, only the delimiters, this is good enough + string_add_char(buf, '\\'); + string_add_char(buf, (char)c.c); + has_esc = 0; + *lineno_end = c.li.lineno; + *colno_end = c.li.colno; + } else if (c.c == '\\') { + *lineno_end = c.li.lineno; + *colno_end = c.li.colno; + if (can_esc) { + has_esc = 1; + } else { + string_add_char(buf, '\\'); + } + } else if ((c.c >= 0) && (c.c <= 0x7F) && (c.c != '\n') && (c.c != end_c)) { + has_esc = 0; + string_add_char(buf, (char)c.c); + *lineno_end = c.li.lineno; + *colno_end = c.li.colno; + } else { + // c.c is invalid (> 0x80) or a '\n', or can_esc = 0 and c.c = end_c + if (has_esc) { + string_add_char(buf, '\\'); + } + if (c.c != end_c) { + unget_char(src, c); + } else { + *lineno_end = c.li.lineno; + *colno_end = c.li.colno; + } + return; + } + } +} + +#define BASE_NSYMS 25 +static const struct symbs_s { + char c; + enum token_sym_type_e sym; + int nnext; + const struct symbs_s *next; +} *symbs = (struct symbs_s[BASE_NSYMS]){ +#define TERM(ch, t) { .c = ch, .sym = t, .nnext = 0, .next = NULL } +#define NONTERM(ch, t, n, ...) { .c = ch, .sym = t, .nnext = n, .next = (struct symbs_s[n]){__VA_ARGS__} } + // Only '..' must have a sym > LAST_SYM; change next_token if this is not the case + NONTERM('.', SYM_DOT, 1, NONTERM('.', LAST_SYM + 1, 1, TERM('.', SYM_VARIADIC))), + TERM('{', SYM_LBRACKET), + TERM('}', SYM_RBRACKET), + TERM('[', SYM_LSQBRACKET), + TERM(']', SYM_RSQBRACKET), + TERM('(', SYM_LPAREN), + TERM(')', SYM_RPAREN), + NONTERM('#', SYM_HASH, 1, TERM('#', SYM_HASHHASH)), + TERM(';', SYM_SEMICOLON), + NONTERM(':', SYM_COLON, 1, TERM(':', SYM_COLONCOLON)), + TERM('?', SYM_QUESTION), + TERM('~', SYM_TILDE), + NONTERM('!', SYM_EXCL, 1, TERM('=', SYM_EXCLEQ)), + NONTERM('+', SYM_PLUS, 2, TERM('=', SYM_PLUSEQ), TERM('+', SYM_PLUSPLUS)), + NONTERM('-', SYM_DASH, 3, TERM('=', SYM_DASHEQ), TERM('-', SYM_DASHDASH), TERM('>', SYM_DASHGT)), + NONTERM('*', SYM_STAR, 1, TERM('=', SYM_STAREQ)), + NONTERM('/', SYM_SLASH, 1, TERM('=', SYM_SLASHEQ)), + NONTERM('%', SYM_PERCENT, 1, TERM('=', SYM_PERCENTEQ)), + NONTERM('^', SYM_HAT, 1, TERM('=', SYM_HATEQ)), + NONTERM('&', SYM_AMP, 2, TERM('=', SYM_AMPEQ), TERM('&', SYM_AMPAMP)), + NONTERM('|', SYM_PIPE, 2, TERM('=', SYM_PIPEEQ), TERM('|', SYM_PIPEPIPE)), + NONTERM('=', SYM_EQ, 1, TERM('=', SYM_EQEQ)), + NONTERM('<', SYM_LT, 2, TERM('=', SYM_LTEQ), NONTERM('<', SYM_LTLT, 1, TERM('=', SYM_LTLTEQ))), + NONTERM('>', SYM_GT, 2, TERM('=', SYM_GTEQ), NONTERM('>', SYM_GTGT, 1, TERM('=', SYM_GTGTEQ))), + TERM(',', SYM_COMMA), +#undef NONTERM +#undef TERM +}; + +preproc_token_t pre_next_token(prepare_t *src, int allow_comments) { + if (src->st == PREPST_COMMENT) { + // In comments, keep everything as 'BLANK' except for idents, newlines and EOF + char_t c = get_char(src); + if (c.c == EOF) { + // Force newline at EOF + unget_char(src, c); + src->st = PREPST_NL; + return (preproc_token_t){ + .tokt = PPTOK_NEWLINE, + .loginfo = c.li, + .tokv.c = (char)c.c + }; + } else if ((c.c == '_') || ((c.c >= 'a') && (c.c <= 'z')) || ((c.c >= 'A') && (c.c <= 'Z'))) { + preproc_token_t ret; + ret.tokt = PPTOK_IDENT; + ret.loginfo = c.li; + ret.tokv.str = string_new_cap(1); + string_add_char(ret.tokv.str, (char)c.c); + fill_ident(src, ret.tokv.str, &ret.loginfo.lineno_end, &ret.loginfo.colno_end); + return ret; + } else if ((c.c >= 0) && (c.c <= 0x7F)) { + return (preproc_token_t){ + .tokt = PPTOK_BLANK, + .loginfo = c.li, + .tokv.c = (char)c.c + }; + } else { + return (preproc_token_t){ + .tokt = PPTOK_INVALID, + .loginfo = c.li, + .tokv.c = (char)c.c + }; + } + } + +start_next_token: + char_t c = get_char(src); + if (c.c == EOF) { + if (src->st == PREPST_NL) { + return (preproc_token_t){ + .tokt = PPTOK_EOF, + .loginfo = c.li, + .tokv.c = (char)c.c + }; + } else { + // Force newline at EOF + unget_char(src, c); + src->st = PREPST_NL; + return (preproc_token_t){ + .tokt = PPTOK_NEWLINE, + .loginfo = c.li, + .tokv.c = (char)c.c + }; + } + } + + if (src->st == PREPST_INCL && (c.c == '<')) { + src->st = PREPST_NONE; + preproc_token_t ret; + ret.tokt = PPTOK_INCL; + ret.loginfo = c.li; + ret.tokv.sisstr = 0; + ret.tokv.sstr = string_new(); + fill_str(src, ret.tokv.sstr, '>', 0, &ret.loginfo.lineno_end, &ret.loginfo.colno_end); + return ret; + } + if (c.c == '\'') { + src->st = PREPST_NONE; + preproc_token_t ret; + ret.tokt = PPTOK_STRING; + ret.loginfo = c.li; + ret.tokv.sisstr = 0; + ret.tokv.sstr = string_new_cap(1); // Usually only one character is inside a char literal + fill_str(src, ret.tokv.sstr, '\'', 1, &ret.loginfo.lineno_end, &ret.loginfo.colno_end); + return ret; + } + if (c.c == '"') { + preproc_token_t ret; + ret.tokt = (src->st == PREPST_INCL) ? PPTOK_INCL : PPTOK_STRING; + src->st = PREPST_NONE; + ret.loginfo = c.li; + ret.tokv.sisstr = 1; + ret.tokv.sstr = string_new(); + fill_str(src, ret.tokv.sstr, '"', ret.tokt == PPTOK_STRING, &ret.loginfo.lineno_end, &ret.loginfo.colno_end); + return ret; + } + if ((c.c == ' ') || (c.c == '\f') || (c.c == '\t') || (c.c == '\v')) { + if (src->st == PREPST_DEFID) { + src->st = PREPST_NONE; + return (preproc_token_t){ + .tokt = PPTOK_BLANK, + .loginfo = c.li, + .tokv.c = (char)c.c + }; + } else goto start_next_token; + } + if (c.c == '\n') { + src->st = PREPST_NL; + return (preproc_token_t){ + .tokt = PPTOK_NEWLINE, + .loginfo = c.li, + .tokv.c = (char)c.c + }; + } + if ((c.c == '_') || ((c.c >= 'a') && (c.c <= 'z')) || ((c.c >= 'A') && (c.c <= 'Z'))) { + preproc_token_t ret; + ret.tokt = PPTOK_IDENT; + ret.loginfo = c.li; + ret.tokv.str = string_new_cap(1); + string_add_char(ret.tokv.str, (char)c.c); + fill_ident(src, ret.tokv.str, &ret.loginfo.lineno_end, &ret.loginfo.colno_end); + src->st = + ((src->st == PREPST_HASH) && (!strcmp(string_content(ret.tokv.str), "include"))) ? PREPST_INCL : + ((src->st == PREPST_HASH) && (!strcmp(string_content(ret.tokv.str), "include_next"))) ? PREPST_INCL : + ((src->st == PREPST_HASH) && (!strcmp(string_content(ret.tokv.str), "define"))) ? PREPST_DEF : + (src->st == PREPST_DEF) ? PREPST_DEFID : + PREPST_NONE; + return ret; + } + if ((c.c >= '0') && (c.c <= '9')) { + src->st = PREPST_NONE; + preproc_token_t ret; + ret.tokt = PPTOK_NUM; + ret.loginfo = c.li; + ret.tokv.str = string_new_cap(1); + string_add_char(ret.tokv.str, (char)c.c); + fill_num(src, ret.tokv.str, &ret.loginfo.lineno_end, &ret.loginfo.colno_end); + return ret; + } + if (c.c == '.') { + loginfo_t oldli = c.li; + c = get_char(src); + if ((c.c >= '0') && (c.c <= '9')) { + src->st = PREPST_NONE; + preproc_token_t ret; + ret.tokt = PPTOK_NUM; + ret.loginfo = oldli; + ret.loginfo.lineno_end = c.li.lineno; + ret.loginfo.colno_end = c.li.colno; + ret.tokv.str = string_new_cap(2); + string_add_char(ret.tokv.str, '.'); + string_add_char(ret.tokv.str, (char)c.c); + fill_num(src, ret.tokv.str, &ret.loginfo.lineno_end, &ret.loginfo.colno_end); + return ret; + } else { + unget_char(src, c); + c.c = '.'; + c.li = oldli; + } + } + if (c.c == '/') { + char_t c2 = get_char(src); + if (c2.c == '/') { + if (allow_comments) { + src->st = PREPST_COMMENT; + return (preproc_token_t){ + .tokt = PPTOK_START_LINE_COMMENT, + .loginfo = { + .filename = c2.li.filename, + .lineno = c.li.lineno, .colno = c.li.colno, + .lineno_end = c2.li.lineno, .colno_end = c2.li.colno, + }, + .tokv.c = '/', + }; + } + + do { + c2 = get_char(src); + } while ((c2.c != EOF) && (c2.c != '\n')); + if (c2.c != EOF) { + if (src->st == PREPST_NL) + goto start_next_token; + else { + src->st = PREPST_NL; + return (preproc_token_t){ + .tokt = PPTOK_NEWLINE, + .loginfo = c2.li, + .tokv.c = (char)c2.c + }; + } + } + + // Force newline at EOF + unget_char(src, c2); + src->st = PREPST_NL; + return (preproc_token_t){ + .tokt = PPTOK_NEWLINE, + .loginfo = c2.li, + .tokv.c = (char)c2.c + }; + } else if (c2.c == '*') { + if (allow_comments) { + c.li.lineno_end = c2.li.lineno; + c.li.colno_end = c2.li.colno; + log_error(&c.li, "unsupported multiline comment with allow_comment\n"); + return (preproc_token_t){ + .tokt = PPTOK_INVALID, + .loginfo = c.li, + .tokv.c = (char)c.c + }; + } + + c2 = get_char(src); + int last_star = 0; + while ((c2.c != EOF) && (!last_star || (c2.c != '/'))) { + last_star = c2.c == '*'; + c2 = get_char(src); + } + if (c2.c != EOF) goto start_next_token; + + c.li.lineno_end = c2.li.lineno; + c.li.colno_end = c2.li.colno; + log_error(&c.li, "unfinished multiline comment\n"); + src->st = PREPST_NONE; + return (preproc_token_t){ + .tokt = PPTOK_INVALID, + .loginfo = c2.li, + .tokv.c = (char)c2.c + }; + } else { + unget_char(src, c2); + } + } + + struct symbs_s const *sym = NULL; + for (int i = 0; i < BASE_NSYMS; ++i) { + if (c.c == symbs[i].c) { + sym = &symbs[i]; + break; + } + } + if (sym) { + loginfo_t lisym = c.li; + loginfo_t liend = c.li; + while (sym->nnext) { + c = get_char(src); + int found = 0; + for (int i = 0; i < sym->nnext; ++i) { + if (c.c == sym->next[i].c) { + found = 1; + sym = &sym->next[i]; + liend = c.li; + lisym.lineno_end = c.li.lineno; + lisym.colno_end = c.li.colno; + break; + } + } + if (!found) { + unget_char(src, c); + break; + } + } + if (sym->sym == LAST_SYM + 1) { + // This is where no check is made (see comment in the definition of symbs) + unget_char(src, (char_t){.c = sym->c, .li = liend}); + sym = &symbs[0]; + lisym.lineno_end = lisym.colno_end = 0; + } + src->st = ((src->st == PREPST_NL) && (sym->sym == SYM_HASH)) ? PREPST_HASH : PREPST_NONE; + return (preproc_token_t){ + .tokt = PPTOK_SYM, + .loginfo = lisym, + .tokv.sym = sym->sym + }; + } + + src->st = PREPST_NONE; + log_error(&c.li, "invalid character 0x%02X (%c)\n", (unsigned)c.c, (c.c >= 0x20) && (c.c < 0x7F) ? c.c : '?'); + return (preproc_token_t){ + .tokt = PPTOK_INVALID, + .loginfo = c.li, + .tokv.c = (char)c.c, + }; +} + +void prepare_set_line(prepare_t *src, char *filename, size_t lineno) { + if (filename) { + char *srcn = strdup(filename ? filename : ""); + if (!srcn) { + log_memory("failed to duplicate filename from #line command\n"); + return; + } + struct li_filename_s *new_lifn = malloc(sizeof *new_lifn); + if (!new_lifn) { + log_memory("failed to remember new filename from #line command\n"); + free(srcn); + return; + } + *new_lifn = (struct li_filename_s){ .name = srcn, .next = li_filenames }; + li_filenames = new_lifn; + src->srcn = srcn; + src->li.filename = srcn; + } + size_t colno = 1; + for (int i = src->buf_len; i--; ) { + src->buf[i].li.lineno = lineno; + src->buf[i].li.colno = colno; + if (src->buf[i].c == '\n') { + ++lineno; + colno = 1; + } else { + ++colno; + } + } + src->li.lineno = lineno; + src->li.colno = colno; +} + +// Warning: unsafe method +void prepare_mark_nocomment(prepare_t *src) { + src->st = PREPST_NONE; +} +int pre_next_newline_token(prepare_t *src, string_t *buf) { + while (1) { + char_t c = get_char(src); + if (c.c == EOF) { + // Force newline at EOF + unget_char(src, c); + src->st = PREPST_NL; + return 1; + } else if (c.c == '\n') { + src->st = PREPST_NL; + return 1; + } else if ((c.c >= 0) && (c.c <= 0x7F)) { + if (!string_add_char(buf, (char)c.c)) return 0; + } else { + return 0; + } + } +} + +void prepare_cleanup(void) { + while (li_filenames) { + struct li_filename_s *lifn = li_filenames->next; + free(li_filenames->name); + free(li_filenames); + li_filenames = lifn; + } +} diff --git a/wrapperhelper/src/prepare.h b/wrapperhelper/src/prepare.h new file mode 100644 index 0000000000000000000000000000000000000000..bcf4e782ec2bc50dcd04fdaf2b5f4739a6b158a3 --- /dev/null +++ b/wrapperhelper/src/prepare.h @@ -0,0 +1,24 @@ +#pragma once + +#ifndef PREPARE_H +#define PREPARE_H + +#include + +#include "cstring.h" +#include "lang.h" + +typedef struct prepare_s prepare_t; + +prepare_t *prepare_new_file(FILE *f, const char *filename); // Takes ownership of f +void prepare_del(prepare_t *src); +preproc_token_t pre_next_token(prepare_t *src, int allow_comments); + +void prepare_set_line(prepare_t *src, char *filename, size_t lineno); // Takes ownership of filename if != NULL + +void prepare_mark_nocomment(prepare_t *src); // Change the state (usually from COMMENT) to NONE +int pre_next_newline_token(prepare_t *src, string_t *buf); // In a comment append everything until the EOL or EOF to the buffer + +void prepare_cleanup(void); // Frees loginfo filenames + +#endif // PREPARE_H diff --git a/wrapperhelper/src/preproc.c b/wrapperhelper/src/preproc.c new file mode 100644 index 0000000000000000000000000000000000000000..fe93ace056e8854f0f6a46936f78901815c88796 --- /dev/null +++ b/wrapperhelper/src/preproc.c @@ -0,0 +1,3299 @@ +// I think this file is too big for GCC to handle properly, there are curious false-positive analyzer warnings +// that didn't appear before adding preproc_eval +#include "preproc.h" + +#include +#include + +#include "cstring.h" +#include "khash.h" +#include "machine.h" +#include "prepare.h" + +//#define LOG_OPEN +//#define LOG_INCLUDE +//#define LOG_CLOSE + +typedef struct mtoken_s { + enum mtoken_e { + MTOK_TOKEN, + MTOK_ARG, + MTOK_STRINGIFY, + MTOK_CONCAT, + } typ; + union { + preproc_token_t tok; + unsigned argid; + struct { struct mtoken_s *l, *r; } concat; + } val; +} mtoken_t; +static void mtoken_del(mtoken_t *tok) { + switch (tok->typ) { + case MTOK_TOKEN: + preproc_token_del(&tok->val.tok); + free(tok); + return; + + case MTOK_CONCAT: + mtoken_del(tok->val.concat.l); + mtoken_del(tok->val.concat.r); + free(tok); + return; + + case MTOK_ARG: + case MTOK_STRINGIFY: + free(tok); + return; + } +} + +KHASH_MAP_INIT_STR(argid_map, unsigned) +static void argid_map_del(khash_t(argid_map) *args) { + kh_cstr_t str; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" + kh_foreach_key(args, str, free((void*)str)) +#pragma GCC diagnostic pop + kh_destroy(argid_map, args); +} +static mtoken_t *mtoken_new_token(preproc_token_t tok) { + mtoken_t *ret = malloc(sizeof *ret); + if (!ret) return NULL; + ret->typ = MTOK_TOKEN; + ret->val.tok = tok; + return ret; +} +static mtoken_t *mtoken_new_arg(unsigned argid, int as_string) { + mtoken_t *ret = malloc(sizeof *ret); + if (!ret) return NULL; + ret->typ = as_string ? MTOK_STRINGIFY : MTOK_ARG; + ret->val.argid = argid; + return ret; +} +static mtoken_t *mtoken_new_concat(mtoken_t *l, mtoken_t *r) { // Takes ownership of l and r + mtoken_t *ret = malloc(sizeof *ret); + if (!ret) { + mtoken_del(l); + mtoken_del(r); + return NULL; + } + ret->typ = MTOK_CONCAT; + ret->val.concat.l = l; + ret->val.concat.r = r; + return ret; +} + +static inline void macro_tok_print(mtoken_t *m) { + switch (m->typ) { + case MTOK_TOKEN: + printf("token type %u", m->val.tok.tokt); + if (m->val.tok.tokt == PPTOK_IDENT) printf(" IDENT '%s'", string_content(m->val.tok.tokv.str)); + if (m->val.tok.tokt == PPTOK_NUM ) printf(" NUM %s", string_content(m->val.tok.tokv.str)); + if (m->val.tok.tokt == PPTOK_SYM) printf(" SYM %s", sym2str[m->val.tok.tokv.sym]); + return; + + case MTOK_ARG: + printf("argument %u", m->val.argid); + return; + + case MTOK_CONCAT: + printf("concat {"); + macro_tok_print(m->val.concat.l); + printf("} {"); + macro_tok_print(m->val.concat.r); + printf("}"); + return; + + case MTOK_STRINGIFY: + printf("string argument %u", m->val.argid); + return; + } +} + +VECTOR_DECLARE_STATIC(mtoken, mtoken_t*) +#define mtoken_ptr_del(m) mtoken_del(*(m)) +VECTOR_IMPL_STATIC(mtoken, mtoken_ptr_del) +#undef mtoken_ptr_del + +typedef struct macro_s { + int is_funlike; + int has_varargs; + unsigned nargs; + VECTOR(mtoken) *toks; +} macro_t; + +KHASH_MAP_INIT_STR(macros_map, macro_t) +KHASH_SET_INIT_STR(string_set) +static void macro_del(macro_t *m) { + vector_del(mtoken, m->toks); +} +static void macros_map_del(khash_t(macros_map) *args) { + kh_cstr_t str; + macro_t *it; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" + kh_foreach_key_value_ref(args, str, it, free((void*)str); macro_del(it)) +#pragma GCC diagnostic pop + kh_destroy(macros_map, args); +} +static void macros_set_del(khash_t(string_set) *strset) { + kh_cstr_t str; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" + kh_foreach_key(strset, str, free((void*)str)) +#pragma GCC diagnostic pop + kh_destroy(string_set, strset); +} + +typedef struct ppsource_s { + enum ppsrc_e { + PPSRC_PREPARE = 0, + PPSRC_PPTOKEN, + PPSRC_PPTOKENS, // Currently, only pushed after macro expansion when the expansion is not empty + PPSRC_PTOKEN, + } srct; + union { + struct { + prepare_t *st; + char *old_dirname; + char *old_filename; + _Bool was_sys; + size_t old_pathno; + // Note: char is used for the depths, which gives a max depth of 256 #ifs before the program silently bugs + unsigned char entered_next_ok_cond; + unsigned char ok_depth, cond_depth; + } prep; + preproc_token_t pptok; + struct { + VECTOR(preproc) *toks; // Cannot contain a #if, #else, ... statement, they *must* come from a prepare_t + size_t idx; + } pptoks; + proc_token_t ptok; // Added by proc_unget_token + } srcv; +} ppsource_t; +static void ppsource_del(ppsource_t *src) { + switch (src->srct) { + case PPSRC_PREPARE: + // st may be NULL if we failed to create the prepare_t* in preproc_new_file() + if (src->srcv.prep.st) prepare_del(src->srcv.prep.st); + if (src->srcv.prep.old_dirname) free(src->srcv.prep.old_dirname); + if (src->srcv.prep.old_filename) free(src->srcv.prep.old_filename); + return; + + case PPSRC_PPTOKEN: + preproc_token_del(&src->srcv.pptok); + return; + + case PPSRC_PPTOKENS: + // Do not delete the tokens that escaped, only the remaining tokens and the vector + vector_del_free_from(preproc, src->srcv.pptoks.toks, src->srcv.pptoks.idx); + return; + + case PPSRC_PTOKEN: + proc_token_del(&src->srcv.ptok); + return; + } +} +#define PREPARE_NEW_FILE(f, fn, old_fn, old_dn, was_sys_, old_no) (ppsource_t){ .srct = PPSRC_PREPARE, \ + .srcv.prep = { .st = prepare_new_file((f), (fn)), .old_dirname = (old_dn), .old_filename = (old_fn), .was_sys = was_sys_, \ + .old_pathno = old_no, .entered_next_ok_cond = 0, .ok_depth = 0, .cond_depth = 0 } } +VECTOR_DECLARE_STATIC(ppsource, ppsource_t) +VECTOR_IMPL_STATIC(ppsource, ppsource_del) + +struct preproc_s { + machine_t *target; + VECTOR(ppsource) *prep; + VECTOR(ccharp) *pragma_once; + enum preproc_state_e { + PPST_NONE, + PPST_NL, + PPST_PRAGMA_EXPLICIT, + } st; + khash_t(macros_map) *macros_map; + khash_t(string_set) *macros_defined, *macros_used; + char *dirname; + char *cur_file; + _Bool is_sys; + size_t cur_pathno; +}; + +void preproc_del(preproc_t *src) { + vector_del(ppsource, src->prep); + macros_set_del(src->macros_used); + macros_set_del(src->macros_defined); + macros_map_del(src->macros_map); + if (src->dirname) free(src->dirname); + if (src->cur_file) free(src->cur_file); + vector_del(ccharp, src->pragma_once); + free(src); +} + +static preproc_token_t ppsrc_next_token(preproc_t *src) { + switch (vector_last(ppsource, src->prep).srct) { + case PPSRC_PREPARE: + return pre_next_token(vector_last(ppsource, src->prep).srcv.prep.st, 0); + + case PPSRC_PPTOKEN: { + preproc_token_t ret = vector_last(ppsource, src->prep).srcv.pptok; + vector_pop_nodel(ppsource, src->prep); + return ret; } + + case PPSRC_PPTOKENS: { + ppsource_t *tmp = &vector_last(ppsource, src->prep); + preproc_token_t ret = vector_content(preproc, tmp->srcv.pptoks.toks)[tmp->srcv.pptoks.idx++]; + if (tmp->srcv.pptoks.idx >= vector_size(preproc, tmp->srcv.pptoks.toks)) { + vector_del_freed(preproc, tmp->srcv.pptoks.toks); + vector_pop_nodel(ppsource, src->prep); + } + return ret; } + + case PPSRC_PTOKEN: + default: + return (preproc_token_t){ .tokt = PPTOK_INVALID, .tokv.c = 0 }; + } +} + +static int try_open_dir(preproc_t *src, string_t *filename) { + size_t fnlen = string_len(filename); + size_t incl_len = src->dirname ? strlen(src->dirname) : 1; + char *fn = malloc(incl_len + fnlen + 2); + if (!fn) return 0; + if (src->dirname) { + memcpy(fn, src->dirname, incl_len); + fn[incl_len] = '/'; + } else { + fn[0] = '.'; + fn[1] = '/'; + } + strcpy(fn + incl_len + 1, string_content(filename)); + FILE *f = fopen(fn, "r"); +#ifdef LOG_OPEN + printf("Trying %s: %p\n", fn, f); +#endif + int ret; + if (f) { + char *new_dirname = strchr(fn, '/') ? strndup(fn, (size_t)(strrchr(fn, '/') - fn)) : NULL; + ret = vector_push(ppsource, src->prep, PREPARE_NEW_FILE(f, fn, src->cur_file, src->dirname, src->is_sys, src->cur_pathno)); + if (ret) { + src->is_sys = 0; + src->cur_file = fn; + src->dirname = new_dirname; + src->cur_pathno = 0; + } + } else { + free(fn); + ret = 0; + } + return ret; +} +static int try_open_sys(preproc_t *src, string_t *filename, size_t array_off) { + size_t fnlen = string_len(filename); + for (; array_off < src->target->npaths; ++array_off) { + size_t incl_len = strlen(src->target->include_path[array_off]); + char *fn = malloc(incl_len + fnlen + 2); + if (!fn) return 0; + memcpy(fn, src->target->include_path[array_off], incl_len); + fn[incl_len] = '/'; + strcpy(fn + incl_len + 1, string_content(filename)); + FILE *f = fopen(fn, "r"); +#ifdef LOG_OPEN + printf("Trying %s: %p\n", fn, f); +#endif + if (f) { + char *new_dirname = strchr(fn, '/') ? strndup(fn, (size_t)(strrchr(fn, '/') - fn)) : NULL; + int ret = vector_push(ppsource, src->prep, PREPARE_NEW_FILE(f, fn, src->cur_file, src->dirname, src->is_sys, src->cur_pathno)); + if (ret) { + src->is_sys = 1; + src->cur_file = fn; + src->dirname = new_dirname; + src->cur_pathno = array_off + 1; + } + return ret; + } + free(fn); + } + return 0; +} + +preproc_t *preproc_new_file(machine_t *target, FILE *f, char *dirname, const char *filename) { + preproc_t *ret = malloc(sizeof *ret); + if (!ret) { + fclose(f); + return NULL; + } + ret->target = target; + ret->macros_map = kh_init(macros_map); + if (!ret->macros_map) { + fclose(f); + free(ret); + return NULL; + } + ret->macros_defined = kh_init(string_set); + if (!ret->macros_defined) { + kh_destroy(macros_map, ret->macros_map); + fclose(f); + free(ret); + return NULL; + } + ret->macros_used = kh_init(string_set); + if (!ret->macros_used) { + kh_destroy(macros_map, ret->macros_map); + kh_destroy(string_set, ret->macros_defined); + fclose(f); + free(ret); + return NULL; + } + ret->prep = vector_new_cap(ppsource, 1); + if (!ret->prep) { + kh_destroy(macros_map, ret->macros_map); + kh_destroy(string_set, ret->macros_defined); + kh_destroy(string_set, ret->macros_used); + fclose(f); + free(ret); + return NULL; + } + ret->pragma_once = vector_new(ccharp); + if (!ret->pragma_once) { + vector_del(ppsource, ret->prep); + kh_destroy(macros_map, ret->macros_map); + kh_destroy(string_set, ret->macros_defined); + kh_destroy(string_set, ret->macros_used); + fclose(f); + free(ret); + return NULL; + } + ret->dirname = NULL; + ret->cur_file = NULL; + // ret can now be deleted by preproc_del + + // Include the first file + if (!vector_push(ppsource, ret->prep, PREPARE_NEW_FILE(f, filename, NULL, NULL, 0, 0))) { + preproc_del(ret); + return NULL; + } + if (!vector_last(ppsource, ret->prep).srcv.prep.st) { + preproc_del(ret); + return NULL; + } + // Next finish setting up ret + ret->st = PPST_NL; + ret->is_sys = 0; + ret->dirname = dirname; + ret->cur_file = strdup(filename); + ret->cur_pathno = 0; + + // Also include 'stdc-predef.h' (it will be parsed before the requested file) + string_t *stdc_predef = string_new_cstr("stdc-predef.h"); + if (!stdc_predef) { + log_memory("failed to create new string 'stdc-predef.h'\n"); + preproc_del(ret); + return NULL; + } + if (!try_open_sys(ret, stdc_predef, 0)) { + log_error_nopos("failed to open file 'stdc-predef.h'\n"); + string_del(stdc_predef); + preproc_del(ret); + return NULL; + } + string_del(stdc_predef); + + return ret; +} + +static void preprocs_del(VECTOR(preproc) **p) { + if (!*p) return; + vector_del(preproc, *p); +} +VECTOR_DECLARE_STATIC(preprocs, VECTOR(preproc)*) +VECTOR_IMPL_STATIC(preprocs, preprocs_del) + +static VECTOR(preproc) *preproc_do_expand(loginfo_t *li, const khash_t(macros_map) *macros, const VECTOR(preproc) *toks, + khash_t(string_set) *solved_macros, khash_t(string_set) *opt_used_macros); + // Does not take any ownership, returns a vector with independent ownerships + // opt_used_macros is NULL in regular expansion, non-NULL in #if-expansions +static VECTOR(preproc) *preproc_solve_macro(loginfo_t *li, + const khash_t(macros_map) *macros, char *mname, const macro_t *m, VECTOR(preprocs) *margs, + khash_t(string_set) *solved_macros, khash_t(string_set) *opt_used_macros); + // Moves mname to solved_macros or frees mname, returns a vector with independent ownerships + // margs may be NULL if m->is_funlike is false + // May change margs if m->has_varargs, but takes no ownership + // opt_used_macros is NULL in regular expansion, non-NULL in #if-expansions + +static VECTOR(preproc) *preproc_solve_macro(loginfo_t *li, + const khash_t(macros_map) *macros, char *mname, const macro_t *m, VECTOR(preprocs) *margs, + khash_t(string_set) *solved_macros, khash_t(string_set) *opt_used_macros) { +#define LOG_MEMORY(fmt, ...) log_memory(fmt " while expanding %s\n" __VA_ARGS__, mname) + if (m->is_funlike && !margs) { + log_internal(li, "m->is_funlike && !margs in preproc_solve_macro(... %s ...)\n", mname); + free(mname); + return NULL; + } + if (m->is_funlike + && (m->nargs != vector_size(preprocs, margs)) // General case + && (!m->has_varargs || (m->nargs > vector_size(preprocs, margs))) // Variadics + && (m->nargs || ((vector_size(preprocs, margs) == 1) && (vector_size(preproc, vector_last(preprocs, margs)) == 0)))) { // Zero argument + log_error(li, "invalid argument count for macro %s\n", mname); + free(mname); + return NULL; + } + if (m->has_varargs) { + // Change margs to have the correct __VA_ARGS__ (argument m->nargs) + if (m->nargs == vector_size(preprocs, margs)) { + // No varargs, so add an empty one + VECTOR(preproc) *marg = vector_new(preproc); + if (!marg) { + LOG_MEMORY("failed to create __VA_ARGS__"); + free(mname); + return NULL; + } + if (!vector_push(preprocs, margs, marg)) { + LOG_MEMORY("failed to add __VA_ARGS__"); + vector_del(preproc, marg); + free(mname); + return NULL; + } + } else if (m->nargs < vector_size(preprocs, margs) - 1) { + // Too many arguments, merge them with commas + VECTOR(preproc) *mvarg = vector_content(preprocs, margs)[m->nargs]; + size_t size0 = vector_size(preproc, mvarg); + vector_for_from(preprocs, it, margs, m->nargs + 1) { + if (!vector_push(preproc, mvarg, ((preproc_token_t){.tokt = PPTOK_SYM, .tokv.sym = SYM_COMMA}))) { + LOG_MEMORY("failed to add comma to __VA_ARGS__"); + vector_pop_nodel_slice(preproc, mvarg, vector_size(preproc, mvarg) - size0); + free(mname); + return NULL; + } + if (!vector_push_vec(preproc, mvarg, *it)) { + LOG_MEMORY("failed to add extra argument to __VA_ARGS__"); + vector_pop_nodel_slice(preproc, mvarg, vector_size(preproc, mvarg) - size0); + free(mname); + return NULL; + } + } + } + } + // Avoid 0-allocations + VECTOR(preproc) **margs2 = calloc(margs ? (vector_size(preprocs, margs) ? vector_size(preprocs, margs) : 1) : 1, sizeof *margs2); + if (!margs2) { + LOG_MEMORY("failed to allocate expanded arguments array"); + free(mname); + return NULL; + } + VECTOR(preproc) *ret = vector_new(preproc); + if (!ret) { + LOG_MEMORY("failed to allocate return vector"); + free(margs2); + free(mname); + return NULL; + } + + VECTOR(mtoken) *st = vector_new_cap(mtoken, vector_size(mtoken, m->toks)); + if (!st) { + LOG_MEMORY("failed to allocate auxiliary vector"); + vector_del(preproc, ret); + free(margs2); + free(mname); + return NULL; + } + vector_for_rev(mtoken, mtok, m->toks) { + vector_push(mtoken, st, *mtok); + } + int need_concat = 0, concat_cur = 0; + while (vector_size(mtoken, st)) { + mtoken_t *mtok = vector_last(mtoken, st); + switch (mtok->typ) { + case MTOK_CONCAT: { + vector_last(mtoken, st) = mtok->val.concat.r; + if (!vector_push(mtoken, st, mtok->val.concat.l)) { + LOG_MEMORY("failed to add concatenation left m-token"); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + ++need_concat; + break; } + + case MTOK_TOKEN: { + int do_add = 1; + if (concat_cur == 2) { + preproc_token_t *tok1 = &vector_last(preproc, ret); // Guaranteed to exist + preproc_token_t *tok2 = &mtok->val.tok; +#define ISIDENT(tt) (((tt) == PPTOK_IDENT) || ((tt) == PPTOK_IDENT_UNEXP)) +#define FIND(s, c) strchr(string_content((s)), (c)) +#define ONLYDIGS(s) (!FIND((s), '.') && !FIND((s), '+') && !FIND((s), '-')) + if (ISIDENT(tok1->tokt) && (ISIDENT(tok2->tokt) || ((tok2->tokt == PPTOK_NUM) && ONLYDIGS(tok2->tokv.str)))) { + do_add = 0; + tok1->tokt = PPTOK_IDENT; + if (!string_add_string(tok1->tokv.str, tok2->tokv.str)) { + LOG_MEMORY("failed to concatenate identifiers"); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + } else if ((tok1->tokt == PPTOK_NUM) && (ISIDENT(tok2->tokt) || (tok2->tokt == PPTOK_NUM))) { + do_add = 0; + if (!string_add_string(tok1->tokv.str, tok2->tokv.str)) { + LOG_MEMORY("failed to concatenate identifiers"); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + } else { + log_warning(li, "unsupported concatenation between token type %u and %u while expanding %s\n", tok1->tokt, tok2->tokt, mname); + } +#undef ISIDENT +#undef FIND +#undef ONLYDIGS + } + if (do_add) { + preproc_token_t *tok1 = &mtok->val.tok; + if (tok1->tokt != PPTOK_NEWLINE) { + preproc_token_t tok2; + switch (tok1->tokt) { + case PPTOK_INVALID: + case PPTOK_NEWLINE: + case PPTOK_BLANK: + case PPTOK_START_LINE_COMMENT: + case PPTOK_EOF: tok2 = (preproc_token_t){.tokt = tok1->tokt, .loginfo = *li, .tokv.c = tok1->tokv.c}; break; + case PPTOK_SYM: tok2 = (preproc_token_t){.tokt = tok1->tokt, .loginfo = *li, .tokv.sym = tok1->tokv.sym}; break; + case PPTOK_IDENT: + case PPTOK_IDENT_UNEXP: + case PPTOK_NUM: { + string_t *dup = string_dup(tok1->tokv.str); + if (!dup) { + LOG_MEMORY("failed to duplicate string"); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + tok2 = (preproc_token_t){.tokt = tok1->tokt, .loginfo = *li, .tokv.str = dup}; + break; } + case PPTOK_INCL: + case PPTOK_STRING: { + string_t *dup = string_dup(tok1->tokv.sstr); + if (!dup) { + LOG_MEMORY("failed to duplicate string"); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + tok2 = (preproc_token_t){.tokt = tok1->tokt, .loginfo = *li, .tokv.sstr = dup, .tokv.sisstr = tok1->tokv.sisstr}; + break; } + } + if (!vector_push(preproc, ret, tok2)) { + LOG_MEMORY("failed to add token to output vector"); + preproc_token_del(&tok2); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + } + } + vector_pop_nodel(mtoken, st); + if (need_concat) { + concat_cur = 2; + --need_concat; + } else concat_cur = 0; + break; } + + case MTOK_ARG: { + VECTOR(preproc) *toks_to_add; + if (!need_concat && !concat_cur) { + if (!margs2[mtok->val.argid]) { + margs2[mtok->val.argid] = preproc_do_expand(li, macros, vector_content(preprocs, margs)[mtok->val.argid], solved_macros, opt_used_macros); + if (!margs2[mtok->val.argid]) { + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + } + toks_to_add = margs2[mtok->val.argid]; + } else { + toks_to_add = vector_content(preprocs, margs)[mtok->val.argid]; + } + size_t tta_start = 0, len = vector_size(preproc, toks_to_add); + if (len && (concat_cur == 2)) { + preproc_token_t *tok1 = &vector_last(preproc, ret); // Guaranteed to exist + preproc_token_t *tok2 = vector_begin(preproc, toks_to_add); +#define ISIDENT(tt) (((tt) == PPTOK_IDENT) || ((tt) == PPTOK_IDENT_UNEXP)) +#define FIND(s, c) strchr(string_content((s)), (c)) +#define ONLYDIGS(s) (!FIND((s), '.') && !FIND((s), '+') && !FIND((s), '-')) + if (ISIDENT(tok1->tokt) && (ISIDENT(tok2->tokt) || ((tok2->tokt == PPTOK_NUM) && ONLYDIGS(tok2->tokv.str)))) { + tta_start = 1; --len; + tok1->tokt = PPTOK_IDENT; + if (!string_add_string(tok1->tokv.str, tok2->tokv.str)) { + LOG_MEMORY("failed to concatenate identifiers"); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + } else if ((tok1->tokt == PPTOK_NUM) && (ISIDENT(tok2->tokt) || (tok2->tokt == PPTOK_NUM))) { + tta_start = 1; --len; + if (!string_add_string(tok1->tokv.str, tok2->tokv.str)) { + LOG_MEMORY("failed to concatenate identifiers"); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + } else { + log_warning(li, "unsupported concatenation between token type %u and %u while expanding %s\n", tok1->tokt, tok2->tokt, mname); + } +#undef ISIDENT +#undef FIND +#undef ONLYDIGS + } + if (len) { + preproc_token_t tok2; + for (preproc_token_t *tok1 = vector_begin(preproc, toks_to_add) + tta_start; tok1 != vector_end(preproc, toks_to_add); ++tok1) { + if (tok1->tokt == PPTOK_NEWLINE) continue; + switch (tok1->tokt) { + case PPTOK_INVALID: + case PPTOK_NEWLINE: + case PPTOK_BLANK: + case PPTOK_START_LINE_COMMENT: + case PPTOK_EOF: tok2 = (preproc_token_t){.tokt = tok1->tokt, .loginfo = *li, .tokv.c = tok1->tokv.c}; break; + case PPTOK_SYM: tok2 = (preproc_token_t){.tokt = tok1->tokt, .loginfo = *li, .tokv.sym = tok1->tokv.sym}; break; + case PPTOK_IDENT: + case PPTOK_IDENT_UNEXP: + case PPTOK_NUM: { + string_t *dup = string_dup(tok1->tokv.str); + if (!dup) { + LOG_MEMORY("failed to duplicate string"); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + tok2 = (preproc_token_t){.tokt = tok1->tokt, .loginfo = *li, .tokv.str = dup}; + break; } + case PPTOK_INCL: + case PPTOK_STRING: { + string_t *dup = string_dup(tok1->tokv.sstr); + if (!dup) { + LOG_MEMORY("failed to duplicate string"); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + tok2 = (preproc_token_t){.tokt = tok1->tokt, .loginfo = *li, .tokv.sstr = dup, .tokv.sisstr = tok1->tokv.sisstr}; + break; } + } + if (!vector_push(preproc, ret, tok2)) { + LOG_MEMORY("failed to add token to output vector"); + preproc_token_del(&tok2); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + } + } + vector_pop_nodel(mtoken, st); + if (need_concat) { + concat_cur = (vector_size(preproc, toks_to_add) || (concat_cur == 2)) ? 2 : 1; + --need_concat; + } else concat_cur = 0; + break; } + + case MTOK_STRINGIFY: + if (concat_cur == 2) { + log_warning(li, "invalid concatenation with string while expanding %s\n", mname); + } + // TODO: better stringifier + preproc_token_t tok2; + { + string_t *dup = string_new_cap(15); + if (!dup) { + LOG_MEMORY("failed to allocate stringify string"); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + string_add_char(dup, '<'); + string_add_char(dup, 'S'); + string_add_char(dup, 't'); + string_add_char(dup, 'r'); + string_add_char(dup, 'i'); + string_add_char(dup, 'n'); + string_add_char(dup, 'g'); + string_add_char(dup, 'i'); + string_add_char(dup, 'f'); + string_add_char(dup, 'y'); + string_add_char(dup, ' '); + string_add_char(dup, 'a'); + string_add_char(dup, 'r'); + string_add_char(dup, 'g'); + string_add_char(dup, '>'); + tok2 = (preproc_token_t){.tokt = PPTOK_STRING, .loginfo = *li, .tokv.sstr = dup, .tokv.sisstr = 1}; + } + if (!vector_push(preproc, ret, tok2)) { + LOG_MEMORY("failed to add token to output vector"); + preproc_token_del(&tok2); + vector_del(preproc, ret); + ret = NULL; + goto solve_done; + } + vector_pop_nodel(mtoken, st); + if (need_concat) { + concat_cur = 2; + --need_concat; + } else concat_cur = 0; + break; + } + } + +solve_done: + // Don't call the destructors + vector_del_freed(mtoken, st); + if (margs) { + for (size_t i = 0; i < vector_size(preprocs, margs); ++i) { + if (margs2[i]) vector_del(preproc, margs2[i]); + } + } + free(margs2); + + if (ret) { + // Success, now expand the result + // First add mname to the set of expanded macros + int iret; + kh_put(string_set, solved_macros, mname, &iret); + if (iret < 0) { + LOG_MEMORY("failed to add current macro to the set of expanded macros"); + vector_del(preproc, ret); + free(mname); + return NULL; + } + + // Next expand every remaining macros + vector_trim(preproc, ret); + VECTOR(preproc) *ret2 = preproc_do_expand(li, macros, ret, solved_macros, opt_used_macros); + vector_del(preproc, ret); + ret = ret2; + if (!ret) return NULL; // There was an error, abort + + // Finally pop mname (in case we are expanding an argument) + khiter_t it = kh_get(string_set, solved_macros, mname); + if (it == kh_end(solved_macros)) { + log_internal(li, "failed to find current macro in the set of expanded macros while expanding %s\n" , mname); + vector_del(preproc, ret); + return NULL; + } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" + free((void*)kh_key(solved_macros, it)); +#pragma GCC diagnostic pop + kh_del(string_set, solved_macros, it); + } +#undef LOG_MEMORY + + return ret; +} +static VECTOR(preproc) *preproc_do_expand(loginfo_t *li, const khash_t(macros_map) *macros, const VECTOR(preproc) *toks, + khash_t(string_set) *solved_macros, khash_t(string_set) *opt_used_macros) { + VECTOR(preproc) *toks2 = vector_new_cap(preproc, vector_size(preproc, toks)); + if (!toks2) { + log_memory("failed to allocate full macro expansion auxiliary vector\n"); + return NULL; + } + vector_for(preproc, tok, toks) { + if (tok->tokt == PPTOK_NEWLINE) continue; + preproc_token_t tok2; + switch (tok->tokt) { + case PPTOK_INVALID: + case PPTOK_NEWLINE: + case PPTOK_BLANK: + case PPTOK_START_LINE_COMMENT: + case PPTOK_EOF: tok2 = (preproc_token_t){.tokt = tok->tokt, .loginfo = tok->loginfo, .tokv.c = tok->tokv.c}; break; + case PPTOK_SYM: tok2 = (preproc_token_t){.tokt = tok->tokt, .loginfo = tok->loginfo, .tokv.sym = tok->tokv.sym}; break; + case PPTOK_IDENT: + case PPTOK_IDENT_UNEXP: + case PPTOK_NUM: { + string_t *dup = string_dup(tok->tokv.str); + if (!dup) { + log_memory("failed to duplicate string during full macro expansion\n"); + vector_del(preproc, toks2); + return NULL; + } + tok2 = (preproc_token_t){.tokt = tok->tokt, .loginfo = tok->loginfo, .tokv.str = dup}; + break; } + case PPTOK_INCL: + case PPTOK_STRING: { + string_t *dup = string_dup(tok->tokv.sstr); + if (!dup) { + log_memory("failed to duplicate string during full macro expansion\n"); + vector_del(preproc, toks2); + return NULL; + } + tok2 = (preproc_token_t){.tokt = tok->tokt, .loginfo = tok->loginfo, .tokv.sstr = dup, .tokv.sisstr = tok->tokv.sisstr}; + break; } + } + vector_push(preproc, toks2, tok2); // cap > size, thus this always succeed + } + + VECTOR(preproc) *ret = vector_new_cap(preproc, vector_size(preproc, toks)); + if (!ret) { + log_memory("failed to allocate full macro expansion result vector\n"); + return NULL; + } + vector_for(preproc, tok, toks2) { + switch (tok->tokt) { + case PPTOK_IDENT: { + if (opt_used_macros && !strcmp(string_content(tok->tokv.str), "defined") && (vector_end(preproc, toks2) - tok >= 2)) { + // We need to support "defined ident" and "defined(ident)" + string_t *mname = NULL; + preproc_token_t *tok2; + // tok2 is the last used token, mname is the ident string + if ((tok[1].tokt == PPTOK_SYM) && (tok[1].tokv.sym == SYM_LPAREN)) { + if ((vector_end(preproc, toks2) - tok >= 4) && (tok[3].tokt == PPTOK_SYM) && (tok[3].tokv.sym == SYM_RPAREN)) { + if ((tok[2].tokt == PPTOK_IDENT) || (tok[2].tokt == PPTOK_IDENT_UNEXP)) { + tok2 = tok + 3; + mname = tok[2].tokv.str; + } + } + } else if ((tok[1].tokt == PPTOK_IDENT) || (tok[1].tokt == PPTOK_IDENT_UNEXP)) { + tok2 = tok + 1; + mname = tok[1].tokv.str; + } + if (mname) { + // Add the ident to the used_macros + int iret; + char *mname2 = strdup(string_content(mname)); + if (!mname2) { + // Abort + log_memory("failed to add %s to the list of used macros (strdup returned NULL)\n", string_content(mname)); + goto expand_done; + } + kh_put(string_set, opt_used_macros, mname2, &iret); + if (iret < 0) { + // Abort + free(mname2); + log_memory("failed to add %s to the list of used macros (kh_put ireturned %d)\n", string_content(mname), iret); + goto expand_done; + } else if (iret == 0) { + // Just free mname2, it was already present + free(mname2); + } + + // Value is either 0 or 1 as a PPTOK_NUM, so we need a string with capacity 1 + string_t *num_str = string_new_cap(1); + if (!num_str) { + // Abort + log_memory("failed to create defined() output\n"); + goto expand_done; + } + khiter_t it = kh_get(macros_map, macros, string_content(mname)); + string_add_char(num_str, (it == kh_end(macros)) ? '0' : '1'); + if (!vector_push(preproc, ret, ((preproc_token_t){.tokt = PPTOK_NUM, .loginfo = *li, .tokv.str = num_str}))) { + log_memory("failed to add defined() result to the output\n"); + string_del(num_str); + goto expand_done; + } + + // Done + string_del(tok->tokv.str); + string_del(mname); + tok = tok2; + break; + } + // If mname == NULL, we simply ignore it and check if there is a macro called 'defined' + } + khiter_t it = kh_get(string_set, solved_macros, string_content(tok->tokv.str)); + if (it != kh_end(solved_macros)) { + tok->tokt = PPTOK_IDENT_UNEXP; + } else { + it = kh_get(macros_map, macros, string_content(tok->tokv.str)); + if (it != kh_end(macros)) { + macro_t *m = &kh_val(macros, it); + if (m->is_funlike) { + preproc_token_t *tok2 = tok + 1; + if ((tok2 < vector_end(preproc, toks2)) && (tok2->tokt == PPTOK_SYM) && (tok2->tokv.sym == SYM_LPAREN)) { + unsigned depth = 1; + VECTOR(preprocs) *margs = vector_new(preprocs); + if (!margs) { + log_memory("failed to allocate macro arguments for macro %s during full macro expansion\n", string_content(tok->tokv.str)); + if (margs) vector_del(preprocs, margs); + goto expand_done; + } + VECTOR(preproc) *marg = vector_new(preproc); + if (!marg) goto gather_args_err_mem; + + while (depth && (tok2 < vector_end(preproc, toks2) - 1) && (tok2->tokt != PPTOK_EOF) && (tok2->tokt != PPTOK_INVALID)) { + ++tok2; + if ((depth == 1) && (tok2->tokt == PPTOK_SYM) && (tok2->tokv.sym == SYM_COMMA)) { + // Possible optimization: emplace NULL if vector_size(marg) == 0 + // This would avoid allocating a new vector, but needs support in preproc_solve_macro + vector_trim(preproc, marg); + if (!vector_push(preprocs, margs, marg)) goto gather_args_err_mem; + marg = vector_new(preproc); + if (!marg) goto gather_args_err_mem; + } else { + if (!vector_push(preproc, marg, *tok2)) goto gather_args_err_mem; + } + if ((tok2->tokt == PPTOK_SYM) && (tok2->tokv.sym == SYM_LPAREN)) ++depth; + else if ((tok2->tokt == PPTOK_SYM) && (tok2->tokv.sym == SYM_RPAREN)) --depth; + } + if (depth) { + // This may be OK ("Unfinished fun-like macro %s\n", string_content(tok->tokv.str)); + vector_del(preprocs, margs); + vector_del(preproc, marg); + goto abort_macro; + } + // margs finishes with a SYM_RPAREN token + vector_pop(preproc, marg); + vector_trim(preproc, marg); + if (!vector_push(preprocs, margs, marg)) goto gather_args_err_mem; + marg = NULL; + + if (0) { + gather_args_err_mem: + log_memory("failed to gather macro arguments for macro %s during full macro expansion\n", string_content(tok->tokv.str)); + if (marg) vector_del(preproc, marg); + vector_del(preprocs, margs); + goto expand_done; + } + + // OK, now expand the macro + char *mname = string_steal(tok->tokv.str); + tok = tok2; + + VECTOR(preproc) *expanded = preproc_solve_macro(li, macros, mname, m, margs, solved_macros, opt_used_macros); + vector_del(preprocs, margs); + if (!expanded) { + // Error expanding the macro + goto expand_done; + } + if (!vector_push_vec(preproc, ret, expanded)) { + log_memory("pushing expanded macro to full macro expansion\n"); + vector_del(preproc, expanded); + goto expand_done; + } + vector_del_freed(preproc, expanded); + // Done + break; + } + } else { + VECTOR(preproc) *expanded = preproc_solve_macro(li, macros, string_steal(tok->tokv.str), m, NULL, solved_macros, opt_used_macros); + if (!expanded) { + ++tok; // Current token is already freed (string stolen) + goto expand_done; + } + if (!vector_push_vec(preproc, ret, expanded)) { + log_memory("failed to add macro expansion in output vector of full macro expansion\n"); + ++tok; // Current token is already freed (string stolen) + goto expand_done; + } + vector_del_freed(preproc, expanded); + break; + } + } + } + } + /* FALLTHROUGH */ + abort_macro: + case PPTOK_IDENT_UNEXP: + case PPTOK_INVALID: + case PPTOK_NUM: + case PPTOK_STRING: + case PPTOK_INCL: + case PPTOK_SYM: + case PPTOK_NEWLINE: + case PPTOK_BLANK: + case PPTOK_START_LINE_COMMENT: + case PPTOK_EOF: + if (!vector_push(preproc, ret, *tok)) { + log_memory("failed to add token to output vector during full macro expansion\n"); + goto expand_done; + } + break; + } + + if (0) { + expand_done: + vector_del_free_from(preproc, toks2, (size_t)(tok - vector_begin(preproc, toks2))); + vector_del(preproc, ret); + return NULL; + } + } + vector_del_freed(preproc, toks2); + + return ret; +} + +#define OPLVL_MUL 2 +#define OPLVL_DIV 2 +#define OPLVL_MOD 2 +#define OPLVL_ADD 3 +#define OPLVL_SUB 3 +#define OPLVL_LSL 4 +#define OPLVL_LSR 4 +#define OPLVL_LET 5 +#define OPLVL_LEE 5 +#define OPLVL_GRT 5 +#define OPLVL_GRE 5 +#define OPLVL_EQU 6 +#define OPLVL_NEQ 6 +#define OPLVL_AAN 7 // Bitwise (Arithmetic) +#define OPLVL_XOR 8 +#define OPLVL_AOR 9 // Bitwise (Arithmetic) +#define OPLVL_BAN 10 // Boolean +#define OPLVL_BOR 11 // Boolean +#define OPLVL_ALL 12 // Evaluate the entire stack +#define OPLVL_ALS 13 // Evaluate the entire stack, (don't update the states (ignored)) +#define OPTYP_MUL 1 +#define OPTYP_DIV 2 +#define OPTYP_MOD 3 +#define OPTYP_ADD 1 +#define OPTYP_SUB 2 +#define OPTYP_LSL 1 +#define OPTYP_LSR 2 +#define OPTYP_LET 1 +#define OPTYP_LEE 2 +#define OPTYP_GRT 3 +#define OPTYP_GRE 4 +#define OPTYP_EQU 1 +#define OPTYP_NEQ 2 +#define OPTYP_AAN 1 +#define OPTYP_XOR 1 +#define OPTYP_AOR 1 +#define OPTYP_BAN 1 +#define OPTYP_BOR 1 +typedef struct preproc_eval_aux_s { + struct { + unsigned st0 : 1; + unsigned st2 : 2; + unsigned st3 : 2; + unsigned st4 : 2; + unsigned st5 : 3; + unsigned st6 : 2; + unsigned st7 : 1; + unsigned st8 : 1; + unsigned st9 : 1; + unsigned st_bool : 1; + }; + int64_t v0; + unsigned st1; + const preproc_token_t *v1; + int64_t v2; loginfo_t li2; + int64_t v3; loginfo_t li3; + int64_t v4; loginfo_t li4; + int64_t v5; loginfo_t li5; + int64_t v6; loginfo_t li6; + int64_t v7; loginfo_t li7; + int64_t v8; loginfo_t li8; + int64_t v9; loginfo_t li9; + loginfo_t libool; + unsigned n_colons; // Number of ':' expected (needs to skip to the end), ie number of ternary where the truth-y branch is taken +} preproc_eval_aux_t; +VECTOR_DECLARE_STATIC(ppeaux, preproc_eval_aux_t) +VECTOR_IMPL_STATIC(ppeaux, (void)) +static int64_t eval_stack(preproc_eval_aux_t *st, loginfo_t li, int max_lv, int optype, _Bool is_unsigned, int *success) { + if (!li.lineno_end) { + li.lineno_end = li.lineno; + li.colno_end = li.colno; + } + + int64_t acc = st->v0; + st->st0 = 0; + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wduplicated-cond" // For the else if (st->stX) + if (st->st2 == OPTYP_MUL) { + acc = st->v2 * acc; + st->st2 = 0; + li.lineno = st->li2.lineno; + li.colno = st->li2.colno; + } else if (st->st2 == OPTYP_DIV) { + if (!acc) { + log_error(&li, "division by zero during #if evaluation\n"); + *success = 0; + return 0; + } + acc = st->v2 / acc; + st->st2 = 0; + li.lineno = st->li2.lineno; + li.colno = st->li2.colno; + } else if (st->st2 == OPTYP_MOD) { + if (!acc) { + log_error(&li, "division by zero during #if evaluation\n"); + *success = 0; + return 0; + } + acc = st->v2 % acc; + st->st2 = 0; + li.lineno = st->li2.lineno; + li.colno = st->li2.colno; + } else if (st->st2) { + log_internal(&st->li2, "unknown st2 %d during #if evaluation\n", st->st2); + *success = 0; + return 0; + } + if (max_lv == 2) { + st->st2 = optype; + st->v2 = acc; + st->li2 = li; + return acc; + } + if (st->st3 == OPTYP_ADD) { + acc = st->v3 + acc; + st->st3 = 0; + li.lineno = st->li3.lineno; + li.colno = st->li3.colno; + } else if (st->st3 == OPTYP_SUB) { + acc = st->v3 - acc; + st->st3 = 0; + li.lineno = st->li3.lineno; + li.colno = st->li3.colno; + } else if (st->st3) { + log_internal(&st->li3, "unknown st3 %d during #if evaluation\n", st->st3); + *success = 0; + return 0; + } + if (max_lv == 3) { + st->st3 = optype; + st->v3 = acc; + st->li3 = li; + return acc; + } + if (st->st4 == OPTYP_LSL) { + acc = st->v4 << acc; + st->st4 = 0; + li.lineno = st->li4.lineno; + li.colno = st->li4.colno; + } else if (st->st4 == OPTYP_LSR) { + acc = is_unsigned ? (int64_t)((uint64_t)st->v4 >> (uint64_t)acc) : (st->v4 >> acc); + st->st4 = 0; + li.lineno = st->li4.lineno; + li.colno = st->li4.colno; + } else if (st->st4) { + log_internal(&st->li4, "unknown st4 %d during #if evaluation\n", st->st4); + *success = 0; + return 0; + } + if (max_lv == 4) { + st->st4 = optype; + st->v4 = acc; + st->li4 = li; + return acc; + } + if (st->st5 == OPTYP_LET) { + acc = is_unsigned ? ((uint64_t)st->v5 < (uint64_t)acc) : (st->v5 < acc); + is_unsigned = 0; + st->st5 = 0; + li.lineno = st->li5.lineno; + li.colno = st->li5.colno; + } else if (st->st5 == OPTYP_LEE) { + acc = is_unsigned ? ((uint64_t)st->v5 <= (uint64_t)acc) : (st->v5 <= acc); + is_unsigned = 0; + st->st5 = 0; + li.lineno = st->li5.lineno; + li.colno = st->li5.colno; + } else if (st->st5 == OPTYP_GRT) { + acc = is_unsigned ? ((uint64_t)st->v5 > (uint64_t)acc) : (st->v5 > acc); + is_unsigned = 0; + st->st5 = 0; + li.lineno = st->li5.lineno; + li.colno = st->li5.colno; + } else if (st->st5 == OPTYP_GRE) { + acc = is_unsigned ? ((uint64_t)st->v5 >= (uint64_t)acc) : (st->v5 >= acc); + is_unsigned = 0; + st->st5 = 0; + li.lineno = st->li5.lineno; + li.colno = st->li5.colno; + } else if (st->st5) { + log_internal(&st->li5, "unknown st5 %d during #if evaluation\n", st->st5); + *success = 0; + return 0; + } + if (max_lv == 5) { + st->st5 = optype; + st->v5 = acc; + st->li5 = li; + return acc; + } + if (st->st6 == OPTYP_EQU) { + acc = st->v6 == acc; + st->st6 = 0; + li.lineno = st->li6.lineno; + li.colno = st->li6.colno; + } else if (st->st6 == OPTYP_NEQ) { + acc = st->v6 != acc; + st->st6 = 0; + li.lineno = st->li6.lineno; + li.colno = st->li6.colno; + } else if (st->st6) { + log_internal(&st->li6, "unknown st6 %d during #if evaluation\n", st->st6); + *success = 0; + return 0; + } + if (max_lv == 6) { + st->st6 = optype; + st->v6 = acc; + st->li6 = li; + return acc; + } + if (st->st7 == OPTYP_AAN) { + acc = st->v7 & acc; + st->st7 = 0; + li.lineno = st->li7.lineno; + li.colno = st->li7.colno; + } else if (st->st7) { + log_internal(&st->li7, "unknown st7 %d during #if evaluation\n", st->st7); + *success = 0; + return 0; + } + if (max_lv == 7) { + st->st7 = optype; + st->v7 = acc; + st->li7 = li; + return acc; + } + if (st->st8 == OPTYP_XOR) { + acc = st->v8 ^ acc; + st->st8 = 0; + li.lineno = st->li8.lineno; + li.colno = st->li8.colno; + } else if (st->st8) { + log_internal(&st->li8, "unknown st8 %d during #if evaluation\n", st->st8); + *success = 0; + return 0; + } + if (max_lv == 8) { + st->st8 = optype; + st->v8 = acc; + st->li8 = li; + return acc; + } + if (st->st9 == OPTYP_AOR) { + acc = st->v9 | acc; + st->st9 = 0; + li.lineno = st->li9.lineno; + li.colno = st->li9.colno; + } else if (st->st9) { + log_internal(&st->li9, "unknown st9 %d during #if evaluation\n", st->st9); + *success = 0; + return 0; + } + if (max_lv == 9) { + st->st9 = optype; + st->v9 = acc; + st->li9 = li; + return acc; + } + if (max_lv == 10) { // OPLVL == OPLVL_BAN, OPTYP == OPTYP_BAN + li.lineno = st->libool.lineno; + li.colno = st->libool.colno; + st->libool = li; + return acc; + } + if (max_lv == 11) { // OPLVL == OPLVL_BOR, OPTYP == OPTYP_BOR + li.lineno = st->libool.lineno; + li.colno = st->libool.colno; + st->libool = li; + return acc; + } + if (st->st_bool) { + acc = !!acc; + st->st_bool = 0; + } + if ((max_lv == OPLVL_ALL) || (max_lv == OPLVL_ALS)) { + return acc; + } +#pragma GCC diagnostic pop + log_internal(&li, "invalid max level %d in preprocessor partial expression evaluation\n", max_lv); + *success = 0; + return acc; +} +static int64_t preproc_eval(const VECTOR(preproc) *cond, int *aux_ret, int ptr_is_32bits) { + int success; + VECTOR(ppeaux) *stack = vector_new_cap(ppeaux, 1); + if (!stack) { + log_memory("failed to allocate #if evaluation stack vector\n"); + *aux_ret = 0; + return 0; + } + if (0) { + eval_fail: + vector_del(ppeaux, stack); + *aux_ret = 0; + return 0; + } + vector_push(ppeaux, stack, (preproc_eval_aux_t){0}); // vector_cap >= 1 + int64_t acc; loginfo_t li0; _Bool is_unsigned = 0; + vector_for(preproc, tok, cond) { + if (tok->tokt == PPTOK_NUM) { + // Evaluate token as an integer if st0 == 0, error otherwise + if (vector_last(ppeaux, stack).st0 == 0) { + num_constant_t cst; + if (!num_constant_convert(&tok->loginfo, tok->tokv.str, &cst, ptr_is_32bits)) { + goto eval_fail; + } + switch (cst.typ) { + case NCT_INT32: acc = cst.val.i32; break; + case NCT_UINT32: is_unsigned = 1; acc = cst.val.u32; break; + case NCT_INT64: acc = cst.val.i64; break; + case NCT_UINT64: is_unsigned = 1; acc = (int64_t)cst.val.u64; break; + case NCT_FLOAT: + case NCT_DOUBLE: + case NCT_LDOUBLE: + default: + log_error(&tok->loginfo, "number '%s' is not a valid integer (during #if evaluation)\n", string_content(tok->tokv.str)); + goto eval_fail; + } + li0 = tok->loginfo; + goto push_acc_to_st0; + } else { + log_error(&tok->loginfo, "unexpected number during #if evaluation\n"); + goto eval_fail; + } + } else if ((tok->tokt == PPTOK_IDENT) || (tok->tokt == PPTOK_IDENT_UNEXP)) { + // Evaluate token as 0 if st0 == 0, error otherwise + if (vector_last(ppeaux, stack).st0 == 0) { + acc = 0; + li0 = tok->loginfo; + goto push_acc_to_st0; + } else { + log_error(&tok->loginfo, "unexpected ident '%s' during #if evaluation\n", string_content(tok->tokv.str)); + goto eval_fail; + } + } else if (tok->tokt == PPTOK_SYM) { + int op_lvl; + int op_typ; + switch (tok->tokv.sym) { + case SYM_TILDE: + // Unary (st0 == 0) + if (vector_last(ppeaux, stack).st0 != 0) { + log_error(&tok->loginfo, "unexpected unary '~' in #if expression\n"); + goto eval_fail; + } + if (!(vector_last(ppeaux, stack).st1++)) { + // Also update v1, since this is the first level 1 operator + vector_last(ppeaux, stack).v1 = tok; + } + goto done_partial_eval; + case SYM_EXCL: + // Unary (st0 == 0) + if (vector_last(ppeaux, stack).st0 != 0) { + log_error(&tok->loginfo, "unexpected unary '!' in #if expression\n"); + goto eval_fail; + } + if (!(vector_last(ppeaux, stack).st1++)) { + // Also update v1, since this is the first level 1 operator + vector_last(ppeaux, stack).v1 = tok; + } + goto done_partial_eval; + case SYM_PLUS: + // May be unary (st0 == 0) or binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) { + // Unary, prepare lv1 then continue to the next token + if (!(vector_last(ppeaux, stack).st1++)) { + // Also update v1, since this is the first level 1 operator + vector_last(ppeaux, stack).v1 = tok; + } + goto done_partial_eval; + } else { + op_lvl = OPLVL_ADD; + op_typ = OPTYP_ADD; + goto add_binop; + } + case SYM_DASH: + // May be unary (st0 == 0) or binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) { + // Unary, prepare lv1 then continue to the next token + if (!(vector_last(ppeaux, stack).st1++)) { + // Also update v1, since this is the first level 1 operator + vector_last(ppeaux, stack).v1 = tok; + } + goto done_partial_eval; + } else { + op_lvl = OPLVL_SUB; + op_typ = OPTYP_SUB; + goto add_binop; + } + case SYM_STAR: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_MUL; + op_typ = OPTYP_MUL; + goto add_binop; + case SYM_SLASH: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_DIV; + op_typ = OPTYP_DIV; + goto add_binop; + case SYM_PERCENT: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_MOD; + op_typ = OPTYP_MOD; + goto add_binop; + case SYM_HAT: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_XOR; + op_typ = OPTYP_XOR; + goto add_binop; + case SYM_AMP: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_AAN; + op_typ = OPTYP_AAN; + goto add_binop; + case SYM_PIPE: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_AOR; + op_typ = OPTYP_AOR; + goto add_binop; + case SYM_EQEQ: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_EQU; + op_typ = OPTYP_EQU; + goto add_binop; + case SYM_EXCLEQ: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_NEQ; + op_typ = OPTYP_NEQ; + goto add_binop; + case SYM_LT: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_LET; + op_typ = OPTYP_LET; + goto add_binop; + case SYM_GT: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_GRT; + op_typ = OPTYP_GRT; + goto add_binop; + case SYM_LTEQ: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_LEE; + op_typ = OPTYP_LEE; + goto add_binop; + case SYM_GTEQ: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_GRE; + op_typ = OPTYP_GRE; + goto add_binop; + case SYM_AMPAMP: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_BAN; + op_typ = OPTYP_BAN; + goto add_binop; + case SYM_PIPEPIPE: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_BOR; + op_typ = OPTYP_BOR; + goto add_binop; + case SYM_LTLT: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_LSL; + op_typ = OPTYP_LSL; + goto add_binop; + case SYM_GTGT: + // Binary (st0 != 0) + if (vector_last(ppeaux, stack).st0 == 0) goto invalid_binop; + op_lvl = OPLVL_LSR; + op_typ = OPTYP_LSR; + goto add_binop; + + case SYM_LPAREN: + // May be placed anywhere a constant is expected (st0 == 0) and simply pushes a new stack + if (vector_last(ppeaux, stack).st0 != 0) { + log_error(&tok->loginfo, "unexpected opening parenthesis in #if expression\n"); + goto eval_fail; + } + if (!vector_push(ppeaux, stack, (preproc_eval_aux_t){0})) { + log_memory("failed to push a new stack during #if evaluation\n"); + goto eval_fail; + } + goto done_partial_eval; + case SYM_RPAREN: + // May be placed anywhere after a constant (st0 != 0) + if (vector_size(ppeaux, stack) == 1) { + log_error(&tok->loginfo, "unexpected symbol ')' (parenthesis not opened) during #if evaluation\n"); + goto eval_fail; + } + if (vector_last(ppeaux, stack).n_colons) { + log_error(&tok->loginfo, "unexpected symbol ')', expected symbol ':' during #if evaluation\n"); + goto eval_fail; + } + if (!vector_last(ppeaux, stack).st0) { + log_error(&tok->loginfo, "unexpected symbol ')' during #if evaluation\n"); + goto eval_fail; + } + + eval_rparen: + // Evaluate the top of the stack, then pop + success = 1; + acc = eval_stack(&vector_last(ppeaux, stack), li0, OPLVL_ALS, 0, is_unsigned, &success); + if (!success) { + goto eval_fail; + } + + eval_rparen_acc: + vector_pop(ppeaux, stack); + goto push_acc_to_st0; + + case SYM_QUESTION: { + // May be placed anywhere and may skip some tokens depending on acc + if (!vector_last(ppeaux, stack).st0) { + log_error(&tok->loginfo, "unexpected ternary operator during #if evaluation\n"); + goto eval_fail; + } + + // Evaluate the top of the stack, then increase n_colons or skip tokens + success = 1; + acc = eval_stack(&vector_last(ppeaux, stack), li0, OPLVL_ALL, 0, is_unsigned, &success); + if (!success) { + goto eval_fail; + } + + eval_question_acc: + is_unsigned = 0; + if (acc) { + // Increase n_colons + ++vector_last(ppeaux, stack).n_colons; + goto done_partial_eval; + } else { + // Skip to the corresponding colon + unsigned nquestions = 0, nparens = 0; + // Note that we don't really care about the content of the ignored part; it may be syntaxically incorrect + for (++tok; tok < vector_end(preproc, cond); ++tok) { + if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_LPAREN)) { + ++nparens; + } else if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_RPAREN)) { + if (nparens) --nparens; + else { + log_error(&tok->loginfo, "unexpected symbol ')', expected ':' during #if evaluation\n"); + goto eval_fail; + } + } else if (!nparens && (tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_QUESTION)) { + ++nquestions; + } else if (!nparens && (tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_COLON)) { + if (nquestions) --nquestions; + else break; + } + } + if (tok == vector_end(preproc, cond)) { + log_error(&tok->loginfo, "ternary operator never finished during #if evaluation\n"); + goto eval_fail; + } + goto done_partial_eval; + } + } + case SYM_COLON: { + if (!vector_last(ppeaux, stack).n_colons) { + log_error(&tok->loginfo, "unexpected symbol ':' during #if evaluation\n"); + goto eval_fail; + } + if (!vector_last(ppeaux, stack).st0) { + log_error(&tok->loginfo, "unexpected symbol ':' during #if evaluation\n"); + goto eval_fail; + } + eval_colon_acc: + // Skip to the end of expression or to the corresponding rparen + if (vector_size(ppeaux, stack) == 1) { + goto done_complete_stack; // No parenthesis opened, skip to the end of the vector + } + // Skip to the next rparen; also, we skip correctly counting of ':' since we don't care about those anymore + unsigned nparens = 0; + // Note that we don't really care about the content of the ignored part; it may be syntaxically incorrect + for (++tok; tok < vector_end(preproc, cond); ++tok) { + if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_LPAREN)) { + ++nparens; + } else if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_RPAREN)) { + if (nparens) --nparens; + else break; + } + } + // We need to exit at a RPAREN + if (tok == vector_end(preproc, cond)) { + log_error(&vector_last(preproc, cond).loginfo, "missing closing parenthesis in #if expression\n"); + goto eval_fail; + } + vector_last(ppeaux, stack).n_colons = 0; + goto eval_rparen; } + + case SYM_LBRACKET: + case SYM_RBRACKET: + case SYM_LSQBRACKET: + case SYM_RSQBRACKET: + case SYM_HASH: + case SYM_HASHHASH: + case SYM_SEMICOLON: + case SYM_COLONCOLON: + case SYM_VARIADIC: + case SYM_DOT: + case SYM_DASHGT: + case SYM_EQ: + case SYM_PLUSEQ: + case SYM_DASHEQ: + case SYM_STAREQ: + case SYM_SLASHEQ: + case SYM_PERCENTEQ: + case SYM_HATEQ: + case SYM_AMPEQ: + case SYM_PIPEEQ: + case SYM_LTLTEQ: + case SYM_GTGTEQ: + case SYM_PLUSPLUS: + case SYM_DASHDASH: + case SYM_COMMA: + default: + log_error(&tok->loginfo, "invalid symbol ID %u (%s) during #if evaluation\n", + tok->tokv.sym, (tok->tokv.sym <= LAST_SYM) ? sym2str[tok->tokv.sym] : "invalid"); + goto eval_fail; + } + + // invalid_binop: unexpected binary operation + // add_binop: add a binary operation + if (0) { + invalid_binop: + log_error(&tok->loginfo, "unexpected binary operator '%s' in #if expression\n", sym2str[tok->tokv.sym]); + goto eval_fail; + add_binop: + if (op_lvl < 2) { + log_internal(&tok->loginfo, "invalid op_lvl %d < 2 during #if evaluation\n", op_lvl); + goto eval_fail; + } + if (op_lvl >= OPLVL_ALL) { + log_internal(&tok->loginfo, "invalid op_lvl %d > OPLVL_ALL during #if evaluation\n", op_lvl); + goto eval_fail; + } + + success = 1; + acc = eval_stack(&vector_last(ppeaux, stack), li0, op_lvl, op_typ, is_unsigned, &success); + if (!success) { + goto eval_fail; + } + + if (op_lvl < OPLVL_BAN) { + // No post-processing required + goto done_partial_eval; + } + if (op_lvl == OPLVL_BAN) { + // op_typ == OPLVL_BAN + vector_last(ppeaux, stack).st_bool = 1; + if (acc) goto done_partial_eval; + // We have five possibilities: + // [0] && x ~> 0 + // [0] && x) ~> 0) + // [0] && x ? y : z ~> z + // [0] && x : y ~> 0 : y ~> 0 + // [0] && x || y ~> y + // We are at the '&&'; note that we know the top of the stack has no pending operation + unsigned nparens = 0; + for (++tok; tok < vector_end(preproc, cond); ++tok) { + if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_LPAREN)) { + ++nparens; + } else if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_RPAREN)) { + if (nparens) --nparens; + else { + if (vector_size(ppeaux, stack) == 1) { + log_error(&tok->loginfo, "unexpected symbol ')' (parenthesis not opened) during #if evaluation\n"); + goto eval_fail; + } + if (vector_last(ppeaux, stack).n_colons) { + log_error(&tok->loginfo, "unexpected symbol ')', expected symbol ':' during #if evaluation\n"); + goto eval_fail; + } + + goto eval_rparen_acc; + } + } else if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_QUESTION)) { + if (!nparens) { + goto eval_question_acc; + } + } else if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_COLON)) { + if (!nparens) { + if (!vector_last(ppeaux, stack).n_colons) { + log_error(&tok->loginfo, "unexpected symbol ':' during #if evaluation\n"); + goto eval_fail; + } + goto eval_colon_acc; + } + } else if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_PIPEPIPE)) { + if (!nparens) { + goto done_partial_eval; + } + } + } + if (nparens) { + log_error(&vector_last(preproc, cond).loginfo, "expected symbol ')' during #if evaluation\n"); + goto eval_fail; + } + if (vector_last(ppeaux, stack).n_colons) { + log_error(&vector_last(preproc, cond).loginfo, "expected symbol ':' during #if evaluation\n"); + goto eval_fail; + } + if (vector_size(ppeaux, stack) != 1) { + log_error(&vector_last(preproc, cond).loginfo, "expected symbol ')' during #if evaluation\n"); + goto eval_fail; + } + goto done_complete_acc; + } + if (op_lvl == OPLVL_BOR) { + // op_typ == OPLVL_BOR + vector_last(ppeaux, stack).st_bool = 1; + if (!acc) goto done_partial_eval; + // We have four possibilities: + // [!0] || x ~> 1 + // [!0] || x) ~> 1) + // [!0] || x ? y : z ~> z + // [!0] || x : y ~> 1 : y ~> 1 + // We are at the '||'; note that we know the top of the stack has no pending operation + unsigned nparens = 0; + for (++tok; tok < vector_end(preproc, cond); ++tok) { + if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_LPAREN)) { + ++nparens; + } else if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_RPAREN)) { + if (nparens) --nparens; + else { + if (vector_size(ppeaux, stack) == 1) { + log_error(&tok->loginfo, "unexpected symbol ')' (parenthesis not opened) during #if evaluation\n"); + goto eval_fail; + } + if (vector_last(ppeaux, stack).n_colons) { + log_error(&tok->loginfo, "unexpected symbol ')', expected symbol ':' during #if evaluation\n"); + goto eval_fail; + } + + acc = 1; + goto eval_rparen_acc; + } + } else if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_QUESTION)) { + if (!nparens) { + acc = 1; + goto eval_question_acc; + } + } else if ((tok->tokt == PPTOK_SYM) && (tok->tokv.sym == SYM_COLON)) { + if (!nparens) { + if (!vector_last(ppeaux, stack).n_colons) { + log_error(&tok->loginfo, "unexpected symbol ':' during #if evaluation\n"); + goto eval_fail; + } + acc = 1; + goto eval_colon_acc; + } + } + } + if (nparens) { + log_error(&vector_last(preproc, cond).loginfo, "expected symbol ')' during #if evaluation\n"); + goto eval_fail; + } + if (vector_last(ppeaux, stack).n_colons) { + log_error(&vector_last(preproc, cond).loginfo, "expected symbol ':' during #if evaluation\n"); + goto eval_fail; + } + if (vector_size(ppeaux, stack) != 1) { + log_error(&vector_last(preproc, cond).loginfo, "expected symbol ')' during #if evaluation\n"); + goto eval_fail; + } + acc = 1; + goto done_complete_acc; + } + log_internal(&li0, "invalid op_lvl %d during #if evaluation\n", op_lvl); + goto eval_fail; + } + + done_partial_eval: + } else { + log_error(&tok->loginfo, "invalid token type %u during #if evaluation\n", tok->tokt); + goto eval_fail; + } + + // push_acc_to_st0: evaluate all held st1 operations on acc, then set st0 to 1 and v0 to acc + if (0) { + push_acc_to_st0: + while (vector_last(ppeaux, stack).st1) { + // Only symbols, so this should be safe + enum token_sym_type_e sym = vector_last(ppeaux, stack).v1[--vector_last(ppeaux, stack).st1].tokv.sym; + if (sym == SYM_PLUS) {} + else if (sym == SYM_DASH) acc = -acc; + else if (sym == SYM_EXCL) acc = !acc; + else if (sym == SYM_TILDE) acc = ~acc; + else { + log_internal(&vector_last(ppeaux, stack).v1[vector_last(ppeaux, stack).st1].loginfo, + "unknown level 1 unary operator sym ID %u\n", sym); + } + } + vector_last(ppeaux, stack).v0 = acc; + vector_last(ppeaux, stack).st0 = 1; + } + } + + if (vector_size(ppeaux, stack) != 1) { + log_error(&vector_last(preproc, cond).loginfo, "expected symbol ')' during #if evaluation\n"); + goto eval_fail; + } + +done_complete_stack: + success = 1; + acc = eval_stack(&vector_last(ppeaux, stack), li0, OPLVL_ALS, 0, is_unsigned, &success); + if (!success) { + goto eval_fail; + } + +done_complete_acc: + vector_del(ppeaux, stack); + *aux_ret = 1; + return acc; +} + +int proc_unget_token(preproc_t *src, proc_token_t *tok) { + return vector_push(ppsource, src->prep, ((ppsource_t){ .srct = PPSRC_PTOKEN, .srcv.ptok = *tok })); +} +static proc_token_t proc_next_token_aux(preproc_t *src) { + if (!vector_size(ppsource, src->prep)) { + return (proc_token_t){ .tokt = PTOK_EOF, .loginfo = { 0 }, .tokv = {.c = (char)EOF} }; + } + if (vector_last(ppsource, src->prep).srct == PPSRC_PTOKEN) { + proc_token_t ret = vector_last(ppsource, src->prep).srcv.ptok; + vector_pop(ppsource, src->prep); + return ret; + } +check_if_depth: + { + if (!vector_size(ppsource, src->prep)) { + return (proc_token_t){ .tokt = PTOK_EOF, .loginfo = { 0 }, .tokv = {.c = (char)EOF} }; + } + ppsource_t *ppsrc = &vector_last(ppsource, src->prep); + if ((ppsrc->srct == PPSRC_PREPARE) && (ppsrc->srcv.prep.ok_depth != ppsrc->srcv.prep.cond_depth)) { + // Ignore all tokens from ppsrc until: + // INVALID -------------- abort (return PTOK_INVALID) + // EOF ------------------ print an error, then pop and goto check_if_depth + // # if/elif/endif/... -- parse, execute, goto check_if_depth + // Also, track newlines to keep src->st up-to-date + + while (1) { + preproc_token_t tok = ppsrc_next_token(src); + skip_cur_token: + if (tok.tokt == PPTOK_INVALID) { + src->st = PPST_NONE; + proc_token_t ret; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = tok.tokv.c; + return ret; + } else if (tok.tokt == PPTOK_NEWLINE) { + src->st = PPST_NL; + } else if (tok.tokt == PPTOK_EOF) { + log_warning(&tok.loginfo, "file ended before closing all conditionals (ignoring)\n"); + vector_pop(ppsource, src->prep); + goto check_if_depth; + } else if ((tok.tokt == PPTOK_SYM) && (src->st == PPST_NL) && (tok.tokv.sym == SYM_HASH)) { + src->st = PPST_NONE; + tok = ppsrc_next_token(src); + if ((tok.tokt == PPTOK_NEWLINE) || (tok.tokt == PPTOK_EOF)) { + // Empty preprocessor command + src->st = PPST_NL; + continue; + } + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) goto preproc_ignore_remaining; + if (!strcmp(string_content(tok.tokv.str), "include")) goto preproc_ignore_remaining; + else if (!strcmp(string_content(tok.tokv.str), "include_next")) goto preproc_ignore_remaining; + else if (!strcmp(string_content(tok.tokv.str), "define")) goto preproc_ignore_remaining; + else if (!strcmp(string_content(tok.tokv.str), "undef")) goto preproc_ignore_remaining; + else if (!strcmp(string_content(tok.tokv.str), "error")) goto preproc_ignore_remaining; + else if (!strcmp(string_content(tok.tokv.str), "warning")) goto preproc_ignore_remaining; // C23/extension + else if (!strcmp(string_content(tok.tokv.str), "pragma")) goto preproc_ignore_remaining; + else if (!strcmp(string_content(tok.tokv.str), "line")) goto preproc_ignore_remaining; + else if (!strcmp(string_content(tok.tokv.str), "if")) { + // Increase cond_depth (we already know we are ignoring the content) + ++ppsrc->srcv.prep.cond_depth; + goto preproc_ignore_remaining; + } else if (!strcmp(string_content(tok.tokv.str), "ifdef")) { + // Increase cond_depth (we already know we are ignoring the content) + ++ppsrc->srcv.prep.cond_depth; + goto preproc_ignore_remaining; + } else if (!strcmp(string_content(tok.tokv.str), "ifndef")) { + // Increase cond_depth (we already know we are ignoring the content) + ++ppsrc->srcv.prep.cond_depth; + goto preproc_ignore_remaining; + } else if (!strcmp(string_content(tok.tokv.str), "elif")) { + if ((ppsrc->srcv.prep.ok_depth == ppsrc->srcv.prep.cond_depth - 1) && !ppsrc->srcv.prep.entered_next_ok_cond) { + string_del(tok.tokv.str); + VECTOR(preproc) *cond = vector_new(preproc); + if (!cond) { + log_memory("failed to allocate #elif condition vector\n"); + src->st = PPST_NONE; + return (proc_token_t){ .tokt = PTOK_INVALID, .loginfo = tok.loginfo, .tokv = {.c = '\0'} }; + } + tok = ppsrc_next_token(src); + loginfo_t li = tok.loginfo; + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + li.lineno_end = tok.loginfo.lineno_end ? tok.loginfo.lineno_end : tok.loginfo.lineno; + li.colno_end = tok.loginfo.colno_end ? tok.loginfo.colno_end : tok.loginfo.colno; + if (!vector_push(preproc, cond, tok)) { + log_memory("failed to add token to #elif condition vector\n"); + vector_del(preproc, cond); + src->st = PPST_NONE; + return (proc_token_t){ .tokt = PTOK_INVALID, .loginfo = tok.loginfo, .tokv = {.c = '\0'} }; + } + tok = ppsrc_next_token(src); + } + vector_trim(preproc, cond); + khash_t(string_set) *solved_macros = kh_init(string_set); + if (!solved_macros) { + log_memory("failed to allocate #elif solved_macros set\n"); + vector_del(preproc, cond); + src->st = PPST_NONE; + return (proc_token_t){ .tokt = PTOK_INVALID, .loginfo = tok.loginfo, .tokv = {.c = '\0'} }; + } + + VECTOR(preproc) *expanded = preproc_do_expand(&li, src->macros_map, cond, solved_macros, src->macros_used); + vector_del(preproc, cond); + macros_set_del(solved_macros); + if (!expanded) { + // Not required as preproc_do_expand already prints an error, but this can be useful + log_error(&li, "failed to expand #elif condition\n"); + src->st = PPST_NONE; + return (proc_token_t){ .tokt = PTOK_INVALID, .loginfo = tok.loginfo, .tokv = {.c = '\0'} }; + } + + // Now we need to compute what is pointed by expanded, and increase cond_depth and ok_depth as needed + int st; + int64_t res = preproc_eval(expanded, &st, src->target->size_long == 4); + vector_del(preproc, expanded); + if (!st) { + // Not required as preproc_eval already prints an error, but this can be useful + log_error(&li, "failed to evaluate #elif condition\n"); + src->st = PPST_NONE; + return (proc_token_t){ .tokt = PTOK_INVALID, .tokv = {.c = '\0'} }; + } + if (res) { + ++vector_last(ppsource, src->prep).srcv.prep.ok_depth; + if (tok.tokt == PPTOK_NEWLINE) { + src->st = PPST_NL; + goto check_next_token; + } + } else { + if (tok.tokt == PPTOK_NEWLINE) { + src->st = PPST_NL; + continue; + } + } + if (tok.tokt == PPTOK_EOF) { + log_warning(&tok.loginfo, "file ended before closing all conditionals (ignoring)\n"); + vector_pop(ppsource, src->prep); + src->st = PPST_NL; // Should be redundant since TOK_NEWLINE is added before TOK_EOF if required + // EOF has an empty destructor + // Note that since we have opened the file, the previous file had ok_depth == cond_depth + goto check_next_token; + } else /* if (tok.tokt == PPTOK_INVALID) */ { + src->st = PPST_NONE; + return (proc_token_t){ .tokt = PTOK_INVALID, .tokv.c = tok.tokv.c }; + } + } else goto preproc_ignore_remaining; + } else if (!strcmp(string_content(tok.tokv.str), "elifdef")) { + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) { + log_error(&tok.loginfo, "invalid token type %u after '#elifdef' preprocessor command\n", tok.tokt); + goto preproc_ignore_remaining; + } + if ((ppsrc->srcv.prep.ok_depth == ppsrc->srcv.prep.cond_depth - 1) && !ppsrc->srcv.prep.entered_next_ok_cond) { + // We may enter the following block, check it + khiter_t it = kh_get(macros_map, src->macros_map, string_content(tok.tokv.str)); + if (it != kh_end(src->macros_map)) { + ++ppsrc->srcv.prep.ok_depth; + goto preproc_ignore_remaining_goto; + } + goto preproc_ignore_remaining; + } + } else if (!strcmp(string_content(tok.tokv.str), "elifndef")) { + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) { + log_error(&tok.loginfo, "invalid token type %u after '#elifdef' preprocessor command\n", tok.tokt); + goto preproc_ignore_remaining; + } + if ((ppsrc->srcv.prep.ok_depth == ppsrc->srcv.prep.cond_depth - 1) && !ppsrc->srcv.prep.entered_next_ok_cond) { + // We may enter the following block, check it + khiter_t it = kh_get(macros_map, src->macros_map, string_content(tok.tokv.str)); + if (it == kh_end(src->macros_map)) { + ++ppsrc->srcv.prep.ok_depth; + goto preproc_ignore_remaining_goto; + } + goto preproc_ignore_remaining; + } + } else if (!strcmp(string_content(tok.tokv.str), "else")) { + // Maybe increase ok_depth if ok_depth = cond_depth - 1; also goto check_if_depth + // Also, we only need to goto check_if_depth if we actually update ok_depth + // Note that this (very naive) approach allows code such as: + /* #ifdef M + * ... // Not preprocessed *** Preprocessed + * #else + * ... // Preprocessed *** Not preprocessed + * #else + * ... // Not preprocessed due to unrelated code *** Not preprocessed + * #else + * ... // Preprocessed *** Not preprocessed + * #endif + */ + // Forbidding this code would require a 256-bits bitfield, which is big, thus not implemented. + if ((ppsrc->srcv.prep.ok_depth == ppsrc->srcv.prep.cond_depth - 1) && !ppsrc->srcv.prep.entered_next_ok_cond) { + ++ppsrc->srcv.prep.ok_depth; + goto preproc_ignore_remaining_goto; + } else goto preproc_ignore_remaining; + } else if (!strcmp(string_content(tok.tokv.str), "endif")) { + // Decrease cond_depth; also goto check_if_depth + // Note that 0 <= ppsrc->srcv.prep.ok_depth < ppsrc->srcv.prep.cond_depth, so this code is OK + --ppsrc->srcv.prep.cond_depth; + goto preproc_ignore_remaining_goto; + } + + log_warning(&tok.loginfo, "Unknown ignored pp command %s, skipping until EOL\n", string_content(tok.tokv.str)); + preproc_ignore_remaining: + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + preproc_token_del(&tok); + tok = ppsrc_next_token(src); + } + if (tok.tokt == PPTOK_NEWLINE) { + src->st = PPST_NL; + } + goto skip_cur_token; + + preproc_ignore_remaining_goto: + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + preproc_token_del(&tok); + tok = ppsrc_next_token(src); + } + if (tok.tokt == PPTOK_NEWLINE) { + src->st = PPST_NL; + } + goto check_if_depth; + } else { + src->st = PPST_NONE; + preproc_token_del(&tok); + } + } + } + } + proc_token_t ret; +check_next_token: + if (!vector_size(ppsource, src->prep)) { + ret.tokt = PTOK_EOF; + ret.loginfo = (loginfo_t){0}; + ret.tokv.c = (char)EOF; + return ret; + } +start_next_token: + preproc_token_t tok = ppsrc_next_token(src); +start_cur_token: + switch (tok.tokt) { + case PPTOK_INVALID: + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = tok.tokv.c; + return ret; + case PPTOK_IDENT: + src->st = (src->st == PPST_PRAGMA_EXPLICIT) ? PPST_PRAGMA_EXPLICIT : PPST_NONE; + { + khiter_t it = kh_get(macros_map, src->macros_map, string_content(tok.tokv.str)); + if (it != kh_end(src->macros_map)) { + macro_t *m = &kh_val(src->macros_map, it); + int need_solve = !m->is_funlike; + VECTOR(preprocs) *margs = NULL; + loginfo_t li = tok.loginfo; + if (m->is_funlike) { + preproc_token_t tok2 = ppsrc_next_token(src); + size_t nnls = 0; + while (tok2.tokt == PPTOK_NEWLINE) { + ++nnls; + tok2 = ppsrc_next_token(src); + } + if ((tok2.tokt == PPTOK_SYM) && (tok2.tokv.sym == SYM_LPAREN)) { + need_solve = 1; + margs = vector_new(preprocs); + if (!margs) goto solve_err_mem; + VECTOR(preproc) *marg = vector_new(preproc); + if (!marg) goto solve_err_mem; + while (need_solve && (tok2.tokt != PPTOK_EOF) && (tok2.tokt != PPTOK_INVALID)) { + tok2 = ppsrc_next_token(src); + if ((need_solve == 1) && (tok2.tokt == PPTOK_SYM) && (tok2.tokv.sym == SYM_COMMA)) { + // Possible optimization: emplace NULL if vector_size(marg) == 0 + // This would avoid allocating a new vector + vector_trim(preproc, marg); + if (!vector_push(preprocs, margs, marg)) { + vector_del(preproc, marg); + goto solve_err_mem; + } + marg = vector_new(preproc); + if (!marg) goto solve_err_mem; + } else if (tok2.tokt != PPTOK_NEWLINE) { + if (!vector_push(preproc, marg, tok2)) { + vector_del(preproc, marg); + goto solve_err_mem; + } + } + if ((tok2.tokt == PPTOK_SYM) && (tok2.tokv.sym == SYM_LPAREN)) ++need_solve; + else if ((tok2.tokt == PPTOK_SYM) && (tok2.tokv.sym == SYM_RPAREN)) --need_solve; + } + li.lineno_end = tok2.loginfo.lineno_end ? tok2.loginfo.lineno_end : tok2.loginfo.lineno; + li.colno_end = tok2.loginfo.colno_end ? tok2.loginfo.colno_end : tok2.loginfo.colno; + if (need_solve) { + log_error(&li, "unfinished function-like macro %s\n", string_content(tok.tokv.str)); + vector_del(preprocs, margs); + vector_del(preproc, marg); + string_del(tok.tokv.str); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok2.loginfo; + ret.tokv.c = tok.tokv.c; + return ret; + } + // margs finishes with a SYM_RPAREN token + vector_pop(preproc, marg); + vector_trim(preproc, marg); + if (!vector_push(preprocs, margs, marg)) { + vector_del(preproc, marg); + goto solve_err_mem; + } + need_solve = 1; + } else { + if (!vector_reserve(ppsource, src->prep, vector_size(ppsource, src->prep) + nnls + 1)) { + log_memory("undoing lookahead for macro use %s\n", string_content(tok.tokv.str)); + string_del(tok.tokv.str); + preproc_token_del(&tok2); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = li; + ret.tokv.c = '\0'; + return ret; + } + vector_push(ppsource, src->prep, ((ppsource_t){.srct = PPSRC_PPTOKEN, .srcv.pptok = tok2})); + while (nnls--) { + vector_push( + ppsource, + src->prep, + ((ppsource_t){.srct = PPSRC_PPTOKEN, .srcv.pptok = {.tokt = PPTOK_NEWLINE, .tokv.c = '\n'}})); + } + } + } + if (need_solve) { + khash_t(string_set) *solved_macros = kh_init(string_set); + if (!solved_macros) goto solve_err_mem; + + char *mname = string_steal(tok.tokv.str); + + VECTOR(preproc) *solved = preproc_solve_macro(&li, src->macros_map, mname, m, margs, solved_macros, NULL); + if (margs) vector_del(preprocs, margs); + macros_set_del(solved_macros); + if (!solved) { + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = li; + ret.tokv.c = '\0'; + return ret; + } + // If the expansion is empty, don't push it + if (vector_size(preproc, solved)) { + if (!vector_push(ppsource, src->prep, ((ppsource_t){.srct = PPSRC_PPTOKENS, .srcv.pptoks = {.idx = 0, .toks = solved}}))) { + log_memory("pushing expanded macro\n"); + vector_del(preproc, solved); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = li; + ret.tokv.c = '\0'; + return ret; + } + } else { + vector_del(preproc, solved); + } + // src->prep is not empty (either through the push or by not popping the top) + goto start_next_token; + } else { + if (margs) vector_del(preprocs, margs); + } + + if (0) { + solve_err_mem: + log_memory("parsing macro use %s\n", string_content(tok.tokv.str)); + if (margs) vector_del(preprocs, margs); + string_del(tok.tokv.str); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = li; + ret.tokv.c = '\0'; + return ret; + } + } + } + /* FALLTHROUGH */ + case PPTOK_IDENT_UNEXP: { + khiter_t it = kh_get(str2kw, str2kw, string_content(tok.tokv.str)); + if (it == kh_end(str2kw)) { + ret.tokt = PTOK_IDENT; + ret.tokv.str = tok.tokv.str; + } else { + string_del(tok.tokv.str); + ret.tokt = PTOK_KEYWORD; + ret.tokv.kw = kh_val(str2kw, it); + } + ret.loginfo = tok.loginfo; + return ret; } + case PPTOK_NUM: + src->st = (src->st == PPST_PRAGMA_EXPLICIT) ? PPST_PRAGMA_EXPLICIT : PPST_NONE; + ret.tokt = PTOK_NUM; + ret.loginfo = tok.loginfo; + ret.tokv.str = tok.tokv.str; + return ret; + case PPTOK_STRING: + src->st = (src->st == PPST_PRAGMA_EXPLICIT) ? PPST_PRAGMA_EXPLICIT : PPST_NONE; + ret.tokt = PTOK_STRING; + ret.loginfo = tok.loginfo; + ret.tokv = (union proc_token_val_u){.sstr = tok.tokv.sstr, .sisstr = tok.tokv.sisstr}; + return ret; + case PPTOK_INCL: + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = tok.tokv.sisstr ? '<' : '"'; + string_del(tok.tokv.sstr); + return ret; + case PPTOK_SYM: + if ((src->st == PPST_NL) && (tok.tokv.sym == SYM_HASH)) { + tok = ppsrc_next_token(src); + if ((tok.tokt == PPTOK_NEWLINE) || (tok.tokt == PPTOK_EOF)) { + // Empty preprocessor command + goto start_cur_token; + } + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) goto preproc_hash_err; + if (!strcmp(string_content(tok.tokv.str), "include") || !strcmp(string_content(tok.tokv.str), "include_next")) { + int is_next = string_content(tok.tokv.str)[7] == '_'; + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + loginfo_t li = tok.loginfo; + string_t *incl_file; + int is_sys; + if (tok.tokt == PPTOK_INCL) { + incl_file = tok.tokv.sstr; + // Assume we only have one #include "..." path, so include_next is always a system include + is_sys = is_next || !tok.tokv.sisstr; + tok = ppsrc_next_token(src); // Token was moved + loginfo_t ignored_infos = tok.loginfo; int has_ignored = 0; + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + has_ignored = 1; + ignored_infos.lineno_end = tok.loginfo.lineno_end ? tok.loginfo.lineno_end : tok.loginfo.lineno; + ignored_infos.colno_end = tok.loginfo.colno_end ? tok.loginfo.colno_end : tok.loginfo.colno; + preproc_token_del(&tok); + tok = ppsrc_next_token(src); + } + if (has_ignored) { + log_warning(&ignored_infos, "ignored tokens after #include%s directive\n", is_next ? "_next" : ""); + } + } else { + // Expand macro, then try again + VECTOR(preproc) *incl = vector_new(preproc); + if (!incl) { + log_memory("failed to allocate #include tokens vector\n"); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + if (!vector_push(preproc, incl, tok)) { + log_memory("failed to add token to #include tokens vector\n"); + vector_del(preproc, incl); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + li.lineno_end = tok.loginfo.lineno_end ? tok.loginfo.lineno_end : tok.loginfo.lineno; + li.colno_end = tok.loginfo.colno_end ? tok.loginfo.colno_end : tok.loginfo.colno; + tok = ppsrc_next_token(src); + } + vector_trim(preproc, incl); + khash_t(string_set) *solved_macros = kh_init(string_set); + if (!solved_macros) { + log_memory("failed to allocate #include solved_macros set\n"); + vector_del(preproc, incl); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + + VECTOR(preproc) *expanded = preproc_do_expand(&li, src->macros_map, incl, solved_macros, src->macros_used); + vector_del(preproc, incl); + macros_set_del(solved_macros); + if (!expanded) { + log_error(&li, "failed to expand #include tokens\n"); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.tokv.c = '\0'; + return ret; + } + + // Now we need to check what is pointed by expanded + if (!vector_size(preproc, expanded)) { + log_error(&li, "missing #include name\n"); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + if (vector_content(preproc, expanded)[0].tokt == PPTOK_STRING) { + is_sys = is_next || src->is_sys; + preproc_token_t *exp = vector_content(preproc, expanded); + log_error(&li, "TODO: #include \n", string_content(exp->tokv.sstr), exp->tokv.sisstr); + vector_del(preproc, expanded); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } else if ((vector_content(preproc, expanded)[0].tokt == PPTOK_SYM) && (vector_content(preproc, expanded)[0].tokv.sym == SYM_LT) + && (vector_last(preproc, expanded).tokt == PPTOK_SYM) && (vector_last(preproc, expanded).tokv.sym == SYM_GT) + && (vector_size(preproc, expanded) >= 3)) { + log_warning(&li, "#include command with macro expansion, assuming no space is present in the file name\n"); + is_sys = 0; + incl_file = string_new(); + for (vector_preproc_elem *tok2 = expanded->content + 1; tok2 < expanded->content + expanded->vsize - 1; ++tok2) { + switch (tok2->tokt) { + case PPTOK_IDENT: + case PPTOK_IDENT_UNEXP: + if (!string_add_string(incl_file, tok2->tokv.str)) { + log_memory("failed to add ident to include string\n"); + vector_del(preproc, expanded); + string_del(incl_file); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + break; + case PPTOK_SYM: + if (!string_add_cstr(incl_file, sym2str[tok2->tokv.sym])) { + log_memory("failed to add symbol to include string\n"); + vector_del(preproc, expanded); + string_del(incl_file); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + break; + + case PPTOK_INVALID: + case PPTOK_NUM: + case PPTOK_STRING: + case PPTOK_INCL: + case PPTOK_NEWLINE: + case PPTOK_BLANK: + case PPTOK_START_LINE_COMMENT: + case PPTOK_EOF: + default: + log_error(&li, "TODO: add token type %u to include string\n", tok2->tokt); + vector_del(preproc, expanded); + string_del(incl_file); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + } + vector_del(preproc, expanded); + } else { + log_error(&li, "invalid #include command (macro expansion does not result in string or <...>)\n"); + vector_del(preproc, expanded); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + } + // cur_pathno == 0 if cur_file was from an #include "...", otherwise idx + 1 + int has_once = 0; + vector_for(ccharp, fname, src->pragma_once) { + if (!strcmp(*fname, string_content(incl_file))) { + has_once = 1; + break; + } + } + if (has_once) { +#ifdef LOG_INCLUDE + printf("Skipping opening %s as %s from system path %zu\n", string_content(incl_file), + is_sys ? "system header" : "cur header", is_next ? src->cur_pathno : 0); +#endif + } else { +#ifdef LOG_INCLUDE + printf("Opening %s as %s from system path %zu\n", string_content(incl_file), + is_sys ? "system header" : "cur header", is_next ? src->cur_pathno : 0); +#endif + if ((is_sys || !try_open_dir(src, incl_file)) && !try_open_sys(src, incl_file, is_next ? src->cur_pathno : 0)) { + log_error(&li, "failed to open %s\n", string_content(incl_file)); + string_del(incl_file); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = li; + ret.tokv.c = is_sys ? '<' : '"'; + return ret; + } + } + string_del(incl_file); + if (tok.tokt == PPTOK_NEWLINE) goto check_next_token; + else goto start_cur_token; + } else if (!strcmp(string_content(tok.tokv.str), "define")) { + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) { + log_error(&tok.loginfo, "invalid token type %u after '#define' preprocessor command\n", tok.tokt); + goto preproc_hash_err; + } + string_t *defname = tok.tokv.str; + macro_t m = (macro_t){ .is_funlike = 0, .has_varargs = 0, .nargs = 0, .toks = vector_new(mtoken) }; + if (!m.toks) { + log_memory("failed to allocate token vector for macro %s\n", string_content(defname)); + string_del(defname); // Token is now freed + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + khash_t(argid_map) *args = NULL; + tok = ppsrc_next_token(src); + if ((tok.tokt == PPTOK_SYM) && (tok.tokv.sym == SYM_LPAREN)) { + m.is_funlike = 1; + args = kh_init(argid_map); + if (!args) { + log_memory("failed to allocate args map for macro %s\n", string_content(defname)); + string_del(defname); // Token is now freed + vector_del(mtoken, m.toks); + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + m.nargs = 0; + tok = ppsrc_next_token(src); + int ok; + if ((tok.tokt == PPTOK_SYM) && (tok.tokv.sym == SYM_RPAREN)) { + ok = 1; + } else { + ok = 0; + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + if ((tok.tokt == PPTOK_SYM) && (tok.tokv.sym == SYM_VARIADIC)) { + m.has_varargs = 1; + int kh_ret; + char *tok_str = strdup("__VA_ARGS__"); + khiter_t kh_k = kh_put(argid_map, args, tok_str, &kh_ret); // Moves the string content + if (kh_ret < 0) { // Failed to move, needs to free here + log_memory("failed to push arg %s for macro %s\n", tok_str, string_content(defname)); + string_del(defname); + free(tok_str); + vector_del(mtoken, m.toks); + argid_map_del(args); + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + if (kh_ret == 0) { + log_error(&tok.loginfo, "duplicate argument name %s defining macro %s\n", tok_str, string_content(defname)); + string_del(defname); + vector_del(mtoken, m.toks); + argid_map_del(args); + goto preproc_hash_err; + } + kh_val(args, kh_k) = m.nargs; + // Empty token destructor + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_SYM) || (tok.tokv.sym != SYM_RPAREN)) { + log_error(&tok.loginfo, "invalid token type %u after variadic macro arguments definition\n", tok.tokt); + string_del(defname); + vector_del(mtoken, m.toks); + argid_map_del(args); + goto preproc_hash_err; + } + ok = 1; + break; + } else if ((tok.tokt == PPTOK_IDENT) || (tok.tokt == PPTOK_IDENT_UNEXP)) { + int kh_ret; + char *tok_str = string_steal(tok.tokv.str); + khiter_t kh_k = kh_put(argid_map, args, tok_str, &kh_ret); // Moves the string content + if (kh_ret < 0) { // Failed to move, needs to free here + log_memory("failed to push arg %s for macro %s\n", tok_str, string_content(defname)); + string_del(defname); + free(tok_str); + vector_del(mtoken, m.toks); + argid_map_del(args); + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + if (kh_ret == 0) { + log_error(&tok.loginfo, "duplicate argument name %s defining macro %s\n", tok_str, string_content(defname)); + string_del(defname); + vector_del(mtoken, m.toks); + argid_map_del(args); + // Token was already deleted, create a fake token + tok.tokt = PPTOK_SYM; + tok.tokv.sym = LAST_SYM; + goto preproc_hash_err; + } + kh_val(args, kh_k) = m.nargs++; + // Token content is the string, which is moved to the vector + tok = ppsrc_next_token(src); + if ((tok.tokt == PPTOK_SYM) && (tok.tokv.sym == SYM_COMMA)) { + // Empty destructor + tok = ppsrc_next_token(src); + } else if ((tok.tokt == PPTOK_SYM) && (tok.tokv.sym == SYM_RPAREN)) { + // Empty destructor + ok = 1; + break; + } else if ((tok.tokt == PPTOK_SYM) && (tok.tokv.sym == SYM_VARIADIC)) { + m.has_varargs = 1; + --m.nargs; + // Empty token destructor + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_SYM) || (tok.tokv.sym != SYM_RPAREN)) { + log_error(&tok.loginfo, "invalid token type %u after variadic macro arguments definition\n", tok.tokt); + string_del(defname); + vector_del(mtoken, m.toks); + argid_map_del(args); + goto preproc_hash_err; + } + ok = 1; + break; + } else { + log_error(&tok.loginfo, "invalid %s type %u in macro arguments definition\n", + (tok.tokt == PPTOK_SYM) ? "symbol" : "token", + (tok.tokt == PPTOK_SYM) ? tok.tokv.sym : tok.tokt); + string_del(defname); + vector_del(mtoken, m.toks); + argid_map_del(args); + goto preproc_hash_err; + } + } else { + log_error(&tok.loginfo, "invalid %s type %u as macro arguments definition name\n", + (tok.tokt == PPTOK_SYM) ? "symbol" : "token", (tok.tokt == PPTOK_SYM) ? tok.tokv.sym : tok.tokt); + string_del(defname); + vector_del(mtoken, m.toks); + argid_map_del(args); + goto preproc_hash_err; + } + } + } + if (!ok) { + log_error(&tok.loginfo, "invalid macro definition for %s\n", string_content(defname)); + string_del(defname); + vector_del(mtoken, m.toks); + argid_map_del(args); + goto preproc_hash_err; + } + // tok is ')', empty destructor + tok = ppsrc_next_token(src); + } + if (tok.tokt == PPTOK_BLANK) { + // BLANK has no destructor + tok = ppsrc_next_token(src); + } + // All tokens until INVALID/NL/EOF are macro content + int state = 0; +#define ST_CONCAT 1 +#define ST_STR 2 + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + if ((tok.tokt == PPTOK_SYM) && (tok.tokv.sym == SYM_HASH)) { + if (state & ST_STR) { + log_warning(&tok.loginfo, "duplicated stringify in macro definition (defining %s)\n", string_content(defname)); + } else { + state |= ST_STR; + } + // Empty destructor + tok = ppsrc_next_token(src); + continue; + } + if ((tok.tokt == PPTOK_SYM) && (tok.tokv.sym == SYM_HASHHASH)) { + if (state & ST_CONCAT) { + log_warning(&tok.loginfo, "duplicated concatenation in macro definition (defining %s)\n", string_content(defname)); + } else if (!vector_size(mtoken, m.toks)) { + log_warning(&tok.loginfo, "invalid concatenation at start of macro definition (defining %s)\n", string_content(defname)); + } else { + state |= ST_CONCAT; + } + // Empty destructor + tok = ppsrc_next_token(src); + continue; + } + mtoken_t *mtok; + unsigned argid = -1u; + if (m.is_funlike && ((tok.tokt == PPTOK_IDENT) || (tok.tokt == PPTOK_IDENT_UNEXP))) { + khiter_t kh_k = kh_get(argid_map, args, string_content(tok.tokv.str)); + if (kh_k != kh_end(args)) { + string_del(tok.tokv.str); // Token freed + argid = kh_val(args, kh_k); + } + } + if (argid != -1u) { + mtok = mtoken_new_arg(argid, state & ST_STR); + if (!mtok) { + log_memory("failed to allocate new m-token (defining %s)\n", string_content(defname)); + string_del(defname); + macro_del(&m); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = tok.tokv.c; + return ret; + } + state &= ~ST_STR; + } else { + mtok = mtoken_new_token(tok); // Token moved + if (!mtok) { + log_memory("failed to allocate new m-token (defining %s)\n", string_content(defname)); + string_del(defname); + macro_del(&m); + if (tok.tokt == PPTOK_NEWLINE) goto check_next_token; + else goto start_cur_token; + } + if (state & ST_STR) { + log_warning(&tok.loginfo, "invalid stringify before token (defining %s)\n", string_content(defname)); + state &= ~ST_STR; + } + } + if (state & ST_CONCAT) { + mtoken_t *mtok2 = vector_last(mtoken, m.toks); // Guaranteed to exist before setting ST_CONCAT + mtok = mtoken_new_concat(mtok2, mtok); + if (!mtok) { + log_memory("failed to allocate new m-token concatenation (defining %s)\n", string_content(defname)); + string_del(defname); + macro_del(&m); + vector_pop_nodel(mtoken, m.toks); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = tok.tokv.c; + return ret; + } + vector_last(mtoken, m.toks) = mtok; + state &= ~ST_CONCAT; + } else { + if (!vector_push(mtoken, m.toks, mtok)) { + log_memory("failed to add m-token (defining %s)\n", string_content(defname)); + string_del(defname); + macro_del(&m); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = tok.tokv.c; + return ret; + } + } + // mtok moved to the vector + tok = ppsrc_next_token(src); + } +#undef ST_CONCAT +#undef ST_STR + if (args) argid_map_del(args); + if (tok.tokt == PPTOK_INVALID) { + // Abort + log_error(&tok.loginfo, "unexpected invalid input token\n"); + string_del(defname); + macro_del(&m); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = tok.tokv.c; + return ret; + } else { + // NL and EOF have empty destructors + khiter_t kh_k; + int iret; + char *mname_dup = string_steal(defname); + kh_k = kh_put(string_set, src->macros_defined, mname_dup, &iret); + if (iret < 0) { + // Abort + log_memory("failed to remember macro %s as defined, aborting\n", mname_dup); + free(mname_dup); + macro_del(&m); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = tok.tokv.c; + return ret; + } else if (iret > 0) { + mname_dup = strdup(mname_dup); + } + kh_k = kh_put(macros_map, src->macros_map, mname_dup, &iret); + if (iret < 0) { + // Abort + log_memory("failed to remember macro %s, aborting\n", mname_dup); + free(mname_dup); + macro_del(&m); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = tok.tokv.c; + return ret; + } else if (iret == 0) { + // Ignore + // Too noisy log_warning(&tok.loginfo, "Duplicated macro %s\n", mname_dup); + free(mname_dup); + macro_del(&m); + } else { + kh_val(src->macros_map, kh_k) = m; + } + if (tok.tokt == PPTOK_NEWLINE) goto check_next_token; + else goto start_cur_token; + } + } else if (!strcmp(string_content(tok.tokv.str), "undef")) { + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) { + log_error(&tok.loginfo, "invalid token type %u after '#undef' preprocessor command\n", tok.tokt); + goto preproc_hash_err; + } + string_t *mname = tok.tokv.str; + tok = ppsrc_next_token(src); // Token was moved + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + // TODO: Print warning 'ignored token(s)' + preproc_token_del(&tok); + tok = ppsrc_next_token(src); + } + khiter_t it = kh_get(macros_map, src->macros_map, string_content(mname)); + if (it != kh_end(src->macros_map)) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-qual" + free((void*)kh_key(src->macros_map, it)); +#pragma GCC diagnostic pop + macro_del(&kh_val(src->macros_map, it)); + kh_del(macros_map, src->macros_map, it); + } + string_del(mname); + if (tok.tokt == PPTOK_NEWLINE) goto check_next_token; + else goto start_cur_token; + } else if (!strcmp(string_content(tok.tokv.str), "error")) { + log_error(&tok.loginfo, "#error command:"); + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + switch (tok.tokt) { + case PPTOK_IDENT: + case PPTOK_IDENT_UNEXP: + printf(" %s", string_content(tok.tokv.str)); + break; + case PPTOK_SYM: + printf("%s%s", (tok.tokv.sym == SYM_COMMA) ? "" : " ", sym2str[tok.tokv.sym]); + break; + case PPTOK_STRING: + printf(" %c%s%c", tok.tokv.sisstr ? '"' : '\'', string_content(tok.tokv.sstr), tok.tokv.sisstr ? '"' : '\''); + break; + + case PPTOK_INVALID: + case PPTOK_NUM: + case PPTOK_INCL: + case PPTOK_NEWLINE: + case PPTOK_BLANK: + case PPTOK_START_LINE_COMMENT: + case PPTOK_EOF: + default: + printf(" ", tok.tokt); + } + preproc_token_del(&tok); + tok = ppsrc_next_token(src); + } + printf("\n"); + vector_clear(ppsource, src->prep); + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = (char)EOF; + return ret; + } else if (!strcmp(string_content(tok.tokv.str), "warning")) { + log_warning(&tok.loginfo, "#warning command:"); + tok = ppsrc_next_token(src); + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + switch (tok.tokt) { + case PPTOK_IDENT: + case PPTOK_IDENT_UNEXP: + printf(" %s", string_content(tok.tokv.str)); + break; + case PPTOK_SYM: + printf("%s%s", (tok.tokv.sym == SYM_COMMA) ? "" : " ", sym2str[tok.tokv.sym]); + break; + case PPTOK_STRING: + printf(" %c%s%c", tok.tokv.sisstr ? '"' : '\'', string_content(tok.tokv.sstr), tok.tokv.sisstr ? '"' : '\''); + break; + + case PPTOK_INVALID: + case PPTOK_NUM: + case PPTOK_INCL: + case PPTOK_NEWLINE: + case PPTOK_BLANK: + case PPTOK_START_LINE_COMMENT: + case PPTOK_EOF: + default: + printf(" ", tok.tokt); + } + preproc_token_del(&tok); + tok = ppsrc_next_token(src); + } + printf("\n"); + goto preproc_hash_err; + } else if (!strcmp(string_content(tok.tokv.str), "pragma")) { + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) { + log_error(&tok.loginfo, "unknown pragma directive, skipping until EOL\n"); + goto preproc_hash_err; + } else if (!strcmp(string_content(tok.tokv.str), "once")) { + const char *fname = tok.loginfo.filename; + if (!vector_push(ccharp, src->pragma_once, fname)) { + log_memory("failed to add filename to #pragma once list\n"); + vector_clear(ppsource, src->prep); + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = (char)EOF; + return ret; + } + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + goto preproc_hash_err; + } else if (!strcmp(string_content(tok.tokv.str), "wrappers")) { + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) { + log_error(&tok.loginfo, "unknown pragma wrappers directive, skipping until EOL\n"); + goto preproc_hash_err; + } else if (!strcmp(string_content(tok.tokv.str), "allow_ints_ext")) { + ret.loginfo = tok.loginfo; + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + preproc_token_del(&tok); + tok = ppsrc_next_token(src); + } + if (tok.tokt == PPTOK_INVALID) goto start_cur_token; + else { + ret.tokt = PTOK_PRAGMA; + ret.tokv.pragma.typ = PRAGMA_ALLOW_INTS; + return ret; + } + } else if (!strcmp(string_content(tok.tokv.str), "mark_simple")) { + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) { + log_error(&tok.loginfo, "invalid pragma wrappers explicit_simple directive, skipping until EOL\n"); + goto preproc_hash_err; + } + src->st = PPST_NL; + ret.tokt = PTOK_PRAGMA; + ret.loginfo = tok.loginfo; + ret.tokv.pragma.typ = PRAGMA_SIMPLE_SU; + ret.tokv.pragma.val = tok.tokv.str; + tok = ppsrc_next_token(src); + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + preproc_token_del(&tok); + tok = ppsrc_next_token(src); + } + if (tok.tokt == PPTOK_INVALID) { + string_del(ret.tokv.pragma.val); + goto start_cur_token; + } else { + return ret; + } + } else if (!strcmp(string_content(tok.tokv.str), "type_letters")) { + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) { + log_error(&tok.loginfo, "invalid pragma wrappers explicit_simple directive, skipping until EOL\n"); + goto preproc_hash_err; + } + src->st = PPST_PRAGMA_EXPLICIT; + ret.tokt = PTOK_PRAGMA; + ret.loginfo = tok.loginfo; + ret.tokv.pragma.typ = PRAGMA_EXPLICIT_CONV; + ret.tokv.pragma.val = tok.tokv.str; + return ret; + } else if (!strcmp(string_content(tok.tokv.str), "type_letters_exact")) { + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) { + log_error(&tok.loginfo, "invalid pragma wrappers explicit_simple directive, skipping until EOL\n"); + goto preproc_hash_err; + } + src->st = PPST_PRAGMA_EXPLICIT; + ret.tokt = PTOK_PRAGMA; + ret.loginfo = tok.loginfo; + ret.tokv.pragma.typ = PRAGMA_EXPLICIT_CONV_STRICT; + ret.tokv.pragma.val = tok.tokv.str; + return ret; + } else { + log_error(&tok.loginfo, "unknown pragma wrappers directive '%s', skipping until EOL\n", string_content(tok.tokv.str)); + goto preproc_hash_err; + } + } else { + log_error(&tok.loginfo, "unknown pragma directive '%s', skipping until EOL\n", string_content(tok.tokv.str)); + goto preproc_hash_err; + } + } else if (!strcmp(string_content(tok.tokv.str), "if")) { + if (vector_last(ppsource, src->prep).srct != PPSRC_PREPARE) { + log_error(&tok.loginfo, "invalid #if source type %u\n", vector_last(ppsource, src->prep).srct); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + string_del(tok.tokv.str); + VECTOR(preproc) *cond = vector_new(preproc); + if (!cond) { + log_memory("failed to allocate #if condition vector\n"); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + tok = ppsrc_next_token(src); + loginfo_t li = tok.loginfo; + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + if (!vector_push(preproc, cond, tok)) { + log_memory("failed to add token to #if condition vector\n"); + vector_del(preproc, cond); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + li.lineno_end = tok.loginfo.lineno_end ? tok.loginfo.lineno_end : tok.loginfo.lineno; + li.colno_end = tok.loginfo.colno_end ? tok.loginfo.colno_end : tok.loginfo.colno; + tok = ppsrc_next_token(src); + } + vector_trim(preproc, cond); + khash_t(string_set) *solved_macros = kh_init(string_set); + if (!solved_macros) { + log_memory("failed to allocate #if solved_macros set\n"); + vector_del(preproc, cond); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + + VECTOR(preproc) *expanded = preproc_do_expand(&li, src->macros_map, cond, solved_macros, src->macros_used); + vector_del(preproc, cond); + macros_set_del(solved_macros); + if (!expanded) { + log_error(&li, "Error: failed to expand #if condition\n"); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + + // Now we need to compute what is pointed by expanded, and increase cond_depth and ok_depth as needed + int st; + int64_t res = preproc_eval(expanded, &st, src->target->size_long == 4); + vector_del(preproc, expanded); + if (!st) { + log_error(&li, "Error: failed to evaluate #if condition\n"); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } + ++vector_last(ppsource, src->prep).srcv.prep.cond_depth; + if (res) { + ++vector_last(ppsource, src->prep).srcv.prep.ok_depth; + if (tok.tokt == PPTOK_NEWLINE) goto check_next_token; + else goto start_cur_token; + } else { + vector_last(ppsource, src->prep).srcv.prep.entered_next_ok_cond = 0; + if (tok.tokt == PPTOK_NEWLINE) goto check_if_depth; + else goto start_cur_token; // Returns immediately + } + } else if (!strcmp(string_content(tok.tokv.str), "ifdef")) { + if (vector_last(ppsource, src->prep).srct != PPSRC_PREPARE) { + log_error(&tok.loginfo, "invalid #ifdef source type %u\n", vector_last(ppsource, src->prep).srct); + goto preproc_hash_err; + } + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) { + log_error(&tok.loginfo, "invalid token type %u after '#ifdef' preprocessor command\n", tok.tokt); + goto preproc_hash_err; + } + khiter_t it = kh_get(macros_map, src->macros_map, string_content(tok.tokv.str)); + int iret; + char *mname = string_steal(tok.tokv.str); + kh_put(string_set, src->macros_used, mname, &iret); + if (iret <= 0) { + free(mname); + } + tok.tokt = PPTOK_SYM; + tok.tokv.sym = LAST_SYM; + // We don't care about iret(?) + // TODO: check iret, error if needed + ++vector_last(ppsource, src->prep).srcv.prep.cond_depth; + if (it != kh_end(src->macros_map)) { + ++vector_last(ppsource, src->prep).srcv.prep.ok_depth; + goto preproc_hash_err; + } else { + vector_last(ppsource, src->prep).srcv.prep.entered_next_ok_cond = 0; + goto preproc_hash_err_goto; + } + } else if (!strcmp(string_content(tok.tokv.str), "ifndef")) { + if (vector_last(ppsource, src->prep).srct != PPSRC_PREPARE) { + log_error(&tok.loginfo, "invalid #ifndef source type %u\n", vector_last(ppsource, src->prep).srct); + goto preproc_hash_err; + } + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + if ((tok.tokt != PPTOK_IDENT) && (tok.tokt != PPTOK_IDENT_UNEXP)) { + log_error(&tok.loginfo, "invalid token type %u after '#ifndef' preprocessor command\n", tok.tokt); + goto preproc_hash_err; + } + khiter_t it = kh_get(macros_map, src->macros_map, string_content(tok.tokv.str)); + int iret; + char *mname = string_steal(tok.tokv.str); + kh_put(string_set, src->macros_used, mname, &iret); + if (iret <= 0) { + free(mname); + } + tok.tokt = PPTOK_SYM; + tok.tokv.sym = LAST_SYM; + // We don't care about iret(?) + // TODO: check iret, error if needed + ++vector_last(ppsource, src->prep).srcv.prep.cond_depth; + if (it == kh_end(src->macros_map)) { + ++vector_last(ppsource, src->prep).srcv.prep.ok_depth; + goto preproc_hash_err; + } else { + vector_last(ppsource, src->prep).srcv.prep.entered_next_ok_cond = 0; + goto preproc_hash_err_goto; + } + } else if (!strcmp(string_content(tok.tokv.str), "elif")) { + // We are already in an #if or #elif (or #else) with a match, so we need to leave it and go to the very top + if (vector_last(ppsource, src->prep).srct != PPSRC_PREPARE) { + log_error(&tok.loginfo, "invalid #elif source type %u\n", vector_last(ppsource, src->prep).srct); + goto preproc_hash_err; + } + if (vector_last(ppsource, src->prep).srcv.prep.ok_depth) { + vector_last(ppsource, src->prep).srcv.prep.entered_next_ok_cond = 1; + --vector_last(ppsource, src->prep).srcv.prep.ok_depth; + goto preproc_hash_err_goto; + } else { + log_warning(&tok.loginfo, "unexpected #elif preprocessor command\n"); + goto preproc_hash_err; + } + } else if (!strcmp(string_content(tok.tokv.str), "elifdef")) { + // We are already in an #if or #elif (or #else) with a match, so we need to leave it and go to the very top + if (vector_last(ppsource, src->prep).srct != PPSRC_PREPARE) { + log_error(&tok.loginfo, "invalid #elifdef source type %u\n", vector_last(ppsource, src->prep).srct); + goto preproc_hash_err; + } + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + int iret; + char *mname = string_steal(tok.tokv.str); + kh_put(string_set, src->macros_used, mname, &iret); + if (iret <= 0) { + free(mname); + } + tok.tokt = PPTOK_SYM; + tok.tokv.sym = LAST_SYM; + // We don't care about iret(?) + // TODO: check iret, error if needed + if (vector_last(ppsource, src->prep).srcv.prep.ok_depth) { + vector_last(ppsource, src->prep).srcv.prep.entered_next_ok_cond = 1; + --vector_last(ppsource, src->prep).srcv.prep.ok_depth; + goto preproc_hash_err_goto; + } else { + log_warning(&tok.loginfo, "unexpected #elifdef preprocessor command\n"); + goto preproc_hash_err; + } + } else if (!strcmp(string_content(tok.tokv.str), "elifndef")) { + // We are already in an #if or #elif (or #else) with a match, so we need to leave it and go to the very top + if (vector_last(ppsource, src->prep).srct != PPSRC_PREPARE) { + log_error(&tok.loginfo, "invalid #elifndef source type %u\n", vector_last(ppsource, src->prep).srct); + goto preproc_hash_err; + } + string_del(tok.tokv.str); + tok = ppsrc_next_token(src); + int iret; + char *mname = string_steal(tok.tokv.str); + kh_put(string_set, src->macros_used, mname, &iret); + if (iret <= 0) { + free(mname); + } + tok.tokt = PPTOK_SYM; + tok.tokv.sym = LAST_SYM; + // We don't care about iret(?) + // TODO: check iret, error if needed + if (vector_last(ppsource, src->prep).srcv.prep.ok_depth) { + vector_last(ppsource, src->prep).srcv.prep.entered_next_ok_cond = 1; + --vector_last(ppsource, src->prep).srcv.prep.ok_depth; + goto preproc_hash_err_goto; + } else { + log_warning(&tok.loginfo, "unexpected #elifndef preprocessor command\n"); + goto preproc_hash_err; + } + } else if (!strcmp(string_content(tok.tokv.str), "else")) { + // We are already in an #if or #elif (or #else) with a match, so we need to leave it and go to the very top + if (vector_last(ppsource, src->prep).srct != PPSRC_PREPARE) { + log_error(&tok.loginfo, "invalid #else source type %u\n", vector_last(ppsource, src->prep).srct); + goto preproc_hash_err; + } + if (vector_last(ppsource, src->prep).srcv.prep.ok_depth) { + // We can safely ignore setting entered_next_ok since two #else is illegal (though this parser doesn't actually detect this) + --vector_last(ppsource, src->prep).srcv.prep.ok_depth; + goto preproc_hash_err_goto; + } else { + log_warning(&tok.loginfo, "unexpected #else preprocessor command\n"); + goto preproc_hash_err; + } + } else if (!strcmp(string_content(tok.tokv.str), "endif")) { + if (vector_last(ppsource, src->prep).srct != PPSRC_PREPARE) { + log_error(&tok.loginfo, "invalid #endif source type %u\n", vector_last(ppsource, src->prep).srct); + goto preproc_hash_err; + } + if (vector_last(ppsource, src->prep).srcv.prep.ok_depth) { + --vector_last(ppsource, src->prep).srcv.prep.ok_depth; + --vector_last(ppsource, src->prep).srcv.prep.cond_depth; + } else { + log_warning(&tok.loginfo, "unexpected #endif preprocessor command\n"); + } + goto preproc_hash_err; + } + + log_warning(&tok.loginfo, "Unknown preprocessor command %s, skipping until EOL\n", string_content(tok.tokv.str)); + preproc_hash_err: + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + preproc_token_del(&tok); + tok = ppsrc_next_token(src); + } + if (tok.tokt == PPTOK_NEWLINE) goto check_next_token; + else goto start_cur_token; + + preproc_hash_err_goto: + while ((tok.tokt != PPTOK_NEWLINE) && (tok.tokt != PPTOK_EOF) && (tok.tokt != PPTOK_INVALID)) { + preproc_token_del(&tok); + tok = ppsrc_next_token(src); + } + if (tok.tokt == PPTOK_NEWLINE) goto check_if_depth; + else goto start_cur_token; // Returns immediately + } + src->st = (src->st == PPST_PRAGMA_EXPLICIT) ? PPST_PRAGMA_EXPLICIT : PPST_NONE; + ret.tokt = PTOK_SYM; + ret.loginfo = tok.loginfo; + ret.tokv.sym = tok.tokv.sym; + return ret; + case PPTOK_NEWLINE: + if (src->st == PPST_PRAGMA_EXPLICIT) { + src->st = PPST_NL; + ret.tokt = PTOK_SYM; + ret.loginfo = tok.loginfo; + ret.tokv.sym = SYM_SEMICOLON; + return ret; + } + src->st = PPST_NL; + goto check_next_token; + case PPTOK_BLANK: + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = tok.tokv.c; + return ret; + case PPTOK_START_LINE_COMMENT: + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = tok.tokv.c; + return ret; + case PPTOK_EOF: + if ((vector_last(ppsource, src->prep).srct == PPSRC_PREPARE) && vector_last(ppsource, src->prep).srcv.prep.cond_depth) { + log_warning(&tok.loginfo, "file ended before closing all conditionals (ignoring)\n"); + } +#ifdef LOG_CLOSE + printf("Closing %s\n", src->cur_file); +#endif + if (vector_last(ppsource, src->prep).srct == PPSRC_PREPARE) { + if (src->dirname) free(src->dirname); + if (src->cur_file) free(src->cur_file); + src->dirname = vector_last(ppsource, src->prep).srcv.prep.old_dirname; + src->cur_file = vector_last(ppsource, src->prep).srcv.prep.old_filename; + src->is_sys = vector_last(ppsource, src->prep).srcv.prep.was_sys; + src->cur_pathno = vector_last(ppsource, src->prep).srcv.prep.old_pathno; + vector_last(ppsource, src->prep).srcv.prep.old_dirname = NULL; + vector_last(ppsource, src->prep).srcv.prep.old_filename = NULL; + } + vector_pop(ppsource, src->prep); + if (src->st == PPST_PRAGMA_EXPLICIT) { + src->st = PPST_NL; + ret.tokt = PTOK_SYM; + ret.loginfo = (loginfo_t){0}; // The token's loginfo may have been deleted by the vector_pop above + ret.tokv.sym = SYM_SEMICOLON; + // Empty destructor + return ret; + } + src->st = PPST_NL; // Should be redundant since TOK_NEWLINE is added before TOK_EOF if required + // EOF has an empty destructor + // Note that since we have opened the file, the previous file also had ok_depth == cond_depth + goto check_next_token; + + default: + log_error(&tok.loginfo, "unknown preprocessor token type %u, sending INVALID\n", tok.tokt); + ret.tokt = PTOK_INVALID; + ret.loginfo = tok.loginfo; + ret.tokv.c = '\0'; + return ret; + } +} +proc_token_t proc_next_token(preproc_t *src) { + proc_token_t ret = proc_next_token_aux(src); + if ((ret.tokt == PTOK_STRING) && ret.tokv.sisstr) { + while (1) { + proc_token_t ret2 = proc_next_token_aux(src); + if ((ret2.tokt == PTOK_STRING) && ret2.tokv.sisstr) { + if (!string_add_string(ret.tokv.sstr, ret2.tokv.sstr)) { + log_memory("failed to concatenate adjacent strings\n"); + string_del(ret.tokv.sstr); + string_del(ret2.tokv.sstr); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.tokv.c = '\0'; + return ret; + } + string_del(ret2.tokv.sstr); + ret.loginfo.lineno_end = ret2.loginfo.lineno_end ? ret2.loginfo.lineno_end : ret2.loginfo.lineno; + ret.loginfo.colno_end = ret2.loginfo.colno_end ? ret2.loginfo.colno_end : ret2.loginfo.colno; + } else { + if (!proc_unget_token(src, &ret2)) { + log_memory("failed to unget token next to string token\n"); + string_del(ret.tokv.sstr); + proc_token_del(&ret2); + src->st = PPST_NONE; + ret.tokt = PTOK_INVALID; + ret.tokv.c = '\0'; + return ret; + } + return ret; + } + } + } else return ret; +} diff --git a/wrapperhelper/src/preproc.h b/wrapperhelper/src/preproc.h new file mode 100644 index 0000000000000000000000000000000000000000..e76f450fc98055a503d1c2058a102e4317b5bc6c --- /dev/null +++ b/wrapperhelper/src/preproc.h @@ -0,0 +1,18 @@ +#pragma once + +#ifndef PREPROC_H +#define PREPROC_H + +#include + +#include "lang.h" +#include "machine.h" + +typedef struct preproc_s preproc_t; + +preproc_t *preproc_new_file(machine_t *target, FILE *f, char *dirname, const char *filename); // Takes ownership of f and dirname +proc_token_t proc_next_token(preproc_t *src); +int proc_unget_token(preproc_t *src, proc_token_t *tok); +void preproc_del(preproc_t *src); + +#endif // PREPROC_H diff --git a/wrapperhelper/src/vector.c b/wrapperhelper/src/vector.c new file mode 100644 index 0000000000000000000000000000000000000000..d1604e6ddd6ba810ba89938eafc6dc5b152c139b --- /dev/null +++ b/wrapperhelper/src/vector.c @@ -0,0 +1,108 @@ +#include "vector.h" + +VECTOR_IMPL(voidp, (void)) +VECTOR_IMPL(char, (void)) +VECTOR_IMPL(charp, (void)) +VECTOR_IMPL(ccharp, (void)) +static void stringp_del(string_t **s) { return string_del(*s); } +VECTOR_IMPL(string, stringp_del) + +VECTOR(voidp) *vector_new_impl(void) { + VECTOR(voidp) *ret = malloc(sizeof(*ret)); + if (!ret) return NULL; + ret->vsize = ret->vcap = 0; ret->content_v = NULL; + return ret; +} + +VECTOR(voidp) *vector_new_cap_impl(size_t elem_size, size_t cap) { + if (!cap) return vector_new_impl(); + VECTOR(voidp) *ret = malloc(sizeof(*ret)); + if (!ret) return NULL; + cap = (cap < VECTOR_MIN_CAP) ? VECTOR_MIN_CAP : cap * 2; + ret->content_v = malloc(cap * elem_size); + if (!ret->content_v) { + free(ret); + return NULL; + } + ret->vcap = cap; + ret->vsize = 0; + return ret; +} + +int vector_reserve_impl(VECTOR(voidp) *v, size_t elem_size, size_t cap) { + size_t new_cap = (cap < VECTOR_MIN_CAP) ? VECTOR_MIN_CAP : cap; + if (new_cap <= v->vcap) return 1; + + void *new_content_v = realloc(v->content_v, elem_size * new_cap); + if (!new_content_v) return 0; + v->content_v = new_content_v; + v->vcap = new_cap; + return 1; +} + +int vector_trim_impl(VECTOR(voidp) *v, size_t elem_size) { + if (v->vsize == v->vcap) return 1; + if (v->vsize) { + void *new_content_v = realloc(v->content_v, elem_size * v->vsize); + if (!new_content_v) return 0; + v->content_v = new_content_v; + v->vcap = v->vsize; + return 1; + } else { + free(v->content_v); + v->content_v = NULL; + v->vcap = 0; + return 1; + } +} + +void vector_common_pop_impl(VECTOR(voidp) *v, size_t elem_size) { + if (--v->vsize < v->vcap / 4) { + size_t new_cap = (v->vcap / 2 < VECTOR_MIN_CAP) ? VECTOR_MIN_CAP : v->vcap / 2; + if (new_cap == v->vcap) return; + void *new_content_v = realloc(v->content_v, elem_size * new_cap); + if (!new_content_v) return; // We don't really care if the realloc fails, we just need to not update anything + v->content_v = new_content_v; + v->vcap = new_cap; + } +} + +void vector_common_popn_impl(VECTOR(voidp) *v, size_t n, size_t elem_size) { + if (n > v->vsize) n = v->vsize; + v->vsize -= n; + if (v->vsize < v->vcap / 4) { + size_t new_cap = v->vcap / 2; + while (v->vsize < new_cap / 4) new_cap /= 2; + new_cap = (new_cap < VECTOR_MIN_CAP) ? VECTOR_MIN_CAP : new_cap; + if (new_cap == v->vcap) return; + void *new_content_v = realloc(v->content_v, elem_size * new_cap); + if (!new_content_v) return; // We don't really care if the realloc fails, we just need to not update anything + v->content_v = new_content_v; + v->vcap = new_cap; + } +} + +void vector_common_clear_impl(VECTOR(voidp) *v) { + if (!v->content_v) return; + free(v->content_v); + v->vsize = v->vcap = 0; v->content_v = NULL; +} + +int vector_push_vec_impl(VECTOR(voidp) *v1, VECTOR(voidp) *v2, size_t start, size_t len, size_t elem_size) { + if (start >= v2->vsize) return 1; + if (start + len > v2->vsize) len = v2->vsize - start; + if (!len) return 1; + if (v1->vsize + len > v1->vcap) { + size_t new_cap = (v1->vcap < VECTOR_MIN_CAP) ? VECTOR_MIN_CAP : v1->vcap * 2; + while (v1->vsize + len > new_cap) { + new_cap = new_cap * 2; + } + void *new_content_v = realloc(v1->content_v, elem_size * new_cap); + if (!new_content_v) return 0; + v1->content_v = new_content_v; + v1->vcap = new_cap; + } + memcpy((char*)v1->content_v + elem_size * v1->vsize, (char*)v2->content_v + elem_size * start, elem_size * len); + v1->vsize += len; + return 1; +} diff --git a/wrapperhelper/src/vector.h b/wrapperhelper/src/vector.h new file mode 100644 index 0000000000000000000000000000000000000000..5573b9acc5509dc06db79629c71ff5d5b176803e --- /dev/null +++ b/wrapperhelper/src/vector.h @@ -0,0 +1,214 @@ +#pragma once + +#ifndef VECTOR_H +#define VECTOR_H + +#include +#include +#include +#include + +#include "cstring.h" + +// Note: do not use with empty types; simply use ints in this case. + +/** Thread-unsafe vector implementation + * USAGE: + * ====== + * VECTOR_DECLARE ----------- Declare a new vector type. Takes the name and the element type. + * VECTOR_IMPL -------------- Implements required functions for a vector type. Takes the name and the destructor of a pointer to the element. + * VECTOR_DECLARE_STATIC ---- Declare a new vector type with static implementation. Takes the name and the element type. + * VECTOR_IMPL_STATIC ------- Implements required functions for a vector type. Takes the name and the destructor of a pointer to the element. + * Functions are declared static. + * VECTOR_DEL --------------- Macro that takes the vector name and gives a function taking a vector and deletes it. + * VECTOR ------------------- The vector type. Takes the name. + * VECTOR_ELEM -------------- The element type. Takes the name. + * vector_new --------------- Creates a new vector. Takes the name. + * vector_new_cap ----------- Creates a new vector with a given capacity. Takes the name and the capacity. + * vector_reserve ----------- Ensures a vector has at least a given capacity. Takes the name, the vector and the capacity. May not reduce the vector capacity. + * vector_trim -------------- Ensures a vector has a capacity equal to its size. Takes the name and the vector. May reduce the vector capacity. + * vector_del --------------- Frees a vector. Takes the name and the vector. Destructs the content of the vector. + * vector_steal ------------- Frees a vector and returns the content. Takes the name and the vector. May reduce the vector capacity. + * vector_del_freed --------- Frees a vector without freeing the content. Takes the name and the vector. Does not interact with the content of the vector. + * vector_del_free_from ----- Frees a vector without freeing all of the content. Takes the name, the vector and the first element to free. + * Destroys part of the content of the vector. + * vector_push -------------- Push a new element. Takes the name, the vector and the new element. Does not fail if enough capacity remains. + * vector_push_vec ---------- Push a vector of new elements. Takes the name, the vector and the new element vector. Does not fail if enough capacity remains. + * vector_push_vec_slice ---- Push a slice of a vector of elements. Takes the name, the vector the new element vector, start and size. + * Does not fail if enough capacity remains. + * vector_pop --------------- Pops the last element. Takes the name and the vector. May reduce the vector capacity. + * vector_pop_nodel --------- Pops the last element without freeing it. Takes the name and the vector. May reduce the vector capacity. + * vector_pop_slice --------- Pops the last N element. Takes the name, the vector and the number of elements to remove. + * vector_pop_nodel_slice --- Pops the last N element without freeing them. Takes the name, the vector and the number of elements to remove. + * May reduce the vector capacity. + * vector_clear ------------- Remove every element. Takes the name and the vector. + * vector_clear_nodel ------- Remove every element without freeing them. Takes the name and the vector. + * vector_remove ------------ Removes an element. Takes the name, the vector and the element number. May reduce the vector capacity. + * vector_size -------------- Vector size (number of elements). Takes the name and the vector. + * vector_cap --------------- Vector capacity (number of elements). Takes the name and the vector. + * vector_content ----------- Pointer to the vector content. Takes the name and the vector. + * vector_begin ------------- Start of the vector content. Takes the name and the vector. + * vector_end --------------- End of the vector content. Points to unmanaged memory. Takes the name and the vector. + * vector_last -------------- Last element of the vector. Points to invalid memory if size is zero. Takes the name and the vector. + * vector_for --------------- Iterate over the elements of a vector. This is a for loop. Takes the name, the iterator name and the vector. + * + * VECTOR_DEL(name)(v) is equivalent to vector_del(name, v). + * Predefined vectors: string (string_t*), char (char), charp (char*), voidp (void*) + * + * EXAMPLE: + * ======== + * Header myvec.h: + * --------------- +// ... +VECTOR_DECLARE(myvec, my_elem_t*) +// ... + + * Source myvec.c: + * --------------- +// ... +VECTOR_IMPL(myvec) +// ... + + * Source main.c: + * ------------------- +// ... +extern my_elem_t elems[2]; +int main() { + VECTOR(myvec) *vec = vector_new_cap(myvec, 2); + vector_push(myvec, vec, &elems[0]); + vector_push(myvec, vec, &elems[1]); + vector_for (myvec, it, vec) { + printf("We have an element: %s\n", it->elem_name); + } + vector_del(myvec, vec); +} + */ + +#define VECTOR(name) vector_##name##_t +#define VECTOR_ELEM(name) vector_##name##_elem + +#define VECTOR_MIN_CAP 8 + +#define VECTOR_DECLARE_(name, t, pre) \ + typedef struct vector_##name##_s { \ + size_t vsize; \ + size_t vcap; \ + union { \ + t *content; \ + void *content_v; \ + }; \ + } VECTOR(name); \ + typedef t VECTOR_ELEM(name); \ + pre VECTOR_ELEM(name) *vector_steal_##name(VECTOR(name) *v); \ + pre void vector_pop_del_##name(VECTOR(name) *v); \ + pre void vector_popn_del_##name(VECTOR(name) *v, size_t idx); \ + pre void vector_clear_del_##name(VECTOR(name) *v); \ + pre void vector_del_from_##name(VECTOR(name) *v, size_t idx); \ + pre int vector_push_elem_##name(VECTOR(name) *v, VECTOR_ELEM(name) elem); +#define VECTOR_DECLARE(name, t) VECTOR_DECLARE_(name, t,) +#define VECTOR_DECLARE_STATIC(name, t) VECTOR_DECLARE_(name, t, static) + +VECTOR_DECLARE(voidp, void*) + +VECTOR(voidp) *vector_new_impl(void); +VECTOR(voidp) *vector_new_cap_impl(size_t elem_size, size_t cap); +int vector_reserve_impl(VECTOR(voidp) *v, size_t elem_size, size_t cap); +int vector_trim_impl(VECTOR(voidp) *v, size_t elem_size); +void vector_common_pop_impl(VECTOR(voidp) *v, size_t elem_size); +void vector_common_popn_impl(VECTOR(voidp) *v, size_t n, size_t elem_size); +void vector_common_clear_impl(VECTOR(voidp) *v); +int vector_push_vec_impl(VECTOR(voidp) *v1, VECTOR(voidp) *v2, size_t start, size_t len, size_t elem_size); + +#define vector_new(name) (VECTOR(name)*)vector_new_impl() +#define vector_new_cap(name, cap) (VECTOR(name)*)vector_new_cap_impl(sizeof(VECTOR_ELEM(name)), (cap)) +#define vector_del(name, v) vector_del_from_##name((v), 0) +#define vector_del_freed(name, v) vector_del_from_##name((v), vector_size(name, (v))) +#define vector_del_free_from(name, v, i) vector_del_from_##name((v), (i)) +#define VECTOR_DEL(name) vector_del_##name +#define vector_steal(name, v) vector_steal_##name((v)) +#define vector_reserve(name, v, cap) vector_reserve_impl((VECTOR(voidp)*)(v), sizeof(VECTOR_ELEM(name)), (cap)) +#define vector_trim(name, v) vector_trim_impl((VECTOR(voidp)*)(v), sizeof(VECTOR_ELEM(name))) +#define vector_push(name, v, e) vector_push_elem_##name((v), (e)) +#define vector_push_vec(name, v1, v2) vector_push_vec_impl((VECTOR(voidp)*)(v1), (VECTOR(voidp)*)(v2), 0, vector_size(name, (v2)), sizeof(VECTOR_ELEM(name))) +#define vector_push_vec_slice(name, v1, v2, s, l) vector_push_vec_impl((VECTOR(voidp)*)(v1), (VECTOR(voidp)*)(v2), (s), (l), sizeof(VECTOR_ELEM(name))) +#define vector_pop(name, v) vector_pop_del_##name((v)) +#define vector_pop_slice(name, v, n) vector_popn_del_##name((VECTOR(voidp)*)(v), (n)) +#define vector_pop_nodel(name, v) vector_common_pop_impl((VECTOR(voidp)*)(v), sizeof(VECTOR_ELEM(name))) +#define vector_pop_nodel_slice(name, v, n) vector_common_popn_impl((VECTOR(voidp)*)(v), (n), sizeof(VECTOR_ELEM(name))) +#define vector_clear(name, v) vector_clear_del_##name((v)) +#define vector_clear_nodel(name, v) vector_common_clear_impl((VECTOR(voidp)*)(v)) +#define vector_remove(name, v, i) vector_remove_##name((v), (i)) + +#define vector_size(name, v) ((v)->vsize) +#define vector_cap(name, v) ((v)->vcap) +#define vector_content(name, v) ((v)->content) +#define vector_begin(name, v) ((v)->content) +#define vector_end(name, v) ((v)->content + (v)->vsize) +#define vector_last(name, v) ((v)->content[(v)->vsize - 1]) +#define vector_for(name, itname, v) \ + for (VECTOR_ELEM(name) *itname = vector_begin(name, (v)); itname < vector_end(name, (v)); ++itname) +#define vector_for_from(name, itname, v, i) \ + for (VECTOR_ELEM(name) *itname = vector_begin(name, (v)) + (i); itname < vector_end(name, (v)); ++itname) +#define vector_for_rev(name, itname, v) \ + for (VECTOR_ELEM(name) *itname = (v)->content ? vector_end(name, (v)) - 1 : NULL; (v)->content && (itname >= vector_begin(name, (v))); --itname) + +#define VECTOR_IMPL_(name, dtor, pre) \ + pre VECTOR_ELEM(name) *vector_steal_##name(VECTOR(name) *v) { \ + vector_trim(name, v); \ + VECTOR_ELEM(name) *ret = v->content; \ + free(v); \ + return ret; \ + } \ + \ + pre void vector_pop_del_##name(VECTOR(name) *v) { \ + if (v->vsize) { \ + dtor(&vector_last(name, v)); \ + vector_common_pop_impl((VECTOR(voidp)*)v, sizeof(VECTOR_ELEM(name))); \ + } \ + } \ + pre void vector_popn_del_##name(VECTOR(name) *v, size_t n) { \ + if (v->vsize > n) n = v->vsize; \ + vector_for_from(name, it, v, v->vsize - n) { dtor(it); } \ + vector_common_popn_impl((VECTOR(voidp)*)v, n, sizeof(VECTOR_ELEM(name))); \ + } \ + \ + pre void vector_remove_##name(VECTOR(name) *v, size_t i) { \ + dtor(v->content + i); \ + memmove(v->content + i, v->content + i + 1, (v->vsize - i - 1) * sizeof(VECTOR_ELEM(name))); \ + vector_common_pop_impl((VECTOR(voidp)*)v, sizeof(VECTOR_ELEM(name))); \ + } \ + \ + pre void vector_clear_del_##name(VECTOR(name) *v) { \ + if (!v->content) return; \ + vector_for(name, it, v) { dtor(it); } \ + free(v->content); \ + v->content = NULL; \ + v->vcap = v->vsize = 0; \ + } \ + \ + pre void vector_del_from_##name(VECTOR(name) *v, size_t idx) { \ + vector_for_from(name, it, v, idx) { dtor(it); } \ + if (v->content) free(v->content); \ + free(v); \ + } \ + \ + pre int vector_push_elem_##name(VECTOR(name) *v, VECTOR_ELEM(name) elem) { \ + if (v->vsize >= v->vcap) { \ + size_t new_cap = (v->vcap < VECTOR_MIN_CAP) ? VECTOR_MIN_CAP : v->vcap * 2; \ + VECTOR_ELEM(name) *new_content = realloc(v->content, sizeof(VECTOR_ELEM(name)) * new_cap); \ + if (!new_content) return 0; \ + v->content = new_content; \ + v->vcap = new_cap; \ + } \ + v->content[v->vsize++] = elem; \ + return 1; \ + } +#define VECTOR_IMPL(name, dtor) VECTOR_IMPL_(name, dtor,) +#define VECTOR_IMPL_STATIC(name, dtor) VECTOR_IMPL_(name, dtor, static inline) + +VECTOR_DECLARE(char, char) +VECTOR_DECLARE(charp, char*) +VECTOR_DECLARE(ccharp, const char*) +VECTOR_DECLARE(string, string_t*) + +#endif // VECTOR_H diff --git a/wrapperhelper/utils.h b/wrapperhelper/utils.h deleted file mode 100644 index 06acbb7290f3df3f72cbf5aa3091dbf32e352639..0000000000000000000000000000000000000000 --- a/wrapperhelper/utils.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -static const clang::Type* StripTypedef(clang::QualType type) { - if (type->isTypedefNameType()) { - return StripTypedef(type->getAs()->getDecl()->getUnderlyingType()); - } else { - return type.getTypePtr(); - } -} - -// FIXME: Need to support other triple except default target triple -static std::string GetDeclHeaderFile(clang::ASTContext& Ctx, clang::Decl* Decl) { - const auto& SourceManager = Ctx.getSourceManager(); - const clang::FileID FileID = SourceManager.getFileID(Decl->getBeginLoc()); - const clang::FileEntry *FileEntry = SourceManager.getFileEntryForID(FileID); - if (FileEntry) { - return FileEntry->getName().str(); - } - return ""; -} \ No newline at end of file diff --git a/x86lib/libcrypto.so.1.0.0 b/x86lib/libcrypto.so.1.0.0 new file mode 100644 index 0000000000000000000000000000000000000000..70f33b805fb9af680780a5ae178b62fbc69e758e Binary files /dev/null and b/x86lib/libcrypto.so.1.0.0 differ diff --git a/x86lib/libgcc_s.so.1 b/x86lib/libgcc_s.so.1 new file mode 100755 index 0000000000000000000000000000000000000000..27b054853cc37f1f89f1677c761e6cff6569dfd2 Binary files /dev/null and b/x86lib/libgcc_s.so.1 differ diff --git a/x86lib/libpng12.so.0 b/x86lib/libpng12.so.0 new file mode 100644 index 0000000000000000000000000000000000000000..3eb1d0c11ad5c6d5f73b88b8c21c4087efad8269 Binary files /dev/null and b/x86lib/libpng12.so.0 differ diff --git a/x86lib/libssl.so.1.0.0 b/x86lib/libssl.so.1.0.0 new file mode 100644 index 0000000000000000000000000000000000000000..6034e111487cf7110af39cc9f1dd313c4d73dd31 Binary files /dev/null and b/x86lib/libssl.so.1.0.0 differ diff --git a/x86lib/libstdc++.so.5 b/x86lib/libstdc++.so.5 new file mode 100644 index 0000000000000000000000000000000000000000..7e586f0afd46d10daf4f6818df9bf3cbb316c4af Binary files /dev/null and b/x86lib/libstdc++.so.5 differ diff --git a/x86lib/libstdc++.so.6 b/x86lib/libstdc++.so.6 new file mode 100755 index 0000000000000000000000000000000000000000..f26626c067e82bfe68ff579a331a4ac961c700f6 Binary files /dev/null and b/x86lib/libstdc++.so.6 differ diff --git a/x86lib/libunwind.so.8 b/x86lib/libunwind.so.8 new file mode 100644 index 0000000000000000000000000000000000000000..593a1df0379daf3c24132683c7454b2fe3db6f4b Binary files /dev/null and b/x86lib/libunwind.so.8 differ diff --git a/x86lib/libz.so.1 b/x86lib/libz.so.1 new file mode 100644 index 0000000000000000000000000000000000000000..c475585a911baff259103473ba5b7a736267519d Binary files /dev/null and b/x86lib/libz.so.1 differ